diff --git a/.github/actions/build_extensions/action.yml b/.github/actions/build_extensions/action.yml index 5584eb2a937f..ffc23425b982 100644 --- a/.github/actions/build_extensions/action.yml +++ b/.github/actions/build_extensions/action.yml @@ -116,6 +116,17 @@ runs: ls -al pwd + - name: Fix for MSVC issue (see e.g. https://github.com/TileDB-Inc/TileDB/pull/4759) + shell: bash + if: inputs.deploy_as == 'windows_amd64' + env: + OVERLAY_TRIPLET_SRC: ${{ github.workspace }}/vcpkg/triplets/community/x64-windows-static-md.cmake + OVERLAY_TRIPLET_DST: ${{ github.workspace }}/overlay_triplets/x64-windows-static-md.cmake + run: | + mkdir overlay_triplets + cp $OVERLAY_TRIPLET_SRC $OVERLAY_TRIPLET_DST + echo "set(VCPKG_PLATFORM_TOOLSET_VERSION "14.38")" >> $OVERLAY_TRIPLET_DST + - name: Set Openssl dir if: inputs.openssl_path != '' shell: bash @@ -144,6 +155,7 @@ runs: GEN: ${{ inputs.ninja == 1 && 'ninja' || '' }} USE_MERGED_VCPKG_MANIFEST: 1 DUCKDB_PLATFORM: ${{ inputs.duckdb_arch }} + VCPKG_OVERLAY_TRIPLETS: "${{ github.workspace }}/overlay_triplets" run: | ls mkdir -p ~/.ssh diff --git a/.github/config/extensions.csv b/.github/config/extensions.csv index ee69aedcb791..8c4d1e0adfed 100644 --- a/.github/config/extensions.csv +++ b/.github/config/extensions.csv @@ -7,11 +7,11 @@ json,,, parquet,,, tpcds,,, tpch,,, -sqlite_scanner,https://github.com/duckdb/sqlite_scanner,3443b2999ae1e68a108568fd32145705237a5760, -postgres_scanner,https://github.com/duckdb/postgres_scanner,844f46536b5d5f9e65b57b7ff92f4ce3346e2829, -substrait,https://github.com/duckdb/substrait,5d621b1d7d16fe86f8b1930870c8e6bf05bcb92a,no-windows -arrow,https://github.com/duckdb/arrow,1b5b9649d28cd7f79496fb3f2e4dd7b03bf90ac5,no-windows +sqlite_scanner,https://github.com/duckdb/sqlite_scanner,c1343464ef4397665b858db9c193d33fac591b1c, +postgres_scanner,https://github.com/duckdb/postgres_scanner,883a8f1a8a487264855a5166f7df1f46ad386434, +substrait,https://github.com/duckdb/substrait,e75ba6a9a43d75d8c72ecc38e6f751fd8e3474a0,no-windows +arrow,https://github.com/duckdb/arrow,9e10240da11f61ea7fbfe3fc9988ffe672ccd40f,no-windows aws,https://github.com/duckdb/duckdb_aws,348ae2625de86ab760f80a43eb76e4441cd01354, azure,https://github.com/duckdb/duckdb_azure,1fe568d3eb3c8842118e395ba8031e2a8566daed, -spatial,https://github.com/duckdb/duckdb_spatial,b9a517f344988658aef57210f3d99c0aef2450f2, +spatial,https://github.com/duckdb/duckdb_spatial,b9cd1904a2d243b9937294ae94d4c38e7ad289f4, iceberg,https://github.com/duckdb/duckdb_iceberg,51ba9564859698c29db4165f17143a2f6af2bb18, diff --git a/.github/config/out_of_tree_extensions.cmake b/.github/config/out_of_tree_extensions.cmake index 2709fc5221c8..f2d5996e52c7 100644 --- a/.github/config/out_of_tree_extensions.cmake +++ b/.github/config/out_of_tree_extensions.cmake @@ -10,8 +10,7 @@ if (NOT WIN32) duckdb_extension_load(arrow LOAD_TESTS DONT_LINK GIT_URL https://github.com/duckdb/arrow - GIT_TAG 1b5b9649d28cd7f79496fb3f2e4dd7b03bf90ac5 - APPLY_PATCHES + GIT_TAG 9e10240da11f61ea7fbfe3fc9988ffe672ccd40f ) endif() @@ -20,7 +19,7 @@ if (NOT MINGW) duckdb_extension_load(aws LOAD_TESTS GIT_URL https://github.com/duckdb/duckdb_aws - GIT_TAG af729d027e57175c5496a2d7dfef68833e6d6cd3 + GIT_TAG 043890c2ad83c4a1375417e2d5d085a33f79a217 ) endif() @@ -29,7 +28,7 @@ if (NOT MINGW) duckdb_extension_load(azure LOAD_TESTS GIT_URL https://github.com/duckdb/duckdb_azure - GIT_TAG 10d4cf6a0ed00ea8aecb9bf1433fdfff166e6c44 + GIT_TAG 3ad0348334d2a263e5f19ef08fd02311bdae82f3 ) endif() @@ -56,8 +55,7 @@ if (NOT MINGW) duckdb_extension_load(postgres_scanner DONT_LINK GIT_URL https://github.com/duckdb/postgres_scanner - GIT_TAG ce22bc41da1b876a8d541e013251712cae886ea8 - APPLY_PATCHES + GIT_TAG 883a8f1a8a487264855a5166f7df1f46ad386434 ) endif() @@ -66,10 +64,9 @@ if (NOT MINGW) duckdb_extension_load(spatial DONT_LINK LOAD_TESTS GIT_URL https://github.com/duckdb/duckdb_spatial.git - GIT_TAG b9a517f344988658aef57210f3d99c0aef2450f2 + GIT_TAG b9cd1904a2d243b9937294ae94d4c38e7ad289f4 INCLUDE_DIR spatial/include TEST_DIR test/sql - APPLY_PATCHES ) endif() @@ -84,8 +81,7 @@ endif() duckdb_extension_load(sqlite_scanner ${STATIC_LINK_SQLITE} LOAD_TESTS GIT_URL https://github.com/duckdb/sqlite_scanner - GIT_TAG 9b558ed2e933817bff96726fec0868e7411cee65 - APPLY_PATCHES + GIT_TAG c1343464ef4397665b858db9c193d33fac591b1c ) ################# SUBSTRAIT @@ -93,7 +89,7 @@ if (NOT WIN32) duckdb_extension_load(substrait LOAD_TESTS DONT_LINK GIT_URL https://github.com/duckdb/substrait - GIT_TAG 52ff1cab21e97053999bfeec83d1da976b94ef57 + GIT_TAG 870bab8725d1123905296bfb1f35ce737434e0b3 APPLY_PATCHES ) endif() diff --git a/.github/patches/extensions/arrow/merged_patch.patch b/.github/patches/extensions/arrow/merged_patch.patch deleted file mode 100644 index e64c509f6e7a..000000000000 --- a/.github/patches/extensions/arrow/merged_patch.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/src/arrow_scan_ipc.cpp b/src/arrow_scan_ipc.cpp -index dc6e8a7..7d5b2ff 100644 ---- a/src/arrow_scan_ipc.cpp -+++ b/src/arrow_scan_ipc.cpp -@@ -53,7 +53,7 @@ unique_ptr ArrowIPCTableFunction::ArrowScanBind(ClientContext &co - - // TODO Everything below this is identical to the bind in duckdb/src/function/table/arrow.cpp - auto &data = *res; -- stream_factory_get_schema(stream_factory_ptr, data.schema_root); -+ stream_factory_get_schema((ArrowArrayStream *) stream_factory_ptr, data.schema_root.arrow_schema); - for (idx_t col_idx = 0; col_idx < (idx_t) data.schema_root.arrow_schema.n_children; col_idx++) { - auto &schema = *data.schema_root.arrow_schema.children[col_idx]; - if (!schema.release) { -@@ -75,7 +75,7 @@ unique_ptr ArrowIPCTableFunction::ArrowScanBind(ClientContext &co - } - names.push_back(name); - } -- ArrowTableFunction::RenameArrowColumns(names); -+ QueryResult::DeduplicateColumns(names); - return std::move(res); - } - diff --git a/.github/patches/extensions/postgres_scanner/create_info_refactor.patch b/.github/patches/extensions/postgres_scanner/create_info_refactor.patch deleted file mode 100644 index 16ade5849f3b..000000000000 --- a/.github/patches/extensions/postgres_scanner/create_info_refactor.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff --git a/src/include/storage/postgres_schema_entry.hpp b/src/include/storage/postgres_schema_entry.hpp -index 0145156..ab9d20b 100644 ---- a/src/include/storage/postgres_schema_entry.hpp -+++ b/src/include/storage/postgres_schema_entry.hpp -@@ -18,8 +18,8 @@ class PostgresTransaction; - - class PostgresSchemaEntry : public SchemaCatalogEntry { - public: -- PostgresSchemaEntry(Catalog &catalog, string name); -- PostgresSchemaEntry(Catalog &catalog, string name, unique_ptr tables, -+ PostgresSchemaEntry(Catalog &catalog, CreateSchemaInfo &info); -+ PostgresSchemaEntry(Catalog &catalog, CreateSchemaInfo &info, unique_ptr tables, - unique_ptr enums, unique_ptr composite_types, - unique_ptr indexes); - -@@ -44,6 +44,8 @@ public: - void DropEntry(ClientContext &context, DropInfo &info) override; - optional_ptr GetEntry(CatalogTransaction transaction, CatalogType type, const string &name) override; - -+ static bool SchemaIsInternal(const string &name); -+ - private: - void AlterTable(PostgresTransaction &transaction, RenameTableInfo &info); - void AlterTable(PostgresTransaction &transaction, RenameColumnInfo &info); -@@ -54,8 +56,6 @@ private: - - PostgresCatalogSet &GetCatalogSet(CatalogType type); - -- static bool SchemaIsInternal(const string &name); -- - private: - PostgresTableSet tables; - PostgresIndexSet indexes; -diff --git a/src/storage/postgres_schema_entry.cpp b/src/storage/postgres_schema_entry.cpp -index 06d8847..49e89c6 100644 ---- a/src/storage/postgres_schema_entry.cpp -+++ b/src/storage/postgres_schema_entry.cpp -@@ -13,15 +13,15 @@ - - namespace duckdb { - --PostgresSchemaEntry::PostgresSchemaEntry(Catalog &catalog, string name) -- : SchemaCatalogEntry(catalog, name, SchemaIsInternal(name)), tables(*this), indexes(*this), types(*this) { -+PostgresSchemaEntry::PostgresSchemaEntry(Catalog &catalog, CreateSchemaInfo &info) -+ : SchemaCatalogEntry(catalog, info), tables(*this), indexes(*this), types(*this) { - } - --PostgresSchemaEntry::PostgresSchemaEntry(Catalog &catalog, string name, unique_ptr tables, -+PostgresSchemaEntry::PostgresSchemaEntry(Catalog &catalog, CreateSchemaInfo &info, unique_ptr tables, - unique_ptr enums, - unique_ptr composite_types, - unique_ptr indexes) -- : SchemaCatalogEntry(catalog, name, SchemaIsInternal(name)), tables(*this, std::move(tables)), -+ : SchemaCatalogEntry(catalog, info), tables(*this, std::move(tables)), - indexes(*this, std::move(indexes)), types(*this, std::move(enums), std::move(composite_types)) { - } - -diff --git a/src/storage/postgres_schema_set.cpp b/src/storage/postgres_schema_set.cpp -index 5b41277..2c3c85f 100644 ---- a/src/storage/postgres_schema_set.cpp -+++ b/src/storage/postgres_schema_set.cpp -@@ -61,8 +61,11 @@ void PostgresSchemaSet::LoadEntries(ClientContext &context) { - for (idx_t row = 0; row < rows; row++) { - auto oid = result->GetInt64(row, 0); - auto schema_name = result->GetString(row, 1); -+ CreateSchemaInfo info; -+ info.schema = schema_name; -+ info.internal = PostgresSchemaEntry::SchemaIsInternal(schema_name); - auto schema = -- make_uniq(catalog, schema_name, std::move(tables[row]), std::move(enums[row]), -+ make_uniq(catalog, info, std::move(tables[row]), std::move(enums[row]), - std::move(composite_types[row]), std::move(indexes[row])); - CreateEntry(std::move(schema)); - } -@@ -73,7 +76,9 @@ optional_ptr PostgresSchemaSet::CreateSchema(ClientContext &contex - - string create_sql = "CREATE SCHEMA " + KeywordHelper::WriteQuoted(info.schema, '"'); - transaction.Query(create_sql); -- auto schema_entry = make_uniq(catalog, info.schema); -+ auto info_copy = info.Copy(); -+ info.internal = PostgresSchemaEntry::SchemaIsInternal(info_copy->schema); -+ auto schema_entry = make_uniq(catalog, info_copy->Cast()); - return CreateEntry(std::move(schema_entry)); - } - diff --git a/.github/patches/extensions/postgres_scanner/new_attach_param.patch b/.github/patches/extensions/postgres_scanner/new_attach_param.patch deleted file mode 100644 index 24285ab14def..000000000000 --- a/.github/patches/extensions/postgres_scanner/new_attach_param.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/postgres_storage.cpp b/src/postgres_storage.cpp -index d569f2c..8837840 100644 ---- a/src/postgres_storage.cpp -+++ b/src/postgres_storage.cpp -@@ -7,8 +7,9 @@ - - namespace duckdb { - --static unique_ptr PostgresAttach(StorageExtensionInfo *storage_info, AttachedDatabase &db, const string &name, -- AttachInfo &info, AccessMode access_mode) { -+static unique_ptr PostgresAttach(StorageExtensionInfo *storage_info, ClientContext &context, -+ AttachedDatabase &db, const string &name, AttachInfo &info, -+ AccessMode access_mode) { - return make_uniq(db, info.path, access_mode); - } - diff --git a/.github/patches/extensions/postgres_scanner/transaction_rework.patch b/.github/patches/extensions/postgres_scanner/transaction_rework.patch deleted file mode 100644 index c01d798fd5a4..000000000000 --- a/.github/patches/extensions/postgres_scanner/transaction_rework.patch +++ /dev/null @@ -1,69 +0,0 @@ -diff --git a/duckdb b/duckdb -index 5b39151..8548e1a 160000 ---- a/duckdb -+++ b/duckdb -@@ -1 +1 @@ --Subproject commit 5b391512a8fc7800a0c22d98714e6d8f25c002cf -+Subproject commit 8548e1a6d676bdc0225e821872b0ae675c46e47c -diff --git a/src/include/storage/postgres_transaction_manager.hpp b/src/include/storage/postgres_transaction_manager.hpp -index b4ac2da..24b82b4 100644 ---- a/src/include/storage/postgres_transaction_manager.hpp -+++ b/src/include/storage/postgres_transaction_manager.hpp -@@ -20,7 +20,7 @@ public: - PostgresTransactionManager(AttachedDatabase &db_p, PostgresCatalog &postgres_catalog); - - Transaction &StartTransaction(ClientContext &context) override; -- string CommitTransaction(ClientContext &context, Transaction &transaction) override; -+ ErrorData CommitTransaction(ClientContext &context, Transaction &transaction) override; - void RollbackTransaction(Transaction &transaction) override; - - void Checkpoint(ClientContext &context, bool force = false) override; -diff --git a/src/postgres_filter_pushdown.cpp b/src/postgres_filter_pushdown.cpp -index af04909..4f72573 100644 ---- a/src/postgres_filter_pushdown.cpp -+++ b/src/postgres_filter_pushdown.cpp -@@ -78,10 +78,6 @@ string PostgresFilterPushdown::TransformFilters(const vector &column_i - auto column_name = KeywordHelper::WriteQuoted(names[column_ids[entry.first]], '"'); - auto &filter = *entry.second; - --// if (filter.filter_type == TableFilterType::STRUCT_EXTRACT) { --// column_name = StringUtil::Format("(%s)", column_name.c_str()); --// } -- - result += TransformFilter(column_name, filter); - } - return result; -diff --git a/src/storage/postgres_transaction_manager.cpp b/src/storage/postgres_transaction_manager.cpp -index e1b89e6..d546c29 100644 ---- a/src/storage/postgres_transaction_manager.cpp -+++ b/src/storage/postgres_transaction_manager.cpp -@@ -16,12 +16,12 @@ Transaction &PostgresTransactionManager::StartTransaction(ClientContext &context - return result; - } - --string PostgresTransactionManager::CommitTransaction(ClientContext &context, Transaction &transaction) { -+ErrorData PostgresTransactionManager::CommitTransaction(ClientContext &context, Transaction &transaction) { - auto &postgres_transaction = transaction.Cast(); - postgres_transaction.Commit(); - lock_guard l(transaction_lock); - transactions.erase(transaction); -- return string(); -+ return ErrorData(); - } - - void PostgresTransactionManager::RollbackTransaction(Transaction &transaction) { -diff --git a/test/sql/storage/attach_filter_pushdown.test b/test/sql/storage/attach_filter_pushdown.test -index 8c8c295..f36ff60 100644 ---- a/test/sql/storage/attach_filter_pushdown.test -+++ b/test/sql/storage/attach_filter_pushdown.test -@@ -6,8 +6,8 @@ require postgres_scanner - - require-env POSTGRES_TEST_DATABASE_AVAILABLE - --#statement ok --#PRAGMA enable_verification -+statement ok -+PRAGMA enable_verification - - statement ok - ATTACH 'dbname=postgresscanner' AS s1 (TYPE POSTGRES) diff --git a/.github/patches/extensions/spatial/copy_bind.patch b/.github/patches/extensions/spatial/copy_bind.patch deleted file mode 100644 index 1c54c75fc1e4..000000000000 --- a/.github/patches/extensions/spatial/copy_bind.patch +++ /dev/null @@ -1,118 +0,0 @@ -diff --git a/spatial/src/spatial/core/functions/cast/geometry_cast.cpp b/spatial/src/spatial/core/functions/cast/geometry_cast.cpp -index af7f030..20883c0 100644 ---- a/spatial/src/spatial/core/functions/cast/geometry_cast.cpp -+++ b/spatial/src/spatial/core/functions/cast/geometry_cast.cpp -@@ -3,7 +3,7 @@ - #include "spatial/core/functions/cast.hpp" - #include "spatial/core/geometry/geometry.hpp" - #include "spatial/core/functions/common.hpp" -- -+#include "duckdb/common/exception/conversion_exception.hpp" - #include "duckdb/function/cast/cast_function_set.hpp" - #include "duckdb/common/vector_operations/generic_executor.hpp" - -@@ -40,11 +40,11 @@ static bool GeometryToPoint2DCast(Vector &source, Vector &result, idx_t count, C - GenericExecutor::ExecuteUnary(source, result, count, [&](GEOMETRY_TYPE &geometry) { - auto geom = lstate.factory.Deserialize(geometry.val); - if (geom.Type() != GeometryType::POINT) { -- throw CastException("Cannot cast non-point GEOMETRY to POINT_2D"); -+ throw ConversionException("Cannot cast non-point GEOMETRY to POINT_2D"); - } - auto &point = geom.GetPoint(); - if (point.IsEmpty()) { -- throw CastException("Cannot cast empty point GEOMETRY to POINT_2D"); -+ throw ConversionException("Cannot cast empty point GEOMETRY to POINT_2D"); - } - auto vertex = point.GetVertex(); - return POINT_TYPE {vertex.x, vertex.y}; -@@ -92,7 +92,7 @@ static bool GeometryToLineString2DCast(Vector &source, Vector &result, idx_t cou - UnaryExecutor::Execute(source, result, count, [&](string_t &geom) { - auto geometry = lstate.factory.Deserialize(geom); - if (geometry.Type() != GeometryType::LINESTRING) { -- throw CastException("Cannot cast non-linestring GEOMETRY to LINESTRING_2D"); -+ throw ConversionException("Cannot cast non-linestring GEOMETRY to LINESTRING_2D"); - } - - auto &line = geometry.GetLineString(); -@@ -157,7 +157,7 @@ static bool GeometryToPolygon2DCast(Vector &source, Vector &result, idx_t count, - UnaryExecutor::Execute(source, result, count, [&](string_t &geom) { - auto geometry = lstate.factory.Deserialize(geom); - if (geometry.Type() != GeometryType::POLYGON) { -- throw CastException("Cannot cast non-linestring GEOMETRY to POLYGON_2D"); -+ throw ConversionException("Cannot cast non-linestring GEOMETRY to POLYGON_2D"); - } - - auto &poly = geometry.GetPolygon(); -diff --git a/spatial/src/spatial/gdal/functions/st_read.cpp b/spatial/src/spatial/gdal/functions/st_read.cpp -index eecc020..5cf3159 100644 ---- a/spatial/src/spatial/gdal/functions/st_read.cpp -+++ b/spatial/src/spatial/gdal/functions/st_read.cpp -@@ -39,7 +39,7 @@ struct WKBSpatialFilter : SpatialFilter { - explicit WKBSpatialFilter(const string &wkb_p) : SpatialFilter(SpatialFilterType::Wkb), geom(nullptr) { - auto ok = OGR_G_CreateFromWkb(wkb_p.c_str(), nullptr, &geom, (int)wkb_p.size()); - if (ok != OGRERR_NONE) { -- throw Exception("WKBSpatialFilter: could not create geometry from WKB"); -+ throw InvalidInputException("WKBSpatialFilter: could not create geometry from WKB"); - } - } - ~WKBSpatialFilter() { -diff --git a/spatial/src/spatial/gdal/functions/st_write.cpp b/spatial/src/spatial/gdal/functions/st_write.cpp -index 8ab228d..1a1e821 100644 ---- a/spatial/src/spatial/gdal/functions/st_write.cpp -+++ b/spatial/src/spatial/gdal/functions/st_write.cpp -@@ -55,14 +55,14 @@ struct GlobalState : public GlobalFunctionData { - //===--------------------------------------------------------------------===// - // Bind - //===--------------------------------------------------------------------===// --static unique_ptr Bind(ClientContext &context, const CopyInfo &info, const vector &names, -+static unique_ptr Bind(ClientContext &context, CopyFunctionBindInput &input, const vector &names, - const vector &sql_types) { - -- auto bind_data = make_uniq(info.file_path, sql_types, names); -+ auto bind_data = make_uniq(input.info.file_path, sql_types, names); - - // check all the options in the copy info - // and set -- for (auto &option : info.options) { -+ for (auto &option : input.info.options) { - if (StringUtil::Upper(option.first) == "DRIVER") { - auto set = option.second.front(); - if (set.type().id() == LogicalTypeId::VARCHAR) { -diff --git a/spatial/src/spatial/geos/functions/cast.cpp b/spatial/src/spatial/geos/functions/cast.cpp -index e6d5cb8..1c87af3 100644 ---- a/spatial/src/spatial/geos/functions/cast.cpp -+++ b/spatial/src/spatial/geos/functions/cast.cpp -@@ -6,6 +6,7 @@ - - #include "duckdb/function/cast/cast_function_set.hpp" - #include "duckdb/common/operator/cast_operators.hpp" -+#include "duckdb/common/error_data.hpp" - - namespace spatial { - -@@ -54,9 +55,10 @@ static bool TextToGeometryCast(Vector &source, Vector &result, idx_t count, Cast - throw InvalidInputException("3D/4D geometries are not supported"); - } - return lstate.ctx.Serialize(result, geos_geom); -- } catch (InvalidInputException &error) { -+ } catch (InvalidInputException &e) { - if (success) { - success = false; -+ ErrorData error(e); - HandleCastError::AssignError(error.RawMessage(), parameters.error_message); - } - mask.SetInvalid(idx); -diff --git a/spatial/src/spatial/geos/functions/scalar/st_normalize.cpp b/spatial/src/spatial/geos/functions/scalar/st_normalize.cpp -index f44d990..e90fa2e 100644 ---- a/spatial/src/spatial/geos/functions/scalar/st_normalize.cpp -+++ b/spatial/src/spatial/geos/functions/scalar/st_normalize.cpp -@@ -21,8 +21,7 @@ static void NormalizeFunction(DataChunk &args, ExpressionState &state, Vector &r - auto geom = lstate.ctx.Deserialize(input); - auto res = GEOSNormalize_r(ctx, geom.get()); - if (res == -1) { -- throw Exception("Could not normalize geometry"); -- ; -+ throw InvalidInputException("Could not normalize geometry"); - } - return lstate.ctx.Serialize(result, geom); - }); diff --git a/.github/patches/extensions/sqlite_scanner/combined.patch b/.github/patches/extensions/sqlite_scanner/combined.patch deleted file mode 100644 index c4e30a1bb4fe..000000000000 --- a/.github/patches/extensions/sqlite_scanner/combined.patch +++ /dev/null @@ -1,116 +0,0 @@ -diff --git a/duckdb b/duckdb -index a056c8e..8548e1a 160000 ---- a/duckdb -+++ b/duckdb -@@ -1 +1 @@ --Subproject commit a056c8e0a29f2f38d245afeb9e48cc308711aa21 -+Subproject commit 8548e1a6d676bdc0225e821872b0ae675c46e47c -diff --git a/src/include/storage/sqlite_schema_entry.hpp b/src/include/storage/sqlite_schema_entry.hpp -index 2052584..5bd82b3 100644 ---- a/src/include/storage/sqlite_schema_entry.hpp -+++ b/src/include/storage/sqlite_schema_entry.hpp -@@ -15,7 +15,7 @@ class SQLiteTransaction; - - class SQLiteSchemaEntry : public SchemaCatalogEntry { - public: -- SQLiteSchemaEntry(Catalog &catalog); -+ SQLiteSchemaEntry(Catalog &catalog, CreateSchemaInfo &info); - - public: - optional_ptr CreateTable(CatalogTransaction transaction, BoundCreateTableInfo &info) override; -diff --git a/src/include/storage/sqlite_transaction_manager.hpp b/src/include/storage/sqlite_transaction_manager.hpp -index 4982eef..8f9cafc 100644 ---- a/src/include/storage/sqlite_transaction_manager.hpp -+++ b/src/include/storage/sqlite_transaction_manager.hpp -@@ -20,7 +20,7 @@ public: - SQLiteTransactionManager(AttachedDatabase &db_p, SQLiteCatalog &sqlite_catalog); - - Transaction &StartTransaction(ClientContext &context) override; -- string CommitTransaction(ClientContext &context, Transaction &transaction) override; -+ ErrorData CommitTransaction(ClientContext &context, Transaction &transaction) override; - void RollbackTransaction(Transaction &transaction) override; - - void Checkpoint(ClientContext &context, bool force = false) override; -diff --git a/src/storage/sqlite_catalog.cpp b/src/storage/sqlite_catalog.cpp -index fad530c..c7918cf 100644 ---- a/src/storage/sqlite_catalog.cpp -+++ b/src/storage/sqlite_catalog.cpp -@@ -1,8 +1,10 @@ - #include "storage/sqlite_catalog.hpp" -+#include "duckdb/parser/parsed_data/create_schema_info.hpp" -+#include "duckdb/storage/database_size.hpp" -+#include "sqlite_db.hpp" - #include "storage/sqlite_schema_entry.hpp" - #include "storage/sqlite_transaction.hpp" --#include "sqlite_db.hpp" --#include "duckdb/storage/database_size.hpp" -+#include "duckdb/common/exception/transaction_exception.hpp" - - namespace duckdb { - -@@ -17,7 +19,8 @@ SQLiteCatalog::~SQLiteCatalog() { - } - - void SQLiteCatalog::Initialize(bool load_builtin) { -- main_schema = make_uniq(*this); -+ CreateSchemaInfo info; -+ main_schema = make_uniq(*this, info); - } - - optional_ptr SQLiteCatalog::CreateSchema(CatalogTransaction transaction, CreateSchemaInfo &info) { -diff --git a/src/storage/sqlite_schema_entry.cpp b/src/storage/sqlite_schema_entry.cpp -index 7c4059e..21f38cf 100644 ---- a/src/storage/sqlite_schema_entry.cpp -+++ b/src/storage/sqlite_schema_entry.cpp -@@ -15,7 +15,7 @@ - - namespace duckdb { - --SQLiteSchemaEntry::SQLiteSchemaEntry(Catalog &catalog) : SchemaCatalogEntry(catalog, DEFAULT_SCHEMA, true) { -+SQLiteSchemaEntry::SQLiteSchemaEntry(Catalog &catalog, CreateSchemaInfo &info) : SchemaCatalogEntry(catalog, info) { - } - - SQLiteTransaction &GetSQLiteTransaction(CatalogTransaction transaction) { -diff --git a/src/storage/sqlite_transaction_manager.cpp b/src/storage/sqlite_transaction_manager.cpp -index 7b6e132..d800794 100644 ---- a/src/storage/sqlite_transaction_manager.cpp -+++ b/src/storage/sqlite_transaction_manager.cpp -@@ -16,12 +16,12 @@ Transaction &SQLiteTransactionManager::StartTransaction(ClientContext &context) - return result; - } - --string SQLiteTransactionManager::CommitTransaction(ClientContext &context, Transaction &transaction) { -+ErrorData SQLiteTransactionManager::CommitTransaction(ClientContext &context, Transaction &transaction) { - auto &sqlite_transaction = transaction.Cast(); - sqlite_transaction.Commit(); - lock_guard l(transaction_lock); - transactions.erase(transaction); -- return string(); -+ return ErrorData(); - } - - void SQLiteTransactionManager::RollbackTransaction(Transaction &transaction) { -diff --git a/test/sql/storage/attach_schema_functions.test b/test/sql/storage/attach_schema_functions.test -index 6356265..fef18fe 100644 ---- a/test/sql/storage/attach_schema_functions.test -+++ b/test/sql/storage/attach_schema_functions.test -@@ -20,13 +20,13 @@ CREATE INDEX i_index ON s.main.integers(j) - statement ok - CREATE VIEW s.v1 AS SELECT 42 AS a; - --query IIIII --SELECT * REPLACE (trim(split(sql, '(')[1]) AS sql) FROM sqlite_master ORDER BY 1, 2 -+query IIII -+SELECT * EXCLUDE (sql) FROM sqlite_master ORDER BY 1, 2 - ---- --index i_index integers 0 CREATE INDEX i_index ON integers --index sqlite_autoindex_integers_1 integers 0 NULL --table integers integers 0 CREATE TABLE integers --view v1 v1 0 CREATE VIEW v1 -+index i_index integers 0 -+index sqlite_autoindex_integers_1 integers 0 -+table integers integers 0 -+view v1 v1 0 - - query IIII - SELECT database_name, table_name, has_primary_key, estimated_size FROM duckdb_tables() diff --git a/.github/patches/extensions/sqlite_scanner/new_attach_param.patch b/.github/patches/extensions/sqlite_scanner/new_attach_param.patch deleted file mode 100644 index e47252f219fd..000000000000 --- a/.github/patches/extensions/sqlite_scanner/new_attach_param.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/sqlite_storage.cpp b/src/sqlite_storage.cpp -index d65bf18..ad72003 100644 ---- a/src/sqlite_storage.cpp -+++ b/src/sqlite_storage.cpp -@@ -12,8 +12,9 @@ - - namespace duckdb { - --static unique_ptr SQLiteAttach(StorageExtensionInfo *storage_info, AttachedDatabase &db, const string &name, -- AttachInfo &info, AccessMode access_mode) { -+static unique_ptr SQLiteAttach(StorageExtensionInfo *storage_info, ClientContext &context, -+ AttachedDatabase &db, const string &name, AttachInfo &info, -+ AccessMode access_mode) { - return make_uniq(db, info.path, access_mode); - } - diff --git a/.github/patches/extensions/substrait/disable_tpch.patch b/.github/patches/extensions/substrait/disable_tpch.patch deleted file mode 100644 index 55d4c660675d..000000000000 --- a/.github/patches/extensions/substrait/disable_tpch.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/test/sql/test_substrait_tpch.test b/test/sql/test_substrait_tpch.test -index ffa2666..10f815b 100644 ---- a/test/sql/test_substrait_tpch.test -+++ b/test/sql/test_substrait_tpch.test -@@ -2,6 +2,14 @@ - # description: Test get_substrait with TPC-H queries - # group: [sql] - -+# test skipped since PR https://github.com/duckdb/duckdb/pull/9993 -+# the PR re-introduces DelimJoins in TPC-H again for performance reasons -+# if there is a selection in the duplicate-eliminated side, we keep the DelimJoin -+# this is checked in Deliminator::HasSelection -+# if this function returns false, all DelimJoins are removed from TPC-H -+ -+mode skip -+ - require substrait - - require tpch diff --git a/.github/patches/extensions/substrait/http_state.patch b/.github/patches/extensions/substrait/http_state.patch deleted file mode 100644 index 965c893d485c..000000000000 --- a/.github/patches/extensions/substrait/http_state.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/src/from_substrait.cpp b/src/from_substrait.cpp -index d65e91a..6e1e9ed 100644 ---- a/src/from_substrait.cpp -+++ b/src/from_substrait.cpp -@@ -64,10 +64,9 @@ std::string SubstraitToDuckDB::RemoveExtension(std::string &function_name) { - } - - SubstraitToDuckDB::SubstraitToDuckDB(Connection &con_p, const string &serialized, bool json) : con(con_p) { -- if (con_p.context->client_data->http_state) { -- con_p.context->client_data->http_state->Reset(); -- } -- con_p.context->client_data->http_state = make_uniq(); -+ auto http_state = HTTPState::TryGetState(*con_p.context); -+ http_state->Reset(); -+ - if (!json) { - if (!plan.ParseFromString(serialized)) { - throw std::runtime_error("Was not possible to convert binary into Substrait plan"); diff --git a/.github/patches/extensions/substrait/implicit_varchar_cast.patch b/.github/patches/extensions/substrait/implicit_varchar_cast.patch deleted file mode 100644 index 8109d13d4ef6..000000000000 --- a/.github/patches/extensions/substrait/implicit_varchar_cast.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/src/substrait_extension.cpp b/src/substrait_extension.cpp -index c24497f..15a8aab 100644 ---- a/src/substrait_extension.cpp -+++ b/src/substrait_extension.cpp -@@ -195,6 +195,9 @@ static unique_ptr SubstraitBind(ClientContext &context, TableFunct - vector &return_types, vector &names, bool is_json) { - auto result = make_uniq(); - result->conn = make_uniq(*context.db); -+ if (input.inputs[0].IsNull()) { -+ throw BinderException("from_substrait cannot be called with a NULL parameter"); -+ } - string serialized = input.inputs[0].GetValueUnsafe(); - result->plan = SubstraitPlanToDuckDBRel(*result->conn, serialized, is_json); - for (auto &column : result->plan->Columns()) { -diff --git a/test/sql/test_substrait.test b/test/sql/test_substrait.test -index 0fdd4cc..d7ce259 100644 ---- a/test/sql/test_substrait.test -+++ b/test/sql/test_substrait.test -@@ -72,9 +72,6 @@ syntax error at or near "NULL" - statement error - CALL from_substrait(NULL) - ---- --No function matches the given name and argument types 'from_substrait(INTEGER)' -- -- - - # Should fail with Invalid Query - statement error -@@ -91,7 +88,7 @@ Catalog Error: Table with name t does not exist! - statement error - CALL from_substrait('ongezoutennoten') - ---- --No function matches the given name and argument types 'from_substrait(VARCHAR)' -+No function matches - - # Should fail on empty plan - statement error -diff --git a/test/sql/test_substrait_function_name.test b/test/sql/test_substrait_function_name.test -index 50c37ae..159e01a 100644 ---- a/test/sql/test_substrait_function_name.test -+++ b/test/sql/test_substrait_function_name.test -@@ -35,10 +35,10 @@ statement ok - CALL get_substrait('SELECT abs(i) FROM ints'); - - statement ok --CALL get_substrait('SELECT prefix(i, ''1'') FROM ints'); -+CALL get_substrait('SELECT prefix(v, ''1'') FROM varchars'); - - statement ok --CALL get_substrait('SELECT suffix(i, ''3'') FROM ints'); -+CALL get_substrait('SELECT suffix(v, ''3'') FROM varchars'); - - statement ok - CALL get_substrait('SELECT substr(v, 1, 1) FROM varchars'); diff --git a/.github/patches/extensions/substrait/substrait.patch b/.github/patches/extensions/substrait/substrait.patch new file mode 100644 index 000000000000..481ca475bd29 --- /dev/null +++ b/.github/patches/extensions/substrait/substrait.patch @@ -0,0 +1,38 @@ +diff --git a/src/to_substrait.cpp b/src/to_substrait.cpp +index 03d9778..d2429c6 100644 +--- a/src/to_substrait.cpp ++++ b/src/to_substrait.cpp +@@ -777,8 +777,31 @@ substrait::Rel *DuckDBToSubstrait::TransformLimit(LogicalOperator &dop) { + auto stopn = res->mutable_fetch(); + stopn->set_allocated_input(TransformOp(*dop.children[0])); + +- stopn->set_offset(dlimit.offset_val); +- stopn->set_count(dlimit.limit_val); ++ idx_t limit_val; ++ idx_t offset_val; ++ ++ switch(dlimit.limit_val.Type()) { ++ case LimitNodeType::CONSTANT_VALUE: ++ limit_val = dlimit.limit_val.GetConstantValue(); ++ break; ++ case LimitNodeType::UNSET: ++ limit_val = 2ULL << 62ULL; ++ break; ++ default: ++ throw InternalException("Unsupported limit value type"); ++ } ++ switch(dlimit.offset_val.Type()) { ++ case LimitNodeType::CONSTANT_VALUE: ++ offset_val = dlimit.offset_val.GetConstantValue(); ++ break; ++ case LimitNodeType::UNSET: ++ offset_val = 0; ++ break; ++ default: ++ throw InternalException("Unsupported offset value type"); ++ } ++ stopn->set_offset(offset_val); ++ stopn->set_count(limit_val); + return res; + } + diff --git a/.github/regression/csv.csv b/.github/regression/csv.csv index 95f761fd08f7..272b7ced2a04 100644 --- a/.github/regression/csv.csv +++ b/.github/regression/csv.csv @@ -2,4 +2,6 @@ benchmark/micro/csv/sniffer.benchmark benchmark/micro/csv/read.benchmark benchmark/micro/csv/small_csv.benchmark benchmark/micro/csv/null_padding.benchmark -benchmark/micro/csv/projection_pushdown.benchmark \ No newline at end of file +benchmark/micro/csv/projection_pushdown.benchmark +benchmark/micro/csv/1_byte_values.benchmark +benchmark/micro/csv/16_byte_values.benchmark \ No newline at end of file diff --git a/.github/regression/ingestion.csv b/.github/regression/ingestion.csv new file mode 100644 index 000000000000..ace35a69d4b2 --- /dev/null +++ b/.github/regression/ingestion.csv @@ -0,0 +1,31 @@ +benchmark/ingestion/in_memory_db/tpcds/csv/ingest_inventory.benchmark +benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_inventory.benchmark +benchmark/ingestion/in_memory_db/tpcds/native/ingest_inventory.benchmark + +benchmark/ingestion/persistent_storage/tpcds/csv/ingest_inventory.benchmark +benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_inventory.benchmark +benchmark/ingestion/persistent_storage/tpcds/native/ingest_inventory.benchmark + +benchmark/ingestion/in_memory_db/tpcds/csv/ingest_store_sales.benchmark +benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_store_sales.benchmark +benchmark/ingestion/in_memory_db/tpcds/native/ingest_store_sales.benchmark + +benchmark/ingestion/persistent_storage/tpcds/csv/ingest_store_sales.benchmark +benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_store_sales.benchmark +benchmark/ingestion/persistent_storage/tpcds/native/ingest_store_sales.benchmark + +benchmark/ingestion/in_memory_db/tpch/csv/ingest_lineitem.benchmark +benchmark/ingestion/in_memory_db/tpch/parquet/ingest_lineitem.benchmark +benchmark/ingestion/in_memory_db/tpch/native/ingest_lineitem.benchmark + +benchmark/ingestion/persistent_storage/tpch/csv/ingest_lineitem.benchmark +benchmark/ingestion/persistent_storage/tpch/parquet/ingest_lineitem.benchmark +benchmark/ingestion/persistent_storage/tpch/native/ingest_lineitem.benchmark + +benchmark/ingestion/in_memory_db/tpch/csv/ingest_orders.benchmark +benchmark/ingestion/in_memory_db/tpch/parquet/ingest_orders.benchmark +benchmark/ingestion/in_memory_db/tpch/native/ingest_orders.benchmark + +benchmark/ingestion/persistent_storage/tpch/csv/ingest_orders.benchmark +benchmark/ingestion/persistent_storage/tpch/parquet/ingest_orders.benchmark +benchmark/ingestion/persistent_storage/tpch/native/ingest_orders.benchmark \ No newline at end of file diff --git a/.github/regression/large.csv b/.github/regression/large.csv new file mode 100644 index 000000000000..1886a4962b45 --- /dev/null +++ b/.github/regression/large.csv @@ -0,0 +1,23 @@ +benchmark/large/tpch-sf100/q01.benchmark +benchmark/large/tpch-sf100/q02.benchmark +benchmark/large/tpch-sf100/q03.benchmark +benchmark/large/tpch-sf100/q04.benchmark +benchmark/large/tpch-sf100/q05.benchmark +benchmark/large/tpch-sf100/q06.benchmark +benchmark/large/tpch-sf100/q07.benchmark +benchmark/large/tpch-sf100/q08.benchmark +benchmark/large/tpch-sf100/q09.benchmark +benchmark/large/tpch-sf100/q10.benchmark +benchmark/large/tpch-sf100/q11.benchmark +benchmark/large/tpch-sf100/q12.benchmark +benchmark/large/tpch-sf100/q13.benchmark +benchmark/large/tpch-sf100/q14.benchmark +benchmark/large/tpch-sf100/q15.benchmark +benchmark/large/tpch-sf100/q16.benchmark +benchmark/large/tpch-sf100/q17.benchmark +benchmark/large/tpch-sf100/q18.benchmark +benchmark/large/tpch-sf100/q19.benchmark +benchmark/large/tpch-sf100/q20.benchmark +benchmark/large/tpch-sf100/q21.benchmark +benchmark/large/tpch-sf100/q22.benchmark + diff --git a/.github/regression/micro_extended.csv b/.github/regression/micro_extended.csv new file mode 100644 index 000000000000..e9fd722ddb88 --- /dev/null +++ b/.github/regression/micro_extended.csv @@ -0,0 +1,212 @@ +benchmark/micro/lambdas/list_filter_where.benchmark +benchmark/micro/lambdas/list_transform_select.benchmark +benchmark/micro/lambdas/list_transform_zip.benchmark +benchmark/micro/lambdas/list_reduce/list_length_5000.benchmark +benchmark/micro/lambdas/list_reduce/list_length_2.benchmark +benchmark/micro/lambdas/list_reduce/list_variable_length.benchmark +benchmark/micro/lambdas/list_reduce/varchar.benchmark +benchmark/micro/lambdas/list_reduce/complex_expression.benchmark +benchmark/micro/order/orderby.benchmark +benchmark/micro/groupby-parallel/medium_groups.benchmark +benchmark/micro/groupby-parallel/large_groups.benchmark +benchmark/micro/groupby-parallel/many_groups_large_values_small.benchmark +benchmark/micro/groupby-parallel/many_groups_large_values.benchmark +benchmark/micro/groupby-parallel/tiny_groups.benchmark +benchmark/micro/pushdown/or_pushdown.benchmark +benchmark/micro/join/left_outer_join_right_big.benchmark +benchmark/micro/join/hashjoin_highcardinality.benchmark +benchmark/micro/join/positional_join.benchmark +benchmark/micro/join/delim_join_no_blowup.benchmark +benchmark/micro/join/many_inner_joins.benchmark +benchmark/micro/join/range_join_big_result.benchmark +benchmark/micro/join/blockwise_nl_join.benchmark +benchmark/micro/join/iejoin_employees.benchmark +benchmark/micro/join/range_join.benchmark +benchmark/micro/join/join_from_parquet.benchmark +benchmark/micro/join/nary_positional_join.benchmark +benchmark/micro/join/right_outer_join_left_big.benchmark +benchmark/micro/join/iejoin_selectivity.benchmark +benchmark/micro/join/asof_join_small_probe.benchmark +benchmark/micro/join/asof_join.benchmark +benchmark/micro/join/many_left_joins.benchmark +benchmark/micro/join/iejoin_events.benchmark +benchmark/micro/join/hashjoin_lhsarithmetic.benchmark +benchmark/micro/join/range_join_small_rhs.benchmark +benchmark/micro/limit/parquet_parallel_limit_glob.benchmark +benchmark/micro/limit/parallel_streaming_limit.benchmark +benchmark/micro/limit/parquet_parallel_limit.benchmark +benchmark/micro/limit/parallel_limit.benchmark +benchmark/micro/cast/cast_string_struct_missing_val.benchmark +benchmark/micro/cast/cast_string_list.benchmark +benchmark/micro/cast/cast_int64_int32.benchmark +benchmark/micro/cast/cast_int32_int64.benchmark +benchmark/micro/cast/cast_int_string.benchmark +benchmark/micro/cast/cast_struct_string.benchmark +benchmark/micro/cast/cast_string_struct.benchmark +benchmark/micro/cast/strftime.benchmark +benchmark/micro/cast/strptime.benchmark +benchmark/micro/cast/cast_huge_string_hugeint.benchmark +benchmark/micro/cast/cast_timestamp_string.benchmark +benchmark/micro/cast/cast_string_int.benchmark +benchmark/micro/cast/cast_double_string.benchmark +benchmark/micro/cast/cast_string_double.benchmark +benchmark/micro/cast/format_int_string.benchmark +benchmark/micro/cast/cast_date_string.benchmark +benchmark/micro/cast/cast_string_map.benchmark +benchmark/micro/cast/cast_string_hugeint.benchmark +benchmark/micro/cast/cast_hugeint_string.benchmark +benchmark/micro/cast/cast_list_string.benchmark +benchmark/micro/cast/cast_huge_hugeint_string_benchmark.benchmark +benchmark/micro/cast/cast_enum_string.benchmark +benchmark/micro/aggregate/simple_group.benchmark +benchmark/micro/aggregate/grouped_distinct.benchmark +benchmark/micro/aggregate/quantile/quantile_sampling.benchmark +benchmark/micro/aggregate/quantile/quantile.benchmark +benchmark/micro/aggregate/quantile/quantile_approx.benchmark +benchmark/micro/aggregate/quantile/quantile_many.benchmark +benchmark/micro/aggregate/simple_aggregate.benchmark +benchmark/micro/aggregate/sorted_last.benchmark +benchmark/micro/aggregate/simple_distinct.benchmark +benchmark/micro/aggregate/bitstring_aggregate.benchmark +benchmark/micro/aggregate/bitwise_aggregate.benchmark +benchmark/micro/aggregate/ordered_first.benchmark +benchmark/micro/catalog/add_column_empty.benchmark +benchmark/micro/date/extract_struct.benchmark +benchmark/micro/date/extract_struct_icu.benchmark +benchmark/micro/date/extract_month.benchmark +benchmark/micro/date/extract_year.benchmark +benchmark/micro/date/extract_multiple_icu.benchmark +benchmark/micro/date/extract_multiple.benchmark +benchmark/micro/simd/auto-vectorization.benchmark +benchmark/micro/nulls/no_nulls_addition.benchmark +benchmark/micro/nulls/null_addition.benchmark +benchmark/micro/map/map_lookup.benchmark +benchmark/micro/map/map_extract.benchmark +benchmark/micro/json/inconsistent_schema.benchmark +benchmark/micro/zonemaps/data_skipping.benchmark +benchmark/micro/zonemaps/zonemaps.benchmark +benchmark/micro/csv/multiple_small_read_csv.benchmark +benchmark/micro/csv/1_byte_values.benchmark +benchmark/micro/csv/small_csv.benchmark +benchmark/micro/csv/read.benchmark +benchmark/micro/csv/16_byte_values.benchmark +benchmark/micro/csv/null_padding.benchmark +benchmark/micro/csv/sniffer.benchmark +benchmark/micro/csv/sniffer_quotes.benchmark +benchmark/micro/csv/projection_pushdown.benchmark +benchmark/micro/csv/multiple_read.benchmark +benchmark/micro/window/window_partition.benchmark +benchmark/micro/window/window_list_aggr.benchmark +benchmark/micro/window/window_mode_fixed_100.benchmark +benchmark/micro/window/window_constant_count.benchmark +benchmark/micro/window/window_mad_fixed_100.benchmark +benchmark/micro/window/window_iqr_fixed_100.benchmark +benchmark/micro/window/window_constant_aggregates.benchmark +benchmark/micro/window/window_mode_variable_100.benchmark +benchmark/micro/window/window_streamed_sum.benchmark +benchmark/micro/window/window_mad_variable_100.benchmark +benchmark/micro/window/window_count_star_fixed_100.benchmark +benchmark/micro/window/window_sum.benchmark +benchmark/micro/window/window_median_variable_100.benchmark +benchmark/micro/window/window_median_fixed_100.benchmark +benchmark/micro/window/window_iqr_variable_100.benchmark +benchmark/micro/window/window_count_star_variable_100.benchmark +benchmark/micro/list/column_data_collection_copy/large_lists.benchmark +benchmark/micro/list/column_data_collection_copy/small_lists.benchmark +benchmark/micro/list/column_data_collection_copy/unnest.benchmark +benchmark/micro/list/unnest_rewrite.benchmark +benchmark/micro/list/string_split_unicode.benchmark +benchmark/micro/list/string_split_regexp.benchmark +benchmark/micro/list/list_few_rows.benchmark +benchmark/micro/list/unnest.benchmark +benchmark/micro/list/list_many_rows.benchmark +benchmark/micro/list/string_split.benchmark +benchmark/micro/list/list_order_by.benchmark +benchmark/micro/compression/fsst/fsst_store_worst_case.benchmark +benchmark/micro/compression/fsst/fsst_read.benchmark +benchmark/micro/compression/fsst/fsst_store.benchmark +benchmark/micro/compression/fsst/fsst_late_decompression.benchmark +benchmark/micro/compression/fsst/fsst_read_worst_case.benchmark +benchmark/micro/compression/bitpacking/bitpacking_store_constant_delta.benchmark +benchmark/micro/compression/bitpacking/bitpacking_store_for.benchmark +benchmark/micro/compression/bitpacking/bitpacking_store_dfor.benchmark +benchmark/micro/compression/bitpacking/bitpacking_store_constant.benchmark +benchmark/micro/compression/bitpacking/bitpacking_read_dfor.benchmark +benchmark/micro/compression/bitpacking/bitpacking_read_for.benchmark +benchmark/micro/compression/bitpacking/bitpacking_read_constant.benchmark +benchmark/micro/compression/bitpacking/bitpacking_read_constant_delta.benchmark +benchmark/micro/compression/alp/alp_read_worst_case.benchmark +benchmark/micro/compression/alp/alp_store_worst_case.benchmark +benchmark/micro/compression/alp/alp_read_best_case.benchmark +benchmark/micro/compression/alp/alp_store_best_case.benchmark +benchmark/micro/compression/alp/alp_store.benchmark +benchmark/micro/compression/alp/alp_read.benchmark +benchmark/micro/compression/dictionary/dictionary_store_worst_case.benchmark +benchmark/micro/compression/dictionary/dictionary_read.benchmark +benchmark/micro/compression/dictionary/dictionary_read_best_case.benchmark +benchmark/micro/compression/dictionary/dictionary_read_worst_case.benchmark +benchmark/micro/compression/dictionary/dictionary_store.benchmark +benchmark/micro/compression/alprd/alprd_read_worst_case.benchmark +benchmark/micro/compression/alprd/alprd_read_best_case.benchmark +benchmark/micro/compression/alprd/alprd_store_worst_case.benchmark +benchmark/micro/compression/alprd/alprd_read.benchmark +benchmark/micro/compression/alprd/alprd_store.benchmark +benchmark/micro/compression/alprd/alprd_store_best_case.benchmark +benchmark/micro/compression/store_tpch_sf1.benchmark +benchmark/micro/compression/bitpacking_hugeint/bitpacking_hugeint_store_constant.benchmark +benchmark/micro/compression/bitpacking_hugeint/bitpacking_hugeint_read_constant.benchmark +benchmark/micro/view/many_values.benchmark +benchmark/micro/arithmetic/multiplications.benchmark +benchmark/micro/functions/random_uuid.benchmark +benchmark/micro/functions/random.benchmark +benchmark/micro/index/checkpoint/checkpoint_art.benchmark +benchmark/micro/index/insert/insert_art.benchmark +benchmark/micro/index/constraints/lookup_art_constraint.benchmark +benchmark/micro/index/delete/delete_art.benchmark +benchmark/micro/index/point/point_query_without_index.benchmark +benchmark/micro/index/point/point_query_without_index_sequential.benchmark +benchmark/micro/index/point/point_query_with_art.benchmark +benchmark/micro/index/range/range_query_without_index.benchmark +benchmark/micro/index/range/wide_range_query_with_art.benchmark +benchmark/micro/index/range/wide_range_query_without_index.benchmark +benchmark/micro/index/range/range_query_with_art.benchmark +benchmark/micro/index/create/create_art.benchmark +benchmark/micro/index/create/create_art_varchar.benchmark +benchmark/micro/index/create/create_art_varchar_long.benchmark +benchmark/micro/index/create/create_art_duplicates.benchmark +benchmark/micro/index/create/create_art_random.benchmark +benchmark/micro/index/create/create_art_sorted.benchmark +benchmark/micro/index/create/create_art_varchar_short.benchmark +benchmark/micro/case/integer_case_predictable.benchmark +benchmark/micro/case/integer_case_alternate.benchmark +benchmark/micro/case/big_case.benchmark +benchmark/micro/copy/to_parquet_partition_by_few.benchmark +benchmark/micro/copy/from_parquet_small_row_groups.benchmark +benchmark/micro/copy/from_parquet_large_row_groups.benchmark +benchmark/micro/copy/to_parquet_partition_by_many.benchmark +benchmark/micro/copy/from_parquet_medium_row_groups.benchmark +benchmark/micro/string/string_agg_order_by.benchmark +benchmark/micro/string/contains_reg.benchmark +benchmark/micro/string/contains_re.benchmark +benchmark/micro/string/regexp_matches.benchmark +benchmark/micro/string/length_short.benchmark +benchmark/micro/string/contains_long.benchmark +benchmark/micro/string/concat_short.benchmark +benchmark/micro/string/string_agg_short.benchmark +benchmark/micro/string/equality_long.benchmark +benchmark/micro/string/like_regular.benchmark +benchmark/micro/string/greater_than_long.benchmark +benchmark/micro/string/contains_integers.benchmark +benchmark/micro/string/string_agg_long.benchmark +benchmark/micro/string/length_long.benchmark +benchmark/micro/string/contains_regular.benchmark +benchmark/micro/string/greater_than_short.benchmark +benchmark/micro/string/contains_r.benchmark +benchmark/micro/string/equality_short.benchmark +benchmark/micro/string/concat_long.benchmark +benchmark/micro/string/bitstring.benchmark +benchmark/micro/filter/parallel_complex_filter.benchmark +benchmark/micro/cte/cte.benchmark +benchmark/micro/cte/materialized_cte.benchmark +benchmark/micro/timestamp/extract_month.benchmark +benchmark/micro/timestamp/extract_year.benchmark diff --git a/.github/workflows/CheckIssueForCodeFormatting.yml b/.github/workflows/CheckIssueForCodeFormatting.yml index 3f7b65f4ed69..02cd8c265401 100644 --- a/.github/workflows/CheckIssueForCodeFormatting.yml +++ b/.github/workflows/CheckIssueForCodeFormatting.yml @@ -15,7 +15,7 @@ jobs: with: fetch-depth: 0 - name: Set up Python 3.11 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' - name: Check issue for code formatting diff --git a/.github/workflows/ExtendedTests.yml b/.github/workflows/ExtendedTests.yml index cd38fab40684..a39a36d6bff9 100644 --- a/.github/workflows/ExtendedTests.yml +++ b/.github/workflows/ExtendedTests.yml @@ -43,7 +43,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.7' @@ -125,7 +125,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.7' @@ -207,7 +207,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.7' @@ -294,7 +294,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.7' diff --git a/.github/workflows/ExtraTests.yml b/.github/workflows/ExtraTests.yml index eac37050d167..2d42fb2619f4 100644 --- a/.github/workflows/ExtraTests.yml +++ b/.github/workflows/ExtraTests.yml @@ -28,9 +28,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash diff --git a/.github/workflows/Java.yml b/.github/workflows/Java.yml index f40f1056e2f5..939ae77ebb71 100644 --- a/.github/workflows/Java.yml +++ b/.github/workflows/Java.yml @@ -138,9 +138,9 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: "3.7" + python-version: "3.12" - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: @@ -174,7 +174,7 @@ jobs: java-osx-universal: name: Java OSX (Universal) - runs-on: macos-latest + runs-on: macos-14 needs: java-linux-amd64 env: BUILD_JDBC: 1 @@ -186,9 +186,9 @@ jobs: - uses: actions/checkout@v3 with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: "3.7" + python-version: "3.12" - name: Setup Ccache uses: hendrikmuhs/ccache-action@main with: diff --git a/.github/workflows/Julia.yml b/.github/workflows/Julia.yml index 71edafb75efb..95719335f14a 100644 --- a/.github/workflows/Julia.yml +++ b/.github/workflows/Julia.yml @@ -69,7 +69,6 @@ jobs: - '1.6' - '1.7' - '1' - - 'nightly' os: - ubuntu-latest arch: diff --git a/.github/workflows/LinuxRelease.yml b/.github/workflows/LinuxRelease.yml index 9ac8ff1332c8..eadbd413e6e6 100644 --- a/.github/workflows/LinuxRelease.yml +++ b/.github/workflows/LinuxRelease.yml @@ -83,7 +83,7 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: | make - python3 scripts/run_tests_one_by_one.py build/release/test/unittest "*" --time_execution --order lex --list + python3 scripts/run_tests_one_by_one.py build/release/test/unittest "*" --time_execution - name: Tools Tests shell: bash @@ -107,7 +107,7 @@ jobs: zip -j duckdb_cli-linux-amd64.zip build/release/duckdb zip -j libduckdb-linux-amd64.zip build/release/src/libduckdb*.* src/amalgamation/duckdb.hpp src/include/duckdb.h zip -j libduckdb-src.zip src/amalgamation/duckdb.hpp src/amalgamation/duckdb.cpp src/include/duckdb.h - zip -j duckdb_odbc-linux-amd64.zip build/release/tools/odbc/libduckdb_odbc.so tools/odbc/linux_setup/unixodbc_setup.sh + zip -j duckdb_odbc-linux-amd64.zip build/release/tools/odbc/libduckdb_odbc.so tools/odbc/linux_setup/unixodbc_setup.sh tools/odbc/linux_setup/update_odbc_path.py python3 scripts/asset-upload-gha.py libduckdb-src.zip libduckdb-linux-amd64.zip duckdb_cli-linux-amd64.zip duckdb_odbc-linux-amd64.zip - uses: actions/upload-artifact@v3 @@ -271,7 +271,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.9' @@ -289,13 +289,14 @@ jobs: shell: bash env: DISABLE_BUILTIN_EXTENSIONS: 1 + LOCAL_EXTENSION_REPO: build/release/repository_other run: | make - uses: actions/download-artifact@v3 with: name: linux-extensions-64 - path: /tmp + path: build/release/repository - name: Check if extension_entries.hpp is up to date shell: bash @@ -303,7 +304,26 @@ jobs: EXTENSION_CONFIGS: '.github/config/in_tree_extensions.cmake;.github/config/out_of_tree_extensions.cmake' run: | make extension_configuration - python scripts/generate_extensions_function.py --validate + python scripts/generate_extensions_function.py + pip install "black>=24" + pip install cmake-format + make format-fix + + - uses: actions/upload-artifact@v3 + with: + name: extension_entries.hpp + path: | + src/include/duckdb/main/extension_entries.hpp + + - name: Check for any difference + run: | + git diff --exit-code src/include/duckdb/main/extension_entries.hpp && echo "No differences found" + + - name: Explainer + if: failure() + run: | + echo "There are differences in src/include/duckdb/main/extension_entries.hpp" + echo "Check the uploaded extension_entries.hpp (in the workflow Summary), and check that in instead of src/include/duckdb/main/extension_entries.hpp" symbol-leakage: name: Symbol Leakage @@ -316,9 +336,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -359,9 +379,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install Ninja shell: bash @@ -406,9 +426,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v1 diff --git a/.github/workflows/Main.yml b/.github/workflows/Main.yml index 4a22a3d3178d..bb8ff7e0c091 100644 --- a/.github/workflows/Main.yml +++ b/.github/workflows/Main.yml @@ -41,6 +41,8 @@ jobs: linux-debug: name: Linux Debug if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + outputs: + git_describe: ${{ steps.describe_step.outputs.git_describe }} runs-on: ubuntu-20.04 env: CC: gcc-10 @@ -53,6 +55,9 @@ jobs: with: fetch-depth: 0 + - id: describe_step + run: echo "git_describe=$(git describe --tags --long)" >> "$GITHUB_OUTPUT" + - name: Install shell: bash run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build @@ -67,6 +72,10 @@ jobs: shell: bash run: make debug + - name: Output version info + shell: bash + run: ./build/debug/duckdb -c "PRAGMA version;" + - name: Set DUCKDB_INSTALL_LIB for ADBC tests shell: bash run: echo "DUCKDB_INSTALL_LIB=$(find `pwd` -name "libduck*.so" | head -n 1)" >> $GITHUB_ENV @@ -85,6 +94,7 @@ jobs: runs-on: ubuntu-20.04 needs: linux-debug env: + OVERRIDE_GIT_DESCRIBE: ${{needs.linux-debug.outputs.git_describe}} CC: gcc-10 CXX: g++-10 GEN: ninja @@ -101,8 +111,6 @@ jobs: steps: - uses: actions/checkout@v3 - with: - fetch-depth: 0 - name: Install shell: bash @@ -118,6 +126,10 @@ jobs: shell: bash run: make reldebug + - name: Output version info + shell: bash + run: ./build/reldebug/duckdb -c "PRAGMA version;" + - name: Test shell: bash run: build/reldebug/test/unittest --force-storage @@ -128,6 +140,7 @@ jobs: runs-on: ubuntu-20.04 needs: linux-debug env: + OVERRIDE_GIT_DESCRIBE: ${{needs.linux-debug.outputs.git_describe}} CC: gcc-10 CXX: g++-10 GEN: ninja @@ -143,8 +156,6 @@ jobs: steps: - uses: actions/checkout@v3 - with: - fetch-depth: 0 - name: Install shell: bash @@ -160,6 +171,10 @@ jobs: shell: bash run: make reldebug + - name: Output version info + shell: bash + run: ./build/reldebug/duckdb -c "PRAGMA version;" + - name: Test shell: bash run: build/reldebug/test/unittest --force-reload --force-storage @@ -170,6 +185,7 @@ jobs: runs-on: ubuntu-20.04 needs: linux-debug env: + OVERRIDE_GIT_DESCRIBE: ${{needs.linux-debug.outputs.git_describe}} CC: gcc-10 CXX: g++-10 DISABLE_SANITIZER: 1 @@ -178,8 +194,6 @@ jobs: steps: - uses: actions/checkout@v3 - with: - fetch-depth: 0 - name: Install shell: bash @@ -195,6 +209,10 @@ jobs: shell: bash run: make debug + - name: Output version info + shell: bash + run: ./build/debug/duckdb -c "PRAGMA version;" + - name: Test shell: bash run: valgrind ./build/debug/test/unittest test/sql/tpch/tpch_sf001.test_slow @@ -214,7 +232,7 @@ jobs: run: git clone https://github.com/duckdb/duckdb-web - name: Set up Python 3.9 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.9' @@ -238,9 +256,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Dependencies shell: bash @@ -276,7 +294,14 @@ jobs: - name: Test Standard ODBC tests shell: bash - run: build/debug/tools/odbc/test/test_odbc + run: build/debug/tools/odbc/test/test_odbc + + - name: Test Connection ODBC tests + shell: bash + run: | + chmod +x tools/odbc/scripts/create_ini_file.sh + tools/odbc/scripts/create_ini_file.sh + build/debug/tools/odbc/test/test_connection_odbc - name: Test nanodbc shell: bash diff --git a/.github/workflows/NightlyTests.yml b/.github/workflows/NightlyTests.yml index 8a23b9945240..b4bef0f09509 100644 --- a/.github/workflows/NightlyTests.yml +++ b/.github/workflows/NightlyTests.yml @@ -42,9 +42,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install Ninja shell: bash @@ -69,6 +69,7 @@ jobs: name: Release Assertions runs-on: ubuntu-20.04 needs: linux-memory-leaks + timeout-minutes: 120 env: CC: gcc-10 CXX: g++-10 @@ -108,7 +109,7 @@ jobs: - name: Test shell: bash run: | - python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit + python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit --timeout 600 linux-clang: @@ -135,9 +136,9 @@ jobs: version: "14.0" directory: '/home/runner/work/llvm' - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -217,9 +218,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash @@ -453,7 +454,7 @@ jobs: - name: Test shell: bash - run: python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest --no-exit + run: python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest --no-exit --timeout 600 regression-test-memory-safety: name: Regression Tests between safe and unsafe builds @@ -481,9 +482,9 @@ jobs: fetch-depth: 0 path: unsafe - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash @@ -580,11 +581,54 @@ jobs: - name: Test shell: bash run: | - python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest --no-exit - python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[intraquery]" --no-exit - python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[interquery]" --no-exit - python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[detailed_profiler]" --no-exit - python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest test/sql/tpch/tpch_sf01.test_slow --no-exit + python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest --no-exit --timeout 600 + python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[intraquery]" --no-exit --timeout 600 + python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[interquery]" --no-exit --timeout 600 + python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest "[detailed_profiler]" --no-exit --timeout 600 + python3 scripts/run_tests_one_by_one.py build/reldebug/test/unittest test/sql/tpch/tpch_sf01.test_slow --no-exit --timeout 600 + + + threadsan-relassert-all: + name: Thread Sanitizer (Relassert + All tests) + runs-on: ubuntu-latest + needs: linux-memory-leaks + env: + GEN: ninja + EXTENSION_STATIC_BUILD: 1 + BUILD_ICU: 1 + BUILD_INET: 1 + BUILD_TPCH: 1 + BUILD_TPCDS: 1 + BUILD_FTS: 1 + BUILD_VISUALIZER: 1 + BUILD_JSON: 1 + BUILD_EXCEL: 1 + BUILD_JEMALLOC: 1 + TSAN_OPTIONS: suppressions=${{ github.workspace }}/.sanitizer-thread-suppressions.txt + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install + shell: bash + run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build + + - name: Setup Ccache + uses: hendrikmuhs/ccache-action@main + with: + key: ${{ github.job }} + save: ${{ env.CCACHE_SAVE }} + + - name: Build + shell: bash + run: THREADSAN=1 make relassert + + - name: Test + shell: bash + run: | + python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest "*" --no-exit vector-sizes: name: Vector Sizes @@ -599,9 +643,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -626,9 +670,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -723,7 +767,7 @@ jobs: run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build lcov curl g++ zip - name: Set up Python 3.9 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.9' diff --git a/.github/workflows/OSX.yml b/.github/workflows/OSX.yml index 63085793cd65..bb12e1abff8d 100644 --- a/.github/workflows/OSX.yml +++ b/.github/workflows/OSX.yml @@ -29,7 +29,7 @@ env: jobs: xcode-debug: name: OSX Debug - runs-on: macos-latest + runs-on: macos-14 env: TREAT_WARNINGS_AS_ERRORS: 1 @@ -39,9 +39,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -82,7 +82,7 @@ jobs: xcode-release: # Builds binaries for osx_arm64 and osx_amd64 name: OSX Release - runs-on: macos-latest + runs-on: macos-14 needs: xcode-debug env: EXTENSION_CONFIGS: '${GITHUB_WORKSPACE}/.github/config/bundled_extensions.cmake' @@ -98,9 +98,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install Ninja run: brew install ninja @@ -114,7 +114,6 @@ jobs: - name: Install UnixODBC shell: bash run: | - brew remove --ignore-dependencies unixodbc CFLAGS="-arch x86_64 -arch arm64" ./scripts/install_unixodbc.sh - name: Install pytest @@ -183,7 +182,7 @@ jobs: xcode-extensions: # Builds extensions for osx_arm64 and osx_amd64 name: OSX Extensions Release - runs-on: macos-latest + runs-on: macos-14 needs: xcode-debug strategy: matrix: @@ -193,12 +192,12 @@ jobs: osx_arch: x86_64 duckdb_arch: osx_amd64 vcpkg_triplet: x64-osx - run_autoload_tests: 1 + run_autoload_tests: 0 - label: arm64 osx_arch: arm64 duckdb_arch: osx_arm64 vcpkg_triplet: arm64-osx - run_autoload_tests: 0 + run_autoload_tests: 1 env: DUCKDB_EXTENSION_SIGNING_PK: ${{ secrets.DUCKDB_EXTENSION_SIGNING_PK }} @@ -212,9 +211,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install Ninja and Pkg-config run: brew install pkg-config ninja @@ -238,7 +237,7 @@ jobs: ninja: 1 - name: Test statically linked extensions - if: ${{ matrix.osx_arch == 'x86_64' }} + if: ${{ matrix.osx_arch == 'arm64' }} shell: bash run: | python3 scripts/run_tests_one_by_one.py ./build/release/test/unittest @@ -272,7 +271,7 @@ jobs: fi - name: Test loadable extensions - if: ${{ matrix.osx_arch == 'x86_64' }} + if: ${{ matrix.osx_arch == 'arm64' }} shell: bash env: AWS_ACCESS_KEY_ID: ${{secrets.S3_ID}} @@ -284,7 +283,7 @@ jobs: fi - name: Rebuild DuckDB without any extensions linked, but with same extension config - if: ${{ matrix.osx_arch == 'x86_64' }} + if: ${{ matrix.osx_arch == 'arm64' }} shell: bash env: EXTENSION_TESTS_ONLY: 1 @@ -296,7 +295,7 @@ jobs: # Run autoload unittests (including the out-of-tree tests) without any extensions linked, relying on the autoloader - name: Run tests with auto loading - if: ${{ matrix.osx_arch == 'x86_64' && !startsWith(github.ref, 'refs/tags/v') }} + if: ${{ matrix.osx_arch == 'arm64' && !startsWith(github.ref, 'refs/tags/v') }} shell: bash env: LOCAL_EXTENSION_REPO: ${{ github.workspace }} diff --git a/.github/workflows/Python.yml b/.github/workflows/Python.yml index a548216d02b5..4380b5267e03 100644 --- a/.github/workflows/Python.yml +++ b/.github/workflows/Python.yml @@ -55,7 +55,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' @@ -173,7 +173,7 @@ jobs: uses: docker/setup-qemu-action@v2 if: ${{ matrix.arch == 'aarch64' }} - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' @@ -246,7 +246,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' @@ -312,7 +312,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' @@ -369,7 +369,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.10' diff --git a/.github/workflows/R.yml b/.github/workflows/R.yml index 748aa675983b..1cb60c291dc6 100644 --- a/.github/workflows/R.yml +++ b/.github/workflows/R.yml @@ -36,9 +36,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - uses: r-lib/actions/setup-r@v2 with: diff --git a/.github/workflows/Regression.yml b/.github/workflows/Regression.yml index c0453a2e4cbe..1bee0241f87e 100644 --- a/.github/workflows/Regression.yml +++ b/.github/workflows/Regression.yml @@ -56,9 +56,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash @@ -90,6 +90,12 @@ jobs: run: | python scripts/regression_test_runner.py --old=duckdb/build/release/benchmark/benchmark_runner --new=build/release/benchmark/benchmark_runner --benchmarks=.github/regression/micro.csv --verbose --threads=2 + - name: Regression Test Ingestion Perf + if: always() + shell: bash + run: | + python scripts/regression_test_runner.py --old=duckdb/build/release/benchmark/benchmark_runner --new=build/release/benchmark/benchmark_runner --benchmarks=.github/regression/ingestion.csv --verbose --threads=2 + - name: Regression Test TPCH if: always() shell: bash @@ -142,9 +148,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash @@ -222,7 +228,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: '3.11' @@ -292,9 +298,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Install shell: bash diff --git a/.github/workflows/Swift.yml b/.github/workflows/Swift.yml index 1e5be2a996eb..438cc45660c9 100644 --- a/.github/workflows/Swift.yml +++ b/.github/workflows/Swift.yml @@ -91,7 +91,7 @@ jobs: fetch-depth: '0' - name: Install Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.9' diff --git a/.github/workflows/Wasm.yml b/.github/workflows/Wasm.yml index c2e961e36698..edd12db2bc6a 100644 --- a/.github/workflows/Wasm.yml +++ b/.github/workflows/Wasm.yml @@ -2,13 +2,22 @@ name: DuckDB-Wasm extensions on: workflow_dispatch: inputs: + # Git ref of the duckdb-wasm repo + duckdb_wasm_ref: + required: true + type: string # Git ref of the duckdb repo - duckdb-ref: + duckdb_ref: required: true type: string + # Git ref of the duckdb repo + platforms: + required: false + default: '["wasm_mvp", "wasm_eh", "wasm_threads"]' + type: string # Publish extensions on extensions.duckdb.org? release_s3: - required: false + required: true type: boolean default: false @@ -16,25 +25,32 @@ env: GH_TOKEN: ${{ secrets.GH_TOKEN }} jobs: - build_and_publish: - name: Build and publish + build_wasm: + name: Build extensions runs-on: ubuntu-latest strategy: matrix: - duckdb_wasm_arch: [ 'mvp', 'eh', 'threads' ] + duckdb_wasm_arch: ${{ fromJSON(github.event.inputs.platforms) }} env: - GEN: Ninja VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake - DUCKDB_PLATFORM: "wasm_${{ matrix.duckdb_wasm_arch }}" + DUCKDB_PLATFORM: "${{ matrix.duckdb_wasm_arch }}" steps: - uses: actions/checkout@v3 with: + ref: ${{ inputs.duckdb_wasm_ref }} fetch-depth: 0 + submodules: true + repository: duckdb/duckdb-wasm - uses: mymindstorm/setup-emsdk@v12 with: version: 'latest' + + - name: Install + shell: bash + run: sudo apt-get update -y -qq && sudo apt-get install -y -qq ninja-build + - name: Setup vcpkg uses: lukka/run-vcpkg@v11.1 with: @@ -45,33 +61,71 @@ jobs: with: key: ${{ github.job }}-${{ matrix.duckdb_wasm_arch }} - - name: Build Wasm module + - name: PatchDuckDB run: | - curl https://raw.githubusercontent.com/duckdb/duckdb-wasm/main/.github/config/extension_config_wasm.cmake -o extension/extension_config.cmake - make ${{ env.DUCKDB_PLATFORM }} + cd submodules/duckdb + git checkout ${{ github.event.inputs.duckdb_ref }} + git apply ../../duckdb.patch + cd ../.. + cp .github/config/extension_config_wasm.cmake submodules/duckdb/extension/extension_config.cmake - - name: Sign and deploy Wasm extensions - if: ${{ github.event.inputs.release_s3 }} - env: - AWS_ACCESS_KEY_ID: ${{secrets.S3_ID}} - AWS_SECRET_ACCESS_KEY: ${{secrets.S3_KEY}} - AWS_DEFAULT_REGION: us-east-1 - DUCKDB_EXTENSION_SIGNING_PK: ${{ secrets.DUCKDB_EXTENSION_SIGNING_PK }} + - name: Build Wasm module MVP + if: ${{ matrix.duckdb_wasm_arch == 'wasm_mvp' }} + run: | + DUCKDB_PLATFORM=wasm_mvp DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize mvp + + - name: Build Wasm module EH + if: ${{ matrix.duckdb_wasm_arch == 'wasm_eh' }} + run: | + DUCKDB_PLATFORM=wasm_eh DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize eh + + - name: Build Wasm module THREADS + if: ${{ matrix.duckdb_wasm_arch == 'wasm_threads' }} run: | - bash ./scripts/extension-upload-wasm.sh ${{ env.DUCKDB_PLATFORM }} ${{ github.event.inputs.duckdb-ref }} + DUCKDB_PLATFORM=wasm_threads DUCKDB_WASM_LOADABLE_EXTENSIONS="signed" GEN=ninja ./scripts/wasm_build_lib.sh relsize coi - name: Upload artifact uses: actions/upload-artifact@v3 with: - name: duckdb-wasm-${{ matrix.duckdb_wasm_arch }} - path: build/${{ env.DUCKDB_PLATFORM }}/built_extensions + name: duckdb_extensions_${{ env.DUCKDB_PLATFORM }} + path: build/extension_repository/${{ inputs.duckdb_ref }}/${{ env.DUCKDB_PLATFORM }} retention-days: 1 - trigger_github_pages_build: - name: Trigger follow-up work + publish: + name: Publish extensions runs-on: ubuntu-latest - needs: build_and_publish + needs: + - build_wasm + strategy: + matrix: + duckdb_arch: ${{ fromJSON(github.event.inputs.platforms) }} steps: - - name: Move control to duckdb-wasm + - uses: actions/checkout@v3 + + - uses: actions/download-artifact@v3 + with: + name: duckdb_extensions_${{ matrix.duckdb_arch }} + path: build/to_be_deployed/${{ inputs.duckdb_ref }}/${{ matrix.duckdb_arch }} + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install aws + run: | + pip install awscli + + - name: Sign and deploy Wasm extensions (no credentials) + if: ${{ ! inputs.release_s3 }} + run: | + bash ./scripts/extension-upload-wasm.sh ${{ matrix.duckdb_arch }} ${{ inputs.duckdb_ref }} + + - name: Sign and deploy Wasm extensions (with credentials) + if: ${{ inputs.release_s3 }} + env: + AWS_ACCESS_KEY_ID: ${{secrets.S3_ID}} + AWS_SECRET_ACCESS_KEY: ${{secrets.S3_KEY}} + AWS_DEFAULT_REGION: us-east-1 + DUCKDB_EXTENSION_SIGNING_PK: ${{ secrets.DUCKDB_EXTENSION_SIGNING_PK }} run: | - curl -XPOST -u "${{secrets.PAT_USER}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" https://api.github.com/repos/duckdb/duckdb-wasm/actions/workflows/main.yml/dispatches --data '{"ref":"${{ github.event.inputs.duckdb-wasm-ref}}"}' + bash ./scripts/extension-upload-wasm.sh ${{ matrix.duckdb_arch }} ${{ inputs.duckdb_ref }} diff --git a/.github/workflows/Windows.yml b/.github/workflows/Windows.yml index e5a0eeefa8a5..65fc07c2351b 100644 --- a/.github/workflows/Windows.yml +++ b/.github/workflows/Windows.yml @@ -47,9 +47,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -135,6 +135,20 @@ jobs: run: | tools/odbc/bin/Release/test_odbc.exe + - name: Setup Register For Connection Tests + shell: bash + run: | + REG ADD "HKCU\SOFTWARE\ODBC\ODBC.INI\DuckDB" //v database //t REG_SZ //d "/d/a/duckdb/duckdb/test/sql/storage_version/storage_version.db" + REG ADD "HKCU\SOFTWARE\ODBC\ODBC.INI\DuckDB" //v access_mode //t REG_SZ //d "READ_ONLY" + REG ADD "HKCU\SOFTWARE\ODBC\ODBC.INI\DuckDB" //v allow_unsigned_extensions //t REG_SZ //d "true" + echo "----------------------------------------------------------------" + Reg Query "HKCU\SOFTWARE\ODBC\ODBC.INI\DuckDB" + + - name: Test Connection ODBC tests + shell: bash + run: | + tools/odbc/bin/Release/test_connection_odbc.exe + - name: Print ODBC trace on failure if: ${{ failure() }} shell: bash @@ -157,9 +171,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Setup Ccache uses: hendrikmuhs/ccache-action@main @@ -244,9 +258,9 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - uses: ./.github/actions/build_extensions with: diff --git a/.github/workflows/_extension_client_tests.yml b/.github/workflows/_extension_client_tests.yml index 830824e9cdf5..310696025cba 100644 --- a/.github/workflows/_extension_client_tests.yml +++ b/.github/workflows/_extension_client_tests.yml @@ -31,7 +31,7 @@ jobs: cd duckdb git checkout ${{ inputs.duckdb_version }} - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: '3.9' diff --git a/.github/workflows/_extension_deploy.yml b/.github/workflows/_extension_deploy.yml index 9e4a695be8a8..81aaa211d207 100644 --- a/.github/workflows/_extension_deploy.yml +++ b/.github/workflows/_extension_deploy.yml @@ -68,9 +68,7 @@ jobs: - id: parse-matrices run: | - cat ./duckdb/.github/config/distribution_matrix.json > distribution_matrix.json - grep wasm distribution_matrix.json || (head -n -1 ./duckdb/.github/config/distribution_matrix.json > distribution_matrix.json && echo ',"wasm":{"include":[{"duckdb_arch":"wasm_mvp","vcpkg_triplet":"wasm32-emscripten"},{"duckdb_arch":"wasm_eh","vcpkg_triplet":"wasm32-emscripten"},{"duckdb_arch":"wasm_threads","vcpkg_triplet":"wasm32-emscripten"}]}}' >> distribution_matrix.json) - python3 ${{ inputs.matrix_parse_script }} --input distribution_matrix.json --deploy_matrix --output deploy_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty + python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --deploy_matrix --output deploy_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty deploy_matrix="`cat deploy_matrix.json`" echo deploy_matrix=$deploy_matrix >> $GITHUB_OUTPUT echo `cat $GITHUB_OUTPUT` diff --git a/.github/workflows/_extension_distribution.yml b/.github/workflows/_extension_distribution.yml index 530ba158bf17..c6365d9b1082 100644 --- a/.github/workflows/_extension_distribution.yml +++ b/.github/workflows/_extension_distribution.yml @@ -45,6 +45,11 @@ on: required: false type: boolean default: true + # Patch file to patch the extension's sources before building + patch: + required: false + type: string + default: "" jobs: generate_matrix: @@ -61,6 +66,11 @@ jobs: fetch-depth: 0 submodules: 'true' + - if: ${{ inputs.patch != '' }} + run: | + patch -p1 < ${{ inputs.patch }} + shell: bash + - name: Checkout DuckDB to version run: | cd duckdb @@ -71,8 +81,6 @@ jobs: python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os linux --output linux_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os osx --output osx_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os windows --output windows_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty - # In v0.9.2 wasm was not part of the avaliable triplets, backporting it here - grep wasm ./duckdb/.github/config/distribution_matrix.json || echo '{"wasm":{"include":[{"duckdb_arch":"wasm_mvp","vcpkg_triplet":"wasm32-emscripten"},{"duckdb_arch":"wasm_eh","vcpkg_triplet":"wasm32-emscripten"},{"duckdb_arch":"wasm_threads","vcpkg_triplet":"wasm32-emscripten"}]}}' > ./duckdb/.github/config/distribution_matrix.json python3 ${{ inputs.matrix_parse_script }} --input ./duckdb/.github/config/distribution_matrix.json --select_os wasm --output wasm_matrix.json --exclude "${{ inputs.exclude_archs }}" --pretty - id: set-matrix-linux @@ -139,6 +147,11 @@ jobs: fetch-depth: 0 submodules: 'true' + - if: ${{ inputs.patch != '' }} + run: | + patch -p1 < ${{ inputs.patch }} + shell: bash + - name: Checkout DuckDB to version run: | cd duckdb @@ -187,7 +200,7 @@ jobs: macos: name: MacOS - runs-on: macos-latest + runs-on: macos-14 needs: generate_matrix if: ${{ needs.generate_matrix.outputs.osx_matrix != '{}' && needs.generate_matrix.outputs.osx_matrix != '' }} strategy: @@ -206,6 +219,11 @@ jobs: fetch-depth: 0 submodules: 'true' + - if: ${{ inputs.patch != '' }} + run: | + patch -p1 < ${{ inputs.patch }} + shell: bash + - name: Install Ninja run: | brew install ninja @@ -215,9 +233,9 @@ jobs: with: key: ${{ github.job }}-${{ matrix.duckdb_arch }} - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - name: Checkout DuckDB to version run: | @@ -276,9 +294,14 @@ jobs: fetch-depth: 0 submodules: 'true' - - uses: actions/setup-python@v2 + - if: ${{ inputs.patch != '' }} + run: | + patch -p1 < ${{ inputs.patch }} + shell: bash + + - uses: actions/setup-python@v5 with: - python-version: '3.7' + python-version: '3.12' - uses: r-lib/actions/setup-r@v2 if: matrix.duckdb_arch == 'windows_amd64_rtools' @@ -338,6 +361,11 @@ jobs: fetch-depth: 0 submodules: 'true' + - if: ${{ inputs.patch != '' }} + run: | + patch -p1 < ${{ inputs.patch }} + shell: bash + - name: Checkout DuckDB to version run: | cd duckdb diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 7ca6dce6cb55..979cce428302 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -5,16 +5,16 @@ # Also, ensure that the 'github.repository' comparison and 'COVERITY_PROJECT_NAME' values below are accurate name: Coverity Scan on: - schedule: - # Run once daily, duckdb is at ~900k LOC + repository_dispatch: + # Run once daily (via repository_dispatch), duckdb is at ~900k LOC # Scan frequency limits from https://scan.coverity.com/faq#frequency : # Up to 28 builds per week, with a maximum of 4 builds per day, for projects with fewer than 100K lines of code # Up to 21 builds per week, with a maximum of 3 builds per day, for projects with 100K to 500K lines of code # Up to 14 builds per week, with a maximum of 2 build per day, for projects with 500K to 1 million lines of code # Up to 7 builds per week, with a maximum of 1 build per day, for projects with more than 1 million lines of code - - cron: '0 0 * * *' # Support manual execution workflow_dispatch: + jobs: coverity: # So it doesn't try to run on forks @@ -30,12 +30,16 @@ jobs: mkdir cov-analysis-linux64 tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64 - name: Install dependencies - run: sudo apt install -y git g++ cmake ninja-build libssl-dev default-jdk unixodbc-dev + run: sudo apt update -y -qq && sudo apt install -y git g++ cmake ninja-build libssl-dev default-jdk unixodbc-dev + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Build with cov-build run: cov-analysis-linux64/bin/cov-build --dir cov-int make env: PYTHON_USER_SPACE: 1 - PYTHON_EDITABLE_BUILD: 1 BUILD_PYTHON: 1 BUILD_JDBC: 1 BUILD_ODBC: 1 diff --git a/.gitignore b/.gitignore index 28f07693ceca..67114a06f137 100644 --- a/.gitignore +++ b/.gitignore @@ -290,6 +290,7 @@ cmake_build cmake-build-debug cmake-build-release cmake-build-relwithdebinfo +CMakeUserPresets.json # Generated documentation docs diff --git a/.sanitizer-thread-suppressions.txt b/.sanitizer-thread-suppressions.txt index 037aa04c9b6e..3dd166809ab1 100644 --- a/.sanitizer-thread-suppressions.txt +++ b/.sanitizer-thread-suppressions.txt @@ -1,6 +1,7 @@ deadlock:LockClients deadlock:RollbackTransaction deadlock:Checkpoint +deadlock:MetaTransaction::GetTransaction race:NextInnerJoin race:~ColumnSegment race:duckdb_moodycamel diff --git a/CMakeLists.txt b/CMakeLists.txt index ea74d55f861b..46da6d4b4f7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,8 +94,6 @@ if(${FORCE_COLORED_OUTPUT}) endif() endif() -option("Enable address sanitizer." TRUE) - set(M32_FLAG "") if(FORCE_32_BIT) set(M32_FLAG " -m32 ") @@ -124,7 +122,7 @@ endif() option(FORCE_WARN_UNUSED "Unused code objects lead to compiler warnings." FALSE) option(ENABLE_EXTENSION_AUTOLOADING "Enable extension auto-loading by default." FALSE) -option(ENABLE_EXTENSION_AUTOINSTAll "Enable extension auto-installing by default." FALSE) +option(ENABLE_EXTENSION_AUTOINSTALL "Enable extension auto-installing by default." FALSE) option(EXTENSION_TESTS_ONLY "Only load the tests for extensions, don't actually build them; useful for testing loadable extensions" FALSE) option(WASM_LOADABLE_EXTENSIONS "WebAssembly build with loadable extensions." FALSE) option(ENABLE_SANITIZER "Enable address sanitizer." TRUE) @@ -243,56 +241,75 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") set(SUN TRUE) endif() -find_package(Git) -if(Git_FOUND) - if (NOT DEFINED GIT_COMMIT_HASH) - execute_process( + +if (OVERRIDE_GIT_DESCRIBE) + if (OVERRIDE_GIT_DESCRIBE MATCHES "^v[0-9]+\.[0-9]+\.[0-9]+\-[0-9]+\-g[a-f0-9]+$") + set(GIT_DESCRIBE "${OVERRIDE_GIT_DESCRIBE}") + elseif(OVERRIDE_GIT_DESCRIBE MATCHES "^v[0-9]+\.[0-9]+\.[0-9]+$") + find_package(Git) + if(Git_FOUND) + execute_process( COMMAND ${GIT_EXECUTABLE} log -1 --format=%h WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + set(GIT_DESCRIBE "${OVERRIDE_GIT_DESCRIBE}-0-g${GIT_COMMIT_HASH}") + else() + set(GIT_DESCRIBE "${OVERRIDE_GIT_DESCRIBE}-0-g0123456789") + endif() + else() + message(FATAL_ERROR "Provided OVERRIDE_GIT_DESCRIBE '${OVERRIDE_GIT_DESCRIBE}' do not match supported versions, either fully specified 'vX.Y.Z-N-gGITHASH123' or version only 'vX.Y.Z'") endif() - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_LAST_TAG - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( +else() + find_package(Git) + if(Git_FOUND) + if (NOT DEFINED GIT_COMMIT_HASH) + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_RESULT + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + execute_process( COMMAND ${GIT_EXECUTABLE} describe --tags --long WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_ITERATION + OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE) -else() - message("Git NOT FOUND") + else() + message("Git NOT FOUND and EXTERNAL_GIT_DESCRIBE not provided, continuing with dummy version v0.0.1") + set(GIT_DESCRIBE "v0.0.1-0-g0123456789") + endif() endif() -if(GIT_RESULT EQUAL "0") - string(REGEX REPLACE "v([0-9]+).[0-9]+.[0-9]+" "\\1" DUCKDB_MAJOR_VERSION "${GIT_LAST_TAG}") - string(REGEX REPLACE "v[0-9]+.([0-9]+).[0-9]+" "\\1" DUCKDB_MINOR_VERSION "${GIT_LAST_TAG}") - string(REGEX REPLACE "v[0-9]+.[0-9]+.([0-9]+)" "\\1" DUCKDB_PATCH_VERSION "${GIT_LAST_TAG}") - string(REGEX REPLACE ".*-([0-9]+)-.*" "\\1" DUCKDB_DEV_ITERATION "${GIT_ITERATION}") +string(REGEX REPLACE "v([0-9]+)\.[0-9]+\.[0-9]+\-.*" "\\1" DUCKDB_MAJOR_VERSION "${GIT_DESCRIBE}") +string(REGEX REPLACE "v[0-9]+\.([0-9]+)\.[0-9]+\-.*" "\\1" DUCKDB_MINOR_VERSION "${GIT_DESCRIBE}") +string(REGEX REPLACE "v[0-9]+\.[0-9]+\.([0-9]+)\-.*" "\\1" DUCKDB_PATCH_VERSION "${GIT_DESCRIBE}") +string(REGEX REPLACE "v[0-9]+\.[0-9]+\.[0-9]+\-([0-9]+)\-g.*" "\\1" DUCKDB_DEV_ITERATION "${GIT_DESCRIBE}") +if (NOT DEFINED GIT_COMMIT_HASH) + string(REGEX REPLACE "v[0-9]+\.[0-9]+\.[0-9]+\-[0-9]+\-g([a-f0-9]+)" "\\1" GIT_COMMIT_HASH "${GIT_DESCRIBE}") +endif() - if(DUCKDB_DEV_ITERATION EQUAL 0) - # on a tag; directly use the version - set(DUCKDB_VERSION "${GIT_LAST_TAG}") - else() - # not on a tag, increment the patch version by one and add a -devX suffix - math(EXPR DUCKDB_PATCH_VERSION "${DUCKDB_PATCH_VERSION}+1") - set(DUCKDB_VERSION "v${DUCKDB_MAJOR_VERSION}.${DUCKDB_MINOR_VERSION}.${DUCKDB_PATCH_VERSION}-dev${DUCKDB_DEV_ITERATION}") - endif() +string(LENGTH "${GIT_COMMIT_HASH}" LENGTH_GIT_COMMIT_HASH) +if (NOT $LENGTH_GIT_COMMIT_HASH EQUAL 10) + message(STATUS "GIT_COMMIT_HASH has lenght ${LENGTH_GIT_COMMIT_HASH} different than the expected 10") +endif() + +string(SUBSTRING "${GIT_COMMIT_HASH}" 0 10 GIT_COMMIT_HASH) + +if(DUCKDB_DEV_ITERATION EQUAL 0) + # on a tag; directly use the version + set(DUCKDB_VERSION "v${DUCKDB_MAJOR_VERSION}.${DUCKDB_MINOR_VERSION}.${DUCKDB_PATCH_VERSION}") else() - # fallback for when building from tarball - set(DUCKDB_MAJOR_VERSION 0) - set(DUCKDB_MINOR_VERSION 0) - set(DUCKDB_PATCH_VERSION 1) - set(DUCKDB_DEV_ITERATION 0) + # not on a tag, increment the patch version by one and add a -devX suffix + math(EXPR DUCKDB_PATCH_VERSION "${DUCKDB_PATCH_VERSION}+1") set(DUCKDB_VERSION "v${DUCKDB_MAJOR_VERSION}.${DUCKDB_MINOR_VERSION}.${DUCKDB_PATCH_VERSION}-dev${DUCKDB_DEV_ITERATION}") endif() string(REGEX MATCH ".*dev.*" DUCKDB_EXTENSION_FOLDER_IS_VERSION "${DUCKDB_VERSION}") -if(DUCKDB_EXTENSION_FOLDER_IS_VERSION AND DEFINED GIT_COMMIT_HASH) +if(DUCKDB_EXTENSION_FOLDER_IS_VERSION AND NOT GIT_COMMIT_HASH STREQUAL "") set(DUCKDB_NORMALIZED_VERSION "${GIT_COMMIT_HASH}") else() set(DUCKDB_NORMALIZED_VERSION "${DUCKDB_VERSION}") @@ -665,6 +682,7 @@ else() set(LOCAL_EXTENSION_REPO_DIR ${LOCAL_EXTENSION_REPO}) endif() +set(LOCAL_EXTENSION_REPO FALSE) if (NOT EXTENSION_CONFIG_BUILD AND NOT ${EXTENSION_TESTS_ONLY} AND NOT CLANG_TIDY) if (NOT Python3_FOUND) MESSAGE(STATUS "Could not find python3, create extension directory step will be skipped") @@ -676,13 +694,14 @@ if (NOT EXTENSION_CONFIG_BUILD AND NOT ${EXTENSION_TESTS_ONLY} AND NOT CLANG_TID WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT Create local extension repository) add_dependencies(duckdb_local_extension_repo duckdb_platform) + set(LOCAL_EXTENSION_REPO TRUE) message(STATUS "Extensions will be deployed to: ${LOCAL_EXTENSION_REPO_DIR}") endif() endif() function(build_loadable_extension_directory NAME OUTPUT_DIRECTORY PARAMETERS) set(TARGET_NAME ${NAME}_loadable_extension) - if (NOT EXTENSION_CONFIG_BUILD AND NOT ${EXTENSION_TESTS_ONLY} AND NOT CLANG_TIDY) + if (LOCAL_EXTENSION_REPO) add_dependencies(duckdb_local_extension_repo ${NAME}_loadable_extension) endif() # all parameters after output_directory @@ -843,7 +862,7 @@ function(register_extension NAME DONT_LINK DONT_BUILD LOAD_TESTS PATH INCLUDE_PA endfunction() # Downloads the external extension repo at the specified commit and calls register_extension -macro(register_external_extension NAME URL COMMIT DONT_LINK DONT_BUILD LOAD_TESTS PATH INCLUDE_PATH TEST_PATH APPLY_PATCHES) +macro(register_external_extension NAME URL COMMIT DONT_LINK DONT_BUILD LOAD_TESTS PATH INCLUDE_PATH TEST_PATH APPLY_PATCHES SUBMODULES) include(FetchContent) if (${APPLY_PATCHES}) set(PATCH_COMMAND python3 ${CMAKE_SOURCE_DIR}/scripts/apply_extension_patches.py ${CMAKE_SOURCE_DIR}/.github/patches/extensions/${NAME}/) @@ -852,7 +871,7 @@ macro(register_external_extension NAME URL COMMIT DONT_LINK DONT_BUILD LOAD_TEST ${NAME}_extension_fc GIT_REPOSITORY ${URL} GIT_TAG ${COMMIT} - GIT_SUBMODULES "" + GIT_SUBMODULES "${SUBMODULES}" PATCH_COMMAND ${PATCH_COMMAND} ) message(STATUS "Load extension '${NAME}' from ${URL} @ ${COMMIT}") @@ -876,7 +895,7 @@ endmacro() function(duckdb_extension_load NAME) # Parameter parsing set(options DONT_LINK DONT_BUILD LOAD_TESTS APPLY_PATCHES) - set(oneValueArgs SOURCE_DIR INCLUDE_DIR TEST_DIR GIT_URL GIT_TAG) + set(oneValueArgs SOURCE_DIR INCLUDE_DIR TEST_DIR GIT_URL GIT_TAG SUBMODULES) cmake_parse_arguments(duckdb_extension_load "${options}" "${oneValueArgs}" "" ${ARGN}) string(TOLOWER ${NAME} EXTENSION_NAME_LOWERCASE) @@ -900,7 +919,7 @@ function(duckdb_extension_load NAME) if (NOT "${duckdb_extension_load_GIT_COMMIT}" STREQUAL "") error("Git URL specified but no valid git commit was found for ${NAME} extension") endif() - register_external_extension(${NAME} "${duckdb_extension_load_GIT_URL}" "${duckdb_extension_load_GIT_TAG}" "${duckdb_extension_load_DONT_LINK}" "${duckdb_extension_load_DONT_BUILD}" "${duckdb_extension_load_LOAD_TESTS}" "${duckdb_extension_load_SOURCE_DIR}" "${duckdb_extension_load_INCLUDE_DIR}" "${duckdb_extension_load_TEST_DIR}" "${duckdb_extension_load_APPLY_PATCHES}") + register_external_extension(${NAME} "${duckdb_extension_load_GIT_URL}" "${duckdb_extension_load_GIT_TAG}" "${duckdb_extension_load_DONT_LINK}" "${duckdb_extension_load_DONT_BUILD}" "${duckdb_extension_load_LOAD_TESTS}" "${duckdb_extension_load_SOURCE_DIR}" "${duckdb_extension_load_INCLUDE_DIR}" "${duckdb_extension_load_TEST_DIR}" "${duckdb_extension_load_APPLY_PATCHES}" "${duckdb_extension_load_SUBMODULES}") elseif (NOT "${duckdb_extension_load_SOURCE_DIR}" STREQUAL "") # Local extension, custom path message(STATUS "Load extension '${NAME}' from '${duckdb_extension_load_SOURCE_DIR}'") diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e8bd7dc14de3..ffedfa3a5017 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ This project and everyone participating in it is governed by a [Code of Conduct] ## **Did you find a bug?** * **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/duckdb/duckdb/issues). -* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/duckdb/duckdb/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. +* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/duckdb/duckdb/issues/new/choose). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. ## **Did you write a patch that fixes a bug?** diff --git a/Makefile b/Makefile index 42e078df6f4c..6bf01d1f38ce 100644 --- a/Makefile +++ b/Makefile @@ -55,11 +55,16 @@ ifeq (${STATIC_LIBCPP}, 1) STATIC_LIBCPP=-DSTATIC_LIBCPP=TRUE endif -CMAKE_VARS ?= +COMMON_CMAKE_VARS ?= CMAKE_VARS_BUILD ?= CMAKE_LLVM_VARS ?= SKIP_EXTENSIONS ?= BUILD_EXTENSIONS ?= +ifdef OVERRIDE_GIT_DESCRIBE + COMMON_CMAKE_VARS:=${COMMON_CMAKE_VARS} -DOVERRIDE_GIT_DESCRIBE="${OVERRIDE_GIT_DESCRIBE}" +else + COMMON_CMAKE_VARS:=${COMMON_CMAKE_VARS} -DOVERRIDE_GIT_DESCRIBE="" +endif ifneq (${DUCKDB_EXTENSIONS}, ) BUILD_EXTENSIONS:=${DUCKDB_EXTENSIONS} endif @@ -257,6 +262,8 @@ ifneq ("${CMAKE_LLVM_PATH}", "") CMAKE_VARS:=${CMAKE_VARS} -DCMAKE_RANLIB='${CMAKE_LLVM_PATH}/bin/llvm-ranlib' -DCMAKE_AR='${CMAKE_LLVM_PATH}/bin/llvm-ar' -DCMAKE_CXX_COMPILER='${CMAKE_LLVM_PATH}/bin/clang++' -DCMAKE_C_COMPILER='${CMAKE_LLVM_PATH}/bin/clang' endif +CMAKE_VARS:=${CMAKE_VARS} ${COMMON_CMAKE_VARS} + ifdef DUCKDB_PLATFORM ifneq ("${DUCKDB_PLATFORM}", "") CMAKE_VARS:=${CMAKE_VARS} -DDUCKDB_EXPLICIT_PLATFORM='${DUCKDB_PLATFORM}' @@ -284,17 +291,17 @@ release: ${EXTENSION_CONFIG_STEP} wasm_mvp: ${EXTENSION_CONFIG_STEP} mkdir -p ./build/wasm_mvp && \ - emcmake cmake $(GENERATOR) -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_mvp -DCMAKE_CXX_FLAGS="-DDUCKDB_CUSTOM_PLATFORM=wasm_mvp" && \ + emcmake cmake $(GENERATOR) ${COMMON_CMAKE_VARS} -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_mvp -DCMAKE_CXX_FLAGS="-DDUCKDB_CUSTOM_PLATFORM=wasm_mvp" && \ emmake make -j8 -Cbuild/wasm_mvp wasm_eh: ${EXTENSION_CONFIG_STEP} mkdir -p ./build/wasm_eh && \ - emcmake cmake $(GENERATOR) -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_eh -DCMAKE_CXX_FLAGS="-fwasm-exceptions -DWEBDB_FAST_EXCEPTIONS=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_eh" && \ + emcmake cmake $(GENERATOR) ${COMMON_CMAKE_VARS} -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_eh -DCMAKE_CXX_FLAGS="-fwasm-exceptions -DWEBDB_FAST_EXCEPTIONS=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_eh" && \ emmake make -j8 -Cbuild/wasm_eh wasm_threads: ${EXTENSION_CONFIG_STEP} mkdir -p ./build/wasm_threads && \ - emcmake cmake $(GENERATOR) -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_threads -DCMAKE_CXX_FLAGS="-fwasm-exceptions -DWEBDB_FAST_EXCEPTIONS=1 -DWITH_WASM_THREADS=1 -DWITH_WASM_SIMD=1 -DWITH_WASM_BULK_MEMORY=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_threads" && \ + emcmake cmake $(GENERATOR) ${COMMON_CMAKE_VARS} -DWASM_LOADABLE_EXTENSIONS=1 -DBUILD_EXTENSIONS_ONLY=1 -Bbuild/wasm_threads -DCMAKE_CXX_FLAGS="-fwasm-exceptions -DWEBDB_FAST_EXCEPTIONS=1 -DWITH_WASM_THREADS=1 -DWITH_WASM_SIMD=1 -DWITH_WASM_BULK_MEMORY=1 -DDUCKDB_CUSTOM_PLATFORM=wasm_threads" && \ emmake make -j8 -Cbuild/wasm_threads cldebug: ${EXTENSION_CONFIG_STEP} diff --git a/README.md b/README.md index 3f67b6d916ba..926a666cb853 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,10 @@ Refer to our [Data Import](https://duckdb.org/docs/data/overview) section for mo ## SQL Reference The [website](https://duckdb.org/docs/sql/introduction) contains a reference of functions and SQL constructs available in DuckDB. -## Development -For development, DuckDB requires [CMake](https://cmake.org), Python3 and a `C++11` compliant compiler. Run `make` in the root directory to compile the sources. For development, use `make debug` to build a non-optimized debug version. You should run `make unit` and `make allunit` to verify that your version works properly after making changes. To test performance, you can run `BUILD_BENCHMARK=1 BUILD_TPCH=1 make` and then perform several standard benchmarks from the root directory by executing `./build/release/benchmark/benchmark_runner`. The detail of benchmarks is in our [Benchmark Guide](benchmark/README.md). +## Development +For development, DuckDB requires [CMake](https://cmake.org), Python3 and a `C++11` compliant compiler. Run `make` in the root directory to compile the sources. For development, use `make debug` to build a non-optimized debug version. You should run `make unit` and `make allunit` to verify that your version works properly after making changes. To test performance, you can run `BUILD_BENCHMARK=1 BUILD_TPCH=1 make` and then perform several standard benchmarks from the root directory by executing `./build/release/benchmark/benchmark_runner`. The details of benchmarks are in our [Benchmark Guide](benchmark/README.md). -Please also refer to our [Contribution Guide](CONTRIBUTING.md). +Please also refer to our [Build Guide](https://duckdb.org/dev/building) and [Contribution Guide](CONTRIBUTING.md). + +## Support +See the [Support Options](https://duckdblabs.com/support/) page. diff --git a/benchmark/benchmark_runner.cpp b/benchmark/benchmark_runner.cpp index 9710b7ebe99f..04549b0c3ab6 100644 --- a/benchmark/benchmark_runner.cpp +++ b/benchmark/benchmark_runner.cpp @@ -58,28 +58,45 @@ void BenchmarkRunner::InitializeBenchmarkDirectory() { atomic is_active; atomic timeout; -void sleep_thread(Benchmark *benchmark, BenchmarkState *state, int timeout_duration) { - // timeout is given in seconds - // we wait 10ms per iteration, so timeout * 100 gives us the amount of - // iterations +void sleep_thread(Benchmark *benchmark, BenchmarkRunner *runner, BenchmarkState *state, bool hotrun, + int timeout_duration) { if (timeout_duration < 0) { return; } + // timeout is given in seconds + // we wait 10ms per iteration, so timeout * 100 gives us the amount of + // iterations for (size_t i = 0; i < (size_t)(timeout_duration * 100) && is_active; i++) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); } if (is_active) { timeout = true; benchmark->Interrupt(state); + + // wait again after interrupting + for (size_t i = 0; i < (size_t)(timeout_duration * 100) && is_active; i++) { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + if (is_active) { + // still active - we might be stuck in an infinite loop + // our interrupt is not working + if (!hotrun) { + runner->Log(StringUtil::Format("%s\t%d\t", benchmark->name, 0)); + } + runner->LogResult("KILLED"); + exit(1); + } } } void BenchmarkRunner::Log(string message) { fprintf(stderr, "%s", message.c_str()); + fflush(stderr); } void BenchmarkRunner::LogLine(string message) { fprintf(stderr, "%s\n", message.c_str()); + fflush(stderr); } void BenchmarkRunner::LogResult(string message) { @@ -113,7 +130,7 @@ void BenchmarkRunner::RunBenchmark(Benchmark *benchmark) { } is_active = true; timeout = false; - std::thread interrupt_thread(sleep_thread, benchmark, state.get(), benchmark->Timeout()); + std::thread interrupt_thread(sleep_thread, benchmark, this, state.get(), hotrun, benchmark->Timeout()); profiler.Start(); benchmark->Run(state.get()); diff --git a/benchmark/include/interpreted_benchmark.hpp b/benchmark/include/interpreted_benchmark.hpp index 15e7ba1c4bbc..1edc565d694d 100644 --- a/benchmark/include/interpreted_benchmark.hpp +++ b/benchmark/include/interpreted_benchmark.hpp @@ -69,6 +69,10 @@ class InterpretedBenchmark : public Benchmark { string benchmark_path; string cache_db = ""; + string cache_file = ""; + // check the existence of a cached db, but do not connect + // can be used to test accessing data from a different db in a non-persistent connection + bool cache_no_connect = false; std::unordered_set extensions; int64_t result_column_count = 0; vector> result_values; diff --git a/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_customer_demographics.benchmark b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_customer_demographics.benchmark new file mode 100644 index 000000000000..f197a43b2097 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_customer_demographics.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/csv/ingest_customer_demographics.benchmark +# description: benchmark ingestion of customer_demographics +# group: [csv] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=customer_demographics +format=csv diff --git a/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_inventory.benchmark b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_inventory.benchmark new file mode 100644 index 000000000000..d6fe21048281 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_inventory.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/csv/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [csv] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=inventory +format=csv diff --git a/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_store_sales.benchmark b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_store_sales.benchmark new file mode 100644 index 000000000000..6f3864d115af --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/csv/ingest_store_sales.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/csv/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [csv] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=store_sales +format=csv diff --git a/benchmark/ingestion/in_memory_db/tpcds/native/ingest_customer_demographics.benchmark b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_customer_demographics.benchmark new file mode 100644 index 000000000000..aba799cc4998 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_customer_demographics.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/native/ingest_customer_demographics.benchmark +# description: benchmark ingestion of customer_demographics +# group: [native] + +template benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in +table_name=customer_demographics +format=native diff --git a/benchmark/ingestion/in_memory_db/tpcds/native/ingest_inventory.benchmark b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_inventory.benchmark new file mode 100644 index 000000000000..bc8a2d200eb8 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_inventory.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/native/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [native] + +template benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in +table_name=inventory +format=native diff --git a/benchmark/ingestion/in_memory_db/tpcds/native/ingest_store_sales.benchmark b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_store_sales.benchmark new file mode 100644 index 000000000000..18de5f35c2b5 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/native/ingest_store_sales.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/native/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [native] + +template benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in +table_name=store_sales +format=native diff --git a/benchmark/ingestion/in_memory_db/tpcds/native/load_native.sql b/benchmark/ingestion/in_memory_db/tpcds/native/load_native.sql new file mode 100644 index 000000000000..71e10aafd270 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/native/load_native.sql @@ -0,0 +1,26 @@ +call dsdgen(sf=1); + +create view call_center_native as select * from call_center; +create view household_demographics_native as select * from household_demographics; +create view store_returns_native as select * from store_returns; +create view catalog_page_native as select * from catalog_page; +create view income_band_native as select * from income_band; +create view store_sales_native as select * from store_sales; +create view catalog_returns_native as select * from catalog_returns; +create view inventory_native as select * from inventory; +create view time_dim_native as select * from time_dim; +create view catalog_sales_native as select * from catalog_sales; +create view item_native as select * from item; +create view warehouse_native as select * from warehouse; +create view customer_native as select * from customer; +create view promotion_native as select * from promotion; +create view web_page_native as select * from web_page; +create view customer_address_native as select * from customer_address; +create view reason_native as select * from reason; +create view web_returns_native as select * from web_returns; +create view customer_demographics_native as select * from customer_demographics; +create view ship_mode_native as select * from ship_mode; +create view web_sales_native as select * from web_sales; +create view date_dim_native as select * from date_dim; +create view store_native as select * from store; +create view web_site_native as select * from web_site; \ No newline at end of file diff --git a/benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in b/benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in new file mode 100644 index 000000000000..071a931a264b --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/native/tpcds_ingest_native.benchmark.in @@ -0,0 +1,19 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpcds + +require parquet + +require tpcds + +load benchmark/ingestion/in_memory_db/tpcds/native/load_native.sql + +run +create table ${table_name}_ingested as select * from ${table_name}_${format}; + +cleanup +DROP TABLE ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_customer_demographics.benchmark b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_customer_demographics.benchmark new file mode 100644 index 000000000000..7a0352909aad --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_customer_demographics.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_customer_demographics.benchmark +# description: benchmark ingestion of customer_demographics +# group: [parquet] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=customer_demographics +format=parquet diff --git a/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_inventory.benchmark b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_inventory.benchmark new file mode 100644 index 000000000000..51481018a66d --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_inventory.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [parquet] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=inventory +format=parquet diff --git a/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_store_sales.benchmark b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_store_sales.benchmark new file mode 100644 index 000000000000..e57be506b05c --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_store_sales.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpcds/parquet/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [parquet] + +template benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in +table_name=store_sales +format=parquet diff --git a/benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in b/benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in new file mode 100644 index 000000000000..173eda35307f --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpcds/tpcds_ingestion_in_memory.benchmark.in @@ -0,0 +1,23 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpcds + +require tpcds + +require parquet + +cache tpcds_sf1_ingest.duckdb no_connect + +load benchmark/ingestion/load_tpcds.sql + +# reads table from view created in load script + +run +create table ${table_name}_ingested as select * from read_${format}('${BENCHMARK_DIR}/tpcds_${format}/${table_name}.${format}'); + +cleanup +drop table ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/ingestion/in_memory_db/tpch/csv/ingest_lineitem.benchmark b/benchmark/ingestion/in_memory_db/tpch/csv/ingest_lineitem.benchmark new file mode 100644 index 000000000000..20c68aa0facd --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/csv/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/csv/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [csv] + +template benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in +table_name=lineitem +format=csv diff --git a/benchmark/ingestion/in_memory_db/tpch/csv/ingest_orders.benchmark b/benchmark/ingestion/in_memory_db/tpch/csv/ingest_orders.benchmark new file mode 100644 index 000000000000..8365949e3160 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/csv/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/csv/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [csv] + +template benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in +table_name=orders +format=csv diff --git a/benchmark/ingestion/in_memory_db/tpch/native/ingest_lineitem.benchmark b/benchmark/ingestion/in_memory_db/tpch/native/ingest_lineitem.benchmark new file mode 100644 index 000000000000..6c5056c3a9b3 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/native/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/native/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [native] + +template benchmark/ingestion/in_memory_db/tpch/native/tpch_ingest_native.benchmark.in +table_name=lineitem +format=native diff --git a/benchmark/ingestion/in_memory_db/tpch/native/ingest_orders.benchmark b/benchmark/ingestion/in_memory_db/tpch/native/ingest_orders.benchmark new file mode 100644 index 000000000000..e1c7d8329bd0 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/native/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/native/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [native] + +template benchmark/ingestion/in_memory_db/tpch/native/tpch_ingest_native.benchmark.in +table_name=orders +format=native diff --git a/benchmark/ingestion/in_memory_db/tpch/native/load_native.sql b/benchmark/ingestion/in_memory_db/tpch/native/load_native.sql new file mode 100644 index 000000000000..33f8c4891f8a --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/native/load_native.sql @@ -0,0 +1,10 @@ +call dbgen(sf=1); + +create view customer_native as select * from customer; +create view lineitem_native as select * from lineitem; +create view nation_native as select * from nation; +create view orders_native as select * from orders; +create view part_native as select * from part; +create view partsupp_native as select * from partsupp; +create view region_native as select * from region; +create view supplier_native as select * from supplier; \ No newline at end of file diff --git a/benchmark/ingestion/in_memory_db/tpch/native/tpch_ingest_native.benchmark.in b/benchmark/ingestion/in_memory_db/tpch/native/tpch_ingest_native.benchmark.in new file mode 100644 index 000000000000..0e63c0bf8d14 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/native/tpch_ingest_native.benchmark.in @@ -0,0 +1,19 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpch + +require parquet + +require tpch + +load benchmark/ingestion/in_memory_db/tpch/native/load_native.sql + +run +create table ${table_name}_ingested as select * from ${table_name}_${format}; + +cleanup +DROP TABLE ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_lineitem.benchmark b/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_lineitem.benchmark new file mode 100644 index 000000000000..bdda5393e9a1 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/parquet/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [parquet] + +template benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in +table_name=lineitem +format=parquet diff --git a/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_orders.benchmark b/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_orders.benchmark new file mode 100644 index 000000000000..10ee1efc4365 --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/parquet/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/in_memory_db/tpch/parquet/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [parquet] + +template benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in +table_name=orders +format=parquet diff --git a/benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in b/benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in new file mode 100644 index 000000000000..6f4624b0f0cc --- /dev/null +++ b/benchmark/ingestion/in_memory_db/tpch/tpch_ingestion_in_memory.benchmark.in @@ -0,0 +1,21 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpch + +require parquet + +require tpch + +cache tpch_sf1_ingest.duckdb no_connect + +load benchmark/ingestion/load_tpch.sql + +run +create table ${table_name}_ingested as select * from read_${format}('${BENCHMARK_DIR}/tpch_${format}/${table_name}.${format}'); + +cleanup +DROP TABLE ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/ingestion/load_tpcds.sql b/benchmark/ingestion/load_tpcds.sql new file mode 100644 index 000000000000..2995a1def961 --- /dev/null +++ b/benchmark/ingestion/load_tpcds.sql @@ -0,0 +1,99 @@ +CALL dsdgen(sf=1); +EXPORT DATABASE 'duckdb_benchmark_data/tpcds_parquet' (FORMAT PARQUET); +EXPORT DATABASE 'duckdb_benchmark_data/tpcds_csv' (FORMAT CSV); + +create view call_center_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/call_center.csv'); +create view call_center_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/call_center.parquet'); +create view call_center_native as select * from call_center; + +create view household_demographics_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/household_demographics.csv'); +create view household_demographics_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/household_demographics.parquet'); +create view household_demographics_native as select * from household_demographics; + +create view store_returns_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/store_returns.csv'); +create view store_returns_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/store_returns.parquet'); +create view store_returns_native as select * from store_returns; + +create view catalog_page_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/catalog_page.csv'); +create view catalog_page_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/catalog_page.parquet'); +create view catalog_page_native as select * from catalog_page; + +create view income_band_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/income_band.csv'); +create view income_band_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/income_band.parquet'); +create view income_band_native as select * from income_band; + +create view store_sales_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/store_sales.csv'); +create view store_sales_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/store_sales.parquet'); +create view store_sales_native as select * from store_sales; + +create view catalog_returns_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/catalog_returns.csv'); +create view catalog_returns_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/catalog_returns.parquet'); +create view catalog_returns_native as select * from catalog_returns; + +create view inventory_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/inventory.csv'); +create view inventory_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/inventory.parquet'); +create view inventory_native as select * from inventory; + +create view time_dim_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/time_dim.csv'); +create view time_dim_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/time_dim.parquet'); +create view time_dim_native as select * from time_dim; + +create view catalog_sales_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/catalog_sales.csv'); +create view catalog_sales_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/catalog_sales.parquet'); +create view catalog_sales_native as select * from catalog_sales; + +create view item_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/item.csv'); +create view item_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/item.parquet'); +create view item_native as select * from item; + +create view warehouse_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/warehouse.csv'); +create view warehouse_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/warehouse.parquet'); +create view warehouse_native as select * from warehouse; + +create view customer_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/customer.csv'); +create view customer_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/customer.parquet'); +create view customer_native as select * from customer; + +create view promotion_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/promotion.csv'); +create view promotion_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/promotion.parquet'); +create view promotion_native as select * from promotion; + +create view web_page_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/web_page.csv'); +create view web_page_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/web_page.parquet'); +create view web_page_native as select * from web_page; + +create view customer_address_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/customer_address.csv'); +create view customer_address_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/customer_address.parquet'); +create view customer_address_native as select * from customer_address; + +create view reason_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/reason.csv'); +create view reason_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/reason.parquet'); +create view reason_native as select * from reason; + +create view web_returns_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/web_returns.csv'); +create view web_returns_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/web_returns.parquet'); +create view web_returns_native as select * from web_returns; + +create view customer_demographics_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/customer_demographics.csv'); +create view customer_demographics_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/customer_demographics.parquet'); +create view customer_demographics_native as select * from customer_demographics; + +create view ship_mode_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/ship_mode.csv'); +create view ship_mode_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/ship_mode.parquet'); +create view ship_mode_native as select * from ship_mode; + +create view web_sales_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/web_sales.csv'); +create view web_sales_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/web_sales.parquet'); +create view web_sales_native as select * from web_sales; + +create view date_dim_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/date_dim.csv'); +create view date_dim_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/date_dim.parquet'); +create view date_dim_native as select * from date_dim; + +create view store_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/store.csv'); +create view store_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/store.parquet'); +create view store_native as select * from store; + +create view web_site_csv as select * from read_csv('duckdb_benchmark_data/tpcds_csv/web_site.csv'); +create view web_site_parquet as select * from read_parquet('duckdb_benchmark_data/tpcds_parquet/web_site.parquet'); +create view web_site_native as select * from web_site; diff --git a/benchmark/ingestion/load_tpch.sql b/benchmark/ingestion/load_tpch.sql new file mode 100644 index 000000000000..720514f2244d --- /dev/null +++ b/benchmark/ingestion/load_tpch.sql @@ -0,0 +1,35 @@ +CALL dbgen(sf=1); +EXPORT DATABASE 'duckdb_benchmark_data/tpch_parquet' (FORMAT PARQUET); +EXPORT DATABASE 'duckdb_benchmark_data/tpch_csv' (FORMAT CSV); + +create view customer_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/customer.csv'); +create view customer_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/customer.parquet'); +create view customer_native as select * from customer; + +create view lineitem_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/lineitem.csv'); +create view lineitem_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/lineitem.parquet'); +create view lineitem_native as select * from lineitem; + +create view nation_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/nation.csv'); +create view nation_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/nation.parquet'); +create view nation_native as select * from nation; + +create view orders_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/orders.csv'); +create view orders_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/orders.parquet'); +create view orders_native as select * from orders; + +create view part_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/part.csv'); +create view part_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/part.parquet'); +create view part_native as select * from part; + +create view partsupp_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/partsupp.csv'); +create view partsupp_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/partsupp.parquet'); +create view partsupp_native as select * from partsupp; + +create view region_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/region.csv'); +create view region_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/region.parquet'); +create view region_native as select * from region; + +create view supplier_csv as select * from read_csv('duckdb_benchmark_data/tpch_csv/supplier.csv'); +create view supplier_parquet as select * from read_parquet('duckdb_benchmark_data/tpch_parquet/supplier.parquet'); +create view supplier_native as select * from supplier; \ No newline at end of file diff --git a/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_inventory.benchmark b/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_inventory.benchmark new file mode 100644 index 000000000000..602a617e73e7 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_inventory.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/csv/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [csv] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=inventory +format=csv + diff --git a/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_store_sales.benchmark b/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_store_sales.benchmark new file mode 100644 index 000000000000..74da6e29e91c --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/csv/ingest_store_sales.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/csv/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [csv] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=store_sales +format=csv + diff --git a/benchmark/ingestion/persistent_storage/tpcds/native/ingest_inventory.benchmark b/benchmark/ingestion/persistent_storage/tpcds/native/ingest_inventory.benchmark new file mode 100644 index 000000000000..ac405be19eba --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/native/ingest_inventory.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/native/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [native] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=inventory +format=native + diff --git a/benchmark/ingestion/persistent_storage/tpcds/native/ingest_store_sales.benchmark b/benchmark/ingestion/persistent_storage/tpcds/native/ingest_store_sales.benchmark new file mode 100644 index 000000000000..a16b400abb42 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/native/ingest_store_sales.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/native/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [native] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=store_sales +format=native + diff --git a/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_inventory.benchmark b/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_inventory.benchmark new file mode 100644 index 000000000000..9e8cc2c5ba5f --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_inventory.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_inventory.benchmark +# description: benchmark ingestion of inventory +# group: [parquet] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=inventory +format=parquet + diff --git a/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_store_sales.benchmark b/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_store_sales.benchmark new file mode 100644 index 000000000000..9e1d8b63aafc --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_store_sales.benchmark @@ -0,0 +1,8 @@ +# name: benchmark/ingestion/persistent_storage/tpcds/parquet/ingest_store_sales.benchmark +# description: benchmark ingestion of store_sales +# group: [parquet] + +template benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in +table_name=store_sales +format=parquet + diff --git a/benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in b/benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in new file mode 100644 index 000000000000..c0964228177e --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpcds/tpcds_ingestion_persistent.benchmark.in @@ -0,0 +1,22 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpcds + +require tpcds + +require parquet + +cache tpcds_sf1_ingest.duckdb + +load benchmark/ingestion/load_tpcds.sql + +# reads table from view created in load script +run +create table ${table_name}_ingested as select * from ${table_name}_${format}; + +cleanup +drop table ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/ingestion/persistent_storage/tpch/csv/ingest_lineitem.benchmark b/benchmark/ingestion/persistent_storage/tpch/csv/ingest_lineitem.benchmark new file mode 100644 index 000000000000..ad6b201af378 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/csv/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/csv/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [csv] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=lineitem +format=csv diff --git a/benchmark/ingestion/persistent_storage/tpch/csv/ingest_orders.benchmark b/benchmark/ingestion/persistent_storage/tpch/csv/ingest_orders.benchmark new file mode 100644 index 000000000000..639e5a385106 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/csv/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/csv/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [csv] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=orders +format=csv diff --git a/benchmark/ingestion/persistent_storage/tpch/native/ingest_lineitem.benchmark b/benchmark/ingestion/persistent_storage/tpch/native/ingest_lineitem.benchmark new file mode 100644 index 000000000000..1d00bafd9080 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/native/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/native/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [native] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=lineitem +format=native diff --git a/benchmark/ingestion/persistent_storage/tpch/native/ingest_orders.benchmark b/benchmark/ingestion/persistent_storage/tpch/native/ingest_orders.benchmark new file mode 100644 index 000000000000..2d314ef0a9c8 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/native/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/native/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [native] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=orders +format=native diff --git a/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_lineitem.benchmark b/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_lineitem.benchmark new file mode 100644 index 000000000000..51bdf7275a64 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_lineitem.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/parquet/ingest_lineitem.benchmark +# description: benchmark ingestion of lineitem +# group: [parquet] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=lineitem +format=parquet diff --git a/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_orders.benchmark b/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_orders.benchmark new file mode 100644 index 000000000000..2189ebca4d80 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/parquet/ingest_orders.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/ingestion/persistent_storage/tpch/parquet/ingest_orders.benchmark +# description: benchmark ingestion of orders +# group: [parquet] + +template benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in +table_name=orders +format=parquet diff --git a/benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in b/benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in new file mode 100644 index 000000000000..525b2341a4e4 --- /dev/null +++ b/benchmark/ingestion/persistent_storage/tpch/tpch_ingestion_persistent.benchmark.in @@ -0,0 +1,21 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [ingestion] + +name Q${table_name} +group ingestion +subgroup tpch + +require parquet + +require tpch + +cache tpch_sf1_ingest.duckdb + +load benchmark/ingestion/load_tpch.sql + +run +create table ${table_name}_ingested as select * from ${table_name}_${format}; + +cleanup +DROP TABLE ${table_name}_ingested; \ No newline at end of file diff --git a/benchmark/interpreted_benchmark.cpp b/benchmark/interpreted_benchmark.cpp index aafc2f741c64..84f7ae2043ac 100644 --- a/benchmark/interpreted_benchmark.cpp +++ b/benchmark/interpreted_benchmark.cpp @@ -178,10 +178,20 @@ void InterpretedBenchmark::LoadBenchmark() { } extensions.insert(splits[1]); } else if (splits[0] == "cache") { - if (splits.size() != 2) { - throw std::runtime_error(reader.FormatException("cache requires a single parameter")); + if (splits.size() == 2) { + cache_db = splits[1]; + } else if (splits.size() == 3 && splits[2] == "no_connect") { + cache_db = splits[1]; + cache_no_connect = true; + } else { + throw std::runtime_error( + reader.FormatException("cache requires a db file, and optionally a no_connect")); + } + if (StringUtil::EndsWith(cache_db, ".csv") || StringUtil::EndsWith(cache_db, ".parquet") || + StringUtil::EndsWith(cache_db, ".csv.gz")) { + cache_file = cache_db; + cache_db = string(); } - cache_db = splits[1]; } else if (splits[0] == "storage") { if (splits.size() != 2) { throw std::runtime_error(reader.FormatException("storage requires a single parameter")); @@ -348,7 +358,13 @@ unique_ptr InterpretedBenchmark::Initialize(BenchmarkConfigurati load_query = queries["load"]; } - if (cache_db.empty() && cache_db.compare(DEFAULT_DB_PATH) != 0) { + if (!cache_file.empty()) { + auto fs = FileSystem::CreateLocal(); + if (!fs->FileExists(fs->JoinPath(BenchmarkRunner::DUCKDB_BENCHMARK_DIRECTORY, cache_file))) { + // no cache or db_path specified: just run the initialization code + result = state->con.Query(load_query); + } + } else if (cache_db.empty() && cache_db.compare(DEFAULT_DB_PATH) != 0) { // no cache or db_path specified: just run the initialization code result = state->con.Query(load_query); } else { @@ -377,6 +393,18 @@ unique_ptr InterpretedBenchmark::Initialize(BenchmarkConfigurati } result = std::move(result->next); } + + // if a cache db is required but no connection, then reset the connection + if (!cache_db.empty() && cache_no_connect) { + cache_db = ""; + in_memory = true; + cache_no_connect = false; + if (!load_query.empty()) { + queries.erase("load"); + } + return Initialize(config); + } + if (config.profile_info == BenchmarkProfileInfo::NORMAL) { state->con.Query("PRAGMA enable_profiling"); } else if (config.profile_info == BenchmarkProfileInfo::DETAILED) { diff --git a/benchmark/large/tpch-sf100/load.sql b/benchmark/large/tpch-sf100/load.sql new file mode 100644 index 000000000000..2987951f8e76 --- /dev/null +++ b/benchmark/large/tpch-sf100/load.sql @@ -0,0 +1 @@ +CALL dbgen(sf=100); diff --git a/benchmark/large/tpch-sf100/q01.benchmark b/benchmark/large/tpch-sf100/q01.benchmark new file mode 100644 index 000000000000..00223f7cf91b --- /dev/null +++ b/benchmark/large/tpch-sf100/q01.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q01.benchmark +# description: Run query 01 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=1 +QUERY_NUMBER_PADDED=01 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q02.benchmark b/benchmark/large/tpch-sf100/q02.benchmark new file mode 100644 index 000000000000..30155548960d --- /dev/null +++ b/benchmark/large/tpch-sf100/q02.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q02.benchmark +# description: Run query 02 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=2 +QUERY_NUMBER_PADDED=02 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q03.benchmark b/benchmark/large/tpch-sf100/q03.benchmark new file mode 100644 index 000000000000..6aa48319c0f6 --- /dev/null +++ b/benchmark/large/tpch-sf100/q03.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q03.benchmark +# description: Run query 03 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=3 +QUERY_NUMBER_PADDED=03 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q04.benchmark b/benchmark/large/tpch-sf100/q04.benchmark new file mode 100644 index 000000000000..a5fb4f0cb737 --- /dev/null +++ b/benchmark/large/tpch-sf100/q04.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q04.benchmark +# description: Run query 04 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=4 +QUERY_NUMBER_PADDED=04 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q05.benchmark b/benchmark/large/tpch-sf100/q05.benchmark new file mode 100644 index 000000000000..5876924bd43e --- /dev/null +++ b/benchmark/large/tpch-sf100/q05.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q05.benchmark +# description: Run query 05 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=5 +QUERY_NUMBER_PADDED=05 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q06.benchmark b/benchmark/large/tpch-sf100/q06.benchmark new file mode 100644 index 000000000000..c448fbfc17c3 --- /dev/null +++ b/benchmark/large/tpch-sf100/q06.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q06.benchmark +# description: Run query 06 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=6 +QUERY_NUMBER_PADDED=06 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q07.benchmark b/benchmark/large/tpch-sf100/q07.benchmark new file mode 100644 index 000000000000..4902f2b15ff9 --- /dev/null +++ b/benchmark/large/tpch-sf100/q07.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q07.benchmark +# description: Run query 07 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=7 +QUERY_NUMBER_PADDED=07 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q08.benchmark b/benchmark/large/tpch-sf100/q08.benchmark new file mode 100644 index 000000000000..e6adfb160827 --- /dev/null +++ b/benchmark/large/tpch-sf100/q08.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q08.benchmark +# description: Run query 08 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=8 +QUERY_NUMBER_PADDED=08 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q09.benchmark b/benchmark/large/tpch-sf100/q09.benchmark new file mode 100644 index 000000000000..861b880e4a52 --- /dev/null +++ b/benchmark/large/tpch-sf100/q09.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q09.benchmark +# description: Run query 09 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=9 +QUERY_NUMBER_PADDED=09 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q10.benchmark b/benchmark/large/tpch-sf100/q10.benchmark new file mode 100644 index 000000000000..733ed931d8e9 --- /dev/null +++ b/benchmark/large/tpch-sf100/q10.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q10.benchmark +# description: Run query 10 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=10 +QUERY_NUMBER_PADDED=10 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q11.benchmark b/benchmark/large/tpch-sf100/q11.benchmark new file mode 100644 index 000000000000..a48f172fa318 --- /dev/null +++ b/benchmark/large/tpch-sf100/q11.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q11.benchmark +# description: Run query 11 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=11 +QUERY_NUMBER_PADDED=11 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q12.benchmark b/benchmark/large/tpch-sf100/q12.benchmark new file mode 100644 index 000000000000..6bb961f20b1b --- /dev/null +++ b/benchmark/large/tpch-sf100/q12.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q12.benchmark +# description: Run query 12 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=12 +QUERY_NUMBER_PADDED=12 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q13.benchmark b/benchmark/large/tpch-sf100/q13.benchmark new file mode 100644 index 000000000000..15175ea47413 --- /dev/null +++ b/benchmark/large/tpch-sf100/q13.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q13.benchmark +# description: Run query 13 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=13 +QUERY_NUMBER_PADDED=13 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q14.benchmark b/benchmark/large/tpch-sf100/q14.benchmark new file mode 100644 index 000000000000..0706f315e81e --- /dev/null +++ b/benchmark/large/tpch-sf100/q14.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q14.benchmark +# description: Run query 14 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=14 +QUERY_NUMBER_PADDED=14 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q15.benchmark b/benchmark/large/tpch-sf100/q15.benchmark new file mode 100644 index 000000000000..2e49f4978a30 --- /dev/null +++ b/benchmark/large/tpch-sf100/q15.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q15.benchmark +# description: Run query 15 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=15 +QUERY_NUMBER_PADDED=15 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q16.benchmark b/benchmark/large/tpch-sf100/q16.benchmark new file mode 100644 index 000000000000..3df5cf4e8a42 --- /dev/null +++ b/benchmark/large/tpch-sf100/q16.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q16.benchmark +# description: Run query 16 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=16 +QUERY_NUMBER_PADDED=16 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q17.benchmark b/benchmark/large/tpch-sf100/q17.benchmark new file mode 100644 index 000000000000..7b094ea789f3 --- /dev/null +++ b/benchmark/large/tpch-sf100/q17.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q17.benchmark +# description: Run query 17 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=17 +QUERY_NUMBER_PADDED=17 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q18.benchmark b/benchmark/large/tpch-sf100/q18.benchmark new file mode 100644 index 000000000000..62b7ad94017e --- /dev/null +++ b/benchmark/large/tpch-sf100/q18.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q18.benchmark +# description: Run query 18 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=18 +QUERY_NUMBER_PADDED=18 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q19.benchmark b/benchmark/large/tpch-sf100/q19.benchmark new file mode 100644 index 000000000000..a234692f3e1d --- /dev/null +++ b/benchmark/large/tpch-sf100/q19.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q19.benchmark +# description: Run query 19 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=19 +QUERY_NUMBER_PADDED=19 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q20.benchmark b/benchmark/large/tpch-sf100/q20.benchmark new file mode 100644 index 000000000000..b8e1ab694395 --- /dev/null +++ b/benchmark/large/tpch-sf100/q20.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q20.benchmark +# description: Run query 20 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=20 +QUERY_NUMBER_PADDED=20 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q21.benchmark b/benchmark/large/tpch-sf100/q21.benchmark new file mode 100644 index 000000000000..67637ba6e86f --- /dev/null +++ b/benchmark/large/tpch-sf100/q21.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q21.benchmark +# description: Run query 21 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=21 +QUERY_NUMBER_PADDED=21 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/q22.benchmark b/benchmark/large/tpch-sf100/q22.benchmark new file mode 100644 index 000000000000..5f87c6808b6a --- /dev/null +++ b/benchmark/large/tpch-sf100/q22.benchmark @@ -0,0 +1,7 @@ +# name: benchmark/large/tpch-sf100/q22.benchmark +# description: Run query 22 from the TPC-H benchmark () +# group: [tpch-sf100] + +template benchmark/large/tpch-sf100/tpch_sf100.benchmark.in +QUERY_NUMBER=22 +QUERY_NUMBER_PADDED=22 \ No newline at end of file diff --git a/benchmark/large/tpch-sf100/tpch_sf100.benchmark.in b/benchmark/large/tpch-sf100/tpch_sf100.benchmark.in new file mode 100644 index 000000000000..15f68a9367d7 --- /dev/null +++ b/benchmark/large/tpch-sf100/tpch_sf100.benchmark.in @@ -0,0 +1,17 @@ +# name: ${FILE_PATH} +# description: ${DESCRIPTION} +# group: [sf1] + +name Q${QUERY_NUMBER_PADDED} +group tpch +subgroup sf1 + +require tpch + +cache tpch_sf100.duckdb + +load benchmark/large/tpch-sf100/load.sql + +run extension/tpch/dbgen/queries/q${QUERY_NUMBER_PADDED}.sql + +result extension/tpch/dbgen/answers/sf100/q${QUERY_NUMBER_PADDED}.csv \ No newline at end of file diff --git a/benchmark/micro/csv/16_byte_values.benchmark b/benchmark/micro/csv/16_byte_values.benchmark new file mode 100644 index 000000000000..62797703727c --- /dev/null +++ b/benchmark/micro/csv/16_byte_values.benchmark @@ -0,0 +1,14 @@ +# name: benchmark/micro/csv/16_byte_values.benchmark +# description: Run CSV scan on file with muiltiple values of 16 bytes +# group: [csv] + +name CSV Read Benchmark with nullpadding +group csv + +load +CREATE TABLE t1 AS select 'thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___'; +insert into t1 select 'thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___,thisis16bytes___' from range(0,10000000) tbl(i); +COPY t1 TO '${BENCHMARK_DIR}/this_is_16bytes.csv' (FORMAT CSV, HEADER 0); + +run +SELECT * from read_csv('${BENCHMARK_DIR}/this_is_16bytes.csv',delim= ',', header = 0) diff --git a/benchmark/micro/csv/1_byte_values.benchmark b/benchmark/micro/csv/1_byte_values.benchmark new file mode 100644 index 000000000000..a6ca4f40fe52 --- /dev/null +++ b/benchmark/micro/csv/1_byte_values.benchmark @@ -0,0 +1,14 @@ +# name: benchmark/micro/csv/1_byte_values.benchmark +# description: Run CSV scan on file with muiltiple values of 1 bytes +# group: [csv] + +name CSV Read Benchmark with nullpadding +group csv + +load +CREATE TABLE t1 AS select 'a,a,a,a,a'; +insert into t1 select 'a,a,a,a,a' from range(0,10000000) tbl(i); +COPY t1 TO '${BENCHMARK_DIR}/this_is_1byte.csv' (FORMAT CSV, HEADER 0); + +run +SELECT * from read_csv('${BENCHMARK_DIR}/this_is_1byte.csv',delim= ',', header = 0) diff --git a/benchmark/micro/csv/projection_pushdown.benchmark b/benchmark/micro/csv/projection_pushdown.benchmark index ef248d17c5fd..a343c1945be8 100644 --- a/benchmark/micro/csv/projection_pushdown.benchmark +++ b/benchmark/micro/csv/projection_pushdown.benchmark @@ -7,10 +7,16 @@ group csv require tpch -cache tpch_sf1.duckdb +cache lineitem_sf1.csv -load benchmark/tpch/sf1/load.sql -COPY lineitem TO '${BENCHMARK_DIR}/lineitem.csv' (FORMAT CSV, DELIMITER '|', HEADER); +load +CALL dbgen(sf=1); +COPY lineitem TO '${BENCHMARK_DIR}/lineitem_sf1.csv' (FORMAT CSV, DELIMITER '|', HEADER); run -SELECT l_returnflag, MIN(l_orderkey) FROM '${BENCHMARK_DIR}/lineitem.csv' GROUP BY l_returnflag; \ No newline at end of file +SELECT l_returnflag, MIN(l_orderkey) FROM '${BENCHMARK_DIR}/lineitem_sf1.csv' GROUP BY l_returnflag ORDER BY l_returnflag; + +result II +A 3 +N 1 +R 3 diff --git a/benchmark/micro/csv/read.benchmark b/benchmark/micro/csv/read.benchmark index 1d29e4acc82d..eadeeadfb51c 100644 --- a/benchmark/micro/csv/read.benchmark +++ b/benchmark/micro/csv/read.benchmark @@ -7,10 +7,11 @@ group csv require tpch -cache tpch_sf1.duckdb +cache lineitem_sf1.csv -load benchmark/tpch/sf1/load.sql -COPY lineitem TO '${BENCHMARK_DIR}/lineitem.csv' (FORMAT CSV, DELIMITER '|', HEADER); +load +CALL dbgen(sf=1); +COPY lineitem TO '${BENCHMARK_DIR}/lineitem_sf1.csv' (FORMAT CSV, DELIMITER '|', HEADER); run -SELECT * FROM '${BENCHMARK_DIR}/lineitem.csv' \ No newline at end of file +SELECT * FROM '${BENCHMARK_DIR}/lineitem_sf1.csv' \ No newline at end of file diff --git a/benchmark/micro/csv/sniffer.benchmark b/benchmark/micro/csv/sniffer.benchmark index 00c3ee933eae..2a92c5300b14 100644 --- a/benchmark/micro/csv/sniffer.benchmark +++ b/benchmark/micro/csv/sniffer.benchmark @@ -7,10 +7,11 @@ group csv require tpch -cache tpch_sf1.duckdb +cache lineitem_sf1.csv -load benchmark/tpch/sf1/load.sql -COPY lineitem TO '${BENCHMARK_DIR}/lineitem.csv' (FORMAT CSV, DELIMITER '|', HEADER); +load +CALL dbgen(sf=1); +COPY lineitem TO '${BENCHMARK_DIR}/lineitem_sf1.csv' (FORMAT CSV, DELIMITER '|', HEADER); run -DESCRIBE SELECT * FROM '${BENCHMARK_DIR}/lineitem.csv' \ No newline at end of file +DESCRIBE SELECT * FROM '${BENCHMARK_DIR}/lineitem_sf1.csv' diff --git a/benchmark/tpch/aggregate/lineitem_distinct_on_few_groups.benchmark b/benchmark/tpch/aggregate/lineitem_distinct_on_few_groups.benchmark new file mode 100644 index 000000000000..6ee0937ab2fa --- /dev/null +++ b/benchmark/tpch/aggregate/lineitem_distinct_on_few_groups.benchmark @@ -0,0 +1,69 @@ +# name: benchmark/tpch/aggregate/lineitem_distinct_on_few_groups.benchmark +# description: DISTINCT ON over Lineitem +# group: [aggregate] + +name Lineitem Distinct On (Few Groups) +group aggregate +subgroup tpch + +require tpch + +cache tpch_sf1.duckdb + +load +CALL dbgen(sf=1); + +run +SELECT DISTINCT ON (l_quantity) l_quantity, l_extendedprice FROM lineitem ORDER BY l_quantity, l_extendedprice DESC; + +result II +1 2097.99 +2 4193.98 +3 6293.97 +4 8395.96 +5 10489.95 +6 12587.94 +7 14685.93 +8 16791.92 +9 18890.91 +10 20989.9 +11 23055.89 +12 25175.88 +13 27260.87 +14 29357.86 +15 31469.85 +16 33567.84 +17 35682.83 +18 37781.82 +19 39880.81 +20 41979.8 +21 44078.79 +22 46155.78 +23 48253.77 +24 50351.76 +25 52449.75 +26 54573.74 +27 56672.73 +28 58743.72 +29 60870.71 +30 62909.7 +31 65006.69 +32 67135.68 +33 69266.67 +34 71365.66 +35 73429.65 +36 75563.64 +37 77662.63 +38 79761.62 +39 81821.61 +40 83879.6 +41 85976.59 +42 88157.58 +43 90213.57 +44 92223.56 +45 94454.55 +46 96553.54 +47 98652.53 +48 100703.52 +49 102801.51 +50 104949.5 diff --git a/benchmark/tpch/aggregate/lineitem_distinct_on_many_groups.benchmark b/benchmark/tpch/aggregate/lineitem_distinct_on_many_groups.benchmark new file mode 100644 index 000000000000..6459d2246da3 --- /dev/null +++ b/benchmark/tpch/aggregate/lineitem_distinct_on_many_groups.benchmark @@ -0,0 +1,25 @@ +# name: benchmark/tpch/aggregate/lineitem_distinct_on_many_groups.benchmark +# description: DISTINCT ON over Lineitem +# group: [aggregate] + +name Lineitem Distinct On (Many Groups) +group aggregate +subgroup tpch + +require tpch + +cache tpch_sf1.duckdb + +load +CALL dbgen(sf=1); + +run +SELECT AVG(l_orderkey), AVG(l_extendedprice) +FROM ( + SELECT DISTINCT ON (l_orderkey) l_orderkey, l_extendedprice + FROM lineitem + ORDER BY l_orderkey, l_extendedprice DESC +) l; + +result II +2999991.5 59874.92 \ No newline at end of file diff --git a/benchmark/tpch/parquet/write_lineitem_parquet_memory_limited.benchmark b/benchmark/tpch/parquet/write_lineitem_parquet_memory_limited.benchmark new file mode 100644 index 000000000000..ced78caa8976 --- /dev/null +++ b/benchmark/tpch/parquet/write_lineitem_parquet_memory_limited.benchmark @@ -0,0 +1,24 @@ +# name: benchmark/tpch/parquet/write_lineitem_parquet_memory_limited.benchmark +# description: Write the lineitem of TPC-H SF1 to a Parquet file with limited memory +# group: [parquet] + +name Write Lineitem Parquet (Limited Memory) +group parquet + +cache tpch_sf1.duckdb + +require parquet + +require tpch + +load +CALL dbgen(sf=1); + +init +SET memory_limit='500MB'; + +run +COPY lineitem TO '${BENCHMARK_DIR}/lineitem.parquet'; + +result I +6001215 diff --git a/data/csv/custom_date.csv b/data/csv/custom_date.csv new file mode 100644 index 000000000000..b5da23e1fac6 --- /dev/null +++ b/data/csv/custom_date.csv @@ -0,0 +1,3 @@ +ID,Date_Time +123,"1/2/2023, 12:33 PM" +124,"12/2/2023, 11:57 AM" \ No newline at end of file diff --git a/data/csv/headers/all_varchar.csv b/data/csv/headers/all_varchar.csv new file mode 100644 index 000000000000..3e0563c9f100 --- /dev/null +++ b/data/csv/headers/all_varchar.csv @@ -0,0 +1,2 @@ +name +Pedro \ No newline at end of file diff --git a/data/csv/headers/borked_type.csv b/data/csv/headers/borked_type.csv new file mode 100644 index 000000000000..c22d47345de5 --- /dev/null +++ b/data/csv/headers/borked_type.csv @@ -0,0 +1,3 @@ +Date +02/01/2019 +08//01/2019 \ No newline at end of file diff --git a/data/csv/headers/integer.csv b/data/csv/headers/integer.csv new file mode 100644 index 000000000000..1758dddccea2 --- /dev/null +++ b/data/csv/headers/integer.csv @@ -0,0 +1 @@ +32 \ No newline at end of file diff --git a/data/csv/headers/single_line.csv b/data/csv/headers/single_line.csv new file mode 100644 index 000000000000..23ef64026149 --- /dev/null +++ b/data/csv/headers/single_line.csv @@ -0,0 +1 @@ +creationDate, Id diff --git a/data/csv/headers/undetected_type.csv b/data/csv/headers/undetected_type.csv new file mode 100644 index 000000000000..0938235e30f3 --- /dev/null +++ b/data/csv/headers/undetected_type.csv @@ -0,0 +1,2 @@ +Value +68,527.00 \ No newline at end of file diff --git a/data/csv/projection_buffer.csv b/data/csv/projection_buffer.csv new file mode 100644 index 000000000000..80094a9aa9bb --- /dev/null +++ b/data/csv/projection_buffer.csv @@ -0,0 +1,28 @@ +a,b,c,d +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" +"a""","b""","c""","d""" \ No newline at end of file diff --git a/data/csv/public_daily_sample.csv b/data/csv/public_daily_sample.csv new file mode 100644 index 000000000000..56330e4a9683 --- /dev/null +++ b/data/csv/public_daily_sample.csv @@ -0,0 +1,5956 @@ +C,NEMP.WORLD,DAILY,AEMO,PUBLIC,2023/12/15,04:05:05,0000000405621952,,0000000405621952 +I,DISPATCH,CASESOLUTION,1,SETTLEMENTDATE,RUNNO,INTERVENTION,CASESUBTYPE,SOLUTIONSTATUS,SPDVERSION,NONPHYSICALLOSSES,TOTALOBJECTIVE,TOTALAREAGENVIOLATION,TOTALINTERCONNECTORVIOLATION,TOTALGENERICVIOLATION,TOTALRAMPRATEVIOLATION,TOTALUNITMWCAPACITYVIOLATION,TOTAL5MINVIOLATION,TOTALREGVIOLATION,TOTAL6SECVIOLATION,TOTAL60SECVIOLATION,TOTALASPROFILEVIOLATION,TOTALFASTSTARTVIOLATION,TOTALENERGYOFFERVIOLATION,LASTCHANGED +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:05:00",1,0,,1,,0,2168940741.3630,0,0,0,0.416,89,,,,,0,0,0,"2023/12/14 04:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:10:00",1,0,,1,,0,940853207.18,0,0,0,0.416,39,,,,,0,0,0,"2023/12/14 04:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:15:00",1,0,,1,,0,-16984351.7420,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:20:00",1,0,,1,,0,-17245829.4290,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:25:00",1,0,,1,,0,-17341244.9120,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:30:00",1,0,,1,,0,-17604866.14,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:35:00",1,0,,1,,0,-17758936.7620,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:40:00",1,0,,1,,0,2169199669.0510,0,0,0,0.416,89,,,,,0,0,0,"2023/12/14 04:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:45:00",1,0,,1,,0,793565641.5720,0,0,0,0.416,33,,,,,0,0,0,"2023/12/14 04:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:50:00",1,0,,1,,0,-16812065.5260,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 04:55:00",1,0,,1,,0,-16961074.1980,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:00:00",1,0,,1,,0,-17153467.0240,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 04:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:05:00",1,0,,1,,0,-16050490.9420,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:10:00",1,0,,1,,0,2195491625.5180,0,0,0,0.416,90,,,,,0,0,0,"2023/12/14 05:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:15:00",1,0,,1,,0,868576407.9410,0,0,0,0.416,36,,,,,0,0,0,"2023/12/14 05:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:20:00",1,0,,1,,0,-15790375.9370,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:25:00",1,0,,1,,0,-16064854.1450,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:30:00",1,0,,1,,0,81358090.9280,0,0,0,0.416,3.972,,,,,0,0,0,"2023/12/14 05:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:35:00",1,0,,1,,0,-16033976.8810,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:40:00",1,0,,1,,0,2170708641.8570,0,0,0,0.416,89,,,,,0,0,0,"2023/12/14 05:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:45:00",1,0,,1,,0,819369473.87,0,0,0,0.416,34,,,,,0,0,0,"2023/12/14 05:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:50:00",1,0,,1,,0,-16136805.7480,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 05:55:00",1,0,,1,,0,-16927183.0130,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:00:00",1,0,,1,,0,-17532074.4790,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 05:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:05:00",1,0,,1,,0,-17049357.1450,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:10:00",1,0,,1,,0,-18833662.4440,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:15:00",1,0,,1,,0,-18987970.1550,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:20:00",1,0,,1,,0,-19363609.90,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:25:00",1,0,,1,,0,100982692.6220,0,0,0,0.416,4.9,,,,,0,0,0,"2023/12/14 06:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:30:00",1,0,,1,,0,95242101.7240,0,0,0,0.416,4.7,,,,,0,0,0,"2023/12/14 06:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:35:00",1,0,,1,,0,-17965660.5510,0,0,0,0.416,0.1,,,,,0,0,0,"2023/12/14 06:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:40:00",1,0,,1,,0,-20865510.6950,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:45:00",1,0,,1,,0,-21456314.6380,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:40:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:50:00",1,0,,1,,0,-7308069.64,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 06:55:00",1,0,,1,,0,-11855744.8020,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:50:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:00:00",1,0,,1,,0,-16048721.6170,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 06:55:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:05:00",1,0,,1,,0,-19901734.0840,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:10:00",1,0,,1,,0,-21593430.9780,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:15:00",1,0,,1,,0,-21051260.6070,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:10:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:20:00",1,0,,1,,0,-21325487.17,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:25:00",1,0,,1,,0,-22205664.1380,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:30:00",1,0,,1,,0,-22600208.7170,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:35:00",1,0,,1,,0,3113417796.5860,0,0,0,0.416,126.539,,,,,0,0,0,"2023/12/14 07:30:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:40:00",1,0,,1,,0,2037279397.1530,0,0,0,0.416,82.917,,,,,0,0,0,"2023/12/14 07:35:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:45:00",1,0,,1,,0,941903175.2470,0,0,0,0.416,38.635,,,,,0,0,0,"2023/12/14 07:40:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:50:00",1,0,,1,,0,-10175218.0460,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:45:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 07:55:00",1,0,,1,,0,-15545682.1790,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:50:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:00:00",1,0,,1,,0,-18125278.9580,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 07:55:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:05:00",1,0,,1,,0,2985011416.1390,0,0,0,0.416,122.201,,,,,0,0,0,"2023/12/14 08:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:10:00",1,0,,1,,0,26495745.2680,0,0,0,0.416,1.873,,,,,0,0,0,"2023/12/14 08:05:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:15:00",1,0,,1,,0,-20616215.3260,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 08:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:20:00",1,0,,1,,0,-21252273.5130,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 08:15:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:25:00",1,0,,1,,0,4545932174.3610,0,0,27.6,0.416,157.607,,,,,0,0,0,"2023/12/14 08:20:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:30:00",1,0,,1,,0,3877631288.4650,0,0,27.6,0.416,130.449,,,,,0,0,0,"2023/12/14 08:25:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:35:00",1,0,,1,,0,3240708988.7340,0,0,29.726,0.416,104.482,,,,,0,0,0,"2023/12/14 08:30:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:40:00",1,0,,1,,0,2531799765.9680,0,0,28.179,0.416,77.307,,,,,0,0,0,"2023/12/14 08:35:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:45:00",1,0,,1,,0,1599426997.2990,0,0,22.362,0.416,44.743,,,,,0,0,0,"2023/12/14 08:40:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:50:00",1,0,,1,,0,725095983.2140,0,0,20.967,0.416,9.108,,,,,0,0,0,"2023/12/14 08:45:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 08:55:00",1,0,,1,,0,500029659.4730,0,0,20.8,0.416,0,,,,,0,0,0,"2023/12/14 08:50:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:00:00",1,0,,1,,0,414799082.1420,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 08:55:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:05:00",1,0,,1,,0,414841710.5830,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:00:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:10:00",1,0,,1,,0,1497186151.1480,0,0,17.4,0.416,0,,,,,0,28.823,0,"2023/12/14 09:05:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:15:00",1,0,,1,,0,415112619.7580,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:10:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:20:00",1,0,,1,,0,415467475.6790,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:15:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:25:00",1,0,,1,,0,415459755.4320,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:20:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:30:00",1,0,,1,,0,415178248.9560,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:25:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:35:00",1,0,,1,,0,415849554.6870,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:30:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:40:00",1,0,,1,,0,415995236.6670,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:35:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:45:00",1,0,,1,,0,415756372.5260,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:40:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:50:00",1,0,,1,,0,415922498.4740,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:45:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 09:55:00",1,0,,1,,0,416341487.9290,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:50:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:00:00",1,0,,1,,0,416797796.8330,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 09:55:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:05:00",1,0,,1,,0,416704417.5670,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:00:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:10:00",1,0,,1,,0,416112127.49,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:05:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:15:00",1,0,,1,,0,416091670.5490,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:10:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:20:00",1,0,,1,,0,416415157.8950,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:15:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:25:00",1,0,,1,,0,416227903.4970,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:20:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:30:00",1,0,,1,,0,416030089.5530,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:25:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:35:00",1,0,,1,,0,416579705.75,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:30:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:40:00",1,0,,1,,0,416494706.90,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:35:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:45:00",1,0,,1,,0,417023504.0330,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:40:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:50:00",1,0,,1,,0,415833026.8950,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:45:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 10:55:00",1,0,,1,,0,416191273.9680,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:50:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:00:00",1,0,,1,,0,416300595.6520,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 10:55:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:05:00",1,0,,1,,0,415313896.6830,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:00:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:10:00",1,0,,1,,0,415592887.1020,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:05:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:15:00",1,0,,1,,0,414378280.95,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:10:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:20:00",1,0,,1,,0,414155006.6970,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:15:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:25:00",1,0,,1,,0,419834334.4860,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:20:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:30:00",1,0,,1,,0,238640027.5540,0,0,10.4,0.416,0,,,,,0,0,0,"2023/12/14 11:25:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:35:00",1,0,,1,,0,241667831.9130,0,0,10.4,0.416,0.1,,,,,0,0,0,"2023/12/14 11:30:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:40:00",1,0,,1,,0,12435352.6530,0,0,1.4,0.416,0,,,,,0,0,0,"2023/12/14 11:35:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:45:00",1,0,,1,,0,12191750.90,0,0,1.4,0.416,0,,,,,0,0,0,"2023/12/14 11:40:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:50:00",1,0,,1,,0,414914028.9510,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 11:55:00",1,0,,1,,0,414704349.5090,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:50:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:00:00",1,0,,1,,0,414553601.3260,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 11:55:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:05:00",1,0,,1,,0,412233593.7690,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:00:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:10:00",1,0,,1,,0,414387473.7950,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:05:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:15:00",1,0,,1,,0,412414812.1920,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:10:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:20:00",1,0,,1,,0,414854811.9440,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:15:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:25:00",1,0,,1,,0,411620825.0690,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:20:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:30:00",1,0,,1,,0,411523777.1470,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:25:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:35:00",1,0,,1,,0,496434228.0640,0,0,20.8,0.416,0,,,,,0,0,0,"2023/12/14 12:30:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:40:00",1,0,,1,,0,754657324.1510,0,0,25.43,0.416,0,,,,,0,0,0,"2023/12/14 12:35:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:45:00",1,0,,1,,0,753017608.5180,0,0,31,0.416,0,,,,,0,0,0,"2023/12/14 12:40:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:50:00",1,0,,1,,0,666927516.4640,0,0,27.6,0.416,0,,,,,0,0,0,"2023/12/14 12:45:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 12:55:00",1,0,,1,,0,495503706.1040,0,0,20.8,0.416,0,,,,,0,0,0,"2023/12/14 12:50:13" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:00:00",1,0,,1,,0,410271401.9980,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 12:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:05:00",1,0,,1,,0,408691051.4040,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:00:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:10:00",1,0,,1,,0,407990689.6520,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:05:12" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:15:00",1,0,,1,,0,408688733.4460,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:10:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:20:00",1,0,,1,,0,688825985.9080,0,0,28.542,0.416,0,,,,,0,0,0,"2023/12/14 13:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:25:00",1,0,,1,,0,408511661.4380,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:20:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:30:00",1,0,,1,,0,408612580.0160,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:25:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:35:00",1,0,,1,,0,405160240.6690,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:40:00",1,0,,1,,0,404417796.2450,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:35:11" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:45:00",1,0,,1,,0,674873160.8510,0,0,25.45,0.416,0,,,,,0,0,0,"2023/12/14 13:40:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:50:00",1,0,,1,,0,467998956.4580,0,0,19.888,0.416,0,,,,,0,0,0,"2023/12/14 13:45:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 13:55:00",1,0,,1,,0,405256293.9140,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:50:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:00:00",1,0,,1,,0,405743209.9920,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 13:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:05:00",1,0,,1,,0,403278691.5210,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:00:11" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:10:00",1,0,,1,,0,402705155.3540,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:05:13" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:15:00",1,0,,1,,0,402090693.0540,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:10:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:20:00",1,0,,1,,0,400476794.7950,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:25:00",1,0,,1,,0,400237705.2250,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:20:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:30:00",1,0,,1,,0,399576676.2390,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:25:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:35:00",1,0,,1,,0,398983569.3680,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:40:00",1,0,,1,,0,399641853.4360,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:35:09" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:45:00",1,0,,1,,0,399795757.8790,0,0,17.4,0.416,0,,,,,0,0,0,"2023/12/14 14:40:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:50:00",1,0,,1,,0,-40785378.0680,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 14:45:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 14:55:00",1,0,,1,,0,-41406295.5940,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 14:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:00:00",1,0,,1,,0,-41294505.9420,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 14:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:05:00",1,0,,1,,0,-41224756.5410,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 15:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:10:00",1,0,,1,,0,-41773193.5560,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 15:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:15:00",1,0,,1,,0,-42405538.24,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 15:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:20:00",1,0,,1,,0,-42198440.9260,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 15:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:25:00",1,0,,1,,0,247853335.0850,0,0,0,4.204,0,,,,,0,0,0,"2023/12/14 15:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:30:00",1,0,,1,,0,140966629.3680,0,0,0,2.808,0,,,,,0,0,0,"2023/12/14 15:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:35:00",1,0,,1,,0,-44687867.4280,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 15:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:40:00",1,0,,0,,0,-77259122.3660,0,0,0,0,0,,,,,0,0,0,"2023/12/14 15:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:45:00",1,0,,0,,0,-77794853.5190,0,0,0,0,0,,,,,0,0,0,"2023/12/14 15:40:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:50:00",1,0,,0,,0,-86265296.4740,0,0,0,0,0,,,,,0,0,0,"2023/12/14 15:45:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 15:55:00",1,0,,0,,0,-88985027.49,0,0,0,0,0,,,,,0,0,0,"2023/12/14 15:50:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:00:00",1,0,,0,,0,-89728440.3010,0,0,0,0,0,,,,,0,0,0,"2023/12/14 15:55:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:05:00",1,0,,0,,0,-89347534.3980,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:00:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:10:00",1,0,,0,,0,-89042232.0150,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:05:08" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:15:00",1,0,,0,,0,-89924804.1690,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:10:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:20:00",1,0,,0,,0,-89112161.2950,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:15:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:25:00",1,0,,0,,0,-89230790.0060,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:20:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:30:00",1,0,,0,,0,-88743133.60,0,0,0,0,0,,,,,0,0,0,"2023/12/14 16:25:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:35:00",1,0,,1,,0,7935931433.47,0,0,158.134,0,163.875,,,,,0,0,0,"2023/12/14 16:30:10" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:40:00",1,0,,1,,0,7175312134.8130,0,0,142.252,0,149.25,,,,,0,0,0,"2023/12/14 16:35:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:45:00",1,0,,1,,0,6565009439.4220,0,0,127.371,0,139.688,,,,,0,0,0,"2023/12/14 16:40:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:50:00",1,0,,1,,0,5872002148.7310,0,0,113.976,0,125.25,,,,,0,0,0,"2023/12/14 16:45:11" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 16:55:00",1,0,,1,,0,5031154913.2070,0,0,98.979,0,106.5,,,,,0,0,0,"2023/12/14 16:50:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:00:00",1,0,,1,,0,4554573215.4410,0,0,84.098,0,102.434,,,,,0,0,0,"2023/12/14 16:55:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:05:00",1,0,,1,,0,3475038100.1640,0,0,67.845,0,75.402,,,,,0,0,0,"2023/12/14 17:00:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:10:00",1,0,,1,,0,2878645010.7370,0,0,54.809,0,64.576,,,,,0,0,0,"2023/12/14 17:05:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:15:00",1,0,,1,,0,2617362188.17,0,0,41.011,0,69.71,,,,,0,0,0,"2023/12/14 17:10:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:20:00",1,0,,1,,0,1280814790.9540,0,0,22.867,0,32.438,,,,,0,0,0,"2023/12/14 17:15:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:25:00",1,0,,1,,0,647065392.33,0,0,8.998,0,20.92,,,,,0,0,0,"2023/12/14 17:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:30:00",1,0,,1,,0,201302582.9290,0,0,0.129,0,11.91,,,,,0,0,0,"2023/12/14 17:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:35:00",1,0,,0,,0,-95514562.2840,0,0,0,0,0,,,,,0,0,0,"2023/12/14 17:30:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:40:00",1,0,,1,,0,47441891.6810,0,0,0,0,5.76,,,,,0,0,0,"2023/12/14 17:35:07" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:45:00",1,0,,0,,0,-96782362.7290,0,0,0,0,0,,,,,0,0,0,"2023/12/14 17:40:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:50:00",1,0,,0,,0,-97342988.6980,0,0,0,0,0,,,,,0,0,0,"2023/12/14 17:45:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 17:55:00",1,0,,1,,0,-97507726.1540,0,0,0,0,0,,,,,0,0,0,"2023/12/14 17:50:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:00:00",1,0,,0,,0,-96846425.6040,0,0,0,0,0,,,,,0,0,0,"2023/12/14 17:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:05:00",1,0,,0,,0,-95598861.5970,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:10:00",1,0,,0,,0,-96823198.8740,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:05:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:15:00",1,0,,0,,0,-96588756.3230,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:10:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:20:00",1,0,,0,,0,-95701327.6870,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:25:00",1,0,,0,,0,-95831849.7690,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:30:00",1,0,,0,,0,-95231318.5030,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:35:00",1,0,,0,,0,-95850694.9410,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:40:00",1,0,,0,,0,-95698490.0060,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:35:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:45:00",1,0,,1,,0,-78951240.8150,0,0,0,0,0.66,,,,,0,0,0,"2023/12/14 18:40:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:50:00",1,0,,0,,0,-93035278.75,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 18:55:00",1,0,,0,,0,-91415246.1980,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:50:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:00:00",1,0,,0,,0,-90987008.3850,0,0,0,0,0,,,,,0,0,0,"2023/12/14 18:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:05:00",1,0,,0,,0,-90808757.6210,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:10:00",1,0,,0,,0,-90543629.2250,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:05:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:15:00",1,0,,0,,0,-90265369.4560,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:20:00",1,0,,1,,0,-47434599.0510,0,0,0,0,1.727,,,,,0,0,0,"2023/12/14 19:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:25:00",1,0,,0,,0,-89426634.6350,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:30:00",1,0,,0,,0,-87137832.7010,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:35:00",1,0,,0,,0,-72652067.1870,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:40:00",1,0,,0,,0,-80758182.0230,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:35:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:45:00",1,0,,0,,0,-84354607.3460,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:40:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:50:00",1,0,,0,,0,-82671951.8320,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 19:55:00",1,0,,0,,0,-82773096.3290,0,0,0,0,0,,,,,0,0,0,"2023/12/14 19:50:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:00:00",1,0,,1,,0,3659288286.2450,0,0,147.901,0,0,,,,,0,0,0,"2023/12/14 19:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:05:00",1,0,,1,,0,4182041763.3170,0,0,146.862,0,21.52,,,,,0,0,0,"2023/12/14 20:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:10:00",1,0,,1,,0,3531266353.9380,0,0,133.135,0,9.74,,,,,0,0,0,"2023/12/14 20:05:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:15:00",1,0,,1,,0,2927831600.0590,0,0,118.779,0,0,,,,,0,0,0,"2023/12/14 20:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:20:00",1,0,,1,,0,2515078931.4790,0,0,102.436,0,0,,,,,0,0,0,"2023/12/14 20:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:25:00",1,0,,1,,0,2119847752.7160,0,0,86.657,0,0,,,,,0,0,0,"2023/12/14 20:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:30:00",1,0,,1,,0,1763788250.7270,0,0,72.314,0,0.311,,,,,0,0,0,"2023/12/14 20:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:35:00",1,0,,1,,0,1357018733.3770,0,0,56.651,0,0,,,,,0,0,0,"2023/12/14 20:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:40:00",1,0,,1,,0,972655044.92,0,0,41.475,0,0,,,,,0,0,0,"2023/12/14 20:35:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:45:00",1,0,,1,,0,751550183.7210,0,0,25.837,0,7.098,,,,,0,0,0,"2023/12/14 20:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:50:00",1,0,,1,,0,225557321.0270,0,0,11.942,0,0,,,,,0,0,0,"2023/12/14 20:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 20:55:00",1,0,,0,,0,-76906738.7040,0,0,0,0,0,,,,,0,0,0,"2023/12/14 20:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:00:00",1,0,,0,,0,-76685424.3040,0,0,0,0,0,,,,,0,0,0,"2023/12/14 20:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:05:00",1,0,,0,,0,-59458506.4130,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:10:00",1,0,,0,,0,-63498515.1930,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:15:00",1,0,,0,,0,-64999464.5250,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:10:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:20:00",1,0,,0,,0,-60505587.6910,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:25:00",1,0,,0,,0,-62010094.4730,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:30:00",1,0,,0,,0,-63222676.4020,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:35:00",1,0,,1,,0,1011112885.8880,0,0,0,0,43.411,,,,,0,0,0,"2023/12/14 21:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:40:00",1,0,,1,,0,324679186.0080,0,0,0,0,15.686,,,,,0,0,0,"2023/12/14 21:35:06" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:45:00",1,0,,1,,0,20940922.9470,0,0,0,0,3.439,,,,,0,0,0,"2023/12/14 21:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:50:00",1,0,,0,,0,-60989063.8970,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 21:55:00",1,0,,0,,0,-63000864.1940,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:00:00",1,0,,0,,0,-63313378.4840,0,0,0,0,0,,,,,0,0,0,"2023/12/14 21:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:05:00",1,0,,1,,0,1314799245.8590,0,0,0,0,55.155,,,,,0,0,0,"2023/12/14 22:00:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:10:00",1,0,,1,,0,1137550533.3390,0,0,0,0,48.441,,,,,0,0,0,"2023/12/14 22:05:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:15:00",1,0,,1,,0,1108218018.9850,0,0,0,0,47.45,,,,,0,0,0,"2023/12/14 22:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:20:00",1,0,,1,,0,1038662243.2910,0,0,0,0,44.479,,,,,0,0,0,"2023/12/14 22:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:25:00",1,0,,1,,0,810197855.6990,0,0,0,0,35.348,,,,,0,0,0,"2023/12/14 22:20:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:30:00",1,0,,1,,0,820982323.8340,0,0,0,0,35.902,,,,,0,0,0,"2023/12/14 22:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:35:00",1,0,,1,,0,1119166650.2770,0,0,0,0,47.572,,,,,0,0,0,"2023/12/14 22:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:40:00",1,0,,1,,0,615642515.4440,0,0,0,0.416,25.898,,,,,0,0,0,"2023/12/14 22:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:45:00",1,0,,1,,0,490247977.1140,0,0,0,0.416,20.829,,,,,0,0,0,"2023/12/14 22:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:50:00",1,0,,1,,0,177080828.12,0,0,0,0,9.398,,,,,0,0,0,"2023/12/14 22:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 22:55:00",1,0,,1,,0,193150652.0590,0,0,0,0,10.053,,,,,0,0,0,"2023/12/14 22:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:00:00",1,0,,0,,0,-53912225.6880,0,0,0,0,0,,,,,0,0,0,"2023/12/14 22:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:05:00",1,0,,1,,0,2372240637.8580,0,0,0,0,98.543,,,,,0,0,0,"2023/12/14 23:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:10:00",1,0,,1,,0,1950639452.4760,0,0,0,0,81.526,,,,,0,0,0,"2023/12/14 23:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:15:00",1,0,,1,,0,2322240954.2470,0,0,0,0,96.658,,,,,0,0,0,"2023/12/14 23:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:20:00",1,0,,1,,0,1295816776.1610,0,0,0,0,54.871,,,,,0,0,0,"2023/12/14 23:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:25:00",1,0,,1,,0,487825003.2690,0,0,0,0,21.979,,,,,0,0,0,"2023/12/14 23:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:30:00",1,0,,1,,0,192135031.9850,0,0,0,0.416,8.624,,,,,0,0,0,"2023/12/14 23:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:35:00",1,0,,1,,0,-18355373.2970,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:40:00",1,0,,1,,0,-19619261.4360,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:45:00",1,0,,1,,0,-19743331.0690,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:50:00",1,0,,1,,0,-19899222.9380,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:45:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/14 23:55:00",1,0,,1,,0,-20010191.4330,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:00:00",1,0,,1,,0,-20127405.8920,0,0,0,0.416,0,,,,,0,0,0,"2023/12/14 23:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:05:00",1,0,,1,,0,-18797545.4580,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:10:00",1,0,,1,,0,-18055262.9610,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:15:00",1,0,,1,,0,-17853680.1670,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:20:00",1,0,,1,,0,-17759007.0980,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:15:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:25:00",1,0,,1,,0,-17806379.9880,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:20:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:30:00",1,0,,1,,0,-17884187.3840,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 00:25:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:35:00",1,0,,1,,0,3025312194.7540,0,0,0,0.416,123.832,,,,,0,0,0,"2023/12/15 00:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:40:00",1,0,,1,,0,2805184953.6950,0,0,0,0.416,114.873,,,,,0,0,0,"2023/12/15 00:35:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:45:00",1,0,,1,,0,2263368567.5290,0,0,0,0.416,92.823,,,,,0,0,0,"2023/12/15 00:40:05" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:50:00",1,0,,1,,0,2113402576.7270,0,0,0,0.416,86.719,,,,,0,0,0,"2023/12/15 00:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 00:55:00",1,0,,1,,0,1762096195.0980,0,0,0,0.416,72.418,,,,,0,0,0,"2023/12/15 00:50:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:00:00",1,0,,1,,0,1443359951.8110,0,0,0,0.416,59.43,,,,,0,0,0,"2023/12/15 00:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:05:00",1,0,,1,,0,157557073.7050,0,0,0,0.416,7.034,,,,,0,0,0,"2023/12/15 01:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:10:00",1,0,,1,,0,-15208691.5360,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:15:00",1,0,,1,,0,-15227085.8830,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:10:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:20:00",1,0,,1,,0,2824756729.9190,0,0,0,0.416,115.593,,,,,0,0,0,"2023/12/15 01:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:25:00",1,0,,1,,0,1570009712.2550,0,0,0,0.416,64.524,,,,,0,0,0,"2023/12/15 01:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:30:00",1,0,,1,,0,75977436.9580,0,0,0,0.416,3.707,,,,,0,0,0,"2023/12/15 01:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:35:00",1,0,,1,,0,-14845132.0070,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:40:00",1,0,,1,,0,-14825150.2130,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:35:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:45:00",1,0,,1,,0,-14738462.2160,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:50:00",1,0,,1,,0,-14703492.1770,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 01:55:00",1,0,,1,,0,-14646513.3530,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:00:00",1,0,,1,,0,-14665140.7980,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 01:55:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:05:00",1,0,,1,,0,-11956194.2480,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:10:00",1,0,,1,,0,-13704577.0710,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:15:00",1,0,,1,,0,-14183020.74,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:10:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:20:00",1,0,,1,,0,-14139524.12,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:25:00",1,0,,1,,0,-14254146.2230,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:30:00",1,0,,1,,0,-14242009.51,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:35:00",1,0,,1,,0,2418044099.6820,0,0,0,0.416,99,,,,,0,0,0,"2023/12/15 02:30:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:40:00",1,0,,1,,0,1140681292.5420,0,0,0,0.416,47,,,,,0,0,0,"2023/12/15 02:35:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:45:00",1,0,,1,,0,-13832251.6560,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:50:00",1,0,,1,,0,-14163077.44,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:45:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 02:55:00",1,0,,1,,0,-14321725.5120,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:00:00",1,0,,1,,0,-14798714.9540,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 02:55:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:05:00",1,0,,1,,0,2415769204.28,0,0,0,0.416,99,,,,,0,0,0,"2023/12/15 03:00:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:10:00",1,0,,1,,0,1140455349.1080,0,0,0,0.416,47,,,,,0,0,0,"2023/12/15 03:05:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:15:00",1,0,,1,,0,-14222726.1350,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:10:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:20:00",1,0,,1,,0,-14266775.0650,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:15:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:25:00",1,0,,1,,0,-14566220.7910,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:20:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:30:00",1,0,,1,,0,44725183.9410,0,0,2.457,0.416,0,,,,,0,0,0,"2023/12/15 03:25:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:35:00",1,0,,1,,0,274077314.27,0,0,11.417,0.416,0,,,,,0,0,0,"2023/12/15 03:30:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:40:00",1,0,,1,,0,-14896185.4820,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:35:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:45:00",1,0,,1,,0,-14937518.0240,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:40:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:50:00",1,0,,1,,0,-14905685.94,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:45:04" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 03:55:00",1,0,,1,,0,-15248724.5830,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:50:03" +D,DISPATCH,CASESOLUTION,1,"2023/12/15 04:00:00",1,0,,1,,0,-15205657.8620,0,0,0,0.416,0,,,,,0,0,0,"2023/12/15 03:55:03" +I,DREGION,,2,SETTLEMENTDATE,RUNNO,REGIONID,INTERVENTION,RRP,EEP,ROP,APCFLAG,MARKETSUSPENDEDFLAG,TOTALDEMAND,DEMANDFORECAST,DISPATCHABLEGENERATION,DISPATCHABLELOAD,NETINTERCHANGE,EXCESSGENERATION,LOWER5MINDISPATCH,LOWER5MINIMPORT,LOWER5MINLOCALDISPATCH,LOWER5MINLOCALPRICE,LOWER5MINLOCALREQ,LOWER5MINPRICE,LOWER5MINREQ,LOWER5MINSUPPLYPRICE,LOWER60SECDISPATCH,LOWER60SECIMPORT,LOWER60SECLOCALDISPATCH,LOWER60SECLOCALPRICE,LOWER60SECLOCALREQ,LOWER60SECPRICE,LOWER60SECREQ,LOWER60SECSUPPLYPRICE,LOWER6SECDISPATCH,LOWER6SECIMPORT,LOWER6SECLOCALDISPATCH,LOWER6SECLOCALPRICE,LOWER6SECLOCALREQ,LOWER6SECPRICE,LOWER6SECREQ,LOWER6SECSUPPLYPRICE,RAISE5MINDISPATCH,RAISE5MINIMPORT,RAISE5MINLOCALDISPATCH,RAISE5MINLOCALPRICE,RAISE5MINLOCALREQ,RAISE5MINPRICE,RAISE5MINREQ,RAISE5MINSUPPLYPRICE,RAISE60SECDISPATCH,RAISE60SECIMPORT,RAISE60SECLOCALDISPATCH,RAISE60SECLOCALPRICE,RAISE60SECLOCALREQ,RAISE60SECPRICE,RAISE60SECREQ,RAISE60SECSUPPLYPRICE,RAISE6SECDISPATCH,RAISE6SECIMPORT,RAISE6SECLOCALDISPATCH,RAISE6SECLOCALPRICE,RAISE6SECLOCALREQ,RAISE6SECPRICE,RAISE6SECREQ,RAISE6SECSUPPLYPRICE,AGGREGATEDISPATCHERROR,AVAILABLEGENERATION,AVAILABLELOAD,INITIALSUPPLY,CLEAREDSUPPLY,LOWERREGIMPORT,LOWERREGLOCALDISPATCH,LOWERREGLOCALREQ,LOWERREGREQ,RAISEREGIMPORT,RAISEREGLOCALDISPATCH,RAISEREGLOCALREQ,RAISEREGREQ,RAISE5MINLOCALVIOLATION,RAISEREGLOCALVIOLATION,RAISE60SECLOCALVIOLATION,RAISE6SECLOCALVIOLATION,LOWER5MINLOCALVIOLATION,LOWERREGLOCALVIOLATION,LOWER60SECLOCALVIOLATION,LOWER6SECLOCALVIOLATION,RAISE5MINVIOLATION,RAISEREGVIOLATION,RAISE60SECVIOLATION,RAISE6SECVIOLATION,LOWER5MINVIOLATION,LOWERREGVIOLATION,LOWER60SECVIOLATION,LOWER6SECVIOLATION,RAISE6SECRRP,RAISE6SECROP,RAISE6SECAPCFLAG,RAISE60SECRRP,RAISE60SECROP,RAISE60SECAPCFLAG,RAISE5MINRRP,RAISE5MINROP,RAISE5MINAPCFLAG,RAISEREGRRP,RAISEREGROP,RAISEREGAPCFLAG,LOWER6SECRRP,LOWER6SECROP,LOWER6SECAPCFLAG,LOWER60SECRRP,LOWER60SECROP,LOWER60SECAPCFLAG,LOWER5MINRRP,LOWER5MINROP,LOWER5MINAPCFLAG,LOWERREGRRP,LOWERREGROP,LOWERREGAPCFLAG +D,DREGION,,2,"2023/12/14 04:05:00",1,NSW1,0,62.75,0,62.75,0,0,6927.79,25,6347.74,5,-585.05,0,,,59,,,,,,,,127.87,,,,,,,,109,,,,,,,,105,,,,,,,,83,,,,,,,,88,,,,,,23.43995,11768.59728,116,6905.63135,6950.23,,53,,,,97,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 04:05:00",1,QLD1,0,61.94798,0,61.94798,0,0,5940.84,2,6087.37,0,146.53,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,66,,,,,,,,161,,,,,,,,137.96,,,,,,13.49735,9930.44217,125,5925.42822,5940.94,,0,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 04:05:00",1,SA1,0,55.33728,0,55.33728,0,0,1188.3,1,1222.82,8,26.52,0,,,52,,,,,,,,80,,,,,,,,58,,,,,,,,145,,,,,,,,151,,,,,,,,159,,,,,,-9.44872,2593.27693,362,1201.91394,1196.04,,31,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 04:05:00",1,TAS1,0,58.73231,0,58.73231,0,0,931.43,3,593.99,0,-337.44,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,144.55,,,,,,7.26284,2172.0854,0,921.1665,931.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.2,0.2,0,0.95,0.95,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:05:00",1,VIC1,0,55.71488,0,55.71488,0,0,4053.86,9,4850.38,3,793.52,0,,,104,,,,,,,,134,,,,,,,,105.83,,,,,,,,118.17,,,,,,,,115.79,,,,,,,,135,,,,,,-11.93094,7994.3828,433,4089.70752,4083.67,,76,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 04:10:00",1,NSW1,0,65.33,0,65.33,0,0,7013.74,27,6594.39,4.74,-424.09,0,,,46.13,,,,,,,,101,,,,,,,,87,,,,,,,,105,,,,,,,,110,,,,,,,,88,,,,,,28.46649,11750.27383,116,6976.4165,7027.51,,48.61,,,,92,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 04:10:00",1,QLD1,0,64.5788,0,64.5788,0,0,5981,2,6127.16,0,146.16,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,66,,,,,,,,138.35,,,,,,,,134,,,,,,12.90386,9915.36589,125,5966.19775,5981.04,,0,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 04:10:00",1,SA1,0,58.98704,0,58.98704,0,0,1196.09,2,1218.35,5,17.25,0,,,48,,,,,,,,55,,,,,,,,47,,,,,,,,140.63,,,,,,,,167,,,,,,,,161,,,,,,-2.2577,2573.62491,362,1198.87781,1200.81,,32,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 04:10:00",1,TAS1,0,62.77221,0,62.77221,0,0,922.51,3,583.32,0,-339.19,0,,,0,,,,,,,,92.79,,,,,,,,27.55,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.33,,,,,,7.81649,2166.42417,0,911.69324,922.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:10:00",1,VIC1,0,59.39762,0,59.39762,0,0,4182.39,15,4808.15,0,625.76,0,,,100,,,,,,,,91,,,,,,,,110,,,,,,,,126,,,,,,,,98,,,,,,,,140.74,,,,,,0,8003.15483,438,4192.49219,4199.51,,79.39,,,,8,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 04:15:00",1,NSW1,0,65.55094,0,65.55094,0,0,7062.92,29,6642.43,0,-420.49,0,,,93.64,,,,,,,,133,,,,,,,,119,,,,,,,,105,,,,,,,,110,,,,,,,,100.05,,,,,,32.81321,11707.73992,115,7014.54688,7070.52,,25,,,,89,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:15:00",1,QLD1,0,64,0,64,0,0,5997.71,5,6183.48,0,185.77,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,164,,,,,,,,153,,,,,,22.61529,9922.07015,125,5970.32129,5997.99,,0,,,,71,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:15:00",1,SA1,0,60.28646,0,60.28646,0,0,1206.95,2,1212.63,8,-2.32,0,,,65,,,,,,,,68,,,,,,,,60,,,,,,,,112.85,,,,,,,,149.36,,,,,,,,161,,,,,,-1.09033,2570.13399,362,1211.48596,1214.65,,21,,,,0,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:15:00",1,TAS1,0,63.34065,0,63.34065,0,0,927.12,3,599.26,0,-327.86,0,,,0,,,,,,,,82.08,,,,,,,,34.25,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.03,,,,,,6.57731,2182.26419,0,917.54211,927.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:15:00",1,VIC1,0,60.08646,0,60.08646,0,0,4164.6,18,4754.38,3,586.78,0,,,39,,,,,,,,60,,,,,,,,60,,,,,,,,154,,,,,,,,92,,,,,,,,112,,,,,,-32.01303,7981.3845,430,4194.55273,4181.91,,114,,,,10,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:20:00",1,NSW1,0,62.75,0,62.75,0,0,7066.63,31,6522.74,5,-548.89,0,,,59,,,,,,,,133,,,,,,,,109,,,,,,,,105,,,,,,,,110,,,,,,,,89.03,,,,,,26.5091,11683.35833,116,7016.2002,7087.98,,39,,,,61,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:20:00",1,QLD1,0,62.02981,0,62.02981,0,0,5954.38,6,6076.25,0,121.88,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,68,,,,,,,,147.45,,,,,,,,154,,,,,,15.41556,9919.98454,125,5934.24463,5954.31,,0,,,,51,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:20:00",1,SA1,0,55.93217,0,55.93217,0,0,1211.44,2,1194.27,0,-17.18,0,,,52,,,,,,,,66,,,,,,,,58,,,,,,,,146,,,,,,,,164,,,,,,,,159,,,,,,4.03837,2561.77011,362,1214.04895,1211.16,,20,,,,39,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:20:00",1,TAS1,0,58.61741,0,58.61741,0,0,926.28,4,609.97,0,-316.31,0,,,0,,,,,,,,20.1,,,,,,,,0,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.14,,,,,,4.22581,2193.07417,0,918.05396,926.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.2,0.2,0,0.38,0.38,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:20:00",1,VIC1,0,55.74629,0,55.74629,0,0,4149.44,16,4957.62,7,801.18,0,,,104,,,,,,,,118,,,,,,,,104.46,,,,,,,,121.79,,,,,,,,95,,,,,,,,125,,,,,,-37.95753,8280.61857,430,4188.79785,4181.12,,101,,,,19,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:25:00",1,NSW1,0,62.75,0,62.75,0,0,7030.44,30,6495.21,5,-540.23,0,,,115,,,,,,,,133,,,,,,,,119,,,,,,,,138.04,,,,,,,,164,,,,,,,,175,,,,,,6.60741,11667.55629,116,7013.13818,7052.6,,25,,,,87,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:25:00",1,QLD1,0,62.46421,0,62.46421,0,0,5978.61,7,6075.08,0,96.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,26,,,,,,,,117,,,,,,,,106,,,,,,-3.06218,9824.24935,50,5974.52002,5978.46,,0,,,,44,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:25:00",1,SA1,0,56.20712,0,56.20712,0,0,1216.67,3,1198.23,0,-18.44,0,,,41,,,,,,,,59.88,,,,,,,,50.43,,,,,,,,125,,,,,,,,123,,,,,,,,118.29,,,,,,8.34109,2567.52566,105,1207.4165,1216.39,,11,,,,11,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:25:00",1,TAS1,0,58.47214,0,58.47214,0,0,932.02,4,630.01,0,-302,0,,,26.94,,,,,,,,124.54,,,,,,,,78.85,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143,,,,,,3.77424,2213.3127,0,924.24268,932.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,7.57,7.57,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:25:00",1,VIC1,0,55.74892,0,55.74892,0,0,4191.46,19,4998.49,1,806.03,0,,,59,,,,,,,,70,,,,,,,,70,,,,,,,,143,,,,,,,,103.57,,,,,,,,119,,,,,,-15.64223,8264.48996,433,4219.12451,4217.56,,124,,,,28,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:30:00",1,NSW1,0,61.55,0,61.55,0,0,7065.59,28,6448.7,5,-621.89,0,,,115,,,,,,,,133,,,,,,,,119,,,,,,,,148.81,,,,,,,,164,,,,,,,,162,,,,,,-4.31498,11666.36156,116,7067.22998,7092.28,,27,,,,61,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:30:00",1,QLD1,0,61.28364,0,61.28364,0,0,5963.05,9,6071.53,0,108.48,0,,,0,,,,,,,,14.53,,,,,,,,0,,,,,,,,26,,,,,,,,117,,,,,,,,108.57,,,,,,0.65305,9820.49833,50,5953.25049,5962.92,,0,,,,40,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:30:00",1,SA1,0,53.97395,0,53.97395,0,0,1217.58,3,1208.62,0,-8.96,0,,,41,,,,,,,,41,,,,,,,,49.07,,,,,,,,125,,,,,,,,123,,,,,,,,118,,,,,,13.29785,2566.41561,105,1202.84045,1217.29,,0,,,,38,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:30:00",1,TAS1,0,56.28077,0,56.28077,0,0,940.91,4,646.86,0,-294.04,0,,,22.7,,,,,,,,124.54,,,,,,,,78.85,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.39,,,,,,1.89751,2229.96488,0,935.01025,940.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.6,7.6,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:30:00",1,VIC1,0,53.79579,0,53.79579,0,0,4204.94,23,5078.59,6,867.65,0,,,59,,,,,,,,70,,,,,,,,70,,,,,,,,140,,,,,,,,111.24,,,,,,,,137,,,,,,0,8308.59338,444,4212.12793,4240.92,,133,,,,31,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:35:00",1,NSW1,0,62.75,0,62.75,0,0,7063.27,31,6488.83,5,-579.44,0,,,90,,,,,,,,128,,,,,,,,114,,,,,,,,105,,,,,,,,110,,,,,,,,128.15,,,,,,-19.66243,11669.57264,116,7075.99707,7087.37,,30,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:35:00",1,QLD1,0,62.49048,0,62.49048,0,0,5969.7,9,6072.08,0,102.38,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,145.85,,,,,,,,153,,,,,,1.90497,9921.66383,125,5958.67041,5969.55,,0,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:35:00",1,SA1,0,55.79287,0,55.79287,0,0,1236.89,3,1209.18,1,-28.71,0,,,66,,,,,,,,66,,,,,,,,58,,,,,,,,145,,,,,,,,163,,,,,,,,159,,,,,,18.20742,2559.60597,362,1215.5564,1237.64,,10,,,,28,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:35:00",1,TAS1,0,57.59091,0,57.59091,0,0,948.39,5,682.99,0,-265.4,0,,,0,,,,,,,,85.72,,,,,,,,38.47,,,,,,,,79.88,,,,,,,,153.72,,,,,,,,143.41,,,,,,2.5818,2241.08834,0,940.80432,948.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:35:00",1,VIC1,0,55.32892,0,55.32892,0,0,4271.73,27,5087.41,0,815.68,0,,,39.67,,,,,,,,61,,,,,,,,61,,,,,,,,110.63,,,,,,,,91,,,,,,,,80,,,,,,14.0666,8314.41422,444,4259.07129,4297.54,,120,,,,36,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:40:00",1,NSW1,0,62.75,0,62.75,0,0,7054.2,31,6482.2,5,-577.01,0,,,83,,,,,,,,101,,,,,,,,87,,,,,,,,105,,,,,,,,110,,,,,,,,104.66,,,,,,-30.99338,11677.93573,116,7083.81396,7079.58,,57,,,,75,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:40:00",1,QLD1,0,62.73,0,62.73,0,0,6037.53,12,6117.32,0,79.79,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,145.07,,,,,,,,154,,,,,,-0.70497,9927.29869,125,6026.11719,6037.32,,0,,,,90,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:40:00",1,SA1,0,56.05583,0,56.05583,0,0,1241.36,3,1206.41,8,-42.94,0,,,68,,,,,,,,68,,,,,,,,60,,,,,,,,147,,,,,,,,165,,,,,,,,161,,,,,,20.73605,2511.19061,362,1217.61145,1249.14,,21,,,,0,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:40:00",1,TAS1,0,57.26897,0,57.26897,0,0,957.28,5,710.98,0,-246.3,0,,,26.97,,,,,,,,98.03,,,,,,,,50.49,,,,,,,,79.88,,,,,,,,153.72,,,,,,,,143.13,,,,,,7.31966,2269.08322,0,944.96429,957.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:40:00",1,VIC1,0,55.30176,0,55.30176,0,0,4202.3,28,5035.46,0,833.16,0,,,63,,,,,,,,74,,,,,,,,74,,,,,,,,109.85,,,,,,,,91,,,,,,,,102,,,,,,11.15238,8172.45758,441,4197.45996,4229.05,,82,,,,5,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 04:45:00",1,NSW1,0,59.99043,0,59.99043,0,0,7080.44,33,6482.64,5,-602.79,0,,,34.09,,,,,,,,120.66,,,,,,,,104,,,,,,,,104,,,,,,,,110,,,,,,,,88,,,,,,-32.53595,11733.08962,116,7109.02783,7105.8,,30,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:45:00",1,QLD1,0,59.78285,0,59.78285,0,0,5990.81,11,6093.8,0,102.99,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,71,,,,,,,,139,,,,,,,,156.17,,,,,,0,9943.42787,125,5980.0708,5990.64,,0,,,,68,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:45:00",1,SA1,0,52.96405,0,52.96405,0,0,1230.51,4,1193.16,3,-40.36,0,,,62,,,,,,,,68,,,,,,,,60,,,,,,,,138.43,,,,,,,,164.3,,,,,,,,161,,,,,,0,2495.74422,362,1238.19507,1233.29,,20,,,,17,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:45:00",1,TAS1,0,54.11179,0,54.11179,0,0,934.63,6,716.57,0,-218.05,0,,,0,,,,,,,,26.54,,,,,,,,0,,,,,,,,87.93,,,,,,,,155.16,,,,,,,,143.29,,,,,,7.97503,2283.92554,0,920.65265,934.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.13,8.13,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:45:00",1,VIC1,0,52.52236,0,52.52236,0,0,4201.65,25,5009.53,4,803.88,0,,,97,,,,,,,,123,,,,,,,,105.55,,,,,,,,103,,,,,,,,91,,,,,,,,111,,,,,,-3.64095,8202.53349,435,4213.04443,4231.34,,110,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 04:50:00",1,NSW1,0,64.15762,0,64.15762,0,0,7153.96,35,6724.01,5,-434.95,0,,,53.35,,,,,,,,101,,,,,,,,87,,,,,,,,104,,,,,,,,110,,,,,,,,96.74,,,,,,0,11735.6025,116,7141.00586,7169.92,,45,,,,80,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 04:50:00",1,QLD1,0,64,0,64,0,0,6051.33,10,6152.9,0,101.56,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,71,,,,,,,,149.02,,,,,,,,156,,,,,,13.2406,9935.18209,125,6027.92236,6051.13,,0,,,,70,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 04:50:00",1,SA1,0,59.34564,0,59.34564,0,0,1262.59,5,1191.35,0,-71.24,0,,,53,,,,,,,,53,,,,,,,,45,,,,,,,,145,,,,,,,,163,,,,,,,,159,,,,,,24.09714,2493.53651,362,1233.45544,1262.53,,40,,,,11,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 04:50:00",1,TAS1,0,59.55243,0,59.55243,0,0,933.54,6,730.86,0,-202.68,0,,,0,,,,,,,,91.43,,,,,,,,45.09,,,,,,,,79.88,,,,,,,,152.67,,,,,,,,142.95,,,,,,7.03375,2294.87388,0,920.50427,933.54,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:50:00",1,VIC1,0,57.96228,0,57.96228,0,0,4314.58,28,4951.17,4,632.59,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,111.73,,,,,,,,91,,,,,,,,111,,,,,,0,8177.16742,433,4308.40234,4333.17,,75,,,,9,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 04:55:00",1,NSW1,0,62.75,0,62.75,0,0,7129.05,30,6620.81,5,-513.24,0,,,48.63,,,,,,,,101,,,,,,,,87,,,,,,,,104,,,,,,,,110,,,,,,,,88,,,,,,-7.62244,11686.79923,116,7123.34863,7150.17,,59.06,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:55:00",1,QLD1,0,62.73,0,62.73,0,0,6074.33,9,6155.11,1,79.78,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,71,,,,,,,,139,,,,,,,,139,,,,,,10.66575,9947.83955,125,6054.4502,6075.11,,0,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:55:00",1,SA1,0,56.87071,0,56.87071,0,0,1258.75,5,1201.53,7,-64.21,0,,,49,,,,,,,,55,,,,,,,,47,,,,,,,,140.29,,,,,,,,162.61,,,,,,,,161,,,,,,18.38031,2474.97345,362,1235.5022,1265.64,,33.94,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 04:55:00",1,TAS1,0,57.36113,0,57.36113,0,0,933.83,6,737.22,0,-196.61,0,,,0,,,,,,,,59.68,,,,,,,,13.03,,,,,,,,79.88,,,,,,,,146.61,,,,,,,,143.01,,,,,,5.42365,2299.73754,0,922.40967,933.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 04:55:00",1,VIC1,0,55.82985,0,55.82985,0,0,4291.14,30,5022.66,1,730.51,0,,,97,,,,,,,,123,,,,,,,,123,,,,,,,,104,,,,,,,,95,,,,,,,,122.21,,,,,,-33.00145,8356.65617,416,4314.32959,4312.58,,67,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 05:00:00",1,NSW1,0,62.75,0,62.75,0,0,7165.08,32,6663.71,5,-506.37,0,,,83,,,,,,,,81,,,,,,,,63.42,,,,,,,,105,,,,,,,,110,,,,,,,,88,,,,,,-7.69634,11681.77574,116,7158.72363,7185.61,,56.99,,,,54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0 +D,DREGION,,2,"2023/12/14 05:00:00",1,QLD1,0,62.73008,0,62.73008,0,0,6078.66,11,6161.92,3,80.27,0,,,0,,,,,,,,175,,,,,,,,155,,,,,,,,71,,,,,,,,236.33,,,,,,,,236,,,,,,14.73262,9948.38824,125,6052.84131,6081.44,,30,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0 +D,DREGION,,2,"2023/12/14 05:00:00",1,SA1,0,57.20178,0,57.20178,0,0,1274.34,5,1196.28,0,-78.07,0,,,68,,,,,,,,68,,,,,,,,60,,,,,,,,146.48,,,,,,,,80,,,,,,,,121.37,,,,,,19.66496,2495.72728,362,1255.18665,1274.33,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0 +D,DREGION,,2,"2023/12/14 05:00:00",1,TAS1,0,57.56249,0,57.56249,0,0,946.57,6,735.14,0,-211.43,0,,,33.46,,,,,,,,6.06,,,,,,,,0,,,,,,,,79.88,,,,,,,,139.64,,,,,,,,142.6,,,,,,5.52904,2293.23852,0,935.03662,946.57,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 05:00:00",1,VIC1,0,55.8717,0,55.8717,0,0,4324.4,26,5078.67,3,751.27,0,,,51,,,,,,,,51,,,,,,,,36,,,,,,,,103,,,,,,,,93,,,,,,,,71,,,,,,-14.23528,8345.66754,402,4330.35645,4347.77,,54,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0 +D,DREGION,,2,"2023/12/14 05:05:00",1,NSW1,0,62.75,0,62.75,0,0,7292.99,31,6787.21,5,-510.77,0,,,73.45,,,,,,,,78,,,,,,,,74,,,,,,,,140,,,,,,,,146,,,,,,,,124,,,,,,-7.87029,11754.08235,206,7289.30127,7312.15,,96,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0 +D,DREGION,,2,"2023/12/14 05:05:00",1,QLD1,0,62.6966,0,62.6966,0,0,6062.27,9,6176.9,3,111.63,0,,,0,,,,,,,,134.36,,,,,,,,75.46,,,,,,,,71,,,,,,,,236.33,,,,,,,,236,,,,,,12.33656,9946.85447,125,6043.28809,6065.06,,29,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0 +D,DREGION,,2,"2023/12/14 05:05:00",1,SA1,0,57.62577,0,57.62577,0,0,1287.28,6,1205.44,1,-82.83,0,,,60,,,,,,,,64,,,,,,,,56,,,,,,,,116.07,,,,,,,,77,,,,,,,,80.38,,,,,,15.8686,2505.14834,362,1265.59424,1288.3,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0 +D,DREGION,,2,"2023/12/14 05:05:00",1,TAS1,0,58.43975,0,58.43975,0,0,954.23,6,702.99,0,-251.24,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,104.52,,,,,,,,142.47,,,,,,5.66091,2273.99303,0,942.57336,954.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 05:05:00",1,VIC1,0,56.288,0,56.288,0,0,4351.5,29,5118.85,0,767.34,0,,,109,,,,,,,,109,,,,,,,,109,,,,,,,,104,,,,,,,,94,,,,,,,,75,,,,,,4.07797,8347.84724,419,4343.9834,4371.65,,14,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0 +D,DREGION,,2,"2023/12/14 05:10:00",1,NSW1,0,68.33036,0,68.33036,0,0,7387.2,40,6995.14,0,-392.06,0,,,78,,,,,,,,83,,,,,,,,79,,,,,,,,140,,,,,,,,146,,,,,,,,124,,,,,,0,11722.02386,206,7363.97607,7394.49,,91,,,,26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:10:00",1,QLD1,0,67.94756,0,67.94756,0,0,6131.71,10,6272.99,1,140.28,0,,,0,,,,,,,,130.52,,,,,,,,71.72,,,,,,,,71,,,,,,,,221.93,,,,,,,,221.6,,,,,,22.80335,9950.2696,125,6100.1001,6132.56,,45.76,,,,108,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:10:00",1,SA1,0,63.9154,0,63.9154,0,0,1282.32,7,1213.73,1,-69.6,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,116.68,,,,,,,,78,,,,,,,,98.64,,,,,,14.05727,2507.82519,362,1261.13623,1283.25,,21,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:10:00",1,TAS1,0,64.82588,0,64.82588,0,0,955.7,6,725.36,0,-230.35,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,119.39,,,,,,,,142.08,,,,,,-2.15088,2285.50745,0,951.85498,955.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:10:00",1,VIC1,0,62.76,0,62.76,0,0,4491.02,33,5067.83,7,569.81,0,,,103,,,,,,,,103,,,,,,,,103,,,,,,,,104,,,,,,,,92,,,,,,,,71,,,,,,20.06499,8178.55196,408,4458.33887,4509.05,,9,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:15:00",1,NSW1,0,86.46532,0,86.46532,0,0,7502.78,43,7049.26,0,-453.51,0,,,100,,,,,,,,138,,,,,,,,114,,,,,,,,152.94,,,,,,,,146,,,,,,,,159.81,,,,,,7.06805,11713.90383,206,7464.83496,7511.6,,76,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:15:00",1,QLD1,0,85.55,0,85.55,0,0,6161.84,11,6331.92,0,170.08,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,176.33,,,,,,,,166,,,,,,26.35063,9873.17136,50,6125.8877,6161.75,,51.95,,,,108,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:15:00",1,SA1,0,80.17966,0,80.17966,0,0,1273.65,7,1227.25,11,-57.39,0,,,39,,,,,,,,41,,,,,,,,33,,,,,,,,121,,,,,,,,79.81,,,,,,,,117,,,,,,12.22797,2515.86057,105,1255.91113,1284.5,,0,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:15:00",1,TAS1,0,81.32528,0,81.32528,0,0,959.94,7,726.6,0,-233.34,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,142.05,,,,,,0.40052,2290.43109,0,952.54376,959.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:15:00",1,VIC1,0,78.7336,0,78.7336,0,0,4517.28,34,5112.69,0,595.41,0,,,54,,,,,,,,71.99,,,,,,,,55.07,,,,,,,,133,,,,,,,,100,,,,,,,,71,,,,,,6.00654,8217.68997,410,4497.34082,4529.94,,79,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:20:00",1,NSW1,0,85.98,0,85.98,0,0,7531.32,45,7060.4,0,-470.91,0,,,100,,,,,,,,138,,,,,,,,114,,,,,,,,142.55,,,,,,,,146.26,,,,,,,,160.36,,,,,,0,11720.06131,206,7501.90137,7539.41,,76,,,,71,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:20:00",1,QLD1,0,84.58181,0,84.58181,0,0,6157.45,12,6370.62,0,213.17,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,181.33,,,,,,,,170,,,,,,0,9894.70396,50,6145.375,6157.54,,43.98,,,,87,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:20:00",1,SA1,0,80.34273,0,80.34273,0,0,1279.04,7,1217,0,-62.04,0,,,37,,,,,,,,39,,,,,,,,31,,,,,,,,119,,,,,,,,81,,,,,,,,115,,,,,,12.88338,2538.08983,105,1273.18945,1278.92,,0,,,,12,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:20:00",1,TAS1,0,82.11202,0,82.11202,0,0,970.66,6,706,0,-264.66,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,141.95,,,,,,1.55445,2269.1415,0,963.10474,970.66,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.34,7.34,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:20:00",1,VIC1,0,78.88692,0,78.88692,0,0,4427.08,33,5032.28,0,605.2,0,,,63,,,,,,,,74.87,,,,,,,,55.63,,,,,,,,154,,,,,,,,102,,,,,,,,77,,,,,,4.9889,8194.28328,411,4408.9082,4439.76,,81,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:25:00",1,NSW1,0,85.98,0,85.98,0,0,7602.24,40,7044.53,0,-557.72,0,,,105,,,,,,,,106.09,,,,,,,,79.66,,,,,,,,145.87,,,,,,,,146,,,,,,,,124,,,,,,25.85004,11723.43989,206,7545.479,7614.36,,71,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:25:00",1,QLD1,0,84.62339,0,84.62339,0,0,6186.71,11,6403.19,2,214.48,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,156.23,,,,,,,,170,,,,,,21.44596,9912.02496,50,6154.36182,6188.79,,57,,,,102.18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:25:00",1,SA1,0,79.01495,0,79.01495,0,0,1277.21,7,1206.47,0,-70.74,0,,,36.89,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,120,,,,,,,,116,,,,,,16.52226,2533.96589,105,1253.74402,1277.14,,0,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:25:00",1,TAS1,0,81.16814,0,81.16814,0,0,980.74,7,692.91,0,-287.83,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.83,,,,,,0.82539,2256.52484,0,972.91333,980.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:25:00",1,VIC1,0,77.5843,0,77.5843,0,0,4447.97,30,5190.44,10,732.46,0,,,99,,,,,,,,104,,,,,,,,89,,,,,,,,144,,,,,,,,82,,,,,,,,104.12,,,,,,-11.24302,8389.43545,430,4447.08447,4476.51,,32,,,,10.82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 05:30:00",1,NSW1,0,85.98,0,85.98,0,0,7585.1,38,7046.31,0,-538.79,0,,,125,,,,,,,,143,,,,,,,,119,,,,,,,,140,,,,,,,,146,,,,,,,,132.09,,,,,,22.16813,11729.02476,206,7533.9917,7594.49,,71,,,,57,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0 +D,DREGION,,2,"2023/12/14 05:30:00",1,QLD1,0,83.51552,0,83.51552,0,0,6170.21,11,6434.84,0,264.63,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24.57,,,,,,,,149.33,,,,,,,,165,,,,,,17.73848,9942.61439,50,6143.4917,6170.72,,80,,,,92,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0 +D,DREGION,,2,"2023/12/14 05:30:00",1,SA1,0,81.21302,0,81.21302,0,0,1297.59,7,1199.01,0,-98.58,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,120,,,,,,,,118.03,,,,,,,,116,,,,,,17.35708,2525.07136,105,1274.21191,1297.75,,0,,,,11,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0 +D,DREGION,,2,"2023/12/14 05:30:00",1,TAS1,0,82.79906,0,82.79906,0,0,990.03,7,678.56,0,-311.48,0,,,0,,,,,,,,7.18,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.99,,,,,,-0.06753,2243.46828,0,983.10126,990.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:30:00",1,VIC1,0,78.94286,0,78.94286,0,0,4518.35,29,5228.73,0,710.37,0,,,64.55,,,,,,,,59,,,,,,,,46.85,,,,,,,,155,,,,,,,,96,,,,,,,,106,,,,,,1.09649,8378.7255,430,4513.74121,4534.46,,19,,,,10,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0 +D,DREGION,,2,"2023/12/14 05:35:00",1,NSW1,0,85.98,0,85.98,0,0,7656.1,39,7129.91,0,-526.19,0,,,116.62,,,,,,,,159.66,,,,,,,,144,,,,,,,,150.4,,,,,,,,146,,,,,,,,124,,,,,,12.72394,11758.62037,206,7614.61816,7665.19,,82,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 05:35:00",1,QLD1,0,84.1864,0,84.1864,0,0,6217.54,11,6468.46,0,250.91,0,,,0,,,,,,,,55,,,,,,,,45,,,,,,,,24,,,,,,,,164.33,,,,,,,,180,,,,,,11.22122,9975.28667,50,6195.51318,6217.8,,20,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 05:35:00",1,SA1,0,81.16151,0,81.16151,0,0,1301.1,6,1199.01,1,-103.09,0,,,36,,,,,,,,39,,,,,,,,31,,,,,,,,118,,,,,,,,112.1,,,,,,,,109.07,,,,,,17.82549,2497.14645,105,1278.77844,1302.3,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 05:35:00",1,TAS1,0,82.95501,0,82.95501,0,0,991.31,7,673.96,0,-317.36,0,,,0,,,,,,,,32.82,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,144.08,,,,,,-0.15321,2240.95565,0,984.46692,991.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:35:00",1,VIC1,0,78.89183,0,78.89183,0,0,4515.14,30,5264.04,27,721.9,0,,,88,,,,,,,,93,,,,,,,,87.75,,,,,,,,142,,,,,,,,81,,,,,,,,100,,,,,,6.96839,8387.03626,438,4498.74805,4558.76,,47,,,,37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 05:40:00",1,NSW1,0,99.10241,0,99.10241,0,0,7746.61,41,7262.76,0,-483.85,0,,,114.72,,,,,,,,134.44,,,,,,,,106.11,,,,,,,,167.37,,,,,,,,146,,,,,,,,124,,,,,,19.10402,11810.22086,206,7694.46631,7752.3,,102,,,,59.84,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:40:00",1,QLD1,0,93.98996,0,93.98996,0,0,6192.34,8,6589.38,0,397.04,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,29,,,,,,,,178.25,,,,,,,,180,,,,,,10.15551,10010.16084,50,6174.87207,6194.53,,20,,,,64.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:40:00",1,SA1,0,97.67897,0,97.67897,0,0,1335.46,7,1206.39,0,-129.07,0,,,28,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,118,,,,,,,,113.97,,,,,,20.27513,2518.85554,105,1308.88086,1335.93,,11,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:40:00",1,TAS1,0,98.34907,0,98.34907,0,0,992.5,7,701.13,0,-291.37,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,42.8,,,,,,,,122.64,,,,,,,,138.92,,,,,,-0.24038,2237.21564,0,985.74158,992.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.27907,7.27907,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:40:00",1,VIC1,0,94.00663,0,94.00663,0,0,4632.25,29,5172.09,16,523.84,0,,,99,,,,,,,,114,,,,,,,,99,,,,,,,,155,,,,,,,,97,,,,,,,,105,,,,,,12.06307,8237.08935,441,4621.10352,4656.49,,27,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:45:00",1,NSW1,0,89.03,0,89.03,0,0,7733.87,38,7306.28,0,-427.59,0,,,106.4,,,,,,,,136.84,,,,,,,,107.7,,,,,,,,159.43,,,,,,,,146,,,,,,,,124,,,,,,0,11914.56416,206,7709.78711,7737.9,,96,,,,62,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:45:00",1,QLD1,0,85.55,0,85.55,0,0,6198.94,8,6558.26,0,359.32,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,29,,,,,,,,192.33,,,,,,,,181,,,,,,0,10057.81907,50,6192.56885,6200.42,,20,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:45:00",1,SA1,0,86.40576,0,86.40576,0,0,1304.84,7,1220.92,0,-83.92,0,,,34,,,,,,,,41,,,,,,,,31,,,,,,,,96,,,,,,,,78.7,,,,,,,,82.24,,,,,,0,2565.4094,105,1304.90002,1304.86,,0,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:45:00",1,TAS1,0,89.00908,0,89.00908,0,0,996.11,7,669.4,0,-326.71,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.5,,,,,,0.79567,2237.06878,0,988.3147,996.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.27,7.27,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 05:45:00",1,VIC1,0,84.43615,0,84.43615,0,0,4630.84,33,5123.73,0,492.89,0,,,102,,,,,,,,112,,,,,,,,97,,,,,,,,151,,,,,,,,86,,,,,,,,126,,,,,,-1.93105,8246.7335,441,4630.03418,4639.3,,44,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 05:50:00",1,NSW1,0,62.75,0,62.75,0,0,7792.01,33,7221.78,5,-575.23,0,,,99.47,,,,,,,,135,,,,,,,,122,,,,,,,,155.99,,,,,,,,146,,,,,,,,124,,,,,,0,12018.94547,206,7775.65234,7805.92,,110,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 05:50:00",1,QLD1,0,58.73577,0,58.73577,0,0,6121.51,5,6594.54,0,473.03,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,204.26,,,,,,,,174.92,,,,,,0,10126.99065,50,6119.729,6125.32,,0,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 05:50:00",1,SA1,0,60.58483,0,60.58483,0,0,1317.95,6,1223.53,0,-94.42,0,,,26,,,,,,,,26,,,,,,,,18,,,,,,,,116,,,,,,,,69.01,,,,,,,,112,,,,,,0,2583.41977,105,1317.48047,1318.07,,22,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 05:50:00",1,TAS1,0,62.5296,0,62.5296,0,0,1003.76,7,646.93,0,-356.83,0,,,0,,,,,,,,35.59,,,,,,,,4.25,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.35,,,,,,1.49187,2229.62673,0,995.26489,1003.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 05:50:00",1,VIC1,0,59.01977,0,59.01977,0,0,4569.37,32,5147.27,0,577.91,0,,,76,,,,,,,,91,,,,,,,,91,,,,,,,,138,,,,,,,,82,,,,,,,,100.71,,,,,,-15.92517,8289.27272,438,4572.55029,4580.99,,67,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 05:55:00",1,NSW1,0,62.75,0,62.75,0,0,7783.48,25,7211.2,5,-577.28,0,,,96.42,,,,,,,,122.74,,,,,,,,99,,,,,,,,148.29,,,,,,,,146,,,,,,,,124,,,,,,14.56021,12143.01006,206,7761.05322,7797.81,,79,,,,64,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 05:55:00",1,QLD1,0,58.70417,0,58.70417,0,0,6122.89,1,6617.98,0,495.09,0,,,0,,,,,,,,90,,,,,,,,64.1,,,,,,,,24,,,,,,,,190.33,,,,,,,,189,,,,,,24.34216,10163.80062,50,6102.26416,6127.33,,12,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 05:55:00",1,SA1,0,61.89212,0,61.89212,0,0,1350.89,7,1221,0,-129.89,0,,,36,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,79.43,,,,,,,,116,,,,,,15.3908,2595.04704,105,1332.9668,1351.37,,0,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 05:55:00",1,TAS1,0,63.58422,0,63.58422,0,0,1049.5,7,657.82,0,-391.67,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.26,,,,,,1.4275,2240.55731,0,1041.0686,1049.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 05:55:00",1,VIC1,0,59.56734,0,59.56734,0,0,4611.93,28,5243.83,0,631.89,0,,,110,,,,,,,,125,,,,,,,,110,,,,,,,,143,,,,,,,,86,,,,,,,,83.22,,,,,,-22.56664,8542.82722,421,4620.68164,4625.82,,69,,,,13,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:00:00",1,NSW1,0,61.55,0,61.55,0,0,7837.31,24,7147.1,5,-695.21,0,,,107.61,,,,,,,,106.73,,,,,,,,78.49,,,,,,,,152.54,,,,,,,,146,,,,,,,,124,,,,,,13.21227,12221.27517,206,7817.62061,7855.29,,83,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:00:00",1,QLD1,0,57.25069,0,57.25069,0,0,6145.56,-3,6658.51,0,512.95,0,,,0,,,,,,,,121.22,,,,,,,,101.22,,,,,,,,24,,,,,,,,190.33,,,,,,,,189,,,,,,33.57537,10278.17206,50,6120.75586,6150.33,,10,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:00:00",1,SA1,0,58.99219,0,58.99219,0,0,1354.23,6,1238.68,0,-115.56,0,,,28,,,,,,,,28,,,,,,,,18,,,,,,,,120,,,,,,,,82.71,,,,,,,,116,,,,,,11.59306,2606.87857,105,1337.47412,1354.55,,12,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:00:00",1,TAS1,0,60.91619,0,60.91619,0,0,1064.01,6,663.63,0,-400.38,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143,,,,,,5.02979,2245.56085,0,1052.97986,1064.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:00:00",1,VIC1,0,57.06786,0,57.06786,0,0,4642.91,25,5376.95,0,734.04,0,,,105,,,,,,,,120,,,,,,,,105,,,,,,,,138,,,,,,,,81,,,,,,,,81.76,,,,,,-21.57485,8652.95071,421,4656.09375,4660.69,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:05:00",1,NSW1,0,62.75,0,62.75,0,0,7914.52,19,7178.27,20,-756.25,0,,,63.49,,,,,,,,95.49,,,,,,,,67.15,,,,,,,,155.65,,,,,,,,126,,,,,,,,124,,,,,,20.57207,12519.70478,206,7898.34961,7949.65,,145,,,,79,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 06:05:00",1,QLD1,0,58.38787,0,58.38787,0,0,6122.49,-5,6649,0,526.52,0,,,0,,,,,,,,82,,,,,,,,62,,,,,,,,24,,,,,,,,200.06,,,,,,,,211,,,,,,37.27564,10612.08804,50,6096.29248,6127.55,,9,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 06:05:00",1,SA1,0,59.72907,0,59.72907,0,0,1385.68,7,1267.02,0,-118.67,0,,,26,,,,,,,,26,,,,,,,,18,,,,,,,,118,,,,,,,,118,,,,,,,,114,,,,,,12.84934,2648.18151,105,1367.31323,1386.03,,21.75,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 06:05:00",1,TAS1,0,61.52797,0,61.52797,0,0,1066.65,6,680.84,0,-385.81,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,98.88,,,,,,,,153.72,,,,,,,,143.05,,,,,,2.52396,2257.34603,0,1058.12451,1066.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:05:00",1,VIC1,0,57.78473,0,57.78473,0,0,4674.94,24,5453.51,5,773.58,0,,,104,,,,,,,,159,,,,,,,,154,,,,,,,,109,,,,,,,,52,,,,,,,,57.73,,,,,,-3.20464,8684.51292,410,4674.31543,4698.76,,19,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0 +D,DREGION,,2,"2023/12/14 06:10:00",1,NSW1,0,32.79008,0,32.79008,0,0,7889.32,18,7064.02,50,-875.3,0,,,86.33,,,,,,,,94.63,,,,,,,,70.79,,,,,,,,140,,,,,,,,126,,,,,,,,124,,,,,,0,12689.11875,206,7953.64307,7960.32,,95,,,,64.59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 06:10:00",1,QLD1,0,29.75356,0,29.75356,0,0,6119.8,-2,6776.18,0,656.37,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,191.95,,,,,,,,189,,,,,,0,10872.0896,50,6129.93848,6128.63,,13,,,,76.41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 06:10:00",1,SA1,0,31.04578,0,31.04578,0,0,1393.68,8,1300.06,0,-93.62,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,87.59,,,,,,,,79.59,,,,,,,,116,,,,,,0,2663.34978,105,1401.33618,1393.79,,0,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 06:10:00",1,TAS1,0,54.11,0,54.11,0,0,1068.92,5,606.92,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,149.64,,,,,,,,160,,,,,,,,142.96,,,,,,5.64918,2259.88464,0,1058.26941,1068.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0.38,0.38,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:10:00",1,VIC1,0,30.24378,0,30.24378,0,0,4710.6,23,5543.69,5,828.09,0,,,96,,,,,,,,131,,,,,,,,126,,,,,,,,104,,,,,,,,91,,,,,,,,76.57,,,,,,0,8799.68666,410,4715.10303,4739.21,,97.38,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 06:15:00",1,NSW1,0,21.61679,0,21.61679,0,0,7927.1,18,6948.58,50,-1028.52,0,,,53,,,,,,,,83.57,,,,,,,,59,,,,,,,,140,,,,,,,,126,,,,,,,,124,,,,,,0,12732.53483,206,8002.07813,8005.05,,120,,,,45,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:15:00",1,QLD1,0,20.0424,0,20.0424,0,0,6216.23,4,6762.97,0,546.75,0,,,0,,,,,,,,67.4,,,,,,,,57.4,,,,,,,,24,,,,,,,,196,,,,,,,,189,,,,,,0,10990.05703,50,6219.61621,6221.31,,20.38,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:15:00",1,SA1,0,19.56637,0,19.56637,0,0,1392.63,8,1311.51,0,-81.12,0,,,34,,,,,,,,41,,,,,,,,33,,,,,,,,86.14,,,,,,,,66.99,,,,,,,,91.1,,,,,,0,2669.06614,105,1388.29163,1392.64,,16,,,,34,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:15:00",1,TAS1,0,54.1,0,54.1,0,0,1067.43,5,605.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,150.88,,,,,,,,160,,,,,,,,142.89,,,,,,5.77308,2269.50312,0,1056.65576,1067.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:15:00",1,VIC1,0,19.12,0,19.12,0,0,4491.66,17,5593.29,5,1096.63,0,,,105,,,,,,,,160,,,,,,,,150.15,,,,,,,,100,,,,,,,,95,,,,,,,,97,,,,,,0,8856.64957,416,4527.38721,4535.36,,49,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:20:00",1,NSW1,0,39.25,0,39.25,0,0,7984.37,19,6899.25,49.19,-1134.31,0,,,36.04,,,,,,,,111.81,,,,,,,,97.77,,,,,,,,140,,,,,,,,126,,,,,,,,138.28,,,,,,2.93244,12853.93642,206,8038.32959,8067.42,,96,,,,88,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0 +D,DREGION,,2,"2023/12/14 06:20:00",1,QLD1,0,35.44616,0,35.44616,0,0,6214.69,6,6920.04,0,705.35,0,,,0,,,,,,,,37,,,,,,,,25,,,,,,,,24,,,,,,,,138.65,,,,,,,,141,,,,,,27.60333,11038.4305,50,6187.17725,6224.87,,39.38,,,,30,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0 +D,DREGION,,2,"2023/12/14 06:20:00",1,SA1,0,35.86653,0,35.86653,0,0,1405.74,7,1311.47,0,-94.27,0,,,26,,,,,,,,51.38,,,,,,,,31,,,,,,,,80.05,,,,,,,,119,,,,,,,,115,,,,,,20.33492,2650.67794,105,1378.76855,1405.85,,20,,,,43,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0 +D,DREGION,,2,"2023/12/14 06:20:00",1,TAS1,0,54.1,0,54.1,0,0,1069.16,4,607.16,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,150.88,,,,,,,,160,,,,,,,,139.38,,,,,,4.4292,2287.55324,0,1060.72827,1069.16,,50,,,,50,,,,,,,,,,,,,,,,,,,1,1,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.34,0.34,0,0,0,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:20:00",1,VIC1,0,34.94,0,34.94,0,0,4604.01,14,5674.54,5,1065.54,0,,,104,,,,,,,,150,,,,,,,,144,,,,,,,,106,,,,,,,,99,,,,,,,,109,,,,,,5.3569,8891.66962,418,4622.05176,4645.16,,50,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0 +D,DREGION,,2,"2023/12/14 06:25:00",1,NSW1,0,38.74711,0,38.74711,0,0,8072.65,18,6840.4,50.94,-1283.18,0,,,45.06,,,,,,,,89.06,,,,,,,,71.06,,,,,,,,141,,,,,,,,126,,,,,,,,126.38,,,,,,-13.13133,12902.91849,206,8157.16504,8167.18,,131,,,,65,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:25:00",1,QLD1,0,34.55,0,34.55,0,0,6166.75,2,6956.74,0,790,0,,,0,,,,,,,,91,,,,,,,,71,,,,,,,,24,,,,,,,,159.33,,,,,,,,177,,,,,,31.88779,11109.62494,50,6144.2124,6180.13,,18,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:25:00",1,SA1,0,35.14367,0,35.14367,0,0,1427.73,6,1314.26,0,-113.47,0,,,36.61,,,,,,,,75,,,,,,,,60.47,,,,,,,,121,,,,,,,,115.94,,,,,,,,117,,,,,,22.12913,2653.52833,105,1399.93945,1428.03,,18,,,,35,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:25:00",1,TAS1,0,53.60593,0,53.60593,0,0,1072.88,4,615.76,0,-457.11,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,156.46,,,,,,,,139.36,,,,,,2.97492,2289.29659,0,1065.90088,1072.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0,0,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:25:00",1,VIC1,0,33.99802,0,33.99802,0,0,4583.53,15,5751.02,5,1162.49,0,,,84,,,,,,,,89,,,,,,,,94,,,,,,,,112.88,,,,,,,,85,,,,,,,,83,,,,,,9.10193,8984.12106,421,4606.36133,4629.98,,33.49,,,,19,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:30:00",1,NSW1,0,58,0,58,0,0,8096.11,23,6857.15,30,-1268.95,0,,,34,,,,,,,,106,,,,,,,,84,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,-6.98316,12942.34515,206,8167.39941,8168.61,,116,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:30:00",1,QLD1,0,52.00029,0,52.00029,0,0,6183.07,3,6942.05,0,758.97,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,216.33,,,,,,,,189,,,,,,35.33744,11000.90075,50,6153.23193,6195.11,,25,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:30:00",1,SA1,0,32.55006,0,32.55006,0,0,1411.67,4,1309.05,0,-102.63,0,,,36.34,,,,,,,,41,,,,,,,,31.44,,,,,,,,96.03,,,,,,,,48.79,,,,,,,,91.81,,,,,,19.63134,2697.40251,105,1388.08313,1414.21,,3.38,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:30:00",1,TAS1,0,53.57593,0,53.57593,0,0,1085.24,3,623.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,144.31,,,,,,2.62609,2292.06877,0,1079.61646,1085.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 06:30:00",1,VIC1,0,19.12,0,19.12,0,0,4574.66,10,5758.97,5,1179.32,0,,,95,,,,,,,,110.86,,,,,,,,110,,,,,,,,133,,,,,,,,93,,,,,,,,88,,,,,,0,9018.49744,418,4611.62939,4627.3,,61,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:35:00",1,NSW1,0,56.56774,0,56.56774,0,0,8216.85,25,6894.94,30,-1351.91,0,,,50.92,,,,,,,,98.44,,,,,,,,74,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,1.03295,13068.93125,206,8266.62305,8295.67,,115,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 06:35:00",1,QLD1,0,49.55,0,49.55,0,0,6228.16,6,7123.83,0,895.68,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,37.31945,11152.08323,50,6200.55176,6245.69,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 06:35:00",1,SA1,0,31.92246,0,31.92246,0,0,1426.73,2,1330.24,26,-122.49,0,,,20,,,,,,,,39,,,,,,,,29,,,,,,,,85.03,,,,,,,,83.8,,,,,,,,115,,,,,,12.46677,2644.33569,105,1415.06519,1455.11,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 06:35:00",1,TAS1,0,54.1,0,54.1,0,0,1085.46,2,623.46,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.21,,,,,,3.79638,2244.50647,0,1079.65955,1085.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.03,0.03,0,0,0,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 06:35:00",1,VIC1,0,19.12,0,19.12,0,0,4540.12,1,5744.9,51,1153.79,0,,,94,,,,,,,,119,,,,,,,,121.02,,,,,,,,146,,,,,,,,86,,,,,,,,61.92,,,,,,-15.37807,8932.29,415,4608.39697,4635.44,,54.38,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 06:40:00",1,NSW1,0,57.27467,0,57.27467,0,0,8321,24,6976.55,51.36,-1395.8,0,,,48,,,,,,,,99.64,,,,,,,,77.87,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,16.05804,13175.62173,206,8356.99805,8425.23,,115,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:40:00",1,QLD1,0,49.55,0,49.55,0,0,6221.02,12,7195.6,0,974.58,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,38.00837,11229.6237,50,6193.94287,6242.2,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:40:00",1,SA1,0,21.88486,0,21.88486,0,0,1434.41,2,1306.06,11,-139.35,0,,,31,,,,,,,,41,,,,,,,,33,,,,,,,,88.34,,,,,,,,83.6,,,,,,,,103.37,,,,,,14.60934,2622.08653,105,1439.32312,1446.03,,14.38,,,,4,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:40:00",1,TAS1,0,54.1,0,54.1,0,0,1082.7,1,620.7,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.57,,,,,,5.88334,2246.0694,0,1075.81702,1082.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 06:40:00",1,VIC1,0,21.06756,0,21.06756,0,0,4620.81,-1,5767.6,11,1135.79,0,,,86,,,,,,,,113.64,,,,,,,,111,,,,,,,,146,,,,,,,,88,,,,,,,,75,,,,,,0,8961.68626,402,4703.30859,4670.35,,51,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 06:45:00",1,NSW1,0,58,0,58,0,0,8440.32,29,7052.65,47.84,-1435.5,0,,,75.16,,,,,,,,117.19,,,,,,,,101.16,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,27.77548,13233.42672,206,8494.44629,8545.59,,100,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:45:00",1,QLD1,0,49.55,0,49.55,0,0,6110.98,4,7134.82,0,1023.84,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,39.69926,11200.40163,50,6094.56885,6134.82,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:45:00",1,SA1,0,47.17344,0,47.17344,0,0,1446.73,1,1301.22,1,-146.51,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,102.4,,,,,,,,75.94,,,,,,,,91.64,,,,,,16.8179,2640.6582,105,1439.0625,1448.73,,11,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:45:00",1,TAS1,0,54.1,0,54.1,0,0,1084.83,1,628.1,0,-456.73,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.63,,,,,,3.50593,2269.4833,0,1080.32813,1084.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0,0,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 06:45:00",1,VIC1,0,45.64098,0,45.64098,0,0,4631.84,-4,5780.1,12,1136.26,0,,,47.8,,,,,,,,89.8,,,,,,,,86.67,,,,,,,,129,,,,,,,,91,,,,,,,,83,,,,,,0,8915.99428,399,4676.29053,4682.93,,68.11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:50:00",1,NSW1,0,58,0,58,0,0,8476.72,29,7089.84,36.71,-1423.58,0,,,82.56,,,,,,,,105.31,,,,,,,,95.51,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,38.9644,13289.81904,206,8519.2207,8572.56,,100,,,,86,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:50:00",1,QLD1,0,49.19438,0,49.19438,0,0,6120.38,1,7204.18,0,1083.8,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,36.63668,11294.72289,50,6110.96631,6147.47,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:50:00",1,SA1,0,50.90967,0,50.90967,0,0,1438.19,-2,1297.82,0,-140.37,0,,,38,,,,,,,,38,,,,,,,,31,,,,,,,,95.86,,,,,,,,84.47,,,,,,,,106.82,,,,,,12.75954,2677.51502,105,1429.53125,1439.2,,11,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:50:00",1,TAS1,0,54.1,0,54.1,0,0,1071.01,0,639.62,0,-431.39,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.99,,,,,,5.89659,2277.67801,0,1065.11157,1071.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 06:50:00",1,VIC1,0,49.50717,0,49.50717,0,0,4644.35,-4,5677.12,1,1031.77,0,,,43,,,,,,,,78,,,,,,,,93,,,,,,,,137,,,,,,,,83,,,,,,,,68,,,,,,4.92896,8900.342,379,4695.90527,4678.35,,42.77,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 06:55:00",1,NSW1,0,42.65054,0,42.65054,0,0,8415.82,26,7029.75,64,-1450.07,0,,,49,,,,,,,,87,,,,,,,,65,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,0,13344.62828,206,8516.68652,8556.36,,100,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0 +D,DREGION,,2,"2023/12/14 06:55:00",1,QLD1,0,34.55,0,34.55,0,0,5898.08,-6,7203.11,0,1305.02,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,0,11341.61194,50,5940.41748,5940.43,,21,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0 +D,DREGION,,2,"2023/12/14 06:55:00",1,SA1,0,9.20454,0,9.20454,0,0,1435.54,-4,1295.87,6,-145.67,0,,,38.21,,,,,,,,40,,,,,,,,31,,,,,,,,104.46,,,,,,,,87.68,,,,,,,,118,,,,,,0,2805.48856,105,1446.29956,1442.77,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0 +D,DREGION,,2,"2023/12/14 06:55:00",1,TAS1,0,54.08,0,54.08,0,0,1063.64,-1,601.64,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.95,,,,,,5.13918,2260.25699,0,1059.50049,1063.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 06:55:00",1,VIC1,0,8.95,0,8.95,0,0,4541.97,-12,5441.95,0,899.99,0,,,76.62,,,,,,,,125.8,,,,,,,,124.38,,,,,,,,129,,,,,,,,81,,,,,,,,58.06,,,,,,-8.35005,8870.70769,390,4600.4209,4569.11,,73.38,,,,32,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0 +D,DREGION,,2,"2023/12/14 07:00:00",1,NSW1,0,59.99,0,59.99,0,0,8454.41,16,7272.41,64,-1246,0,,,48,,,,,,,,87,,,,,,,,80.3,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,48.9105,13413.36588,206,8521.96582,8583.7,,115,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:00:00",1,QLD1,0,49.08772,0,49.08772,0,0,5976.54,-14,7235.46,0,1258.91,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,38.72833,11324.58835,50,5990.41309,6015.44,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:00:00",1,SA1,0,19.66294,0,19.66294,0,0,1423.06,-6,1249.91,0,-173.16,0,,,34,,,,,,,,40,,,,,,,,33,,,,,,,,110.46,,,,,,,,84.23,,,,,,,,104.21,,,,,,18.82631,2786.31343,105,1413.69922,1425.93,,16.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1058.97,-1,596.97,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,149.35,,,,,,-0.52864,2282.60833,0,1060.5033,1058.97,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 07:00:00",1,VIC1,0,19.12,0,19.12,0,0,4641.52,-19,5404.48,10,752.96,0,,,105,,,,,,,,123.72,,,,,,,,105,,,,,,,,126,,,,,,,,86,,,,,,,,73,,,,,,0,8902.63373,379,4683.7373,4675.18,,49,,,,29,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:05:00",1,NSW1,0,57.9998,0,57.9998,0,0,8485.3,7,7293.09,154,-1346.21,0,,,80.54,,,,,,,,127.69,,,,,,,,85,,,,,,,,190.48,,,,,,,,127,,,,,,,,125,,,,,,50,13515.19198,206,8563.95508,8702.93,,35,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:05:00",1,QLD1,0,48.15731,0,48.15731,0,0,6015.57,-9,7223.09,0,1207.51,0,,,11,,,,,,,,98,,,,,,,,70,,,,,,,,29,,,,,,,,216.33,,,,,,,,206,,,,,,35.7745,11319.15684,50,6032.69189,6050.67,,23,,,,88,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:05:00",1,SA1,0,54.37664,0,54.37664,0,0,1421.22,-8,1262.45,1,-159.77,0,,,78,,,,,,,,65,,,,,,,,61.17,,,,,,,,122,,,,,,,,120,,,,,,,,116,,,,,,9.01038,2795.08429,105,1423.07813,1427.21,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:05:00",1,TAS1,0,55.75639,0,55.75639,0,0,1053.85,-1,794.82,0,-259.03,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,11.69,,,,,,,,84.28,,,,,,,,115.07,,,,,,-1.5354,2278.60849,0,1056.38306,1053.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,8.68639,8.68639,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 07:05:00",1,VIC1,0,53.70345,0,53.70345,0,0,4809.21,-18,5500.3,9,682.09,0,,,70.77,,,,,,,,73.77,,,,,,,,70.77,,,,,,,,151,,,,,,,,90.7,,,,,,,,76.25,,,,,,0,8651.11083,374,4859.4082,4839.08,,83,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:10:00",1,NSW1,0,54.95,0,54.95,0,0,8454.32,2,7127.48,120,-1446.84,0,,,53,,,,,,,,91,,,,,,,,70,,,,,,,,150.62,,,,,,,,126,,,,,,,,124,,,,,,48.04181,13464.41495,206,8639.78027,8648.57,,25,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 07:10:00",1,QLD1,0,18.84,0,18.84,0,0,6048.15,-9,7352.16,3,1301.01,0,,,0,,,,,,,,74.6,,,,,,,,64.6,,,,,,,,21,,,,,,,,183,,,,,,,,177,,,,,,14.13577,11620.54004,50,6092.24072,6091.92,,15,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 07:10:00",1,SA1,0,49.66489,0,49.66489,0,0,1377.32,-11,1292.79,8,-92.53,0,,,56.66,,,,,,,,57.73,,,,,,,,33,,,,,,,,121,,,,,,,,96.57,,,,,,,,118,,,,,,9.62229,2827.19241,105,1383.60071,1390.78,,5,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 07:10:00",1,TAS1,0,52.9113,0,52.9113,0,0,1076.3,-2,751.83,0,-324.46,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,140.72,,,,,,,,143.58,,,,,,5.31428,2269.93379,0,1072.98132,1076.3,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 07:10:00",1,VIC1,0,50.31967,0,50.31967,0,0,4738.88,-22,5448.49,0,709.61,0,,,133.64,,,,,,,,143.64,,,,,,,,118.66,,,,,,,,141,,,,,,,,82,,,,,,,,65.71,,,,,,-10.92631,8641.04707,376,4801.88965,4765.19,,115,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 07:15:00",1,NSW1,0,58,0,58,0,0,8498.53,0,7167.7,115,-1445.83,0,,,92,,,,,,,,130,,,,,,,,119,,,,,,,,194.78,,,,,,,,130.2,,,,,,,,124,,,,,,48.36817,13513.07858,206,8676.67969,8687.66,,35,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 07:15:00",1,QLD1,0,-20.5,0,-20.5,0,0,6028.7,-9,7304.46,0,1275.75,0,,,0,,,,,,,,42,,,,,,,,28,,,,,,,,26,,,,,,,,215,,,,,,,,199,,,,,,-6.72549,11909.97619,50,6113.0293,6069.27,,13,,,,94,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 07:15:00",1,SA1,0,52.40557,0,52.40557,0,0,1379.55,-13,1291.27,0,-88.27,0,,,71.86,,,,,,,,85,,,,,,,,37.98,,,,,,,,122,,,,,,,,110,,,,,,,,118,,,,,,13.27113,2812.25861,105,1387.91382,1384.55,,11,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 07:15:00",1,TAS1,0,55.68923,0,55.68923,0,0,1108.92,-2,802.45,0,-306.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,82.72,,,,,,,,115.22,,,,,,11.54796,2262.55201,0,1099.37354,1108.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,8.61923,8.61923,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 07:15:00",1,VIC1,0,53.09561,0,53.09561,0,0,4730.76,-22,5445.98,5,710.22,0,,,80.52,,,,,,,,110.52,,,,,,,,100.52,,,,,,,,154,,,,,,,,95,,,,,,,,76.7,,,,,,-10.06046,8550.37691,390,4786.28027,4761.46,,101,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 07:20:00",1,NSW1,0,9.37764,0,9.37764,0,0,8106.78,-6,7080.03,154,-1180.75,0,,,58,,,,,,,,98.61,,,,,,,,85,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,0,13612.46914,206,8282.96582,8325.12,,20,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:20:00",1,QLD1,0,1,0,1,0,0,6065.37,-5,7328.34,3,1259.97,0,,,28,,,,,,,,56,,,,,,,,25,,,,,,,,21,,,,,,,,192.38,,,,,,,,181,,,,,,-23.25622,11882.40585,50,6126.08252,6107.8,,15,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:20:00",1,SA1,0,8.7426,0,8.7426,0,0,1337.32,-15,1280.54,0,-56.78,0,,,45.05,,,,,,,,80,,,,,,,,41.35,,,,,,,,69.81,,,,,,,,33,,,,,,,,65.86,,,,,,0,2807.3237,105,1361.4563,1342.65,,17.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:20:00",1,TAS1,0,37.08,0,37.08,0,0,1102.79,-2,640.79,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.52,,,,,,0,2266.99974,0,1104.78711,1102.79,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 07:20:00",1,VIC1,0,8.95,0,8.95,0,0,4779.67,-23,5354.89,0,575.21,0,,,112.61,,,,,,,,132.61,,,,,,,,132.61,,,,,,,,135,,,,,,,,105,,,,,,,,89,,,,,,0,8590.33855,404,4835.99365,4806.22,,153,,,,45,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:25:00",1,NSW1,0,22.57369,0,22.57369,0,0,8160.97,-18,7154.88,154,-1160.08,0,,,57,,,,,,,,96,,,,,,,,85,,,,,,,,141,,,,,,,,122.6,,,,,,,,124,,,,,,49.0209,13751.42705,206,8328.02441,8371.2,,20,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:25:00",1,QLD1,0,18.84,0,18.84,0,0,6055.67,0,7230.67,0,1175,0,,,0,,,,,,,,52,,,,,,,,25,,,,,,,,21,,,,,,,,196,,,,,,,,191,,,,,,-7.74915,11779.71991,50,6094.8418,6089.22,,40.38,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:25:00",1,SA1,0,18.50274,0,18.50274,0,0,1342.04,-17,1324.45,0,-17.59,0,,,59.61,,,,,,,,85.98,,,,,,,,34.42,,,,,,,,70.87,,,,,,,,35,,,,,,,,57.75,,,,,,19.52434,2815.45131,105,1344.75854,1346.72,,31,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:25:00",1,TAS1,0,54.1,0,54.1,0,0,1092.77,-2,630.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,143.49,,,,,,-2.26338,2243.50541,0,1097.03223,1092.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 07:25:00",1,VIC1,0,19.14,0,19.14,0,0,4840.85,-19,5435.71,9,585.86,0,,,127.83,,,,,,,,132.83,,,,,,,,137.83,,,,,,,,111,,,,,,,,89,,,,,,,,63,,,,,,8.2061,8675.09202,421,4876.53955,4876.57,,114,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:30:00",1,NSW1,0,54.95,0,54.95,0,0,8197.17,-18,7255.15,160,-1102.02,0,,,52,,,,,,,,91,,,,,,,,70,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,49.34727,13874.71774,211,8353.89746,8406.07,,32,,,,45.51,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:30:00",1,QLD1,0,46.50207,0,46.50207,0,0,6072.9,-4,7176.73,0,1103.83,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,21,,,,,,,,166,,,,,,,,166,,,,,,-10.36234,11571.17906,50,6109.0083,6101.92,,21,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:30:00",1,SA1,0,9.07237,0,9.07237,0,0,1333.94,-18,1323.48,5,-15.46,0,,,75.17,,,,,,,,57.66,,,,,,,,33,,,,,,,,79.31,,,,,,,,44.8,,,,,,,,53.26,,,,,,22.04084,2823.91333,105,1334.32971,1343.64,,3.38,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:30:00",1,TAS1,0,54.1,0,54.1,0,0,1093.01,-3,631.01,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.54,,,,,,-5.81563,2221.32044,0,1101.82422,1093.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 07:30:00",1,VIC1,0,9.38454,0,9.38454,0,0,4821.57,-15,5412.69,6,585.12,0,,,110.79,,,,,,,,120.79,,,,,,,,107.99,,,,,,,,97,,,,,,,,89,,,,,,,,86,,,,,,11.59629,8776.67391,410,4861.68408,4854.42,,149,,,,50.49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:35:00",1,NSW1,0,54.95,0,54.95,0,0,8166.67,-9,7327.75,163,-1001.92,0,,,87.01,,,,,,,,160,,,,,,,,107,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,21.10221,13879.2854,211,8356.75684,8389.31,,43.38,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 07:35:00",1,QLD1,0,45.16736,0,45.16736,0,0,5930.76,-6,7163.22,0,1232.45,0,,,28,,,,,,,,66,,,,,,,,55,,,,,,,,21,,,,,,,,180,,,,,,,,180,,,,,,7.38082,10910.97641,50,5962.16309,5968.73,,11,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 07:35:00",1,SA1,0,8.83323,0,8.83323,0,0,1331.01,-18,1271.64,0,-59.37,0,,,90,,,,,,,,47,,,,,,,,78,,,,,,,,66.05,,,,,,,,57.09,,,,,,,,81.3,,,,,,23.66196,2507.002,105,1330.05115,1334.48,,16,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 07:35:00",1,TAS1,0,54.08,0,54.08,0,0,1086.32,-3,624.32,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,138.79,,,,,,-8.44965,2231.71573,0,1097.7677,1086.32,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.85,0.85,0,1.75,1.75,0,0,0,0,4.54033,4.54033,0 +D,DREGION,,2,"2023/12/14 07:35:00",1,VIC1,0,8.95,0,8.95,0,0,4865.28,-15,5277.13,0,411.86,0,,,41,,,,,,,,90.43,,,,,,,,41.79,,,,,,,,139,,,,,,,,86,,,,,,,,78,,,,,,9.29737,8701.79563,415,4896.84619,4885.22,,135,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 07:40:00",1,NSW1,0,62.75,0,62.75,0,0,8277.13,-8,7434.62,158,-1000.5,0,,,57,,,,,,,,118.6,,,,,,,,85,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,26.19048,13879.26316,211,8458.4248,8488.61,,25,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 07:40:00",1,QLD1,0,52.06759,0,52.06759,0,0,6035.63,-6,7223.02,0,1187.39,0,,,20,,,,,,,,74,,,,,,,,45,,,,,,,,21,,,,,,,,176,,,,,,,,176,,,,,,3.30924,10901.04979,50,6068.08301,6069.67,,23,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 07:40:00",1,SA1,0,8.97594,0,8.97594,0,0,1295.36,-18,1226.39,8,-76.98,0,,,99.42,,,,,,,,75,,,,,,,,83.83,,,,,,,,76.03,,,,,,,,65.21,,,,,,,,113.81,,,,,,9.96814,2487.04102,105,1306.96521,1305.24,,5.38,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 07:40:00",1,TAS1,0,54.1,0,54.1,0,0,1080.59,-3,618.59,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.4,,,,,,-15.20696,2244.50044,0,1098.79834,1080.59,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 07:40:00",1,VIC1,0,9,0,9,0,0,4775.35,-19,5235.95,2,458.6,0,,,66.72,,,,,,,,96.72,,,,,,,,66.72,,,,,,,,148,,,,,,,,100,,,,,,,,63,,,,,,0,8709.08173,413,4813.68213,4794.47,,152,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 07:45:00",1,NSW1,0,62.75,0,62.75,0,0,8265.91,-6,7481.12,154,-938.8,0,,,77,,,,,,,,140.01,,,,,,,,85,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,30.95238,13897.48001,206,8444.31738,8479.53,,35,,,,83,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:45:00",1,QLD1,0,51.67632,0,51.67632,0,0,5994.18,-3,7244.21,0,1250.03,0,,,0,,,,,,,,48,,,,,,,,25,,,,,,,,19,,,,,,,,178,,,,,,,,178,,,,,,10.66928,10877.45843,50,6022.15527,6032.62,,31.38,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:45:00",1,SA1,0,-35.95,0,-35.95,0,0,1286,-18,1174.5,6,-117.5,0,,,97.08,,,,,,,,70,,,,,,,,79.35,,,,,,,,121,,,,,,,,77.78,,,,,,,,118,,,,,,-1.78739,2522.94468,105,1311.21008,1294.7,,31,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:45:00",1,TAS1,0,54.08,0,54.08,0,0,1070.17,-3,608.17,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,99.34,,,,,,,,153,,,,,,,,143.61,,,,,,-19.58331,2246.75938,0,1092.74878,1070.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,4.56049,4.56049,0 +D,DREGION,,2,"2023/12/14 07:45:00",1,VIC1,0,-35.67741,0,-35.67741,0,0,4741.36,-20,5134.88,7,386.51,0,,,70.85,,,,,,,,107.85,,,,,,,,90.85,,,,,,,,104.51,,,,,,,,82,,,,,,,,53.17,,,,,,-11.77703,8751.84901,368,4795.07861,4765.85,,108,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 07:50:00",1,NSW1,0,60.61376,0,60.61376,0,0,8250.44,-9,7444.9,149,-954.53,0,,,70.48,,,,,,,,156.84,,,,,,,,58,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,35.71429,13626.88245,206,8432.2168,8460.94,,55,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:50:00",1,QLD1,0,49.55,0,49.55,0,0,5956.71,-4,7220.52,0,1263.8,0,,,9,,,,,,,,74,,,,,,,,55,,,,,,,,19,,,,,,,,191,,,,,,,,185,,,,,,6.30246,10804.52652,50,5994.09277,5996.31,,23,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:50:00",1,SA1,0,9.06452,0,9.06452,0,0,1272.65,-16,1143.21,5,-134.44,0,,,83,,,,,,,,47,,,,,,,,77,,,,,,,,119,,,,,,,,77.94,,,,,,,,116,,,,,,0,2482.73409,105,1294.42554,1280.76,,16,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:50:00",1,TAS1,0,54.1,0,54.1,0,0,1064.77,-3,602.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.54,,,,,,-21.57872,2240.38339,0,1089.34802,1064.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.39,0.39,0,1,1,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 07:50:00",1,VIC1,0,8.95,0,8.95,0,0,4791.2,-17,5203.86,3,409.66,0,,,82,,,,,,,,87,,,,,,,,89.38,,,,,,,,115.59,,,,,,,,81,,,,,,,,60.41,,,,,,0,8799.69474,338,4824.74365,4812.48,,111.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:55:00",1,NSW1,0,58,0,58,0,0,8193.81,-10,7501.42,149,-841.39,0,,,62,,,,,,,,94.84,,,,,,,,80,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,40.47619,13681.04063,206,8364.66211,8391.83,,45,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:55:00",1,QLD1,0,48.65862,0,48.65862,0,0,5923.49,-6,7063.65,0,1140.15,0,,,2,,,,,,,,67,,,,,,,,55,,,,,,,,19,,,,,,,,191,,,,,,,,185,,,,,,-2.01202,10721.7441,295,5968.65088,5955.4,,23,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:55:00",1,SA1,0,9.01801,0,9.01801,0,0,1250.89,-15,1130.76,3,-123.13,0,,,85.76,,,,,,,,71,,,,,,,,32.63,,,,,,,,83.55,,,,,,,,67.63,,,,,,,,115.11,,,,,,-9.75414,2430.4076,105,1286.46729,1256.93,,11,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 07:55:00",1,TAS1,0,54.08,0,54.08,0,0,1061.51,-3,599.51,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.52,,,,,,-22.91378,2279.17952,0,1087.42566,1061.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 07:55:00",1,VIC1,0,8.95,0,8.95,0,0,4795.15,-16,5194.64,11,388.49,0,,,93,,,,,,,,130,,,,,,,,113,,,,,,,,142,,,,,,,,82,,,,,,,,52,,,,,,-22.20146,8821.93495,361,4850.55029,4824.3,,126.38,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 08:00:00",1,NSW1,0,99.61,0,99.61,0,0,8236.37,-11,7711.06,149,-674.31,0,,,90.65,,,,,,,,181.66,,,,,,,,100.15,,,,,,,,141,,,,,,,,125,,,,,,,,124,,,,,,45.2381,13746.00609,207,8369.09375,8416.43,,40,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:00:00",1,QLD1,0,86,0,86,0,0,6005.01,-7,7202.92,245,952.92,0,,,0,,,,,,,,56.1,,,,,,,,46.1,,,,,,,,19,,,,,,,,186.15,,,,,,,,186.31,,,,,,0,10676.69022,295,6040.57373,6270.92,,25,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:00:00",1,SA1,0,0.02036,0,0.02036,0,0,1260.98,-13,1115.51,0,-145.47,0,,,108,,,,,,,,68,,,,,,,,92,,,,,,,,87.76,,,,,,,,75.72,,,,,,,,116.28,,,,,,0,2435.58009,105,1280.6825,1264.3,,48.38,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1046.78,-4,584.78,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.29,,,,,,-24.24884,2276.40722,0,1075.03198,1046.78,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.5,0.5,0,1,1,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 08:00:00",1,VIC1,0,0.02,0,0.02,0,0,4767.46,-22,5173.17,3,402.71,0,,,41,,,,,,,,53,,,,,,,,41,,,,,,,,142,,,,,,,,82,,,,,,,,52,,,,,,0,8776.98091,344,4814.78027,4789.02,,92,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:05:00",1,NSW1,0,58,0,58,0,0,8205.34,-9,7638.25,96,-663.09,0,,,87,,,,,,,,126,,,,,,,,105,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,50,13899.93341,154,8324.24707,8336.91,,31,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:05:00",1,QLD1,0,49.55,0,49.55,0,0,5973.1,-8,7242.82,246,1023.72,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,16,,,,,,,,191.24,,,,,,,,186,,,,,,-16.88503,10308.87199,295,6270.19531,6242.82,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:05:00",1,SA1,0,9.0183,0,9.0183,0,0,1259.43,-12,1124.72,2,-136.71,0,,,63.2,,,,,,,,73.17,,,,,,,,30,,,,,,,,95.21,,,,,,,,78.94,,,,,,,,116,,,,,,6.79145,2527.47082,105,1271.69348,1266.25,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:05:00",1,TAS1,0,37.1,0,37.1,0,0,1057.52,-4,595.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.27,,,,,,-15.02626,2271.8438,0,1076.54602,1057.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:05:00",1,VIC1,0,8.95,0,8.95,0,0,4779.22,-21,5102.81,0,323.59,0,,,94.35,,,,,,,,93.35,,,,,,,,92.62,,,,,,,,143,,,,,,,,83,,,,,,,,56.91,,,,,,-20.88427,8643.68032,413,4844.30859,4800.62,,142.38,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:10:00",1,NSW1,0,66.19627,0,66.19627,0,0,8205.02,-17,7630.06,75,-649.96,0,,,101,,,,,,,,140,,,,,,,,99,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,50,13895.25513,158,8275.39648,8325.92,,21,,,,63,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 08:10:00",1,QLD1,0,55.74998,0,55.74998,0,0,5988.25,-5,7363.71,247,1128.46,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,61,,,,,,,,235,,,,,,,,229,,,,,,-27.64973,10643.89565,370,6287.68799,6265.09,,23,,,,71.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 08:10:00",1,SA1,0,5.2631,0,5.2631,0,0,1241.34,-13,1131.29,1,-111.05,0,,,35,,,,,,,,35,,,,,,,,32,,,,,,,,86.45,,,,,,,,35,,,,,,,,67.99,,,,,,13.10625,2473.66865,105,1246.9043,1245.79,,5.82,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 08:10:00",1,TAS1,0,37.08,0,37.08,0,0,1061.89,-3,599.89,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,140,,,,,,,,142.99,,,,,,-10.6432,2294.10679,0,1075.5293,1061.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:10:00",1,VIC1,0,5.24979,0,5.24979,0,0,4788.71,-22,4990.64,9,192.93,0,,,59.87,,,,,,,,73.4,,,,,,,,45.99,,,,,,,,97,,,,,,,,79.98,,,,,,,,53,,,,,,0,8600.89023,415,4830.35938,4816.91,,155.56,,,,23.84,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 08:15:00",1,NSW1,0,58,0,58,0,0,8086.88,-20,7425.11,65,-726.78,0,,,101,,,,,,,,120,,,,,,,,96.1,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,50,13814.86234,147,8208.00781,8209.06,,29,,,,55,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:15:00",1,QLD1,0,1,0,1,0,0,5926.61,-8,7400.09,247,1226.48,0,,,45,,,,,,,,135,,,,,,,,115,,,,,,,,37,,,,,,,,216.46,,,,,,,,216.5,,,,,,-25.7719,10877.10205,370,6252.09375,6210.66,,13,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:15:00",1,SA1,0,9.06928,0,9.06928,0,0,1215.15,-14,1107.45,6,-113.7,0,,,35,,,,,,,,35,,,,,,,,31,,,,,,,,112.24,,,,,,,,38.39,,,,,,,,82.05,,,,,,19.15032,2349.18319,105,1216.93005,1223.68,,9,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:15:00",1,TAS1,0,36.57593,0,36.57593,0,0,1050.04,-3,588.04,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.3,,,,,,-8.88762,2296.16195,0,1061.92834,1050.04,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.03,0.03,0,0.3,0.3,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 08:15:00",1,VIC1,0,9,0,9,0,0,4775.09,-21,4965.16,0,190.07,0,,,57.6,,,,,,,,66.21,,,,,,,,35,,,,,,,,97,,,,,,,,84,,,,,,,,53,,,,,,-31.80533,8568.64785,410,4862.59033,4792.41,,154.38,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 08:20:00",1,NSW1,0,88.88,0,88.88,0,0,8160.23,-17,7513.52,79,-725.71,0,,,100,,,,,,,,125.37,,,,,,,,98,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,44.29195,13805.22532,148,8270.00684,8299.53,,21,,,,54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 08:20:00",1,QLD1,0,1,0,1,0,0,5926.83,-7,7431.9,245,1260.06,0,,,45,,,,,,,,123,,,,,,,,113,,,,,,,,35,,,,,,,,218.98,,,,,,,,219,,,,,,-33.78773,11043.51936,370,6258.854,6211.08,,23.38,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 08:20:00",1,SA1,0,0.02006,0,0.02006,0,0,1183.31,-17,1051.42,4,-135.89,0,,,31,,,,,,,,31,,,,,,,,29,,,,,,,,70.6,,,,,,,,31,,,,,,,,45.64,,,,,,22.81345,2292.0046,105,1187.07434,1192.78,,6,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 08:20:00",1,TAS1,0,37.08,0,37.08,0,0,1057.85,-2,595.85,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,137.08,,,,,,,,143.05,,,,,,-5.30032,2292.84986,0,1065.15479,1057.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:20:00",1,VIC1,0,0.02,0,0.02,0,0,4678.87,-23,4870.01,0,191.14,0,,,63.28,,,,,,,,77,,,,,,,,36.36,,,,,,,,106,,,,,,,,69.63,,,,,,,,52,,,,,,-20.71736,8625.97524,415,4739.55957,4701.46,,155,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 08:25:00",1,NSW1,0,85.98,0,85.98,0,0,8134.31,-12,7491.02,72,-715.29,0,,,74,,,,,,,,109.84,,,,,,,,87.36,,,,,,,,142,,,,,,,,113,,,,,,,,124,,,,,,45.24329,13836.07103,149,8260.61035,8268.87,,41,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0 +D,DREGION,,2,"2023/12/14 08:25:00",1,QLD1,0,0,0,0,0,0,5809.7,-10,7324.74,245,1270.03,0,,,45,,,,,,,,107.3,,,,,,,,96.9,,,,,,,,35,,,,,,,,226,,,,,,,,223,,,,,,-39.86186,10873.79277,370,6152.32031,6095.26,,11.1,,,,78,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0 +D,DREGION,,2,"2023/12/14 08:25:00",1,SA1,0,8.97482,0,8.97482,0,0,1178.71,-18,1033.6,1,-146.12,0,,,21,,,,,,,,21,,,,,,,,19,,,,,,,,50.71,,,,,,,,35,,,,,,,,33,,,,,,22.76872,2304.16461,105,1184.73901,1186.18,,16.28,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0 +D,DREGION,,2,"2023/12/14 08:25:00",1,TAS1,0,37.08,0,37.08,0,0,1056.84,-2,594.84,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,137.23,,,,,,,,142.64,,,,,,-6.56176,2290.07852,0,1065.40479,1056.84,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:25:00",1,VIC1,0,8.95,0,8.95,0,0,4653.55,-33,4844.19,3,187.65,0,,,97.01,,,,,,,,115.8,,,,,,,,72.87,,,,,,,,107,,,,,,,,53.41,,,,,,,,42,,,,,,-26.15374,8537.98353,421,4738.08936,4681.24,,137,,,,42,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0 +D,DREGION,,2,"2023/12/14 08:30:00",1,NSW1,0,85.98,0,85.98,0,0,8089.41,-9,7448.71,75,-715.7,0,,,101,,,,,,,,139,,,,,,,,111.31,,,,,,,,142,,,,,,,,107.19,,,,,,,,108.87,,,,,,46.19463,13836.68128,152,8195.31543,8225.54,,18,,,,69,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0 +D,DREGION,,2,"2023/12/14 08:30:00",1,QLD1,0,1,0,1,0,0,5833.48,-11,7334.42,245,1255.94,0,,,45,,,,,,,,93,,,,,,,,90,,,,,,,,35,,,,,,,,222,,,,,,,,216,,,,,,-44.32862,10946.6748,370,6175.08252,6118.21,,13,,,,70,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0 +D,DREGION,,2,"2023/12/14 08:30:00",1,SA1,0,8.83719,0,8.83719,0,0,1173.27,-18,1107.99,0,-65.28,0,,,34,,,,,,,,36.71,,,,,,,,32,,,,,,,,44.59,,,,,,,,35,,,,,,,,32,,,,,,23.29133,2370.23741,105,1176.05725,1176.95,,11,,,,11,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0 +D,DREGION,,2,"2023/12/14 08:30:00",1,TAS1,0,37.08,0,37.08,0,0,1053.82,-2,591.82,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,136.64,,,,,,-4.99008,2291.93506,0,1060.81409,1053.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:30:00",1,VIC1,0,8.95,0,8.95,0,0,4674.12,-30,4788.92,4,110.79,0,,,60.12,,,,,,,,87.66,,,,,,,,41.62,,,,,,,,101,,,,,,,,51,,,,,,,,43,,,,,,-20.01743,8522.05902,415,4751.60303,4697.33,,163.38,,,,20,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0 +D,DREGION,,2,"2023/12/14 08:35:00",1,NSW1,0,88.89,0,88.89,0,0,8268.29,-11,7571.2,69,-766.1,0,,,68,,,,,,,,106,,,,,,,,79.47,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,40.95745,13936.21009,154,8365.44141,8400.93,,55,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:35:00",1,QLD1,0,34.55,0,34.55,0,0,5780.7,-16,7327.95,255,1292.24,0,,,45,,,,,,,,102,,,,,,,,92,,,,,,,,36,,,,,,,,215,,,,,,,,198.43,,,,,,0,10706.3656,370,6078.27881,6077.32,,34,,,,80,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:35:00",1,SA1,0,0.01934,0,0.01934,0,0,1154.45,-19,1160.91,0,6.46,0,,,32,,,,,,,,34.39,,,,,,,,30,,,,,,,,43.57,,,,,,,,33,,,,,,,,28,,,,,,23.81394,2417.51062,105,1153.4469,1158.1,,11,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:35:00",1,TAS1,0,11.08,0,11.08,0,0,1049.17,-2,587.17,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,136.64,,,,,,-4.89964,2300.39958,0,1056.06921,1049.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:35:00",1,VIC1,0,0.02,0,0.02,0,0,4652.22,-30,4709.83,1,56.61,0,,,81.76,,,,,,,,114.9,,,,,,,,73,,,,,,,,100,,,,,,,,52.85,,,,,,,,42,,,,,,0,8452.50189,415,4695.91455,4671.53,,120,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:40:00",1,NSW1,0,100,0,100,0,0,8283.23,-12,7640.68,68,-710.55,0,,,73,,,,,,,,112,,,,,,,,85.08,,,,,,,,142,,,,,,,,111.69,,,,,,,,105,,,,,,35.35862,13893.82874,153,8390.7373,8412.96,,48,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:40:00",1,QLD1,0,34.55,0,34.55,0,0,5789.54,-18,7318.54,255,1274,0,,,45,,,,,,,,111.2,,,,,,,,101.2,,,,,,,,36,,,,,,,,236,,,,,,,,180.82,,,,,,0,10776.00849,370,6101.0918,6084.67,,24,,,,74,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:40:00",1,SA1,0,8.32285,0,8.32285,0,0,1160.33,-19,1162.02,8,-6.32,0,,,21,,,,,,,,21.15,,,,,,,,19,,,,,,,,49.49,,,,,,,,35,,,,,,,,30,,,,,,18.82722,2431.2999,105,1164.09692,1173.18,,20,,,,11,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:40:00",1,TAS1,0,11.08,0,11.08,0,0,1027.07,-2,578.82,0,-448.26,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.89,,,,,,,,122.89,,,,,,-8.84715,2299.16653,0,1037.92041,1027.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 08:40:00",1,VIC1,0,8.65021,0,8.65021,0,0,4689.92,-27,4714.9,7,17.98,0,,,66.75,,,,,,,,111.86,,,,,,,,68,,,,,,,,101,,,,,,,,51,,,,,,,,43,,,,,,0,8413.81662,415,4729.98193,4717.06,,135.01,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0 +D,DREGION,,2,"2023/12/14 08:45:00",1,NSW1,0,88.88,0,88.88,0,0,8288.91,-10,7653.44,68,-703.48,0,,,68,,,,,,,,107,,,,,,,,81.24,,,,,,,,142,,,,,,,,113,,,,,,,,104.22,,,,,,38.60498,13962.5785,157,8348.72363,8411.36,,49.18,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0 +D,DREGION,,2,"2023/12/14 08:45:00",1,QLD1,0,34.55,0,34.55,0,0,5795.86,-16,7268.22,256,1216.36,0,,,45,,,,,,,,113.8,,,,,,,,103.8,,,,,,,,36,,,,,,,,218.68,,,,,,,,149,,,,,,-32.88853,10748.72505,370,6135.92725,6087.97,,38,,,,78,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0 +D,DREGION,,2,"2023/12/14 08:45:00",1,SA1,0,0.01905,0,0.01905,0,0,1098.62,-20,1196.55,13,84.93,0,,,66.25,,,,,,,,63.37,,,,,,,,19,,,,,,,,55.11,,,,,,,,35,,,,,,,,30,,,,,,12.51346,2409.14138,105,1119.19812,1113.95,,20,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0 +D,DREGION,,2,"2023/12/14 08:45:00",1,TAS1,0,10.57593,0,10.57593,0,0,1034.1,-3,585.3,0,-448.8,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.69,,,,,,,,122.69,,,,,,-10.04081,2326.33693,0,1047.13843,1034.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 08:45:00",1,VIC1,0,0.02,0,0.02,0,0,4639.83,-26,4615.17,17,-41.67,0,,,59,,,,,,,,69,,,,,,,,69,,,,,,,,101,,,,,,,,72.66,,,,,,,,43,,,,,,-0.35848,8372.11303,393,4689.63867,4671.29,,85,,,,32,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0 +D,DREGION,,2,"2023/12/14 08:50:00",1,NSW1,0,88.89,0,88.89,0,0,8237.69,-12,7643.48,75,-669.21,0,,,85,,,,,,,,114,,,,,,,,73,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,41.85135,13967.08865,157,8274.76855,8366.17,,25,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0 +D,DREGION,,2,"2023/12/14 08:50:00",1,QLD1,0,49.55,0,49.55,0,0,5776.22,-12,7225.75,250,1199.52,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,36,,,,,,,,220.11,,,,,,,,127.57,,,,,,-35.74303,10715.89669,370,6107.02051,6061.65,,90.38,,,,85,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0 +D,DREGION,,2,"2023/12/14 08:50:00",1,SA1,0,0.01885,0,0.01885,0,0,1080.05,-21,1168.97,12,76.92,0,,,31,,,,,,,,31,,,,,,,,28,,,,,,,,62.84,,,,,,,,33,,,,,,,,28,,,,,,14.89502,2411.84593,105,1098.84399,1096.8,,11,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0 +D,DREGION,,2,"2023/12/14 08:50:00",1,TAS1,0,10.07187,0,10.07187,0,0,1037.08,-2,575.08,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.60949,2329.99852,0,1047.69409,1037.08,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.03,0.03,0,0.17,0.17,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 08:50:00",1,VIC1,0,0.02,0,0.02,0,0,4679.75,-27,4649.6,1,-31.15,0,,,76.68,,,,,,,,97.19,,,,,,,,71.46,,,,,,,,110,,,,,,,,72.87,,,,,,,,42,,,,,,13.39509,8431.69309,396,4719.41406,4701.17,,79,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0 +D,DREGION,,2,"2023/12/14 08:55:00",1,NSW1,0,88.88,0,88.88,0,0,8120.51,-17,7613.29,20,-527.22,0,,,99,,,,,,,,134.78,,,,,,,,97,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,0,13979.99868,158,8217.0293,8190.61,,33.98,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:55:00",1,QLD1,0,-2.02,0,-2.02,0,0,5717.68,-14,7112.87,250,1145.18,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,32,,,,,,,,220.11,,,,,,,,124.16,,,,,,-38.59752,10812.80155,370,6061.00391,6000.66,,54.4,,,,75,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:55:00",1,SA1,0,-38.13542,0,-38.13542,0,0,1021.55,-22,1156.88,7,128.33,0,,,18,,,,,,,,18,,,,,,,,17,,,,,,,,68.55,,,,,,,,35,,,,,,,,30,,,,,,0,2380.19199,105,1075.30261,1033.62,,9,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 08:55:00",1,TAS1,0,10.07187,0,10.07187,0,0,1030.67,-3,568.67,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,139.38,,,,,,,,139.38,,,,,,-10.37764,2347.35771,0,1044.04272,1030.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 08:55:00",1,VIC1,0,-41.11,0,-41.11,0,0,4618.35,-22,4449.39,5,-173.96,0,,,73.93,,,,,,,,88.03,,,,,,,,58.98,,,,,,,,111,,,,,,,,73.94,,,,,,,,47,,,,,,0,8463.9788,404,4671.10254,4645.54,,108,,,,35,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 09:00:00",1,NSW1,0,88.88,0,88.88,0,0,8112.3,-26,7681.44,16,-446.85,0,,,94,,,,,,,,137.47,,,,,,,,119.24,,,,,,,,144,,,,,,,,107.03,,,,,,,,105,,,,,,46.44138,14018.92655,157,8154.41016,8179.7,,38.55,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:00:00",1,QLD1,0,1,0,1,0,0,5698.84,-17,7084.46,245,1140.63,0,,,45,,,,,,,,54,,,,,,,,50,,,,,,,,31,,,,,,,,236,,,,,,,,96.58,,,,,,-41.452,10715.00866,370,6033.80811,5976.94,,32.37,,,,75,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:00:00",1,SA1,0,-35.15447,0,-35.15447,0,0,1033.25,-22,1121.55,0,88.3,0,,,19,,,,,,,,59,,,,,,,,17,,,,,,,,44.18,,,,,,,,35,,,,,,,,30,,,,,,16.97727,2342.04143,105,1050.80078,1036.86,,16,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:00:00",1,TAS1,0,-11.84668,0,-11.84668,0,0,1026.03,-3,565.5,0,-460.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,135.62,,,,,,,,135.62,,,,,,-10.07745,2344.66545,0,1039.11157,1026.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.34,0.34,0,0.95,0.95,0,0,0,0,47.98357,47.98357,0 +D,DREGION,,2,"2023/12/14 09:00:00",1,VIC1,0,-37.3,0,-37.3,0,0,4626.46,-22,4418.41,5,-213.05,0,,,79.16,,,,,,,,101.17,,,,,,,,86.17,,,,,,,,122,,,,,,,,55,,,,,,,,65,,,,,,7.82815,8356.77355,413,4658.9668,4651.81,,117,,,,35,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:05:00",1,NSW1,0,85.98,0,85.98,0,0,7965.16,-30,7660.64,14,-318.52,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,144,,,,,,,,129,,,,,,,,126,,,,,,0,14028.03351,157,8065.30029,8032.64,,40,,,,55,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0 +D,DREGION,,2,"2023/12/14 09:05:00",1,QLD1,0,0,0,0,0,0,5701.61,-16,7079.25,245,1132.64,0,,,45,,,,,,,,58.5,,,,,,,,45,,,,,,,,25,,,,,,,,129,,,,,,,,82,,,,,,-15.73506,10774.2798,370,6010.97168,5979.04,,34.6,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0 +D,DREGION,,2,"2023/12/14 09:05:00",1,SA1,0,-40.59485,0,-40.59485,0,0,987.17,-22,1063.31,0,76.14,0,,,17,,,,,,,,57,,,,,,,,15,,,,,,,,60.72,,,,,,,,77.08,,,,,,,,39.03,,,,,,0,2308.77328,105,1023.88269,992.26,,16,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0 +D,DREGION,,2,"2023/12/14 09:05:00",1,TAS1,0,10.07187,0,10.07187,0,0,1032.52,-2,570.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.44,,,,,,-8.71989,2354.98793,0,1043.23877,1032.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 09:05:00",1,VIC1,0,-43.07,0,-43.07,0,0,4598.34,-17,4306.92,19.22,-310.64,0,,,74.72,,,,,,,,96.58,,,,,,,,89.1,,,,,,,,130,,,,,,,,99,,,,,,,,60,,,,,,0,8399.5378,415,4644.32813,4644.16,,114.78,,,,61,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0 +D,DREGION,,2,"2023/12/14 09:10:00",1,NSW1,0,88.88,0,88.88,0,0,8064.44,-33,7668.3,0,-396.14,0,,,99,,,,,,,,138,,,,,,,,121.15,,,,,,,,145,,,,,,,,130,,,,,,,,120.24,,,,,,46.50039,14048.13469,147,8101.1001,8114.63,,46,,,,60,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:10:00",1,QLD1,0,34.55,0,34.55,0,0,5735.81,-11,7095.23,245,1114.42,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,157,,,,,,,,126,,,,,,0,10689.4382,370,6011.85547,6013.04,,32.22,,,,36,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:10:00",1,SA1,0,-38.28935,0,-38.28935,0,0,982.46,-21,1104.29,0,121.83,0,,,19,,,,,,,,59,,,,,,,,17,,,,,,,,81.1,,,,,,,,74.84,,,,,,,,32,,,,,,14.0345,2325.75555,105,994.36755,985.19,,17.51,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:10:00",1,TAS1,0,10.57593,0,10.57593,0,0,1040.87,-2,578.87,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,137.08,,,,,,-7.64264,2348.85639,0,1050.51501,1040.87,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:10:00",1,VIC1,0,-40.83,0,-40.83,0,0,4472.08,-17,4215.8,18.35,-274.63,0,,,69.15,,,,,,,,103.88,,,,,,,,86.66,,,,,,,,112,,,,,,,,75,,,,,,,,37,,,,,,0,8439.17019,418,4526.55908,4508.76,,109.65,,,,74,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 09:15:00",1,NSW1,0,88.88,0,88.88,0,0,7886.83,-35,7614.81,0,-272.01,0,,,121,,,,,,,,160,,,,,,,,139,,,,,,,,144,,,,,,,,129,,,,,,,,69,,,,,,0,14036.28448,147,7979.62354,7940.07,,29,,,,65,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 09:15:00",1,QLD1,0,1,0,1,0,0,5771.92,-9,7128.56,245,1111.64,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,22,,,,,,,,146.54,,,,,,,,126,,,,,,-2.38095,10779.40616,370,6059.26318,6049.15,,68,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 09:15:00",1,SA1,0,-42.4336,0,-42.4336,0,0,948.43,-20,1207.53,44,215.1,0,,,32,,,,,,,,86.14,,,,,,,,30,,,,,,,,104.71,,,,,,,,40,,,,,,,,30,,,,,,0,2387.43812,105,980.27722,996.69,,28,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 09:15:00",1,TAS1,0,10.11,0,10.11,0,0,1045.15,-1,583.15,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,80,,,,,,,,153,,,,,,,,136.93,,,,,,-2.99132,2362.34779,0,1049.14307,1045.15,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.32616,0.32616,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:15:00",1,VIC1,0,-46.46,0,-46.46,0,0,4424.41,-22,4118.66,172,-477.75,0,,,34.49,,,,,,,,55.18,,,,,,,,55.18,,,,,,,,112,,,,,,,,118,,,,,,,,104,,,,,,-20.30363,8477.97061,421,4507.79102,4621.65,,80.38,,,,105,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 09:20:00",1,NSW1,0,89.03,0,89.03,0,0,7980.75,-36,7723.43,0,-257.33,0,,,121,,,,,,,,160,,,,,,,,149,,,,,,,,144,,,,,,,,129,,,,,,,,95.93,,,,,,47.90023,13998.48547,147,8021.80566,8040.47,,27.38,,,,79,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0 +D,DREGION,,2,"2023/12/14 09:20:00",1,QLD1,0,34.54991,0,34.54991,0,0,5662.38,-6,7056.78,245,1149.4,0,,,45,,,,,,,,66,,,,,,,,45,,,,,,,,17,,,,,,,,99,,,,,,,,99,,,,,,-1.90461,10634.90406,370,5944.54346,5942.54,,74,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0 +D,DREGION,,2,"2023/12/14 09:20:00",1,SA1,0,-47.25296,0,-47.25296,0,0,953.97,-21,1155.1,73,128.14,0,,,17,,,,,,,,57,,,,,,,,15.24,,,,,,,,60.75,,,,,,,,69.15,,,,,,,,35,,,,,,15.89606,2383.25595,105,1000.05042,1029.55,,31,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0 +D,DREGION,,2,"2023/12/14 09:20:00",1,TAS1,0,10.11,0,10.11,0,0,1038.43,-1,576.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,91.2,,,,,,,,153,,,,,,,,136.93,,,,,,-4.13115,2366.72911,0,1043.55933,1038.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:20:00",1,VIC1,0,-50.39,0,-50.39,0,0,4382.62,-22,4145.49,200,-437.13,0,,,48.31,,,,,,,,61.51,,,,,,,,59.14,,,,,,,,137,,,,,,,,123,,,,,,,,68,,,,,,-19.27613,8769.55924,421,4549.23779,4606.24,,73,,,,91,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0 +D,DREGION,,2,"2023/12/14 09:25:00",1,NSW1,0,88.88,0,88.88,0,0,8068.19,-27,7686.68,0,-381.51,0,,,121,,,,,,,,160,,,,,,,,139,,,,,,,,144,,,,,,,,112.81,,,,,,,,44,,,,,,48.60016,13964.51884,147,8113.01514,8117.88,,30,,,,83,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:25:00",1,QLD1,0,28.85,0,28.85,0,0,5743.33,-8,7108.24,245,1119.91,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,13,,,,,,,,118,,,,,,,,107.38,,,,,,10.3399,10875.11112,370,6020.5332,6019.71,,43.25,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:25:00",1,SA1,0,-37.66603,0,-37.66603,0,0,943.72,-19,1169.36,45,180.64,0,,,28,,,,,,,,68,,,,,,,,26,,,,,,,,38,,,,,,,,39,,,,,,,,33,,,,,,18.28152,2359.42114,105,1012.1095,991.73,,48,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:25:00",1,TAS1,0,10.1,0,10.1,0,0,1037.53,-2,575.53,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,63,,,,,,,,137.08,,,,,,,,137.08,,,,,,-4.95611,2346.67113,0,1044.48169,1037.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:25:00",1,VIC1,0,-40.6,0,-40.6,0,0,4472.37,-21,4363.71,244,-352.67,0,,,28.84,,,,,,,,61.46,,,,,,,,56.13,,,,,,,,132.27,,,,,,,,105,,,,,,,,99,,,,,,0,8782.98167,420,4669.17969,4736.66,,84.13,,,,87,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:30:00",1,NSW1,0,89.03,0,89.03,0,0,8114.79,-15,7798.73,6,-322.06,0,,,99,,,,,,,,138,,,,,,,,122.01,,,,,,,,127,,,,,,,,115,,,,,,,,71,,,,,,49.30008,14051.85281,154,8127.53418,8167.4,,27,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0 +D,DREGION,,2,"2023/12/14 09:30:00",1,QLD1,0,5E-05,0,5E-05,0,0,5790.84,-1,7111.97,245,1076.12,0,,,45,,,,,,,,46.25,,,,,,,,45,,,,,,,,14,,,,,,,,49.88,,,,,,,,65.67,,,,,,-4.75644,10925.423,370,6068.51611,6065.15,,44,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0 +D,DREGION,,2,"2023/12/14 09:30:00",1,SA1,0,-39.1349,0,-39.1349,0,0,941.17,-18,1149.06,69,138.89,0,,,38,,,,,,,,78,,,,,,,,37,,,,,,,,61,,,,,,,,74,,,,,,,,38,,,,,,20.17505,2331.00062,362,988.06329,1013.1,,31.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0 +D,DREGION,,2,"2023/12/14 09:30:00",1,TAS1,0,10.1,0,10.1,0,0,1026.24,-2,564.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-1.41479,2337.18027,0,1029.65735,1026.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:30:00",1,VIC1,0,-41.96,0,-41.96,0,0,4403.9,-16,4265.04,193.07,-331.93,0,,,44.14,,,,,,,,74.8,,,,,,,,64.8,,,,,,,,141.96,,,,,,,,126,,,,,,,,96,,,,,,-14.64577,8883.92531,420,4672.47607,4617.14,,103,,,,110,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0 +D,DREGION,,2,"2023/12/14 09:35:00",1,NSW1,0,90.67016,0,90.67016,0,0,8164.99,-4,7964.44,5,-205.55,0,,,120.12,,,,,,,,160,,,,,,,,143.51,,,,,,,,144,,,,,,,,129,,,,,,,,71,,,,,,50,14077.33318,153,8164.38623,8216.2,,27,,,,35.03,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:35:00",1,QLD1,0,7.06,0,7.06,0,0,5750.38,-2,7050.38,249.29,1050.71,0,,,35.71,,,,,,,,45.48,,,,,,,,35.71,,,,,,,,14,,,,,,,,62,,,,,,,,72.14,,,,,,-19.85278,10834.26239,365,6041.72021,6027.43,,30,,,,9.29,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:35:00",1,SA1,0,-41.97594,0,-41.97594,0,0,901.97,-17,1204.4,63,239.43,0,,,49,,,,,,,,89,,,,,,,,48,,,,,,,,59,,,,,,,,91.16,,,,,,,,67,,,,,,12.93966,2420.48109,362,975.91431,969.97,,26,,,,8,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:35:00",1,TAS1,0,10.1,0,10.1,0,0,1012.11,-2,550.11,0,-462,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,84.5,,,,,,,,153,,,,,,,,136.93,,,,,,-3.10488,2337.49811,0,1017.21716,1012.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,7.12,7.12,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 09:35:00",1,VIC1,0,-46.46,0,-46.46,0,0,4405.18,-17,4113.69,225,-516.49,0,,,20,,,,,,,,40,,,,,,,,40,,,,,,,,127,,,,,,,,114,,,,,,,,65,,,,,,-23.75382,8858.56043,420,4642.27881,4657.32,,122.38,,,,117.67,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:40:00",1,NSW1,0,89.03,0,89.03,0,0,8335.05,10,7929.7,0,-405.36,0,,,98,,,,,,,,138,,,,,,,,117,,,,,,,,144,,,,,,,,115,,,,,,,,44,,,,,,50,14078.55313,147,8330.06543,8376.95,,57,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:40:00",1,QLD1,0,6.61,0,6.61,0,0,5750.04,-4,7060.52,243.45,1067.03,0,,,41.55,,,,,,,,41.55,,,,,,,,41.55,,,,,,,,16,,,,,,,,85,,,,,,,,129,,,,,,0,10839.40274,365,6032.2666,6021.65,,48,,,,3.45,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:40:00",1,SA1,0,-33.16455,0,-33.16455,0,0,888.65,-15,1234.15,45,300.5,0,,,39,,,,,,,,68.69,,,,,,,,39,,,,,,,,62,,,,,,,,82,,,,,,,,75,,,,,,2.06896,2426.00167,362,959.80103,940.11,,61,,,,8,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:40:00",1,TAS1,0,-33.11145,0,-33.11145,0,0,1014.11,-2,562.5,0,-451.61,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,52.97,,,,,,,,126.1,,,,,,,,126.1,,,,,,-6.81676,2350.59662,0,1022.927,1014.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.86,0.86,0,0,0,0,46.71145,46.71145,0 +D,DREGION,,2,"2023/12/14 09:40:00",1,VIC1,0,-37.3,0,-37.3,0,0,4402.4,-16,4219.95,228,-410.44,0,,,48.38,,,,,,,,87.41,,,,,,,,68.35,,,,,,,,147,,,,,,,,133.59,,,,,,,,42.65,,,,,,0,8833.96919,422,4611.31543,4653.99,,28.99,,,,103.55,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 09:45:00",1,NSW1,0,88.88,0,88.88,0,0,8359.34,19,7836.1,2,-525.24,0,,,120,,,,,,,,133,,,,,,,,143.01,,,,,,,,142,,,,,,,,127,,,,,,,,44,,,,,,50,14123.25275,149,8342.63965,8404.54,,30.42,,,,73,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 09:45:00",1,QLD1,0,1,0,1,0,0,5610.08,-8,6999.9,290,1099.83,0,,,10,,,,,,,,36,,,,,,,,10,,,,,,,,17,,,,,,,,43,,,,,,,,78.65,,,,,,2.61529,10789.89706,365,5892.8623,5929.91,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 09:45:00",1,SA1,0,-36.09788,0,-36.09788,0,0,879.64,-12,1214.66,42,293.02,0,,,51,,,,,,,,78,,,,,,,,50,,,,,,,,63,,,,,,,,82,,,,,,,,74,,,,,,0.65038,2507.84472,362,942.30298,928.42,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 09:45:00",1,TAS1,0,-39.51903,0,-39.51903,0,0,1010.9,-2,567.86,0,-443.04,0,,,0,,,,,,,,11.79,,,,,,,,0,,,,,,,,17.98,,,,,,,,117.97,,,,,,,,117.97,,,,,,-11.59019,2355.95709,0,1024.48694,1010.9,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.86,0.86,0,0,0,0,53.11903,53.11903,0 +D,DREGION,,2,"2023/12/14 09:45:00",1,VIC1,0,-40.6,0,-40.6,0,0,4393.5,-15,4177.83,107,-322.67,0,,,44.19,,,,,,,,76.04,,,,,,,,62.75,,,,,,,,138.37,,,,,,,,128.01,,,,,,,,96,,,,,,-5.19753,8778.50097,422,4644.59863,4522.59,,110,,,,43,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 09:50:00",1,NSW1,0,85.98,0,85.98,0,0,8358.15,24,7813.33,4,-548.81,0,,,93,,,,,,,,158.49,,,,,,,,122,,,,,,,,125,,,,,,,,112.46,,,,,,,,44,,,,,,50,14216.99742,152,8335.98242,8404.44,,30,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 09:50:00",1,QLD1,0,1,0,1,0,0,5645.45,-8,7029.95,290,1094.5,0,,,10,,,,,,,,32,,,,,,,,10,,,,,,,,17,,,,,,,,83,,,,,,,,129,,,,,,14.81993,10840.37892,365,5948.28223,5965.28,,15,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 09:50:00",1,SA1,0,-35.99,0,-35.99,0,0,873.77,-10,1221.8,29,319.03,0,,,77,,,,,,,,70,,,,,,,,62.53,,,,,,,,61,,,,,,,,77,,,,,,,,71,,,,,,0.73882,2493.29121,362,929.32178,910.96,,28,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 09:50:00",1,TAS1,0,-36.0546,0,-36.0546,0,0,1020.04,-2,566.72,0,-453.32,0,,,0,,,,,,,,11.79,,,,,,,,13.29,,,,,,,,27.96,,,,,,,,127.96,,,,,,,,127.96,,,,,,-13.08641,2354.82123,0,1035.12903,1020.04,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,1,1,0,0,0,0,49.6546,49.6546,0 +D,DREGION,,2,"2023/12/14 09:50:00",1,VIC1,0,-40.91128,0,-40.91128,0,0,4371.48,-13,4147.63,82,-305.85,0,,,50.47,,,,,,,,67.55,,,,,,,,57.55,,,,,,,,145.1,,,,,,,,95,,,,,,,,45.28,,,,,,9.56933,8739.50641,425,4545.73047,4478.71,,123.7,,,,48,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 09:55:00",1,NSW1,0,85.98,0,85.98,0,0,8347.36,24,7775.27,13,-585.09,0,,,120,,,,,,,,159,,,,,,,,137.7,,,,,,,,128.58,,,,,,,,102.78,,,,,,,,44,,,,,,50,14294.80103,153,8320.80078,8401.54,,35,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 09:55:00",1,QLD1,0,7.24,0,7.24,0,0,5671.3,-2,7015.39,247.55,1096.54,0,,,37.45,,,,,,,,37.45,,,,,,,,37.45,,,,,,,,14,,,,,,,,85,,,,,,,,48.44,,,,,,0,10830.0933,365,5981.29395,5948.06,,63.38,,,,7.55,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 09:55:00",1,SA1,0,-18.13308,0,-18.13308,0,0,861.91,-8,1233.74,40,331.83,0,,,51,,,,,,,,106.96,,,,,,,,50,,,,,,,,61,,,,,,,,75,,,,,,,,73,,,,,,1.56066,2478.18705,362,902.974,911.02,,51,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 09:55:00",1,TAS1,0,11.08,0,11.08,0,0,1064.4,-1,602.4,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,38.57,,,,,,,,138.57,,,,,,,,138.57,,,,,,-13.56671,2351.15622,0,1078.96191,1064.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.14,0.14,0,0.39,0.39,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 09:55:00",1,VIC1,0,-20.72198,0,-20.72198,0,0,4400.04,-11,4290.58,165,-274.46,0,,,25.75,,,,,,,,40,,,,,,,,40,,,,,,,,136,,,,,,,,96,,,,,,,,96,,,,,,24.13753,8692.20189,425,4488.52783,4592.36,,56,,,,107.45,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 10:00:00",1,NSW1,0,54.95,0,54.95,0,0,8302.2,23,7554.16,11,-759.04,0,,,120,,,,,,,,159,,,,,,,,149,,,,,,,,129.01,,,,,,,,119.79,,,,,,,,44,,,,,,0,14337.34825,150,8322.86133,8349.82,,35,,,,71.48,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 10:00:00",1,QLD1,0,15.13,0,15.13,0,0,5750.32,4,7025.4,257.52,1017.56,0,,,27.48,,,,,,,,27.48,,,,,,,,27.48,,,,,,,,21,,,,,,,,39,,,,,,,,32.53,,,,,,0,10840.32032,365,6017.42529,6033.11,,63,,,,43.52,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 10:00:00",1,SA1,0,0.01741,0,0.01741,0,0,858.88,-7,1236.56,26,351.68,0,,,44.06,,,,,,,,96,,,,,,,,37.46,,,,,,,,63,,,,,,,,83,,,,,,,,76,,,,,,0,2525.78677,362,916.61975,893.7,,68,,,,4,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 10:00:00",1,TAS1,0,6.27156,0,6.27156,0,0,1015.64,-1,561.71,0,-453.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,28.87,,,,,,,,128.86,,,,,,,,128.86,,,,,,-13.32706,2350.80798,0,1029.9646,1015.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,7.32844,7.32844,0 +D,DREGION,,2,"2023/12/14 10:00:00",1,VIC1,0,0.02,0,0.02,0,0,4353.45,-11,4350.03,54,-57.42,0,,,42.08,,,,,,,,59.91,,,,,,,,52.08,,,,,,,,136,,,,,,,,126,,,,,,,,96,,,,,,35.42669,8718.8461,425,4467.70215,4435.58,,31.31,,,,51,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 10:05:00",1,NSW1,0,54.95,0,54.95,0,0,8234.34,22,7262.37,10,-981.96,0,,,93,,,,,,,,162,,,,,,,,132,,,,,,,,142,,,,,,,,132,,,,,,,,44,,,,,,0,14554.04739,149,8259.74023,8288.83,,15,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 10:05:00",1,QLD1,0,34.55,0,34.55,0,0,5783.76,11,7086.97,240,1063.21,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,17.85,,,,,,,,37,,,,,,,,43.15,,,,,,0,11137.60854,365,6054.34766,6051.22,,15,,,,26,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 10:05:00",1,SA1,0,4.43056,0,4.43056,0,0,816.27,-8,1227,0,410.73,0,,,61.24,,,,,,,,62.58,,,,,,,,74,,,,,,,,59,,,,,,,,79,,,,,,,,73,,,,,,0,2587.39985,362,865.41681,825.92,,20,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 10:05:00",1,TAS1,0,11.05967,0,11.05967,0,0,1021.73,0,565.07,0,-456.67,0,,,0,,,,,,,,8.79,,,,,,,,5.57,,,,,,,,31.75,,,,,,,,131.75,,,,,,,,131.75,,,,,,-12.98756,2340.923,0,1034.72168,1021.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,1.84,1.84,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:05:00",1,VIC1,0,5.14495,0,5.14495,0,0,4238.33,-14,4326.91,7,81.58,0,,,64.33,,,,,,,,94.33,,,,,,,,94.33,,,,,,,,105,,,,,,,,94.98,,,,,,,,65,,,,,,0,8701.91251,428,4343.5293,4280.62,,150.05,,,,89,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 10:10:00",1,NSW1,0,54.95003,0,54.95003,0,0,8268.52,13,7312.68,12,-967.84,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,143,,,,,,,,115.22,,,,,,,,43,,,,,,26.70763,14625.79992,152,8276.58594,8321.04,,55,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:10:00",1,QLD1,0,46.81573,0,46.81573,0,0,5887.16,18,7160.5,240,1033.34,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,21,,,,,,,,124,,,,,,,,123,,,,,,12.79219,11130.33931,365,6119.13623,6152.13,,23,,,,6,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:10:00",1,SA1,0,7.62506,0,7.62506,0,0,838.51,-7,1236.69,0,398.18,0,,,52,,,,,,,,95.64,,,,,,,,83.8,,,,,,,,64,,,,,,,,84,,,,,,,,76,,,,,,9.60151,2637.96855,362,845.41089,853,,21,,,,9,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:10:00",1,TAS1,0,11.05967,0,11.05967,0,0,1029.66,0,579.4,0,-450.26,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,50.84,,,,,,,,125.05,,,,,,,,125.05,,,,,,-9.77235,2350.09866,0,1039.43201,1029.66,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:10:00",1,VIC1,0,9,0,9,0,0,4269.24,-14,4380.77,0,111.53,0,,,68.87,,,,,,,,90.66,,,,,,,,90.66,,,,,,,,147,,,,,,,,96,,,,,,,,32.12,,,,,,37.43589,8700.38029,425,4286.07959,4314.2,,94.64,,,,95,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:15:00",1,NSW1,0,70.8189,0,70.8189,0,0,8296.02,14,7428.06,13,-880.96,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,125,,,,,,,,71,,,,,,,,43,,,,,,30.58969,14640.40056,153,8291.75781,8339.37,,57,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:15:00",1,QLD1,0,61.73,0,61.73,0,0,6079.77,27,7249.77,240,930,0,,,10,,,,,,,,22,,,,,,,,10,,,,,,,,41,,,,,,,,115.73,,,,,,,,30,,,,,,24.02,11124.26721,365,6286.88965,6338.46,,23,,,,9,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:15:00",1,SA1,0,7.50122,0,7.50122,0,0,834.95,-5,1257.67,0,422.73,0,,,53,,,,,,,,82.5,,,,,,,,87.27,,,,,,,,63,,,,,,,,77,,,,,,,,75,,,,,,4.32276,2617.04112,362,849.63306,846.56,,21,,,,5,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:15:00",1,TAS1,0,11.05967,0,11.05967,0,0,1015.82,-1,575.91,0,-439.92,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,14.56,,,,,,,,114.55,,,,,,,,114.55,,,,,,-11.4909,2354.67047,0,1028.31409,1015.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:15:00",1,VIC1,0,8.80572,0,8.80572,0,0,4272.23,-9,4344.46,5,67.22,0,,,68.18,,,,,,,,90.96,,,,,,,,80.96,,,,,,,,113.44,,,,,,,,96,,,,,,,,96,,,,,,28.91516,8712.45599,429,4296.80908,4315.65,,82.3,,,,96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:20:00",1,NSW1,0,54.95,0,54.95,0,0,8205.4,11,7348.88,9,-865.52,0,,,100.65,,,,,,,,138,,,,,,,,144,,,,,,,,99.54,,,,,,,,71,,,,,,,,43,,,,,,0,14610.02815,148,8245.77148,8247.98,,25,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:20:00",1,QLD1,0,10.3,0,10.3,0,0,5955.56,28,7176.94,263.72,957.66,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,117.45,,,,,,,,123,,,,,,0,11181.35251,365,6194.05859,6240.56,,27.61,,,,41.72,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:20:00",1,SA1,0,4.36523,0,4.36523,0,0,846.04,-4,1224.62,0,378.58,0,,,47,,,,,,,,61.96,,,,,,,,47,,,,,,,,58,,,,,,,,51,,,,,,,,71.56,,,,,,0,2604.23981,362,865.15063,852.92,,51,,,,4.28,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:20:00",1,TAS1,0,11.05967,0,11.05967,0,0,1028.97,0,579.35,0,-449.62,0,,,0,,,,,,,,4,,,,,,,,0,,,,,,,,24.56,,,,,,,,124.56,,,,,,,,124.56,,,,,,-8.29084,2340.90212,0,1037.26465,1028.97,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:20:00",1,VIC1,0,4.95982,0,4.95982,0,0,4218.72,-9,4287.21,0,68.49,0,,,69,,,,,,,,120.59,,,,,,,,110.55,,,,,,,,65,,,,,,,,65,,,,,,,,0,,,,,,0,8685.82351,428,4266.59424,4246.58,,89.39,,,,104,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:25:00",1,NSW1,0,58,0,58,0,0,8234.27,8,7358.48,8,-883.78,0,,,116.77,,,,,,,,133,,,,,,,,149,,,,,,,,126,,,,,,,,81.99,,,,,,,,43,,,,,,29.71376,14666.77789,147,8232.15527,8274.49,,30,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:25:00",1,QLD1,0,34.55,0,34.55,0,0,6061.65,27,7237.4,240,935.75,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,133,,,,,,,,54.4,,,,,,15.56478,11145.16186,365,6290.84863,6321.39,,23,,,,21,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:25:00",1,SA1,0,7.58254,0,7.58254,0,0,831.99,-4,1246.38,0,414.39,0,,,60,,,,,,,,100.09,,,,,,,,59.96,,,,,,,,62,,,,,,,,76,,,,,,,,74,,,,,,6.00149,2623.48441,362,838.67487,845.52,,21,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:25:00",1,TAS1,0,11.05967,0,11.05967,0,0,1014.36,0,597.74,0,-416.62,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,3,,,,,,,,91.26,,,,,,,,91.26,,,,,,-10.22372,2349.45359,0,1024.58008,1014.36,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.26,0.26,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:25:00",1,VIC1,0,8.95035,0,8.95035,0,0,4299.85,-4,4356.17,0,56.32,0,,,40,,,,,,,,86.7,,,,,,,,86.7,,,,,,,,106.23,,,,,,,,96,,,,,,,,96,,,,,,9.51187,8712.72211,428,4324.36963,4340.41,,86,,,,99,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 10:30:00",1,NSW1,0,58,0,58,0,0,8258.05,9,7388.53,8,-877.52,0,,,83,,,,,,,,133,,,,,,,,122,,,,,,,,85,,,,,,,,72,,,,,,,,44,,,,,,0,14638.89061,147,8293.83496,8297.65,,57,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:30:00",1,QLD1,0,34.55,0,34.55,0,0,6015.26,27,7183.74,240,928.49,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,60.54,,,,,,,,69.83,,,,,,,,18.38,,,,,,0,11159.28407,365,6250.854,6274.62,,23,,,,32,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:30:00",1,SA1,0,-30,0,-30,0,0,817.09,-4,1276.82,0,459.73,0,,,59,,,,,,,,71.02,,,,,,,,57.29,,,,,,,,55,,,,,,,,76,,,,,,,,74,,,,,,-0.36145,2681.73686,362,836.93591,833.84,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:30:00",1,TAS1,0,-17.40103,0,-17.40103,0,0,1006.46,0,562.41,0,-444.05,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,19.29,,,,,,,,119.28,,,,,,,,119.28,,,,,,-11.53257,2351.51124,0,1017.99597,1006.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,31.00103,31.00103,0 +D,DREGION,,2,"2023/12/14 10:30:00",1,VIC1,0,-20.54722,0,-20.54722,0,0,4204.77,-5,4255.22,0,50.45,0,,,76.28,,,,,,,,117.55,,,,,,,,117.55,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,0,8777.68543,428,4254.70703,4254.14,,76.43,,,,118,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:35:00",1,NSW1,0,58,0,58,0,0,8310.42,14,7539.97,5,-775.46,0,,,71.32,,,,,,,,133,,,,,,,,121.73,,,,,,,,91.57,,,,,,,,44,,,,,,,,43,,,,,,0,14741.7473,148,8343.44434,8338.04,,30,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 10:35:00",1,QLD1,0,-2.02,0,-2.02,0,0,5964.51,20,7068.44,292,811.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,102.19,,,,,,,,10.66,,,,,,-6.43846,11237.586,365,6218.21289,6270.36,,61.34,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 10:35:00",1,SA1,0,-28.90575,0,-28.90575,0,0,806.99,-4,1254,0,447.01,0,,,56,,,,,,,,58,,,,,,,,54,,,,,,,,56,,,,,,,,74,,,,,,,,72,,,,,,-0.04973,2651.70174,362,827.04529,820.47,,40,,,,11,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 10:35:00",1,TAS1,0,-28.10728,0,-28.10728,0,0,1017.52,0,567.56,0,-449.96,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.9,,,,,,,,124.9,,,,,,,,124.9,,,,,,-11.9855,2356.65861,0,1029.5083,1017.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.14,0.14,0,0.3,0.3,0,0,0,0,41.70728,41.70728,0 +D,DREGION,,2,"2023/12/14 10:35:00",1,VIC1,0,-34.3,0,-34.3,0,0,4113.64,-11,4173.2,0,59.55,0,,,94,,,,,,,,137.93,,,,,,,,134,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-1.53648,8792.16075,428,4174.5498,4156.76,,62,,,,79,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 10:40:00",1,NSW1,0,58,0,58,0,0,8348.34,17,7598.4,4,-753.93,0,,,113,,,,,,,,153,,,,,,,,143,,,,,,,,83,,,,,,,,44,,,,,,,,43,,,,,,46.36521,14843.02452,147,8315.48145,8373.47,,30,,,,37.2,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:40:00",1,QLD1,0,-10,0,-10,0,0,5899.94,10,6977.96,290,788.02,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,124,,,,,,,,32.38,,,,,,-22.69943,11191.44678,365,6215.91455,6202.89,,15,,,,81,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:40:00",1,SA1,0,-30,0,-30,0,0,796.57,-5,1265.75,11,458.18,0,,,61,,,,,,,,76.49,,,,,,,,62.69,,,,,,,,49,,,,,,,,74,,,,,,,,72,,,,,,6.93963,2640.29807,362,807.49219,824.38,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:40:00",1,TAS1,0,11.05967,0,11.05967,0,0,1039.26,1,577.26,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,37.09,,,,,,,,137.08,,,,,,,,137.08,,,,,,-14.26037,2359.13489,0,1052.52441,1039.26,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:40:00",1,VIC1,0,-34.3,0,-34.3,0,0,4097.91,-11,4174.43,5,71.52,0,,,40.06,,,,,,,,87.44,,,,,,,,87.44,,,,,,,,64,,,,,,,,73,,,,,,,,71,,,,,,5.41368,8794.58376,428,4145.77197,4153.8,,129.38,,,,51.8,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:45:00",1,NSW1,0,58,0,58,0,0,8243.07,13,7505.53,22,-759.54,0,,,86,,,,,,,,126,,,,,,,,116,,,,,,,,84,,,,,,,,41.22,,,,,,,,44,,,,,,0,14677.25597,147,8264.80566,8287.61,,38,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:45:00",1,QLD1,0,-20.5,0,-20.5,0,0,5786.84,1,6872.73,290,795.89,0,,,10,,,,,,,,26,,,,,,,,10,,,,,,,,64,,,,,,,,0,,,,,,,,1.22,,,,,,-33.77897,11228.65239,365,6128.3667,6090.65,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:45:00",1,SA1,0,-35.95,0,-35.95,0,0,790.46,-5,1238.12,0,447.65,0,,,61,,,,,,,,89.99,,,,,,,,93.19,,,,,,,,53,,,,,,,,72,,,,,,,,70,,,,,,0,2635.08678,362,821.15411,807.95,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:45:00",1,TAS1,0,11.05967,0,11.05967,0,0,1052.12,1,590.12,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-12.0146,2363.16464,0,1063.13953,1052.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:45:00",1,VIC1,0,-34.3,0,-34.3,0,0,4098.4,-10,4187.44,5,84.04,0,,,71.7,,,,,,,,94.73,,,,,,,,94.73,,,,,,,,94,,,,,,,,103,,,,,,,,101,,,,,,0,8811.65586,428,4163.44824,4155.6,,121.38,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:50:00",1,NSW1,0,58,0,58,0,0,8294.28,10,7592.16,31,-733.12,0,,,86,,,,,,,,126,,,,,,,,116,,,,,,,,84,,,,,,,,45,,,,,,,,44,,,,,,49.0402,14694.2209,152,8274.80371,8345.4,,10,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:50:00",1,QLD1,0,-0.01,0,-0.01,0,0,5887.74,-9,6943.32,290,765.57,0,,,10,,,,,,,,22.89,,,,,,,,10,,,,,,,,4.7,,,,,,,,32.23,,,,,,,,37.23,,,,,,0,11188.6857,365,6183.29395,6190.07,,15,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:50:00",1,SA1,0,-32.13413,0,-32.13413,0,0,834.9,-4,1250.75,0,415.85,0,,,60,,,,,,,,87,,,,,,,,85.39,,,,,,,,50,,,,,,,,70,,,,,,,,68,,,,,,12.9533,2677.67279,362,840.96118,844.75,,39.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:50:00",1,TAS1,0,11.05967,0,11.05967,0,0,1053.62,1,591.62,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-10.57183,2362.17883,0,1063.19287,1053.62,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 10:50:00",1,VIC1,0,-37.3,0,-37.3,0,0,4000.95,-12,4098.42,5,92.47,0,,,67.39,,,,,,,,95.02,,,,,,,,95.02,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,7.72108,8793.65849,428,4060.04321,4042.42,,141,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 10:55:00",1,NSW1,0,88.89,0,88.89,0,0,8398.24,20,7687.53,31,-741.71,0,,,85,,,,,,,,125,,,,,,,,114,,,,,,,,53,,,,,,,,44,,,,,,,,43,,,,,,0,14796.54756,152,8438.23535,8450.1,,10,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:55:00",1,QLD1,0,-20.5,0,-20.5,0,0,5720.51,-16,6785.85,290,775.34,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,25.2,,,,,,,,30.2,,,,,,-17.50129,11131.67482,365,6062.42236,6023.29,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:55:00",1,SA1,0,-34.84617,0,-34.84617,0,0,845.28,-1,1351.12,3,502.84,0,,,55.46,,,,,,,,126.12,,,,,,,,99.72,,,,,,,,38,,,,,,,,75,,,,,,,,73,,,,,,0,2630.20807,362,852.80035,860.32,,32,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 10:55:00",1,TAS1,0,10.04328,0,10.04328,0,0,1056.01,1,594.01,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-8.31816,2361.816,0,1063.33008,1056.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0,0,0,0,0,0,4.55672,4.55672,0 +D,DREGION,,2,"2023/12/14 10:55:00",1,VIC1,0,-41.11,0,-41.11,0,0,3858.97,-20,3876.32,5,12.36,0,,,45.1,,,,,,,,55.1,,,,,,,,55.1,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-8.17209,8835.32484,429,3925.44849,3905.12,,148.38,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:00:00",1,NSW1,0,58,0,58,0,0,8469.36,26,7771.82,5,-702.53,0,,,85,,,,,,,,125,,,,,,,,115,,,,,,,,81,,,,,,,,71,,,,,,,,43,,,,,,45.33145,14818.23401,148,8447.30371,8493.84,,57,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:00:00",1,QLD1,0,-20.5,0,-20.5,0,0,5625.34,-24,6675.97,293,757.63,0,,,10,,,,,,,,22,,,,,,,,10,,,,,,,,62,,,,,,,,103.65,,,,,,,,123,,,,,,-24.59261,11092.42985,365,5969.01758,5930.73,,15,,,,58,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:00:00",1,SA1,0,-32.31068,0,-32.31068,0,0,916.53,3,1287.54,14,357.02,0,,,78.21,,,,,,,,118,,,,,,,,122.27,,,,,,,,51,,,,,,,,12,,,,,,,,56.64,,,,,,17.08718,2495.56239,356,902.70703,940.36,,0,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:00:00",1,TAS1,0,10.04328,0,10.04328,0,0,1062.92,1,600.92,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-5.84624,2373.34088,0,1067.76721,1062.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,4.55672,4.55672,0 +D,DREGION,,2,"2023/12/14 11:00:00",1,VIC1,0,-37.3,0,-37.3,0,0,3884.84,-24,4045.84,34,127,0,,,47.8,,,,,,,,63.57,,,,,,,,57.8,,,,,,,,63,,,,,,,,75,,,,,,,,0,,,,,,-21.66283,8918.26129,428,3960.13501,3954.24,,133.38,,,,52,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:05:00",1,NSW1,0,299.99,0,299.99,0,0,8529.88,26,8631.35,5,96.46,0,,,93,,,,,,,,125.9,,,,,,,,136,,,,,,,,78,,,,,,,,66,,,,,,,,38,,,,,,46.31811,14651.5354,148,8483.70801,8556.35,,40,,,,26.6,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0 +D,DREGION,,2,"2023/12/14 11:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,5627.68,-29,6717.17,301.57,787.92,0,,,0,,,,,,,,15,,,,,,,,15,,,,,,,,64,,,,,,,,30,,,,,,,,43.72,,,,,,-17.14317,11092.81106,365,5964.47119,5942.86,,60.43,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0 +D,DREGION,,2,"2023/12/14 11:05:00",1,SA1,0,-49.70384,0,-49.70384,0,0,916.16,2,1280.56,193,171.4,0,,,93.8,,,,,,,,95,,,,,,,,91,,,,,,,,56,,,,,,,,73,,,,,,,,71,,,,,,19.66968,2686.78214,356,915.01941,1110.56,,60,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0 +D,DREGION,,2,"2023/12/14 11:05:00",1,TAS1,0,10.04328,0,10.04328,0,0,1048.52,1,586.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-7.37174,2362.94467,0,1054.88928,1048.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,3,3,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0 +D,DREGION,,2,"2023/12/14 11:05:00",1,VIC1,0,-52.68,0,-52.68,0,0,3852.2,-19,3594.56,282,-539.63,0,,,40,,,,,,,,98,,,,,,,,69,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,-23.09345,8906.91958,428,3959.22925,4151.87,,44.95,,,,118.4,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0 +D,DREGION,,2,"2023/12/14 11:10:00",1,NSW1,0,120.89,0,120.89,0,0,8587.34,28,8686.07,9,89.72,0,,,113,,,,,,,,133.96,,,,,,,,114.56,,,,,,,,78,,,,,,,,39,,,,,,,,38,,,,,,47.30477,14671.51506,153,8538.74609,8620.9,,40,,,,76,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:10:00",1,QLD1,0,-10,0,-10,0,0,5718.02,-21,6827.25,318,791.23,0,,,0,,,,,,,,18,,,,,,,,18,,,,,,,,6.04,,,,,,,,33.87,,,,,,,,34.87,,,,,,0,11115.25517,365,6040.63818,6049.29,,0,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:10:00",1,SA1,0,-50,0,-50,0,0,913.47,3,1268.48,197,158.02,0,,,66.13,,,,,,,,84,,,,,,,,81,,,,,,,,55,,,,,,,,72,,,,,,,,74,,,,,,6.8957,2788.94375,361,1087.02112,1112.38,,20,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:10:00",1,TAS1,0,10.04328,0,10.04328,0,0,1051.27,1,589.27,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.64,,,,,,,,136.64,,,,,,,,136.64,,,,,,-7.92989,2361.84948,0,1058.19873,1051.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.96,0.96,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0 +D,DREGION,,2,"2023/12/14 11:10:00",1,VIC1,0,-51.38797,0,-51.38797,0,0,3940.75,-17,3556.23,130,-514.52,0,,,50,,,,,,,,98,,,,,,,,98,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,0,8844.85095,428,4172.646,4093.46,,145.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:15:00",1,NSW1,0,137.69,0,137.69,0,0,8701.82,35,8979.47,9,268.66,0,,,113,,,,,,,,141.63,,,,,,,,123.93,,,,,,,,68,,,,,,,,39,,,,,,,,35.43,,,,,,48.29143,14744.52124,153,8636.34863,8740.19,,49,,,,46,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:15:00",1,QLD1,0,-2.02,0,-2.02,0,0,5766.29,-8,6858.38,315,777.09,0,,,0,,,,,,,,22,,,,,,,,17,,,,,,,,64,,,,,,,,1.55,,,,,,,,0,,,,,,-14.76639,11119.59228,365,6103.95898,6093.39,,0,,,,45,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:15:00",1,SA1,0,-51.16156,0,-51.16156,0,0,936.97,3,1287.33,194,156.36,0,,,63.28,,,,,,,,82,,,,,,,,85,,,,,,,,59,,,,,,,,81,,,,,,,,76,,,,,,10.78839,2815.0426,356,1122.40417,1132.46,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:15:00",1,TAS1,0,10.04328,0,10.04328,0,0,1040.49,0,578.49,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.34,,,,,,,,136.34,,,,,,,,136.34,,,,,,-8.65353,2356.58938,0,1049.14722,1040.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0 +D,DREGION,,2,"2023/12/14 11:15:00",1,VIC1,0,-54.25,0,-54.25,0,0,3835.64,-18,3297.5,129,-667.14,0,,,54.94,,,,,,,,89.94,,,,,,,,85.94,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-27.63734,8913.42773,428,4055.10376,3994.64,,136.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:20:00",1,NSW1,0,137.69,0,137.69,0,0,8745.55,37,9060.81,5,310.27,0,,,90,,,,,,,,109,,,,,,,,106.25,,,,,,,,60.37,,,,,,,,45,,,,,,,,44,,,,,,47.6133,15057.00435,148,8688.94336,8778.91,,62,,,,60.77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 11:20:00",1,QLD1,0,-9.99998,0,-9.99998,0,0,5777.58,0,6852.23,315,759.66,0,,,27,,,,,,,,27,,,,,,,,17,,,,,,,,64,,,,,,,,51.71,,,,,,,,41.3,,,,,,-6.58144,11146.69502,365,6096.75293,6103.84,,0,,,,34,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 11:20:00",1,SA1,0,-52.7224,0,-52.7224,0,0,911.15,1,1300.17,183,206.02,0,,,67.92,,,,,,,,98,,,,,,,,94,,,,,,,,46,,,,,,,,79,,,,,,,,71,,,,,,0.39536,2827.22118,361,1105.11877,1096.44,,34.38,,,,27.23,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 11:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1024.2,-1,562.2,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-8.09596,2357.6446,0,1033.29236,1024.2,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,0.86,0.86,0,0,0,0,54.61,54.61,0 +D,DREGION,,2,"2023/12/14 11:20:00",1,VIC1,0,-56.79,0,-56.79,0,0,3820.29,-16,3158.94,78.52,-739.88,0,,,40,,,,,,,,95.25,,,,,,,,88,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,-16.12591,9115.61474,428,3999.2395,3930.97,,109,,,,48,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 11:25:00",1,NSW1,0,137.69,0,137.69,0,0,8794.06,38,9121.66,5,322.6,0,,,113,,,,,,,,143.75,,,,,,,,132.15,,,,,,,,55,,,,,,,,43,,,,,,,,42,,,,,,48.72299,15106.82157,148,8739.00684,8825.63,,56,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 11:25:00",1,QLD1,0,-10.4,0,-10.4,0,0,5793.27,7,6844.66,300,751.38,0,,,0,,,,,,,,27,,,,,,,,17,,,,,,,,64,,,,,,,,43.7,,,,,,,,42.15,,,,,,-15.38242,11165.25074,365,6117.00684,6103.97,,32,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 11:25:00",1,SA1,0,-48.92353,0,-48.92353,0,0,895.58,-3,1286.24,199,191.67,0,,,64.35,,,,,,,,91,,,,,,,,88,,,,,,,,43.3,,,,,,,,81,,,,,,,,73,,,,,,1.85973,2821.44081,362,1081.57031,1097.31,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 11:25:00",1,TAS1,0,-38.79281,0,-38.79281,0,0,1021.68,-2,587.06,0,-434.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,9.86,,,,,,,,109.85,,,,,,,,109.85,,,,,,-8.37048,2375.36157,0,1032.05176,1021.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,1,1,0,0,0,0,53.39281,53.39281,0 +D,DREGION,,2,"2023/12/14 11:25:00",1,VIC1,0,-52.69,0,-52.69,0,0,3776.81,-16,3230.67,215,-761.14,0,,,51.39,,,,,,,,71.39,,,,,,,,71.39,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-14.45824,9152.85788,428,3916.70435,4021.69,,40,,,,70,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 11:30:00",1,NSW1,0,137.69,0,137.69,0,0,8872.75,38,9153.77,4,277.01,0,,,113,,,,,,,,109.05,,,,,,,,106,,,,,,,,78,,,,,,,,66,,,,,,,,38,,,,,,48.97839,15082.1553,147,8813.3457,8903.1,,40,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0 +D,DREGION,,2,"2023/12/14 11:30:00",1,QLD1,0,-10,0,-10,0,0,5806.86,16,6886.18,300,779.32,0,,,0,,,,,,,,27,,,,,,,,8.15,,,,,,,,62,,,,,,,,25.57,,,,,,,,63.57,,,,,,-17.34456,11213.89681,365,6114.35449,6118.46,,35,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0 +D,DREGION,,2,"2023/12/14 11:30:00",1,SA1,0,-49.8396,0,-49.8396,0,0,853.26,-8,1258.12,188,216.86,0,,,61.22,,,,,,,,74,,,,,,,,72,,,,,,,,60,,,,,,,,81,,,,,,,,73,,,,,,7.30374,2763.32065,362,1052.17261,1044.77,,77,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0 +D,DREGION,,2,"2023/12/14 11:30:00",1,TAS1,0,-40.01,0,-40.01,0,0,1013.67,-2,563.05,0,-450.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,25.41,,,,,,,,125.41,,,,,,,,125.41,,,,,,-5.77138,2358.63734,0,1021.44092,1013.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.84,1.84,0,0.95,0.95,0,0,0,0,54.61,54.61,0 +D,DREGION,,2,"2023/12/14 11:30:00",1,VIC1,0,-54.25,0,-54.25,0,0,3752.56,-15,3211.2,209,-750.36,0,,,53.38,,,,,,,,121.38,,,,,,,,121.38,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-5.89503,9183.95636,428,3984.14966,3992.32,,42,,,,64,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0 +D,DREGION,,2,"2023/12/14 11:35:00",1,NSW1,0,137.69,0,137.69,0,0,9033.06,46,9144.45,4,107.39,0,,,86,,,,,,,,129.54,,,,,,,,114.89,,,,,,,,78,,,,,,,,39,,,,,,,,38,,,,,,49.2338,15237.07385,147,8956.69141,9050.05,,70,,,,71,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 11:35:00",1,QLD1,0,-10,0,-10,0,0,5873.42,20,6922.53,315,734.11,0,,,11.56,,,,,,,,27,,,,,,,,17,,,,,,,,18.97,,,,,,,,52.96,,,,,,,,32.19,,,,,,-17.077,11267.62437,365,6179.31885,6197.61,,0,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 11:35:00",1,SA1,0,-49.31059,0,-49.31059,0,0,826.12,-12,1215.53,149,240.42,0,,,71,,,,,,,,71,,,,,,,,69,,,,,,,,61,,,,,,,,79,,,,,,,,71,,,,,,12.74776,2775.91991,362,1017.87421,977.9,,20,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 11:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,991.72,-3,532.86,0,-458.86,0,,,0,,,,,,,,7,,,,,,,,7.75,,,,,,,,33.8,,,,,,,,133.8,,,,,,,,133.8,,,,,,-9.36492,2394.7235,0,1004.08484,991.72,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,1,1,0,0,0,0,53.61,53.61,0 +D,DREGION,,2,"2023/12/14 11:35:00",1,VIC1,0,-53.66,0,-53.66,0,0,3592.65,-15,3239.44,226,-579.21,0,,,56.48,,,,,,,,93.48,,,,,,,,94.48,,,,,,,,95,,,,,,,,95,,,,,,,,95,,,,,,-2.1727,9189.72543,428,3830.70459,3837.53,,112.24,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 11:40:00",1,NSW1,0,139.96017,0,139.96017,0,0,9143.45,53,9157.63,4,10.18,0,,,118,,,,,,,,111.79,,,,,,,,130,,,,,,,,51,,,,,,,,39,,,,,,,,38,,,,,,45.77327,15219.86758,147,9056.52441,9153.28,,37,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 11:40:00",1,QLD1,0,-10,0,-10,0,0,5875.07,25,6886.51,315,696.44,0,,,0,,,,,,,,28,,,,,,,,0,,,,,,,,61,,,,,,,,16.1,,,,,,,,17,,,,,,-1.6901,11207.18394,365,6165.04639,6197.7,,0,,,,34,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 11:40:00",1,SA1,0,-52.1953,0,-52.1953,0,0,795.5,-15,1199.02,143,260.51,0,,,54.72,,,,,,,,85,,,,,,,,74.39,,,,,,,,53,,,,,,,,81,,,,,,,,73,,,,,,18.19177,2820.04382,362,946.69238,941.62,,26,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 11:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,994.76,-3,532.76,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-13.97975,2405.89665,0,1011.73737,994.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,53.61,53.61,0 +D,DREGION,,2,"2023/12/14 11:40:00",1,VIC1,0,-56.79,0,-56.79,0,0,3566.57,-22,3179.46,87,-474.11,0,,,57.69,,,,,,,,103.69,,,,,,,,97.69,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-6.48796,9198.22497,428,3806.79736,3668,,142.38,,,,45,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 11:45:00",1,NSW1,0,120.89,0,120.89,0,0,9023.57,51,9066.81,4,39.24,0,,,113,,,,,,,,135,,,,,,,,122,,,,,,,,77,,,,,,,,41.75,,,,,,,,38,,,,,,46.64799,15294.25272,147,8935.4502,9032.43,,34,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0 +D,DREGION,,2,"2023/12/14 11:45:00",1,QLD1,0,-10,0,-10,0,0,5895.79,22,6864.01,300,668.22,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.8,,,,,,,,71,,,,,,,,46.93,,,,,,6.18026,11179.96258,365,6179.24365,6202.73,,36,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0 +D,DREGION,,2,"2023/12/14 11:45:00",1,SA1,0,-49.33602,0,-49.33602,0,0,796.27,-15,1244.33,185,263.06,0,,,43.27,,,,,,,,93.22,,,,,,,,66,,,,,,,,68,,,,,,,,85,,,,,,,,73,,,,,,21.25483,2851.68817,362,938.7475,985.26,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0 +D,DREGION,,2,"2023/12/14 11:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1026.65,-2,591.03,0,-435.62,0,,,0,,,,,,,,31,,,,,,,,21.02,,,,,,,,10.71,,,,,,,,110.7,,,,,,,,110.7,,,,,,-10.90007,2405.68223,0,1039.5498,1026.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,1.75,1.75,0,0,0,0,53.61,53.61,0 +D,DREGION,,2,"2023/12/14 11:45:00",1,VIC1,0,-54.25,0,-54.25,0,0,3584.51,-18,3262.77,183,-504.74,0,,,71.25,,,,,,,,71.25,,,,,,,,97.25,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,-11.3744,9226.47819,425,3771.75928,3781.89,,59,,,,85,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0 +D,DREGION,,2,"2023/12/14 11:50:00",1,NSW1,0,137.69,0,137.69,0,0,9154.43,46,9180.04,9,16.61,0,,,113,,,,,,,,138.13,,,,,,,,105,,,,,,,,77,,,,,,,,65,,,,,,,,38,,,,,,47.52272,15371.75784,153,9072.63086,9163.32,,50,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:50:00",1,QLD1,0,-20.5,0,-20.5,0,0,5937.1,25,6857.49,315,605.39,0,,,0,,,,,,,,27,,,,,,,,0,,,,,,,,61,,,,,,,,23.15,,,,,,,,18.77,,,,,,3.62842,11270.63416,365,6210.11426,6256.74,,0,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:50:00",1,SA1,0,-54.68294,0,-54.68294,0,0,781.81,-16,1110.43,183,145.62,0,,,41.37,,,,,,,,67,,,,,,,,98,,,,,,,,70,,,,,,,,80,,,,,,,,72,,,,,,24.31789,2802.71573,362,957.66907,966.65,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:50:00",1,TAS1,0,-40.01,0,-40.01,0,0,1040.07,-2,578.07,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-0.95257,2383.54293,0,1043.02588,1040.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,53.61,53.61,0 +D,DREGION,,2,"2023/12/14 11:50:00",1,VIC1,0,-58.25,0,-58.25,0,0,3579,-13,3371.11,81,-288.89,0,,,74.3,,,,,,,,94.3,,,,,,,,98.24,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-10.20585,9321.36993,424,3755.39648,3670.37,,135.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 11:55:00",1,NSW1,0,137.69,0,137.69,0,0,9128.08,53,9000.13,8,-135.95,0,,,113,,,,,,,,132,,,,,,,,122,,,,,,,,81,,,,,,,,42,,,,,,,,43,,,,,,48.14204,15350.64528,152,9026.875,9134.39,,35,,,,33,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0 +D,DREGION,,2,"2023/12/14 11:55:00",1,QLD1,0,-10,0,-10,0,0,6028.41,25,6926.72,296.7,601.61,0,,,0,,,,,,,,16.57,,,,,,,,3.76,,,,,,,,61,,,,,,,,71,,,,,,,,63.59,,,,,,-9.41484,11339.79345,365,6328.73486,6329.36,,42.3,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0 +D,DREGION,,2,"2023/12/14 11:55:00",1,SA1,0,-51.89853,0,-51.89853,0,0,765.64,-16,1143.99,195,183.35,0,,,53.18,,,,,,,,91,,,,,,,,90,,,,,,,,72,,,,,,,,81,,,,,,,,73,,,,,,0,2829.24583,362,968.4126,963.57,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0 +D,DREGION,,2,"2023/12/14 11:55:00",1,TAS1,0,-40.01,0,-40.01,0,0,1047.34,-2,600.42,0,-446.92,0,,,0,,,,,,,,19.29,,,,,,,,19.69,,,,,,,,22.16,,,,,,,,122.16,,,,,,,,122.16,,,,,,-1.11076,2407.03718,0,1050.45349,1047.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0,0,0,53.61,53.61,0 +D,DREGION,,2,"2023/12/14 11:55:00",1,VIC1,0,-55.85986,0,-55.85986,0,0,3465.75,-13,3490.55,211,-186.21,0,,,61.63,,,,,,,,71.63,,,,,,,,71.63,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,-10.17262,9301.38657,421,3602.80737,3687.13,,63,,,,92,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0 +D,DREGION,,2,"2023/12/14 12:00:00",1,NSW1,0,137.69,0,137.69,0,0,9211.15,53,9058.54,8,-160.61,0,,,113,,,,,,,,150.17,,,,,,,,125.37,,,,,,,,82,,,,,,,,45,,,,,,,,43,,,,,,40.86409,15434.82705,152,9122.77637,9216.68,,30,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:00:00",1,QLD1,0,-20.5,0,-20.5,0,0,6021.92,25,6913.72,315,576.8,0,,,27,,,,,,,,20,,,,,,,,27,,,,,,,,61,,,,,,,,91,,,,,,,,48.71,,,,,,-0.17684,11372.43045,365,6296.97314,6340.42,,0,,,,59,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:00:00",1,SA1,0,-51.46728,0,-51.46728,0,0,805.09,-11,1110.68,187,118.58,0,,,47.74,,,,,,,,100,,,,,,,,99,,,,,,,,72,,,,,,,,81.65,,,,,,,,73,,,,,,13.09524,2803.04179,362,1000.21423,993.87,,26.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:00:00",1,TAS1,0,11.05967,0,11.05967,0,0,1064.05,-1,602.05,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,37.38,,,,,,,,137.38,,,,,,,,137.38,,,,,,5.22435,2395.30569,0,1059.82837,1064.05,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.54033,2.54033,0 +D,DREGION,,2,"2023/12/14 12:00:00",1,VIC1,0,-54.25,0,-54.25,0,0,3504.72,-15,3516.37,72,-60.35,0,,,40,,,,,,,,55,,,,,,,,50,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,6.32344,9330.45826,421,3673.82593,3586.33,,149,,,,15,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:05:00",1,NSW1,0,137.69,0,137.69,0,0,9292.36,59,9087.42,4,-208.94,0,,,139,,,,,,,,181,,,,,,,,131,,,,,,,,83,,,,,,,,71,,,,,,,,44,,,,,,42.79962,15254.86109,147,9190.22461,9291.71,,40,,,,46.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,6067.45,21,6892.53,315,510.08,0,,,0,,,,,,,,1.36,,,,,,,,0,,,,,,,,61,,,,,,,,91,,,,,,,,39.86,,,,,,-11.0679,11397.878,365,6355.81201,6384.14,,15.38,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:05:00",1,SA1,0,-50.51488,0,-50.51488,0,0,812.76,-6,1146.13,240,93.38,0,,,36,,,,,,,,63,,,,,,,,90.76,,,,,,,,71,,,,,,,,53.73,,,,,,,,72,,,,,,10.38768,2842.94259,362,997.20276,1053.48,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1050.91,0,588.91,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.64,,,,,,,,136.64,,,,,,,,136.64,,,,,,5.51602,2404.48214,0,1045.39722,1050.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,1.84,1.84,0,4.89,4.89,0,0,0,0,54.61,54.61,0 +D,DREGION,,2,"2023/12/14 12:05:00",1,VIC1,0,-52.69,0,-52.69,0,0,3524.21,-5,3658.85,61,73.64,0,,,48.17,,,,,,,,79,,,,,,,,79,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,10.70205,9308.93493,421,3632.13403,3593.6,,130,,,,39.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:10:00",1,NSW1,0,137.69,0,137.69,0,0,9531.43,68,9152.61,4,-382.82,0,,,130.67,,,,,,,,161,,,,,,,,131,,,,,,,,82,,,,,,,,71,,,,,,,,21.55,,,,,,38.32835,15136.12112,147,9426.28809,9533.36,,40,,,,63.07,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:10:00",1,QLD1,0,-20.5,0,-20.5,0,0,6078.33,18,6882.42,315,489.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23.96,,,,,,,,78.22,,,,,,,,131,,,,,,0,11350.40066,365,6362.08008,6394.18,,0,,,,33.93,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:10:00",1,SA1,0,-49.45771,0,-49.45771,0,0,793.09,-4,1207.7,226,188.61,0,,,45,,,,,,,,63.75,,,,,,,,72,,,,,,,,72,,,,,,,,39,,,,,,,,73,,,,,,0,2854.93389,362,1030.01294,1020.74,,33.38,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:10:00",1,TAS1,0,-40.01,0,-40.01,0,0,1019.22,-1,557.22,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-2.19185,2407.17901,0,1022.41589,1019.22,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.83,1.83,0,1.84,1.84,0,0,0,0,54.61,54.61,0 +D,DREGION,,2,"2023/12/14 12:10:00",1,VIC1,0,-52.68,0,-52.68,0,0,3535.76,-1,3737.32,19,182.56,0,,,48,,,,,,,,99.17,,,,,,,,96.03,,,,,,,,66,,,,,,,,66,,,,,,,,0,,,,,,18.07429,9296.53365,421,3582.52539,3569.78,,132,,,,53,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:15:00",1,NSW1,0,137.69,0,137.69,0,0,9598.96,76,9104.76,5,-499.2,0,,,118.53,,,,,,,,135.15,,,,,,,,125.15,,,,,,,,82,,,,,,,,71,,,,,,,,44,,,,,,22.88693,15156.49927,148,9502.66113,9605.27,,45.85,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 12:15:00",1,QLD1,0,-10,0,-10,0,0,6102.03,23,6918.33,315,501.29,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,99,,,,,,,,40.35,,,,,,-30.62959,11340.96987,365,6415.92773,6417.82,,30,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 12:15:00",1,SA1,0,-44.60717,0,-44.60717,0,0,801.68,-2,1227.75,238.78,187.29,0,,,45.22,,,,,,,,61.22,,,,,,,,72.22,,,,,,,,71,,,,,,,,79,,,,,,,,73,,,,,,4.941,2858.63144,362,1029.33887,1042.03,,34.53,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 12:15:00",1,TAS1,0,-40.01,0,-40.01,0,0,1006.36,-2,544.36,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-9.89971,2398.68775,0,1018.25671,1006.36,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.77,0.77,0,0.85,0.85,0,0,0,0,54.61,54.61,0 +D,DREGION,,2,"2023/12/14 12:15:00",1,VIC1,0,-47.51074,0,-47.51074,0,0,3520.38,2,3845.58,30,295.21,0,,,61,,,,,,,,128.36,,,,,,,,101.66,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,15.29669,9349.10815,421,3534.46167,3569.3,,95,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 12:20:00",1,NSW1,0,137.69,0,137.69,0,0,9493.45,75,8980.7,5,-517.75,0,,,139,,,,,,,,158,,,,,,,,121,,,,,,,,81,,,,,,,,71,,,,,,,,44,,,,,,0,15303.5368,148,9425.5918,9500.12,,40,,,,87.11,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:20:00",1,QLD1,0,0,0,0,0,0,6190.47,25,7037.91,327,520.43,0,,,0,,,,,,,,0,,,,,,,,8,,,,,,,,61,,,,,,,,91,,,,,,,,47.3,,,,,,-34.99638,11286.16273,365,6517.17236,6518.49,,0,,,,38,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:20:00",1,SA1,0,-49.74313,0,-49.74313,0,0,783.25,-1,1192.68,236,173.43,0,,,31,,,,,,,,87,,,,,,,,70,,,,,,,,75,,,,,,,,81,,,,,,,,74,,,,,,0,2788.06181,362,1025.3457,1020.38,,29,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1044.77,-1,582.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,37.09,,,,,,,,137.08,,,,,,,,137.08,,,,,,-8.84805,2396.90001,0,1054.62048,1044.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 12:20:00",1,VIC1,0,-52.69,0,-52.69,0,0,3293.65,0,3611.34,10,307.69,0,,,53.64,,,,,,,,79.53,,,,,,,,99.73,,,,,,,,65,,,,,,,,65,,,,,,,,65,,,,,,0,9249.00974,422,3347.29614,3321.64,,136.38,,,,14.89,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:25:00",1,NSW1,0,137.69,0,137.69,0,0,9539.41,68,9058.87,4,-484.55,0,,,119,,,,,,,,81.69,,,,,,,,71,,,,,,,,80,,,,,,,,70,,,,,,,,43,,,,,,23.52906,15088.81217,147,9451.87109,9543.99,,40,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:25:00",1,QLD1,0,0,0,0,0,0,6203.01,25,7020.47,332,485.46,0,,,10,,,,,,,,10,,,,,,,,0,,,,,,,,61,,,,,,,,121,,,,,,,,40.01,,,,,,-11.92416,11252.48907,365,6516.94385,6535.35,,0,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:25:00",1,SA1,0,-50.25219,0,-50.25219,0,0,815.95,-1,1169,213,140.05,0,,,38.3,,,,,,,,108,,,,,,,,121,,,,,,,,78,,,,,,,,81,,,,,,,,73,,,,,,11.64434,2827.32949,362,1043.17419,1029.72,,44,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:25:00",1,TAS1,0,8.16295,0,8.16295,0,0,1064.43,0,602.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,0.01062,2380.94794,0,1064.41553,1064.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.95,0.95,0,0,0,0,8.28705,8.28705,0 +D,DREGION,,2,"2023/12/14 12:25:00",1,VIC1,0,-52.68,0,-52.68,0,0,3401.67,-4,3755.63,14,339.96,0,,,55.93,,,,,,,,123.93,,,,,,,,106.01,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,13.12872,9332.95338,423,3413.31006,3432.91,,121.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:30:00",1,NSW1,0,137.69,0,137.69,0,0,9619.01,65,9134.93,4,-488.08,0,,,144,,,,,,,,163,,,,,,,,153,,,,,,,,82,,,,,,,,44,,,,,,,,44,,,,,,30.56192,15197.53174,147,9528.47852,9623.22,,35,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:30:00",1,QLD1,0,-2.02,0,-2.02,0,0,6260.2,30,7063.61,315,488.41,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,99,,,,,,,,35.35,,,,,,-8.88122,11386.57427,365,6572.48828,6575.32,,0,,,,35,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:30:00",1,SA1,0,-47.70506,0,-47.70506,0,0,814.2,1,1192.6,225,153.41,0,,,47,,,,,,,,98.56,,,,,,,,83.86,,,,,,,,80,,,,,,,,81,,,,,,,,73,,,,,,3.39866,2812.53956,362,1026.5769,1039.98,,31,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:30:00",1,TAS1,0,-40.01,0,-40.01,0,0,1053.14,-1,591.14,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-6.85774,2402.5877,0,1060.99585,1053.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 12:30:00",1,VIC1,0,-50.01,0,-50.01,0,0,3397.09,0,3745.71,22,326.62,0,,,33.4,,,,,,,,62.92,,,,,,,,62.92,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-6.39094,9306.86973,425,3430.21362,3436.33,,139.38,,,,44,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:35:00",1,NSW1,0,89.03004,0,89.03004,0,0,9642.16,63,9156.69,1,-486.47,0,,,92,,,,,,,,111,,,,,,,,71,,,,,,,,81,,,,,,,,44,,,,,,,,23.25,,,,,,32.16431,15242.82616,148,9549.01758,9643.11,,67,,,,21.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:35:00",1,QLD1,0,1,0,1,0,0,6311.74,29,7108.63,310.52,486.37,0,,,4.48,,,,,,,,23.48,,,,,,,,9.38,,,,,,,,61,,,,,,,,119,,,,,,,,131,,,,,,-17.75647,11358.90335,365,6614.21533,6622.22,,0,,,,65.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:35:00",1,SA1,0,-47.91851,0,-47.91851,0,0,822.36,1,1168.66,90,256.3,0,,,36,,,,,,,,83,,,,,,,,113,,,,,,,,64.84,,,,,,,,45.98,,,,,,,,72,,,,,,6.5041,2798.95849,182,1033.06299,916.11,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1023.96,0,561.96,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-7.36746,2378.82357,0,1031.32581,1023.96,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,3.52,3.52,0,0,0,0,103.85597,103.85597,0 +D,DREGION,,2,"2023/12/14 12:35:00",1,VIC1,0,-52.68,0,-52.68,0,0,3425.19,0,3681.16,23,232.97,0,,,89.91,,,,,,,,104.05,,,,,,,,104.05,,,,,,,,65,,,,,,,,72,,,,,,,,0,,,,,,-3.64628,9266.96866,425,3455.57324,3471.71,,114.38,,,,53,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:40:00",1,NSW1,0,100.02,0,100.02,0,0,9662.65,55,9173.34,0,-489.31,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,78,,,,,,,,66,,,,,,,,39,,,,,,0,15253.75102,147,9619.19043,9662.6,,57,,,,30.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:40:00",1,QLD1,0,-2.02,0,-2.02,0,0,6279.61,23,7083.84,315,489.23,0,,,0,,,,,,,,10.47,,,,,,,,0,,,,,,,,61,,,,,,,,10,,,,,,,,25.14,,,,,,-25.97095,11442.92058,365,6594.08789,6594.57,,0,,,,77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:40:00",1,SA1,0,-47.17342,0,-47.17342,0,0,840.61,2,1178.98,29,309.37,0,,,39.99,,,,,,,,79,,,,,,,,76.57,,,,,,,,81,,,,,,,,81,,,,,,,,73,,,,,,12.16146,2812.63935,123,923.37433,874.74,,24,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,1031.09,0,569.09,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.86926,2394.92735,0,1034.96069,1031.09,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0 +D,DREGION,,2,"2023/12/14 12:40:00",1,VIC1,0,-52.69,0,-52.69,0,0,3423.66,1,3632.89,25,184.23,0,,,88.94,,,,,,,,98.94,,,,,,,,98.94,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,10.31963,9309.39697,425,3457.2478,3475.13,,124.38,,,,22.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/14 12:45:00",1,NSW1,0,100.02,0,100.02,0,0,9651.97,48,9178.5,10,-483.47,0,,,91,,,,,,,,131,,,,,,,,84.75,,,,,,,,80,,,,,,,,71,,,,,,,,44,,,,,,42.77483,15198.85274,147,9560.32422,9661.53,,47,,,,30.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0 +D,DREGION,,2,"2023/12/14 12:45:00",1,QLD1,0,1,0,1,0,0,6390.06,26,7170.82,298,482.76,0,,,21.79,,,,,,,,22.15,,,,,,,,22,,,,,,,,61,,,,,,,,60.65,,,,,,,,51.72,,,,,,-29.8009,11359.93158,348,6691.65674,6687.79,,45,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0 +D,DREGION,,2,"2023/12/14 12:45:00",1,SA1,0,-44.39563,0,-44.39563,0,0,826.22,2,1217.98,20,371.76,0,,,39,,,,,,,,78,,,,,,,,100,,,,,,,,81,,,,,,,,52,,,,,,,,73,,,,,,14.7213,2848.55573,117,844.65576,853.07,,68,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0 +D,DREGION,,2,"2023/12/14 12:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1064.01,1,615.39,0,-448.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,26,,,,,,,,126,,,,,,,,126,,,,,,-3.25434,2404.46932,0,1066.26428,1064.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,9.11,9.11,0,3,3,0,8.68,8.68,0,0,0,0,80.67,80.67,0 +D,DREGION,,2,"2023/12/14 12:45:00",1,VIC1,0,-50.39,0,-50.39,0,0,3438.81,4,3701.59,150,112.78,0,,,68,,,,,,,,88,,,,,,,,88,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-5.37803,9249.73008,425,3488.9834,3617.89,,32,,,,119.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0 +D,DREGION,,2,"2023/12/14 12:50:00",1,NSW1,0,100,0,100,0,0,9729.03,43,9217.41,10,-521.62,0,,,101,,,,,,,,133.07,,,,,,,,121,,,,,,,,56,,,,,,,,44,,,,,,,,44,,,,,,38.00638,15212.37936,147,9653.18359,9738.99,,45,,,,30.02,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:50:00",1,QLD1,0,86,0,86,0,0,6510.29,32,7271.82,240,521.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,27.25,,,,,,,,33.07,,,,,,-9.24341,11310.59544,292,6783.08545,6750.25,,57,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:50:00",1,SA1,0,-44.15352,0,-44.15352,0,0,795.88,-1,1200.64,14,390.76,0,,,34,,,,,,,,74,,,,,,,,72.67,,,,,,,,65,,,,,,,,78,,,,,,,,71,,,,,,18.11712,2859.33053,118,805.72375,817.12,,94.38,,,,25.98,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:50:00",1,TAS1,0,7.14656,0,7.14656,0,0,1063.52,2,601.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.1859,2392.43972,0,1069.70874,1063.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.95,0.95,0,0,0,0,10.30344,10.30344,0 +D,DREGION,,2,"2023/12/14 12:50:00",1,VIC1,0,-50.39,0,-50.39,0,0,3501.98,7,3759.42,148,109.44,0,,,83.89,,,,,,,,110.48,,,,,,,,100.48,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,1.96169,9347.97124,425,3585.87891,3680.94,,9,,,,114,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 12:55:00",1,NSW1,0,89.03,0,89.03,0,0,9617.41,38,9159.13,1,-459.29,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,82,,,,,,,,70,,,,,,,,43,,,,,,0,15314.08735,148,9591.64063,9617.13,,51.38,,,,33.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 12:55:00",1,QLD1,0,85.75,0,85.75,0,0,6523.56,37,7220.77,240,457.21,0,,,22,,,,,,,,19.38,,,,,,,,22,,,,,,,,61,,,,,,,,20,,,,,,,,28.46,,,,,,1.72805,11235.75351,290,6724.37646,6762.77,,10,,,,32,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 12:55:00",1,SA1,0,-44.68292,0,-44.68292,0,0,724.76,-5,1250.73,19,506.97,0,,,49.07,,,,,,,,101,,,,,,,,84.28,,,,,,,,80,,,,,,,,80,,,,,,,,73,,,,,,14.70237,2900.76856,116,744.57324,755.78,,22,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 12:55:00",1,TAS1,0,7.14656,0,7.14656,0,0,1059.58,1,597.58,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.29941,2390.25634,0,1066.87537,1059.58,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.39,0.39,0,0,0,0,10.30344,10.30344,0 +D,DREGION,,2,"2023/12/14 12:55:00",1,VIC1,0,-52.69,0,-52.69,0,0,3527.13,12,3556.31,21,8.17,0,,,58,,,,,,,,68,,,,,,,,68,,,,,,,,65,,,,,,,,65,,,,,,,,65,,,,,,6.05404,9256.90286,422,3683.64526,3589.25,,122,,,,74.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/14 13:00:00",1,NSW1,0,100.02,0,100.02,0,0,9704.38,37,9209.67,0,-494.7,0,,,91,,,,,,,,142.04,,,,,,,,121,,,,,,,,82,,,,,,,,43,,,,,,,,43,,,,,,12.82705,15183.60357,147,9654.02832,9703.47,,57,,,,59,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 13:00:00",1,QLD1,0,83.02004,0,83.02004,0,0,6573.99,30,7317.4,240,503.41,0,,,27,,,,,,,,27,,,,,,,,0,,,,,,,,0,,,,,,,,11.18,,,,,,,,30,,,,,,6.97794,11225.44769,290,6775.61816,6813.69,,62.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 13:00:00",1,SA1,0,-34.67747,0,-34.67747,0,0,702.4,-8,1250.29,22,525.88,0,,,38.54,,,,,,,,77,,,,,,,,108.14,,,,,,,,81,,,,,,,,81,,,,,,,,73,,,,,,18.48052,2859.95892,115,714.35236,737.03,,48,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 13:00:00",1,TAS1,0,7.14656,0,7.14656,0,0,1056.98,0,594.98,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-4.63871,2386.00943,0,1061.61841,1056.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,1,1,0,0,0,0,10.30344,10.30344,0 +D,DREGION,,2,"2023/12/14 13:00:00",1,VIC1,0,-41.11,0,-41.11,0,0,3511.3,12,3626.99,135,-19.3,0,,,68,,,,,,,,78,,,,,,,,68,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,4.4337,8966.16474,420,3603.60327,3688.16,,38,,,,91,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 13:05:00",1,NSW1,0,100,0,100,0,0,9787.94,43,9230.29,10,-567.64,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,55,,,,,,,,43,,,,,,,,43,,,,,,12.45055,14993.73575,147,9737.27246,9798.63,,47,,,,30.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:05:00",1,QLD1,0,94.66969,0,94.66969,0,0,6661.32,32,7470.08,240,568.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,30,,,,,,,,37.72,,,,,,-5.05206,11270.88736,290,6872.66064,6901.74,,14,,,,35,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:05:00",1,SA1,0,-48.43875,0,-48.43875,0,0,664.21,-10,1179.9,24,491.7,0,,,45.47,,,,,,,,94.89,,,,,,,,80.99,,,,,,,,69,,,,,,,,82,,,,,,,,74,,,,,,15.70852,2850.05799,117,692.50049,699.1,,24,,,,35.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1038.89,1,576.89,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-4.14868,2390.23355,0,1042.04065,1038.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0 +D,DREGION,,2,"2023/12/14 13:05:00",1,VIC1,0,-56.79,0,-56.79,0,0,3442.34,8,3494.22,32,19.88,0,,,87.24,,,,,,,,97.24,,,,,,,,97.24,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,16.65971,8875.46422,419,3540.45508,3513.02,,120.38,,,,69,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:10:00",1,NSW1,0,100.02,0,100.02,0,0,9971.82,53,9553.89,11,-428.93,0,,,71,,,,,,,,71,,,,,,,,71,,,,,,,,82,,,,,,,,70,,,,,,,,43,,,,,,17.60184,15025.36211,148,9899.73145,9977.24,,47,,,,35.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:10:00",1,QLD1,0,66.11008,0,66.11008,0,0,6695.03,35,7469.85,240,534.83,0,,,0,,,,,,,,23,,,,,,,,0,,,,,,,,0,,,,,,,,0.13,,,,,,,,36.13,,,,,,0,11269.82173,290,6900.24609,6934.44,,8,,,,40.7,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:10:00",1,SA1,0,-45.75747,0,-45.75747,0,0,666.26,-10,1197.09,15,515.83,0,,,57.12,,,,,,,,112,,,,,,,,123,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,17.71508,2835.25291,114,683.10962,693.63,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:10:00",1,TAS1,0,-40.01,0,-40.01,0,0,1059.88,1,597.88,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,0,2395.4294,0,1058.8772,1059.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.86,0.86,0,0,0,0,57.46,57.46,0 +D,DREGION,,2,"2023/12/14 13:10:00",1,VIC1,0,-54.25,0,-54.25,0,0,3704.85,16,3606.74,19,-117.11,0,,,93.18,,,,,,,,113.54,,,,,,,,101.14,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,23.58504,8950.21644,418,3704.27319,3760.26,,126.38,,,,64.27,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:15:00",1,NSW1,0,100,0,100,0,0,9943.36,57,9580.36,12,-375,0,,,86,,,,,,,,71,,,,,,,,71,,,,,,,,82,,,,,,,,70,,,,,,,,29.67,,,,,,26.65499,14954.41217,149,9857.04297,9948.39,,46,,,,14.03,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:15:00",1,QLD1,0,54.55008,0,54.55008,0,0,6659.39,37,7394.72,240,495.33,0,,,0,,,,,,,,26,,,,,,,,26,,,,,,,,23.2,,,,,,,,72,,,,,,,,84,,,,,,-22.11219,11158.7999,290,6883.71875,6898.29,,8,,,,21,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:15:00",1,SA1,0,-42.73175,0,-42.73175,0,0,661.23,-9,1168.65,9,498.43,0,,,49,,,,,,,,130,,,,,,,,105.79,,,,,,,,67,,,,,,,,37,,,,,,,,60,,,,,,19.72165,2804.43817,39,676.00555,681.83,,11,,,,57.97,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:15:00",1,TAS1,0,11.1,0,11.1,0,0,1085.37,1,623.37,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,0.12862,2438.99809,0,1084.24121,1085.37,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.86,0.86,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:15:00",1,VIC1,0,-50.39,0,-50.39,0,0,3762.5,25,3648.39,5,-119.11,0,,,89.2,,,,,,,,95.66,,,,,,,,95.28,,,,,,,,66,,,,,,,,67.67,,,,,,,,73,,,,,,11.89764,8917.28872,418,3771.948,3801.62,,140.38,,,,77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:20:00",1,NSW1,0,100,0,100,0,0,10082.88,62,9565.28,16,-533.61,0,,,71,,,,,,,,82.56,,,,,,,,71,,,,,,,,55,,,,,,,,43,,,,,,,,70,,,,,,35.70813,14889.7924,150,9987.88574,10097.31,,43,,,,40.02,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 13:20:00",1,QLD1,0,54.55,0,54.55,0,0,6723.3,32,7494.36,240,531.06,0,,,0,,,,,,,,22,,,,,,,,9.56,,,,,,,,63,,,,,,,,85,,,,,,,,85,,,,,,-27.18713,11177.13268,290,6956.18994,6962.33,,8,,,,41,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 13:20:00",1,SA1,0,-45.99999,0,-45.99999,0,0,639.12,-8,1246.42,31,576.3,0,,,32.14,,,,,,,,107,,,,,,,,107,,,,,,,,58.4,,,,,,,,47.82,,,,,,,,72,,,,,,7.32307,2868.03864,111,662.86469,685.06,,21.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 13:20:00",1,TAS1,0,11.08,0,11.08,0,0,1094.88,2,632.88,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-0.6132,2448.62356,0,1093.49536,1094.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,1,1,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:20:00",1,VIC1,0,-52.69,0,-52.69,0,0,3695.96,23,3686.85,43,-52.11,0,,,118.43,,,,,,,,108.43,,,,,,,,108.43,,,,,,,,65,,,,,,,,74,,,,,,,,22.82,,,,,,-6.70445,9095.24308,418,3722.16187,3786.21,,133,,,,58.98,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 13:25:00",1,NSW1,0,137.69,0,137.69,0,0,10213.09,73,9785.44,18,-445.65,0,,,71,,,,,,,,111.98,,,,,,,,71,,,,,,,,82,,,,,,,,43,,,,,,,,43,,,,,,20.77573,15093.35652,147,10130.1875,10225.09,,38,,,,41.81,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:25:00",1,QLD1,0,-2.02,0,-2.02,0,0,6677.98,30,7502.08,261,563.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,70.76,,,,,,,,79.76,,,,,,-9.22991,11288.34586,290,6899.7832,6938.43,,0,,,,41,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:25:00",1,SA1,0,-43.9369,0,-43.9369,0,0,650.94,-6,1236.15,28,557.21,0,,,47.09,,,,,,,,84,,,,,,,,115,,,,,,,,79,,,,,,,,80,,,,,,,,73,,,,,,7.04389,2848.60188,108,686.40784,693.13,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:25:00",1,TAS1,0,12.24327,0,12.24327,0,0,1082.5,1,620.5,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-5.64426,2425.03848,0,1087.14685,1082.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,6,6,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:25:00",1,VIC1,0,-52.68,0,-52.68,0,0,3782.9,24,3654.59,37,-165.31,0,,,100.17,,,,,,,,120.17,,,,,,,,106.65,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-17.64985,9210.87215,418,3841.10205,3859.6,,143.38,,,,57.19,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 13:30:00",1,NSW1,0,89.03004,0,89.03004,0,0,10246.43,83,9630.14,0,-616.29,0,,,91,,,,,,,,99,,,,,,,,71,,,,,,,,95,,,,,,,,49.75,,,,,,,,63.75,,,,,,28.4617,15159.92689,147,10142.90918,10246.73,,57,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:30:00",1,QLD1,0,49.55,0,49.55,0,0,6705.07,27,7589.17,240,644.1,0,,,22,,,,,,,,22,,,,,,,,22,,,,,,,,64,,,,,,,,87,,,,,,,,87,,,,,,-18.95518,11233.83939,290,6956.11768,6945.97,,35,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:30:00",1,SA1,0,-34.85705,0,-34.85705,0,0,666.44,-3,1219.43,41,511.99,0,,,45.19,,,,,,,,105,,,,,,,,105,,,,,,,,72,,,,,,,,83,,,,,,,,72,,,,,,9.08168,2825.24695,111,694.89209,719.52,,44,,,,20,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:30:00",1,TAS1,0,11.08,0,11.08,0,0,1084.48,1,622.48,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-1.42348,2412.97083,0,1084.9021,1084.48,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,2.31,2.31,0,3,3,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:30:00",1,VIC1,0,-41.11,0,-41.11,0,0,3798.19,22,3917.48,144,-24.7,0,,,57.34,,,,,,,,87.34,,,,,,,,93.34,,,,,,,,39.93,,,,,,,,59,,,,,,,,56,,,,,,-15.03419,9173.28482,418,3851.11401,3982.01,,69.38,,,,95,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:35:00",1,NSW1,0,137.69,0,137.69,0,0,10102.61,74,10356.4,1,252.79,0,,,72,,,,,,,,133.68,,,,,,,,107.88,,,,,,,,38,,,,,,,,38,,,,,,,,38,,,,,,0,15096.1081,148,10034.84863,10097.56,,26,,,,5.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:35:00",1,QLD1,0,49.55,0,49.55,0,0,6634.34,23,7537.51,255,648.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,62,,,,,,,,99,,,,,,,,67,,,,,,-17.72616,11199.90151,290,6869.64746,6890.89,,18.38,,,,70,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:35:00",1,SA1,0,-49.92958,0,-49.92958,0,0,672.58,-1,1192.79,6,514.21,0,,,52.93,,,,,,,,80,,,,,,,,80,,,,,,,,78,,,,,,,,30,,,,,,,,71,,,,,,0,2852.88506,109,732.08411,690.09,,3,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:35:00",1,TAS1,0,11.08,0,11.08,0,0,1083.11,0,621.11,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-0.66365,2414.77737,0,1083.77722,1083.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,1.19,1.19,0,1,1,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:35:00",1,VIC1,0,-58.25,0,-58.25,0,0,3726.49,18,2888.06,78,-916.43,0,,,92.8,,,,,,,,102.8,,,,,,,,104.8,,,,,,,,91,,,,,,,,99.15,,,,,,,,90.15,,,,,,-1.34391,9146.58655,384,3866.13623,3834.22,,158,,,,54.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:40:00",1,NSW1,0,137.69,0,137.69,0,0,10235.65,69,10529.53,9,284.88,0,,,62,,,,,,,,87.66,,,,,,,,62,,,,,,,,72,,,,,,,,70,,,,,,,,56.9,,,,,,38.62034,15119.10753,147,10115.57422,10232.4,,21,,,,14.05,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 13:40:00",1,QLD1,0,132.03592,0,132.03592,0,0,6817.29,25,7649.05,289,542.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,64.9,,,,,,,,87,,,,,,0,11120.546,290,7043.05859,7105.03,,61.54,,,,46,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 13:40:00",1,SA1,0,-51.58365,0,-51.58365,0,0,751.28,6,1201.24,65,384.96,0,,,79.7,,,,,,,,94,,,,,,,,94,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,12.00013,2848.2291,107,744.32776,822.96,,20,,,,40,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 13:40:00",1,TAS1,0,13,0,13,0,0,1085.63,1,623.63,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-2.01729,2406.50432,0,1086.64795,1085.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,2.12,2.12,0,3,3,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:40:00",1,VIC1,0,-58.25,0,-58.25,0,0,3726.01,13,3083.38,97,-739.62,0,,,77.58,,,,,,,,135.58,,,,,,,,137.74,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,0,9119.91458,372,3807.63696,3840.81,,102.84,,,,69.95,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 13:45:00",1,NSW1,0,138.98531,0,138.98531,0,0,10349.07,77,10655.48,57,249.41,0,,,40.92,,,,,,,,96.54,,,,,,,,55.65,,,,,,,,72,,,,,,,,70,,,,,,,,70,,,,,,42.41356,15061.25962,147,10217.76074,10397.91,,0,,,,25.01,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:45:00",1,QLD1,0,131.75002,0,131.75002,0,0,6808.35,34,7718.93,289,621.58,0,,,0,,,,,,,,14,,,,,,,,0,,,,,,,,64,,,,,,,,51.46,,,,,,,,60.46,,,,,,0,11160.97296,290,7058.65088,7097.22,,14,,,,35.99,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:45:00",1,SA1,0,-52.40958,0,-52.40958,0,0,777.48,11,1133.82,50,306.34,0,,,70,,,,,,,,75,,,,,,,,75,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,9.61025,2821.70861,112,816.09204,832.11,,59,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:45:00",1,TAS1,0,13,0,13,0,0,1086.64,1,624.64,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.30122,2410.79561,0,1088.93982,1086.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,6,6,0,9.21,9.21,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:45:00",1,VIC1,0,-58.25,0,-58.25,0,0,3795.88,4,3134.98,42,-702.9,0,,,108.46,,,,,,,,126.46,,,,,,,,161.46,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,0,9237.22568,356,3888.66724,3853.97,,132.38,,,,69,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 13:50:00",1,NSW1,0,137.69,0,137.69,0,0,10315.72,71,10633.68,21,296.96,0,,,82,,,,,,,,125,,,,,,,,95,,,,,,,,72,,,,,,,,70,,,,,,,,63.72,,,,,,46.20678,15107.56705,149,10243.49219,10330.1,,10,,,,20.87,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 13:50:00",1,QLD1,0,54.55,0,54.55,0,0,6763.73,32,7673.15,290,619.42,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,73.72,,,,,,,,87,,,,,,3.82288,11030.05206,290,7016.51465,7053.68,,58,,,,54.13,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 13:50:00",1,SA1,0,-52.41478,0,-52.41478,0,0,803.14,13,1146.64,45,298.5,0,,,109.8,,,,,,,,117,,,,,,,,117,,,,,,,,78,,,,,,,,78,,,,,,,,71,,,,,,0.66466,2809.33515,112,849.37451,852.74,,7,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 13:50:00",1,TAS1,0,13.96911,0,13.96911,0,0,1096.74,1,634.74,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.80975,2396.58274,0,1099.54834,1096.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,1.84,1.84,0,1.84,1.84,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:50:00",1,VIC1,0,-58.25,0,-58.25,0,0,3717.51,5,3019.24,39,-737.27,0,,,30,,,,,,,,77.79,,,,,,,,82.19,,,,,,,,95,,,,,,,,95,,,,,,,,95,,,,,,-2.16336,9260.82336,358,3769.41699,3774.19,,130.38,,,,65,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 13:55:00",1,NSW1,0,137.69,0,137.69,0,0,10419.7,66,10718.06,57,241.36,0,,,35,,,,,,,,68.17,,,,,,,,60.27,,,,,,,,112,,,,,,,,88.15,,,,,,,,122,,,,,,50,15483.43116,147,10309.27637,10468.93,,0,,,,35.33,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:55:00",1,QLD1,0,93.75,0,93.75,0,0,6849.47,28,7724.62,242,633.15,0,,,26,,,,,,,,26,,,,,,,,26,,,,,,,,64,,,,,,,,94,,,,,,,,50,,,,,,17.66887,10952.58278,290,7090.73145,7091.36,,39.38,,,,31.67,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:55:00",1,SA1,0,-51.64576,0,-51.64576,0,0,832.7,15,1154.97,27,295.27,0,,,78.54,,,,,,,,88,,,,,,,,88,,,,,,,,85,,,,,,,,83,,,,,,,,81,,,,,,6.00478,2833.83558,109,851.76392,863.65,,67,,,,34,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 13:55:00",1,TAS1,0,13.96911,0,13.96911,0,0,1101,2,639,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.53,,,,,,-5.32297,2405.50827,0,1104.32422,1101,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,6,6,0,3,3,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 13:55:00",1,VIC1,0,-56.79,0,-56.79,0,0,3781.42,3,3114.76,30,-696.66,0,,,81,,,,,,,,136,,,,,,,,120,,,,,,,,71.52,,,,,,,,75,,,,,,,,80,,,,,,0,9213.38637,360,3823.75513,3826.47,,99,,,,69,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0 +D,DREGION,,2,"2023/12/14 14:00:00",1,NSW1,0,100.02,0,100.02,0,0,10383.48,65,10798.93,58,357.45,0,,,55,,,,,,,,147.55,,,,,,,,95,,,,,,,,112,,,,,,,,70,,,,,,,,88.34,,,,,,0,15633.88894,148,10378.71289,10433.95,,0,,,,39.02,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:00:00",1,QLD1,0,42.62,0,42.62,0,0,6852.45,32,7703.29,271,579.85,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,63,,,,,,,,133,,,,,,,,86,,,,,,0,11103.83042,290,7070.87646,7122.21,,18,,,,69.98,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:00:00",1,SA1,0,-51.36694,0,-51.36694,0,0,847.92,15,1176.68,19,309.76,0,,,106.59,,,,,,,,92,,,,,,,,123,,,,,,,,87,,,,,,,,81,,,,,,,,74,,,,,,0,2876.35263,110,871.21033,871.12,,40,,,,40,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:00:00",1,TAS1,0,11.08,0,11.08,0,0,1091.24,2,629.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-10.81426,2422.85652,0,1100.04944,1091.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,1.84,1.84,0,6,6,0,0,0,0,7.33911,7.33911,0 +D,DREGION,,2,"2023/12/14 14:00:00",1,VIC1,0,-56.79,0,-56.79,0,0,3802.86,6,3062.23,31,-771.63,0,,,60,,,,,,,,80,,,,,,,,75.75,,,,,,,,97.18,,,,,,,,96,,,,,,,,96,,,,,,-11.796,9155.084,362,3856.43359,3851.86,,147.38,,,,21,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:05:00",1,NSW1,0,62.75,0,62.75,0,0,10491.78,62,10689.2,57,140.42,0,,,95,,,,,,,,115,,,,,,,,115,,,,,,,,109.97,,,,,,,,70,,,,,,,,94.65,,,,,,50,15674.57757,147,10427.8291,10539.87,,20,,,,21.24,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 14:05:00",1,QLD1,0,59.12768,0,59.12768,0,0,6872.99,33,7804.56,265,666.57,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,102.65,,,,,,,,87,,,,,,2.13283,11178.79204,290,7109.88574,7138.24,,64.38,,,,18,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 14:05:00",1,SA1,0,-49.33144,0,-49.33144,0,0,854.49,15,1169.54,15,300.05,0,,,59.59,,,,,,,,69.26,,,,,,,,92.46,,,,,,,,79,,,,,,,,79,,,,,,,,72,,,,,,10.06674,2849.16506,106,849.56488,873.51,,50,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 14:05:00",1,TAS1,0,10.30132,0,10.30132,0,0,1078.99,1,616.99,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-15.69018,2421.61278,0,1093.67786,1078.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,1.84,1.84,0,0.86,0.86,0,0,0,0,5.19868,5.19868,0 +D,DREGION,,2,"2023/12/14 14:05:00",1,VIC1,0,-54.25,0,-54.25,0,0,3850.58,11,3299.11,85,-636.47,0,,,66.67,,,,,,,,134.67,,,,,,,,86.67,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-4.34994,9152.78073,363,3885.85156,3948.79,,71,,,,100.76,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0 +D,DREGION,,2,"2023/12/14 14:10:00",1,NSW1,0,62.75,0,62.75,0,0,10335.72,56,10571.49,57,178.77,0,,,75,,,,,,,,100.32,,,,,,,,105,,,,,,,,111.05,,,,,,,,70,,,,,,,,104,,,,,,0,15613.11357,147,10330.05859,10379.86,,20,,,,27.27,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:10:00",1,QLD1,0,60.36429,0,60.36429,0,0,6883.48,33,7689.27,257,548.79,0,,,0,,,,,,,,0,,,,,,,,2.42,,,,,,,,64,,,,,,,,113.24,,,,,,,,87,,,,,,0,11023.9533,290,7117.03271,7138.71,,10,,,,42.73,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:10:00",1,SA1,0,-49.06241,0,-49.06241,0,0,839.87,12,1173.93,23,311.06,0,,,70.14,,,,,,,,88,,,,,,,,88,,,,,,,,82,,,,,,,,82,,,,,,,,74.24,,,,,,0,2821.80489,110,851.49731,867.1,,16,,,,30,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:10:00",1,TAS1,0,10.0941,0,10.0941,0,0,1080.69,1,618.69,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-15.32933,2404.16556,0,1095.02173,1080.69,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,8.68,8.68,0,6,6,0,0,0,0,4.4559,4.4559,0 +D,DREGION,,2,"2023/12/14 14:10:00",1,VIC1,0,-54.25,0,-54.25,0,0,3916.81,18,3363.6,21,-574.21,0,,,74.64,,,,,,,,129.64,,,,,,,,99.64,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,0,9165.19676,328,3981.45337,3950.64,,159.38,,,,70,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:15:00",1,NSW1,0,85.97995,0,85.97995,0,0,10528.95,56,10587.4,57,1.45,0,,,95,,,,,,,,115,,,,,,,,115,,,,,,,,85,,,,,,,,57.31,,,,,,,,86,,,,,,21.65727,15638.82976,147,10493.3584,10569.05,,20,,,,21.23,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 14:15:00",1,QLD1,0,83.50773,0,83.50773,0,0,7018.56,37,7800.88,290,492.32,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,16.53302,11059.65849,290,7217.8042,7305.5,,12,,,,38,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 14:15:00",1,SA1,0,-47,0,-47,0,0,850.33,11,1184.45,24,310.13,0,,,32,,,,,,,,96,,,,,,,,93.36,,,,,,,,88,,,,,,,,82,,,,,,,,81,,,,,,12.82757,2853.62037,109,849.93347,882.09,,59,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 14:15:00",1,TAS1,0,10.0941,0,10.0941,0,0,1073.68,0,611.68,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.78,,,,,,-4.48296,2391.48484,0,1078.16028,1073.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,1.84,1.84,0,0.86,0.86,0,0,0,0,4.4559,4.4559,0 +D,DREGION,,2,"2023/12/14 14:15:00",1,VIC1,0,-53.37931,0,-53.37931,0,0,3918.72,24,3621.51,39,-336.21,0,,,93.22,,,,,,,,106.79,,,,,,,,84.44,,,,,,,,133.73,,,,,,,,105,,,,,,,,113.91,,,,,,7.86778,9196.0456,344,3917.2019,3975.61,,114.38,,,,80.77,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 14:20:00",1,NSW1,0,62.75,0,62.75,0,0,10637.48,61,10650.29,57,-44.19,0,,,75,,,,,,,,115,,,,,,,,92.06,,,,,,,,90.86,,,,,,,,60.65,,,,,,,,86,,,,,,0,15626.78423,147,10616.30273,10678.15,,20,,,,21.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:20:00",1,QLD1,0,63.12575,0,63.12575,0,0,7105.5,43,7734,290,338.5,0,,,0,,,,,,,,7.26,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,11.18732,11283.35666,290,7333.71045,7391.33,,10,,,,28.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:20:00",1,SA1,0,-34.8367,0,-34.8367,0,0,869.2,9,1251.77,19,363.58,0,,,55.48,,,,,,,,100,,,,,,,,100,,,,,,,,88,,,,,,,,86,,,,,,,,81.43,,,,,,9.30005,2831.19387,112,874.45679,905.01,,62,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:20:00",1,TAS1,0,10.57593,0,10.57593,0,0,1078.46,0,616.46,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.6,,,,,,-0.45677,2394.04397,0,1078.91345,1078.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,6,6,0,8.68,8.68,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 14:20:00",1,VIC1,0,-41.11,0,-41.11,0,0,4045.46,27,3944.07,59,-160.39,0,,,93.8,,,,,,,,98.8,,,,,,,,103.8,,,,,,,,135,,,,,,,,104,,,,,,,,120,,,,,,6.52451,9242.65973,329,4039.12354,4143.64,,113.38,,,,90,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 14:25:00",1,NSW1,0,62.75,0,62.75,0,0,10674.66,68,10565.56,58,-167.1,0,,,95,,,,,,,,145,,,,,,,,115,,,,,,,,86,,,,,,,,53.34,,,,,,,,86,,,,,,4.05169,15644.91073,148,10644.81445,10719.96,,19.38,,,,21.26,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:25:00",1,QLD1,0,63.59873,0,63.59873,0,0,7139.38,47,7737.9,290,308.52,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,-5.095,11261.23352,290,7380.1875,7425.18,,10,,,,41,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:25:00",1,SA1,0,-30,0,-30,0,0,843.98,7,1270.07,16,410.1,0,,,51.62,,,,,,,,77,,,,,,,,77,,,,,,,,88,,,,,,,,86,,,,,,,,81,,,,,,12.7665,2857.91108,112,861.44623,880.57,,86,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:25:00",1,TAS1,0,10.57593,0,10.57593,0,0,1077.94,0,615.94,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.36,,,,,,-1.64762,2402.80498,0,1079.58984,1077.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,1.84,1.84,0,1.4,1.4,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 14:25:00",1,VIC1,0,3.00057,0,3.00057,0,0,3964.58,32,3953.13,23,-34.45,0,,,77.1,,,,,,,,99.05,,,,,,,,104.65,,,,,,,,133,,,,,,,,105,,,,,,,,114.35,,,,,,20.80333,8968.20024,325,3979.72363,4038.95,,90,,,,77.74,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:30:00",1,NSW1,0,41.75264,0,41.75264,0,0,10680.56,69,10494.67,58,-243.89,0,,,95,,,,,,,,115,,,,,,,,111.24,,,,,,,,95.14,,,,,,,,69,,,,,,,,86,,,,,,0,15557.04515,148,10661.2373,10730.08,,20,,,,27.26,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0 +D,DREGION,,2,"2023/12/14 14:30:00",1,QLD1,0,42.62,0,42.62,0,0,7165.69,48,7730.86,290,275.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,-15.6878,11344.54992,290,7419.14502,7451.6,,30,,,,56,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0 +D,DREGION,,2,"2023/12/14 14:30:00",1,SA1,0,-46.64993,0,-46.64993,0,0,807.71,6,1229.94,12,410.23,0,,,46,,,,,,,,113.64,,,,,,,,78,,,,,,,,89,,,,,,,,83.55,,,,,,,,81,,,,,,0,2898.28116,109,840.82104,840.32,,35,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0 +D,DREGION,,2,"2023/12/14 14:30:00",1,TAS1,0,10.08372,0,10.08372,0,0,1036.06,0,588.98,0,-447.08,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.46,,,,,,,,124.45,,,,,,,,146.2,,,,,,-0.0767,2408.6699,0,1036.13403,1036.06,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.12075,8.12075,0,1.19,1.19,0,0.39,0.39,0,0,0,0,4.47649,4.47649,0 +D,DREGION,,2,"2023/12/14 14:30:00",1,VIC1,0,-6.618,0,-6.618,0,0,4085.01,35,4175.56,22,68.55,0,,,87.15,,,,,,,,96.91,,,,,,,,111.91,,,,,,,,136,,,,,,,,105,,,,,,,,112.8,,,,,,0,9127.9934,314,4116.51709,4161.96,,105.46,,,,56.74,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0 +D,DREGION,,2,"2023/12/14 14:35:00",1,NSW1,0,299.99,0,299.99,0,0,10856.02,71,10492.03,24,-387.99,0,,,70,,,,,,,,95.92,,,,,,,,100.32,,,,,,,,98,,,,,,,,69,,,,,,,,81,,,,,,24.10429,15367.86896,58,10817.10156,10872.13,,0,,,,15.26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0 +D,DREGION,,2,"2023/12/14 14:35:00",1,QLD1,0,301.34777,0,301.34777,0,0,7297.46,47,7912.71,240,375.25,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,130.9,,,,,,,,85.9,,,,,,0,11212.36852,290,7531.19189,7532.62,,14,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0 +D,DREGION,,2,"2023/12/14 14:35:00",1,SA1,0,-46.64993,0,-46.64993,0,0,814.03,4,1255.11,29,412.07,0,,,48.01,,,,,,,,86,,,,,,,,86,,,,,,,,91,,,,,,,,89,,,,,,,,93.01,,,,,,18.74067,2881.11762,112,811.79785,863.46,,63,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0 +D,DREGION,,2,"2023/12/14 14:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1037.27,0,606.65,0,-430.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,13.03,,,,,,,,108,,,,,,,,143.03,,,,,,-1.46058,2423.56941,0,1038.72705,1037.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,6,6,0,3,3,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 14:35:00",1,VIC1,0,-41.11,0,-41.11,0,0,4102.24,37,4207.69,11,94.45,0,,,109.33,,,,,,,,142.33,,,,,,,,114.33,,,,,,,,146,,,,,,,,126.05,,,,,,,,120,,,,,,9.9499,9170.22319,304,4127.33057,4168.71,,97,,,,104.74,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0 +D,DREGION,,2,"2023/12/14 14:40:00",1,NSW1,0,11.63017,0,11.63017,0,0,10845.68,76,10595.31,58,-308.37,0,,,110,,,,,,,,130,,,,,,,,111,,,,,,,,88.01,,,,,,,,73.55,,,,,,,,87,,,,,,0,15553.64757,58,10789.21777,10892.34,,0,,,,21.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0 +D,DREGION,,2,"2023/12/14 14:40:00",1,QLD1,0,11.67833,0,11.67833,0,0,7304.66,45,7734.28,50,379.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,57,,,,,,,,126,,,,,,,,85.56,,,,,,-28.71714,11262.20887,50,7522.01416,7349.86,,14,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0 +D,DREGION,,2,"2023/12/14 14:40:00",1,SA1,0,-50,0,-50,0,0,786.86,2,1231.98,34,411.13,0,,,32,,,,,,,,79.53,,,,,,,,37,,,,,,,,91,,,,,,,,89,,,,,,,,81,,,,,,0,2871.39692,110,837.71399,841.39,,66,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0 +D,DREGION,,2,"2023/12/14 14:40:00",1,TAS1,0,-34.10884,0,-34.10884,0,0,1042.03,0,595.34,0,-446.68,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.06,,,,,,,,124.06,,,,,,,,143.05,,,,,,-3.38783,2409.6426,0,1045.41553,1042.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.86,0.86,0,0,0,0,50.55884,50.55884,0 +D,DREGION,,2,"2023/12/14 14:40:00",1,VIC1,0,-41.11,0,-41.11,0,0,4130.88,36,4157.35,5,21.47,0,,,87,,,,,,,,117.01,,,,,,,,91.3,,,,,,,,150,,,,,,,,105,,,,,,,,121,,,,,,0,9257.36185,342,4156.75,4188.65,,110.06,,,,100.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0 +D,DREGION,,2,"2023/12/14 14:45:00",1,NSW1,0,55.79943,0,55.79943,0,0,10941.49,78,10578,58,-421.48,0,,,111,,,,,,,,131,,,,,,,,112.73,,,,,,,,104,,,,,,,,74,,,,,,,,86,,,,,,15.58546,15364.54289,58,10897.15723,10988.55,,20,,,,26.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:45:00",1,QLD1,0,54.55,0,54.55,0,0,7352.27,52,7920.22,50,517.95,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,133,,,,,,,,89,,,,,,-18.39651,11367.09673,50,7366.0332,7398.29,,12,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:45:00",1,SA1,0,-55,0,-55,0,0,788.13,0,1202.56,6,408.43,0,,,32,,,,,,,,81,,,,,,,,37,,,,,,,,88,,,,,,,,89,,,,,,,,85.08,,,,,,23.66072,2871.37445,107,820.01556,814.93,,63.9,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:45:00",1,TAS1,0,-32.69621,0,-32.69621,0,0,1049.42,0,610.9,0,-438.52,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,15.9,,,,,,,,115.9,,,,,,,,143.34,,,,,,-0.85622,2484.56735,0,1050.276,1049.42,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.39,0.39,0,0,0,0,49.14621,49.14621,0 +D,DREGION,,2,"2023/12/14 14:45:00",1,VIC1,0,-34.3,0,-34.3,0,0,4218.65,33,4214.75,5,-8.9,0,,,84.53,,,,,,,,112.35,,,,,,,,99.83,,,,,,,,140.69,,,,,,,,112.52,,,,,,,,121,,,,,,29.38748,9240.24918,340,4215.27979,4275.24,,86,,,,95.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:50:00",1,NSW1,0,62.74,0,62.74,0,0,11034.41,83,10507.28,57,-584.12,0,,,90,,,,,,,,130,,,,,,,,121,,,,,,,,104,,,,,,,,88,,,,,,,,86,,,,,,25.64987,15262.84439,57,10974.82129,11084.55,,10,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 14:50:00",1,QLD1,0,59.84899,0,59.84899,0,0,7383.77,49,8061.94,50,628.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,136,,,,,,,,89,,,,,,-23.5336,11417.12719,50,7404.86182,7430.97,,12,,,,38,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 14:50:00",1,SA1,0,-52.11,0,-52.11,0,0,762.88,1,1220.81,102,355.94,0,,,44.69,,,,,,,,80,,,,,,,,43.59,,,,,,,,91,,,,,,,,91,,,,,,,,85.47,,,,,,14.17676,2894.22724,110,780.89795,882.97,,0,,,,109,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 14:50:00",1,TAS1,0,36.61141,0,36.61141,0,0,1067.52,1,698.08,0,-369.44,0,,,5,,,,,,,,5,,,,,,,,6.64,,,,,,,,3,,,,,,,,67.22,,,,,,,,143.74,,,,,,-0.39136,2457.70305,0,1066.9126,1067.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 14:50:00",1,VIC1,0,34.47,0,34.47,0,0,4398.88,38,4425.38,5,21.5,0,,,86.3,,,,,,,,108.5,,,,,,,,78.44,,,,,,,,150.7,,,,,,,,142,,,,,,,,120,,,,,,35.06185,9199.51135,340,4385.17285,4447.49,,138,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 14:55:00",1,NSW1,0,62.74,0,62.74,0,0,11101.86,85,10507.38,57,-651.48,0,,,91,,,,,,,,146.61,,,,,,,,122,,,,,,,,103.56,,,,,,,,82.43,,,,,,,,86,,,,,,2.38095,15380.00901,57,11076.75391,11154.16,,10,,,,5.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:55:00",1,QLD1,0,59.943,0,59.943,0,0,7428.03,49,8121.93,50,643.9,0,,,0,,,,,,,,4,,,,,,,,4,,,,,,,,64,,,,,,,,123,,,,,,,,79,,,,,,-16.00328,11652.21931,50,7442.47314,7475.15,,12,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:55:00",1,SA1,0,-101.96,0,-101.96,0,0,716.95,-2,1082.19,9,356.24,0,,,73.74,,,,,,,,87,,,,,,,,77.52,,,,,,,,88,,,,,,,,89,,,,,,,,100,,,,,,1.69492,2888.13248,34,794.16608,744.01,,29.68,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 14:55:00",1,TAS1,0,11.1,0,11.1,0,0,1061.67,1,613.37,0,-448.3,0,,,0,,,,,,,,5,,,,,,,,6.64,,,,,,,,25.68,,,,,,,,125.68,,,,,,,,139.11,,,,,,7.43763,2450.41112,0,1053.23608,1061.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,1,1,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 14:55:00",1,VIC1,0,6.30766,0,6.30766,0,0,4348.11,42,4514.97,5,161.86,0,,,64,,,,,,,,84,,,,,,,,40,,,,,,,,136,,,,,,,,105,,,,,,,,121,,,,,,11.27771,9207.86147,341,4364.95752,4404.85,,140,,,,116.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:00:00",1,NSW1,0,62.74,0,62.74,0,0,11120.74,84,10486.93,57,-690.81,0,,,90,,,,,,,,130,,,,,,,,121,,,,,,,,104,,,,,,,,94,,,,,,,,86,,,,,,11.90476,15234.61166,57,11078.86523,11174.12,,10,,,,5.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0 +D,DREGION,,2,"2023/12/14 15:00:00",1,QLD1,0,59.57874,0,59.57874,0,0,7475.6,48,8210.57,50,684.97,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,65,,,,,,,,130,,,,,,,,86,,,,,,4.63505,11625.8171,50,7469.60303,7523.38,,8,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0 +D,DREGION,,2,"2023/12/14 15:00:00",1,SA1,0,-99.99,0,-99.99,0,0,696.58,-4,1059.28,11,351.7,0,,,109.29,,,,,,,,111,,,,,,,,80.02,,,,,,,,91,,,,,,,,86,,,,,,,,95.3,,,,,,0,2885.46645,110,729.34387,726.11,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0 +D,DREGION,,2,"2023/12/14 15:00:00",1,TAS1,0,11.08,0,11.08,0,0,1052.58,1,631.96,0,-420.62,0,,,0,,,,,,,,5,,,,,,,,6.64,,,,,,,,3,,,,,,,,98,,,,,,,,139.1,,,,,,3.06706,2463.17328,0,1048.51636,1052.58,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.86,0.86,0,0.86,0.86,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 15:00:00",1,VIC1,0,9,0,9,0,0,4415.43,39,4558.44,5,138.02,0,,,30,,,,,,,,81.5,,,,,,,,43,,,,,,,,155.2,,,,,,,,118.41,,,,,,,,120,,,,,,20.82691,9147.85292,343,4408.20459,4471,,122,,,,113.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0 +D,DREGION,,2,"2023/12/14 15:05:00",1,NSW1,0,55.67233,0,55.67233,0,0,11137.6,82,10706.22,34,-465.38,0,,,91,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,0,15660.54661,58,11103.62891,11160.78,,0,,,,16.67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:05:00",1,QLD1,0,54.75003,0,54.75003,0,0,7640.06,50,8193.72,50,503.66,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,18,,,,,,,,87,,,,,,,,86,,,,,,0,12011.07756,50,7636.21777,7684.89,,6,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:05:00",1,SA1,0,-99.99,0,-99.99,0,0,681.97,-3,1073.15,4,387.18,0,,,64.01,,,,,,,,115.19,,,,,,,,38.84,,,,,,,,90,,,,,,,,90,,,,,,,,89.65,,,,,,-16.1259,2832.11538,103,732.53027,706.93,,27,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:05:00",1,TAS1,0,10.09014,0,10.09014,0,0,1034.53,1,619.58,0,-414.94,0,,,1.68,,,,,,,,8.5,,,,,,,,19.71,,,,,,,,51.88,,,,,,,,93.88,,,,,,,,139.24,,,,,,-2.56771,2472.22856,0,1036.09387,1034.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.86,0.86,0,0.38,0.38,0,4.45986,4.45986,0 +D,DREGION,,2,"2023/12/14 15:05:00",1,VIC1,0,9.4199,0,9.4199,0,0,4481.11,37,4533,5,46.89,0,,,69.81,,,,,,,,69.81,,,,,,,,69.81,,,,,,,,149,,,,,,,,142,,,,,,,,120,,,,,,30.37611,9106.74826,342,4465.70508,4538.55,,127,,,,102.33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:10:00",1,NSW1,0,36.07,0,36.07,0,0,11259.1,80,10930.68,56,-384.42,0,,,91,,,,,,,,131,,,,,,,,112,,,,,,,,94,,,,,,,,108,,,,,,,,86,,,,,,30.95238,15660.13113,57,11177.06543,11306.04,,0,,,,10.26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0 +D,DREGION,,2,"2023/12/14 15:10:00",1,QLD1,0,36.43404,0,36.43404,0,0,7700.04,58,8119.83,50,369.79,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,18,,,,,,,,87,,,,,,,,86,,,,,,32.25277,12042.15818,50,7655.69092,7744.48,,2,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0 +D,DREGION,,2,"2023/12/14 15:10:00",1,SA1,0,-66.37,0,-66.37,0,0,673.27,-3,1076.75,3,400.49,0,,,25,,,,,,,,69.97,,,,,,,,30,,,,,,,,92,,,,,,,,92,,,,,,,,90.77,,,,,,-14.29215,2847.8053,100,716.01874,697.94,,44,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0 +D,DREGION,,2,"2023/12/14 15:10:00",1,TAS1,0,11.08,0,11.08,0,0,1029.47,1,622,0,-407.47,0,,,5.47,,,,,,,,8.5,,,,,,,,0,,,,,,,,60.71,,,,,,,,92.71,,,,,,,,138.95,,,,,,-3.57582,2457.66895,0,1032.04761,1029.47,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 15:10:00",1,VIC1,0,10.35428,0,10.35428,0,0,4502.15,36,4592.07,5,84.91,0,,,104.73,,,,,,,,114.73,,,,,,,,108.36,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,26.94116,9116.81307,345,4495.5835,4563.41,,114,,,,108.74,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0 +D,DREGION,,2,"2023/12/14 15:15:00",1,NSW1,0,54.27322,0,54.27322,0,0,11373.78,82,10992.51,32,-413.27,0,,,91,,,,,,,,131,,,,,,,,121.48,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,40.47619,15686.04635,57,11297.94824,11395.6,,10,,,,10.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:15:00",1,QLD1,0,54.55,0,54.55,0,0,7714.41,55,8177.68,50,413.27,0,,,0,,,,,,,,0,,,,,,,,2,,,,,,,,20,,,,,,,,88,,,,,,,,88,,,,,,27.58304,12034.97033,50,7676.16992,7758.61,,14,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:15:00",1,SA1,0,-66.37,0,-66.37,0,0,683.82,-1,1090.73,4,402.91,0,,,39.45,,,,,,,,86.83,,,,,,,,30,,,,,,,,92,,,,,,,,92,,,,,,,,90.3,,,,,,-4.15993,2804.20554,100,711.63062,709.25,,24,,,,35.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:15:00",1,TAS1,0,11.08,0,11.08,0,0,1052.98,1,646.5,0,-406.48,0,,,8,,,,,,,,8.5,,,,,,,,0,,,,,,,,50.44,,,,,,,,93.32,,,,,,,,139.02,,,,,,-3.87238,2464.98354,0,1055.85229,1052.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 15:15:00",1,VIC1,0,10.35428,0,10.35428,0,0,4549.97,35,4618.86,5,63.88,0,,,86.7,,,,,,,,96.7,,,,,,,,96.7,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,20.63452,9110.60262,344,4548.26025,4609.83,,112,,,,103,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:20:00",1,NSW1,0,63.53951,0,63.53951,0,0,11431.43,80,10963.23,56,-524.2,0,,,91,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,45.2381,15472.31591,57,11339.06543,11478.07,,10,,,,10.22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:20:00",1,QLD1,0,62.73,0,62.73,0,0,7777.9,53,8328.01,41,509.11,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,24.62252,12032.74104,50,7744.37598,7813.17,,14,,,,18.78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:20:00",1,SA1,0,-52.11,0,-52.11,0,0,713,0,1123.17,3,407.17,0,,,40.18,,,,,,,,90.13,,,,,,,,29,,,,,,,,90,,,,,,,,89,,,,,,,,87.49,,,,,,5.9723,2804.70347,101,730.89343,736.97,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:20:00",1,TAS1,0,10.57593,0,10.57593,0,0,1049.35,1,632.73,0,-416.62,0,,,0,,,,,,,,8.5,,,,,,,,10.48,,,,,,,,54.03,,,,,,,,98.48,,,,,,,,143.99,,,,,,-5.04884,2474.98702,0,1053.39917,1049.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,0.38,0.38,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 15:20:00",1,VIC1,0,8.71957,0,8.71957,0,0,4437,32,4527.94,5,85.94,0,,,89.51,,,,,,,,89.51,,,,,,,,89.51,,,,,,,,149,,,,,,,,142,,,,,,,,120,,,,,,12.08136,9079.37115,345,4458.7002,4497.52,,112,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 15:25:00",1,NSW1,0,86.3768,0,86.3768,0,0,11581.32,82,11108.64,56,-528.68,0,,,112,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,50,15526.95616,57,11503.68848,11627.26,,20,,,,16.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 15:25:00",1,QLD1,0,85.55,0,85.55,0,0,7892.02,58,8446.49,42,512.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,21.62112,12030.05075,50,7848.76074,7927.87,,14,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 15:25:00",1,SA1,0,-47,0,-47,0,0,695.1,3,1105.42,4,406.33,0,,,49.96,,,,,,,,105,,,,,,,,32,,,,,,,,92,,,,,,,,91,,,,,,,,81.93,,,,,,14.30065,2765.06618,104,703.22626,720.15,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 15:25:00",1,TAS1,0,11.08,0,11.08,0,0,1057.65,1,641.03,0,-416.62,0,,,0,,,,,,,,8.5,,,,,,,,28.54,,,,,,,,46.87,,,,,,,,94,,,,,,,,144.06,,,,,,-4.2486,2462.55817,0,1060.8938,1057.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 15:25:00",1,VIC1,0,8.95,0,8.95,0,0,4442.35,20,4534.38,5,87.03,0,,,58,,,,,,,,73.58,,,,,,,,68,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,7.60745,9091.20844,346,4479.45508,4503.03,,102,,,,102.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 15:30:00",1,NSW1,0,57.07077,0,57.07077,0,0,11568.26,81,10939.57,21,-649.69,0,,,112,,,,,,,,131,,,,,,,,112.91,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,0,15366.41026,58,11534.44434,11579.55,,10,,,,16.24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:30:00",1,QLD1,0,54.75,0,54.75,0,0,7873.05,59,8560.37,0,687.32,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,0,12137.24139,50,7851.92871,7868.58,,14,,,,34.76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:30:00",1,SA1,0,-47,0,-47,0,0,696.63,5,1108.55,3,408.92,0,,,37,,,,,,,,87.36,,,,,,,,43,,,,,,,,92,,,,,,,,92,,,,,,,,81.65,,,,,,0,2785.30824,102,720.13458,720.42,,17,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:30:00",1,TAS1,0,13.95,0,13.95,0,0,1064.71,1,703.89,0,-360.82,0,,,0,,,,,,,,8.5,,,,,,,,0,,,,,,,,35.13,,,,,,,,78.93,,,,,,,,144.29,,,,,,-4.26194,2474.88519,0,1067.96802,1064.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 15:30:00",1,VIC1,0,13.16698,0,13.16698,0,0,4456.21,19,4430.81,5,-30.41,0,,,74.65,,,,,,,,95.59,,,,,,,,95.59,,,,,,,,160,,,,,,,,153,,,,,,,,120,,,,,,0,9038.53643,346,4494.89502,4509.92,,119,,,,89,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:35:00",1,NSW1,0,299.99,0,299.99,0,0,11691.29,80,11747.95,0,56.67,0,,,139,,,,,,,,131,,,,,,,,142.34,,,,,,,,104,,,,,,,,75.79,,,,,,,,86,,,,,,33.73267,15363.61371,57,11588.92285,11687.02,,59.38,,,,53.75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0 +D,DREGION,,2,"2023/12/14 15:35:00",1,QLD1,0,273.10796,0,273.10796,0,0,7900.45,54,8869.29,0,968.84,0,,,0,,,,,,,,4.36,,,,,,,,0,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,33.19413,12199.40363,50,7807.5332,7903.01,,57,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0 +D,DREGION,,2,"2023/12/14 15:35:00",1,SA1,0,-54.99998,0,-54.99998,0,0,731.59,8,1146.53,6,408.94,0,,,25.19,,,,,,,,113,,,,,,,,28,,,,,,,,90,,,,,,,,90,,,,,,,,85.73,,,,,,16.24816,2738.29627,101,727.71289,758.39,,47,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0 +D,DREGION,,2,"2023/12/14 15:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1067.14,1,605.14,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,55.37,,,,,,,,139.38,,,,,,,,144.44,,,,,,-1.3768,2470.24328,0,1067.51721,1067.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 15:35:00",1,VIC1,0,-54.25,0,-54.25,0,0,4512.02,18,3749.47,142,-904.55,0,,,61.16,,,,,,,,71.16,,,,,,,,81.16,,,,,,,,146,,,,,,,,134,,,,,,,,120,,,,,,0,9051.99798,348,4547.49609,4702.82,,42,,,,66.25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0 +D,DREGION,,2,"2023/12/14 15:40:00",1,NSW1,0,153.28675,0,153.28675,0,0,11711.8,74,11648.49,9,-72.3,0,,,139,,,,,,,,158,,,,,,,,139,,,,,,,,93,,,,,,,,69.17,,,,,,,,75,,,,,,36.47089,15320.24826,10,11609.06641,11725.03,,40,,,,49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 15:40:00",1,QLD1,0,136.14,0,136.14,0,0,7992.97,47,9094.96,0,1102,0,,,0,,,,,,,,0,,,,,,,,16,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,38.98063,12144.00574,50,7914.3999,8000.01,,44.38,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 15:40:00",1,SA1,0,-55,0,-55,0,0,746.98,11,1150.51,16,387.52,0,,,29.52,,,,,,,,94.1,,,,,,,,29,,,,,,,,92,,,,,,,,90,,,,,,,,98.07,,,,,,18.69472,2791.32897,104,747.08264,783.24,,47,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 15:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,1039.49,2,577.49,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,66.36,,,,,,,,139.38,,,,,,,,144.47,,,,,,-7.93299,2481.49589,0,1045.42542,1039.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 15:40:00",1,VIC1,0,-52.68,0,-52.68,0,0,4610.88,28,3809.22,73,-874.65,0,,,53.66,,,,,,,,63.66,,,,,,,,66.63,,,,,,,,144,,,,,,,,140,,,,,,,,118,,,,,,-21.75955,8991.18702,328,4791.58496,4732.9,,74,,,,71,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 15:45:00",1,NSW1,0,137.69,0,137.69,0,0,11822.04,72,11891.75,10,59.71,0,,,136,,,,,,,,158,,,,,,,,139,,,,,,,,106,,,,,,,,89,,,,,,,,87,,,,,,21.69096,15284.85999,11,11727.8877,11831.7,,40,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0 +D,DREGION,,2,"2023/12/14 15:45:00",1,QLD1,0,124.27948,0,124.27948,0,0,8095.42,50,9121.66,0,1026.24,0,,,0,,,,,,,,20.57,,,,,,,,12,,,,,,,,21,,,,,,,,77,,,,,,,,77,,,,,,17.22364,12081.54828,50,8031.65918,8098.46,,42,,,,37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0 +D,DREGION,,2,"2023/12/14 15:45:00",1,SA1,0,-59.99,0,-59.99,0,0,760.56,14,1117.26,4,352.7,0,,,23,,,,,,,,56,,,,,,,,29,,,,,,,,92,,,,,,,,92,,,,,,,,125.42,,,,,,5.67006,2803.867,98,769.84943,783.06,,57,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0 +D,DREGION,,2,"2023/12/14 15:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1045.32,2,583.32,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,84.2,,,,,,,,146.46,,,,,,,,144.98,,,,,,-5.71658,2464.55247,0,1049.04041,1045.32,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 15:45:00",1,VIC1,0,-52.68,0,-52.68,0,0,4604.49,30,3721.58,25,-907.91,0,,,65.51,,,,,,,,83.58,,,,,,,,70.72,,,,,,,,116,,,,,,,,123,,,,,,,,90,,,,,,0,8882.45357,320,4687.84619,4677.04,,66.38,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0 +D,DREGION,,2,"2023/12/14 15:50:00",1,NSW1,0,-19.91211,0,-19.91211,0,0,11900.7,72,12775.02,10,864.32,0,,,139,,,,,,,,158,,,,,,,,139,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,27.34886,15434.42025,59,11809.36328,11916.83,,40,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 15:50:00",1,QLD1,0,-20.5,0,-20.5,0,0,8180.97,58,8620.9,0,439.93,0,,,0,,,,,,,,14.3,,,,,,,,31,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,6.57056,12034.85366,50,8118.31104,8182.67,,0,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 15:50:00",1,SA1,0,-59.99,0,-59.99,0,0,768.92,16,1126.74,7,350.82,0,,,22,,,,,,,,67,,,,,,,,27,,,,,,,,90,,,,,,,,90,,,,,,,,114.09,,,,,,-4.97365,2788.60029,103,780.37939,794.63,,97,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 15:50:00",1,TAS1,0,-40.01,0,-40.01,0,0,1045.99,2,583.99,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,93.92,,,,,,,,144.22,,,,,,,,145.13,,,,,,-2.13166,2473.98608,0,1046.1167,1045.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 15:50:00",1,VIC1,0,-52.69,0,-52.69,0,0,4648.96,29,3565.77,24,-1107.19,0,,,59.53,,,,,,,,74.92,,,,,,,,55.33,,,,,,,,116,,,,,,,,112,,,,,,,,90,,,,,,-16.0569,8947.96217,319,4711.03369,4732.3,,68.38,,,,63,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0 +D,DREGION,,2,"2023/12/14 15:55:00",1,NSW1,0,-36.51401,0,-36.51401,0,0,11899.79,70,13464.38,10,1554.6,0,,,92,,,,,,,,132,,,,,,,,122,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,0,15556.757,60,11857.10352,11953.43,,48,,,,7.48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:55:00",1,QLD1,0,-40.6,0,-40.6,0,0,8214.99,60,8266.21,0,51.22,0,,,28,,,,,,,,28,,,,,,,,36,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,-12.64976,12133.50985,50,8171.01221,8229.59,,0,,,,57.52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:55:00",1,SA1,0,-55,0,-55,0,0,777.85,16,1191.74,8,405.89,0,,,50.24,,,,,,,,69,,,,,,,,37.43,,,,,,,,89,,,,,,,,87,,,,,,,,88.11,,,,,,-3.83732,2807.87328,112,802.39935,807.06,,72.38,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 15:55:00",1,TAS1,0,-40.01,0,-40.01,0,0,1054.49,3,592.49,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,73.96,,,,,,,,139.38,,,,,,,,145.12,,,,,,-2.46747,2471.68375,0,1053.95813,1054.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 15:55:00",1,VIC1,0,-56.79,0,-56.79,0,0,4708.2,31,3343.28,21,-1385.92,0,,,50,,,,,,,,85.18,,,,,,,,50,,,,,,,,147,,,,,,,,133.13,,,,,,,,114,,,,,,-3.0083,8839.62591,319,4774.10498,4813.53,,85,,,,64,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:00:00",1,NSW1,0,-23.37255,0,-23.37255,0,0,11751.64,52,13605.71,41,1813.07,0,,,92,,,,,,,,159.1,,,,,,,,116.98,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,0,15674.40869,61,11755.74414,11853.92,,35,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0 +D,DREGION,,2,"2023/12/14 16:00:00",1,QLD1,0,-26.8,0,-26.8,0,0,8264.15,56,8186.1,33,-111.05,0,,,0,,,,,,,,0,,,,,,,,24,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,-0.15407,12224.65873,50,8222.11133,8318.45,,21,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0 +D,DREGION,,2,"2023/12/14 16:00:00",1,SA1,0,-54.99999,0,-54.99999,0,0,784.91,17,1195.78,4,406.87,0,,,68.17,,,,,,,,76,,,,,,,,30,,,,,,,,89,,,,,,,,89,,,,,,,,98.18,,,,,,0,2801.09486,104,803.94727,810.03,,87,,,,35.89,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0 +D,DREGION,,2,"2023/12/14 16:00:00",1,TAS1,0,-40.01,0,-40.01,0,0,1063.21,3,601.21,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,76.59,,,,,,,,139.38,,,,,,,,145.2,,,,,,-0.30733,2476.78169,0,1060.51245,1063.21,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.38,0.38,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 16:00:00",1,VIC1,0,-54.25,0,-54.25,0,0,4731.1,36,3326.8,47,-1451.31,0,,,60.5,,,,,,,,80.5,,,,,,,,80.5,,,,,,,,147,,,,,,,,131.77,,,,,,,,114,,,,,,0,8791.51349,319,4806.88965,4870,,62.38,,,,86.11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0 +D,DREGION,,2,"2023/12/14 16:05:00",1,NSW1,0,-68.26591,0,-68.26591,0,0,11972.63,54,13558.27,0,1585.64,0,,,56,,,,,,,,113.72,,,,,,,,86,,,,,,,,89,,,,,,,,84,,,,,,,,82,,,,,,25.11301,15691.68135,49,11972.62695,12019.4,,67,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 16:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,8355.42,59,8192.93,0,-162.49,0,,,17,,,,,,,,17,,,,,,,,31,,,,,,,,22,,,,,,,,89,,,,,,,,116,,,,,,0,12305.21169,50,8346.0332,8379.71,,32,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 16:05:00",1,SA1,0,-66.37,0,-66.37,0,0,798.48,17,1170.83,4,368.35,0,,,64.15,,,,,,,,100,,,,,,,,98.08,,,,,,,,124.68,,,,,,,,151.7,,,,,,,,161,,,,,,0.10588,2788.62842,100,803.94531,822.39,,70,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 16:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1067.86,3,605.86,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,152.55,,,,,,,,144.83,,,,,,5.98952,2473.62835,0,1058.87329,1067.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,56.46039,56.46039,0 +D,DREGION,,2,"2023/12/14 16:05:00",1,VIC1,0,-46.46,0,-46.46,0,0,4800.78,41,3697.64,69,-1172.14,0,,,83,,,,,,,,88,,,,,,,,35,,,,,,,,92,,,,,,,,62,,,,,,,,35.42,,,,,,17.38079,8801.44159,315,4847.8291,4936.17,,36.38,,,,90,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0 +D,DREGION,,2,"2023/12/14 16:10:00",1,NSW1,0,-66.6765,0,-66.6765,0,0,11945.12,59,13430.13,10,1475.01,0,,,55,,,,,,,,118.55,,,,,,,,85,,,,,,,,89,,,,,,,,84,,,,,,,,82,,,,,,11.04313,15617.72434,50,11918.51953,11993.74,,52,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 16:10:00",1,QLD1,0,-10,0,-10,0,0,8350.46,58,8302.74,50,-97.72,0,,,0,,,,,,,,0,,,,,,,,35,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,-16.53473,12347.03523,50,8333.03809,8420.96,,6.98,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 16:10:00",1,SA1,0,-66.67,0,-66.67,0,0,797.19,16,1165.73,4,364.54,0,,,47.62,,,,,,,,74,,,,,,,,48.4,,,,,,,,93,,,,,,,,93,,,,,,,,127.96,,,,,,-6.98156,2816.11583,107,817.32275,820.38,,50,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 16:10:00",1,TAS1,0,-36.91792,0,-36.91792,0,0,1080.39,3,652.8,0,-427.6,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,93.53,,,,,,,,144.46,,,,,,,,144.5,,,,,,4.94291,2464.8234,0,1072.45117,1080.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,53.36792,53.36792,0 +D,DREGION,,2,"2023/12/14 16:10:00",1,VIC1,0,-50.00997,0,-50.00997,0,0,4672.34,36,3556.37,60,-1175.97,0,,,121.61,,,,,,,,131.61,,,,,,,,83.61,,,,,,,,127,,,,,,,,123,,,,,,,,90,,,,,,22.10959,8578.74409,296,4729.63232,4792.3,,62,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0 +D,DREGION,,2,"2023/12/14 16:15:00",1,NSW1,0,-64.98634,0,-64.98634,0,0,12038.79,53,13497.84,0,1459.05,0,,,83,,,,,,,,123,,,,,,,,103,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,22.34997,15711.04399,50,12007.53418,12079.08,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 16:15:00",1,QLD1,0,5E-05,0,5E-05,0,0,8483.76,57,8379,27,-131.76,0,,,0,,,,,,,,0,,,,,,,,35,,,,,,,,21,,,,,,,,89,,,,,,,,116,,,,,,3.39543,12382.04415,50,8493.32227,8534.3,,3.38,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 16:15:00",1,SA1,0,-66.37,0,-66.37,0,0,786.77,14,1153.64,0,366.87,0,,,69.89,,,,,,,,76,,,,,,,,30,,,,,,,,93,,,,,,,,99.15,,,,,,,,95.09,,,,,,-11.68804,2852.49435,101,808.35175,806.27,,101,,,,34,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 16:15:00",1,TAS1,0,-40.01,0,-40.01,0,0,1094.83,3,632.83,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,152.69,,,,,,,,144.75,,,,,,10.81543,2464.48709,0,1081.01831,1094.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,56.46039,56.46039,0 +D,DREGION,,2,"2023/12/14 16:15:00",1,VIC1,0,-46.46,0,-46.46,0,0,4775.44,31,3718.1,32,-1089.34,0,,,70.67,,,,,,,,123.85,,,,,,,,83.11,,,,,,,,124.54,,,,,,,,115,,,,,,,,102,,,,,,20.25,8740.90411,262,4821.66895,4866.93,,71,,,,73,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/14 16:20:00",1,NSW1,0,30.09242,0,30.09242,0,0,12233.22,56,13620.93,0,1387.71,0,,,83,,,,,,,,147.41,,,,,,,,113,,,,,,,,81,,,,,,,,68.39,,,,,,,,74,,,,,,30.73712,15731.25724,50,12177.0625,12254.45,,30,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0 +D,DREGION,,2,"2023/12/14 16:20:00",1,QLD1,0,34.55,0,34.55,0,0,8501.13,57,8375.67,7,-132.47,0,,,0,,,,,,,,5,,,,,,,,35,,,,,,,,23,,,,,,,,92,,,,,,,,92,,,,,,18.73499,12422.1465,50,8471.5293,8520.94,,42,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0 +D,DREGION,,2,"2023/12/14 16:20:00",1,SA1,0,-52.11,0,-52.11,0,0,808.11,13,1210.01,0,401.9,0,,,43.1,,,,,,,,73,,,,,,,,65.44,,,,,,,,91,,,,,,,,91,,,,,,,,101,,,,,,-8.02678,2909.39792,102,823.52893,829.76,,70,,,,36,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0 +D,DREGION,,2,"2023/12/14 16:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1091.01,4,630.39,0,-460.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,81.09,,,,,,,,138,,,,,,,,144.39,,,,,,3.58523,2471.58518,0,1083.42322,1091.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,56.46,56.46,0 +D,DREGION,,2,"2023/12/14 16:20:00",1,VIC1,0,-50.00997,0,-50.00997,0,0,4815.33,31,3797.5,62,-1079.83,0,,,95.46,,,,,,,,95.46,,,,,,,,37.46,,,,,,,,146,,,,,,,,142,,,,,,,,120,,,,,,22.48528,8808.06722,246,4836.59961,4938.33,,62,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0 +D,DREGION,,2,"2023/12/14 16:25:00",1,NSW1,0,124.52756,0,124.52756,0,0,12322.12,59,13302.67,0,980.55,0,,,83,,,,,,,,123,,,,,,,,113,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,39.12427,15699.53455,50,12238.95508,12319.28,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0 +D,DREGION,,2,"2023/12/14 16:25:00",1,QLD1,0,136.14,0,136.14,0,0,8573.71,55,8675.46,1,100.75,0,,,0,,,,,,,,0,,,,,,,,36,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,30.93136,12427.20566,51,8505.90137,8576.28,,16,,,,24.86,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0 +D,DREGION,,2,"2023/12/14 16:25:00",1,SA1,0,-52.11,0,-52.11,0,0,807.45,13,1213.51,3,403.06,0,,,26,,,,,,,,84,,,,,,,,33.22,,,,,,,,92,,,,,,,,92,,,,,,,,101.89,,,,,,0.15783,2894.39953,109,817.35529,832,,93,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0 +D,DREGION,,2,"2023/12/14 16:25:00",1,TAS1,0,-40.01,0,-40.01,0,0,1092.74,3,651.12,0,-441.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,79.22,,,,,,,,119,,,,,,,,143.51,,,,,,1.11253,2463.75761,0,1088.62781,1092.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0 +D,DREGION,,2,"2023/12/14 16:25:00",1,VIC1,0,-41.11,0,-41.11,0,0,4915.12,30,3968.22,23,-969.9,0,,,116.2,,,,,,,,117.38,,,,,,,,68.49,,,,,,,,147,,,,,,,,152.4,,,,,,,,121,,,,,,19.48545,8917.63928,216,4955.44238,4990.67,,51,,,,90.14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0 +D,DREGION,,2,"2023/12/14 16:30:00",1,NSW1,0,499.37102,0,499.37102,0,0,12349.67,58,12978.3,0,628.63,0,,,83,,,,,,,,123,,,,,,,,103,,,,,,,,81,,,,,,,,71.68,,,,,,,,74,,,,,,0,15702.42226,50,12288.08984,12336.51,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:30:00",1,QLD1,0,136.14,0,136.14,0,0,8614.98,53,8821.4,26,180.42,0,,,0,,,,,,,,0,,,,,,,,36,,,,,,,,23,,,,,,,,89,,,,,,,,91,,,,,,0,12455.70219,51,8566.21582,8640.56,,3.57,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:30:00",1,SA1,0,-64.18599,0,-64.18599,0,0,827.63,13,1199.21,0,371.58,0,,,66.14,,,,,,,,75,,,,,,,,31,,,,,,,,92,,,,,,,,90,,,,,,,,101.11,,,,,,-6.75772,2921.39339,196,850.06152,846.65,,104,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:30:00",1,TAS1,0,8.89075,0,8.89075,0,0,1098.7,3,639.51,0,-459.19,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,66.17,,,,,,,,136.57,,,,,,,,143.14,,,,,,4.45509,2448.8217,0,1091.24841,1098.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.30362,8.30362,0,0.3,0.3,0,0.39,0.39,0,0,0,0,6.84318,6.84318,0 +D,DREGION,,2,"2023/12/14 16:30:00",1,VIC1,0,4.46115,0,4.46115,0,0,4783.09,22,4146.5,39,-675.59,0,,,75.95,,,,,,,,127.17,,,,,,,,82.01,,,,,,,,158,,,,,,,,143,,,,,,,,121,,,,,,18.9835,8871.56535,229,4820.68408,4862.5,,65,,,,73,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:35:00",1,NSW1,0,189.69969,0,189.69969,0,0,12322.56,48,12971.21,0,648.65,0,,,108,,,,,,,,177.7,,,,,,,,138,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,0,15799.6259,49,12270.37695,12323.69,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:35:00",1,QLD1,0,59.53,0,59.53,0,0,8724.08,51,8693.55,17,-47.53,0,,,0,,,,,,,,6,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,45.80029,12081.56055,50,8657.54688,8750.6,,26,,,,27.46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:35:00",1,SA1,0,-47,0,-47,0,0,834.48,13,1265.49,0,431.02,0,,,60.44,,,,,,,,75,,,,,,,,58.34,,,,,,,,90,,,,,,,,90,,,,,,,,104.1,,,,,,0,3057.12061,193,843.13641,847.49,,100,,,,42,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:35:00",1,TAS1,0,7.60161,0,7.60161,0,0,1095.72,3,638.16,0,-457.56,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,72.03,,,,,,,,134.94,,,,,,,,143.2,,,,,,3.48369,2447.18918,0,1089.23645,1095.72,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,8.84839,8.84839,0 +D,DREGION,,2,"2023/12/14 16:35:00",1,VIC1,0,0.02,0,0.02,0,0,4831.04,17,4324.42,18,-524.61,0,,,55.93,,,,,,,,65.93,,,,,,,,55.93,,,,,,,,157,,,,,,,,140.36,,,,,,,,121,,,,,,27.90617,8916.21705,210,4834.75879,4875.33,,64.94,,,,85.54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:40:00",1,NSW1,0,461.42305,0,461.42305,0,0,12455.63,41,12658.96,0,203.33,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,7.14286,15705.73144,50,12401.55957,12447.23,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:40:00",1,QLD1,0,85.75,0,85.75,0,0,8788.77,51,8925.36,1,135.59,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,44.00642,12212.26021,51,8714.93945,8792,,1,,,,70.51,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:40:00",1,SA1,0,-47,0,-47,0,0,840.42,13,1343.47,6,497.06,0,,,56.57,,,,,,,,69,,,,,,,,53.35,,,,,,,,92,,,,,,,,92,,,,,,,,103.08,,,,,,0,3114.0968,212,847.0022,858.47,,97.78,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:40:00",1,TAS1,0,10.57593,0,10.57593,0,0,1093.5,3,675.1,0,-418.4,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68.63,,,,,,,,128.98,,,,,,,,142.9,,,,,,3.70383,2435.50571,0,1086.79785,1093.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 16:40:00",1,VIC1,0,6.13933,0,6.13933,0,0,4820.8,15,4438.41,5,-387.39,0,,,61.04,,,,,,,,108.96,,,,,,,,61.04,,,,,,,,158,,,,,,,,144,,,,,,,,122,,,,,,9.51991,8816.36002,223,4840.19287,4850.09,,38,,,,44.49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:45:00",1,NSW1,0,501.8912,0,501.8912,0,0,12464.41,35,12484.92,5,15.52,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,0,15607.55354,52,12418.14941,12460.69,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:45:00",1,QLD1,0,114.8,0,114.8,0,0,8990.13,50,9202.33,7,205.2,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,45.00535,12028.57565,57,8895.28613,8997.36,,1,,,,64.31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:45:00",1,SA1,0,-35,0,-35,0,0,861.52,14,1405.02,6,537.5,0,,,48.47,,,,,,,,83,,,,,,,,47.46,,,,,,,,92,,,,,,,,92,,,,,,,,105.64,,,,,,0,3112.65233,218,861.00366,880.47,,91,,,,37.69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:45:00",1,TAS1,0,12.24327,0,12.24327,0,0,1094.57,2,677.95,0,-416.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,71.85,,,,,,,,131.8,,,,,,,,143.16,,,,,,-0.67503,2428.8093,0,1093.24524,1094.57,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 16:45:00",1,VIC1,0,8.95,0,8.95,0,0,4930.09,15,4625.36,3,-307.73,0,,,66.36,,,,,,,,91.78,,,,,,,,66.36,,,,,,,,157,,,,,,,,143,,,,,,,,121,,,,,,19.856,8846.59901,239,4923.25488,4962.5,,58,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:50:00",1,NSW1,0,125.35666,0,125.35666,0,0,12575.38,36,12254.91,0,-320.48,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,0,15515.60475,47,12534.74805,12570.26,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:50:00",1,QLD1,0,133.01,0,133.01,0,0,8978.17,48,9308.15,4,325.98,0,,,0,,,,,,,,15,,,,,,,,0,,,,,,,,23,,,,,,,,98.11,,,,,,,,86.3,,,,,,46.00428,11885.91388,54,8888.1582,8979.76,,40,,,,69.2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:50:00",1,SA1,0,-29.31,0,-29.31,0,0,856.1,13,1420.38,13,551.29,0,,,47.49,,,,,,,,69,,,,,,,,47.35,,,,,,,,92.46,,,,,,,,90,,,,,,,,112.13,,,,,,0,3083.46253,230,859.53406,883.23,,48,,,,39.2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:50:00",1,TAS1,0,21.38008,0,21.38008,0,0,1095.82,2,733.59,0,-362.22,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,72.4,,,,,,,,118.07,,,,,,,,142.75,,,,,,-3.85845,2430.94101,0,1097.67383,1095.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.13,9.13,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 16:50:00",1,VIC1,0,20.18,0,20.18,0,0,4939.83,21,4815.7,26,-150.13,0,,,67,,,,,,,,90.81,,,,,,,,67,,,,,,,,157,,,,,,,,154,,,,,,,,121,,,,,,28.30224,8803.47894,253,4922.43457,5003.66,,62,,,,46.6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0 +D,DREGION,,2,"2023/12/14 16:55:00",1,NSW1,0,122.52307,0,122.52307,0,0,12602.58,34,12326.32,0,-276.27,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,1.00305,15395.19802,47,12568.05078,12601.53,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:55:00",1,QLD1,0,131.75,0,131.75,0,0,9008.41,43,9283.4,0,274.99,0,,,0,,,,,,,,6,,,,,,,,0,,,,,,,,23,,,,,,,,80,,,,,,,,79,,,,,,47.00321,11769.49545,50,8922.44336,9008.19,,1,,,,58,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:55:00",1,SA1,0,-29.31,0,-29.31,0,0,855.61,13,1466.7,0,611.09,0,,,53.27,,,,,,,,89,,,,,,,,31.93,,,,,,,,91,,,,,,,,91,,,,,,,,118.03,,,,,,-8.43824,3122.29034,234,878.80927,872.22,,65,,,,49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 16:55:00",1,TAS1,0,12.24327,0,12.24327,0,0,1100.22,2,683.6,0,-416.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,80.13,,,,,,,,144.15,,,,,,,,142.83,,,,,,-7.06498,2434.22679,0,1105.28479,1100.22,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 16:55:00",1,VIC1,0,8.95,0,8.95,0,0,4966.23,19,4840.16,5,-131.07,0,,,63,,,,,,,,81.99,,,,,,,,83,,,,,,,,150,,,,,,,,144.71,,,,,,,,122,,,,,,26.31913,8844.3267,254,4978.5918,5018.03,,64,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:00:00",1,NSW1,0,105.381,0,105.381,0,0,12730.79,34,12536.32,0,-194.48,0,,,108,,,,,,,,148,,,,,,,,128,,,,,,,,79,,,,,,,,63,,,,,,,,69.18,,,,,,3.45294,15277.89948,47,12690.54492,12734.3,,20.47,,,,15,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:00:00",1,QLD1,0,115.75,0,115.75,0,0,9092.52,41,9293.13,0,200.6,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,187.18,,,,,,,,189,,,,,,40.63201,11790.3468,50,9009.03516,9095.14,,71,,,,58.23,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:00:00",1,SA1,0,-30,0,-30,0,0,879.25,14,1440.9,0,561.65,0,,,52.63,,,,,,,,43.01,,,,,,,,27,,,,,,,,90,,,,,,,,86,,,,,,,,78,,,,,,1.17524,3117.30253,237,879.18805,893.23,,34,,,,30,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:00:00",1,TAS1,0,11.08,0,11.08,0,0,1103.6,2,679.51,0,-424.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.27,,,,,,,,101.47,,,,,,,,101.47,,,,,,-13.56027,2442.78743,0,1115.15845,1103.6,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 17:00:00",1,VIC1,0,8.97697,0,8.97697,0,0,5071.99,23,4995.47,5,-81.51,0,,,61.38,,,,,,,,61.38,,,,,,,,47.42,,,,,,,,157,,,,,,,,95,,,,,,,,95,,,,,,33.58731,8926.82339,253,5062.03516,5119.05,,42,,,,66.77,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:05:00",1,NSW1,0,471.30713,0,471.30713,0,0,12645.38,26,12459.14,0,-186.25,0,,,86,,,,,,,,125,,,,,,,,105,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,18.60423,15300.4334,47,12597.51367,12651.83,,15,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:05:00",1,QLD1,0,93.75,0,93.75,0,0,9110.4,44,9307.61,0,197.21,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,193.33,,,,,,,,192,,,,,,22.06826,11808.6056,50,9043.44727,9114.92,,71,,,,82,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:05:00",1,SA1,0,7.18401,0,7.18401,0,0,899.69,16,1452.99,0,553.3,0,,,36,,,,,,,,40,,,,,,,,40,,,,,,,,114.28,,,,,,,,89,,,,,,,,78,,,,,,0.3631,3130.689,242,898.31555,914.07,,31,,,,41,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:05:00",1,TAS1,0,9.48225,0,9.48225,0,0,1104.28,2,740.46,0,-363.82,0,,,33.06,,,,,,,,16.41,,,,,,,,0,,,,,,,,103,,,,,,,,82.85,,,,,,,,128.19,,,,,,-13.53085,2451.47811,0,1115.80981,1104.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,49.96775,49.96775,0 +D,DREGION,,2,"2023/12/14 17:05:00",1,VIC1,0,8.95,0,8.95,0,0,5149.71,33,5018.76,5,-135.95,0,,,69.88,,,,,,,,74.44,,,,,,,,58.18,,,,,,,,162,,,,,,,,154,,,,,,,,123,,,,,,39.44824,8919.65127,277,5122.67578,5193.86,,43,,,,7,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:10:00",1,NSW1,0,478.48271,0,478.48271,0,0,12609.58,19,12423.07,0,-186.51,0,,,86,,,,,,,,105,,,,,,,,86,,,,,,,,20,,,,,,,,15,,,,,,,,13,,,,,,28.99362,15176.55358,47,12561.30957,12618.78,,5,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:10:00",1,QLD1,0,99.32,0,99.32,0,0,9095.06,34,9297.09,0,202.03,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,158.33,,,,,,,,157,,,,,,27.76072,11710.70142,50,9034.28613,9101.39,,55.3,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:10:00",1,SA1,0,7.22262,0,7.22262,0,0,940.77,18,1506.93,0,566.16,0,,,71.88,,,,,,,,27,,,,,,,,27,,,,,,,,115.85,,,,,,,,89,,,,,,,,99.24,,,,,,-1.23992,3186.79778,247,942.29883,955.86,,44,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:10:00",1,TAS1,0,9.6408,0,9.6408,0,0,1115.52,1,706.25,0,-409.27,0,,,7.35,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,130.29,,,,,,,,143.38,,,,,,-3.24247,2450.88829,0,1117.76587,1115.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.05,0.05,0,0.33374,0.33374,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:10:00",1,VIC1,0,9,0,9,0,0,5122.97,31,5032.82,8,-98.15,0,,,61.39,,,,,,,,66.39,,,,,,,,31.42,,,,,,,,162,,,,,,,,143,,,,,,,,123,,,,,,45.30917,8769.36754,275,5092.1792,5174.61,,55.7,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 17:15:00",1,NSW1,0,332.98701,0,332.98701,0,0,12703.27,15,12272.43,0,-430.84,0,,,86,,,,,,,,106,,,,,,,,97.4,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,39.383,14957.73688,47,12647.06836,12708.33,,5,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:15:00",1,QLD1,0,131.75,0,131.75,0,0,9131.93,26,9574.95,3,440.02,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,192.33,,,,,,,,191,,,,,,16.44073,11717.798,53,9088.77246,9139.05,,38.87,,,,157,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:15:00",1,SA1,0,7.57154,0,7.57154,0,0,976.18,20,1486.53,0,510.35,0,,,69.82,,,,,,,,27,,,,,,,,27,,,,,,,,106.84,,,,,,,,89,,,,,,,,95.09,,,,,,0,3169.52846,252,970.83862,988.44,,58.33,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:15:00",1,TAS1,0,13.59106,0,13.59106,0,0,1118.02,1,695.2,0,-422.82,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,126.26,,,,,,,,143.51,,,,,,-1.68433,2434.64561,0,1118.7085,1118.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.14,0.14,0,0.3,0.3,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:15:00",1,VIC1,0,8.95,0,8.95,0,0,5170.38,26,5134.69,1,-36.7,0,,,71.99,,,,,,,,66.56,,,,,,,,20,,,,,,,,132,,,,,,,,113,,,,,,,,93,,,,,,46.87278,8781.96092,283,5139.45801,5209.96,,64,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:20:00",1,NSW1,0,139.74537,0,139.74537,0,0,12757.9,11,12246.42,0,-511.48,0,,,86,,,,,,,,106,,,,,,,,73.19,,,,,,,,21,,,,,,,,7,,,,,,,,13,,,,,,45.01048,14824.325,47,12708.37305,12755,,26.4,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:20:00",1,QLD1,0,145.17,0,145.17,0,0,9139.58,23,9647.13,0,507.55,0,,,6.55,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,189.33,,,,,,,,191,,,,,,17.2826,11555.55003,50,9105.76953,9138.55,,69.14,,,,137,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:20:00",1,SA1,0,7.61266,0,7.61266,0,0,977.88,21,1479.41,0,501.54,0,,,23,,,,,,,,27,,,,,,,,27,,,,,,,,96.01,,,,,,,,83,,,,,,,,76,,,,,,-14.43525,3162.41348,258,983.88269,989.44,,34,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:20:00",1,TAS1,0,10.70483,0,10.70483,0,0,1125.26,1,686.1,0,-439.16,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,116.53,,,,,,,,132.32,,,,,,-0.30148,2426.45452,0,1124.56104,1125.26,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0,0,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:20:00",1,VIC1,0,8.95,0,8.95,0,0,5205.17,32,5192.64,0,-12.54,0,,,108,,,,,,,,62.86,,,,,,,,45,,,,,,,,162,,,,,,,,139.45,,,,,,,,123,,,,,,48.43639,8806.1152,288,5165.80615,5243.45,,53,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0 +D,DREGION,,2,"2023/12/14 17:25:00",1,NSW1,0,253.82375,0,253.82375,0,0,12805.67,10,12265.35,0,-540.32,0,,,86,,,,,,,,126,,,,,,,,108.6,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,18.93381,14906.76663,47,12779.7041,12801.17,,25,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:25:00",1,QLD1,0,262.32,0,262.32,0,0,9188.89,19,9722.67,0,533.78,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,185.68,,,,,,,,184.35,,,,,,23.54249,11627.80169,68,9146.18262,9186.85,,71,,,,171,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:25:00",1,SA1,0,7.73759,0,7.73759,0,0,1031.11,22,1490.21,0,459.1,0,,,53.17,,,,,,,,42,,,,,,,,42,,,,,,,,93.55,,,,,,,,91,,,,,,,,102.21,,,,,,0,3170.29065,262,1021.08997,1040.77,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:25:00",1,TAS1,0,9.52977,0,9.52977,0,0,1080.85,1,703.14,0,-377.7,0,,,28,,,,,,,,28.5,,,,,,,,0,,,,,,,,103,,,,,,,,131.46,,,,,,,,143.58,,,,,,-0.56648,2443.2894,0,1080.41272,1080.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:25:00",1,VIC1,0,8.95,0,8.95,0,0,5237.28,31,5195.49,0,-41.79,0,,,56,,,,,,,,59.27,,,,,,,,55,,,,,,,,132,,,,,,,,113,,,,,,,,93,,,,,,50,8685.73873,289,5193.97461,5267.22,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:30:00",1,NSW1,0,272.82123,0,272.82123,0,0,12748.57,8,12250.5,0,-498.07,0,,,87,,,,,,,,107,,,,,,,,72.9,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,26.19048,14589.5219,47,12710.73242,12746.06,,10,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 17:30:00",1,QLD1,0,285.75,0,285.75,0,0,9294.58,17,9789.37,0,494.79,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,152.33,,,,,,,,151,,,,,,32.35658,11574.05595,125,9243.07227,9293.81,,67.2,,,,137,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 17:30:00",1,SA1,0,7.73763,0,7.73763,0,0,1010.69,22,1464.66,0,453.97,0,,,39.46,,,,,,,,29,,,,,,,,29,,,,,,,,98.35,,,,,,,,92,,,,,,,,107,,,,,,-16.41207,3135.75358,268,1017.13397,1020.33,,34,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 17:30:00",1,TAS1,0,9.5062,0,9.5062,0,0,1076.1,2,699.45,0,-376.65,0,,,28,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.52,,,,,,,,143.85,,,,,,-1.04014,2433.73648,0,1075.13745,1076.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:30:00",1,VIC1,0,8.95018,0,8.95018,0,0,5206.23,30,5168.43,0,-37.8,0,,,71,,,,,,,,62.97,,,,,,,,45,,,,,,,,160,,,,,,,,154,,,,,,,,121,,,,,,0,8619.15461,291,5211.06543,5236.11,,48.8,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 17:35:00",1,NSW1,0,226.89335,0,226.89335,0,0,12857.79,3,12177.76,0,-680.02,0,,,87,,,,,,,,107,,,,,,,,106,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,0,14446.55463,47,12855.74609,12852.5,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 17:35:00",1,QLD1,0,228.81,0,228.81,0,0,9190.83,13,9863.12,0,672.3,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,193.33,,,,,,,,192,,,,,,0,11602.34943,125,9175.30762,9188.38,,79.65,,,,171,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 17:35:00",1,SA1,0,-16.68108,0,-16.68108,0,0,1030.51,22,1505.74,0,475.23,0,,,24,,,,,,,,28,,,,,,,,28,,,,,,,,90,,,,,,,,90,,,,,,,,78,,,,,,-19.08719,3258.74299,270,1038.60364,1045.74,,26.35,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 17:35:00",1,TAS1,0,-20.97544,0,-20.97544,0,0,1076.89,2,781.91,0,-294.97,0,,,26.45,,,,,,,,26.73,,,,,,,,0,,,,,,,,86.29,,,,,,,,82.25,,,,,,,,130.58,,,,,,-2.69482,2442.01454,0,1077.58191,1076.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:35:00",1,VIC1,0,-20.0493,0,-20.0493,0,0,5185.49,24,5057.6,0,-127.88,0,,,88.95,,,,,,,,98.95,,,,,,,,66.43,,,,,,,,151,,,,,,,,156,,,,,,,,123,,,,,,50,8720.71754,295,5149.57275,5222.63,,24,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 17:40:00",1,NSW1,0,662.96976,0,662.96976,0,0,12930.04,-1,12205.83,0,-724.21,0,,,87,,,,,,,,88.12,,,,,,,,66,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,35.71429,14458.6837,47,12896.04297,12924.69,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:40:00",1,QLD1,0,255.22961,0,255.22961,0,0,9245.92,8,9962.31,0,716.4,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,190.33,,,,,,,,190,,,,,,43.08641,11552.32105,125,9192.24023,9243.45,,63.9,,,,228,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:40:00",1,SA1,0,-23.79115,0,-23.79115,0,0,1044.55,21,1496.88,0,452.33,0,,,38,,,,,,,,42,,,,,,,,42,,,,,,,,92,,,,,,,,92,,,,,,,,80,,,,,,-12.77827,3244.11768,273,1053.71155,1062.03,,37.1,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:40:00",1,TAS1,0,-20.83107,0,-20.83107,0,0,1063.89,1,795.07,0,-268.81,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,30.11,,,,,,,,84.72,,,,,,,,132.05,,,,,,4.11296,2470.70647,0,1058.77344,1063.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:40:00",1,VIC1,0,-20.01289,0,-20.01289,0,0,5104.96,14,4987.39,8,-125.58,0,,,100.18,,,,,,,,70,,,,,,,,39.47,,,,,,,,152,,,,,,,,157,,,,,,,,124,,,,,,21.42857,8713.56963,301,5113.12598,5153.42,,29,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:45:00",1,NSW1,0,256.37849,0,256.37849,0,0,12997.29,-6,12378.62,0,-618.67,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,40.47619,14516.23251,47,12959.62793,12992.88,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:45:00",1,QLD1,0,262.31,0,262.31,0,0,9292.11,3,9904.5,0,612.39,0,,,0,,,,,,,,130,,,,,,,,100.24,,,,,,,,21,,,,,,,,188.27,,,,,,,,186.94,,,,,,47.36973,11440.80887,125,9239.02148,9290.24,,61.06,,,,228,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:45:00",1,SA1,0,-22.36712,0,-22.36712,0,0,1108.69,21,1560.68,0,451.99,0,,,38,,,,,,,,42,,,,,,,,42,,,,,,,,92,,,,,,,,92,,,,,,,,80,,,,,,0,3396.20531,277,1106.57861,1124.35,,47.94,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:45:00",1,TAS1,0,-19.76636,0,-19.76636,0,0,1063.27,-1,796.94,0,-266.32,0,,,12.71,,,,,,,,0,,,,,,,,0,,,,,,,,30.35,,,,,,,,90.14,,,,,,,,135.47,,,,,,10.92074,2456.24468,0,1053.34583,1063.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:45:00",1,VIC1,0,-18.99,0,-18.99,0,0,5145.32,11,5011.97,0,-133.35,0,,,103.71,,,,,,,,88.48,,,,,,,,44,,,,,,,,152,,,,,,,,154,,,,,,,,124,,,,,,0,8694.24339,301,5184.65332,5181.98,,21,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:50:00",1,NSW1,0,283.68148,0,283.68148,0,0,13030.84,-10,12387.15,0,-643.69,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,45.2381,14263.84227,47,12991.4043,13026.04,,15,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:50:00",1,QLD1,0,290.31,0,290.31,0,0,9290.27,3,9927.04,0,636.77,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,17,,,,,,,,151.33,,,,,,,,150,,,,,,48.98413,11275.61872,125,9236.02051,9288.16,,71,,,,332.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:50:00",1,SA1,0,7.6527,0,7.6527,0,0,1105.5,21,1560.46,0,454.97,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,85,,,,,,,,89,,,,,,,,110.22,,,,,,-2.67463,3377.55496,283,1103.0061,1115.75,,38,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:50:00",1,TAS1,0,9.36324,0,9.36324,0,0,1080.11,-1,786.94,0,-293.17,0,,,60,,,,,,,,69.47,,,,,,,,14.73,,,,,,,,3,,,,,,,,131.23,,,,,,,,143.34,,,,,,12.81763,2447.14143,0,1068.28882,1080.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:50:00",1,VIC1,0,8.94982,0,8.94982,0,0,5159.59,14,5034.69,0,-124.9,0,,,57.07,,,,,,,,61,,,,,,,,61,,,,,,,,101,,,,,,,,154,,,,,,,,124,,,,,,-7.58208,8640.83077,304,5189.26123,5186.24,,36,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 17:55:00",1,NSW1,0,279.20286,0,279.20286,0,0,13053.11,-13,12435.14,0,-617.96,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,11.3,,,,,,,,15,,,,,,,,13,,,,,,50,14201.95954,47,13012.37695,13048.66,,30,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:55:00",1,QLD1,0,285.75,0,285.75,0,0,9284.59,5,9896.21,0,611.62,0,,,0,,,,,,,,117.53,,,,,,,,97.53,,,,,,,,17,,,,,,,,151.33,,,,,,,,159.02,,,,,,49.51176,11205.27485,125,9227.60547,9282.69,,87,,,,321.08,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:55:00",1,SA1,0,0,0,0,0,0,1127.88,20,1623.52,0,495.64,0,,,40,,,,,,,,43,,,,,,,,43,,,,,,,,88,,,,,,,,113.73,,,,,,,,149,,,,,,2.99107,3407.8997,289,1116.67139,1143.37,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 17:55:00",1,TAS1,0,0.42182,0,0.42182,0,0,1084.65,-1,792.11,0,-292.54,0,,,4.57,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,143.26,,,,,,7.10344,2451.20623,0,1078.54211,1084.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,7.11778,7.11778,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 17:55:00",1,VIC1,0,0.4032,0,0.4032,0,0,5114.02,10,4964.04,0,-149.98,0,,,112.32,,,,,,,,103.26,,,,,,,,46.92,,,,,,,,111,,,,,,,,113,,,,,,,,83,,,,,,4.39589,8607.03883,310,5130.05615,5151.65,,23,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 18:00:00",1,NSW1,0,272.23827,0,272.23827,0,0,12950.27,-21,12563.45,0,-386.82,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,50,14089.71754,47,12912.91699,12945.01,,22,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 18:00:00",1,QLD1,0,285.75,0,285.75,0,0,9339.51,3,9831.14,0,491.63,0,,,0,,,,,,,,95,,,,,,,,85,,,,,,,,17,,,,,,,,132.33,,,,,,,,132,,,,,,44.03282,11107.37262,125,9290.45117,9339.55,,82,,,,319.37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 18:00:00",1,SA1,0,45.57032,0,45.57032,0,0,1170.59,19,1579.25,0,408.65,0,,,40,,,,,,,,43,,,,,,,,43,,,,,,,,86,,,,,,,,108.53,,,,,,,,139.41,,,,,,10.98487,3385.59663,292,1155.93518,1178.17,,20,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 18:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1076.98,-1,848.21,0,-228.77,0,,,54.63,,,,,,,,63.89,,,,,,,,0,,,,,,,,3,,,,,,,,153.77,,,,,,,,143.23,,,,,,6.6128,2448.18627,0,1071.36255,1076.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,7.61057,7.61057,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 18:00:00",1,VIC1,0,51.86857,0,51.86857,0,0,5153.08,5,4884.41,0,-268.67,0,,,61.41,,,,,,,,61.41,,,,,,,,59.96,,,,,,,,117,,,,,,,,147,,,,,,,,129,,,,,,2.17977,8382.04754,316,5176.33984,5166.76,,36,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 18:05:00",1,NSW1,0,358.02232,0,358.02232,0,0,13014.44,-23,12460.21,0,-554.23,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,19.33,,,,,,,,15,,,,,,,,13,,,,,,50,13970.49855,0,12979.94922,13011.75,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 18:05:00",1,QLD1,0,371.02009,0,371.02009,0,0,9276.24,4,9829.03,0,552.79,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,17,,,,,,,,130.5,,,,,,,,130.53,,,,,,30.69521,11030.67265,75,9239.82031,9275.5,,91,,,,313.65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 18:05:00",1,SA1,0,48.39572,0,48.39572,0,0,1166.8,18,1601.08,0,434.27,0,,,67.81,,,,,,,,29,,,,,,,,29,,,,,,,,87,,,,,,,,160.92,,,,,,,,163,,,,,,2.89655,3403.73725,296,1155.55322,1175.24,,29,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 18:05:00",1,TAS1,0,56,0,56,0,0,1077.19,-1,924.96,0,-152.23,0,,,60,,,,,,,,76.48,,,,,,,,19.54,,,,,,,,3,,,,,,,,102.22,,,,,,,,102.22,,,,,,-0.69082,2462.49826,0,1078.87903,1077.19,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.3,0.3,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 18:05:00",1,VIC1,0,55.08433,0,55.08433,0,0,5180.44,4,4967.84,45,-257.6,0,,,30,,,,,,,,30,,,,,,,,30,,,,,,,,113,,,,,,,,141,,,,,,,,140.89,,,,,,16.52342,8402.65505,337,5177.23291,5243.44,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/14 18:10:00",1,NSW1,0,178.69508,0,178.69508,0,0,12818.33,-25,12428.06,0,-390.27,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,6,,,,,,,,15,,,,,,,,13,,,,,,0,13816.5579,47,12837.42578,12820.75,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 18:10:00",1,QLD1,0,190.74,0,190.74,0,0,9194.31,-1,9589.33,0,395.02,0,,,28,,,,,,,,130,,,,,,,,110,,,,,,,,17,,,,,,,,191.33,,,,,,,,191,,,,,,0,10953.89901,125,9194.1416,9196.63,,34.14,,,,303,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 18:10:00",1,SA1,0,43.60546,0,43.60546,0,0,1204.83,18,1649.76,0,444.93,0,,,58.94,,,,,,,,29,,,,,,,,29,,,,,,,,84.09,,,,,,,,79,,,,,,,,80.58,,,,,,0,3454.6145,298,1199.39075,1213.71,,52.86,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 18:10:00",1,TAS1,0,52.08,0,52.08,0,0,1077.33,-1,792.03,0,-285.3,0,,,0,,,,,,,,25.85,,,,,,,,0,,,,,,,,3,,,,,,,,104.52,,,,,,,,143.41,,,,,,1.27026,2436.41058,0,1077.06018,1077.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,9.11,9.11,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 18:10:00",1,VIC1,0,49.90715,0,49.90715,0,0,5157.19,4,5062.61,33,-127.58,0,,,71,,,,,,,,81,,,,,,,,51.31,,,,,,,,104,,,,,,,,158.13,,,,,,,,120,,,,,,0,8442.73954,338,5210.94775,5213.36,,53,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 18:15:00",1,NSW1,0,216.98402,0,216.98402,0,0,12883.46,-30,12446.34,0,-437.12,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,43.52828,13717.13118,47,12867.56738,12883.49,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:15:00",1,QLD1,0,228.81,0,228.81,0,0,9207.49,-3,9645.48,0,437.98,0,,,0,,,,,,,,95,,,,,,,,85,,,,,,,,17,,,,,,,,131.33,,,,,,,,131,,,,,,-2.8901,10923.52497,125,9213.3457,9208.32,,81,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:15:00",1,SA1,0,45.18452,0,45.18452,0,0,1209.1,17,1663.35,0,454.24,0,,,48.35,,,,,,,,42,,,,,,,,42,,,,,,,,87.22,,,,,,,,99.25,,,,,,,,143.01,,,,,,11.38126,3501.46488,298,1190.57983,1218.34,,18,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:15:00",1,TAS1,0,53.57593,0,53.57593,0,0,1072.12,0,829.7,0,-242.42,0,,,60,,,,,,,,79.48,,,,,,,,20.03,,,,,,,,3,,,,,,,,153.77,,,,,,,,143.35,,,,,,-7.12323,2427.80489,0,1079.24646,1072.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,7.61057,7.61057,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 18:15:00",1,VIC1,0,51.73558,0,51.73558,0,0,5164.11,5,5002.72,19,-180.39,0,,,49,,,,,,,,49,,,,,,,,49,,,,,,,,104,,,,,,,,154,,,,,,,,123,,,,,,40.4488,8320.72187,339,5167.28662,5205.3,,41,,,,19,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:20:00",1,NSW1,0,183.569,0,183.569,0,0,12774.67,-31,12265.2,0,-509.46,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,0,13597.01695,47,12801.52441,12772.78,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:20:00",1,QLD1,0,190.74,0,190.74,0,0,9111.99,-7,9619.21,0,507.22,0,,,11.87,,,,,,,,130,,,,,,,,110,,,,,,,,19,,,,,,,,133.33,,,,,,,,132,,,,,,0,10905.36651,125,9117.94629,9111.63,,81,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:20:00",1,SA1,0,20.66,0,20.66,0,0,1237.91,16,1596.06,4.77,353.38,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,87,,,,,,,,118.9,,,,,,,,163,,,,,,0,3507.1216,298,1229.87195,1248.29,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:20:00",1,TAS1,0,24.20102,0,24.20102,0,0,1079.61,0,766.71,0,-312.89,0,,,60,,,,,,,,48.22,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,143.32,,,,,,-5.98604,2426.81432,0,1085.59534,1079.61,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,7.11778,7.11778,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 18:20:00",1,VIC1,0,23.01564,0,23.01564,0,0,5088.83,1,5101.59,30,-17.24,0,,,51,,,,,,,,51,,,,,,,,46.77,,,,,,,,84.1,,,,,,,,129,,,,,,,,99.14,,,,,,0,8353.5867,340,5121.77295,5136.47,,39,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:25:00",1,NSW1,0,280.09952,0,280.09952,0,0,12846.61,-36,12230.65,0,-615.95,0,,,69,,,,,,,,68,,,,,,,,67,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,26.78506,13455.329,47,12855.20117,12842.05,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:25:00",1,QLD1,0,285.75,0,285.75,0,0,9136.49,-10,9745.87,0,609.39,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,19,,,,,,,,153.33,,,,,,,,153,,,,,,4.3985,10895.77519,125,9140.44238,9134.47,,80.63,,,,319.48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:25:00",1,SA1,0,46.68689,0,46.68689,0,0,1262.46,16,1600.88,0,338.42,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,74,,,,,,,,92,,,,,,,,120.13,,,,,,6.82236,3360.88497,298,1249.82312,1267.55,,21.37,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:25:00",1,TAS1,0,53.57593,0,53.57593,0,0,1069.33,0,831.76,0,-237.57,0,,,59.82,,,,,,,,31.84,,,,,,,,0,,,,,,,,3,,,,,,,,138.16,,,,,,,,143.36,,,,,,-3.03235,2449.32048,0,1072.36279,1069.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,7.61098,7.61098,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 18:25:00",1,VIC1,0,51.73558,0,51.73558,0,0,5148.96,0,5093.47,27,-82.49,0,,,60,,,,,,,,65,,,,,,,,45.28,,,,,,,,107,,,,,,,,157,,,,,,,,126,,,,,,47.63432,8308.46833,340,5142.45215,5189.24,,38,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 18:30:00",1,NSW1,0,254.00486,0,254.00486,0,0,12815.14,-32,12259.5,0,-555.64,0,,,69,,,,,,,,68,,,,,,,,67,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,28.69815,13359.03182,47,12812.8418,12811.21,,9,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:30:00",1,QLD1,0,262.33,0,262.33,0,0,9143.8,-7,9693.87,0,550.06,0,,,0,,,,,,,,130,,,,,,,,53.91,,,,,,,,19,,,,,,,,182.52,,,,,,,,179.52,,,,,,17.48889,10878.72418,125,9130.99316,9142.15,,81,,,,332.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:30:00",1,SA1,0,89.88629,0,89.88629,0,0,1253.24,16,1538.64,0,285.4,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,87,,,,,,,,139,,,,,,,,165,,,,,,0.33348,3298.64088,299,1242.2677,1256.82,,10,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:30:00",1,TAS1,0,98.18,0,98.18,0,0,1066.82,0,956.17,0,-110.65,0,,,44.98,,,,,,,,57.09,,,,,,,,57.09,,,,,,,,3,,,,,,,,60.65,,,,,,,,60.65,,,,,,-5.82591,2438.51825,0,1072.65088,1066.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 18:30:00",1,VIC1,0,98.03565,0,98.03565,0,0,5234,2,5070.16,0,-163.84,0,,,76,,,,,,,,41.03,,,,,,,,35,,,,,,,,109,,,,,,,,159,,,,,,,,138,,,,,,50,8255.16047,341,5215.97119,5241.33,,60,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:35:00",1,NSW1,0,173.7398,0,173.7398,0,0,12789.39,-32,12441.26,0,-348.13,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,33.66086,13284.89504,47,12781.8916,12789.59,,7,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:35:00",1,QLD1,0,185.19,0,185.19,0,0,9146.87,-8,9524.81,0,377.94,0,,,0,,,,,,,,130,,,,,,,,94.79,,,,,,,,19,,,,,,,,133.33,,,,,,,,133,,,,,,8.13131,10884.23978,125,9144.27539,9148.35,,101,,,,318.03,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:35:00",1,SA1,0,47.80801,0,47.80801,0,0,1275.13,15,1551.67,0,276.54,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,87,,,,,,,,100.76,,,,,,,,137.8,,,,,,-7.14611,3361.59957,299,1271.06177,1278.48,,10,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:35:00",1,TAS1,0,53.57593,0,53.57593,0,0,1080.87,1,857.97,0,-222.9,0,,,53.2,,,,,,,,25.62,,,,,,,,0,,,,,,,,3,,,,,,,,147.79,,,,,,,,144.08,,,,,,3.11259,2439.41053,0,1076.75305,1080.87,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,9.11,9.11,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 18:35:00",1,VIC1,0,51.86857,0,51.86857,0,0,5254.4,8,5204.94,21,-70.47,0,,,68,,,,,,,,73,,,,,,,,53,,,,,,,,118.43,,,,,,,,159,,,,,,,,128,,,,,,49.09615,8190.8186,342,5205.86914,5283.37,,42,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:40:00",1,NSW1,0,172.64163,0,172.64163,0,0,12744.32,-33,12400.4,0,-343.93,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,38.62357,13159.04786,47,12740.23535,12746.7,,18,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:40:00",1,QLD1,0,185.19,0,185.19,0,0,9159.51,-3,9528.02,20,348.51,0,,,0,,,,,,,,130,,,,,,,,78.7,,,,,,,,19,,,,,,,,133.33,,,,,,,,133,,,,,,-7.11217,10873.94897,125,9169.89258,9181.71,,101,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:40:00",1,SA1,0,48.41746,0,48.41746,0,0,1298.35,15,1577.41,0,279.05,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,89,,,,,,,,95.11,,,,,,,,133.76,,,,,,-3.96673,3373.40608,298,1291.23975,1301.77,,21,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:40:00",1,TAS1,0,54.08,0,54.08,0,0,1062.93,1,858.05,0,-204.89,0,,,17,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,148.9,,,,,,0,2427.0897,0,1061.93396,1062.93,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,7.11778,7.11778,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 18:40:00",1,VIC1,0,52.62713,0,52.62713,0,0,5195.91,7,5140.88,7,-62.02,0,,,104,,,,,,,,98.91,,,,,,,,79,,,,,,,,117.76,,,,,,,,159,,,,,,,,128,,,,,,49.24679,8096.48267,345,5171.10205,5211.63,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 18:45:00",1,NSW1,0,213.10754,0,213.10754,0,0,12720.59,-34,12447.6,0,-272.99,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,15.07,,,,,,,,24,,,,,,,,24.67,,,,,,42.29194,13052.56493,47,12708.88379,12720.56,,5,,,,40,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 18:45:00",1,QLD1,0,228.81,0,228.81,0,0,9237.39,-1,9576.86,0,339.47,0,,,0,,,,,,,,73.35,,,,,,,,17.9,,,,,,,,19,,,,,,,,164.33,,,,,,,,163,,,,,,0,10860.54524,125,9255.18066,9239.38,,109.72,,,,318,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 18:45:00",1,SA1,0,174.84,0,174.84,0,0,1335.11,15,1590.63,11,244.52,0,,,27,,,,,,,,30,,,,,,,,30,,,,,,,,88,,,,,,,,140,,,,,,,,167,,,,,,-3.48157,3449.41966,299,1326.08984,1348.7,,22,,,,10,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 18:45:00",1,TAS1,0,169.92484,0,169.92484,0,0,1075.59,1,998.69,0,-76.9,0,,,56.57,,,,,,,,90.81,,,,,,,,90.81,,,,,,,,0,,,,,,,,26.89,,,,,,,,26.89,,,,,,3.74743,2418.49457,0,1070.84363,1075.59,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,80.85484,80.85484,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 18:45:00",1,VIC1,0,187.71676,0,187.71676,0,0,5276.89,6,5049.88,0,-227.01,0,,,70,,,,,,,,70,,,,,,,,70,,,,,,,,143,,,,,,,,204.33,,,,,,,,178,,,,,,49.39743,7991.87784,346,5232.66406,5279.44,,23.28,,,,0,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 18:50:00",1,NSW1,0,134.65222,0,134.65222,0,0,12617.53,-33,12361.29,0,-256.24,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,18.35,,,,,,,,29.4,,,,,,,,32.73,,,,,,0,12913.36263,47,12647.82324,12618.65,,15,,,,40,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 18:50:00",1,QLD1,0,145.20003,0,145.20003,0,0,9149.83,1,9463.35,0,313.53,0,,,0,,,,,,,,130,,,,,,,,85.53,,,,,,,,23,,,,,,,,164.33,,,,,,,,167,,,,,,-5.12799,10854.24846,125,9153.85449,9152.27,,101,,,,318,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 18:50:00",1,SA1,0,139.44,0,139.44,0,0,1340.45,15,1575.52,13.56,221.51,0,,,39.11,,,,,,,,41,,,,,,,,41,,,,,,,,88,,,,,,,,137,,,,,,,,166,,,,,,0,3421.0059,299,1340.01526,1356.11,,47,,,,10,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 18:50:00",1,TAS1,0,98.2,0,98.2,0,0,1095.75,1,1095.75,0,0,0,,,17.6,,,,,,,,117.6,,,,,,,,117.6,,,,,,,,34.58,,,,,,,,134.57,,,,,,,,134.57,,,,,,7.23069,2403.78327,0,1087.51819,1095.75,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,35.13,35.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 18:50:00",1,VIC1,0,148.93068,0,148.93068,0,0,5257.34,7,4986.59,0,-270.75,0,,,116,,,,,,,,95.49,,,,,,,,81,,,,,,,,156,,,,,,,,223,,,,,,,,188,,,,,,0,7934.58652,348,5257.74609,5259.72,,47,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0 +D,DREGION,,2,"2023/12/14 18:55:00",1,NSW1,0,255.30468,0,255.30468,0,0,12623.72,-39,12138.57,0,-485.15,0,,,43,,,,,,,,42,,,,,,,,40,,,,,,,,49,,,,,,,,52,,,,,,,,71,,,,,,49.56434,12789.15149,47,12614.20117,12619.61,,23,,,,0,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 18:55:00",1,QLD1,0,266.65,0,266.65,0,0,9140.14,-1,9624.06,0,483.92,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,147.28,,,,,,,,158.95,,,,,,-17.79483,10865.22228,125,9160.05273,9138.37,,81,,,,318,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 18:55:00",1,SA1,0,67.31885,0,67.31885,0,0,1362.95,15,1585.74,0,222.79,0,,,57.1,,,,,,,,30,,,,,,,,30,,,,,,,,141.34,,,,,,,,175,,,,,,,,169,,,,,,-1.5469,3398.74465,299,1365.01904,1365.08,,22,,,,10,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 18:55:00",1,TAS1,0,70.12,0,70.12,0,0,1093.5,0,1111.17,0,17.67,0,,,17.66,,,,,,,,117.66,,,,,,,,117.66,,,,,,,,32.79,,,,,,,,132.79,,,,,,,,132.79,,,,,,12.72592,2407.77888,0,1080.77197,1093.47,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.56,3.56,0 +D,DREGION,,2,"2023/12/14 18:55:00",1,VIC1,0,71.90092,0,71.90092,0,0,5257.03,8,5018.74,0,-238.29,0,,,126,,,,,,,,134.46,,,,,,,,88.4,,,,,,,,114,,,,,,,,179.42,,,,,,,,154.76,,,,,,26.84142,7877.74252,349,5227.58154,5261.77,,84,,,,0,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:00:00",1,NSW1,0,275.22695,0,275.22695,0,0,12575.55,-34,12070.15,0,-505.41,0,,,43.9,,,,,,,,70.51,,,,,,,,40,,,,,,,,50,,,,,,,,53,,,,,,,,71,,,,,,21.42857,12734.78751,47,12589.42969,12571.35,,35,,,,0,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:00:00",1,QLD1,0,285.75,0,285.75,0,0,9200.35,1,9699.66,0,499.3,0,,,28,,,,,,,,149,,,,,,,,110,,,,,,,,21,,,,,,,,121.94,,,,,,,,127,,,,,,-0.59795,10875.21808,125,9198.74023,9198.45,,88,,,,318,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:00:00",1,SA1,0,68.83514,0,68.83514,0,0,1371.96,14,1590.71,22,196.75,0,,,99,,,,,,,,57,,,,,,,,64.69,,,,,,,,90,,,,,,,,177,,,,,,,,170,,,,,,-5.30611,3403.70874,300,1367.63953,1395.56,,28,,,,10,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:00:00",1,TAS1,0,70.18,0,70.18,0,0,1108.71,0,1212.95,0,104.25,0,,,17.66,,,,,,,,117.66,,,,,,,,117.66,,,,,,,,31.47,,,,,,,,131.46,,,,,,,,131.46,,,,,,17.23697,2408.90159,0,1091.46936,1109.42,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:00:00",1,VIC1,0,73.12884,0,73.12884,0,0,5187.4,7,4894.65,0,-292.75,0,,,55,,,,,,,,60,,,,,,,,55,,,,,,,,163.33,,,,,,,,202,,,,,,,,185.94,,,,,,23.25481,7846.6517,352,5166.84668,5193.34,,59,,,,1,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:05:00",1,NSW1,0,181.61968,0,181.61968,0,0,12485.01,-37,11927.06,0,-557.95,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,86,,,,,,,,53,,,,,,,,57,,,,,,0,12688.08516,47,12519.34766,12486.68,,0,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:05:00",1,QLD1,0,190.74,0,190.74,0,0,9165.95,-2,9610.41,0,444.46,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,130.33,,,,,,,,133,,,,,,0,10855.68149,125,9165.76855,9165,,81,,,,108,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:05:00",1,SA1,0,99.98,0,99.98,0,0,1385.63,14,1702.67,25,292.05,0,,,43.56,,,,,,,,28,,,,,,,,28,,,,,,,,90,,,,,,,,80.87,,,,,,,,136,,,,,,-10.75058,3496.77757,309,1404.69861,1414.4,,22,,,,30,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:05:00",1,TAS1,0,103.02839,0,103.02839,0,0,1119.87,0,1295.42,0,175.55,0,,,60,,,,,,,,47.53,,,,,,,,0,,,,,,,,81.53,,,,,,,,152.3,,,,,,,,92.5,,,,,,19.93618,2415.4214,0,1101.08447,1122.31,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,9.11,9.11,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 19:05:00",1,VIC1,0,109.06503,0,109.06503,0,0,5178.36,0,4854.43,6,-329.93,0,,,54,,,,,,,,64,,,,,,,,55.75,,,,,,,,154,,,,,,,,137,,,,,,,,135,,,,,,22.42688,7765.26716,409,5163.20605,5201.6,,57,,,,21,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:10:00",1,NSW1,0,172.4309,0,172.4309,0,0,12393.03,-40,11751.85,0,-641.18,0,,,71,,,,,,,,69,,,,,,,,67,,,,,,,,86,,,,,,,,89,,,,,,,,57,,,,,,-12.22798,12578.2991,47,12446.82031,12396.3,,0,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:10:00",1,QLD1,0,179.65125,0,179.65125,0,0,9103.72,-2,9572.09,0,468.37,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,134.99,,,,,,,,134,,,,,,1.63975,10854.71019,125,9102.25977,9102.16,,77.89,,,,107,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:10:00",1,SA1,0,140.99,0,140.99,0,0,1396.66,13,1739.45,0,342.79,0,,,31,,,,,,,,31,,,,,,,,31,,,,,,,,166.47,,,,,,,,119,,,,,,,,138,,,,,,-2.48081,3432.7021,315,1410.49597,1401.93,,34,,,,15,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:10:00",1,TAS1,0,144.99248,0,144.99248,0,0,1116.99,0,1391.03,0,274.04,0,,,36.19,,,,,,,,9.46,,,,,,,,0,,,,,,,,3,,,,,,,,55.75,,,,,,,,96.74,,,,,,12.25477,2406.97747,0,1108.35156,1123.39,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,38.92248,38.92248,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0 +D,DREGION,,2,"2023/12/14 19:10:00",1,VIC1,0,156.29516,0,156.29516,0,0,5244.32,-1,4864.35,25,-404.97,0,,,87,,,,,,,,97,,,,,,,,59.72,,,,,,,,156,,,,,,,,160,,,,,,,,133,,,,,,28.059,7750.2283,431,5231.86475,5294.98,,48.11,,,,40,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:15:00",1,NSW1,0,184.24997,0,184.24997,0,0,12334.07,-48,11583.26,0,-750.82,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,86,,,,,,,,53,,,,,,,,57,,,,,,-27.93726,12491.81786,47,12416.22754,12339.84,,20,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:15:00",1,QLD1,0,190.74,0,190.74,0,0,9112.61,-6,9619.41,0,506.8,0,,,0,,,,,,,,95,,,,,,,,33.57,,,,,,,,26,,,,,,,,193.33,,,,,,,,196,,,,,,-11.51442,10839.452,125,9128.74316,9110.43,,82,,,,152,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:15:00",1,SA1,0,148.52315,0,148.52315,0,0,1421.3,12,1761.26,0,339.96,0,,,44,,,,,,,,44,,,,,,,,44,,,,,,,,100.9,,,,,,,,94.3,,,,,,,,141.83,,,,,,5.18451,3383.44553,321,1409.3645,1426.48,,20,,,,15,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:15:00",1,TAS1,0,148.46548,0,148.46548,0,0,1116.03,0,1511.76,0,395.73,0,,,21.86,,,,,,,,37.39,,,,,,,,37.39,,,,,,,,24,,,,,,,,73.7,,,,,,,,15.51,,,,,,7.93187,2395.7106,0,1116.58618,1129.71,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,39.39548,39.39548,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:15:00",1,VIC1,0,164.47803,0,164.47803,0,0,5252.93,4,4841.1,25,-436.83,0,,,88,,,,,,,,89.91,,,,,,,,86,,,,,,,,167,,,,,,,,144,,,,,,,,148,,,,,,31.22072,7717.1035,428,5246.71387,5310.34,,38,,,,25,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:20:00",1,NSW1,0,175.75927,0,175.75927,0,0,12197.59,-45,11521.23,0,-676.36,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,84,,,,,,,,79,,,,,,,,84,,,,,,-39.37061,12447.0849,47,12292.09375,12207.74,,20,,,,0,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 19:20:00",1,QLD1,0,185.19,0,185.19,0,0,9111.72,-8,9527.94,0,416.22,0,,,0,,,,,,,,121.47,,,,,,,,39.03,,,,,,,,24,,,,,,,,124.33,,,,,,,,153,,,,,,2.87137,10823.87982,125,9115.12793,9111.61,,79.76,,,,116,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 19:20:00",1,SA1,0,143.19927,0,143.19927,0,0,1421.09,11,1728.57,0,307.48,0,,,44,,,,,,,,44,,,,,,,,43,,,,,,,,157.76,,,,,,,,163.81,,,,,,,,163.81,,,,,,0,3336.57215,331,1414.85303,1425.3,,39.24,,,,20,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 19:20:00",1,TAS1,0,142.43474,0,142.43474,0,0,1119.54,1,1492.33,0,372.79,0,,,0,,,,,,,,15.85,,,,,,,,15.85,,,,,,,,25,,,,,,,,73.7,,,,,,,,3,,,,,,11.44602,2378.28101,0,1121.75989,1131.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,33.36474,33.36474,0,0.38,0.38,0,0.38,0.38,0,0.17,0.17,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:20:00",1,VIC1,0,157.05865,0,157.05865,0,0,5196.46,3,4845.77,12,-362.69,0,,,108.24,,,,,,,,84,,,,,,,,104,,,,,,,,144,,,,,,,,116,,,,,,,,153.04,,,,,,24.46356,7687.77315,430,5220.18457,5239.55,,21,,,,34,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 19:25:00",1,NSW1,0,178.00261,0,178.00261,0,0,12268.58,-49,11524.18,0,-744.4,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,84,,,,,,,,79,,,,,,,,65,,,,,,0,12451.87978,47,12325.97656,12277.33,,0,,,,0,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:25:00",1,QLD1,0,185.19,0,185.19,0,0,9088.6,-13,9558.02,0,469.42,0,,,0,,,,,,,,95,,,,,,,,36.29,,,,,,,,28,,,,,,,,193.33,,,,,,,,200,,,,,,0,10806.8214,125,9100.09082,9087.26,,90.77,,,,167,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:25:00",1,SA1,0,148.98421,0,148.98421,0,0,1444.85,9,1668.24,0,223.39,0,,,47,,,,,,,,47,,,,,,,,45,,,,,,,,171,,,,,,,,116.21,,,,,,,,145.3,,,,,,14.20705,3276.23725,341,1424.96082,1446.99,,10,,,,10,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:25:00",1,TAS1,0,144.31749,0,144.31749,0,0,1115.68,1,1493.92,0,378.24,0,,,25.88,,,,,,,,24.58,,,,,,,,21.05,,,,,,,,18,,,,,,,,68.76,,,,,,,,43,,,,,,3.18996,2370.3686,0,1126.34583,1128.15,,50,,,,50,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,35.24749,35.24749,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:25:00",1,VIC1,0,159.14502,0,159.14502,0,0,5250.77,2,4973.7,0,-277.08,0,,,80,,,,,,,,99,,,,,,,,99,,,,,,,,119.6,,,,,,,,92,,,,,,,,96,,,,,,19.80653,7681.69617,430,5264.14746,5278.32,,59.23,,,,0,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:30:00",1,NSW1,0,301.38681,0,301.38681,0,0,12192.34,-48,11037.79,0,-1154.54,0,,,54,,,,,,,,60.71,,,,,,,,9.37,,,,,,,,94,,,,,,,,96,,,,,,,,122,,,,,,-44.26373,12465.47124,47,12288.46484,12206.71,,0,,,,0,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:30:00",1,QLD1,0,296,0,296,0,0,9025.56,-15,9787.27,0,761.7,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,33,,,,,,,,114.43,,,,,,,,128.1,,,,,,4.27181,10805.11434,125,9034.06543,9023.42,,69.52,,,,136.74,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:30:00",1,SA1,0,237.87,0,237.87,0,0,1445.3,8,1779.96,0,334.66,0,,,35,,,,,,,,47,,,,,,,,33,,,,,,,,176,,,,,,,,185,,,,,,,,179.81,,,,,,5.03677,3235.42337,345,1434.729,1450.32,,10,,,,79.26,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:30:00",1,TAS1,0,115.18,0,115.18,0,0,1108.18,1,1590.56,0,482.38,0,,,17.65,,,,,,,,117.65,,,,,,,,117.65,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,0.89584,2346.46381,0,1120.38293,1128.56,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:30:00",1,VIC1,0,263.42284,0,263.42284,0,0,5264.64,1,4922.2,0,-342.44,0,,,120.53,,,,,,,,114,,,,,,,,109,,,,,,,,125.73,,,,,,,,155.47,,,,,,,,121,,,,,,10.93827,7625.20192,433,5275.83301,5308.77,,80.48,,,,4,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:35:00",1,NSW1,0,221.41452,0,221.41452,0,0,12063.94,-53,11102.83,0,-961.11,0,,,64,,,,,,,,70,,,,,,,,8.79,,,,,,,,106,,,,,,,,97,,,,,,,,122.07,,,,,,-46.78793,12455.13336,57,12180.14258,12075.99,,10,,,,3,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:35:00",1,QLD1,0,223.82999,0,223.82999,0,0,8980.6,-24,9565.73,0,585.13,0,,,0,,,,,,,,17.36,,,,,,,,0,,,,,,,,33,,,,,,,,142.33,,,,,,,,157,,,,,,17.98321,10788.85021,125,8985.40137,8977.89,,98.65,,,,180.52,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:35:00",1,SA1,0,174.84,0,174.84,0,0,1452.91,7,1805.85,0,352.94,0,,,37,,,,,,,,46,,,,,,,,31,,,,,,,,146,,,,,,,,150,,,,,,,,162.87,,,,,,3.15722,3203.18509,356,1447.23071,1458.52,,10,,,,30,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:35:00",1,TAS1,0,115.16,0,115.16,0,0,1116.01,0,1593.5,0,477.48,0,,,13.12,,,,,,,,113.12,,,,,,,,113.12,,,,,,,,0,,,,,,,,4.47,,,,,,,,4.47,,,,,,7.0442,2379.62597,0,1128.95874,1135.98,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:35:00",1,VIC1,0,193.84488,0,193.84488,0,0,5249.9,2,4873.82,0,-376.08,0,,,114,,,,,,,,94,,,,,,,,109,,,,,,,,143.59,,,,,,,,157.6,,,,,,,,105,,,,,,1.17365,7620.82309,445,5288.74219,5293.34,,41.35,,,,2,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 19:40:00",1,NSW1,0,299.99,0,299.99,0,0,12002.07,-59,10746.28,0,-1255.78,0,,,54,,,,,,,,70,,,,,,,,19.13,,,,,,,,95,,,,,,,,59,,,,,,,,87.7,,,,,,-18.90057,12441.1004,57,12091.21191,12016.84,,18.93,,,,12,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 19:40:00",1,QLD1,0,289.54852,0,289.54852,0,0,8942.28,-29,9773.69,0,831.41,0,,,0,,,,,,,,3.16,,,,,,,,0,,,,,,,,35,,,,,,,,175.33,,,,,,,,200,,,,,,3.12317,10781.58202,125,8965.96777,8939.21,,98.07,,,,164,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 19:40:00",1,SA1,0,231.02124,0,231.02124,0,0,1451.72,6,1857.43,0,405.7,0,,,35,,,,,,,,47,,,,,,,,33,,,,,,,,161,,,,,,,,152,,,,,,,,158.87,,,,,,7.42423,3171.42664,362,1442.91296,1459.13,,10,,,,42,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 19:40:00",1,TAS1,0,54.22,0,54.22,0,0,1126.48,0,1608.85,0,482.38,0,,,17.34,,,,,,,,117.33,,,,,,,,117.33,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,7.97765,2385.44917,0,1137.33948,1146.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:40:00",1,VIC1,0,260.69175,0,260.69175,0,0,5234.4,1,4861.17,0,-373.23,0,,,121.9,,,,,,,,104,,,,,,,,99,,,,,,,,137.31,,,,,,,,165.23,,,,,,,,105,,,,,,0.47597,7600.17126,446,5271.55176,5285.39,,33,,,,2,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 19:45:00",1,NSW1,0,295.42724,0,295.42724,0,0,11915.86,-66,10666.36,0,-1249.5,0,,,67.43,,,,,,,,70,,,,,,,,21.13,,,,,,,,104,,,,,,,,95,,,,,,,,116,,,,,,-24.34654,12407.23115,57,12024.68164,11929.74,,30,,,,23,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:45:00",1,QLD1,0,286.72095,0,286.72095,0,0,8923.16,-33,9706.64,0,783.48,0,,,0,,,,,,,,11.38,,,,,,,,0,,,,,,,,32,,,,,,,,160.33,,,,,,,,175,,,,,,0,10800.6907,125,8954.25488,8917.9,,77,,,,153,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:45:00",1,SA1,0,229.88,0,229.88,0,0,1452.95,4,1807,0,354.05,0,,,47,,,,,,,,47,,,,,,,,34,,,,,,,,144,,,,,,,,147,,,,,,,,155.67,,,,,,0,3144.29773,362,1454.85498,1458.58,,20,,,,40,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:45:00",1,TAS1,0,54.2087,0,54.2087,0,0,1116.53,0,1598.91,0,482.38,0,,,17.6,,,,,,,,117.59,,,,,,,,117.59,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-1.02065,2386.80162,0,1136.66882,1136.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.1387,8.1387,0,0.56261,0.56261,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:45:00",1,VIC1,0,254.8369,0,254.8369,0,0,5144.11,-7,4858.37,0,-285.74,0,,,96,,,,,,,,96,,,,,,,,91,,,,,,,,147.72,,,,,,,,149.34,,,,,,,,105,,,,,,-0.72624,7585.36809,446,5201.08838,5194.15,,33,,,,4,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:50:00",1,NSW1,0,299.99,0,299.99,0,0,11836.46,-71,10774.68,0,-1061.78,0,,,61.45,,,,,,,,43,,,,,,,,34.03,,,,,,,,104,,,,,,,,95,,,,,,,,121,,,,,,-29.72309,12461.09848,57,11949.01563,11844.14,,30,,,,23,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 19:50:00",1,QLD1,0,298.82461,0,298.82461,0,0,9009.84,-29,9638.15,0,628.31,0,,,0,,,,,,,,54.18,,,,,,,,0,,,,,,,,34,,,,,,,,140.99,,,,,,,,154.66,,,,,,12.3077,10549.21205,125,9023.74316,9002.42,,100.39,,,,117,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 19:50:00",1,SA1,0,231.70534,0,231.70534,0,0,1470.61,3,1870.85,0,400.24,0,,,35,,,,,,,,33,,,,,,,,26,,,,,,,,156,,,,,,,,160,,,,,,,,169.86,,,,,,15.95825,3109.84731,362,1455.88098,1477.81,,14.61,,,,58,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 19:50:00",1,TAS1,0,54.22,0,54.22,0,0,1117.32,0,1599.7,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-2.67274,2384.88686,0,1139.71167,1137.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:50:00",1,VIC1,0,261.03409,0,261.03409,0,0,5183.25,-9,4830.01,18,-371.24,0,,,116,,,,,,,,96,,,,,,,,86,,,,,,,,143.79,,,,,,,,165.53,,,,,,,,116,,,,,,8.22249,7573.00672,447,5224.02881,5251.32,,15,,,,22,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 19:55:00",1,NSW1,0,299.99,0,299.99,0,0,11737.44,-74,10738.14,0,-999.3,0,,,65.06,,,,,,,,70,,,,,,,,1.38,,,,,,,,82.57,,,,,,,,81.21,,,,,,,,105.69,,,,,,-6.52821,12478.13526,57,11825.87305,11739.41,,30,,,,23,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:55:00",1,QLD1,0,296.58207,0,296.58207,0,0,9002.44,-28,9657.74,0,655.3,0,,,0,,,,,,,,9.03,,,,,,,,0,,,,,,,,31,,,,,,,,87.33,,,,,,,,109,,,,,,-4.92896,10516.06334,125,9030.66895,8995.1,,102,,,,114,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:55:00",1,SA1,0,236.94618,0,236.94618,0,0,1471.97,2,1857.74,0,385.77,0,,,49,,,,,,,,49,,,,,,,,49,,,,,,,,164,,,,,,,,171,,,,,,,,166.86,,,,,,20.22525,3063.74273,362,1456.23535,1478.66,,20,,,,54,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 19:55:00",1,TAS1,0,54.2,0,54.2,0,0,1115.56,-1,1597.94,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,0,,,,,,,,0,,,,,,-0.61475,2392.88336,0,1137.50378,1135.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 19:55:00",1,VIC1,0,265.52076,0,265.52076,0,0,5211.07,-8,4775.73,25,-460.34,0,,,96,,,,,,,,96,,,,,,,,96,,,,,,,,159,,,,,,,,221,,,,,,,,179,,,,,,9.4995,7536.7307,447,5261.87695,5278.18,,8,,,,29,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 20:00:00",1,NSW1,0,299.99,0,299.99,0,0,11692.79,-76,10525.19,0,-1167.59,0,,,75.74,,,,,,,,70,,,,,,,,16.66,,,,,,,,104,,,,,,,,95,,,,,,,,119.01,,,,,,-6.33154,12461.45488,57,11783.49316,11703.38,,30,,,,23,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:00:00",1,QLD1,0,293.04,0,293.04,0,0,8946.57,-28,9643.11,0,696.53,0,,,0,,,,,,,,21.11,,,,,,,,0,,,,,,,,35,,,,,,,,161.21,,,,,,,,174.87,,,,,,0,10768.03615,125,8971.05762,8939.52,,81,,,,123,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:00:00",1,SA1,0,232.78558,0,232.78558,0,0,1478.6,1,1848.66,0,370.06,0,,,56,,,,,,,,55,,,,,,,,53,,,,,,,,142,,,,,,,,146,,,,,,,,157.86,,,,,,23.6652,3040.65778,362,1459.95435,1484.75,,16,,,,70,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:00:00",1,TAS1,0,54.2,0,54.2,0,0,1115.25,-2,1597.63,0,482.38,0,,,18.67,,,,,,,,118.67,,,,,,,,118.67,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-4.48627,2407.85847,0,1140.14294,1135.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:00:00",1,VIC1,0,259.45927,0,259.45927,0,0,5182.7,-12,4881.87,0,-300.83,0,,,76,,,,,,,,76,,,,,,,,76,,,,,,,,151.37,,,,,,,,154.54,,,,,,,,105,,,,,,0,7552.86903,447,5251.60205,5233.17,,33,,,,4,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:05:00",1,NSW1,0,141.33776,0,141.33776,0,0,11598.98,-79,10764.77,0,-834.2,0,,,57.62,,,,,,,,46,,,,,,,,0,,,,,,,,134.05,,,,,,,,112.91,,,,,,,,110.24,,,,,,-17.57787,12352.83057,147,11710.625,11610.07,,11.98,,,,23,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:05:00",1,QLD1,0,146.65212,0,146.65212,0,0,8899.07,-25,9280.56,0,381.49,0,,,0,,,,,,,,13.54,,,,,,,,0,,,,,,,,34,,,,,,,,208.05,,,,,,,,216.72,,,,,,6.28284,10769.59378,125,8915.05078,8893.02,,1.03,,,,177,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:05:00",1,SA1,0,118.44,0,118.44,0,0,1476.79,0,1605.07,0,128.29,0,,,41,,,,,,,,54,,,,,,,,44,,,,,,,,155,,,,,,,,154,,,,,,,,145,,,,,,24.89313,2866.22175,362,1457.83691,1477.34,,10,,,,20,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:05:00",1,TAS1,0,54.2,0,54.2,0,0,1116.97,-2,1599.35,0,482.38,0,,,17.62,,,,,,,,117.62,,,,,,,,117.62,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-8.75965,2434.54618,0,1147.55518,1137.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:05:00",1,VIC1,0,123.24231,0,123.24231,0,0,5188.91,-17,5094.32,0,-94.59,0,,,114,,,,,,,,114,,,,,,,,109,,,,,,,,111,,,,,,,,84,,,,,,,,87,,,,,,17.48426,7424.32362,447,5236.38428,5226.3,,137,,,,0,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:10:00",1,NSW1,0,257.35274,0,257.35274,0,0,11517.55,-83,10466.7,5,-1055.85,0,,,45.97,,,,,,,,51,,,,,,,,0,,,,,,,,102,,,,,,,,85,,,,,,,,106,,,,,,-0.25277,12189.69471,147,11615.48828,11548.99,,14,,,,0,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:10:00",1,QLD1,0,265.36,0,265.36,0,0,8958.81,-22,9356.22,0,397.41,0,,,0,,,,,,,,7.99,,,,,,,,0,,,,,,,,34,,,,,,,,202.64,,,,,,,,216.74,,,,,,-8.29874,11055.77691,125,8984.88086,8952.44,,1,,,,200,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:10:00",1,SA1,0,197.87762,0,197.87762,0,0,1460.73,-1,1759.21,0,298.48,0,,,55,,,,,,,,57,,,,,,,,47,,,,,,,,158,,,,,,,,156,,,,,,,,142.9,,,,,,10.62879,2791.21001,362,1451.97705,1464.69,,10,,,,20,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:10:00",1,TAS1,0,54.18,0,54.18,0,0,1118.33,-2,1600.71,0,482.38,0,,,17.62,,,,,,,,117.62,,,,,,,,117.62,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-13.83468,2453.40311,0,1153.21765,1138.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,0.50353,0.50353,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:10:00",1,VIC1,0,215.8827,0,215.8827,0,0,5198.55,-16,5183.68,0,-14.87,0,,,114,,,,,,,,114,,,,,,,,109,,,,,,,,134.62,,,,,,,,110,,,,,,,,88,,,,,,27.42183,7420.67772,447,5224.6875,5261.69,,135,,,,0,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:15:00",1,NSW1,0,215.36836,0,215.36836,0,0,11311.9,-84,10460.76,25,-876.14,0,,,51.47,,,,,,,,46.33,,,,,,,,16,,,,,,,,103,,,,,,,,86,,,,,,,,100,,,,,,-11.49911,12178.01712,147,11436.16504,11364.32,,23,,,,13,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:15:00",1,QLD1,0,228.81,0,228.81,0,0,8985.88,-22,9234.42,0,248.54,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,33,,,,,,,,192.33,,,,,,,,223,,,,,,0,11052.54501,125,9001.22852,8981.71,,1,,,,207,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:15:00",1,SA1,0,173.44,0,173.44,0,0,1449.6,-1,1615.63,0,166.03,0,,,43,,,,,,,,44,,,,,,,,34,,,,,,,,171,,,,,,,,161.49,,,,,,,,149,,,,,,0,2687.10886,362,1453.95923,1450.69,,10,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:15:00",1,TAS1,0,54.2,0,54.2,0,0,1117.85,-2,1600.23,0,482.38,0,,,17.59,,,,,,,,117.58,,,,,,,,117.58,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-10.04255,2413.71475,0,1145.58667,1138.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:15:00",1,VIC1,0,182.36127,0,182.36127,0,0,5140.48,-20,5218.37,0,77.89,0,,,114,,,,,,,,114,,,,,,,,114,,,,,,,,121.96,,,,,,,,115,,,,,,,,82.83,,,,,,0,7429.37203,447,5215.20117,5194.46,,126,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 20:20:00",1,NSW1,0,221,0,221,0,0,11298.82,-87,10396.29,22.53,-925.06,0,,,75.15,,,,,,,,72.18,,,,,,,,23.61,,,,,,,,91,,,,,,,,84.72,,,,,,,,82.06,,,,,,5.82599,12118.55417,147,11426.30176,11342.65,,25,,,,0,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 20:20:00",1,QLD1,0,230.21582,0,230.21582,0,0,8921.04,-23,9254.66,0,333.61,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,29.03,,,,,,,,217.33,,,,,,,,223,,,,,,-4.15596,10926.70555,125,8941.28516,8915.1,,6,,,,207,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 20:20:00",1,SA1,0,180.24484,0,180.24484,0,0,1444.14,-2,1593.57,0,149.43,0,,,54,,,,,,,,53,,,,,,,,45,,,,,,,,167,,,,,,,,165,,,,,,,,158,,,,,,1.14773,2644.56856,362,1445.95532,1444.97,,29,,,,0,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 20:20:00",1,TAS1,0,54.2,0,54.2,0,0,1111.36,-3,1593.74,0,482.38,0,,,17.37,,,,,,,,117.37,,,,,,,,117.37,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-2.08492,2432.07638,0,1135.5647,1131.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:20:00",1,VIC1,0,188.52242,0,188.52242,0,0,5161.41,-20,5207.27,0,45.86,0,,,86,,,,,,,,86,,,,,,,,86,,,,,,,,111,,,,,,,,88,,,,,,,,92,,,,,,27.77998,7472.26567,447,5205.87842,5211.06,,100,,,,44,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 20:25:00",1,NSW1,0,155.39697,0,155.39697,0,0,11158.53,-83,10315.37,25,-868.17,0,,,46,,,,,,,,46,,,,,,,,0,,,,,,,,97.02,,,,,,,,50,,,,,,,,65,,,,,,0,12155.66218,147,11288.09375,11203.13,,30,,,,0,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0 +D,DREGION,,2,"2023/12/14 20:25:00",1,QLD1,0,162.60896,0,162.60896,0,0,8885.49,-24,9189.1,0,303.62,0,,,0,,,,,,,,14.19,,,,,,,,0,,,,,,,,31,,,,,,,,210.05,,,,,,,,221,,,,,,0,10941.21334,125,8904.11621,8879.96,,22,,,,207,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0 +D,DREGION,,2,"2023/12/14 20:25:00",1,SA1,0,130.25002,0,130.25002,0,0,1457.37,-3,1523.18,0,65.81,0,,,56,,,,,,,,58,,,,,,,,47,,,,,,,,169,,,,,,,,158,,,,,,,,134,,,,,,-2.89438,2626.92232,362,1468.56567,1457.32,,30,,,,0,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0 +D,DREGION,,2,"2023/12/14 20:25:00",1,TAS1,0,54.2,0,54.2,0,0,1102.35,-3,1584.73,0,482.38,0,,,17.6,,,,,,,,117.6,,,,,,,,117.6,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-5.53033,2425.68035,0,1126.76611,1122.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:25:00",1,VIC1,0,132.72,0,132.72,0,0,5026.38,-26,5122.12,0,95.74,0,,,114,,,,,,,,114,,,,,,,,114,,,,,,,,130,,,,,,,,136,,,,,,,,134.05,,,,,,0,7418.39209,447,5095.75488,5071.36,,78,,,,13,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0 +D,DREGION,,2,"2023/12/14 20:30:00",1,NSW1,0,174.80082,0,174.80082,0,0,11091,-84,10264.65,25,-851.35,0,,,55,,,,,,,,53,,,,,,,,16,,,,,,,,92,,,,,,,,77,,,,,,,,75,,,,,,-3.55713,12159.19051,147,11219.59277,11142.18,,30,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0 +D,DREGION,,2,"2023/12/14 20:30:00",1,QLD1,0,185.19,0,185.19,0,0,8899.19,-26,9134,0,234.82,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,34.55,,,,,,,,183.33,,,,,,,,210,,,,,,-12.06611,10948.64332,125,8931.92383,8894.93,,26,,,,215,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0 +D,DREGION,,2,"2023/12/14 20:30:00",1,SA1,0,143.116,0,143.116,0,0,1440.46,-3,1547.9,0,107.43,0,,,45,,,,,,,,44.59,,,,,,,,41,,,,,,,,171,,,,,,,,159.44,,,,,,,,163,,,,,,-10.92591,2622.89705,362,1454.66943,1440.77,,31,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0 +D,DREGION,,2,"2023/12/14 20:30:00",1,TAS1,0,54.18,0,54.18,0,0,1103.72,-3,1586.1,0,482.38,0,,,17.57,,,,,,,,117.57,,,,,,,,117.57,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-1.23593,2430.37815,0,1124.64526,1124.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,0.50353,0.50353,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:30:00",1,VIC1,0,148.11473,0,148.11473,0,0,5048.51,-30,5168.82,0,120.31,0,,,114.37,,,,,,,,114,,,,,,,,99.12,,,,,,,,138,,,,,,,,143,,,,,,,,114.78,,,,,,19.45423,7461.8158,447,5098.99756,5099.49,,73,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0 +D,DREGION,,2,"2023/12/14 20:35:00",1,NSW1,0,140,0,140,0,0,10929.99,-87,9977.88,63,-1015.11,0,,,49.43,,,,,,,,44.74,,,,,,,,0,,,,,,,,75,,,,,,,,77,,,,,,,,85,,,,,,-16.65522,12095.78748,147,11075.9541,11031.61,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 20:35:00",1,QLD1,0,146.93798,0,146.93798,0,0,8774.41,-30,9024.02,0,249.62,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,30,,,,,,,,188.33,,,,,,,,188,,,,,,-23.62084,10951.91302,125,8821.66113,8769.85,,1,,,,210,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 20:35:00",1,SA1,0,116.81591,0,116.81591,0,0,1448.69,-3,1445.5,29,-32.19,0,,,45,,,,,,,,58,,,,,,,,48,,,,,,,,166.94,,,,,,,,147.92,,,,,,,,161,,,,,,-2.31216,2607.18201,362,1456.17957,1477.44,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 20:35:00",1,TAS1,0,54.2,0,54.2,0,0,1096.61,-3,1578.99,0,482.38,0,,,17.57,,,,,,,,117.57,,,,,,,,117.57,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.73631,2412.95833,0,1112.7605,1116.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:35:00",1,VIC1,0,115.99817,0,115.99817,0,0,5012,-27,5446.51,0,434.51,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,158,,,,,,,,145,,,,,,,,124.25,,,,,,13.41655,7458.51003,447,5066.19531,5077.01,,84,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 20:40:00",1,NSW1,0,140,0,140,0,0,10901.98,-73,10057.74,72,-916.24,0,,,64.78,,,,,,,,61,,,,,,,,24,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-29.75332,12086.5788,147,11098.94141,11006.7,,55,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0 +D,DREGION,,2,"2023/12/14 20:40:00",1,QLD1,0,147.96361,0,147.96361,0,0,8784.5,-34,9003.07,0,218.58,0,,,0,,,,,,,,29.86,,,,,,,,0,,,,,,,,27,,,,,,,,193.33,,,,,,,,192,,,,,,-32.58351,10957.25943,125,8844.40625,8780.39,,7,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0 +D,DREGION,,2,"2023/12/14 20:40:00",1,SA1,0,118.44,0,118.44,0,0,1438.68,-3,1424.46,27,-41.22,0,,,47,,,,,,,,49,,,,,,,,41.5,,,,,,,,168,,,,,,,,143.46,,,,,,,,163,,,,,,-7.98412,2587.70596,362,1473.48303,1465.46,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0 +D,DREGION,,2,"2023/12/14 20:40:00",1,TAS1,0,54.2,0,54.2,0,0,1112.25,-3,1594.63,0,482.38,0,,,17.72,,,,,,,,117.72,,,,,,,,117.72,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,7.53419,2408.59479,0,1125.74927,1132.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:40:00",1,VIC1,0,117.04047,0,117.04047,0,0,5052.76,-29,5424.31,9,362.55,0,,,104,,,,,,,,94,,,,,,,,94,,,,,,,,138.72,,,,,,,,145,,,,,,,,118.79,,,,,,7.15018,7469.95847,447,5135.93799,5119.03,,54,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0 +D,DREGION,,2,"2023/12/14 20:45:00",1,NSW1,0,140,0,140,0,0,10842.66,-74,9931.68,25,-935.98,0,,,74,,,,,,,,54.82,,,,,,,,0,,,,,,,,98.79,,,,,,,,77,,,,,,,,85,,,,,,-9.51809,12031.59384,147,11025.25195,10906.36,,45,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:45:00",1,QLD1,0,148.8467,0,148.8467,0,0,8798.18,-35,8979.9,0,181.72,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,27,,,,,,,,197.08,,,,,,,,209.08,,,,,,-41.54618,10956.77972,125,8869.34375,8794.58,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:45:00",1,SA1,0,117.15595,0,117.15595,0,0,1436.15,-4,1395.74,0,-40.42,0,,,60,,,,,,,,60,,,,,,,,51,,,,,,,,146,,,,,,,,152,,,,,,,,163,,,,,,-11.11744,2565.73805,362,1478.84473,1435.93,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:45:00",1,TAS1,0,54.2,0,54.2,0,0,1110.81,-3,1593.19,0,482.38,0,,,17.46,,,,,,,,117.46,,,,,,,,117.46,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,12.07403,2392.09534,0,1119.45801,1131.19,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:45:00",1,VIC1,0,116.2009,0,116.2009,0,0,5018.61,-23,5449.43,0,430.82,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,168,,,,,,,,145,,,,,,,,114,,,,,,-2.11366,7456.42966,447,5103.84619,5081.88,,95,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 20:50:00",1,NSW1,0,137.69,0,137.69,0,0,10682.35,-73,9667.51,25,-1039.84,0,,,83,,,,,,,,61,,,,,,,,53.16,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-22.61619,12002.73564,206,10845.61035,10754.88,,57,,,,30,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:50:00",1,QLD1,0,145.19,0,145.19,0,0,8700.91,-39,8912.31,13,198.41,0,,,0,,,,,,,,57.42,,,,,,,,0,,,,,,,,27,,,,,,,,183.33,,,,,,,,181,,,,,,-38.459,10970.64373,125,8775.10742,8710.26,,1,,,,185,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:50:00",1,SA1,0,114.41117,0,114.41117,0,0,1438.31,-3,1379.87,0,-58.44,0,,,61,,,,,,,,61,,,,,,,,56,,,,,,,,166,,,,,,,,150.56,,,,,,,,161,,,,,,-0.88445,2548.87298,362,1452.47314,1438.16,,10,,,,0,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:50:00",1,TAS1,0,54.22,0,54.22,0,0,1107.54,-4,1589.91,0,482.38,0,,,17.46,,,,,,,,117.46,,,,,,,,117.46,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,11.56042,2383.19642,0,1116.45544,1127.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:50:00",1,VIC1,0,112.44475,0,112.44475,0,0,4916.66,-24,5472.15,0,555.5,0,,,68.66,,,,,,,,53,,,,,,,,53,,,,,,,,141.14,,,,,,,,145,,,,,,,,128.89,,,,,,-2.91143,7468.15484,447,5006.60742,4990.56,,92,,,,5,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:55:00",1,NSW1,0,137.69,0,137.69,0,0,10534.1,-79,9559.25,25,-999.85,0,,,93,,,,,,,,61,,,,,,,,58,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-30.95238,11989.84965,206,10703.77637,10601.49,,57,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:55:00",1,QLD1,0,144.56224,0,144.56224,0,0,8564.69,-44,8794.93,27,203.24,0,,,0,,,,,,,,70,,,,,,,,18.57,,,,,,,,27,,,,,,,,193.33,,,,,,,,197.71,,,,,,-43.17459,10996.31059,125,8660.05664,8587.88,,1,,,,192,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:55:00",1,SA1,0,115.98145,0,115.98145,0,0,1440.64,-4,1368.28,2,-74.35,0,,,63,,,,,,,,63,,,,,,,,58,,,,,,,,168,,,,,,,,144.38,,,,,,,,163,,,,,,3.53792,2537.28359,362,1441.70166,1442.58,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 20:55:00",1,TAS1,0,54.2,0,54.2,0,0,1101.68,-4,1584.06,0,482.38,0,,,17.47,,,,,,,,117.47,,,,,,,,117.47,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,12.70909,2378.75964,0,1110.54248,1122.06,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 20:55:00",1,VIC1,0,113.40556,0,113.40556,0,0,4921.62,-27,5463.45,26,515.83,0,,,50.58,,,,,,,,33.33,,,,,,,,29,,,,,,,,127.96,,,,,,,,145,,,,,,,,114,,,,,,3.29975,7463.45424,447,5008.38721,5015.97,,92,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/14 21:00:00",1,NSW1,0,137.69,0,137.69,0,0,10428.25,-83,9466.97,25,-986.28,0,,,83,,,,,,,,61,,,,,,,,58,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-10.94259,11950.90153,206,10581.75781,10492.18,,67,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:00:00",1,QLD1,0,144.41425,0,144.41425,0,0,8561.89,-43,8781.63,4,215.74,0,,,0,,,,,,,,64.22,,,,,,,,9.86,,,,,,,,30,,,,,,,,188.33,,,,,,,,198.91,,,,,,-44.96285,10998.66466,125,8672.04492,8561.91,,1,,,,200,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:00:00",1,SA1,0,116.57382,0,116.57382,0,0,1445.95,-4,1354.43,0,-91.51,0,,,63,,,,,,,,63,,,,,,,,58,,,,,,,,168,,,,,,,,150.58,,,,,,,,163,,,,,,7.73748,2568.43179,362,1443.95728,1446.03,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:00:00",1,TAS1,0,54.47772,0,54.47772,0,0,1105.17,-4,1587.55,0,482.38,0,,,28.74,,,,,,,,117.47,,,,,,,,117.47,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,9.90821,2363.79996,0,1115.95618,1125.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:00:00",1,VIC1,0,113.56242,0,113.56242,0,0,4936.16,-23,5436.13,0,499.97,0,,,48,,,,,,,,38,,,,,,,,38,,,,,,,,139.95,,,,,,,,145,,,,,,,,114,,,,,,6.18096,7432.12926,447,5026.49658,5001.05,,71,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:05:00",1,NSW1,0,137.69,0,137.69,0,0,10319.9,-87,9395.31,25,-949.59,0,,,53,,,,,,,,24.84,,,,,,,,0,,,,,,,,97.56,,,,,,,,80,,,,,,,,88,,,,,,-5.74749,12005.67578,206,10473.50195,10381.43,,67,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:05:00",1,QLD1,0,144.0284,0,144.0284,0,0,8480.88,-45,8728.01,3,244.13,0,,,0,,,,,,,,47,,,,,,,,12.04,,,,,,,,40,,,,,,,,243.33,,,,,,,,243,,,,,,-36.13756,10672.33437,125,8562.14844,8481.97,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:05:00",1,SA1,0,118.58247,0,118.58247,0,0,1429.17,-5,1331.76,0,-97.41,0,,,58,,,,,,,,58,,,,,,,,49,,,,,,,,166,,,,,,,,124.11,,,,,,,,147.45,,,,,,4.16381,2567.57385,362,1431.38684,1429.3,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:05:00",1,TAS1,0,54.3637,0,54.3637,0,0,1083.61,-5,1565.98,0,482.38,0,,,17.17,,,,,,,,117.17,,,,,,,,117.17,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,11.95625,2367.06662,0,1095.92834,1103.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.2937,8.2937,0,1.14387,1.14387,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:05:00",1,VIC1,0,115.35614,0,115.35614,0,0,4910.21,-23,5344.31,0,434.09,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,124,,,,,,,,115,,,,,,,,84,,,,,,4.14048,7418.30793,447,4994.14355,4968.7,,82,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/14 21:10:00",1,NSW1,0,137.69,0,137.69,0,0,10273.48,-79,9252.94,25,-1045.54,0,,,65.81,,,,,,,,33,,,,,,,,0,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-16.98561,11951.6172,206,10425.68555,10331.62,,77.23,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:10:00",1,QLD1,0,140.98347,0,140.98347,0,0,8353.95,-56,8698.7,0,344.76,0,,,0,,,,,,,,65.39,,,,,,,,37.49,,,,,,,,32,,,,,,,,240.33,,,,,,,,240,,,,,,-29.443,10686.8096,125,8439.72266,8350.52,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:10:00",1,SA1,0,118.44,0,118.44,0,0,1436.25,-6,1350.28,0,-85.97,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,157.88,,,,,,,,88,,,,,,,,107.46,,,,,,-0.02224,2572.23846,362,1442.44812,1436.28,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:10:00",1,TAS1,0,54.22,0,54.22,0,0,1079.16,-5,1561.53,0,482.38,0,,,17.72,,,,,,,,117.72,,,,,,,,117.72,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.25482,2372.83733,0,1099.15381,1099.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.605,0.605,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:10:00",1,VIC1,0,115.41407,0,115.41407,0,0,4882.92,-25,5294.58,0,411.66,0,,,87,,,,,,,,77,,,,,,,,77,,,,,,,,132,,,,,,,,151.13,,,,,,,,124,,,,,,3.19394,7406.58279,447,4957.73584,4940.08,,71.77,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:15:00",1,NSW1,0,137.75683,0,137.75683,0,0,10172.64,-78,9171.9,25,-1025.74,0,,,83.86,,,,,,,,46.92,,,,,,,,9.52,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-28.22374,11951.10422,206,10336.25879,10232.2,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:15:00",1,QLD1,0,141.83843,0,141.83843,0,0,8379.02,-55,8691.19,0,312.17,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,31,,,,,,,,240.33,,,,,,,,240,,,,,,-11.18158,10669.61877,125,8441.7998,8375.56,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:15:00",1,SA1,0,118.44,0,118.44,0,0,1410.69,-5,1323.62,0,-87.08,0,,,47,,,,,,,,50,,,,,,,,38,,,,,,,,163.58,,,,,,,,88.31,,,,,,,,111.65,,,,,,-0.12676,2577.44267,362,1415.89197,1410.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:15:00",1,TAS1,0,54.30839,0,54.30839,0,0,1075.54,-5,1557.91,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,-0.72257,2367.77422,0,1098.25134,1095.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.23839,8.23839,0,0.93645,0.93645,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:15:00",1,VIC1,0,115.38038,0,115.38038,0,0,4849.64,-32,5278.29,0,428.65,0,,,87,,,,,,,,77,,,,,,,,72,,,,,,,,131,,,,,,,,155,,,,,,,,124,,,,,,5.05032,7390.28667,447,4932.17871,4908.49,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:20:00",1,NSW1,0,137.69,0,137.69,0,0,10091.6,-74,9050.74,25,-1065.86,0,,,80,,,,,,,,59.06,,,,,,,,0,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-34.69995,11936.90494,206,10260.18066,10159.41,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:20:00",1,QLD1,0,142.55529,0,142.55529,0,0,8379.44,-52,8653.54,0,274.1,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,30,,,,,,,,240.7,,,,,,,,240,,,,,,-1.23404,10648.07038,125,8428.97949,8376.22,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:20:00",1,SA1,0,116.04224,0,116.04224,0,0,1385.7,-7,1300.84,0,-84.86,0,,,58,,,,,,,,58,,,,,,,,49,,,,,,,,162.98,,,,,,,,87,,,,,,,,110.7,,,,,,-8.66368,2569.83772,362,1401.4801,1385.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:20:00",1,TAS1,0,54.47772,0,54.47772,0,0,1092.49,-5,1574.86,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,-1.10986,2352.89342,0,1113.69067,1112.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,4.37,4.37,0 +D,DREGION,,2,"2023/12/14 21:20:00",1,VIC1,0,113.43438,0,113.43438,0,0,4767.86,-33,5290.1,0,522.24,0,,,86,,,,,,,,76,,,,,,,,76,,,,,,,,131,,,,,,,,155,,,,,,,,124,,,,,,4.55605,7389.09933,447,4854.36426,4835.86,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:25:00",1,NSW1,0,126.77369,0,126.77369,0,0,9993.17,-78,8931.39,25,-1086.78,0,,,81.1,,,,,,,,49.67,,,,,,,,26,,,,,,,,92,,,,,,,,77,,,,,,,,86,,,,,,-41.17618,11957.80814,206,10177.1416,10067.03,,63.23,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:25:00",1,QLD1,0,131.75,0,131.75,0,0,8262.33,-49,8505.04,0,242.7,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,31,,,,,,,,240.33,,,,,,,,240,,,,,,3.75032,10638.20072,125,8304.3623,8259.7,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:25:00",1,SA1,0,106.63695,0,106.63695,0,0,1385.34,-7,1289.23,0,-96.11,0,,,48,,,,,,,,47,,,,,,,,38,,,,,,,,159.93,,,,,,,,88.17,,,,,,,,110.5,,,,,,-12.15227,2613.23129,362,1406.17566,1385.47,,22,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:25:00",1,TAS1,0,54.47772,0,54.47772,0,0,1090.93,-3,1573.31,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,5.61052,2353.92223,0,1105.00989,1111.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:25:00",1,VIC1,0,103.70884,0,103.70884,0,0,4738.27,-33,5337,0,598.73,0,,,87,,,,,,,,77,,,,,,,,62,,,,,,,,133,,,,,,,,155,,,,,,,,124,,,,,,2.06579,7444.004,447,4833.18066,4812.46,,73.77,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 21:30:00",1,NSW1,0,119.90818,0,119.90818,0,0,9903.82,-72,8908.08,25,-1020.73,0,,,80,,,,,,,,58,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-38.72799,11980.11227,206,10083.34375,9976.67,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:30:00",1,QLD1,0,125.24406,0,125.24406,0,0,8233.73,-46,8428.19,0,194.46,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,28,,,,,,,,240.33,,,,,,,,240,,,,,,8.39629,10622.27546,125,8268.53027,8231.67,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:30:00",1,SA1,0,101.44,0,101.44,0,0,1378.94,-7,1258.14,0,-120.8,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,158.4,,,,,,,,89,,,,,,,,109.28,,,,,,-10.63397,2612.363,362,1396.99487,1379.3,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:30:00",1,TAS1,0,54.47772,0,54.47772,0,0,1089.41,-3,1571.79,0,482.38,0,,,17.65,,,,,,,,117.65,,,,,,,,117.65,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,5.68207,2364.17857,0,1104.40173,1109.79,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:30:00",1,VIC1,0,98.15809,0,98.15809,0,0,4777.02,-31,5380.64,0,603.62,0,,,87,,,,,,,,75.15,,,,,,,,77,,,,,,,,136,,,,,,,,152.95,,,,,,,,124,,,,,,2.73062,7495.64281,447,4873.56299,4849.42,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0 +D,DREGION,,2,"2023/12/14 21:35:00",1,NSW1,0,126.45341,0,126.45341,0,0,9810.91,-70,8693.03,25,-1142.88,0,,,61.03,,,,,,,,49.83,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,77,,,,,,-33.29122,12014.76135,205,9982.2627,9895.74,,50,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 21:35:00",1,QLD1,0,131.75,0,131.75,0,0,8118.32,-47,8322.05,0,203.73,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,29,,,,,,,,232.33,,,,,,,,232,,,,,,1.49051,10577.50582,125,8160.80518,8116.02,,0,,,,184,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 21:35:00",1,SA1,0,102.86575,0,102.86575,0,0,1352.13,-7,1281.24,0,-70.89,0,,,47,,,,,,,,47,,,,,,,,36,,,,,,,,164,,,,,,,,94.9,,,,,,,,128.23,,,,,,-14.78509,2606.24319,362,1374.54858,1352.06,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 21:35:00",1,TAS1,0,54.47772,0,54.47772,0,0,1078.38,-3,1560.75,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.35894,2364.15376,0,1096.3208,1098.75,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:35:00",1,VIC1,0,101.06347,0,101.06347,0,0,4749.53,-26,5440.98,0,691.45,0,,,114,,,,,,,,104,,,,,,,,94,,,,,,,,138.43,,,,,,,,155,,,,,,,,124,,,,,,1.66193,7457.07962,447,4841.82324,4835.48,,90,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 21:40:00",1,NSW1,0,126.07673,0,126.07673,0,0,9747.13,-63,8648.89,25,-1123.24,0,,,58.65,,,,,,,,39.99,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-27.05751,11990.07647,206,9925.8252,9841.4,,50,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:40:00",1,QLD1,0,133.01,0,133.01,0,0,8122.83,-51,8250.71,0,127.87,0,,,0,,,,,,,,45,,,,,,,,20.43,,,,,,,,29,,,,,,,,256.28,,,,,,,,232,,,,,,-13.80877,10552.19064,125,8185.53711,8121.87,,21,,,,193,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:40:00",1,SA1,0,102.58166,0,102.58166,0,0,1357.92,-7,1270.63,0,-87.29,0,,,51,,,,,,,,61,,,,,,,,51,,,,,,,,166,,,,,,,,89,,,,,,,,146.28,,,,,,-3.79321,2595.62686,362,1368.90686,1357.97,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:40:00",1,TAS1,0,54.47772,0,54.47772,0,0,1067.16,-3,1549.54,0,482.38,0,,,19.29,,,,,,,,119.28,,,,,,,,119.28,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,0.32045,2351.49177,0,1087.40991,1087.54,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:40:00",1,VIC1,0,99.9317,0,99.9317,0,0,4651.68,-26,5435.41,0,783.73,0,,,110,,,,,,,,100,,,,,,,,100,,,,,,,,138.95,,,,,,,,140,,,,,,,,108,,,,,,-7.02491,7443.41081,447,4773.70459,4746.4,,69,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:45:00",1,NSW1,0,137.69,0,137.69,0,0,9640.43,-61,8646.12,25,-1019.31,0,,,74.1,,,,,,,,66,,,,,,,,59.33,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-26.78456,12004.97497,206,9812.0332,9714.86,,50,,,,11,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:45:00",1,QLD1,0,143.12199,0,143.12199,0,0,8032.66,-48,8214.51,0,181.85,0,,,0,,,,,,,,143.04,,,,,,,,85,,,,,,,,25,,,,,,,,240.33,,,,,,,,240,,,,,,-27.50229,10515.47882,125,8106.59619,8030.77,,6,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:45:00",1,SA1,0,115.6813,0,115.6813,0,0,1348.29,-7,1261.04,0,-87.25,0,,,49,,,,,,,,51,,,,,,,,45,,,,,,,,81,,,,,,,,89,,,,,,,,78,,,,,,-2.94774,2586.03667,362,1358.48975,1348.34,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:45:00",1,TAS1,0,103.74096,0,103.74096,0,0,1067.27,-3,1386.36,0,319.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,42.02,,,,,,,,5.33,,,,,,,,46.96,,,,,,-0.85374,2358.46081,0,1088.5813,1076.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 21:45:00",1,VIC1,0,112.69295,0,112.69295,0,0,4683.61,-26,5415.13,0,731.52,0,,,115,,,,,,,,105,,,,,,,,105,,,,,,,,136,,,,,,,,153.29,,,,,,,,124,,,,,,-14.84412,7444.13154,447,4806.92041,4753.12,,84,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:50:00",1,NSW1,0,137.01732,0,137.01732,0,0,9556.36,-60,8710.68,25,-870.68,0,,,76.48,,,,,,,,84.17,,,,,,,,88.37,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-17.8889,11992.53679,206,9709.95117,9613.13,,50,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:50:00",1,QLD1,0,141.23361,0,141.23361,0,0,7960.34,-49,8172.93,0,212.59,0,,,0,,,,,,,,115,,,,,,,,45,,,,,,,,25,,,,,,,,240.33,,,,,,,,240,,,,,,-27.21117,10524.75676,125,8033.99512,7958.1,,6,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:50:00",1,SA1,0,118.44,0,118.44,0,0,1348.73,-6,1268.15,0,-80.58,0,,,49,,,,,,,,62,,,,,,,,56,,,,,,,,79,,,,,,,,87,,,,,,,,76,,,,,,-1.77417,2588.03267,362,1357.49438,1348.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:50:00",1,TAS1,0,105.0596,0,105.0596,0,0,1040.02,-3,1398,0,357.97,0,,,0,,,,,,,,1.9,,,,,,,,1.9,,,,,,,,57.97,,,,,,,,14.22,,,,,,,,57.56,,,,,,-8.61005,2370.39671,0,1059.54846,1051.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:50:00",1,VIC1,0,115.7569,0,115.7569,0,0,4647.64,-22,5119.23,0,471.6,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-13.4607,7454.23341,447,4750.45264,4697.88,,84,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 21:55:00",1,NSW1,0,123.52845,0,123.52845,0,0,9451.81,-66,8738.11,25,-738.7,0,,,115,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-25.65453,11982.11024,206,9592.83203,9503.96,,42,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 21:55:00",1,QLD1,0,128.63884,0,128.63884,0,0,7861.19,-49,8016.79,0,155.6,0,,,0,,,,,,,,167.44,,,,,,,,103.18,,,,,,,,23,,,,,,,,238.33,,,,,,,,238,,,,,,-35.75162,10547.6666,125,7943.23096,7859.85,,0,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 21:55:00",1,SA1,0,108.88922,0,108.88922,0,0,1350.97,-6,1262.1,0,-88.87,0,,,65,,,,,,,,64,,,,,,,,58,,,,,,,,81,,,,,,,,89,,,,,,,,78,,,,,,1.58225,2587.09886,362,1355.65723,1351.04,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 21:55:00",1,TAS1,0,98.15,0,98.15,0,0,1047.53,-4,1336.47,0,288.94,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64.73,,,,,,,,21.74,,,,,,,,65.07,,,,,,-6.06594,2395.44722,0,1066.27002,1054.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.53,3.53,0 +D,DREGION,,2,"2023/12/14 21:55:00",1,VIC1,0,106.07633,0,106.07633,0,0,4638.79,-21,5096.46,0,457.67,0,,,60.1,,,,,,,,44,,,,,,,,44,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-10.4537,7428.46189,447,4713.03711,4680.41,,108,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0 +D,DREGION,,2,"2023/12/14 22:00:00",1,NSW1,0,114.20773,0,114.20773,0,0,9396.3,-64,8713.11,25,-708.19,0,,,93,,,,,,,,98,,,,,,,,89.47,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-33.42015,11957.10839,206,9553.51172,9449.05,,37,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 22:00:00",1,QLD1,0,119.55,0,119.55,0,0,7797.33,-46,7929.28,0,131.95,0,,,0,,,,,,,,163.83,,,,,,,,105,,,,,,,,22,,,,,,,,236.33,,,,,,,,239,,,,,,-41.77187,10564.02821,125,7883.62256,7796.22,,0,,,,214,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 22:00:00",1,SA1,0,100.13941,0,100.13941,0,0,1314.93,-6,1242.7,0,-72.24,0,,,52,,,,,,,,64,,,,,,,,58,,,,,,,,81,,,,,,,,87,,,,,,,,78,,,,,,1.65672,2601.69653,362,1319.42712,1314.87,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 22:00:00",1,TAS1,0,93.24142,0,93.24142,0,0,1006.53,-4,1147.36,0,140.84,0,,,11.59,,,,,,,,0,,,,,,,,0,,,,,,,,70.73,,,,,,,,54.63,,,,,,,,78.96,,,,,,-11.31552,2395.56434,0,1027.70349,1008,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,5.5,5.5,0 +D,DREGION,,2,"2023/12/14 22:00:00",1,VIC1,0,97.84874,0,97.84874,0,0,4536.95,-22,5110.75,0,573.8,0,,,84,,,,,,,,44,,,,,,,,44,,,,,,,,121,,,,,,,,125,,,,,,,,108,,,,,,-11.36483,7441.75319,447,4618.50146,4575.06,,113,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 22:05:00",1,NSW1,0,114.10575,0,114.10575,0,0,9322.77,-81,8637.27,0,-685.5,0,,,106.65,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,71,,,,,,,,88,,,,,,-30.50044,11939.61679,206,9487.48633,9350.82,,50,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:05:00",1,QLD1,0,119.19478,0,119.19478,0,0,7706.22,-61,7818.11,0,111.89,0,,,0,,,,,,,,80,,,,,,,,70,,,,,,,,22,,,,,,,,233.33,,,,,,,,239,,,,,,-43.13053,10411.17673,125,7808.64941,7705.27,,35,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:05:00",1,SA1,0,100.00214,0,100.00214,0,0,1293.48,-4,1222.21,0,-71.26,0,,,59,,,,,,,,63,,,,,,,,56,,,,,,,,79,,,,,,,,85,,,,,,,,76,,,,,,-5.47086,2610.21447,362,1302.99683,1293.41,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:05:00",1,TAS1,0,95.18,0,95.18,0,0,990.69,-10,1116.57,0,125.88,0,,,0,,,,,,,,22.75,,,,,,,,0,,,,,,,,99.29,,,,,,,,69.25,,,,,,,,69.25,,,,,,-15.63649,2368.05793,0,1016.77533,991.82,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,5.5,5.5,0 +D,DREGION,,2,"2023/12/14 22:05:00",1,VIC1,0,97.70398,0,97.70398,0,0,4480.94,-54,5065.85,0,584.91,0,,,76,,,,,,,,113,,,,,,,,81.69,,,,,,,,134,,,,,,,,128.8,,,,,,,,115.14,,,,,,-10.20905,7490.57464,447,4582.20459,4518.69,,55,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:10:00",1,NSW1,0,134.85177,0,134.85177,0,0,9276.06,-57,8601.05,0,-675.01,0,,,95,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-36.76635,11928.05112,206,9401.82324,9325.12,,56,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0 +D,DREGION,,2,"2023/12/14 22:10:00",1,QLD1,0,145.17,0,145.17,0,0,7650.19,-51,7592.88,0,-57.31,0,,,0,,,,,,,,142,,,,,,,,87.2,,,,,,,,22,,,,,,,,233.33,,,,,,,,239,,,,,,-32.93631,10329.76379,125,7732.87012,7653.23,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0 +D,DREGION,,2,"2023/12/14 22:10:00",1,SA1,0,112.83257,0,112.83257,0,0,1282.99,-9,1258.04,0,-24.95,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,81,,,,,,,,89,,,,,,,,92.84,,,,,,-12.59843,2628.03961,362,1304.59314,1282.73,,51,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0 +D,DREGION,,2,"2023/12/14 22:10:00",1,TAS1,0,98.15,0,98.15,0,0,972.92,-6,1270.85,0,297.92,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,99,,,,,,,,33.26,,,,,,,,45.76,,,,,,-15.85461,2363.70027,0,995.27081,980.55,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,3.53,3.53,0 +D,DREGION,,2,"2023/12/14 22:10:00",1,VIC1,0,111.94103,0,111.94103,0,0,4468.38,-33,5045.63,0,577.25,0,,,92.47,,,,,,,,70.07,,,,,,,,62,,,,,,,,134,,,,,,,,155,,,,,,,,124,,,,,,-13.6736,7499.58616,447,4552.49951,4526.81,,48,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0 +D,DREGION,,2,"2023/12/14 22:15:00",1,NSW1,0,169.64362,0,169.64362,0,0,9265.56,-53,8647.03,0,-618.53,0,,,94,,,,,,,,92,,,,,,,,24.75,,,,,,,,110.04,,,,,,,,79,,,,,,,,88,,,,,,0,11919.50026,206,9359.11523,9332.75,,50,,,,21.8,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 22:15:00",1,QLD1,0,188.32863,0,188.32863,0,0,7659.64,-28,7455,0,-204.64,0,,,0,,,,,,,,50.08,,,,,,,,47,,,,,,,,29,,,,,,,,229.33,,,,,,,,239,,,,,,0,10257.9793,125,7688.74268,7667.64,,25,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 22:15:00",1,SA1,0,138.03499,0,138.03499,0,0,1292.6,-10,1278.73,0,-13.87,0,,,64,,,,,,,,60,,,,,,,,58,,,,,,,,143,,,,,,,,114.86,,,,,,,,127.2,,,,,,0,2618.7348,362,1302.54663,1292.32,,22,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 22:15:00",1,TAS1,0,115.18,0,115.18,0,0,994.47,-2,1461.35,0,466.89,0,,,0,,,,,,,,99.43,,,,,,,,99.43,,,,,,,,0,,,,,,,,14.2,,,,,,,,14.2,,,,,,0,2352.38328,0,1001.87677,1013.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:15:00",1,VIC1,0,137.66,0,137.66,0,0,4537.59,-5,5075.73,0,538.15,0,,,80.17,,,,,,,,67,,,,,,,,67,,,,,,,,170,,,,,,,,155,,,,,,,,124,,,,,,0,7502.61805,447,4593.31689,4611.59,,63,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0 +D,DREGION,,2,"2023/12/14 22:20:00",1,NSW1,0,156.54153,0,156.54153,0,0,9147.94,-53,8549.51,0,-598.42,0,,,88,,,,,,,,93,,,,,,,,73.94,,,,,,,,93,,,,,,,,78,,,,,,,,87,,,,,,-20.90044,11860.82437,206,9278.89746,9211.72,,50,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:20:00",1,QLD1,0,172.53519,0,172.53519,0,0,7601.37,-36,7398.53,0,-202.84,0,,,0,,,,,,,,90.16,,,,,,,,47,,,,,,,,24,,,,,,,,227.33,,,,,,,,240,,,,,,-40.98595,10208.54565,125,7684.26855,7608.92,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:20:00",1,SA1,0,129.79274,0,129.79274,0,0,1286.09,-9,1243.85,0,-42.23,0,,,50,,,,,,,,62,,,,,,,,56,,,,,,,,149.93,,,,,,,,87,,,,,,,,92.56,,,,,,-7.40546,2594.85261,362,1302.62097,1285.87,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:20:00",1,TAS1,0,115.18,0,115.18,0,0,1033.57,-1,1438.38,0,404.8,0,,,0,,,,,,,,46.06,,,,,,,,46.06,,,,,,,,21.51,,,,,,,,39.23,,,,,,,,43,,,,,,5.01178,2354.08214,0,1043.47754,1047.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0.08,0.08,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:20:00",1,VIC1,0,128.12017,0,128.12017,0,0,4498.4,-7,5092.11,0,593.71,0,,,98.1,,,,,,,,76,,,,,,,,76,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-23.89773,7540.10711,447,4594.13574,4567.98,,85,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0 +D,DREGION,,2,"2023/12/14 22:25:00",1,NSW1,0,129.29672,0,129.29672,0,0,9093.97,-31,8492.95,0,-601.02,0,,,88,,,,,,,,93,,,,,,,,76.81,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-26.51686,11844.30786,206,9209.78125,9148.6,,50,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 22:25:00",1,QLD1,0,141.32488,0,141.32488,0,0,7491.8,-39,7339.06,0,-152.74,0,,,0,,,,,,,,137.21,,,,,,,,87,,,,,,,,28,,,,,,,,227.33,,,,,,,,244,,,,,,-37.84407,10211.92329,125,7574.09131,7497.03,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 22:25:00",1,SA1,0,110.8539,0,110.8539,0,0,1296.74,-6,1164.1,0,-132.64,0,,,52,,,,,,,,64,,,,,,,,58,,,,,,,,83.7,,,,,,,,90,,,,,,,,88.68,,,,,,-6.16051,2585.09987,362,1309.30029,1297.26,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 22:25:00",1,TAS1,0,98.19,0,98.19,0,0,1055.78,-4,1373.54,0,317.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,85.02,,,,,,,,36.34,,,,,,,,43,,,,,,12.4164,2356.85828,0,1057.84314,1064.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,8.12,8.12,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:25:00",1,VIC1,0,106.66354,0,106.66354,0,0,4410.32,-21,5110.9,0,700.58,0,,,99.25,,,,,,,,77,,,,,,,,77,,,,,,,,134,,,,,,,,153,,,,,,,,122,,,,,,-19.32878,7556.90117,447,4517.43066,4473.16,,85,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 22:30:00",1,NSW1,0,167.34301,0,167.34301,0,0,9081.18,-53,8446.81,0,-634.37,0,,,68,,,,,,,,64.33,,,,,,,,22.63,,,,,,,,108.91,,,,,,,,79,,,,,,,,88,,,,,,0,11833.80678,206,9180.26855,9142.09,,50,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:30:00",1,QLD1,0,182.69397,0,182.69397,0,0,7482.92,-63,7310.09,0,-172.83,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,33,,,,,,,,223.33,,,,,,,,245,,,,,,0,10121.86511,125,7549.03027,7488.8,,27,,,,186,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:30:00",1,SA1,0,140.99,0,140.99,0,0,1290.97,-1,1193.69,0,-97.28,0,,,52,,,,,,,,63,,,,,,,,51,,,,,,,,143,,,,,,,,134.23,,,,,,,,134.56,,,,,,0,2580.21238,362,1292.32422,1291.11,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:30:00",1,TAS1,0,115.2087,0,115.2087,0,0,1042.02,-4,1522.21,0,480.19,0,,,33.42,,,,,,,,115.75,,,,,,,,115.75,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,4.66316,2365.39888,0,1049.81104,1062.21,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.45561,7.45561,0,0.56261,0.56261,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:30:00",1,VIC1,0,137.05833,0,137.05833,0,0,4529.36,-11,5112.62,0,583.26,0,,,87,,,,,,,,62,,,,,,,,62,,,,,,,,165,,,,,,,,153,,,,,,,,122,,,,,,0,7559.61777,447,4595.91846,4601.2,,63,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:35:00",1,NSW1,0,161.00635,0,161.00635,0,0,8920.11,-63,8201.82,0,-718.29,0,,,80,,,,,,,,42.29,,,,,,,,30,,,,,,,,66,,,,,,,,51,,,,,,,,60,,,,,,-37.7497,11824.59028,206,9075.89648,8995.07,,42.55,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:35:00",1,QLD1,0,176.71993,0,176.71993,0,0,7453.81,-23,7246.84,0,-206.97,0,,,0,,,,,,,,107,,,,,,,,51.29,,,,,,,,34.27,,,,,,,,220.33,,,,,,,,244,,,,,,-38.31557,10106.52553,125,7520.3623,7460.63,,10.45,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:35:00",1,SA1,0,133.98513,0,133.98513,0,0,1287.87,-3,1160.55,0,-127.32,0,,,59,,,,,,,,48,,,,,,,,43,,,,,,,,156,,,,,,,,129.92,,,,,,,,128.25,,,,,,-3.81503,2559.55108,362,1295.50208,1288.33,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:35:00",1,TAS1,0,115.18,0,115.18,0,0,1048.72,-1,1480.5,0,431.77,0,,,0,,,,,,,,71.22,,,,,,,,71.22,,,,,,,,3,,,,,,,,43,,,,,,,,43,,,,,,11.26015,2362.72621,0,1056.02795,1065.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0,0,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:35:00",1,VIC1,0,128.93128,0,128.93128,0,0,4494.82,6,5300.27,0,805.46,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,143,,,,,,,,144,,,,,,,,113,,,,,,-15.4476,7542.21378,447,4570.89697,4580.92,,87,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:40:00",1,NSW1,0,176.54995,0,176.54995,0,0,8902.89,-45,8046.24,0,-856.65,0,,,80,,,,,,,,58.91,,,,,,,,0,,,,,,,,104.32,,,,,,,,51.69,,,,,,,,60,,,,,,-36.17074,11888.24474,206,9061.96094,8997.7,,50,,,,18.33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:40:00",1,QLD1,0,195.01,0,195.01,0,0,7449.5,-9,7230.26,0,-219.24,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,35,,,,,,,,238.33,,,,,,,,259.03,,,,,,-42.33225,10100.24382,125,7507.03857,7456.81,,47,,,,133.67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:40:00",1,SA1,0,140.99,0,140.99,0,0,1276.64,-3,1190.68,0,-85.96,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,164,,,,,,,,147,,,,,,,,159,,,,,,0,2553.36206,362,1280.11584,1276.68,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:40:00",1,TAS1,0,115.22,0,115.22,0,0,1043.32,-1,1523.51,0,480.19,0,,,15.87,,,,,,,,115.87,,,,,,,,115.87,,,,,,,,0,,,,,,,,2,,,,,,,,3,,,,,,1.19048,2357.22665,0,1057.08643,1063.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/14 22:40:00",1,VIC1,0,137.66,0,137.66,0,0,4450.88,-12,5363.59,0,912.71,0,,,100,,,,,,,,90,,,,,,,,90,,,,,,,,146,,,,,,,,153,,,,,,,,112,,,,,,-24.19583,7528.69362,447,4578.30322,4559.59,,43,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:45:00",1,NSW1,0,166.53653,0,166.53653,0,0,8699.96,-72,8028.1,0,-671.86,0,,,58.27,,,,,,,,58.86,,,,,,,,7.46,,,,,,,,107.01,,,,,,,,56.27,,,,,,,,63.6,,,,,,-41.1979,11865.10014,206,8903.19727,8787.32,,40,,,,6,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:45:00",1,QLD1,0,185.92237,0,185.92237,0,0,7439.09,-3,7138.9,0,-300.18,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,214.33,,,,,,,,245,,,,,,-44.31765,10090.10337,125,7493.80225,7449.47,,16,,,,179,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:45:00",1,SA1,0,136.81331,0,136.81331,0,0,1267.28,-5,1146.38,0,-120.89,0,,,50,,,,,,,,48,,,,,,,,45,,,,,,,,158,,,,,,,,161,,,,,,,,154,,,,,,3.44165,2545.38359,362,1269.01172,1267.66,,20,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:45:00",1,TAS1,0,115.22,0,115.22,0,0,1029.37,-3,1507.63,0,478.25,0,,,13.69,,,,,,,,113.68,,,,,,,,113.68,,,,,,,,0,,,,,,,,3.77,,,,,,,,3.77,,,,,,5.95238,2354.54862,0,1044.51746,1049.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,8.15,8.15,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:45:00",1,VIC1,0,132.31275,0,132.31275,0,0,4422.01,-13,5249.58,0,827.57,0,,,115,,,,,,,,105,,,,,,,,90,,,,,,,,144,,,,,,,,153,,,,,,,,122,,,,,,-31.0234,7488.58113,447,4565.95947,4516.74,,84,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:50:00",1,NSW1,0,131.19651,0,131.19651,0,0,8682.58,-60,8025.75,0,-656.83,0,,,80,,,,,,,,93,,,,,,,,77.55,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-31.04394,11924.75432,206,8853.41113,8754.62,,40,,,,14,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:50:00",1,QLD1,0,144.30567,0,144.30567,0,0,7297.86,-17,7065.01,0,-232.85,0,,,0,,,,,,,,113.85,,,,,,,,65,,,,,,,,28,,,,,,,,209.33,,,,,,,,245,,,,,,-46.30304,10097.28519,125,7367.42432,7305.11,,16,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:50:00",1,SA1,0,112.25678,0,112.25678,0,0,1268.02,-7,1066.54,0,-201.48,0,,,59,,,,,,,,63,,,,,,,,56,,,,,,,,75,,,,,,,,84,,,,,,,,72,,,,,,-3.75699,2531.29794,362,1279.73572,1269.65,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:50:00",1,TAS1,0,98.18,0,98.18,0,0,1026.67,-3,1302.21,0,275.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,69.89,,,,,,,,71.12,,,,,,,,69.46,,,,,,0.50622,2341.82023,0,1044.80371,1033.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:50:00",1,VIC1,0,105.83679,0,105.83679,0,0,4298.51,-43,5282.25,0,983.74,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,118,,,,,,,,143,,,,,,,,112,,,,,,-27.68804,7510.25425,447,4460.68213,4379.25,,84,,,,34,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/14 22:55:00",1,NSW1,0,157.90454,0,157.90454,0,0,8681.8,-48,8078.72,0,-603.09,0,,,80,,,,,,,,83.52,,,,,,,,83.57,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0,11986.82211,206,8795.08398,8758.94,,50,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:55:00",1,QLD1,0,175.80712,0,175.80712,0,0,7348.49,-35,7052.63,0,-295.86,0,,,0,,,,,,,,105,,,,,,,,45,,,,,,,,28,,,,,,,,206.33,,,,,,,,245,,,,,,0,10084.95847,125,7389.57617,7358.06,,35,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:55:00",1,SA1,0,133.84699,0,133.84699,0,0,1266.67,-3,1094.49,0,-172.18,0,,,60,,,,,,,,64,,,,,,,,58,,,,,,,,125.43,,,,,,,,88,,,,,,,,78,,,,,,0,2510.49104,362,1271.18799,1267.77,,21,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 22:55:00",1,TAS1,0,115.18,0,115.18,0,0,1011.08,-5,1392.07,0,380.99,0,,,0,,,,,,,,24.02,,,,,,,,24.02,,,,,,,,43.67,,,,,,,,77.77,,,,,,,,71.1,,,,,,-7.31625,2345.92524,0,1029.37415,1023.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 22:55:00",1,VIC1,0,127.48206,0,127.48206,0,0,4414.09,-19,5288.27,0,874.19,0,,,105,,,,,,,,95,,,,,,,,95,,,,,,,,116,,,,,,,,145,,,,,,,,114,,,,,,0,7509.27196,447,4506.99365,4497.66,,54,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0 +D,DREGION,,2,"2023/12/14 23:00:00",1,NSW1,0,124.658,0,124.658,0,0,8622.72,-61,8079.35,0,-543.38,0,,,94,,,,,,,,99,,,,,,,,96,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,2.74405,11969.34585,206,8746.93164,8671,,35,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 23:00:00",1,QLD1,0,135.10911,0,135.10911,0,0,7229.48,-31,7065.42,0,-164.05,0,,,0,,,,,,,,115,,,,,,,,95,,,,,,,,28,,,,,,,,203.33,,,,,,,,245,,,,,,-35.26125,10107.85409,125,7301.43994,7234.08,,0,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 23:00:00",1,SA1,0,110.71548,0,110.71548,0,0,1255.71,-4,1030.95,0,-224.76,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,81,,,,,,,,90,,,,,,,,78,,,,,,-0.55723,2496.95258,362,1262.90063,1257.82,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 23:00:00",1,TAS1,0,98.12,0,98.12,0,0,1021.7,-3,1198.43,0,176.73,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,78.25,,,,,,,,72.59,,,,,,,,64.92,,,,,,1.52795,2350.0748,0,1032.94373,1024.18,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,3.56,3.56,0 +D,DREGION,,2,"2023/12/14 23:00:00",1,VIC1,0,103.86953,0,103.86953,0,0,4410.44,16,5279.94,0,869.5,0,,,89.72,,,,,,,,91.39,,,,,,,,57.54,,,,,,,,119,,,,,,,,145,,,,,,,,114,,,,,,-24.22204,7504.93834,447,4494.03076,4467,,115,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/14 23:05:00",1,NSW1,0,127.29166,0,127.29166,0,0,8586.51,-43,8023.43,3,-566.08,0,,,92,,,,,,,,70,,,,,,,,67,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,12.17372,11929.674,206,8671.48633,8641.76,,54,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0 +D,DREGION,,2,"2023/12/14 23:05:00",1,QLD1,0,137.88309,0,137.88309,0,0,7239.66,-59,7060.82,0,-178.84,0,,,0,,,,,,,,140,,,,,,,,130,,,,,,,,28,,,,,,,,200.33,,,,,,,,244,,,,,,-22.2202,10084.88649,125,7326.9165,7244.59,,5,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0 +D,DREGION,,2,"2023/12/14 23:05:00",1,SA1,0,111.63821,0,111.63821,0,0,1247,-1,1040.21,0,-206.79,0,,,61,,,,,,,,61,,,,,,,,56,,,,,,,,76,,,,,,,,85,,,,,,,,76,,,,,,-7.79928,2491.20682,362,1257.75073,1248.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0 +D,DREGION,,2,"2023/12/14 23:05:00",1,TAS1,0,98.15,0,98.15,0,0,1000.89,-2,1252.43,0,251.54,0,,,1.67,,,,,,,,23.46,,,,,,,,0,,,,,,,,83.96,,,,,,,,82.42,,,,,,,,69.75,,,,,,-6.29451,2345.06885,0,1011.16724,1006.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,3.53,3.53,0 +D,DREGION,,2,"2023/12/14 23:05:00",1,VIC1,0,105.26069,0,105.26069,0,0,4413.69,33,5239.7,0,826.01,0,,,83,,,,,,,,78,,,,,,,,51.56,,,,,,,,120,,,,,,,,145,,,,,,,,114,,,,,,-18.9236,7493.69896,447,4458.33301,4475.28,,81,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0 +D,DREGION,,2,"2023/12/14 23:10:00",1,NSW1,0,128.61419,0,128.61419,0,0,8536.13,-44,7961.23,3,-577.9,0,,,62,,,,,,,,40,,,,,,,,37,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0.64407,11927.16289,206,8632.54883,8594.64,,83,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:10:00",1,QLD1,0,140.05119,0,140.05119,0,0,7204.36,-23,7014.1,3,-193.27,0,,,0,,,,,,,,154.63,,,,,,,,94.5,,,,,,,,25,,,,,,,,201.89,,,,,,,,239,,,,,,-13.70805,10036.17687,125,7245.23535,7212.67,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:10:00",1,SA1,0,112.78993,0,112.78993,0,0,1240.29,-4,1047.61,0,-192.68,0,,,49.65,,,,,,,,62,,,,,,,,58,,,,,,,,129.91,,,,,,,,134,,,,,,,,118.89,,,,,,-1.68394,2497.60857,362,1247.62109,1241.74,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:10:00",1,TAS1,0,98.15,0,98.15,0,0,1005.4,-1,1300.82,0,295.42,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,2.54969,2330.33177,0,1006.87915,1012.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.53,3.53,0 +D,DREGION,,2,"2023/12/14 23:10:00",1,VIC1,0,106.34821,0,106.34821,0,0,4447.56,44,5250.89,0,803.33,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,120,,,,,,,,144,,,,,,,,113,,,,,,-12.39528,7505.88873,447,4475.52881,4512.7,,52,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:15:00",1,NSW1,0,157.43246,0,157.43246,0,0,8458.98,-49,7926.13,2,-534.85,0,,,68,,,,,,,,46,,,,,,,,42,,,,,,,,106.21,,,,,,,,79,,,,,,,,88,,,,,,-13.06255,11910.08594,206,8576.69238,8524.4,,61,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:15:00",1,QLD1,0,173.58939,0,173.58939,0,0,7236.73,-17,6967.51,0,-269.22,0,,,0,,,,,,,,100.05,,,,,,,,47.13,,,,,,,,30,,,,,,,,224.33,,,,,,,,227,,,,,,-14.47392,9843.67304,125,7275.97266,7244.77,,40,,,,164,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:15:00",1,SA1,0,134.37949,0,134.37949,0,0,1228.31,-3,1091.34,0,-136.97,0,,,67,,,,,,,,66,,,,,,,,58,,,,,,,,168,,,,,,,,126.56,,,,,,,,145.9,,,,,,-2.5384,2494.62635,362,1235.1615,1228.89,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:15:00",1,TAS1,0,115.18,0,115.18,0,0,1018.15,0,1455.61,0,437.46,0,,,0,,,,,,,,76.86,,,,,,,,76.86,,,,,,,,0,,,,,,,,41.29,,,,,,,,41.29,,,,,,9.01294,2343.71237,0,1016.00146,1034.9,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 23:15:00",1,VIC1,0,129.31184,0,129.31184,0,0,4588.2,68,5251.16,0,662.96,0,,,98.22,,,,,,,,79,,,,,,,,79,,,,,,,,145,,,,,,,,144,,,,,,,,113,,,,,,-9.24663,7499.16272,447,4589.8623,4658.8,,49,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:20:00",1,NSW1,0,135.61888,0,135.61888,0,0,8423.44,-43,7894.67,0,-528.78,0,,,56,,,,,,,,68,,,,,,,,32.79,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-26.76917,11900.05447,206,8556.81055,8481.79,,40,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0 +D,DREGION,,2,"2023/12/14 23:20:00",1,QLD1,0,148.38884,0,148.38884,0,0,7138.07,-33,6893.65,0,-244.42,0,,,0,,,,,,,,113.61,,,,,,,,85,,,,,,,,27,,,,,,,,220.33,,,,,,,,227,,,,,,-23.17364,9778.21969,125,7200.20752,7145.01,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0 +D,DREGION,,2,"2023/12/14 23:20:00",1,SA1,0,118.44,0,118.44,0,0,1238.29,-2,1056.03,0,-182.27,0,,,60.39,,,,,,,,64,,,,,,,,56,,,,,,,,164,,,,,,,,121.91,,,,,,,,137.24,,,,,,6.50946,2498.7479,362,1234.76123,1239.56,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0 +D,DREGION,,2,"2023/12/14 23:20:00",1,TAS1,0,101.6006,0,101.6006,0,0,1029,0,1401.37,0,372.37,0,,,0,,,,,,,,16.08,,,,,,,,16.08,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,15.47619,2354.57331,0,1027.6228,1041.08,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 23:20:00",1,VIC1,0,112.25244,0,112.25244,0,0,4536.57,14,5265.02,0,728.45,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,119.94,,,,,,,,144,,,,,,,,113,,,,,,-13.9705,7512.0249,447,4608.58105,4603.3,,70,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0 +D,DREGION,,2,"2023/12/14 23:25:00",1,NSW1,0,123.05388,0,123.05388,0,0,8266.58,-61,7892.06,0,-374.51,0,,,54.48,,,,,,,,46,,,,,,,,43,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-28.44736,11923.0825,206,8409.29004,8310.52,,81,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:25:00",1,QLD1,0,134.33747,0,134.33747,0,0,7081.07,-57,6844.74,10,-246.33,0,,,0,,,,,,,,149.48,,,,,,,,88.19,,,,,,,,26,,,,,,,,225.33,,,,,,,,216,,,,,,-31.87336,9750.66438,125,7176.19434,7097.82,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:25:00",1,SA1,0,110.16644,0,110.16644,0,0,1224.18,-3,1042.3,0,-181.89,0,,,61,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,117.45,,,,,,,,146.78,,,,,,-1.10934,2492.29681,362,1230.50488,1225.44,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:25:00",1,TAS1,0,98.12,0,98.12,0,0,1010.87,-2,1216.81,0,205.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,5.95238,2353.01974,0,1017.39844,1014.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.56,3.56,0 +D,DREGION,,2,"2023/12/14 23:25:00",1,VIC1,0,104.41313,0,104.41313,0,0,4569.24,10,5267.73,0,698.5,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,117.79,,,,,,,,142,,,,,,,,113,,,,,,-14.3459,7505.73485,447,4634.51709,4615.52,,29,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:30:00",1,NSW1,0,134.64506,0,134.64506,0,0,8342.79,-42,7870,0,-472.79,0,,,62,,,,,,,,40,,,,,,,,38,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0,11914.3715,206,8428.66016,8400.88,,87,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 23:30:00",1,QLD1,0,147.81771,0,147.81771,0,0,7031.13,-49,6756.35,10,-284.78,0,,,0,,,,,,,,130.93,,,,,,,,68.04,,,,,,,,27,,,,,,,,196.33,,,,,,,,230,,,,,,0,9655.33156,125,7094.42139,7049.21,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 23:30:00",1,SA1,0,118.44,0,118.44,0,0,1253.72,26,1052.17,0,-201.55,0,,,54,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,146.37,,,,,,,,134.71,,,,,,0,2480.47219,362,1229.1925,1255.34,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 23:30:00",1,TAS1,0,100.55427,0,100.55427,0,0,988.8,-5,1386.4,0,397.6,0,,,0,,,,,,,,39.8,,,,,,,,39.8,,,,,,,,28.21,,,,,,,,50,,,,,,,,50,,,,,,-3.57143,2338.4979,0,1000.24408,1002.6,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.17,0.17,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 23:30:00",1,VIC1,0,111.69217,0,111.69217,0,0,4574.73,-4,5283.4,0,708.68,0,,,124.98,,,,,,,,100,,,,,,,,100,,,,,,,,140.75,,,,,,,,144,,,,,,,,113,,,,,,0,7522.40235,447,4628.08545,4640.28,,14,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/14 23:35:00",1,NSW1,0,161.01636,0,161.01636,0,0,8299.8,-23,7753.66,0,-546.14,0,,,18.96,,,,,,,,34,,,,,,,,0,,,,,,,,132.99,,,,,,,,82,,,,,,,,80,,,,,,-23.58815,11901.85434,206,8406.77441,8359.83,,40,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:35:00",1,QLD1,0,176.78324,0,176.78324,0,0,6994.58,-50,6746.88,10,-257.7,0,,,42,,,,,,,,55.2,,,,,,,,42,,,,,,,,33,,,,,,,,202.33,,,,,,,,249,,,,,,-40.28371,9636.80135,125,7103.06885,7011.67,,45,,,,164,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:35:00",1,SA1,0,143.59518,0,143.59518,0,0,1292.42,43,1032.17,0,-260.25,0,,,45,,,,,,,,63,,,,,,,,49,,,,,,,,155,,,,,,,,163,,,,,,,,152,,,,,,-1.50411,2470.57918,362,1253.21667,1295.35,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:35:00",1,TAS1,0,115.2,0,115.2,0,0,1004.39,-1,1475.86,0,471.46,0,,,7.32,,,,,,,,107.32,,,,,,,,107.32,,,,,,,,0,,,,,,,,10,,,,,,,,10,,,,,,3.57143,2334.14958,0,1012.06464,1023.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.31632,7.31632,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 23:35:00",1,VIC1,0,132.72,0,132.72,0,0,4474.41,-8,5230.71,0,756.3,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,148,,,,,,,,157.9,,,,,,,,124.23,,,,,,-16.27071,7545.71551,447,4565.39014,4548.57,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0 +D,DREGION,,2,"2023/12/14 23:40:00",1,NSW1,0,141.21574,0,141.21574,0,0,8172.79,-47,7761.22,0,-411.57,0,,,25.24,,,,,,,,41,,,,,,,,30.7,,,,,,,,99,,,,,,,,83,,,,,,,,82,,,,,,-29.09713,11909.21675,206,8297.38086,8206,,76,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:40:00",1,QLD1,0,151.64673,0,151.64673,0,0,6867.9,-44,6714.02,10,-163.88,0,,,42,,,,,,,,155.28,,,,,,,,102,,,,,,,,29,,,,,,,,197.33,,,,,,,,242,,,,,,-27.51986,9612.80312,125,6955.84912,6881.68,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:40:00",1,SA1,0,137.79,0,137.79,0,0,1333.09,29,918.83,0,-414.26,0,,,47,,,,,,,,65,,,,,,,,58,,,,,,,,153,,,,,,,,133.37,,,,,,,,120.71,,,,,,-5.94755,2459.18039,362,1314.90759,1341.15,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:40:00",1,TAS1,0,112.38591,0,112.38591,0,0,1045.82,4,1371.98,0,326.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,8.33333,2323.08485,0,1047.31042,1055.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/14 23:40:00",1,VIC1,0,122.39435,0,122.39435,0,0,4454.41,-28,5228.64,0,774.23,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,138.66,,,,,,,,154,,,,,,,,123,,,,,,-12.94601,7585.64423,447,4560.09473,4510.85,,34,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:45:00",1,NSW1,0,122.74686,0,122.74686,0,0,8116.34,-52,7766.53,0,-349.81,0,,,34.93,,,,,,,,74,,,,,,,,70,,,,,,,,109,,,,,,,,93,,,,,,,,91,,,,,,-23.85362,11914.52859,206,8231.49219,8153.95,,63,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 23:45:00",1,QLD1,0,133.43318,0,133.43318,0,0,6902.46,-34,6679.24,10,-233.22,0,,,45,,,,,,,,135.19,,,,,,,,76,,,,,,,,25.31,,,,,,,,217.33,,,,,,,,232,,,,,,-14.53103,9597.31268,125,6966.15479,6918.29,,43,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 23:45:00",1,SA1,0,118.81324,0,118.81324,0,0,1312.06,3,899.11,0,-412.95,0,,,47,,,,,,,,65,,,,,,,,58,,,,,,,,150,,,,,,,,112.24,,,,,,,,130.57,,,,,,-12.00734,2433.10708,362,1328.20691,1320.07,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 23:45:00",1,TAS1,0,98.15,0,98.15,0,0,1024.59,-3,1280.13,0,255.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-0.18832,2316.14003,0,1035.90295,1030.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.53,3.53,0 +D,DREGION,,2,"2023/12/14 23:45:00",1,VIC1,0,105.53257,0,105.53257,0,0,4437.98,-7,5291.31,0,853.33,0,,,112,,,,,,,,102,,,,,,,,102,,,,,,,,135,,,,,,,,144,,,,,,,,113,,,,,,-9.66529,7666.02551,447,4513.44629,4493.9,,34,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0 +D,DREGION,,2,"2023/12/14 23:50:00",1,NSW1,0,121.43468,0,121.43468,0,0,8122.06,-27,7781.76,0,-340.31,0,,,43.04,,,,,,,,58,,,,,,,,54,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-24.09818,11934.75741,206,8201.58789,8154.46,,76,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:50:00",1,QLD1,0,131.05313,0,131.05313,0,0,6847.04,-24,6658.04,10,-198.99,0,,,45,,,,,,,,163.33,,,,,,,,105.05,,,,,,,,28,,,,,,,,199.08,,,,,,,,232,,,,,,-9.06247,9606.32333,125,6892.18604,6861.7,,60,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:50:00",1,SA1,0,118.44,0,118.44,0,0,1292.44,1,882.97,0,-409.47,0,,,50,,,,,,,,64,,,,,,,,56,,,,,,,,156.79,,,,,,,,135,,,,,,,,135.08,,,,,,-17.10442,2418.37526,362,1316.63354,1300.31,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:50:00",1,TAS1,0,98.12,0,98.12,0,0,1021,-3,1259.77,0,238.77,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-7.4982,2343.50142,0,1036.14966,1025.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.56,3.56,0 +D,DREGION,,2,"2023/12/14 23:50:00",1,VIC1,0,105.20545,0,105.20545,0,0,4500.55,-36,5311.58,0,811.02,0,,,101,,,,,,,,91,,,,,,,,91,,,,,,,,130,,,,,,,,143,,,,,,,,113,,,,,,-6.20144,7683.64998,447,4593.27539,4551.88,,14,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/14 23:55:00",1,NSW1,0,115.02986,0,115.02986,0,0,8073.68,-32,7793.21,0,-280.47,0,,,29.91,,,,,,,,82,,,,,,,,56.61,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-13.60847,11941.21013,206,8148.15625,8099.18,,90,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 23:55:00",1,QLD1,0,123.23319,0,123.23319,0,0,6817,-33,6650.79,10,-176.21,0,,,45,,,,,,,,122.59,,,,,,,,85,,,,,,,,27,,,,,,,,190.66,,,,,,,,232,,,,,,-3.66693,9598.46266,125,6867.7041,6830.92,,41,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 23:55:00",1,SA1,0,116.29845,0,116.29845,0,0,1302.22,-3,830.45,0,-471.78,0,,,48,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,142,,,,,,,,134.66,,,,,,-15.45761,2413.44613,362,1330.12769,1312.85,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/14 23:55:00",1,TAS1,0,96.18,0,96.18,0,0,1014.02,-3,1165.57,0,151.55,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-12.42713,2356.85715,0,1032.99243,1015.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,5.5,5.5,0 +D,DREGION,,2,"2023/12/14 23:55:00",1,VIC1,0,101.28321,0,101.28321,0,0,4455.49,-17,5322.57,0,867.08,0,,,117,,,,,,,,107,,,,,,,,107,,,,,,,,121.98,,,,,,,,144,,,,,,,,113,,,,,,0.34456,7698.48465,447,4524.47021,4503.87,,19,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0 +D,DREGION,,2,"2023/12/15 00:00:00",1,NSW1,0,111.67969,0,111.67969,0,0,8041.32,-32,7796.47,0,-244.86,0,,,95,,,,,,,,109,,,,,,,,105,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-6.42002,11944.46683,206,8104.29199,8062.73,,30,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:00:00",1,QLD1,0,119.55,0,119.55,0,0,6797.45,-46,6649.3,10,-158.15,0,,,45,,,,,,,,157.81,,,,,,,,98.23,,,,,,,,27,,,,,,,,186.33,,,,,,,,232,,,,,,1.30133,9607.19444,125,6854.82764,6810.83,,40,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:00:00",1,SA1,0,113.77231,0,113.77231,0,0,1296.08,-1,824.92,0,-471.16,0,,,61,,,,,,,,66,,,,,,,,58,,,,,,,,157.33,,,,,,,,131.63,,,,,,,,119.97,,,,,,-18.90088,2407.92278,362,1327.07129,1306.69,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:00:00",1,TAS1,0,96.18,0,96.18,0,0,1006.06,-2,1137.3,0,131.25,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,63.49,,,,,,,,63.49,,,,,,-17.35607,2346.42349,0,1026.01453,1007.3,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,5.5,5.5,0 +D,DREGION,,2,"2023/12/15 00:00:00",1,VIC1,0,99.074,0,99.074,0,0,4389.45,-48,5213.12,0,823.66,0,,,56,,,,,,,,46,,,,,,,,46,,,,,,,,128,,,,,,,,144,,,,,,,,113,,,,,,4.17163,7698.86735,447,4480.40625,4433.55,,80,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:05:00",1,NSW1,0,116.77029,0,116.77029,0,0,8020.07,-32,7788.1,0,-231.98,0,,,68.89,,,,,,,,65,,,,,,,,61,,,,,,,,121,,,,,,,,106,,,,,,,,103,,,,,,5.00914,11959.39576,181,8066.92334,8044.91,,106.2,,,,32.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:05:00",1,QLD1,0,125.74745,0,125.74745,0,0,6802.74,-43,6621.2,16,-197.54,0,,,29,,,,,,,,43.51,,,,,,,,29,,,,,,,,25,,,,,,,,101.97,,,,,,,,141,,,,,,5.20593,9509.77693,125,6852.94482,6823.16,,0,,,,102.98,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:05:00",1,SA1,0,118.44,0,118.44,0,0,1289.29,6,820.78,0,-468.52,0,,,63,,,,,,,,98,,,,,,,,57,,,,,,,,84.77,,,,,,,,91,,,,,,,,146.7,,,,,,-15.82512,2410.08863,362,1309.67822,1299.78,,19.8,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:05:00",1,TAS1,0,98.11122,0,98.11122,0,0,998.56,2,1168.36,0,169.8,0,,,0,,,,,,,,61.48,,,,,,,,43.21,,,,,,,,153,,,,,,,,205.9,,,,,,,,145.17,,,,,,-14.96299,2385.58915,0,1012.62396,1000.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.58873,3.58873,0 +D,DREGION,,2,"2023/12/15 00:05:00",1,VIC1,0,103.58847,0,103.58847,0,0,4418.1,-2,5235.1,0,817,0,,,81,,,,,,,,112,,,,,,,,117,,,,,,,,87,,,,,,,,114,,,,,,,,83,,,,,,7.94803,7648.10133,392,4454.5708,4464.87,,34,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:10:00",1,NSW1,0,117.92275,0,117.92275,0,0,8028.33,-40,7824.9,0,-203.43,0,,,65.82,,,,,,,,126,,,,,,,,92.64,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,21.08255,11950.73259,181,8065.1665,8056.83,,87,,,,32.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:10:00",1,QLD1,0,127.66465,0,127.66465,0,0,6717.97,-36,6470.41,0,-247.56,0,,,29,,,,,,,,29,,,,,,,,29,,,,,,,,25,,,,,,,,108,,,,,,,,141,,,,,,-10.67269,9255.73335,125,6782.67627,6723.81,,0,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:10:00",1,SA1,0,119.28023,0,119.28023,0,0,1311.48,6,835.27,0,-476.21,0,,,61,,,,,,,,63,,,,,,,,59,,,,,,,,84.24,,,,,,,,88,,,,,,,,135.51,,,,,,-11.40018,2404.26506,362,1329.31531,1322.33,,29,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:10:00",1,TAS1,0,98.12,0,98.12,0,0,992.75,-2,1174.77,0,182.02,0,,,0,,,,,,,,20.22,,,,,,,,0,,,,,,,,153,,,,,,,,204.64,,,,,,,,154.14,,,,,,-18.73131,2342.96492,0,1013.97394,995.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,3.57,3.57,0 +D,DREGION,,2,"2023/12/15 00:10:00",1,VIC1,0,103.86953,0,103.86953,0,0,4378.66,-30,5221.1,0,842.44,0,,,87,,,,,,,,143,,,,,,,,127,,,,,,,,85,,,,,,,,110,,,,,,,,83,,,,,,8.00202,7632.09772,392,4444.54395,4428.08,,44,,,,53.98,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 00:15:00",1,NSW1,0,110.69162,0,110.69162,0,0,7913.88,-42,7868.35,0,-45.53,0,,,60.04,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,28.12049,11956.61452,181,7952.7207,7932.68,,126,,,,26.01,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0 +D,DREGION,,2,"2023/12/15 00:15:00",1,QLD1,0,119.55,0,119.55,0,0,6625.26,-33,6383.04,0,-242.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,122,,,,,,,,141,,,,,,-23.68052,9234.65353,125,6688.07422,6630.68,,0,,,,57.99,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0 +D,DREGION,,2,"2023/12/15 00:15:00",1,SA1,0,117.93465,0,117.93465,0,0,1322.8,5,787.23,0,-535.56,0,,,51,,,,,,,,97.2,,,,,,,,59,,,,,,,,84.78,,,,,,,,89,,,,,,,,137.82,,,,,,-1.25813,2406.23495,362,1331.06433,1336.69,,10,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0 +D,DREGION,,2,"2023/12/15 00:15:00",1,TAS1,0,98.12,0,98.12,0,0,1010,-3,1090.35,0,80.35,0,,,0,,,,,,,,30,,,,,,,,0,,,,,,,,153,,,,,,,,194.48,,,,,,,,154.12,,,,,,-5.83295,2345.0387,0,1019.98212,1010.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.57,3.57,0 +D,DREGION,,2,"2023/12/15 00:15:00",1,VIC1,0,100.70627,0,100.70627,0,0,4373,-25,5197.24,0,824.24,0,,,87,,,,,,,,143,,,,,,,,141.82,,,,,,,,86,,,,,,,,107.46,,,,,,,,83,,,,,,2.67436,7618.24412,389,4440.78516,4415.82,,44,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0 +D,DREGION,,2,"2023/12/15 00:20:00",1,NSW1,0,111.77349,0,111.77349,0,0,7894.57,-42,7800.17,3,-97.39,0,,,68.8,,,,,,,,144.34,,,,,,,,107.42,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,30.92782,11956.59474,181,7934.62988,7921.59,,63.2,,,,32.01,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0 +D,DREGION,,2,"2023/12/15 00:20:00",1,QLD1,0,121.50733,0,121.50733,0,0,6656.32,-27,6391.09,0,-265.23,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,121,,,,,,,,141,,,,,,-17.7476,9214.01343,125,6709.56494,6662.49,,0,,,,79.99,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0 +D,DREGION,,2,"2023/12/15 00:20:00",1,SA1,0,116.55246,0,116.55246,0,0,1309.97,4,787.55,0,-522.43,0,,,43,,,,,,,,62,,,,,,,,56,,,,,,,,83.55,,,,,,,,85,,,,,,,,135.94,,,,,,-6.20371,2406.5472,362,1324.41064,1323.19,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0 +D,DREGION,,2,"2023/12/15 00:20:00",1,TAS1,0,98.12,0,98.12,0,0,996.17,-3,1096.62,0,100.45,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,153,,,,,,,,196.08,,,,,,,,154.14,,,,,,-9.43424,2358.13526,0,1008.76813,996.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.03,0.03,0,0.38,0.38,0,0,0,0,3.57,3.57,0 +D,DREGION,,2,"2023/12/15 00:20:00",1,VIC1,0,100,0,100,0,0,4268.75,-23,5143.96,0,875.22,0,,,86,,,,,,,,131,,,,,,,,106,,,,,,,,85,,,,,,,,109,,,,,,,,83,,,,,,0.42719,7607.23176,389,4337.41406,4315.3,,72,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0 +D,DREGION,,2,"2023/12/15 00:25:00",1,NSW1,0,111.71086,0,111.71086,0,0,7829.82,-43,7754.1,0,-75.72,0,,,53,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,29.79887,11978.13998,181,7870.64063,7853.78,,102.86,,,,32,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:25:00",1,QLD1,0,121.3557,0,121.3557,0,0,6660.36,-23,6382.99,0,-277.37,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28.24,,,,,,,,120,,,,,,,,141,,,,,,-10.56678,9205.33289,125,6700.70361,6666.85,,0,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:25:00",1,SA1,0,116.55726,0,116.55726,0,0,1315.52,2,781.51,0,-534.02,0,,,58.15,,,,,,,,86.89,,,,,,,,59,,,,,,,,79,,,,,,,,89,,,,,,,,135.99,,,,,,-5.91307,2399.50761,362,1334.1687,1329.36,,10,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:25:00",1,TAS1,0,96.68948,0,96.68948,0,0,1000.78,-2,1092.42,0,91.64,0,,,0,,,,,,,,41.13,,,,,,,,5.91,,,,,,,,156,,,,,,,,192.12,,,,,,,,157.13,,,,,,-6.39286,2354.52307,0,1009.25317,1001.29,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0,0,0,5.00052,5.00052,0 +D,DREGION,,2,"2023/12/15 00:25:00",1,VIC1,0,100,0,100,0,0,4222.09,-26,5109.33,0,887.24,0,,,87,,,,,,,,143,,,,,,,,142,,,,,,,,86,,,,,,,,113,,,,,,,,83,,,,,,-2.19218,7617.94463,389,4296.84473,4269.07,,56,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:30:00",1,NSW1,0,110.14141,0,110.14141,0,0,7765.38,-44,7745.29,0,-20.08,0,,,89,,,,,,,,137.71,,,,,,,,63,,,,,,,,168.59,,,,,,,,211,,,,,,,,204.66,,,,,,36.00293,11982.90744,181,7794.01953,7786.92,,94,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:30:00",1,QLD1,0,119.55,0,119.55,0,0,6660.21,-20,6396.42,20,-283.79,0,,,45,,,,,,,,64,,,,,,,,64.82,,,,,,,,30,,,,,,,,144,,,,,,,,163,,,,,,-4.07781,9484.68065,125,6690.46338,6686.8,,0,,,,124,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:30:00",1,SA1,0,117.69915,0,117.69915,0,0,1320.71,-1,770.84,0,-549.87,0,,,55.63,,,,,,,,114,,,,,,,,119,,,,,,,,162,,,,,,,,136,,,,,,,,163,,,,,,-2.25794,2388.84354,362,1338.68591,1335.42,,21,,,,27,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:30:00",1,TAS1,0,96.18,0,96.18,0,0,1004.56,-3,1096.07,0,91.5,0,,,17.71,,,,,,,,117.71,,,,,,,,117.71,,,,,,,,42.75,,,,,,,,142.74,,,,,,,,142.74,,,,,,-5.24323,2364.85745,0,1012.87341,1005.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,1.75,1.75,0,0.38,0.38,0,5.5,5.5,0 +D,DREGION,,2,"2023/12/15 00:30:00",1,VIC1,0,100,0,100,0,0,4230.69,-25,5082.05,0,851.36,0,,,56,,,,,,,,70,,,,,,,,67,,,,,,,,111,,,,,,,,130.66,,,,,,,,91,,,,,,-5.18896,7630.02048,389,4306.39551,4276.47,,95,,,,28,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:35:00",1,NSW1,0,108.89663,0,108.89663,0,0,7751.07,-42,7847.71,0,96.64,0,,,85,,,,,,,,159,,,,,,,,132.5,,,,,,,,121,,,,,,,,131.39,,,,,,,,103.39,,,,,,29.76312,11982.06546,181,7776.6377,7771.28,,91,,,,80.92,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/15 00:35:00",1,QLD1,0,119.55,0,119.55,0,0,6572.88,-19,6269.77,20,-323.12,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,146,,,,,,,,168,,,,,,0.83191,9355.83985,125,6614.45313,6600.67,,0,,,,44.08,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/15 00:35:00",1,SA1,0,117.59642,0,117.59642,0,0,1318.05,-3,764.62,0,-553.43,0,,,58,,,,,,,,64,,,,,,,,57,,,,,,,,130.13,,,,,,,,133,,,,,,,,161,,,,,,-3.54895,2382.62441,362,1339.58862,1332.96,,10,,,,12,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/15 00:35:00",1,TAS1,0,98.12,0,98.12,0,0,1017.29,-3,1117.94,0,100.65,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,106,,,,,,,,94,,,,,,,,94,,,,,,1.46712,2369.56137,0,1018.89966,1017.94,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0.14,0.14,0,0.38,0.38,0,0,0,0,2.56,2.56,0 +D,DREGION,,2,"2023/12/15 00:35:00",1,VIC1,0,99.91625,0,99.91625,0,0,4261.48,-23,5026.84,0,765.35,0,,,86,,,,,,,,117.67,,,,,,,,76,,,,,,,,84,,,,,,,,115,,,,,,,,93,,,,,,-8.13685,7617.83548,389,4335.04736,4304.03,,59,,,,33,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0 +D,DREGION,,2,"2023/12/15 00:40:00",1,NSW1,0,109.74113,0,109.74113,0,0,7778.33,-37,7828.24,0,49.91,0,,,79,,,,,,,,153,,,,,,,,139,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,33.26197,11954.24351,181,7800.83838,7800.59,,110,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0 +D,DREGION,,2,"2023/12/15 00:40:00",1,QLD1,0,120.51405,0,120.51405,0,0,6561.56,-20,6257.39,20,-324.17,0,,,39,,,,,,,,39,,,,,,,,39,,,,,,,,25,,,,,,,,140,,,,,,,,164,,,,,,-9.3305,9392.28502,125,6617.48682,6589.43,,16,,,,62,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0 +D,DREGION,,2,"2023/12/15 00:40:00",1,SA1,0,118.26803,0,118.26803,0,0,1340.59,0,766.18,0,-574.41,0,,,60,,,,,,,,70.02,,,,,,,,58,,,,,,,,131.87,,,,,,,,170.09,,,,,,,,156.09,,,,,,-8.70742,2384.17585,362,1365.04077,1356.73,,20,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0 +D,DREGION,,2,"2023/12/15 00:40:00",1,TAS1,0,98.12,0,98.12,0,0,1030.65,-2,1131.3,0,100.65,0,,,0,,,,,,,,50,,,,,,,,12.45,,,,,,,,106,,,,,,,,94,,,,,,,,94,,,,,,8.84563,2379.84702,0,1024.15344,1031.3,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.56,2.56,0 +D,DREGION,,2,"2023/12/15 00:40:00",1,VIC1,0,100,0,100,0,0,4234.72,-19,5076.99,0,842.27,0,,,72,,,,,,,,73,,,,,,,,62,,,,,,,,85,,,,,,,,109,,,,,,,,102,,,,,,-11.15253,7609.31381,389,4308.25684,4282.05,,14,,,,16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0 +D,DREGION,,2,"2023/12/15 00:45:00",1,NSW1,0,85.99,0,85.99,0,0,7642.49,-39,7793.69,0,151.19,0,,,65.26,,,,,,,,111.32,,,,,,,,70.66,,,,,,,,96,,,,,,,,81,,,,,,,,78,,,,,,0,11958.55052,181,7706.95898,7660.81,,138,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 00:45:00",1,QLD1,0,94.31385,0,94.31385,0,0,6529.07,-20,6219.2,20,-329.86,0,,,45,,,,,,,,64,,,,,,,,72,,,,,,,,25,,,,,,,,116,,,,,,,,141,,,,,,-15.83554,9549.56846,125,6593.91846,6556.97,,0,,,,58,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 00:45:00",1,SA1,0,95.661,0,95.661,0,0,1363.71,1,743.82,4,-623.89,0,,,48,,,,,,,,139,,,,,,,,117,,,,,,,,125.55,,,,,,,,125.35,,,,,,,,128.35,,,,,,-9.89034,2381.8196,362,1392.55396,1386.89,,35,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 00:45:00",1,TAS1,0,115.12,0,115.12,0,0,1033.12,-1,1033.12,0,0,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,106,,,,,,,,191.26,,,,,,,,191.26,,,,,,9.41572,2369.47199,0,1024.84546,1033.12,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0,0,0,0,0,0,0,0,0,2.56,2.56,0 +D,DREGION,,2,"2023/12/15 00:45:00",1,VIC1,0,79.70916,0,79.70916,0,0,4133.41,-16,5028.01,0,894.61,0,,,87,,,,,,,,122,,,,,,,,102,,,,,,,,118,,,,,,,,108,,,,,,,,83,,,,,,-13.01274,7619.01446,389,4214.04395,4180.06,,87,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 00:50:00",1,NSW1,0,100,0,100,0,0,7626.19,-40,7837.96,0,211.77,0,,,114.54,,,,,,,,159,,,,,,,,145,,,,,,,,147.87,,,,,,,,170.89,,,,,,,,182.89,,,,,,3.45252,11953.96526,181,7680.43359,7641.24,,92,,,,77,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:50:00",1,QLD1,0,108.94679,0,108.94679,0,0,6526.42,-20,6229.14,20,-317.28,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,143,,,,,,,,168,,,,,,-8.44384,9702.62481,125,6582.59033,6553.81,,0,,,,84.03,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:50:00",1,SA1,0,111.28947,0,111.28947,0,0,1358.19,1,794.38,0,-563.81,0,,,60,,,,,,,,131.56,,,,,,,,91.6,,,,,,,,163,,,,,,,,172,,,,,,,,163,,,,,,-10.75323,2384.61487,362,1389.48413,1373.69,,10,,,,18.98,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:50:00",1,TAS1,0,95.1112,0,95.1112,0,0,1018.58,-1,909.49,0,-109.09,0,,,17.69,,,,,,,,117.68,,,,,,,,117.68,,,,,,,,23.29,,,,,,,,123.28,,,,,,,,123.28,,,,,,1.37855,2340.58662,0,1018.19946,1020.29,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.38,0.38,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/15 00:50:00",1,VIC1,0,94.19276,0,94.19276,0,0,4173.26,-19,5025.46,0,852.21,0,,,25,,,,,,,,50,,,,,,,,30,,,,,,,,126,,,,,,,,135,,,,,,,,107,,,,,,-9.80584,7616.46339,389,4245.62207,4207.4,,108,,,,40,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 00:55:00",1,NSW1,0,100,0,100,0,0,7545.5,-42,7871.12,36,289.62,0,,,89,,,,,,,,67,,,,,,,,65.57,,,,,,,,149.57,,,,,,,,168.73,,,,,,,,175.73,,,,,,-0.47145,11965.10305,181,7602.34814,7599.53,,85,,,,72,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:55:00",1,QLD1,0,110.32534,0,110.32534,0,0,6575.42,-11,6228.16,26,-373.26,0,,,45,,,,,,,,46,,,,,,,,45,,,,,,,,33,,,,,,,,142,,,,,,,,168,,,,,,-13.74127,9718.66267,125,6628.21533,6610.91,,0,,,,71.41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:55:00",1,SA1,0,110.81874,0,110.81874,0,0,1350.32,-1,803.9,6,-552.42,0,,,66,,,,,,,,125,,,,,,,,98,,,,,,,,166,,,,,,,,176,,,,,,,,165,,,,,,-3.01164,2377.90324,362,1370.25708,1371.18,,21,,,,15,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 00:55:00",1,TAS1,0,73.57066,0,73.57066,0,0,1004.16,-1,926.56,0,-77.59,0,,,36.9,,,,,,,,131.9,,,,,,,,103.23,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-6.65861,2357.76101,0,1011.8139,1004.16,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/15 00:55:00",1,VIC1,0,94.15132,0,94.15132,0,0,4173.78,-14,4968.56,5,789.78,0,,,10,,,,,,,,18.16,,,,,,,,0,,,,,,,,124,,,,,,,,131,,,,,,,,109,,,,,,-10.77155,7559.56212,389,4230.86865,4212.54,,54,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 01:00:00",1,NSW1,0,90.16381,0,90.16381,0,0,7493.1,-42,7847.58,10,344.48,0,,,89,,,,,,,,80.07,,,,,,,,63.56,,,,,,,,150.28,,,,,,,,174.52,,,,,,,,182.52,,,,,,-0.42113,11958.58185,181,7580.80762,7516.44,,111,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 01:00:00",1,QLD1,0,98.8153,0,98.8153,0,0,6557.13,-13,6221.2,0,-335.93,0,,,45,,,,,,,,53,,,,,,,,45,,,,,,,,33,,,,,,,,135,,,,,,,,163,,,,,,-14.957,9725.09843,125,6619.14844,6565.14,,0,,,,74,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 01:00:00",1,SA1,0,101.44,0,101.44,0,0,1334,-2,776.56,0,-557.44,0,,,66,,,,,,,,113,,,,,,,,98,,,,,,,,166,,,,,,,,176,,,,,,,,165,,,,,,-0.543,2366.15792,362,1354.08813,1349.14,,10,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 01:00:00",1,TAS1,0,73.81376,0,73.81376,0,0,988.99,-1,926.83,0,-62.16,0,,,21.73,,,,,,,,131.9,,,,,,,,105.35,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-6.79286,2357.93454,0,996.78754,988.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.45,0.45,0,0.38,0.38,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/15 01:00:00",1,VIC1,0,86.18164,0,86.18164,0,0,4199.47,-17,4878.68,0,679.22,0,,,25,,,,,,,,10,,,,,,,,0,,,,,,,,123,,,,,,,,132,,,,,,,,107,,,,,,6.73044,7478.68272,389,4240.44287,4231.14,,39,,,,39.84,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 01:05:00",1,NSW1,0,135.1967,0,135.1967,0,0,7482.99,-42,7847.25,0,364.26,0,,,112.97,,,,,,,,139,,,,,,,,94.37,,,,,,,,161.01,,,,,,,,191.87,,,,,,,,190.87,,,,,,-7.32057,11972.16613,181,7556.22607,7497.89,,64,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 01:05:00",1,QLD1,0,148.95272,0,148.95272,0,0,6529.41,-15,6166.75,0,-362.66,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,134,,,,,,,,163,,,,,,-14.69225,9725.68369,125,6566.58789,6538.26,,0,,,,84.92,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 01:05:00",1,SA1,0,150.5851,0,150.5851,0,0,1335.6,-5,813.59,0,-522.02,0,,,61,,,,,,,,63,,,,,,,,55,,,,,,,,160,,,,,,,,170,,,,,,,,160,,,,,,-2.8758,2361.863,362,1360.55591,1348.83,,10,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 01:05:00",1,TAS1,0,115.18,0,115.18,0,0,985.73,-1,921.65,0,-64.08,0,,,3.43,,,,,,,,104.99,,,,,,,,103.43,,,,,,,,6,,,,,,,,6,,,,,,,,6,,,,,,-6.46103,2346.83124,0,993.1908,985.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,5.79772,5.79772,0 +D,DREGION,,2,"2023/12/15 01:05:00",1,VIC1,0,129.17668,0,129.17668,0,0,4105.43,-18,4754.72,0,649.29,0,,,25,,,,,,,,37.27,,,,,,,,15,,,,,,,,116,,,,,,,,120,,,,,,,,102,,,,,,4.69343,7463.71812,389,4153.84766,4133.25,,86,,,,27,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 01:10:00",1,NSW1,0,145.39246,0,145.39246,0,0,7493.89,-38,7850.39,0,356.5,0,,,80,,,,,,,,94,,,,,,,,56,,,,,,,,154.76,,,,,,,,186.83,,,,,,,,186.83,,,,,,7.43553,11971.38932,181,7538.77588,7512.71,,50,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/15 01:10:00",1,QLD1,0,161.16684,0,161.16684,0,0,6516.76,-15,6112.86,0,-403.9,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,133,,,,,,,,163,,,,,,-23.62419,9706.18978,125,6563.8252,6527.22,,76,,,,91.06,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/15 01:10:00",1,SA1,0,159.70267,0,159.70267,0,0,1327.1,-5,823.1,0,-504,0,,,53,,,,,,,,66,,,,,,,,57,,,,,,,,166,,,,,,,,175,,,,,,,,164,,,,,,5.85372,2352.09711,362,1338.42407,1339.37,,20,,,,59,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/15 01:10:00",1,TAS1,0,123.62975,0,123.62975,0,0,1024.3,-1,966.36,0,-57.94,0,,,9.82,,,,,,,,109.81,,,,,,,,109.81,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-12.7179,2361.45569,0,1038.01721,1024.3,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:10:00",1,VIC1,0,137.66,0,137.66,0,0,4069.38,-22,4747.69,0,678.32,0,,,72,,,,,,,,71.74,,,,,,,,62,,,,,,,,119,,,,,,,,124,,,,,,,,105,,,,,,-9.39063,7444.18163,392,4125.92383,4096.79,,14,,,,30,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0 +D,DREGION,,2,"2023/12/15 01:15:00",1,NSW1,0,127.74458,0,127.74458,0,0,7429.06,-36,7849.69,0,420.64,0,,,62.9,,,,,,,,113.02,,,,,,,,65.35,,,,,,,,156,,,,,,,,187.57,,,,,,,,187.57,,,,,,7.66029,11970.69492,181,7469.71924,7444.55,,55,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:15:00",1,QLD1,0,141.40189,0,141.40189,0,0,6453.61,-19,6065.28,0,-388.34,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,133,,,,,,,,163,,,,,,-31.29059,9708.65236,125,6511.60449,6463.18,,26,,,,60.14,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:15:00",1,SA1,0,142.5231,0,142.5231,0,0,1319.94,-8,816.97,0,-502.97,0,,,48,,,,,,,,66,,,,,,,,57,,,,,,,,166,,,,,,,,175,,,,,,,,164,,,,,,11.74999,2345.96806,362,1328.30249,1332.17,,20,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:15:00",1,TAS1,0,115.22,0,115.22,0,0,1025.83,1,927.98,0,-97.86,0,,,0,,,,,,,,69.45,,,,,,,,69.45,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-2.37093,2352.70887,0,1027.20288,1025.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:15:00",1,VIC1,0,122.84801,0,122.84801,0,0,4061.5,-23,4692.53,0,631.03,0,,,87,,,,,,,,92,,,,,,,,77,,,,,,,,115,,,,,,,,121,,,,,,,,102,,,,,,-9.71265,7413.53167,392,4118.95068,4086.71,,59,,,,31,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:20:00",1,NSW1,0,143.05991,0,143.05991,0,0,7341.05,-35,7790.4,0,449.35,0,,,55,,,,,,,,68,,,,,,,,58.24,,,,,,,,163.38,,,,,,,,190.23,,,,,,,,192.23,,,,,,8.04142,11790.80659,181,7385.25,7355.51,,121,,,,29.45,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:20:00",1,QLD1,0,157.22673,0,157.22673,0,0,6439.35,-16,6054.14,0,-385.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,137,,,,,,,,168,,,,,,-37.20901,9710.71611,125,6502.89648,6448.65,,0,,,,68,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:20:00",1,SA1,0,159.70409,0,159.70409,0,0,1314.63,-9,809.84,0,-504.8,0,,,59.02,,,,,,,,64,,,,,,,,55,,,,,,,,155,,,,,,,,165,,,,,,,,155,,,,,,12.74506,2335.83891,362,1322.66565,1326.95,,10,,,,63,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:20:00",1,TAS1,0,126.82077,0,126.82077,0,0,1038.71,1,951.16,0,-87.55,0,,,0,,,,,,,,108.86,,,,,,,,79.96,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-7.12088,2346.25618,0,1044.82886,1038.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:20:00",1,VIC1,0,137.66,0,137.66,0,0,4090.02,-22,4678.97,0,588.95,0,,,86,,,,,,,,102,,,,,,,,76,,,,,,,,121,,,,,,,,127,,,,,,,,104,,,,,,-5.52016,7380.21743,392,4142.92383,4114.68,,29,,,,22,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:25:00",1,NSW1,0,117.26901,0,117.26901,0,0,7312.94,-37,7729.24,0,416.3,0,,,108.81,,,,,,,,94,,,,,,,,90,,,,,,,,123,,,,,,,,197.05,,,,,,,,198.05,,,,,,-8.25401,11780.71572,181,7376.33105,7327.9,,40,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:25:00",1,QLD1,0,128.85654,0,128.85654,0,0,6436.52,-16,6051.82,0,-384.7,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29,,,,,,,,136,,,,,,,,168,,,,,,-33.41401,9737.74093,125,6496.36133,6445.77,,0,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:25:00",1,SA1,0,130.77247,0,130.77247,0,0,1300.98,-10,799.66,0,-501.32,0,,,63,,,,,,,,77.59,,,,,,,,58,,,,,,,,152,,,,,,,,164,,,,,,,,153,,,,,,11.40738,2328.66126,362,1310.33521,1313.14,,20,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:25:00",1,TAS1,0,115.21293,0,115.21293,0,0,1043.12,1,865.75,0,-177.37,0,,,0,,,,,,,,132.51,,,,,,,,89.33,,,,,,,,77.37,,,,,,,,6,,,,,,,,6,,,,,,2.41488,2328.75109,0,1039.70581,1043.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:25:00",1,VIC1,0,112.7099,0,112.7099,0,0,4008.12,-17,4717.79,0,709.67,0,,,21,,,,,,,,32,,,,,,,,32,,,,,,,,90.4,,,,,,,,122,,,,,,,,100,,,,,,-18.89306,7430.78787,392,4067.18896,4034.33,,100,,,,18,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:30:00",1,NSW1,0,118.22267,0,118.22267,0,0,7263.11,-35,7667.34,0,404.23,0,,,80,,,,,,,,154,,,,,,,,129.25,,,,,,,,122,,,,,,,,186.31,,,,,,,,185.31,,,,,,-22.14416,11779.62876,181,7336.60693,7277.6,,55,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:30:00",1,QLD1,0,129.82797,0,129.82797,0,0,6431.62,-15,6053.43,0,-378.19,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29.51,,,,,,,,137,,,,,,,,168,,,,,,-23.06586,9744.12651,125,6479.08496,6440.52,,10,,,,67,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:30:00",1,SA1,0,131.20368,0,131.20368,0,0,1289.08,-11,794.32,0,-494.76,0,,,53,,,,,,,,67,,,,,,,,59,,,,,,,,161,,,,,,,,174,,,,,,,,164,,,,,,9.26107,2323.31935,362,1301.36584,1300.9,,20,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:30:00",1,TAS1,0,115.22,0,115.22,0,0,1035.95,1,882.49,0,-153.46,0,,,0,,,,,,,,29.58,,,,,,,,14.17,,,,,,,,53.46,,,,,,,,6,,,,,,,,6,,,,,,-4.71602,2325.98127,0,1039.66748,1035.95,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:30:00",1,VIC1,0,113.6397,0,113.6397,0,0,4057.92,-16,4740.43,0,682.5,0,,,77,,,,,,,,83,,,,,,,,67,,,,,,,,105,,,,,,,,121,,,,,,,,101,,,,,,-1.94483,7457.42513,392,4098.69629,4083.04,,75,,,,21,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 01:35:00",1,NSW1,0,143.22786,0,143.22786,0,0,7214.31,-32,7629.4,0,415.09,0,,,62.13,,,,,,,,67,,,,,,,,63,,,,,,,,188.3,,,,,,,,234,,,,,,,,219,,,,,,-33.14624,11779.63739,181,7295.07471,7227.29,,63,,,,36,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:35:00",1,QLD1,0,157.26717,0,157.26717,0,0,6454.21,-13,6091.62,0,-362.59,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,120,,,,,,,,150.3,,,,,,-17.14943,9755.52158,125,6493.72949,6462.51,,0,,,,51,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:35:00",1,SA1,0,162.08159,0,162.08159,0,0,1281.01,-10,722.26,0,-558.75,0,,,45,,,,,,,,52,,,,,,,,44,,,,,,,,147,,,,,,,,160,,,,,,,,148,,,,,,5.4889,2317.79291,362,1296.36865,1296.28,,27,,,,71,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:35:00",1,TAS1,0,139.11729,0,139.11729,0,0,1048.44,1,924,0,-124.44,0,,,0,,,,,,,,126.69,,,,,,,,71.73,,,,,,,,24.44,,,,,,,,0,,,,,,,,0,,,,,,1.8805,2319.19673,0,1045.55859,1048.44,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:35:00",1,VIC1,0,137.66,0,137.66,0,0,4031.69,-19,4730.25,0,698.56,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,100,,,,,,,,113.3,,,,,,,,110,,,,,,1.36318,7415.09868,392,4073.19312,4063.01,,70,,,,12,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:40:00",1,NSW1,0,142.16597,0,142.16597,0,0,7178.6,-27,7629.99,0,451.39,0,,,93,,,,,,,,98,,,,,,,,94,,,,,,,,159.96,,,,,,,,222,,,,,,,,219,,,,,,-37.87011,11775.9948,181,7257.30518,7190.48,,58,,,,46,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:40:00",1,QLD1,0,155.99258,0,155.99258,0,0,6435.13,-12,6076.64,0,-358.5,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,117,,,,,,,,149,,,,,,-10.11112,9740.40443,125,6465.54297,6443.17,,0,,,,45,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:40:00",1,SA1,0,162.08534,0,162.08534,0,0,1254.8,-11,695.99,0,-558.81,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,152,,,,,,,,163,,,,,,,,153,,,,,,-4.66219,2308.99039,362,1283.59253,1270.07,,10,,,,67,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:40:00",1,TAS1,0,139.4828,0,139.4828,0,0,1050.8,1,915.85,0,-134.95,0,,,6.36,,,,,,,,131.23,,,,,,,,76.17,,,,,,,,34.95,,,,,,,,0,,,,,,,,0,,,,,,9.30518,2310.94693,0,1040.4967,1050.8,,50,,,,50,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:40:00",1,VIC1,0,137.66,0,137.66,0,0,4023.13,-14,4689.87,0,666.73,0,,,41,,,,,,,,42,,,,,,,,42,,,,,,,,122,,,,,,,,134.78,,,,,,,,115.78,,,,,,-1.4014,7406.5781,392,4066.02295,4053.81,,92,,,,12,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:45:00",1,NSW1,0,141.01703,0,141.01703,0,0,7167.97,-26,7623.31,0,455.33,0,,,80,,,,,,,,94,,,,,,,,90,,,,,,,,145,,,,,,,,218.72,,,,,,,,203.72,,,,,,-26.6765,11774.30523,181,7230.95605,7178.42,,60,,,,61,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:45:00",1,QLD1,0,153.58585,0,153.58585,0,0,6381.27,-14,6037.64,0,-343.63,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,116,,,,,,,,149,,,,,,-1.3155,9553.54119,125,6403.39307,6388.61,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:45:00",1,SA1,0,162.08525,0,162.08525,0,0,1248.6,-10,693.5,0,-555.1,0,,,58,,,,,,,,64,,,,,,,,57,,,,,,,,159,,,,,,,,171,,,,,,,,161,,,,,,-10.13636,2306.5038,362,1283.41479,1263.67,,20,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:45:00",1,TAS1,0,139.3028,0,139.3028,0,0,1048.68,0,915.1,0,-133.58,0,,,0,,,,,,,,88.01,,,,,,,,34.05,,,,,,,,33.58,,,,,,,,0,,,,,,,,0,,,,,,6.69811,2310.19603,0,1041.97998,1048.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:45:00",1,VIC1,0,137.66,0,137.66,0,0,4017.3,-13,4657.01,0,639.71,0,,,87,,,,,,,,92,,,,,,,,89.5,,,,,,,,129,,,,,,,,129,,,,,,,,121,,,,,,-3.63866,7388.21882,392,4064.48438,4047.18,,80,,,,18,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0 +D,DREGION,,2,"2023/12/15 01:50:00",1,NSW1,0,114.98907,0,114.98907,0,0,7196.61,-25,7609.24,0,412.62,0,,,70.68,,,,,,,,94,,,,,,,,90,,,,,,,,120,,,,,,,,209.42,,,,,,,,198.42,,,,,,-16.62607,11759.23648,181,7250.27979,7204.66,,99,,,,60,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:50:00",1,QLD1,0,124.45005,0,124.45005,0,0,6365.66,-15,6065.28,0,-300.38,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,6,,,,,,,,116,,,,,,,,149,,,,,,-1.49289,9711.50711,125,6389.46143,6371.59,,0,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:50:00",1,SA1,0,132.04396,0,132.04396,0,0,1246.19,-8,693.44,0,-552.75,0,,,44,,,,,,,,64,,,,,,,,56,,,,,,,,136.59,,,,,,,,170,,,,,,,,159,,,,,,-8.71767,2306.44453,362,1277.80713,1261.14,,17,,,,39,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:50:00",1,TAS1,0,115.22,0,115.22,0,0,1051.14,0,855.7,0,-195.44,0,,,0,,,,,,,,96.07,,,,,,,,33.91,,,,,,,,95.44,,,,,,,,0,,,,,,,,0,,,,,,6.96508,2300.76908,0,1044.17712,1051.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:50:00",1,VIC1,0,112.13433,0,112.13433,0,0,3935.47,-11,4631.09,0,695.63,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,125,,,,,,,,142,,,,,,,,131,,,,,,-5.39509,7383.09474,392,3982.77246,3966.22,,44,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 01:55:00",1,NSW1,0,102.51777,0,102.51777,0,0,7153.51,-22,7594.44,0,440.93,0,,,67.94,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,199.98,,,,,,,,194.98,,,,,,-5.63125,11739.43973,181,7189.01563,7161.01,,87,,,,65,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:55:00",1,QLD1,0,110.8247,0,110.8247,0,0,6332.68,-17,6031.92,0,-300.76,0,,,45,,,,,,,,47.66,,,,,,,,45,,,,,,,,7,,,,,,,,115,,,,,,,,149,,,,,,5.61928,9702.0778,125,6349.28174,6338.46,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:55:00",1,SA1,0,117.1857,0,117.1857,0,0,1245.5,-8,697.31,0,-548.19,0,,,46,,,,,,,,53,,,,,,,,45,,,,,,,,127.7,,,,,,,,172,,,,,,,,161,,,,,,-8.71261,2310.3072,362,1277.53857,1260.19,,22,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 01:55:00",1,TAS1,0,103.0262,0,103.0262,0,0,1042.23,0,827.08,0,-215.14,0,,,0,,,,,,,,131.03,,,,,,,,71.42,,,,,,,,99.53,,,,,,,,0,,,,,,,,0,,,,,,-2.37408,2292.18254,0,1044.60022,1042.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 01:55:00",1,VIC1,0,100,0,100,0,0,3907.46,-15,4589.01,0,681.55,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,127,,,,,,,,149,,,,,,,,131,,,,,,-5.83465,7383.27139,392,3962.07617,3937.86,,51,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:00:00",1,NSW1,0,102.51225,0,102.51225,0,0,7137.25,-20,7584.26,0,447.01,0,,,63.05,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,216.84,,,,,,,,210.84,,,,,,0.6546,11734.26204,181,7163.77979,7144.86,,73.63,,,,46,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 02:00:00",1,QLD1,0,110.79558,0,110.79558,0,0,6338.2,-17,6033.89,0,-304.31,0,,,45,,,,,,,,46.81,,,,,,,,45,,,,,,,,7,,,,,,,,115,,,,,,,,149,,,,,,10.56172,9710.84688,125,6350.17236,6344.06,,0,,,,46,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 02:00:00",1,SA1,0,117.18609,0,117.18609,0,0,1245.2,-7,697.89,0,-547.31,0,,,50,,,,,,,,53,,,,,,,,45,,,,,,,,130.52,,,,,,,,157,,,,,,,,146,,,,,,-6.65595,2310.89063,362,1273.37305,1259.85,,42.37,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 02:00:00",1,TAS1,0,103.0262,0,103.0262,0,0,1034,0,821.35,0,-212.65,0,,,0,,,,,,,,131.03,,,,,,,,71.47,,,,,,,,99.53,,,,,,,,0,,,,,,,,0,,,,,,-7.56975,2286.44949,0,1041.57349,1034,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:00:00",1,VIC1,0,100,0,100,0,0,3910.64,-17,4586.23,0,675.59,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,124,,,,,,,,147,,,,,,,,130,,,,,,-7.29441,7389.60358,392,3965.19531,3940.84,,44,,,,8,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 02:05:00",1,NSW1,0,101.75862,0,101.75862,0,0,7106.31,-19,7540.91,0,434.59,0,,,89,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,110,,,,,,,,107,,,,,,3.02797,11692.06912,181,7131.36182,7112.67,,96,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:05:00",1,QLD1,0,109.23146,0,109.23146,0,0,6319.73,-15,6035.87,0,-283.87,0,,,45,,,,,,,,64,,,,,,,,45,,,,,,,,14,,,,,,,,109.64,,,,,,,,127,,,,,,8.46851,9673.56915,125,6331.61279,6324.91,,0,,,,68,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:05:00",1,SA1,0,116.61619,0,116.61619,0,0,1230.89,-6,699.93,0,-530.95,0,,,64,,,,,,,,91,,,,,,,,77.02,,,,,,,,121.35,,,,,,,,172,,,,,,,,161,,,,,,-4.16238,2311.93285,362,1254.56543,1244.64,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:05:00",1,TAS1,0,103.0262,0,103.0262,0,0,1031.55,-1,810.68,0,-220.87,0,,,8.92,,,,,,,,131.03,,,,,,,,101.68,,,,,,,,99.53,,,,,,,,152.18,,,,,,,,151.15,,,,,,-7.2974,2275.77714,0,1039.84473,1031.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:05:00",1,VIC1,0,100,0,100,0,0,3926.61,-17,4581.39,0,654.78,0,,,40,,,,,,,,38.83,,,,,,,,30,,,,,,,,127,,,,,,,,93,,,,,,,,90.66,,,,,,-6.76058,7391.25832,392,3979.14209,3955,,54,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:10:00",1,NSW1,0,112.82208,0,112.82208,0,0,7168.26,-15,7499.29,0,331.03,0,,,62.34,,,,,,,,92,,,,,,,,88,,,,,,,,122,,,,,,,,109,,,,,,,,106,,,,,,6.47045,11676.21536,181,7179.30908,7170.74,,100,,,,56,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:10:00",1,QLD1,0,119.55,0,119.55,0,0,6263.09,-15,6073.22,0,-189.87,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,105.67,,,,,,,,141,,,,,,5.87547,9694.61573,125,6274.93506,6265.87,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:10:00",1,SA1,0,128.90984,0,128.90984,0,0,1238.94,-5,697.49,0,-541.45,0,,,50,,,,,,,,66,,,,,,,,58,,,,,,,,158.32,,,,,,,,174,,,,,,,,164,,,,,,-7.49792,2308.49162,362,1266.78125,1253.27,,10,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:10:00",1,TAS1,0,113.03895,0,113.03895,0,0,1019.09,-1,813.2,0,-205.89,0,,,0,,,,,,,,94.34,,,,,,,,33.78,,,,,,,,99.53,,,,,,,,152.18,,,,,,,,140.96,,,,,,-5.56167,2278.29719,0,1025.64795,1019.09,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:10:00",1,VIC1,0,110.00214,0,110.00214,0,0,3899.1,-15,4554.06,0,654.96,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,79,,,,,,,,98,,,,,,,,86.89,,,,,,-4.52142,7387.05596,392,3952.01563,3928.29,,50,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:15:00",1,NSW1,0,114.97826,0,114.97826,0,0,7167.03,-14,7496.86,0,329.83,0,,,89,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,114.4,,,,,,,,105,,,,,,3.58899,11674.86001,181,7180.02588,7168.6,,72,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:15:00",1,QLD1,0,121.10319,0,121.10319,0,0,6280.48,-14,6112.71,0,-167.77,0,,,45,,,,,,,,64,,,,,,,,45,,,,,,,,28,,,,,,,,133,,,,,,,,154.4,,,,,,2.86892,9705.21138,125,6294.3125,6282.84,,0,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:15:00",1,SA1,0,132.34583,0,132.34583,0,0,1226.08,-5,693.69,3,-535.38,0,,,53,,,,,,,,71.39,,,,,,,,82.28,,,,,,,,160,,,,,,,,173,,,,,,,,163,,,,,,-6.06116,2304.69231,362,1250.81519,1243.07,,22,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:15:00",1,TAS1,0,115.21481,0,115.21481,0,0,1024.23,0,853.9,0,-170.33,0,,,28.67,,,,,,,,158.12,,,,,,,,96.53,,,,,,,,70.33,,,,,,,,120.32,,,,,,,,120.32,,,,,,-3.06989,2280.65614,0,1027.29895,1024.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:15:00",1,VIC1,0,112.93672,0,112.93672,0,0,3941.33,-14,4550.24,20,588.91,0,,,31,,,,,,,,31,,,,,,,,31,,,,,,,,100.56,,,,,,,,95,,,,,,,,93,,,,,,-5.50937,7374.24214,392,3989.44019,3988.67,,66,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:20:00",1,NSW1,0,113.52861,0,113.52861,0,0,7150.59,-12,7490.02,0,339.43,0,,,115.31,,,,,,,,99,,,,,,,,95,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,2.40951,11671.01916,181,7161.36328,7152.11,,64,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:20:00",1,QLD1,0,119.55,0,119.55,0,0,6277.74,-14,6108.36,0,-169.38,0,,,45,,,,,,,,56.2,,,,,,,,45,,,,,,,,25,,,,,,,,132,,,,,,,,141,,,,,,3.59105,9717.67326,125,6290.08447,6280.12,,0,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:20:00",1,SA1,0,130.03076,0,130.03076,0,0,1211.02,-5,689.42,0,-521.6,0,,,61,,,,,,,,64,,,,,,,,56,,,,,,,,148.16,,,,,,,,139.43,,,,,,,,149.21,,,,,,-11.50624,2300.41551,362,1243.14185,1224.27,,21,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:20:00",1,TAS1,0,115.17639,0,115.17639,0,0,1036.16,0,812.55,0,-223.61,0,,,0,,,,,,,,131.03,,,,,,,,80.93,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.4,,,,,,5.62614,2277.74718,0,1030.53394,1036.16,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:20:00",1,VIC1,0,111.50594,0,111.50594,0,0,3937.54,-8,4557.97,1,619.42,0,,,25,,,,,,,,41,,,,,,,,41,,,,,,,,80,,,,,,,,98,,,,,,,,83,,,,,,-14.6184,7391.96591,392,4003.31909,3965.65,,75,,,,28,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:25:00",1,NSW1,0,102.75655,0,102.75655,0,0,7159.01,-11,7496.34,3,334.33,0,,,80,,,,,,,,94,,,,,,,,90,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,3.66784,11677.34471,181,7169.2334,7165.32,,95,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0 +D,DREGION,,2,"2023/12/15 02:25:00",1,QLD1,0,108.95605,0,108.95605,0,0,6310.67,-9,6103.15,0,-207.52,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,110.89,,,,,,,,141,,,,,,3.05938,9734.73077,125,6319.32861,6313.92,,0,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0 +D,DREGION,,2,"2023/12/15 02:25:00",1,SA1,0,116.12544,0,116.12544,0,0,1201.43,-5,684.59,0,-516.84,0,,,59,,,,,,,,66,,,,,,,,58,,,,,,,,134.54,,,,,,,,174,,,,,,,,155.67,,,,,,-7.47848,2295.59088,362,1227.89258,1214.44,,31,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0 +D,DREGION,,2,"2023/12/15 02:25:00",1,TAS1,0,103.29171,0,103.29171,0,0,1038.46,0,809.87,0,-228.59,0,,,0,,,,,,,,94.93,,,,,,,,33.04,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.4,,,,,,-0.97219,2274.97008,0,1039.43481,1038.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:25:00",1,VIC1,0,100,0,100,0,0,3897.63,-6,4583.03,20,665.4,0,,,77,,,,,,,,92,,,,,,,,92,,,,,,,,97,,,,,,,,91,,,,,,,,83,,,,,,-6.19229,7405.45737,392,3941.04492,3944.85,,34,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0 +D,DREGION,,2,"2023/12/15 02:30:00",1,NSW1,0,100,0,100,0,0,7138.91,-11,7480.32,5,336.41,0,,,72.83,,,,,,,,66,,,,,,,,62,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,4.18625,11677.5877,181,7151.17676,7146.42,,112,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:30:00",1,QLD1,0,105.95587,0,105.95587,0,0,6273.95,-11,6080.4,0,-193.55,0,,,45,,,,,,,,59.79,,,,,,,,45,,,,,,,,25,,,,,,,,132,,,,,,,,141,,,,,,5.39119,9718.52717,125,6282.2417,6276.8,,0,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:30:00",1,SA1,0,113.56953,0,113.56953,0,0,1205.77,-5,684.15,1,-522.63,0,,,47,,,,,,,,53,,,,,,,,45,,,,,,,,148.46,,,,,,,,140.79,,,,,,,,149.76,,,,,,-5.26375,2295.14791,362,1229.7749,1220.09,,34,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:30:00",1,TAS1,0,100.59285,0,100.59285,0,0,1035.23,0,809.71,0,-225.53,0,,,0,,,,,,,,131.03,,,,,,,,82.92,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.21,,,,,,-1.1553,2274.80559,0,1036.38708,1035.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:30:00",1,VIC1,0,97.38715,0,97.38715,0,0,3937.3,-10,4593.81,5,651.5,0,,,82,,,,,,,,82,,,,,,,,82,,,,,,,,80,,,,,,,,97,,,,,,,,83,,,,,,-6.42665,7427.80554,389,3998.91309,3969.83,,14,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:35:00",1,NSW1,0,116.43824,0,116.43824,0,0,7151.96,-7,7473.01,0,321.06,0,,,62,,,,,,,,40,,,,,,,,36,,,,,,,,121,,,,,,,,112.92,,,,,,,,106.92,,,,,,1.07518,11707.01185,181,7165.10791,7154.06,,96,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:35:00",1,QLD1,0,122.5676,0,122.5676,0,0,6245.62,-8,6063.3,0,-182.33,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,30.83,,,,,,,,131,,,,,,,,168,,,,,,4.2227,9712.12627,125,6251.68604,6248.23,,0,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:35:00",1,SA1,0,131.59818,0,131.59818,0,0,1201,-5,682.37,0,-518.63,0,,,51,,,,,,,,84.76,,,,,,,,56,,,,,,,,151,,,,,,,,165,,,,,,,,154,,,,,,-2.97927,2294.3684,362,1222.80469,1214.11,,21,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:35:00",1,TAS1,0,115.22,0,115.22,0,0,1033.1,0,867.83,0,-165.28,0,,,0,,,,,,,,131,,,,,,,,89.06,,,,,,,,65.28,,,,,,,,115.27,,,,,,,,115.27,,,,,,1.4171,2267.70361,0,1031.68494,1033.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:35:00",1,VIC1,0,113.32416,0,113.32416,0,0,3934.72,-3,4523.21,0,588.5,0,,,88.68,,,,,,,,91,,,,,,,,91,,,,,,,,114,,,,,,,,113,,,,,,,,93,,,,,,-2.11314,7260.21312,389,3976.38159,3960.23,,43,,,,29,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 02:40:00",1,NSW1,0,114.9127,0,114.9127,0,0,7112.16,-5,7473.9,0,361.75,0,,,85,,,,,,,,99,,,,,,,,95,,,,,,,,121,,,,,,,,94.43,,,,,,,,104,,,,,,6.60294,11712.90348,181,7114.43652,7114.14,,94,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:40:00",1,QLD1,0,120.91927,0,120.91927,0,0,6244.44,-8,6056.45,0,-187.99,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25.13,,,,,,,,131,,,,,,,,160.43,,,,,,-4.53032,9709.8392,125,6259.79199,6247.13,,0,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:40:00",1,SA1,0,132.23194,0,132.23194,0,0,1219.49,-5,681.74,0,-537.75,0,,,52,,,,,,,,66,,,,,,,,58,,,,,,,,159,,,,,,,,171,,,,,,,,161,,,,,,0.74211,2293.74115,362,1238.23853,1233.62,,10,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:40:00",1,TAS1,0,115.22,0,115.22,0,0,1036.13,0,859.54,0,-176.58,0,,,0,,,,,,,,78.17,,,,,,,,26.44,,,,,,,,76.58,,,,,,,,126.58,,,,,,,,126.58,,,,,,7.92539,2255.67995,0,1028.20044,1036.13,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:40:00",1,VIC1,0,112.83419,0,112.83419,0,0,3906.26,-1,4493.27,0,587.01,0,,,77,,,,,,,,103,,,,,,,,92,,,,,,,,98,,,,,,,,112,,,,,,,,83,,,,,,-15.06114,7268.27118,389,3952.81738,3933.89,,56,,,,17,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 02:45:00",1,NSW1,0,101.14732,0,101.14732,0,0,7104.35,-4,7514.93,0,410.58,0,,,63.88,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,110.71,,,,,,,,104,,,,,,7.72393,11710.92972,181,7104.06982,7106.41,,102,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 02:45:00",1,QLD1,0,107.03506,0,107.03506,0,0,6202.73,-6,6000.93,0,-201.8,0,,,45,,,,,,,,48.66,,,,,,,,45,,,,,,,,28,,,,,,,,131,,,,,,,,165.71,,,,,,-3.7336,9698.97076,125,6214.76025,6205.66,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 02:45:00",1,SA1,0,116.63171,0,116.63171,0,0,1207.89,-4,677.36,0,-530.53,0,,,50,,,,,,,,53,,,,,,,,45,,,,,,,,144,,,,,,,,157,,,,,,,,146,,,,,,0,2288.35971,362,1226.80945,1221.64,,26,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 02:45:00",1,TAS1,0,101.98965,0,101.98965,0,0,1016.27,0,837.52,0,-178.75,0,,,0,,,,,,,,131,,,,,,,,70.13,,,,,,,,78.75,,,,,,,,128.75,,,,,,,,128.75,,,,,,8.6034,2252.61684,0,1007.66351,1016.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:45:00",1,VIC1,0,100,0,100,0,0,3828.87,1,4374.62,0,545.75,0,,,89,,,,,,,,94,,,,,,,,94,,,,,,,,109.93,,,,,,,,110,,,,,,,,93,,,,,,-25.66669,7239.01493,389,3883.12451,3855.38,,32,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 02:50:00",1,NSW1,0,96.17157,0,96.17157,0,0,7056.07,-5,7471.86,0,415.78,0,,,79.65,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,20.25133,11717.85515,181,7043.6582,7058.27,,107,,,,72,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:50:00",1,QLD1,0,101.74017,0,101.74017,0,0,6224.05,-5,6017.06,0,-206.99,0,,,45,,,,,,,,51.59,,,,,,,,45,,,,,,,,25,,,,,,,,102,,,,,,,,141,,,,,,-2.39053,9704.6767,125,6234.71436,6227.06,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:50:00",1,SA1,0,111.42805,0,111.42805,0,0,1202.74,-4,670.92,10,-541.82,0,,,45,,,,,,,,51,,,,,,,,43,,,,,,,,128.91,,,,,,,,158.86,,,,,,,,159.47,,,,,,5.84281,2281.92451,362,1214.8291,1227.11,,34,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:50:00",1,TAS1,0,98.18,0,98.18,0,0,1019.39,0,793.03,0,-226.37,0,,,0,,,,,,,,131,,,,,,,,75.36,,,,,,,,126.36,,,,,,,,176.36,,,,,,,,146.75,,,,,,2.50201,2255.20185,0,1016.88953,1019.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,4.5,4.5,0 +D,DREGION,,2,"2023/12/15 02:50:00",1,VIC1,0,95.07055,0,95.07055,0,0,3816.48,-5,4424.59,0,608.11,0,,,76,,,,,,,,91,,,,,,,,91,,,,,,,,77,,,,,,,,90,,,,,,,,83,,,,,,-34.3375,7402.59012,389,3883.93921,3845.62,,19,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:55:00",1,NSW1,0,102.04802,0,102.04802,0,0,7044.64,-7,7514.5,5,464.86,0,,,66.44,,,,,,,,72,,,,,,,,68,,,,,,,,120.09,,,,,,,,115.8,,,,,,,,104,,,,,,5.53666,11715.50365,181,7050.72119,7055.36,,100,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:55:00",1,QLD1,0,109.439,0,109.439,0,0,6293.66,-4,6011.39,2,-284.27,0,,,45,,,,,,,,46.14,,,,,,,,45,,,,,,,,30,,,,,,,,130,,,,,,,,141,,,,,,1.49728,9705.13835,125,6300.47168,6300.73,,0,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:55:00",1,SA1,0,116.63613,0,116.63613,0,0,1179.42,-4,668.34,15,-526.08,0,,,63,,,,,,,,66,,,,,,,,58,,,,,,,,138,,,,,,,,147,,,,,,,,162,,,,,,0.26603,2279.33988,362,1195.37891,1207.94,,21,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 02:55:00",1,TAS1,0,102.25516,0,102.25516,0,0,1032.17,0,845.04,0,-187.13,0,,,0,,,,,,,,131,,,,,,,,74.01,,,,,,,,87.13,,,,,,,,137.13,,,,,,,,137.13,,,,,,2.72981,2260.14246,0,1029.44385,1032.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 02:55:00",1,VIC1,0,100,0,100,0,0,3851.13,-6,4445.45,11,583.32,0,,,67,,,,,,,,72,,,,,,,,72,,,,,,,,102,,,,,,,,103,,,,,,,,88.8,,,,,,-15.05868,7399.81816,389,3897.65576,3888.53,,39,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0 +D,DREGION,,2,"2023/12/15 03:00:00",1,NSW1,0,100,0,100,0,0,7101.55,-4,7496.67,18,377.12,0,,,95,,,,,,,,73,,,,,,,,69,,,,,,,,134.98,,,,,,,,139.3,,,,,,,,104,,,,,,17.00239,11719.06873,181,7096.64648,7123.47,,71,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:00:00",1,QLD1,0,106.55888,0,106.55888,0,0,6253.39,-4,6020.2,0,-233.19,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,26,,,,,,,,130,,,,,,,,142.3,,,,,,0.94158,9715.14249,125,6261.7627,6257.11,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:00:00",1,SA1,0,113.56665,0,113.56665,0,0,1191.33,-4,669.34,12,-533.99,0,,,66,,,,,,,,112.4,,,,,,,,67.15,,,,,,,,135,,,,,,,,134,,,,,,,,162,,,,,,-7.32217,2280.33975,362,1225.20337,1217.25,,21,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:00:00",1,TAS1,0,99.31122,0,99.31122,0,0,1021.86,0,843.35,0,-178.52,0,,,20,,,,,,,,131,,,,,,,,103.32,,,,,,,,78.52,,,,,,,,128.51,,,,,,,,128.51,,,,,,1.15618,2258.54529,0,1020.70563,1021.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:00:00",1,VIC1,0,97.37999,0,97.37999,0,0,3907.15,-5,4524.82,0,617.67,0,,,22.08,,,,,,,,32,,,,,,,,32,,,,,,,,100,,,,,,,,98,,,,,,,,93,,,,,,-9.67002,7392.82039,389,3958.63452,3934.69,,68,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:05:00",1,NSW1,0,96.08367,0,96.08367,0,0,7002.97,-5,7458.26,29,426.28,0,,,69.8,,,,,,,,66,,,,,,,,62,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,11.78946,11719.25509,181,7012.07129,7034.74,,97,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:05:00",1,QLD1,0,101.63614,0,101.63614,0,0,6240.51,-4,6020.12,0,-220.4,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,101,,,,,,,,141,,,,,,0.73289,9721.14937,125,6247.33057,6243.81,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:05:00",1,SA1,0,110.33169,0,110.33169,0,0,1171.94,-3,669.85,0,-502.09,0,,,45,,,,,,,,64,,,,,,,,56,,,,,,,,129.33,,,,,,,,159.93,,,,,,,,156.26,,,,,,-6.92124,2279.84896,362,1209.71973,1184.17,,31,,,,4,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:05:00",1,TAS1,0,98.18,0,98.18,0,0,1030.34,0,807.37,0,-222.97,0,,,0,,,,,,,,114.4,,,,,,,,49.87,,,,,,,,122.97,,,,,,,,172.97,,,,,,,,146.63,,,,,,-0.02734,2261.92481,0,1030.3667,1030.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:05:00",1,VIC1,0,95.07055,0,95.07055,0,0,3954.73,1,4516.88,0,562.15,0,,,88,,,,,,,,104,,,,,,,,104,,,,,,,,77,,,,,,,,91,,,,,,,,83,,,,,,9.11234,7227.87833,389,3975.00049,3979.41,,32,,,,35,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:10:00",1,NSW1,0,114.85244,0,114.85244,0,0,7076.94,-5,7494.63,0,417.68,0,,,75.55,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,114.35,,,,,,,,104,,,,,,8.88401,11715.6254,181,7093.80371,7078.28,,102,,,,61,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 03:10:00",1,QLD1,0,120.71112,0,120.71112,0,0,6182,-5,5995.88,0,-186.12,0,,,45,,,,,,,,62.04,,,,,,,,45,,,,,,,,28,,,,,,,,129,,,,,,,,168,,,,,,2.51364,9707.1239,125,6186.66309,6184.55,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 03:10:00",1,SA1,0,132.44742,0,132.44742,0,0,1194.64,-3,665.37,0,-529.27,0,,,46,,,,,,,,52,,,,,,,,44,,,,,,,,160,,,,,,,,173,,,,,,,,162,,,,,,0.59814,2275.36892,362,1210.95801,1208.31,,34,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 03:10:00",1,TAS1,0,115.26,0,115.26,0,0,1038.2,1,882.66,0,-155.54,0,,,0,,,,,,,,131,,,,,,,,82.71,,,,,,,,55.54,,,,,,,,105.54,,,,,,,,105.54,,,,,,-1.34773,2264.11427,0,1038.54553,1038.2,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:10:00",1,VIC1,0,113.57087,0,113.57087,0,0,3957.31,2,4453.84,0,496.53,0,,,82,,,,,,,,82,,,,,,,,82,,,,,,,,107.86,,,,,,,,106,,,,,,,,88.35,,,,,,7.99155,7226.84247,386,3976.55762,3983.04,,24,,,,42,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0 +D,DREGION,,2,"2023/12/15 03:15:00",1,NSW1,0,139.28944,0,139.28944,0,0,7059.89,-2,7537.33,0,477.44,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,151.67,,,,,,,,167.1,,,,,,,,129.1,,,,,,18.94527,11769.8836,181,7048.23877,7063.53,,96,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:15:00",1,QLD1,0,148.37054,0,148.37054,0,0,6261.66,-2,6016.08,0,-245.58,0,,,45,,,,,,,,62.66,,,,,,,,45,,,,,,,,31,,,,,,,,128,,,,,,,,168,,,,,,2.95919,9701.42493,125,6265.05322,6265.65,,0,,,,21,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:15:00",1,SA1,0,159.85828,0,159.85828,0,0,1176.42,-2,657.72,0,-518.69,0,,,52,,,,,,,,52,,,,,,,,44,,,,,,,,147,,,,,,,,158,,,,,,,,147,,,,,,0.14107,2267.72389,362,1191.30933,1189.53,,34,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:15:00",1,TAS1,0,138.92729,0,138.92729,0,0,1031.33,1,904,0,-127.32,0,,,11.23,,,,,,,,131,,,,,,,,93.63,,,,,,,,27.32,,,,,,,,77.32,,,,,,,,77.32,,,,,,6.14904,2281.1048,0,1024.17773,1031.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:15:00",1,VIC1,0,137.66,0,137.66,0,0,3948.89,1,4407.86,0,458.97,0,,,31,,,,,,,,21,,,,,,,,21,,,,,,,,102,,,,,,,,84,,,,,,,,93,,,,,,-5.56759,7205.52119,383,3978.31689,3972.97,,30,,,,23,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:20:00",1,NSW1,0,140.4018,0,140.4018,0,0,7123.53,3,7541.34,0,417.81,0,,,118.44,,,,,,,,159,,,,,,,,141.73,,,,,,,,149.74,,,,,,,,160.95,,,,,,,,124.95,,,,,,28.18887,11762.33789,181,7095.6958,7127.5,,44,,,,77,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:20:00",1,QLD1,0,149.63434,0,149.63434,0,0,6262.15,-1,6019.79,0,-242.36,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,31,,,,,,,,127,,,,,,,,168,,,,,,0.8507,9705.34161,125,6265.85693,6266.11,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:20:00",1,SA1,0,160.54277,0,160.54277,0,0,1185.24,-2,656.51,0,-528.74,0,,,60,,,,,,,,63,,,,,,,,55,,,,,,,,160,,,,,,,,171,,,,,,,,160,,,,,,1.46567,2265.50527,362,1198.51855,1198.89,,10,,,,11,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:20:00",1,TAS1,0,138.88729,0,138.88729,0,0,1017.5,1,896.38,0,-121.12,0,,,0,,,,,,,,85.65,,,,,,,,44.59,,,,,,,,21.12,,,,,,,,71.11,,,,,,,,71.11,,,,,,8.93695,2273.48262,0,1007.56317,1017.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:20:00",1,VIC1,0,137.66,0,137.66,0,0,3937.87,6,4459.41,0,521.53,0,,,25,,,,,,,,41,,,,,,,,30,,,,,,,,100,,,,,,,,87,,,,,,,,93,,,,,,-19.12672,7371.25768,383,3974.41748,3963.42,,106,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:25:00",1,NSW1,0,100,0,100,0,0,7053.48,7,7531.74,0,478.26,0,,,80,,,,,,,,145.56,,,,,,,,124.53,,,,,,,,121,,,,,,,,126.11,,,,,,,,104,,,,,,28.58341,11753.98144,181,7023.62891,7060.45,,81,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 03:25:00",1,QLD1,0,107.86229,0,107.86229,0,0,6263.52,2,5953.63,0,-309.89,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29.68,,,,,,,,127,,,,,,,,152.11,,,,,,0.65954,9711.31356,125,6264.9209,6269.28,,0,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 03:25:00",1,SA1,0,113.1852,0,113.1852,0,0,1156.04,-2,659.5,0,-496.54,0,,,58,,,,,,,,65,,,,,,,,57,,,,,,,,160,,,,,,,,173,,,,,,,,162,,,,,,-3.33549,2268.50443,362,1175.05029,1167.99,,20,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 03:25:00",1,TAS1,0,99.19068,0,99.19068,0,0,1009.85,2,855.5,0,-154.35,0,,,0,,,,,,,,45,,,,,,,,13.1,,,,,,,,54.35,,,,,,,,104.34,,,,,,,,104.34,,,,,,7.36371,2270.60387,0,1000.48657,1009.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:25:00",1,VIC1,0,98.00594,0,98.00594,0,0,3969.69,9,4499.5,0,529.8,0,,,87,,,,,,,,92,,,,,,,,77,,,,,,,,99,,,,,,,,89,,,,,,,,97,,,,,,-4.11443,7339.49696,383,3988.60791,3992.3,,59,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0 +D,DREGION,,2,"2023/12/15 03:30:00",1,NSW1,0,97.30663,0,97.30663,0,0,7017.58,6,7492.4,40,434.82,0,,,64.68,,,,,,,,121,,,,,,,,107,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,0,11754.39961,181,7019.99121,7063.29,,82,,,,107,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 03:30:00",1,QLD1,0,104.26045,0,104.26045,0,0,6242.14,3,5959.19,0,-282.95,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,98,,,,,,,,141,,,,,,2.15826,9718.33363,125,6242.12207,6247.06,,0,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 03:30:00",1,SA1,0,110.08612,0,110.08612,0,0,1155.32,-2,665.21,0,-490.11,0,,,49,,,,,,,,52,,,,,,,,44,,,,,,,,127.73,,,,,,,,170.52,,,,,,,,143.4,,,,,,-0.55213,2274.21385,362,1173.65759,1166.96,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 03:30:00",1,TAS1,0,98.18,0,98.18,0,0,1029.31,2,814.87,0,-214.44,0,,,0,,,,,,,,81.46,,,,,,,,29.13,,,,,,,,114.43,,,,,,,,164.43,,,,,,,,146.54,,,,,,-1.43505,2264.22306,0,1028.74463,1029.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:30:00",1,VIC1,0,95.31556,0,95.31556,0,0,3923.89,8,4522.35,0,598.46,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,74,,,,,,,,79,,,,,,,,83,,,,,,10.69667,7322.35464,383,3931.75024,3947.41,,34,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0 +D,DREGION,,2,"2023/12/15 03:35:00",1,NSW1,0,100,0,100,0,0,7119.04,10,7529.89,0,410.85,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,5.37956,11750.27351,181,7135.51221,7120.77,,96,,,,86.71,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:35:00",1,QLD1,0,105.82836,0,105.82836,0,0,6180.17,-4,5981.13,0,-199.03,0,,,45,,,,,,,,53.73,,,,,,,,45,,,,,,,,25,,,,,,,,105.18,,,,,,,,141,,,,,,-0.16722,9723.39613,125,6187.10059,6183.04,,0,,,,41.29,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:35:00",1,SA1,0,114.48189,0,114.48189,0,0,1165.54,-2,666.01,0,-499.53,0,,,50,,,,,,,,50,,,,,,,,42,,,,,,,,138.98,,,,,,,,171,,,,,,,,134.56,,,,,,0.97398,2276.01178,362,1178.75562,1177.66,,34,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:35:00",1,TAS1,0,101.34889,0,101.34889,0,0,1049.76,2,841.88,0,-207.88,0,,,12.18,,,,,,,,131,,,,,,,,86.8,,,,,,,,105.53,,,,,,,,157.88,,,,,,,,156.51,,,,,,-2.52497,2257.08058,0,1050.28943,1049.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:35:00",1,VIC1,0,98.63587,0,98.63587,0,0,3917.65,7,4453.55,0,535.9,0,,,30,,,,,,,,30,,,,,,,,30,,,,,,,,73,,,,,,,,79,,,,,,,,83,,,,,,21.1295,7310.55264,383,3915.56982,3941.23,,30,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:40:00",1,NSW1,0,101.29515,0,101.29515,0,0,7086.41,17,7538.63,0,452.22,0,,,114,,,,,,,,154,,,,,,,,140,,,,,,,,120,,,,,,,,106,,,,,,,,104,,,,,,12.40138,11749.62552,181,7060.3999,7089.21,,69,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:40:00",1,QLD1,0,107.91888,0,107.91888,0,0,6248.5,0,6022.27,0,-226.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,124,,,,,,,,141,,,,,,-2.95953,9756.26191,125,6254.92285,6252.02,,0,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:40:00",1,SA1,0,116.06214,0,116.06214,0,0,1166.86,-1,666.42,0,-500.44,0,,,61.06,,,,,,,,65,,,,,,,,57,,,,,,,,139.96,,,,,,,,150.83,,,,,,,,122.47,,,,,,0.11955,2276.41697,362,1180.17041,1179.02,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:40:00",1,TAS1,0,103.29171,0,103.29171,0,0,1051.7,2,828.93,0,-222.77,0,,,0,,,,,,,,96.58,,,,,,,,43.75,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-2.46821,2244.12557,0,1052.16553,1051.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:40:00",1,VIC1,0,100,0,100,0,0,3920.44,8,4460.28,0,539.84,0,,,26,,,,,,,,31,,,,,,,,31,,,,,,,,73,,,,,,,,80,,,,,,,,83,,,,,,5.41287,7301.48957,383,3933.07153,3944.58,,81,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 03:45:00",1,NSW1,0,100,0,100,0,0,7061.74,16,7553.34,0,491.6,0,,,66.15,,,,,,,,126,,,,,,,,112,,,,,,,,121,,,,,,,,108,,,,,,,,104,,,,,,9.13658,11779.93846,181,7039.11279,7063.78,,127,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 03:45:00",1,QLD1,0,105.84327,0,105.84327,0,0,6251.2,3,6042.88,0,-208.32,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,124,,,,,,,,141,,,,,,0.50833,9777.5695,125,6250.80078,6254.29,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 03:45:00",1,SA1,0,115.58162,0,115.58162,0,0,1179.21,-1,671.02,0,-508.18,0,,,47,,,,,,,,63,,,,,,,,57,,,,,,,,137.92,,,,,,,,151.76,,,,,,,,120.4,,,,,,1.74372,2281.02259,362,1191.3147,1191.76,,10,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 03:45:00",1,TAS1,0,103.13225,0,103.13225,0,0,1056.85,2,815.16,0,-241.69,0,,,0,,,,,,,,64.63,,,,,,,,10.7,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-3.09207,2230.36272,0,1057.94202,1056.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:45:00",1,VIC1,0,99.58962,0,99.58962,0,0,3939.17,9,4448.98,0,509.8,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,72,,,,,,,,75,,,,,,,,83,,,,,,8.7801,7282.97552,383,3948.48999,3964.71,,23,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0 +D,DREGION,,2,"2023/12/15 03:50:00",1,NSW1,0,100.47471,0,100.47471,0,0,7126.34,18,7565.44,0,439.11,0,,,67.49,,,,,,,,127,,,,,,,,113,,,,,,,,121,,,,,,,,110,,,,,,,,104,,,,,,8.27806,11771.44373,181,7101.36035,7126.85,,102,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:50:00",1,QLD1,0,105.69581,0,105.69581,0,0,6221.6,5,6056.89,0,-164.72,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,123,,,,,,,,141,,,,,,-1.00187,9785.36644,125,6219.70361,6223.81,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:50:00",1,SA1,0,116.05715,0,116.05715,0,0,1175.52,0,672.68,0,-502.84,0,,,47,,,,,,,,50,,,,,,,,42,,,,,,,,117.51,,,,,,,,151.21,,,,,,,,124.85,,,,,,0.61579,2282.68216,362,1187.31274,1187.8,,24,,,,13,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:50:00",1,TAS1,0,103.82275,0,103.82275,0,0,1055.01,2,802.87,0,-252.15,0,,,0,,,,,,,,77.84,,,,,,,,24.51,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-2.88914,2217.96581,0,1055.90063,1055.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:50:00",1,VIC1,0,100,0,100,0,0,3944.59,9,4465.43,0,520.85,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,94,,,,,,,,79,,,,,,,,83,,,,,,5.29987,7289.17458,383,3957.48926,3969.84,,34,,,,26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0 +D,DREGION,,2,"2023/12/15 03:55:00",1,NSW1,0,93.89,0,93.89,0,0,7057.86,15,7576.02,0,518.16,0,,,52.29,,,,,,,,127,,,,,,,,113,,,,,,,,95,,,,,,,,80,,,,,,,,78,,,,,,0,11775.323,181,7045.78906,7059.27,,131,,,,84.19,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 03:55:00",1,QLD1,0,99.33024,0,99.33024,0,0,6215.1,4,6023.84,0,-191.26,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,123,,,,,,,,141,,,,,,0,9810.89118,125,6213.47266,6217.77,,0,,,,47.81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 03:55:00",1,SA1,0,109.36899,0,109.36899,0,0,1170.23,0,672.55,0,-497.68,0,,,58,,,,,,,,65,,,,,,,,57,,,,,,,,126.49,,,,,,,,156.5,,,,,,,,154.81,,,,,,-0.37905,2281.54995,362,1185.42908,1182.24,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 03:55:00",1,TAS1,0,98.19995,0,98.19995,0,0,1051.4,2,778.4,0,-273,0,,,0,,,,,,,,58.87,,,,,,,,9.84,,,,,,,,124.81,,,,,,,,177.37,,,,,,,,159.06,,,,,,-2.53011,2212.98638,0,1051.93311,1051.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 03:55:00",1,VIC1,0,94.23899,0,94.23899,0,0,3955.55,10,4441.1,0,485.56,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,89,,,,,,,,79,,,,,,,,83,,,,,,0,7289.10284,383,3974.55835,3981.22,,19,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0 +D,DREGION,,2,"2023/12/15 04:00:00",1,NSW1,0,93.91159,0,93.91159,0,0,7053.98,14,7587.87,0,533.89,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,95,,,,,,,,83.4,,,,,,,,78,,,,,,-5.97607,11773.873,181,7048.31055,7056.15,,122,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 04:00:00",1,QLD1,0,99.42,0,99.42,0,0,6249.7,1,6049.07,8,-208.63,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,26,,,,,,,,122,,,,,,,,121,,,,,,-11.11702,9817.16785,125,6262.7207,6260.82,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 04:00:00",1,SA1,0,109.41321,0,109.41321,0,0,1175.23,1,670.26,0,-504.97,0,,,52,,,,,,,,65,,,,,,,,57,,,,,,,,142.61,,,,,,,,172,,,,,,,,162,,,,,,0.97331,2279.26481,362,1185.51172,1187.61,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +D,DREGION,,2,"2023/12/15 04:00:00",1,TAS1,0,98.38402,0,98.38402,0,0,1063.55,3,787.74,0,-275.81,0,,,0,,,,,,,,121.66,,,,,,,,68.63,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,158.93,,,,,,-1.11468,2202.84432,0,1061.66736,1063.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,7.48,7.48,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0 +D,DREGION,,2,"2023/12/15 04:00:00",1,VIC1,0,94.27931,0,94.27931,0,0,3966.59,12,4466.39,0,499.8,0,,,38.23,,,,,,,,31,,,,,,,,31,,,,,,,,95,,,,,,,,84,,,,,,,,99.65,,,,,,-7.45028,7297.39085,383,3990.6355,3993.21,,28,,,,28,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0 +I,DREGION,,3,SETTLEMENTDATE,RUNNO,REGIONID,INTERVENTION,RRP,EEP,ROP,APCFLAG,MARKETSUSPENDEDFLAG,TOTALDEMAND,DEMANDFORECAST,DISPATCHABLEGENERATION,DISPATCHABLELOAD,NETINTERCHANGE,EXCESSGENERATION,LOWER5MINDISPATCH,LOWER5MINIMPORT,LOWER5MINLOCALDISPATCH,LOWER5MINLOCALPRICE,LOWER5MINLOCALREQ,LOWER5MINPRICE,LOWER5MINREQ,LOWER5MINSUPPLYPRICE,LOWER60SECDISPATCH,LOWER60SECIMPORT,LOWER60SECLOCALDISPATCH,LOWER60SECLOCALPRICE,LOWER60SECLOCALREQ,LOWER60SECPRICE,LOWER60SECREQ,LOWER60SECSUPPLYPRICE,LOWER6SECDISPATCH,LOWER6SECIMPORT,LOWER6SECLOCALDISPATCH,LOWER6SECLOCALPRICE,LOWER6SECLOCALREQ,LOWER6SECPRICE,LOWER6SECREQ,LOWER6SECSUPPLYPRICE,RAISE5MINDISPATCH,RAISE5MINIMPORT,RAISE5MINLOCALDISPATCH,RAISE5MINLOCALPRICE,RAISE5MINLOCALREQ,RAISE5MINPRICE,RAISE5MINREQ,RAISE5MINSUPPLYPRICE,RAISE60SECDISPATCH,RAISE60SECIMPORT,RAISE60SECLOCALDISPATCH,RAISE60SECLOCALPRICE,RAISE60SECLOCALREQ,RAISE60SECPRICE,RAISE60SECREQ,RAISE60SECSUPPLYPRICE,RAISE6SECDISPATCH,RAISE6SECIMPORT,RAISE6SECLOCALDISPATCH,RAISE6SECLOCALPRICE,RAISE6SECLOCALREQ,RAISE6SECPRICE,RAISE6SECREQ,RAISE6SECSUPPLYPRICE,AGGREGATEDISPATCHERROR,AVAILABLEGENERATION,AVAILABLELOAD,INITIALSUPPLY,CLEAREDSUPPLY,LOWERREGIMPORT,LOWERREGLOCALDISPATCH,LOWERREGLOCALREQ,LOWERREGREQ,RAISEREGIMPORT,RAISEREGLOCALDISPATCH,RAISEREGLOCALREQ,RAISEREGREQ,RAISE5MINLOCALVIOLATION,RAISEREGLOCALVIOLATION,RAISE60SECLOCALVIOLATION,RAISE6SECLOCALVIOLATION,LOWER5MINLOCALVIOLATION,LOWERREGLOCALVIOLATION,LOWER60SECLOCALVIOLATION,LOWER6SECLOCALVIOLATION,RAISE5MINVIOLATION,RAISEREGVIOLATION,RAISE60SECVIOLATION,RAISE6SECVIOLATION,LOWER5MINVIOLATION,LOWERREGVIOLATION,LOWER60SECVIOLATION,LOWER6SECVIOLATION,RAISE6SECRRP,RAISE6SECROP,RAISE6SECAPCFLAG,RAISE60SECRRP,RAISE60SECROP,RAISE60SECAPCFLAG,RAISE5MINRRP,RAISE5MINROP,RAISE5MINAPCFLAG,RAISEREGRRP,RAISEREGROP,RAISEREGAPCFLAG,LOWER6SECRRP,LOWER6SECROP,LOWER6SECAPCFLAG,LOWER60SECRRP,LOWER60SECROP,LOWER60SECAPCFLAG,LOWER5MINRRP,LOWER5MINROP,LOWER5MINAPCFLAG,LOWERREGRRP,LOWERREGROP,LOWERREGAPCFLAG,RAISE6SECACTUALAVAILABILITY,RAISE60SECACTUALAVAILABILITY,RAISE5MINACTUALAVAILABILITY,RAISEREGACTUALAVAILABILITY,LOWER6SECACTUALAVAILABILITY,LOWER60SECACTUALAVAILABILITY,LOWER5MINACTUALAVAILABILITY,LOWERREGACTUALAVAILABILITY,LORSURPLUS,LRCSURPLUS +D,DREGION,,3,"2023/12/14 04:05:00",1,NSW1,0,62.75,0,62.75,0,0,6927.79,25,6347.74,5,-585.05,0,,,59,,,,,,,,127.87,,,,,,,,109,,,,,,,,105,,,,,,,,83,,,,,,,,88,,,,,,23.43995,11768.59728,116,6905.63135,6950.23,,53,,,,97,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0,392,396,648,289.772506,272.517980,386.517980,251.655610,330.873104,, +D,DREGION,,3,"2023/12/14 04:05:00",1,QLD1,0,61.94798,0,61.94798,0,0,5940.84,2,6087.37,0,146.53,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,66,,,,,,,,161,,,,,,,,137.96,,,,,,13.49735,9930.44217,125,5925.42822,5940.94,,0,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0,336,454.333333,174,233.105749,243,347,240,223.571560,, +D,DREGION,,3,"2023/12/14 04:05:00",1,SA1,0,55.33728,0,55.33728,0,0,1188.3,1,1222.82,8,26.52,0,,,52,,,,,,,,80,,,,,,,,58,,,,,,,,145,,,,,,,,151,,,,,,,,159,,,,,,-9.44872,2593.27693,362,1201.91394,1196.04,,31,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0,282,285,251,117.350356,247,255,253,349,, +D,DREGION,,3,"2023/12/14 04:05:00",1,TAS1,0,58.73231,0,58.73231,0,0,931.43,3,593.99,0,-337.44,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,144.55,,,,,,7.26284,2172.0854,0,921.1665,931.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.2,0.2,0,0.95,0.95,0,0,0,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,105.894309,, +D,DREGION,,3,"2023/12/14 04:05:00",1,VIC1,0,55.71488,0,55.71488,0,0,4053.86,9,4850.38,3,793.52,0,,,104,,,,,,,,134,,,,,,,,105.83,,,,,,,,118.17,,,,,,,,115.79,,,,,,,,135,,,,,,-11.93094,7994.3828,433,4089.70752,4083.67,,76,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.2,0.2,0,0.95,0.95,0,0,0,0,3.76,3.76,0,595.666667,574,571,43,405.0001,640.0001,518.0001,544.3124,, +D,DREGION,,3,"2023/12/14 04:10:00",1,NSW1,0,65.33,0,65.33,0,0,7013.74,27,6594.39,4.74,-424.09,0,,,46.13,,,,,,,,101,,,,,,,,87,,,,,,,,105,,,,,,,,110,,,,,,,,88,,,,,,28.46649,11750.27383,116,6976.4165,7027.51,,48.61,,,,92,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0,392,396,648,224.658967,251.389180,365.389180,259.506760,334.626912,, +D,DREGION,,3,"2023/12/14 04:10:00",1,QLD1,0,64.5788,0,64.5788,0,0,5981,2,6127.16,0,146.16,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,66,,,,,,,,138.35,,,,,,,,134,,,,,,12.90386,9915.36589,125,5966.19775,5981.04,,0,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0,336,454.333333,174,257.643192,253,357,240,223.026466,, +D,DREGION,,3,"2023/12/14 04:10:00",1,SA1,0,58.98704,0,58.98704,0,0,1196.09,2,1218.35,5,17.25,0,,,48,,,,,,,,55,,,,,,,,47,,,,,,,,140.63,,,,,,,,167,,,,,,,,161,,,,,,-2.2577,2573.62491,362,1198.87781,1200.81,,32,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0,284,288,254,115.851470,248,256,254,350.997890,, +D,DREGION,,3,"2023/12/14 04:10:00",1,TAS1,0,62.77221,0,62.77221,0,0,922.51,3,583.32,0,-339.19,0,,,0,,,,,,,,92.79,,,,,,,,27.55,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.33,,,,,,7.81649,2166.42417,0,911.69324,922.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,105.894303,, +D,DREGION,,3,"2023/12/14 04:10:00",1,VIC1,0,59.39762,0,59.39762,0,0,4182.39,15,4808.15,0,625.76,0,,,100,,,,,,,,91,,,,,,,,110,,,,,,,,126,,,,,,,,98,,,,,,,,140.74,,,,,,0,8003.15483,438,4192.49219,4199.51,,79.39,,,,8,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.61,3.61,0,606.666667,585,581,38,278.0001,279.0001,279.0001,388.9999,, +D,DREGION,,3,"2023/12/14 04:15:00",1,NSW1,0,65.55094,0,65.55094,0,0,7062.92,29,6642.43,0,-420.49,0,,,93.64,,,,,,,,133,,,,,,,,119,,,,,,,,105,,,,,,,,110,,,,,,,,100.05,,,,,,32.81321,11707.73992,115,7014.54688,7070.52,,25,,,,89,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,392,396,648,260.915055,265,379,281,336.287293,, +D,DREGION,,3,"2023/12/14 04:15:00",1,QLD1,0,64,0,64,0,0,5997.71,5,6183.48,0,185.77,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,164,,,,,,,,153,,,,,,22.61529,9922.07015,125,5970.32129,5997.99,,0,,,,71,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,338,457.333333,176,204.993593,281,385,240,280.571560,, +D,DREGION,,3,"2023/12/14 04:15:00",1,SA1,0,60.28646,0,60.28646,0,0,1206.95,2,1212.63,8,-2.32,0,,,65,,,,,,,,68,,,,,,,,60,,,,,,,,112.85,,,,,,,,149.36,,,,,,,,161,,,,,,-1.09033,2570.13399,362,1211.48596,1214.65,,21,,,,0,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,267,273,254,69,247,255,255,347,, +D,DREGION,,3,"2023/12/14 04:15:00",1,TAS1,0,63.34065,0,63.34065,0,0,927.12,3,599.26,0,-327.86,0,,,0,,,,,,,,82.08,,,,,,,,34.25,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.03,,,,,,6.57731,2182.26419,0,917.54211,927.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,105.894303,, +D,DREGION,,3,"2023/12/14 04:15:00",1,VIC1,0,60.08646,0,60.08646,0,0,4164.6,18,4754.38,3,586.78,0,,,39,,,,,,,,60,,,,,,,,60,,,,,,,,154,,,,,,,,92,,,,,,,,112,,,,,,-32.01303,7981.3845,430,4194.55273,4181.91,,114,,,,10,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,574.666667,579,580,37,300,412,346,473.093650,, +D,DREGION,,3,"2023/12/14 04:20:00",1,NSW1,0,62.75,0,62.75,0,0,7066.63,31,6522.74,5,-548.89,0,,,59,,,,,,,,133,,,,,,,,109,,,,,,,,105,,,,,,,,110,,,,,,,,89.03,,,,,,26.5091,11683.35833,116,7016.2002,7087.98,,39,,,,61,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0,352,356,598,256.602896,259,373,275,272.629572,, +D,DREGION,,3,"2023/12/14 04:20:00",1,QLD1,0,62.02981,0,62.02981,0,0,5954.38,6,6076.25,0,121.88,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,68,,,,,,,,147.45,,,,,,,,154,,,,,,15.41556,9919.98454,125,5934.24463,5954.31,,0,,,,51,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0,339,457.333333,176,241.362524,253,357,240,223.571560,, +D,DREGION,,3,"2023/12/14 04:20:00",1,SA1,0,55.93217,0,55.93217,0,0,1211.44,2,1194.27,0,-17.18,0,,,52,,,,,,,,66,,,,,,,,58,,,,,,,,146,,,,,,,,164,,,,,,,,159,,,,,,4.03837,2561.77011,362,1214.04895,1211.16,,20,,,,39,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0,265,270,252,286,245,253,253,355,, +D,DREGION,,3,"2023/12/14 04:20:00",1,TAS1,0,58.61741,0,58.61741,0,0,926.28,4,609.97,0,-316.31,0,,,0,,,,,,,,20.1,,,,,,,,0,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.14,,,,,,4.22581,2193.07417,0,918.05396,926.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.2,0.2,0,0.38,0.38,0,0,0,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,105.894309,, +D,DREGION,,3,"2023/12/14 04:20:00",1,VIC1,0,55.74629,0,55.74629,0,0,4149.44,16,4957.62,7,801.18,0,,,104,,,,,,,,118,,,,,,,,104.46,,,,,,,,121.79,,,,,,,,95,,,,,,,,125,,,,,,-37.95753,8280.61857,430,4188.79785,4181.12,,101,,,,19,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,5.45,5.45,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.75,3.75,0,587.666667,578,576,47,405.0001,639.0001,517.0001,549.343649,, +D,DREGION,,3,"2023/12/14 04:25:00",1,NSW1,0,62.75,0,62.75,0,0,7030.44,30,6495.21,5,-540.23,0,,,115,,,,,,,,133,,,,,,,,119,,,,,,,,138.04,,,,,,,,164,,,,,,,,175,,,,,,6.60741,11667.55629,116,7013.13818,7052.6,,25,,,,87,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,352,356,598,259.593955,263,377,279,321.533395,, +D,DREGION,,3,"2023/12/14 04:25:00",1,QLD1,0,62.46421,0,62.46421,0,0,5978.61,7,6075.08,0,96.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,26,,,,,,,,117,,,,,,,,106,,,,,,-3.06218,9824.24935,50,5974.52002,5978.46,,0,,,,44,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,291,410.333333,129,187.908453,206,310,193,151.571560,, +D,DREGION,,3,"2023/12/14 04:25:00",1,SA1,0,56.20712,0,56.20712,0,0,1216.67,3,1198.23,0,-18.44,0,,,41,,,,,,,,59.88,,,,,,,,50.43,,,,,,,,125,,,,,,,,123,,,,,,,,118.29,,,,,,8.34109,2567.52566,105,1207.4165,1216.39,,11,,,,11,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,125,130,130,61,121,129,129,105,, +D,DREGION,,3,"2023/12/14 04:25:00",1,TAS1,0,58.47214,0,58.47214,0,0,932.02,4,630.01,0,-302,0,,,26.94,,,,,,,,124.54,,,,,,,,78.85,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143,,,,,,3.77424,2213.3127,0,924.24268,932.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,7.57,7.57,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,61.878043,, +D,DREGION,,3,"2023/12/14 04:25:00",1,VIC1,0,55.74892,0,55.74892,0,0,4191.46,19,4998.49,1,806.03,0,,,59,,,,,,,,70,,,,,,,,70,,,,,,,,143,,,,,,,,103.57,,,,,,,,119,,,,,,-15.64223,8264.48996,433,4219.12451,4217.56,,124,,,,28,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.5,0.5,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,553.666667,558,559,56,348,460,394,501.7499,, +D,DREGION,,3,"2023/12/14 04:30:00",1,NSW1,0,61.55,0,61.55,0,0,7065.59,28,6448.7,5,-621.89,0,,,115,,,,,,,,133,,,,,,,,119,,,,,,,,148.81,,,,,,,,164,,,,,,,,162,,,,,,-4.31498,11666.36156,116,7067.22998,7092.28,,27,,,,61,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0,352,356,598,272.687801,263,377,279,311.918340,, +D,DREGION,,3,"2023/12/14 04:30:00",1,QLD1,0,61.28364,0,61.28364,0,0,5963.05,9,6071.53,0,108.48,0,,,0,,,,,,,,14.53,,,,,,,,0,,,,,,,,26,,,,,,,,117,,,,,,,,108.57,,,,,,0.65305,9820.49833,50,5953.25049,5962.92,,0,,,,40,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0,291,410.333333,129,184.606070,196,300,193,151.571560,, +D,DREGION,,3,"2023/12/14 04:30:00",1,SA1,0,53.97395,0,53.97395,0,0,1217.58,3,1208.62,0,-8.96,0,,,41,,,,,,,,41,,,,,,,,49.07,,,,,,,,125,,,,,,,,123,,,,,,,,118,,,,,,13.29785,2566.41561,105,1202.84045,1217.29,,0,,,,38,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0,125,130,130,61,121,129,129,105,, +D,DREGION,,3,"2023/12/14 04:30:00",1,TAS1,0,56.28077,0,56.28077,0,0,940.91,4,646.86,0,-294.04,0,,,22.7,,,,,,,,124.54,,,,,,,,78.85,,,,,,,,73.78,,,,,,,,153.72,,,,,,,,143.39,,,,,,1.89751,2229.96488,0,935.01025,940.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.6,7.6,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0,191.238095,210.354312,77.783784,50,78.850277,170.535150,188.911312,61.878043,, +D,DREGION,,3,"2023/12/14 04:30:00",1,VIC1,0,53.79579,0,53.79579,0,0,4204.94,23,5078.59,6,867.65,0,,,59,,,,,,,,70,,,,,,,,70,,,,,,,,140,,,,,,,,111.24,,,,,,,,137,,,,,,0,8308.59338,444,4212.12793,4240.92,,133,,,,31,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.72,0.72,0,0.53,0.53,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.72,0.72,0,577.666667,563,560,60,364.0001,598.0001,476.0001,562.7499,, +D,DREGION,,3,"2023/12/14 04:35:00",1,NSW1,0,62.75,0,62.75,0,0,7063.27,31,6488.83,5,-579.44,0,,,90,,,,,,,,128,,,,,,,,114,,,,,,,,105,,,,,,,,110,,,,,,,,128.15,,,,,,-19.66243,11669.57264,116,7075.99707,7087.37,,30,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,352,356,592,245.084428,258,372,254,311.946571,, +D,DREGION,,3,"2023/12/14 04:35:00",1,QLD1,0,62.49048,0,62.49048,0,0,5969.7,9,6072.08,0,102.38,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,145.85,,,,,,,,153,,,,,,1.90497,9921.66383,125,5958.67041,5969.55,,0,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,338,457.333333,176,244.993582,243,347,240,223.571560,, +D,DREGION,,3,"2023/12/14 04:35:00",1,SA1,0,55.79287,0,55.79287,0,0,1236.89,3,1209.18,1,-28.71,0,,,66,,,,,,,,66,,,,,,,,58,,,,,,,,145,,,,,,,,163,,,,,,,,159,,,,,,18.20742,2559.60597,362,1215.5564,1237.64,,10,,,,28,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,265,269,251,62,245,253,253,354,, +D,DREGION,,3,"2023/12/14 04:35:00",1,TAS1,0,57.59091,0,57.59091,0,0,948.39,5,682.99,0,-265.4,0,,,0,,,,,,,,85.72,,,,,,,,38.47,,,,,,,,79.88,,,,,,,,153.72,,,,,,,,143.41,,,,,,2.5818,2241.08834,0,940.80432,948.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,4.5,4.5,0,192.656315,212.169127,83.878378,50,81.586641,179.320864,193.438339,105.894303,, +D,DREGION,,3,"2023/12/14 04:35:00",1,VIC1,0,55.32892,0,55.32892,0,0,4271.73,27,5087.41,0,815.68,0,,,39.67,,,,,,,,61,,,,,,,,61,,,,,,,,110.63,,,,,,,,91,,,,,,,,80,,,,,,14.0666,8314.41422,444,4259.07129,4297.54,,120,,,,36,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,538.666667,545,546,66,362,474,408,513.156150,, +D,DREGION,,3,"2023/12/14 04:40:00",1,NSW1,0,62.75,0,62.75,0,0,7054.2,31,6482.2,5,-577.01,0,,,83,,,,,,,,101,,,,,,,,87,,,,,,,,105,,,,,,,,110,,,,,,,,104.66,,,,,,-30.99338,11677.93573,116,7083.81396,7079.58,,57,,,,75,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,352,356,598,247.117588,231,345,247,300.599974,, +D,DREGION,,3,"2023/12/14 04:40:00",1,QLD1,0,62.73,0,62.73,0,0,6037.53,12,6117.32,0,79.79,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,68,,,,,,,,145.07,,,,,,,,154,,,,,,-0.70497,9927.29869,125,6026.11719,6037.32,,0,,,,90,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,339,457.333333,176,231.052860,280.076640,384.076640,240,264.186520,, +D,DREGION,,3,"2023/12/14 04:40:00",1,SA1,0,56.05583,0,56.05583,0,0,1241.36,3,1206.41,8,-42.94,0,,,68,,,,,,,,68,,,,,,,,60,,,,,,,,147,,,,,,,,165,,,,,,,,161,,,,,,20.73605,2511.19061,362,1217.61145,1249.14,,21,,,,0,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,267,271,253,69,247,255,255,347,, +D,DREGION,,3,"2023/12/14 04:40:00",1,TAS1,0,57.26897,0,57.26897,0,0,957.28,5,710.98,0,-246.3,0,,,26.97,,,,,,,,98.03,,,,,,,,50.49,,,,,,,,79.88,,,,,,,,153.72,,,,,,,,143.13,,,,,,7.31966,2269.08322,0,944.96429,957.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,192.656315,212.169127,83.878378,50,81.586641,179.320864,193.438339,86.216643,, +D,DREGION,,3,"2023/12/14 04:40:00",1,VIC1,0,55.30176,0,55.30176,0,0,4202.3,28,5035.46,0,833.16,0,,,63,,,,,,,,74,,,,,,,,74,,,,,,,,109.85,,,,,,,,91,,,,,,,,102,,,,,,11.15238,8172.45758,441,4197.45996,4229.05,,82,,,,5,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,570.666667,577,578,44,398.0001,633.0001,511.0001,559.843650,, +D,DREGION,,3,"2023/12/14 04:45:00",1,NSW1,0,59.99043,0,59.99043,0,0,7080.44,33,6482.64,5,-602.79,0,,,34.09,,,,,,,,120.66,,,,,,,,104,,,,,,,,104,,,,,,,,110,,,,,,,,88,,,,,,-32.53595,11733.08962,116,7109.02783,7105.8,,30,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0,272,276,497,222.879024,254,368,250,291.324506,, +D,DREGION,,3,"2023/12/14 04:45:00",1,QLD1,0,59.78285,0,59.78285,0,0,5990.81,11,6093.8,0,102.99,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,71,,,,,,,,139,,,,,,,,156.17,,,,,,0,9943.42787,125,5980.0708,5990.64,,0,,,,68,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0,341,459.333333,179,225.939077,243,347,240,220,, +D,DREGION,,3,"2023/12/14 04:45:00",1,SA1,0,52.96405,0,52.96405,0,0,1230.51,4,1193.16,3,-40.36,0,,,62,,,,,,,,68,,,,,,,,60,,,,,,,,138.43,,,,,,,,164.3,,,,,,,,161,,,,,,0,2495.74422,362,1238.19507,1233.29,,20,,,,17,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0,284,286,253,113.021453,249,257,255,353.6693,, +D,DREGION,,3,"2023/12/14 04:45:00",1,TAS1,0,54.11179,0,54.11179,0,0,934.63,6,716.57,0,-218.05,0,,,0,,,,,,,,26.54,,,,,,,,0,,,,,,,,87.93,,,,,,,,155.16,,,,,,,,143.29,,,,,,7.97503,2283.92554,0,920.65265,934.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.13,8.13,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0,192.656315,213.614412,91.930678,50,81.586641,179.320864,193.438339,101.900892,, +D,DREGION,,3,"2023/12/14 04:45:00",1,VIC1,0,52.52236,0,52.52236,0,0,4201.65,25,5009.53,4,803.88,0,,,97,,,,,,,,123,,,,,,,,105.55,,,,,,,,103,,,,,,,,91,,,,,,,,111,,,,,,-3.64095,8202.53349,435,4213.04443,4231.34,,110,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.00057,11.00057,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.75,3.75,0,568.666667,575,576,38,398.0001,632.0001,510.0001,555.218650,, +D,DREGION,,3,"2023/12/14 04:50:00",1,NSW1,0,64.15762,0,64.15762,0,0,7153.96,35,6724.01,5,-434.95,0,,,53.35,,,,,,,,101,,,,,,,,87,,,,,,,,104,,,,,,,,110,,,,,,,,96.74,,,,,,0,11735.6025,116,7141.00586,7169.92,,45,,,,80,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0,392,396,641,270.858056,244.9999,358.9999,240.9999,302.551503,, +D,DREGION,,3,"2023/12/14 04:50:00",1,QLD1,0,64,0,64,0,0,6051.33,10,6152.9,0,101.56,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,71,,,,,,,,149.02,,,,,,,,156,,,,,,13.2406,9935.18209,125,6027.92236,6051.13,,0,,,,70,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0,341,459.333333,179,213.993571,266,360,205,280.571560,, +D,DREGION,,3,"2023/12/14 04:50:00",1,SA1,0,59.34564,0,59.34564,0,0,1262.59,5,1191.35,0,-71.24,0,,,53,,,,,,,,53,,,,,,,,45,,,,,,,,145,,,,,,,,163,,,,,,,,159,,,,,,24.09714,2493.53651,362,1233.45544,1262.53,,40,,,,11,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0,282,284,251,110.851470,238,246,244,357,, +D,DREGION,,3,"2023/12/14 04:50:00",1,TAS1,0,59.55243,0,59.55243,0,0,933.54,6,730.86,0,-202.68,0,,,0,,,,,,,,91.43,,,,,,,,45.09,,,,,,,,79.88,,,,,,,,152.67,,,,,,,,142.95,,,,,,7.03375,2294.87388,0,920.50427,933.54,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,4.5,4.5,0,192.656315,212.169127,83.878378,50,81.586641,179.320864,193.438339,100.261687,, +D,DREGION,,3,"2023/12/14 04:50:00",1,VIC1,0,57.96228,0,57.96228,0,0,4314.58,28,4951.17,4,632.59,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,111.73,,,,,,,,91,,,,,,,,111,,,,,,0,8177.16742,433,4308.40234,4333.17,,75,,,,9,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.39,0.39,0,9,9,0,0.38,0.38,0,0.38,0.38,0,0.15,0.15,0,3.71,3.71,0,570.666667,577,578,38,244.0001,240.0001,235.0001,377.9999,, +D,DREGION,,3,"2023/12/14 04:55:00",1,NSW1,0,62.75,0,62.75,0,0,7129.05,30,6620.81,5,-513.24,0,,,48.63,,,,,,,,101,,,,,,,,87,,,,,,,,104,,,,,,,,110,,,,,,,,88,,,,,,-7.62244,11686.79923,116,7123.34863,7150.17,,59.06,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,352,356,597,264.816422,233,347,249,327.266673,, +D,DREGION,,3,"2023/12/14 04:55:00",1,QLD1,0,62.73,0,62.73,0,0,6074.33,9,6155.11,1,79.78,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,71,,,,,,,,139,,,,,,,,139,,,,,,10.66575,9947.83955,125,6054.4502,6075.11,,0,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,341,459.333333,179,261.870001,290.592080,394.592080,240,278.959680,, +D,DREGION,,3,"2023/12/14 04:55:00",1,SA1,0,56.87071,0,56.87071,0,0,1258.75,5,1201.53,7,-64.21,0,,,49,,,,,,,,55,,,,,,,,47,,,,,,,,140.29,,,,,,,,162.61,,,,,,,,161,,,,,,18.38031,2474.97345,362,1235.5022,1265.64,,33.94,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,267,271,253,68,234.057440,242.057440,242.057440,348,, +D,DREGION,,3,"2023/12/14 04:55:00",1,TAS1,0,57.36113,0,57.36113,0,0,933.83,6,737.22,0,-196.61,0,,,0,,,,,,,,59.68,,,,,,,,13.03,,,,,,,,79.88,,,,,,,,146.61,,,,,,,,143.01,,,,,,5.42365,2299.73754,0,922.40967,933.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,4.5,4.5,0,192.656315,212.169127,83.878378,50,81.586641,179.320864,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 04:55:00",1,VIC1,0,55.82985,0,55.82985,0,0,4291.14,30,5022.66,1,730.51,0,,,97,,,,,,,,123,,,,,,,,123,,,,,,,,104,,,,,,,,95,,,,,,,,122.21,,,,,,-33.00145,8356.65617,416,4314.32959,4312.58,,67,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,588.666667,579,577,43.793250,384.0001,497.0001,431.0001,484.9999,, +D,DREGION,,3,"2023/12/14 05:00:00",1,NSW1,0,62.75,0,62.75,0,0,7165.08,32,6663.71,5,-506.37,0,,,83,,,,,,,,81,,,,,,,,63.42,,,,,,,,105,,,,,,,,110,,,,,,,,88,,,,,,-7.69634,11681.77574,116,7158.72363,7185.61,,56.99,,,,54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,392,396,648,286.102301,233.006290,347.006290,249.006290,325.258836,, +D,DREGION,,3,"2023/12/14 05:00:00",1,QLD1,0,62.73008,0,62.73008,0,0,6078.66,11,6161.92,3,80.27,0,,,0,,,,,,,,175,,,,,,,,155,,,,,,,,71,,,,,,,,236.33,,,,,,,,236,,,,,,14.73262,9948.38824,125,6052.84131,6081.44,,30,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,337,455.333333,179,261.993582,291,395,240,237.571560,, +D,DREGION,,3,"2023/12/14 05:00:00",1,SA1,0,57.20178,0,57.20178,0,0,1274.34,5,1196.28,0,-78.07,0,,,68,,,,,,,,68,,,,,,,,60,,,,,,,,146.48,,,,,,,,80,,,,,,,,121.37,,,,,,19.66496,2495.72728,362,1255.18665,1274.33,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,284,286,253,111.209675,249,257,255,357,, +D,DREGION,,3,"2023/12/14 05:00:00",1,TAS1,0,57.56249,0,57.56249,0,0,946.57,6,735.14,0,-211.43,0,,,33.46,,,,,,,,6.06,,,,,,,,0,,,,,,,,79.88,,,,,,,,139.64,,,,,,,,142.6,,,,,,5.52904,2293.23852,0,935.03662,946.57,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,192.656315,212.169127,83.878378,50,81.586641,179.320864,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 05:00:00",1,VIC1,0,55.8717,0,55.8717,0,0,4324.4,26,5078.67,3,751.27,0,,,51,,,,,,,,51,,,,,,,,36,,,,,,,,103,,,,,,,,93,,,,,,,,71,,,,,,-14.23528,8345.66754,402,4330.35645,4347.77,,54,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.26,4.26,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,580.666667,579,578,53,370.0001,361.0001,351.0001,419.9999,, +D,DREGION,,3,"2023/12/14 05:05:00",1,NSW1,0,62.75,0,62.75,0,0,7292.99,31,6787.21,5,-510.77,0,,,73.45,,,,,,,,78,,,,,,,,74,,,,,,,,140,,,,,,,,146,,,,,,,,124,,,,,,-7.87029,11754.08235,206,7289.30127,7312.15,,96,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0,428,432,683,345.950619,270,384,286,406.953050,, +D,DREGION,,3,"2023/12/14 05:05:00",1,QLD1,0,62.6966,0,62.6966,0,0,6062.27,9,6176.9,3,111.63,0,,,0,,,,,,,,134.36,,,,,,,,75.46,,,,,,,,71,,,,,,,,236.33,,,,,,,,236,,,,,,12.33656,9946.85447,125,6043.28809,6065.06,,29,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0,337,455.333333,179,261.993582,254.265720,358.265720,240,236.571555,, +D,DREGION,,3,"2023/12/14 05:05:00",1,SA1,0,57.62577,0,57.62577,0,0,1287.28,6,1205.44,1,-82.83,0,,,60,,,,,,,,64,,,,,,,,56,,,,,,,,116.07,,,,,,,,77,,,,,,,,80.38,,,,,,15.8686,2505.14834,362,1265.59424,1288.3,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0,281,283,251,127.851470,247,255,253,354.997890,, +D,DREGION,,3,"2023/12/14 05:05:00",1,TAS1,0,58.43975,0,58.43975,0,0,954.23,6,702.99,0,-251.24,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,104.52,,,,,,,,142.47,,,,,,5.66091,2273.99303,0,942.57336,954.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,4.5,4.5,0,191.873706,220.754986,77.878378,50,80.859368,169.935150,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 05:05:00",1,VIC1,0,56.288,0,56.288,0,0,4351.5,29,5118.85,0,767.34,0,,,109,,,,,,,,109,,,,,,,,109,,,,,,,,104,,,,,,,,94,,,,,,,,75,,,,,,4.07797,8347.84724,419,4343.9834,4371.65,,14,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.2601,4.2601,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.0434,0.0434,0,583.666667,579,578,65,337,330,320,407.093650,, +D,DREGION,,3,"2023/12/14 05:10:00",1,NSW1,0,68.33036,0,68.33036,0,0,7387.2,40,6995.14,0,-392.06,0,,,78,,,,,,,,83,,,,,,,,79,,,,,,,,140,,,,,,,,146,,,,,,,,124,,,,,,0,11722.02386,206,7363.97607,7394.49,,91,,,,26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,428,432,683,254.152232,275,389,291,403.547502,, +D,DREGION,,3,"2023/12/14 05:10:00",1,QLD1,0,67.94756,0,67.94756,0,0,6131.71,10,6272.99,1,140.28,0,,,0,,,,,,,,130.52,,,,,,,,71.72,,,,,,,,71,,,,,,,,221.93,,,,,,,,221.6,,,,,,22.80335,9950.2696,125,6100.1001,6132.56,,45.76,,,,108,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,322.599720,440.933053,179,258.993592,283.506370,387.506370,240,263.590590,, +D,DREGION,,3,"2023/12/14 05:10:00",1,SA1,0,63.9154,0,63.9154,0,0,1282.32,7,1213.73,1,-69.6,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,116.68,,,,,,,,78,,,,,,,,98.64,,,,,,14.05727,2507.82519,362,1261.13623,1283.25,,21,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,282,284,251,352.851470,249,257,255,355.6693,, +D,DREGION,,3,"2023/12/14 05:10:00",1,TAS1,0,64.82588,0,64.82588,0,0,955.7,6,725.36,0,-230.35,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,119.39,,,,,,,,142.08,,,,,,-2.15088,2285.50745,0,951.85498,955.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:10:00",1,VIC1,0,62.76,0,62.76,0,0,4491.02,33,5067.83,7,569.81,0,,,103,,,,,,,,103,,,,,,,,103,,,,,,,,104,,,,,,,,92,,,,,,,,71,,,,,,20.06499,8178.55196,408,4458.33887,4509.05,,9,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,5.22756,5.22756,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,578.666667,576,577,72,238,241,241,334.9999,, +D,DREGION,,3,"2023/12/14 05:15:00",1,NSW1,0,86.46532,0,86.46532,0,0,7502.78,43,7049.26,0,-453.51,0,,,100,,,,,,,,138,,,,,,,,114,,,,,,,,152.94,,,,,,,,146,,,,,,,,159.81,,,,,,7.06805,11713.90383,206,7464.83496,7511.6,,76,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,428,432,682,251.514927,270,384,286,429.780065,, +D,DREGION,,3,"2023/12/14 05:15:00",1,QLD1,0,85.55,0,85.55,0,0,6161.84,11,6331.92,0,170.08,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,176.33,,,,,,,,166,,,,,,26.35063,9873.17136,50,6125.8877,6161.75,,51.95,,,,108,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,250,368.333333,132,187.870001,244,348,193,208.494660,, +D,DREGION,,3,"2023/12/14 05:15:00",1,SA1,0,80.17966,0,80.17966,0,0,1273.65,7,1227.25,11,-57.39,0,,,39,,,,,,,,41,,,,,,,,33,,,,,,,,121,,,,,,,,79.81,,,,,,,,117,,,,,,12.22797,2515.86057,105,1255.91113,1284.5,,0,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,124,128,128,72,121,129,129,94,, +D,DREGION,,3,"2023/12/14 05:15:00",1,TAS1,0,81.32528,0,81.32528,0,0,959.94,7,726.6,0,-233.34,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,142.05,,,,,,0.40052,2290.43109,0,952.54376,959.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:15:00",1,VIC1,0,78.7336,0,78.7336,0,0,4517.28,34,5112.69,0,595.41,0,,,54,,,,,,,,71.99,,,,,,,,55.07,,,,,,,,133,,,,,,,,100,,,,,,,,71,,,,,,6.00654,8217.68997,410,4497.34082,4529.94,,79,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.49,0.49,0,20.68,20.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,571.666667,577,579,51,367,603,481,529.156150,, +D,DREGION,,3,"2023/12/14 05:20:00",1,NSW1,0,85.98,0,85.98,0,0,7531.32,45,7060.4,0,-470.91,0,,,100,,,,,,,,138,,,,,,,,114,,,,,,,,142.55,,,,,,,,146.26,,,,,,,,160.36,,,,,,0,11720.06131,206,7501.90137,7539.41,,76,,,,71,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,348,352,583,245.060442,266,380,282,425.276506,, +D,DREGION,,3,"2023/12/14 05:20:00",1,QLD1,0,84.58181,0,84.58181,0,0,6157.45,12,6370.62,0,213.17,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,181.33,,,,,,,,170,,,,,,0,9894.70396,50,6145.375,6157.54,,43.98,,,,87,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,254,373.333333,132,170.131598,244,348,193,212.964930,, +D,DREGION,,3,"2023/12/14 05:20:00",1,SA1,0,80.34273,0,80.34273,0,0,1279.04,7,1217,0,-62.04,0,,,37,,,,,,,,39,,,,,,,,31,,,,,,,,119,,,,,,,,81,,,,,,,,115,,,,,,12.88338,2538.08983,105,1273.18945,1278.92,,0,,,,12,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,122,126,126,61,119,127,127,105,, +D,DREGION,,3,"2023/12/14 05:20:00",1,TAS1,0,82.11202,0,82.11202,0,0,970.66,6,706,0,-264.66,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,141.95,,,,,,1.55445,2269.1415,0,963.10474,970.66,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.34,7.34,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:20:00",1,VIC1,0,78.88692,0,78.88692,0,0,4427.08,33,5032.28,0,605.2,0,,,63,,,,,,,,74.87,,,,,,,,55.63,,,,,,,,154,,,,,,,,102,,,,,,,,77,,,,,,4.9889,8194.28328,411,4408.9082,4439.76,,81,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,18.66,18.66,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,576.666667,578,579,34,365,601,489,530.2499,, +D,DREGION,,3,"2023/12/14 05:25:00",1,NSW1,0,85.98,0,85.98,0,0,7602.24,40,7044.53,0,-557.72,0,,,105,,,,,,,,106.09,,,,,,,,79.66,,,,,,,,145.87,,,,,,,,146,,,,,,,,124,,,,,,25.85004,11723.43989,206,7545.479,7614.36,,71,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0,388,392,633,286.033940,273,387,289,420.282326,, +D,DREGION,,3,"2023/12/14 05:25:00",1,QLD1,0,84.62339,0,84.62339,0,0,6186.71,11,6403.19,2,214.48,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,156.23,,,,,,,,170,,,,,,21.44596,9912.02496,50,6154.36182,6188.79,,57,,,,102.18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0,254,373.333333,132,187.170153,244,348,193,216.571560,, +D,DREGION,,3,"2023/12/14 05:25:00",1,SA1,0,79.01495,0,79.01495,0,0,1277.21,7,1206.47,0,-70.74,0,,,36.89,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,120,,,,,,,,116,,,,,,16.52226,2533.96589,105,1253.74402,1277.14,,0,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0,140,142,127,61,123,131,129,105,, +D,DREGION,,3,"2023/12/14 05:25:00",1,TAS1,0,81.16814,0,81.16814,0,0,980.74,7,692.91,0,-287.83,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.83,,,,,,0.82539,2256.52484,0,972.91333,980.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:25:00",1,VIC1,0,77.5843,0,77.5843,0,0,4447.97,30,5190.44,10,732.46,0,,,99,,,,,,,,104,,,,,,,,89,,,,,,,,144,,,,,,,,82,,,,,,,,104.12,,,,,,-11.24302,8389.43545,430,4447.08447,4476.51,,32,,,,10.82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,12.89,12.89,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,0.01,0.01,0,576.666667,579,580,53.9999,404,519,463,499.2499,, +D,DREGION,,3,"2023/12/14 05:30:00",1,NSW1,0,85.98,0,85.98,0,0,7585.1,38,7046.31,0,-538.79,0,,,125,,,,,,,,143,,,,,,,,119,,,,,,,,140,,,,,,,,146,,,,,,,,132.09,,,,,,22.16813,11729.02476,206,7533.9917,7594.49,,71,,,,57,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0,388,392,633,283.424668,273,387,289,398.081680,, +D,DREGION,,3,"2023/12/14 05:30:00",1,QLD1,0,83.51552,0,83.51552,0,0,6170.21,11,6434.84,0,264.63,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,24.57,,,,,,,,149.33,,,,,,,,165,,,,,,17.73848,9942.61439,50,6143.4917,6170.72,,80,,,,92,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0,249,368.333333,132,197.993582,244,348,193,218.571560,, +D,DREGION,,3,"2023/12/14 05:30:00",1,SA1,0,81.21302,0,81.21302,0,0,1297.59,7,1199.01,0,-98.58,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,120,,,,,,,,118.03,,,,,,,,116,,,,,,17.35708,2525.07136,105,1274.21191,1297.75,,0,,,,11,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0,123,127,127,61,121,129,129,105,, +D,DREGION,,3,"2023/12/14 05:30:00",1,TAS1,0,82.79906,0,82.79906,0,0,990.03,7,678.56,0,-311.48,0,,,0,,,,,,,,7.18,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.99,,,,,,-0.06753,2243.46828,0,983.10126,990.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:30:00",1,VIC1,0,78.94286,0,78.94286,0,0,4518.35,29,5228.73,0,710.37,0,,,64.55,,,,,,,,59,,,,,,,,46.85,,,,,,,,155,,,,,,,,96,,,,,,,,106,,,,,,1.09649,8378.7255,430,4513.74121,4534.46,,19,,,,10,,,,,,,,,,,,,,,,,,,0.45,0.45,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.2,0.2,0,0.2,0.2,0,598.666667,583,581,45,402,517,461,508.156150,, +D,DREGION,,3,"2023/12/14 05:35:00",1,NSW1,0,85.98,0,85.98,0,0,7656.1,39,7129.91,0,-526.19,0,,,116.62,,,,,,,,159.66,,,,,,,,144,,,,,,,,150.4,,,,,,,,146,,,,,,,,124,,,,,,12.72394,11758.62037,206,7614.61816,7665.19,,82,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,388,392,633,252.127662,298,412,314,387.191829,, +D,DREGION,,3,"2023/12/14 05:35:00",1,QLD1,0,84.1864,0,84.1864,0,0,6217.54,11,6468.46,0,250.91,0,,,0,,,,,,,,55,,,,,,,,45,,,,,,,,24,,,,,,,,164.33,,,,,,,,180,,,,,,11.22122,9975.28667,50,6195.51318,6217.8,,20,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,264,383.333333,132,183.993582,179,273,158,158.571560,, +D,DREGION,,3,"2023/12/14 05:35:00",1,SA1,0,81.16151,0,81.16151,0,0,1301.1,6,1199.01,1,-103.09,0,,,36,,,,,,,,39,,,,,,,,31,,,,,,,,118,,,,,,,,112.1,,,,,,,,109.07,,,,,,17.82549,2497.14645,105,1278.77844,1302.3,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,121,125,125,62,119,127,127,104,, +D,DREGION,,3,"2023/12/14 05:35:00",1,TAS1,0,82.95501,0,82.95501,0,0,991.31,7,673.96,0,-317.36,0,,,0,,,,,,,,32.82,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,144.08,,,,,,-0.15321,2240.95565,0,984.46692,991.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,109.016259,, +D,DREGION,,3,"2023/12/14 05:35:00",1,VIC1,0,78.89183,0,78.89183,0,0,4515.14,30,5264.04,27,721.9,0,,,88,,,,,,,,93,,,,,,,,87.75,,,,,,,,142,,,,,,,,81,,,,,,,,100,,,,,,6.96839,8387.03626,438,4498.74805,4558.76,,47,,,,37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,11.68,11.68,0,0.2,0.2,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,583.666667,579,579,80.9998,365,478,422,482,, +D,DREGION,,3,"2023/12/14 05:40:00",1,NSW1,0,99.10241,0,99.10241,0,0,7746.61,41,7262.76,0,-483.85,0,,,114.72,,,,,,,,134.44,,,,,,,,106.11,,,,,,,,167.37,,,,,,,,146,,,,,,,,124,,,,,,19.10402,11810.22086,206,7694.46631,7752.3,,102,,,,59.84,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0,428,432,683,235.366398,361.540320,475.540320,377.540320,475.723421,, +D,DREGION,,3,"2023/12/14 05:40:00",1,QLD1,0,93.98996,0,93.98996,0,0,6192.34,8,6589.38,0,397.04,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,29,,,,,,,,178.25,,,,,,,,180,,,,,,10.15551,10010.16084,50,6174.87207,6194.53,,20,,,,64.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0,264,383.333333,132,127.562785,216,333.502460,203,174.993582,, +D,DREGION,,3,"2023/12/14 05:40:00",1,SA1,0,97.67897,0,97.67897,0,0,1335.46,7,1206.39,0,-129.07,0,,,28,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,118,,,,,,,,113.97,,,,,,20.27513,2518.85554,105,1308.88086,1335.93,,11,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0,138,140,125,110.692565,123,131,129,106.6693,, +D,DREGION,,3,"2023/12/14 05:40:00",1,TAS1,0,98.34907,0,98.34907,0,0,992.5,7,701.13,0,-291.37,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,42.8,,,,,,,,122.64,,,,,,,,138.92,,,,,,-0.24038,2237.21564,0,985.74158,992.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.27907,7.27907,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,3.5,3.5,0,180.006813,189.677186,46.800578,49.999997,116.641346,207.301329,236.753120,113.455285,, +D,DREGION,,3,"2023/12/14 05:40:00",1,VIC1,0,94.00663,0,94.00663,0,0,4632.25,29,5172.09,16,523.84,0,,,99,,,,,,,,114,,,,,,,,99,,,,,,,,155,,,,,,,,97,,,,,,,,105,,,,,,12.06307,8237.08935,441,4621.10352,4656.49,,27,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,11.07241,11.07241,0,0.03,0.03,0,0.15,0.15,0,0.15,0.15,0,1,1,0,601.0001,567.0001,563.0001,52.9999,380,373,363,444,, +D,DREGION,,3,"2023/12/14 05:45:00",1,NSW1,0,89.03,0,89.03,0,0,7733.87,38,7306.28,0,-427.59,0,,,106.4,,,,,,,,136.84,,,,,,,,107.7,,,,,,,,159.43,,,,,,,,146,,,,,,,,124,,,,,,0,11914.56416,206,7709.78711,7737.9,,96,,,,62,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0,428,432,683,305.348149,306.714770,420.714770,322.714770,438.302636,, +D,DREGION,,3,"2023/12/14 05:45:00",1,QLD1,0,85.55,0,85.55,0,0,6198.94,8,6558.26,0,359.32,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,29,,,,,,,,192.33,,,,,,,,181,,,,,,0,10057.81907,50,6192.56885,6200.42,,20,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0,264,383.333333,132,172.996791,204,308,193,145.729812,, +D,DREGION,,3,"2023/12/14 05:45:00",1,SA1,0,86.40576,0,86.40576,0,0,1304.84,7,1220.92,0,-83.92,0,,,34,,,,,,,,41,,,,,,,,31,,,,,,,,96,,,,,,,,78.7,,,,,,,,82.24,,,,,,0,2565.4094,105,1304.90002,1304.86,,0,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0,121,125,125,77,121,129,129,105,, +D,DREGION,,3,"2023/12/14 05:45:00",1,TAS1,0,89.00908,0,89.00908,0,0,996.11,7,669.4,0,-326.71,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.5,,,,,,0.79567,2237.06878,0,988.3147,996.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.27,7.27,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.5,3.5,0,191.873706,220.754986,77.878378,50,85.563546,176.223529,205.466744,113.455285,, +D,DREGION,,3,"2023/12/14 05:45:00",1,VIC1,0,84.43615,0,84.43615,0,0,4630.84,33,5123.73,0,492.89,0,,,102,,,,,,,,112,,,,,,,,97,,,,,,,,151,,,,,,,,86,,,,,,,,126,,,,,,-1.93105,8246.7335,441,4630.03418,4639.3,,44,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,1,1,0,586.0001,561.0001,558.0001,40.9999,406.0001,643.0001,526.0001,560.218650,, +D,DREGION,,3,"2023/12/14 05:50:00",1,NSW1,0,62.75,0,62.75,0,0,7792.01,33,7221.78,5,-575.23,0,,,99.47,,,,,,,,135,,,,,,,,122,,,,,,,,155.99,,,,,,,,146,,,,,,,,124,,,,,,0,12018.94547,206,7775.65234,7805.92,,110,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,428,432,683,346.966603,270,383,284,349.876712,, +D,DREGION,,3,"2023/12/14 05:50:00",1,QLD1,0,58.73577,0,58.73577,0,0,6121.51,5,6594.54,0,473.03,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,204.26,,,,,,,,174.92,,,,,,0,10126.99065,50,6119.729,6125.32,,0,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,275.922660,395.255993,132,183.396383,204,308,193,138.571565,, +D,DREGION,,3,"2023/12/14 05:50:00",1,SA1,0,60.58483,0,60.58483,0,0,1317.95,6,1223.53,0,-94.42,0,,,26,,,,,,,,26,,,,,,,,18,,,,,,,,116,,,,,,,,69.01,,,,,,,,112,,,,,,0,2583.41977,105,1317.48047,1318.07,,22,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,136,138,123,109.350356,110,118,116,106.6693,, +D,DREGION,,3,"2023/12/14 05:50:00",1,TAS1,0,62.5296,0,62.5296,0,0,1003.76,7,646.93,0,-356.83,0,,,0,,,,,,,,35.59,,,,,,,,4.25,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.35,,,,,,1.49187,2229.62673,0,995.26489,1003.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,4.5,4.5,0,191.873706,220.754986,77.878378,50,80.859368,169.935150,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 05:50:00",1,VIC1,0,59.01977,0,59.01977,0,0,4569.37,32,5147.27,0,577.91,0,,,76,,,,,,,,91,,,,,,,,91,,,,,,,,138,,,,,,,,82,,,,,,,,100.71,,,,,,-15.92517,8289.27272,438,4572.55029,4580.99,,67,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.38,0.38,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,569.666667,566,566,24,405.0001,642.0001,520.0001,577.093650,, +D,DREGION,,3,"2023/12/14 05:55:00",1,NSW1,0,62.75,0,62.75,0,0,7783.48,25,7211.2,5,-577.28,0,,,96.42,,,,,,,,122.74,,,,,,,,99,,,,,,,,148.29,,,,,,,,146,,,,,,,,124,,,,,,14.56021,12143.01006,206,7761.05322,7797.81,,79,,,,64,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0,388,392,633,322.089503,289,402,303,362.750784,, +D,DREGION,,3,"2023/12/14 05:55:00",1,QLD1,0,58.70417,0,58.70417,0,0,6122.89,1,6617.98,0,495.09,0,,,0,,,,,,,,90,,,,,,,,64.1,,,,,,,,24,,,,,,,,190.33,,,,,,,,189,,,,,,24.34216,10163.80062,50,6102.26416,6127.33,,12,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0,290,409.333333,132,209.747488,204,308,193,142.657311,, +D,DREGION,,3,"2023/12/14 05:55:00",1,SA1,0,61.89212,0,61.89212,0,0,1350.89,7,1221,0,-129.89,0,,,36,,,,,,,,41,,,,,,,,31,,,,,,,,120,,,,,,,,79.43,,,,,,,,116,,,,,,15.3908,2595.04704,105,1332.9668,1351.37,,0,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0,123,127,127,61,121,129,129,105,, +D,DREGION,,3,"2023/12/14 05:55:00",1,TAS1,0,63.58422,0,63.58422,0,0,1049.5,7,657.82,0,-391.67,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143.26,,,,,,1.4275,2240.55731,0,1041.0686,1049.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,4.5,4.5,0,191.873706,220.754986,77.878378,50,80.859368,169.935150,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 05:55:00",1,VIC1,0,59.56734,0,59.56734,0,0,4611.93,28,5243.83,0,631.89,0,,,110,,,,,,,,125,,,,,,,,110,,,,,,,,143,,,,,,,,86,,,,,,,,83.22,,,,,,-22.56664,8542.82722,421,4620.68164,4625.82,,69,,,,13,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.01,0.01,0,0.15,0.15,0,0.01,0.01,0,3.99,3.99,0,583.666667,564,562,35,400,637,515,559.031250,, +D,DREGION,,3,"2023/12/14 06:00:00",1,NSW1,0,61.55,0,61.55,0,0,7837.31,24,7147.1,5,-695.21,0,,,107.61,,,,,,,,106.73,,,,,,,,78.49,,,,,,,,152.54,,,,,,,,146,,,,,,,,124,,,,,,13.21227,12221.27517,206,7817.62061,7855.29,,83,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,428,432,683,351.483333,297,409,311,362.529274,, +D,DREGION,,3,"2023/12/14 06:00:00",1,QLD1,0,57.25069,0,57.25069,0,0,6145.56,-3,6658.51,0,512.95,0,,,0,,,,,,,,121.22,,,,,,,,101.22,,,,,,,,24,,,,,,,,190.33,,,,,,,,189,,,,,,33.57537,10278.17206,50,6120.75586,6150.33,,10,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,290,409.333333,132,214.946905,235.224710,339.224710,193,148.571562,, +D,DREGION,,3,"2023/12/14 06:00:00",1,SA1,0,58.99219,0,58.99219,0,0,1354.23,6,1238.68,0,-115.56,0,,,28,,,,,,,,28,,,,,,,,18,,,,,,,,120,,,,,,,,82.71,,,,,,,,116,,,,,,11.59306,2606.87857,105,1337.47412,1354.55,,12,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,140,142,127,110.021453,122,130,128,105.997890,, +D,DREGION,,3,"2023/12/14 06:00:00",1,TAS1,0,60.91619,0,60.91619,0,0,1064.01,6,663.63,0,-400.38,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.88,,,,,,,,153.72,,,,,,,,143,,,,,,5.02979,2245.56085,0,1052.97986,1064.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,4.5,4.5,0,191.873706,220.754986,77.878378,50,80.859368,169.935150,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 06:00:00",1,VIC1,0,57.06786,0,57.06786,0,0,4642.91,25,5376.95,0,734.04,0,,,105,,,,,,,,120,,,,,,,,105,,,,,,,,138,,,,,,,,81,,,,,,,,81.76,,,,,,-21.57485,8652.95071,421,4656.09375,4660.69,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,580,587,588,35,383,376,366,440,, +D,DREGION,,3,"2023/12/14 06:05:00",1,NSW1,0,62.75,0,62.75,0,0,7914.52,19,7178.27,20,-756.25,0,,,63.49,,,,,,,,95.49,,,,,,,,67.15,,,,,,,,155.65,,,,,,,,126,,,,,,,,124,,,,,,20.57207,12519.70478,206,7898.34961,7949.65,,145,,,,79,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,308,312,533,290.617903,229.000550,341.000550,243.000550,345.017930,, +D,DREGION,,3,"2023/12/14 06:05:00",1,QLD1,0,58.38787,0,58.38787,0,0,6122.49,-5,6649,0,526.52,0,,,0,,,,,,,,82,,,,,,,,62,,,,,,,,24,,,,,,,,200.06,,,,,,,,211,,,,,,37.27564,10612.08804,50,6096.29248,6127.55,,9,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,294,412.333333,132,180.232539,202,313.296630,198,144.568351,, +D,DREGION,,3,"2023/12/14 06:05:00",1,SA1,0,59.72907,0,59.72907,0,0,1385.68,7,1267.02,0,-118.67,0,,,26,,,,,,,,26,,,,,,,,18,,,,,,,,118,,,,,,,,118,,,,,,,,114,,,,,,12.84934,2648.18151,105,1367.31323,1386.03,,21.75,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,121,125,125,61,108.248290,116.248290,116.248290,105,, +D,DREGION,,3,"2023/12/14 06:05:00",1,TAS1,0,61.52797,0,61.52797,0,0,1066.65,6,680.84,0,-385.81,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,98.88,,,,,,,,153.72,,,,,,,,143.05,,,,,,2.52396,2257.34603,0,1058.12451,1066.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,4.5,4.5,0,196.224090,231.655449,102.878378,50,85.425687,162.435150,193.438339,105.894309,, +D,DREGION,,3,"2023/12/14 06:05:00",1,VIC1,0,57.78473,0,57.78473,0,0,4674.94,24,5453.51,5,773.58,0,,,104,,,,,,,,159,,,,,,,,154,,,,,,,,109,,,,,,,,52,,,,,,,,57.73,,,,,,-3.20464,8684.51292,410,4674.31543,4698.76,,19,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.07,0.07,0,0.07,0.07,0,574,582,583,49,391,506,440,474.25,, +D,DREGION,,3,"2023/12/14 06:10:00",1,NSW1,0,32.79008,0,32.79008,0,0,7889.32,18,7064.02,50,-875.3,0,,,86.33,,,,,,,,94.63,,,,,,,,70.79,,,,,,,,140,,,,,,,,126,,,,,,,,124,,,,,,0,12689.11875,206,7953.64307,7960.32,,95,,,,64.59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0,308,312,533,316.780733,234.000550,346.000550,248.000550,202.103673,, +D,DREGION,,3,"2023/12/14 06:10:00",1,QLD1,0,29.75356,0,29.75356,0,0,6119.8,-2,6776.18,0,656.37,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,191.95,,,,,,,,189,,,,,,0,10872.0896,50,6129.93848,6128.63,,13,,,,76.41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0,290,410.947128,132,186.410289,189.488550,292.288570,178.488550,77.996797,, +D,DREGION,,3,"2023/12/14 06:10:00",1,SA1,0,31.04578,0,31.04578,0,0,1393.68,8,1300.06,0,-93.62,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,87.59,,,,,,,,79.59,,,,,,,,116,,,,,,0,2663.34978,105,1401.33618,1393.79,,0,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0,140,142,127,61,123,131,129,105,, +D,DREGION,,3,"2023/12/14 06:10:00",1,TAS1,0,54.11,0,54.11,0,0,1068.92,5,606.92,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,149.64,,,,,,,,160,,,,,,,,142.96,,,,,,5.64918,2259.88464,0,1058.26941,1068.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0.38,0.38,0,0,0,0,4.5,4.5,0,191.351967,225.851852,153.643428,50,54.648750,127.929587,151.021123,51.259239,, +D,DREGION,,3,"2023/12/14 06:10:00",1,VIC1,0,30.24378,0,30.24378,0,0,4710.6,23,5543.69,5,828.09,0,,,96,,,,,,,,131,,,,,,,,126,,,,,,,,104,,,,,,,,91,,,,,,,,76.57,,,,,,0,8799.68666,410,4715.10303,4739.21,,97.38,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.14,0.14,0,0.38,0.38,0,0.15,0.15,0,1.2,1.2,0,594,617,619,64,369,605,483,495.460693,, +D,DREGION,,3,"2023/12/14 06:15:00",1,NSW1,0,21.61679,0,21.61679,0,0,7927.1,18,6948.58,50,-1028.52,0,,,53,,,,,,,,83.57,,,,,,,,59,,,,,,,,140,,,,,,,,126,,,,,,,,124,,,,,,0,12732.53483,206,8002.07813,8005.05,,120,,,,45,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0,308,312,533,304.528954,229.000550,341.000550,243.000550,201.981913,, +D,DREGION,,3,"2023/12/14 06:15:00",1,QLD1,0,20.0424,0,20.0424,0,0,6216.23,4,6762.97,0,546.75,0,,,0,,,,,,,,67.4,,,,,,,,57.4,,,,,,,,24,,,,,,,,196,,,,,,,,189,,,,,,0,10990.05703,50,6219.61621,6221.31,,20.38,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0,290,415,132,214.996791,177.830920,214.130920,156.830920,78.000003,, +D,DREGION,,3,"2023/12/14 06:15:00",1,SA1,0,19.56637,0,19.56637,0,0,1392.63,8,1311.51,0,-81.12,0,,,34,,,,,,,,41,,,,,,,,33,,,,,,,,86.14,,,,,,,,66.99,,,,,,,,91.1,,,,,,0,2669.06614,105,1388.29163,1392.64,,16,,,,34,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0,123,127,127,77,121,129,129,105,, +D,DREGION,,3,"2023/12/14 06:15:00",1,TAS1,0,54.1,0,54.1,0,0,1067.43,5,605.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,150.88,,,,,,,,160,,,,,,,,142.89,,,,,,5.77308,2269.50312,0,1056.65576,1067.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,4.5,4.5,0,191.351967,225.851852,154.878378,59.886280,50.371354,121.381573,139.759118,61.316560,, +D,DREGION,,3,"2023/12/14 06:15:00",1,VIC1,0,19.12,0,19.12,0,0,4491.66,17,5593.29,5,1096.63,0,,,105,,,,,,,,160,,,,,,,,150.15,,,,,,,,100,,,,,,,,95,,,,,,,,97,,,,,,0,8856.64957,416,4527.38721,4535.36,,49,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.99,3.99,0,453.666667,446.362660,442.362660,73.362660,406,643,521,527.628551,, +D,DREGION,,3,"2023/12/14 06:20:00",1,NSW1,0,39.25,0,39.25,0,0,7984.37,19,6899.25,49.19,-1134.31,0,,,36.04,,,,,,,,111.81,,,,,,,,97.77,,,,,,,,140,,,,,,,,126,,,,,,,,138.28,,,,,,2.93244,12853.93642,206,8038.32959,8067.42,,96,,,,88,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0,428,432,677,378.948339,239.812520,329.291990,222.785970,228.491901,, +D,DREGION,,3,"2023/12/14 06:20:00",1,QLD1,0,35.44616,0,35.44616,0,0,6214.69,6,6920.04,0,705.35,0,,,0,,,,,,,,37,,,,,,,,25,,,,,,,,24,,,,,,,,138.65,,,,,,,,141,,,,,,27.60333,11038.4305,50,6187.17725,6224.87,,39.38,,,,30,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0,214,317.333333,132,117.100006,139,187.619450,138,135,, +D,DREGION,,3,"2023/12/14 06:20:00",1,SA1,0,35.86653,0,35.86653,0,0,1405.74,7,1311.47,0,-94.27,0,,,26,,,,,,,,51.38,,,,,,,,31,,,,,,,,80.05,,,,,,,,119,,,,,,,,115,,,,,,20.33492,2650.67794,105,1378.76855,1405.85,,20,,,,43,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0,139,141,126,110.851470,121,129,127,106.6693,, +D,DREGION,,3,"2023/12/14 06:20:00",1,TAS1,0,54.1,0,54.1,0,0,1069.16,4,607.16,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,150.88,,,,,,,,160,,,,,,,,139.38,,,,,,4.4292,2287.55324,0,1060.72827,1069.16,,50,,,,50,,,,,,,,,,,,,,,,,,,1,1,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.34,0.34,0,0,0,0,0,0,0,4.5,4.5,0,191.351967,225.851852,154.878378,76.272780,44.068854,111.733446,123.165194,53.189922,, +D,DREGION,,3,"2023/12/14 06:20:00",1,VIC1,0,34.94,0,34.94,0,0,4604.01,14,5674.54,5,1065.54,0,,,104,,,,,,,,150,,,,,,,,144,,,,,,,,106,,,,,,,,99,,,,,,,,109,,,,,,5.3569,8891.66962,418,4622.05176,4645.16,,50,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.34,0.34,0,0.39,0.39,0,0.07,0.07,0,6,6,0,436.126960,403.126960,399.126960,35.126960,380,622,505,518.156250,, +D,DREGION,,3,"2023/12/14 06:25:00",1,NSW1,0,38.74711,0,38.74711,0,0,8072.65,18,6840.4,50.94,-1283.18,0,,,45.06,,,,,,,,89.06,,,,,,,,71.06,,,,,,,,141,,,,,,,,126,,,,,,,,126.38,,,,,,-13.13133,12902.91849,206,8157.16504,8167.18,,131,,,,65,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0,428,432,678,381.104162,223.064580,261.550090,168.265510,221.044105,, +D,DREGION,,3,"2023/12/14 06:25:00",1,QLD1,0,34.55,0,34.55,0,0,6166.75,2,6956.74,0,790,0,,,0,,,,,,,,91,,,,,,,,71,,,,,,,,24,,,,,,,,159.33,,,,,,,,177,,,,,,31.88779,11109.62494,50,6144.2124,6180.13,,18,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0,260,378.333333,132,166.996791,181.699530,225.699530,179.430930,109.568603,, +D,DREGION,,3,"2023/12/14 06:25:00",1,SA1,0,35.14367,0,35.14367,0,0,1427.73,6,1314.26,0,-113.47,0,,,36.61,,,,,,,,75,,,,,,,,60.47,,,,,,,,121,,,,,,,,115.94,,,,,,,,117,,,,,,22.12913,2653.52833,105,1399.93945,1428.03,,18,,,,35,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0,141,143,128,110.851470,116,124,122,105.997890,, +D,DREGION,,3,"2023/12/14 06:25:00",1,TAS1,0,53.60593,0,53.60593,0,0,1072.88,4,615.76,0,-457.11,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,156.46,,,,,,,,139.36,,,,,,2.97492,2289.29659,0,1065.90088,1072.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0,0,0,0,0,0,4.5,4.5,0,192.351967,235.315962,179.725596,101.775003,44.699358,115.156995,124.545838,51.423374,, +D,DREGION,,3,"2023/12/14 06:25:00",1,VIC1,0,33.99802,0,33.99802,0,0,4583.53,15,5751.02,5,1162.49,0,,,84,,,,,,,,89,,,,,,,,94,,,,,,,,112.88,,,,,,,,85,,,,,,,,83,,,,,,9.10193,8984.12106,421,4606.36133,4629.98,,33.49,,,,19,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.52289,0.52289,0,0.39,0.39,0,0.71,0.71,0,417,422,421,72,380,622,505,492.118835,, +D,DREGION,,3,"2023/12/14 06:30:00",1,NSW1,0,58,0,58,0,0,8096.11,23,6857.15,30,-1268.95,0,,,34,,,,,,,,106,,,,,,,,84,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,-6.98316,12942.34515,206,8167.39941,8168.61,,116,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0,428,432,678,376.778172,254.000550,301.857550,196.902870,305.535791,, +D,DREGION,,3,"2023/12/14 06:30:00",1,QLD1,0,52.00029,0,52.00029,0,0,6183.07,3,6942.05,0,758.97,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,216.33,,,,,,,,189,,,,,,35.33744,11000.90075,50,6153.23193,6195.11,,25,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0,290,408.333333,132,135.049681,198.428440,300.428440,187.428440,147.997510,, +D,DREGION,,3,"2023/12/14 06:30:00",1,SA1,0,32.55006,0,32.55006,0,0,1411.67,4,1309.05,0,-102.63,0,,,36.34,,,,,,,,41,,,,,,,,31.44,,,,,,,,96.03,,,,,,,,48.79,,,,,,,,91.81,,,,,,19.63134,2697.40251,105,1388.08313,1414.21,,3.38,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0,141,143,128,126.851470,123,131,129,105.997890,, +D,DREGION,,3,"2023/12/14 06:30:00",1,TAS1,0,53.57593,0,53.57593,0,0,1085.24,3,623.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,144.31,,,,,,2.62609,2292.06877,0,1079.61646,1085.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,4.5,4.5,0,191.351967,231.851852,181.604608,117.319848,39.063936,120.028794,123.576908,70.365640,, +D,DREGION,,3,"2023/12/14 06:30:00",1,VIC1,0,19.12,0,19.12,0,0,4574.66,10,5758.97,5,1179.32,0,,,95,,,,,,,,110.86,,,,,,,,110,,,,,,,,133,,,,,,,,93,,,,,,,,88,,,,,,0,9018.49744,418,4611.62939,4627.3,,61,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.05,0.05,0,0.17,0.17,0,0.01,0.01,0,3.99,3.99,0,441,459.223080,456.223080,97.223080,281,523,406,433.884525,, +D,DREGION,,3,"2023/12/14 06:35:00",1,NSW1,0,56.56774,0,56.56774,0,0,8216.85,25,6894.94,30,-1351.91,0,,,50.92,,,,,,,,98.44,,,,,,,,74,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,1.03295,13068.93125,206,8266.62305,8295.67,,115,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0,428,432,678,379.188012,338.628410,370.628410,282.628410,288.600576,, +D,DREGION,,3,"2023/12/14 06:35:00",1,QLD1,0,49.55,0,49.55,0,0,6228.16,6,7123.83,0,895.68,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,37.31945,11152.08323,50,6200.55176,6245.69,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0,290,408.333333,132,197.357274,198.428440,300.428440,187.428440,147.997510,, +D,DREGION,,3,"2023/12/14 06:35:00",1,SA1,0,31.92246,0,31.92246,0,0,1426.73,2,1330.24,26,-122.49,0,,,20,,,,,,,,39,,,,,,,,29,,,,,,,,85.03,,,,,,,,83.8,,,,,,,,115,,,,,,12.46677,2644.33569,105,1415.06519,1455.11,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0,139,141,126,135.851470,121,129,127,79.997890,, +D,DREGION,,3,"2023/12/14 06:35:00",1,TAS1,0,54.1,0,54.1,0,0,1085.46,2,623.46,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.21,,,,,,3.79638,2244.50647,0,1079.65955,1085.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.03,0.03,0,0,0,0,0,0,0,3.5,3.5,0,191.351967,231.851852,156.878378,90.921507,54.616108,142.894170,170.956304,94.161114,, +D,DREGION,,3,"2023/12/14 06:35:00",1,VIC1,0,19.12,0,19.12,0,0,4540.12,1,5744.9,51,1153.79,0,,,94,,,,,,,,119,,,,,,,,121.02,,,,,,,,146,,,,,,,,86,,,,,,,,61.92,,,,,,-15.37807,8932.29,415,4608.39697,4635.44,,54.38,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.03,0.03,0,0.15,0.15,0,0.01,0.01,0,3.75,3.75,0,404,417.385980,419.385980,120.385980,305,541,419,479.25,, +D,DREGION,,3,"2023/12/14 06:40:00",1,NSW1,0,57.27467,0,57.27467,0,0,8321,24,6976.55,51.36,-1395.8,0,,,48,,,,,,,,99.64,,,,,,,,77.87,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,16.05804,13175.62173,206,8356.99805,8425.23,,115,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0,428,432,678,374.192504,317.644660,349.644660,261.644660,253.147121,, +D,DREGION,,3,"2023/12/14 06:40:00",1,QLD1,0,49.55,0,49.55,0,0,6221.02,12,7195.6,0,974.58,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,38.00837,11229.6237,50,6193.94287,6242.2,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0,290,408.333333,132,214.996791,198.428440,300.428440,187.428440,141.482931,, +D,DREGION,,3,"2023/12/14 06:40:00",1,SA1,0,21.88486,0,21.88486,0,0,1434.41,2,1306.06,11,-139.35,0,,,31,,,,,,,,41,,,,,,,,33,,,,,,,,88.34,,,,,,,,83.6,,,,,,,,103.37,,,,,,14.60934,2622.08653,105,1439.32312,1446.03,,14.38,,,,4,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0,141,143,128,135.480280,123,131,129,94.326510,, +D,DREGION,,3,"2023/12/14 06:40:00",1,TAS1,0,54.1,0,54.1,0,0,1082.7,1,620.7,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.57,,,,,,5.88334,2246.0694,0,1075.81702,1082.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,3.5,3.5,0,191.351967,231.851852,156.878378,92.877799,57.797317,144.024364,168.022257,92.118601,, +D,DREGION,,3,"2023/12/14 06:40:00",1,VIC1,0,21.06756,0,21.06756,0,0,4620.81,-1,5767.6,11,1135.79,0,,,86,,,,,,,,113.64,,,,,,,,111,,,,,,,,146,,,,,,,,88,,,,,,,,75,,,,,,0,8961.68626,402,4703.30859,4670.35,,51,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.14,0.14,0,0.32352,0.32352,0,0,0,0,3.99,3.99,0,421,407,407,64,273.695364,514.695364,397.695364,448.5271,, +D,DREGION,,3,"2023/12/14 06:45:00",1,NSW1,0,58,0,58,0,0,8440.32,29,7052.65,47.84,-1435.5,0,,,75.16,,,,,,,,117.19,,,,,,,,101.16,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,27.77548,13233.42672,206,8494.44629,8545.59,,100,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0,428,433,678,344.029839,347.388170,379.388170,265.163010,339.514814,, +D,DREGION,,3,"2023/12/14 06:45:00",1,QLD1,0,49.55,0,49.55,0,0,6110.98,4,7134.82,0,1023.84,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,39.69926,11200.40163,50,6094.56885,6134.82,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0,290,408.333333,132,214.996791,200.428440,301.387440,189.428440,127.456464,, +D,DREGION,,3,"2023/12/14 06:45:00",1,SA1,0,47.17344,0,47.17344,0,0,1446.73,1,1301.22,1,-146.51,0,,,41,,,,,,,,41,,,,,,,,33,,,,,,,,102.4,,,,,,,,75.94,,,,,,,,91.64,,,,,,16.8179,2640.6582,105,1439.0625,1448.73,,11,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0,141,143,128,127.851470,123,131,129,106,, +D,DREGION,,3,"2023/12/14 06:45:00",1,TAS1,0,54.1,0,54.1,0,0,1084.83,1,628.1,0,-456.73,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.63,,,,,,3.50593,2269.4833,0,1080.32813,1084.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0,0,0,0,0,0,3.5,3.5,0,191.351967,231.851852,156.878378,100.483751,52.438496,134.009716,152.046315,84.177428,, +D,DREGION,,3,"2023/12/14 06:45:00",1,VIC1,0,45.64098,0,45.64098,0,0,4631.84,-4,5780.1,12,1136.26,0,,,47.8,,,,,,,,89.8,,,,,,,,86.67,,,,,,,,129,,,,,,,,91,,,,,,,,83,,,,,,0,8915.99428,399,4676.29053,4682.93,,68.11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.99,7.99,0,0.3,0.3,0,0.38,0.38,0,0.08,0.08,0,0.71,0.71,0,408,387,384,24,245.887660,486.887660,369.887660,448.25,, +D,DREGION,,3,"2023/12/14 06:50:00",1,NSW1,0,58,0,58,0,0,8476.72,29,7089.84,36.71,-1423.58,0,,,82.56,,,,,,,,105.31,,,,,,,,95.51,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,38.9644,13289.81904,206,8519.2207,8572.56,,100,,,,86,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,428,433,678,427.794233,332.587370,364.587370,276.587370,354.327868,, +D,DREGION,,3,"2023/12/14 06:50:00",1,QLD1,0,49.19438,0,49.19438,0,0,6120.38,1,7204.18,0,1083.8,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,36.63668,11294.72289,50,6110.96631,6147.47,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,290,408.333333,132,214.996791,200.428440,276.428440,189.428440,142.297498,, +D,DREGION,,3,"2023/12/14 06:50:00",1,SA1,0,50.90967,0,50.90967,0,0,1438.19,-2,1297.82,0,-140.37,0,,,38,,,,,,,,38,,,,,,,,31,,,,,,,,95.86,,,,,,,,84.47,,,,,,,,106.82,,,,,,12.75954,2677.51502,105,1429.53125,1439.2,,11,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,122,126,126,69.183420,119,126,126,105,, +D,DREGION,,3,"2023/12/14 06:50:00",1,TAS1,0,54.1,0,54.1,0,0,1071.01,0,639.62,0,-431.39,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.99,,,,,,5.89659,2277.67801,0,1065.11157,1071.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,3.5,3.5,0,191.351967,231.851852,156.878378,98.808896,48.229558,133.117377,154.141084,85.926099,, +D,DREGION,,3,"2023/12/14 06:50:00",1,VIC1,0,49.50717,0,49.50717,0,0,4644.35,-4,5677.12,1,1031.77,0,,,43,,,,,,,,78,,,,,,,,93,,,,,,,,137,,,,,,,,83,,,,,,,,68,,,,,,4.92896,8900.342,379,4695.90527,4678.35,,42.77,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.14,0.14,0,0.15,0.15,0,0.07,0.07,0,0.71,0.71,0,390,378,378,13,372.234280,486.234280,420.234280,449,, +D,DREGION,,3,"2023/12/14 06:55:00",1,NSW1,0,42.65054,0,42.65054,0,0,8415.82,26,7029.75,64,-1450.07,0,,,49,,,,,,,,87,,,,,,,,65,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,0,13344.62828,206,8516.68652,8556.36,,100,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0,428,433,678,353.280385,275,307,249,257.822621,, +D,DREGION,,3,"2023/12/14 06:55:00",1,QLD1,0,34.55,0,34.55,0,0,5898.08,-6,7203.11,0,1305.02,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,0,11341.61194,50,5940.41748,5940.43,,21,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0,290,408.333333,132,200,184.002490,233.893890,173.002490,138,, +D,DREGION,,3,"2023/12/14 06:55:00",1,SA1,0,9.20454,0,9.20454,0,0,1435.54,-4,1295.87,6,-145.67,0,,,38.21,,,,,,,,40,,,,,,,,31,,,,,,,,104.46,,,,,,,,87.68,,,,,,,,118,,,,,,0,2805.48856,105,1446.29956,1442.77,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0,142,144,129,115.350356,123,130,128,100.6693,, +D,DREGION,,3,"2023/12/14 06:55:00",1,TAS1,0,54.08,0,54.08,0,0,1063.64,-1,601.64,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,148.95,,,,,,5.13918,2260.25699,0,1059.50049,1063.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.05,0.05,0,0,0,0,0,0,0,3.5,3.5,0,191.351967,231.851852,171.395688,111.382007,45.628118,124.803561,134.592411,75.5116,, +D,DREGION,,3,"2023/12/14 06:55:00",1,VIC1,0,8.95,0,8.95,0,0,4541.97,-12,5441.95,0,899.99,0,,,76.62,,,,,,,,125.8,,,,,,,,124.38,,,,,,,,129,,,,,,,,81,,,,,,,,58.06,,,,,,-8.35005,8870.70769,390,4600.4209,4569.11,,73.38,,,,32,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.17,0.17,0,0.05,0.05,0,0.27,0.27,0,415.878340,477.228890,479.228890,141.630010,367.701140,603.701140,481.701140,403.621656,, +D,DREGION,,3,"2023/12/14 07:00:00",1,NSW1,0,59.99,0,59.99,0,0,8454.41,16,7272.41,64,-1246,0,,,48,,,,,,,,87,,,,,,,,80.3,,,,,,,,141,,,,,,,,127,,,,,,,,124,,,,,,48.9105,13413.36588,206,8521.96582,8583.7,,115,,,,60,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0,428,433,678,260.747870,346.064630,382.508590,249,432.285395,, +D,DREGION,,3,"2023/12/14 07:00:00",1,QLD1,0,49.08772,0,49.08772,0,0,5976.54,-14,7235.46,0,1258.91,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,24,,,,,,,,189.33,,,,,,,,189,,,,,,38.72833,11324.58835,50,5990.41309,6015.44,,25,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0,290,408.333333,132,212.708911,198.428440,272.428440,187.428440,147.997510,, +D,DREGION,,3,"2023/12/14 07:00:00",1,SA1,0,19.66294,0,19.66294,0,0,1423.06,-6,1249.91,0,-173.16,0,,,34,,,,,,,,40,,,,,,,,33,,,,,,,,110.46,,,,,,,,84.23,,,,,,,,104.21,,,,,,18.82631,2786.31343,105,1413.69922,1425.93,,16.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0,142,144,129,122.390650,124.016280,131.016280,128,105,, +D,DREGION,,3,"2023/12/14 07:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1058.97,-1,596.97,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,149.35,,,,,,-0.52864,2282.60833,0,1060.5033,1058.97,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.14,0.14,0,0,0,0,0,0,0,4.5,4.5,0,191.351967,231.851852,198.312048,127.037441,35.782431,109.586194,107.554113,61.944004,, +D,DREGION,,3,"2023/12/14 07:00:00",1,VIC1,0,19.12,0,19.12,0,0,4641.52,-19,5404.48,10,752.96,0,,,105,,,,,,,,123.72,,,,,,,,105,,,,,,,,126,,,,,,,,86,,,,,,,,73,,,,,,0,8902.63373,379,4683.7373,4675.18,,49,,,,29,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.35198,0.35198,0,0,0,0,3.99,3.99,0,422,470.549040,469.549040,114.156250,363.762193,609.762193,497.762193,416.324922,, +D,DREGION,,3,"2023/12/14 07:05:00",1,NSW1,0,57.9998,0,57.9998,0,0,8485.3,7,7293.09,154,-1346.21,0,,,80.54,,,,,,,,127.69,,,,,,,,85,,,,,,,,190.48,,,,,,,,127,,,,,,,,125,,,,,,50,13515.19198,206,8563.95508,8702.93,,35,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0,429,433,678,449.257408,282.952970,314.952970,239.000550,165.752142,, +D,DREGION,,3,"2023/12/14 07:05:00",1,QLD1,0,48.15731,0,48.15731,0,0,6015.57,-9,7223.09,0,1207.51,0,,,11,,,,,,,,98,,,,,,,,70,,,,,,,,29,,,,,,,,216.33,,,,,,,,206,,,,,,35.7745,11319.15684,50,6032.69189,6050.67,,23,,,,88,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0,290,408.333333,132,152.196803,190.430930,292.430930,179.430930,138,, +D,DREGION,,3,"2023/12/14 07:05:00",1,SA1,0,54.37664,0,54.37664,0,0,1421.22,-8,1262.45,1,-159.77,0,,,78,,,,,,,,65,,,,,,,,61.17,,,,,,,,122,,,,,,,,120,,,,,,,,116,,,,,,9.01038,2795.08429,105,1423.07813,1427.21,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0,140,143,128,111.851470,121,128,126,105.6693,, +D,DREGION,,3,"2023/12/14 07:05:00",1,TAS1,0,55.75639,0,55.75639,0,0,1053.85,-1,794.82,0,-259.03,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,11.69,,,,,,,,84.28,,,,,,,,115.07,,,,,,-1.5354,2278.60849,0,1056.38306,1053.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,8.68639,8.68639,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2.5,2.5,0,155.055671,163.129946,25.570618,50,121.019292,229.307563,277.844537,191.583523,, +D,DREGION,,3,"2023/12/14 07:05:00",1,VIC1,0,53.70345,0,53.70345,0,0,4809.21,-18,5500.3,9,682.09,0,,,70.77,,,,,,,,73.77,,,,,,,,70.77,,,,,,,,151,,,,,,,,90.7,,,,,,,,76.25,,,,,,0,8651.11083,374,4859.4082,4839.08,,83,,,,2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,19.31,19.31,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,3.99,3.99,0,400.084840,383.084840,382.084840,12,185.589577,426.589577,309.589577,388.906250,, +D,DREGION,,3,"2023/12/14 07:10:00",1,NSW1,0,54.95,0,54.95,0,0,8454.32,2,7127.48,120,-1446.84,0,,,53,,,,,,,,91,,,,,,,,70,,,,,,,,150.62,,,,,,,,126,,,,,,,,124,,,,,,48.04181,13464.41495,206,8639.78027,8648.57,,25,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0,428,432,677,448.384735,260.000550,291.000550,233.000550,179.072806,, +D,DREGION,,3,"2023/12/14 07:10:00",1,QLD1,0,18.84,0,18.84,0,0,6048.15,-9,7352.16,3,1301.01,0,,,0,,,,,,,,74.6,,,,,,,,64.6,,,,,,,,21,,,,,,,,183,,,,,,,,177,,,,,,14.13577,11620.54004,50,6092.24072,6091.92,,15,,,,80,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0,268,376,129,185,178.600010,232.000010,157.600010,75,, +D,DREGION,,3,"2023/12/14 07:10:00",1,SA1,0,49.66489,0,49.66489,0,0,1377.32,-11,1292.79,8,-92.53,0,,,56.66,,,,,,,,57.73,,,,,,,,33,,,,,,,,121,,,,,,,,96.57,,,,,,,,118,,,,,,9.62229,2827.19241,105,1383.60071,1390.78,,5,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0,125,128,128,69,121,124,124,97,, +D,DREGION,,3,"2023/12/14 07:10:00",1,TAS1,0,52.9113,0,52.9113,0,0,1076.3,-2,751.83,0,-324.46,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,140.72,,,,,,,,143.58,,,,,,5.31428,2269.93379,0,1072.98132,1076.3,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.5,3.5,0,191.351967,219.569801,74.878378,50,96.583648,196.072269,229.931934,145.455285,, +D,DREGION,,3,"2023/12/14 07:10:00",1,VIC1,0,50.31967,0,50.31967,0,0,4738.88,-22,5448.49,0,709.61,0,,,133.64,,,,,,,,143.64,,,,,,,,118.66,,,,,,,,141,,,,,,,,82,,,,,,,,65.71,,,,,,-10.92631,8641.04707,376,4801.88965,4765.19,,115,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,20.35967,20.35967,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,2,2,0,370,372,374,30,327,563,441,490.3125,, +D,DREGION,,3,"2023/12/14 07:15:00",1,NSW1,0,58,0,58,0,0,8498.53,0,7167.7,115,-1445.83,0,,,92,,,,,,,,130,,,,,,,,119,,,,,,,,194.78,,,,,,,,130.2,,,,,,,,124,,,,,,48.36817,13513.07858,206,8676.67969,8687.66,,35,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0,428,432,678,397.333473,301.408830,332.408830,272.000550,248.326072,, +D,DREGION,,3,"2023/12/14 07:15:00",1,QLD1,0,-20.5,0,-20.5,0,0,6028.7,-9,7304.46,0,1275.75,0,,,0,,,,,,,,42,,,,,,,,28,,,,,,,,26,,,,,,,,215,,,,,,,,199,,,,,,-6.72549,11909.97619,50,6113.0293,6069.27,,13,,,,94,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0,272,380,129,171.996791,101.528460,135.528460,120.528460,78.000005,, +D,DREGION,,3,"2023/12/14 07:15:00",1,SA1,0,52.40557,0,52.40557,0,0,1379.55,-13,1291.27,0,-88.27,0,,,71.86,,,,,,,,85,,,,,,,,37.98,,,,,,,,122,,,,,,,,110,,,,,,,,118,,,,,,13.27113,2812.25861,105,1387.91382,1384.55,,11,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0,142,143,128,110.692565,123,126,124,106.6693,, +D,DREGION,,3,"2023/12/14 07:15:00",1,TAS1,0,55.68923,0,55.68923,0,0,1108.92,-2,802.45,0,-306.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,82.72,,,,,,,,115.22,,,,,,11.54796,2262.55201,0,1099.37354,1108.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,8.61923,8.61923,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,2.5,2.5,0,155.055671,161.569801,16.878378,50,126.959886,237.248739,279.869853,203.455285,, +D,DREGION,,3,"2023/12/14 07:15:00",1,VIC1,0,53.09561,0,53.09561,0,0,4730.76,-22,5445.98,5,710.22,0,,,80.52,,,,,,,,110.52,,,,,,,,100.52,,,,,,,,154,,,,,,,,95,,,,,,,,76.7,,,,,,-10.06046,8550.37691,390,4786.28027,4761.46,,101,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.39,0.39,0,0.42,0.42,0,0.39,0.39,0,1.2,1.2,0,392,379,379,14,346.517130,580.517130,458.517130,498.906250,, +D,DREGION,,3,"2023/12/14 07:20:00",1,NSW1,0,9.37764,0,9.37764,0,0,8106.78,-6,7080.03,154,-1180.75,0,,,58,,,,,,,,98.61,,,,,,,,85,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,0,13612.46914,206,8282.96582,8325.12,,20,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,428,432,678,444.361325,235.000550,266.000550,238.000550,103.019838,, +D,DREGION,,3,"2023/12/14 07:20:00",1,QLD1,0,1,0,1,0,0,6065.37,-5,7328.34,3,1259.97,0,,,28,,,,,,,,56,,,,,,,,25,,,,,,,,21,,,,,,,,192.38,,,,,,,,181,,,,,,-23.25622,11882.40585,50,6126.08252,6107.8,,15,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,272,380,128,179.618960,59,91,78,75,, +D,DREGION,,3,"2023/12/14 07:20:00",1,SA1,0,8.7426,0,8.7426,0,0,1337.32,-15,1280.54,0,-56.78,0,,,45.05,,,,,,,,80,,,,,,,,41.35,,,,,,,,69.81,,,,,,,,33,,,,,,,,65.86,,,,,,0,2807.3237,105,1361.4563,1342.65,,17.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,123,126,126,77,119,121,121,105,, +D,DREGION,,3,"2023/12/14 07:20:00",1,TAS1,0,37.08,0,37.08,0,0,1102.79,-2,640.79,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.52,,,,,,0,2266.99974,0,1104.78711,1102.79,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,3.5,3.5,0,191.351967,225.851852,154.878378,88.016606,60.450333,141.149653,168.045726,72.286053,, +D,DREGION,,3,"2023/12/14 07:20:00",1,VIC1,0,8.95,0,8.95,0,0,4779.67,-23,5354.89,0,575.21,0,,,112.61,,,,,,,,132.61,,,,,,,,132.61,,,,,,,,135,,,,,,,,105,,,,,,,,89,,,,,,0,8590.33855,404,4835.99365,4806.22,,153,,,,45,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,443.432440,464.052470,462.052470,122.052470,326,562,440,410.596279,, +D,DREGION,,3,"2023/12/14 07:25:00",1,NSW1,0,22.57369,0,22.57369,0,0,8160.97,-18,7154.88,154,-1160.08,0,,,57,,,,,,,,96,,,,,,,,85,,,,,,,,141,,,,,,,,122.6,,,,,,,,124,,,,,,49.0209,13751.42705,206,8328.02441,8371.2,,20,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,428,432,678,443.076516,235.000550,266.000550,237.000550,83.007639,, +D,DREGION,,3,"2023/12/14 07:25:00",1,QLD1,0,18.84,0,18.84,0,0,6055.67,0,7230.67,0,1175,0,,,0,,,,,,,,52,,,,,,,,25,,,,,,,,21,,,,,,,,196,,,,,,,,191,,,,,,-7.74915,11779.71991,50,6094.8418,6089.22,,40.38,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,292,415,128,214.996791,65.430930,94.050930,81.050930,78,, +D,DREGION,,3,"2023/12/14 07:25:00",1,SA1,0,18.50274,0,18.50274,0,0,1342.04,-17,1324.45,0,-17.59,0,,,59.61,,,,,,,,85.98,,,,,,,,34.42,,,,,,,,70.87,,,,,,,,35,,,,,,,,57.75,,,,,,19.52434,2815.45131,105,1344.75854,1346.72,,31,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,142,143,128,126.851470,123,126,124,106.6693,, +D,DREGION,,3,"2023/12/14 07:25:00",1,TAS1,0,54.1,0,54.1,0,0,1092.77,-2,630.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,143.49,,,,,,-2.26338,2243.50541,0,1097.03223,1092.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0,191.351967,225.851852,154.614938,87.736560,56.659708,145.946361,179.143724,98.350161,, +D,DREGION,,3,"2023/12/14 07:25:00",1,VIC1,0,19.14,0,19.14,0,0,4840.85,-19,5435.71,9,585.86,0,,,127.83,,,,,,,,132.83,,,,,,,,137.83,,,,,,,,111,,,,,,,,89,,,,,,,,63,,,,,,8.2061,8675.09202,421,4876.53955,4876.57,,114,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,389,390,393,56.0565,308,548,431,495.3125,, +D,DREGION,,3,"2023/12/14 07:30:00",1,NSW1,0,54.95,0,54.95,0,0,8197.17,-18,7255.15,160,-1102.02,0,,,52,,,,,,,,91,,,,,,,,70,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,49.34727,13874.71774,211,8353.89746,8406.07,,32,,,,45.51,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,428,432,678,397.119812,233.000550,264.000550,235.000550,212.638060,, +D,DREGION,,3,"2023/12/14 07:30:00",1,QLD1,0,46.50207,0,46.50207,0,0,6072.9,-4,7176.73,0,1103.83,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,21,,,,,,,,166,,,,,,,,166,,,,,,-10.36234,11571.17906,50,6109.0083,6101.92,,21,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,257,360,93,154.996791,168.430930,210.430930,164.430930,123,, +D,DREGION,,3,"2023/12/14 07:30:00",1,SA1,0,9.07237,0,9.07237,0,0,1333.94,-18,1323.48,5,-15.46,0,,,75.17,,,,,,,,57.66,,,,,,,,33,,,,,,,,79.31,,,,,,,,44.8,,,,,,,,53.26,,,,,,22.04084,2823.91333,105,1334.32971,1343.64,,3.38,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,142,143,128,131.692565,123,125,123,100.997890,, +D,DREGION,,3,"2023/12/14 07:30:00",1,TAS1,0,54.1,0,54.1,0,0,1093.01,-3,631.01,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.54,,,,,,-5.81563,2221.32044,0,1101.82422,1093.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0,191.351967,225.851852,147.090238,80.211860,65.470176,158.443956,201.953547,109.642899,, +D,DREGION,,3,"2023/12/14 07:30:00",1,VIC1,0,9.38454,0,9.38454,0,0,4821.57,-15,5412.69,6,585.12,0,,,110.79,,,,,,,,120.79,,,,,,,,107.99,,,,,,,,97,,,,,,,,89,,,,,,,,86,,,,,,11.59629,8776.67391,410,4861.68408,4854.42,,149,,,,50.49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,438,477.506350,475.506350,123.3125,276,512,390,399.312498,, +D,DREGION,,3,"2023/12/14 07:35:00",1,NSW1,0,54.95,0,54.95,0,0,8166.67,-9,7327.75,163,-1001.92,0,,,87.01,,,,,,,,160,,,,,,,,107,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,21.10221,13879.2854,211,8356.75684,8389.31,,43.38,,,,65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0,428,432,678,387.967643,231.620550,262.620550,223.620550,132.476239,, +D,DREGION,,3,"2023/12/14 07:35:00",1,QLD1,0,45.16736,0,45.16736,0,0,5930.76,-6,7163.22,0,1232.45,0,,,28,,,,,,,,66,,,,,,,,55,,,,,,,,21,,,,,,,,180,,,,,,,,180,,,,,,7.38082,10910.97641,50,5962.16309,5968.73,,11,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0,281,399,113,154.996794,157.430930,249.430930,144.430930,126,, +D,DREGION,,3,"2023/12/14 07:35:00",1,SA1,0,8.83323,0,8.83323,0,0,1331.01,-18,1271.64,0,-59.37,0,,,90,,,,,,,,47,,,,,,,,78,,,,,,,,66.05,,,,,,,,57.09,,,,,,,,81.3,,,,,,23.66196,2507.002,105,1330.05115,1334.48,,16,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0,123,125,125,77,114,116,116,105,, +D,DREGION,,3,"2023/12/14 07:35:00",1,TAS1,0,54.08,0,54.08,0,0,1086.32,-3,624.32,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,138.79,,,,,,-8.44965,2231.71573,0,1097.7677,1086.32,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.85,0.85,0,1.75,1.75,0,0,0,0,4.54033,4.54033,0,187.826087,210.037037,119.475410,62.475410,70.418549,116.167609,136.697619,64,, +D,DREGION,,3,"2023/12/14 07:35:00",1,VIC1,0,8.95,0,8.95,0,0,4865.28,-15,5277.13,0,411.86,0,,,41,,,,,,,,90.43,,,,,,,,41.79,,,,,,,,139,,,,,,,,86,,,,,,,,78,,,,,,9.29737,8701.79563,415,4896.84619,4885.22,,135,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5,5,0,0.85,0.85,0,4.77,4.77,0,0.45,0.45,0,3.71,3.71,0,427,575.312660,540,113.3125,117,361,249,325.312493,, +D,DREGION,,3,"2023/12/14 07:40:00",1,NSW1,0,62.75,0,62.75,0,0,8277.13,-8,7434.62,158,-1000.5,0,,,57,,,,,,,,118.6,,,,,,,,85,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,26.19048,13879.26316,211,8458.4248,8488.61,,25,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0,428,433,678,369.472554,303.487740,334.487740,237.000550,217.796067,, +D,DREGION,,3,"2023/12/14 07:40:00",1,QLD1,0,52.06759,0,52.06759,0,0,6035.63,-6,7223.02,0,1187.39,0,,,20,,,,,,,,74,,,,,,,,45,,,,,,,,21,,,,,,,,176,,,,,,,,176,,,,,,3.30924,10901.04979,50,6068.08301,6069.67,,23,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0,277,395,113,162.996782,165.430930,257.430930,144.430930,138,, +D,DREGION,,3,"2023/12/14 07:40:00",1,SA1,0,8.97594,0,8.97594,0,0,1295.36,-18,1226.39,8,-76.98,0,,,99.42,,,,,,,,75,,,,,,,,83.83,,,,,,,,76.03,,,,,,,,65.21,,,,,,,,113.81,,,,,,9.96814,2487.04102,105,1306.96521,1305.24,,5.38,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0,125,127,127,73.194350,120,122,122,97,, +D,DREGION,,3,"2023/12/14 07:40:00",1,TAS1,0,54.1,0,54.1,0,0,1080.59,-3,618.59,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.4,,,,,,-15.20696,2244.50044,0,1098.79834,1080.59,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,3.5,3.5,0,190.326087,220.037037,153.744681,89.761804,56.764258,114.002307,142.660126,71.941035,, +D,DREGION,,3,"2023/12/14 07:40:00",1,VIC1,0,9,0,9,0,0,4775.35,-19,5235.95,2,458.6,0,,,66.72,,,,,,,,96.72,,,,,,,,66.72,,,,,,,,148,,,,,,,,100,,,,,,,,63,,,,,,0,8709.08173,413,4813.68213,4794.47,,152,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.7,3.7,0,401,619.8015,541,111.156250,219,425.3970,351,397.311490,, +D,DREGION,,3,"2023/12/14 07:45:00",1,NSW1,0,62.75,0,62.75,0,0,8265.91,-6,7481.12,154,-938.8,0,,,77,,,,,,,,140.01,,,,,,,,85,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,30.95238,13897.48001,206,8444.31738,8479.53,,35,,,,83,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,428,433,685,405.622943,345.000550,381.950140,257.000550,215.465103,, +D,DREGION,,3,"2023/12/14 07:45:00",1,QLD1,0,51.67632,0,51.67632,0,0,5994.18,-3,7244.21,0,1250.03,0,,,0,,,,,,,,48,,,,,,,,25,,,,,,,,19,,,,,,,,178,,,,,,,,178,,,,,,10.66928,10877.45843,50,6022.15527,6032.62,,31.38,,,,76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,279,397,111,162.996786,145.430930,237.430930,144.430930,138,, +D,DREGION,,3,"2023/12/14 07:45:00",1,SA1,0,-35.95,0,-35.95,0,0,1286,-18,1174.5,6,-117.5,0,,,97.08,,,,,,,,70,,,,,,,,79.35,,,,,,,,121,,,,,,,,77.78,,,,,,,,118,,,,,,-1.78739,2522.94468,105,1311.21008,1294.7,,31,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,125,128,128,67,120,122,122,99,, +D,DREGION,,3,"2023/12/14 07:45:00",1,TAS1,0,54.08,0,54.08,0,0,1070.17,-3,608.17,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,99.34,,,,,,,,153,,,,,,,,143.61,,,,,,-19.58331,2246.75938,0,1092.74878,1070.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,4.56049,4.56049,0,190.326087,220.037037,112.088941,50,58.788177,132.434736,162.8155,72.000001,, +D,DREGION,,3,"2023/12/14 07:45:00",1,VIC1,0,-35.67741,0,-35.67741,0,0,4741.36,-20,5134.88,7,386.51,0,,,70.85,,,,,,,,107.85,,,,,,,,90.85,,,,,,,,104.51,,,,,,,,82,,,,,,,,53.17,,,,,,-11.77703,8751.84901,368,4795.07861,4765.85,,108,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.99,3.99,0,402,640,542,118.3125,153,262.586090,252.586090,307.3125,, +D,DREGION,,3,"2023/12/14 07:50:00",1,NSW1,0,60.61376,0,60.61376,0,0,8250.44,-9,7444.9,149,-954.53,0,,,70.48,,,,,,,,156.84,,,,,,,,58,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,35.71429,13626.88245,206,8432.2168,8460.94,,55,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0,428,433,685,401.351103,330.000550,427.913910,312.000550,186.407282,, +D,DREGION,,3,"2023/12/14 07:50:00",1,QLD1,0,49.55,0,49.55,0,0,5956.71,-4,7220.52,0,1263.8,0,,,9,,,,,,,,74,,,,,,,,55,,,,,,,,19,,,,,,,,191,,,,,,,,185,,,,,,6.30246,10804.52652,50,5994.09277,5996.31,,23,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0,286,410,126,183.479135,175.430930,267.430930,154.430930,138,, +D,DREGION,,3,"2023/12/14 07:50:00",1,SA1,0,9.06452,0,9.06452,0,0,1272.65,-16,1143.21,5,-134.44,0,,,83,,,,,,,,47,,,,,,,,77,,,,,,,,119,,,,,,,,77.94,,,,,,,,116,,,,,,0,2482.73409,105,1294.42554,1280.76,,16,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0,123,126,126,66,113,116,116,100,, +D,DREGION,,3,"2023/12/14 07:50:00",1,TAS1,0,54.1,0,54.1,0,0,1064.77,-3,602.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.54,,,,,,-21.57872,2240.38339,0,1089.34802,1064.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,7.23,7.23,0,0.39,0.39,0,1,1,0,0,0,0,4.5,4.5,0,190.326087,220.037037,153.744681,89.168752,54.540283,130.900840,158.066788,96.999249,, +D,DREGION,,3,"2023/12/14 07:50:00",1,VIC1,0,8.95,0,8.95,0,0,4791.2,-17,5203.86,3,409.66,0,,,82,,,,,,,,87,,,,,,,,89.38,,,,,,,,115.59,,,,,,,,81,,,,,,,,60.41,,,,,,0,8799.69474,338,4824.74365,4812.48,,111.38,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,3.38,3.38,0,0.39,0.39,0,1,1,0,0.45,0.45,0,3.98,3.98,0,424.766160,675.149240,577.149240,155.584512,260,391,382,398.769583,, +D,DREGION,,3,"2023/12/14 07:55:00",1,NSW1,0,58,0,58,0,0,8193.81,-10,7501.42,149,-841.39,0,,,62,,,,,,,,94.84,,,,,,,,80,,,,,,,,142,,,,,,,,126,,,,,,,,124,,,,,,40.47619,13681.04063,206,8364.66211,8391.83,,45,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0,428,433,685,407.244240,340.000550,451.000550,322.000550,209.706233,, +D,DREGION,,3,"2023/12/14 07:55:00",1,QLD1,0,48.65862,0,48.65862,0,0,5923.49,-6,7063.65,0,1140.15,0,,,2,,,,,,,,67,,,,,,,,55,,,,,,,,19,,,,,,,,191,,,,,,,,185,,,,,,-2.01202,10721.7441,295,5968.65088,5955.4,,23,,,,78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0,286,410,126,214.996791,175.430930,267.430930,154.430930,86.000002,, +D,DREGION,,3,"2023/12/14 07:55:00",1,SA1,0,9.01801,0,9.01801,0,0,1250.89,-15,1130.76,3,-123.13,0,,,85.76,,,,,,,,71,,,,,,,,32.63,,,,,,,,83.55,,,,,,,,67.63,,,,,,,,115.11,,,,,,-9.75414,2430.4076,105,1286.46729,1256.93,,11,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0,125,128,128,66.889720,120,123,123,102,, +D,DREGION,,3,"2023/12/14 07:55:00",1,TAS1,0,54.08,0,54.08,0,0,1061.51,-3,599.51,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.52,,,,,,-22.91378,2279.17952,0,1087.42566,1061.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.45,0.45,0,0,0,0,4.5,4.5,0,190.326087,220.037037,153.744681,101.7750,48.099294,115.857923,143.651438,90.204929,, +D,DREGION,,3,"2023/12/14 07:55:00",1,VIC1,0,8.95,0,8.95,0,0,4795.15,-16,5194.64,11,388.49,0,,,93,,,,,,,,130,,,,,,,,113,,,,,,,,142,,,,,,,,82,,,,,,,,52,,,,,,-22.20146,8821.93495,361,4850.55029,4824.3,,126.38,,,,3,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,3.98,3.98,0,433.542933,689.3144,591.3144,169.122772,287.62,413.62,399.62,430.307121,, +D,DREGION,,3,"2023/12/14 08:00:00",1,NSW1,0,99.61,0,99.61,0,0,8236.37,-11,7711.06,149,-674.31,0,,,90.65,,,,,,,,181.66,,,,,,,,100.15,,,,,,,,141,,,,,,,,125,,,,,,,,124,,,,,,45.2381,13746.00609,207,8369.09375,8416.43,,40,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0,428,432,684,322.178057,302.263090,413.263090,282.1389,182.114649,, +D,DREGION,,3,"2023/12/14 08:00:00",1,QLD1,0,86,0,86,0,0,6005.01,-7,7202.92,245,952.92,0,,,0,,,,,,,,56.1,,,,,,,,46.1,,,,,,,,19,,,,,,,,186.15,,,,,,,,186.31,,,,,,0,10676.69022,295,6040.57373,6270.92,,25,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0,287.306893,405.148833,126,147.947364,179.528450,271.528450,178.528450,152.997510,, +D,DREGION,,3,"2023/12/14 08:00:00",1,SA1,0,0.02036,0,0.02036,0,0,1260.98,-13,1115.51,0,-145.47,0,,,108,,,,,,,,68,,,,,,,,92,,,,,,,,87.76,,,,,,,,75.72,,,,,,,,116.28,,,,,,0,2435.58009,105,1280.6825,1264.3,,48.38,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0,125,128,128,62.723460,111.62,119.2992,119.930222,105,, +D,DREGION,,3,"2023/12/14 08:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1046.78,-4,584.78,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.29,,,,,,-24.24884,2276.40722,0,1075.03198,1046.78,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.5,0.5,0,1,1,0,0,0,0,4.5,4.5,0,190.326087,220.037037,153.744681,101.7750,41.278763,91.195115,102.239863,52.026892,, +D,DREGION,,3,"2023/12/14 08:00:00",1,VIC1,0,0.02,0,0.02,0,0,4767.46,-22,5173.17,3,402.71,0,,,41,,,,,,,,53,,,,,,,,41,,,,,,,,142,,,,,,,,82,,,,,,,,52,,,,,,0,8776.98091,344,4814.78027,4789.02,,92,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.5,0.5,0,1,1,0,0.41,0.41,0,3.99,3.99,0,440,699,601,162.156250,198,333.997380,330,347.013127,, +D,DREGION,,3,"2023/12/14 08:05:00",1,NSW1,0,58,0,58,0,0,8205.34,-9,7638.25,96,-663.09,0,,,87,,,,,,,,126,,,,,,,,105,,,,,,,,141,,,,,,,,126,,,,,,,,124,,,,,,50,13899.93341,154,8324.24707,8336.91,,31,,,,59,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0,428,433,684,410.236646,255.000550,366.000550,198.839630,156.561224,, +D,DREGION,,3,"2023/12/14 08:05:00",1,QLD1,0,49.55,0,49.55,0,0,5973.1,-8,7242.82,246,1023.72,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,16,,,,,,,,191.24,,,,,,,,186,,,,,,-16.88503,10308.87199,295,6270.19531,6242.82,,21,,,,81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0,287,410.244444,123,214.996791,170.430930,274.430930,179.430930,136.710108,, +D,DREGION,,3,"2023/12/14 08:05:00",1,SA1,0,9.0183,0,9.0183,0,0,1259.43,-12,1124.72,2,-136.71,0,,,63.2,,,,,,,,73.17,,,,,,,,30,,,,,,,,95.21,,,,,,,,78.94,,,,,,,,116,,,,,,6.79145,2527.47082,105,1271.69348,1266.25,,11,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0,123,126,126,63,118,137.357420,137.357420,103,, +D,DREGION,,3,"2023/12/14 08:05:00",1,TAS1,0,37.1,0,37.1,0,0,1057.52,-4,595.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,147,,,,,,,,143.27,,,,,,-15.02626,2271.8438,0,1076.54602,1057.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0,190.326087,220.037037,153.744681,101.406424,50.980627,119.368594,147.260453,91.783195,, +D,DREGION,,3,"2023/12/14 08:05:00",1,VIC1,0,8.95,0,8.95,0,0,4779.22,-21,5102.81,0,323.59,0,,,94.35,,,,,,,,93.35,,,,,,,,92.62,,,,,,,,143,,,,,,,,83,,,,,,,,56.91,,,,,,-20.88427,8643.68032,413,4844.30859,4800.62,,142.38,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.38,3.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.2,1.2,0,437.474731,695.525208,589.090760,172.274141,309.353936,437.353936,423.353936,441.467167,, +D,DREGION,,3,"2023/12/14 08:10:00",1,NSW1,0,66.19627,0,66.19627,0,0,8205.02,-17,7630.06,75,-649.96,0,,,101,,,,,,,,140,,,,,,,,99,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,50,13895.25513,158,8275.39648,8325.92,,21,,,,63,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0,428,434,679,380.392558,269,380,211,183.440031,, +D,DREGION,,3,"2023/12/14 08:10:00",1,QLD1,0,55.74998,0,55.74998,0,0,5988.25,-5,7363.71,247,1128.46,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,61,,,,,,,,235,,,,,,,,229,,,,,,-27.64973,10643.89565,370,6287.68799,6265.09,,23,,,,71.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0,330,450.199990,170,207.156211,222.430930,314.430930,201.430930,208,, +D,DREGION,,3,"2023/12/14 08:10:00",1,SA1,0,5.2631,0,5.2631,0,0,1241.34,-13,1131.29,1,-111.05,0,,,35,,,,,,,,35,,,,,,,,32,,,,,,,,86.45,,,,,,,,35,,,,,,,,67.99,,,,,,13.10625,2473.66865,105,1246.9043,1245.79,,5.82,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0,125,128,128,78,120,143,143,104,, +D,DREGION,,3,"2023/12/14 08:10:00",1,TAS1,0,37.08,0,37.08,0,0,1061.89,-3,599.89,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,140,,,,,,,,142.99,,,,,,-10.6432,2294.10679,0,1075.5293,1061.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.5,3.5,0,190.326087,220.037037,153.744681,101.7750,43.897317,109.870679,129.137273,82.768433,, +D,DREGION,,3,"2023/12/14 08:10:00",1,VIC1,0,5.24979,0,5.24979,0,0,4788.71,-22,4990.64,9,192.93,0,,,59.87,,,,,,,,73.4,,,,,,,,45.99,,,,,,,,97,,,,,,,,79.98,,,,,,,,53,,,,,,0,8600.89023,415,4830.35938,4816.91,,155.56,,,,23.84,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,1.2,1.2,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.7,3.7,0,449.494934,710,602,203.156250,248,374,360,423.339168,, +D,DREGION,,3,"2023/12/14 08:15:00",1,NSW1,0,58,0,58,0,0,8086.88,-20,7425.11,65,-726.78,0,,,101,,,,,,,,120,,,,,,,,96.1,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,50,13814.86234,147,8208.00781,8209.06,,29,,,,55,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0,388,394,629,414.292951,269,380,211,167.322373,, +D,DREGION,,3,"2023/12/14 08:15:00",1,QLD1,0,1,0,1,0,0,5926.61,-8,7400.09,247,1226.48,0,,,45,,,,,,,,135,,,,,,,,115,,,,,,,,37,,,,,,,,216.46,,,,,,,,216.5,,,,,,-25.7719,10877.10205,370,6252.09375,6210.66,,13,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0,307.496548,409.462218,170,246.996791,237.428440,341.428440,226.428440,148.000002,, +D,DREGION,,3,"2023/12/14 08:15:00",1,SA1,0,9.06928,0,9.06928,0,0,1215.15,-14,1107.45,6,-113.7,0,,,35,,,,,,,,35,,,,,,,,31,,,,,,,,112.24,,,,,,,,38.39,,,,,,,,82.05,,,,,,19.15032,2349.18319,105,1216.93005,1223.68,,9,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0,125,128,128,75.755030,120,123,123,99,, +D,DREGION,,3,"2023/12/14 08:15:00",1,TAS1,0,36.57593,0,36.57593,0,0,1050.04,-3,588.04,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.3,,,,,,-8.88762,2296.16195,0,1061.92834,1050.04,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.03,0.03,0,0.3,0.3,0,0,0,0,4.5,4.5,0,190.326087,226.037037,170.665901,111.616934,39.101859,103.460281,114.435845,75.308003,, +D,DREGION,,3,"2023/12/14 08:15:00",1,VIC1,0,9,0,9,0,0,4775.09,-21,4965.16,0,190.07,0,,,57.6,,,,,,,,66.21,,,,,,,,35,,,,,,,,97,,,,,,,,84,,,,,,,,53,,,,,,-31.80533,8568.64785,410,4862.59033,4792.41,,154.38,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.3,0.3,0,0.3,0.3,0,1.2,1.2,0,440.666667,697,589,141.416256,253,402.134220,365,469.499998,, +D,DREGION,,3,"2023/12/14 08:20:00",1,NSW1,0,88.88,0,88.88,0,0,8160.23,-17,7513.52,79,-725.71,0,,,100,,,,,,,,125.37,,,,,,,,98,,,,,,,,142,,,,,,,,127,,,,,,,,124,,,,,,44.29195,13805.22532,148,8270.00684,8299.53,,21,,,,54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0,388,394,629,339.221808,268,379,210,230.275152,, +D,DREGION,,3,"2023/12/14 08:20:00",1,QLD1,0,1,0,1,0,0,5926.83,-7,7431.9,245,1260.06,0,,,45,,,,,,,,123,,,,,,,,113,,,,,,,,35,,,,,,,,218.98,,,,,,,,219,,,,,,-33.78773,11043.51936,370,6258.854,6211.08,,23.38,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0,310,414.977778,170,232,229,321,208,150.000004,, +D,DREGION,,3,"2023/12/14 08:20:00",1,SA1,0,0.02006,0,0.02006,0,0,1183.31,-17,1051.42,4,-135.89,0,,,31,,,,,,,,31,,,,,,,,29,,,,,,,,70.6,,,,,,,,31,,,,,,,,45.64,,,,,,22.81345,2292.0046,105,1187.07434,1192.78,,6,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0,123,125,125,66,118,119,119,101,, +D,DREGION,,3,"2023/12/14 08:20:00",1,TAS1,0,37.08,0,37.08,0,0,1057.85,-2,595.85,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,137.08,,,,,,,,143.05,,,,,,-5.30032,2292.84986,0,1065.15479,1057.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,3.5,3.5,0,190.326087,226.037037,159.640071,105.203951,41.267440,106.355152,125.009854,80.865738,, +D,DREGION,,3,"2023/12/14 08:20:00",1,VIC1,0,0.02,0,0.02,0,0,4678.87,-23,4870.01,0,191.14,0,,,63.28,,,,,,,,77,,,,,,,,36.36,,,,,,,,106,,,,,,,,69.63,,,,,,,,52,,,,,,-20.71736,8625.97524,415,4739.55957,4701.46,,155,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.76,3.76,0,633,893,785,194,281.893680,371.885780,361.885780,363.075664,, +D,DREGION,,3,"2023/12/14 08:25:00",1,NSW1,0,85.98,0,85.98,0,0,8134.31,-12,7491.02,72,-715.29,0,,,74,,,,,,,,109.84,,,,,,,,87.36,,,,,,,,142,,,,,,,,113,,,,,,,,124,,,,,,45.24329,13836.07103,149,8260.61035,8268.87,,41,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0,388,394,629,377.470181,252,362,194,199.935309,, +D,DREGION,,3,"2023/12/14 08:25:00",1,QLD1,0,0,0,0,0,0,5809.7,-10,7324.74,245,1270.03,0,,,45,,,,,,,,107.3,,,,,,,,96.9,,,,,,,,35,,,,,,,,226,,,,,,,,223,,,,,,-39.86186,10873.79277,370,6152.32031,6095.26,,11.1,,,,78,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0,314,422,170,246.996791,219.3292,313.729210,216.828450,148.099246,, +D,DREGION,,3,"2023/12/14 08:25:00",1,SA1,0,8.97482,0,8.97482,0,0,1178.71,-18,1033.6,1,-146.12,0,,,21,,,,,,,,21,,,,,,,,19,,,,,,,,50.71,,,,,,,,35,,,,,,,,33,,,,,,22.76872,2304.16461,105,1184.73901,1186.18,,16.28,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0,125,129,129,78,113.719240,115.719240,115.719240,104,, +D,DREGION,,3,"2023/12/14 08:25:00",1,TAS1,0,37.08,0,37.08,0,0,1056.84,-2,594.84,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,137.23,,,,,,,,142.64,,,,,,-6.56176,2290.07852,0,1065.40479,1056.84,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.5,3.5,0,190.326087,226.037037,157.880181,104.180342,43.099372,108.804015,127.096959,81.752837,, +D,DREGION,,3,"2023/12/14 08:25:00",1,VIC1,0,8.95,0,8.95,0,0,4653.55,-33,4844.19,3,187.65,0,,,97.01,,,,,,,,115.8,,,,,,,,72.87,,,,,,,,107,,,,,,,,53.41,,,,,,,,42,,,,,,-26.15374,8537.98353,421,4738.08936,4681.24,,137,,,,42,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.38,0.38,0,0.38,0.38,0,0.51,0.51,0,634,894,786,151.459320,275.869630,407,393,469.3563,, +D,DREGION,,3,"2023/12/14 08:30:00",1,NSW1,0,85.98,0,85.98,0,0,8089.41,-9,7448.71,75,-715.7,0,,,101,,,,,,,,139,,,,,,,,111.31,,,,,,,,142,,,,,,,,107.19,,,,,,,,108.87,,,,,,46.19463,13836.68128,152,8195.31543,8225.54,,18,,,,69,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0,428,434,679,446.955284,275,385,217,176.666762,, +D,DREGION,,3,"2023/12/14 08:30:00",1,QLD1,0,1,0,1,0,0,5833.48,-11,7334.42,245,1255.94,0,,,45,,,,,,,,93,,,,,,,,90,,,,,,,,35,,,,,,,,222,,,,,,,,216,,,,,,-44.32862,10946.6748,370,6175.08252,6118.21,,13,,,,70,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0,310,418,170,232,206,277.800020,178,150.000006,, +D,DREGION,,3,"2023/12/14 08:30:00",1,SA1,0,8.83719,0,8.83719,0,0,1173.27,-18,1107.99,0,-65.28,0,,,34,,,,,,,,36.71,,,,,,,,32,,,,,,,,44.59,,,,,,,,35,,,,,,,,32,,,,,,23.29133,2370.23741,105,1176.05725,1176.95,,11,,,,11,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0,125,129,129,77,120,122,122,105,, +D,DREGION,,3,"2023/12/14 08:30:00",1,TAS1,0,37.08,0,37.08,0,0,1053.82,-2,591.82,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,136.64,,,,,,-4.99008,2291.93506,0,1060.81409,1053.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0,190.326087,226.037037,162.755741,107.016127,41.168457,106.222836,122.159683,79.295238,, +D,DREGION,,3,"2023/12/14 08:30:00",1,VIC1,0,8.95,0,8.95,0,0,4674.12,-30,4788.92,4,110.79,0,,,60.12,,,,,,,,87.66,,,,,,,,41.62,,,,,,,,101,,,,,,,,51,,,,,,,,43,,,,,,-20.01743,8522.05902,415,4751.60303,4697.33,,163.38,,,,20,,,,,,,,,,,,,,,,,,,0.1,0.1,0,0.1,0.1,0,0.39,0.39,0,1.2,1.2,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.83,0.83,0,636,896,788,197.8125,273.658487,409.658487,395.658487,455.397899,, +D,DREGION,,3,"2023/12/14 08:35:00",1,NSW1,0,88.89,0,88.89,0,0,8268.29,-11,7571.2,69,-766.1,0,,,68,,,,,,,,106,,,,,,,,79.47,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,40.95745,13936.21009,154,8365.44141,8400.93,,55,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,428,434,679,402.703027,243,354,200.1131,211.837551,, +D,DREGION,,3,"2023/12/14 08:35:00",1,QLD1,0,34.55,0,34.55,0,0,5780.7,-16,7327.95,255,1292.24,0,,,45,,,,,,,,102,,,,,,,,92,,,,,,,,36,,,,,,,,215,,,,,,,,198.43,,,,,,0,10706.3656,370,6078.27881,6077.32,,34,,,,80,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,319,437,155,271.996791,214.430930,308.430930,191.430930,200.509331,, +D,DREGION,,3,"2023/12/14 08:35:00",1,SA1,0,0.01934,0,0.01934,0,0,1154.45,-19,1160.91,0,6.46,0,,,32,,,,,,,,34.39,,,,,,,,30,,,,,,,,43.57,,,,,,,,33,,,,,,,,28,,,,,,23.81394,2417.51062,105,1153.4469,1158.1,,11,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,123,127,127,77,118,120,120,105,, +D,DREGION,,3,"2023/12/14 08:35:00",1,TAS1,0,11.08,0,11.08,0,0,1049.17,-2,587.17,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,136.64,,,,,,,,136.64,,,,,,-4.89964,2300.39958,0,1056.06921,1049.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0,190.326087,226.037037,169.874691,111.156741,40.298346,99.861753,115.482661,75.706824,, +D,DREGION,,3,"2023/12/14 08:35:00",1,VIC1,0,0.02,0,0.02,0,0,4652.22,-30,4709.83,1,56.61,0,,,81.76,,,,,,,,114.9,,,,,,,,73,,,,,,,,100,,,,,,,,52.85,,,,,,,,42,,,,,,0,8452.50189,415,4695.91455,4671.53,,120,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,635,895,787,195.218750,300.901508,420.513668,410.513668,391.385414,, +D,DREGION,,3,"2023/12/14 08:40:00",1,NSW1,0,100,0,100,0,0,8283.23,-12,7640.68,68,-710.55,0,,,73,,,,,,,,112,,,,,,,,85.08,,,,,,,,142,,,,,,,,111.69,,,,,,,,105,,,,,,35.35862,13893.82874,153,8390.7373,8412.96,,48,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,428,434,679,349.829079,332.983880,443.983880,308.116940,316.866549,, +D,DREGION,,3,"2023/12/14 08:40:00",1,QLD1,0,34.55,0,34.55,0,0,5789.54,-18,7318.54,255,1274,0,,,45,,,,,,,,111.2,,,,,,,,101.2,,,,,,,,36,,,,,,,,236,,,,,,,,180.82,,,,,,0,10776.00849,370,6101.0918,6084.67,,24,,,,74,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,334,458,170,271.996791,223.630930,300.622930,210.630930,156.973240,, +D,DREGION,,3,"2023/12/14 08:40:00",1,SA1,0,8.32285,0,8.32285,0,0,1160.33,-19,1162.02,8,-6.32,0,,,21,,,,,,,,21.15,,,,,,,,19,,,,,,,,49.49,,,,,,,,35,,,,,,,,30,,,,,,18.82722,2431.2999,105,1164.09692,1173.18,,20,,,,11,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,125,129,129,85,111,113,113,97,, +D,DREGION,,3,"2023/12/14 08:40:00",1,TAS1,0,11.08,0,11.08,0,0,1027.07,-2,578.82,0,-448.26,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.89,,,,,,,,122.89,,,,,,-8.84715,2299.16653,0,1037.92041,1027.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,3.5,3.5,0,190.326087,226.037037,176.993941,115.297529,39.766411,98.477729,108.894834,72.118259,, +D,DREGION,,3,"2023/12/14 08:40:00",1,VIC1,0,8.65021,0,8.65021,0,0,4689.92,-27,4714.9,7,17.98,0,,,66.75,,,,,,,,111.86,,,,,,,,68,,,,,,,,101,,,,,,,,51,,,,,,,,43,,,,,,0,8413.81662,415,4729.98193,4717.06,,135.01,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,1.5,1.5,0,0.14,0.14,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,637,897,789,188.247375,265,401,387,433.162690,, +D,DREGION,,3,"2023/12/14 08:45:00",1,NSW1,0,88.88,0,88.88,0,0,8288.91,-10,7653.44,68,-703.48,0,,,68,,,,,,,,107,,,,,,,,81.24,,,,,,,,142,,,,,,,,113,,,,,,,,104.22,,,,,,38.60498,13962.5785,157,8348.72363,8411.36,,49.18,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0,428,434,679,410.621341,339.8243,450.8243,297.921440,300.290411,, +D,DREGION,,3,"2023/12/14 08:45:00",1,QLD1,0,34.55,0,34.55,0,0,5795.86,-16,7268.22,256,1216.36,0,,,45,,,,,,,,113.8,,,,,,,,103.8,,,,,,,,36,,,,,,,,218.68,,,,,,,,149,,,,,,-32.88853,10748.72505,370,6135.92725,6087.97,,38,,,,78,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0,310,414.675556,170,251.933169,226.228440,318.228440,205.228440,202,, +D,DREGION,,3,"2023/12/14 08:45:00",1,SA1,0,0.01905,0,0.01905,0,0,1098.62,-20,1196.55,13,84.93,0,,,66.25,,,,,,,,63.37,,,,,,,,19,,,,,,,,55.11,,,,,,,,35,,,,,,,,30,,,,,,12.51346,2409.14138,105,1119.19812,1113.95,,20,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0,125,129,129,90,111,113,113,92,, +D,DREGION,,3,"2023/12/14 08:45:00",1,TAS1,0,10.57593,0,10.57593,0,0,1034.1,-3,585.3,0,-448.8,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.69,,,,,,,,122.69,,,,,,-10.04081,2326.33693,0,1047.13843,1034.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.39,0.39,0,0,0,0,4.5,4.5,0,190.326087,226.037037,197.679701,127.329042,33.796081,84.658994,88.529029,61.691291,, +D,DREGION,,3,"2023/12/14 08:45:00",1,VIC1,0,0.02,0,0.02,0,0,4639.83,-26,4615.17,17,-41.67,0,,,59,,,,,,,,69,,,,,,,,69,,,,,,,,101,,,,,,,,72.66,,,,,,,,43,,,,,,-0.35848,8372.11303,393,4689.63867,4671.29,,85,,,,32,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4.98,4.98,0,0.14,0.14,0,0.39,0.39,0,0.39,0.39,0,3.39719,3.39719,0,634,894,786,196.308227,271,384.032260,374.032260,381.574588,, +D,DREGION,,3,"2023/12/14 08:50:00",1,NSW1,0,88.89,0,88.89,0,0,8237.69,-12,7643.48,75,-669.21,0,,,85,,,,,,,,114,,,,,,,,73,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,41.85135,13967.08865,157,8274.76855,8366.17,,25,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0,428,434,679,446.3504,359,470,309.349670,332.972607,, +D,DREGION,,3,"2023/12/14 08:50:00",1,QLD1,0,49.55,0,49.55,0,0,5776.22,-12,7225.75,250,1199.52,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,36,,,,,,,,220.11,,,,,,,,127.57,,,,,,-35.74303,10715.89669,370,6107.02051,6061.65,,90.38,,,,85,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0,310,416.111111,170,228.663895,212.428440,294.428440,181.428440,205,, +D,DREGION,,3,"2023/12/14 08:50:00",1,SA1,0,0.01885,0,0.01885,0,0,1080.05,-21,1168.97,12,76.92,0,,,31,,,,,,,,31,,,,,,,,28,,,,,,,,62.84,,,,,,,,33,,,,,,,,28,,,,,,14.89502,2411.84593,105,1098.84399,1096.8,,11,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0,123,127,127,66,117,119,119,93,, +D,DREGION,,3,"2023/12/14 08:50:00",1,TAS1,0,10.07187,0,10.07187,0,0,1037.08,-2,575.08,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.60949,2329.99852,0,1047.69409,1037.08,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.03,0.03,0,0.17,0.17,0,0,0,0,4.5,4.5,0,190.326087,226.037037,211.558601,135.401464,31.070129,74.019167,75.218864,54.695422,, +D,DREGION,,3,"2023/12/14 08:50:00",1,VIC1,0,0.02,0,0.02,0,0,4679.75,-27,4649.6,1,-31.15,0,,,76.68,,,,,,,,97.19,,,,,,,,71.46,,,,,,,,110,,,,,,,,72.87,,,,,,,,42,,,,,,13.39509,8431.69309,396,4719.41406,4701.17,,79,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,4,4,0,0.03,0.03,0,0.17,0.17,0,0.08,0.08,0,6,6,0,631,891,783,189.387268,311.163717,418.877737,408.877737,397.710481,, +D,DREGION,,3,"2023/12/14 08:55:00",1,NSW1,0,88.88,0,88.88,0,0,8120.51,-17,7613.29,20,-527.22,0,,,99,,,,,,,,134.78,,,,,,,,97,,,,,,,,142,,,,,,,,113,,,,,,,,105,,,,,,0,13979.99868,158,8217.0293,8190.61,,33.98,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0,428,434,679,353.904899,372.017290,483.017290,314.017290,379.291495,, +D,DREGION,,3,"2023/12/14 08:55:00",1,QLD1,0,-2.02,0,-2.02,0,0,5717.68,-14,7112.87,250,1145.18,0,,,45,,,,,,,,110,,,,,,,,100,,,,,,,,32,,,,,,,,220.11,,,,,,,,124.16,,,,,,-38.59752,10812.80155,370,6061.00391,6000.66,,54.4,,,,75,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0,310,416.111111,170,245.519886,220.428440,264.728460,199.428440,145.000005,, +D,DREGION,,3,"2023/12/14 08:55:00",1,SA1,0,-38.13542,0,-38.13542,0,0,1021.55,-22,1156.88,7,128.33,0,,,18,,,,,,,,18,,,,,,,,17,,,,,,,,68.55,,,,,,,,35,,,,,,,,30,,,,,,0,2380.19199,105,1075.30261,1033.62,,9,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0,125,129,129,66,113,114,114,98,, +D,DREGION,,3,"2023/12/14 08:55:00",1,TAS1,0,10.07187,0,10.07187,0,0,1030.67,-3,568.67,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,139.38,,,,,,,,139.38,,,,,,-10.37764,2347.35771,0,1044.04272,1030.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.05,0.05,0,0.38,0.38,0,0,0,0,4.5,4.5,0,186.326087,222.037037,207.744681,140.538275,27.579161,67.248615,66.749064,50.243666,, +D,DREGION,,3,"2023/12/14 08:55:00",1,VIC1,0,-41.11,0,-41.11,0,0,4618.35,-22,4449.39,5,-173.96,0,,,73.93,,,,,,,,88.03,,,,,,,,58.98,,,,,,,,111,,,,,,,,73.94,,,,,,,,47,,,,,,0,8463.9788,404,4671.10254,4645.54,,108,,,,35,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.26,0.26,0,0.39,0.39,0,3.38,3.38,0,0.05,0.05,0,0.38,0.38,0,0.3,0.3,0,3.99,3.99,0,637,893,785,188.112488,266,304,294,338.592316,, +D,DREGION,,3,"2023/12/14 09:00:00",1,NSW1,0,88.88,0,88.88,0,0,8112.3,-26,7681.44,16,-446.85,0,,,94,,,,,,,,137.47,,,,,,,,119.24,,,,,,,,144,,,,,,,,107.03,,,,,,,,105,,,,,,46.44138,14018.92655,157,8154.41016,8179.7,,38.55,,,,60,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0,430,436,681,393.535207,370.454920,481.454920,312.454920,329.471331,, +D,DREGION,,3,"2023/12/14 09:00:00",1,QLD1,0,1,0,1,0,0,5698.84,-17,7084.46,245,1140.63,0,,,45,,,,,,,,54,,,,,,,,50,,,,,,,,31,,,,,,,,236,,,,,,,,96.58,,,,,,-41.452,10715.00866,370,6033.80811,5976.94,,32.37,,,,75,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0,334,458,170,261.996791,150.230950,172.230950,159.130940,150.000005,, +D,DREGION,,3,"2023/12/14 09:00:00",1,SA1,0,-35.15447,0,-35.15447,0,0,1033.25,-22,1121.55,0,88.3,0,,,19,,,,,,,,59,,,,,,,,17,,,,,,,,44.18,,,,,,,,35,,,,,,,,30,,,,,,16.97727,2342.04143,105,1050.80078,1036.86,,16,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0,125,129,129,77,113,115,115,105,, +D,DREGION,,3,"2023/12/14 09:00:00",1,TAS1,0,-11.84668,0,-11.84668,0,0,1026.03,-3,565.5,0,-460.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,135.62,,,,,,,,135.62,,,,,,-10.07745,2344.66545,0,1039.11157,1026.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.34,0.34,0,0.95,0.95,0,0,0,0,47.98357,47.98357,0,186.326087,222.037037,207.744681,140.819436,27.240548,66.878029,66.285473,50.000001,, +D,DREGION,,3,"2023/12/14 09:00:00",1,VIC1,0,-37.3,0,-37.3,0,0,4626.46,-22,4418.41,5,-213.05,0,,,79.16,,,,,,,,101.17,,,,,,,,86.17,,,,,,,,122,,,,,,,,55,,,,,,,,65,,,,,,7.82815,8356.77355,413,4658.9668,4651.81,,117,,,,35,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.1,0.1,0,0.39,0.39,0,3.38,3.38,0,0.34,0.34,0,0.95,0.95,0,0.38,0.38,0,3.76,3.76,0,654,895,784,193.917481,266,304,294,354.1250,, +D,DREGION,,3,"2023/12/14 09:05:00",1,NSW1,0,85.98,0,85.98,0,0,7965.16,-30,7660.64,14,-318.52,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,144,,,,,,,,129,,,,,,,,126,,,,,,0,14028.03351,157,8065.30029,8032.64,,40,,,,55,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0,430,436,681,352.358422,380,491,322,307.355214,, +D,DREGION,,3,"2023/12/14 09:05:00",1,QLD1,0,0,0,0,0,0,5701.61,-16,7079.25,245,1132.64,0,,,45,,,,,,,,58.5,,,,,,,,45,,,,,,,,25,,,,,,,,129,,,,,,,,82,,,,,,-15.73506,10774.2798,370,6010.97168,5979.04,,34.6,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0,331,455,168,261.996791,127.430930,156.832150,134.430930,150,, +D,DREGION,,3,"2023/12/14 09:05:00",1,SA1,0,-40.59485,0,-40.59485,0,0,987.17,-22,1063.31,0,76.14,0,,,17,,,,,,,,57,,,,,,,,15,,,,,,,,60.72,,,,,,,,77.08,,,,,,,,39.03,,,,,,0,2308.77328,105,1023.88269,992.26,,16,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0,123,127,127,77,111,113,113,105,, +D,DREGION,,3,"2023/12/14 09:05:00",1,TAS1,0,10.07187,0,10.07187,0,0,1032.52,-2,570.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,143.44,,,,,,-8.71989,2354.98793,0,1043.23877,1032.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.5,4.5,0,187.108696,223.814815,213.744681,140.398345,28.474955,68.718763,66.979785,50.364934,, +D,DREGION,,3,"2023/12/14 09:05:00",1,VIC1,0,-43.07,0,-43.07,0,0,4598.34,-17,4306.92,19.22,-310.64,0,,,74.72,,,,,,,,96.58,,,,,,,,89.1,,,,,,,,130,,,,,,,,99,,,,,,,,60,,,,,,0,8399.5378,415,4644.32813,4644.16,,114.78,,,,61,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.3,0.3,0,6,6,0,623,883,775,145.8320,282.583633,320.583633,310.583633,352,, +D,DREGION,,3,"2023/12/14 09:10:00",1,NSW1,0,88.88,0,88.88,0,0,8064.44,-33,7668.3,0,-396.14,0,,,99,,,,,,,,138,,,,,,,,121.15,,,,,,,,145,,,,,,,,130,,,,,,,,120.24,,,,,,46.50039,14048.13469,147,8101.1001,8114.63,,46,,,,60,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0,430,437,682,370.067932,368,480,311,326.310014,, +D,DREGION,,3,"2023/12/14 09:10:00",1,QLD1,0,34.55,0,34.55,0,0,5735.81,-11,7095.23,245,1114.42,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,157,,,,,,,,126,,,,,,0,10689.4382,370,6011.85547,6013.04,,32.22,,,,36,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0,331,455,168,225.286489,168.941250,200.941250,165.941250,187.510320,, +D,DREGION,,3,"2023/12/14 09:10:00",1,SA1,0,-38.28935,0,-38.28935,0,0,982.46,-21,1104.29,0,121.83,0,,,19,,,,,,,,59,,,,,,,,17,,,,,,,,81.1,,,,,,,,74.84,,,,,,,,32,,,,,,14.0345,2325.75555,105,994.36755,985.19,,17.51,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0,125,129,129,77,111.492360,113.492360,113.492360,105,, +D,DREGION,,3,"2023/12/14 09:10:00",1,TAS1,0,10.57593,0,10.57593,0,0,1040.87,-2,578.87,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,153,,,,,,,,137.08,,,,,,-7.64264,2348.85639,0,1050.51501,1040.87,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,207.732691,103.750424,32.941667,79.771135,80.806038,57.632060,, +D,DREGION,,3,"2023/12/14 09:10:00",1,VIC1,0,-40.83,0,-40.83,0,0,4472.08,-17,4215.8,18.35,-274.63,0,,,69.15,,,,,,,,103.88,,,,,,,,86.66,,,,,,,,112,,,,,,,,75,,,,,,,,37,,,,,,0,8439.17019,418,4526.55908,4508.76,,109.65,,,,74,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,4.98,4.98,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.76,3.76,0,656,896,784,214.768481,283.663784,351.663784,341.663784,377.8750,, +D,DREGION,,3,"2023/12/14 09:15:00",1,NSW1,0,88.88,0,88.88,0,0,7886.83,-35,7614.81,0,-272.01,0,,,121,,,,,,,,160,,,,,,,,139,,,,,,,,144,,,,,,,,129,,,,,,,,69,,,,,,0,14036.28448,147,7979.62354,7940.07,,29,,,,65,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0,430,436,681,353.298955,370,481,312,324.020847,, +D,DREGION,,3,"2023/12/14 09:15:00",1,QLD1,0,1,0,1,0,0,5771.92,-9,7128.56,245,1111.64,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,22,,,,,,,,146.54,,,,,,,,126,,,,,,-2.38095,10779.40616,370,6059.26318,6049.15,,68,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0,331,455,168,229.460410,129.002490,154.002490,128.002490,150,, +D,DREGION,,3,"2023/12/14 09:15:00",1,SA1,0,-42.4336,0,-42.4336,0,0,948.43,-20,1207.53,44,215.1,0,,,32,,,,,,,,86.14,,,,,,,,30,,,,,,,,104.71,,,,,,,,40,,,,,,,,30,,,,,,0,2387.43812,105,980.27722,996.69,,28,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0,129,133,130,121,92,94,94,61,, +D,DREGION,,3,"2023/12/14 09:15:00",1,TAS1,0,10.11,0,10.11,0,0,1045.15,-1,583.15,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,80,,,,,,,,153,,,,,,,,136.93,,,,,,-2.99132,2362.34779,0,1049.14307,1045.15,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.32616,0.32616,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,150.743731,104.091837,22.947795,76.403361,69.939149,74.000950,, +D,DREGION,,3,"2023/12/14 09:15:00",1,VIC1,0,-46.46,0,-46.46,0,0,4424.41,-22,4118.66,172,-477.75,0,,,34.49,,,,,,,,55.18,,,,,,,,55.18,,,,,,,,112,,,,,,,,118,,,,,,,,104,,,,,,-20.30363,8477.97061,421,4507.79102,4621.65,,80.38,,,,105,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.39,0.39,0,1.5,1.5,0,0.32616,0.32616,0,0.39,0.39,0,0.3,0.3,0,19.89,19.89,0,709,910,788,277.870270,241.185498,265.389358,255.389358,259.2840,, +D,DREGION,,3,"2023/12/14 09:20:00",1,NSW1,0,89.03,0,89.03,0,0,7980.75,-36,7723.43,0,-257.33,0,,,121,,,,,,,,160,,,,,,,,149,,,,,,,,144,,,,,,,,129,,,,,,,,95.93,,,,,,47.90023,13998.48547,147,8021.80566,8040.47,,27.38,,,,79,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0,430,436,681,267.287494,409,520,386.2727,404.758583,, +D,DREGION,,3,"2023/12/14 09:20:00",1,QLD1,0,34.54991,0,34.54991,0,0,5662.38,-6,7056.78,245,1149.4,0,,,45,,,,,,,,66,,,,,,,,45,,,,,,,,17,,,,,,,,99,,,,,,,,99,,,,,,-1.90461,10634.90406,370,5944.54346,5942.54,,74,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0,271,349,128,209.8968,90.428440,105.428440,99.428440,168,, +D,DREGION,,3,"2023/12/14 09:20:00",1,SA1,0,-47.25296,0,-47.25296,0,0,953.97,-21,1155.1,73,128.14,0,,,17,,,,,,,,57,,,,,,,,15.24,,,,,,,,60.75,,,,,,,,69.15,,,,,,,,35,,,,,,15.89606,2383.25595,105,1000.05042,1029.55,,31,,,,0,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0,127,131,128,150,58,60,60,32,, +D,DREGION,,3,"2023/12/14 09:20:00",1,TAS1,0,10.11,0,10.11,0,0,1038.43,-1,576.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,91.2,,,,,,,,153,,,,,,,,136.93,,,,,,-4.13115,2366.72911,0,1043.55933,1038.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,7.13,7.13,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,161.944611,50,22.947795,71.203431,59.788352,62.800070,, +D,DREGION,,3,"2023/12/14 09:20:00",1,VIC1,0,-50.39,0,-50.39,0,0,4382.62,-22,4145.49,200,-437.13,0,,,48.31,,,,,,,,61.51,,,,,,,,59.14,,,,,,,,137,,,,,,,,123,,,,,,,,68,,,,,,-19.27613,8769.55924,421,4549.23779,4606.24,,73,,,,91,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1.65006,1.65006,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,25.1,25.1,0,696,839,731,425.895416,205,217.8750,207.8750,241.2810,, +D,DREGION,,3,"2023/12/14 09:25:00",1,NSW1,0,88.88,0,88.88,0,0,8068.19,-27,7686.68,0,-381.51,0,,,121,,,,,,,,160,,,,,,,,139,,,,,,,,144,,,,,,,,112.81,,,,,,,,44,,,,,,48.60016,13964.51884,147,8113.01514,8117.88,,30,,,,83,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0,430,436,681,367.152880,385,496,335.650730,325.516321,, +D,DREGION,,3,"2023/12/14 09:25:00",1,QLD1,0,28.85,0,28.85,0,0,5743.33,-8,7108.24,245,1119.91,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,13,,,,,,,,118,,,,,,,,107.38,,,,,,10.3399,10875.11112,370,6020.5332,6019.71,,43.25,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0,331,455,167,269.996791,102.430930,124.430930,99.430930,150.2546,, +D,DREGION,,3,"2023/12/14 09:25:00",1,SA1,0,-37.66603,0,-37.66603,0,0,943.72,-19,1169.36,45,180.64,0,,,28,,,,,,,,68,,,,,,,,26,,,,,,,,38,,,,,,,,39,,,,,,,,33,,,,,,18.28152,2359.42114,105,1012.1095,991.73,,48,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0,129,133,130,116,69,71,71,60,, +D,DREGION,,3,"2023/12/14 09:25:00",1,TAS1,0,10.1,0,10.1,0,0,1037.53,-2,575.53,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,63,,,,,,,,137.08,,,,,,,,137.08,,,,,,-4.95611,2346.67113,0,1044.48169,1037.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,157.790231,72.843273,22.947795,75.357811,63.553259,66.954450,, +D,DREGION,,3,"2023/12/14 09:25:00",1,VIC1,0,-40.6,0,-40.6,0,0,4472.37,-21,4363.71,244,-352.67,0,,,28.84,,,,,,,,61.46,,,,,,,,56.13,,,,,,,,132.27,,,,,,,,105,,,,,,,,99,,,,,,0,8782.98167,420,4669.17969,4736.66,,84.13,,,,87,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.39,0.39,0,0.17,0.17,0,5.7,5.7,0,694,837,757,475.906250,214.219027,232.219027,222.219027,267.2810,, +D,DREGION,,3,"2023/12/14 09:30:00",1,NSW1,0,89.03,0,89.03,0,0,8114.79,-15,7798.73,6,-322.06,0,,,99,,,,,,,,138,,,,,,,,122.01,,,,,,,,127,,,,,,,,115,,,,,,,,71,,,,,,49.30008,14051.85281,154,8127.53418,8167.4,,27,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0,430,436,681,323.640394,398.994580,509.994580,361.896010,405.605306,, +D,DREGION,,3,"2023/12/14 09:30:00",1,QLD1,0,5E-05,0,5E-05,0,0,5790.84,-1,7111.97,245,1076.12,0,,,45,,,,,,,,46.25,,,,,,,,45,,,,,,,,14,,,,,,,,49.88,,,,,,,,65.67,,,,,,-4.75644,10925.423,370,6068.51611,6065.15,,44,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0,231,279,88,200.328781,120.428440,148.428440,134.428440,150,, +D,DREGION,,3,"2023/12/14 09:30:00",1,SA1,0,-39.1349,0,-39.1349,0,0,941.17,-18,1149.06,69,138.89,0,,,38,,,,,,,,78,,,,,,,,37,,,,,,,,61,,,,,,,,74,,,,,,,,38,,,,,,20.17505,2331.00062,362,988.06329,1013.1,,31.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0,263,267,252,135,217.62,218.62,218.62,291,, +D,DREGION,,3,"2023/12/14 09:30:00",1,TAS1,0,10.1,0,10.1,0,0,1026.24,-2,564.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-1.41479,2337.18027,0,1029.65735,1026.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,159.582401,131.852151,22.947795,73.565641,61.929104,65.162280,, +D,DREGION,,3,"2023/12/14 09:30:00",1,VIC1,0,-41.96,0,-41.96,0,0,4403.9,-16,4265.04,193.07,-331.93,0,,,44.14,,,,,,,,74.8,,,,,,,,64.8,,,,,,,,141.96,,,,,,,,126,,,,,,,,96,,,,,,-14.64577,8883.92531,420,4672.47607,4617.14,,103,,,,110,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,8.3,8.3,0,680,705,696,444.008781,165.666667,165.666667,155.666667,240.437245,, +D,DREGION,,3,"2023/12/14 09:35:00",1,NSW1,0,90.67016,0,90.67016,0,0,8164.99,-4,7964.44,5,-205.55,0,,,120.12,,,,,,,,160,,,,,,,,143.51,,,,,,,,144,,,,,,,,129,,,,,,,,71,,,,,,50,14077.33318,153,8164.38623,8216.2,,27,,,,35.03,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0,430,436,681,243.571644,409,520,417.209290,422.459823,, +D,DREGION,,3,"2023/12/14 09:35:00",1,QLD1,0,7.06,0,7.06,0,0,5750.38,-2,7050.38,249.29,1050.71,0,,,35.71,,,,,,,,45.48,,,,,,,,35.71,,,,,,,,14,,,,,,,,62,,,,,,,,72.14,,,,,,-19.85278,10834.26239,365,6041.72021,6027.43,,30,,,,9.29,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0,291,384,148,261.148541,86.114010,96.114010,84.114010,128.706350,, +D,DREGION,,3,"2023/12/14 09:35:00",1,SA1,0,-41.97594,0,-41.97594,0,0,901.97,-17,1204.4,63,239.43,0,,,49,,,,,,,,89,,,,,,,,48,,,,,,,,59,,,,,,,,91.16,,,,,,,,67,,,,,,12.93966,2420.48109,362,975.91431,969.97,,26,,,,8,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0,265,269,250,137,222,223,223,297,, +D,DREGION,,3,"2023/12/14 09:35:00",1,TAS1,0,10.1,0,10.1,0,0,1012.11,-2,550.11,0,-462,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,84.5,,,,,,,,153,,,,,,,,136.93,,,,,,-3.10488,2337.49811,0,1017.21716,1012.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,7.12,7.12,0,0.34,0.34,0,0.39,0.39,0,0,0,0,3.5,3.5,0,187.108696,223.814815,173.744681,104.377667,21.661965,59.117531,48.835505,50.714170,, +D,DREGION,,3,"2023/12/14 09:35:00",1,VIC1,0,-46.46,0,-46.46,0,0,4405.18,-17,4113.69,225,-516.49,0,,,20,,,,,,,,40,,,,,,,,40,,,,,,,,127,,,,,,,,114,,,,,,,,65,,,,,,-23.75382,8858.56043,420,4642.27881,4657.32,,122.38,,,,117.67,,,,,,,,,,,,,,,,,,,0,0,0,0.39,0.39,0,0.38,0.38,0,2.64,2.64,0,0.34,0.34,0,0.39,0.39,0,0.15,0.15,0,5.7,5.7,0,678,703,695,503.503021,110,110,100,230.603622,, +D,DREGION,,3,"2023/12/14 09:40:00",1,NSW1,0,89.03,0,89.03,0,0,8335.05,10,7929.7,0,-405.36,0,,,98,,,,,,,,138,,,,,,,,117,,,,,,,,144,,,,,,,,115,,,,,,,,44,,,,,,50,14078.55313,147,8330.06543,8376.95,,57,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0,430,436,681,335.030331,387,498,408,391.942758,, +D,DREGION,,3,"2023/12/14 09:40:00",1,QLD1,0,6.61,0,6.61,0,0,5750.04,-4,7060.52,243.45,1067.03,0,,,41.55,,,,,,,,41.55,,,,,,,,41.55,,,,,,,,16,,,,,,,,85,,,,,,,,129,,,,,,0,10839.40274,365,6032.2666,6021.65,,48,,,,3.45,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0,334,458,170,268.447652,119.329480,139.329480,117.329480,134.545930,, +D,DREGION,,3,"2023/12/14 09:40:00",1,SA1,0,-33.16455,0,-33.16455,0,0,888.65,-15,1234.15,45,300.5,0,,,39,,,,,,,,68.69,,,,,,,,39,,,,,,,,62,,,,,,,,82,,,,,,,,75,,,,,,2.06896,2426.00167,362,959.80103,940.11,,61,,,,8,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0,271,275,253,124,199,200,200,310,, +D,DREGION,,3,"2023/12/14 09:40:00",1,TAS1,0,-33.11145,0,-33.11145,0,0,1014.11,-2,562.5,0,-451.61,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,52.97,,,,,,,,126.1,,,,,,,,126.1,,,,,,-6.81676,2350.59662,0,1022.927,1014.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.86,0.86,0,0,0,0,46.71145,46.71145,0,187.108696,223.814815,173.744681,151.068727,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 09:40:00",1,VIC1,0,-37.3,0,-37.3,0,0,4402.4,-16,4219.95,228,-410.44,0,,,48.38,,,,,,,,87.41,,,,,,,,68.35,,,,,,,,147,,,,,,,,133.59,,,,,,,,42.65,,,,,,0,8833.96919,422,4611.31543,4653.99,,28.99,,,,103.55,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.38,0.38,0,2.64,2.64,0,0.3,0.3,0,0.86,0.86,0,0.17,0.17,0,5.7,5.7,0,682,707,699,478.290893,149.409276,151.409276,141.409276,240.232052,, +D,DREGION,,3,"2023/12/14 09:45:00",1,NSW1,0,88.88,0,88.88,0,0,8359.34,19,7836.1,2,-525.24,0,,,120,,,,,,,,133,,,,,,,,143.01,,,,,,,,142,,,,,,,,127,,,,,,,,44,,,,,,50,14123.25275,149,8342.63965,8404.54,,30.42,,,,73,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0,428,434,679,351.341754,405.223390,516.223390,384.141680,328.461753,, +D,DREGION,,3,"2023/12/14 09:45:00",1,QLD1,0,1,0,1,0,0,5610.08,-8,6999.9,290,1099.83,0,,,10,,,,,,,,36,,,,,,,,10,,,,,,,,17,,,,,,,,43,,,,,,,,78.65,,,,,,2.61529,10789.89706,365,5892.8623,5929.91,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0,254,318,91,245.345782,76.430930,96.430930,84.430930,88,, +D,DREGION,,3,"2023/12/14 09:45:00",1,SA1,0,-36.09788,0,-36.09788,0,0,879.64,-12,1214.66,42,293.02,0,,,51,,,,,,,,78,,,,,,,,50,,,,,,,,63,,,,,,,,82,,,,,,,,74,,,,,,0.65038,2507.84472,362,942.30298,928.42,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0,271,275,254,113,230,231,231,313,, +D,DREGION,,3,"2023/12/14 09:45:00",1,TAS1,0,-39.51903,0,-39.51903,0,0,1010.9,-2,567.86,0,-443.04,0,,,0,,,,,,,,11.79,,,,,,,,0,,,,,,,,17.98,,,,,,,,117.97,,,,,,,,117.97,,,,,,-11.59019,2355.95709,0,1024.48694,1010.9,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.86,0.86,0,0,0,0,53.11903,53.11903,0,187.108696,223.814815,173.744681,152.140157,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 09:45:00",1,VIC1,0,-40.6,0,-40.6,0,0,4393.5,-15,4177.83,107,-322.67,0,,,44.19,,,,,,,,76.04,,,,,,,,62.75,,,,,,,,138.37,,,,,,,,128.01,,,,,,,,96,,,,,,-5.19753,8778.50097,422,4644.59863,4522.59,,110,,,,43,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.34,0.34,0,0.86,0.86,0,0.3,0.3,0,3.71,3.71,0,681,706,698,357.576942,162.754199,164.754199,154.754199,336.231052,, +D,DREGION,,3,"2023/12/14 09:50:00",1,NSW1,0,85.98,0,85.98,0,0,8358.15,24,7813.33,4,-548.81,0,,,93,,,,,,,,158.49,,,,,,,,122,,,,,,,,125,,,,,,,,112.46,,,,,,,,44,,,,,,50,14216.99742,152,8335.98242,8404.44,,30,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0,428,434,679,376.975743,385,495,347.980990,267.910135,, +D,DREGION,,3,"2023/12/14 09:50:00",1,QLD1,0,1,0,1,0,0,5645.45,-8,7029.95,290,1094.5,0,,,10,,,,,,,,32,,,,,,,,10,,,,,,,,17,,,,,,,,83,,,,,,,,129,,,,,,14.81993,10840.37892,365,5948.28223,5965.28,,15,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0,334,458,171,294.993582,76.430930,96.430930,84.430930,88,, +D,DREGION,,3,"2023/12/14 09:50:00",1,SA1,0,-35.99,0,-35.99,0,0,873.77,-10,1221.8,29,319.03,0,,,77,,,,,,,,70,,,,,,,,62.53,,,,,,,,61,,,,,,,,77,,,,,,,,71,,,,,,0.73882,2493.29121,362,929.32178,910.96,,28,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0,269,273,252,105,236,237,237,321,, +D,DREGION,,3,"2023/12/14 09:50:00",1,TAS1,0,-36.0546,0,-36.0546,0,0,1020.04,-2,566.72,0,-453.32,0,,,0,,,,,,,,11.79,,,,,,,,13.29,,,,,,,,27.96,,,,,,,,127.96,,,,,,,,127.96,,,,,,-13.08641,2354.82123,0,1035.12903,1020.04,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,1,1,0,0,0,0,49.6546,49.6546,0,187.108696,223.814815,173.744681,161.083467,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 09:50:00",1,VIC1,0,-40.91128,0,-40.91128,0,0,4371.48,-13,4147.63,82,-305.85,0,,,50.47,,,,,,,,67.55,,,,,,,,57.55,,,,,,,,145.1,,,,,,,,95,,,,,,,,45.28,,,,,,9.56933,8739.50641,425,4545.73047,4478.71,,123.7,,,,48,,,,,,,,,,,,,,,,,,,0,0,0,0.1,0.1,0,0.3,0.3,0,11,11,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.61,3.61,0,685,710,702,338.556427,131.298620,131.298620,121.298620,338.229052,, +D,DREGION,,3,"2023/12/14 09:55:00",1,NSW1,0,85.98,0,85.98,0,0,8347.36,24,7775.27,13,-585.09,0,,,120,,,,,,,,159,,,,,,,,137.7,,,,,,,,128.58,,,,,,,,102.78,,,,,,,,44,,,,,,50,14294.80103,153,8320.80078,8401.54,,35,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0,428,434,679,384.991002,385,495,335.969090,259.020877,, +D,DREGION,,3,"2023/12/14 09:55:00",1,QLD1,0,7.24,0,7.24,0,0,5671.3,-2,7015.39,247.55,1096.54,0,,,37.45,,,,,,,,37.45,,,,,,,,37.45,,,,,,,,14,,,,,,,,85,,,,,,,,48.44,,,,,,0,10830.0933,365,5981.29395,5948.06,,63.38,,,,7.55,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0,336,460,172,292.545272,98.499240,112.499240,105.879240,130.448310,, +D,DREGION,,3,"2023/12/14 09:55:00",1,SA1,0,-18.13308,0,-18.13308,0,0,861.91,-8,1233.74,40,331.83,0,,,51,,,,,,,,106.96,,,,,,,,50,,,,,,,,61,,,,,,,,75,,,,,,,,73,,,,,,1.56066,2478.18705,362,902.974,911.02,,51,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0,271,275,254,117,212,213,213,315,, +D,DREGION,,3,"2023/12/14 09:55:00",1,TAS1,0,11.08,0,11.08,0,0,1064.4,-1,602.4,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,38.57,,,,,,,,138.57,,,,,,,,138.57,,,,,,-13.56671,2351.15622,0,1078.96191,1064.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.14,0.14,0,0.39,0.39,0,0,0,0,2.5,2.5,0,187.108696,223.814815,128.405701,72.223833,37.158530,79.992737,89.044329,50.496071,, +D,DREGION,,3,"2023/12/14 09:55:00",1,VIC1,0,-20.72198,0,-20.72198,0,0,4400.04,-11,4290.58,165,-274.46,0,,,25.75,,,,,,,,40,,,,,,,,40,,,,,,,,136,,,,,,,,96,,,,,,,,96,,,,,,24.13753,8692.20189,425,4488.52783,4592.36,,56,,,,107.45,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.3,0.3,0,2.64,2.64,0,0.14,0.14,0,0.39,0.39,0,0.17,0.17,0,7.73,7.73,0,704.333333,738,730,432.376217,175.013819,175.013819,165.013819,308.230052,, +D,DREGION,,3,"2023/12/14 10:00:00",1,NSW1,0,54.95,0,54.95,0,0,8302.2,23,7554.16,11,-759.04,0,,,120,,,,,,,,159,,,,,,,,149,,,,,,,,129.01,,,,,,,,119.79,,,,,,,,44,,,,,,0,14337.34825,150,8322.86133,8349.82,,35,,,,71.48,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0,428,434,679,382.896358,368.523760,478.523760,309.523760,243.635743,, +D,DREGION,,3,"2023/12/14 10:00:00",1,QLD1,0,15.13,0,15.13,0,0,5750.32,4,7025.4,257.52,1017.56,0,,,27.48,,,,,,,,27.48,,,,,,,,27.48,,,,,,,,21,,,,,,,,39,,,,,,,,32.53,,,,,,0,10840.32032,365,6017.42529,6033.11,,63,,,,43.52,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0,238,286,95,227.516801,92.910920,102.910920,90.910920,120.479990,, +D,DREGION,,3,"2023/12/14 10:00:00",1,SA1,0,0.01741,0,0.01741,0,0,858.88,-7,1236.56,26,351.68,0,,,44.06,,,,,,,,96,,,,,,,,37.46,,,,,,,,63,,,,,,,,83,,,,,,,,76,,,,,,0,2525.78677,362,916.61975,893.7,,68,,,,4,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0,271,275,254,103,206,207,207,329,, +D,DREGION,,3,"2023/12/14 10:00:00",1,TAS1,0,6.27156,0,6.27156,0,0,1015.64,-1,561.71,0,-453.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,28.87,,,,,,,,128.86,,,,,,,,128.86,,,,,,-13.32706,2350.80798,0,1029.9646,1015.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,7.32844,7.32844,0,187.108696,223.814815,142.744681,115.228267,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 10:00:00",1,VIC1,0,0.02,0,0.02,0,0,4353.45,-11,4350.03,54,-57.42,0,,,42.08,,,,,,,,59.91,,,,,,,,52.08,,,,,,,,136,,,,,,,,126,,,,,,,,96,,,,,,35.42669,8718.8461,425,4467.70215,4435.58,,31.31,,,,51,,,,,,,,,,,,,,,,,,,0,0,0,0.3,0.3,0,0.3,0.3,0,11,11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,5.7,5.7,0,665,680,672,321.817342,251.015597,252.015597,242.015597,377.228052,, +D,DREGION,,3,"2023/12/14 10:05:00",1,NSW1,0,54.95,0,54.95,0,0,8234.34,22,7262.37,10,-981.96,0,,,93,,,,,,,,162,,,,,,,,132,,,,,,,,142,,,,,,,,132,,,,,,,,44,,,,,,0,14554.04739,149,8259.74023,8288.83,,15,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0,428,433,679,375.006251,308.192770,418.192770,249.192770,193.313990,, +D,DREGION,,3,"2023/12/14 10:05:00",1,QLD1,0,34.55,0,34.55,0,0,5783.76,11,7086.97,240,1063.21,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,17.85,,,,,,,,37,,,,,,,,43.15,,,,,,0,11137.60854,365,6054.34766,6051.22,,15,,,,26,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0,238,287,95,209.996791,123.430930,143.430930,121.430930,135,, +D,DREGION,,3,"2023/12/14 10:05:00",1,SA1,0,4.43056,0,4.43056,0,0,816.27,-8,1227,0,410.73,0,,,61.24,,,,,,,,62.58,,,,,,,,74,,,,,,,,59,,,,,,,,79,,,,,,,,73,,,,,,0,2587.39985,362,865.41681,825.92,,20,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0,269,273,252,77,234,235,235,355,, +D,DREGION,,3,"2023/12/14 10:05:00",1,TAS1,0,11.05967,0,11.05967,0,0,1021.73,0,565.07,0,-456.67,0,,,0,,,,,,,,8.79,,,,,,,,5.57,,,,,,,,31.75,,,,,,,,131.75,,,,,,,,131.75,,,,,,-12.98756,2340.923,0,1034.72168,1021.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,1.84,1.84,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,156.207241,96.809323,26.193506,65.415643,61.601372,49.999999,, +D,DREGION,,3,"2023/12/14 10:05:00",1,VIC1,0,5.14495,0,5.14495,0,0,4238.33,-14,4326.91,7,81.58,0,,,64.33,,,,,,,,94.33,,,,,,,,94.33,,,,,,,,105,,,,,,,,94.98,,,,,,,,65,,,,,,0,8701.91251,428,4343.5293,4280.62,,150.05,,,,89,,,,,,,,,,,,,,,,,,,0,0,0,0.26,0.26,0,0.3,0.3,0,9.98,9.98,0,1.75,1.75,0,1.84,1.84,0,0.39,0.39,0,3.98,3.98,0,665,680,672,285.675873,188.326226,188.326226,178.326226,389.104302,, +D,DREGION,,3,"2023/12/14 10:10:00",1,NSW1,0,54.95003,0,54.95003,0,0,8268.52,13,7312.68,12,-967.84,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,143,,,,,,,,115.22,,,,,,,,43,,,,,,26.70763,14625.79992,152,8276.58594,8321.04,,55,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,427,434,680,332.856860,357.168680,468.168680,299.168680,243.486364,, +D,DREGION,,3,"2023/12/14 10:10:00",1,QLD1,0,46.81573,0,46.81573,0,0,5887.16,18,7160.5,240,1033.34,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,21,,,,,,,,124,,,,,,,,123,,,,,,12.79219,11130.33931,365,6119.13623,6152.13,,23,,,,6,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,318,427,175,189.996797,177.830940,188.230950,146.430930,195,, +D,DREGION,,3,"2023/12/14 10:10:00",1,SA1,0,7.62506,0,7.62506,0,0,838.51,-7,1236.69,0,398.18,0,,,52,,,,,,,,95.64,,,,,,,,83.8,,,,,,,,64,,,,,,,,84,,,,,,,,76,,,,,,9.60151,2637.96855,362,845.41089,853,,21,,,,9,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,271,277,255,75,235,239,239,357,, +D,DREGION,,3,"2023/12/14 10:10:00",1,TAS1,0,11.05967,0,11.05967,0,0,1029.66,0,579.4,0,-450.26,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,50.84,,,,,,,,125.05,,,,,,,,125.05,,,,,,-9.77235,2350.09866,0,1039.43201,1029.66,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,159.243471,118.970076,28.275007,68.198120,66.923691,49.999999,, +D,DREGION,,3,"2023/12/14 10:10:00",1,VIC1,0,9,0,9,0,0,4269.24,-14,4380.77,0,111.53,0,,,68.87,,,,,,,,90.66,,,,,,,,90.66,,,,,,,,147,,,,,,,,96,,,,,,,,32.12,,,,,,37.43589,8700.38029,425,4286.07959,4314.2,,94.64,,,,95,,,,,,,,,,,,,,,,,,,0,0,0,0.15,0.15,0,0.38,0.38,0,5,5,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,703,738,730,303.281250,268.360220,268.360220,258.360220,429.879641,, +D,DREGION,,3,"2023/12/14 10:15:00",1,NSW1,0,70.8189,0,70.8189,0,0,8296.02,14,7428.06,13,-880.96,0,,,94,,,,,,,,133,,,,,,,,122,,,,,,,,125,,,,,,,,71,,,,,,,,43,,,,,,30.58969,14640.40056,153,8291.75781,8339.37,,57,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,427,434,679,321.216855,358,469,300,304.461458,, +D,DREGION,,3,"2023/12/14 10:15:00",1,QLD1,0,61.73,0,61.73,0,0,6079.77,27,7249.77,240,930,0,,,10,,,,,,,,22,,,,,,,,10,,,,,,,,41,,,,,,,,115.73,,,,,,,,30,,,,,,24.02,11124.26721,365,6286.88965,6338.46,,23,,,,9,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,338,463,175,208.266692,180.781910,250.781910,158.781910,195,, +D,DREGION,,3,"2023/12/14 10:15:00",1,SA1,0,7.50122,0,7.50122,0,0,834.95,-5,1257.67,0,422.73,0,,,53,,,,,,,,82.5,,,,,,,,87.27,,,,,,,,63,,,,,,,,77,,,,,,,,75,,,,,,4.32276,2617.04112,362,849.63306,846.56,,21,,,,5,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,270,276,256,77,236,240,240,349,, +D,DREGION,,3,"2023/12/14 10:15:00",1,TAS1,0,11.05967,0,11.05967,0,0,1015.82,-1,575.91,0,-439.92,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,14.56,,,,,,,,114.55,,,,,,,,114.55,,,,,,-11.4909,2354.67047,0,1028.31409,1015.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,153.554381,125.315475,25.159815,64.033841,58.958263,50,, +D,DREGION,,3,"2023/12/14 10:15:00",1,VIC1,0,8.80572,0,8.80572,0,0,4272.23,-9,4344.46,5,67.22,0,,,68.18,,,,,,,,90.96,,,,,,,,80.96,,,,,,,,113.44,,,,,,,,96,,,,,,,,96,,,,,,28.91516,8712.45599,429,4296.80908,4315.65,,82.3,,,,96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.26,0.26,0,4.98,4.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.71,0.71,0,703,738,730,297.5625,255.702640,255.702640,245.702640,370.453667,, +D,DREGION,,3,"2023/12/14 10:20:00",1,NSW1,0,54.95,0,54.95,0,0,8205.4,11,7348.88,9,-865.52,0,,,100.65,,,,,,,,138,,,,,,,,144,,,,,,,,99.54,,,,,,,,71,,,,,,,,43,,,,,,0,14610.02815,148,8245.77148,8247.98,,25,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0,427,434,680,316.391743,375.603840,486.603840,317.603840,254.757925,, +D,DREGION,,3,"2023/12/14 10:20:00",1,QLD1,0,10.3,0,10.3,0,0,5955.56,28,7176.94,263.72,957.66,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,117.45,,,,,,,,123,,,,,,0,11181.35251,365,6194.05859,6240.56,,27.61,,,,41.72,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0,318,427,175,273.719891,155.207830,175.207830,163.207830,114.276903,, +D,DREGION,,3,"2023/12/14 10:20:00",1,SA1,0,4.36523,0,4.36523,0,0,846.04,-4,1224.62,0,378.58,0,,,47,,,,,,,,61.96,,,,,,,,47,,,,,,,,58,,,,,,,,51,,,,,,,,71.56,,,,,,0,2604.23981,362,865.15063,852.92,,51,,,,4.28,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0,268,274,254,77,234,237,237,349,, +D,DREGION,,3,"2023/12/14 10:20:00",1,TAS1,0,11.05967,0,11.05967,0,0,1028.97,0,579.35,0,-449.62,0,,,0,,,,,,,,4,,,,,,,,0,,,,,,,,24.56,,,,,,,,124.56,,,,,,,,124.56,,,,,,-8.29084,2340.90212,0,1037.26465,1028.97,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,150.194361,122.377279,31.858813,72.988825,76.087346,50.000002,, +D,DREGION,,3,"2023/12/14 10:20:00",1,VIC1,0,4.95982,0,4.95982,0,0,4218.72,-9,4287.21,0,68.49,0,,,69,,,,,,,,120.59,,,,,,,,110.55,,,,,,,,65,,,,,,,,65,,,,,,,,0,,,,,,0,8685.82351,428,4266.59424,4246.58,,89.39,,,,104,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,5,5,0,0.3,0.3,0,0.39,0.39,0,0.01,0.01,0,3.99,3.99,0,700,735,727,322.399292,263.533672,264.533672,254.533672,394.335012,, +D,DREGION,,3,"2023/12/14 10:25:00",1,NSW1,0,58,0,58,0,0,8234.27,8,7358.48,8,-883.78,0,,,116.77,,,,,,,,133,,,,,,,,149,,,,,,,,126,,,,,,,,81.99,,,,,,,,43,,,,,,29.71376,14666.77789,147,8232.15527,8274.49,,30,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0,427,434,680,362.602075,385,496,327,285.967581,, +D,DREGION,,3,"2023/12/14 10:25:00",1,QLD1,0,34.55,0,34.55,0,0,6061.65,27,7237.4,240,935.75,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,133,,,,,,,,54.4,,,,,,15.56478,11145.16186,365,6290.84863,6321.39,,23,,,,21,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0,338,462,175,226.714117,193.430930,273.430930,181.430930,195,, +D,DREGION,,3,"2023/12/14 10:25:00",1,SA1,0,7.58254,0,7.58254,0,0,831.99,-4,1246.38,0,414.39,0,,,60,,,,,,,,100.09,,,,,,,,59.96,,,,,,,,62,,,,,,,,76,,,,,,,,74,,,,,,6.00149,2623.48441,362,838.67487,845.52,,21,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0,269,275,255,77,243,247,247,349,, +D,DREGION,,3,"2023/12/14 10:25:00",1,TAS1,0,11.05967,0,11.05967,0,0,1014.36,0,597.74,0,-416.62,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,3,,,,,,,,91.26,,,,,,,,91.26,,,,,,-10.22372,2349.45359,0,1024.58008,1014.36,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.26,0.26,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,133.164681,131.690736,35.792456,78.247181,86.145524,50.000006,, +D,DREGION,,3,"2023/12/14 10:25:00",1,VIC1,0,8.95035,0,8.95035,0,0,4299.85,-4,4356.17,0,56.32,0,,,40,,,,,,,,86.7,,,,,,,,86.7,,,,,,,,106.23,,,,,,,,96,,,,,,,,96,,,,,,9.51187,8712.72211,428,4324.36963,4340.41,,86,,,,99,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0.26,0.26,0,4.99,4.99,0,0.39,0.39,0,0.39,0.39,0,0.15,0.15,0,0.71,0.71,0,702,737,729,277.885193,290,290,280,438.749416,, +D,DREGION,,3,"2023/12/14 10:30:00",1,NSW1,0,58,0,58,0,0,8258.05,9,7388.53,8,-877.52,0,,,83,,,,,,,,133,,,,,,,,122,,,,,,,,85,,,,,,,,72,,,,,,,,44,,,,,,0,14638.89061,147,8293.83496,8297.65,,57,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0,428,435,681,299.761795,358,469,299,313.745162,, +D,DREGION,,3,"2023/12/14 10:30:00",1,QLD1,0,34.55,0,34.55,0,0,6015.26,27,7183.74,240,928.49,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,60.54,,,,,,,,69.83,,,,,,,,18.38,,,,,,0,11159.28407,365,6250.854,6274.62,,23,,,,32,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0,298,390,175,223.459660,186.535120,206.535120,175,180.135111,, +D,DREGION,,3,"2023/12/14 10:30:00",1,SA1,0,-30,0,-30,0,0,817.09,-4,1276.82,0,459.73,0,,,59,,,,,,,,71.02,,,,,,,,57.29,,,,,,,,55,,,,,,,,76,,,,,,,,74,,,,,,-0.36145,2681.73686,362,836.93591,833.84,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0,269,277,255,77,243,246,246,349,, +D,DREGION,,3,"2023/12/14 10:30:00",1,TAS1,0,-17.40103,0,-17.40103,0,0,1006.46,0,562.41,0,-444.05,0,,,0,,,,,,,,4,,,,,,,,4.64,,,,,,,,19.29,,,,,,,,119.28,,,,,,,,119.28,,,,,,-11.53257,2351.51124,0,1017.99597,1006.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,31.00103,31.00103,0,187.108696,223.814815,142.744681,124.808497,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 10:30:00",1,VIC1,0,-20.54722,0,-20.54722,0,0,4204.77,-5,4255.22,0,50.45,0,,,76.28,,,,,,,,117.55,,,,,,,,117.55,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,0,8777.68543,428,4254.70703,4254.14,,76.43,,,,118,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.08,0.08,0,3.61,3.61,0,693,728,720,289.447631,239,240,230,370.720910,, +D,DREGION,,3,"2023/12/14 10:35:00",1,NSW1,0,58,0,58,0,0,8310.42,14,7539.97,5,-775.46,0,,,71.32,,,,,,,,133,,,,,,,,121.73,,,,,,,,91.57,,,,,,,,44,,,,,,,,43,,,,,,0,14741.7473,148,8343.44434,8338.04,,30,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0,428,434,681,266.560624,385,495,325,321.655890,, +D,DREGION,,3,"2023/12/14 10:35:00",1,QLD1,0,-2.02,0,-2.02,0,0,5964.51,20,7068.44,292,811.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,102.19,,,,,,,,10.66,,,,,,-6.43846,11237.586,365,6218.21289,6270.36,,61.34,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0,298,391,175,264.996791,71.028450,81.028450,59.028450,86.000004,, +D,DREGION,,3,"2023/12/14 10:35:00",1,SA1,0,-28.90575,0,-28.90575,0,0,806.99,-4,1254,0,447.01,0,,,56,,,,,,,,58,,,,,,,,54,,,,,,,,56,,,,,,,,74,,,,,,,,72,,,,,,-0.04973,2651.70174,362,827.04529,820.47,,40,,,,11,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0,271,275,257,77,241,245,245,349,, +D,DREGION,,3,"2023/12/14 10:35:00",1,TAS1,0,-28.10728,0,-28.10728,0,0,1017.52,0,567.56,0,-449.96,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.9,,,,,,,,124.9,,,,,,,,124.9,,,,,,-11.9855,2356.65861,0,1029.5083,1017.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.14,0.14,0,0.3,0.3,0,0,0,0,41.70728,41.70728,0,187.108696,223.814815,142.744681,119.193587,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 10:35:00",1,VIC1,0,-34.3,0,-34.3,0,0,4113.64,-11,4173.2,0,59.55,0,,,94,,,,,,,,137.93,,,,,,,,134,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-1.53648,8792.16075,428,4174.5498,4156.76,,62,,,,79,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,9.98,9.98,0,0.14,0.14,0,0.3,0.3,0,0.01,0.01,0,7.73,7.73,0,658,791,733,244.877533,286,334.786530,324.786530,362.8807,, +D,DREGION,,3,"2023/12/14 10:40:00",1,NSW1,0,58,0,58,0,0,8348.34,17,7598.4,4,-753.93,0,,,113,,,,,,,,153,,,,,,,,143,,,,,,,,83,,,,,,,,44,,,,,,,,43,,,,,,46.36521,14843.02452,147,8315.48145,8373.47,,30,,,,37.2,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0,428,434,681,347.717481,385,495,325,343.632791,, +D,DREGION,,3,"2023/12/14 10:40:00",1,QLD1,0,-10,0,-10,0,0,5899.94,10,6977.96,290,788.02,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,124,,,,,,,,32.38,,,,,,-22.69943,11191.44678,365,6215.91455,6202.89,,15,,,,81,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0,318,427,175,279.993582,76.428440,96.428440,84.428440,88,, +D,DREGION,,3,"2023/12/14 10:40:00",1,SA1,0,-30,0,-30,0,0,796.57,-5,1265.75,11,458.18,0,,,61,,,,,,,,76.49,,,,,,,,62.69,,,,,,,,49,,,,,,,,74,,,,,,,,72,,,,,,6.93963,2640.29807,362,807.49219,824.38,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0,271,275,257,88,245,248,248,338,, +D,DREGION,,3,"2023/12/14 10:40:00",1,TAS1,0,11.05967,0,11.05967,0,0,1039.26,1,577.26,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,37.09,,,,,,,,137.08,,,,,,,,137.08,,,,,,-14.26037,2359.13489,0,1052.52441,1039.26,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,148.338081,99.551313,24.222792,62.639970,55.520241,49.999996,, +D,DREGION,,3,"2023/12/14 10:40:00",1,VIC1,0,-34.3,0,-34.3,0,0,4097.91,-11,4174.43,5,71.52,0,,,40.06,,,,,,,,87.44,,,,,,,,87.44,,,,,,,,64,,,,,,,,73,,,,,,,,71,,,,,,5.41368,8794.58376,428,4145.77197,4153.8,,129.38,,,,51.8,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.17,0.17,0,3.61,3.61,0,665,798,740,284.419464,204.62,248.466990,238.466990,367.099394,, +D,DREGION,,3,"2023/12/14 10:45:00",1,NSW1,0,58,0,58,0,0,8243.07,13,7505.53,22,-759.54,0,,,86,,,,,,,,126,,,,,,,,116,,,,,,,,84,,,,,,,,41.22,,,,,,,,44,,,,,,0,14677.25597,147,8264.80566,8287.61,,38,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,429,435,682,395.975529,359,469,299,369.275173,, +D,DREGION,,3,"2023/12/14 10:45:00",1,QLD1,0,-20.5,0,-20.5,0,0,5786.84,1,6872.73,290,795.89,0,,,10,,,,,,,,26,,,,,,,,10,,,,,,,,64,,,,,,,,0,,,,,,,,1.22,,,,,,-33.77897,11228.65239,365,6128.3667,6090.65,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,258,321,115,234.996791,76.430930,96.430930,84.430930,88,, +D,DREGION,,3,"2023/12/14 10:45:00",1,SA1,0,-35.95,0,-35.95,0,0,790.46,-5,1238.12,0,447.65,0,,,61,,,,,,,,89.99,,,,,,,,93.19,,,,,,,,53,,,,,,,,72,,,,,,,,70,,,,,,0,2635.08678,362,821.15411,807.95,,31,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,269,273,257,77,245,248,248,349,, +D,DREGION,,3,"2023/12/14 10:45:00",1,TAS1,0,11.05967,0,11.05967,0,0,1052.12,1,590.12,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-12.0146,2363.16464,0,1063.13953,1052.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,159.068261,88.322391,27.308306,66.905868,64.451873,49.999997,, +D,DREGION,,3,"2023/12/14 10:45:00",1,VIC1,0,-34.3,0,-34.3,0,0,4098.4,-10,4187.44,5,84.04,0,,,71.7,,,,,,,,94.73,,,,,,,,94.73,,,,,,,,94,,,,,,,,103,,,,,,,,101,,,,,,0,8811.65586,428,4163.44824,4155.6,,121.38,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,659,792,734,239.971283,212.62,250.318820,240.318820,380.344351,, +D,DREGION,,3,"2023/12/14 10:50:00",1,NSW1,0,58,0,58,0,0,8294.28,10,7592.16,31,-733.12,0,,,86,,,,,,,,126,,,,,,,,116,,,,,,,,84,,,,,,,,45,,,,,,,,44,,,,,,49.0402,14694.2209,152,8274.80371,8345.4,,10,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,429,435,682,385.475090,382,492,322,327.047951,, +D,DREGION,,3,"2023/12/14 10:50:00",1,QLD1,0,-0.01,0,-0.01,0,0,5887.74,-9,6943.32,290,765.57,0,,,10,,,,,,,,22.89,,,,,,,,10,,,,,,,,4.7,,,,,,,,32.23,,,,,,,,37.23,,,,,,0,11188.6857,365,6183.29395,6190.07,,15,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,318,427,155,299.993582,61.430930,71.430930,49.430930,88,, +D,DREGION,,3,"2023/12/14 10:50:00",1,SA1,0,-32.13413,0,-32.13413,0,0,834.9,-4,1250.75,0,415.85,0,,,60,,,,,,,,87,,,,,,,,85.39,,,,,,,,50,,,,,,,,70,,,,,,,,68,,,,,,12.9533,2677.67279,362,840.96118,844.75,,39.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,267,270,253,77,243,247,247,349,, +D,DREGION,,3,"2023/12/14 10:50:00",1,TAS1,0,11.05967,0,11.05967,0,0,1053.62,1,591.62,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-10.57183,2362.17883,0,1063.19287,1053.62,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,159.202471,85.411602,28.291244,68.219825,66.965210,49.999995,, +D,DREGION,,3,"2023/12/14 10:50:00",1,VIC1,0,-37.3,0,-37.3,0,0,4000.95,-12,4098.42,5,92.47,0,,,67.39,,,,,,,,95.02,,,,,,,,95.02,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,7.72108,8793.65849,428,4060.04321,4042.42,,141,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,713,866,808,331.602936,204.975541,224.975541,214.975541,363.397423,, +D,DREGION,,3,"2023/12/14 10:55:00",1,NSW1,0,88.89,0,88.89,0,0,8398.24,20,7687.53,31,-741.71,0,,,85,,,,,,,,125,,,,,,,,114,,,,,,,,53,,,,,,,,44,,,,,,,,43,,,,,,0,14796.54756,152,8438.23535,8450.1,,10,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,425,431,678,349.002222,380,491,323.796340,367.323294,, +D,DREGION,,3,"2023/12/14 10:55:00",1,QLD1,0,-20.5,0,-20.5,0,0,5720.51,-16,6785.85,290,775.34,0,,,10,,,,,,,,10,,,,,,,,10,,,,,,,,64,,,,,,,,25.2,,,,,,,,30.2,,,,,,-17.50129,11131.67482,365,6062.42236,6023.29,,15,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,258,322,115,234.996791,86.430930,106.430930,84.430930,88,, +D,DREGION,,3,"2023/12/14 10:55:00",1,SA1,0,-34.84617,0,-34.84617,0,0,845.28,-1,1351.12,3,502.84,0,,,55.46,,,,,,,,126.12,,,,,,,,99.72,,,,,,,,38,,,,,,,,75,,,,,,,,73,,,,,,0,2630.20807,362,852.80035,860.32,,32,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,272,275,258,74,242,246,246,346,, +D,DREGION,,3,"2023/12/14 10:55:00",1,TAS1,0,10.04328,0,10.04328,0,0,1056.01,1,594.01,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-8.31816,2361.816,0,1063.33008,1056.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0,0,0,0,0,0,4.55672,4.55672,0,187.108696,223.814815,156.348771,89.064783,29.421423,69.730608,69.855033,49.999996,, +D,DREGION,,3,"2023/12/14 10:55:00",1,VIC1,0,-41.11,0,-41.11,0,0,3858.97,-20,3876.32,5,12.36,0,,,45.1,,,,,,,,55.1,,,,,,,,55.1,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-8.17209,8835.32484,429,3925.44849,3905.12,,148.38,,,,56,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,9.98,9.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,629,762,704,269.701111,148.62,166.62,156.62,366.948052,, +D,DREGION,,3,"2023/12/14 11:00:00",1,NSW1,0,58,0,58,0,0,8469.36,26,7771.82,5,-702.53,0,,,85,,,,,,,,125,,,,,,,,115,,,,,,,,81,,,,,,,,71,,,,,,,,43,,,,,,45.33145,14818.23401,148,8447.30371,8493.84,,57,,,,60,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,425,431,678,418.914733,357,467,297,341.768039,, +D,DREGION,,3,"2023/12/14 11:00:00",1,QLD1,0,-20.5,0,-20.5,0,0,5625.34,-24,6675.97,293,757.63,0,,,10,,,,,,,,22,,,,,,,,10,,,,,,,,62,,,,,,,,103.65,,,,,,,,123,,,,,,-24.59261,11092.42985,365,5969.01758,5930.73,,15,,,,58,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,318,428,155,279.993582,76.430930,96.430930,84.430930,85,, +D,DREGION,,3,"2023/12/14 11:00:00",1,SA1,0,-32.31068,0,-32.31068,0,0,916.53,3,1287.54,14,357.02,0,,,78.21,,,,,,,,118,,,,,,,,122.27,,,,,,,,51,,,,,,,,12,,,,,,,,56.64,,,,,,17.08718,2495.56239,356,902.70703,940.36,,0,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,272,275,258,11,243,247,247,24,, +D,DREGION,,3,"2023/12/14 11:00:00",1,TAS1,0,10.04328,0,10.04328,0,0,1062.92,1,600.92,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-5.84624,2373.34088,0,1067.76721,1062.92,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,4.55672,4.55672,0,187.108696,223.814815,159.698221,112.399912,27.553771,67.233997,65.079519,49.999997,, +D,DREGION,,3,"2023/12/14 11:00:00",1,VIC1,0,-37.3,0,-37.3,0,0,3884.84,-24,4045.84,34,127,0,,,47.8,,,,,,,,63.57,,,,,,,,57.8,,,,,,,,63,,,,,,,,75,,,,,,,,0,,,,,,-21.66283,8918.26129,428,3960.13501,3954.24,,133.38,,,,52,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,710,863,805,362.6250,150.62,168.62,158.62,364.222052,, +D,DREGION,,3,"2023/12/14 11:05:00",1,NSW1,0,299.99,0,299.99,0,0,8529.88,26,8631.35,5,96.46,0,,,93,,,,,,,,125.9,,,,,,,,136,,,,,,,,78,,,,,,,,66,,,,,,,,38,,,,,,46.31811,14651.5354,148,8483.70801,8556.35,,40,,,,26.6,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0,420,425,672,189.708238,408,519,396.361330,421.934061,, +D,DREGION,,3,"2023/12/14 11:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,5627.68,-29,6717.17,301.57,787.92,0,,,0,,,,,,,,15,,,,,,,,15,,,,,,,,64,,,,,,,,30,,,,,,,,43.72,,,,,,-17.14317,11092.81106,365,5964.47119,5942.86,,60.43,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0,318,427,155,279.993582,52.430930,62.430930,62.430930,76.431950,, +D,DREGION,,3,"2023/12/14 11:05:00",1,SA1,0,-49.70384,0,-49.70384,0,0,916.16,2,1280.56,193,171.4,0,,,93.8,,,,,,,,95,,,,,,,,91,,,,,,,,56,,,,,,,,73,,,,,,,,71,,,,,,19.66968,2686.78214,356,915.01941,1110.56,,60,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0,270,277,259,264,159,163,163,156,, +D,DREGION,,3,"2023/12/14 11:05:00",1,TAS1,0,10.04328,0,10.04328,0,0,1048.52,1,586.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-7.37174,2362.94467,0,1054.88928,1048.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,3,3,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0,187.108696,223.814815,155.625301,99.443683,25.966753,65.112528,61.021574,50.000001,, +D,DREGION,,3,"2023/12/14 11:05:00",1,VIC1,0,-52.68,0,-52.68,0,0,3852.2,-19,3594.56,282,-539.63,0,,,40,,,,,,,,98,,,,,,,,69,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,-23.09345,8906.91958,428,3959.22925,4151.87,,44.95,,,,118.4,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,0.95,0.95,0,0.39,0.39,0,29.56,29.56,0,714,867,809,588.437103,99,99,89,171.220052,, +D,DREGION,,3,"2023/12/14 11:10:00",1,NSW1,0,120.89,0,120.89,0,0,8587.34,28,8686.07,9,89.72,0,,,113,,,,,,,,133.96,,,,,,,,114.56,,,,,,,,78,,,,,,,,39,,,,,,,,38,,,,,,47.30477,14671.51506,153,8538.74609,8620.9,,40,,,,76,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,420,425,678,280.443930,409,519,435.013980,435.510734,, +D,DREGION,,3,"2023/12/14 11:10:00",1,QLD1,0,-10,0,-10,0,0,5718.02,-21,6827.25,318,791.23,0,,,0,,,,,,,,18,,,,,,,,18,,,,,,,,6.04,,,,,,,,33.87,,,,,,,,34.87,,,,,,0,11115.25517,365,6040.63818,6049.29,,0,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,318,427,155,299.993582,76.430930,96.430930,74.430930,60,, +D,DREGION,,3,"2023/12/14 11:10:00",1,SA1,0,-50,0,-50,0,0,913.47,3,1268.48,197,158.02,0,,,66.13,,,,,,,,84,,,,,,,,81,,,,,,,,55,,,,,,,,72,,,,,,,,74,,,,,,6.8957,2788.94375,361,1087.02112,1112.38,,20,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,273,279,261,369,189,192,192,158,, +D,DREGION,,3,"2023/12/14 11:10:00",1,TAS1,0,10.04328,0,10.04328,0,0,1051.27,1,589.27,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.64,,,,,,,,136.64,,,,,,,,136.64,,,,,,-7.92989,2361.84948,0,1058.19873,1051.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.96,0.96,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0,187.108696,223.814815,159.534841,95.081068,27.490112,67.1489,64.916744,50,, +D,DREGION,,3,"2023/12/14 11:10:00",1,VIC1,0,-51.38797,0,-51.38797,0,0,3940.75,-17,3556.23,130,-514.52,0,,,50,,,,,,,,98,,,,,,,,98,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,0,8844.85095,428,4172.646,4093.46,,145.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.96,0.96,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,718,871,813,436.704528,113.62,113.62,103.62,301.223052,, +D,DREGION,,3,"2023/12/14 11:15:00",1,NSW1,0,137.69,0,137.69,0,0,8701.82,35,8979.47,9,268.66,0,,,113,,,,,,,,141.63,,,,,,,,123.93,,,,,,,,68,,,,,,,,39,,,,,,,,35.43,,,,,,48.29143,14744.52124,153,8636.34863,8740.19,,49,,,,46,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,424,429,442,280.165030,408,518,449,433.570018,, +D,DREGION,,3,"2023/12/14 11:15:00",1,QLD1,0,-2.02,0,-2.02,0,0,5766.29,-8,6858.38,315,777.09,0,,,0,,,,,,,,22,,,,,,,,17,,,,,,,,64,,,,,,,,1.55,,,,,,,,0,,,,,,-14.76639,11119.59228,365,6103.95898,6093.39,,0,,,,45,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,258,322,95,234.993582,66.430930,86.430930,74.430930,63,, +D,DREGION,,3,"2023/12/14 11:15:00",1,SA1,0,-51.16156,0,-51.16156,0,0,936.97,3,1287.33,194,156.36,0,,,63.28,,,,,,,,82,,,,,,,,85,,,,,,,,59,,,,,,,,81,,,,,,,,76,,,,,,10.78839,2815.0426,356,1122.40417,1132.46,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,275,285,262,359,193,197,197,161,, +D,DREGION,,3,"2023/12/14 11:15:00",1,TAS1,0,10.04328,0,10.04328,0,0,1040.49,0,578.49,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.34,,,,,,,,136.34,,,,,,,,136.34,,,,,,-8.65353,2356.58938,0,1049.14722,1040.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,0.95,0.95,0,0,0,0,4.55672,4.55672,0,187.108696,223.814815,154.031021,101.728889,25.345537,64.282108,59.433149,49.999999,, +D,DREGION,,3,"2023/12/14 11:15:00",1,VIC1,0,-54.25,0,-54.25,0,0,3835.64,-18,3297.5,129,-667.14,0,,,54.94,,,,,,,,89.94,,,,,,,,85.94,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-27.63734,8913.42773,428,4055.10376,3994.64,,136.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.19,1.19,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,715,868,810,390.722382,122.62,122.62,112.62,302.221052,, +D,DREGION,,3,"2023/12/14 11:20:00",1,NSW1,0,137.69,0,137.69,0,0,8745.55,37,9060.81,5,310.27,0,,,90,,,,,,,,109,,,,,,,,106.25,,,,,,,,60.37,,,,,,,,45,,,,,,,,44,,,,,,47.6133,15057.00435,148,8688.94336,8778.91,,62,,,,60.77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,431,436,689,315.450137,385,495,426,394.819025,, +D,DREGION,,3,"2023/12/14 11:20:00",1,QLD1,0,-9.99998,0,-9.99998,0,0,5777.58,0,6852.23,315,759.66,0,,,27,,,,,,,,27,,,,,,,,17,,,,,,,,64,,,,,,,,51.71,,,,,,,,41.3,,,,,,-6.58144,11146.69502,365,6096.75293,6103.84,,0,,,,34,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,258,322,95,234.993582,66.430930,86.430930,74.430930,63,, +D,DREGION,,3,"2023/12/14 11:20:00",1,SA1,0,-52.7224,0,-52.7224,0,0,911.15,1,1300.17,183,206.02,0,,,67.92,,,,,,,,98,,,,,,,,94,,,,,,,,46,,,,,,,,79,,,,,,,,71,,,,,,0.39536,2827.22118,361,1105.11877,1096.44,,34.38,,,,27.23,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,273,286,262,359,187.62,191.62,191.62,166,, +D,DREGION,,3,"2023/12/14 11:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1024.2,-1,562.2,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-8.09596,2357.6446,0,1033.29236,1024.2,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,0.86,0.86,0,0,0,0,54.61,54.61,0,187.108696,223.814815,142.744681,114.306337,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 11:20:00",1,VIC1,0,-56.79,0,-56.79,0,0,3820.29,-16,3158.94,78.52,-739.88,0,,,40,,,,,,,,95.25,,,,,,,,88,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,-16.12591,9115.61474,428,3999.2395,3930.97,,109,,,,48,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0.01,0.01,0,4,4,0,1.19,1.19,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,714,867,809,401.406708,159,161,151,332.226052,, +D,DREGION,,3,"2023/12/14 11:25:00",1,NSW1,0,137.69,0,137.69,0,0,8794.06,38,9121.66,5,322.6,0,,,113,,,,,,,,143.75,,,,,,,,132.15,,,,,,,,55,,,,,,,,43,,,,,,,,42,,,,,,48.72299,15106.82157,148,8739.00684,8825.63,,56,,,,55,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0,429,434,687,387.474267,409,518,449,422.192527,, +D,DREGION,,3,"2023/12/14 11:25:00",1,QLD1,0,-10.4,0,-10.4,0,0,5793.27,7,6844.66,300,751.38,0,,,0,,,,,,,,27,,,,,,,,17,,,,,,,,64,,,,,,,,43.7,,,,,,,,42.15,,,,,,-15.38242,11165.25074,365,6117.00684,6103.97,,32,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0,258,323,95,234.993582,74.430930,94.430930,74.430930,78,, +D,DREGION,,3,"2023/12/14 11:25:00",1,SA1,0,-48.92353,0,-48.92353,0,0,895.58,-3,1286.24,199,191.67,0,,,64.35,,,,,,,,91,,,,,,,,88,,,,,,,,43.3,,,,,,,,81,,,,,,,,73,,,,,,1.85973,2821.44081,362,1081.57031,1097.31,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0,275,288,265,370,166,169,169,162,, +D,DREGION,,3,"2023/12/14 11:25:00",1,TAS1,0,-38.79281,0,-38.79281,0,0,1021.68,-2,587.06,0,-434.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,9.86,,,,,,,,109.85,,,,,,,,109.85,,,,,,-8.37048,2375.36157,0,1032.05176,1021.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.19,1.19,0,1,1,0,0,0,0,53.39281,53.39281,0,187.108696,223.814815,141.944681,69.344950,21.643447,59.203361,49.008801,49.999997,, +D,DREGION,,3,"2023/12/14 11:25:00",1,VIC1,0,-52.69,0,-52.69,0,0,3776.81,-16,3230.67,215,-761.14,0,,,51.39,,,,,,,,71.39,,,,,,,,71.39,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-14.45824,9152.85788,428,3916.70435,4021.69,,40,,,,70,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,1.19,1.19,0,1,1,0,0.39,0.39,0,16.73,16.73,0,717,870,812,509.114319,112,112,102,226.226052,, +D,DREGION,,3,"2023/12/14 11:30:00",1,NSW1,0,137.69,0,137.69,0,0,8872.75,38,9153.77,4,277.01,0,,,113,,,,,,,,109.05,,,,,,,,106,,,,,,,,78,,,,,,,,66,,,,,,,,38,,,,,,48.97839,15082.1553,147,8813.3457,8903.1,,40,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0,425,430,683,411.341988,409,518,449,426.376125,, +D,DREGION,,3,"2023/12/14 11:30:00",1,QLD1,0,-10,0,-10,0,0,5806.86,16,6886.18,300,779.32,0,,,0,,,,,,,,27,,,,,,,,8.15,,,,,,,,62,,,,,,,,25.57,,,,,,,,63.57,,,,,,-17.34456,11213.89681,365,6114.35449,6118.46,,35,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0,236,284,93,219.996791,74.430930,94.430930,74.430930,78,, +D,DREGION,,3,"2023/12/14 11:30:00",1,SA1,0,-49.8396,0,-49.8396,0,0,853.26,-8,1258.12,188,216.86,0,,,61.22,,,,,,,,74,,,,,,,,72,,,,,,,,60,,,,,,,,81,,,,,,,,73,,,,,,7.30374,2763.32065,362,1052.17261,1044.77,,77,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0,275,288,266,359,150,152,152,173,, +D,DREGION,,3,"2023/12/14 11:30:00",1,TAS1,0,-40.01,0,-40.01,0,0,1013.67,-2,563.05,0,-450.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,25.41,,,,,,,,125.41,,,,,,,,125.41,,,,,,-5.77138,2358.63734,0,1021.44092,1013.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.84,1.84,0,0.95,0.95,0,0,0,0,54.61,54.61,0,187.108696,223.814815,141.904681,118.686297,21.678230,59.243361,49.049827,49.999996,, +D,DREGION,,3,"2023/12/14 11:30:00",1,VIC1,0,-54.25,0,-54.25,0,0,3752.56,-15,3211.2,209,-750.36,0,,,53.38,,,,,,,,121.38,,,,,,,,121.38,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-5.89503,9183.95636,428,3984.14966,3992.32,,42,,,,64,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,17.33448,17.33448,0,676,809,751,478.332764,111,111,101,226.223052,, +D,DREGION,,3,"2023/12/14 11:35:00",1,NSW1,0,137.69,0,137.69,0,0,9033.06,46,9144.45,4,107.39,0,,,86,,,,,,,,129.54,,,,,,,,114.89,,,,,,,,78,,,,,,,,39,,,,,,,,38,,,,,,49.2338,15237.07385,147,8956.69141,9050.05,,70,,,,71,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0,425,430,683,392.990321,398,508,439,366.511558,, +D,DREGION,,3,"2023/12/14 11:35:00",1,QLD1,0,-10,0,-10,0,0,5873.42,20,6922.53,315,734.11,0,,,11.56,,,,,,,,27,,,,,,,,17,,,,,,,,18.97,,,,,,,,52.96,,,,,,,,32.19,,,,,,-17.077,11267.62437,365,6179.31885,6197.61,,0,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0,256,319,112,236.043570,70.002490,90.002490,68.002490,63,, +D,DREGION,,3,"2023/12/14 11:35:00",1,SA1,0,-49.31059,0,-49.31059,0,0,826.12,-12,1215.53,149,240.42,0,,,71,,,,,,,,71,,,,,,,,69,,,,,,,,61,,,,,,,,79,,,,,,,,71,,,,,,12.74776,2775.91991,362,1017.87421,977.9,,20,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0,273,286,267,366,202,204,204,184,, +D,DREGION,,3,"2023/12/14 11:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,991.72,-3,532.86,0,-458.86,0,,,0,,,,,,,,7,,,,,,,,7.75,,,,,,,,33.8,,,,,,,,133.8,,,,,,,,133.8,,,,,,-9.36492,2394.7235,0,1004.08484,991.72,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,1,1,0,0,0,0,53.61,53.61,0,187.108696,223.814815,142.744681,117.294117,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 11:35:00",1,VIC1,0,-53.66,0,-53.66,0,0,3592.65,-15,3239.44,226,-579.21,0,,,56.48,,,,,,,,93.48,,,,,,,,94.48,,,,,,,,95,,,,,,,,95,,,,,,,,95,,,,,,-2.1727,9189.72543,428,3830.70459,3837.53,,112.24,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,1,1,0,0.39,0.39,0,7.5,7.5,0,643,648,640,395.661316,99,99,89,208.218052,, +D,DREGION,,3,"2023/12/14 11:40:00",1,NSW1,0,139.96017,0,139.96017,0,0,9143.45,53,9157.63,4,10.18,0,,,118,,,,,,,,111.79,,,,,,,,130,,,,,,,,51,,,,,,,,39,,,,,,,,38,,,,,,45.77327,15219.86758,147,9056.52441,9153.28,,37,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0,425,430,683,448.489635,413,523,454,353.079602,, +D,DREGION,,3,"2023/12/14 11:40:00",1,QLD1,0,-10,0,-10,0,0,5875.07,25,6886.51,315,696.44,0,,,0,,,,,,,,28,,,,,,,,0,,,,,,,,61,,,,,,,,16.1,,,,,,,,17,,,,,,-1.6901,11207.18394,365,6165.04639,6197.7,,0,,,,34,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0,256,319,112,220,60.002490,80.002490,68.002490,63,, +D,DREGION,,3,"2023/12/14 11:40:00",1,SA1,0,-52.1953,0,-52.1953,0,0,795.5,-15,1199.02,143,260.51,0,,,54.72,,,,,,,,85,,,,,,,,74.39,,,,,,,,53,,,,,,,,81,,,,,,,,73,,,,,,18.19177,2820.04382,362,946.69238,941.62,,26,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0,275,288,272,444,216,218,218,218,, +D,DREGION,,3,"2023/12/14 11:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,994.76,-3,532.76,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-13.97975,2405.89665,0,1011.73737,994.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,53.61,53.61,0,187.108696,223.814815,142.744681,114.306217,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 11:40:00",1,VIC1,0,-56.79,0,-56.79,0,0,3566.57,-22,3179.46,87,-474.11,0,,,57.69,,,,,,,,103.69,,,,,,,,97.69,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,-6.48796,9198.22497,428,3806.79736,3668,,142.38,,,,45,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,3.95,3.95,0,0.95,0.95,0,0.39,0.39,0,5.7,5.7,0,718,871,813,329.736542,151.655425,151.655425,141.655425,324.214052,, +D,DREGION,,3,"2023/12/14 11:45:00",1,NSW1,0,120.89,0,120.89,0,0,9023.57,51,9066.81,4,39.24,0,,,113,,,,,,,,135,,,,,,,,122,,,,,,,,77,,,,,,,,41.75,,,,,,,,38,,,,,,46.64799,15294.25272,147,8935.4502,9032.43,,34,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0,425,429,682,405.384049,408,518,449,413.225598,, +D,DREGION,,3,"2023/12/14 11:45:00",1,QLD1,0,-10,0,-10,0,0,5895.79,22,6864.01,300,668.22,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.8,,,,,,,,71,,,,,,,,46.93,,,,,,6.18026,11179.96258,365,6179.24365,6202.73,,36,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0,216,248,92,204.996791,74.428440,94.428440,74.428440,78,, +D,DREGION,,3,"2023/12/14 11:45:00",1,SA1,0,-49.33602,0,-49.33602,0,0,796.27,-15,1244.33,185,263.06,0,,,43.27,,,,,,,,93.22,,,,,,,,66,,,,,,,,68,,,,,,,,85,,,,,,,,73,,,,,,21.25483,2851.68817,362,938.7475,985.26,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0,275,288,274,486,177,178,178,176,, +D,DREGION,,3,"2023/12/14 11:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1026.65,-2,591.03,0,-435.62,0,,,0,,,,,,,,31,,,,,,,,21.02,,,,,,,,10.71,,,,,,,,110.7,,,,,,,,110.7,,,,,,-10.90007,2405.68223,0,1039.5498,1026.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,1.75,1.75,0,0,0,0,53.61,53.61,0,187.108696,223.814815,142.664681,123.305007,21.017360,58.483361,48.270339,49.999995,, +D,DREGION,,3,"2023/12/14 11:45:00",1,VIC1,0,-54.25,0,-54.25,0,0,3584.51,-18,3262.77,183,-504.74,0,,,71.25,,,,,,,,71.25,,,,,,,,97.25,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,-11.3744,9226.47819,425,3771.75928,3781.89,,59,,,,85,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,1,1,0,0.39,0.39,0,1.84,1.84,0,0.39,0.39,0,17.11043,17.11043,0,705,740,732,449.842896,110,110,100,239.218052,, +D,DREGION,,3,"2023/12/14 11:50:00",1,NSW1,0,137.69,0,137.69,0,0,9154.43,46,9180.04,9,16.61,0,,,113,,,,,,,,138.13,,,,,,,,105,,,,,,,,77,,,,,,,,65,,,,,,,,38,,,,,,47.52272,15371.75784,153,9072.63086,9163.32,,50,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,425,429,682,418.277513,408,518,449,437.967297,, +D,DREGION,,3,"2023/12/14 11:50:00",1,QLD1,0,-20.5,0,-20.5,0,0,5937.1,25,6857.49,315,605.39,0,,,0,,,,,,,,27,,,,,,,,0,,,,,,,,61,,,,,,,,23.15,,,,,,,,18.77,,,,,,3.62842,11270.63416,365,6210.11426,6256.74,,0,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,256,318,132,234.996791,66.428440,86.428440,74.428440,63,, +D,DREGION,,3,"2023/12/14 11:50:00",1,SA1,0,-54.68294,0,-54.68294,0,0,781.81,-16,1110.43,183,145.62,0,,,41.37,,,,,,,,67,,,,,,,,98,,,,,,,,70,,,,,,,,80,,,,,,,,72,,,,,,24.31789,2802.71573,362,957.66907,966.65,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,273,286,275,488.700440,206,207,207,172,, +D,DREGION,,3,"2023/12/14 11:50:00",1,TAS1,0,-40.01,0,-40.01,0,0,1040.07,-2,578.07,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,36.79,,,,,,,,136.79,,,,,,,,136.79,,,,,,-0.95257,2383.54293,0,1043.02588,1040.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,53.61,53.61,0,187.108696,223.814815,142.664681,114.306237,21.017360,58.483361,48.270339,49.999995,, +D,DREGION,,3,"2023/12/14 11:50:00",1,VIC1,0,-58.25,0,-58.25,0,0,3579,-13,3371.11,81,-288.89,0,,,74.3,,,,,,,,94.3,,,,,,,,98.24,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-10.20585,9321.36993,424,3755.39648,3670.37,,135.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,1.84,1.84,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,696,839,781,331.581330,131.62,131.62,121.62,320.219052,, +D,DREGION,,3,"2023/12/14 11:55:00",1,NSW1,0,137.69,0,137.69,0,0,9128.08,53,9000.13,8,-135.95,0,,,113,,,,,,,,132,,,,,,,,122,,,,,,,,81,,,,,,,,42,,,,,,,,43,,,,,,48.14204,15350.64528,152,9026.875,9134.39,,35,,,,33,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0,430,434,686,399.676601,408,518,449,438.008024,, +D,DREGION,,3,"2023/12/14 11:55:00",1,QLD1,0,-10,0,-10,0,0,6028.41,25,6926.72,296.7,601.61,0,,,0,,,,,,,,16.57,,,,,,,,3.76,,,,,,,,61,,,,,,,,71,,,,,,,,63.59,,,,,,-9.41484,11339.79345,365,6328.73486,6329.36,,42.3,,,,25,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0,225,248,92,182.996791,83.428440,94.428440,74.428440,81.304420,, +D,DREGION,,3,"2023/12/14 11:55:00",1,SA1,0,-51.89853,0,-51.89853,0,0,765.64,-16,1143.99,195,183.35,0,,,53.18,,,,,,,,91,,,,,,,,90,,,,,,,,72,,,,,,,,81,,,,,,,,73,,,,,,0,2829.24583,362,968.4126,963.57,,50,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0,275,288,278,472,169,170,170,160,, +D,DREGION,,3,"2023/12/14 11:55:00",1,TAS1,0,-40.01,0,-40.01,0,0,1047.34,-2,600.42,0,-446.92,0,,,0,,,,,,,,19.29,,,,,,,,19.69,,,,,,,,22.16,,,,,,,,122.16,,,,,,,,122.16,,,,,,-1.11076,2407.03718,0,1050.45349,1047.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0,0,0,53.61,53.61,0,187.108696,223.814815,142.624681,121.936247,21.052143,58.523361,48.311365,49.999997,, +D,DREGION,,3,"2023/12/14 11:55:00",1,VIC1,0,-55.85986,0,-55.85986,0,0,3465.75,-13,3490.55,211,-186.21,0,,,61.63,,,,,,,,71.63,,,,,,,,71.63,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,-10.17262,9301.38657,421,3602.80737,3687.13,,63,,,,92,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1,1,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,19.06,19.06,0,705,740,732,516.193664,98,98,88,235.219052,, +D,DREGION,,3,"2023/12/14 12:00:00",1,NSW1,0,137.69,0,137.69,0,0,9211.15,53,9058.54,8,-160.61,0,,,113,,,,,,,,150.17,,,,,,,,125.37,,,,,,,,82,,,,,,,,45,,,,,,,,43,,,,,,40.86409,15434.82705,152,9122.77637,9216.68,,30,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0,430,435,687,404.420680,408,518,449,432.657468,, +D,DREGION,,3,"2023/12/14 12:00:00",1,QLD1,0,-20.5,0,-20.5,0,0,6021.92,25,6913.72,315,576.8,0,,,27,,,,,,,,20,,,,,,,,27,,,,,,,,61,,,,,,,,91,,,,,,,,48.71,,,,,,-0.17684,11372.43045,365,6296.97314,6340.42,,0,,,,59,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0,265,318,132,214.004561,75.428440,86.428440,74.428440,63,, +D,DREGION,,3,"2023/12/14 12:00:00",1,SA1,0,-51.46728,0,-51.46728,0,0,805.09,-11,1110.68,187,118.58,0,,,47.74,,,,,,,,100,,,,,,,,99,,,,,,,,72,,,,,,,,81.65,,,,,,,,73,,,,,,13.09524,2803.04179,362,1000.21423,993.87,,26.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0,275,288,278,464,200.62,201.62,201.62,168,, +D,DREGION,,3,"2023/12/14 12:00:00",1,TAS1,0,11.05967,0,11.05967,0,0,1064.05,-1,602.05,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,37.38,,,,,,,,137.38,,,,,,,,137.38,,,,,,5.22435,2395.30569,0,1059.82837,1064.05,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.54033,2.54033,0,187.108696,223.814815,153.549741,101.117431,25.296533,64.198735,59.176076,50.000005,, +D,DREGION,,3,"2023/12/14 12:00:00",1,VIC1,0,-54.25,0,-54.25,0,0,3504.72,-15,3516.37,72,-60.35,0,,,40,,,,,,,,55,,,,,,,,50,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,6.32344,9330.45826,421,3673.82593,3586.33,,149,,,,15,,,,,,,,,,,,,,,,,,,0,0,0,0.01,0.01,0,0,0,0,4,4,0,1.19,1.19,0,1,1,0,0.39,0.39,0,3.99,3.99,0,665,680,672,323.149780,114,114,104,320.590052,, +D,DREGION,,3,"2023/12/14 12:05:00",1,NSW1,0,137.69,0,137.69,0,0,9292.36,59,9087.42,4,-208.94,0,,,139,,,,,,,,181,,,,,,,,131,,,,,,,,83,,,,,,,,71,,,,,,,,44,,,,,,42.79962,15254.86109,147,9190.22461,9291.71,,40,,,,46.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0,431,435,688,333.019207,408,518,449,432.916297,, +D,DREGION,,3,"2023/12/14 12:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,6067.45,21,6892.53,315,510.08,0,,,0,,,,,,,,1.36,,,,,,,,0,,,,,,,,61,,,,,,,,91,,,,,,,,39.86,,,,,,-11.0679,11397.878,365,6355.81201,6384.14,,15.38,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0,265,318,132,234.996791,75.428440,86.428440,74.428440,63,, +D,DREGION,,3,"2023/12/14 12:05:00",1,SA1,0,-50.51488,0,-50.51488,0,0,812.76,-6,1146.13,240,93.38,0,,,36,,,,,,,,63,,,,,,,,90.76,,,,,,,,71,,,,,,,,53.73,,,,,,,,72,,,,,,10.38768,2842.94259,362,997.20276,1053.48,,20,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0,273,286,276,530,133,134,134,102,, +D,DREGION,,3,"2023/12/14 12:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1050.91,0,588.91,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.64,,,,,,,,136.64,,,,,,,,136.64,,,,,,5.51602,2404.48214,0,1045.39722,1050.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,1.84,1.84,0,4.89,4.89,0,0,0,0,54.61,54.61,0,187.108696,223.814815,142.744681,114.454927,20.947795,58.403361,48.188288,50,, +D,DREGION,,3,"2023/12/14 12:05:00",1,VIC1,0,-52.69,0,-52.69,0,0,3524.21,-5,3658.85,61,73.64,0,,,48.17,,,,,,,,79,,,,,,,,79,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,10.70205,9308.93493,421,3632.13403,3593.6,,130,,,,39.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,1.84,1.84,0,4.89,4.89,0,0.17,0.17,0,3.99,3.99,0,694,837,779,345.592407,143,143,133,326.215052,, +D,DREGION,,3,"2023/12/14 12:10:00",1,NSW1,0,137.69,0,137.69,0,0,9531.43,68,9152.61,4,-382.82,0,,,130.67,,,,,,,,161,,,,,,,,131,,,,,,,,82,,,,,,,,71,,,,,,,,21.55,,,,,,38.32835,15136.12112,147,9426.28809,9533.36,,40,,,,63.07,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0,374.272520,378.272520,630.272520,358.859496,408,518,449,424.691211,, +D,DREGION,,3,"2023/12/14 12:10:00",1,QLD1,0,-20.5,0,-20.5,0,0,6078.33,18,6882.42,315,489.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23.96,,,,,,,,78.22,,,,,,,,131,,,,,,0,11350.40066,365,6362.08008,6394.18,,0,,,,33.93,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0,345,460,172,293.910232,75.430930,86.430930,74.430930,63,, +D,DREGION,,3,"2023/12/14 12:10:00",1,SA1,0,-49.45771,0,-49.45771,0,0,793.09,-4,1207.7,226,188.61,0,,,45,,,,,,,,63.75,,,,,,,,72,,,,,,,,72,,,,,,,,39,,,,,,,,73,,,,,,0,2854.93389,362,1030.01294,1020.74,,33.38,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0,275,288,278,521,143,144,144,135,, +D,DREGION,,3,"2023/12/14 12:10:00",1,TAS1,0,-40.01,0,-40.01,0,0,1019.22,-1,557.22,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-2.19185,2407.17901,0,1022.41589,1019.22,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.83,1.83,0,1.84,1.84,0,0,0,0,54.61,54.61,0,187.108696,223.814815,142.334681,58.1605,21.304317,58.813361,48.608801,49.999996,, +D,DREGION,,3,"2023/12/14 12:10:00",1,VIC1,0,-52.68,0,-52.68,0,0,3535.76,-1,3737.32,19,182.56,0,,,48,,,,,,,,99.17,,,,,,,,96.03,,,,,,,,66,,,,,,,,66,,,,,,,,0,,,,,,18.07429,9296.53365,421,3582.52539,3569.78,,132,,,,53,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,1.83,1.83,0,1.84,1.84,0,0.15,0.15,0,3.99,3.99,0,715,868,810,346.046601,160.127036,160.127036,150.127036,325.217052,, +D,DREGION,,3,"2023/12/14 12:15:00",1,NSW1,0,137.69,0,137.69,0,0,9598.96,76,9104.76,5,-499.2,0,,,118.53,,,,,,,,135.15,,,,,,,,125.15,,,,,,,,82,,,,,,,,71,,,,,,,,44,,,,,,22.88693,15156.49927,148,9502.66113,9605.27,,45.85,,,,66,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0,365,369,621,360.506094,412.153230,522.153230,453.153230,420.044847,, +D,DREGION,,3,"2023/12/14 12:15:00",1,QLD1,0,-10,0,-10,0,0,6102.03,23,6918.33,315,501.29,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,99,,,,,,,,40.35,,,,,,-30.62959,11340.96987,365,6415.92773,6417.82,,30,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0,325,424,172,265,77.002490,88.002490,68.002490,63,, +D,DREGION,,3,"2023/12/14 12:15:00",1,SA1,0,-44.60717,0,-44.60717,0,0,801.68,-2,1227.75,238.78,187.29,0,,,45.22,,,,,,,,61.22,,,,,,,,72.22,,,,,,,,71,,,,,,,,79,,,,,,,,73,,,,,,4.941,2858.63144,362,1029.33887,1042.03,,34.53,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0,275,286,277,535,140.686590,141.686590,141.686590,121,, +D,DREGION,,3,"2023/12/14 12:15:00",1,TAS1,0,-40.01,0,-40.01,0,0,1006.36,-2,544.36,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,-9.89971,2398.68775,0,1018.25671,1006.36,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.77,0.77,0,0.85,0.85,0,0,0,0,54.61,54.61,0,187.108696,223.814815,142.224681,114.157737,21.399969,58.923361,48.721622,49.999996,, +D,DREGION,,3,"2023/12/14 12:15:00",1,VIC1,0,-47.51074,0,-47.51074,0,0,3520.38,2,3845.58,30,295.21,0,,,61,,,,,,,,128.36,,,,,,,,101.66,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,15.29669,9349.10815,421,3534.46167,3569.3,,95,,,,54,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,3.38,3.38,0,0.77,0.77,0,0.85,0.85,0,0.01,0.01,0,9.88,9.88,0,715,868,810,362.182678,188,188,178,325.215052,, +D,DREGION,,3,"2023/12/14 12:20:00",1,NSW1,0,137.69,0,137.69,0,0,9493.45,75,8980.7,5,-517.75,0,,,139,,,,,,,,158,,,,,,,,121,,,,,,,,81,,,,,,,,71,,,,,,,,44,,,,,,0,15303.5368,148,9425.5918,9500.12,,40,,,,87.11,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,365,369,620,337.873368,408,518,449,419.449109,, +D,DREGION,,3,"2023/12/14 12:20:00",1,QLD1,0,0,0,0,0,0,6190.47,25,7037.91,327,520.43,0,,,0,,,,,,,,0,,,,,,,,8,,,,,,,,61,,,,,,,,91,,,,,,,,47.3,,,,,,-34.99638,11286.16273,365,6517.17236,6518.49,,0,,,,38,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,265,319,140,195.221191,85.430930,96.430930,74.430930,51,, +D,DREGION,,3,"2023/12/14 12:20:00",1,SA1,0,-49.74313,0,-49.74313,0,0,783.25,-1,1192.68,236,173.43,0,,,31,,,,,,,,87,,,,,,,,70,,,,,,,,75,,,,,,,,81,,,,,,,,74,,,,,,0,2788.06181,362,1025.3457,1020.38,,29,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,273,285,278,535,128,129,129,121,, +D,DREGION,,3,"2023/12/14 12:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1044.77,-1,582.77,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,37.09,,,,,,,,137.08,,,,,,,,137.08,,,,,,-8.84805,2396.90001,0,1054.62048,1044.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,56.46,56.46,0,187.108696,226.756148,142.224681,62.858750,21.399969,58.923361,48.721622,49.999996,, +D,DREGION,,3,"2023/12/14 12:20:00",1,VIC1,0,-52.69,0,-52.69,0,0,3293.65,0,3611.34,10,307.69,0,,,53.64,,,,,,,,79.53,,,,,,,,99.73,,,,,,,,65,,,,,,,,65,,,,,,,,65,,,,,,0,9249.00974,422,3347.29614,3321.64,,136.38,,,,14.89,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,640,645,637,212.345428,150.471578,150.471578,140.471578,324.219052,, +D,DREGION,,3,"2023/12/14 12:25:00",1,NSW1,0,137.69,0,137.69,0,0,9539.41,68,9058.87,4,-484.55,0,,,119,,,,,,,,81.69,,,,,,,,71,,,,,,,,80,,,,,,,,70,,,,,,,,43,,,,,,23.52906,15088.81217,147,9451.87109,9543.99,,40,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,364,368,619,365.200569,338,418,349,345.619087,, +D,DREGION,,3,"2023/12/14 12:25:00",1,QLD1,0,0,0,0,0,0,6203.01,25,7020.47,332,485.46,0,,,10,,,,,,,,10,,,,,,,,0,,,,,,,,61,,,,,,,,121,,,,,,,,40.01,,,,,,-11.92416,11252.48907,365,6516.94385,6535.35,,0,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,325,425,180,248.136992,85.430930,96.430930,74.430930,46,, +D,DREGION,,3,"2023/12/14 12:25:00",1,SA1,0,-50.25219,0,-50.25219,0,0,815.95,-1,1169,213,140.05,0,,,38.3,,,,,,,,108,,,,,,,,121,,,,,,,,78,,,,,,,,81,,,,,,,,73,,,,,,11.64434,2827.32949,362,1043.17419,1029.72,,44,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,275,288,284,517,135,136,136,145,, +D,DREGION,,3,"2023/12/14 12:25:00",1,TAS1,0,8.16295,0,8.16295,0,0,1064.43,0,602.43,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,36.94,,,,,,,,136.93,,,,,,,,136.93,,,,,,0.01062,2380.94794,0,1064.41553,1064.43,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.95,0.95,0,0,0,0,8.28705,8.28705,0,187.108696,255.979650,154.262601,106.670631,34.286802,74.849168,72.078353,50,, +D,DREGION,,3,"2023/12/14 12:25:00",1,VIC1,0,-52.68,0,-52.68,0,0,3401.67,-4,3755.63,14,339.96,0,,,55.93,,,,,,,,123.93,,,,,,,,106.01,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,13.12872,9332.95338,423,3413.31006,3432.91,,121.38,,,,49,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.86,0.86,0,0.95,0.95,0,0.39,0.39,0,3.61,3.61,0,714,867,809,327.328736,143.62,143.62,133.62,327.218052,, +D,DREGION,,3,"2023/12/14 12:30:00",1,NSW1,0,137.69,0,137.69,0,0,9619.01,65,9134.93,4,-488.08,0,,,144,,,,,,,,163,,,,,,,,153,,,,,,,,82,,,,,,,,44,,,,,,,,44,,,,,,30.56192,15197.53174,147,9528.47852,9623.22,,35,,,,61,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,365,369,621,362.099391,413,523,454,423.148038,, +D,DREGION,,3,"2023/12/14 12:30:00",1,QLD1,0,-2.02,0,-2.02,0,0,6260.2,30,7063.61,315,488.41,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,99,,,,,,,,35.35,,,,,,-8.88122,11386.57427,365,6572.48828,6575.32,,0,,,,35,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,325,425,152,241.025392,75.430930,86.430930,74.430930,63,, +D,DREGION,,3,"2023/12/14 12:30:00",1,SA1,0,-47.70506,0,-47.70506,0,0,814.2,1,1192.6,225,153.41,0,,,47,,,,,,,,98.56,,,,,,,,83.86,,,,,,,,80,,,,,,,,81,,,,,,,,73,,,,,,3.39866,2812.53956,362,1026.5769,1039.98,,31,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,275,288,286,526,144,145,145,136,, +D,DREGION,,3,"2023/12/14 12:30:00",1,TAS1,0,-40.01,0,-40.01,0,0,1053.14,-1,591.14,0,-462,0,,,0,,,,,,,,0,,,,,,,,1,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-6.85774,2402.5877,0,1060.99585,1053.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,56.46,56.46,0,187.108696,255.697426,177.154681,114.588467,21.460838,58.993361,48.793416,49.999996,, +D,DREGION,,3,"2023/12/14 12:30:00",1,VIC1,0,-50.01,0,-50.01,0,0,3397.09,0,3745.71,22,326.62,0,,,33.4,,,,,,,,62.92,,,,,,,,62.92,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-6.39094,9306.86973,425,3430.21362,3436.33,,139.38,,,,44,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,3.61,3.61,0,695,838,780,316.554260,150.541535,150.541535,140.541535,329.214052,, +D,DREGION,,3,"2023/12/14 12:35:00",1,NSW1,0,89.03004,0,89.03004,0,0,9642.16,63,9156.69,1,-486.47,0,,,92,,,,,,,,111,,,,,,,,71,,,,,,,,81,,,,,,,,44,,,,,,,,23.25,,,,,,32.16431,15242.82616,148,9549.01758,9643.11,,67,,,,21.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0,365,369,620,287.458723,311,391,322,319.656016,, +D,DREGION,,3,"2023/12/14 12:35:00",1,QLD1,0,1,0,1,0,0,6311.74,29,7108.63,310.52,486.37,0,,,4.48,,,,,,,,23.48,,,,,,,,9.38,,,,,,,,61,,,,,,,,119,,,,,,,,131,,,,,,-17.75647,11358.90335,365,6614.21533,6622.22,,0,,,,65.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0,345,460,172,291.161102,64.915890,65.915890,43.915890,67.484960,, +D,DREGION,,3,"2023/12/14 12:35:00",1,SA1,0,-47.91851,0,-47.91851,0,0,822.36,1,1168.66,90,256.3,0,,,36,,,,,,,,83,,,,,,,,113,,,,,,,,64.84,,,,,,,,45.98,,,,,,,,72,,,,,,6.5041,2798.95849,182,1033.06299,916.11,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0,273,286,285,324,222,223,223,88,, +D,DREGION,,3,"2023/12/14 12:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1023.96,0,561.96,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-7.36746,2378.82357,0,1031.32581,1023.96,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,3.52,3.52,0,0,0,0,103.85597,103.85597,0,187.108696,249.852471,165.254671,80.100847,26.591282,64.893371,54.844709,50,, +D,DREGION,,3,"2023/12/14 12:35:00",1,VIC1,0,-52.68,0,-52.68,0,0,3425.19,0,3681.16,23,232.97,0,,,89.91,,,,,,,,104.05,,,,,,,,104.05,,,,,,,,65,,,,,,,,72,,,,,,,,0,,,,,,-3.64628,9266.96866,425,3455.57324,3471.71,,114.38,,,,53,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.73,7.73,0,0.39,0.39,0,3.52,3.52,0,0.39,0.39,0,3.61,3.61,0,715,868,810,349.669555,177.482876,179.482876,169.482876,330.204052,, +D,DREGION,,3,"2023/12/14 12:40:00",1,NSW1,0,100.02,0,100.02,0,0,9662.65,55,9173.34,0,-489.31,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,78,,,,,,,,66,,,,,,,,39,,,,,,0,15253.75102,147,9619.19043,9662.6,,57,,,,30.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,400,404,661,253.659126,381,491,401,421.542211,, +D,DREGION,,3,"2023/12/14 12:40:00",1,QLD1,0,-2.02,0,-2.02,0,0,6279.61,23,7083.84,315,489.23,0,,,0,,,,,,,,10.47,,,,,,,,0,,,,,,,,61,,,,,,,,10,,,,,,,,25.14,,,,,,-25.97095,11442.92058,365,6594.08789,6594.57,,0,,,,77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,245,283,140,219.996791,85.428440,96.428440,74.428440,63,, +D,DREGION,,3,"2023/12/14 12:40:00",1,SA1,0,-47.17342,0,-47.17342,0,0,840.61,2,1178.98,29,309.37,0,,,39.99,,,,,,,,79,,,,,,,,76.57,,,,,,,,81,,,,,,,,81,,,,,,,,73,,,,,,12.16146,2812.63935,123,923.37433,874.74,,24,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,275,288,287,322,225,226,220,90,, +D,DREGION,,3,"2023/12/14 12:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,1031.09,0,569.09,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.86926,2394.92735,0,1034.96069,1031.09,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0,187.108696,255.425204,170.154681,74.666275,27.547795,65.993361,55.972904,49.999996,, +D,DREGION,,3,"2023/12/14 12:40:00",1,VIC1,0,-52.69,0,-52.69,0,0,3423.66,1,3632.89,25,184.23,0,,,88.94,,,,,,,,98.94,,,,,,,,98.94,,,,,,,,66,,,,,,,,66,,,,,,,,66,,,,,,10.31963,9309.39697,425,3457.2478,3475.13,,124.38,,,,22.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.61,3.61,0,662,677,669,268.679969,138.62,140.62,130.62,331.202052,, +D,DREGION,,3,"2023/12/14 12:45:00",1,NSW1,0,100.02,0,100.02,0,0,9651.97,48,9178.5,10,-483.47,0,,,91,,,,,,,,131,,,,,,,,84.75,,,,,,,,80,,,,,,,,71,,,,,,,,44,,,,,,42.77483,15198.85274,147,9560.32422,9661.53,,47,,,,30.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0,405,409,669,306.722717,311,391,321,336.442879,, +D,DREGION,,3,"2023/12/14 12:45:00",1,QLD1,0,1,0,1,0,0,6390.06,26,7170.82,298,482.76,0,,,21.79,,,,,,,,22.15,,,,,,,,22,,,,,,,,61,,,,,,,,60.65,,,,,,,,51.72,,,,,,-29.8009,11359.93158,348,6691.65674,6687.79,,45,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0,345,460,172,246.823122,61.430930,61.430930,41.430930,63,, +D,DREGION,,3,"2023/12/14 12:45:00",1,SA1,0,-44.39563,0,-44.39563,0,0,826.22,2,1217.98,20,371.76,0,,,39,,,,,,,,78,,,,,,,,100,,,,,,,,81,,,,,,,,52,,,,,,,,73,,,,,,14.7213,2848.55573,117,844.65576,853.07,,68,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0,275,288,287,319,203,204,179,93,, +D,DREGION,,3,"2023/12/14 12:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1064.01,1,615.39,0,-448.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,26,,,,,,,,126,,,,,,,,126,,,,,,-3.25434,2404.46932,0,1066.26428,1064.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,9.11,9.11,0,3,3,0,8.68,8.68,0,0,0,0,80.67,80.67,0,187.108696,223.814815,118.744681,54.091837,29.643447,68.403361,58.444698,50,, +D,DREGION,,3,"2023/12/14 12:45:00",1,VIC1,0,-50.39,0,-50.39,0,0,3438.81,4,3701.59,150,112.78,0,,,68,,,,,,,,88,,,,,,,,88,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-5.37803,9249.73008,425,3488.9834,3617.89,,32,,,,119.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,2.64,2.64,0,3,3,0,8.68,8.68,0,0.39,0.39,0,12.19319,12.19319,0,715,868,810,445.595429,129,131,121,230.208052,, +D,DREGION,,3,"2023/12/14 12:50:00",1,NSW1,0,100,0,100,0,0,9729.03,43,9217.41,10,-521.62,0,,,101,,,,,,,,133.07,,,,,,,,121,,,,,,,,56,,,,,,,,44,,,,,,,,44,,,,,,38.00638,15212.37936,147,9653.18359,9738.99,,45,,,,30.02,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0,405,409,672,309.118285,383,493,413,387.325704,, +D,DREGION,,3,"2023/12/14 12:50:00",1,QLD1,0,86,0,86,0,0,6510.29,32,7271.82,240,521.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,27.25,,,,,,,,33.07,,,,,,-9.24341,11310.59544,292,6783.08545,6750.25,,57,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0,305,388,200,150.948346,103.60,103.60,66,123,, +D,DREGION,,3,"2023/12/14 12:50:00",1,SA1,0,-44.15352,0,-44.15352,0,0,795.88,-1,1200.64,14,390.76,0,,,34,,,,,,,,74,,,,,,,,72.67,,,,,,,,65,,,,,,,,78,,,,,,,,71,,,,,,18.11712,2859.33053,118,805.72375,817.12,,94.38,,,,25.98,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0,272,284,283,315,178.62,179.62,153.62,103,, +D,DREGION,,3,"2023/12/14 12:50:00",1,TAS1,0,7.14656,0,7.14656,0,0,1063.52,2,601.52,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.1859,2392.43972,0,1069.70874,1063.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.95,0.95,0,0,0,0,10.30344,10.30344,0,187.108696,255.937199,172.259011,81.252031,23.120337,61.307540,53.743397,50,, +D,DREGION,,3,"2023/12/14 12:50:00",1,VIC1,0,-50.39,0,-50.39,0,0,3501.98,7,3759.42,148,109.44,0,,,83.89,,,,,,,,110.48,,,,,,,,100.48,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,1.96169,9347.97124,425,3585.87891,3680.94,,9,,,,114,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,4,4,0,0.39,0.39,0,0.95,0.95,0,0.3,0.3,0,3.99,3.99,0,713,866,808,439.768829,187.478232,189.478232,179.478232,229.205052,, +D,DREGION,,3,"2023/12/14 12:55:00",1,NSW1,0,89.03,0,89.03,0,0,9617.41,38,9159.13,1,-459.29,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,82,,,,,,,,70,,,,,,,,43,,,,,,0,15314.08735,148,9591.64063,9617.13,,51.38,,,,33.05,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0,364,368,621,288.735599,386.62,496.62,392.924680,330.789257,, +D,DREGION,,3,"2023/12/14 12:55:00",1,QLD1,0,85.75,0,85.75,0,0,6523.56,37,7220.77,240,457.21,0,,,22,,,,,,,,19.38,,,,,,,,22,,,,,,,,61,,,,,,,,20,,,,,,,,28.46,,,,,,1.72805,11235.75351,290,6724.37646,6762.77,,10,,,,32,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0,325,424,200,188.996791,177.796820,235.196850,146.796820,128.365890,, +D,DREGION,,3,"2023/12/14 12:55:00",1,SA1,0,-44.68292,0,-44.68292,0,0,724.76,-5,1250.73,19,506.97,0,,,49.07,,,,,,,,101,,,,,,,,84.28,,,,,,,,80,,,,,,,,80,,,,,,,,73,,,,,,14.70237,2900.76856,116,744.57324,755.78,,22,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0,275,287,286,316,224,225,198,96,, +D,DREGION,,3,"2023/12/14 12:55:00",1,TAS1,0,7.14656,0,7.14656,0,0,1059.58,1,597.58,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-8.29941,2390.25634,0,1066.87537,1059.58,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.39,0.39,0,0,0,0,10.30344,10.30344,0,187.108696,255.847646,173.711311,81.158874,22.739315,60.731616,52.278036,50.000001,, +D,DREGION,,3,"2023/12/14 12:55:00",1,VIC1,0,-52.69,0,-52.69,0,0,3527.13,12,3556.31,21,8.17,0,,,58,,,,,,,,68,,,,,,,,68,,,,,,,,65,,,,,,,,65,,,,,,,,65,,,,,,6.05404,9256.90286,422,3683.64526,3589.25,,122,,,,74.95,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,3.71,3.71,0,660,675,667,259.080230,153,155,145,328.580052,, +D,DREGION,,3,"2023/12/14 13:00:00",1,NSW1,0,100.02,0,100.02,0,0,9704.38,37,9209.67,0,-494.7,0,,,91,,,,,,,,142.04,,,,,,,,121,,,,,,,,82,,,,,,,,43,,,,,,,,43,,,,,,12.82705,15183.60357,147,9654.02832,9703.47,,57,,,,59,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0,404,408,665,278.798732,381,491,401,408.233274,, +D,DREGION,,3,"2023/12/14 13:00:00",1,QLD1,0,83.02004,0,83.02004,0,0,6573.99,30,7317.4,240,503.41,0,,,27,,,,,,,,27,,,,,,,,0,,,,,,,,0,,,,,,,,11.18,,,,,,,,30,,,,,,6.97794,11225.44769,290,6775.61816,6813.69,,62.38,,,,0,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0,345,460,200,221.140881,163.430930,234.430930,134.430930,139.394210,, +D,DREGION,,3,"2023/12/14 13:00:00",1,SA1,0,-34.67747,0,-34.67747,0,0,702.4,-8,1250.29,22,525.88,0,,,38.54,,,,,,,,77,,,,,,,,108.14,,,,,,,,81,,,,,,,,81,,,,,,,,73,,,,,,18.48052,2859.95892,115,714.35236,737.03,,48,,,,20,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0,275,287,287,323,218,219,191,92,, +D,DREGION,,3,"2023/12/14 13:00:00",1,TAS1,0,7.14656,0,7.14656,0,0,1056.98,0,594.98,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-4.63871,2386.00943,0,1061.61841,1056.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,1,1,0,0,0,0,10.30344,10.30344,0,187.108696,255.529519,172.673711,77.223805,25.318993,63.436228,53.388232,49.999998,, +D,DREGION,,3,"2023/12/14 13:00:00",1,VIC1,0,-41.11,0,-41.11,0,0,3511.3,12,3626.99,135,-19.3,0,,,68,,,,,,,,78,,,,,,,,68,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,4.4337,8966.16474,420,3603.60327,3688.16,,38,,,,91,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,1.5,1.5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,16.73,16.73,0,716,869,811,429.451111,155,174,164,269.209052,, +D,DREGION,,3,"2023/12/14 13:05:00",1,NSW1,0,100,0,100,0,0,9787.94,43,9230.29,10,-567.64,0,,,91,,,,,,,,131,,,,,,,,121,,,,,,,,55,,,,,,,,43,,,,,,,,43,,,,,,12.45055,14993.73575,147,9737.27246,9798.63,,47,,,,30.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,401,405,662,296.554894,381,491,401,401.169114,, +D,DREGION,,3,"2023/12/14 13:05:00",1,QLD1,0,94.66969,0,94.66969,0,0,6661.32,32,7470.08,240,568.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,61,,,,,,,,30,,,,,,,,37.72,,,,,,-5.05206,11270.88736,290,6872.66064,6901.74,,14,,,,35,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,345,460,200,174.045585,205.219920,281.427810,172.219920,166.325991,, +D,DREGION,,3,"2023/12/14 13:05:00",1,SA1,0,-48.43875,0,-48.43875,0,0,664.21,-10,1179.9,24,491.7,0,,,45.47,,,,,,,,94.89,,,,,,,,80.99,,,,,,,,69,,,,,,,,82,,,,,,,,74,,,,,,15.70852,2850.05799,117,692.50049,699.1,,24,,,,35.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,273,286,285,325,220,221,194,92,, +D,DREGION,,3,"2023/12/14 13:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1038.89,1,576.89,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-4.14868,2390.23355,0,1042.04065,1038.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0,187.108696,255.414704,169.884681,74.399315,27.782577,66.263361,56.249827,49.999996,, +D,DREGION,,3,"2023/12/14 13:05:00",1,VIC1,0,-56.79,0,-56.79,0,0,3442.34,8,3494.22,32,19.88,0,,,87.24,,,,,,,,97.24,,,,,,,,97.24,,,,,,,,65,,,,,,,,74,,,,,,,,72,,,,,,16.65971,8875.46422,419,3540.45508,3513.02,,120.38,,,,69,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,697,850,792,330.674621,219.1992,221.1992,211.1992,323.205052,, +D,DREGION,,3,"2023/12/14 13:10:00",1,NSW1,0,100.02,0,100.02,0,0,9971.82,53,9553.89,11,-428.93,0,,,71,,,,,,,,71,,,,,,,,71,,,,,,,,82,,,,,,,,70,,,,,,,,43,,,,,,17.60184,15025.36211,148,9899.73145,9977.24,,47,,,,35.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,401,405,662,191.278912,311,391,301,350.244325,, +D,DREGION,,3,"2023/12/14 13:10:00",1,QLD1,0,66.11008,0,66.11008,0,0,6695.03,35,7469.85,240,534.83,0,,,0,,,,,,,,23,,,,,,,,0,,,,,,,,0,,,,,,,,0.13,,,,,,,,36.13,,,,,,0,11269.82173,290,6900.24609,6934.44,,8,,,,40.7,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,345,460,172,222.467682,175.6407,246.6407,144.6407,123,, +D,DREGION,,3,"2023/12/14 13:10:00",1,SA1,0,-45.75747,0,-45.75747,0,0,666.26,-10,1197.09,15,515.83,0,,,57.12,,,,,,,,112,,,,,,,,123,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,17.71508,2835.25291,114,683.10962,693.63,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,275,287,286,319,225,226,200,99,, +D,DREGION,,3,"2023/12/14 13:10:00",1,TAS1,0,-40.01,0,-40.01,0,0,1059.88,1,597.88,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,0,2395.4294,0,1058.8772,1059.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.86,0.86,0,0,0,0,57.46,57.46,0,187.108696,255.381251,169.024671,73.548867,28.530412,67.123371,57.131888,50,, +D,DREGION,,3,"2023/12/14 13:10:00",1,VIC1,0,-54.25,0,-54.25,0,0,3704.85,16,3606.74,19,-117.11,0,,,93.18,,,,,,,,113.54,,,,,,,,101.14,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,23.58504,8950.21644,418,3704.27319,3760.26,,126.38,,,,64.27,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,14.94,14.94,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,707,860,802,311.770569,231.184440,233.184440,223.184440,323.204052,, +D,DREGION,,3,"2023/12/14 13:15:00",1,NSW1,0,100,0,100,0,0,9943.36,57,9580.36,12,-375,0,,,86,,,,,,,,71,,,,,,,,71,,,,,,,,82,,,,,,,,70,,,,,,,,29.67,,,,,,26.65499,14954.41217,149,9857.04297,9948.39,,46,,,,14.03,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,401,405,668,236.016839,312,392,317,295.097142,, +D,DREGION,,3,"2023/12/14 13:15:00",1,QLD1,0,54.55008,0,54.55008,0,0,6659.39,37,7394.72,240,495.33,0,,,0,,,,,,,,26,,,,,,,,26,,,,,,,,23.2,,,,,,,,72,,,,,,,,84,,,,,,-22.11219,11158.7999,290,6883.71875,6898.29,,8,,,,21,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,345,459.103140,172,221.355220,155.430930,226.430930,134.430930,123,, +D,DREGION,,3,"2023/12/14 13:15:00",1,SA1,0,-42.73175,0,-42.73175,0,0,661.23,-9,1168.65,9,498.43,0,,,49,,,,,,,,130,,,,,,,,105.79,,,,,,,,67,,,,,,,,37,,,,,,,,60,,,,,,19.72165,2804.43817,39,676.00555,681.83,,11,,,,57.97,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,274,286,285,322,240,240,212,108,, +D,DREGION,,3,"2023/12/14 13:15:00",1,TAS1,0,11.1,0,11.1,0,0,1085.37,1,623.37,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,0.12862,2438.99809,0,1084.24121,1085.37,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.86,0.86,0,0.86,0.86,0,0,0,0,3.5,3.5,0,187.108696,252.814815,125.604331,52.624641,44.987116,87.760185,89.166221,59.731590,, +D,DREGION,,3,"2023/12/14 13:15:00",1,VIC1,0,-50.39,0,-50.39,0,0,3762.5,25,3648.39,5,-119.11,0,,,89.2,,,,,,,,95.66,,,,,,,,95.28,,,,,,,,66,,,,,,,,67.67,,,,,,,,73,,,,,,11.89764,8917.28872,418,3771.948,3801.62,,140.38,,,,77,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,3.98,3.98,0,676,829,771,304.490204,188.62,190.62,180.62,325.948052,, +D,DREGION,,3,"2023/12/14 13:20:00",1,NSW1,0,100,0,100,0,0,10082.88,62,9565.28,16,-533.61,0,,,71,,,,,,,,82.56,,,,,,,,71,,,,,,,,55,,,,,,,,43,,,,,,,,70,,,,,,35.70813,14889.7924,150,9987.88574,10097.31,,43,,,,40.02,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0,401,405,668,322.729306,312,392,302,346.597223,, +D,DREGION,,3,"2023/12/14 13:20:00",1,QLD1,0,54.55,0,54.55,0,0,6723.3,32,7494.36,240,531.06,0,,,0,,,,,,,,22,,,,,,,,9.56,,,,,,,,63,,,,,,,,85,,,,,,,,85,,,,,,-27.18713,11177.13268,290,6956.18994,6962.33,,8,,,,41,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0,346,448.719112,202,263.244472,176.369070,247.369070,155.369070,123,, +D,DREGION,,3,"2023/12/14 13:20:00",1,SA1,0,-45.99999,0,-45.99999,0,0,639.12,-8,1246.42,31,576.3,0,,,32.14,,,,,,,,107,,,,,,,,107,,,,,,,,58.4,,,,,,,,47.82,,,,,,,,72,,,,,,7.32307,2868.03864,111,662.86469,685.06,,21.38,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0,273,285,284,327,226.62,226.62,195.62,80,, +D,DREGION,,3,"2023/12/14 13:20:00",1,TAS1,0,11.08,0,11.08,0,0,1094.88,2,632.88,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-0.6132,2448.62356,0,1093.49536,1094.88,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,1,1,0,0,0,0,3.5,3.5,0,187.108696,257.275926,137.102441,71.362337,37.043731,79.919841,89.344987,50.648934,, +D,DREGION,,3,"2023/12/14 13:20:00",1,VIC1,0,-52.69,0,-52.69,0,0,3695.96,23,3686.85,43,-52.11,0,,,118.43,,,,,,,,108.43,,,,,,,,108.43,,,,,,,,65,,,,,,,,74,,,,,,,,22.82,,,,,,-6.70445,9095.24308,418,3722.16187,3786.21,,133,,,,58.98,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.7,3.7,0,716,869,811,371.978302,206.434854,208.434854,198.434854,347.201052,, +D,DREGION,,3,"2023/12/14 13:25:00",1,NSW1,0,137.69,0,137.69,0,0,10213.09,73,9785.44,18,-445.65,0,,,71,,,,,,,,111.98,,,,,,,,71,,,,,,,,82,,,,,,,,43,,,,,,,,43,,,,,,20.77573,15093.35652,147,10130.1875,10225.09,,38,,,,41.81,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0,401,405,662,226.339137,312,392,302,318.273268,, +D,DREGION,,3,"2023/12/14 13:25:00",1,QLD1,0,-2.02,0,-2.02,0,0,6677.98,30,7502.08,261,563.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,70.76,,,,,,,,79.76,,,,,,-9.22991,11288.34586,290,6899.7832,6938.43,,0,,,,41,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0,337,446,160,264.993582,160.430930,231.430930,129.430930,42.000006,, +D,DREGION,,3,"2023/12/14 13:25:00",1,SA1,0,-43.9369,0,-43.9369,0,0,650.94,-6,1236.15,28,557.21,0,,,47.09,,,,,,,,84,,,,,,,,115,,,,,,,,79,,,,,,,,80,,,,,,,,73,,,,,,7.04389,2848.60188,108,686.40784,693.13,,24,,,,30,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0,274,286,285,330,228,228,196,80,, +D,DREGION,,3,"2023/12/14 13:25:00",1,TAS1,0,12.24327,0,12.24327,0,0,1082.5,1,620.5,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-5.64426,2425.03848,0,1087.14685,1082.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,6,6,0,0,0,0,3.5,3.5,0,187.108696,253.085657,126.093471,68.386864,44.338708,88.6649,100.573770,56.198166,, +D,DREGION,,3,"2023/12/14 13:25:00",1,VIC1,0,-52.68,0,-52.68,0,0,3782.9,24,3654.59,37,-165.31,0,,,100.17,,,,,,,,120.17,,,,,,,,106.65,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,-17.64985,9210.87215,418,3841.10205,3859.6,,143.38,,,,57.19,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,10,10,0,0.39,0.39,0,6,6,0,0.39,0.39,0,3.98,3.98,0,713,866,808,347.290238,173.62,175.62,165.62,335.197052,, +D,DREGION,,3,"2023/12/14 13:30:00",1,NSW1,0,89.03004,0,89.03004,0,0,10246.43,83,9630.14,0,-616.29,0,,,91,,,,,,,,99,,,,,,,,71,,,,,,,,95,,,,,,,,49.75,,,,,,,,63.75,,,,,,28.4617,15159.92689,147,10142.90918,10246.73,,57,,,,55,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0,401,405,668,321.491778,311,391,321,247.813328,, +D,DREGION,,3,"2023/12/14 13:30:00",1,QLD1,0,49.55,0,49.55,0,0,6705.07,27,7589.17,240,644.1,0,,,22,,,,,,,,22,,,,,,,,22,,,,,,,,64,,,,,,,,87,,,,,,,,87,,,,,,-18.95518,11233.83939,290,6956.11768,6945.97,,35,,,,0,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0,348,463,175,264.993582,158.430930,228.430930,136.430930,119.899034,, +D,DREGION,,3,"2023/12/14 13:30:00",1,SA1,0,-34.85705,0,-34.85705,0,0,666.44,-3,1219.43,41,511.99,0,,,45.19,,,,,,,,105,,,,,,,,105,,,,,,,,72,,,,,,,,83,,,,,,,,72,,,,,,9.08168,2825.24695,111,694.89209,719.52,,44,,,,20,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0,274,286,285,342,208,208,176,70,, +D,DREGION,,3,"2023/12/14 13:30:00",1,TAS1,0,11.08,0,11.08,0,0,1084.48,1,622.48,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-1.42348,2412.97083,0,1084.9021,1084.48,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,2.31,2.31,0,3,3,0,0,0,0,3.5,3.5,0,187.108696,251.392787,124.744681,64.024368,51.828140,98.059076,115.170116,63.439136,, +D,DREGION,,3,"2023/12/14 13:30:00",1,VIC1,0,-41.11,0,-41.11,0,0,3798.19,22,3917.48,144,-24.7,0,,,57.34,,,,,,,,87.34,,,,,,,,93.34,,,,,,,,39.93,,,,,,,,59,,,,,,,,56,,,,,,-15.03419,9173.28482,418,3851.11401,3982.01,,69.38,,,,95,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0.01,0.01,0,0.26,0.26,0,2.64,2.64,0,2.31,2.31,0,3,3,0,0.39,0.39,0,5.7,5.7,0,712,865,807,439.449677,180.335810,198.335810,188.335810,308.199052,, +D,DREGION,,3,"2023/12/14 13:35:00",1,NSW1,0,137.69,0,137.69,0,0,10102.61,74,10356.4,1,252.79,0,,,72,,,,,,,,133.68,,,,,,,,107.88,,,,,,,,38,,,,,,,,38,,,,,,,,38,,,,,,0,15096.1081,148,10034.84863,10097.56,,26,,,,5.04,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0,356,360,367,155.775657,408,518,428,426.007958,, +D,DREGION,,3,"2023/12/14 13:35:00",1,QLD1,0,49.55,0,49.55,0,0,6634.34,23,7537.51,255,648.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,62,,,,,,,,99,,,,,,,,67,,,,,,-17.72616,11199.90151,290,6869.64746,6890.89,,18.38,,,,70,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0,300.793103,377.777778,170,234.996791,185.428440,266.428440,164.428440,90.030831,, +D,DREGION,,3,"2023/12/14 13:35:00",1,SA1,0,-49.92958,0,-49.92958,0,0,672.58,-1,1192.79,6,514.21,0,,,52.93,,,,,,,,80,,,,,,,,80,,,,,,,,78,,,,,,,,30,,,,,,,,71,,,,,,0,2852.88506,109,732.08411,690.09,,3,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0,272,284,283,302,240,240,208,99,, +D,DREGION,,3,"2023/12/14 13:35:00",1,TAS1,0,11.08,0,11.08,0,0,1083.11,0,621.11,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-0.66365,2414.77737,0,1083.77722,1083.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,1.19,1.19,0,1,1,0,0,0,0,3.5,3.5,0,187.108696,251.443980,124.744681,59.333932,50.282730,95.993227,111.218562,61.472193,, +D,DREGION,,3,"2023/12/14 13:35:00",1,VIC1,0,-58.25,0,-58.25,0,0,3726.49,18,2888.06,78,-916.43,0,,,92.8,,,,,,,,102.8,,,,,,,,104.8,,,,,,,,91,,,,,,,,99.15,,,,,,,,90.15,,,,,,-1.34391,9146.58655,384,3866.13623,3834.22,,158,,,,54.96,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,19.91,19.91,0,1.19,1.19,0,1,1,0,0.39,0.39,0,6,6,0,669,802,744,274.723725,158.798680,158.798680,148.798680,317.194052,, +D,DREGION,,3,"2023/12/14 13:40:00",1,NSW1,0,137.69,0,137.69,0,0,10235.65,69,10529.53,9,284.88,0,,,62,,,,,,,,87.66,,,,,,,,62,,,,,,,,72,,,,,,,,70,,,,,,,,56.9,,,,,,38.62034,15119.10753,147,10115.57422,10232.4,,21,,,,14.05,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0,401,405,422,164.817818,338,418,328,334.772847,, +D,DREGION,,3,"2023/12/14 13:40:00",1,QLD1,0,132.03592,0,132.03592,0,0,6817.29,25,7649.05,289,542.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,64.9,,,,,,,,87,,,,,,0,11120.546,290,7043.05859,7105.03,,61.54,,,,46,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0,348,463,175,166.000001,126.416070,186.416070,100.466580,118.993582,, +D,DREGION,,3,"2023/12/14 13:40:00",1,SA1,0,-51.58365,0,-51.58365,0,0,751.28,6,1201.24,65,384.96,0,,,79.7,,,,,,,,94,,,,,,,,94,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,12.00013,2848.2291,107,744.32776,822.96,,20,,,,40,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0,275,287,286,367,197,197,164,42,, +D,DREGION,,3,"2023/12/14 13:40:00",1,TAS1,0,13,0,13,0,0,1085.63,1,623.63,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-2.01729,2406.50432,0,1086.64795,1085.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,2.12,2.12,0,3,3,0,0,0,0,3.5,3.5,0,187.108696,251.207264,119.315961,62.226636,57.334370,104.537964,122.746794,67.379101,, +D,DREGION,,3,"2023/12/14 13:40:00",1,VIC1,0,-58.25,0,-58.25,0,0,3726.01,13,3083.38,97,-739.62,0,,,77.58,,,,,,,,135.58,,,,,,,,137.74,,,,,,,,66,,,,,,,,75,,,,,,,,73,,,,,,0,9119.91458,372,3807.63696,3840.81,,102.84,,,,69.95,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,19.91,19.91,0,2.12,2.12,0,3,3,0,0.39,0.39,0,15,15,0,713,866,808,367.267390,164.162220,164.162220,154.162220,266.189052,, +D,DREGION,,3,"2023/12/14 13:45:00",1,NSW1,0,138.98531,0,138.98531,0,0,10349.07,77,10655.48,57,249.41,0,,,40.92,,,,,,,,96.54,,,,,,,,55.65,,,,,,,,72,,,,,,,,70,,,,,,,,70,,,,,,42.41356,15061.25962,147,10217.76074,10397.91,,0,,,,25.01,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0,401,405,422,309.049991,311,391,301,285.454433,, +D,DREGION,,3,"2023/12/14 13:45:00",1,QLD1,0,131.75002,0,131.75002,0,0,6808.35,34,7718.93,289,621.58,0,,,0,,,,,,,,14,,,,,,,,0,,,,,,,,64,,,,,,,,51.46,,,,,,,,60.46,,,,,,0,11160.97296,290,7058.65088,7097.22,,14,,,,35.99,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0,348,412.500010,203,164.694674,147,229.790780,112,118.835731,, +D,DREGION,,3,"2023/12/14 13:45:00",1,SA1,0,-52.40958,0,-52.40958,0,0,777.48,11,1133.82,50,306.34,0,,,70,,,,,,,,75,,,,,,,,75,,,,,,,,81,,,,,,,,81,,,,,,,,74,,,,,,9.61025,2821.70861,112,816.09204,832.11,,59,,,,40,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0,275,287,286,352,179,179,148,62,, +D,DREGION,,3,"2023/12/14 13:45:00",1,TAS1,0,13,0,13,0,0,1086.64,1,624.64,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.30122,2410.79561,0,1088.93982,1086.64,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,6,6,0,9.21,9.21,0,0,0,0,3.5,3.5,0,187.108696,251.4493,122.907041,65.748594,54.211692,100.946884,119.063635,62.9141,, +D,DREGION,,3,"2023/12/14 13:45:00",1,VIC1,0,-58.25,0,-58.25,0,0,3795.88,4,3134.98,42,-702.9,0,,,108.46,,,,,,,,126.46,,,,,,,,161.46,,,,,,,,96,,,,,,,,105,,,,,,,,103,,,,,,0,9237.22568,356,3888.66724,3853.97,,132.38,,,,69,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,16.73,16.73,0,6,6,0,10,10,0,3,3,0,5.7,5.7,0,714,867,809,329.468750,215.456728,215.456728,205.456728,260.192052,, +D,DREGION,,3,"2023/12/14 13:50:00",1,NSW1,0,137.69,0,137.69,0,0,10315.72,71,10633.68,21,296.96,0,,,82,,,,,,,,125,,,,,,,,95,,,,,,,,72,,,,,,,,70,,,,,,,,63.72,,,,,,46.20678,15107.56705,149,10243.49219,10330.1,,10,,,,20.87,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0,361,365,372,193.341812,408,518,428,376.711517,, +D,DREGION,,3,"2023/12/14 13:50:00",1,QLD1,0,54.55,0,54.55,0,0,6763.73,32,7673.15,290,619.42,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,73.72,,,,,,,,87,,,,,,3.82288,11030.05206,290,7016.51465,7053.68,,58,,,,54.13,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0,318.942840,367.942840,169.942840,229.066431,169.095570,249.095570,149.095570,88.000008,, +D,DREGION,,3,"2023/12/14 13:50:00",1,SA1,0,-52.41478,0,-52.41478,0,0,803.14,13,1146.64,45,298.5,0,,,109.8,,,,,,,,117,,,,,,,,117,,,,,,,,78,,,,,,,,78,,,,,,,,71,,,,,,0.66466,2809.33515,112,849.37451,852.74,,7,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0,273,285,284,340,232,232,202,67,, +D,DREGION,,3,"2023/12/14 13:50:00",1,TAS1,0,13.96911,0,13.96911,0,0,1096.74,1,634.74,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-3.80975,2396.58274,0,1099.54834,1096.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,1.84,1.84,0,1.84,1.84,0,0,0,0,3.5,3.5,0,187.108696,238.019266,101.730321,50,72.626231,122.123604,140.783347,87.453384,, +D,DREGION,,3,"2023/12/14 13:50:00",1,VIC1,0,-58.25,0,-58.25,0,0,3717.51,5,3019.24,39,-737.27,0,,,30,,,,,,,,77.79,,,,,,,,82.19,,,,,,,,95,,,,,,,,95,,,,,,,,95,,,,,,-2.16336,9260.82336,358,3769.41699,3774.19,,130.38,,,,65,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0,0,0,11.68,11.68,0,1.84,1.84,0,1.84,1.84,0,0.39,0.39,0,19.89,19.89,0,701,736,728,320.133240,144,144,134,283.948052,, +D,DREGION,,3,"2023/12/14 13:55:00",1,NSW1,0,137.69,0,137.69,0,0,10419.7,66,10718.06,57,241.36,0,,,35,,,,,,,,68.17,,,,,,,,60.27,,,,,,,,112,,,,,,,,88.15,,,,,,,,122,,,,,,50,15483.43116,147,10309.27637,10468.93,,0,,,,35.33,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0,401,405,422,279.154963,340.712750,420.712750,330.712750,279.047335,, +D,DREGION,,3,"2023/12/14 13:55:00",1,QLD1,0,93.75,0,93.75,0,0,6849.47,28,7724.62,242,633.15,0,,,26,,,,,,,,26,,,,,,,,26,,,,,,,,64,,,,,,,,94,,,,,,,,50,,,,,,17.66887,10952.58278,290,7090.73145,7091.36,,39.38,,,,31.67,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0,268,323,123,178.114968,197.748820,281.748820,164.748820,158.545696,, +D,DREGION,,3,"2023/12/14 13:55:00",1,SA1,0,-51.64576,0,-51.64576,0,0,832.7,15,1154.97,27,295.27,0,,,78.54,,,,,,,,88,,,,,,,,88,,,,,,,,85,,,,,,,,83,,,,,,,,81,,,,,,6.00478,2833.83558,109,851.76392,863.65,,67,,,,34,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0,275,286,285,328,192,192,160,82,, +D,DREGION,,3,"2023/12/14 13:55:00",1,TAS1,0,13.96911,0,13.96911,0,0,1101,2,639,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.53,,,,,,-5.32297,2405.50827,0,1104.32422,1101,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,6,6,0,3,3,0,0,0,0,3.5,3.5,0,187.108696,242.254534,105.990991,49.999999,68.921301,117.862934,136.413430,80.309429,, +D,DREGION,,3,"2023/12/14 13:55:00",1,VIC1,0,-56.79,0,-56.79,0,0,3781.42,3,3114.76,30,-696.66,0,,,81,,,,,,,,136,,,,,,,,120,,,,,,,,71.52,,,,,,,,75,,,,,,,,80,,,,,,0,9213.38637,360,3823.75513,3826.47,,99,,,,69,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,11.58,11.58,0,6,6,0,3,3,0,0.39,0.39,0,6,6,0,716,869,811,346.785919,172,172,162,274.196052,, +D,DREGION,,3,"2023/12/14 14:00:00",1,NSW1,0,100.02,0,100.02,0,0,10383.48,65,10798.93,58,357.45,0,,,55,,,,,,,,147.55,,,,,,,,95,,,,,,,,112,,,,,,,,70,,,,,,,,88.34,,,,,,0,15633.88894,148,10378.71289,10433.95,,0,,,,39.02,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0,401,405,422,267.432607,421,531,443.847720,329.299738,, +D,DREGION,,3,"2023/12/14 14:00:00",1,QLD1,0,42.62,0,42.62,0,0,6852.45,32,7703.29,271,579.85,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,63,,,,,,,,133,,,,,,,,86,,,,,,0,11103.83042,290,7070.87646,7122.21,,18,,,,69.98,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0,347,409.699990,202,246.993582,171.486420,251.486420,149.486420,32.000002,, +D,DREGION,,3,"2023/12/14 14:00:00",1,SA1,0,-51.36694,0,-51.36694,0,0,847.92,15,1176.68,19,309.76,0,,,106.59,,,,,,,,92,,,,,,,,123,,,,,,,,87,,,,,,,,81,,,,,,,,74,,,,,,0,2876.35263,110,871.21033,871.12,,40,,,,40,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0,275,287,286,321,227,227,195,91,, +D,DREGION,,3,"2023/12/14 14:00:00",1,TAS1,0,11.08,0,11.08,0,0,1091.24,2,629.24,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-10.81426,2422.85652,0,1100.04944,1091.24,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,1.36,1.36,0,0.38,0.38,0,10.09,10.09,0,1.84,1.84,0,6,6,0,0,0,0,7.33911,7.33911,0,187.108696,221.193104,84.744681,49.999999,45.681177,91.466074,111.430607,50,, +D,DREGION,,3,"2023/12/14 14:00:00",1,VIC1,0,-56.79,0,-56.79,0,0,3802.86,6,3062.23,31,-771.63,0,,,60,,,,,,,,80,,,,,,,,75.75,,,,,,,,97.18,,,,,,,,96,,,,,,,,96,,,,,,-11.796,9155.084,362,3856.43359,3851.86,,147.38,,,,21,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.26,0.26,0,16.73,16.73,0,1.84,1.84,0,6,6,0,0.39,0.39,0,5.7,5.7,0,662,677,669,195.113128,151,151,141,283.197052,, +D,DREGION,,3,"2023/12/14 14:05:00",1,NSW1,0,62.75,0,62.75,0,0,10491.78,62,10689.2,57,140.42,0,,,95,,,,,,,,115,,,,,,,,115,,,,,,,,109.97,,,,,,,,70,,,,,,,,94.65,,,,,,50,15674.57757,147,10427.8291,10539.87,,20,,,,21.24,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0,467,471,734,332.126959,421,531,471,230.635814,, +D,DREGION,,3,"2023/12/14 14:05:00",1,QLD1,0,59.12768,0,59.12768,0,0,6872.99,33,7804.56,265,666.57,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,102.65,,,,,,,,87,,,,,,2.13283,11178.79204,290,7109.88574,7138.24,,64.38,,,,18,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0,336,391,191,211.996791,183.237220,264.563590,162.237220,112.996791,, +D,DREGION,,3,"2023/12/14 14:05:00",1,SA1,0,-49.33144,0,-49.33144,0,0,854.49,15,1169.54,15,300.05,0,,,59.59,,,,,,,,69.26,,,,,,,,92.46,,,,,,,,79,,,,,,,,79,,,,,,,,72,,,,,,10.06674,2849.16506,106,849.56488,873.51,,50,,,,30,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0,273,285,284,316,212,212,178,91,, +D,DREGION,,3,"2023/12/14 14:05:00",1,TAS1,0,10.30132,0,10.30132,0,0,1078.99,1,616.99,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-15.69018,2421.61278,0,1093.67786,1078.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,1.84,1.84,0,0.86,0.86,0,0,0,0,5.19868,5.19868,0,187.108696,257.302627,131.417181,69.988452,41.813155,85.431901,95.171245,50.000001,, +D,DREGION,,3,"2023/12/14 14:05:00",1,VIC1,0,-54.25,0,-54.25,0,0,3850.58,11,3299.11,85,-636.47,0,,,66.67,,,,,,,,134.67,,,,,,,,86.67,,,,,,,,95,,,,,,,,104,,,,,,,,102,,,,,,-4.34994,9152.78073,363,3885.85156,3948.79,,71,,,,100.76,,,,,,,,,,,,,,,,,,,0.01,0.01,0,0,0,0,0.01,0.01,0,4.22,4.22,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,15,15,0,715,868,810,371.156250,166.602860,166.602860,156.602860,287.197052,, +D,DREGION,,3,"2023/12/14 14:10:00",1,NSW1,0,62.75,0,62.75,0,0,10335.72,56,10571.49,57,178.77,0,,,75,,,,,,,,100.32,,,,,,,,105,,,,,,,,111.05,,,,,,,,70,,,,,,,,104,,,,,,0,15613.11357,147,10330.05859,10379.86,,20,,,,27.27,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0,401,405,667,229.734792,351,431,371,257.447761,, +D,DREGION,,3,"2023/12/14 14:10:00",1,QLD1,0,60.36429,0,60.36429,0,0,6883.48,33,7689.27,257,548.79,0,,,0,,,,,,,,0,,,,,,,,2.42,,,,,,,,64,,,,,,,,113.24,,,,,,,,87,,,,,,0,11023.9533,290,7117.03271,7138.71,,10,,,,42.73,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0,323.273520,372.273520,174.273520,211.996796,201.430930,291.662610,179.430930,120.996791,, +D,DREGION,,3,"2023/12/14 14:10:00",1,SA1,0,-49.06241,0,-49.06241,0,0,839.87,12,1173.93,23,311.06,0,,,70.14,,,,,,,,88,,,,,,,,88,,,,,,,,82,,,,,,,,82,,,,,,,,74.24,,,,,,0,2821.80489,110,851.49731,867.1,,16,,,,30,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0,275,288,287,325,232,232,199,87,, +D,DREGION,,3,"2023/12/14 14:10:00",1,TAS1,0,10.0941,0,10.0941,0,0,1080.69,1,618.69,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,139.38,,,,,,-15.32933,2404.16556,0,1095.02173,1080.69,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,8.68,8.68,0,6,6,0,0,0,0,4.4559,4.4559,0,187.108696,256.840471,154.305921,78.186028,30.230472,70.812117,71.923741,50.000001,, +D,DREGION,,3,"2023/12/14 14:10:00",1,VIC1,0,-54.25,0,-54.25,0,0,3916.81,18,3363.6,21,-574.21,0,,,74.64,,,,,,,,129.64,,,,,,,,99.64,,,,,,,,96,,,,,,,,96,,,,,,,,96,,,,,,0,9165.19676,328,3981.45337,3950.64,,159.38,,,,70,,,,,,,,,,,,,,,,,,,0.05,0.05,0,0,0,0,0.01,0.01,0,11.68,11.68,0,8.68,8.68,0,6,6,0,0.39,0.39,0,5.7,5.7,0,701,736,728,240.883086,176,171,129,259.948052,, +D,DREGION,,3,"2023/12/14 14:15:00",1,NSW1,0,85.97995,0,85.97995,0,0,10528.95,56,10587.4,57,1.45,0,,,95,,,,,,,,115,,,,,,,,115,,,,,,,,85,,,,,,,,57.31,,,,,,,,86,,,,,,21.65727,15638.82976,147,10493.3584,10569.05,,20,,,,21.23,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0,401,405,667,285.172478,421,531,471,297.781332,, +D,DREGION,,3,"2023/12/14 14:15:00",1,QLD1,0,83.50773,0,83.50773,0,0,7018.56,37,7800.88,290,492.32,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,16.53302,11059.65849,290,7217.8042,7305.5,,12,,,,38,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0,325,374,176,207.996791,149.430930,233.430930,116.430930,90,, +D,DREGION,,3,"2023/12/14 14:15:00",1,SA1,0,-47,0,-47,0,0,850.33,11,1184.45,24,310.13,0,,,32,,,,,,,,96,,,,,,,,93.36,,,,,,,,88,,,,,,,,82,,,,,,,,81,,,,,,12.82757,2853.62037,109,849.93347,882.09,,59,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0,275,288,287,325,201,201,168,85,, +D,DREGION,,3,"2023/12/14 14:15:00",1,TAS1,0,10.0941,0,10.0941,0,0,1073.68,0,611.68,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.78,,,,,,-4.48296,2391.48484,0,1078.16028,1073.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,1.84,1.84,0,0.86,0.86,0,0,0,0,4.4559,4.4559,0,187.108696,256.881935,148.834251,72.921259,33.143978,74.450761,77.485140,49.999999,, +D,DREGION,,3,"2023/12/14 14:15:00",1,VIC1,0,-53.37931,0,-53.37931,0,0,3918.72,24,3621.51,39,-336.21,0,,,93.22,,,,,,,,106.79,,,,,,,,84.44,,,,,,,,133.73,,,,,,,,105,,,,,,,,113.91,,,,,,7.86778,9196.0456,344,3917.2019,3975.61,,114.38,,,,80.77,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,0.86,0.86,0,0.39,0.39,0,5.9,5.9,0,699,852,794,329.269928,142.62,142.62,132.62,262.201052,, +D,DREGION,,3,"2023/12/14 14:20:00",1,NSW1,0,62.75,0,62.75,0,0,10637.48,61,10650.29,57,-44.19,0,,,75,,,,,,,,115,,,,,,,,92.06,,,,,,,,90.86,,,,,,,,60.65,,,,,,,,86,,,,,,0,15626.78423,147,10616.30273,10678.15,,20,,,,21.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0,401,405,668,286.928781,351,431,371,246.805266,, +D,DREGION,,3,"2023/12/14 14:20:00",1,QLD1,0,63.12575,0,63.12575,0,0,7105.5,43,7734,290,338.5,0,,,0,,,,,,,,7.26,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,11.18732,11283.35666,290,7333.71045,7391.33,,10,,,,28.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0,336,391,191,209.996794,149.430930,233.430930,116.430930,86.999969,, +D,DREGION,,3,"2023/12/14 14:20:00",1,SA1,0,-34.8367,0,-34.8367,0,0,869.2,9,1251.77,19,363.58,0,,,55.48,,,,,,,,100,,,,,,,,100,,,,,,,,88,,,,,,,,86,,,,,,,,81.43,,,,,,9.30005,2831.19387,112,874.45679,905.01,,62,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0,273,286,285,321,204,204,173,93,, +D,DREGION,,3,"2023/12/14 14:20:00",1,TAS1,0,10.57593,0,10.57593,0,0,1078.46,0,616.46,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.6,,,,,,-0.45677,2394.04397,0,1078.91345,1078.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,6,6,0,8.68,8.68,0,0,0,0,3.5,3.5,0,187.108696,257.511134,146.384551,83.355009,39.308542,82.126802,89.084032,53.040373,, +D,DREGION,,3,"2023/12/14 14:20:00",1,VIC1,0,-41.11,0,-41.11,0,0,4045.46,27,3944.07,59,-160.39,0,,,93.8,,,,,,,,98.8,,,,,,,,103.8,,,,,,,,135,,,,,,,,104,,,,,,,,120,,,,,,6.52451,9242.65973,329,4039.12354,4143.64,,113.38,,,,90,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.01,0.01,0,0.3,0.3,0,7.73,7.73,0,6,6,0,8.68,8.68,0,0.39,0.39,0,5.7,5.7,0,715,869,811,309.515045,215.768640,228.768640,223.768640,290.168297,, +D,DREGION,,3,"2023/12/14 14:25:00",1,NSW1,0,62.75,0,62.75,0,0,10674.66,68,10565.56,58,-167.1,0,,,95,,,,,,,,145,,,,,,,,115,,,,,,,,86,,,,,,,,53.34,,,,,,,,86,,,,,,4.05169,15644.91073,148,10644.81445,10719.96,,19.38,,,,21.26,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0,401,405,668,229.215490,421,531,471,363.542755,, +D,DREGION,,3,"2023/12/14 14:25:00",1,QLD1,0,63.59873,0,63.59873,0,0,7139.38,47,7737.9,290,308.52,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,-5.095,11261.23352,290,7380.1875,7425.18,,10,,,,41,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0,325,374,176,227.908557,149.430930,233.430930,116.430930,88,, +D,DREGION,,3,"2023/12/14 14:25:00",1,SA1,0,-30,0,-30,0,0,843.98,7,1270.07,16,410.1,0,,,51.62,,,,,,,,77,,,,,,,,77,,,,,,,,88,,,,,,,,86,,,,,,,,81,,,,,,12.7665,2857.91108,112,861.44623,880.57,,86,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0,275,287,286,318,181,181,151,96,, +D,DREGION,,3,"2023/12/14 14:25:00",1,TAS1,0,10.57593,0,10.57593,0,0,1077.94,0,615.94,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,39.38,,,,,,,,139.38,,,,,,,,146.36,,,,,,-1.64762,2402.80498,0,1079.58984,1077.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,1.84,1.84,0,1.4,1.4,0,0,0,0,3.5,3.5,0,187.108696,257.430307,155.498921,88.716677,33.104436,74.653931,79.272359,53.550238,, +D,DREGION,,3,"2023/12/14 14:25:00",1,VIC1,0,3.00057,0,3.00057,0,0,3964.58,32,3953.13,23,-34.45,0,,,77.1,,,,,,,,99.05,,,,,,,,104.65,,,,,,,,133,,,,,,,,105,,,,,,,,114.35,,,,,,20.80333,8968.20024,325,3979.72363,4038.95,,90,,,,77.74,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.26,0.26,0,10,10,0,1.84,1.84,0,1.4,1.4,0,0.39,0.39,0,3.99,3.99,0,694,848,790,252.889744,204.072575,266.570045,253.072575,330.916802,, +D,DREGION,,3,"2023/12/14 14:30:00",1,NSW1,0,41.75264,0,41.75264,0,0,10680.56,69,10494.67,58,-243.89,0,,,95,,,,,,,,115,,,,,,,,111.24,,,,,,,,95.14,,,,,,,,69,,,,,,,,86,,,,,,0,15557.04515,148,10661.2373,10730.08,,20,,,,27.26,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0,401,405,667,282.820733,421,531,471,365.267052,, +D,DREGION,,3,"2023/12/14 14:30:00",1,QLD1,0,42.62,0,42.62,0,0,7165.69,48,7730.86,290,275.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64,,,,,,,,134,,,,,,,,90,,,,,,-15.6878,11344.54992,290,7419.14502,7451.6,,30,,,,56,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0,339.477530,441.067480,194.531670,228,166.002490,260.002490,145.002490,36.000016,, +D,DREGION,,3,"2023/12/14 14:30:00",1,SA1,0,-46.64993,0,-46.64993,0,0,807.71,6,1229.94,12,410.23,0,,,46,,,,,,,,113.64,,,,,,,,78,,,,,,,,89,,,,,,,,83.55,,,,,,,,81,,,,,,0,2898.28116,109,840.82104,840.32,,35,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0,275,288,287,310,238,238,207,97,, +D,DREGION,,3,"2023/12/14 14:30:00",1,TAS1,0,10.08372,0,10.08372,0,0,1036.06,0,588.98,0,-447.08,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.46,,,,,,,,124.45,,,,,,,,146.2,,,,,,-0.0767,2408.6699,0,1036.13403,1036.06,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.12075,8.12075,0,1.19,1.19,0,0.39,0.39,0,0,0,0,4.47649,4.47649,0,187.108696,256.406915,185.077381,93.554049,21.467086,59.097531,49.516096,50.000003,, +D,DREGION,,3,"2023/12/14 14:30:00",1,VIC1,0,-6.618,0,-6.618,0,0,4085.01,35,4175.56,22,68.55,0,,,87.15,,,,,,,,96.91,,,,,,,,111.91,,,,,,,,136,,,,,,,,105,,,,,,,,112.8,,,,,,0,9127.9934,314,4116.51709,4161.96,,105.46,,,,56.74,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,14.94,14.94,0,1.19,1.19,0,0.39,0.39,0,0.38,0.38,0,16.76829,16.76829,0,700,844,786,268.202137,187,214,209,331.782354,, +D,DREGION,,3,"2023/12/14 14:35:00",1,NSW1,0,299.99,0,299.99,0,0,10856.02,71,10492.03,24,-387.99,0,,,70,,,,,,,,95.92,,,,,,,,100.32,,,,,,,,98,,,,,,,,69,,,,,,,,81,,,,,,24.10429,15367.86896,58,10817.10156,10872.13,,0,,,,15.26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0,396,400,656,251.202997,380,459,379,276.840248,, +D,DREGION,,3,"2023/12/14 14:35:00",1,QLD1,0,301.34777,0,301.34777,0,0,7297.46,47,7912.71,240,375.25,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,130.9,,,,,,,,85.9,,,,,,0,11212.36852,290,7531.19189,7532.62,,14,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0,304.899990,360.899990,160.899990,138.000002,217,333.898420,202,167.996791,, +D,DREGION,,3,"2023/12/14 14:35:00",1,SA1,0,-46.64993,0,-46.64993,0,0,814.03,4,1255.11,29,412.07,0,,,48.01,,,,,,,,86,,,,,,,,86,,,,,,,,91,,,,,,,,89,,,,,,,,93.01,,,,,,18.74067,2881.11762,112,811.79785,863.46,,63,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0,273,286,285,330,188,188,157,83,, +D,DREGION,,3,"2023/12/14 14:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1037.27,0,606.65,0,-430.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,13.03,,,,,,,,108,,,,,,,,143.03,,,,,,-1.46058,2423.56941,0,1038.72705,1037.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,6,6,0,3,3,0,0,0,0,56.46,56.46,0,186.326087,254.288867,178.302111,124.758651,24.953192,62.560217,53.770411,50.000004,, +D,DREGION,,3,"2023/12/14 14:35:00",1,VIC1,0,-41.11,0,-41.11,0,0,4102.24,37,4207.69,11,94.45,0,,,109.33,,,,,,,,142.33,,,,,,,,114.33,,,,,,,,146,,,,,,,,126.05,,,,,,,,120,,,,,,9.9499,9170.22319,304,4127.33057,4168.71,,97,,,,104.74,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,14.94,14.94,0,6,6,0,3,3,0,0.39,0.39,0,4.07968,4.07968,0,702,856,798,298.406250,168,181,186,273.295677,, +D,DREGION,,3,"2023/12/14 14:40:00",1,NSW1,0,11.63017,0,11.63017,0,0,10845.68,76,10595.31,58,-308.37,0,,,110,,,,,,,,130,,,,,,,,111,,,,,,,,88.01,,,,,,,,73.55,,,,,,,,87,,,,,,0,15553.64757,58,10789.21777,10892.34,,0,,,,21.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0,402,406,668,316.152221,421,530,470,320.736303,, +D,DREGION,,3,"2023/12/14 14:40:00",1,QLD1,0,11.67833,0,11.67833,0,0,7304.66,45,7734.28,50,379.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,57,,,,,,,,126,,,,,,,,85.56,,,,,,-28.71714,11262.20887,50,7522.01416,7349.86,,14,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0,340,455,196,230,167.002490,259.727070,153.002490,27.996794,, +D,DREGION,,3,"2023/12/14 14:40:00",1,SA1,0,-50,0,-50,0,0,786.86,2,1231.98,34,411.13,0,,,32,,,,,,,,79.53,,,,,,,,37,,,,,,,,91,,,,,,,,89,,,,,,,,81,,,,,,0,2871.39692,110,837.71399,841.39,,66,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0,275,288,287,331,186,186,155,76,, +D,DREGION,,3,"2023/12/14 14:40:00",1,TAS1,0,-34.10884,0,-34.10884,0,0,1042.03,0,595.34,0,-446.68,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,24.06,,,,,,,,124.06,,,,,,,,143.05,,,,,,-3.38783,2409.6426,0,1045.41553,1042.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.86,0.86,0,0,0,0,50.55884,50.55884,0,186.326087,254.385537,178.764181,113.403647,20.750957,57.727647,48.813929,49.999996,, +D,DREGION,,3,"2023/12/14 14:40:00",1,VIC1,0,-41.11,0,-41.11,0,0,4130.88,36,4157.35,5,21.47,0,,,87,,,,,,,,117.01,,,,,,,,91.3,,,,,,,,150,,,,,,,,105,,,,,,,,121,,,,,,0,9257.36185,342,4156.75,4188.65,,110.06,,,,100.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.1,0.1,0,0.3,0.3,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,9.85,9.85,0,684.230790,828.230790,770.230790,260.818115,170,181.936680,186.936680,317.854302,, +D,DREGION,,3,"2023/12/14 14:45:00",1,NSW1,0,55.79943,0,55.79943,0,0,10941.49,78,10578,58,-421.48,0,,,111,,,,,,,,131,,,,,,,,112.73,,,,,,,,104,,,,,,,,74,,,,,,,,86,,,,,,15.58546,15364.54289,58,10897.15723,10988.55,,20,,,,26.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,401,405,668,342.157217,422,531,471,352.814216,, +D,DREGION,,3,"2023/12/14 14:45:00",1,QLD1,0,54.55,0,54.55,0,0,7352.27,52,7920.22,50,517.95,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,133,,,,,,,,89,,,,,,-18.39651,11367.09673,50,7366.0332,7398.29,,12,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,336,412.584560,188,228.000001,184.002490,287.470820,160.002490,89.996791,, +D,DREGION,,3,"2023/12/14 14:45:00",1,SA1,0,-55,0,-55,0,0,788.13,0,1202.56,6,408.43,0,,,32,,,,,,,,81,,,,,,,,37,,,,,,,,88,,,,,,,,89,,,,,,,,85.08,,,,,,23.66072,2871.37445,107,820.01556,814.93,,63.9,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,275,287,286,306,209.098250,209.098250,176.098250,101,, +D,DREGION,,3,"2023/12/14 14:45:00",1,TAS1,0,-32.69621,0,-32.69621,0,0,1049.42,0,610.9,0,-438.52,0,,,0,,,,,,,,1,,,,,,,,0,,,,,,,,15.9,,,,,,,,115.9,,,,,,,,143.34,,,,,,-0.85622,2484.56735,0,1050.276,1049.42,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.39,0.39,0,0,0,0,49.14621,49.14621,0,186.326087,254.409259,178.794681,122.144717,20.220522,57.117647,48.188288,50,, +D,DREGION,,3,"2023/12/14 14:45:00",1,VIC1,0,-34.3,0,-34.3,0,0,4218.65,33,4214.75,5,-8.9,0,,,84.53,,,,,,,,112.35,,,,,,,,99.83,,,,,,,,140.69,,,,,,,,112.52,,,,,,,,121,,,,,,29.38748,9240.24918,340,4215.27979,4275.24,,86,,,,95.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.3,0.3,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,692.230790,836.230790,778.230790,255.476091,202.825649,243.164439,243.164439,319.948052,, +D,DREGION,,3,"2023/12/14 14:50:00",1,NSW1,0,62.74,0,62.74,0,0,11034.41,83,10507.28,57,-584.12,0,,,90,,,,,,,,130,,,,,,,,121,,,,,,,,104,,,,,,,,88,,,,,,,,86,,,,,,25.64987,15262.84439,57,10974.82129,11084.55,,10,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,401,405,662,252.390973,421,530,450,364.474461,, +D,DREGION,,3,"2023/12/14 14:50:00",1,QLD1,0,59.84899,0,59.84899,0,0,7383.77,49,8061.94,50,628.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68,,,,,,,,136,,,,,,,,89,,,,,,-23.5336,11417.12719,50,7404.86182,7430.97,,12,,,,38,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,324,373,176,198.794094,159.002490,257.002490,125.002490,103,, +D,DREGION,,3,"2023/12/14 14:50:00",1,SA1,0,-52.11,0,-52.11,0,0,762.88,1,1220.81,102,355.94,0,,,44.69,,,,,,,,80,,,,,,,,43.59,,,,,,,,91,,,,,,,,91,,,,,,,,85.47,,,,,,14.17676,2894.22724,110,780.89795,882.97,,0,,,,109,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,273,286,285,404,182,182,150,8,, +D,DREGION,,3,"2023/12/14 14:50:00",1,TAS1,0,36.61141,0,36.61141,0,0,1067.52,1,698.08,0,-369.44,0,,,5,,,,,,,,5,,,,,,,,6.64,,,,,,,,3,,,,,,,,67.22,,,,,,,,143.74,,,,,,-0.39136,2457.70305,0,1066.9126,1067.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0,186.326087,217.592593,76.744681,83.816327,71.834814,123.352941,141.573553,117.878049,, +D,DREGION,,3,"2023/12/14 14:50:00",1,VIC1,0,34.47,0,34.47,0,0,4398.88,38,4425.38,5,21.5,0,,,86.3,,,,,,,,108.5,,,,,,,,78.44,,,,,,,,150.7,,,,,,,,142,,,,,,,,120,,,,,,35.06185,9199.51135,340,4385.17285,4447.49,,138,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10.98,10.98,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,719.786672,873.733340,816,166.517297,240.403337,343.738407,294.270057,370.948052,, +D,DREGION,,3,"2023/12/14 14:55:00",1,NSW1,0,62.74,0,62.74,0,0,11101.86,85,10507.38,57,-651.48,0,,,91,,,,,,,,146.61,,,,,,,,122,,,,,,,,103.56,,,,,,,,82.43,,,,,,,,86,,,,,,2.38095,15380.00901,57,11076.75391,11154.16,,10,,,,5.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0,463.822310,467.822310,714.822310,241.365998,422,531,451,361.750721,, +D,DREGION,,3,"2023/12/14 14:55:00",1,QLD1,0,59.943,0,59.943,0,0,7428.03,49,8121.93,50,643.9,0,,,0,,,,,,,,4,,,,,,,,4,,,,,,,,64,,,,,,,,123,,,,,,,,79,,,,,,-16.00328,11652.21931,50,7442.47314,7475.15,,12,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0,304,337,176,199.016213,188,296,161,103,, +D,DREGION,,3,"2023/12/14 14:55:00",1,SA1,0,-101.96,0,-101.96,0,0,716.95,-2,1082.19,9,356.24,0,,,73.74,,,,,,,,87,,,,,,,,77.52,,,,,,,,88,,,,,,,,89,,,,,,,,100,,,,,,1.69492,2888.13248,34,794.16608,744.01,,29.68,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0,275,288,287,305,224.944580,224.944580,192.944580,102,, +D,DREGION,,3,"2023/12/14 14:55:00",1,TAS1,0,11.1,0,11.1,0,0,1061.67,1,613.37,0,-448.3,0,,,0,,,,,,,,5,,,,,,,,6.64,,,,,,,,25.68,,,,,,,,125.68,,,,,,,,139.11,,,,,,7.43763,2450.41112,0,1053.23608,1061.67,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,1,1,0,0,0,0,2.5,2.5,0,186.326087,258.037037,126.604331,67.324441,33.292795,74.592201,81.613595,65.612682,, +D,DREGION,,3,"2023/12/14 14:55:00",1,VIC1,0,6.30766,0,6.30766,0,0,4348.11,42,4514.97,5,161.86,0,,,64,,,,,,,,84,,,,,,,,40,,,,,,,,136,,,,,,,,105,,,,,,,,121,,,,,,11.27771,9207.86147,341,4364.95752,4404.85,,140,,,,116.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.15,0.15,0,0.3,0.3,0,5,5,0,0.39,0.39,0,1,1,0,0.39,0.39,0,3.99,3.99,0,705.2327,859.2327,801.2327,291.274506,157,225,213,319.140465,, +D,DREGION,,3,"2023/12/14 15:00:00",1,NSW1,0,62.74,0,62.74,0,0,11120.74,84,10486.93,57,-690.81,0,,,90,,,,,,,,130,,,,,,,,121,,,,,,,,104,,,,,,,,94,,,,,,,,86,,,,,,11.90476,15234.61166,57,11078.86523,11174.12,,10,,,,5.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0,429.490270,433.490270,670.490270,299.978291,421,530,450,330.202023,, +D,DREGION,,3,"2023/12/14 15:00:00",1,QLD1,0,59.57874,0,59.57874,0,0,7475.6,48,8210.57,50,684.97,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,65,,,,,,,,130,,,,,,,,86,,,,,,4.63505,11625.8171,50,7469.60303,7523.38,,8,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0,332,387,188,229,149.002490,247.002490,125.002490,103,, +D,DREGION,,3,"2023/12/14 15:00:00",1,SA1,0,-99.99,0,-99.99,0,0,696.58,-4,1059.28,11,351.7,0,,,109.29,,,,,,,,111,,,,,,,,80.02,,,,,,,,91,,,,,,,,86,,,,,,,,95.3,,,,,,0,2885.46645,110,729.34387,726.11,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0,275,286,285,312,222,222,190,99,, +D,DREGION,,3,"2023/12/14 15:00:00",1,TAS1,0,11.08,0,11.08,0,0,1052.58,1,631.96,0,-420.62,0,,,0,,,,,,,,5,,,,,,,,6.64,,,,,,,,3,,,,,,,,98,,,,,,,,139.1,,,,,,3.06706,2463.17328,0,1048.51636,1052.58,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.86,0.86,0,0.86,0.86,0,0,0,0,2.5,2.5,0,186.326087,255.925926,141.632391,125.866749,36.896618,78.867048,86.826390,57.341154,, +D,DREGION,,3,"2023/12/14 15:00:00",1,VIC1,0,9,0,9,0,0,4415.43,39,4558.44,5,138.02,0,,,30,,,,,,,,81.5,,,,,,,,43,,,,,,,,155.2,,,,,,,,118.41,,,,,,,,120,,,,,,20.82691,9147.85292,343,4408.20459,4471,,122,,,,113.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.26,0.26,0,0.38,0.38,0,5,5,0,0.86,0.86,0,0.86,0.86,0,0.39,0.39,0,1.3053,1.3053,0,702.2327,846.900010,798.2327,241.396253,219,312.332690,275,388.948052,, +D,DREGION,,3,"2023/12/14 15:05:00",1,NSW1,0,55.67233,0,55.67233,0,0,11137.6,82,10706.22,34,-465.38,0,,,91,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,0,15660.54661,58,11103.62891,11160.78,,0,,,,16.67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,403.477480,407.477480,644.477480,274.323413,422,531,451,328.352852,, +D,DREGION,,3,"2023/12/14 15:05:00",1,QLD1,0,54.75003,0,54.75003,0,0,7640.06,50,8193.72,50,503.66,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,18,,,,,,,,87,,,,,,,,86,,,,,,0,12011.07756,50,7636.21777,7684.89,,6,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,344,460,200,263.000002,189.604910,297.604910,175,54.972786,, +D,DREGION,,3,"2023/12/14 15:05:00",1,SA1,0,-99.99,0,-99.99,0,0,681.97,-3,1073.15,4,387.18,0,,,64.01,,,,,,,,115.19,,,,,,,,38.84,,,,,,,,90,,,,,,,,90,,,,,,,,89.65,,,,,,-16.1259,2832.11538,103,732.53027,706.93,,27,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,273,285,284,306,220,220,188,104,, +D,DREGION,,3,"2023/12/14 15:05:00",1,TAS1,0,10.09014,0,10.09014,0,0,1034.53,1,619.58,0,-414.94,0,,,1.68,,,,,,,,8.5,,,,,,,,19.71,,,,,,,,51.88,,,,,,,,93.88,,,,,,,,139.24,,,,,,-2.56771,2472.22856,0,1036.09387,1034.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.39,0.39,0,0.86,0.86,0,0.38,0.38,0,4.45986,4.45986,0,186.326087,255.256073,162.320761,135.718996,28.705243,68.459722,69.883397,49.999996,, +D,DREGION,,3,"2023/12/14 15:05:00",1,VIC1,0,9.4199,0,9.4199,0,0,4481.11,37,4533,5,46.89,0,,,69.81,,,,,,,,69.81,,,,,,,,69.81,,,,,,,,149,,,,,,,,142,,,,,,,,120,,,,,,30.37611,9106.74826,342,4465.70508,4538.55,,127,,,,102.33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,4.99,4.99,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,721,843,817,236.269470,261.813983,379.813983,319.813983,373.948052,, +D,DREGION,,3,"2023/12/14 15:10:00",1,NSW1,0,36.07,0,36.07,0,0,11259.1,80,10930.68,56,-384.42,0,,,91,,,,,,,,131,,,,,,,,112,,,,,,,,94,,,,,,,,108,,,,,,,,86,,,,,,30.95238,15660.13113,57,11177.06543,11306.04,,0,,,,10.26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0,387.363950,391.363950,388.363950,303.483787,423,532,452,333.276015,, +D,DREGION,,3,"2023/12/14 15:10:00",1,QLD1,0,36.43404,0,36.43404,0,0,7700.04,58,8119.83,50,369.79,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,18,,,,,,,,87,,,,,,,,86,,,,,,32.25277,12042.15818,50,7655.69092,7744.48,,2,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0,344,460,200,275,176.880560,256.880560,154.880560,15.000012,, +D,DREGION,,3,"2023/12/14 15:10:00",1,SA1,0,-66.37,0,-66.37,0,0,673.27,-3,1076.75,3,400.49,0,,,25,,,,,,,,69.97,,,,,,,,30,,,,,,,,92,,,,,,,,92,,,,,,,,90.77,,,,,,-14.29215,2847.8053,100,716.01874,697.94,,44,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0,275,287,286,302,217,217,184,103,, +D,DREGION,,3,"2023/12/14 15:10:00",1,TAS1,0,11.08,0,11.08,0,0,1029.47,1,622,0,-407.47,0,,,5.47,,,,,,,,8.5,,,,,,,,0,,,,,,,,60.71,,,,,,,,92.71,,,,,,,,138.95,,,,,,-3.57582,2457.66895,0,1032.04761,1029.47,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,2.5,2.5,0,186.326087,255.925926,145.525771,119.412156,33.226570,74.503672,81.444258,55.378638,, +D,DREGION,,3,"2023/12/14 15:10:00",1,VIC1,0,10.35428,0,10.35428,0,0,4502.15,36,4592.07,5,84.91,0,,,104.73,,,,,,,,114.73,,,,,,,,108.36,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,26.94116,9116.81307,345,4495.5835,4563.41,,114,,,,108.74,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.3,0.3,0,0.86,0.86,0,0.38,0.38,0,5.15,5.15,0,693.261310,815.261310,789.261310,234.764313,295.730510,413.730510,353.730510,397.568291,, +D,DREGION,,3,"2023/12/14 15:15:00",1,NSW1,0,54.27322,0,54.27322,0,0,11373.78,82,10992.51,32,-413.27,0,,,91,,,,,,,,131,,,,,,,,121.48,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,40.47619,15686.04635,57,11297.94824,11395.6,,10,,,,10.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,387,391,628,261.837008,423,532,452,352.534447,, +D,DREGION,,3,"2023/12/14 15:15:00",1,QLD1,0,54.55,0,54.55,0,0,7714.41,55,8177.68,50,413.27,0,,,0,,,,,,,,0,,,,,,,,2,,,,,,,,20,,,,,,,,88,,,,,,,,88,,,,,,27.58304,12034.97033,50,7676.16992,7758.61,,14,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,335,444,187,275.219312,158.827330,228.827330,124.827330,86.997510,, +D,DREGION,,3,"2023/12/14 15:15:00",1,SA1,0,-66.37,0,-66.37,0,0,683.82,-1,1090.73,4,402.91,0,,,39.45,,,,,,,,86.83,,,,,,,,30,,,,,,,,92,,,,,,,,92,,,,,,,,90.3,,,,,,-4.15993,2804.20554,100,711.63062,709.25,,24,,,,35.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,275,287,286,306,217,217,184,103,, +D,DREGION,,3,"2023/12/14 15:15:00",1,TAS1,0,11.08,0,11.08,0,0,1052.98,1,646.5,0,-406.48,0,,,8,,,,,,,,8.5,,,,,,,,0,,,,,,,,50.44,,,,,,,,93.32,,,,,,,,139.02,,,,,,-3.87238,2464.98354,0,1055.85229,1052.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0,186.326087,255.925926,128.994661,120.068963,37.961610,80.555371,91.501666,63.711392,, +D,DREGION,,3,"2023/12/14 15:15:00",1,VIC1,0,10.35428,0,10.35428,0,0,4549.97,35,4618.86,5,63.88,0,,,86.7,,,,,,,,96.7,,,,,,,,96.7,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,20.63452,9110.60262,344,4548.26025,4609.83,,112,,,,103,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,5,5,0,0.34,0.34,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,697,819,793,235.403625,286,404,344,391.432854,, +D,DREGION,,3,"2023/12/14 15:20:00",1,NSW1,0,63.53951,0,63.53951,0,0,11431.43,80,10963.23,56,-524.2,0,,,91,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,45.2381,15472.31591,57,11339.06543,11478.07,,10,,,,10.22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,384.399840,388.399840,615.399840,308.978301,423,532,452,289.614676,, +D,DREGION,,3,"2023/12/14 15:20:00",1,QLD1,0,62.73,0,62.73,0,0,7777.9,53,8328.01,41,509.11,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,24.62252,12032.74104,50,7744.37598,7813.17,,14,,,,18.78,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,347,459.733333,203,186.047617,228,346.705760,175,175,, +D,DREGION,,3,"2023/12/14 15:20:00",1,SA1,0,-52.11,0,-52.11,0,0,713,0,1123.17,3,407.17,0,,,40.18,,,,,,,,90.13,,,,,,,,29,,,,,,,,90,,,,,,,,89,,,,,,,,87.49,,,,,,5.9723,2804.70347,101,730.89343,736.97,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,273,284,284,302,216,216,182,103,, +D,DREGION,,3,"2023/12/14 15:20:00",1,TAS1,0,10.57593,0,10.57593,0,0,1049.35,1,632.73,0,-416.62,0,,,0,,,,,,,,8.5,,,,,,,,10.48,,,,,,,,54.03,,,,,,,,98.48,,,,,,,,143.99,,,,,,-5.04884,2474.98702,0,1053.39917,1049.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,0.38,0.38,0,0.39,0.39,0,0,0,0,3.5,3.5,0,186.326087,255.475631,151.985351,129.639493,31.844134,72.655681,77.909422,52.409711,, +D,DREGION,,3,"2023/12/14 15:20:00",1,VIC1,0,8.71957,0,8.71957,0,0,4437,32,4527.94,5,85.94,0,,,89.51,,,,,,,,89.51,,,,,,,,89.51,,,,,,,,149,,,,,,,,142,,,,,,,,120,,,,,,12.08136,9079.37115,345,4458.7002,4497.52,,112,,,,111,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.98,3.98,0,685,839,781,258.043427,268.588260,345.983190,326.588260,323.536314,, +D,DREGION,,3,"2023/12/14 15:25:00",1,NSW1,0,86.3768,0,86.3768,0,0,11581.32,82,11108.64,56,-528.68,0,,,112,,,,,,,,131,,,,,,,,122,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,50,15526.95616,57,11503.68848,11627.26,,20,,,,16.23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0,371.948490,375.948490,608.948490,274.245341,423,532,473,364.637297,, +D,DREGION,,3,"2023/12/14 15:25:00",1,QLD1,0,85.55,0,85.55,0,0,7892.02,58,8446.49,42,512.47,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,21.62112,12030.05075,50,7848.76074,7927.87,,14,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0,334.913793,443.877778,203,214.906333,236,358,183,183,, +D,DREGION,,3,"2023/12/14 15:25:00",1,SA1,0,-47,0,-47,0,0,695.1,3,1105.42,4,406.33,0,,,49.96,,,,,,,,105,,,,,,,,32,,,,,,,,92,,,,,,,,91,,,,,,,,81.93,,,,,,14.30065,2765.06618,104,703.22626,720.15,,24,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0,275,287,286,306,219,219,185,103,, +D,DREGION,,3,"2023/12/14 15:25:00",1,TAS1,0,11.08,0,11.08,0,0,1057.65,1,641.03,0,-416.62,0,,,0,,,,,,,,8.5,,,,,,,,28.54,,,,,,,,46.87,,,,,,,,94,,,,,,,,144.06,,,,,,-4.2486,2462.55817,0,1060.8938,1057.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0,0,0,2.5,2.5,0,186.326087,255.925926,131.865391,124.185953,37.537177,79.961967,90.224376,60.392652,, +D,DREGION,,3,"2023/12/14 15:25:00",1,VIC1,0,8.95,0,8.95,0,0,4442.35,20,4534.38,5,87.03,0,,,58,,,,,,,,73.58,,,,,,,,68,,,,,,,,150,,,,,,,,143,,,,,,,,121,,,,,,7.60745,9091.20844,346,4479.45508,4503.03,,102,,,,102.77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,3.75,3.75,0,687.230790,841.230790,783.230790,256.156250,261.661760,331.661760,319.661760,363.728747,, +D,DREGION,,3,"2023/12/14 15:30:00",1,NSW1,0,57.07077,0,57.07077,0,0,11568.26,81,10939.57,21,-649.69,0,,,112,,,,,,,,131,,,,,,,,112.91,,,,,,,,104,,,,,,,,108,,,,,,,,86,,,,,,0,15366.41026,58,11534.44434,11579.55,,10,,,,16.24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,360.937560,364.937560,597.937560,273.249783,422,531,472,354.729662,, +D,DREGION,,3,"2023/12/14 15:30:00",1,QLD1,0,54.75,0,54.75,0,0,7873.05,59,8560.37,0,687.32,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,0,12137.24139,50,7851.92871,7868.58,,14,,,,34.76,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,327,435.371115,202,255,255,376.598130,203,221.625693,, +D,DREGION,,3,"2023/12/14 15:30:00",1,SA1,0,-47,0,-47,0,0,696.63,5,1108.55,3,408.92,0,,,37,,,,,,,,87.36,,,,,,,,43,,,,,,,,92,,,,,,,,92,,,,,,,,81.65,,,,,,0,2785.30824,102,720.13458,720.42,,17,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,275,287,286,302,230,230,196,103,, +D,DREGION,,3,"2023/12/14 15:30:00",1,TAS1,0,13.95,0,13.95,0,0,1064.71,1,703.89,0,-360.82,0,,,0,,,,,,,,8.5,,,,,,,,0,,,,,,,,35.13,,,,,,,,78.93,,,,,,,,144.29,,,,,,-4.26194,2474.88519,0,1067.96802,1064.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,2.5,2.5,0,186.326087,228.801413,88.079441,93.639042,61.978501,112.018181,129.948158,106.543289,, +D,DREGION,,3,"2023/12/14 15:30:00",1,VIC1,0,13.16698,0,13.16698,0,0,4456.21,19,4430.81,5,-30.41,0,,,74.65,,,,,,,,95.59,,,,,,,,95.59,,,,,,,,160,,,,,,,,153,,,,,,,,120,,,,,,0,9038.53643,346,4494.89502,4509.92,,119,,,,89,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.34,0.34,0,0.39,0.39,0,0.3,0.3,0,3.99,3.99,0,710,857.005070,806,202.880009,296.590143,414.585073,354.590143,376.948052,, +D,DREGION,,3,"2023/12/14 15:35:00",1,NSW1,0,299.99,0,299.99,0,0,11691.29,80,11747.95,0,56.67,0,,,139,,,,,,,,131,,,,,,,,142.34,,,,,,,,104,,,,,,,,75.79,,,,,,,,86,,,,,,33.73267,15363.61371,57,11588.92285,11687.02,,59.38,,,,53.75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0,313.270140,317.270140,542.406430,205.259738,409,518,449,364.757954,, +D,DREGION,,3,"2023/12/14 15:35:00",1,QLD1,0,273.10796,0,273.10796,0,0,7900.45,54,8869.29,0,968.84,0,,,0,,,,,,,,4.36,,,,,,,,0,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,33.19413,12199.40363,50,7807.5332,7903.01,,57,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0,290,363.533313,175,85.000006,220,333,168,215,, +D,DREGION,,3,"2023/12/14 15:35:00",1,SA1,0,-54.99998,0,-54.99998,0,0,731.59,8,1146.53,6,408.94,0,,,25.19,,,,,,,,113,,,,,,,,28,,,,,,,,90,,,,,,,,90,,,,,,,,85.73,,,,,,16.24816,2738.29627,101,727.71289,758.39,,47,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0,273,285,284,308,215,215,181,100,, +D,DREGION,,3,"2023/12/14 15:35:00",1,TAS1,0,-40.01,0,-40.01,0,0,1067.14,1,605.14,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,55.37,,,,,,,,139.38,,,,,,,,144.44,,,,,,-1.3768,2470.24328,0,1067.51721,1067.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.874613,259.661379,155.440111,77.159334,27.600673,75.094184,61.673215,50.000001,, +D,DREGION,,3,"2023/12/14 15:35:00",1,VIC1,0,-54.25,0,-54.25,0,0,4512.02,18,3749.47,142,-904.55,0,,,61.16,,,,,,,,71.16,,,,,,,,81.16,,,,,,,,146,,,,,,,,134,,,,,,,,120,,,,,,0,9051.99798,348,4547.49609,4702.82,,42,,,,66.25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.91,19.91,0,0.34,0.34,0,0.86,0.86,0,0.39,0.39,0,10,10,0,715.582782,868.728478,815,347.3125,279.156311,328.009461,318.009461,258.436623,, +D,DREGION,,3,"2023/12/14 15:40:00",1,NSW1,0,153.28675,0,153.28675,0,0,11711.8,74,11648.49,9,-72.3,0,,,139,,,,,,,,158,,,,,,,,139,,,,,,,,93,,,,,,,,69.17,,,,,,,,75,,,,,,36.47089,15320.24826,10,11609.06641,11725.03,,40,,,,49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,308.430170,312.430170,535.430170,234.047011,450,559,500,308.684380,, +D,DREGION,,3,"2023/12/14 15:40:00",1,QLD1,0,136.14,0,136.14,0,0,7992.97,47,9094.96,0,1102,0,,,0,,,,,,,,0,,,,,,,,16,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,38.98063,12144.00574,50,7914.3999,8000.01,,44.38,,,,20,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,290.599950,338.933283,145.599950,106.629537,271,394,206,225,, +D,DREGION,,3,"2023/12/14 15:40:00",1,SA1,0,-55,0,-55,0,0,746.98,11,1150.51,16,387.52,0,,,29.52,,,,,,,,94.1,,,,,,,,29,,,,,,,,92,,,,,,,,90,,,,,,,,98.07,,,,,,18.69472,2791.32897,104,747.08264,783.24,,47,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,275,287,286,318,215,215,182,93,, +D,DREGION,,3,"2023/12/14 15:40:00",1,TAS1,0,-40.01,0,-40.01,0,0,1039.49,2,577.49,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,66.36,,,,,,,,139.38,,,,,,,,144.47,,,,,,-7.93299,2481.49589,0,1045.42542,1039.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.874613,259.630750,175.738681,90.935684,22.435023,68.237647,48.824186,49.999997,, +D,DREGION,,3,"2023/12/14 15:40:00",1,VIC1,0,-52.68,0,-52.68,0,0,4610.88,28,3809.22,73,-874.65,0,,,53.66,,,,,,,,63.66,,,,,,,,66.63,,,,,,,,144,,,,,,,,140,,,,,,,,118,,,,,,-21.75955,8991.18702,328,4791.58496,4732.9,,74,,,,71,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,14.64,14.64,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,713,866,813,305.312503,251.632653,264.394673,254.394673,248.948052,, +D,DREGION,,3,"2023/12/14 15:45:00",1,NSW1,0,137.69,0,137.69,0,0,11822.04,72,11891.75,10,59.71,0,,,136,,,,,,,,158,,,,,,,,139,,,,,,,,106,,,,,,,,89,,,,,,,,87,,,,,,21.69096,15284.85999,11,11727.8877,11831.7,,40,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0,280.779260,284.779260,508.779260,230.473838,409,518,449,315.677465,, +D,DREGION,,3,"2023/12/14 15:45:00",1,QLD1,0,124.27948,0,124.27948,0,0,8095.42,50,9121.66,0,1026.24,0,,,0,,,,,,,,20.57,,,,,,,,12,,,,,,,,21,,,,,,,,77,,,,,,,,77,,,,,,17.22364,12081.54828,50,8031.65918,8098.46,,42,,,,37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0,295,344.333333,151,188.000007,237,360,206,165,, +D,DREGION,,3,"2023/12/14 15:45:00",1,SA1,0,-59.99,0,-59.99,0,0,760.56,14,1117.26,4,352.7,0,,,23,,,,,,,,56,,,,,,,,29,,,,,,,,92,,,,,,,,92,,,,,,,,125.42,,,,,,5.67006,2803.867,98,769.84943,783.06,,57,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0,275,287,286,306,212,212,179,103,, +D,DREGION,,3,"2023/12/14 15:45:00",1,TAS1,0,-40.01,0,-40.01,0,0,1045.32,2,583.32,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,84.2,,,,,,,,146.46,,,,,,,,144.98,,,,,,-5.71658,2464.55247,0,1049.04041,1045.32,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.874613,259.398194,173.644681,80.296854,27.635023,74.217647,54.957519,49.999998,, +D,DREGION,,3,"2023/12/14 15:45:00",1,VIC1,0,-52.68,0,-52.68,0,0,4604.49,30,3721.58,25,-907.91,0,,,65.51,,,,,,,,83.58,,,,,,,,70.72,,,,,,,,116,,,,,,,,123,,,,,,,,90,,,,,,0,8882.45357,320,4687.84619,4677.04,,66.38,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,7.44,7.44,0,713.044824,866.806030,815,300.114319,251.580182,241.580182,231.580182,256.854302,, +D,DREGION,,3,"2023/12/14 15:50:00",1,NSW1,0,-19.91211,0,-19.91211,0,0,11900.7,72,12775.02,10,864.32,0,,,139,,,,,,,,158,,,,,,,,139,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,27.34886,15434.42025,59,11809.36328,11916.83,,40,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0,257.264710,262.264710,239.264710,209.970788,449,558,499,324.910366,, +D,DREGION,,3,"2023/12/14 15:50:00",1,QLD1,0,-20.5,0,-20.5,0,0,8180.97,58,8620.9,0,439.93,0,,,0,,,,,,,,14.3,,,,,,,,31,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,6.57056,12034.85366,50,8118.31104,8182.67,,0,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0,347,421.999960,203,281,256,379,209,60.000013,, +D,DREGION,,3,"2023/12/14 15:50:00",1,SA1,0,-59.99,0,-59.99,0,0,768.92,16,1126.74,7,350.82,0,,,22,,,,,,,,67,,,,,,,,27,,,,,,,,90,,,,,,,,90,,,,,,,,114.09,,,,,,-4.97365,2788.60029,103,780.37939,794.63,,97,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0,273,285,284,309,170,170,139,102,, +D,DREGION,,3,"2023/12/14 15:50:00",1,TAS1,0,-40.01,0,-40.01,0,0,1045.99,2,583.99,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,93.92,,,,,,,,144.22,,,,,,,,145.13,,,,,,-2.13166,2473.98608,0,1046.1167,1045.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.874613,259.430083,174.464681,81.185684,26.921980,73.397647,54.116493,49.999997,, +D,DREGION,,3,"2023/12/14 15:50:00",1,VIC1,0,-52.69,0,-52.69,0,0,4648.96,29,3565.77,24,-1107.19,0,,,59.53,,,,,,,,74.92,,,,,,,,55.33,,,,,,,,116,,,,,,,,112,,,,,,,,90,,,,,,-16.0569,8947.96217,319,4711.03369,4732.3,,68.38,,,,63,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,10,10,0,0.3,0.3,0,0.86,0.86,0,0.3,0.3,0,5.7,5.7,0,707.501770,860.877213,811,293.958069,184,174,164,253.205052,, +D,DREGION,,3,"2023/12/14 15:55:00",1,NSW1,0,-36.51401,0,-36.51401,0,0,11899.79,70,13464.38,10,1554.6,0,,,92,,,,,,,,132,,,,,,,,122,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,0,15556.757,60,11857.10352,11953.43,,48,,,,7.48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,275.531310,280.531310,257.531310,207.708424,422,532,452,309.639168,, +D,DREGION,,3,"2023/12/14 15:55:00",1,QLD1,0,-40.6,0,-40.6,0,0,8214.99,60,8266.21,0,51.22,0,,,28,,,,,,,,28,,,,,,,,36,,,,,,,,21,,,,,,,,86,,,,,,,,89,,,,,,-12.64976,12133.50985,50,8171.01221,8229.59,,0,,,,57.52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,347,462,203,285,261,384,210,60.000007,, +D,DREGION,,3,"2023/12/14 15:55:00",1,SA1,0,-55,0,-55,0,0,777.85,16,1191.74,8,405.89,0,,,50.24,,,,,,,,69,,,,,,,,37.43,,,,,,,,89,,,,,,,,87,,,,,,,,88.11,,,,,,-3.83732,2807.87328,112,802.39935,807.06,,72.38,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,272,284,283,302,196.62,196.62,166.62,103,, +D,DREGION,,3,"2023/12/14 15:55:00",1,TAS1,0,-40.01,0,-40.01,0,0,1054.49,3,592.49,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,4.62,,,,,,,,73.96,,,,,,,,139.38,,,,,,,,145.12,,,,,,-2.46747,2471.68375,0,1053.95813,1054.49,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.874613,259.547917,175.632181,88.912214,24.287197,70.367647,51.008801,49.999994,, +D,DREGION,,3,"2023/12/14 15:55:00",1,VIC1,0,-56.79,0,-56.79,0,0,4708.2,31,3343.28,21,-1385.92,0,,,50,,,,,,,,85.18,,,,,,,,50,,,,,,,,147,,,,,,,,133.13,,,,,,,,114,,,,,,-3.0083,8839.62591,319,4774.10498,4813.53,,85,,,,64,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.86,0.86,0,0.39,0.39,0,3.99,3.99,0,693.711396,728.889245,730,191.406253,144,134,129,267.198052,, +D,DREGION,,3,"2023/12/14 16:00:00",1,NSW1,0,-23.37255,0,-23.37255,0,0,11751.64,52,13605.71,41,1813.07,0,,,92,,,,,,,,159.1,,,,,,,,116.98,,,,,,,,96,,,,,,,,90,,,,,,,,87,,,,,,0,15674.40869,61,11755.74414,11853.92,,35,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0,260.873480,265.873480,242.873480,228.739494,423,533,453,275.880194,, +D,DREGION,,3,"2023/12/14 16:00:00",1,QLD1,0,-26.8,0,-26.8,0,0,8264.15,56,8186.1,33,-111.05,0,,,0,,,,,,,,0,,,,,,,,24,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,-0.15407,12224.65873,50,8222.11133,8318.45,,21,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0,347,462,203,278,263,384.775110,181,27.000010,, +D,DREGION,,3,"2023/12/14 16:00:00",1,SA1,0,-54.99999,0,-54.99999,0,0,784.91,17,1195.78,4,406.87,0,,,68.17,,,,,,,,76,,,,,,,,30,,,,,,,,89,,,,,,,,89,,,,,,,,98.18,,,,,,0,2801.09486,104,803.94727,810.03,,87,,,,35.89,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0,272,284,283,306,179,179,145,100,, +D,DREGION,,3,"2023/12/14 16:00:00",1,TAS1,0,-40.01,0,-40.01,0,0,1063.21,3,601.21,0,-462,0,,,0,,,,,,,,4.62,,,,,,,,0,,,,,,,,76.59,,,,,,,,139.38,,,,,,,,145.2,,,,,,-0.30733,2476.78169,0,1060.51245,1063.21,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.34,0.34,0,0.38,0.38,0,0,0,0,56.46,56.46,0,186.834481,259.358333,175.769681,106.591397,21.763284,67.617647,48.188288,50,, +D,DREGION,,3,"2023/12/14 16:00:00",1,VIC1,0,-54.25,0,-54.25,0,0,4731.1,36,3326.8,47,-1451.31,0,,,60.5,,,,,,,,80.5,,,,,,,,80.5,,,,,,,,147,,,,,,,,131.77,,,,,,,,114,,,,,,0,8791.51349,319,4806.88965,4870,,62.38,,,,86.11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,16,16,0,0.34,0.34,0,1,1,0,0.39,0.39,0,15.41,15.41,0,673,698,700,219.114319,178.323911,168.323911,163.323911,261.205052,, +D,DREGION,,3,"2023/12/14 16:05:00",1,NSW1,0,-68.26591,0,-68.26591,0,0,11972.63,54,13558.27,0,1585.64,0,,,56,,,,,,,,113.72,,,,,,,,86,,,,,,,,89,,,,,,,,84,,,,,,,,82,,,,,,25.11301,15691.68135,49,11972.62695,12019.4,,67,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0,259.550850,264.550850,240.550850,188.738466,422,532,452,271.606503,, +D,DREGION,,3,"2023/12/14 16:05:00",1,QLD1,0,-20.5,0,-20.5,0,0,8355.42,59,8192.93,0,-162.49,0,,,17,,,,,,,,17,,,,,,,,31,,,,,,,,22,,,,,,,,89,,,,,,,,116,,,,,,0,12305.21169,50,8346.0332,8379.71,,32,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0,347,462,203,258,196.300020,266.570980,93.300020,60.000009,, +D,DREGION,,3,"2023/12/14 16:05:00",1,SA1,0,-66.37,0,-66.37,0,0,798.48,17,1170.83,4,368.35,0,,,64.15,,,,,,,,100,,,,,,,,98.08,,,,,,,,124.68,,,,,,,,151.7,,,,,,,,161,,,,,,0.10588,2788.62842,100,803.94531,822.39,,70,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0,270,282,281,290,203,203,168,102,, +D,DREGION,,3,"2023/12/14 16:05:00",1,TAS1,0,-40.01,0,-40.01,0,0,1067.86,3,605.86,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,152.55,,,,,,,,144.83,,,,,,5.98952,2473.62835,0,1058.87329,1067.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,56.46039,56.46039,0,186.874613,259.523028,175.600181,78.346354,24.843719,71.007647,51.665211,49.999997,, +D,DREGION,,3,"2023/12/14 16:05:00",1,VIC1,0,-46.46,0,-46.46,0,0,4800.78,41,3697.64,69,-1172.14,0,,,83,,,,,,,,88,,,,,,,,35,,,,,,,,92,,,,,,,,62,,,,,,,,35.42,,,,,,17.38079,8801.44159,315,4847.8291,4936.17,,36.38,,,,90,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.25,9.25,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,5.9,5.9,0,688,840,792,404.540666,155.449050,148.449050,143.449050,254.490852,, +D,DREGION,,3,"2023/12/14 16:10:00",1,NSW1,0,-66.6765,0,-66.6765,0,0,11945.12,59,13430.13,10,1475.01,0,,,55,,,,,,,,118.55,,,,,,,,85,,,,,,,,89,,,,,,,,84,,,,,,,,82,,,,,,11.04313,15617.72434,50,11918.51953,11993.74,,52,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0,254.682860,260.682860,236.682860,197.763918,421,531,451,287.228106,, +D,DREGION,,3,"2023/12/14 16:10:00",1,QLD1,0,-10,0,-10,0,0,8350.46,58,8302.74,50,-97.72,0,,,0,,,,,,,,0,,,,,,,,35,,,,,,,,21,,,,,,,,89,,,,,,,,89,,,,,,-16.53473,12347.03523,50,8333.03809,8420.96,,6.98,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0,327,442,203,260,238.967460,308.967460,115.100010,10.000002,, +D,DREGION,,3,"2023/12/14 16:10:00",1,SA1,0,-66.67,0,-66.67,0,0,797.19,16,1165.73,4,364.54,0,,,47.62,,,,,,,,74,,,,,,,,48.4,,,,,,,,93,,,,,,,,93,,,,,,,,127.96,,,,,,-6.98156,2816.11583,107,817.32275,820.38,,50,,,,39,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0,275,288,287,306,217,217,185,106,, +D,DREGION,,3,"2023/12/14 16:10:00",1,TAS1,0,-36.91792,0,-36.91792,0,0,1080.39,3,652.8,0,-427.6,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,93.53,,,,,,,,144.46,,,,,,,,144.5,,,,,,4.94291,2464.8234,0,1072.45117,1080.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,53.36792,53.36792,0,186.834481,259.358333,175.769681,101.507407,21.763284,67.617647,48.188288,50,, +D,DREGION,,3,"2023/12/14 16:10:00",1,VIC1,0,-50.00997,0,-50.00997,0,0,4672.34,36,3556.37,60,-1175.97,0,,,121.61,,,,,,,,131.61,,,,,,,,83.61,,,,,,,,127,,,,,,,,123,,,,,,,,90,,,,,,22.10959,8578.74409,296,4729.63232,4792.3,,62,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,16.73,16.73,0,643,776,728,303.114319,160,149,144,265.948052,, +D,DREGION,,3,"2023/12/14 16:15:00",1,NSW1,0,-64.98634,0,-64.98634,0,0,12038.79,53,13497.84,0,1459.05,0,,,83,,,,,,,,123,,,,,,,,103,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,22.34997,15711.04399,50,12007.53418,12079.08,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,258.474550,264.474550,240.474550,215.235422,449,559,479,381.454431,, +D,DREGION,,3,"2023/12/14 16:15:00",1,QLD1,0,5E-05,0,5E-05,0,0,8483.76,57,8379,27,-131.76,0,,,0,,,,,,,,0,,,,,,,,35,,,,,,,,21,,,,,,,,89,,,,,,,,116,,,,,,3.39543,12382.04415,50,8493.32227,8534.3,,3.38,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,336,445,188,258,154.752670,175.452680,102,10.000001,, +D,DREGION,,3,"2023/12/14 16:15:00",1,SA1,0,-66.37,0,-66.37,0,0,786.77,14,1153.64,0,366.87,0,,,69.89,,,,,,,,76,,,,,,,,30,,,,,,,,93,,,,,,,,99.15,,,,,,,,95.09,,,,,,-11.68804,2852.49435,101,808.35175,806.27,,101,,,,34,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,275,288,287,302,179,179,147,111,, +D,DREGION,,3,"2023/12/14 16:15:00",1,TAS1,0,-40.01,0,-40.01,0,0,1094.83,3,632.83,0,-462,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,152.69,,,,,,,,144.75,,,,,,10.81543,2464.48709,0,1081.01831,1094.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,9.11,9.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,56.46039,56.46039,0,186.874613,259.654861,175.769681,81.566851,21.895893,67.617647,48.188288,50,, +D,DREGION,,3,"2023/12/14 16:15:00",1,VIC1,0,-46.46,0,-46.46,0,0,4775.44,31,3718.1,32,-1089.34,0,,,70.67,,,,,,,,123.85,,,,,,,,83.11,,,,,,,,124.54,,,,,,,,115,,,,,,,,102,,,,,,20.25,8740.90411,262,4821.66895,4866.93,,71,,,,73,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,14.94,14.94,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,7.73,7.73,0,649,664,666,240.383124,161,150,143,287.071642,, +D,DREGION,,3,"2023/12/14 16:20:00",1,NSW1,0,30.09242,0,30.09242,0,0,12233.22,56,13620.93,0,1387.71,0,,,83,,,,,,,,147.41,,,,,,,,113,,,,,,,,81,,,,,,,,68.39,,,,,,,,74,,,,,,30.73712,15731.25724,50,12177.0625,12254.45,,30,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0,248.707280,254.707280,230.707280,210.843872,449,559,479,369.791977,, +D,DREGION,,3,"2023/12/14 16:20:00",1,QLD1,0,34.55,0,34.55,0,0,8501.13,57,8375.67,7,-132.47,0,,,0,,,,,,,,5,,,,,,,,35,,,,,,,,23,,,,,,,,92,,,,,,,,92,,,,,,18.73499,12422.1465,50,8471.5293,8520.94,,42,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0,328.482759,437.444444,205,258,226.053490,246.053490,143,108.488247,, +D,DREGION,,3,"2023/12/14 16:20:00",1,SA1,0,-52.11,0,-52.11,0,0,808.11,13,1210.01,0,401.9,0,,,43.1,,,,,,,,73,,,,,,,,65.44,,,,,,,,91,,,,,,,,91,,,,,,,,101,,,,,,-8.02678,2909.39792,102,823.52893,829.76,,70,,,,36,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0,273,286,285,302,211,211,181,114,, +D,DREGION,,3,"2023/12/14 16:20:00",1,TAS1,0,-40.01,0,-40.01,0,0,1091.01,4,630.39,0,-460.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,81.09,,,,,,,,138,,,,,,,,144.39,,,,,,3.58523,2471.58518,0,1083.42322,1091.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,56.46,56.46,0,186.874613,259.582528,172.384681,96.199837,23.513284,69.477647,50.095981,49.999996,, +D,DREGION,,3,"2023/12/14 16:20:00",1,VIC1,0,-50.00997,0,-50.00997,0,0,4815.33,31,3797.5,62,-1079.83,0,,,95.46,,,,,,,,95.46,,,,,,,,37.46,,,,,,,,146,,,,,,,,142,,,,,,,,120,,,,,,22.48528,8808.06722,246,4836.59961,4938.33,,62,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,12.47,12.47,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,13.95117,13.95117,0,677,830,782,328.3125,137.458178,136.458178,136.458178,233.948052,, +D,DREGION,,3,"2023/12/14 16:25:00",1,NSW1,0,124.52756,0,124.52756,0,0,12322.12,59,13302.67,0,980.55,0,,,83,,,,,,,,123,,,,,,,,113,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,39.12427,15699.53455,50,12238.95508,12319.28,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0,238.157960,244.157960,220.157960,199.608520,409,519,429,349.556717,, +D,DREGION,,3,"2023/12/14 16:25:00",1,QLD1,0,136.14,0,136.14,0,0,8573.71,55,8675.46,1,100.75,0,,,0,,,,,,,,0,,,,,,,,36,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,30.93136,12427.20566,51,8505.90137,8576.28,,16,,,,24.86,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0,318,428,190,167.000002,276,367.926540,131,165,, +D,DREGION,,3,"2023/12/14 16:25:00",1,SA1,0,-52.11,0,-52.11,0,0,807.45,13,1213.51,3,403.06,0,,,26,,,,,,,,84,,,,,,,,33.22,,,,,,,,92,,,,,,,,92,,,,,,,,101.89,,,,,,0.15783,2894.39953,109,817.35529,832,,93,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0,275,287,286,305,187,187,158,114,, +D,DREGION,,3,"2023/12/14 16:25:00",1,TAS1,0,-40.01,0,-40.01,0,0,1092.74,3,651.12,0,-441.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,79.22,,,,,,,,119,,,,,,,,143.51,,,,,,1.11253,2463.75761,0,1088.62781,1092.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,57.46,57.46,0,186.763481,258.723278,175.627681,114.045257,23.998241,70.457647,51.101109,49.999996,, +D,DREGION,,3,"2023/12/14 16:25:00",1,VIC1,0,-41.11,0,-41.11,0,0,4915.12,30,3968.22,23,-969.9,0,,,116.2,,,,,,,,117.38,,,,,,,,68.49,,,,,,,,147,,,,,,,,152.4,,,,,,,,121,,,,,,19.48545,8917.63928,216,4955.44238,4990.67,,51,,,,90.14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,4.19968,4.19968,0,639,772,724,191.138367,149,160,155,276.948052,, +D,DREGION,,3,"2023/12/14 16:30:00",1,NSW1,0,499.37102,0,499.37102,0,0,12349.67,58,12978.3,0,628.63,0,,,83,,,,,,,,123,,,,,,,,103,,,,,,,,81,,,,,,,,71.68,,,,,,,,74,,,,,,0,15702.42226,50,12288.08984,12336.51,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,236.634040,242.634040,218.634040,166.644894,449,559,479,390.111641,, +D,DREGION,,3,"2023/12/14 16:30:00",1,QLD1,0,136.14,0,136.14,0,0,8614.98,53,8821.4,26,180.42,0,,,0,,,,,,,,0,,,,,,,,36,,,,,,,,23,,,,,,,,89,,,,,,,,91,,,,,,0,12455.70219,51,8566.21582,8640.56,,3.57,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,329,445,205,141.000004,295.428340,416.828330,158.828330,140,, +D,DREGION,,3,"2023/12/14 16:30:00",1,SA1,0,-64.18599,0,-64.18599,0,0,827.63,13,1199.21,0,371.58,0,,,66.14,,,,,,,,75,,,,,,,,31,,,,,,,,92,,,,,,,,90,,,,,,,,101.11,,,,,,-6.75772,2921.39339,196,850.06152,846.65,,104,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,274,287,286,302,187,187,182,201,, +D,DREGION,,3,"2023/12/14 16:30:00",1,TAS1,0,8.89075,0,8.89075,0,0,1098.7,3,639.51,0,-459.19,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,66.17,,,,,,,,136.57,,,,,,,,143.14,,,,,,4.45509,2448.8217,0,1091.24841,1098.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.30362,8.30362,0,0.3,0.3,0,0.39,0.39,0,0,0,0,6.84318,6.84318,0,186.874613,259.717286,175.849941,108.991782,22.609540,68.560255,49.929197,50.000002,, +D,DREGION,,3,"2023/12/14 16:30:00",1,VIC1,0,4.46115,0,4.46115,0,0,4783.09,22,4146.5,39,-675.59,0,,,75.95,,,,,,,,127.17,,,,,,,,82.01,,,,,,,,158,,,,,,,,143,,,,,,,,121,,,,,,18.9835,8871.56535,229,4820.68408,4862.5,,65,,,,73,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,19.38115,19.38115,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,659,792,744,168.999997,174,221.568210,216.568210,307.135551,, +D,DREGION,,3,"2023/12/14 16:35:00",1,NSW1,0,189.69969,0,189.69969,0,0,12322.56,48,12971.21,0,648.65,0,,,108,,,,,,,,177.7,,,,,,,,138,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,0,15799.6259,49,12270.37695,12323.69,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0,238.157960,244.157960,220.157960,208.272694,369,479,379,309.448496,, +D,DREGION,,3,"2023/12/14 16:35:00",1,QLD1,0,59.53,0,59.53,0,0,8724.08,51,8693.55,17,-47.53,0,,,0,,,,,,,,6,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,45.80029,12081.56055,50,8657.54688,8750.6,,26,,,,27.46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0,319,435,205,190.224970,189.300020,291.300020,87.300020,148,, +D,DREGION,,3,"2023/12/14 16:35:00",1,SA1,0,-47,0,-47,0,0,834.48,13,1265.49,0,431.02,0,,,60.44,,,,,,,,75,,,,,,,,58.34,,,,,,,,90,,,,,,,,90,,,,,,,,104.1,,,,,,0,3057.12061,193,843.13641,847.49,,100,,,,42,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0,272,285,284,302,189,189,184,204,, +D,DREGION,,3,"2023/12/14 16:35:00",1,TAS1,0,7.60161,0,7.60161,0,0,1095.72,3,638.16,0,-457.56,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,72.03,,,,,,,,134.94,,,,,,,,143.2,,,,,,3.48369,2447.18918,0,1089.23645,1095.72,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.45,0.45,0,0,0,0,8.84839,8.84839,0,186.778231,258.855208,175.657181,102.890417,23.533936,69.867647,50.495981,49.999996,, +D,DREGION,,3,"2023/12/14 16:35:00",1,VIC1,0,0.02,0,0.02,0,0,4831.04,17,4324.42,18,-524.61,0,,,55.93,,,,,,,,65.93,,,,,,,,55.93,,,,,,,,157,,,,,,,,140.36,,,,,,,,121,,,,,,27.90617,8916.21705,210,4834.75879,4875.33,,64.94,,,,85.54,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.3,0.3,0,0.38,0.38,0,9.98,9.98,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,7.5,7.5,0,685,838,790,198.2186,212.926056,314.154996,276.926056,316.948052,, +D,DREGION,,3,"2023/12/14 16:40:00",1,NSW1,0,461.42305,0,461.42305,0,0,12455.63,41,12658.96,0,203.33,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,81,,,,,,,,76,,,,,,,,74,,,,,,7.14286,15705.73144,50,12401.55957,12447.23,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,236.133540,242.133540,218.133540,171.364205,449,559,479,313.899355,, +D,DREGION,,3,"2023/12/14 16:40:00",1,QLD1,0,85.75,0,85.75,0,0,8788.77,51,8925.36,1,135.59,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,44.00642,12212.26021,51,8714.93945,8792,,1,,,,70.51,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,349,465,205,239.355764,276,380.800020,122.800020,268.278744,, +D,DREGION,,3,"2023/12/14 16:40:00",1,SA1,0,-47,0,-47,0,0,840.42,13,1343.47,6,497.06,0,,,56.57,,,,,,,,69,,,,,,,,53.35,,,,,,,,92,,,,,,,,92,,,,,,,,103.08,,,,,,0,3114.0968,212,847.0022,858.47,,97.78,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,274,287,286,308,185.218640,185.218640,180.218640,204,, +D,DREGION,,3,"2023/12/14 16:40:00",1,TAS1,0,10.57593,0,10.57593,0,0,1093.5,3,675.1,0,-418.4,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,68.63,,,,,,,,128.98,,,,,,,,142.9,,,,,,3.70383,2435.50571,0,1086.79785,1093.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.61098,7.61098,0,0.39,0.39,0,0.39,0.39,0,0,0,0,3.5,3.5,0,186.874613,260.740678,129.415831,97.709811,42.510987,94.213744,93.809288,55.854016,, +D,DREGION,,3,"2023/12/14 16:40:00",1,VIC1,0,6.13933,0,6.13933,0,0,4820.8,15,4438.41,5,-387.39,0,,,61.04,,,,,,,,108.96,,,,,,,,61.04,,,,,,,,158,,,,,,,,144,,,,,,,,122,,,,,,9.51991,8816.36002,223,4840.19287,4850.09,,38,,,,44.49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,703,813.509580,808,154.708529,266.975539,386.975539,330.975539,369,, +D,DREGION,,3,"2023/12/14 16:45:00",1,NSW1,0,501.8912,0,501.8912,0,0,12464.41,35,12484.92,5,15.52,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,0,15607.55354,52,12418.14941,12460.69,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,234,240,216,171.332150,409,519,429,292.452556,, +D,DREGION,,3,"2023/12/14 16:45:00",1,QLD1,0,114.8,0,114.8,0,0,8990.13,50,9202.33,7,205.2,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,23,,,,,,,,92,,,,,,,,91,,,,,,45.00535,12028.57565,57,8895.28613,8997.36,,1,,,,64.31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,349,419.902188,205,250.395554,266,379,132,277.187432,, +D,DREGION,,3,"2023/12/14 16:45:00",1,SA1,0,-35,0,-35,0,0,861.52,14,1405.02,6,537.5,0,,,48.47,,,,,,,,83,,,,,,,,47.46,,,,,,,,92,,,,,,,,92,,,,,,,,105.64,,,,,,0,3112.65233,218,861.00366,880.47,,91,,,,37.69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,274,287,286,308,192,192,187,210,, +D,DREGION,,3,"2023/12/14 16:45:00",1,TAS1,0,12.24327,0,12.24327,0,0,1094.57,2,677.95,0,-416.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,71.85,,,,,,,,131.8,,,,,,,,143.16,,,,,,-0.67503,2428.8093,0,1093.24524,1094.57,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.5,2.5,0,186.851516,260.143313,121.044941,89.275221,46.737740,99.522776,101.543541,62.498781,, +D,DREGION,,3,"2023/12/14 16:45:00",1,VIC1,0,8.95,0,8.95,0,0,4930.09,15,4625.36,3,-307.73,0,,,66.36,,,,,,,,91.78,,,,,,,,66.36,,,,,,,,157,,,,,,,,143,,,,,,,,121,,,,,,19.856,8846.59901,239,4923.25488,4962.5,,58,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,712,798,800,197.136391,266.364126,386.364126,330.364126,360.289517,, +D,DREGION,,3,"2023/12/14 16:50:00",1,NSW1,0,125.35666,0,125.35666,0,0,12575.38,36,12254.91,0,-320.48,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,0,15515.60475,47,12534.74805,12570.26,,10,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0,236.549320,242.549320,218.549320,212.664868,369,479,379,237.098120,, +D,DREGION,,3,"2023/12/14 16:50:00",1,QLD1,0,133.01,0,133.01,0,0,8978.17,48,9308.15,4,325.98,0,,,0,,,,,,,,15,,,,,,,,0,,,,,,,,23,,,,,,,,98.11,,,,,,,,86.3,,,,,,46.00428,11885.91388,54,8888.1582,8979.76,,40,,,,69.2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0,304.30,354.633333,160.30,222.721943,265,377,121,312,, +D,DREGION,,3,"2023/12/14 16:50:00",1,SA1,0,-29.31,0,-29.31,0,0,856.1,13,1420.38,13,551.29,0,,,47.49,,,,,,,,69,,,,,,,,47.35,,,,,,,,92.46,,,,,,,,90,,,,,,,,112.13,,,,,,0,3083.46253,230,859.53406,883.23,,48,,,,39.2,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0,272,285,284,315,214,214,210,215,, +D,DREGION,,3,"2023/12/14 16:50:00",1,TAS1,0,21.38008,0,21.38008,0,0,1095.82,2,733.59,0,-362.22,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,72.4,,,,,,,,118.07,,,,,,,,142.75,,,,,,-3.85845,2430.94101,0,1097.67383,1095.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.13,9.13,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,2.5,2.5,0,186.574613,225.040972,78.144681,49.999983,69.040620,129.852941,137.470989,108.378049,, +D,DREGION,,3,"2023/12/14 16:50:00",1,VIC1,0,20.18,0,20.18,0,0,4939.83,21,4815.7,26,-150.13,0,,,67,,,,,,,,90.81,,,,,,,,67,,,,,,,,157,,,,,,,,154,,,,,,,,121,,,,,,28.30224,8803.47894,253,4922.43457,5003.66,,62,,,,46.6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16,16,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.5,7.5,0,709.468390,744.468390,746.468390,145.603396,260,381,325,388.843750,, +D,DREGION,,3,"2023/12/14 16:55:00",1,NSW1,0,122.52307,0,122.52307,0,0,12602.58,34,12326.32,0,-276.27,0,,,108,,,,,,,,148,,,,,,,,138,,,,,,,,79,,,,,,,,74,,,,,,,,72,,,,,,1.00305,15395.19802,47,12568.05078,12601.53,,30,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,236.682860,242.682860,218.682860,213.114444,449,559,479,315.934132,, +D,DREGION,,3,"2023/12/14 16:55:00",1,QLD1,0,131.75,0,131.75,0,0,9008.41,43,9283.4,0,274.99,0,,,0,,,,,,,,6,,,,,,,,0,,,,,,,,23,,,,,,,,80,,,,,,,,79,,,,,,47.00321,11769.49545,50,8922.44336,9008.19,,1,,,,58,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,297,347.333333,153,226.919316,277,400,162,220.850796,, +D,DREGION,,3,"2023/12/14 16:55:00",1,SA1,0,-29.31,0,-29.31,0,0,855.61,13,1466.7,0,611.09,0,,,53.27,,,,,,,,89,,,,,,,,31.93,,,,,,,,91,,,,,,,,91,,,,,,,,118.03,,,,,,-8.43824,3122.29034,234,878.80927,872.22,,65,,,,49,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,274,286,285,302,214,214,210,231,, +D,DREGION,,3,"2023/12/14 16:55:00",1,TAS1,0,12.24327,0,12.24327,0,0,1100.22,2,683.6,0,-416.62,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,80.13,,,,,,,,144.15,,,,,,,,142.83,,,,,,-7.06498,2434.22679,0,1105.28479,1100.22,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,9.11,9.11,0,0.39,0.39,0,0.39,0.39,0,0,0,0,2.5,2.5,0,186.849647,259.976265,120.993861,63.000020,46.809059,99.616372,101.667975,57.730324,, +D,DREGION,,3,"2023/12/14 16:55:00",1,VIC1,0,8.95,0,8.95,0,0,4966.23,19,4840.16,5,-131.07,0,,,63,,,,,,,,81.99,,,,,,,,83,,,,,,,,150,,,,,,,,144.71,,,,,,,,122,,,,,,26.31913,8844.3267,254,4978.5918,5018.03,,64,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.73,7.73,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,3.99,3.99,0,687,768.527830,770.527830,185.636310,278,388,327,322.000002,, +D,DREGION,,3,"2023/12/14 17:00:00",1,NSW1,0,105.381,0,105.381,0,0,12730.79,34,12536.32,0,-194.48,0,,,108,,,,,,,,148,,,,,,,,128,,,,,,,,79,,,,,,,,63,,,,,,,,69.18,,,,,,3.45294,15277.89948,47,12690.54492,12734.3,,20.47,,,,15,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0,226.731680,232.731680,208.731680,203.390631,449,559,479,322.7774,, +D,DREGION,,3,"2023/12/14 17:00:00",1,QLD1,0,115.75,0,115.75,0,0,9092.52,41,9293.13,0,200.6,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,187.18,,,,,,,,189,,,,,,40.63201,11790.3468,50,9009.03516,9095.14,,71,,,,58.23,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0,349,407.333333,205,311.269233,215,338,160,252.203130,, +D,DREGION,,3,"2023/12/14 17:00:00",1,SA1,0,-30,0,-30,0,0,879.25,14,1440.9,0,561.65,0,,,52.63,,,,,,,,43.01,,,,,,,,27,,,,,,,,90,,,,,,,,86,,,,,,,,78,,,,,,1.17524,3117.30253,237,879.18805,893.23,,34,,,,30,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0,274,285,284,302,214,214,210,234,, +D,DREGION,,3,"2023/12/14 17:00:00",1,TAS1,0,11.08,0,11.08,0,0,1103.6,2,679.51,0,-424.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,73.27,,,,,,,,101.47,,,,,,,,101.47,,,,,,-13.56027,2442.78743,0,1115.15845,1103.6,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.3,0.3,0,0.39,0.39,0,0,0,0,2.5,2.5,0,186.874613,261.190972,132.729181,105.555030,38.840661,89.892564,88.740392,59.816756,, +D,DREGION,,3,"2023/12/14 17:00:00",1,VIC1,0,8.97697,0,8.97697,0,0,5071.99,23,4995.47,5,-81.51,0,,,61.38,,,,,,,,61.38,,,,,,,,47.42,,,,,,,,157,,,,,,,,95,,,,,,,,95,,,,,,33.58731,8926.82339,253,5062.03516,5119.05,,42,,,,66.77,,,,,,,,,,,,,,,,,,,0.3,0.3,0,0.01,0.01,0,0.38,0.38,0,4.98,4.98,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,1,1,0,694,786.573340,788.573340,184.843750,270.301430,390.301430,334.301430,307.000004,, +D,DREGION,,3,"2023/12/14 17:05:00",1,NSW1,0,471.30713,0,471.30713,0,0,12645.38,26,12459.14,0,-186.25,0,,,86,,,,,,,,125,,,,,,,,105,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,18.60423,15300.4334,47,12597.51367,12651.83,,15,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0,199,205,182,164.450378,409,519,430,370.662036,, +D,DREGION,,3,"2023/12/14 17:05:00",1,QLD1,0,93.75,0,93.75,0,0,9110.4,44,9307.61,0,197.21,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,193.33,,,,,,,,192,,,,,,22.06826,11808.6056,50,9043.44727,9114.92,,71,,,,82,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0,349,407.333333,205,372,228,351,163,198.228663,, +D,DREGION,,3,"2023/12/14 17:05:00",1,SA1,0,7.18401,0,7.18401,0,0,899.69,16,1452.99,0,553.3,0,,,36,,,,,,,,40,,,,,,,,40,,,,,,,,114.28,,,,,,,,89,,,,,,,,78,,,,,,0.3631,3130.689,242,898.31555,914.07,,31,,,,41,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0,272,284,283,302,227,227,223,238,, +D,DREGION,,3,"2023/12/14 17:05:00",1,TAS1,0,9.48225,0,9.48225,0,0,1104.28,2,740.46,0,-363.82,0,,,33.06,,,,,,,,16.41,,,,,,,,0,,,,,,,,103,,,,,,,,82.85,,,,,,,,128.19,,,,,,-13.53085,2451.47811,0,1115.80981,1104.28,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,9.11,9.11,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,49.96775,49.96775,0,186.834481,259.358333,175.769681,92.966837,21.763284,67.617647,48.188288,50,, +D,DREGION,,3,"2023/12/14 17:05:00",1,VIC1,0,8.95,0,8.95,0,0,5149.71,33,5018.76,5,-135.95,0,,,69.88,,,,,,,,74.44,,,,,,,,58.18,,,,,,,,162,,,,,,,,154,,,,,,,,123,,,,,,39.44824,8919.65127,277,5122.67578,5193.86,,43,,,,7,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.98,3.98,0,725,846,898,218.400180,239,359,303,314.664551,, +D,DREGION,,3,"2023/12/14 17:10:00",1,NSW1,0,478.48271,0,478.48271,0,0,12609.58,19,12423.07,0,-186.51,0,,,86,,,,,,,,105,,,,,,,,86,,,,,,,,20,,,,,,,,15,,,,,,,,13,,,,,,28.99362,15176.55358,47,12561.30957,12618.78,,5,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0,177.107440,183.107440,159.107440,122.153584,330,439,330,416.138115,, +D,DREGION,,3,"2023/12/14 17:10:00",1,QLD1,0,99.32,0,99.32,0,0,9095.06,34,9297.09,0,202.03,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,158.33,,,,,,,,157,,,,,,27.76072,11710.70142,50,9034.28613,9101.39,,55.3,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0,314,372.333333,205,352.454248,298,421,165,283.984012,, +D,DREGION,,3,"2023/12/14 17:10:00",1,SA1,0,7.22262,0,7.22262,0,0,940.77,18,1506.93,0,566.16,0,,,71.88,,,,,,,,27,,,,,,,,27,,,,,,,,115.85,,,,,,,,89,,,,,,,,99.24,,,,,,-1.23992,3186.79778,247,942.29883,955.86,,44,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0,272,284,284,298,214,214,210,247,, +D,DREGION,,3,"2023/12/14 17:10:00",1,TAS1,0,9.6408,0,9.6408,0,0,1115.52,1,706.25,0,-409.27,0,,,7.35,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,130.29,,,,,,,,143.38,,,,,,-3.24247,2450.88829,0,1117.76587,1115.52,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.05,0.05,0,0.33374,0.33374,0,0.38,0.38,0,4.5,4.5,0,187.400929,261.190972,181.744681,120.041837,26.451713,102.207647,102.805071,105.959996,, +D,DREGION,,3,"2023/12/14 17:10:00",1,VIC1,0,9,0,9,0,0,5122.97,31,5032.82,8,-98.15,0,,,61.39,,,,,,,,66.39,,,,,,,,31.42,,,,,,,,162,,,,,,,,143,,,,,,,,123,,,,,,45.30917,8769.36754,275,5092.1792,5174.61,,55.7,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,4.98,4.98,0,0.05,0.05,0,0.33374,0.33374,0,0.39,0.39,0,3.98,3.98,0,720,821.544590,893,170.663029,272.682118,387.682118,331.682118,356,, +D,DREGION,,3,"2023/12/14 17:15:00",1,NSW1,0,332.98701,0,332.98701,0,0,12703.27,15,12272.43,0,-430.84,0,,,86,,,,,,,,106,,,,,,,,97.4,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,39.383,14957.73688,47,12647.06836,12708.33,,5,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0,203,209,186,215.865097,370,480,380,324.898683,, +D,DREGION,,3,"2023/12/14 17:15:00",1,QLD1,0,131.75,0,131.75,0,0,9131.93,26,9574.95,3,440.02,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,192.33,,,,,,,,191,,,,,,16.44073,11717.798,53,9088.77246,9139.05,,38.87,,,,157,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0,308,358.333333,165,311.723821,301,424,166,279.8686,, +D,DREGION,,3,"2023/12/14 17:15:00",1,SA1,0,7.57154,0,7.57154,0,0,976.18,20,1486.53,0,510.35,0,,,69.82,,,,,,,,27,,,,,,,,27,,,,,,,,106.84,,,,,,,,89,,,,,,,,95.09,,,,,,0,3169.52846,252,970.83862,988.44,,58.33,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0,272,284,284,302,214,214,210,248,, +D,DREGION,,3,"2023/12/14 17:15:00",1,TAS1,0,13.59106,0,13.59106,0,0,1118.02,1,695.2,0,-422.82,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,126.26,,,,,,,,143.51,,,,,,-1.68433,2434.64561,0,1118.7085,1118.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.14,0.14,0,0.3,0.3,0,0,0,0,4.5,4.5,0,186.979876,261.190972,177.744681,120.041837,26.408805,102.677657,106.852779,110.439995,, +D,DREGION,,3,"2023/12/14 17:15:00",1,VIC1,0,8.95,0,8.95,0,0,5170.38,26,5134.69,1,-36.7,0,,,71.99,,,,,,,,66.56,,,,,,,,20,,,,,,,,132,,,,,,,,113,,,,,,,,93,,,,,,46.87278,8781.96092,283,5139.45801,5209.96,,64,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.14,0.14,0,0.3,0.3,0,0.39,0.39,0,3.99,3.99,0,725,848,898,226.426940,232,353,297,322.444855,, +D,DREGION,,3,"2023/12/14 17:20:00",1,NSW1,0,139.74537,0,139.74537,0,0,12757.9,11,12246.42,0,-511.48,0,,,86,,,,,,,,106,,,,,,,,73.19,,,,,,,,21,,,,,,,,7,,,,,,,,13,,,,,,45.01048,14824.325,47,12708.37305,12755,,26.4,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0,139.549960,145.549960,122.549960,114.991914,450,560,480,505.458956,, +D,DREGION,,3,"2023/12/14 17:20:00",1,QLD1,0,145.17,0,145.17,0,0,9139.58,23,9647.13,0,507.55,0,,,6.55,,,,,,,,130,,,,,,,,110,,,,,,,,24,,,,,,,,189.33,,,,,,,,191,,,,,,17.2826,11555.55003,50,9105.76953,9138.55,,69.14,,,,137,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0,308,355.333333,165,253.377409,299,422,165,329.135761,, +D,DREGION,,3,"2023/12/14 17:20:00",1,SA1,0,7.61266,0,7.61266,0,0,977.88,21,1479.41,0,501.54,0,,,23,,,,,,,,27,,,,,,,,27,,,,,,,,96.01,,,,,,,,83,,,,,,,,76,,,,,,-14.43525,3162.41348,258,983.88269,989.44,,34,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0,270,280,280,302,214,214,210,254,, +D,DREGION,,3,"2023/12/14 17:20:00",1,TAS1,0,10.70483,0,10.70483,0,0,1125.26,1,686.1,0,-439.16,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,116.53,,,,,,,,132.32,,,,,,-0.30148,2426.45452,0,1124.56104,1125.26,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0,0,0,4.5,4.5,0,186.979876,261.190972,177.744681,108.641854,22.008796,97.617647,106.774147,115.50,, +D,DREGION,,3,"2023/12/14 17:20:00",1,VIC1,0,8.95,0,8.95,0,0,5205.17,32,5192.64,0,-12.54,0,,,108,,,,,,,,62.86,,,,,,,,45,,,,,,,,162,,,,,,,,139.45,,,,,,,,123,,,,,,48.43639,8806.1152,288,5165.80615,5243.45,,53,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,1,1,0,722,845,895,251.810306,323,433,372,377.718751,, +D,DREGION,,3,"2023/12/14 17:25:00",1,NSW1,0,253.82375,0,253.82375,0,0,12805.67,10,12265.35,0,-540.32,0,,,86,,,,,,,,126,,,,,,,,108.6,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,18.93381,14906.76663,47,12779.7041,12801.17,,25,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0,118.353130,124.353130,102.052040,65.488642,450,560,480,524.815439,, +D,DREGION,,3,"2023/12/14 17:25:00",1,QLD1,0,262.32,0,262.32,0,0,9188.89,19,9722.67,0,533.78,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,185.68,,,,,,,,184.35,,,,,,23.54249,11627.80169,68,9146.18262,9186.85,,71,,,,171,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0,291.350320,338.683653,147.350320,274.985050,252,375,168,345.057636,, +D,DREGION,,3,"2023/12/14 17:25:00",1,SA1,0,7.73759,0,7.73759,0,0,1031.11,22,1490.21,0,459.1,0,,,53.17,,,,,,,,42,,,,,,,,42,,,,,,,,93.55,,,,,,,,91,,,,,,,,102.21,,,,,,0,3170.29065,262,1021.08997,1040.77,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0,274,286,286,302,229,229,225,257,, +D,DREGION,,3,"2023/12/14 17:25:00",1,TAS1,0,9.52977,0,9.52977,0,0,1080.85,1,703.14,0,-377.7,0,,,28,,,,,,,,28.5,,,,,,,,0,,,,,,,,103,,,,,,,,131.46,,,,,,,,143.58,,,,,,-0.56648,2443.2894,0,1080.41272,1080.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0,186.979876,261.190972,177.744681,108.641854,22.008796,97.617647,106.774147,115.50,, +D,DREGION,,3,"2023/12/14 17:25:00",1,VIC1,0,8.95,0,8.95,0,0,5237.28,31,5195.49,0,-41.79,0,,,56,,,,,,,,59.27,,,,,,,,55,,,,,,,,132,,,,,,,,113,,,,,,,,93,,,,,,50,8685.73873,289,5193.97461,5267.22,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.34,0.34,0,0.38,0.38,0,0.39,0.39,0,2,2,0,721,844,894,225.097290,270,385,324,351.819061,, +D,DREGION,,3,"2023/12/14 17:30:00",1,NSW1,0,272.82123,0,272.82123,0,0,12748.57,8,12250.5,0,-498.07,0,,,87,,,,,,,,107,,,,,,,,72.9,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,26.19048,14589.5219,47,12710.73242,12746.06,,10,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,101.175020,107.175020,97.175020,65.121921,450,561,481,596.318023,, +D,DREGION,,3,"2023/12/14 17:30:00",1,QLD1,0,285.75,0,285.75,0,0,9294.58,17,9789.37,0,494.79,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,152.33,,,,,,,,151,,,,,,32.35658,11574.05595,125,9243.07227,9293.81,,67.2,,,,137,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,254.0315,278.396333,115,222.927418,312,435,193,399.204725,, +D,DREGION,,3,"2023/12/14 17:30:00",1,SA1,0,7.73763,0,7.73763,0,0,1010.69,22,1464.66,0,453.97,0,,,39.46,,,,,,,,29,,,,,,,,29,,,,,,,,98.35,,,,,,,,92,,,,,,,,107,,,,,,-16.41207,3135.75358,268,1017.13397,1020.33,,34,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,274,287,286,302,216,216,212,263,, +D,DREGION,,3,"2023/12/14 17:30:00",1,TAS1,0,9.5062,0,9.5062,0,0,1076.1,2,699.45,0,-376.65,0,,,28,,,,,,,,0,,,,,,,,0,,,,,,,,103,,,,,,,,122.52,,,,,,,,143.85,,,,,,-1.04014,2433.73648,0,1075.13745,1076.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,4.5,4.5,0,186.874613,261.190972,177.744681,108.641854,21.895893,97.617647,107.784248,116.50,, +D,DREGION,,3,"2023/12/14 17:30:00",1,VIC1,0,8.95018,0,8.95018,0,0,5206.23,30,5168.43,0,-37.8,0,,,71,,,,,,,,62.97,,,,,,,,45,,,,,,,,160,,,,,,,,154,,,,,,,,121,,,,,,0,8619.15461,291,5211.06543,5236.11,,48.8,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,698,834,803,149.207327,292.204720,402.204720,341.204720,379.843750,, +D,DREGION,,3,"2023/12/14 17:35:00",1,NSW1,0,226.89335,0,226.89335,0,0,12857.79,3,12177.76,0,-680.02,0,,,87,,,,,,,,107,,,,,,,,106,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,0,14446.55463,47,12855.74609,12852.5,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,86.780970,92.780970,82.780970,62.980140,450,561,481,596.544464,, +D,DREGION,,3,"2023/12/14 17:35:00",1,QLD1,0,228.81,0,228.81,0,0,9190.83,13,9863.12,0,672.3,0,,,0,,,,,,,,70,,,,,,,,50,,,,,,,,23,,,,,,,,193.33,,,,,,,,192,,,,,,0,11602.34943,125,9175.30762,9188.38,,79.65,,,,171,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,292,338.333333,147,258.881054,252,375,205,365.342008,, +D,DREGION,,3,"2023/12/14 17:35:00",1,SA1,0,-16.68108,0,-16.68108,0,0,1030.51,22,1505.74,0,475.23,0,,,24,,,,,,,,28,,,,,,,,28,,,,,,,,90,,,,,,,,90,,,,,,,,78,,,,,,-19.08719,3258.74299,270,1038.60364,1045.74,,26.35,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,272,285,284,302,227,227,223,265,, +D,DREGION,,3,"2023/12/14 17:35:00",1,TAS1,0,-20.97544,0,-20.97544,0,0,1076.89,2,781.91,0,-294.97,0,,,26.45,,,,,,,,26.73,,,,,,,,0,,,,,,,,86.29,,,,,,,,82.25,,,,,,,,130.58,,,,,,-2.69482,2442.01454,0,1077.58191,1076.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,188.257654,268.190972,181.828125,136.749797,27.523948,163.617647,173.436880,115.50,, +D,DREGION,,3,"2023/12/14 17:35:00",1,VIC1,0,-20.0493,0,-20.0493,0,0,5185.49,24,5057.6,0,-127.88,0,,,88.95,,,,,,,,98.95,,,,,,,,66.43,,,,,,,,151,,,,,,,,156,,,,,,,,123,,,,,,50,8720.71754,295,5149.57275,5222.63,,24,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,710,863,815,190.156250,314,376.763310,365,254.343754,, +D,DREGION,,3,"2023/12/14 17:40:00",1,NSW1,0,662.96976,0,662.96976,0,0,12930.04,-1,12205.83,0,-724.21,0,,,87,,,,,,,,88.12,,,,,,,,66,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,35.71429,14458.6837,47,12896.04297,12924.69,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0,150.804750,156.804750,146.804750,205.599722,450,561,481,454.285815,, +D,DREGION,,3,"2023/12/14 17:40:00",1,QLD1,0,255.22961,0,255.22961,0,0,9245.92,8,9962.31,0,716.4,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,190.33,,,,,,,,190,,,,,,43.08641,11552.32105,125,9192.24023,9243.45,,63.9,,,,228,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0,297,343.333333,153,334.985050,312,435,205,306.591444,, +D,DREGION,,3,"2023/12/14 17:40:00",1,SA1,0,-23.79115,0,-23.79115,0,0,1044.55,21,1496.88,0,452.33,0,,,38,,,,,,,,42,,,,,,,,42,,,,,,,,92,,,,,,,,92,,,,,,,,80,,,,,,-12.77827,3244.11768,273,1053.71155,1062.03,,37.1,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0,274,287,286,302,229,229,225,268,, +D,DREGION,,3,"2023/12/14 17:40:00",1,TAS1,0,-20.83107,0,-20.83107,0,0,1063.89,1,795.07,0,-268.81,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,30.11,,,,,,,,84.72,,,,,,,,132.05,,,,,,4.11296,2470.70647,0,1058.77344,1063.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,4.5,4.5,0,191.732094,283.398174,190.317098,188.323967,35.104544,161.982667,159.389827,115.50,, +D,DREGION,,3,"2023/12/14 17:40:00",1,VIC1,0,-20.01289,0,-20.01289,0,0,5104.96,14,4987.39,8,-125.58,0,,,100.18,,,,,,,,70,,,,,,,,39.47,,,,,,,,152,,,,,,,,157,,,,,,,,124,,,,,,21.42857,8713.56963,301,5113.12598,5153.42,,29,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.15,0.15,0,0.3,0.3,0,3.99,3.99,0,711,864,816,207.843750,305,322.309420,317.309420,255.906253,, +D,DREGION,,3,"2023/12/14 17:45:00",1,NSW1,0,256.37849,0,256.37849,0,0,12997.29,-6,12378.62,0,-618.67,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,21,,,,,,,,15,,,,,,,,13,,,,,,40.47619,14516.23251,47,12959.62793,12992.88,,30,,,,40,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0,86.737640,92.737640,82.737640,65.121921,320,361,342,502.868199,, +D,DREGION,,3,"2023/12/14 17:45:00",1,QLD1,0,262.31,0,262.31,0,0,9292.11,3,9904.5,0,612.39,0,,,0,,,,,,,,130,,,,,,,,100.24,,,,,,,,21,,,,,,,,188.27,,,,,,,,186.94,,,,,,47.36973,11440.80887,125,9239.02148,9290.24,,61.06,,,,228,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0,293.936440,341.269773,150.936440,353.985050,312,435,205,303.750993,, +D,DREGION,,3,"2023/12/14 17:45:00",1,SA1,0,-22.36712,0,-22.36712,0,0,1108.69,21,1560.68,0,451.99,0,,,38,,,,,,,,42,,,,,,,,42,,,,,,,,92,,,,,,,,92,,,,,,,,80,,,,,,0,3396.20531,277,1106.57861,1124.35,,47.94,,,,10,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0,274,287,286,302,229,229,225,272,, +D,DREGION,,3,"2023/12/14 17:45:00",1,TAS1,0,-19.76636,0,-19.76636,0,0,1063.27,-1,796.94,0,-266.32,0,,,12.71,,,,,,,,0,,,,,,,,0,,,,,,,,30.35,,,,,,,,90.14,,,,,,,,135.47,,,,,,10.92074,2456.24468,0,1053.34583,1063.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,4.5,4.5,0,188.152391,267.763194,181.278125,182.906637,27.732784,163.987647,174.452730,116.129997,, +D,DREGION,,3,"2023/12/14 17:45:00",1,VIC1,0,-18.99,0,-18.99,0,0,5145.32,11,5011.97,0,-133.35,0,,,103.71,,,,,,,,88.48,,,,,,,,44,,,,,,,,152,,,,,,,,154,,,,,,,,124,,,,,,0,8694.24339,301,5184.65332,5181.98,,21,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,3.99,3.99,0,719,859,892,231.046964,269,330.730960,330.730960,276.156250,, +D,DREGION,,3,"2023/12/14 17:50:00",1,NSW1,0,283.68148,0,283.68148,0,0,13030.84,-10,12387.15,0,-643.69,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,45.2381,14263.84227,47,12991.4043,13026.04,,15,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0,86.163910,92.163910,82.163910,68.069326,380,461,382,434.564888,, +D,DREGION,,3,"2023/12/14 17:50:00",1,QLD1,0,290.31,0,290.31,0,0,9290.27,3,9927.04,0,636.77,0,,,0,,,,,,,,90,,,,,,,,70,,,,,,,,17,,,,,,,,151.33,,,,,,,,150,,,,,,48.98413,11275.61872,125,9236.02051,9288.16,,71,,,,332.16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0,235.045470,256.180783,97.999530,406.984589,272,395,205,359.267666,, +D,DREGION,,3,"2023/12/14 17:50:00",1,SA1,0,7.6527,0,7.6527,0,0,1105.5,21,1560.46,0,454.97,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,85,,,,,,,,89,,,,,,,,110.22,,,,,,-2.67463,3377.55496,283,1103.0061,1115.75,,38,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0,272,284,284,292,228,228,225,288,, +D,DREGION,,3,"2023/12/14 17:50:00",1,TAS1,0,9.36324,0,9.36324,0,0,1080.11,-1,786.94,0,-293.17,0,,,60,,,,,,,,69.47,,,,,,,,14.73,,,,,,,,3,,,,,,,,131.23,,,,,,,,143.34,,,,,,12.81763,2447.14143,0,1068.28882,1080.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,188.257654,268.190972,181.828125,126.746177,27.523948,163.617647,173.436880,91.466667,, +D,DREGION,,3,"2023/12/14 17:50:00",1,VIC1,0,8.94982,0,8.94982,0,0,5159.59,14,5034.69,0,-124.9,0,,,57.07,,,,,,,,61,,,,,,,,61,,,,,,,,101,,,,,,,,154,,,,,,,,124,,,,,,-7.58208,8640.83077,304,5189.26123,5186.24,,36,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.99,3.99,0,711,847.388610,884,171.593089,255,366.611390,320,336.156250,, +D,DREGION,,3,"2023/12/14 17:55:00",1,NSW1,0,279.20286,0,279.20286,0,0,13053.11,-13,12435.14,0,-617.96,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,11.3,,,,,,,,15,,,,,,,,13,,,,,,50,14201.95954,47,13012.37695,13048.66,,30,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0,86.713220,92.713220,82.713220,72.580541,320,361,342,504.430760,, +D,DREGION,,3,"2023/12/14 17:55:00",1,QLD1,0,285.75,0,285.75,0,0,9284.59,5,9896.21,0,611.62,0,,,0,,,,,,,,117.53,,,,,,,,97.53,,,,,,,,17,,,,,,,,151.33,,,,,,,,159.02,,,,,,49.51176,11205.27485,125,9227.60547,9282.69,,87,,,,321.08,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0,257,278.954113,113,435.660835,299.530090,422.530090,205,409.986377,, +D,DREGION,,3,"2023/12/14 17:55:00",1,SA1,0,0,0,0,0,0,1127.88,20,1623.52,0,495.64,0,,,40,,,,,,,,43,,,,,,,,43,,,,,,,,88,,,,,,,,113.73,,,,,,,,149,,,,,,2.99107,3407.8997,289,1116.67139,1143.37,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0,273,285,285,265.071690,230,230,227,318.928310,, +D,DREGION,,3,"2023/12/14 17:55:00",1,TAS1,0,0.42182,0,0.42182,0,0,1084.65,-1,792.11,0,-292.54,0,,,4.57,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,143.26,,,,,,7.10344,2451.20623,0,1078.54211,1084.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,7.11778,7.11778,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,4.5,4.5,0,188.152391,268.190972,181.828125,113.091852,27.411045,163.617647,174.446981,116.50,, +D,DREGION,,3,"2023/12/14 17:55:00",1,VIC1,0,0.4032,0,0.4032,0,0,5114.02,10,4964.04,0,-149.98,0,,,112.32,,,,,,,,103.26,,,,,,,,46.92,,,,,,,,111,,,,,,,,113,,,,,,,,83,,,,,,4.39589,8607.03883,310,5130.05615,5151.65,,23,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.03,0.03,0,0.3,0.3,0,0.38,0.38,0,2,2,0,685,808,858,237.305786,321.308725,439.308725,378.308725,328,, +D,DREGION,,3,"2023/12/14 18:00:00",1,NSW1,0,272.23827,0,272.23827,0,0,12950.27,-21,12563.45,0,-386.82,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,50,14089.71754,47,12912.91699,12945.01,,22,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0,86.188320,92.188320,82.188320,83.361946,380,461,382,445.736695,, +D,DREGION,,3,"2023/12/14 18:00:00",1,QLD1,0,285.75,0,285.75,0,0,9339.51,3,9831.14,0,491.63,0,,,0,,,,,,,,95,,,,,,,,85,,,,,,,,17,,,,,,,,132.33,,,,,,,,132,,,,,,44.03282,11107.37262,125,9290.45117,9339.55,,82,,,,319.37,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0,239,256.338273,113,467.989990,287,400,170,412.762661,, +D,DREGION,,3,"2023/12/14 18:00:00",1,SA1,0,45.57032,0,45.57032,0,0,1170.59,19,1579.25,0,408.65,0,,,40,,,,,,,,43,,,,,,,,43,,,,,,,,86,,,,,,,,108.53,,,,,,,,139.41,,,,,,10.98487,3385.59663,292,1155.93518,1178.17,,20,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0,273,286,285,296,230,230,227,292,, +D,DREGION,,3,"2023/12/14 18:00:00",1,TAS1,0,53.57593,0,53.57593,0,0,1076.98,-1,848.21,0,-228.77,0,,,54.63,,,,,,,,63.89,,,,,,,,0,,,,,,,,3,,,,,,,,153.77,,,,,,,,143.23,,,,,,6.6128,2448.18627,0,1071.36255,1076.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,7.61057,7.61057,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,188.152391,267.740678,153.708985,79.042961,38.908914,178.987593,234.237515,146.587013,, +D,DREGION,,3,"2023/12/14 18:00:00",1,VIC1,0,51.86857,0,51.86857,0,0,5153.08,5,4884.41,0,-268.67,0,,,61.41,,,,,,,,61.41,,,,,,,,59.96,,,,,,,,117,,,,,,,,147,,,,,,,,129,,,,,,2.17977,8382.04754,316,5176.33984,5166.76,,36,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,2,2,0,722,794.633450,870.633450,123.374115,279.387430,426.387430,370.387430,380.843750,, +D,DREGION,,3,"2023/12/14 18:05:00",1,NSW1,0,358.02232,0,358.02232,0,0,13014.44,-23,12460.21,0,-554.23,0,,,68,,,,,,,,67,,,,,,,,66,,,,,,,,19.33,,,,,,,,15,,,,,,,,13,,,,,,50,13970.49855,0,12979.94922,13011.75,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0,86.854210,92.854210,82.854210,64.870144,380,461,382,508.951471,, +D,DREGION,,3,"2023/12/14 18:05:00",1,QLD1,0,371.02009,0,371.02009,0,0,9276.24,4,9829.03,0,552.79,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,17,,,,,,,,130.5,,,,,,,,130.53,,,,,,30.69521,11030.67265,75,9239.82031,9275.5,,91,,,,313.65,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0,217.528687,225.782166,113,400.634474,312,435,205,415.155148,, +D,DREGION,,3,"2023/12/14 18:05:00",1,SA1,0,48.39572,0,48.39572,0,0,1166.8,18,1601.08,0,434.27,0,,,67.81,,,,,,,,29,,,,,,,,29,,,,,,,,87,,,,,,,,160.92,,,,,,,,163,,,,,,2.89655,3403.73725,296,1155.55322,1175.24,,29,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0,272,285,284,286,229,229,226,290,, +D,DREGION,,3,"2023/12/14 18:05:00",1,TAS1,0,56,0,56,0,0,1077.19,-1,924.96,0,-152.23,0,,,60,,,,,,,,76.48,,,,,,,,19.54,,,,,,,,3,,,,,,,,102.22,,,,,,,,102.22,,,,,,-0.69082,2462.49826,0,1078.87903,1077.19,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.3,0.3,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,2.5,2.5,0,190.112080,270.174571,128.036528,101.759839,56.960051,210.975445,295.309114,171.942779,, +D,DREGION,,3,"2023/12/14 18:05:00",1,VIC1,0,55.08433,0,55.08433,0,0,5180.44,4,4967.84,45,-257.6,0,,,30,,,,,,,,30,,,,,,,,30,,,,,,,,113,,,,,,,,141,,,,,,,,140.89,,,,,,16.52342,8402.65505,337,5177.23291,5243.44,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.3,0.3,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.7,3.7,0,697,752.813780,754.813780,111.264608,266,512,399,395.843750,, +D,DREGION,,3,"2023/12/14 18:10:00",1,NSW1,0,178.69508,0,178.69508,0,0,12818.33,-25,12428.06,0,-390.27,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,6,,,,,,,,15,,,,,,,,13,,,,,,0,13816.5579,47,12837.42578,12820.75,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0,86.737640,92.737640,82.737640,65.121921,380,462,382,510.822273,, +D,DREGION,,3,"2023/12/14 18:10:00",1,QLD1,0,190.74,0,190.74,0,0,9194.31,-1,9589.33,0,395.02,0,,,28,,,,,,,,130,,,,,,,,110,,,,,,,,17,,,,,,,,191.33,,,,,,,,191,,,,,,0,10953.89901,125,9194.1416,9196.63,,34.14,,,,303,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0,298.825660,337.829093,153.825660,504.810710,312,435,205,305.089781,, +D,DREGION,,3,"2023/12/14 18:10:00",1,SA1,0,43.60546,0,43.60546,0,0,1204.83,18,1649.76,0,444.93,0,,,58.94,,,,,,,,29,,,,,,,,29,,,,,,,,84.09,,,,,,,,79,,,,,,,,80.58,,,,,,0,3454.6145,298,1199.39075,1213.71,,52.86,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0,274,287,286,302,229,229,226,292,, +D,DREGION,,3,"2023/12/14 18:10:00",1,TAS1,0,52.08,0,52.08,0,0,1077.33,-1,792.03,0,-285.3,0,,,0,,,,,,,,25.85,,,,,,,,0,,,,,,,,3,,,,,,,,104.52,,,,,,,,143.41,,,,,,1.27026,2436.41058,0,1077.06018,1077.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,9.11,9.11,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0,184.389087,244.092361,113.45,105.599770,24.474977,73.961102,89.725727,96.465483,, +D,DREGION,,3,"2023/12/14 18:10:00",1,VIC1,0,49.90715,0,49.90715,0,0,5157.19,4,5062.61,33,-127.58,0,,,71,,,,,,,,81,,,,,,,,51.31,,,,,,,,104,,,,,,,,158.13,,,,,,,,120,,,,,,0,8442.73954,338,5210.94775,5213.36,,53,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.39,0.39,0,3.99,3.99,0,708.134030,743.134030,745.134030,142.9999,298,532,415,408.6875,, +D,DREGION,,3,"2023/12/14 18:15:00",1,NSW1,0,216.98402,0,216.98402,0,0,12883.46,-30,12446.34,0,-437.12,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,43.52828,13717.13118,47,12867.56738,12883.49,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,86.188320,92.188320,82.188320,66.103996,320,362,342,457.104138,, +D,DREGION,,3,"2023/12/14 18:15:00",1,QLD1,0,228.81,0,228.81,0,0,9207.49,-3,9645.48,0,437.98,0,,,0,,,,,,,,95,,,,,,,,85,,,,,,,,17,,,,,,,,131.33,,,,,,,,131,,,,,,-2.8901,10923.52497,125,9213.3457,9208.32,,81,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,238,281.333333,153,443.985050,287,400,170,383.350439,, +D,DREGION,,3,"2023/12/14 18:15:00",1,SA1,0,45.18452,0,45.18452,0,0,1209.1,17,1663.35,0,454.24,0,,,48.35,,,,,,,,42,,,,,,,,42,,,,,,,,87.22,,,,,,,,99.25,,,,,,,,143.01,,,,,,11.38126,3501.46488,298,1190.57983,1218.34,,18,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,274,287,286,302,229,229,226,292,, +D,DREGION,,3,"2023/12/14 18:15:00",1,TAS1,0,53.57593,0,53.57593,0,0,1072.12,0,829.7,0,-242.42,0,,,60,,,,,,,,79.48,,,,,,,,20.03,,,,,,,,3,,,,,,,,153.77,,,,,,,,143.35,,,,,,-7.12323,2427.80489,0,1079.24646,1072.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,7.61057,7.61057,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,3.5,3.5,0,188.257654,267.740678,150.932255,77.427924,39.567199,179.716641,236.035723,122.953326,, +D,DREGION,,3,"2023/12/14 18:15:00",1,VIC1,0,51.73558,0,51.73558,0,0,5164.11,5,5002.72,19,-180.39,0,,,49,,,,,,,,49,,,,,,,,49,,,,,,,,104,,,,,,,,154,,,,,,,,123,,,,,,40.4488,8320.72187,339,5167.28662,5205.3,,41,,,,19,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.05,0.05,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,708,743,745,133,266,510,398,393.843750,, +D,DREGION,,3,"2023/12/14 18:20:00",1,NSW1,0,183.569,0,183.569,0,0,12774.67,-31,12265.2,0,-509.46,0,,,68,,,,,,,,68,,,,,,,,66,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,0,13597.01695,47,12801.52441,12772.78,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,86.586210,92.586210,82.586210,63.973538,320,362,342,496.431851,, +D,DREGION,,3,"2023/12/14 18:20:00",1,QLD1,0,190.74,0,190.74,0,0,9111.99,-7,9619.21,0,507.22,0,,,11.87,,,,,,,,130,,,,,,,,110,,,,,,,,19,,,,,,,,133.33,,,,,,,,132,,,,,,0,10905.36651,125,9117.94629,9111.63,,81,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,249,293.333333,165,454.308780,312,435,205,421.156250,, +D,DREGION,,3,"2023/12/14 18:20:00",1,SA1,0,20.66,0,20.66,0,0,1237.91,16,1596.06,4.77,353.38,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,87,,,,,,,,118.9,,,,,,,,163,,,,,,0,3507.1216,298,1229.87195,1248.29,,20,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,272,285,284,290.767650,228,228,225,287.232350,, +D,DREGION,,3,"2023/12/14 18:20:00",1,TAS1,0,24.20102,0,24.20102,0,0,1079.61,0,766.71,0,-312.89,0,,,60,,,,,,,,48.22,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,143.32,,,,,,-5.98604,2426.81432,0,1085.59534,1079.61,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,7.11778,7.11778,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,4.5,4.5,0,188.257654,268.190972,181.828125,113.091852,27.523948,163.617647,173.436880,91.466667,, +D,DREGION,,3,"2023/12/14 18:20:00",1,VIC1,0,23.01564,0,23.01564,0,0,5088.83,1,5101.59,30,-17.24,0,,,51,,,,,,,,51,,,,,,,,46.77,,,,,,,,84.1,,,,,,,,129,,,,,,,,99.14,,,,,,0,8353.5867,340,5121.77295,5136.47,,39,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,1.5,1.5,0,680,715,717,140,258,502,390,383.843650,, +D,DREGION,,3,"2023/12/14 18:25:00",1,NSW1,0,280.09952,0,280.09952,0,0,12846.61,-36,12230.65,0,-615.95,0,,,69,,,,,,,,68,,,,,,,,67,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,26.78506,13455.329,47,12855.20117,12842.05,,20,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,83.605130,89.605130,79.605130,60.070156,381,462,383,514.301995,, +D,DREGION,,3,"2023/12/14 18:25:00",1,QLD1,0,285.75,0,285.75,0,0,9136.49,-10,9745.87,0,609.39,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,19,,,,,,,,153.33,,,,,,,,153,,,,,,4.3985,10895.77519,125,9140.44238,9134.47,,80.63,,,,319.48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,260,295.320833,115,466.985050,312,435,205,399.839157,, +D,DREGION,,3,"2023/12/14 18:25:00",1,SA1,0,46.68689,0,46.68689,0,0,1262.46,16,1600.88,0,338.42,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,74,,,,,,,,92,,,,,,,,120.13,,,,,,6.82236,3360.88497,298,1249.82312,1267.55,,21.37,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,274,287,286,302,229,229,226,292,, +D,DREGION,,3,"2023/12/14 18:25:00",1,TAS1,0,53.57593,0,53.57593,0,0,1069.33,0,831.76,0,-237.57,0,,,59.82,,,,,,,,31.84,,,,,,,,0,,,,,,,,3,,,,,,,,138.16,,,,,,,,143.36,,,,,,-3.03235,2449.32048,0,1072.36279,1069.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,7.61098,7.61098,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,188.257654,267.740678,170.285055,104.298644,35.766118,174.635489,216.462897,113.198263,, +D,DREGION,,3,"2023/12/14 18:25:00",1,VIC1,0,51.73558,0,51.73558,0,0,5148.96,0,5093.47,27,-82.49,0,,,60,,,,,,,,65,,,,,,,,45.28,,,,,,,,107,,,,,,,,157,,,,,,,,126,,,,,,47.63432,8308.46833,340,5142.45215,5189.24,,38,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,0.38,0.38,0,0.38,0.38,0,1.5,1.5,0,675.666667,695,697,132,273.0001,390.0001,334.0001,351.882652,, +D,DREGION,,3,"2023/12/14 18:30:00",1,NSW1,0,254.00486,0,254.00486,0,0,12815.14,-32,12259.5,0,-555.64,0,,,69,,,,,,,,68,,,,,,,,67,,,,,,,,7,,,,,,,,15,,,,,,,,13,,,,,,28.69815,13359.03182,47,12812.8418,12811.21,,9,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,83.610620,89.610620,79.610620,61.870144,381,462,383,513.765809,, +D,DREGION,,3,"2023/12/14 18:30:00",1,QLD1,0,262.33,0,262.33,0,0,9143.8,-7,9693.87,0,550.06,0,,,0,,,,,,,,130,,,,,,,,53.91,,,,,,,,19,,,,,,,,182.52,,,,,,,,179.52,,,,,,17.48889,10878.72418,125,9130.99316,9142.15,,81,,,,332.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,282.578960,325.912293,137.578960,482.378320,312,435,205,416.366919,, +D,DREGION,,3,"2023/12/14 18:30:00",1,SA1,0,89.88629,0,89.88629,0,0,1253.24,16,1538.64,0,285.4,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,87,,,,,,,,139,,,,,,,,165,,,,,,0.33348,3298.64088,299,1242.2677,1256.82,,10,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,274,287,286,286,229,229,226,292,, +D,DREGION,,3,"2023/12/14 18:30:00",1,TAS1,0,98.18,0,98.18,0,0,1066.82,0,956.17,0,-110.65,0,,,44.98,,,,,,,,57.09,,,,,,,,57.09,,,,,,,,3,,,,,,,,60.65,,,,,,,,60.65,,,,,,-5.82591,2438.51825,0,1072.65088,1066.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,9.11,9.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0,182.993914,197.286732,47.473885,55.666151,112.788272,264.607181,335.142967,124.466669,, +D,DREGION,,3,"2023/12/14 18:30:00",1,VIC1,0,98.03565,0,98.03565,0,0,5234,2,5070.16,0,-163.84,0,,,76,,,,,,,,41.03,,,,,,,,35,,,,,,,,109,,,,,,,,159,,,,,,,,138,,,,,,50,8255.16047,341,5215.97119,5241.33,,60,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,667,680,682,106,293.0001,532.0001,415.0001,428.974509,, +D,DREGION,,3,"2023/12/14 18:35:00",1,NSW1,0,173.7398,0,173.7398,0,0,12789.39,-32,12441.26,0,-348.13,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,33.66086,13284.89504,47,12781.8916,12789.59,,7,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0,86.653960,92.653960,82.653960,64.870144,381,463,384,473.040925,, +D,DREGION,,3,"2023/12/14 18:35:00",1,QLD1,0,185.19,0,185.19,0,0,9146.87,-8,9524.81,0,377.94,0,,,0,,,,,,,,130,,,,,,,,94.79,,,,,,,,19,,,,,,,,133.33,,,,,,,,133,,,,,,8.13131,10884.23978,125,9144.27539,9148.35,,101,,,,318.03,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0,250,293.333333,165,452.010046,312,435,205,434.562649,, +D,DREGION,,3,"2023/12/14 18:35:00",1,SA1,0,47.80801,0,47.80801,0,0,1275.13,15,1551.67,0,276.54,0,,,38,,,,,,,,41,,,,,,,,41,,,,,,,,87,,,,,,,,100.76,,,,,,,,137.8,,,,,,-7.14611,3361.59957,299,1271.06177,1278.48,,10,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0,272,285,284,302,228,228,225,291.89,, +D,DREGION,,3,"2023/12/14 18:35:00",1,TAS1,0,53.57593,0,53.57593,0,0,1080.87,1,857.97,0,-222.9,0,,,53.2,,,,,,,,25.62,,,,,,,,0,,,,,,,,3,,,,,,,,147.79,,,,,,,,144.08,,,,,,3.11259,2439.41053,0,1076.75305,1080.87,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,9.11,9.11,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,191.154274,276.763194,128.515723,59.550017,49.346526,200.833270,246.335360,137.224928,, +D,DREGION,,3,"2023/12/14 18:35:00",1,VIC1,0,51.86857,0,51.86857,0,0,5254.4,8,5204.94,21,-70.47,0,,,68,,,,,,,,73,,,,,,,,53,,,,,,,,118.43,,,,,,,,159,,,,,,,,128,,,,,,49.09615,8190.8186,342,5205.86914,5283.37,,42,,,,1,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,1,1,0,658.666667,667,669,116,275,544.12,407,394.068359,, +D,DREGION,,3,"2023/12/14 18:40:00",1,NSW1,0,172.64163,0,172.64163,0,0,12744.32,-33,12400.4,0,-343.93,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,10,,,,,,,,15,,,,,,,,13,,,,,,38.62357,13159.04786,47,12740.23535,12746.7,,18,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,86.586210,92.586210,82.586210,66.103996,381,463,384,490.834481,, +D,DREGION,,3,"2023/12/14 18:40:00",1,QLD1,0,185.19,0,185.19,0,0,9159.51,-3,9528.02,20,348.51,0,,,0,,,,,,,,130,,,,,,,,78.7,,,,,,,,19,,,,,,,,133.33,,,,,,,,133,,,,,,-7.11217,10873.94897,125,9169.89258,9181.71,,101,,,,318,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,250,293.333333,165,473.985050,312,435,205,413.765774,, +D,DREGION,,3,"2023/12/14 18:40:00",1,SA1,0,48.41746,0,48.41746,0,0,1298.35,15,1577.41,0,279.05,0,,,39,,,,,,,,42,,,,,,,,42,,,,,,,,89,,,,,,,,95.11,,,,,,,,133.76,,,,,,-3.96673,3373.40608,298,1291.23975,1301.77,,21,,,,10,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,274,287,286,302,229,229,226,291,, +D,DREGION,,3,"2023/12/14 18:40:00",1,TAS1,0,54.08,0,54.08,0,0,1062.93,1,858.05,0,-204.89,0,,,17,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,,,154.22,,,,,,,,148.9,,,,,,0,2427.0897,0,1061.93396,1062.93,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,7.11778,7.11778,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2.5,2.5,0,191.259537,283.190972,156.261563,75.137885,45.129353,200.465631,253.940359,136.892341,, +D,DREGION,,3,"2023/12/14 18:40:00",1,VIC1,0,52.62713,0,52.62713,0,0,5195.91,7,5140.88,7,-62.02,0,,,104,,,,,,,,98.91,,,,,,,,79,,,,,,,,117.76,,,,,,,,159,,,,,,,,128,,,,,,49.24679,8096.48267,345,5171.10205,5211.63,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.26,0.26,0,0.26,0.26,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,1,1,0,654,669.60,671.60,115,336,625.40,463,426.099509,, +D,DREGION,,3,"2023/12/14 18:45:00",1,NSW1,0,213.10754,0,213.10754,0,0,12720.59,-34,12447.6,0,-272.99,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,15.07,,,,,,,,24,,,,,,,,24.67,,,,,,42.29194,13052.56493,47,12708.88379,12720.56,,5,,,,40,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0,83.068390,89.068390,79.068390,76.618885,261,343,234,415.308888,, +D,DREGION,,3,"2023/12/14 18:45:00",1,QLD1,0,228.81,0,228.81,0,0,9237.39,-1,9576.86,0,339.47,0,,,0,,,,,,,,73.35,,,,,,,,17.9,,,,,,,,19,,,,,,,,164.33,,,,,,,,163,,,,,,0,10860.54524,125,9255.18066,9239.38,,109.72,,,,318,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0,240,283.333333,155,415.985050,287,400,170,408.250123,, +D,DREGION,,3,"2023/12/14 18:45:00",1,SA1,0,174.84,0,174.84,0,0,1335.11,15,1590.63,11,244.52,0,,,27,,,,,,,,30,,,,,,,,30,,,,,,,,88,,,,,,,,140,,,,,,,,167,,,,,,-3.48157,3449.41966,299,1326.08984,1348.7,,22,,,,10,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0,274,286,285,294.885880,228,228,225,283.114120,, +D,DREGION,,3,"2023/12/14 18:45:00",1,TAS1,0,169.92484,0,169.92484,0,0,1075.59,1,998.69,0,-76.9,0,,,56.57,,,,,,,,90.81,,,,,,,,90.81,,,,,,,,0,,,,,,,,26.89,,,,,,,,26.89,,,,,,3.74743,2418.49457,0,1070.84363,1075.59,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,80.85484,80.85484,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0,154.557978,177.640972,21.515723,50,117.046927,320.052941,384.514812,193.287293,, +D,DREGION,,3,"2023/12/14 18:45:00",1,VIC1,0,187.71676,0,187.71676,0,0,5276.89,6,5049.88,0,-227.01,0,,,70,,,,,,,,70,,,,,,,,70,,,,,,,,143,,,,,,,,204.33,,,,,,,,178,,,,,,49.39743,7991.87784,346,5232.66406,5279.44,,23.28,,,,0,,,,,,,,,,,,,,,,,,,1.43,1.43,0,0.79,0.79,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,3.98,3.98,0,649,654,656,100,198,380,264,322.848533,, +D,DREGION,,3,"2023/12/14 18:50:00",1,NSW1,0,134.65222,0,134.65222,0,0,12617.53,-33,12361.29,0,-256.24,0,,,70,,,,,,,,69,,,,,,,,67,,,,,,,,18.35,,,,,,,,29.4,,,,,,,,32.73,,,,,,0,12913.36263,47,12647.82324,12618.65,,15,,,,40,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0,136.067750,142.067750,132.067750,169.079167,341,423,334,392.787746,, +D,DREGION,,3,"2023/12/14 18:50:00",1,QLD1,0,145.20003,0,145.20003,0,0,9149.83,1,9463.35,0,313.53,0,,,0,,,,,,,,130,,,,,,,,85.53,,,,,,,,23,,,,,,,,164.33,,,,,,,,167,,,,,,-5.12799,10854.24846,125,9153.85449,9152.27,,101,,,,318,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0,250,293.333333,165,445.985050,312,435,205,419.946407,, +D,DREGION,,3,"2023/12/14 18:50:00",1,SA1,0,139.44,0,139.44,0,0,1340.45,15,1575.52,13.56,221.51,0,,,39.11,,,,,,,,41,,,,,,,,41,,,,,,,,88,,,,,,,,137,,,,,,,,166,,,,,,0,3421.0059,299,1340.01526,1356.11,,47,,,,10,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0,272,283,282,299.557780,226.442220,226.442220,224.442220,278.442220,, +D,DREGION,,3,"2023/12/14 18:50:00",1,TAS1,0,98.2,0,98.2,0,0,1095.75,1,1095.75,0,0,0,,,17.6,,,,,,,,117.6,,,,,,,,117.6,,,,,,,,34.58,,,,,,,,134.57,,,,,,,,134.57,,,,,,7.23069,2403.78327,0,1087.51819,1095.75,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,35.13,35.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,178.854274,260.969611,111.515723,49.999983,124.901105,307.994118,364.721798,177.039110,, +D,DREGION,,3,"2023/12/14 18:50:00",1,VIC1,0,148.93068,0,148.93068,0,0,5257.34,7,4986.59,0,-270.75,0,,,116,,,,,,,,95.49,,,,,,,,81,,,,,,,,156,,,,,,,,223,,,,,,,,188,,,,,,0,7934.58652,348,5257.74609,5259.72,,47,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,1.43,1.43,0,0.3,0.3,0,0.3,0.3,0,0.01,0.01,0,0.03,0.03,0,0.39,0.39,0,19.89,19.89,0,648,653,655,105,361,595,474,451.843650,, +D,DREGION,,3,"2023/12/14 18:55:00",1,NSW1,0,255.30468,0,255.30468,0,0,12623.72,-39,12138.57,0,-485.15,0,,,43,,,,,,,,42,,,,,,,,40,,,,,,,,49,,,,,,,,52,,,,,,,,71,,,,,,49.56434,12789.15149,47,12614.20117,12619.61,,23,,,,0,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,173.736020,179.736020,169.736020,152.123184,318,360,341,390.152038,, +D,DREGION,,3,"2023/12/14 18:55:00",1,QLD1,0,266.65,0,266.65,0,0,9140.14,-1,9624.06,0,483.92,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,147.28,,,,,,,,158.95,,,,,,-17.79483,10865.22228,125,9160.05273,9138.37,,81,,,,318,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,222.947080,266.280413,137.947080,415.985050,312,435,205,421.687490,, +D,DREGION,,3,"2023/12/14 18:55:00",1,SA1,0,67.31885,0,67.31885,0,0,1362.95,15,1585.74,0,222.79,0,,,57.1,,,,,,,,30,,,,,,,,30,,,,,,,,141.34,,,,,,,,175,,,,,,,,169,,,,,,-1.5469,3398.74465,299,1365.01904,1365.08,,22,,,,10,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,271,283,282,241,229,229,228,342,, +D,DREGION,,3,"2023/12/14 18:55:00",1,TAS1,0,70.12,0,70.12,0,0,1093.5,0,1111.17,0,17.67,0,,,17.66,,,,,,,,117.66,,,,,,,,117.66,,,,,,,,32.79,,,,,,,,132.79,,,,,,,,132.79,,,,,,12.72592,2407.77888,0,1080.77197,1093.47,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.56,3.56,0,234.354132,399.420491,299.022363,189.704329,139.405313,408.783409,488.290221,260.029929,, +D,DREGION,,3,"2023/12/14 18:55:00",1,VIC1,0,71.90092,0,71.90092,0,0,5257.03,8,5018.74,0,-238.29,0,,,126,,,,,,,,134.46,,,,,,,,88.4,,,,,,,,114,,,,,,,,179.42,,,,,,,,154.76,,,,,,26.84142,7877.74252,349,5227.58154,5261.77,,84,,,,0,,,,,,,,,,,,,,,,,,,4.35,4.35,0,0.75,0.75,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.17,0.17,0,0.39,0.39,0,0.71,0.71,0,602,606,608,64,364,598,481,544.445151,, +D,DREGION,,3,"2023/12/14 19:00:00",1,NSW1,0,275.22695,0,275.22695,0,0,12575.55,-34,12070.15,0,-505.41,0,,,43.9,,,,,,,,70.51,,,,,,,,40,,,,,,,,50,,,,,,,,53,,,,,,,,71,,,,,,21.42857,12734.78751,47,12589.42969,12571.35,,35,,,,0,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0,164.086850,171.086850,161.086850,151.332764,381,463,384,405.576069,, +D,DREGION,,3,"2023/12/14 19:00:00",1,QLD1,0,285.75,0,285.75,0,0,9200.35,1,9699.66,0,499.3,0,,,28,,,,,,,,149,,,,,,,,110,,,,,,,,21,,,,,,,,121.94,,,,,,,,127,,,,,,-0.59795,10875.21808,125,9198.74023,9198.45,,88,,,,318,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0,198,226.020973,113,401.837783,312,435,205,416.756405,, +D,DREGION,,3,"2023/12/14 19:00:00",1,SA1,0,68.83514,0,68.83514,0,0,1371.96,14,1590.71,22,196.75,0,,,99,,,,,,,,57,,,,,,,,64.69,,,,,,,,90,,,,,,,,177,,,,,,,,170,,,,,,-5.30611,3403.70874,300,1367.63953,1395.56,,28,,,,10,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0,272,285,284,258,230,230,230,321,, +D,DREGION,,3,"2023/12/14 19:00:00",1,TAS1,0,70.18,0,70.18,0,0,1108.71,0,1212.95,0,104.25,0,,,17.66,,,,,,,,117.66,,,,,,,,117.66,,,,,,,,31.47,,,,,,,,131.46,,,,,,,,131.46,,,,,,17.23697,2408.90159,0,1091.46936,1109.42,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,219.116037,318.622634,198.365423,90.379744,176.375706,480.744418,589.511863,177.150306,, +D,DREGION,,3,"2023/12/14 19:00:00",1,VIC1,0,73.12884,0,73.12884,0,0,5187.4,7,4894.65,0,-292.75,0,,,55,,,,,,,,60,,,,,,,,55,,,,,,,,163.33,,,,,,,,202,,,,,,,,185.94,,,,,,23.25481,7846.6517,352,5166.84668,5193.34,,59,,,,1,,,,,,,,,,,,,,,,,,,4.89,4.89,0,0.86,0.86,0,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.45,0.45,0,0.45,0.45,0,2,2,0,647,652,654,106,304.0001,543.0001,421.0001,440.843650,, +D,DREGION,,3,"2023/12/14 19:05:00",1,NSW1,0,181.61968,0,181.61968,0,0,12485.01,-37,11927.06,0,-557.95,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,86,,,,,,,,53,,,,,,,,57,,,,,,0,12688.08516,47,12519.34766,12486.68,,0,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0,154.531430,161.531430,151.531430,106.121921,321,364,345,392.227294,, +D,DREGION,,3,"2023/12/14 19:05:00",1,QLD1,0,190.74,0,190.74,0,0,9165.95,-2,9610.41,0,444.46,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,21,,,,,,,,130.33,,,,,,,,133,,,,,,0,10855.68149,125,9165.76855,9165,,81,,,,108,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0,247,290.333333,163,260.325824,312,435,205,413.280527,, +D,DREGION,,3,"2023/12/14 19:05:00",1,SA1,0,99.98,0,99.98,0,0,1385.63,14,1702.67,25,292.05,0,,,43.56,,,,,,,,28,,,,,,,,28,,,,,,,,90,,,,,,,,80.87,,,,,,,,136,,,,,,-10.75058,3496.77757,309,1404.69861,1414.4,,22,,,,30,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0,271,285,284,251,222,222,222,352,, +D,DREGION,,3,"2023/12/14 19:05:00",1,TAS1,0,103.02839,0,103.02839,0,0,1119.87,0,1295.42,0,175.55,0,,,60,,,,,,,,47.53,,,,,,,,0,,,,,,,,81.53,,,,,,,,152.3,,,,,,,,92.5,,,,,,19.93618,2415.4214,0,1101.08447,1122.31,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,9.11,9.11,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,2.5,2.5,0,181.201234,280.713682,134.165723,55.813270,164.659869,503.239615,680.345557,528.841582,, +D,DREGION,,3,"2023/12/14 19:05:00",1,VIC1,0,109.06503,0,109.06503,0,0,5178.36,0,4854.43,6,-329.93,0,,,54,,,,,,,,64,,,,,,,,55.75,,,,,,,,154,,,,,,,,137,,,,,,,,135,,,,,,22.42688,7765.26716,409,5163.20605,5201.6,,57,,,,21,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.38,0.38,0,1.61,1.61,0,0.2,0.2,0,0.38,0.38,0,0.39,0.39,0,0.71,0.71,0,649,654,656,157,358,622.16,449,491.781250,, +D,DREGION,,3,"2023/12/14 19:10:00",1,NSW1,0,172.4309,0,172.4309,0,0,12393.03,-40,11751.85,0,-641.18,0,,,71,,,,,,,,69,,,,,,,,67,,,,,,,,86,,,,,,,,89,,,,,,,,57,,,,,,-12.22798,12578.2991,47,12446.82031,12396.3,,0,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,174.550350,181.550350,171.550350,102.816388,381,463,385,370.635969,, +D,DREGION,,3,"2023/12/14 19:10:00",1,QLD1,0,179.65125,0,179.65125,0,0,9103.72,-2,9572.09,0,468.37,0,,,0,,,,,,,,130,,,,,,,,110,,,,,,,,23,,,,,,,,134.99,,,,,,,,134,,,,,,1.63975,10854.71019,125,9102.25977,9102.16,,77.89,,,,107,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,250,293.333333,165,281.422550,312,435,205,430.889668,, +D,DREGION,,3,"2023/12/14 19:10:00",1,SA1,0,140.99,0,140.99,0,0,1396.66,13,1739.45,0,342.79,0,,,31,,,,,,,,31,,,,,,,,31,,,,,,,,166.47,,,,,,,,119,,,,,,,,138,,,,,,-2.48081,3432.7021,315,1410.49597,1401.93,,34,,,,15,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,273,285,284,219.531530,219,221,220,383,, +D,DREGION,,3,"2023/12/14 19:10:00",1,TAS1,0,144.99248,0,144.99248,0,0,1116.99,0,1391.03,0,274.04,0,,,36.19,,,,,,,,9.46,,,,,,,,0,,,,,,,,3,,,,,,,,55.75,,,,,,,,96.74,,,,,,12.25477,2406.97747,0,1108.35156,1123.39,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,38.92248,38.92248,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.5,2.5,0,159.887169,175.671627,30.515723,50,163.634571,565.374370,782.950502,631.819715,, +D,DREGION,,3,"2023/12/14 19:10:00",1,VIC1,0,156.29516,0,156.29516,0,0,5244.32,-1,4864.35,25,-404.97,0,,,87,,,,,,,,97,,,,,,,,59.72,,,,,,,,156,,,,,,,,160,,,,,,,,133,,,,,,28.059,7750.2283,431,5231.86475,5294.98,,48.11,,,,40,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.72,0.72,0,0.39,0.39,0,0.39,0.39,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,648,662.88,664.88,169.9999,352.0001,642.1201,455.0001,493.912109,, +D,DREGION,,3,"2023/12/14 19:15:00",1,NSW1,0,184.24997,0,184.24997,0,0,12334.07,-48,11583.26,0,-750.82,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,86,,,,,,,,53,,,,,,,,57,,,,,,-27.93726,12491.81786,47,12416.22754,12339.84,,20,,,,11,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0,174.580260,181.580260,171.580260,92.121921,321,364,345,326.793151,, +D,DREGION,,3,"2023/12/14 19:15:00",1,QLD1,0,190.74,0,190.74,0,0,9112.61,-6,9619.41,0,506.8,0,,,0,,,,,,,,95,,,,,,,,33.57,,,,,,,,26,,,,,,,,193.33,,,,,,,,196,,,,,,-11.51442,10839.452,125,9128.74316,9110.43,,82,,,,152,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0,307.511190,350.844523,162.511190,330.714990,287,400,170,431.197922,, +D,DREGION,,3,"2023/12/14 19:15:00",1,SA1,0,148.52315,0,148.52315,0,0,1421.3,12,1761.26,0,339.96,0,,,44,,,,,,,,44,,,,,,,,44,,,,,,,,100.9,,,,,,,,94.3,,,,,,,,141.83,,,,,,5.18451,3383.44553,321,1409.3645,1426.48,,20,,,,15,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0,311.826087,323,321,235.851472,275,288,279,438.851470,, +D,DREGION,,3,"2023/12/14 19:15:00",1,TAS1,0,148.46548,0,148.46548,0,0,1116.03,0,1511.76,0,395.73,0,,,21.86,,,,,,,,37.39,,,,,,,,37.39,,,,,,,,24,,,,,,,,73.7,,,,,,,,15.51,,,,,,7.93187,2395.7106,0,1116.58618,1129.71,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,39.39548,39.39548,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,135.781906,120.671627,30.515723,49.999977,194.236261,545.227311,764.111244,600.350610,, +D,DREGION,,3,"2023/12/14 19:15:00",1,VIC1,0,164.47803,0,164.47803,0,0,5252.93,4,4841.1,25,-436.83,0,,,88,,,,,,,,89.91,,,,,,,,86,,,,,,,,167,,,,,,,,144,,,,,,,,148,,,,,,31.22072,7717.1035,428,5246.71387,5310.34,,38,,,,25,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.38,0.38,0,2,2,0,646,651,653,140.336710,272,572,370,441.074219,, +D,DREGION,,3,"2023/12/14 19:20:00",1,NSW1,0,175.75927,0,175.75927,0,0,12197.59,-45,11521.23,0,-676.36,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,84,,,,,,,,79,,,,,,,,84,,,,,,-39.37061,12447.0849,47,12292.09375,12207.74,,20,,,,0,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0,174.577580,180.577580,169.577580,91.870144,381,464,385,362.993923,, +D,DREGION,,3,"2023/12/14 19:20:00",1,QLD1,0,185.19,0,185.19,0,0,9111.72,-8,9527.94,0,416.22,0,,,0,,,,,,,,121.47,,,,,,,,39.03,,,,,,,,24,,,,,,,,124.33,,,,,,,,153,,,,,,2.87137,10823.87982,125,9115.12793,9111.61,,79.76,,,,116,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0,240,284.333333,165,293.985050,312,435,205,427.762155,, +D,DREGION,,3,"2023/12/14 19:20:00",1,SA1,0,143.19927,0,143.19927,0,0,1421.09,11,1728.57,0,307.48,0,,,44,,,,,,,,44,,,,,,,,43,,,,,,,,157.76,,,,,,,,163.81,,,,,,,,163.81,,,,,,0,3336.57215,331,1414.85303,1425.3,,39.24,,,,20,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0,305.807692,331,326,247.223449,275,291,281,448.851470,, +D,DREGION,,3,"2023/12/14 19:20:00",1,TAS1,0,142.43474,0,142.43474,0,0,1119.54,1,1492.33,0,372.79,0,,,0,,,,,,,,15.85,,,,,,,,15.85,,,,,,,,25,,,,,,,,73.7,,,,,,,,3,,,,,,11.44602,2378.28101,0,1121.75989,1131.65,,50,,,,50,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,33.36474,33.36474,0,0.38,0.38,0,0.38,0.38,0,0.17,0.17,0,3.5,3.5,0,135.887169,120.671627,31.515723,49.999977,199.804610,598.227311,881.092669,725.679817,, +D,DREGION,,3,"2023/12/14 19:20:00",1,VIC1,0,157.05865,0,157.05865,0,0,5196.46,3,4845.77,12,-362.69,0,,,108.24,,,,,,,,84,,,,,,,,104,,,,,,,,144,,,,,,,,116,,,,,,,,153.04,,,,,,24.46356,7687.77315,430,5220.18457,5239.55,,21,,,,34,,,,,,,,,,,,,,,,,,,0.86,0.86,0,0.39,0.39,0,0.39,0.39,0,1.24,1.24,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.99,3.99,0,614,619,621,116,405,642,502,555.9375,, +D,DREGION,,3,"2023/12/14 19:25:00",1,NSW1,0,178.00261,0,178.00261,0,0,12268.58,-49,11524.18,0,-744.4,0,,,71,,,,,,,,70,,,,,,,,67,,,,,,,,84,,,,,,,,79,,,,,,,,65,,,,,,0,12451.87978,47,12325.97656,12277.33,,0,,,,0,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,174.699640,180.699640,169.699640,91.870144,381,464,385,362.920681,, +D,DREGION,,3,"2023/12/14 19:25:00",1,QLD1,0,185.19,0,185.19,0,0,9088.6,-13,9558.02,0,469.42,0,,,0,,,,,,,,95,,,,,,,,36.29,,,,,,,,28,,,,,,,,193.33,,,,,,,,200,,,,,,0,10806.8214,125,9100.09082,9087.26,,90.77,,,,167,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,310,353.333333,165,366.4538,287,400,170,439.415769,, +D,DREGION,,3,"2023/12/14 19:25:00",1,SA1,0,148.98421,0,148.98421,0,0,1444.85,9,1668.24,0,223.39,0,,,47,,,,,,,,47,,,,,,,,45,,,,,,,,171,,,,,,,,116.21,,,,,,,,145.3,,,,,,14.20705,3276.23725,341,1424.96082,1446.99,,10,,,,10,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,307.807692,333,328,265.851470,277,294,284,456.675261,, +D,DREGION,,3,"2023/12/14 19:25:00",1,TAS1,0,144.31749,0,144.31749,0,0,1115.68,1,1493.92,0,378.24,0,,,25.88,,,,,,,,24.58,,,,,,,,21.05,,,,,,,,18,,,,,,,,68.76,,,,,,,,43,,,,,,3.18996,2370.3686,0,1126.34583,1128.15,,50,,,,50,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,35.24749,35.24749,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,135.781906,115.731375,24.515723,49.999977,197.434564,562.227311,889.187241,683.830760,, +D,DREGION,,3,"2023/12/14 19:25:00",1,VIC1,0,159.14502,0,159.14502,0,0,5250.77,2,4973.7,0,-277.08,0,,,80,,,,,,,,99,,,,,,,,99,,,,,,,,119.6,,,,,,,,92,,,,,,,,96,,,,,,19.80653,7681.69617,430,5264.14746,5278.32,,59.23,,,,0,,,,,,,,,,,,,,,,,,,1.84,1.84,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.38,0.38,0,0.38,0.38,0,0.71,0.71,0,523,527,529,32,201,326,244,555.692283,, +D,DREGION,,3,"2023/12/14 19:30:00",1,NSW1,0,301.38681,0,301.38681,0,0,12192.34,-48,11037.79,0,-1154.54,0,,,54,,,,,,,,60.71,,,,,,,,9.37,,,,,,,,94,,,,,,,,96,,,,,,,,122,,,,,,-44.26373,12465.47124,47,12288.46484,12206.71,,0,,,,0,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0,174.675230,180.675230,169.675230,91.870144,411,524,435,407.749782,, +D,DREGION,,3,"2023/12/14 19:30:00",1,QLD1,0,296,0,296,0,0,9025.56,-15,9787.27,0,761.7,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,33,,,,,,,,114.43,,,,,,,,128.1,,,,,,4.27181,10805.11434,125,9034.06543,9023.42,,69.52,,,,136.74,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0,174.214610,191.547943,115,195.726481,312,435,205,425.679601,, +D,DREGION,,3,"2023/12/14 19:30:00",1,SA1,0,237.87,0,237.87,0,0,1445.3,8,1779.96,0,334.66,0,,,35,,,,,,,,47,,,,,,,,33,,,,,,,,176,,,,,,,,185,,,,,,,,179.81,,,,,,5.03677,3235.42337,345,1434.729,1450.32,,10,,,,79.26,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0,192.008902,222.201210,217.201210,108.105317,278,295,285,575.597620,, +D,DREGION,,3,"2023/12/14 19:30:00",1,TAS1,0,115.18,0,115.18,0,0,1108.18,1,1590.56,0,482.38,0,,,17.65,,,,,,,,117.65,,,,,,,,117.65,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,0.89584,2346.46381,0,1120.38293,1128.56,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,160.209585,179.232752,173.321253,66.305552,216.515702,616.605840,950.412830,555.365930,, +D,DREGION,,3,"2023/12/14 19:30:00",1,VIC1,0,263.42284,0,263.42284,0,0,5264.64,1,4922.2,0,-342.44,0,,,120.53,,,,,,,,114,,,,,,,,109,,,,,,,,125.73,,,,,,,,155.47,,,,,,,,121,,,,,,10.93827,7625.20192,433,5275.83301,5308.77,,80.48,,,,4,,,,,,,,,,,,,,,,,,,31.51,31.51,0,1.49,1.49,0,0.72,0.72,0,32.99,32.99,0,0,0,0,0,0,0,0.08,0.08,0,0.71,0.71,0,530.333333,541,543,29,415,652,519,693.912009,, +D,DREGION,,3,"2023/12/14 19:35:00",1,NSW1,0,221.41452,0,221.41452,0,0,12063.94,-53,11102.83,0,-961.11,0,,,64,,,,,,,,70,,,,,,,,8.79,,,,,,,,106,,,,,,,,97,,,,,,,,122.07,,,,,,-46.78793,12455.13336,57,12180.14258,12075.99,,10,,,,3,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0,174.393920,181.393920,170.393920,81.870144,301,384,285,332.974079,, +D,DREGION,,3,"2023/12/14 19:35:00",1,QLD1,0,223.82999,0,223.82999,0,0,8980.6,-24,9565.73,0,585.13,0,,,0,,,,,,,,17.36,,,,,,,,0,,,,,,,,33,,,,,,,,142.33,,,,,,,,157,,,,,,17.98321,10788.85021,125,8985.40137,8977.89,,98.65,,,,180.52,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0,216,254.333333,130,258.922550,312,435,205,339.809442,, +D,DREGION,,3,"2023/12/14 19:35:00",1,SA1,0,174.84,0,174.84,0,0,1452.91,7,1805.85,0,352.94,0,,,37,,,,,,,,46,,,,,,,,31,,,,,,,,146,,,,,,,,150,,,,,,,,162.87,,,,,,3.15722,3203.18509,356,1447.23071,1458.52,,10,,,,30,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0,245.201295,261.335910,260.072752,109.335910,276,293,283,592.515560,, +D,DREGION,,3,"2023/12/14 19:35:00",1,TAS1,0,115.16,0,115.16,0,0,1116.01,0,1593.5,0,477.48,0,,,13.12,,,,,,,,113.12,,,,,,,,113.12,,,,,,,,0,,,,,,,,4.47,,,,,,,,4.47,,,,,,7.0442,2379.62597,0,1128.95874,1135.98,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,179.524714,254.711226,180.515723,119.800022,192.682496,594.938809,1003.700950,684.148429,, +D,DREGION,,3,"2023/12/14 19:35:00",1,VIC1,0,193.84488,0,193.84488,0,0,5249.9,2,4873.82,0,-376.08,0,,,114,,,,,,,,94,,,,,,,,109,,,,,,,,143.59,,,,,,,,157.6,,,,,,,,105,,,,,,1.17365,7620.82309,445,5288.74219,5293.34,,41.35,,,,2,,,,,,,,,,,,,,,,,,,33.46011,33.46011,0,1.49,1.49,0,0.75,0.75,0,12,12,0,0,0,0,0.01,0.01,0,0,0,0,0.71,0.71,0,563,567,569,77.589310,376,496,440,596.600425,, +D,DREGION,,3,"2023/12/14 19:40:00",1,NSW1,0,299.99,0,299.99,0,0,12002.07,-59,10746.28,0,-1255.78,0,,,54,,,,,,,,70,,,,,,,,19.13,,,,,,,,95,,,,,,,,59,,,,,,,,87.7,,,,,,-18.90057,12441.1004,57,12091.21191,12016.84,,18.93,,,,12,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0,163.320680,170.320680,159.320680,43.637302,451,564,485,488.528591,, +D,DREGION,,3,"2023/12/14 19:40:00",1,QLD1,0,289.54852,0,289.54852,0,0,8942.28,-29,9773.69,0,831.41,0,,,0,,,,,,,,3.16,,,,,,,,0,,,,,,,,35,,,,,,,,175.33,,,,,,,,200,,,,,,3.12317,10781.58202,125,8965.96777,8939.21,,98.07,,,,164,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0,245.078420,261.155623,112,200.985053,312,435,205,451.074238,, +D,DREGION,,3,"2023/12/14 19:40:00",1,SA1,0,231.02124,0,231.02124,0,0,1451.72,6,1857.43,0,405.7,0,,,35,,,,,,,,47,,,,,,,,33,,,,,,,,161,,,,,,,,152,,,,,,,,158.87,,,,,,7.42423,3171.42664,362,1442.91296,1459.13,,10,,,,42,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0,164.865385,181,179.6875,50,278,295,285,663.851470,, +D,DREGION,,3,"2023/12/14 19:40:00",1,TAS1,0,54.22,0,54.22,0,0,1126.48,0,1608.85,0,482.38,0,,,17.34,,,,,,,,117.33,,,,,,,,117.33,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,7.97765,2385.44917,0,1137.33948,1146.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,175.454538,224.890877,168.010663,51.809990,237.307319,642.259757,1017.981531,715.690196,, +D,DREGION,,3,"2023/12/14 19:40:00",1,VIC1,0,260.69175,0,260.69175,0,0,5234.4,1,4861.17,0,-373.23,0,,,121.9,,,,,,,,104,,,,,,,,99,,,,,,,,137.31,,,,,,,,165.23,,,,,,,,105,,,,,,0.47597,7600.17126,446,5271.55176,5285.39,,33,,,,2,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.49,1.49,0,0.75,0.75,0,26.14124,26.14124,0,0,0,0,0.01,0.01,0,0.08,0.08,0,1,1,0,564,568,570,53,391.0001,506.0001,445.0001,611.786032,, +D,DREGION,,3,"2023/12/14 19:45:00",1,NSW1,0,295.42724,0,295.42724,0,0,11915.86,-66,10666.36,0,-1249.5,0,,,67.43,,,,,,,,70,,,,,,,,21.13,,,,,,,,104,,,,,,,,95,,,,,,,,116,,,,,,-24.34654,12407.23115,57,12024.68164,11929.74,,30,,,,23,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,173.8656,179.8656,168.8656,47.134491,391,464,445,462.342468,, +D,DREGION,,3,"2023/12/14 19:45:00",1,QLD1,0,286.72095,0,286.72095,0,0,8923.16,-33,9706.64,0,783.48,0,,,0,,,,,,,,11.38,,,,,,,,0,,,,,,,,32,,,,,,,,160.33,,,,,,,,175,,,,,,0,10800.6907,125,8954.25488,8917.9,,77,,,,153,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,217,225.333333,145,189.523369,312,435,205,385.505258,, +D,DREGION,,3,"2023/12/14 19:45:00",1,SA1,0,229.88,0,229.88,0,0,1452.95,4,1807,0,354.05,0,,,47,,,,,,,,47,,,,,,,,34,,,,,,,,144,,,,,,,,147,,,,,,,,155.67,,,,,,0,3144.29773,362,1454.85498,1458.58,,20,,,,40,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,217.157109,228.295040,227.461707,97.295040,279,295,285,618.556430,, +D,DREGION,,3,"2023/12/14 19:45:00",1,TAS1,0,54.2087,0,54.2087,0,0,1116.53,0,1598.91,0,482.38,0,,,17.6,,,,,,,,117.59,,,,,,,,117.59,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-1.02065,2386.80162,0,1136.66882,1136.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.1387,8.1387,0,0.56261,0.56261,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,177.799044,225.816592,178.290644,61.000018,237.569823,643.140801,1006.699096,704.834165,, +D,DREGION,,3,"2023/12/14 19:45:00",1,VIC1,0,254.8369,0,254.8369,0,0,5144.11,-7,4858.37,0,-285.74,0,,,96,,,,,,,,96,,,,,,,,91,,,,,,,,147.72,,,,,,,,149.34,,,,,,,,105,,,,,,-0.72624,7585.36809,446,5201.08838,5194.15,,33,,,,4,,,,,,,,,,,,,,,,,,,25,25,0,1.49,1.49,0,0.75,0.75,0,23.71095,23.71095,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,552,556,558,54,380.0001,622.0001,510.0001,646.562399,, +D,DREGION,,3,"2023/12/14 19:50:00",1,NSW1,0,299.99,0,299.99,0,0,11836.46,-71,10774.68,0,-1061.78,0,,,61.45,,,,,,,,43,,,,,,,,34.03,,,,,,,,104,,,,,,,,95,,,,,,,,121,,,,,,-29.72309,12461.09848,57,11949.01563,11844.14,,30,,,,23,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0,173.890010,179.890010,168.890010,47.121921,451,564,485,457.501010,, +D,DREGION,,3,"2023/12/14 19:50:00",1,QLD1,0,298.82461,0,298.82461,0,0,9009.84,-29,9638.15,0,628.31,0,,,0,,,,,,,,54.18,,,,,,,,0,,,,,,,,34,,,,,,,,140.99,,,,,,,,154.66,,,,,,12.3077,10549.21205,125,9023.74316,9002.42,,100.39,,,,117,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0,199.6562,208.989533,128.6562,147,312,435,205,457.391621,, +D,DREGION,,3,"2023/12/14 19:50:00",1,SA1,0,231.70534,0,231.70534,0,0,1470.61,3,1870.85,0,400.24,0,,,35,,,,,,,,33,,,,,,,,26,,,,,,,,156,,,,,,,,160,,,,,,,,169.86,,,,,,15.95825,3109.84731,362,1455.88098,1477.81,,14.61,,,,58,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0,172.862069,186,184.166667,58,278,295,285,642.851470,, +D,DREGION,,3,"2023/12/14 19:50:00",1,TAS1,0,54.22,0,54.22,0,0,1117.32,0,1599.7,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-2.67274,2384.88686,0,1139.71167,1137.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,177.494836,224.764830,175.601743,59.530570,237.357322,636.803880,1009.315827,707.180516,, +D,DREGION,,3,"2023/12/14 19:50:00",1,VIC1,0,261.03409,0,261.03409,0,0,5183.25,-9,4830.01,18,-371.24,0,,,116,,,,,,,,96,,,,,,,,86,,,,,,,,143.79,,,,,,,,165.53,,,,,,,,116,,,,,,8.22249,7573.00672,447,5224.02881,5251.32,,15,,,,22,,,,,,,,,,,,,,,,,,,35.78461,35.78461,0,1.49,1.49,0,0.75,0.75,0,35.81461,35.81461,0,0,0,0,0.01,0.01,0,0.15,0.15,0,1.5,1.5,0,563,567,569,68.3060,405,702,525,657.222718,, +D,DREGION,,3,"2023/12/14 19:55:00",1,NSW1,0,299.99,0,299.99,0,0,11737.44,-74,10738.14,0,-999.3,0,,,65.06,,,,,,,,70,,,,,,,,1.38,,,,,,,,82.57,,,,,,,,81.21,,,,,,,,105.69,,,,,,-6.52821,12478.13526,57,11825.87305,11739.41,,30,,,,23,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,163.982170,169.982170,158.982170,46.193264,451,564,485,488.276814,, +D,DREGION,,3,"2023/12/14 19:55:00",1,QLD1,0,296.58207,0,296.58207,0,0,9002.44,-28,9657.74,0,655.3,0,,,0,,,,,,,,9.03,,,,,,,,0,,,,,,,,31,,,,,,,,87.33,,,,,,,,109,,,,,,-4.92896,10516.06334,125,9030.66895,8995.1,,102,,,,114,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,167.301180,176.634513,123,137,312,435,205,452.708027,, +D,DREGION,,3,"2023/12/14 19:55:00",1,SA1,0,236.94618,0,236.94618,0,0,1471.97,2,1857.74,0,385.77,0,,,49,,,,,,,,49,,,,,,,,49,,,,,,,,164,,,,,,,,171,,,,,,,,166.86,,,,,,20.22525,3063.74273,362,1456.23535,1478.66,,20,,,,54,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,190.861869,204.9998,203.166467,70,281,298,288,640.851470,, +D,DREGION,,3,"2023/12/14 19:55:00",1,TAS1,0,54.2,0,54.2,0,0,1115.56,-1,1597.94,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,0,,,,,,,,0,,,,,,-0.61475,2392.88336,0,1137.50378,1135.94,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,178.562989,230.487975,185.379833,66.286823,237.357403,664.265476,999.819305,699.7887,, +D,DREGION,,3,"2023/12/14 19:55:00",1,VIC1,0,265.52076,0,265.52076,0,0,5211.07,-8,4775.73,25,-460.34,0,,,96,,,,,,,,96,,,,,,,,96,,,,,,,,159,,,,,,,,221,,,,,,,,179,,,,,,9.4995,7536.7307,447,5261.87695,5278.18,,8,,,,29,,,,,,,,,,,,,,,,,,,20.46,20.46,0,1.96,1.96,0,0.69,0.69,0,32.99,32.99,0,0,0,0,0.01,0.01,0,0,0,0,2,2,0,580,584,586,43.9999,380,622,510,619.600525,, +D,DREGION,,3,"2023/12/14 20:00:00",1,NSW1,0,299.99,0,299.99,0,0,11692.79,-76,10525.19,0,-1167.59,0,,,75.74,,,,,,,,70,,,,,,,,16.66,,,,,,,,104,,,,,,,,95,,,,,,,,119.01,,,,,,-6.33154,12461.45488,57,11783.49316,11703.38,,30,,,,23,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0,178.408210,184.408210,173.408210,46.870144,451,564,485,477.505580,, +D,DREGION,,3,"2023/12/14 20:00:00",1,QLD1,0,293.04,0,293.04,0,0,8946.57,-28,9643.11,0,696.53,0,,,0,,,,,,,,21.11,,,,,,,,0,,,,,,,,35,,,,,,,,161.21,,,,,,,,174.87,,,,,,0,10768.03615,125,8971.05762,8939.52,,81,,,,123,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0,231.507860,240.841193,145.8730,153,312,435,205,426.226976,, +D,DREGION,,3,"2023/12/14 20:00:00",1,SA1,0,232.78558,0,232.78558,0,0,1478.6,1,1848.66,0,370.06,0,,,56,,,,,,,,55,,,,,,,,53,,,,,,,,142,,,,,,,,146,,,,,,,,157.86,,,,,,23.6652,3040.65778,362,1459.95435,1484.75,,16,,,,70,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0,181.862069,197,195.166667,91,285,303,293,633.851470,, +D,DREGION,,3,"2023/12/14 20:00:00",1,TAS1,0,54.2,0,54.2,0,0,1115.25,-2,1597.63,0,482.38,0,,,18.67,,,,,,,,118.67,,,,,,,,118.67,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-4.48627,2407.85847,0,1140.14294,1135.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,184.093188,240.963707,200.663743,78.920130,238.644833,657.345346,984.409798,682.838692,, +D,DREGION,,3,"2023/12/14 20:00:00",1,VIC1,0,259.45927,0,259.45927,0,0,5182.7,-12,4881.87,0,-300.83,0,,,76,,,,,,,,76,,,,,,,,76,,,,,,,,151.37,,,,,,,,154.54,,,,,,,,105,,,,,,0,7552.86903,447,5251.60205,5233.17,,33,,,,4,,,,,,,,,,,,,,,,,,,30,30,0,1.49,1.49,0,0.75,0.75,0,30.03,30.03,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1.5,1.5,0,508.0001,512.0001,514.0001,4,390,632,515,732.031049,, +D,DREGION,,3,"2023/12/14 20:05:00",1,NSW1,0,141.33776,0,141.33776,0,0,11598.98,-79,10764.77,0,-834.2,0,,,57.62,,,,,,,,46,,,,,,,,0,,,,,,,,134.05,,,,,,,,112.91,,,,,,,,110.24,,,,,,-17.57787,12352.83057,147,11710.625,11610.07,,11.98,,,,23,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0,178.039670,184.039670,173.039670,89.996914,351,424,396,403.415825,, +D,DREGION,,3,"2023/12/14 20:05:00",1,QLD1,0,146.65212,0,146.65212,0,0,8899.07,-25,9280.56,0,381.49,0,,,0,,,,,,,,13.54,,,,,,,,0,,,,,,,,34,,,,,,,,208.05,,,,,,,,216.72,,,,,,6.28284,10769.59378,125,8915.05078,8893.02,,1.03,,,,177,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0,293.716240,335.049573,146,273.3750,312,435,205,249.153282,, +D,DREGION,,3,"2023/12/14 20:05:00",1,SA1,0,118.44,0,118.44,0,0,1476.79,0,1605.07,0,128.29,0,,,41,,,,,,,,54,,,,,,,,44,,,,,,,,155,,,,,,,,154,,,,,,,,145,,,,,,24.89313,2866.22175,362,1457.83691,1477.34,,10,,,,20,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0,296,304,301,255.851470,283,301,291,424.594773,, +D,DREGION,,3,"2023/12/14 20:05:00",1,TAS1,0,54.2,0,54.2,0,0,1116.97,-2,1599.35,0,482.38,0,,,17.62,,,,,,,,117.62,,,,,,,,117.62,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-8.75965,2434.54618,0,1147.55518,1137.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,192.330031,256.002154,225.930123,106.348350,237.594796,629.917126,958.926093,658.931187,, +D,DREGION,,3,"2023/12/14 20:05:00",1,VIC1,0,123.24231,0,123.24231,0,0,5188.91,-17,5094.32,0,-94.59,0,,,114,,,,,,,,114,,,,,,,,109,,,,,,,,111,,,,,,,,84,,,,,,,,87,,,,,,17.48426,7424.32362,447,5236.38428,5226.3,,137,,,,0,,,,,,,,,,,,,,,,,,,2.96,2.96,0,0.72,0.72,0,0.72,0.72,0,3.67,3.67,0,0,0,0,0.01,0.01,0,0.07,0.07,0,1,1,0,592.0001,596.0001,598.0001,72,371,616,500,637.692183,, +D,DREGION,,3,"2023/12/14 20:10:00",1,NSW1,0,257.35274,0,257.35274,0,0,11517.55,-83,10466.7,5,-1055.85,0,,,45.97,,,,,,,,51,,,,,,,,0,,,,,,,,102,,,,,,,,85,,,,,,,,106,,,,,,-0.25277,12189.69471,147,11615.48828,11548.99,,14,,,,0,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0,147.982170,143.982170,132.982170,38.978122,456,569,491,428.537746,, +D,DREGION,,3,"2023/12/14 20:10:00",1,QLD1,0,265.36,0,265.36,0,0,8958.81,-22,9356.22,0,397.41,0,,,0,,,,,,,,7.99,,,,,,,,0,,,,,,,,34,,,,,,,,202.64,,,,,,,,216.74,,,,,,-8.29874,11055.77691,125,8984.88086,8952.44,,1,,,,200,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0,294.742360,338.075693,132.742360,250,312,435,205,317.740441,, +D,DREGION,,3,"2023/12/14 20:10:00",1,SA1,0,197.87762,0,197.87762,0,0,1460.73,-1,1759.21,0,298.48,0,,,55,,,,,,,,57,,,,,,,,47,,,,,,,,158,,,,,,,,156,,,,,,,,142.9,,,,,,10.62879,2791.21001,362,1451.97705,1464.69,,10,,,,20,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0,292,304,302,60.303313,286,304,294,564.851470,, +D,DREGION,,3,"2023/12/14 20:10:00",1,TAS1,0,54.18,0,54.18,0,0,1118.33,-2,1600.71,0,482.38,0,,,17.62,,,,,,,,117.62,,,,,,,,117.62,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-13.83468,2453.40311,0,1153.21765,1138.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,0.50353,0.50353,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,203.719494,270.950514,244.428883,124.614730,237.594763,611.650746,941.335464,641.286360,, +D,DREGION,,3,"2023/12/14 20:10:00",1,VIC1,0,215.8827,0,215.8827,0,0,5198.55,-16,5183.68,0,-14.87,0,,,114,,,,,,,,114,,,,,,,,109,,,,,,,,134.62,,,,,,,,110,,,,,,,,88,,,,,,27.42183,7420.67772,447,5224.6875,5261.69,,135,,,,0,,,,,,,,,,,,,,,,,,,2.95,2.95,0,0.86,0.86,0,0.75,0.75,0,2.35,2.35,0,0,0,0,0.01,0.01,0,0,0,0,1,1,0,539,543,544,39.3080,371,616,500,681.379683,, +D,DREGION,,3,"2023/12/14 20:15:00",1,NSW1,0,215.36836,0,215.36836,0,0,11311.9,-84,10460.76,25,-876.14,0,,,51.47,,,,,,,,46.33,,,,,,,,16,,,,,,,,103,,,,,,,,86,,,,,,,,100,,,,,,-11.49911,12178.01712,147,11436.16504,11364.32,,23,,,,13,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0,148.252930,144.252930,133.252930,59.995938,391,464,446,378.415825,, +D,DREGION,,3,"2023/12/14 20:15:00",1,QLD1,0,228.81,0,228.81,0,0,8985.88,-22,9234.42,0,248.54,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,33,,,,,,,,192.33,,,,,,,,223,,,,,,0,11052.54501,125,9001.22852,8981.71,,1,,,,207,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0,306,349.333333,143,303.9375,312,435,205,284.523922,, +D,DREGION,,3,"2023/12/14 20:15:00",1,SA1,0,173.44,0,173.44,0,0,1449.6,-1,1615.63,0,166.03,0,,,43,,,,,,,,44,,,,,,,,34,,,,,,,,171,,,,,,,,161.49,,,,,,,,149,,,,,,0,2687.10886,362,1453.95923,1450.69,,10,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0,301,308,305,106.480840,286,305,295,398.719110,, +D,DREGION,,3,"2023/12/14 20:15:00",1,TAS1,0,54.2,0,54.2,0,0,1117.85,-2,1600.23,0,482.38,0,,,17.59,,,,,,,,117.58,,,,,,,,117.58,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-10.04255,2413.71475,0,1145.58667,1138.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,185.146456,242.921616,204.914753,85.177764,237.557285,651.087716,981.129890,680.848993,, +D,DREGION,,3,"2023/12/14 20:15:00",1,VIC1,0,182.36127,0,182.36127,0,0,5140.48,-20,5218.37,0,77.89,0,,,114,,,,,,,,114,,,,,,,,114,,,,,,,,121.96,,,,,,,,115,,,,,,,,82.83,,,,,,0,7429.37203,447,5215.20117,5194.46,,126,,,,0,,,,,,,,,,,,,,,,,,,2.25,2.25,0,0.86,0.86,0,0.75,0.75,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1,1,0,518,522,523,22,421,656,535,713.593650,, +D,DREGION,,3,"2023/12/14 20:20:00",1,NSW1,0,221,0,221,0,0,11298.82,-87,10396.29,22.53,-925.06,0,,,75.15,,,,,,,,72.18,,,,,,,,23.61,,,,,,,,91,,,,,,,,84.72,,,,,,,,82.06,,,,,,5.82599,12118.55417,147,11426.30176,11342.65,,25,,,,0,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0,147.252930,143.252930,132.252930,60.651341,411,524,436,395.130281,, +D,DREGION,,3,"2023/12/14 20:20:00",1,QLD1,0,230.21582,0,230.21582,0,0,8921.04,-23,9254.66,0,333.61,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,29.03,,,,,,,,217.33,,,,,,,,223,,,,,,-4.15596,10926.70555,125,8941.28516,8915.1,,6,,,,207,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0,306,337.333333,143,315,312,435,205,314,, +D,DREGION,,3,"2023/12/14 20:20:00",1,SA1,0,180.24484,0,180.24484,0,0,1444.14,-2,1593.57,0,149.43,0,,,54,,,,,,,,53,,,,,,,,45,,,,,,,,167,,,,,,,,165,,,,,,,,158,,,,,,1.14773,2644.56856,362,1445.95532,1444.97,,29,,,,0,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0,291,302,298,84.409820,284,302,292,404.851470,, +D,DREGION,,3,"2023/12/14 20:20:00",1,TAS1,0,54.2,0,54.2,0,0,1111.36,-3,1593.74,0,482.38,0,,,17.37,,,,,,,,117.37,,,,,,,,117.37,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-2.08492,2432.07638,0,1135.5647,1131.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,193.583610,258.489942,230.067863,110.768291,237.344824,625.497186,955.762970,655.970832,, +D,DREGION,,3,"2023/12/14 20:20:00",1,VIC1,0,188.52242,0,188.52242,0,0,5161.41,-20,5207.27,0,45.86,0,,,86,,,,,,,,86,,,,,,,,86,,,,,,,,111,,,,,,,,88,,,,,,,,92,,,,,,27.77998,7472.26567,447,5205.87842,5211.06,,100,,,,44,,,,,,,,,,,,,,,,,,,1.49,1.49,0,0.72,0.72,0,0.72,0.72,0,0.72,0.72,0,0,0,0,0.01,0.01,0,0.01,0.01,0,9.88,9.88,0,545,549,550,80,421,656,535,645.411033,, +D,DREGION,,3,"2023/12/14 20:25:00",1,NSW1,0,155.39697,0,155.39697,0,0,11158.53,-83,10315.37,25,-868.17,0,,,46,,,,,,,,46,,,,,,,,0,,,,,,,,97.02,,,,,,,,50,,,,,,,,65,,,,,,0,12155.66218,147,11288.09375,11203.13,,30,,,,0,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0,148.870910,144.870910,133.870910,63.121921,451,564,486,348.465426,, +D,DREGION,,3,"2023/12/14 20:25:00",1,QLD1,0,162.60896,0,162.60896,0,0,8885.49,-24,9189.1,0,303.62,0,,,0,,,,,,,,14.19,,,,,,,,0,,,,,,,,31,,,,,,,,210.05,,,,,,,,221,,,,,,0,10941.21334,125,8904.11621,8879.96,,22,,,,207,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0,308,339.333333,144,316,312,435,205,314,, +D,DREGION,,3,"2023/12/14 20:25:00",1,SA1,0,130.25002,0,130.25002,0,0,1457.37,-3,1523.18,0,65.81,0,,,56,,,,,,,,58,,,,,,,,47,,,,,,,,169,,,,,,,,158,,,,,,,,134,,,,,,-2.89438,2626.92232,362,1468.56567,1457.32,,30,,,,0,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0,304,311,306,110.851470,286,305,295,388.186645,, +D,DREGION,,3,"2023/12/14 20:25:00",1,TAS1,0,54.2,0,54.2,0,0,1102.35,-3,1584.73,0,482.38,0,,,17.6,,,,,,,,117.6,,,,,,,,117.6,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-5.53033,2425.68035,0,1126.76611,1122.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,0.54471,0.54471,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,194.531394,260.286144,232.683563,112.920674,237.569865,623.344806,953.125790,653.063903,, +D,DREGION,,3,"2023/12/14 20:25:00",1,VIC1,0,132.72,0,132.72,0,0,5026.38,-26,5122.12,0,95.74,0,,,114,,,,,,,,114,,,,,,,,114,,,,,,,,130,,,,,,,,136,,,,,,,,134.05,,,,,,0,7418.39209,447,5095.75488,5071.36,,78,,,,13,,,,,,,,,,,,,,,,,,,0.76,0.76,0,0.39,0.39,0,0.72,0.72,0,0.91,0.91,0,0,0,0,0.01,0.01,0,0,0,0,12,12,0,609.274790,604.274790,566.274790,40.225410,421,656,535,597.475010,, +D,DREGION,,3,"2023/12/14 20:30:00",1,NSW1,0,174.80082,0,174.80082,0,0,11091,-84,10264.65,25,-851.35,0,,,55,,,,,,,,53,,,,,,,,16,,,,,,,,92,,,,,,,,77,,,,,,,,75,,,,,,-3.55713,12159.19051,147,11219.59277,11142.18,,30,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0,138.8410,144.8410,133.8410,63.121921,381,464,386,347.041713,, +D,DREGION,,3,"2023/12/14 20:30:00",1,QLD1,0,185.19,0,185.19,0,0,8899.19,-26,9134,0,234.82,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,34.55,,,,,,,,183.33,,,,,,,,210,,,,,,-12.06611,10948.64332,125,8931.92383,8894.93,,26,,,,215,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0,300,331.333333,135,322.593750,312,435,205,314,, +D,DREGION,,3,"2023/12/14 20:30:00",1,SA1,0,143.116,0,143.116,0,0,1440.46,-3,1547.9,0,107.43,0,,,45,,,,,,,,44.59,,,,,,,,41,,,,,,,,171,,,,,,,,159.44,,,,,,,,163,,,,,,-10.92591,2622.89705,362,1454.66943,1440.77,,31,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0,307,314,308,108.054290,286,305,295,404.851470,, +D,DREGION,,3,"2023/12/14 20:30:00",1,TAS1,0,54.18,0,54.18,0,0,1103.72,-3,1586.1,0,482.38,0,,,17.57,,,,,,,,117.57,,,,,,,,117.57,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,-1.23593,2430.37815,0,1124.64526,1124.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.11,8.11,0,0.50353,0.50353,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,196.138846,261.587558,235.014363,115.535370,237.544874,620.730106,949.772592,649.911549,, +D,DREGION,,3,"2023/12/14 20:30:00",1,VIC1,0,148.11473,0,148.11473,0,0,5048.51,-30,5168.82,0,120.31,0,,,114.37,,,,,,,,114,,,,,,,,99.12,,,,,,,,138,,,,,,,,143,,,,,,,,114.78,,,,,,19.45423,7461.8158,447,5098.99756,5099.49,,73,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.72,0.72,0,2.75,2.75,0,0,0,0,0.01,0.01,0,0.2,0.2,0,24.88,24.88,0,603,611,559,37.3090,371,616,500,567.755759,, +D,DREGION,,3,"2023/12/14 20:35:00",1,NSW1,0,140,0,140,0,0,10929.99,-87,9977.88,63,-1015.11,0,,,49.43,,,,,,,,44.74,,,,,,,,0,,,,,,,,75,,,,,,,,77,,,,,,,,85,,,,,,-16.65522,12095.78748,147,11075.9541,11031.61,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,148.797660,144.797660,379.797660,109.688144,363,446,388,350.789523,, +D,DREGION,,3,"2023/12/14 20:35:00",1,QLD1,0,146.93798,0,146.93798,0,0,8774.41,-30,9024.02,0,249.62,0,,,0,,,,,,,,20,,,,,,,,0,,,,,,,,30,,,,,,,,188.33,,,,,,,,188,,,,,,-23.62084,10951.91302,125,8821.66113,8769.85,,1,,,,210,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,305,336.333333,140,334.883370,312,435,205,314,, +D,DREGION,,3,"2023/12/14 20:35:00",1,SA1,0,116.81591,0,116.81591,0,0,1448.69,-3,1445.5,29,-32.19,0,,,45,,,,,,,,58,,,,,,,,48,,,,,,,,166.94,,,,,,,,147.92,,,,,,,,161,,,,,,-2.31216,2607.18201,362,1456.17957,1477.44,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,305,314,306,139.851470,284,306,296,331.333068,, +D,DREGION,,3,"2023/12/14 20:35:00",1,TAS1,0,54.2,0,54.2,0,0,1096.61,-3,1578.99,0,482.38,0,,,17.57,,,,,,,,117.57,,,,,,,,117.57,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.73631,2412.95833,0,1112.7605,1116.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,192.425687,256.497807,224.800513,101.7690,239.270384,634.496476,960.070387,657.892386,, +D,DREGION,,3,"2023/12/14 20:35:00",1,VIC1,0,115.99817,0,115.99817,0,0,5012,-27,5446.51,0,434.51,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,158,,,,,,,,145,,,,,,,,124.25,,,,,,13.41655,7458.51003,447,5066.19531,5077.01,,84,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.68,0.68,0,0.78,0.78,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,647.666667,654,604,84,396,636,525,570.194075,, +D,DREGION,,3,"2023/12/14 20:40:00",1,NSW1,0,140,0,140,0,0,10901.98,-73,10057.74,72,-916.24,0,,,64.78,,,,,,,,61,,,,,,,,24,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-29.75332,12086.5788,147,11098.94141,11006.7,,55,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0,175.305860,171.305860,406.305860,130.241055,384,497,429,258.764034,, +D,DREGION,,3,"2023/12/14 20:40:00",1,QLD1,0,147.96361,0,147.96361,0,0,8784.5,-34,9003.07,0,218.58,0,,,0,,,,,,,,29.86,,,,,,,,0,,,,,,,,27,,,,,,,,193.33,,,,,,,,192,,,,,,-32.58351,10957.25943,125,8844.40625,8780.39,,7,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0,309,341.333333,144,335.406250,312,435,205,312.635799,, +D,DREGION,,3,"2023/12/14 20:40:00",1,SA1,0,118.44,0,118.44,0,0,1438.68,-3,1424.46,27,-41.22,0,,,47,,,,,,,,49,,,,,,,,41.5,,,,,,,,168,,,,,,,,143.46,,,,,,,,163,,,,,,-7.98412,2587.70596,362,1473.48303,1465.46,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0,307,316,307,137.851470,277,296,286,366.750820,, +D,DREGION,,3,"2023/12/14 20:40:00",1,TAS1,0,54.2,0,54.2,0,0,1112.25,-3,1594.63,0,482.38,0,,,17.72,,,,,,,,117.72,,,,,,,,117.72,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,7.53419,2408.59479,0,1125.74927,1132.63,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,185.867846,244.560538,205.700883,82.669370,239.157481,653.596106,980.341979,677.992016,, +D,DREGION,,3,"2023/12/14 20:40:00",1,VIC1,0,117.04047,0,117.04047,0,0,5052.76,-29,5424.31,9,362.55,0,,,104,,,,,,,,94,,,,,,,,94,,,,,,,,138.72,,,,,,,,145,,,,,,,,118.79,,,,,,7.15018,7469.95847,447,5135.93799,5119.03,,54,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,6,6,0,642,647,598,82,244.0001,368.0001,320.0001,420.316367,, +D,DREGION,,3,"2023/12/14 20:45:00",1,NSW1,0,140,0,140,0,0,10842.66,-74,9931.68,25,-935.98,0,,,74,,,,,,,,54.82,,,,,,,,0,,,,,,,,98.79,,,,,,,,77,,,,,,,,85,,,,,,-9.51809,12031.59384,147,11025.25195,10906.36,,45,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0,148.773260,144.773260,379.773260,84.870144,281,324,316,316.443695,, +D,DREGION,,3,"2023/12/14 20:45:00",1,QLD1,0,148.8467,0,148.8467,0,0,8798.18,-35,8979.9,0,181.72,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,27,,,,,,,,197.08,,,,,,,,209.08,,,,,,-41.54618,10956.77972,125,8869.34375,8794.58,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0,309,341.333333,143,323.263580,252,375,205,314,, +D,DREGION,,3,"2023/12/14 20:45:00",1,SA1,0,117.15595,0,117.15595,0,0,1436.15,-4,1395.74,0,-40.42,0,,,60,,,,,,,,60,,,,,,,,51,,,,,,,,146,,,,,,,,152,,,,,,,,163,,,,,,-11.11744,2565.73805,362,1478.84473,1435.93,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0,307,316,307,110.851470,277,280,280,387,, +D,DREGION,,3,"2023/12/14 20:45:00",1,TAS1,0,54.2,0,54.2,0,0,1110.81,-3,1593.19,0,482.38,0,,,17.46,,,,,,,,117.46,,,,,,,,117.46,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,12.07403,2392.09534,0,1119.45801,1131.19,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,180.746295,235.085670,190.541093,67.509580,239.157481,664.265476,995.630242,693.151806,, +D,DREGION,,3,"2023/12/14 20:45:00",1,VIC1,0,116.2009,0,116.2009,0,0,5018.61,-23,5449.43,0,430.82,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,168,,,,,,,,145,,,,,,,,114,,,,,,-2.11366,7456.42966,447,5103.84619,5081.88,,95,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0.01,0.01,0,0,0,0,1.5,1.5,0,614,619,573,68,371,676,510,578.535933,, +D,DREGION,,3,"2023/12/14 20:50:00",1,NSW1,0,137.69,0,137.69,0,0,10682.35,-73,9667.51,25,-1039.84,0,,,83,,,,,,,,61,,,,,,,,53.16,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-22.61619,12002.73564,206,10845.61035,10754.88,,57,,,,30,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0,151.865410,147.865410,382.865410,84.870144,354,437,379,386.838764,, +D,DREGION,,3,"2023/12/14 20:50:00",1,QLD1,0,145.19,0,145.19,0,0,8700.91,-39,8912.31,13,198.41,0,,,0,,,,,,,,57.42,,,,,,,,0,,,,,,,,27,,,,,,,,183.33,,,,,,,,181,,,,,,-38.459,10970.64373,125,8775.10742,8710.26,,1,,,,185,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0,271,303.333333,134,293,252,375,205,301,, +D,DREGION,,3,"2023/12/14 20:50:00",1,SA1,0,114.41117,0,114.41117,0,0,1438.31,-3,1379.87,0,-58.44,0,,,61,,,,,,,,61,,,,,,,,56,,,,,,,,166,,,,,,,,150.56,,,,,,,,161,,,,,,-0.88445,2548.87298,362,1452.47314,1438.16,,10,,,,0,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0,305,314,305,103.694854,285,308,298,387,, +D,DREGION,,3,"2023/12/14 20:50:00",1,TAS1,0,54.22,0,54.22,0,0,1107.54,-4,1589.91,0,482.38,0,,,17.46,,,,,,,,117.46,,,,,,,,117.46,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,11.56042,2383.19642,0,1116.45544,1127.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,178.648455,231.017182,184.016353,60.984840,239.270384,664.276189,1001.200175,698.676546,, +D,DREGION,,3,"2023/12/14 20:50:00",1,VIC1,0,112.44475,0,112.44475,0,0,4916.66,-24,5472.15,0,555.5,0,,,68.66,,,,,,,,53,,,,,,,,53,,,,,,,,141.14,,,,,,,,145,,,,,,,,128.89,,,,,,-2.91143,7468.15484,447,5006.60742,4990.56,,92,,,,5,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,0.71,0.71,0,607,612,566,69,420.9999,654.9999,543.9999,616.593550,, +D,DREGION,,3,"2023/12/14 20:55:00",1,NSW1,0,137.69,0,137.69,0,0,10534.1,-79,9559.25,25,-999.85,0,,,93,,,,,,,,61,,,,,,,,58,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-30.95238,11989.84965,206,10703.77637,10601.49,,57,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0,151.797660,147.797660,382.797660,85.121921,384,497,429,402.722730,, +D,DREGION,,3,"2023/12/14 20:55:00",1,QLD1,0,144.56224,0,144.56224,0,0,8564.69,-44,8794.93,27,203.24,0,,,0,,,,,,,,70,,,,,,,,18.57,,,,,,,,27,,,,,,,,193.33,,,,,,,,197.71,,,,,,-43.17459,10996.31059,125,8660.05664,8587.88,,1,,,,192,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0,310,341.333333,143,313.3591,248,370,200,287,, +D,DREGION,,3,"2023/12/14 20:55:00",1,SA1,0,115.98145,0,115.98145,0,0,1440.64,-4,1368.28,2,-74.35,0,,,63,,,,,,,,63,,,,,,,,58,,,,,,,,168,,,,,,,,144.38,,,,,,,,163,,,,,,3.53792,2537.28359,362,1441.70166,1442.58,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0,307,316,307,109.050384,287,310,300,385,, +D,DREGION,,3,"2023/12/14 20:55:00",1,TAS1,0,54.2,0,54.2,0,0,1101.68,-4,1584.06,0,482.38,0,,,17.47,,,,,,,,117.47,,,,,,,,117.47,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,12.70909,2378.75964,0,1110.54248,1122.06,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.13,8.13,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,179.3574,232.516213,186.429963,63.398450,239.157481,664.265476,999.776212,697.262936,, +D,DREGION,,3,"2023/12/14 20:55:00",1,VIC1,0,113.40556,0,113.40556,0,0,4921.62,-27,5463.45,26,515.83,0,,,50.58,,,,,,,,33.33,,,,,,,,29,,,,,,,,127.96,,,,,,,,145,,,,,,,,114,,,,,,3.29975,7463.45424,447,5008.38721,5015.97,,92,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.03,0.03,0,0.08,0.08,0,0.71,0.71,0,605,610,562,90,396.9999,628.9999,517.9999,586.570051,, +D,DREGION,,3,"2023/12/14 21:00:00",1,NSW1,0,137.69,0,137.69,0,0,10428.25,-83,9466.97,25,-986.28,0,,,83,,,,,,,,61,,,,,,,,58,,,,,,,,95,,,,,,,,80,,,,,,,,88,,,,,,-10.94259,11950.90153,206,10581.75781,10492.18,,67,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0,151.712950,147.712950,382.712950,84.127659,214,257,239,283.630981,, +D,DREGION,,3,"2023/12/14 21:00:00",1,QLD1,0,144.41425,0,144.41425,0,0,8561.89,-43,8781.63,4,215.74,0,,,0,,,,,,,,64.22,,,,,,,,9.86,,,,,,,,30,,,,,,,,188.33,,,,,,,,198.91,,,,,,-44.96285,10998.66466,125,8672.04492,8561.91,,1,,,,200,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0,305,336.333333,136,320.406250,252,375,205,309.832027,, +D,DREGION,,3,"2023/12/14 21:00:00",1,SA1,0,116.57382,0,116.57382,0,0,1445.95,-4,1354.43,0,-91.51,0,,,63,,,,,,,,63,,,,,,,,58,,,,,,,,168,,,,,,,,150.58,,,,,,,,163,,,,,,7.73748,2568.43179,362,1443.95728,1446.03,,21,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0,307,315,307,110.851470,287,310,300,387,, +D,DREGION,,3,"2023/12/14 21:00:00",1,TAS1,0,54.47772,0,54.47772,0,0,1105.17,-4,1587.55,0,482.38,0,,,28.74,,,,,,,,117.47,,,,,,,,117.47,,,,,,,,0,,,,,,,,0,,,,,,,,3,,,,,,9.90821,2363.79996,0,1115.95618,1125.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,175.404317,230.044960,171.981123,50.000010,238.638003,672.781085,1013.337399,715.503443,, +D,DREGION,,3,"2023/12/14 21:00:00",1,VIC1,0,113.56242,0,113.56242,0,0,4936.16,-23,5436.13,0,499.97,0,,,48,,,,,,,,38,,,,,,,,38,,,,,,,,139.95,,,,,,,,145,,,,,,,,114,,,,,,6.18096,7432.12926,447,5026.49658,5001.05,,71,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,2.75,2.75,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,0.72,0.72,0,597,602,557,68,189,371,261,447.9999,, +D,DREGION,,3,"2023/12/14 21:05:00",1,NSW1,0,137.69,0,137.69,0,0,10319.9,-87,9395.31,25,-949.59,0,,,53,,,,,,,,24.84,,,,,,,,0,,,,,,,,97.56,,,,,,,,80,,,,,,,,88,,,,,,-5.74749,12005.67578,206,10473.50195,10381.43,,67,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0,273.798120,269.798120,514.798120,164.907532,364,437,439,338.755112,, +D,DREGION,,3,"2023/12/14 21:05:00",1,QLD1,0,144.0284,0,144.0284,0,0,8480.88,-45,8728.01,3,244.13,0,,,0,,,,,,,,47,,,,,,,,12.04,,,,,,,,40,,,,,,,,243.33,,,,,,,,243,,,,,,-36.13756,10672.33437,125,8562.14844,8481.97,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0,313,344.333333,143,339,252,375,205,311,, +D,DREGION,,3,"2023/12/14 21:05:00",1,SA1,0,118.58247,0,118.58247,0,0,1429.17,-5,1331.76,0,-97.41,0,,,58,,,,,,,,58,,,,,,,,49,,,,,,,,166,,,,,,,,124.11,,,,,,,,147.45,,,,,,4.16381,2567.57385,362,1431.38684,1429.3,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0,305,313,305,65.851468,288,308,298,404.851470,, +D,DREGION,,3,"2023/12/14 21:05:00",1,TAS1,0,54.3637,0,54.3637,0,0,1083.61,-5,1565.98,0,482.38,0,,,17.17,,,,,,,,117.17,,,,,,,,117.17,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,11.95625,2367.06662,0,1095.92834,1103.98,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.2937,8.2937,0,1.14387,1.14387,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,176.229744,234.554633,171.224841,50.000035,234.144962,654.010028,991.982883,717.548436,, +D,DREGION,,3,"2023/12/14 21:05:00",1,VIC1,0,115.35614,0,115.35614,0,0,4910.21,-23,5344.31,0,434.09,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,124,,,,,,,,115,,,,,,,,84,,,,,,4.14048,7418.30793,447,4994.14355,4968.7,,82,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0,0,0,0,0,0,0,0,0,0.72,0.72,0,578,583,536,64,411.0001,646.0001,535.0001,615.843650,, +D,DREGION,,3,"2023/12/14 21:10:00",1,NSW1,0,137.69,0,137.69,0,0,10273.48,-79,9252.94,25,-1045.54,0,,,65.81,,,,,,,,33,,,,,,,,0,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-16.98561,11951.6172,206,10425.68555,10331.62,,77.23,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,336.6424,332.6424,593.977860,179.792936,424,537,479,347.128948,, +D,DREGION,,3,"2023/12/14 21:10:00",1,QLD1,0,140.98347,0,140.98347,0,0,8353.95,-56,8698.7,0,344.76,0,,,0,,,,,,,,65.39,,,,,,,,37.49,,,,,,,,32,,,,,,,,240.33,,,,,,,,240,,,,,,-29.443,10686.8096,125,8439.72266,8350.52,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,310,341.333333,140,336.645520,312,435,205,314,, +D,DREGION,,3,"2023/12/14 21:10:00",1,SA1,0,118.44,0,118.44,0,0,1436.25,-6,1350.28,0,-85.97,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,157.88,,,,,,,,88,,,,,,,,107.46,,,,,,-0.02224,2572.23846,362,1442.44812,1436.28,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,307,313,304,96.028333,290,310,300,404.851470,, +D,DREGION,,3,"2023/12/14 21:10:00",1,TAS1,0,54.22,0,54.22,0,0,1079.16,-5,1561.53,0,482.38,0,,,17.72,,,,,,,,117.72,,,,,,,,117.72,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.25482,2372.83733,0,1099.15381,1099.53,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.605,0.605,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,178.100078,233.507377,176.333817,53.710446,234.694962,638.565307,986.698020,707.534419,, +D,DREGION,,3,"2023/12/14 21:10:00",1,VIC1,0,115.41407,0,115.41407,0,0,4882.92,-25,5294.58,0,411.66,0,,,87,,,,,,,,77,,,,,,,,77,,,,,,,,132,,,,,,,,151.13,,,,,,,,124,,,,,,3.19394,7406.58279,447,4957.73584,4940.08,,71.77,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,617,622,575,73,412.0001,647.0001,536.0001,600.031149,, +D,DREGION,,3,"2023/12/14 21:15:00",1,NSW1,0,137.75683,0,137.75683,0,0,10172.64,-78,9171.9,25,-1025.74,0,,,83.86,,,,,,,,46.92,,,,,,,,9.52,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-28.22374,11951.10422,206,10336.25879,10232.2,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,341,337,599,179.792936,381,464,406,275.999265,, +D,DREGION,,3,"2023/12/14 21:15:00",1,QLD1,0,141.83843,0,141.83843,0,0,8379.02,-55,8691.19,0,312.17,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,31,,,,,,,,240.33,,,,,,,,240,,,,,,-11.18158,10669.61877,125,8441.7998,8375.56,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,310,341.333333,140,343,312,435,205,314,, +D,DREGION,,3,"2023/12/14 21:15:00",1,SA1,0,118.44,0,118.44,0,0,1410.69,-5,1323.62,0,-87.08,0,,,47,,,,,,,,50,,,,,,,,38,,,,,,,,163.58,,,,,,,,88.31,,,,,,,,111.65,,,,,,-0.12676,2577.44267,362,1415.89197,1410.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,307,313,304,112.271010,290,310,300,376.137282,, +D,DREGION,,3,"2023/12/14 21:15:00",1,TAS1,0,54.30839,0,54.30839,0,0,1075.54,-5,1557.91,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,-0.72257,2367.77422,0,1098.25134,1095.91,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.23839,8.23839,0,0.93645,0.93645,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,177.038511,232.728264,172.547913,50.000021,234.357478,635.446824,990.511595,713.261256,, +D,DREGION,,3,"2023/12/14 21:15:00",1,VIC1,0,115.38038,0,115.38038,0,0,4849.64,-32,5278.29,0,428.65,0,,,87,,,,,,,,77,,,,,,,,72,,,,,,,,131,,,,,,,,155,,,,,,,,124,,,,,,5.05032,7390.28667,447,4932.17871,4908.49,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.99,3.99,0,625,630,582,70,387.0001,627.0001,516.0001,574.348533,, +D,DREGION,,3,"2023/12/14 21:20:00",1,NSW1,0,137.69,0,137.69,0,0,10091.6,-74,9050.74,25,-1065.86,0,,,80,,,,,,,,59.06,,,,,,,,0,,,,,,,,92,,,,,,,,77,,,,,,,,85,,,,,,-34.69995,11936.90494,206,10260.18066,10159.41,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0,341,337,599,179.764326,381,464,406,305.444921,, +D,DREGION,,3,"2023/12/14 21:20:00",1,QLD1,0,142.55529,0,142.55529,0,0,8379.44,-52,8653.54,0,274.1,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,30,,,,,,,,240.7,,,,,,,,240,,,,,,-1.23404,10648.07038,125,8428.97949,8376.22,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0,310,341.333333,139,335,252,375,205,314,, +D,DREGION,,3,"2023/12/14 21:20:00",1,SA1,0,116.04224,0,116.04224,0,0,1385.7,-7,1300.84,0,-84.86,0,,,58,,,,,,,,58,,,,,,,,49,,,,,,,,162.98,,,,,,,,87,,,,,,,,110.7,,,,,,-8.66368,2569.83772,362,1401.4801,1385.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0,305,312,303,111.870520,288,308,298,390.492797,, +D,DREGION,,3,"2023/12/14 21:20:00",1,TAS1,0,54.47772,0,54.47772,0,0,1092.49,-5,1574.86,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,-1.10986,2352.89342,0,1113.69067,1112.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,4.37,4.37,0,168.617146,216.799640,142.202705,50.000022,228.723208,669.838809,1021.284912,722.639115,, +D,DREGION,,3,"2023/12/14 21:20:00",1,VIC1,0,113.43438,0,113.43438,0,0,4767.86,-33,5290.1,0,522.24,0,,,86,,,,,,,,76,,,,,,,,76,,,,,,,,131,,,,,,,,155,,,,,,,,124,,,,,,4.55605,7389.09933,447,4854.36426,4835.86,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0,0,0,3.99,3.99,0,620,625,577,70,386.0001,626.0001,520.0001,583.826010,, +D,DREGION,,3,"2023/12/14 21:25:00",1,NSW1,0,126.77369,0,126.77369,0,0,9993.17,-78,8931.39,25,-1086.78,0,,,81.1,,,,,,,,49.67,,,,,,,,26,,,,,,,,92,,,,,,,,77,,,,,,,,86,,,,,,-41.17618,11957.80814,206,10177.1416,10067.03,,63.23,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,342,337,599,178.7413,448,561,503,387.843611,, +D,DREGION,,3,"2023/12/14 21:25:00",1,QLD1,0,131.75,0,131.75,0,0,8262.33,-49,8505.04,0,242.7,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,31,,,,,,,,240.33,,,,,,,,240,,,,,,3.75032,10638.20072,125,8304.3623,8259.7,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,310,359.333333,138,375,312,435,205,216.151470,, +D,DREGION,,3,"2023/12/14 21:25:00",1,SA1,0,106.63695,0,106.63695,0,0,1385.34,-7,1289.23,0,-96.11,0,,,48,,,,,,,,47,,,,,,,,38,,,,,,,,159.93,,,,,,,,88.17,,,,,,,,110.5,,,,,,-12.15227,2613.23129,362,1406.17566,1385.47,,22,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,307,313,304,114.173567,289,309,299,392,, +D,DREGION,,3,"2023/12/14 21:25:00",1,TAS1,0,54.47772,0,54.47772,0,0,1090.93,-3,1573.31,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,5.61052,2353.92223,0,1105.00989,1111.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,169.259689,219.155632,144.687205,50.000028,229.190589,669.838809,1018.779357,722.012399,, +D,DREGION,,3,"2023/12/14 21:25:00",1,VIC1,0,103.70884,0,103.70884,0,0,4738.27,-33,5337,0,598.73,0,,,87,,,,,,,,77,,,,,,,,62,,,,,,,,133,,,,,,,,155,,,,,,,,124,,,,,,2.06579,7444.004,447,4833.18066,4812.46,,73.77,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0.01,0.01,0,0.01,0.01,0,1.2,1.2,0,623,628,582,77,387.0001,627.0001,521.0001,582.162009,, +D,DREGION,,3,"2023/12/14 21:30:00",1,NSW1,0,119.90818,0,119.90818,0,0,9903.82,-72,8908.08,25,-1020.73,0,,,80,,,,,,,,58,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-38.72799,11980.11227,206,10083.34375,9976.67,,47,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0,344,339,601,179.098057,381,464,406,306.213751,, +D,DREGION,,3,"2023/12/14 21:30:00",1,QLD1,0,125.24406,0,125.24406,0,0,8233.73,-46,8428.19,0,194.46,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,28,,,,,,,,240.33,,,,,,,,240,,,,,,8.39629,10622.27546,125,8268.53027,8231.67,,1,,,,207,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0,310,359.333333,138,379,312,435,205,281.867925,, +D,DREGION,,3,"2023/12/14 21:30:00",1,SA1,0,101.44,0,101.44,0,0,1378.94,-7,1258.14,0,-120.8,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,158.4,,,,,,,,89,,,,,,,,109.28,,,,,,-10.63397,2612.363,362,1396.99487,1379.3,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0,307,314,305,118.447720,251.773940,257.773940,257.773940,361.773940,, +D,DREGION,,3,"2023/12/14 21:30:00",1,TAS1,0,54.47772,0,54.47772,0,0,1089.41,-3,1571.79,0,482.38,0,,,17.65,,,,,,,,117.65,,,,,,,,117.65,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,5.68207,2364.17857,0,1104.40173,1109.79,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,172.151130,229.371616,155.460425,50.000006,231.330138,662.779859,1006.904738,717.401443,, +D,DREGION,,3,"2023/12/14 21:30:00",1,VIC1,0,98.15809,0,98.15809,0,0,4777.02,-31,5380.64,0,603.62,0,,,87,,,,,,,,75.15,,,,,,,,77,,,,,,,,136,,,,,,,,152.95,,,,,,,,124,,,,,,2.73062,7495.64281,447,4873.56299,4849.42,,92,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0,0,0,0,0,0,0,0,0,3.99,3.99,0,622,627,587,92,362.0001,607.0001,501.0001,566.668784,, +D,DREGION,,3,"2023/12/14 21:35:00",1,NSW1,0,126.45341,0,126.45341,0,0,9810.91,-70,8693.03,25,-1142.88,0,,,61.03,,,,,,,,49.83,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,77,,,,,,-33.29122,12014.76135,205,9982.2627,9895.74,,50,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0,343,339,601,170.449628,451,564,506,442.070333,, +D,DREGION,,3,"2023/12/14 21:35:00",1,QLD1,0,131.75,0,131.75,0,0,8118.32,-47,8322.05,0,203.73,0,,,0,,,,,,,,47,,,,,,,,47,,,,,,,,29,,,,,,,,232.33,,,,,,,,232,,,,,,1.49051,10577.50582,125,8160.80518,8116.02,,0,,,,184,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0,302,351.333333,129,264.202676,312,435,205,227,, +D,DREGION,,3,"2023/12/14 21:35:00",1,SA1,0,102.86575,0,102.86575,0,0,1352.13,-7,1281.24,0,-70.89,0,,,47,,,,,,,,47,,,,,,,,36,,,,,,,,164,,,,,,,,94.9,,,,,,,,128.23,,,,,,-14.78509,2606.24319,362,1374.54858,1352.06,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0,305,312,303,74.548430,288,309,299,392,, +D,DREGION,,3,"2023/12/14 21:35:00",1,TAS1,0,54.47772,0,54.47772,0,0,1078.38,-3,1560.75,0,482.38,0,,,17.39,,,,,,,,117.38,,,,,,,,117.38,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,2.35894,2364.15376,0,1096.3208,1098.75,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,175.024781,235.071627,166.571875,50.000018,233.420410,654.927768,995.699123,715.941150,, +D,DREGION,,3,"2023/12/14 21:35:00",1,VIC1,0,101.06347,0,101.06347,0,0,4749.53,-26,5440.98,0,691.45,0,,,114,,,,,,,,104,,,,,,,,94,,,,,,,,138.43,,,,,,,,155,,,,,,,,124,,,,,,1.66193,7457.07962,447,4841.82324,4835.48,,90,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,1,1,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.98,3.98,0,628,633,592,99,386.0001,626.0001,515.0001,570.287925,, +D,DREGION,,3,"2023/12/14 21:40:00",1,NSW1,0,126.07673,0,126.07673,0,0,9747.13,-63,8648.89,25,-1123.24,0,,,58.65,,,,,,,,39.99,,,,,,,,0,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-27.05751,11990.07647,206,9925.8252,9841.4,,50,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0,344,339,601,179.808195,381,464,406,360.400650,, +D,DREGION,,3,"2023/12/14 21:40:00",1,QLD1,0,133.01,0,133.01,0,0,8122.83,-51,8250.71,0,127.87,0,,,0,,,,,,,,45,,,,,,,,20.43,,,,,,,,29,,,,,,,,256.28,,,,,,,,232,,,,,,-13.80877,10552.19064,125,8185.53711,8121.87,,21,,,,193,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0,302,339.709873,128,219.048411,287,400,170,227,, +D,DREGION,,3,"2023/12/14 21:40:00",1,SA1,0,102.58166,0,102.58166,0,0,1357.92,-7,1270.63,0,-87.29,0,,,51,,,,,,,,61,,,,,,,,51,,,,,,,,166,,,,,,,,89,,,,,,,,146.28,,,,,,-3.79321,2595.62686,362,1368.90686,1357.97,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0,307,314,305,110.851470,291,312,302,392,, +D,DREGION,,3,"2023/12/14 21:40:00",1,TAS1,0,54.47772,0,54.47772,0,0,1067.16,-3,1549.54,0,482.38,0,,,19.29,,,,,,,,119.28,,,,,,,,119.28,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,0.32045,2351.49177,0,1087.40991,1087.54,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.40772,8.40772,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,174.624244,235.071627,165.023135,50.000006,233.129063,656.022211,997.260988,706.615180,, +D,DREGION,,3,"2023/12/14 21:40:00",1,VIC1,0,99.9317,0,99.9317,0,0,4651.68,-26,5435.41,0,783.73,0,,,110,,,,,,,,100,,,,,,,,100,,,,,,,,138.95,,,,,,,,140,,,,,,,,108,,,,,,-7.02491,7443.41081,447,4773.70459,4746.4,,69,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,1,1,0,0,0,0,0,0,0,0.01,0.01,0,3.76,3.76,0,626,631,586,99,295.0001,419.0001,371.0001,490.068259,, +D,DREGION,,3,"2023/12/14 21:45:00",1,NSW1,0,137.69,0,137.69,0,0,9640.43,-61,8646.12,25,-1019.31,0,,,74.1,,,,,,,,66,,,,,,,,59.33,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-26.78456,12004.97497,206,9812.0332,9714.86,,50,,,,11,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,344,339,601,179.792936,381,464,406,325.117279,, +D,DREGION,,3,"2023/12/14 21:45:00",1,QLD1,0,143.12199,0,143.12199,0,0,8032.66,-48,8214.51,0,181.85,0,,,0,,,,,,,,143.04,,,,,,,,85,,,,,,,,25,,,,,,,,240.33,,,,,,,,240,,,,,,-27.50229,10515.47882,125,8106.59619,8030.77,,6,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,310,341.333333,143,293,312,435,205,227,, +D,DREGION,,3,"2023/12/14 21:45:00",1,SA1,0,115.6813,0,115.6813,0,0,1348.29,-7,1261.04,0,-87.25,0,,,49,,,,,,,,51,,,,,,,,45,,,,,,,,81,,,,,,,,89,,,,,,,,78,,,,,,-2.94774,2586.03667,362,1358.48975,1348.34,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,307,314,305,126.851470,281,282,282,392,, +D,DREGION,,3,"2023/12/14 21:45:00",1,TAS1,0,103.74096,0,103.74096,0,0,1067.27,-3,1386.36,0,319.09,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,42.02,,,,,,,,5.33,,,,,,,,46.96,,,,,,-0.85374,2358.46081,0,1088.5813,1076.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.5,3.5,0,217.168706,338.016149,309.271345,285.820852,200.091756,521.653711,845.067608,627.445594,, +D,DREGION,,3,"2023/12/14 21:45:00",1,VIC1,0,112.69295,0,112.69295,0,0,4683.61,-26,5415.13,0,731.52,0,,,115,,,,,,,,105,,,,,,,,105,,,,,,,,136,,,,,,,,153.29,,,,,,,,124,,,,,,-14.84412,7444.13154,447,4806.92041,4753.12,,84,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,632,637,596,103.555870,362.0001,607.0001,501.0001,549.536033,, +D,DREGION,,3,"2023/12/14 21:50:00",1,NSW1,0,137.01732,0,137.01732,0,0,9556.36,-60,8710.68,25,-870.68,0,,,76.48,,,,,,,,84.17,,,,,,,,88.37,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-17.8889,11992.53679,206,9709.95117,9613.13,,50,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,344,339,601,161.640375,381,464,406,392.890538,, +D,DREGION,,3,"2023/12/14 21:50:00",1,QLD1,0,141.23361,0,141.23361,0,0,7960.34,-49,8172.93,0,212.59,0,,,0,,,,,,,,115,,,,,,,,45,,,,,,,,25,,,,,,,,240.33,,,,,,,,240,,,,,,-27.21117,10524.75676,125,8033.99512,7958.1,,6,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,310,341.333333,143,293,252,375,205,227,, +D,DREGION,,3,"2023/12/14 21:50:00",1,SA1,0,118.44,0,118.44,0,0,1348.73,-6,1268.15,0,-80.58,0,,,49,,,,,,,,62,,,,,,,,56,,,,,,,,79,,,,,,,,87,,,,,,,,76,,,,,,-1.77417,2588.03267,362,1357.49438,1348.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,305,312,303,118.983617,289,310,300,397.120020,, +D,DREGION,,3,"2023/12/14 21:50:00",1,TAS1,0,105.0596,0,105.0596,0,0,1040.02,-3,1398,0,357.97,0,,,0,,,,,,,,1.9,,,,,,,,1.9,,,,,,,,57.97,,,,,,,,14.22,,,,,,,,57.56,,,,,,-8.61005,2370.39671,0,1059.54846,1051.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.76,3.76,0,217.168706,343.615210,311.271345,252.468138,200.091756,521.653711,845.067608,627.445594,, +D,DREGION,,3,"2023/12/14 21:50:00",1,VIC1,0,115.7569,0,115.7569,0,0,4647.64,-22,5119.23,0,471.6,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-13.4607,7454.23341,447,4750.45264,4697.88,,84,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,635,640,598,96,411.0001,646.0001,535.0001,577.724509,, +D,DREGION,,3,"2023/12/14 21:55:00",1,NSW1,0,123.52845,0,123.52845,0,0,9451.81,-66,8738.11,25,-738.7,0,,,115,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-25.65453,11982.11024,206,9592.83203,9503.96,,42,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0,344,339,595,161.987976,381,464,406,405.475771,, +D,DREGION,,3,"2023/12/14 21:55:00",1,QLD1,0,128.63884,0,128.63884,0,0,7861.19,-49,8016.79,0,155.6,0,,,0,,,,,,,,167.44,,,,,,,,103.18,,,,,,,,23,,,,,,,,238.33,,,,,,,,238,,,,,,-35.75162,10547.6666,125,7943.23096,7859.85,,0,,,,206,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0,308,357.333333,141,291,312,435,205,182.000006,, +D,DREGION,,3,"2023/12/14 21:55:00",1,SA1,0,108.88922,0,108.88922,0,0,1350.97,-6,1262.1,0,-88.87,0,,,65,,,,,,,,64,,,,,,,,58,,,,,,,,81,,,,,,,,89,,,,,,,,78,,,,,,1.58225,2587.09886,362,1355.65723,1351.04,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0,307,314,305,126.116942,291,312,302,392,, +D,DREGION,,3,"2023/12/14 21:55:00",1,TAS1,0,98.15,0,98.15,0,0,1047.53,-4,1336.47,0,288.94,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,64.73,,,,,,,,21.74,,,,,,,,65.07,,,,,,-6.06594,2395.44722,0,1066.27002,1054.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.53,3.53,0,218.580471,411.250774,381.218713,265.695846,153.069076,480.153711,757.820249,540.571914,, +D,DREGION,,3,"2023/12/14 21:55:00",1,VIC1,0,106.07633,0,106.07633,0,0,4638.79,-21,5096.46,0,457.67,0,,,60.1,,,,,,,,44,,,,,,,,44,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-10.4537,7428.46189,447,4713.03711,4680.41,,108,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,1,1,0,627,632,590,95,381.0001,620.0001,509.0001,570.476402,, +D,DREGION,,3,"2023/12/14 22:00:00",1,NSW1,0,114.20773,0,114.20773,0,0,9396.3,-64,8713.11,25,-708.19,0,,,93,,,,,,,,98,,,,,,,,89.47,,,,,,,,94,,,,,,,,79,,,,,,,,78,,,,,,-33.42015,11957.10839,206,9553.51172,9449.05,,37,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,344,339,595,162.889699,386,469,411,406.353908,, +D,DREGION,,3,"2023/12/14 22:00:00",1,QLD1,0,119.55,0,119.55,0,0,7797.33,-46,7929.28,0,131.95,0,,,0,,,,,,,,163.83,,,,,,,,105,,,,,,,,22,,,,,,,,236.33,,,,,,,,239,,,,,,-41.77187,10564.02821,125,7883.62256,7796.22,,0,,,,214,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,331.073120,380.406453,163.073120,325.073120,312,435,205,197.219797,, +D,DREGION,,3,"2023/12/14 22:00:00",1,SA1,0,100.13941,0,100.13941,0,0,1314.93,-6,1242.7,0,-72.24,0,,,52,,,,,,,,64,,,,,,,,58,,,,,,,,81,,,,,,,,87,,,,,,,,78,,,,,,1.65672,2601.69653,362,1319.42712,1314.87,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,307,314,305,126.851470,258,284,274,357,, +D,DREGION,,3,"2023/12/14 22:00:00",1,TAS1,0,93.24142,0,93.24142,0,0,1006.53,-4,1147.36,0,140.84,0,,,11.59,,,,,,,,0,,,,,,,,0,,,,,,,,70.73,,,,,,,,54.63,,,,,,,,78.96,,,,,,-11.31552,2395.56434,0,1027.70349,1008,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,5.5,5.5,0,238.828591,522.787675,587.971960,456.460194,138.393847,419.412857,602.933796,351.445594,, +D,DREGION,,3,"2023/12/14 22:00:00",1,VIC1,0,97.84874,0,97.84874,0,0,4536.95,-22,5110.75,0,573.8,0,,,84,,,,,,,,44,,,,,,,,44,,,,,,,,121,,,,,,,,125,,,,,,,,108,,,,,,-11.36483,7441.75319,447,4618.50146,4575.06,,113,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.3,0.3,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,629,634,593,114,376.0001,615.0001,504.0001,569.9374,, +D,DREGION,,3,"2023/12/14 22:05:00",1,NSW1,0,114.10575,0,114.10575,0,0,9322.77,-81,8637.27,0,-685.5,0,,,106.65,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,71,,,,,,,,88,,,,,,-30.50044,11939.61679,206,9487.48633,9350.82,,50,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0,344,339,595,143.044713,381,464,406,404.965847,, +D,DREGION,,3,"2023/12/14 22:05:00",1,QLD1,0,119.19478,0,119.19478,0,0,7706.22,-61,7818.11,0,111.89,0,,,0,,,,,,,,80,,,,,,,,70,,,,,,,,22,,,,,,,,233.33,,,,,,,,239,,,,,,-43.13053,10411.17673,125,7808.64941,7705.27,,35,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0,349,456.333333,180,315,225,338,213,157.000013,, +D,DREGION,,3,"2023/12/14 22:05:00",1,SA1,0,100.00214,0,100.00214,0,0,1293.48,-4,1222.21,0,-71.26,0,,,59,,,,,,,,63,,,,,,,,56,,,,,,,,79,,,,,,,,85,,,,,,,,76,,,,,,-5.47086,2610.21447,362,1302.99683,1293.41,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0,305,312,303,126.851470,256,282,272,357,, +D,DREGION,,3,"2023/12/14 22:05:00",1,TAS1,0,95.18,0,95.18,0,0,990.69,-10,1116.57,0,125.88,0,,,0,,,,,,,,22.75,,,,,,,,0,,,,,,,,99.29,,,,,,,,69.25,,,,,,,,69.25,,,,,,-15.63649,2368.05793,0,1016.77533,991.82,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,5.5,5.5,0,238.828591,522.787675,585.462380,438.810706,139.025188,414.976903,605.464465,353.955174,, +D,DREGION,,3,"2023/12/14 22:05:00",1,VIC1,0,97.70398,0,97.70398,0,0,4480.94,-54,5065.85,0,584.91,0,,,76,,,,,,,,113,,,,,,,,81.69,,,,,,,,134,,,,,,,,128.8,,,,,,,,115.14,,,,,,-10.20905,7490.57464,447,4582.20459,4518.69,,55,,,,5,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.26,0.26,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,3.98,3.98,0,620,625,581,89,294.0001,408.0001,355.0001,501.504783,, +D,DREGION,,3,"2023/12/14 22:10:00",1,NSW1,0,134.85177,0,134.85177,0,0,9276.06,-57,8601.05,0,-675.01,0,,,95,,,,,,,,93,,,,,,,,90,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-36.76635,11928.05112,206,9401.82324,9325.12,,56,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0,344,339,595,139.028776,381,464,386,373.685177,, +D,DREGION,,3,"2023/12/14 22:10:00",1,QLD1,0,145.17,0,145.17,0,0,7650.19,-51,7592.88,0,-57.31,0,,,0,,,,,,,,142,,,,,,,,87.2,,,,,,,,22,,,,,,,,233.33,,,,,,,,239,,,,,,-32.93631,10329.76379,125,7732.87012,7653.23,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0,349,458.333333,179,319,287,400,215,157,, +D,DREGION,,3,"2023/12/14 22:10:00",1,SA1,0,112.83257,0,112.83257,0,0,1282.99,-9,1258.04,0,-24.95,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,81,,,,,,,,89,,,,,,,,92.84,,,,,,-12.59843,2628.03961,362,1304.59314,1282.73,,51,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0,307,314,305,94.575072,281,283,283,392,, +D,DREGION,,3,"2023/12/14 22:10:00",1,TAS1,0,98.15,0,98.15,0,0,972.92,-6,1270.85,0,297.92,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,99,,,,,,,,33.26,,,,,,,,45.76,,,,,,-15.85461,2363.70027,0,995.27081,980.55,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,3.53,3.53,0,221.467511,437.250774,426.088422,337.217956,156.181979,500.722698,729.725588,512.791674,, +D,DREGION,,3,"2023/12/14 22:10:00",1,VIC1,0,111.94103,0,111.94103,0,0,4468.38,-33,5045.63,0,577.25,0,,,92.47,,,,,,,,70.07,,,,,,,,62,,,,,,,,134,,,,,,,,155,,,,,,,,124,,,,,,-13.6736,7499.58616,447,4552.49951,4526.81,,48,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.08,0.08,0,0.38,0.38,0,29.91,29.91,0,626,680.96,636.96,88,220.0001,349.0401,286.0001,455.068259,, +D,DREGION,,3,"2023/12/14 22:15:00",1,NSW1,0,169.64362,0,169.64362,0,0,9265.56,-53,8647.03,0,-618.53,0,,,94,,,,,,,,92,,,,,,,,24.75,,,,,,,,110.04,,,,,,,,79,,,,,,,,88,,,,,,0,11919.50026,206,9359.11523,9332.75,,50,,,,21.8,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0,344,339,595,138.662702,380,463,385,366.038532,, +D,DREGION,,3,"2023/12/14 22:15:00",1,QLD1,0,188.32863,0,188.32863,0,0,7659.64,-28,7455,0,-204.64,0,,,0,,,,,,,,50.08,,,,,,,,47,,,,,,,,29,,,,,,,,229.33,,,,,,,,239,,,,,,0,10257.9793,125,7688.74268,7667.64,,25,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0,349,458.333333,179,300,287,400,215,194.099976,, +D,DREGION,,3,"2023/12/14 22:15:00",1,SA1,0,138.03499,0,138.03499,0,0,1292.6,-10,1278.73,0,-13.87,0,,,64,,,,,,,,60,,,,,,,,58,,,,,,,,143,,,,,,,,114.86,,,,,,,,127.2,,,,,,0,2618.7348,362,1302.54663,1292.32,,22,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0,307,313,304,82.156890,281,281,281,404.851470,, +D,DREGION,,3,"2023/12/14 22:15:00",1,TAS1,0,115.18,0,115.18,0,0,994.47,-2,1461.35,0,466.89,0,,,0,,,,,,,,99.43,,,,,,,,99.43,,,,,,,,0,,,,,,,,14.2,,,,,,,,14.2,,,,,,0,2352.38328,0,1001.87677,1013.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0,197.261550,252.581842,221.883996,135.584580,218.981821,491.617340,930.831103,658.483324,, +D,DREGION,,3,"2023/12/14 22:15:00",1,VIC1,0,137.66,0,137.66,0,0,4537.59,-5,5075.73,0,538.15,0,,,80.17,,,,,,,,67,,,,,,,,67,,,,,,,,170,,,,,,,,155,,,,,,,,124,,,,,,0,7502.61805,447,4593.31689,4611.59,,63,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0.2,0.2,0,9.88,9.88,0,619,683,635,64,231.0001,234.0001,241.0001,409.9999,, +D,DREGION,,3,"2023/12/14 22:20:00",1,NSW1,0,156.54153,0,156.54153,0,0,9147.94,-53,8549.51,0,-598.42,0,,,88,,,,,,,,93,,,,,,,,73.94,,,,,,,,93,,,,,,,,78,,,,,,,,87,,,,,,-20.90044,11860.82437,206,9278.89746,9211.72,,50,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0,343,338,594,117.244421,381,464,406,432.524612,, +D,DREGION,,3,"2023/12/14 22:20:00",1,QLD1,0,172.53519,0,172.53519,0,0,7601.37,-36,7398.53,0,-202.84,0,,,0,,,,,,,,90.16,,,,,,,,47,,,,,,,,24,,,,,,,,227.33,,,,,,,,240,,,,,,-40.98595,10208.54565,125,7684.26855,7608.92,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0,345,454.333333,164,270,252,375,250,248.094507,, +D,DREGION,,3,"2023/12/14 22:20:00",1,SA1,0,129.79274,0,129.79274,0,0,1286.09,-9,1243.85,0,-42.23,0,,,50,,,,,,,,62,,,,,,,,56,,,,,,,,149.93,,,,,,,,87,,,,,,,,92.56,,,,,,-7.40546,2594.85261,362,1302.62097,1285.87,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0,305,312,301,93.430346,289,310,300,419.851470,, +D,DREGION,,3,"2023/12/14 22:20:00",1,TAS1,0,115.18,0,115.18,0,0,1033.57,-1,1438.38,0,404.8,0,,,0,,,,,,,,46.06,,,,,,,,46.06,,,,,,,,21.51,,,,,,,,39.23,,,,,,,,43,,,,,,5.01178,2354.08214,0,1043.47754,1047.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0.08,0.08,0,3.5,3.5,0,203.840975,301.734962,268.558726,261.891090,190.557411,437.848020,893.779842,637.972506,, +D,DREGION,,3,"2023/12/14 22:20:00",1,VIC1,0,128.12017,0,128.12017,0,0,4498.4,-7,5092.11,0,593.71,0,,,98.1,,,,,,,,76,,,,,,,,76,,,,,,,,136,,,,,,,,155,,,,,,,,124,,,,,,-23.89773,7540.10711,447,4594.13574,4567.98,,85,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.08,0.08,0,3.98,3.98,0,613,618,576,83,397.0001,510.0001,455.0001,546.843650,, +D,DREGION,,3,"2023/12/14 22:25:00",1,NSW1,0,129.29672,0,129.29672,0,0,9093.97,-31,8492.95,0,-601.02,0,,,88,,,,,,,,93,,,,,,,,76.81,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-26.51686,11844.30786,206,9209.78125,9148.6,,50,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0,344,339,595,107.230280,381,464,406,455.775934,, +D,DREGION,,3,"2023/12/14 22:25:00",1,QLD1,0,141.32488,0,141.32488,0,0,7491.8,-39,7339.06,0,-152.74,0,,,0,,,,,,,,137.21,,,,,,,,87,,,,,,,,28,,,,,,,,227.33,,,,,,,,244,,,,,,-37.84407,10211.92329,125,7574.09131,7497.03,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0,349,458.333333,175,290,312,435,250,262,, +D,DREGION,,3,"2023/12/14 22:25:00",1,SA1,0,110.8539,0,110.8539,0,0,1296.74,-6,1164.1,0,-132.64,0,,,52,,,,,,,,64,,,,,,,,58,,,,,,,,83.7,,,,,,,,90,,,,,,,,88.68,,,,,,-6.16051,2585.09987,362,1309.30029,1297.26,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0,307,315,304,110.851470,291,312,302,378.635345,, +D,DREGION,,3,"2023/12/14 22:25:00",1,TAS1,0,98.19,0,98.19,0,0,1055.78,-4,1373.54,0,317.76,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,85.02,,,,,,,,36.34,,,,,,,,43,,,,,,12.4164,2356.85828,0,1057.84314,1064.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,8.12,8.12,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.5,3.5,0,204.311563,316.930597,314.490295,255.242105,195.034217,511.034761,839.831203,622.226644,, +D,DREGION,,3,"2023/12/14 22:25:00",1,VIC1,0,106.66354,0,106.66354,0,0,4410.32,-21,5110.9,0,700.58,0,,,99.25,,,,,,,,77,,,,,,,,77,,,,,,,,134,,,,,,,,153,,,,,,,,122,,,,,,-19.32878,7556.90117,447,4517.43066,4473.16,,85,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,3.75,3.75,0,616,621,579,84,387.0001,627.0001,516.0001,583.9999,, +D,DREGION,,3,"2023/12/14 22:30:00",1,NSW1,0,167.34301,0,167.34301,0,0,9081.18,-53,8446.81,0,-634.37,0,,,68,,,,,,,,64.33,,,,,,,,22.63,,,,,,,,108.91,,,,,,,,79,,,,,,,,88,,,,,,0,11833.80678,206,9180.26855,9142.09,,50,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0,344,339,595,119.199438,381,464,386,387.140004,, +D,DREGION,,3,"2023/12/14 22:30:00",1,QLD1,0,182.69397,0,182.69397,0,0,7482.92,-63,7310.09,0,-172.83,0,,,0,,,,,,,,67,,,,,,,,47,,,,,,,,33,,,,,,,,223.33,,,,,,,,245,,,,,,0,10121.86511,125,7549.03027,7488.8,,27,,,,186,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0,350,458.333333,174,291,312,435,250,261.367799,, +D,DREGION,,3,"2023/12/14 22:30:00",1,SA1,0,140.99,0,140.99,0,0,1290.97,-1,1193.69,0,-97.28,0,,,52,,,,,,,,63,,,,,,,,51,,,,,,,,143,,,,,,,,134.23,,,,,,,,134.56,,,,,,0,2580.21238,362,1292.32422,1291.11,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0,307,314,304,81.565642,281,282,282,416.851470,, +D,DREGION,,3,"2023/12/14 22:30:00",1,TAS1,0,115.2087,0,115.2087,0,0,1042.02,-4,1522.21,0,480.19,0,,,33.42,,,,,,,,115.75,,,,,,,,115.75,,,,,,,,0,,,,,,,,3,,,,,,,,3,,,,,,4.66316,2365.39888,0,1049.81104,1062.21,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,7.45561,7.45561,0,0.56261,0.56261,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,179.463847,234.028623,183.992350,61,232.720269,623.341429,979.409864,686.448637,, +D,DREGION,,3,"2023/12/14 22:30:00",1,VIC1,0,137.05833,0,137.05833,0,0,4529.36,-11,5112.62,0,583.26,0,,,87,,,,,,,,62,,,,,,,,62,,,,,,,,165,,,,,,,,153,,,,,,,,122,,,,,,0,7559.61777,447,4595.91846,4601.2,,63,,,,7,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,6.16905,6.16905,0,0,0,0,0.01,0.01,0,0.38,0.38,0,6,6,0,610,615,574,84,209.0001,328.0001,280.0001,469.692283,, +D,DREGION,,3,"2023/12/14 22:35:00",1,NSW1,0,161.00635,0,161.00635,0,0,8920.11,-63,8201.82,0,-718.29,0,,,80,,,,,,,,42.29,,,,,,,,30,,,,,,,,66,,,,,,,,51,,,,,,,,60,,,,,,-37.7497,11824.59028,206,9075.89648,8995.07,,42.55,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,316,311,573,163.896496,381,464,406,415.605347,, +D,DREGION,,3,"2023/12/14 22:35:00",1,QLD1,0,176.71993,0,176.71993,0,0,7453.81,-23,7246.84,0,-206.97,0,,,0,,,,,,,,107,,,,,,,,51.29,,,,,,,,34.27,,,,,,,,220.33,,,,,,,,244,,,,,,-38.31557,10106.52553,125,7520.3623,7460.63,,10.45,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,349,458.333333,173,272,312,435,250,262,, +D,DREGION,,3,"2023/12/14 22:35:00",1,SA1,0,133.98513,0,133.98513,0,0,1287.87,-3,1160.55,0,-127.32,0,,,59,,,,,,,,48,,,,,,,,43,,,,,,,,156,,,,,,,,129.92,,,,,,,,128.25,,,,,,-3.81503,2559.55108,362,1295.50208,1288.33,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,305,314,303,85.343261,289,311,301,421.851470,, +D,DREGION,,3,"2023/12/14 22:35:00",1,TAS1,0,115.18,0,115.18,0,0,1048.72,-1,1480.5,0,431.77,0,,,0,,,,,,,,71.22,,,,,,,,71.22,,,,,,,,3,,,,,,,,43,,,,,,,,43,,,,,,11.26015,2362.72621,0,1056.02795,1065.03,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0,0,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,195.007014,246.522687,234.086016,163.930460,222.847323,503.606444,927.225182,671.445216,, +D,DREGION,,3,"2023/12/14 22:35:00",1,VIC1,0,128.93128,0,128.93128,0,0,4494.82,6,5300.27,0,805.46,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,143,,,,,,,,144,,,,,,,,113,,,,,,-15.4476,7542.21378,447,4570.89697,4580.92,,87,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.49,0.49,0,0.49,0.49,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,639.0001,644.0001,599.0001,118.9999,384.0001,625.0001,520.0001,548.068259,, +D,DREGION,,3,"2023/12/14 22:40:00",1,NSW1,0,176.54995,0,176.54995,0,0,8902.89,-45,8046.24,0,-856.65,0,,,80,,,,,,,,58.91,,,,,,,,0,,,,,,,,104.32,,,,,,,,51.69,,,,,,,,60,,,,,,-36.17074,11888.24474,206,9061.96094,8997.7,,50,,,,18.33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0,316,311,333,158.601071,381,464,406,427.568937,, +D,DREGION,,3,"2023/12/14 22:40:00",1,QLD1,0,195.01,0,195.01,0,0,7449.5,-9,7230.26,0,-219.24,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,35,,,,,,,,238.33,,,,,,,,259.03,,,,,,-42.33225,10100.24382,125,7507.03857,7456.81,,47,,,,133.67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0,350,458.333333,172,224.670280,310,433,248,271.670280,, +D,DREGION,,3,"2023/12/14 22:40:00",1,SA1,0,140.99,0,140.99,0,0,1276.64,-3,1190.68,0,-85.96,0,,,61,,,,,,,,61,,,,,,,,51,,,,,,,,164,,,,,,,,147,,,,,,,,159,,,,,,0,2553.36206,362,1280.11584,1276.68,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0,303,312,301,71.851470,281,283,283,439.555449,, +D,DREGION,,3,"2023/12/14 22:40:00",1,TAS1,0,115.22,0,115.22,0,0,1043.32,-1,1523.51,0,480.19,0,,,15.87,,,,,,,,115.87,,,,,,,,115.87,,,,,,,,0,,,,,,,,2,,,,,,,,3,,,,,,1.19048,2357.22665,0,1057.08643,1063.51,,50,,,,50,,,,,,,,,,,,,,,,,,,0,0,0,0,0,0,0,0,0,8.15,8.15,0,0.58588,0.58588,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,166.210171,218.138849,185.573376,50.716205,234.845262,614.232709,976.134599,694.880433,, +D,DREGION,,3,"2023/12/14 22:40:00",1,VIC1,0,137.66,0,137.66,0,0,4450.88,-12,5363.59,0,912.71,0,,,100,,,,,,,,90,,,,,,,,90,,,,,,,,146,,,,,,,,153,,,,,,,,112,,,,,,-24.19583,7528.69362,447,4578.30322,4559.59,,43,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.53,0.53,0,1,1,0,0,0,0,0.01,0.01,0,0,0,0,6,6,0,599.0001,653.3601,616.3601,78.9999,218.0001,347.6401,291.0001,459.068259,, +D,DREGION,,3,"2023/12/14 22:45:00",1,NSW1,0,166.53653,0,166.53653,0,0,8699.96,-72,8028.1,0,-671.86,0,,,58.27,,,,,,,,58.86,,,,,,,,7.46,,,,,,,,107.01,,,,,,,,56.27,,,,,,,,63.6,,,,,,-41.1979,11865.10014,206,8903.19727,8787.32,,40,,,,6,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,316,311,573,156.371533,381,464,406,439.047758,, +D,DREGION,,3,"2023/12/14 22:45:00",1,QLD1,0,185.92237,0,185.92237,0,0,7439.09,-3,7138.9,0,-300.18,0,,,0,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,214.33,,,,,,,,245,,,,,,-44.31765,10090.10337,125,7493.80225,7449.47,,16,,,,179,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,329,438.333333,152,271,287,400,215,262,, +D,DREGION,,3,"2023/12/14 22:45:00",1,SA1,0,136.81331,0,136.81331,0,0,1267.28,-5,1146.38,0,-120.89,0,,,50,,,,,,,,48,,,,,,,,45,,,,,,,,158,,,,,,,,161,,,,,,,,154,,,,,,3.44165,2545.38359,362,1269.01172,1267.66,,20,,,,0,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,303,310,300,97.107543,291,312,302,421.851470,, +D,DREGION,,3,"2023/12/14 22:45:00",1,TAS1,0,115.22,0,115.22,0,0,1029.37,-3,1507.63,0,478.25,0,,,13.69,,,,,,,,113.68,,,,,,,,113.68,,,,,,,,0,,,,,,,,3.77,,,,,,,,3.77,,,,,,5.95238,2354.54862,0,1044.51746,1049.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,8.15,8.15,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,180.780223,250.043849,198.991165,55.519837,237.561609,639.338136,962.975817,684.269764,, +D,DREGION,,3,"2023/12/14 22:45:00",1,VIC1,0,132.31275,0,132.31275,0,0,4422.01,-13,5249.58,0,827.57,0,,,115,,,,,,,,105,,,,,,,,90,,,,,,,,144,,,,,,,,153,,,,,,,,122,,,,,,-31.0234,7488.58113,447,4565.95947,4516.74,,84,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,0.53,0.53,0,0,0,0,0.01,0.01,0,0.01,0.01,0,3.76,3.76,0,636.0001,699.0001,647.0001,87.9999,406.0001,644.0001,536.0001,559.974509,, +D,DREGION,,3,"2023/12/14 22:50:00",1,NSW1,0,131.19651,0,131.19651,0,0,8682.58,-60,8025.75,0,-656.83,0,,,80,,,,,,,,93,,,,,,,,77.55,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-31.04394,11924.75432,206,8853.41113,8754.62,,40,,,,14,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,344,339,601,156.070133,381,463,405,404.655827,, +D,DREGION,,3,"2023/12/14 22:50:00",1,QLD1,0,144.30567,0,144.30567,0,0,7297.86,-17,7065.01,0,-232.85,0,,,0,,,,,,,,113.85,,,,,,,,65,,,,,,,,28,,,,,,,,209.33,,,,,,,,245,,,,,,-46.30304,10097.28519,125,7367.42432,7305.11,,16,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,355,464.333333,177,316,312,435,250,262,, +D,DREGION,,3,"2023/12/14 22:50:00",1,SA1,0,112.25678,0,112.25678,0,0,1268.02,-7,1066.54,0,-201.48,0,,,59,,,,,,,,63,,,,,,,,56,,,,,,,,75,,,,,,,,84,,,,,,,,72,,,,,,-3.75699,2531.29794,362,1279.73572,1269.65,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,301,309,299,126.851470,289,311,301,359.851473,, +D,DREGION,,3,"2023/12/14 22:50:00",1,TAS1,0,98.18,0,98.18,0,0,1026.67,-3,1302.21,0,275.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,69.89,,,,,,,,71.12,,,,,,,,69.46,,,,,,0.50622,2341.82023,0,1044.80371,1033.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.5,3.5,0,219.168706,394.226106,369.680405,221.807795,161.139478,473.844651,783.324792,566.036534,, +D,DREGION,,3,"2023/12/14 22:50:00",1,VIC1,0,105.83679,0,105.83679,0,0,4298.51,-43,5282.25,0,983.74,0,,,114,,,,,,,,104,,,,,,,,104,,,,,,,,118,,,,,,,,143,,,,,,,,112,,,,,,-27.68804,7510.25425,447,4460.68213,4379.25,,84,,,,34,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.76,3.76,0,610.0001,615.0001,569.0001,81.9999,405.0001,642.0001,535.0001,586.288901,, +D,DREGION,,3,"2023/12/14 22:55:00",1,NSW1,0,157.90454,0,157.90454,0,0,8681.8,-48,8078.72,0,-603.09,0,,,80,,,,,,,,83.52,,,,,,,,83.57,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0,11986.82211,206,8795.08398,8758.94,,50,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,344,339,601,182.597165,381,464,406,358.980007,, +D,DREGION,,3,"2023/12/14 22:55:00",1,QLD1,0,175.80712,0,175.80712,0,0,7348.49,-35,7052.63,0,-295.86,0,,,0,,,,,,,,105,,,,,,,,45,,,,,,,,28,,,,,,,,206.33,,,,,,,,245,,,,,,0,10084.95847,125,7389.57617,7358.06,,35,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,355,464.333333,177,320,285,398,213,262,, +D,DREGION,,3,"2023/12/14 22:55:00",1,SA1,0,133.84699,0,133.84699,0,0,1266.67,-3,1094.49,0,-172.18,0,,,60,,,,,,,,64,,,,,,,,58,,,,,,,,125.43,,,,,,,,88,,,,,,,,78,,,,,,0,2510.49104,362,1271.18799,1267.77,,21,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,307,313,303,95.578948,291,312,302,404.851470,, +D,DREGION,,3,"2023/12/14 22:55:00",1,TAS1,0,115.18,0,115.18,0,0,1011.08,-5,1392.07,0,380.99,0,,,0,,,,,,,,24.02,,,,,,,,24.02,,,,,,,,43.67,,,,,,,,77.77,,,,,,,,71.1,,,,,,-7.31625,2345.92524,0,1029.37415,1023.74,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,205.840975,320.152739,293.707586,166.035822,188.752055,437.793750,867.749218,640.184609,, +D,DREGION,,3,"2023/12/14 22:55:00",1,VIC1,0,127.48206,0,127.48206,0,0,4414.09,-19,5288.27,0,874.19,0,,,105,,,,,,,,95,,,,,,,,95,,,,,,,,116,,,,,,,,145,,,,,,,,114,,,,,,0,7509.27196,447,4506.99365,4497.66,,54,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0,0,0,6,6,0,612.0001,617.0001,566.0001,69.9999,228.0001,231.0001,241.0001,412.9999,, +D,DREGION,,3,"2023/12/14 23:00:00",1,NSW1,0,124.658,0,124.658,0,0,8622.72,-61,8079.35,0,-543.38,0,,,94,,,,,,,,99,,,,,,,,96,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,2.74405,11969.34585,206,8746.93164,8671,,35,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0,344,339,601,175.702581,386,469,411,410.004640,, +D,DREGION,,3,"2023/12/14 23:00:00",1,QLD1,0,135.10911,0,135.10911,0,0,7229.48,-31,7065.42,0,-164.05,0,,,0,,,,,,,,115,,,,,,,,95,,,,,,,,28,,,,,,,,203.33,,,,,,,,245,,,,,,-35.26125,10107.85409,125,7301.43994,7234.08,,0,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0,355,464.333333,176,320,252,375,250,262,, +D,DREGION,,3,"2023/12/14 23:00:00",1,SA1,0,110.71548,0,110.71548,0,0,1255.71,-4,1030.95,0,-224.76,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,81,,,,,,,,90,,,,,,,,78,,,,,,-0.55723,2496.95258,362,1262.90063,1257.82,,10,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0,307,315,305,126.851470,291,313,303,368.675261,, +D,DREGION,,3,"2023/12/14 23:00:00",1,TAS1,0,98.12,0,98.12,0,0,1021.7,-3,1198.43,0,176.73,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,78.25,,,,,,,,72.59,,,,,,,,64.92,,,,,,1.52795,2350.0748,0,1032.94373,1024.18,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,3.56,3.56,0,235.125604,454.981026,429.763493,287.853087,157.157094,472.519270,670.321740,453.900814,, +D,DREGION,,3,"2023/12/14 23:00:00",1,VIC1,0,103.86953,0,103.86953,0,0,4410.44,16,5279.94,0,869.5,0,,,89.72,,,,,,,,91.39,,,,,,,,57.54,,,,,,,,119,,,,,,,,145,,,,,,,,114,,,,,,-24.22204,7504.93834,447,4494.03076,4467,,115,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.17,0.17,0,0.2,0.2,0,1.2,1.2,0,616.0001,621.0001,571.0001,77.9999,395.0001,631.0001,524.0001,582.475424,, +D,DREGION,,3,"2023/12/14 23:05:00",1,NSW1,0,127.29166,0,127.29166,0,0,8586.51,-43,8023.43,3,-566.08,0,,,92,,,,,,,,70,,,,,,,,67,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,12.17372,11929.674,206,8671.48633,8641.76,,54,,,,6,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0,344,339,601,185.538037,383,466,408,347.269779,, +D,DREGION,,3,"2023/12/14 23:05:00",1,QLD1,0,137.88309,0,137.88309,0,0,7239.66,-59,7060.82,0,-178.84,0,,,0,,,,,,,,140,,,,,,,,130,,,,,,,,28,,,,,,,,200.33,,,,,,,,244,,,,,,-22.2202,10084.88649,125,7326.9165,7244.59,,5,,,,179,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0,354,463.333333,173,308,287,400,215,262,, +D,DREGION,,3,"2023/12/14 23:05:00",1,SA1,0,111.63821,0,111.63821,0,0,1247,-1,1040.21,0,-206.79,0,,,61,,,,,,,,61,,,,,,,,56,,,,,,,,76,,,,,,,,85,,,,,,,,76,,,,,,-7.79928,2491.20682,362,1257.75073,1248.73,,20,,,,0,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0,305,310,300,123.867919,279,278,278,404.851470,, +D,DREGION,,3,"2023/12/14 23:05:00",1,TAS1,0,98.15,0,98.15,0,0,1000.89,-2,1252.43,0,251.54,0,,,1.67,,,,,,,,23.46,,,,,,,,0,,,,,,,,83.96,,,,,,,,82.42,,,,,,,,69.75,,,,,,-6.29451,2345.06885,0,1011.16724,1006.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,3.53,3.53,0,223.580471,451.250774,454.483341,287.262675,158.214237,493.251252,701.549889,484.910084,, +D,DREGION,,3,"2023/12/14 23:05:00",1,VIC1,0,105.26069,0,105.26069,0,0,4413.69,33,5239.7,0,826.01,0,,,83,,,,,,,,78,,,,,,,,51.56,,,,,,,,120,,,,,,,,145,,,,,,,,114,,,,,,-18.9236,7493.69896,447,4458.33301,4475.28,,81,,,,30,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,0.03,0.03,0,0.38,0.38,0,0.38,0.38,0,2.22,2.22,0,617.0001,622.0001,574.0001,82.9999,340,582,475,551.200034,, +D,DREGION,,3,"2023/12/14 23:10:00",1,NSW1,0,128.61419,0,128.61419,0,0,8536.13,-44,7961.23,3,-577.9,0,,,62,,,,,,,,40,,,,,,,,37,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0.64407,11927.16289,206,8632.54883,8594.64,,83,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0,344,339,601,192.336854,354,437,379,365.441972,, +D,DREGION,,3,"2023/12/14 23:10:00",1,QLD1,0,140.05119,0,140.05119,0,0,7204.36,-23,7014.1,3,-193.27,0,,,0,,,,,,,,154.63,,,,,,,,94.5,,,,,,,,25,,,,,,,,201.89,,,,,,,,239,,,,,,-13.70805,10036.17687,125,7245.23535,7212.67,,5,,,,179,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0,349,458.333333,169,301.442140,312,435,250,262,, +D,DREGION,,3,"2023/12/14 23:10:00",1,SA1,0,112.78993,0,112.78993,0,0,1240.29,-4,1047.61,0,-192.68,0,,,49.65,,,,,,,,62,,,,,,,,58,,,,,,,,129.91,,,,,,,,134,,,,,,,,118.89,,,,,,-1.68394,2497.60857,362,1247.62109,1241.74,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0,307,312,302,122.525725,291,310,300,404.851470,, +D,DREGION,,3,"2023/12/14 23:10:00",1,TAS1,0,98.15,0,98.15,0,0,1005.4,-1,1300.82,0,295.42,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,2.54969,2330.33177,0,1006.87915,1012.89,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.53,3.53,0,219.329138,414.416636,388.805215,348.141076,154.656409,486.497166,765.375674,548.036204,, +D,DREGION,,3,"2023/12/14 23:10:00",1,VIC1,0,106.34821,0,106.34821,0,0,4447.56,44,5250.89,0,803.33,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,120,,,,,,,,144,,,,,,,,113,,,,,,-12.39528,7505.88873,447,4475.52881,4512.7,,52,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.05,0.05,0,3.75,3.75,0,613.0001,618.0001,569.0001,81.9999,366,613,511,554.536033,, +D,DREGION,,3,"2023/12/14 23:15:00",1,NSW1,0,157.43246,0,157.43246,0,0,8458.98,-49,7926.13,2,-534.85,0,,,68,,,,,,,,46,,,,,,,,42,,,,,,,,106.21,,,,,,,,79,,,,,,,,88,,,,,,-13.06255,11910.08594,206,8576.69238,8524.4,,61,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,344,339,601,219.0519,359,443,385,402.525075,, +D,DREGION,,3,"2023/12/14 23:15:00",1,QLD1,0,173.58939,0,173.58939,0,0,7236.73,-17,6967.51,0,-269.22,0,,,0,,,,,,,,100.05,,,,,,,,47.13,,,,,,,,30,,,,,,,,224.33,,,,,,,,227,,,,,,-14.47392,9843.67304,125,7275.97266,7244.77,,40,,,,164,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,337,446.333333,166,277,252,375,250,302,, +D,DREGION,,3,"2023/12/14 23:15:00",1,SA1,0,134.37949,0,134.37949,0,0,1228.31,-3,1091.34,0,-136.97,0,,,67,,,,,,,,66,,,,,,,,58,,,,,,,,168,,,,,,,,126.56,,,,,,,,145.9,,,,,,-2.5384,2494.62635,362,1235.1615,1228.89,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,307,315,305,65.851472,281,284,284,404.851470,, +D,DREGION,,3,"2023/12/14 23:15:00",1,TAS1,0,115.18,0,115.18,0,0,1018.15,0,1455.61,0,437.46,0,,,0,,,,,,,,76.86,,,,,,,,76.86,,,,,,,,0,,,,,,,,41.29,,,,,,,,41.29,,,,,,9.01294,2343.71237,0,1016.00146,1034.9,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.28193,7.28193,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,203.946238,276.543197,245.958376,155.658960,215.548928,467.542960,905.666106,647.672856,, +D,DREGION,,3,"2023/12/14 23:15:00",1,VIC1,0,129.31184,0,129.31184,0,0,4588.2,68,5251.16,0,662.96,0,,,98.22,,,,,,,,79,,,,,,,,79,,,,,,,,145,,,,,,,,144,,,,,,,,113,,,,,,-9.24663,7499.16272,447,4589.8623,4658.8,,49,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,0.53,0.53,0,0.01,0.01,0,0.01,0.01,0,0.38,0.38,0,1,1,0,611.0001,616.0001,565.0001,72.9999,202,327,281,439.848533,, +D,DREGION,,3,"2023/12/14 23:20:00",1,NSW1,0,135.61888,0,135.61888,0,0,8423.44,-43,7894.67,0,-528.78,0,,,56,,,,,,,,68,,,,,,,,32.79,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-26.76917,11900.05447,206,8556.81055,8481.79,,40,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0,344,339,601,203.748999,380,464,406,426.187368,, +D,DREGION,,3,"2023/12/14 23:20:00",1,QLD1,0,148.38884,0,148.38884,0,0,7138.07,-33,6893.65,0,-244.42,0,,,0,,,,,,,,113.61,,,,,,,,85,,,,,,,,27,,,,,,,,220.33,,,,,,,,227,,,,,,-23.17364,9778.21969,125,7200.20752,7145.01,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0,337,446.333333,166,255,312,435,250,302,, +D,DREGION,,3,"2023/12/14 23:20:00",1,SA1,0,118.44,0,118.44,0,0,1238.29,-2,1056.03,0,-182.27,0,,,60.39,,,,,,,,64,,,,,,,,56,,,,,,,,164,,,,,,,,121.91,,,,,,,,137.24,,,,,,6.50946,2498.7479,362,1234.76123,1239.56,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0,305,313,303,110.851470,289,312,302,378.876387,, +D,DREGION,,3,"2023/12/14 23:20:00",1,TAS1,0,101.6006,0,101.6006,0,0,1029,0,1401.37,0,372.37,0,,,0,,,,,,,,16.08,,,,,,,,16.08,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,15.47619,2354.57331,0,1027.6228,1041.08,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,217.273969,343.615210,311.271345,276.205371,200.204659,516.253711,842.034780,624.445594,, +D,DREGION,,3,"2023/12/14 23:20:00",1,VIC1,0,112.25244,0,112.25244,0,0,4536.57,14,5265.02,0,728.45,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,119.94,,,,,,,,144,,,,,,,,113,,,,,,-13.9705,7512.0249,447,4608.58105,4603.3,,70,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1.46,1.46,0,615.0001,620.0001,569.0001,73.9999,390,632,525,571.070151,, +D,DREGION,,3,"2023/12/14 23:25:00",1,NSW1,0,123.05388,0,123.05388,0,0,8266.58,-61,7892.06,0,-374.51,0,,,54.48,,,,,,,,46,,,,,,,,43,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,-28.44736,11923.0825,206,8409.29004,8310.52,,81,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,344,339,601,206.170949,360,443,385,427.879242,, +D,DREGION,,3,"2023/12/14 23:25:00",1,QLD1,0,134.33747,0,134.33747,0,0,7081.07,-57,6844.74,10,-246.33,0,,,0,,,,,,,,149.48,,,,,,,,88.19,,,,,,,,26,,,,,,,,225.33,,,,,,,,216,,,,,,-31.87336,9750.66438,125,7176.19434,7097.82,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,326,435.333333,164,265.899990,312,435,250,295,, +D,DREGION,,3,"2023/12/14 23:25:00",1,SA1,0,110.16644,0,110.16644,0,0,1224.18,-3,1042.3,0,-181.89,0,,,61,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,117.45,,,,,,,,146.78,,,,,,-1.10934,2492.29681,362,1230.50488,1225.44,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,307,315,304,110.851470,291,314,304,401.123992,, +D,DREGION,,3,"2023/12/14 23:25:00",1,TAS1,0,98.12,0,98.12,0,0,1010.87,-2,1216.81,0,205.93,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,5.95238,2353.01974,0,1017.39844,1014.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.56,3.56,0,238.723328,483.970774,499.084470,459.844196,158.011933,462.947605,657.725176,441.333084,, +D,DREGION,,3,"2023/12/14 23:25:00",1,VIC1,0,104.41313,0,104.41313,0,0,4569.24,10,5267.73,0,698.5,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,117.79,,,,,,,,142,,,,,,,,113,,,,,,-14.3459,7505.73485,447,4634.51709,4615.52,,29,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,615.0001,616.0001,566.0001,68.9999,391,633,526,570.287925,, +D,DREGION,,3,"2023/12/14 23:30:00",1,NSW1,0,134.64506,0,134.64506,0,0,8342.79,-42,7870,0,-472.79,0,,,62,,,,,,,,40,,,,,,,,38,,,,,,,,94,,,,,,,,79,,,,,,,,88,,,,,,0,11914.3715,206,8428.66016,8400.88,,87,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0,344,339,601,215.322176,354,436,378,409.428149,, +D,DREGION,,3,"2023/12/14 23:30:00",1,QLD1,0,147.81771,0,147.81771,0,0,7031.13,-49,6756.35,10,-284.78,0,,,0,,,,,,,,130.93,,,,,,,,68.04,,,,,,,,27,,,,,,,,196.33,,,,,,,,230,,,,,,0,9655.33156,125,7094.42139,7049.21,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0,340,449.333333,166,276,287,400,215,295,, +D,DREGION,,3,"2023/12/14 23:30:00",1,SA1,0,118.44,0,118.44,0,0,1253.72,26,1052.17,0,-201.55,0,,,54,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,146.37,,,,,,,,134.71,,,,,,0,2480.47219,362,1229.1925,1255.34,,19,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0,307,315,304,94.220782,291,314,304,409.851470,, +D,DREGION,,3,"2023/12/14 23:30:00",1,TAS1,0,100.55427,0,100.55427,0,0,988.8,-5,1386.4,0,397.6,0,,,0,,,,,,,,39.8,,,,,,,,39.8,,,,,,,,28.21,,,,,,,,50,,,,,,,,50,,,,,,-3.57143,2338.4979,0,1000.24408,1002.6,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.17,0.17,0,3.5,3.5,0,217.168706,343.615210,311.271345,214.599621,200.091756,516.253711,843.044881,624.685337,, +D,DREGION,,3,"2023/12/14 23:30:00",1,VIC1,0,111.69217,0,111.69217,0,0,4574.73,-4,5283.4,0,708.68,0,,,124.98,,,,,,,,100,,,,,,,,100,,,,,,,,140.75,,,,,,,,144,,,,,,,,113,,,,,,0,7522.40235,447,4628.08545,4640.28,,14,,,,30,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0.17,0.17,0,1.5,1.5,0,609.0001,612.0001,561.0001,55.9999,213,211,221,407.906150,, +D,DREGION,,3,"2023/12/14 23:35:00",1,NSW1,0,161.01636,0,161.01636,0,0,8299.8,-23,7753.66,0,-546.14,0,,,18.96,,,,,,,,34,,,,,,,,0,,,,,,,,132.99,,,,,,,,82,,,,,,,,80,,,,,,-23.58815,11901.85434,206,8406.77441,8359.83,,40,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0,363,358,620,205.531163,381,464,406,335.591619,, +D,DREGION,,3,"2023/12/14 23:35:00",1,QLD1,0,176.78324,0,176.78324,0,0,6994.58,-50,6746.88,10,-257.7,0,,,42,,,,,,,,55.2,,,,,,,,42,,,,,,,,33,,,,,,,,202.33,,,,,,,,249,,,,,,-40.28371,9636.80135,125,7103.06885,7011.67,,45,,,,164,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0,332,440.333333,163,264.700010,312,435,250,295,, +D,DREGION,,3,"2023/12/14 23:35:00",1,SA1,0,143.59518,0,143.59518,0,0,1292.42,43,1032.17,0,-260.25,0,,,45,,,,,,,,63,,,,,,,,49,,,,,,,,155,,,,,,,,163,,,,,,,,152,,,,,,-1.50411,2470.57918,362,1253.21667,1295.35,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0,295.232570,305,294,6.851466,279,281,281,472.851470,, +D,DREGION,,3,"2023/12/14 23:35:00",1,TAS1,0,115.2,0,115.2,0,0,1004.39,-1,1475.86,0,471.46,0,,,7.32,,,,,,,,107.32,,,,,,,,107.32,,,,,,,,0,,,,,,,,10,,,,,,,,10,,,,,,3.57143,2334.14958,0,1012.06464,1023.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0,0,0,7.31632,7.31632,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,190.386575,255.130460,216.463255,90.848056,233.809010,610.282441,935.617046,652.641915,, +D,DREGION,,3,"2023/12/14 23:35:00",1,VIC1,0,132.72,0,132.72,0,0,4474.41,-8,5230.71,0,756.3,0,,,124,,,,,,,,114,,,,,,,,114,,,,,,,,148,,,,,,,,157.9,,,,,,,,124.23,,,,,,-16.27071,7545.71551,447,4565.39014,4548.57,,55,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.53,0.53,0,1.4504,1.4504,0,0,0,0,0.01,0.01,0,0,0,0,3.75,3.75,0,617.004370,619.004370,569.004370,49.004370,415,650,543,591.839280,, +D,DREGION,,3,"2023/12/14 23:40:00",1,NSW1,0,141.21574,0,141.21574,0,0,8172.79,-47,7761.22,0,-411.57,0,,,25.24,,,,,,,,41,,,,,,,,30.7,,,,,,,,99,,,,,,,,83,,,,,,,,82,,,,,,-29.09713,11909.21675,206,8297.38086,8206,,76,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0,365,359,621,211.912778,353,437,379,410.720136,, +D,DREGION,,3,"2023/12/14 23:40:00",1,QLD1,0,151.64673,0,151.64673,0,0,6867.9,-44,6714.02,10,-163.88,0,,,42,,,,,,,,155.28,,,,,,,,102,,,,,,,,29,,,,,,,,197.33,,,,,,,,242,,,,,,-27.51986,9612.80312,125,6955.84912,6881.68,,40,,,,149,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0,352,461.333333,173,284,312,435,250,295,, +D,DREGION,,3,"2023/12/14 23:40:00",1,SA1,0,137.79,0,137.79,0,0,1333.09,29,918.83,0,-414.26,0,,,47,,,,,,,,65,,,,,,,,58,,,,,,,,153,,,,,,,,133.37,,,,,,,,120.71,,,,,,-5.94755,2459.18039,362,1314.90759,1341.15,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0,304,314,303,92.349350,281,283,283,416.502120,, +D,DREGION,,3,"2023/12/14 23:40:00",1,TAS1,0,112.38591,0,112.38591,0,0,1045.82,4,1371.98,0,326.17,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,8.33333,2323.08485,0,1047.31042,1055.02,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,8.11,8.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.5,3.5,0,217.273969,338.016149,309.271345,275.042105,200.204659,516.253711,844.057507,626.445594,, +D,DREGION,,3,"2023/12/14 23:40:00",1,VIC1,0,122.39435,0,122.39435,0,0,4454.41,-28,5228.64,0,774.23,0,,,125,,,,,,,,115,,,,,,,,115,,,,,,,,138.66,,,,,,,,154,,,,,,,,123,,,,,,-12.94601,7585.64423,447,4560.09473,4510.85,,34,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.41,0.41,0,0.41,0.41,0,0.01,0.01,0,0.01,0.01,0,0,0,0,1,1,0,646,651,600,86,416,651,544,560.507651,, +D,DREGION,,3,"2023/12/14 23:45:00",1,NSW1,0,122.74686,0,122.74686,0,0,8116.34,-52,7766.53,0,-349.81,0,,,34.93,,,,,,,,74,,,,,,,,70,,,,,,,,109,,,,,,,,93,,,,,,,,91,,,,,,-23.85362,11914.52859,206,8231.49219,8153.95,,63,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0,364,369,631,230.385484,377,461,403,424.869242,, +D,DREGION,,3,"2023/12/14 23:45:00",1,QLD1,0,133.43318,0,133.43318,0,0,6902.46,-34,6679.24,10,-233.22,0,,,45,,,,,,,,135.19,,,,,,,,76,,,,,,,,25.31,,,,,,,,217.33,,,,,,,,232,,,,,,-14.53103,9597.31268,125,6966.15479,6918.29,,43,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0,342,451.333333,188,292,312,435,250,295,, +D,DREGION,,3,"2023/12/14 23:45:00",1,SA1,0,118.81324,0,118.81324,0,0,1312.06,3,899.11,0,-412.95,0,,,47,,,,,,,,65,,,,,,,,58,,,,,,,,150,,,,,,,,112.24,,,,,,,,130.57,,,,,,-12.00734,2433.10708,362,1328.20691,1320.07,,20,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0,304,314,303,107,281,283,283,404.851470,, +D,DREGION,,3,"2023/12/14 23:45:00",1,TAS1,0,98.15,0,98.15,0,0,1024.59,-3,1280.13,0,255.54,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-0.18832,2316.14003,0,1035.90295,1030.11,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,3.53,3.53,0,218.685734,411.250774,381.218713,344.731686,153.181979,474.753711,759.002461,541.739594,, +D,DREGION,,3,"2023/12/14 23:45:00",1,VIC1,0,105.53257,0,105.53257,0,0,4437.98,-7,5291.31,0,853.33,0,,,112,,,,,,,,102,,,,,,,,102,,,,,,,,135,,,,,,,,144,,,,,,,,113,,,,,,-9.66529,7666.02551,447,4513.44629,4493.9,,34,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,2,2,0,624,629,578,80,316,563,461,505.288025,, +D,DREGION,,3,"2023/12/14 23:50:00",1,NSW1,0,121.43468,0,121.43468,0,0,8122.06,-27,7781.76,0,-340.31,0,,,43.04,,,,,,,,58,,,,,,,,54,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-24.09818,11934.75741,206,8201.58789,8154.46,,76,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,359,365,627,229.619480,361,445,387,420.787860,, +D,DREGION,,3,"2023/12/14 23:50:00",1,QLD1,0,131.05313,0,131.05313,0,0,6847.04,-24,6658.04,10,-198.99,0,,,45,,,,,,,,163.33,,,,,,,,105.05,,,,,,,,28,,,,,,,,199.08,,,,,,,,232,,,,,,-9.06247,9606.32333,125,6892.18604,6861.7,,60,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,342,451.333333,192,309,312,435,250,297.858057,, +D,DREGION,,3,"2023/12/14 23:50:00",1,SA1,0,118.44,0,118.44,0,0,1292.44,1,882.97,0,-409.47,0,,,50,,,,,,,,64,,,,,,,,56,,,,,,,,156.79,,,,,,,,135,,,,,,,,135.08,,,,,,-17.10442,2418.37526,362,1316.63354,1300.31,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,303.404420,313,302,100.617090,279,282,282,401.031248,, +D,DREGION,,3,"2023/12/14 23:50:00",1,TAS1,0,98.12,0,98.12,0,0,1021,-3,1259.77,0,238.77,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-7.4982,2343.50142,0,1036.14966,1025.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,3.56,3.56,0,226.119933,446.529434,446.504830,407.264556,158.011933,492.900053,710.672506,493.912724,, +D,DREGION,,3,"2023/12/14 23:50:00",1,VIC1,0,105.20545,0,105.20545,0,0,4500.55,-36,5311.58,0,811.02,0,,,101,,,,,,,,91,,,,,,,,91,,,,,,,,130,,,,,,,,143,,,,,,,,113,,,,,,-6.20144,7683.64998,447,4593.27539,4551.88,,14,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0.01,0.01,0,1,1,0,632,633,578,74.093754,251,366,310,440.224609,, +D,DREGION,,3,"2023/12/14 23:55:00",1,NSW1,0,115.02986,0,115.02986,0,0,8073.68,-32,7793.21,0,-280.47,0,,,29.91,,,,,,,,82,,,,,,,,56.61,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-13.60847,11941.21013,206,8148.15625,8099.18,,90,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0,359,365,627,215.977937,359,443,385,425.920267,, +D,DREGION,,3,"2023/12/14 23:55:00",1,QLD1,0,123.23319,0,123.23319,0,0,6817,-33,6650.79,10,-176.21,0,,,45,,,,,,,,122.59,,,,,,,,85,,,,,,,,27,,,,,,,,190.66,,,,,,,,232,,,,,,-3.66693,9598.46266,125,6867.7041,6830.92,,41,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0,342,451.333333,196,315,312,435,250,315,, +D,DREGION,,3,"2023/12/14 23:55:00",1,SA1,0,116.29845,0,116.29845,0,0,1302.22,-3,830.45,0,-471.78,0,,,48,,,,,,,,66,,,,,,,,58,,,,,,,,165,,,,,,,,142,,,,,,,,134.66,,,,,,-15.45761,2413.44613,362,1330.12769,1312.85,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0,307,315,304,110.851470,281,284,284,362.160003,, +D,DREGION,,3,"2023/12/14 23:55:00",1,TAS1,0,96.18,0,96.18,0,0,1014.02,-3,1165.57,0,151.55,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,50,,,,,,,,50,,,,,,-12.42713,2356.85715,0,1032.99243,1015.77,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,5.5,5.5,0,238.723328,500.086665,554.163870,514.923596,147.966478,428.802492,602.210281,386.253684,, +D,DREGION,,3,"2023/12/14 23:55:00",1,VIC1,0,101.28321,0,101.28321,0,0,4455.49,-17,5322.57,0,867.08,0,,,117,,,,,,,,107,,,,,,,,107,,,,,,,,121.98,,,,,,,,144,,,,,,,,113,,,,,,0.34456,7698.48465,447,4524.47021,4503.87,,19,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.01,0.01,0,636.582282,642.477853,586,77.093752,416,653,541,551.788024,, +D,DREGION,,3,"2023/12/15 00:00:00",1,NSW1,0,111.67969,0,111.67969,0,0,8041.32,-32,7796.47,0,-244.86,0,,,95,,,,,,,,109,,,,,,,,105,,,,,,,,106,,,,,,,,91,,,,,,,,88,,,,,,-6.42002,11944.46683,206,8104.29199,8062.73,,30,,,,6,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0,359,365,627,222.917830,455,569,511,504.095261,, +D,DREGION,,3,"2023/12/15 00:00:00",1,QLD1,0,119.55,0,119.55,0,0,6797.45,-46,6649.3,10,-158.15,0,,,45,,,,,,,,157.81,,,,,,,,98.23,,,,,,,,27,,,,,,,,186.33,,,,,,,,232,,,,,,1.30133,9607.19444,125,6854.82764,6810.83,,40,,,,159,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0,342,451.333333,200,318,312,435,250,295,, +D,DREGION,,3,"2023/12/15 00:00:00",1,SA1,0,113.77231,0,113.77231,0,0,1296.08,-1,824.92,0,-471.16,0,,,61,,,,,,,,66,,,,,,,,58,,,,,,,,157.33,,,,,,,,131.63,,,,,,,,119.97,,,,,,-18.90088,2407.92278,362,1327.07129,1306.69,,10,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0,311,319,308,122.517620,281,284,284,395.044097,, +D,DREGION,,3,"2023/12/15 00:00:00",1,TAS1,0,96.18,0,96.18,0,0,1006.06,-2,1137.3,0,131.25,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,50,,,,,,,,63.49,,,,,,,,63.49,,,,,,-17.35607,2346.42349,0,1026.01453,1007.3,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,7.11,7.11,0,0.01,0.01,0,0.01,0.01,0,0,0,0,5.5,5.5,0,239.249644,512.854749,570.992180,487.835655,144.123392,422.072163,613.515241,368.425374,, +D,DREGION,,3,"2023/12/15 00:00:00",1,VIC1,0,99.074,0,99.074,0,0,4389.45,-48,5213.12,0,823.66,0,,,56,,,,,,,,46,,,,,,,,46,,,,,,,,128,,,,,,,,144,,,,,,,,113,,,,,,4.17163,7698.86735,447,4480.40625,4433.55,,80,,,,5,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,0.77,0.77,0,0.01,0.01,0,0.01,0.01,0,0,0,0,0.72,0.72,0,633.549872,638.937340,585,79.000001,389,503,447,501.25,, +D,DREGION,,3,"2023/12/15 00:05:00",1,NSW1,0,116.77029,0,116.77029,0,0,8020.07,-32,7788.1,0,-231.98,0,,,68.89,,,,,,,,65,,,,,,,,61,,,,,,,,121,,,,,,,,106,,,,,,,,103,,,,,,5.00914,11959.39576,181,8066.92334,8044.91,,106.2,,,,32.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,374,380,642,198.8172,342,426,368,318.568616,, +D,DREGION,,3,"2023/12/15 00:05:00",1,QLD1,0,125.74745,0,125.74745,0,0,6802.74,-43,6621.2,16,-197.54,0,,,29,,,,,,,,43.51,,,,,,,,29,,,,,,,,25,,,,,,,,101.97,,,,,,,,141,,,,,,5.20593,9509.77693,125,6852.94482,6823.16,,0,,,,102.98,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,351,460.333333,204,219,312,435,250,274,, +D,DREGION,,3,"2023/12/15 00:05:00",1,SA1,0,118.44,0,118.44,0,0,1289.29,6,820.78,0,-468.52,0,,,63,,,,,,,,98,,,,,,,,57,,,,,,,,84.77,,,,,,,,91,,,,,,,,146.7,,,,,,-15.82512,2410.08863,362,1309.67822,1299.78,,19.8,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,308,316,305,126.851470,279,282,282,397.786720,, +D,DREGION,,3,"2023/12/15 00:05:00",1,TAS1,0,98.11122,0,98.11122,0,0,998.56,2,1168.36,0,169.8,0,,,0,,,,,,,,61.48,,,,,,,,43.21,,,,,,,,153,,,,,,,,205.9,,,,,,,,145.17,,,,,,-14.96299,2385.58915,0,1012.62396,1000.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.58873,3.58873,0,227.863517,438.002024,470.942155,216.992565,145.583853,386.879882,575.285840,346.442348,, +D,DREGION,,3,"2023/12/15 00:05:00",1,VIC1,0,103.58847,0,103.58847,0,0,4418.1,-2,5235.1,0,817,0,,,81,,,,,,,,112,,,,,,,,117,,,,,,,,87,,,,,,,,114,,,,,,,,83,,,,,,7.94803,7648.10133,392,4454.5708,4464.87,,34,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,20.68,20.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,582,587,535,67,288,406,355,439.162109,, +D,DREGION,,3,"2023/12/15 00:10:00",1,NSW1,0,117.92275,0,117.92275,0,0,8028.33,-40,7824.9,0,-203.43,0,,,65.82,,,,,,,,126,,,,,,,,92.64,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,21.08255,11950.73259,181,8065.1665,8056.83,,87,,,,32.02,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,375,381,643,199.068976,413,526,468,438.682424,, +D,DREGION,,3,"2023/12/15 00:10:00",1,QLD1,0,127.66465,0,127.66465,0,0,6717.97,-36,6470.41,0,-247.56,0,,,29,,,,,,,,29,,,,,,,,29,,,,,,,,25,,,,,,,,108,,,,,,,,141,,,,,,-10.67269,9255.73335,125,6782.67627,6723.81,,0,,,,69,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,347,455.333333,201,215,312,435,250,267,, +D,DREGION,,3,"2023/12/15 00:10:00",1,SA1,0,119.28023,0,119.28023,0,0,1311.48,6,835.27,0,-476.21,0,,,61,,,,,,,,63,,,,,,,,59,,,,,,,,84.24,,,,,,,,88,,,,,,,,135.51,,,,,,-11.40018,2404.26506,362,1329.31531,1322.33,,29,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,308,313,302,105.552337,281,280,280,404.851470,, +D,DREGION,,3,"2023/12/15 00:10:00",1,TAS1,0,98.12,0,98.12,0,0,992.75,-2,1174.77,0,182.02,0,,,0,,,,,,,,20.22,,,,,,,,0,,,,,,,,153,,,,,,,,204.64,,,,,,,,154.14,,,,,,-18.73131,2342.96492,0,1013.97394,995.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,3.57,3.57,0,222.831166,432.227080,441.965036,176.012383,154.492944,456.400053,665.199011,495.348314,, +D,DREGION,,3,"2023/12/15 00:10:00",1,VIC1,0,103.86953,0,103.86953,0,0,4378.66,-30,5221.1,0,842.44,0,,,87,,,,,,,,143,,,,,,,,127,,,,,,,,85,,,,,,,,110,,,,,,,,83,,,,,,8.00202,7632.09772,392,4444.54395,4428.08,,44,,,,53.98,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,11.5,11.5,0,0.14,0.14,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,572,571,523,76,378,613,501,506.322326,, +D,DREGION,,3,"2023/12/15 00:15:00",1,NSW1,0,110.69162,0,110.69162,0,0,7913.88,-42,7868.35,0,-45.53,0,,,60.04,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,28.12049,11956.61452,181,7952.7207,7932.68,,126,,,,26.01,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0,375,381,643,192.809587,343,427,369,417.989582,, +D,DREGION,,3,"2023/12/15 00:15:00",1,QLD1,0,119.55,0,119.55,0,0,6625.26,-33,6383.04,0,-242.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,122,,,,,,,,141,,,,,,-23.68052,9234.65353,125,6688.07422,6630.68,,0,,,,57.99,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0,352,461.333333,207,209,252,375,250,246.433668,, +D,DREGION,,3,"2023/12/15 00:15:00",1,SA1,0,117.93465,0,117.93465,0,0,1322.8,5,787.23,0,-535.56,0,,,51,,,,,,,,97.2,,,,,,,,59,,,,,,,,84.78,,,,,,,,89,,,,,,,,137.82,,,,,,-1.25813,2406.23495,362,1331.06433,1336.69,,10,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0,308,314,303,126.851470,268,275,275,362.057403,, +D,DREGION,,3,"2023/12/15 00:15:00",1,TAS1,0,98.12,0,98.12,0,0,1010,-3,1090.35,0,80.35,0,,,0,,,,,,,,30,,,,,,,,0,,,,,,,,153,,,,,,,,194.48,,,,,,,,154.12,,,,,,-5.83295,2345.0387,0,1019.98212,1010.35,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.57,3.57,0,236.594366,470.107998,528.456746,262.504090,150.174179,398.809720,578.102464,408.856604,, +D,DREGION,,3,"2023/12/15 00:15:00",1,VIC1,0,100.70627,0,100.70627,0,0,4373,-25,5197.24,0,824.24,0,,,87,,,,,,,,143,,,,,,,,141.82,,,,,,,,86,,,,,,,,107.46,,,,,,,,83,,,,,,2.67436,7618.24412,389,4440.78516,4415.82,,44,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.73,7.73,0,0.2,0.2,0,0.39,0.39,0,0.01,0.01,0,1.2198,1.2198,0,571,572,522,78,378,613,501,501.755859,, +D,DREGION,,3,"2023/12/15 00:20:00",1,NSW1,0,111.77349,0,111.77349,0,0,7894.57,-42,7800.17,3,-97.39,0,,,68.8,,,,,,,,144.34,,,,,,,,107.42,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,30.92782,11956.59474,181,7934.62988,7921.59,,63.2,,,,32.01,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0,375,381,643,201.641727,444,558,500,360.865080,, +D,DREGION,,3,"2023/12/15 00:20:00",1,QLD1,0,121.50733,0,121.50733,0,0,6656.32,-27,6391.09,0,-265.23,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,121,,,,,,,,141,,,,,,-17.7476,9214.01343,125,6709.56494,6662.49,,0,,,,79.99,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0,352,461.333333,207,203.500031,312,435,250,247,, +D,DREGION,,3,"2023/12/15 00:20:00",1,SA1,0,116.55246,0,116.55246,0,0,1309.97,4,787.55,0,-522.43,0,,,43,,,,,,,,62,,,,,,,,56,,,,,,,,83.55,,,,,,,,85,,,,,,,,135.94,,,,,,-6.20371,2406.5472,362,1324.41064,1323.19,,25,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0,306,310,299,126.851470,266,271,271,377,, +D,DREGION,,3,"2023/12/15 00:20:00",1,TAS1,0,98.12,0,98.12,0,0,996.17,-3,1096.62,0,100.45,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,153,,,,,,,,196.08,,,,,,,,154.14,,,,,,-9.43424,2358.13526,0,1008.76813,996.82,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.03,0.03,0,0.38,0.38,0,0,0,0,3.57,3.57,0,236.594366,472.039061,535.282866,269.330213,144.899449,392.816054,571.228609,402.030484,, +D,DREGION,,3,"2023/12/15 00:20:00",1,VIC1,0,100,0,100,0,0,4268.75,-23,5143.96,0,875.22,0,,,86,,,,,,,,131,,,,,,,,106,,,,,,,,85,,,,,,,,109,,,,,,,,83,,,,,,0.42719,7607.23176,389,4337.41406,4315.3,,72,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.03,0.03,0,0.38,0.38,0,0.01,0.01,0,2.1839,2.1839,0,578,574,528,72,377,612,500,501.692383,, +D,DREGION,,3,"2023/12/15 00:25:00",1,NSW1,0,111.71086,0,111.71086,0,0,7829.82,-43,7754.1,0,-75.72,0,,,53,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,29.79887,11978.13998,181,7870.64063,7853.78,,102.86,,,,32,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0,375,381,643,196.976927,344,428,370,319.932811,, +D,DREGION,,3,"2023/12/15 00:25:00",1,QLD1,0,121.3557,0,121.3557,0,0,6660.36,-23,6382.99,0,-277.37,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28.24,,,,,,,,120,,,,,,,,141,,,,,,-10.56678,9205.33289,125,6700.70361,6666.85,,0,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0,352,461.333333,207,201,312,435,250,247,, +D,DREGION,,3,"2023/12/15 00:25:00",1,SA1,0,116.55726,0,116.55726,0,0,1315.52,2,781.51,0,-534.02,0,,,58.15,,,,,,,,86.89,,,,,,,,59,,,,,,,,79,,,,,,,,89,,,,,,,,135.99,,,,,,-5.91307,2399.50761,362,1334.1687,1329.36,,10,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0,307,314,303,121.997130,268,276,276,377,, +D,DREGION,,3,"2023/12/15 00:25:00",1,TAS1,0,96.68948,0,96.68948,0,0,1000.78,-2,1092.42,0,91.64,0,,,0,,,,,,,,41.13,,,,,,,,5.91,,,,,,,,156,,,,,,,,192.12,,,,,,,,157.13,,,,,,-6.39286,2354.52307,0,1009.25317,1001.29,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.38,0.38,0,0,0,0,5.00052,5.00052,0,239.594366,473.107998,538.867756,269.9151,144.447489,392.302492,570.639629,401.445594,, +D,DREGION,,3,"2023/12/15 00:25:00",1,VIC1,0,100,0,100,0,0,4222.09,-26,5109.33,0,887.24,0,,,87,,,,,,,,143,,,,,,,,142,,,,,,,,86,,,,,,,,113,,,,,,,,83,,,,,,-2.19218,7617.94463,389,4296.84473,4269.07,,56,,,,23,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,16.73,16.73,0,0.38,0.38,0,0.39,0.39,0,0,0,0,0.72,0.72,0,606,607,557,63,378,613,501,501.535216,, +D,DREGION,,3,"2023/12/15 00:30:00",1,NSW1,0,110.14141,0,110.14141,0,0,7765.38,-44,7745.29,0,-20.08,0,,,89,,,,,,,,137.71,,,,,,,,63,,,,,,,,168.59,,,,,,,,211,,,,,,,,204.66,,,,,,36.00293,11982.90744,181,7794.01953,7786.92,,94,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0,375,381,643,207.762750,345,429,371,366.576516,, +D,DREGION,,3,"2023/12/15 00:30:00",1,QLD1,0,119.55,0,119.55,0,0,6660.21,-20,6396.42,20,-283.79,0,,,45,,,,,,,,64,,,,,,,,64.82,,,,,,,,30,,,,,,,,144,,,,,,,,163,,,,,,-4.07781,9484.68065,125,6690.46338,6686.8,,0,,,,124,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0,347,455.333333,201,221,252,375,250,210,, +D,DREGION,,3,"2023/12/15 00:30:00",1,SA1,0,117.69915,0,117.69915,0,0,1320.71,-1,770.84,0,-549.87,0,,,55.63,,,,,,,,114,,,,,,,,119,,,,,,,,162,,,,,,,,136,,,,,,,,163,,,,,,-2.25794,2388.84354,362,1338.68591,1335.42,,21,,,,27,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0,307,314,303,108.681548,268,276,276,377,, +D,DREGION,,3,"2023/12/15 00:30:00",1,TAS1,0,96.18,0,96.18,0,0,1004.56,-3,1096.07,0,91.5,0,,,17.71,,,,,,,,117.71,,,,,,,,117.71,,,,,,,,42.75,,,,,,,,142.74,,,,,,,,142.74,,,,,,-5.24323,2364.85745,0,1012.87341,1005.07,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,1.75,1.75,0,1.75,1.75,0,0.38,0.38,0,5.5,5.5,0,239.489103,495.432316,546.357206,264.326114,154.380040,403.717126,575.660386,326.952898,, +D,DREGION,,3,"2023/12/15 00:30:00",1,VIC1,0,100,0,100,0,0,4230.69,-25,5082.05,0,851.36,0,,,56,,,,,,,,70,,,,,,,,67,,,,,,,,111,,,,,,,,130.66,,,,,,,,91,,,,,,-5.18896,7630.02048,389,4306.39551,4276.47,,95,,,,28,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.72,0.72,0,0.53,0.53,0,22.26136,22.26136,0,0.39,0.39,0,0.45,0.45,0,0.39,0.39,0,0.71,0.71,0,607,611,559,49,321.9999,560.9999,453.9999,486.732361,, +D,DREGION,,3,"2023/12/15 00:35:00",1,NSW1,0,108.89663,0,108.89663,0,0,7751.07,-42,7847.71,0,96.64,0,,,85,,,,,,,,159,,,,,,,,132.5,,,,,,,,121,,,,,,,,131.39,,,,,,,,103.39,,,,,,29.76312,11982.06546,181,7776.6377,7771.28,,91,,,,80.92,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0,374,380,642,116.650118,445,559,501,469.465501,, +D,DREGION,,3,"2023/12/15 00:35:00",1,QLD1,0,119.55,0,119.55,0,0,6572.88,-19,6269.77,20,-323.12,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,146,,,,,,,,168,,,,,,0.83191,9355.83985,125,6614.45313,6600.67,,0,,,,44.08,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0,322,431.333333,207,212,289.790940,412.790940,250,186.759198,, +D,DREGION,,3,"2023/12/15 00:35:00",1,SA1,0,117.59642,0,117.59642,0,0,1318.05,-3,764.62,0,-553.43,0,,,58,,,,,,,,64,,,,,,,,57,,,,,,,,130.13,,,,,,,,133,,,,,,,,161,,,,,,-3.54895,2382.62441,362,1339.58862,1332.96,,10,,,,12,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0,305,311,299,106.668242,266,273,273,377,, +D,DREGION,,3,"2023/12/15 00:35:00",1,TAS1,0,98.12,0,98.12,0,0,1017.29,-3,1117.94,0,100.65,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,106,,,,,,,,94,,,,,,,,94,,,,,,1.46712,2369.56137,0,1018.89966,1017.94,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0.14,0.14,0,0.38,0.38,0,0,0,0,2.56,2.56,0,234.405703,446.987632,447.539369,230.876352,145.604410,427.665476,598.224102,432.020734,, +D,DREGION,,3,"2023/12/15 00:35:00",1,VIC1,0,99.91625,0,99.91625,0,0,4261.48,-23,5026.84,0,765.35,0,,,86,,,,,,,,117.67,,,,,,,,76,,,,,,,,84,,,,,,,,115,,,,,,,,93,,,,,,-8.13685,7617.83548,389,4335.04736,4304.03,,59,,,,33,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,11.68,11.68,0,0.14,0.14,0,0.38,0.38,0,0,0,0,1,1,0,594,585,542,61,377,612,500,503.817382,, +D,DREGION,,3,"2023/12/15 00:40:00",1,NSW1,0,109.74113,0,109.74113,0,0,7778.33,-37,7828.24,0,49.91,0,,,79,,,,,,,,153,,,,,,,,139,,,,,,,,122,,,,,,,,107,,,,,,,,104,,,,,,33.26197,11954.24351,181,7800.83838,7800.59,,110,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0,375,381,643,194.761178,439,553,495,450.135053,, +D,DREGION,,3,"2023/12/15 00:40:00",1,QLD1,0,120.51405,0,120.51405,0,0,6561.56,-20,6257.39,20,-324.17,0,,,39,,,,,,,,39,,,,,,,,39,,,,,,,,25,,,,,,,,140,,,,,,,,164,,,,,,-9.3305,9392.28502,125,6617.48682,6589.43,,16,,,,62,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0,329,437.333333,203,227.400055,304,427,242,210,, +D,DREGION,,3,"2023/12/15 00:40:00",1,SA1,0,118.26803,0,118.26803,0,0,1340.59,0,766.18,0,-574.41,0,,,60,,,,,,,,70.02,,,,,,,,58,,,,,,,,131.87,,,,,,,,170.09,,,,,,,,156.09,,,,,,-8.70742,2384.17585,362,1365.04077,1356.73,,20,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0,310,317,305,117.601334,267,275,275,377,, +D,DREGION,,3,"2023/12/15 00:40:00",1,TAS1,0,98.12,0,98.12,0,0,1030.65,-2,1131.3,0,100.65,0,,,0,,,,,,,,50,,,,,,,,12.45,,,,,,,,106,,,,,,,,94,,,,,,,,94,,,,,,8.84563,2379.84702,0,1024.15344,1031.3,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.56,2.56,0,232.988808,458.091498,444.563889,223.900872,145.604410,427.665476,601.220389,434.996214,, +D,DREGION,,3,"2023/12/15 00:40:00",1,VIC1,0,100,0,100,0,0,4234.72,-19,5076.99,0,842.27,0,,,72,,,,,,,,73,,,,,,,,62,,,,,,,,85,,,,,,,,109,,,,,,,,102,,,,,,-11.15253,7609.31381,389,4308.25684,4282.05,,14,,,,16,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0,0,0,4.53,4.53,0,609,605,559,71,189,307,256,371.848633,, +D,DREGION,,3,"2023/12/15 00:45:00",1,NSW1,0,85.99,0,85.99,0,0,7642.49,-39,7793.69,0,151.19,0,,,65.26,,,,,,,,111.32,,,,,,,,70.66,,,,,,,,96,,,,,,,,81,,,,,,,,78,,,,,,0,11958.55052,181,7706.95898,7660.81,,138,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0,349.000640,355.000640,617.000640,210.021491,372,456,398,407.594003,, +D,DREGION,,3,"2023/12/15 00:45:00",1,QLD1,0,94.31385,0,94.31385,0,0,6529.07,-20,6219.2,20,-329.86,0,,,45,,,,,,,,64,,,,,,,,72,,,,,,,,25,,,,,,,,116,,,,,,,,141,,,,,,-15.83554,9549.56846,125,6593.91846,6556.97,,0,,,,58,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0,332,441.333333,207,264,312,435,250,196.300018,, +D,DREGION,,3,"2023/12/15 00:45:00",1,SA1,0,95.661,0,95.661,0,0,1363.71,1,743.82,4,-623.89,0,,,48,,,,,,,,139,,,,,,,,117,,,,,,,,125.55,,,,,,,,125.35,,,,,,,,128.35,,,,,,-9.89034,2381.8196,362,1392.55396,1386.89,,35,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0,310,317,305,130.851470,243.999360,251.999360,251.999360,353,, +D,DREGION,,3,"2023/12/15 00:45:00",1,TAS1,0,115.12,0,115.12,0,0,1033.12,-1,1033.12,0,0,0,,,0,,,,,,,,0,,,,,,,,0,,,,,,,,106,,,,,,,,191.26,,,,,,,,191.26,,,,,,9.41572,2369.47199,0,1024.84546,1033.12,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.39,0.39,0,8.11,8.11,0,0,0,0,0,0,0,0,0,0,2.56,2.56,0,246.489103,494.579644,532.366779,178.583974,148.125915,394.557511,512.567285,347.193324,, +D,DREGION,,3,"2023/12/15 00:45:00",1,VIC1,0,79.70916,0,79.70916,0,0,4133.41,-16,5028.01,0,894.61,0,,,87,,,,,,,,122,,,,,,,,102,,,,,,,,118,,,,,,,,108,,,,,,,,83,,,,,,-13.01274,7619.01446,389,4214.04395,4180.06,,87,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.5,0.5,0,0.45,0.45,0,0.01,0.01,0,3.7,3.7,0,599,593,548,58,378,613,501,502.6875,, +D,DREGION,,3,"2023/12/15 00:50:00",1,NSW1,0,100,0,100,0,0,7626.19,-40,7837.96,0,211.77,0,,,114.54,,,,,,,,159,,,,,,,,145,,,,,,,,147.87,,,,,,,,170.89,,,,,,,,182.89,,,,,,3.45252,11953.96526,181,7680.43359,7641.24,,92,,,,77,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0,349.000640,355.000640,617.000640,196.963532,445,559,501,532.709119,, +D,DREGION,,3,"2023/12/15 00:50:00",1,QLD1,0,108.94679,0,108.94679,0,0,6526.42,-20,6229.14,20,-317.28,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,143,,,,,,,,168,,,,,,-8.44384,9702.62481,125,6582.59033,6553.81,,0,,,,84.03,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0,332,441.333333,207,221.0250,312,435,250,230,, +D,DREGION,,3,"2023/12/15 00:50:00",1,SA1,0,111.28947,0,111.28947,0,0,1358.19,1,794.38,0,-563.81,0,,,60,,,,,,,,131.56,,,,,,,,91.6,,,,,,,,163,,,,,,,,172,,,,,,,,163,,,,,,-10.75323,2384.61487,362,1389.48413,1373.69,,10,,,,18.98,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0,307,312,300,94.588378,266,271,271,377,, +D,DREGION,,3,"2023/12/15 00:50:00",1,TAS1,0,95.1112,0,95.1112,0,0,1018.58,-1,909.49,0,-109.09,0,,,17.69,,,,,,,,117.68,,,,,,,,117.68,,,,,,,,23.29,,,,,,,,123.28,,,,,,,,123.28,,,,,,1.37855,2340.58662,0,1018.19946,1020.29,,50,,,,50,,,,,,,,,,,,,,,,,,,1.23,1.23,0,1.36,1.36,0,0.38,0.38,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,4.5,4.5,0,246.489103,523.966152,627.114509,316.645069,126.795934,322.423451,421.169386,49.999989,, +D,DREGION,,3,"2023/12/15 00:50:00",1,VIC1,0,94.19276,0,94.19276,0,0,4173.26,-19,5025.46,0,852.21,0,,,25,,,,,,,,50,,,,,,,,30,,,,,,,,126,,,,,,,,135,,,,,,,,107,,,,,,-9.80584,7616.46339,389,4245.62207,4207.4,,108,,,,40,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,32.99,32.99,0,0.39,0.39,0,0.39,0.39,0,0.01,0.01,0,0.72,0.72,0,583,582,534,67,304,421,370,436.378968,, +D,DREGION,,3,"2023/12/15 00:55:00",1,NSW1,0,100,0,100,0,0,7545.5,-42,7871.12,36,289.62,0,,,89,,,,,,,,67,,,,,,,,65.57,,,,,,,,149.57,,,,,,,,168.73,,,,,,,,175.73,,,,,,-0.47145,11965.10305,181,7602.34814,7599.53,,85,,,,72,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,349.000640,355.000640,617.000640,221.744529,344,428,370,430.574414,, +D,DREGION,,3,"2023/12/15 00:55:00",1,QLD1,0,110.32534,0,110.32534,0,0,6575.42,-11,6228.16,26,-373.26,0,,,45,,,,,,,,46,,,,,,,,45,,,,,,,,33,,,,,,,,142,,,,,,,,168,,,,,,-13.74127,9718.66267,125,6628.21533,6610.91,,0,,,,71.41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,332,441.333333,207,221,287,400,215,203.812196,, +D,DREGION,,3,"2023/12/15 00:55:00",1,SA1,0,110.81874,0,110.81874,0,0,1350.32,-1,803.9,6,-552.42,0,,,66,,,,,,,,125,,,,,,,,98,,,,,,,,166,,,,,,,,176,,,,,,,,165,,,,,,-3.01164,2377.90324,362,1370.25708,1371.18,,21,,,,15,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,309,316,303,116.851470,267,275,275,371,, +D,DREGION,,3,"2023/12/15 00:55:00",1,TAS1,0,73.57066,0,73.57066,0,0,1004.16,-1,926.56,0,-77.59,0,,,36.9,,,,,,,,131.9,,,,,,,,103.23,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-6.65861,2357.76101,0,1011.8139,1004.16,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,4.5,4.5,0,246.489103,523.966152,627.114509,466.311711,126.795934,322.423451,421.169386,153.944914,, +D,DREGION,,3,"2023/12/15 00:55:00",1,VIC1,0,94.15132,0,94.15132,0,0,4173.78,-14,4968.56,5,789.78,0,,,10,,,,,,,,18.16,,,,,,,,0,,,,,,,,124,,,,,,,,131,,,,,,,,109,,,,,,-10.77155,7559.56212,389,4230.86865,4212.54,,54,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,20.68,20.68,0,0.5,0.5,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,586,576,533,60,143.999360,143.999360,153.999360,303,, +D,DREGION,,3,"2023/12/15 01:00:00",1,NSW1,0,90.16381,0,90.16381,0,0,7493.1,-42,7847.58,10,344.48,0,,,89,,,,,,,,80.07,,,,,,,,63.56,,,,,,,,150.28,,,,,,,,174.52,,,,,,,,182.52,,,,,,-0.42113,11958.58185,181,7580.80762,7516.44,,111,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0,349.000640,355.000640,617.000640,199.556264,344,428,370,421.048169,, +D,DREGION,,3,"2023/12/15 01:00:00",1,QLD1,0,98.8153,0,98.8153,0,0,6557.13,-13,6221.2,0,-335.93,0,,,45,,,,,,,,53,,,,,,,,45,,,,,,,,33,,,,,,,,135,,,,,,,,163,,,,,,-14.957,9725.09843,125,6619.14844,6565.14,,0,,,,74,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0,327,435.333333,201,247,312,435,250,247,, +D,DREGION,,3,"2023/12/15 01:00:00",1,SA1,0,101.44,0,101.44,0,0,1334,-2,776.56,0,-557.44,0,,,66,,,,,,,,113,,,,,,,,98,,,,,,,,166,,,,,,,,176,,,,,,,,165,,,,,,-0.543,2366.15792,362,1354.08813,1349.14,,10,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0,309,316,303,110.851470,251.401050,259.401050,259.401050,361.401050,, +D,DREGION,,3,"2023/12/15 01:00:00",1,TAS1,0,73.81376,0,73.81376,0,0,988.99,-1,926.83,0,-62.16,0,,,21.73,,,,,,,,131.9,,,,,,,,105.35,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-6.79286,2357.93454,0,996.78754,988.99,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.45,0.45,0,0.38,0.38,0,4.5,4.5,0,246.489103,523.966152,627.114509,466.311711,126.795934,322.423451,421.169386,145.530395,, +D,DREGION,,3,"2023/12/15 01:00:00",1,VIC1,0,86.18164,0,86.18164,0,0,4199.47,-17,4878.68,0,679.22,0,,,25,,,,,,,,10,,,,,,,,0,,,,,,,,123,,,,,,,,132,,,,,,,,107,,,,,,6.73044,7478.68272,389,4240.44287,4231.14,,39,,,,39.84,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.5,0.5,0,0.45,0.45,0,0.38,0.38,0,0.71,0.71,0,584,578,532,67,202,442,335,421.536133,, +D,DREGION,,3,"2023/12/15 01:05:00",1,NSW1,0,135.1967,0,135.1967,0,0,7482.99,-42,7847.25,0,364.26,0,,,112.97,,,,,,,,139,,,,,,,,94.37,,,,,,,,161.01,,,,,,,,191.87,,,,,,,,190.87,,,,,,-7.32057,11972.16613,181,7556.22607,7497.89,,64,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,377,383,644,164.257856,445,559,501,458.079845,, +D,DREGION,,3,"2023/12/15 01:05:00",1,QLD1,0,148.95272,0,148.95272,0,0,6529.41,-15,6166.75,0,-362.66,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,134,,,,,,,,163,,,,,,-14.69225,9725.68369,125,6566.58789,6538.26,,0,,,,84.92,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,347,455.333333,201,219.229776,305.340220,428.340220,250,247.000004,, +D,DREGION,,3,"2023/12/15 01:05:00",1,SA1,0,150.5851,0,150.5851,0,0,1335.6,-5,813.59,0,-522.02,0,,,61,,,,,,,,63,,,,,,,,55,,,,,,,,160,,,,,,,,170,,,,,,,,160,,,,,,-2.8758,2361.863,362,1360.55591,1348.83,,10,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,304,310,297,68.851472,278,280,280,402.7236,, +D,DREGION,,3,"2023/12/15 01:05:00",1,TAS1,0,115.18,0,115.18,0,0,985.73,-1,921.65,0,-64.08,0,,,3.43,,,,,,,,104.99,,,,,,,,103.43,,,,,,,,6,,,,,,,,6,,,,,,,,6,,,,,,-6.46103,2346.83124,0,993.1908,985.73,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,8.11,8.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,5.79772,5.79772,0,200.672659,288.995247,172.531151,106.704811,191.794104,332.277907,476.310665,50.000004,, +D,DREGION,,3,"2023/12/15 01:05:00",1,VIC1,0,129.17668,0,129.17668,0,0,4105.43,-18,4754.72,0,649.29,0,,,25,,,,,,,,37.27,,,,,,,,15,,,,,,,,116,,,,,,,,120,,,,,,,,102,,,,,,4.69343,7463.71812,389,4153.84766,4133.25,,86,,,,27,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,0.72,0.72,0,580,567,526,44,343,455,399,478.820251,, +D,DREGION,,3,"2023/12/15 01:10:00",1,NSW1,0,145.39246,0,145.39246,0,0,7493.89,-38,7850.39,0,356.5,0,,,80,,,,,,,,94,,,,,,,,56,,,,,,,,154.76,,,,,,,,186.83,,,,,,,,186.83,,,,,,7.43553,11971.38932,181,7538.77588,7512.71,,50,,,,32,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0,379,385,644,212.392665,370,454,396,345.631251,, +D,DREGION,,3,"2023/12/15 01:10:00",1,QLD1,0,161.16684,0,161.16684,0,0,6516.76,-15,6112.86,0,-403.9,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,133,,,,,,,,163,,,,,,-23.62419,9706.18978,125,6563.8252,6527.22,,76,,,,91.06,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0,347,455.333333,201,252,306,429,248,327,, +D,DREGION,,3,"2023/12/15 01:10:00",1,SA1,0,159.70267,0,159.70267,0,0,1327.1,-5,823.1,0,-504,0,,,53,,,,,,,,66,,,,,,,,57,,,,,,,,166,,,,,,,,175,,,,,,,,164,,,,,,5.85372,2352.09711,362,1338.42407,1339.37,,20,,,,59,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0,308,315,303,87.512389,280,283,283,404.851470,, +D,DREGION,,3,"2023/12/15 01:10:00",1,TAS1,0,123.62975,0,123.62975,0,0,1024.3,-1,966.36,0,-57.94,0,,,9.82,,,,,,,,109.81,,,,,,,,109.81,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-12.7179,2361.45569,0,1038.01721,1024.3,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,1.75,1.75,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,190.386021,269.910356,147.851351,120.963299,157.545988,326.227044,512.597665,234.254797,, +D,DREGION,,3,"2023/12/15 01:10:00",1,VIC1,0,137.66,0,137.66,0,0,4069.38,-22,4747.69,0,678.32,0,,,72,,,,,,,,71.74,,,,,,,,62,,,,,,,,119,,,,,,,,124,,,,,,,,105,,,,,,-9.39063,7444.18163,392,4125.92383,4096.79,,14,,,,30,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11.68,11.68,0,0,0,0,0.38,0.38,0,0,0,0,7.73,7.73,0,585,573.50,529,48,175,171,176,328,, +D,DREGION,,3,"2023/12/15 01:15:00",1,NSW1,0,127.74458,0,127.74458,0,0,7429.06,-36,7849.69,0,420.64,0,,,62.9,,,,,,,,113.02,,,,,,,,65.35,,,,,,,,156,,,,,,,,187.57,,,,,,,,187.57,,,,,,7.66029,11970.69492,181,7469.71924,7444.55,,55,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0,379,385,644,212.199047,440,554,496,470.751935,, +D,DREGION,,3,"2023/12/15 01:15:00",1,QLD1,0,141.40189,0,141.40189,0,0,6453.61,-19,6065.28,0,-388.34,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,133,,,,,,,,163,,,,,,-31.29059,9708.65236,125,6511.60449,6463.18,,26,,,,60.14,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0,347,455.333333,201,252,292,415,250,287,, +D,DREGION,,3,"2023/12/15 01:15:00",1,SA1,0,142.5231,0,142.5231,0,0,1319.94,-8,816.97,0,-502.97,0,,,48,,,,,,,,66,,,,,,,,57,,,,,,,,166,,,,,,,,175,,,,,,,,164,,,,,,11.74999,2345.96806,362,1328.30249,1332.17,,20,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0,308,315,303,104.290008,280,283,283,404.851470,, +D,DREGION,,3,"2023/12/15 01:15:00",1,TAS1,0,115.22,0,115.22,0,0,1025.83,1,927.98,0,-97.86,0,,,0,,,,,,,,69.45,,,,,,,,69.45,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-2.37093,2352.70887,0,1027.20288,1025.83,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,197.204957,297.454789,176.815821,139.963278,162.142336,325.920902,483.426134,309.112050,, +D,DREGION,,3,"2023/12/15 01:15:00",1,VIC1,0,122.84801,0,122.84801,0,0,4061.5,-23,4692.53,0,631.03,0,,,87,,,,,,,,92,,,,,,,,77,,,,,,,,115,,,,,,,,121,,,,,,,,102,,,,,,-9.71265,7413.53167,392,4118.95068,4086.71,,59,,,,31,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,7.73,7.73,0,0.01,0.01,0,0.07,0.07,0,0.01,0.01,0,3.76,3.76,0,578,564.50,521,62,378,613,501,522.455871,, +D,DREGION,,3,"2023/12/15 01:20:00",1,NSW1,0,143.05991,0,143.05991,0,0,7341.05,-35,7790.4,0,449.35,0,,,55,,,,,,,,68,,,,,,,,58.24,,,,,,,,163.38,,,,,,,,190.23,,,,,,,,192.23,,,,,,8.04142,11790.80659,181,7385.25,7355.51,,121,,,,29.45,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0,379,385,644,211.039517,344,428,370,410.195569,, +D,DREGION,,3,"2023/12/15 01:20:00",1,QLD1,0,157.22673,0,157.22673,0,0,6439.35,-16,6054.14,0,-385.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,33,,,,,,,,137,,,,,,,,168,,,,,,-37.20901,9710.71611,125,6502.89648,6448.65,,0,,,,68,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0,352,461.333333,207,247,292,415,250,287,, +D,DREGION,,3,"2023/12/15 01:20:00",1,SA1,0,159.70409,0,159.70409,0,0,1314.63,-9,809.84,0,-504.8,0,,,59.02,,,,,,,,64,,,,,,,,55,,,,,,,,155,,,,,,,,165,,,,,,,,155,,,,,,12.74506,2335.83891,362,1322.66565,1326.95,,10,,,,63,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0,299,305,292,111.645537,278,281,281,407.851470,, +D,DREGION,,3,"2023/12/15 01:20:00",1,TAS1,0,126.82077,0,126.82077,0,0,1038.71,1,951.16,0,-87.55,0,,,0,,,,,,,,108.86,,,,,,,,79.96,,,,,,,,0,,,,,,,,6,,,,,,,,6,,,,,,-7.12088,2346.25618,0,1044.82886,1038.71,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0,0,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,190.386021,269.910356,147.851351,120.963299,157.545988,326.227044,512.597665,278.250133,, +D,DREGION,,3,"2023/12/15 01:20:00",1,VIC1,0,137.66,0,137.66,0,0,4090.02,-22,4678.97,0,588.95,0,,,86,,,,,,,,102,,,,,,,,76,,,,,,,,121,,,,,,,,127,,,,,,,,104,,,,,,-5.52016,7380.21743,392,4142.92383,4114.68,,29,,,,22,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,10.98,10.98,0,0.01,0.01,0,0.38,0.38,0,0.01,0.01,0,1,1,0,581,574.50,528,54,377,612,500,530.274109,, +D,DREGION,,3,"2023/12/15 01:25:00",1,NSW1,0,117.26901,0,117.26901,0,0,7312.94,-37,7729.24,0,416.3,0,,,108.81,,,,,,,,94,,,,,,,,90,,,,,,,,123,,,,,,,,197.05,,,,,,,,198.05,,,,,,-8.25401,11780.71572,181,7376.33105,7327.9,,40,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0,379,385,644,215.059669,370,454,396,407.007343,, +D,DREGION,,3,"2023/12/15 01:25:00",1,QLD1,0,128.85654,0,128.85654,0,0,6436.52,-16,6051.82,0,-384.7,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29,,,,,,,,136,,,,,,,,168,,,,,,-33.41401,9737.74093,125,6496.36133,6445.77,,0,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0,352,460.333333,206,247,267,380,215,270.024683,, +D,DREGION,,3,"2023/12/15 01:25:00",1,SA1,0,130.77247,0,130.77247,0,0,1300.98,-10,799.66,0,-501.32,0,,,63,,,,,,,,77.59,,,,,,,,58,,,,,,,,152,,,,,,,,164,,,,,,,,153,,,,,,11.40738,2328.66126,362,1310.33521,1313.14,,20,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0,297,304,291,121.851470,280,283,283,404.701903,, +D,DREGION,,3,"2023/12/15 01:25:00",1,TAS1,0,115.21293,0,115.21293,0,0,1043.12,1,865.75,0,-177.37,0,,,0,,,,,,,,132.51,,,,,,,,89.33,,,,,,,,77.37,,,,,,,,6,,,,,,,,6,,,,,,2.41488,2328.75109,0,1039.70581,1043.12,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,207.154364,310.285328,215.286861,63.025247,167.704404,298.734701,444.629068,190.453654,, +D,DREGION,,3,"2023/12/15 01:25:00",1,VIC1,0,112.7099,0,112.7099,0,0,4008.12,-17,4717.79,0,709.67,0,,,21,,,,,,,,32,,,,,,,,32,,,,,,,,90.4,,,,,,,,122,,,,,,,,100,,,,,,-18.89306,7430.78787,392,4067.18896,4034.33,,100,,,,18,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.61,3.61,0,572,564.50,518,51,271,388,337,444.692383,, +D,DREGION,,3,"2023/12/15 01:30:00",1,NSW1,0,118.22267,0,118.22267,0,0,7263.11,-35,7667.34,0,404.23,0,,,80,,,,,,,,154,,,,,,,,129.25,,,,,,,,122,,,,,,,,186.31,,,,,,,,185.31,,,,,,-22.14416,11779.62876,181,7336.60693,7277.6,,55,,,,26,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,379,385,643,214.823148,440,554,496,463.657996,, +D,DREGION,,3,"2023/12/15 01:30:00",1,QLD1,0,129.82797,0,129.82797,0,0,6431.62,-15,6053.43,0,-378.19,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29.51,,,,,,,,137,,,,,,,,168,,,,,,-23.06586,9744.12651,125,6479.08496,6440.52,,10,,,,67,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,352,461.333333,207,246,292,415,250,287,, +D,DREGION,,3,"2023/12/15 01:30:00",1,SA1,0,131.20368,0,131.20368,0,0,1289.08,-11,794.32,0,-494.76,0,,,53,,,,,,,,67,,,,,,,,59,,,,,,,,161,,,,,,,,174,,,,,,,,164,,,,,,9.26107,2323.31935,362,1301.36584,1300.9,,20,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,308,314,300,110.851470,281,284,284,403.359679,, +D,DREGION,,3,"2023/12/15 01:30:00",1,TAS1,0,115.22,0,115.22,0,0,1035.95,1,882.49,0,-153.46,0,,,0,,,,,,,,29.58,,,,,,,,14.17,,,,,,,,53.46,,,,,,,,6,,,,,,,,6,,,,,,-4.71602,2325.98127,0,1039.66748,1035.95,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,202.107612,312.216390,195.772751,168.461380,165.708491,312.524672,464.308552,353.555444,, +D,DREGION,,3,"2023/12/15 01:30:00",1,VIC1,0,113.6397,0,113.6397,0,0,4057.92,-16,4740.43,0,682.5,0,,,77,,,,,,,,83,,,,,,,,67,,,,,,,,105,,,,,,,,121,,,,,,,,101,,,,,,-1.94483,7457.42513,392,4098.69629,4083.04,,75,,,,21,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,9.28,9.28,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,573,563.50,518,54,250,241,241,389.669769,, +D,DREGION,,3,"2023/12/15 01:35:00",1,NSW1,0,143.22786,0,143.22786,0,0,7214.31,-32,7629.4,0,415.09,0,,,62.13,,,,,,,,67,,,,,,,,63,,,,,,,,188.3,,,,,,,,234,,,,,,,,219,,,,,,-33.14624,11779.63739,181,7295.07471,7227.29,,63,,,,36,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,378,384,641,228.413974,367,451,393,375.225474,, +D,DREGION,,3,"2023/12/15 01:35:00",1,QLD1,0,157.26717,0,157.26717,0,0,6454.21,-13,6091.62,0,-362.59,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,120,,,,,,,,150.3,,,,,,-17.14943,9755.52158,125,6493.72949,6462.51,,0,,,,51,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,333,442.333333,188,233.934396,292,415,250,287,, +D,DREGION,,3,"2023/12/15 01:35:00",1,SA1,0,162.08159,0,162.08159,0,0,1281.01,-10,722.26,0,-558.75,0,,,45,,,,,,,,52,,,,,,,,44,,,,,,,,147,,,,,,,,160,,,,,,,,148,,,,,,5.4889,2317.79291,362,1296.36865,1296.28,,27,,,,71,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,292,298,284,122.851470,262.465150,270.465150,270.465150,359.851471,, +D,DREGION,,3,"2023/12/15 01:35:00",1,TAS1,0,139.11729,0,139.11729,0,0,1048.44,1,924,0,-124.44,0,,,0,,,,,,,,126.69,,,,,,,,71.73,,,,,,,,24.44,,,,,,,,0,,,,,,,,0,,,,,,1.8805,2319.19673,0,1045.55859,1048.44,,50,,,,50,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,184.386021,263.910356,141.851351,134.557982,157.545988,326.227044,512.597665,270.702317,, +D,DREGION,,3,"2023/12/15 01:35:00",1,VIC1,0,137.66,0,137.66,0,0,4031.69,-19,4730.25,0,698.56,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,100,,,,,,,,113.3,,,,,,,,110,,,,,,1.36318,7415.09868,392,4073.19312,4063.01,,70,,,,12,,,,,,,,,,,,,,,,,,,0.72,0.72,0,0.75,0.75,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,573,551.50,513,56,338,456,405,469.635437,, +D,DREGION,,3,"2023/12/15 01:40:00",1,NSW1,0,142.16597,0,142.16597,0,0,7178.6,-27,7629.99,0,451.39,0,,,93,,,,,,,,98,,,,,,,,94,,,,,,,,159.96,,,,,,,,222,,,,,,,,219,,,,,,-37.87011,11775.9948,181,7257.30518,7190.48,,58,,,,46,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0,378,384,641,241.793302,374,458,400,405.958541,, +D,DREGION,,3,"2023/12/15 01:40:00",1,QLD1,0,155.99258,0,155.99258,0,0,6435.13,-12,6076.64,0,-358.5,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,117,,,,,,,,149,,,,,,-10.11112,9740.40443,125,6465.54297,6443.17,,0,,,,45,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0,333,442.333333,188,231,292,415,250,267,, +D,DREGION,,3,"2023/12/15 01:40:00",1,SA1,0,162.08534,0,162.08534,0,0,1254.8,-11,695.99,0,-558.81,0,,,53,,,,,,,,66,,,,,,,,58,,,,,,,,152,,,,,,,,163,,,,,,,,153,,,,,,-4.66219,2308.99039,362,1283.59253,1270.07,,10,,,,67,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0,297,303,289,118.851470,247,255,255,357,, +D,DREGION,,3,"2023/12/15 01:40:00",1,TAS1,0,139.4828,0,139.4828,0,0,1050.8,1,915.85,0,-134.95,0,,,6.36,,,,,,,,131.23,,,,,,,,76.17,,,,,,,,34.95,,,,,,,,0,,,,,,,,0,,,,,,9.30518,2310.94693,0,1040.4967,1050.8,,50,,,,50,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,3.5,3.5,0,184.386021,263.910356,141.851351,123.208657,157.545988,326.227044,512.597665,246.579444,, +D,DREGION,,3,"2023/12/15 01:40:00",1,VIC1,0,137.66,0,137.66,0,0,4023.13,-14,4689.87,0,666.73,0,,,41,,,,,,,,42,,,,,,,,42,,,,,,,,122,,,,,,,,134.78,,,,,,,,115.78,,,,,,-1.4014,7406.5781,392,4066.02295,4053.81,,92,,,,12,,,,,,,,,,,,,,,,,,,0.5,0.5,0,0.72,0.72,0,0.53,0.53,0,10.98,10.98,0,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,1,1,0,593,577.50,535,59,338,577,470,498.160217,, +D,DREGION,,3,"2023/12/15 01:45:00",1,NSW1,0,141.01703,0,141.01703,0,0,7167.97,-26,7623.31,0,455.33,0,,,80,,,,,,,,94,,,,,,,,90,,,,,,,,145,,,,,,,,218.72,,,,,,,,203.72,,,,,,-26.6765,11774.30523,181,7230.95605,7178.42,,60,,,,61,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0,378,384,641,242.510541,370,454,396,400.521405,, +D,DREGION,,3,"2023/12/15 01:45:00",1,QLD1,0,153.58585,0,153.58585,0,0,6381.27,-14,6037.64,0,-343.63,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,14,,,,,,,,116,,,,,,,,149,,,,,,-1.3155,9553.54119,125,6403.39307,6388.61,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0,303,412.333333,188,231,292,415,250,307,, +D,DREGION,,3,"2023/12/15 01:45:00",1,SA1,0,162.08525,0,162.08525,0,0,1248.6,-10,693.5,0,-555.1,0,,,58,,,,,,,,64,,,,,,,,57,,,,,,,,159,,,,,,,,171,,,,,,,,161,,,,,,-10.13636,2306.5038,362,1283.41479,1263.67,,20,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0,305,311,296,110.851470,246,253,253,357,, +D,DREGION,,3,"2023/12/15 01:45:00",1,TAS1,0,139.3028,0,139.3028,0,0,1048.68,0,915.1,0,-133.58,0,,,0,,,,,,,,88.01,,,,,,,,34.05,,,,,,,,33.58,,,,,,,,0,,,,,,,,0,,,,,,6.69811,2310.19603,0,1041.97998,1048.68,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,184.386021,263.910356,141.851351,133.581525,157.545988,326.227044,512.597665,346.851724,, +D,DREGION,,3,"2023/12/15 01:45:00",1,VIC1,0,137.66,0,137.66,0,0,4017.3,-13,4657.01,0,639.71,0,,,87,,,,,,,,92,,,,,,,,89.5,,,,,,,,129,,,,,,,,129,,,,,,,,121,,,,,,-3.63866,7388.21882,392,4064.48438,4047.18,,80,,,,18,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.53,0.53,0,11,11,0,0.2,0.2,0,0.38,0.38,0,0,0,0,3.61,3.61,0,595,567.50,533,50,364,477,421,457.631774,, +D,DREGION,,3,"2023/12/15 01:50:00",1,NSW1,0,114.98907,0,114.98907,0,0,7196.61,-25,7609.24,0,412.62,0,,,70.68,,,,,,,,94,,,,,,,,90,,,,,,,,120,,,,,,,,209.42,,,,,,,,198.42,,,,,,-16.62607,11759.23648,181,7250.27979,7204.66,,99,,,,60,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,378,384,641,243.782646,370,454,396,399.952262,, +D,DREGION,,3,"2023/12/15 01:50:00",1,QLD1,0,124.45005,0,124.45005,0,0,6365.66,-15,6065.28,0,-300.38,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,6,,,,,,,,116,,,,,,,,149,,,,,,-1.49289,9711.50711,125,6389.46143,6371.59,,0,,,,62,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,323,432.333333,188,216.065523,312,435,250,289.511987,, +D,DREGION,,3,"2023/12/15 01:50:00",1,SA1,0,132.04396,0,132.04396,0,0,1246.19,-8,693.44,0,-552.75,0,,,44,,,,,,,,64,,,,,,,,56,,,,,,,,136.59,,,,,,,,170,,,,,,,,159,,,,,,-8.71767,2306.44453,362,1277.80713,1261.14,,17,,,,39,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,303,310,295,110.851470,245,253,253,357,, +D,DREGION,,3,"2023/12/15 01:50:00",1,TAS1,0,115.22,0,115.22,0,0,1051.14,0,855.7,0,-195.44,0,,,0,,,,,,,,96.07,,,,,,,,33.91,,,,,,,,95.44,,,,,,,,0,,,,,,,,0,,,,,,6.96508,2300.76908,0,1044.17712,1051.14,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,196.515839,304.285328,191.351231,121.221715,166.005433,311.409213,462.716695,290.486997,, +D,DREGION,,3,"2023/12/15 01:50:00",1,VIC1,0,112.13433,0,112.13433,0,0,3935.47,-11,4631.09,0,695.63,0,,,86,,,,,,,,91,,,,,,,,91,,,,,,,,125,,,,,,,,142,,,,,,,,131,,,,,,-5.39509,7383.09474,392,3982.77246,3966.22,,44,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,608,584.50,547,45,377,612,500,503.994964,, +D,DREGION,,3,"2023/12/15 01:55:00",1,NSW1,0,102.51777,0,102.51777,0,0,7153.51,-22,7594.44,0,440.93,0,,,67.94,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,199.98,,,,,,,,194.98,,,,,,-5.63125,11739.43973,181,7189.01563,7161.01,,87,,,,65,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,378,384,641,240.783903,367,451,393,429.207677,, +D,DREGION,,3,"2023/12/15 01:55:00",1,QLD1,0,110.8247,0,110.8247,0,0,6332.68,-17,6031.92,0,-300.76,0,,,45,,,,,,,,47.66,,,,,,,,45,,,,,,,,7,,,,,,,,115,,,,,,,,149,,,,,,5.61928,9702.0778,125,6349.28174,6338.46,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,303,412.333333,188,231,252,375,250,206.299957,, +D,DREGION,,3,"2023/12/15 01:55:00",1,SA1,0,117.1857,0,117.1857,0,0,1245.5,-8,697.31,0,-548.19,0,,,46,,,,,,,,53,,,,,,,,45,,,,,,,,127.7,,,,,,,,172,,,,,,,,161,,,,,,-8.71261,2310.3072,362,1277.53857,1260.19,,22,,,,55,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,270,282,268,61,244,252,252,355,, +D,DREGION,,3,"2023/12/15 01:55:00",1,TAS1,0,103.0262,0,103.0262,0,0,1042.23,0,827.08,0,-215.14,0,,,0,,,,,,,,131.03,,,,,,,,71.42,,,,,,,,99.53,,,,,,,,0,,,,,,,,0,,,,,,-2.37408,2292.18254,0,1044.60022,1042.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,201.696366,306.216390,211.382601,75,167.704404,297.253711,442.515568,253.127559,, +D,DREGION,,3,"2023/12/15 01:55:00",1,VIC1,0,100,0,100,0,0,3907.46,-15,4589.01,0,681.55,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,127,,,,,,,,149,,,,,,,,131,,,,,,-5.83465,7383.27139,392,3962.07617,3937.86,,51,,,,9,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.86,7.86,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,607,592.50,549,47,378,613,501,504.849609,, +D,DREGION,,3,"2023/12/15 02:00:00",1,NSW1,0,102.51225,0,102.51225,0,0,7137.25,-20,7584.26,0,447.01,0,,,63.05,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,216.84,,,,,,,,210.84,,,,,,0.6546,11734.26204,181,7163.77979,7144.86,,73.63,,,,46,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0,378,384,641,243.463335,356.3668,440.3668,382.3668,417.016446,, +D,DREGION,,3,"2023/12/15 02:00:00",1,QLD1,0,110.79558,0,110.79558,0,0,6338.2,-17,6033.89,0,-304.31,0,,,45,,,,,,,,46.81,,,,,,,,45,,,,,,,,7,,,,,,,,115,,,,,,,,149,,,,,,10.56172,9710.84688,125,6350.17236,6344.06,,0,,,,46,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0,333,442.333333,188,246,252,375,250,227,, +D,DREGION,,3,"2023/12/15 02:00:00",1,SA1,0,117.18609,0,117.18609,0,0,1245.2,-7,697.89,0,-547.31,0,,,50,,,,,,,,53,,,,,,,,45,,,,,,,,130.52,,,,,,,,157,,,,,,,,146,,,,,,-6.65595,2310.89063,362,1273.37305,1259.85,,42.37,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0,255,267,253,76,233.6332,241.6332,241.6332,355,, +D,DREGION,,3,"2023/12/15 02:00:00",1,TAS1,0,103.0262,0,103.0262,0,0,1034,0,821.35,0,-212.65,0,,,0,,,,,,,,131.03,,,,,,,,71.47,,,,,,,,99.53,,,,,,,,0,,,,,,,,0,,,,,,-7.56975,2286.44949,0,1041.57349,1034,,50,,,,50,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,201.696366,304.285328,211.382601,74.999995,167.704404,297.253711,442.515568,252.918474,, +D,DREGION,,3,"2023/12/15 02:00:00",1,VIC1,0,100,0,100,0,0,3910.64,-17,4586.23,0,675.59,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,124,,,,,,,,147,,,,,,,,130,,,,,,-7.29441,7389.60358,392,3965.19531,3940.84,,44,,,,8,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.39,0.39,0,7.85,7.85,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.71,3.71,0,608,592.50,550,46,364,477,421,454.895295,, +D,DREGION,,3,"2023/12/15 02:05:00",1,NSW1,0,101.75862,0,101.75862,0,0,7106.31,-19,7540.91,0,434.59,0,,,89,,,,,,,,67,,,,,,,,63,,,,,,,,120,,,,,,,,110,,,,,,,,107,,,,,,3.02797,11692.06912,181,7131.36182,7112.67,,96,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,378,384,641,266.948586,343,427,369,378.735810,, +D,DREGION,,3,"2023/12/15 02:05:00",1,QLD1,0,109.23146,0,109.23146,0,0,6319.73,-15,6035.87,0,-283.87,0,,,45,,,,,,,,64,,,,,,,,45,,,,,,,,14,,,,,,,,109.64,,,,,,,,127,,,,,,8.46851,9673.56915,125,6331.61279,6324.91,,0,,,,68,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,317,426.333333,193,256.362990,312,435,250,327,, +D,DREGION,,3,"2023/12/15 02:05:00",1,SA1,0,116.61619,0,116.61619,0,0,1230.89,-6,699.93,0,-530.95,0,,,64,,,,,,,,91,,,,,,,,77.02,,,,,,,,121.35,,,,,,,,172,,,,,,,,161,,,,,,-4.16238,2311.93285,362,1254.56543,1244.64,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,270,282,267,61,243,251,251,355,, +D,DREGION,,3,"2023/12/15 02:05:00",1,TAS1,0,103.0262,0,103.0262,0,0,1031.55,-1,810.68,0,-220.87,0,,,8.92,,,,,,,,131.03,,,,,,,,101.68,,,,,,,,99.53,,,,,,,,152.18,,,,,,,,151.15,,,,,,-7.2974,2275.77714,0,1039.84473,1031.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0,201.696366,306.216390,211.382601,55.666668,167.704404,297.253711,442.515568,180.775006,, +D,DREGION,,3,"2023/12/15 02:05:00",1,VIC1,0,100,0,100,0,0,3926.61,-17,4581.39,0,654.78,0,,,40,,,,,,,,38.83,,,,,,,,30,,,,,,,,127,,,,,,,,93,,,,,,,,90.66,,,,,,-6.76058,7391.25832,392,3979.14209,3955,,54,,,,14,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,16.73,16.73,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,608,586.50,548,47,352,592,485,489.450134,, +D,DREGION,,3,"2023/12/15 02:10:00",1,NSW1,0,112.82208,0,112.82208,0,0,7168.26,-15,7499.29,0,331.03,0,,,62.34,,,,,,,,92,,,,,,,,88,,,,,,,,122,,,,,,,,109,,,,,,,,106,,,,,,6.47045,11676.21536,181,7179.30908,7170.74,,100,,,,56,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,377,383,643,267.515882,369,453,395,384.598639,, +D,DREGION,,3,"2023/12/15 02:10:00",1,QLD1,0,119.55,0,119.55,0,0,6263.09,-15,6073.22,0,-189.87,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,105.67,,,,,,,,141,,,,,,5.87547,9694.61573,125,6274.93506,6265.87,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,352,461.333333,207,252,252,375,250,227,, +D,DREGION,,3,"2023/12/15 02:10:00",1,SA1,0,128.90984,0,128.90984,0,0,1238.94,-5,697.49,0,-541.45,0,,,50,,,,,,,,66,,,,,,,,58,,,,,,,,158.32,,,,,,,,174,,,,,,,,164,,,,,,-7.49792,2308.49162,362,1266.78125,1253.27,,10,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,273,284,269,61,245,253,253,355,, +D,DREGION,,3,"2023/12/15 02:10:00",1,TAS1,0,113.03895,0,113.03895,0,0,1019.09,-1,813.2,0,-205.89,0,,,0,,,,,,,,94.34,,,,,,,,33.78,,,,,,,,99.53,,,,,,,,152.18,,,,,,,,140.96,,,,,,-5.56167,2278.29719,0,1025.64795,1019.09,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,201.696366,306.216390,211.382601,56.666657,167.704404,297.253711,442.515568,271.427756,, +D,DREGION,,3,"2023/12/15 02:10:00",1,VIC1,0,110.00214,0,110.00214,0,0,3899.1,-15,4554.06,0,654.96,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,79,,,,,,,,98,,,,,,,,86.89,,,,,,-4.52142,7387.05596,392,3952.01563,3928.29,,50,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,606,588.50,547,61,378,613,501,494.826111,, +D,DREGION,,3,"2023/12/15 02:15:00",1,NSW1,0,114.97826,0,114.97826,0,0,7167.03,-14,7496.86,0,329.83,0,,,89,,,,,,,,67,,,,,,,,63,,,,,,,,122,,,,,,,,114.4,,,,,,,,105,,,,,,3.58899,11674.86001,181,7180.02588,7168.6,,72,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,376,382,643,270.060812,367,451,393,377.323236,, +D,DREGION,,3,"2023/12/15 02:15:00",1,QLD1,0,121.10319,0,121.10319,0,0,6280.48,-14,6112.71,0,-167.77,0,,,45,,,,,,,,64,,,,,,,,45,,,,,,,,28,,,,,,,,133,,,,,,,,154.4,,,,,,2.86892,9705.21138,125,6294.3125,6282.84,,0,,,,66,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,352,461.333333,207,246,227,340,215,227,, +D,DREGION,,3,"2023/12/15 02:15:00",1,SA1,0,132.34583,0,132.34583,0,0,1226.08,-5,693.69,3,-535.38,0,,,53,,,,,,,,71.39,,,,,,,,82.28,,,,,,,,160,,,,,,,,173,,,,,,,,163,,,,,,-6.06116,2304.69231,362,1250.81519,1243.07,,22,,,,18,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,307,313,299,112.232848,246,254,254,354,, +D,DREGION,,3,"2023/12/15 02:15:00",1,TAS1,0,115.21481,0,115.21481,0,0,1024.23,0,853.9,0,-170.33,0,,,28.67,,,,,,,,158.12,,,,,,,,96.53,,,,,,,,70.33,,,,,,,,120.32,,,,,,,,120.32,,,,,,-3.06989,2280.65614,0,1027.29895,1024.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0,197.779245,299.560511,179.036401,63.497207,162.560069,324.351692,481.186735,180.775006,, +D,DREGION,,3,"2023/12/15 02:15:00",1,VIC1,0,112.93672,0,112.93672,0,0,3941.33,-14,4550.24,20,588.91,0,,,31,,,,,,,,31,,,,,,,,31,,,,,,,,100.56,,,,,,,,95,,,,,,,,93,,,,,,-5.50937,7374.24214,392,3989.44019,3988.67,,66,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,609,574.50,545,30,314,310,305,358.693817,, +D,DREGION,,3,"2023/12/15 02:20:00",1,NSW1,0,113.52861,0,113.52861,0,0,7150.59,-12,7490.02,0,339.43,0,,,115.31,,,,,,,,99,,,,,,,,95,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,2.40951,11671.01916,181,7161.36328,7152.11,,64,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0,375,381,642,268.281522,375,459,401,412.487708,, +D,DREGION,,3,"2023/12/15 02:20:00",1,QLD1,0,119.55,0,119.55,0,0,6277.74,-14,6108.36,0,-169.38,0,,,45,,,,,,,,56.2,,,,,,,,45,,,,,,,,25,,,,,,,,132,,,,,,,,141,,,,,,3.59105,9717.67326,125,6290.08447,6280.12,,0,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0,332,441.333333,207,246,312,435,250,326.284254,, +D,DREGION,,3,"2023/12/15 02:20:00",1,SA1,0,130.03076,0,130.03076,0,0,1211.02,-5,689.42,0,-521.6,0,,,61,,,,,,,,64,,,,,,,,56,,,,,,,,148.16,,,,,,,,139.43,,,,,,,,149.21,,,,,,-11.50624,2300.41551,362,1243.14185,1224.27,,21,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0,270,281,267,70.836160,243,251,251,355,, +D,DREGION,,3,"2023/12/15 02:20:00",1,TAS1,0,115.17639,0,115.17639,0,0,1036.16,0,812.55,0,-223.61,0,,,0,,,,,,,,131.03,,,,,,,,80.93,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.4,,,,,,5.62614,2277.74718,0,1030.53394,1036.16,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,207.696366,312.216390,217.382601,56.666657,167.704404,297.253711,442.515568,180.775006,, +D,DREGION,,3,"2023/12/15 02:20:00",1,VIC1,0,111.50594,0,111.50594,0,0,3937.54,-8,4557.97,1,619.42,0,,,25,,,,,,,,41,,,,,,,,41,,,,,,,,80,,,,,,,,98,,,,,,,,83,,,,,,-14.6184,7391.96591,392,4003.31909,3965.65,,75,,,,28,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,0.71,0.71,0,593,574.50,534,52,369,603,491,493.732361,, +D,DREGION,,3,"2023/12/15 02:25:00",1,NSW1,0,102.75655,0,102.75655,0,0,7159.01,-11,7496.34,3,334.33,0,,,80,,,,,,,,94,,,,,,,,90,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,3.66784,11677.34471,181,7169.2334,7165.32,,95,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0,375,381,642,270.353599,370,454,396,413.365218,, +D,DREGION,,3,"2023/12/15 02:25:00",1,QLD1,0,108.95605,0,108.95605,0,0,6310.67,-9,6103.15,0,-207.52,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,110.89,,,,,,,,141,,,,,,3.05938,9734.73077,125,6319.32861,6313.92,,0,,,,57,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0,352,461.333333,207,267.110650,252,375,250,212.899963,, +D,DREGION,,3,"2023/12/15 02:25:00",1,SA1,0,116.12544,0,116.12544,0,0,1201.43,-5,684.59,0,-516.84,0,,,59,,,,,,,,66,,,,,,,,58,,,,,,,,134.54,,,,,,,,174,,,,,,,,155.67,,,,,,-7.47848,2295.59088,362,1227.89258,1214.44,,31,,,,9,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0,272,284,270,61,245,253,253,355,, +D,DREGION,,3,"2023/12/15 02:25:00",1,TAS1,0,103.29171,0,103.29171,0,0,1038.46,0,809.87,0,-228.59,0,,,0,,,,,,,,94.93,,,,,,,,33.04,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.4,,,,,,-0.97219,2274.97008,0,1039.43481,1038.46,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,207.696366,312.216390,217.382601,56.666657,167.704404,297.253711,442.515568,272.715347,, +D,DREGION,,3,"2023/12/15 02:25:00",1,VIC1,0,100,0,100,0,0,3897.63,-6,4583.03,20,665.4,0,,,77,,,,,,,,92,,,,,,,,92,,,,,,,,97,,,,,,,,91,,,,,,,,83,,,,,,-6.19229,7405.45737,392,3941.04492,3944.85,,34,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,2.84,2.84,0,592,564,532,38,342,582,475,459.692383,, +D,DREGION,,3,"2023/12/15 02:30:00",1,NSW1,0,100,0,100,0,0,7138.91,-11,7480.32,5,336.41,0,,,72.83,,,,,,,,66,,,,,,,,62,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,4.18625,11677.5877,181,7151.17676,7146.42,,112,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,375,381,642,273.824293,343,427,369,371.154042,, +D,DREGION,,3,"2023/12/15 02:30:00",1,QLD1,0,105.95587,0,105.95587,0,0,6273.95,-11,6080.4,0,-193.55,0,,,45,,,,,,,,59.79,,,,,,,,45,,,,,,,,25,,,,,,,,132,,,,,,,,141,,,,,,5.39119,9718.52717,125,6282.2417,6276.8,,0,,,,53,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,322,431.333333,207,231,252,375,250,227,, +D,DREGION,,3,"2023/12/15 02:30:00",1,SA1,0,113.56953,0,113.56953,0,0,1205.77,-5,684.15,1,-522.63,0,,,47,,,,,,,,53,,,,,,,,45,,,,,,,,148.46,,,,,,,,140.79,,,,,,,,149.76,,,,,,-5.26375,2295.14791,362,1229.7749,1220.09,,34,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,308,315,300,124.392410,234,242,242,356,, +D,DREGION,,3,"2023/12/15 02:30:00",1,TAS1,0,100.59285,0,100.59285,0,0,1035.23,0,809.71,0,-225.53,0,,,0,,,,,,,,131.03,,,,,,,,82.92,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,157.21,,,,,,-1.1553,2274.80559,0,1036.38708,1035.23,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,207.696366,312.216390,217.382601,56.666657,167.704404,297.253711,442.515568,180.775006,, +D,DREGION,,3,"2023/12/15 02:30:00",1,VIC1,0,97.38715,0,97.38715,0,0,3937.3,-10,4593.81,5,651.5,0,,,82,,,,,,,,82,,,,,,,,82,,,,,,,,80,,,,,,,,97,,,,,,,,83,,,,,,-6.42665,7427.80554,389,3998.91309,3969.83,,14,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,595,575,538,64,303,543,436,455.604492,, +D,DREGION,,3,"2023/12/15 02:35:00",1,NSW1,0,116.43824,0,116.43824,0,0,7151.96,-7,7473.01,0,321.06,0,,,62,,,,,,,,40,,,,,,,,36,,,,,,,,121,,,,,,,,112.92,,,,,,,,106.92,,,,,,1.07518,11707.01185,181,7165.10791,7154.06,,96,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0,376,381,642,253.938123,342,426,368,378.296399,, +D,DREGION,,3,"2023/12/15 02:35:00",1,QLD1,0,122.5676,0,122.5676,0,0,6245.62,-8,6063.3,0,-182.33,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,30.83,,,,,,,,131,,,,,,,,168,,,,,,4.2227,9712.12627,125,6251.68604,6248.23,,0,,,,34,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0,352,461.333333,207,230.700043,292,415,250,242.918648,, +D,DREGION,,3,"2023/12/15 02:35:00",1,SA1,0,131.59818,0,131.59818,0,0,1201,-5,682.37,0,-518.63,0,,,51,,,,,,,,84.76,,,,,,,,56,,,,,,,,151,,,,,,,,165,,,,,,,,154,,,,,,-2.97927,2294.3684,362,1222.80469,1214.11,,21,,,,51,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0,299,306,291,117.903960,245,253,253,357,, +D,DREGION,,3,"2023/12/15 02:35:00",1,TAS1,0,115.22,0,115.22,0,0,1033.1,0,867.83,0,-165.28,0,,,0,,,,,,,,131,,,,,,,,89.06,,,,,,,,65.28,,,,,,,,115.27,,,,,,,,115.27,,,,,,1.4171,2267.70361,0,1031.68494,1033.1,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,3.5,3.5,0,190.828473,274.074346,152.160081,94.048820,157.504128,326.227044,508.290821,209.922537,, +D,DREGION,,3,"2023/12/15 02:35:00",1,VIC1,0,113.32416,0,113.32416,0,0,3934.72,-3,4523.21,0,588.5,0,,,88.68,,,,,,,,91,,,,,,,,91,,,,,,,,114,,,,,,,,113,,,,,,,,93,,,,,,-2.11314,7260.21312,389,3976.38159,3960.23,,43,,,,29,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.49,0.49,0,7.73,7.73,0,0.38,0.38,0,0.39,0.39,0,0.2,0.2,0,0.71,0.71,0,580,554,521,53,377,612,490,492.879882,, +D,DREGION,,3,"2023/12/15 02:40:00",1,NSW1,0,114.9127,0,114.9127,0,0,7112.16,-5,7473.9,0,361.75,0,,,85,,,,,,,,99,,,,,,,,95,,,,,,,,121,,,,,,,,94.43,,,,,,,,104,,,,,,6.60294,11712.90348,181,7114.43652,7114.14,,94,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0,376,381,642,267.034122,375,459,401,403.425359,, +D,DREGION,,3,"2023/12/15 02:40:00",1,QLD1,0,120.91927,0,120.91927,0,0,6244.44,-8,6056.45,0,-187.99,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25.13,,,,,,,,131,,,,,,,,160.43,,,,,,-4.53032,9709.8392,125,6259.79199,6247.13,,0,,,,52,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0,352,461.333333,207,246,292,415,250,287,, +D,DREGION,,3,"2023/12/15 02:40:00",1,SA1,0,132.23194,0,132.23194,0,0,1219.49,-5,681.74,0,-537.75,0,,,52,,,,,,,,66,,,,,,,,58,,,,,,,,159,,,,,,,,171,,,,,,,,161,,,,,,0.74211,2293.74115,362,1238.23853,1233.62,,10,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0,270,281,268,61,245,253,253,355,, +D,DREGION,,3,"2023/12/15 02:40:00",1,TAS1,0,115.22,0,115.22,0,0,1036.13,0,859.54,0,-176.58,0,,,0,,,,,,,,78.17,,,,,,,,26.44,,,,,,,,76.58,,,,,,,,126.58,,,,,,,,126.58,,,,,,7.92539,2255.67995,0,1028.20044,1036.13,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,189.861591,270.529112,148.421471,66.814038,156.800825,326.227044,512.061114,384.984870,, +D,DREGION,,3,"2023/12/15 02:40:00",1,VIC1,0,112.83419,0,112.83419,0,0,3906.26,-1,4493.27,0,587.01,0,,,77,,,,,,,,103,,,,,,,,92,,,,,,,,98,,,,,,,,112,,,,,,,,83,,,,,,-15.06114,7268.27118,389,3952.81738,3933.89,,56,,,,17,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.49,0.49,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,1.2,1.2,0,578,553,519,40,378,613,501,508.569274,, +D,DREGION,,3,"2023/12/15 02:45:00",1,NSW1,0,101.14732,0,101.14732,0,0,7104.35,-4,7514.93,0,410.58,0,,,63.88,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,110.71,,,,,,,,104,,,,,,7.72393,11710.92972,181,7104.06982,7106.41,,102,,,,70,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,376,381,642,260.916754,367,451,393,431.050759,, +D,DREGION,,3,"2023/12/15 02:45:00",1,QLD1,0,107.03506,0,107.03506,0,0,6202.73,-6,6000.93,0,-201.8,0,,,45,,,,,,,,48.66,,,,,,,,45,,,,,,,,28,,,,,,,,131,,,,,,,,165.71,,,,,,-3.7336,9698.97076,125,6214.76025,6205.66,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,352,461.333333,207,246,292,415,250,270.299957,, +D,DREGION,,3,"2023/12/15 02:45:00",1,SA1,0,116.63171,0,116.63171,0,0,1207.89,-4,677.36,0,-530.53,0,,,50,,,,,,,,53,,,,,,,,45,,,,,,,,144,,,,,,,,157,,,,,,,,146,,,,,,0,2288.35971,362,1226.80945,1221.64,,26,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,270,282,268,76,244,252,252,355,, +D,DREGION,,3,"2023/12/15 02:45:00",1,TAS1,0,101.98965,0,101.98965,0,0,1016.27,0,837.52,0,-178.75,0,,,0,,,,,,,,131,,,,,,,,70.13,,,,,,,,78.75,,,,,,,,128.75,,,,,,,,128.75,,,,,,8.6034,2252.61684,0,1007.66351,1016.27,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,194.765332,288.509494,167.382601,55.034154,160.367770,326.227044,492.939296,275.313812,, +D,DREGION,,3,"2023/12/15 02:45:00",1,VIC1,0,100,0,100,0,0,3828.87,1,4374.62,0,545.75,0,,,89,,,,,,,,94,,,,,,,,94,,,,,,,,109.93,,,,,,,,110,,,,,,,,93,,,,,,-25.66669,7239.01493,389,3883.12451,3855.38,,32,,,,33,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.84,7.84,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1.5,1.5,0,578,550,518,55,380,615,503,492.9375,, +D,DREGION,,3,"2023/12/15 02:50:00",1,NSW1,0,96.17157,0,96.17157,0,0,7056.07,-5,7471.86,0,415.78,0,,,79.65,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,107,,,,,,,,104,,,,,,20.25133,11717.85515,181,7043.6582,7058.27,,107,,,,72,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,376,381,642,270.068373,343,427,369,390.928611,, +D,DREGION,,3,"2023/12/15 02:50:00",1,QLD1,0,101.74017,0,101.74017,0,0,6224.05,-5,6017.06,0,-206.99,0,,,45,,,,,,,,51.59,,,,,,,,45,,,,,,,,25,,,,,,,,102,,,,,,,,141,,,,,,-2.39053,9704.6767,125,6234.71436,6227.06,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,352,461.333333,207,252,292,415,250,287,, +D,DREGION,,3,"2023/12/15 02:50:00",1,SA1,0,111.42805,0,111.42805,0,0,1202.74,-4,670.92,10,-541.82,0,,,45,,,,,,,,51,,,,,,,,43,,,,,,,,128.91,,,,,,,,158.86,,,,,,,,159.47,,,,,,5.84281,2281.92451,362,1214.8291,1227.11,,34,,,,40,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,269,281,267,71.527930,230,238,238,345,, +D,DREGION,,3,"2023/12/15 02:50:00",1,TAS1,0,98.18,0,98.18,0,0,1019.39,0,793.03,0,-226.37,0,,,0,,,,,,,,131,,,,,,,,75.36,,,,,,,,126.36,,,,,,,,176.36,,,,,,,,146.75,,,,,,2.50201,2255.20185,0,1016.88953,1019.39,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,4.5,4.5,0,194.765332,335.363803,214.457921,75.284673,114.748388,279.151724,445.706534,148.568044,, +D,DREGION,,3,"2023/12/15 02:50:00",1,VIC1,0,95.07055,0,95.07055,0,0,3816.48,-5,4424.59,0,608.11,0,,,76,,,,,,,,91,,,,,,,,91,,,,,,,,77,,,,,,,,90,,,,,,,,83,,,,,,-34.3375,7402.59012,389,3883.93921,3845.62,,19,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,597,568,537,53,363,476,410,443.093750,, +D,DREGION,,3,"2023/12/15 02:55:00",1,NSW1,0,102.04802,0,102.04802,0,0,7044.64,-7,7514.5,5,464.86,0,,,66.44,,,,,,,,72,,,,,,,,68,,,,,,,,120.09,,,,,,,,115.8,,,,,,,,104,,,,,,5.53666,11715.50365,181,7050.72119,7055.36,,100,,,,77,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,376,381,641,233.972259,348,432,374,373.218444,, +D,DREGION,,3,"2023/12/15 02:55:00",1,QLD1,0,109.439,0,109.439,0,0,6293.66,-4,6011.39,2,-284.27,0,,,45,,,,,,,,46.14,,,,,,,,45,,,,,,,,30,,,,,,,,130,,,,,,,,141,,,,,,1.49728,9705.13835,125,6300.47168,6300.73,,0,,,,67,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,352,461.333333,207,246,292,415,250,285,, +D,DREGION,,3,"2023/12/15 02:55:00",1,SA1,0,116.63613,0,116.63613,0,0,1179.42,-4,668.34,15,-526.08,0,,,63,,,,,,,,66,,,,,,,,58,,,,,,,,138,,,,,,,,147,,,,,,,,162,,,,,,0.26603,2279.33988,362,1195.37891,1207.94,,21,,,,15,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,306,313,299,125.851470,247,255,255,342,, +D,DREGION,,3,"2023/12/15 02:55:00",1,TAS1,0,102.25516,0,102.25516,0,0,1032.17,0,845.04,0,-187.13,0,,,0,,,,,,,,131,,,,,,,,74.01,,,,,,,,87.13,,,,,,,,137.13,,,,,,,,137.13,,,,,,2.72981,2260.14246,0,1029.44385,1032.17,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,194.765332,288.509494,167.382601,64.963271,160.367770,326.227044,492.939296,200.999239,, +D,DREGION,,3,"2023/12/15 02:55:00",1,VIC1,0,100,0,100,0,0,3851.13,-6,4445.45,11,583.32,0,,,67,,,,,,,,72,,,,,,,,72,,,,,,,,102,,,,,,,,103,,,,,,,,88.8,,,,,,-15.05868,7399.81816,389,3897.65576,3888.53,,39,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,1,1,0,596,572,537,52,198,199,199,312,, +D,DREGION,,3,"2023/12/15 03:00:00",1,NSW1,0,100,0,100,0,0,7101.55,-4,7496.67,18,377.12,0,,,95,,,,,,,,73,,,,,,,,69,,,,,,,,134.98,,,,,,,,139.3,,,,,,,,104,,,,,,17.00239,11719.06873,181,7096.64648,7123.47,,71,,,,82,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,376,381,642,286.809033,349,433,375,346.805190,, +D,DREGION,,3,"2023/12/15 03:00:00",1,QLD1,0,106.55888,0,106.55888,0,0,6253.39,-4,6020.2,0,-233.19,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,26,,,,,,,,130,,,,,,,,142.3,,,,,,0.94158,9715.14249,125,6261.7627,6257.11,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,352,461.333333,207,246,267,380,215,287,, +D,DREGION,,3,"2023/12/15 03:00:00",1,SA1,0,113.56665,0,113.56665,0,0,1191.33,-4,669.34,12,-533.99,0,,,66,,,,,,,,112.4,,,,,,,,67.15,,,,,,,,135,,,,,,,,134,,,,,,,,162,,,,,,-7.32217,2280.33975,362,1225.20337,1217.25,,21,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,306,312,298,122.851470,247,255,255,345,, +D,DREGION,,3,"2023/12/15 03:00:00",1,TAS1,0,99.31122,0,99.31122,0,0,1021.86,0,843.35,0,-178.52,0,,,20,,,,,,,,131,,,,,,,,103.32,,,,,,,,78.52,,,,,,,,128.51,,,,,,,,128.51,,,,,,1.15618,2258.54529,0,1020.70563,1021.86,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0,194.765332,288.509494,167.382601,61.320248,160.367770,326.227044,492.939296,194.700017,, +D,DREGION,,3,"2023/12/15 03:00:00",1,VIC1,0,97.37999,0,97.37999,0,0,3907.15,-5,4524.82,0,617.67,0,,,22.08,,,,,,,,32,,,,,,,,32,,,,,,,,100,,,,,,,,98,,,,,,,,93,,,,,,-9.67002,7392.82039,389,3958.63452,3934.69,,68,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.85,7.85,0,0.39,0.39,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,581,551,520,52,280,397,336,412.162109,, +D,DREGION,,3,"2023/12/15 03:05:00",1,NSW1,0,96.08367,0,96.08367,0,0,7002.97,-5,7458.26,29,426.28,0,,,69.8,,,,,,,,66,,,,,,,,62,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,11.78946,11719.25509,181,7012.07129,7034.74,,97,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,376,381,643,293.397170,342,426,368,372.278612,, +D,DREGION,,3,"2023/12/15 03:05:00",1,QLD1,0,101.63614,0,101.63614,0,0,6240.51,-4,6020.12,0,-220.4,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,101,,,,,,,,141,,,,,,0.73289,9721.14937,125,6247.33057,6243.81,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,352,461.333333,207,257,292,415,250,287,, +D,DREGION,,3,"2023/12/15 03:05:00",1,SA1,0,110.33169,0,110.33169,0,0,1171.94,-3,669.85,0,-502.09,0,,,45,,,,,,,,64,,,,,,,,56,,,,,,,,129.33,,,,,,,,159.93,,,,,,,,156.26,,,,,,-6.92124,2279.84896,362,1209.71973,1184.17,,31,,,,4,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,269,281,267,64.735920,243,251,251,355,, +D,DREGION,,3,"2023/12/15 03:05:00",1,TAS1,0,98.18,0,98.18,0,0,1030.34,0,807.37,0,-222.97,0,,,0,,,,,,,,114.4,,,,,,,,49.87,,,,,,,,122.97,,,,,,,,172.97,,,,,,,,146.63,,,,,,-0.02734,2261.92481,0,1030.3667,1030.34,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,194.765332,327.681092,206.738971,64.000014,122.228607,286.870674,453.4513,267.544331,, +D,DREGION,,3,"2023/12/15 03:05:00",1,VIC1,0,95.07055,0,95.07055,0,0,3954.73,1,4516.88,0,562.15,0,,,88,,,,,,,,104,,,,,,,,104,,,,,,,,77,,,,,,,,91,,,,,,,,83,,,,,,9.11234,7227.87833,389,3975.00049,3979.41,,32,,,,35,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.84,7.84,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,579,551,519,56,379,614,502,492.656250,, +D,DREGION,,3,"2023/12/15 03:10:00",1,NSW1,0,114.85244,0,114.85244,0,0,7076.94,-5,7494.63,0,417.68,0,,,75.55,,,,,,,,67,,,,,,,,63,,,,,,,,121,,,,,,,,114.35,,,,,,,,104,,,,,,8.88401,11715.6254,181,7093.80371,7078.28,,102,,,,61,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0,376,381,643,229.102032,367,451,393,392.974990,, +D,DREGION,,3,"2023/12/15 03:10:00",1,QLD1,0,120.71112,0,120.71112,0,0,6182,-5,5995.88,0,-186.12,0,,,45,,,,,,,,62.04,,,,,,,,45,,,,,,,,28,,,,,,,,129,,,,,,,,168,,,,,,2.51364,9707.1239,125,6186.66309,6184.55,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0,352,461.333333,207,228.900055,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:10:00",1,SA1,0,132.44742,0,132.44742,0,0,1194.64,-3,665.37,0,-529.27,0,,,46,,,,,,,,52,,,,,,,,44,,,,,,,,160,,,,,,,,173,,,,,,,,162,,,,,,0.59814,2275.36892,362,1210.95801,1208.31,,34,,,,21,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0,306,313,299,109.575072,243,251,251,357,, +D,DREGION,,3,"2023/12/15 03:10:00",1,TAS1,0,115.26,0,115.26,0,0,1038.2,1,882.66,0,-155.54,0,,,0,,,,,,,,131,,,,,,,,82.71,,,,,,,,55.54,,,,,,,,105.54,,,,,,,,105.54,,,,,,-1.34773,2264.11427,0,1038.54553,1038.2,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.5,3.5,0,186.166470,256.653074,133.799167,103.264937,154.159849,326.227044,526.802392,228.343807,, +D,DREGION,,3,"2023/12/15 03:10:00",1,VIC1,0,113.57087,0,113.57087,0,0,3957.31,2,4453.84,0,496.53,0,,,82,,,,,,,,82,,,,,,,,82,,,,,,,,107.86,,,,,,,,106,,,,,,,,88.35,,,,,,7.99155,7226.84247,386,3976.55762,3983.04,,24,,,,42,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,10.98,10.98,0,0.38,0.38,0,0.39,0.39,0,0.01,0.01,0,3.7,3.7,0,579,546,517,62,289,407,356,398.504883,, +D,DREGION,,3,"2023/12/15 03:15:00",1,NSW1,0,139.28944,0,139.28944,0,0,7059.89,-2,7537.33,0,477.44,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,151.67,,,,,,,,167.1,,,,,,,,129.1,,,,,,18.94527,11769.8836,181,7048.23877,7063.53,,96,,,,56,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,386,391,653,268.572513,413,527,469,410.925016,, +D,DREGION,,3,"2023/12/15 03:15:00",1,QLD1,0,148.37054,0,148.37054,0,0,6261.66,-2,6016.08,0,-245.58,0,,,45,,,,,,,,62.66,,,,,,,,45,,,,,,,,31,,,,,,,,128,,,,,,,,168,,,,,,2.95919,9701.42493,125,6265.05322,6265.65,,0,,,,21,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,352,461.333333,207,232.101449,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:15:00",1,SA1,0,159.85828,0,159.85828,0,0,1176.42,-2,657.72,0,-518.69,0,,,52,,,,,,,,52,,,,,,,,44,,,,,,,,147,,,,,,,,158,,,,,,,,147,,,,,,0.14107,2267.72389,362,1191.30933,1189.53,,34,,,,70,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,291,298,284,125.246154,233,241,241,357,, +D,DREGION,,3,"2023/12/15 03:15:00",1,TAS1,0,138.92729,0,138.92729,0,0,1031.33,1,904,0,-127.32,0,,,11.23,,,,,,,,131,,,,,,,,93.63,,,,,,,,27.32,,,,,,,,77.32,,,,,,,,77.32,,,,,,6.14904,2281.1048,0,1024.17773,1031.33,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0,185.730849,252.841390,129.851351,113.786087,154.159849,326.227044,530.750207,232.700017,, +D,DREGION,,3,"2023/12/15 03:15:00",1,VIC1,0,137.66,0,137.66,0,0,3948.89,1,4407.86,0,458.97,0,,,31,,,,,,,,21,,,,,,,,21,,,,,,,,102,,,,,,,,84,,,,,,,,93,,,,,,-5.56759,7205.52119,383,3978.31689,3972.97,,30,,,,23,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,5,5,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,595,544,527,57,303,543,436,459.345837,, +D,DREGION,,3,"2023/12/15 03:20:00",1,NSW1,0,140.4018,0,140.4018,0,0,7123.53,3,7541.34,0,417.81,0,,,118.44,,,,,,,,159,,,,,,,,141.73,,,,,,,,149.74,,,,,,,,160.95,,,,,,,,124.95,,,,,,28.18887,11762.33789,181,7095.6958,7127.5,,44,,,,77,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,376,381,643,278.824293,445,559,501,462.865247,, +D,DREGION,,3,"2023/12/15 03:20:00",1,QLD1,0,149.63434,0,149.63434,0,0,6262.15,-1,6019.79,0,-242.36,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,31,,,,,,,,127,,,,,,,,168,,,,,,0.8507,9705.34161,125,6265.85693,6266.11,,0,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,322,431.333333,207,231,229,342,215,230,, +D,DREGION,,3,"2023/12/15 03:20:00",1,SA1,0,160.54277,0,160.54277,0,0,1185.24,-2,656.51,0,-528.74,0,,,60,,,,,,,,63,,,,,,,,55,,,,,,,,160,,,,,,,,171,,,,,,,,160,,,,,,1.46567,2265.50527,362,1198.51855,1198.89,,10,,,,11,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,304,311,297,109.575072,244,252,252,357,, +D,DREGION,,3,"2023/12/15 03:20:00",1,TAS1,0,138.88729,0,138.88729,0,0,1017.5,1,896.38,0,-121.12,0,,,0,,,,,,,,85.65,,,,,,,,44.59,,,,,,,,21.12,,,,,,,,71.11,,,,,,,,71.11,,,,,,8.93695,2273.48262,0,1007.56317,1017.5,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,185.730849,252.841390,129.851351,131.507932,154.159849,326.227044,530.750207,373.775682,, +D,DREGION,,3,"2023/12/15 03:20:00",1,VIC1,0,137.66,0,137.66,0,0,3937.87,6,4459.41,0,521.53,0,,,25,,,,,,,,41,,,,,,,,30,,,,,,,,100,,,,,,,,87,,,,,,,,93,,,,,,-19.12672,7371.25768,383,3974.41748,3963.42,,106,,,,41,,,,,,,,,,,,,,,,,,,0.48,0.48,0,0.5,0.5,0,0.5,0.5,0,11,11,0,0.34,0.34,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,579,533,513,57,290,407,356,422.123971,, +D,DREGION,,3,"2023/12/15 03:25:00",1,NSW1,0,100,0,100,0,0,7053.48,7,7531.74,0,478.26,0,,,80,,,,,,,,145.56,,,,,,,,124.53,,,,,,,,121,,,,,,,,126.11,,,,,,,,104,,,,,,28.58341,11753.98144,181,7023.62891,7060.45,,81,,,,75,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,386,391,653,295.437605,440,554,496,490.453896,, +D,DREGION,,3,"2023/12/15 03:25:00",1,QLD1,0,107.86229,0,107.86229,0,0,6263.52,2,5953.63,0,-309.89,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,29.68,,,,,,,,127,,,,,,,,152.11,,,,,,0.65954,9711.31356,125,6264.9209,6269.28,,0,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,322,431.333333,207,231,254,377,250,200.780160,, +D,DREGION,,3,"2023/12/15 03:25:00",1,SA1,0,113.1852,0,113.1852,0,0,1156.04,-2,659.5,0,-496.54,0,,,58,,,,,,,,65,,,,,,,,57,,,,,,,,160,,,,,,,,173,,,,,,,,162,,,,,,-3.33549,2268.50443,362,1175.05029,1167.99,,20,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,271,283,269,61,244,252,252,355,, +D,DREGION,,3,"2023/12/15 03:25:00",1,TAS1,0,99.19068,0,99.19068,0,0,1009.85,2,855.5,0,-154.35,0,,,0,,,,,,,,45,,,,,,,,13.1,,,,,,,,54.35,,,,,,,,104.34,,,,,,,,104.34,,,,,,7.36371,2270.60387,0,1000.48657,1009.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.38,0.38,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,194.765332,288.509494,167.382601,105.029709,160.367770,326.227044,492.939296,399.945594,, +D,DREGION,,3,"2023/12/15 03:25:00",1,VIC1,0,98.00594,0,98.00594,0,0,3969.69,9,4499.5,0,529.8,0,,,87,,,,,,,,92,,,,,,,,77,,,,,,,,99,,,,,,,,89,,,,,,,,97,,,,,,-4.11443,7339.49696,383,3988.60791,3992.3,,59,,,,43,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.49,0.49,0,7.86,7.86,0,0.14,0.14,0,0.38,0.38,0,0,0,0,3.76,3.76,0,574,522,506,62,378,613,501,497.164001,, +D,DREGION,,3,"2023/12/15 03:30:00",1,NSW1,0,97.30663,0,97.30663,0,0,7017.58,6,7492.4,40,434.82,0,,,64.68,,,,,,,,121,,,,,,,,107,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,0,11754.39961,181,7019.99121,7063.29,,82,,,,107,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0,376,381,643,308.274603,417,531,473,411.220275,, +D,DREGION,,3,"2023/12/15 03:30:00",1,QLD1,0,104.26045,0,104.26045,0,0,6242.14,3,5959.19,0,-282.95,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,98,,,,,,,,141,,,,,,2.15826,9718.33363,125,6242.12207,6247.06,,0,,,,41,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0,322,431.333333,207,252,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:30:00",1,SA1,0,110.08612,0,110.08612,0,0,1155.32,-2,665.21,0,-490.11,0,,,49,,,,,,,,52,,,,,,,,44,,,,,,,,127.73,,,,,,,,170.52,,,,,,,,143.4,,,,,,-0.55213,2274.21385,362,1173.65759,1166.96,,44,,,,0,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0,271,283,269,63.484790,231,239,239,355,, +D,DREGION,,3,"2023/12/15 03:30:00",1,TAS1,0,98.18,0,98.18,0,0,1029.31,2,814.87,0,-214.44,0,,,0,,,,,,,,81.46,,,,,,,,29.13,,,,,,,,114.43,,,,,,,,164.43,,,,,,,,146.54,,,,,,-1.43505,2264.22306,0,1028.74463,1029.31,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.38,0.38,0,7.11,7.11,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,194.765332,322.497802,201.531231,65.208326,127.275283,292.078414,458.676457,325.086092,, +D,DREGION,,3,"2023/12/15 03:30:00",1,VIC1,0,95.31556,0,95.31556,0,0,3923.89,8,4522.35,0,598.46,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,74,,,,,,,,79,,,,,,,,83,,,,,,10.69667,7322.35464,383,3931.75024,3947.41,,34,,,,22,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,9.42679,9.42679,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.71,3.71,0,584,540,519,50,378,613,501,497.1875,, +D,DREGION,,3,"2023/12/15 03:35:00",1,NSW1,0,100,0,100,0,0,7119.04,10,7529.89,0,410.85,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,121,,,,,,,,106,,,,,,,,104,,,,,,5.37956,11750.27351,181,7135.51221,7120.77,,96,,,,86.71,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,376,381,643,242.167625,413,527,469,484.737462,, +D,DREGION,,3,"2023/12/15 03:35:00",1,QLD1,0,105.82836,0,105.82836,0,0,6180.17,-4,5981.13,0,-199.03,0,,,45,,,,,,,,53.73,,,,,,,,45,,,,,,,,25,,,,,,,,105.18,,,,,,,,141,,,,,,-0.16722,9723.39613,125,6187.10059,6183.04,,0,,,,41.29,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,322,431.333333,207,250.8169,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:35:00",1,SA1,0,114.48189,0,114.48189,0,0,1165.54,-2,666.01,0,-499.53,0,,,50,,,,,,,,50,,,,,,,,42,,,,,,,,138.98,,,,,,,,171,,,,,,,,134.56,,,,,,0.97398,2276.01178,362,1178.75562,1177.66,,34,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,304,311,297,110.851470,231,239,239,357,, +D,DREGION,,3,"2023/12/15 03:35:00",1,TAS1,0,101.34889,0,101.34889,0,0,1049.76,2,841.88,0,-207.88,0,,,12.18,,,,,,,,131,,,,,,,,86.8,,,,,,,,105.53,,,,,,,,157.88,,,,,,,,156.51,,,,,,-2.52497,2257.08058,0,1050.28943,1049.76,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.38,0.38,0,0.39,0.39,0,7.12,7.12,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,3.5,3.5,0,194.765332,288.509494,167.382601,51.299790,160.367770,326.227044,492.939296,216.406657,, +D,DREGION,,3,"2023/12/15 03:35:00",1,VIC1,0,98.63587,0,98.63587,0,0,3917.65,7,4453.55,0,535.9,0,,,30,,,,,,,,30,,,,,,,,30,,,,,,,,73,,,,,,,,79,,,,,,,,83,,,,,,21.1295,7310.55264,383,3915.56982,3941.23,,30,,,,31,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.39,0.39,0,0.38,0.38,0,0.71,0.71,0,580,537,515,49,352,592,475,470.566467,, +D,DREGION,,3,"2023/12/15 03:40:00",1,NSW1,0,101.29515,0,101.29515,0,0,7086.41,17,7538.63,0,452.22,0,,,114,,,,,,,,154,,,,,,,,140,,,,,,,,120,,,,,,,,106,,,,,,,,104,,,,,,12.40138,11749.62552,181,7060.3999,7089.21,,69,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,376,381,642,270.335273,440,554,496,485.739333,, +D,DREGION,,3,"2023/12/15 03:40:00",1,QLD1,0,107.91888,0,107.91888,0,0,6248.5,0,6022.27,0,-226.22,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,124,,,,,,,,141,,,,,,-2.95953,9756.26191,125,6254.92285,6252.02,,0,,,,48,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,352,461.333333,207,246,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:40:00",1,SA1,0,116.06214,0,116.06214,0,0,1166.86,-1,666.42,0,-500.44,0,,,61.06,,,,,,,,65,,,,,,,,57,,,,,,,,139.96,,,,,,,,150.83,,,,,,,,122.47,,,,,,0.11955,2276.41697,362,1180.17041,1179.02,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,271,283,269,77,244,252,252,355,, +D,DREGION,,3,"2023/12/15 03:40:00",1,TAS1,0,103.29171,0,103.29171,0,0,1051.7,2,828.93,0,-222.77,0,,,0,,,,,,,,96.58,,,,,,,,43.75,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-2.46821,2244.12557,0,1052.16553,1051.7,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,194.765332,288.509494,167.382601,51.000001,160.367770,326.227044,492.939296,332.122337,, +D,DREGION,,3,"2023/12/15 03:40:00",1,VIC1,0,100,0,100,0,0,3920.44,8,4460.28,0,539.84,0,,,26,,,,,,,,31,,,,,,,,31,,,,,,,,73,,,,,,,,80,,,,,,,,83,,,,,,5.41287,7301.48957,383,3933.07153,3944.58,,81,,,,24,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,0.71,0.71,0,581,540,517,43,330,569,462,476.818360,, +D,DREGION,,3,"2023/12/15 03:45:00",1,NSW1,0,100,0,100,0,0,7061.74,16,7553.34,0,491.6,0,,,66.15,,,,,,,,126,,,,,,,,112,,,,,,,,121,,,,,,,,108,,,,,,,,104,,,,,,9.13658,11779.93846,181,7039.11279,7063.78,,127,,,,87,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,378,383,645,275.100614,412,526,468,456.100197,, +D,DREGION,,3,"2023/12/15 03:45:00",1,QLD1,0,105.84327,0,105.84327,0,0,6251.2,3,6042.88,0,-208.32,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,124,,,,,,,,141,,,,,,0.50833,9777.5695,125,6250.80078,6254.29,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,352,461.333333,207,246,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:45:00",1,SA1,0,115.58162,0,115.58162,0,0,1179.21,-1,671.02,0,-508.18,0,,,47,,,,,,,,63,,,,,,,,57,,,,,,,,137.92,,,,,,,,151.76,,,,,,,,120.4,,,,,,1.74372,2281.02259,362,1191.3147,1191.76,,10,,,,12,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,271,281,267,77,244,250,250,355,, +D,DREGION,,3,"2023/12/15 03:45:00",1,TAS1,0,103.13225,0,103.13225,0,0,1056.85,2,815.16,0,-241.69,0,,,0,,,,,,,,64.63,,,,,,,,10.7,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-3.09207,2230.36272,0,1057.94202,1056.85,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,194.765332,288.509494,167.382601,51.000001,160.367770,326.227044,492.939296,384.966322,, +D,DREGION,,3,"2023/12/15 03:45:00",1,VIC1,0,99.58962,0,99.58962,0,0,3939.17,9,4448.98,0,509.8,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,72,,,,,,,,75,,,,,,,,83,,,,,,8.7801,7282.97552,383,3948.48999,3964.71,,23,,,,25,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.2,1.2,0,581,533,514,42,314,437,391,410.156250,, +D,DREGION,,3,"2023/12/15 03:50:00",1,NSW1,0,100.47471,0,100.47471,0,0,7126.34,18,7565.44,0,439.11,0,,,67.49,,,,,,,,127,,,,,,,,113,,,,,,,,121,,,,,,,,110,,,,,,,,104,,,,,,8.27806,11771.44373,181,7101.36035,7126.85,,102,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,380,385,647,254.495542,437,551,493,482.661626,, +D,DREGION,,3,"2023/12/15 03:50:00",1,QLD1,0,105.69581,0,105.69581,0,0,6221.6,5,6056.89,0,-164.72,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,28,,,,,,,,123,,,,,,,,141,,,,,,-1.00187,9785.36644,125,6219.70361,6223.81,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,352,461.333333,207,246,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:50:00",1,SA1,0,116.05715,0,116.05715,0,0,1175.52,0,672.68,0,-502.84,0,,,47,,,,,,,,50,,,,,,,,42,,,,,,,,117.51,,,,,,,,151.21,,,,,,,,124.85,,,,,,0.61579,2282.68216,362,1187.31274,1187.8,,24,,,,13,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,269,280,266,77,241,249,249,355,, +D,DREGION,,3,"2023/12/15 03:50:00",1,TAS1,0,103.82275,0,103.82275,0,0,1055.01,2,802.87,0,-252.15,0,,,0,,,,,,,,77.84,,,,,,,,24.51,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,168.53,,,,,,-2.88914,2217.96581,0,1055.90063,1055.01,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,3.5,3.5,0,194.765332,288.509494,167.382601,51.000001,160.367770,326.227044,492.939296,370.876336,, +D,DREGION,,3,"2023/12/15 03:50:00",1,VIC1,0,100,0,100,0,0,3944.59,9,4465.43,0,520.85,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,94,,,,,,,,79,,,,,,,,83,,,,,,5.29987,7289.17458,383,3957.48926,3969.84,,34,,,,26,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,8.23,8.23,0,0.38,0.38,0,0.38,0.38,0,0.01,0.01,0,1.5,1.5,0,582,539,517,44,378,613,501,489.347717,, +D,DREGION,,3,"2023/12/15 03:55:00",1,NSW1,0,93.89,0,93.89,0,0,7057.86,15,7576.02,0,518.16,0,,,52.29,,,,,,,,127,,,,,,,,113,,,,,,,,95,,,,,,,,80,,,,,,,,78,,,,,,0,11775.323,181,7045.78906,7059.27,,131,,,,84.19,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0,350.000640,354.000640,616.000640,224.003210,413,527,469,513.918527,, +D,DREGION,,3,"2023/12/15 03:55:00",1,QLD1,0,99.33024,0,99.33024,0,0,6215.1,4,6023.84,0,-191.26,0,,,45,,,,,,,,45,,,,,,,,45,,,,,,,,25,,,,,,,,123,,,,,,,,141,,,,,,0,9810.89118,125,6213.47266,6217.77,,0,,,,47.81,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0,352,461.333333,207,246,254,377,250,230,, +D,DREGION,,3,"2023/12/15 03:55:00",1,SA1,0,109.36899,0,109.36899,0,0,1170.23,0,672.55,0,-497.68,0,,,58,,,,,,,,65,,,,,,,,57,,,,,,,,126.49,,,,,,,,156.5,,,,,,,,154.81,,,,,,-0.37905,2281.54995,362,1185.42908,1182.24,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0,271,283,268,68.1873,244,252,252,355,, +D,DREGION,,3,"2023/12/15 03:55:00",1,TAS1,0,98.19995,0,98.19995,0,0,1051.4,2,778.4,0,-273,0,,,0,,,,,,,,58.87,,,,,,,,9.84,,,,,,,,124.81,,,,,,,,177.37,,,,,,,,159.06,,,,,,-2.53011,2212.98638,0,1051.93311,1051.4,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,7.15,7.15,0,0.38,0.38,0,0.38,0.38,0,0,0,0,3.5,3.5,0,194.765332,307.702352,186.665991,50.999998,141.680774,306.943654,473.591413,371.257032,, +D,DREGION,,3,"2023/12/15 03:55:00",1,VIC1,0,94.23899,0,94.23899,0,0,3955.55,10,4441.1,0,485.56,0,,,87,,,,,,,,92,,,,,,,,92,,,,,,,,89,,,,,,,,79,,,,,,,,83,,,,,,0,7289.10284,383,3974.55835,3981.22,,19,,,,27,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.39,0.39,0,0.39,0.39,0,11.68,11.68,0,0.38,0.38,0,0.38,0.38,0,0,0,0,0.72,0.72,0,578,534,513,44,378,613,501,489.656250,, +D,DREGION,,3,"2023/12/15 04:00:00",1,NSW1,0,93.91159,0,93.91159,0,0,7053.98,14,7587.87,0,533.89,0,,,109,,,,,,,,127,,,,,,,,113,,,,,,,,95,,,,,,,,83.4,,,,,,,,78,,,,,,-5.97607,11773.873,181,7048.31055,7056.15,,122,,,,85,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,350.000640,354.000640,616.000640,236.780525,413,527,469,521.380241,, +D,DREGION,,3,"2023/12/15 04:00:00",1,QLD1,0,99.42,0,99.42,0,0,6249.7,1,6049.07,8,-208.63,0,,,47,,,,,,,,47,,,,,,,,47,,,,,,,,26,,,,,,,,122,,,,,,,,121,,,,,,-11.11702,9817.16785,125,6262.7207,6260.82,,0,,,,46,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,352,461.333333,207,272,254,377,250,222,, +D,DREGION,,3,"2023/12/15 04:00:00",1,SA1,0,109.41321,0,109.41321,0,0,1175.23,1,670.26,0,-504.97,0,,,52,,,,,,,,65,,,,,,,,57,,,,,,,,142.61,,,,,,,,172,,,,,,,,162,,,,,,0.97331,2279.26481,362,1185.51172,1187.61,,10,,,,11,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,306,312,297,108.903960,246,254,254,357,, +D,DREGION,,3,"2023/12/15 04:00:00",1,TAS1,0,98.38402,0,98.38402,0,0,1063.55,3,787.74,0,-275.81,0,,,0,,,,,,,,121.66,,,,,,,,68.63,,,,,,,,105.53,,,,,,,,158.18,,,,,,,,158.93,,,,,,-1.11468,2202.84432,0,1061.66736,1063.55,,50,,,,50,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,7.48,7.48,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,3.5,3.5,0,194.765332,288.509494,167.382601,50.000002,160.367770,326.227044,492.939296,277.288990,, +D,DREGION,,3,"2023/12/15 04:00:00",1,VIC1,0,94.27931,0,94.27931,0,0,3966.59,12,4466.39,0,499.8,0,,,38.23,,,,,,,,31,,,,,,,,31,,,,,,,,95,,,,,,,,84,,,,,,,,99.65,,,,,,-7.45028,7297.39085,383,3990.6355,3993.21,,28,,,,28,,,,,,,,,,,,,,,,,,,0.39,0.39,0,0.5,0.5,0,0.39,0.39,0,11,11,0,0.38,0.38,0,0.38,0.38,0,0.2,0.2,0,0.71,0.71,0,582,533,515,45,339,457,406,420.254882,, +I,DUNIT,,2,SETTLEMENTDATE,RUNNO,DUID,INTERVENTION,DISPATCHMODE,AGCSTATUS,INITIALMW,TOTALCLEARED,RAMPDOWNRATE,RAMPUPRATE,LOWER5MIN,LOWER60SEC,LOWER6SEC,RAISE5MIN,RAISE60SEC,RAISE6SEC,MARGINAL5MINVALUE,MARGINAL60SECVALUE,MARGINAL6SECVALUE,MARGINALVALUE,VIOLATION5MINDEGREE,VIOLATION60SECDEGREE,VIOLATION6SECDEGREE,VIOLATIONDEGREE,LOWERREG,RAISEREG,AVAILABILITY,RAISE6SECFLAGS,RAISE60SECFLAGS,RAISE5MINFLAGS,RAISEREGFLAGS,LOWER6SECFLAGS,LOWER60SECFLAGS,LOWER5MINFLAGS,LOWERREGFLAGS,RAISEREGAVAILABILITY,RAISEREGENABLEMENTMAX,RAISEREGENABLEMENTMIN,LOWERREGAVAILABILITY,LOWERREGENABLEMENTMAX,LOWERREGENABLEMENTMIN +D,DUNIT,,2,"2023/12/14 04:05:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ADPBA1L,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ARWF1,0,0,0,29.8,29.5549,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,29.5549,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,17,14,13,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,4,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASSEL1,0,0,0,0,0,0,0,7,7,7,7,7,7,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,1,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASSSN1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,58.546,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ASVIEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BALDHWF1,0,0,0,40.814,41.098,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,41.098,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BANGOWF1,0,0,0,120.9955,121.498,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,121.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BANGOWF2,0,0,0,74.79767,74.798,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,74.798,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BBATRYL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BBATTERY,0,0,1,-0.16208,0,600,600,0,0,0,0,27,3.96085,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BLOWERNG,0,0,1,62.8,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BLUFF1,0,0,0,29.3,29.914,600,600,0,0,0,0,0,0,,,,,,,,,0,0,29.914,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOCORWF1,0,0,0,107.8,107.83,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,107.83,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BODWF1,0,0,0,10.38034,10.74,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,10.74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOWWBA1L,0,0,0,0.002,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRYB1WF1,0,0,0,80.16785,79.106,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,79.106,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,11,11,11,,,,,,,,,0,0,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BULBESL1,0,0,1,0.03,3,240,240,0,0,0,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BULGANA1,0,0,0,53.07,50.10934,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,50.10934,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BW01,0,0,1,545.87012,553.37984,180,210.12,0,0,0,0,0,0,,,,,,,,,1.0001,10,660,0,0,0,1,0,0,0,1,17.50973,660,331.14557,17.50973,660,331.14557 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BW02,0,0,1,559.93286,569.94507,180,240,0,0,0,0,0,0,,,,,,,,,5,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,333.9906,20.01221,649.992,333.9906 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BW03,0,0,1,561.34888,571.36108,180,240,0,0,0,0,0,0,,,,,,,,,5,10,685,0,0,0,1,0,0,0,1,20.01221,685,331.72464,20.01221,685,331.72464 +D,DUNIT,,2,"2023/12/14 04:05:00",1,BW04,0,0,1,550.63098,570.63098,180,240,0,0,0,0,0,0,,,,,,,,,5,15,670,0,0,0,1,0,0,0,1,75,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CALL_B_1,0,0,1,258.80002,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CALL_B_2,0,0,1,318.89999,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CAPBES1L,0,0,0,0.17,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CATHROCK,0,0,0,24.4,23.592,840,840,0,0,0,0,0,0,,,,,,,,,0,0,23.592,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CBWWBA1L,0,0,0,0.003,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CG3,0,4,0,151.51019,152,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CHYTWF1,0,0,0,16.7,16.44,720,720,0,0,0,0,0,0,,,,,,,,,0,0,16.44,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CLEMGPWF,0,0,0,23.33934,7.05708,660,660,0,0,0,0,0,0,,,,,,,,,0,0,21.31465,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CNUNDAWF,0,0,0,20.22359,19.523,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19.523,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,COLWF01,0,0,0,125.60311,128.44289,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,128.44289,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,COOPGWF1,0,0,0,215.85001,218.09,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,218.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CROOKWF2,0,0,0,59.85503,59.574,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,59.574,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CROWLWF1,0,0,0,22.1225,19.36682,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,19.36682,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CRURWF1,0,0,0,33.99596,33.899,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,33.899,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,CTHLWF1,0,0,0,22.39109,21.09748,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,21.09748,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DALNTH01,0,0,0,0,0,6000,6000,0,0,0,5,24,23,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DALNTHL1,0,0,1,0.00763,0,6000,6000,0,7,7,0,0,0,,,,,,,,,0,0,7,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DDPS1,0,0,1,254.14905,255,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,320.59454,228,0,320.59454,228 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DPNTBG1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DPNTBL1,0,0,1,0.07028,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRSHVN01,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRSHVS01,0,0,0,0,0,0,0,0,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,13,12,12,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DULAWF1,0,0,0,127,126.4,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,126.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DUNDWF1,0,0,0,134.19,134.936,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,134.936,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DUNDWF2,0,0,0,32.4,31.753,600,600,0,0,0,0,0,0,,,,,,,,,0,0,31.753,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,DUNDWF3,0,0,0,93.36,92.021,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,92.021,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ELAINWF1,0,0,0,44.53,44.68948,960,960,0,0,0,0,0,0,,,,,,,,,0,0,44.68948,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ER01,0,0,1,381.17038,356.26003,298.92,300,0,6.26003,0,0,0,0,,,,,,,,,0,5,700,1,1,1,1,1,1,1,1,25,699.99847,350,24.91035,699.99847,350 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ER02,0,0,1,210.53789,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.51347,0,700,210.51347 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ER03,0,0,1,382.00046,357.25795,296.91,297.46,0,7.25795,0,0,0,0,,,,,,,,,0,5,640,1,1,1,1,1,1,1,1,24.78828,639.45068,350,24.7425,639.45068,350 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ER04,0,0,1,351.82422,352,297.83,298.92,0,0,0,0,0,0,,,,,,,,,2,5,650,1,1,1,1,1,1,1,1,24.91035,650,350,24.8188,650,350 +D,DUNIT,,2,"2023/12/14 04:05:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,FLYCRKWF,0,0,0,2.72,2.79,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,2.79,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GANNBG1,0,0,1,0,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GANNBL1,0,0,1,0.61623,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GORDON,0,0,1,12.14008,12,1800,1800,0,0,0,58,72,41,,,,,,,,,0,50,345,1,1,1,1,1,1,1,1,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GRANWF1,0,0,0,100.62,99.58792,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,99.58792,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE2,0,0,1,111.36426,111,290.13,290.13,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE3,0,0,1,111.72656,111,287.33,287.33,0,0,0,0,0,0,,,,,,,,,0,5,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE4,0,0,1,111.47363,111,287.84,287.84,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSTONE6,0,0,1,200.51855,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,280,190,20,280,190 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GULLRWF1,0,0,0,135.93294,133.75572,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,133.75572,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GULLRWF2,0,0,0,92.70259,94.80166,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,94.80166,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HALLWF1,0,0,0,26.63,25,600,600,0,0,0,0,0,0,,,,,,,,,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HALLWF2,0,0,0,33.19,33.04,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HBESSG1,0,0,1,0,0,1800,1800,0,0,0,2,6,31,,,,,,,,,0,0,7,1,1,1,1,0,0,0,1,7,150,0,7,150,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HBESSL1,0,0,1,1.9,0,1800,1800,61,76,61,0,0,0,,,,,,,,,0,0,114,0,0,0,1,1,1,1,1,113,150,0,113,150,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HDWF1,0,0,1,78.4,71.9822,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,79.87,0,0,0,0,0,0,0,0,0,79.87,15,0,79.87,15 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HDWF2,0,0,1,63.2,67.71,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,67.71,0,0,0,0,0,1,1,0,0,67.1,15,0,67.1,15 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HDWF3,0,0,1,72.2,76.92215,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,79.93,0,0,0,0,0,0,0,0,0,76.2,15,0,76.2,15 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,85,85,85,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,60,60,0,50,60,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HPRL1,0,0,1,3.8,8,960,960,0,27,0,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HUMEV,0,0,0,14.5,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HVWWBA1L,0,0,0,0.003,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KABANWF1,0,0,0,87.301,88.298,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,88.298,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KAREEYA1,0,4,1,21.5225,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KAREEYA2,0,4,1,21.5625,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KAREEYA3,0,4,1,21.525,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KAREEYA4,0,4,1,21.5225,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KEPWF1,0,0,0,30.17,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KIATAWF1,0,0,0,25.4,23.9,180,420,0,0,0,0,0,0,,,,,,,,,0,0,23.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KPP_1,0,0,1,755.13818,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LADBROK1,0,0,0,-0.01,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LBBG1,0,0,1,0,0,300,300,0,0,0,13,0,13,,,,,,,,,0,11,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LBBL1,0,0,1,0.3,0,300,300,13,0,13,0,0,0,,,,,,,,,11,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LGAPWF1,0,0,0,33.15,33.51,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.51,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LGAPWF2,0,0,0,23.86,24.315,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.315,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LI_WY_CA,0,0,1,46.10146,53,1680,1680,0,0,0,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LKBONNY1,0,0,0,28.04316,26.882,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,26.882,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LKBONNY2,0,0,0,55.38816,54.925,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,54.925,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LKBONNY3,0,0,0,11.8901,11.499,480,480,0,0,0,0,0,0,,,,,,,,,0,0,11.499,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LOYYB1,0,0,1,567.66833,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50.15625,570,319.5,50.15625,570,319.5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LOYYB2,0,0,1,569.92407,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50.15625,570,350.625,50.15625,570,350.625 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LYA1,0,0,1,515,510,300,300,5,10,5,0,0,0,,,,,,,,,15,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LYA3,0,0,1,557,560,300,300,5,10,5,0,0,0,,,,,,,,,15,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:05:00",1,LYA4,0,0,1,547,550,300,300,5,10,6.83366,0,0,0,,,,,,,,,15,0,550,1,1,1,1,1,1,1,1,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MCKAY1,0,0,0,0.02,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MEADOWBK,0,0,1,29.98042,30,480,60,0,0,0,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MERCER01,0,0,0,39.4,37.5,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,37.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MEWF1,0,0,0,169.24672,165.42813,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,165.42813,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MOORAWF1,0,0,0,0,0,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MORTLK11,0,4,1,269,204,780,780,0,0,0,0,0,0,,,,,,,,,0,0,115,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MP1,0,0,1,348.13763,363.13763,180,180,0,68.35072,40,0,20,0,,,,,,,,,0,20,730,1,1,1,1,1,1,1,1,60,514.74176,246.15854,60,514.74176,246.15854 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.00191,700,220,25.00191,700,220 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MPP_1,0,0,1,425.38351,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MPP_2,0,0,1,403.88315,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MTGELWF1,0,0,0,99.77111,100,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,25.403,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,4,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MUSSELR1,0,0,0,90.7,87.4,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,87.4,0,0,0,0,0,0,0,0,0,87.4,50,0,87.4,50 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MUWAWF1,0,0,0,97.75,94.46,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,94.46,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MUWAWF2,0,0,0,119.5,108.61318,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,108.61318,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NBHWF1,0,0,0,62,63.1,600,600,0,0,0,0,0,0,,,,,,,,,0,0,63.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NPS,0,0,0,0,0,6.75,6.75,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OAKLAND1,0,0,0,30.7,31.8,600,600,0,0,0,0,0,0,,,,,,,,,0,0,31.8,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,180.94,145,0,180.94,145 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PAREPW1,0,0,0,58.3,69.887,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,69.887,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PIBESSG1,0,0,1,0,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.303,0,1,4.303,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PIBESSL1,0,0,1,0.126,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.303,0,4,4.303,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,POAT110,0,0,1,81.62337,98,960,960,0,0,0,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:05:00",1,POAT220,0,0,1,119.31008,120,960,1200,0,0,0,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PPCCGT,0,0,1,165.49889,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,1,1,0,1,1,1,0,1,49.85147,241,165,49.85147,241,165 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QBYNBG1,0,0,1,0.32649,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QBYNBL1,0,0,1,0,0,120,120,5,5,5,0,0,0,,,,,,,,,5,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:05:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,59,1,1,1,1,0,0,0,1,59,59.99872,0,59,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RESS1L,0,0,1,6.22528,5,720,720,0,34,34,0,0,0,,,,,,,,,0,0,59,0,0,0,0,1,1,1,1,0,59.99988,0,59,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RIVNBG2,0,0,1,0.14505,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RIVNBL2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,RYEPARK1,0,0,0,92.94987,92.279,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,92.279,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SALTCRK1,0,0,0,26.77,26.364,660,660,0,0,0,0,0,0,,,,,,,,,0,0,26.364,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SAPHWF1,0,0,0,91.5404,92.126,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,92.126,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SITHE01,0,0,0,0.14381,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SMCSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNOWNTH1,0,0,0,57.3,55.2,540,300,0,0,0,0,0,0,,,,,,,,,0,0,55.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNOWSTH1,0,0,0,70,73.75555,480,240,0,0,0,0,0,0,,,,,,,,,0,0,73.75555,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNOWTWN1,0,0,0,67.97825,66.47,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,66.47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STAN-1,0,0,0,185.93501,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.99966,185,0,364.99966,185 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STAN-2,0,0,1,197.52229,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,6,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,361.89777,170.00249 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STAN-3,0,0,1,159.15863,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,6,270,1,1,0,1,1,1,1,1,14.99679,260.27826,150,14.99679,260.27826,150 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STAN-4,0,0,1,158.95354,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,265.2131,156.42844,14.99679,265.2131,156.42844 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STARHLWF,0,0,0,19.99417,19.99417,0,420,0,0,0,0,0,0,,,,,,,,,0,0,19.99417,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STOCKYD1,0,0,0,165.72,163.7,6120,6120,0,0,0,0,0,0,,,,,,,,,0,0,163.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,STWF1,0,0,0,56.97047,57.498,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,57.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SUNRSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SUNTPSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,SWAN_E,0,0,0,-0.58,0,903.66,1.97,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0.16406,355,95,75.30469,355,95 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TALWA1,0,0,1,191,190,480,480,0,0,0,0,0,0,,,,,,,,,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TALWB1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARALGA1,0,0,0,0,0,180,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARONG#1,0,0,1,269.70001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARONG#2,0,0,1,268.80002,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARONG#3,0,0,1,269.10001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,4,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARONG#4,0,0,1,267.5,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TARRALEA,0,0,0,67.9,67.9,0,0,0,0,0,0,0,0,,,,,,,,,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TB2BG1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TB2BL1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TB2SF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TBSF1,0,0,0,0,0,1140,1140,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TIBG1,0,0,1,0,0,3000,3000,0,0,0,20,20,20,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TIBL1,0,0,1,1.35,0,3000,3000,20,20,20,0,0,0,,,,,,,,,20,0,250,0,0,0,1,1,1,1,1,250,250,0,250,250,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TNPS1,0,0,1,440.5,443,240,240,0,0,0,0,0,0,,,,,,,,,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TORRB1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,40,40,0,40,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TORRB2,0,0,1,40,40,300,300,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TORRB3,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TORRB4,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,40 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TREVALLN,0,0,0,0,5,60,60,0,0,0,0,0,0,,,,,,,,,0,0,99,0,0,4,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TRIBUTE,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TUMUT3,0,0,1,0,0,6000,21600,0,0,0,10,0,0,,,,,,,,,0,0,1500,0,0,1,4,0,0,0,4,10,1250,120,20,1250,120 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TUNGATIN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,84,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TVCC201,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,TVPP104,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,UPPTUMUT,0,0,1,150.63417,156.90988,1200,1800,20,0,0,0,0,0,,,,,,,,,10,12,642,0,0,1,1,0,0,1,1,12,642,100,20,642,80 +D,DUNIT,,2,"2023/12/14 04:05:00",1,URANQ11,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,URANQ12,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,URANQ13,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,URANQ14,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VBBG1,0,0,1,0,0,3600,3600,0,0,0,12.16595,17.7889,42,,,,,,,,,0,7,45,1,1,1,1,0,0,0,1,45,45,0,45,45,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VBBL1,0,0,1,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,240,0,0,0,1,1,1,1,1,150,240,0,150,240,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VENUS1,0,0,0,0,0,0,0,0,0,0,11,8,7,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VP5,0,0,1,382.65329,412.65329,360,360,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,30.12177,654.46332,250,30.12177,654.46332,250 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VP6,0,0,1,383.60547,413.60547,360,360,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,30.12177,528.14111,250,30.12177,528.14111,250 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS2,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS3,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS4,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS5,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VPGS6,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSNEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSNSN1V1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSQHT1V1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSSAE1V1,0,0,0,0,0,0,0,3,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSSEL1V1,0,0,0,0,0,0,0,6,6,6,6,6,6,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSSSE1V1,0,0,0,0,0,0,0,0,2,2,2,2,2,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSSSH1S1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,VSVEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,W/HOE#1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:05:00",1,W/HOE#2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WAGGNSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WALGRVG1,0,0,1,0,0,600,600,0,0,0,27,0,27,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,50,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WALGRVL1,0,0,1,0.03258,0,600,600,27,0,27,0,0,0,,,,,,,,,20,0,47,0,0,0,1,1,1,1,1,47,47,0,47,47,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WANDBG1,0,0,1,0.92875,0,1200,1200,0,0,0,47,47,47,,,,,,,,,0,0,94,1,1,1,1,0,0,0,0,70,94,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WANDBL1,0,0,1,0,0,1200,1200,47,47,47,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,30,75,0,72,75,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WANDSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WARWSF1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WARWSF2,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WATERLWF,0,0,0,17.9,91.74202,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,116.73956,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WDGPH1,0,0,0,0,0,4800,4800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,59 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WELLSF1,0,0,0,0,0,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WEMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WGWF1,0,0,0,100.6,50.6,600,600,0,0,0,0,0,0,,,,,,,,,0,0,100.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WHITSF1,0,0,0,0,0.22603,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0.22603,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WINTSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WKIEWA1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WKIEWA2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WOODLWN1,0,0,0,34.27347,34.159,600,600,0,0,0,0,0,0,,,,,,,,,0,0,34.159,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WOOLGSF1,0,0,0,0,0,2112,2112,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WPWF,0,0,0,16.76,19.203,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19.203,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WRSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WRWF1,0,0,0,10.80766,11.406,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,11.406,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WSTWYSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,WYASF1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YABULU,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YABULU2,0,0,0,0,0,480,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YARANSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YARWUN_1,0,0,0,116.93,116.93,0,0,0,0,0,0,0,0,,,,,,,,,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YATSF1,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YENDWF1,0,0,0,39.08,36.97108,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,36.97108,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YWPS1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,365,250,0,365,250 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YWPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,15,365,250,15,365,250 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YWPS3,0,0,1,358.82404,360,180,180,0,0,0,0,0,0,,,,,,,,,0,0,360,1,1,0,1,1,1,1,1,15,360,280,15,360,280 +D,DUNIT,,2,"2023/12/14 04:05:00",1,YWPS4,0,0,1,349.79114,350,180,180,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,0,1,1,1,1,1,15,350,280,20,350,280 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ADPBA1L,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ARWF1,0,0,0,29.2,28.54396,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,28.54396,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,17,14,13,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,4,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASSEL1,0,0,0,0,0,0,0,8,8,8,8,8,8,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,1,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASSSN1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,58.33,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ASVIEL2,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BALDHWF1,0,0,0,42.469,42.73,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,42.73,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BANGOWF1,0,0,0,119.29626,118.798,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,118.798,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BANGOWF2,0,0,0,77.19974,75.799,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,75.799,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BBATRYL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BBATTERY,0,0,1,2.07978,0,600,600,0,0,0,0,4.35039,0,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BLOWERNG,0,0,1,62.8,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BLUFF1,0,0,0,25.8,34.119,600,600,0,0,0,0,0,0,,,,,,,,,0,0,34.119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOCORWF1,0,0,0,107.8,107.4,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,107.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BODWF1,0,0,0,10.60222,11.05,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,11.05,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOWWBA1L,0,0,0,0.003,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRYB1WF1,0,0,0,103.27001,110.924,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,110.924,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,11,11,11,,,,,,,,,0,1,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BULBESL1,0,0,1,2.12,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BULGANA1,0,0,0,43,43.31092,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,43.31092,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BW01,0,0,1,561.17798,568.68771,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,660,0,0,0,1,0,0,0,1,17.50973,660,331.90088,17.50973,660,331.90088 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BW02,0,0,1,579.75739,589.76959,180,240,0,0,0,0,0,0,,,,,,,,,0,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,330,20.01221,649.992,330 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BW03,0,0,1,579.46442,589.47662,180,240,0,0,0,0,0,0,,,,,,,,,0,10,685,0,0,0,1,0,0,0,1,20.01221,685,332.00162,20.01221,685,332.00162 +D,DUNIT,,2,"2023/12/14 04:10:00",1,BW04,0,0,1,571.09027,581.10248,180,240,0,0,0,0,0,0,,,,,,,,,0,10,670,0,0,0,1,0,0,0,1,20.01221,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CALL_B_1,0,0,1,259.89999,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CALL_B_2,0,0,1,321.80002,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CAPBES1L,0,0,0,0.18,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CATHROCK,0,0,0,23.6,26.747,840,840,0,0,0,0,0,0,,,,,,,,,0,0,26.747,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CBWWBA1L,0,0,0,0.003,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CG3,0,4,0,151.88739,152,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CHYTWF1,0,0,0,16.04,16.15,720,720,0,0,0,0,0,0,,,,,,,,,0,0,16.15,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CLEMGPWF,0,0,0,5.97891,20.216,660,660,0,0,0,0,0,0,,,,,,,,,0,0,20.216,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CNUNDAWF,0,0,0,19.92324,19.122,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19.122,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,COLWF01,0,0,0,117.1725,111.88569,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,111.88569,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,COOPGWF1,0,0,0,219.17,218.66,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,218.66,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CROOKWF2,0,0,0,61.50424,60.673,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,60.673,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CROWLWF1,0,0,0,19.1488,18.11888,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,18.11888,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CRURWF1,0,0,0,25.49973,26.898,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,26.898,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,CTHLWF1,0,0,0,15.90906,15.04997,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,15.04997,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DALNTH01,0,0,0,0,0,6000,6000,0,0,0,5,24,23,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DALNTHL1,0,0,1,0.00763,0,6000,6000,7,7,7,0,0,0,,,,,,,,,0,0,7,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DDPS1,0,0,1,260.37854,310.37854,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,322.43176,228,0,322.43176,228 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DPNTBG1,0,0,1,0.05234,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DPNTBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRSHVN01,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRSHVS01,0,0,0,0,0,0,0,0,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,13,12,12,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DULAWF1,0,0,0,114.39999,111.9,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,111.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DUNDWF1,0,0,0,124.24,123.736,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,123.736,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DUNDWF2,0,0,0,30.99,29.253,600,600,0,0,0,0,0,0,,,,,,,,,0,0,29.253,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,DUNDWF3,0,0,0,84.57,81.676,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,81.676,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ELAINWF1,0,0,0,50.46,50.11321,960,960,0,0,0,0,0,0,,,,,,,,,0,0,50.11321,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ER01,0,0,1,364.22675,352,298.92,300,0,0,0,0,0,0,,,,,,,,,2,5,700,1,1,1,1,1,1,1,1,25,699.97406,350,24.91035,699.97406,350 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ER02,0,0,1,214.49301,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.51347,0,700,210.51347 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ER03,0,0,1,368.47485,352,296.73,296.91,0,0,0,0,0,0,,,,,,,,,2,5,640,1,1,1,1,1,1,1,1,24.7425,639.45068,350,24.72724,639.45068,350 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ER04,0,0,1,356.41412,352,298.19,298.92,0,0,0,0,0,0,,,,,,,,,2,5,650,1,1,1,1,1,1,1,1,24.91035,650,350,24.84932,650,350 +D,DUNIT,,2,"2023/12/14 04:10:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,FLYCRKWF,0,0,0,9.23,8.89,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,8.89,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GANNBG1,0,0,1,3.38204,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GANNBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GORDON,0,0,1,12.82856,12,1800,1800,0,0,0,58,72,40,,,,,,,,,0,50,345,1,1,1,1,1,1,1,1,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GRANWF1,0,0,0,98.5,97.0742,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,97.0742,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE2,0,0,1,113.24414,111,290.13,290.13,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE3,0,0,1,113.55859,111,287.33,287.33,0,0,0,0,0,0,,,,,,,,,0,5,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE4,0,0,1,113.52441,111,287.84,287.84,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSTONE6,0,0,1,202.26172,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,241,190,20,241,190 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GULLRWF1,0,0,0,136.18292,133.30506,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,133.30506,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GULLRWF2,0,0,0,95.9082,93.66608,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,93.66608,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HALLWF1,0,0,0,24.83,24.72,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.72,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HALLWF2,0,0,0,33.17,32.86,600,600,0,0,0,0,0,0,,,,,,,,,0,0,32.86,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HBESSG1,0,0,1,0.8,0,1800,1800,0,0,0,2,6,31,,,,,,,,,0,0,8,1,1,1,1,0,0,0,1,8,150,0,8,150,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HBESSL1,0,0,1,0,0,1800,1800,61,42,61,0,0,0,,,,,,,,,28.38928,0,119,0,0,0,1,1,1,1,1,118,150,0,118,150,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HDWF1,0,0,1,71.6,79.15,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,79.15,0,0,0,0,0,0,0,0,0,79,15,0,79,15 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HDWF2,0,0,1,67.1,68.42,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,68.42,0,0,0,0,0,1,1,0,0,68.42,15,0,68.42,15 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HDWF3,0,0,1,74.1,73.46,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,73.46,0,0,0,0,0,0,0,0,0,73.46,15,0,73.46,15 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,77.62507,85,85,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,60,60,0,50,60,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HPRL1,0,0,1,2.8,5,960,960,0,0,0,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HUMEV,0,0,0,14.7,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HVWWBA1L,0,0,0,0.005,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KABANWF1,0,0,0,88.11501,87.651,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,87.651,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KAREEYA1,0,4,1,21.6625,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KAREEYA2,0,4,1,21.7025,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KAREEYA3,0,4,1,21.495,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KAREEYA4,0,4,1,21.495,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KEPWF1,0,0,0,30.32,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KIATAWF1,0,0,0,25.4,25.9,180,420,0,0,0,0,0,0,,,,,,,,,0,0,25.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KPP_1,0,0,1,758.98199,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LADBROK1,0,0,0,-0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LBBG1,0,0,1,4.95,0,300,300,0,0,0,13,13,13,,,,,,,,,0,11,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LBBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,12,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LGAPWF1,0,0,0,33.93,35.849,600,600,0,0,0,0,0,0,,,,,,,,,0,0,35.849,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LGAPWF2,0,0,0,19.4,19.82,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19.82,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LI_WY_CA,0,0,1,53.23999,53,1680,1680,0,51,0,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LKBONNY1,0,0,0,24.02424,25.542,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,25.542,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LKBONNY2,0,0,0,52.8874,52.391,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,52.391,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LKBONNY3,0,0,0,12.8949,13.397,480,480,0,0,0,0,0,0,,,,,,,,,0,0,13.397,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LOYYB1,0,0,1,572.55573,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,0,0,0,0,0,0,0,0,50,570,319.5,50,570,319.5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LOYYB2,0,0,1,574.05951,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,0,0,0,0,0,0,0,0,50.3125,570,350.25,50.3125,570,350.25 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LYA1,0,0,1,518,510,300,300,5,10,10,0,0,0,,,,,,,,,10,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LYA3,0,0,1,559,560,300,300,5,10,10,0,0,0,,,,,,,,,10,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:10:00",1,LYA4,0,0,1,555,550,300,300,0,0,0,0,0,0,,,,,,,,,0,0,550,0,0,0,0,4,4,4,4,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MCKAY1,0,0,0,0.02,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MEADOWBK,0,0,1,30.03758,30,480,60,0,0,0,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MERCER01,0,0,0,48.1,44.3,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,44.3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MEWF1,0,0,0,166.24025,164.90278,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,164.90278,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MOORAWF1,0,0,0,0,0,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MORTLK11,0,4,1,219,154,780,780,0,0,0,0,0,0,,,,,,,,,0,0,115,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MP1,0,0,1,377.11758,392.11758,180,180,0,60,50,0,20,0,,,,,,,,,0,20,730,1,1,1,1,1,1,1,1,60,516.08453,247.86755,60,516.08453,247.86755 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.01717,700,220,25.01717,700,220 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MPP_1,0,0,1,426.13123,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MPP_2,0,0,1,405.48538,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MTGELWF1,0,0,0,99.68261,99.44949,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,99.44949,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,25.946,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,4,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MUSSELR1,0,0,0,89.59999,90.3,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,90.3,0,0,0,0,0,0,0,0,0,87.81,50,0,87.81,50 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MUWAWF1,0,0,0,90.15,92.83,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,92.83,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MUWAWF2,0,0,0,116.7,104.86937,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,104.86937,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NBHWF1,0,0,0,63,62.7,600,600,0,0,0,0,0,0,,,,,,,,,0,0,62.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NPS,0,0,0,0,0,6,6,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OAKLAND1,0,0,0,29.2,31.9,600,600,0,0,0,0,0,0,,,,,,,,,0,0,31.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,180.89,145,0,180.89,145 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PAREPW1,0,0,0,66.15,76.745,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,76.745,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PIBESSG1,0,0,1,0.088,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.303,0,1,4.303,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PIBESSL1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.303,0,4,4.303,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,POAT110,0,0,1,90.71696,98,960,960,0,26.53515,19.85028,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:10:00",1,POAT220,0,0,1,119.66113,120,960,1200,0,15.2512,7.70106,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PPCCGT,0,0,1,168.8544,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,1,1,0,1,1,1,0,1,49.85147,241,166.00211,49.85147,241,166.00211 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QBYNBG1,0,0,1,2.36546,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QBYNBL1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,9.61082,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:10:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,59,1,1,1,1,0,0,0,1,59,59.99872,0,59,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RESS1L,0,0,1,3.54257,4.73827,720,720,18.12687,34,34,0,0,0,,,,,,,,,0,0,59,0,0,0,0,1,1,1,1,0,59.99988,0,59,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RIVNBG2,0,0,1,0.0643,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RIVNBL2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,RYEPARK1,0,0,0,91.84409,90.811,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,90.811,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SALTCRK1,0,0,0,21.74,20.825,660,660,0,0,0,0,0,0,,,,,,,,,0,0,20.825,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SAPHWF1,0,0,0,96.75899,95.944,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,95.944,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SITHE01,0,0,0,0.1639,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SMCSF1,0,0,0,0,0.02704,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0.02704,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNOWNTH1,0,0,0,54.6,54.2,540,300,0,0,0,0,0,0,,,,,,,,,0,0,54.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNOWSTH1,0,0,0,71.6,71.9,480,240,0,0,0,0,0,0,,,,,,,,,0,0,71.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNOWTWN1,0,0,0,63.96992,65.192,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,65.192,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STAN-1,0,0,0,184.88394,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.99966,185,0,364.99966,185 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STAN-2,0,0,1,204.71309,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,6,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,362.57712,170.00249 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STAN-3,0,0,1,165.54189,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,6,270,1,1,0,1,1,1,1,1,14.99679,260.32953,150,14.99679,260.32953,150 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STAN-4,0,0,1,164.96509,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,6,270,1,1,0,1,1,1,1,1,14.99679,265.22592,156.42844,14.99679,265.22592,156.42844 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STARHLWF,0,0,0,20.89391,20.89391,0,420,0,0,0,0,0,0,,,,,,,,,0,0,20.89391,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STOCKYD1,0,0,0,165.42,166.29,6120,6120,0,0,0,0,0,0,,,,,,,,,0,0,166.29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,STWF1,0,0,0,57.6846,57.432,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,57.432,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SUNRSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SUNTPSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,SWAN_E,0,0,0,-0.58,0,903.66,1.97,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0.16406,355,95,75.30469,355,95 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TALWA1,0,0,1,191,190,480,480,0,0,0,0,0,0,,,,,,,,,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TALWB1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARALGA1,0,0,0,0,0,180,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARONG#1,0,0,1,271.89999,270,240,240,0,0,0,0,10,10,,,,,,,,,0,6,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARONG#2,0,0,1,273.5,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARONG#3,0,0,1,273.89999,270,240,240,0,0,0,0,10,10,,,,,,,,,0,6,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARONG#4,0,0,1,273.10001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,6,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TARRALEA,0,0,0,67.9,67.9,0,0,0,0,0,0,0,0,,,,,,,,,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TB2BG1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TB2BL1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TB2SF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TBSF1,0,0,0,0,0,1140,1140,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TIBG1,0,0,1,3.81,0,3000,3000,0,0,0,20,20,20,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TIBL1,0,0,1,0,0,3000,3000,20,20,20,0,0,0,,,,,,,,,20,0,250,0,0,0,1,1,1,1,1,250,250,0,250,250,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TNPS1,0,0,1,443.3125,443,240,240,0,0,0,0,0,0,,,,,,,,,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TORRB1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,40,40,0,40,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TORRB2,0,0,1,43,40,300,300,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TORRB3,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TORRB4,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,40 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TREVALLN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,99,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TRIBUTE,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TUMUT3,0,0,1,0,0,6000,21600,0,0,0,10,0,0,,,,,,,,,0,0,1500,0,0,1,4,0,0,0,4,10,1250,120,20,1250,120 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TUNGATIN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,84,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TVCC201,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,TVPP104,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,UPPTUMUT,0,0,1,163.75638,280,1200,1800,20,0,0,0,0,0,,,,,,,,,10,12,642,0,0,1,1,0,0,1,1,12,642,100,20,642,80 +D,DUNIT,,2,"2023/12/14 04:10:00",1,URANQ11,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,URANQ12,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,URANQ13,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,URANQ14,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VBBG1,0,0,1,5.3,0,3600,3600,0,0,0,20,0,47.73833,,,,,,,,,0,0,45,1,1,1,1,0,0,0,1,45,45,0,45,45,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VBBL1,0,0,1,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,240,0,0,0,1,1,1,1,1,150,240,0,150,240,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VENUS1,0,0,0,0,0,0,0,0,0,0,11,8,7,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VP5,0,0,1,409.21658,439.08657,358.44,358.44,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,29.86999,654.51215,250,29.86999,654.51215,250 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VP6,0,0,1,416.00391,445.8739,358.44,358.44,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,29.86999,591.61963,250,29.86999,591.61963,250 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS2,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS3,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS4,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS5,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VPGS6,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSNEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSNSN1V1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSQHT1V1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSSAE1V1,0,0,0,0,0,0,0,3,3,0,3,3,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSSEL1V1,0,0,0,0,0,0,0,7,7,7,7,7,7,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSSSE1V1,0,0,0,0,0,0,0,0,2,2,2,2,2,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSSSH1S1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,VSVEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,W/HOE#1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:10:00",1,W/HOE#2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WAGGNSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WALGRVG1,0,0,1,0.17778,0,600,600,0,0,0,27,27,27,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,50,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WALGRVL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,23,0,47,0,0,0,1,1,1,1,1,47,47,0,47,47,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WANDBG1,0,0,1,1.79145,0,1200,1200,0,0,0,47,47,47,,,,,,,,,0,0,94,1,1,1,1,0,0,0,0,70,94,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WANDBL1,0,0,1,0,0,1200,1200,47,47,47,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,30,75,0,72,75,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WANDSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WARWSF1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WARWSF2,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WATERLWF,0,0,0,90.5,103.64,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,103.64,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WDGPH1,0,0,0,0,0,4800,4800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,59 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WELLSF1,0,0,0,0,0,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WEMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WGWF1,0,0,0,54.8,12.77,600,600,0,0,0,0,0,0,,,,,,,,,0,0,97.103,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WHITSF1,0,0,0,0,0.22507,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0.22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WINTSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WKIEWA1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WKIEWA2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WOODLWN1,0,0,0,33.23635,32.867,600,600,0,0,0,0,0,0,,,,,,,,,0,0,32.867,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WOOLGSF1,0,0,0,0,0,2112,2112,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WPWF,0,0,0,16.78,17.492,600,600,0,0,0,0,0,0,,,,,,,,,0,0,17.492,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WRSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WRWF1,0,0,0,10.93462,11.855,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,11.855,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WSTWYSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,WYASF1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YABULU,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YABULU2,0,0,0,0,0,480,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YARANSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YARWUN_1,0,0,0,116.42,116.42,0,0,0,0,0,0,0,0,,,,,,,,,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YATSF1,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YENDWF1,0,0,0,39.43,39.235,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,39.235,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YWPS1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,365,250,0,365,250 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YWPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,15,364.5,250,15,364.5,250 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YWPS3,0,0,1,361.08228,360,178.88,178.88,0,0,0,0,0,0,,,,,,,,,0,0,360,0,0,0,0,0,0,0,0,14.90625,360,280,14.90625,360,280 +D,DUNIT,,2,"2023/12/14 04:10:00",1,YWPS4,0,0,1,350.35568,350,180,180,0,0,0,0,0,0,,,,,,,,,0,0,350,0,0,0,0,0,0,0,0,15,350,280,20,350,280 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ADPBA1L,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ARWF1,0,0,0,24.6,24.12524,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,24.12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,17,14,13,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,4,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASSEL1,0,0,0,0,0,0,0,8,8,8,8,8,8,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,1,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASSSN1,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,58.03299,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ASVIEL2,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BALDHWF1,0,0,0,43.479,44.621,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,44.621,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BANGOWF1,0,0,0,118.1976,119.799,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,119.799,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BANGOWF2,0,0,0,75.89754,73,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BBATRYL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BBATTERY,0,0,1,0,0,600,600,0,0,0,0,27,17,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BLOWERNG,0,0,1,62.8,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BLUFF1,0,0,0,27.6,27.151,600,600,0,0,0,0,0,0,,,,,,,,,0,0,27.151,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOCORWF1,0,0,0,107.6,107.44,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,107.44,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BODWF1,0,0,0,5.82337,6.652,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,6.652,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOWWBA1L,0,0,0,0.003,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRYB1WF1,0,0,0,110.79576,110.057,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,110.057,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,11,11,11,,,,,,,,,0,0,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BULBESL1,0,0,1,0.1,0,240,240,0,11,11,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BULGANA1,0,0,0,36.61,36.56715,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,36.56715,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BW01,0,0,1,568.89294,576.40267,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,660,0,0,0,1,0,0,0,1,17.50973,660,332.32892,17.50973,660,332.32892 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BW02,0,0,1,590.89038,600.90259,180,240,0,0,0,0,0,0,,,,,,,,,0,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,330,20.01221,649.992,330 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BW03,0,0,1,590.18237,597.6921,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,685,0,0,0,1,0,0,0,1,17.50973,685,332.17786,17.50973,685,332.17786 +D,DUNIT,,2,"2023/12/14 04:15:00",1,BW04,0,0,1,584.22522,594.23743,180,240,0,0,0,0,0,0,,,,,,,,,0,10,670,0,0,0,1,0,0,0,1,20.01221,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CALL_B_1,0,0,1,259.80002,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CALL_B_2,0,0,1,319.80002,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CAPBES1L,0,0,0,0.17,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CATHROCK,0,0,0,26.6,27.843,840,840,0,0,0,0,0,0,,,,,,,,,0,0,27.843,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CBWWBA1L,0,0,0,0.003,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CG3,0,4,0,151.71893,150,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CHYTWF1,0,0,0,17.12,15.97,720,720,0,0,0,0,0,0,,,,,,,,,0,0,15.97,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CLEMGPWF,0,0,0,18.80113,26.968,660,660,0,0,0,0,0,0,,,,,,,,,0,0,26.968,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CNUNDAWF,0,0,0,16.41916,16.519,600,600,0,0,0,0,0,0,,,,,,,,,0,0,16.519,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,COLWF01,0,0,0,100.61951,93.34055,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,93.34055,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,COOPGWF1,0,0,0,227.75,227.78,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,227.78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CROOKWF2,0,0,0,60.13459,60.673,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,60.673,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CROWLWF1,0,0,0,18.06131,16.75177,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,16.75177,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CRURWF1,0,0,0,20.79583,21.898,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,21.898,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,CTHLWF1,0,0,0,22.83665,23.72613,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,23.72613,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DALNTH01,0,0,0,0.01373,0,6000,6000,0,0,0,5,24,23,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DALNTHL1,0,0,1,0,0,6000,6000,7,7,7,0,0,0,,,,,,,,,0,0,7,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DDPS1,0,0,1,308.22571,297.97927,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,337.30038,228,0,337.30038,228 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DPNTBG1,0,0,1,0.14505,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DPNTBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRSHVN01,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRSHVS01,0,0,0,0,0,0,0,3,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,15,15,14,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DULAWF1,0,0,0,106.39999,108.7,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,108.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DUNDWF1,0,0,0,118.7,116.53,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,116.53,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DUNDWF2,0,0,0,28.62,27.712,600,600,0,0,0,0,0,0,,,,,,,,,0,0,27.712,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,DUNDWF3,0,0,0,84.28,82.497,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,82.497,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ELAINWF1,0,0,0,48.54,48.14529,960,960,0,0,0,0,0,0,,,,,,,,,0,0,48.14529,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ER01,0,0,1,351.21387,352,298.92,300,0,0,0,0,0,0,,,,,,,,,0,5,700,1,1,1,1,1,1,1,1,25,699.97406,350,24.91035,699.97406,350 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ER02,0,0,1,210.80644,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.61113,0,700,210.61113 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ER03,0,0,1,353.02054,352,296.91,297.28,0,0,0,0,0,0,,,,,,,,,0,5,640,1,1,1,1,1,1,1,1,24.77302,639.45068,350,24.7425,639.45068,350 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ER04,0,0,1,352.89844,352,298.19,299.29,0,0,0,0,0,0,,,,,,,,,0,5,650,1,1,1,1,1,1,1,1,24.94087,650,350,24.84932,650,350 +D,DUNIT,,2,"2023/12/14 04:15:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,FLYCRKWF,0,0,0,9.92,10,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GANNBG1,0,0,1,1.33771,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GANNBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GORDON,0,0,1,12.25727,12,1800,1800,0,0,0,58,72,40,,,,,,,,,0,50,345,1,1,1,1,1,1,1,1,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GRANWF1,0,0,0,93.8,98.23806,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,98.23806,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE2,0,0,1,112.41699,131.59437,290.13,290.13,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE3,0,0,1,112.1709,131.11494,287.33,287.33,0,0,0,0,0,0,,,,,,,,,0,5,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE4,0,0,1,112.65625,131.64315,287.84,287.84,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSTONE6,0,0,1,201.37305,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,280,190,20,280,190 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GULLRWF1,0,0,0,136.05293,134.8659,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,134.8659,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GULLRWF2,0,0,0,95.19725,93.36047,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,93.36048,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HALLWF1,0,0,0,24.5,24.59,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.59,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HALLWF2,0,0,0,32.97,33.05,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.05,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HBESSG1,0,0,1,0,0,1800,1800,0,0,0,0,0,2,,,,,,,,,0,0,1,1,0,0,1,0,0,0,1,1,150,0,1,150,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HBESSL1,0,0,1,0.1,0,1800,1800,0,0,0,0,0,0,,,,,,,,,73.0001,0,111,0,0,0,1,1,1,1,1,110,150,0,110,150,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HDWF1,0,0,1,75.6,75.64,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,75.64,0,0,0,0,0,0,0,0,0,75.64,15,0,75.64,15 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HDWF2,0,0,1,68.2,66.95,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,66.95,0,0,0,0,0,0,0,0,0,66.95,15,0,66.95,15 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HDWF3,0,0,1,73.2,78.74,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,78.74,0,0,0,0,0,0,0,0,0,75.3,15,0,75.3,15 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,49.84984,67.36147,85,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,60,60,0,50,60,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HPRL1,0,0,1,5.7,8,960,960,0,0,0,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HUMEV,0,0,0,14.6,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HVWWBA1L,0,0,0,0.005,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KABANWF1,0,0,0,87.65301,87.826,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,87.826,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KAREEYA1,0,4,1,21.5825,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KAREEYA2,0,4,1,21.5375,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KAREEYA3,0,4,1,21.51,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KAREEYA4,0,4,1,21.525,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KEPWF1,0,0,0,30.3,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KIATAWF1,0,0,0,26.4,26.9,180,420,0,0,0,0,0,0,,,,,,,,,0,0,26.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KPP_1,0,0,1,761.29834,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LADBROK1,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LBBG1,0,0,1,3.9,0,300,300,0,0,0,13,13,13,,,,,,,,,0,0,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LBBL1,0,0,1,0,0,300,300,13,13,13,0,0,0,,,,,,,,,11,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LGAPWF1,0,0,0,36.52,36.04,600,600,0,0,0,0,0,0,,,,,,,,,0,0,36.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LGAPWF2,0,0,0,17.7,19.791,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19.791,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LI_WY_CA,0,0,1,53.2583,53,1680,1680,0,51,0,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LKBONNY1,0,0,0,22.50598,22.327,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,22.327,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LKBONNY2,0,0,0,47.4003,50.236,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,50.236,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LKBONNY3,0,0,0,13.8997,12.951,480,480,0,0,0,0,0,0,,,,,,,,,0,0,12.951,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LOYYB1,0,0,1,569.5481,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50,570,319.125,50,570,319.125 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LOYYB2,0,0,1,571.80377,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,0,0,0,0,0,0,0,0,50.15625,570,349.875,50.15625,570,349.875 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LYA1,0,0,1,511,510,300,300,5,10,10,0,0,0,,,,,,,,,5,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LYA3,0,0,1,558,560,300,300,5,10,10,0,0,0,,,,,,,,,5,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:15:00",1,LYA4,0,0,1,551,550,300,300,0,0,0,0,0,0,,,,,,,,,0,0,550,0,0,0,0,4,4,4,4,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MCKAY1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MEADOWBK,0,0,1,29.89468,30,480,60,0,0,0,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MERCER01,0,0,0,58.2,55.9,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,55.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MEWF1,0,0,0,166.52696,165.53953,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,165.53953,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MOORAWF1,0,0,0,0,0,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MORTLK11,0,4,1,153,115,780,780,0,0,0,0,0,0,,,,,,,,,0,0,115,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MP1,0,0,1,396.4538,411.4538,180,180,0,60,50,0,20,12.04642,,,,,,,,,0,20,730,1,1,1,1,1,1,1,1,60,516.98785,249.03944,60,516.98785,249.03944 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.01717,700,220,25.01717,700,220 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MPP_1,0,0,1,426.78738,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MPP_2,0,0,1,406.90451,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MTGELWF1,0,0,0,100.06714,100,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,23.557,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,0,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MUSSELR1,0,0,0,100.1,96.3,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,96.3,0,0,0,0,0,0,0,0,0,96.3,50,0,96.3,50 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MUWAWF1,0,0,0,72.13,72.81,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,72.81,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MUWAWF2,0,0,0,113.8,105.24215,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,105.24215,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NBHWF1,0,0,0,62.4,62.3,600,600,0,0,0,0,0,0,,,,,,,,,0,0,62.3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NPS,0,0,0,0,0,6,6,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OAKLAND1,0,0,0,32.8,30.6,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,180.89999,145,0,180.89999,145 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PAREPW1,0,0,0,72.06,78.539,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,78.539,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PIBESSG1,0,0,1,0,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.302,0,1,4.302,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PIBESSL1,0,0,1,0.049,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.302,0,4,4.302,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,POAT110,0,0,1,90.88193,98,960,960,0,26.53515,19.85028,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:15:00",1,POAT220,0,0,1,119.31329,120,960,1200,0,4.54592,14.3958,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PPCCGT,0,0,1,164.15668,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,0,0,0,0,0,0,0,0,49.85147,241,165.3307,49.85147,241,165.3307 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QBYNBG1,0,0,1,1.30448,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QBYNBL1,0,0,1,0,0,120,120,5,5,5,0,0,0,,,,,,,,,5,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:15:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,58,1,1,1,1,0,0,0,1,58,59.99872,0,58,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RESS1L,0,0,1,4.4697,0,720,720,33.63527,34,34,0,0,0,,,,,,,,,0,0,58,0,0,0,0,1,1,1,1,0,59.99988,0,58,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RIVNBG2,0,0,1,0.28263,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,64.99936,0,0,64.99936,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RIVNBL2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,65,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,RYEPARK1,0,0,0,86.55079,83.288,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,83.288,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SALTCRK1,0,0,0,29.75,29.354,660,660,0,0,0,0,0,0,,,,,,,,,0,0,29.354,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SAPHWF1,0,0,0,100.55848,100.687,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,100.687,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SITHE01,0,0,0,0.17395,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SMCSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNOWNTH1,0,0,0,53.6,53.7,540,300,0,0,0,0,0,0,,,,,,,,,0,0,53.7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNOWSTH1,0,0,0,70.2,71.761,480,240,0,0,0,0,0,0,,,,,,,,,0,0,71.761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNOWTWN1,0,0,0,63.72203,66.02,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,66.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STAN-1,0,0,0,184.88394,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.99966,185,0,364.99966,185 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STAN-2,0,0,1,200.73956,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,3,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,361.96185,170.00249 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STAN-3,0,0,1,161.79909,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,260.16287,150,14.99679,260.16287,150 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STAN-4,0,0,1,161.88881,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,265.14902,156.42844,14.99679,265.14902,156.42844 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STARHLWF,0,0,0,20.59399,20.59399,0,420,0,0,0,0,0,0,,,,,,,,,0,0,20.59399,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STOCKYD1,0,0,0,175.88,173.93,6120,6120,0,0,0,0,0,0,,,,,,,,,0,0,173.93,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,STWF1,0,0,0,51.97162,52.982,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,52.982,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SUNRSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SUNTPSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,SWAN_E,0,0,0,-0.58,0,903.66,1.97,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0.16406,355,95,75.30469,355,95 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TALWA1,0,0,1,192,190,480,480,0,0,0,0,0,0,,,,,,,,,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TALWB1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARALGA1,0,0,0,0,0,180,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARONG#1,0,0,1,272.39999,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARONG#2,0,0,1,270.80002,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARONG#3,0,0,1,271.39999,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARONG#4,0,0,1,272.60001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TARRALEA,0,0,0,68,68,0,0,0,0,0,0,0,0,,,,,,,,,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TB2BG1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TB2BL1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TB2SF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TBSF1,0,0,0,0,0,1140,1140,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TIBG1,0,0,1,0.29,0,3000,3000,0,0,0,20,20,20,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TIBL1,0,0,1,0,0,3000,3000,20,20,20,0,0,0,,,,,,,,,10,0,250,0,0,0,1,1,1,1,1,250,250,0,250,250,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TNPS1,0,0,1,442.1875,443,240,240,0,0,0,0,0,0,,,,,,,,,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TORRB1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,40,40,0,40,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TORRB2,0,0,1,40,40,300,300,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TORRB3,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TORRB4,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,40 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TREVALLN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,99,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TRIBUTE,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TUMUT3,0,0,1,0,0,6000,21600,0,0,0,10,0,0,,,,,,,,,0,0,1500,0,0,1,4,0,0,0,0,10,1250,120,20,1250,120 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TUNGATIN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,84,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TVCC201,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,TVPP104,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,UPPTUMUT,0,0,1,271.85004,295,1200,1800,20,0,0,0,0,0,,,,,,,,,0,9,642,0,0,1,1,0,0,1,1,12,642,100,20,642,80 +D,DUNIT,,2,"2023/12/14 04:15:00",1,URANQ11,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,URANQ12,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,URANQ13,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,URANQ14,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VBBG1,0,0,1,0,0,3600,3600,0,0,0,50,0,48,,,,,,,,,0,0,45,1,1,1,1,0,0,0,1,45,45,0,45,45,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VBBL1,0,0,1,0,3,3000,3000,0,0,0,0,0,0,,,,,,,,,0,3,240,0,0,0,1,1,1,1,1,150,240,0,150,240,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VENUS1,0,0,0,0,0,0,0,0,0,0,11,8,7,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VP5,0,0,1,435.60901,450,360,360,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,30.12177,654.56097,250,30.12177,654.56097,250 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VP6,0,0,1,441.12674,450,360,360,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,30.12177,660,250,30.12177,660,250 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS2,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS3,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS4,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS5,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VPGS6,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSNEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSNSN1V1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSQHT1V1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSSAE1V1,0,0,0,0,0,0,0,3,3,0,3,3,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSSEL1V1,0,0,0,0,0,0,0,7,7,7,7,7,7,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSSSE1V1,0,0,0,0,0,0,0,0,2,2,2,2,2,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSSSH1S1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,VSVEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,W/HOE#1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:15:00",1,W/HOE#2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WAGGNSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WALGRVG1,0,0,1,0,0,600,600,0,0,0,27,27,27,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,50,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WALGRVL1,0,0,1,0.15731,0,600,600,27,27,27,0,0,0,,,,,,,,,20,0,47,0,0,0,1,1,1,1,1,47,47,0,47,47,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WANDBG1,0,0,1,0,0,1200,1200,0,0,0,47,47,47,,,,,,,,,0,30,94,1,1,1,1,0,0,0,0,70,94,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WANDBL1,0,0,1,0,0,1200,1200,45,45,45,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,30,75,0,72,75,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WANDSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WARWSF1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WARWSF2,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WATERLWF,0,0,0,102.8,106.219,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,106.219,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WDGPH1,0,0,0,0,0,4800,4800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,59 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WELLSF1,0,0,0,0,0,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WEMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WGWF1,0,0,0,14.7,8.956,600,600,0,0,0,0,0,0,,,,,,,,,0,0,97.906,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WHITSF1,0,0,0,0,0.22462,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0.22462,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WINTSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WKIEWA1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WKIEWA2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WOODLWN1,0,0,0,31.63671,30.257,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30.257,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WOOLGSF1,0,0,0,0,0,2112,2112,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WPWF,0,0,0,16.43,18.742,600,600,0,0,0,0,0,0,,,,,,,,,0,0,18.742,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WRSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WRWF1,0,0,0,9.34157,9.497,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,9.497,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WSTWYSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,WYASF1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YABULU,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YABULU2,0,0,0,0,0,480,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YARANSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YARWUN_1,0,0,0,117.07999,117.07999,0,0,0,0,0,0,0,0,,,,,,,,,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YATSF1,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YENDWF1,0,0,0,39.19,37.6719,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,37.6719,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YWPS1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,364.75,250,0,364.75,250 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YWPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,15,365,250,15,365,250 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YWPS3,0,0,1,358.54178,360,180,180,0,0,0,0,0,0,,,,,,,,,0,0,360,1,1,0,1,1,1,1,1,15,360,280,15.09375,360,280 +D,DUNIT,,2,"2023/12/14 04:15:00",1,YWPS4,0,0,1,349.50885,350,180,180,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,0,1,1,1,1,1,15,350,280,20,350,280 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ADPBA1L,0,0,1,0.002,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ARWF1,0,0,0,15.8,13.53229,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,13.53229,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,17,14,13,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,4,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASSEL1,0,0,0,0,0,0,0,7,7,7,7,7,7,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,1,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASSSN1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,58.141,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ASVIEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BALDHWF1,0,0,0,44.977,44.129,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,44.129,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BANGOWF1,0,0,0,119.19859,118.1,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,118.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BANGOWF2,0,0,0,72.49935,69.498,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,69.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BBATRYL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BBATTERY,0,0,1,-1.04267,0,600,600,0,0,0,0,10.4511,17,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BLOWERNG,0,0,1,62.8,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BLUFF1,0,0,0,26.9,28,600,600,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOCORWF1,0,0,0,107.57,107.14,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,107.14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BODWF1,0,0,0,3.99389,4.304,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,4.304,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOWWBA1L,0,0,0,0.003,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRYB1WF1,0,0,0,104.82033,107.897,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,107.897,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,10,10,10,,,,,,,,,0,0,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BULBESL1,0,0,1,0.04,0,240,240,0,11,0,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BULGANA1,0,0,0,37.12,35.94498,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,35.94498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BW01,0,0,1,574.72803,582.23775,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,660,0,0,0,1,0,0,0,1,17.50973,660,332.07715,17.50973,660,332.07715 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BW02,0,0,1,598.36121,608.37341,180,240,0,0,0,0,0,0,,,,,,,,,0,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,330,20.01221,649.992,330 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BW03,0,0,1,595.79767,605.80988,180,240,0,0,0,0,0,0,,,,,,,,,0,10,685,0,0,0,1,0,0,0,1,20.01221,685,331.90088,20.01221,685,331.90088 +D,DUNIT,,2,"2023/12/14 04:20:00",1,BW04,0,0,1,595.72443,605.73663,180,240,0,0,0,0,0,0,,,,,,,,,0,10,670,0,0,0,1,0,0,0,1,20.01221,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CALL_B_1,0,0,1,258.70001,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CALL_B_2,0,0,1,318.20001,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CAPBES1L,0,0,0,0.17,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CATHROCK,0,0,0,26.8,28.052,840,840,0,0,0,0,0,0,,,,,,,,,0,0,28.052,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CBWWBA1L,0,0,0,0.002,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CG3,0,4,0,152.0119,145,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CHYTWF1,0,0,0,17.87,17.98,720,720,0,0,0,0,0,0,,,,,,,,,0,0,17.98,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CLEMGPWF,0,0,0,24.34783,34.036,660,660,0,0,0,0,0,0,,,,,,,,,0,0,34.036,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CNUNDAWF,0,0,0,13.51577,13.716,600,600,0,0,0,0,0,0,,,,,,,,,0,0,13.716,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,COLWF01,0,0,0,97.46394,94.29954,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,94.29954,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,COOPGWF1,0,0,0,236.28,235.27,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,235.27,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CROOKWF2,0,0,0,61.4139,60.924,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,60.924,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CROWLWF1,0,0,0,18.45965,17.5281,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,17.5281,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CRURWF1,0,0,0,14.19799,15.198,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,15.198,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,CTHLWF1,0,0,0,22.4155,23.18625,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,23.18625,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DALNTH01,0,0,0,0,0,6000,6000,0,0,0,5,23,23,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DALNTHL1,0,0,1,0.19684,0,6000,6000,0,7,7,0,0,0,,,,,,,,,0,0,7,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DDPS1,0,0,1,295.56384,255,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,337.77039,228,0,337.77039,228 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DPNTBG1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DPNTBL1,0,0,1,0.07327,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRSHVN01,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRSHVS01,0,0,0,0,0,0,0,0,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,15,15,15,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DULAWF1,0,0,0,101,101.5,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,101.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DUNDWF1,0,0,0,113.19,111.266,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,111.266,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DUNDWF2,0,0,0,29.11,28.613,600,600,0,0,0,0,0,0,,,,,,,,,0,0,28.613,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,DUNDWF3,0,0,0,74.95,73.298,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,73.298,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ELAINWF1,0,0,0,49.53,48.0979,960,960,0,0,0,0,0,0,,,,,,,,,0,0,48.0979,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ER01,0,0,1,347.91791,352,298.92,299.66,0,0,0,0,0,0,,,,,,,,,0,0,700,0,0,0,4,0,0,0,4,24.97139,699.97406,350,24.91035,699.97406,350 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ER02,0,0,1,209.92752,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.51347,0,700,210.51347 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ER03,0,0,1,351.06738,352,296.91,297.46,0,0,0,0,0,0,,,,,,,,,2,5,640,1,1,1,1,1,1,1,1,24.78828,639.45068,350,24.7425,639.45068,350 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ER04,0,0,1,350.09079,352,297.83,298.92,0,0,0,0,0,0,,,,,,,,,2,5,650,1,1,1,1,1,1,1,1,24.91035,650,350,24.8188,650,350 +D,DUNIT,,2,"2023/12/14 04:20:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,FLYCRKWF,0,0,0,9.96,10,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GANNBG1,0,0,1,0,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GANNBL1,0,0,1,0.48358,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GORDON,0,0,1,11.24651,12,1800,1800,0,0,0,58,72,40,,,,,,,,,0,50,345,1,1,1,1,1,1,1,4,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GRANWF1,0,0,0,94.8,97.68793,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,97.68793,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE2,0,0,1,130.68945,111,296.29,296.29,0,0,0,0,0,0,,,,,,,,,0,0,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE3,0,0,1,131.22949,111,299.57,299.57,0,0,0,0,0,0,,,,,,,,,0,0,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE4,0,0,1,129.38379,111,294.07,294.07,0,0,0,0,0,0,,,,,,,,,0,0,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSTONE6,0,0,1,200.09473,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,0,280,1,1,0,1,1,1,0,1,15,241,190,20,241,190 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GULLRWF1,0,0,0,131.07301,128.67135,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,128.67135,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GULLRWF2,0,0,0,94.04196,93.43844,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,93.43844,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HALLWF1,0,0,0,24.49,24.65,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.65,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HALLWF2,0,0,0,32.98,33,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HBESSG1,0,0,1,0,0,1800,1800,0,0,0,1,4,20,,,,,,,,,0,0,5,1,1,1,1,0,0,0,1,5,150,0,5,150,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HBESSL1,0,0,1,2.5,0,1800,1800,61,49,61,0,0,0,,,,,,,,,31,0,111,0,0,0,1,1,1,1,1,110,150,0,110,150,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HDWF1,0,0,1,75.6,74.47,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,74.47,0,0,0,0,0,0,0,0,0,74.47,15,0,74.47,15 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HDWF2,0,0,1,67.1,67.81,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,67.81,0,0,0,0,0,1,1,0,0,67.81,15,0,67.81,15 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HDWF3,0,0,1,71.4,73.57,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,73.57,0,0,0,0,0,0,0,0,0,73.57,15,0,73.57,15 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,85,85,85,,,,,,,,,0,3,56,1,1,1,1,0,0,0,1,60,60,0,56,60,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HPRL1,0,0,1,8.5,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HUMEV,0,0,0,14.8,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HVWWBA1L,0,0,0,0.005,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KABANWF1,0,0,0,88.049,86.998,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,86.998,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KAREEYA1,0,4,1,21.6025,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KAREEYA2,0,4,1,21.55,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KAREEYA3,0,4,1,21.4725,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KAREEYA4,0,4,1,21.5125,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KEPWF1,0,0,0,30.41,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KIATAWF1,0,0,0,26.3,26,180,420,0,0,0,0,0,0,,,,,,,,,0,0,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KPP_1,0,0,1,762.17114,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LADBROK1,0,0,0,-0.01,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LBBG1,0,0,1,0,0,300,300,0,0,0,13,13,13,,,,,,,,,0,6,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LBBL1,0,0,1,0.15,0,300,300,13,13,13,0,0,0,,,,,,,,,0,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LGAPWF1,0,0,0,34.06,34.3,600,600,0,0,0,0,0,0,,,,,,,,,0,0,34.3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LGAPWF2,0,0,0,16.82,16.751,600,600,0,0,0,0,0,0,,,,,,,,,0,0,16.751,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LI_WY_CA,0,0,1,52.65826,53,1680,1680,0,0,0,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LKBONNY1,0,0,0,23.30976,21.256,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,21.256,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LKBONNY2,0,0,0,44.43077,44.152,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,44.152,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LKBONNY3,0,0,0,13.62059,12.951,480,480,0,0,0,0,0,0,,,,,,,,,0,0,12.951,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LOYYB1,0,0,1,568.42023,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50,570,319.875,50,570,319.875 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LOYYB2,0,0,1,569.92407,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50.15625,570,350.25,50.15625,570,350.25 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LYA1,0,0,1,504,510,300,300,5,10,5,0,0,0,,,,,,,,,10,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LYA3,0,0,1,558,560,300,300,5,10,5,0,0,0,,,,,,,,,14.0001,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:20:00",1,LYA4,0,0,1,548,550,300,300,5,10,5.4629,0,0,0,,,,,,,,,15,0,550,1,1,1,1,1,1,1,1,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MCKAY1,0,0,0,0.02,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MEADOWBK,0,0,1,29.8661,30,480,60,0,0,0,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MERCER01,0,0,0,65.1,66.8,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,66.8,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MEWF1,0,0,0,164.10214,163.96293,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,163.96294,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MOORAWF1,0,0,0,0,169.495,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,169.495,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MORTLK11,0,4,1,116,181,780,780,0,0,0,0,0,0,,,,,,,,,0,0,273,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MP1,0,0,1,409.78409,424.78409,180,180,0,60,40,0,20,1.02805,,,,,,,,,0,0,730,1,1,1,1,1,1,1,1,60,517.89117,250.23575,60,517.89117,250.23575 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.00191,700,220,25.00191,700,220 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MPP_1,0,0,1,425.5361,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MPP_2,0,0,1,405.10391,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MTGELWF1,0,0,0,99.20041,99.7193,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,99.7193,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,17.194,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,4,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MUSSELR1,0,0,0,110,108.2,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,108.2,0,0,0,0,0,0,0,0,0,106.88,50,0,106.88,50 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MUWAWF1,0,0,0,62.5,63.12,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,63.12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MUWAWF2,0,0,0,104.9,99.19668,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,99.19668,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NBHWF1,0,0,0,62.9,61.2,600,600,0,0,0,0,0,0,,,,,,,,,0,0,61.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NPS,0,0,0,0,0,6.75,6.75,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OAKLAND1,0,0,0,30.8,30.4,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,181.15999,145,0,181.15999,145 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PAREPW1,0,0,0,72.09,80.334,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,80.334,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PIBESSG1,0,0,1,0,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.303,0,1,4.303,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PIBESSL1,0,0,1,0.044,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.303,0,4,4.303,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,POAT110,0,0,1,85.83353,98,960,960,0,20.09794,0,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:20:00",1,POAT220,0,0,1,118.03409,120,960,1200,0,0,0,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PPCCGT,0,0,1,164.15668,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,0,0,0,0,0,0,0,0,49.85147,241,165,49.85147,241,165 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QBYNBG1,0,0,1,0.1415,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QBYNBL1,0,0,1,0,0,120,120,5,5,5,0,0,0,,,,,,,,,5,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:20:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,59,1,1,1,1,0,0,0,1,59,59.99872,0,59,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RESS1L,0,0,1,0.82695,5,720,720,0,34,34,0,0,0,,,,,,,,,0,0,59,0,0,0,0,1,1,1,1,0,59.99988,0,59,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RIVNBG2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,64.99936,0,0,64.99936,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RIVNBL2,0,0,1,0.18991,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,65,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,RYEPARK1,0,0,0,88.32731,89.632,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,89.632,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SALTCRK1,0,0,0,29.52,29.214,660,660,0,0,0,0,0,0,,,,,,,,,0,0,29.214,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SAPHWF1,0,0,0,102.1973,100.385,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,100.385,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SITHE01,0,0,0,0.1639,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SMCSF1,0,0,0,0,0.02888,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0.02888,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNOWNTH1,0,0,0,53,53.459,540,300,0,0,0,0,0,0,,,,,,,,,0,0,53.459,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNOWSTH1,0,0,0,70,70,480,240,0,0,0,0,0,0,,,,,,,,,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNOWTWN1,0,0,0,64.5454,69.498,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,69.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STAN-1,0,0,0,184.88394,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.99966,185,0,364.99966,185 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STAN-2,0,0,1,197.65048,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,3,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,361.52606,170.00249 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STAN-3,0,0,1,157.82558,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,259.94498,150,14.99679,259.94498,150 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STAN-4,0,0,1,158.54337,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,264.85422,156.42844,14.99679,264.85422,156.42844 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STARHLWF,0,0,0,20.19411,20.19411,0,420,0,0,0,0,0,0,,,,,,,,,0,0,20.19411,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STOCKYD1,0,0,0,170.62,169.13,6120,6120,0,0,0,0,0,0,,,,,,,,,0,0,169.13,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,STWF1,0,0,0,49.76333,49.203,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,49.203,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SUNRSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SUNTPSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,SWAN_E,0,0,0,-0.58,0,903.66,1.97,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0.16406,355,95,75.30469,355,95 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TALWA1,0,0,1,191,190,480,480,0,0,0,0,0,0,,,,,,,,,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TALWB1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARALGA1,0,0,0,0,0,180,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARONG#1,0,0,1,270.10001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARONG#2,0,0,1,268.70001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARONG#3,0,0,1,268.70001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARONG#4,0,0,1,269.60001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TARRALEA,0,0,0,67.9,67.9,0,0,0,0,0,0,0,0,,,,,,,,,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TB2BG1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TB2BL1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TB2SF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TBSF1,0,0,0,0,0,1140,1140,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TIBG1,0,0,1,0.13,0,3000,3000,0,0,0,20,20,20,,,,,,,,,0,30,0,1,1,1,1,0,0,0,1,250,250,0,250,250,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TIBL1,0,0,1,0,0,3000,3000,20,20,20,0,0,0,,,,,,,,,20,0,250,0,0,0,1,1,1,1,1,250,250,0,250,250,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TNPS1,0,0,1,439.93747,443,240,240,0,0,0,0,0,0,,,,,,,,,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TORRB1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,40,40,0,40,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TORRB2,0,0,1,40,40,300,300,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TORRB3,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TORRB4,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,40 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TREVALLN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,99,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TRIBUTE,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TUMUT3,0,0,1,0,0,6000,21600,0,0,0,10,0,0,,,,,,,,,0,0,1500,0,0,1,4,0,0,0,4,10,1250,120,20,1250,120 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TUNGATIN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,84,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TVCC201,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,TVPP104,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,UPPTUMUT,0,0,1,290.98779,213.15104,1200,1800,20,0,0,0,0,0,,,,,,,,,10,6,642,0,0,1,1,0,0,1,1,12,642,100,20,642,80 +D,DUNIT,,2,"2023/12/14 04:20:00",1,URANQ11,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,URANQ12,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,URANQ13,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,URANQ14,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VBBG1,0,0,1,0,0,3600,3600,0,0,0,17.78769,0,44,,,,,,,,,0,5,45,1,1,1,1,0,0,0,1,45,45,0,45,45,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VBBL1,0,0,1,2.9,7,3000,3000,0,0,0,0,0,0,,,,,,,,,0,7,240,0,0,0,1,1,1,1,1,150,240,0,150,240,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VENUS1,0,0,0,0,0,0,0,0,0,0,11,8,7,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VP5,0,0,1,450.69736,420.82737,358.44,358.44,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,29.86999,654.51215,250,29.86999,654.51215,250 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VP6,0,0,1,450.33112,420.46113,358.44,358.44,0,0,0,0,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,29.86999,660,250,29.86999,660,250 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS2,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS3,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS4,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS5,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VPGS6,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSNEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSNSN1V1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSQHT1V1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSSAE1V1,0,0,0,0,0,0,0,3,3,0,3,3,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSSEL1V1,0,0,0,0,0,0,0,6,6,6,6,6,6,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSSSE1V1,0,0,0,0,0,0,0,0,2,2,2,2,2,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSSSH1S1,0,0,0,0,0,0,0,0,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,VSVEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,W/HOE#1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:20:00",1,W/HOE#2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WAGGNSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WALGRVG1,0,0,1,0,0,600,600,0,0,0,27,27,27,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,50,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WALGRVL1,0,0,1,0.01582,0,600,600,27,27,27,0,0,0,,,,,,,,,20,0,47,0,0,0,1,1,1,1,1,47,47,0,47,47,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WANDBG1,0,0,1,0,0,1200,1200,0,0,0,47,47,47,,,,,,,,,0,30,94,1,1,1,1,0,0,0,0,70,94,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WANDBL1,0,0,1,0.57698,0,1200,1200,47,47,47,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,30,75,0,72,75,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WANDSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WARWSF1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WARWSF2,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WATERLWF,0,0,0,104.6,104.423,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,106.219,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WDGPH1,0,0,0,0,0,4800,4800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,59 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WELLSF1,0,0,0,0,0,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WEMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WGWF1,0,0,0,9.3,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,97.511,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WHITSF1,0,0,0,0,0.22471,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0.22471,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WINTSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WKIEWA1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WKIEWA2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WOODLWN1,0,0,0,26.2753,28.095,600,600,0,0,0,0,0,0,,,,,,,,,0,0,28.095,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WOOLGSF1,0,0,0,0,0,2112,2112,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WPWF,0,0,0,19.6,21.447,600,600,0,0,0,0,0,0,,,,,,,,,0,0,21.447,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WRSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WRWF1,0,0,0,7.58618,8.47,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,8.47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WSTWYSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,WYASF1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YABULU,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YABULU2,0,0,0,0,0,480,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YARANSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YARWUN_1,0,0,0,116.27,116.27,0,0,0,0,0,0,0,0,,,,,,,,,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YATSF1,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YENDWF1,0,0,0,42.33,41.25732,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,41.25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YWPS1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,365,250,0,365,250 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YWPS2,0,0,0,0,0,178.88,178.88,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,14.90625,364.75,250,14.90625,364.75,250 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YWPS3,0,0,1,359.95316,360,180,180,0,0,0,0,0,0,,,,,,,,,0,0,360,1,1,0,1,1,1,1,1,15,360,280,15.1875,360,280 +D,DUNIT,,2,"2023/12/14 04:20:00",1,YWPS4,0,0,1,349.50885,350,180,180,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,0,1,1,1,1,1,15,350,280,20,350,280 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ADPBA1L,0,0,1,0.002,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,20,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ARWF1,0,0,0,16.8,16.36787,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,16.36787,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,34,14,26,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,9,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASSEL1,0,0,0,0,0,0,0,8,8,8,8,8,8,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,3,1,1.29245,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASSSN1,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,57.99699,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ASVIEL2,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BALDHWF1,0,0,0,46.183,46.219,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,46.219,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BANGOWF1,0,0,0,121.89883,120.996,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,120.996,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BANGOWF2,0,0,0,68.89883,71.399,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,71.399,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BBATRYL1,0,0,1,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BBATTERY,0,0,1,-0.70537,0,600,600,0,0,0,0,27,17,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BLOWERNG,0,0,1,62.7,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BLUFF1,0,0,0,28.4,27,600,600,0,0,0,0,0,0,,,,,,,,,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOCORWF1,0,0,0,106.86,107.04,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,107.04,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BODWF1,0,0,0,1.72796,2.127,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,2.127,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOWWBA1L,0,0,0,0.003,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRYB1WF1,0,0,0,116.24017,111.498,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,111.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,10,10,10,,,,,,,,,0,0,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BULBESL1,0,0,1,0,0,240,240,0,11,11,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BULGANA1,0,0,0,28.64,26.95447,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,26.95447,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BW01,0,0,1,583.59045,591.10018,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,660,0,0,0,1,0,0,0,1,17.50973,660,335.1236,17.50973,660,335.1236 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BW02,0,0,1,606.36914,616.38135,180,240,0,0,0,0,0,0,,,,,,,,,0,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,368.48364,20.01221,649.992,368.48364 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BW03,0,0,1,605.90521,613.41494,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,685,0,0,0,1,0,0,0,1,17.50973,685,332.22821,17.50973,685,332.22821 +D,DUNIT,,2,"2023/12/14 04:25:00",1,BW04,0,0,1,608.61523,618.62744,180,240,0,0,0,0,0,0,,,,,,,,,0,10,670,0,0,0,1,0,0,0,1,20.01221,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CALL_B_1,0,0,1,260,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CALL_B_2,0,0,1,319.60001,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CAPBES1L,0,0,0,0.17,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CATHROCK,0,0,0,28,28,840,840,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CBWWBA1L,0,0,0,0.002,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CG3,0,4,0,150.12222,140,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CHYTWF1,0,0,0,17.32,17.07,720,720,0,0,0,0,0,0,,,,,,,,,0,0,17.07,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CLEMGPWF,0,0,0,29.53435,34.036,660,660,0,0,0,0,0,0,,,,,,,,,0,0,34.036,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CNUNDAWF,0,0,0,15.81845,15.518,600,600,0,0,0,0,0,0,,,,,,,,,0,0,15.518,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,COLWF01,0,0,0,92.92744,91.42157,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,91.42157,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,COOPGWF1,0,0,0,228.46001,230.24,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,230.24,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CROOKWF2,0,0,0,61.47372,60.924,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,60.924,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CROWLWF1,0,0,0,17.17862,15.72613,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,15.72613,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CRURWF1,0,0,0,9.49851,9.596,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,9.596,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,CTHLWF1,0,0,0,31.27794,33.68308,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,33.68308,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DALNTH01,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DALNTHL1,0,0,1,0.09613,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DDPS1,0,0,1,255.29279,255,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,323.67081,228,0,323.67081,228 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DPNTBG1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DPNTBL1,0,0,1,0.03738,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRSHVN01,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRSHVS01,0,0,0,0,0,0,0,3,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,15,15,14,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DULAWF1,0,0,0,103.8,105.6,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,105.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DUNDWF1,0,0,0,107.84,106.125,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,106.125,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DUNDWF2,0,0,0,23.3,23.113,600,600,0,0,0,0,0,0,,,,,,,,,0,0,23.113,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,DUNDWF3,0,0,0,79.24,78.02,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,78.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ELAINWF1,0,0,0,50.49,51.14145,960,960,0,0,0,0,0,0,,,,,,,,,0,0,51.14145,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ER01,0,0,1,347.18549,352,298.92,300,0,0,0,0,0,0,,,,,,,,,0,0,700,4,4,0,4,0,0,0,0,25,699.99847,350,24.91035,699.99847,350 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ER02,0,0,1,211.68536,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.44022,0,700,210.44022 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ER03,0,0,1,351.89746,352,296.91,297.46,0,0,0,0,27,27,,,,,,,,,0,5,640,1,1,1,1,1,1,1,1,24.78828,639.40186,350,24.7425,639.40186,350 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ER04,0,0,1,352.43457,352,298.19,298.92,0,0,0,0,27,27,,,,,,,,,0,5,650,1,1,1,1,1,1,1,1,24.91035,650,350,24.84932,650,350 +D,DUNIT,,2,"2023/12/14 04:25:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,FLYCRKWF,0,0,0,9.93,10,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GANNBG1,0,0,1,0,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GANNBL1,0,0,1,0.12174,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GORDON,0,0,1,11.5761,12,1800,1800,0,0,12,58,72,40,,,,,,,,,0,50,345,1,1,1,1,1,1,1,4,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GRANWF1,0,0,0,104.64,104.42963,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,104.42963,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE2,0,0,1,112.47168,111,289.81,289.81,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE3,0,0,1,110.33887,111,287.04,287.04,0,0,0,0,0,0,,,,,,,,,0,5,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE4,0,0,1,112.06836,111,287.76,287.76,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSTONE6,0,0,1,200.10156,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,241,190,20,241,190 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GULLRWF1,0,0,0,131.423,126.04674,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,126.04674,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GULLRWF2,0,0,0,92.53754,92.09697,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,92.09697,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HALLWF1,0,0,0,24.56,24.56,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.56,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HALLWF2,0,0,0,33.09,33.12,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HBESSG1,0,0,1,0,0,1800,1800,0,0,0,0,0,2,,,,,,,,,0,0,1,1,0,0,1,0,0,0,1,1,150,0,1,150,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HBESSL1,0,0,1,2.8,0,1800,1800,0,0,0,0,0,0,,,,,,,,,78.0001,0,114,0,0,0,1,1,1,1,1,113,150,0,113,150,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HDWF1,0,0,1,74.1,75.25,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,75.25,0,0,0,0,0,0,0,0,0,75.25,15,0,75.25,15 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HDWF2,0,0,1,67.6,72.17,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,72.17,0,0,0,0,0,1,1,0,0,71.2,15,0,71.2,15 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HDWF3,0,0,1,72.9,72.7,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,72.7,0,0,0,0,0,0,0,0,0,72.7,15,0,72.7,15 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,85,85,85,,,,,,,,,0,0,60,1,1,1,1,0,0,0,1,60,60,0,60,60,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HPRL1,0,0,1,2.2,0,960,960,0,18.87784,17.42772,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HUMEV,0,0,0,14.8,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HVWWBA1L,0,0,0,0.005,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KABANWF1,0,0,0,87.80101,87.663,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,87.663,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KAREEYA1,0,4,1,21.525,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KAREEYA2,0,4,1,21.5225,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KAREEYA3,0,4,1,21.45,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KAREEYA4,0,4,1,21.49,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KEPWF1,0,0,0,30.13,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KIATAWF1,0,0,0,25.6,23.9,180,420,0,0,0,0,0,0,,,,,,,,,0,0,23.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KPP_1,0,0,1,753.47644,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LADBROK1,0,0,0,-0.01,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LBBG1,0,0,1,0.15,0,300,300,0,0,0,13,13,13,,,,,,,,,0,11,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LBBL1,0,0,1,0,0,300,300,13,13,13,0,0,0,,,,,,,,,11,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LGAPWF1,0,0,0,33.16,33.66,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.66,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LGAPWF2,0,0,0,15.43,17.765,600,600,0,0,0,0,0,0,,,,,,,,,0,0,17.765,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LI_WY_CA,0,0,1,52.60964,53,1680,1680,26.94485,51,6,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LKBONNY1,0,0,0,26.07836,26.257,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,26.257,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LKBONNY2,0,0,0,40.45087,42.818,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,42.818,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LKBONNY3,0,0,0,13.62059,13.341,480,480,0,0,0,0,0,0,,,,,,,,,0,0,13.341,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LOYYB1,0,0,1,569.5481,570,598.13,598.13,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,49.84375,570,319.5,49.84375,570,319.5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LOYYB2,0,0,1,570.67596,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,0,0,0,0,0,0,0,0,50.3125,570,351,50.3125,570,351 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LYA1,0,0,1,507,510,300,300,10,10,10,0,0,0,,,,,,,,,5,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LYA3,0,0,1,556,560,300,300,10,10,10,0,0,0,,,,,,,,,5,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:25:00",1,LYA4,0,0,1,547,550,300,300,10,10,10,0,0,0,,,,,,,,,5,0,550,1,1,1,1,1,1,1,1,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MCKAY1,0,0,0,0.02,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MEADOWBK,0,0,1,29.7232,30,480,60,0,18,1,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MERCER01,0,0,0,76.4,74.2,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,74.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MEWF1,0,0,0,162.9225,162.52073,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,162.52073,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MOORAWF1,0,0,0,166.48001,158.76,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,158.76,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MORTLK11,0,4,1,169,234,780,780,0,0,0,0,0,0,,,,,,,,,0,0,273,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MP1,0,0,1,422.43076,437.43076,180,180,20,60,50,0,20,20,,,,,,,,,0,20,730,1,1,1,1,1,1,1,1,60,517.89117,250.47989,60,517.89117,250.47989 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.01717,700,220,25.01717,700,220 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MPP_1,0,0,1,425.73447,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MPP_2,0,0,1,404.78345,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MTGELWF1,0,0,0,99.2233,100,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,16.674,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,0,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MUSSELR1,0,0,0,113.89999,111.2,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,111.2,0,0,0,0,0,0,0,0,0,111.14999,50,0,111.14999,50 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MUWAWF1,0,0,0,71.29,67.68,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,67.68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MUWAWF2,0,0,0,99.7,87.50853,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,87.50853,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NBHWF1,0,0,0,59.8,61,600,600,0,0,0,0,0,0,,,,,,,,,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NPS,0,0,0,0,0,6.75,6.75,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OAKLAND1,0,0,0,34.6,34,600,600,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,181.28999,145,0,181.28999,145 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PAREPW1,0,0,0,69.63,77.941,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,77.941,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PIBESSG1,0,0,1,0,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.302,0,1,4.302,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PIBESSL1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.302,0,4,4.302,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,POAT110,0,0,1,86.36784,98,960,960,0,26.53515,19.85028,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:25:00",1,POAT220,0,0,1,119.44792,120,960,1200,0,29,40,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PPCCGT,0,0,1,164.82777,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,0,0,0,0,0,0,0,0,49.85147,241,166.00211,49.85147,241,166.00211 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QBYNBG1,0,0,1,0.0695,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QBYNBL1,0,0,1,0,0,120,120,5,5,5,0,0,0,,,,,,,,,5,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:25:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,59,1,1,1,1,0,0,0,1,59,59.99872,0,59,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RESS1L,0,0,1,5.10076,5,720,720,34,34,34,0,0,0,,,,,,,,,0,0,59,0,0,0,0,1,1,1,1,0,59.99988,0,59,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RIVNBG2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,64.99936,0,0,64.99936,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RIVNBL2,0,0,1,0.15103,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,65,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,RYEPARK1,0,0,0,90.24884,89.669,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,89.669,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SALTCRK1,0,0,0,32.26,31.984,660,660,0,0,0,0,0,0,,,,,,,,,0,0,31.984,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SAPHWF1,0,0,0,100.16479,101.19,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,101.19,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SITHE01,0,0,0,0.14381,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SMCSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNOWNTH1,0,0,0,52.6,52.97,540,300,0,0,0,0,0,0,,,,,,,,,0,0,52.97,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNOWSTH1,0,0,0,68.1,68.4,480,240,0,0,0,0,0,0,,,,,,,,,0,0,68.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNOWTWN1,0,0,0,68.51348,67.22,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,67.22,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STAN-1,0,0,0,184.88394,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.99966,185,0,364.99966,185 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STAN-2,0,0,1,200.80365,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,3,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,361.61578,170.00249 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STAN-3,0,0,1,159.91487,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,257.54807,150,14.99679,257.54807,150 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STAN-4,0,0,1,160.33786,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,264.89267,156.42844,14.99679,264.89267,156.42844 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STARHLWF,0,0,0,18.29466,18.29466,0,420,0,0,0,0,0,0,,,,,,,,,0,0,18.29466,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STOCKYD1,0,0,0,160.55,162.12,6120,6120,0,0,0,0,0,0,,,,,,,,,0,0,162.12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,STWF1,0,0,0,49.56557,49.214,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,49.214,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SUNRSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SUNTPSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,SWAN_E,0,0,0,-0.58,0,903.66,1.97,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0.16406,355,95,75.30469,355,95 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TALWA1,0,0,1,191,190,480,480,0,0,0,0,0,0,,,,,,,,,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TALWB1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARALGA1,0,0,0,0,0,180,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARONG#1,0,0,1,270,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARONG#2,0,0,1,270.10001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,6,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARONG#3,0,0,1,270.10001,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARONG#4,0,0,1,270.30002,270,240,240,0,0,0,0,10,10,,,,,,,,,0,3,350,1,1,1,1,1,1,1,1,15,350,210,15,350,210 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TARRALEA,0,0,0,67.7,67.7,0,0,0,0,0,0,0,0,,,,,,,,,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TB2BG1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TB2BL1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TB2SF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TBSF1,0,0,0,0,0,1140,1140,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TIBG1,0,0,1,0.21,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,250,0,0,250,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TIBL1,0,0,1,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,250,0,0,250,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TNPS1,0,0,1,439.5625,443,240,240,0,0,0,0,0,0,,,,,,,,,0,0,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TORRB1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,40,40,0,40,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TORRB2,0,0,1,40,40,300,300,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TORRB3,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,200,40,0,200,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TORRB4,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,40 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TREVALLN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,99,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TRIBUTE,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TUMUT3,0,0,1,0,0,6000,21600,0,0,0,10,0,0,,,,,,,,,0,0,1500,0,0,1,4,0,0,0,0,10,1250,120,20,1250,120 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TUNGATIN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,84,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TVCC201,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,TVPP104,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,UPPTUMUT,0,0,1,212.20999,152.69613,1200,1800,20,0,0,0,0,0,,,,,,,,,0,12,642,0,0,1,1,0,0,1,1,12,642,100,20,642,80 +D,DUNIT,,2,"2023/12/14 04:25:00",1,URANQ11,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,URANQ12,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,URANQ13,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,URANQ14,0,0,0,0,0,659.93,659.93,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VBBG1,0,0,1,0,0,3600,3600,0,0,0,29,10,29,,,,,,,,,0,20,45,1,1,1,1,0,0,0,1,45,45,0,45,45,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VBBL1,0,0,1,6.6,1,3000,3000,0,0,0,0,0,0,,,,,,,,,0,1,240,0,0,0,1,1,1,1,1,150,240,0,150,240,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VENUS1,0,0,0,0,0,0,0,0,0,0,22,10.57149,14,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VP5,0,0,1,423.35275,420,358.44,358.44,0,0,0,6.03752,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,29.86999,654.41449,250,29.86999,654.41449,250 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VP6,0,0,1,425.2327,420,360,360,0,0,0,10,0,0,,,,,,,,,0,0,660,1,1,1,1,1,1,1,1,30.12177,660,250,30.12177,660,250 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS2,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS3,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS4,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS5,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VPGS6,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSNEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSNSN1V1,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSQHT1V1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSSAE1V1,0,0,0,0,0,0,0,3,3,0,3,3,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSSEL1V1,0,0,0,0,0,0,0,7,7,7,7,7,7,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSSSE1V1,0,0,0,0,0,0,0,2,2,2,2,2,2,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSSSH1S1,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,VSVEL2S1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,W/HOE#1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:25:00",1,W/HOE#2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,265,0,0,0,0,0,0,0,0,125,45,160,62,45,160 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WAGGNSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WALGRVG1,0,0,1,0,0,600,600,0,0,0,27,27,27,,,,,,,,,0,0,50,1,1,1,1,0,0,0,1,50,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WALGRVL1,0,0,1,0.07912,0,600,600,27,27,27,0,0,0,,,,,,,,,20,0,47,0,0,0,1,1,1,1,1,47,47,0,47,47,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WANDBG1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WANDBL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,75,0,0,75,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WANDSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WARWSF1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WARWSF2,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WATERLWF,0,0,0,103.6,105.903,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,106.219,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WDGPH1,0,0,0,0,0,4800,4800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,59 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WELLSF1,0,0,0,0,0,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WEMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WGWF1,0,0,0,0.8,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,97.307,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WHITSF1,0,0,0,0,0.22562,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0.22562,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WINTSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WKIEWA1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,4,4,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WKIEWA2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,34,4,4,0,0,1,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WOODLWN1,0,0,0,27.91009,26.346,600,600,0,0,0,0,0,0,,,,,,,,,0,0,26.346,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WOOLGSF1,0,0,0,0,0,2112,2112,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WPWF,0,0,0,19.99,23.305,600,600,0,0,0,0,0,0,,,,,,,,,0,0,23.305,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WRSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WRWF1,0,0,0,9.71633,8.49,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,8.49,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WSTWYSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,WYASF1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YABULU,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YABULU2,0,0,0,0,0,480,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YARANSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YARWUN_1,0,0,0,116.82999,116.82999,0,0,0,0,0,0,0,0,,,,,,,,,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YATSF1,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YENDWF1,0,0,0,49.91,48.10252,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,48.10253,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YWPS1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,365,250,0,365,250 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YWPS2,0,0,0,0,0,178.88,178.88,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,14.90625,364.75,250,14.90625,364.75,250 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YWPS3,0,0,1,358.82404,360,178.88,178.88,0,0,0,0,0,0,,,,,,,,,0,0,360,1,1,0,1,1,1,1,1,14.90625,360,280,14.90625,360,280 +D,DUNIT,,2,"2023/12/14 04:25:00",1,YWPS4,0,0,1,348.94431,350,180,180,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,0,1,1,1,1,1,15,350,280,20,350,280 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ADPBA1G,0,0,1,0,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ADPBA1L,0,0,1,0.003,0,93.12,93.12,0,0,0,0,0,0,,,,,,,,,0,0,6,0,0,0,1,0,0,0,1,6,6,0,6,6,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ADPPV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,AGLHAL,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,173,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,AGLSOM,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ANGAST1,0,0,0,-0.1,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,APD01,0,0,0,0,0,0,0,0,0,0,40,30,20,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ARWF1,0,0,0,21.1,20.63841,240,1200,0,0,0,0,0,0,,,,,,,,,0,0,20.63841,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASNAES1,0,0,0,0,0,0,0,6,4,2,2,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASNBRL1,0,0,0,0,0,0,0,0,0,0,6,6,6,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASNENC1,0,0,0,0,0,0,0,0,0,0,34,14,13,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASNSEL2,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASPAPM01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASQEEV1,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASQENC1,0,0,0,0,0,0,0,0,0,0,9,3,5.56741,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASRMGE01,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASRMGE02,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASRMGE03,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASSDE1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASSEL1,0,0,0,0,0,0,0,8,8,8,8,8,8,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASSENC1,0,0,0,0,0,0,0,0,0,0,3,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASSERDV1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASSSN1,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASTHYD1,0,0,0,0,0,0,0,0,0,0,0,0,58.39299,,,,,,,,,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ASVIEL2,0,0,0,0,0,0,0,1,1,1,0,0,0,,,,,,,,,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,AVLSF1,0,0,0,0,0,2280,2280,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BALBG1,0,0,1,0,0,6000,6000,0,0,0,30,30,30,,,,,,,,,0,0,30,1,1,1,1,0,0,0,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BALBL1,0,0,1,0,0,6000,6000,28,28,28,0,0,0,,,,,,,,,2,0,30,0,0,0,1,1,1,1,1,30,30,0,30,30,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BALDHWF1,0,0,0,46.35,45.9,540,1800,0,0,0,0,0,0,,,,,,,,,0,0,45.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BANGOWF1,0,0,0,116.99641,118.295,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,118.295,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BANGOWF2,0,0,0,69.59922,69.498,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,69.498,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BANN1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BARCALDN,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BARKIPS1,0,0,1,0,0,1836,1836,0,0,0,0,0,0,,,,,,,,,0,0,122,0,0,0,0,0,0,0,0,0,9,9,0,9,9 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BARRON-1,0,4,0,32.8,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BARRON-2,0,4,0,33,33,120,240,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BASTYAN,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,80,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BBATRYL1,0,0,1,0,0,600,600,0,14.52692,0,0,0,0,,,,,,,,,0,0,50,0,0,0,0,1,1,1,1,0,50,0,50,50,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BBATTERY,0,0,1,-0.32994,0,600,600,0,0,0,0,27,17,,,,,,,,,0,0,50,1,1,0,1,0,0,0,0,50,50,0,0,50,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BBTHREE1,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BBTHREE2,0,0,0,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BBTHREE3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BDL01,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BDL02,0,0,0,0,0,240,180,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BERYLSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BHBG1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BHBL1,0,0,0,0,0,599.98,599.98,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BLOWERNG,0,0,1,63,63,120,120,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BLUEGSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BLUFF1,0,0,0,28.1,27,600,600,0,0,0,0,0,0,,,,,,,,,0,0,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BNGSF1,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BNGSF2,0,0,0,0,0,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOCORWF1,0,0,0,106.6,106.92,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,106.92,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BODWF1,0,0,0,0.99743,1,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOLIVPS1,0,0,0,0,0,1560,1560,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOMENSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOWWBA1G,0,0,0,0,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOWWBA1L,0,0,0,0.003,0,36.96,36.96,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BOWWPV1,0,0,0,0,0,97.38,97.38,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR1,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,179,97,0,179,97 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR2,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,176,0,0,0,0,0,0,0,0,0,183,97,0,183,97 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR3,0,0,0,0,0,600,660,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,175,97,0,175,97 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR5,0,0,0,0.19135,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR6,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRAEMAR7,0,0,0,0,0,540,600,0,0,0,0,0,0,,,,,,,,,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BROKENH1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRYB1WF1,0,0,0,114.53117,111.37,2160,2160,0,0,0,0,0,0,,,,,,,,,0,0,111.37,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BRYB2WF2,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BULBESG1,0,0,1,0,0,240,240,0,0,0,10,10,10,,,,,,,,,0,0,20,1,1,1,1,0,0,0,0,20,20,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BULBESL1,0,0,1,0.07,0,240,240,0,11,11,0,0,0,,,,,,,,,0,0,20,0,0,0,0,1,1,1,1,0,0,0,20,20,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BULGANA1,0,0,0,28.71,29.13957,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,29.13957,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BW01,0,0,1,589.03485,596.54458,180,210.12,0,0,0,0,0,0,,,,,,,,,0,10,660,0,0,0,1,0,0,0,1,17.50973,660,334.897,17.50973,660,334.897 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BW02,0,0,1,612.17975,622.19196,180,240,0,0,0,0,0,0,,,,,,,,,0,10,650,0,0,0,1,0,0,0,1,20.01221,649.992,371.12726,20.01221,649.992,371.12726 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BW03,0,0,1,611.44733,621.45953,180,240,0,0,0,0,0,0,,,,,,,,,0,10,685,0,0,0,1,0,0,0,1,20.01221,685,332.17786,20.01221,685,332.17786 +D,DUNIT,,2,"2023/12/14 04:30:00",1,BW04,0,0,1,615.52454,625.53674,180,240,0,0,0,0,0,0,,,,,,,,,0,10,670,0,0,0,1,0,0,0,1,20.01221,670,330,20.01221,670,330 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CALL_B_1,0,0,1,258.10001,260,240,240,0,0,0,0,0,0,,,,,,,,,0,0,260,1,1,1,0,1,1,1,0,0,260,210,0,260,210 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CALL_B_2,0,0,1,318.5,320,240,240,0,0,0,0,0,0,,,,,,,,,0,0,350,1,1,1,0,1,1,1,0,0,350,280,0,350,280 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CAPBES1G,0,0,0,0,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CAPBES1L,0,0,0,0.17,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CATHROCK,0,0,0,28,31.894,840,840,0,0,0,0,0,0,,,,,,,,,0,0,31.894,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CBWWBA1G,0,0,0,0,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CBWWBA1L,0,0,0,0.003,0,28.8,28.8,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CETHANA,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CG1,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CG2,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CG3,0,4,0,144.91096,135,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CG4,0,0,0,0,0,719.99,719.99,0,0,0,0,0,0,,,,,,,,,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CHBESSG1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CHBESSL1,0,0,1,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CHILDSF1,0,0,0,0,0,11520,11520,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CHYTWF1,0,0,0,20.1,20.21,720,720,0,0,0,0,0,0,,,,,,,,,0,0,20.21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CLARESF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CLEMGPWF,0,0,0,27.94958,33.158,660,660,0,0,0,0,0,0,,,,,,,,,0,0,33.158,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CLERMSF1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CNUNDAWF,0,0,0,15.5181,16.72,600,600,0,0,0,0,0,0,,,,,,,,,0,0,16.72,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,COHUNSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,COLEASF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,COLUMSF1,0,0,0,0.56314,0,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,COLWF01,0,0,0,97.12978,99.01902,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,99.01902,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,COOPGWF1,0,0,0,226.98,227.56,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,227.56,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CPP_3,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CPP_4,0,0,0,0,0,240,240,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CPSA,0,0,0,0,0,179.18,1.55,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CROOKWF2,0,0,0,61.19539,61.455,1200,6000,0,0,0,0,0,0,,,,,,,,,0,0,61.455,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CROWLWF1,0,0,0,16.6313,16.03408,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,16.03408,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CRURWF1,0,0,0,11.59602,12.499,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,12.499,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CRWASF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CSPVPS1,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,CTHLWF1,0,0,0,37.73557,39.88839,1740,1740,0,0,0,0,0,0,,,,,,,,,0,0,39.88839,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DALNTH01,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DALNTHL1,0,0,1,0.07477,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DARLSF1,0,0,0,0,0,3300,3300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DARTM1,0,0,0,0,0,3600,3600,0,0,0,0,0,0,,,,,,,,,0,0,177,0,0,0,0,0,0,0,0,0,1,1,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DAYDSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DDPS1,0,0,1,252.95972,255,600,600,0,0,0,0,0,0,,,,,,,,,0,0,458,0,0,0,0,0,0,0,0,0,322.02585,228,0,322.02585,228 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DDSF1,0,0,0,0,0,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DEVILS_G,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,64,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DG_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DG_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DG_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DG_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DG_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DPNTBG1,0,0,1,0.01645,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,25,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DPNTBL1,0,0,1,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,24.99945,0,0,24.99945,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRACAN1,0,0,0,0,0,0,0,0,0,0,1,1,0,,,,,,,,,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRAESN1,0,0,0,0,0,0,0,1,1,1,1,1,1,,,,,,,,,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DREXMN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRFIIN01,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRGBND02,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRSHVN01,0,0,0,0,0,0,0,1,1,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRSHVS01,0,0,0,0,0,0,0,3,3,0,2,2,0,,,,,,,,,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRVIOT01,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRVIOT02,0,0,0,0,0,0,0,0,0,0,2,2,2,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRVIOT03,0,0,0,0,0,0,0,0,0,0,2,1,1,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRVIOT04,0,0,0,0,0,0,0,0,0,0,15,15,14,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRVIOT05,0,0,0,0,0,0,0,0,0,0,3,3,3,,,,,,,,,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNDA02,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNDA03,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNDA04,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNDE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXNQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXQDA01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXQQE01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXSQS01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVDJ01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVDP01,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVDX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVQP01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVQX01,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRXVQX02,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRYCGT1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRYCGT2,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DRYCGT3,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DULAWF1,0,0,0,105.8,105.2,2100,2100,0,0,0,0,0,0,,,,,,,,,0,0,105.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DUNDWF1,0,0,0,112.93,112.736,2040,2040,0,0,0,0,0,0,,,,,,,,,0,0,112.736,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DUNDWF2,0,0,0,30.61,30.513,600,600,0,0,0,0,0,0,,,,,,,,,0,0,30.513,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,DUNDWF3,0,0,0,82.71,82.074,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,82.074,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,EDENVSF1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,EILDON1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,EILDON2,0,0,0,0.04,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,60,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ELAINWF1,0,0,0,60.76,59.87694,960,960,0,0,0,0,0,0,,,,,,,,,0,0,59.87694,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,EMERASF1,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ER01,0,0,1,349.2363,352,298.92,300,0,0,0,0,0,0,,,,,,,,,0,0,700,4,4,4,4,0,0,0,0,25,699.99847,350,24.91035,699.99847,350 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ER02,0,0,1,211.44121,210,300,300,0,0,0,0,0,0,,,,,,,,,0,0,210,0,0,0,0,0,0,0,0,0,700,210.48904,0,700,210.48904 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ER03,0,0,1,351.31152,352,296.73,297.28,0,0,0,0,27,27,,,,,,,,,0,5,640,1,1,1,1,1,1,1,1,24.77302,639.45068,350,24.72724,639.45068,350 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ER04,0,0,1,350.70114,352,298.19,298.92,0,0,0,6.81414,27,27,,,,,,,,,0,5,650,1,1,1,1,1,1,1,1,24.91035,650,350,24.84932,650,350 +D,DUNIT,,2,"2023/12/14 04:30:00",1,FINLYSF1,0,0,0,0,0,180,1620,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,FISHER,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,FLYCRKWF,0,0,0,9.98,10,1680,1680,0,0,0,0,0,0,,,,,,,,,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GANGARR1,0,0,0,0,0,1440,1440,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GANNBG1,0,0,1,0,0,300,300,0,0,0,10,10,10,,,,,,,,,0,7,25,1,1,1,1,0,0,0,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GANNBL1,0,0,1,0.83069,0,300,300,0,0,0,0,0,0,,,,,,,,,24.9999,0,25,0,0,0,1,1,1,1,1,24.9999,25,0,24.9999,25,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GANNSF1,0,0,0,0,0,3000,3000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GLENSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GLRWNSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GNNDHSF1,0,0,0,0,0,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GOONSF1,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GORDON,0,0,1,11.22454,12,1800,1800,0,0,12,58,72,40,,,,,,,,,0,50,345,1,1,1,1,1,1,1,4,119,120,1,138,120,12 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GRANWF1,0,0,0,103.18999,100.77649,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,100.77649,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE2,0,0,1,111.23438,111,289.81,289.81,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE3,0,0,1,111.07715,111,287.04,287.04,0,0,0,0,0,0,,,,,,,,,0,5,280,0,0,0,1,0,0,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE4,0,0,1,110.99512,111,287.76,287.76,0,0,0,0,0,0,,,,,,,,,0,5,280,1,1,0,1,1,1,0,1,15,175,110,20,175,110 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE5,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,80,110,0,80,110 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSTONE6,0,0,1,199.98535,200,295.36,295.36,0,0,0,0,0,0,,,,,,,,,0,4,280,1,1,0,1,1,1,0,1,15,280,190,20,280,190 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSWF1A,0,0,0,0,0,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GSWF1B1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GULLRSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GULLRWF1,0,0,0,125.38309,125.69699,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,125.69699,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GULLRWF2,0,0,0,90.03654,90.64654,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,90.64654,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GUNNING1,0,0,0,0.00034,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,GUTHEGA,0,0,1,0,0,600,120,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,34,10,0,34,10 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HALLWF1,0,0,0,24.54,24.59,600,600,0,0,0,0,0,0,,,,,,,,,0,0,24.59,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HALLWF2,0,0,0,32.61,33.03,600,600,0,0,0,0,0,0,,,,,,,,,0,0,33.03,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HAMISF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HAUGHT11,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HAYMSF1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HBESSG1,0,0,1,0,0,1800,1800,0,0,0,1,5,25,,,,,,,,,0,0,6,1,1,1,1,0,0,0,1,6,150,0,6,150,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HBESSL1,0,0,1,0.8,0,1800,1800,0,0,0,0,0,0,,,,,,,,,87,0,125,0,0,0,1,1,1,1,1,124,150,0,124,150,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HDWF1,0,0,1,74.6,76.54,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,76.54,0,0,0,0,0,0,0,0,0,76.54,15,0,76.54,15 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HDWF2,0,0,1,71.1,71.55,1260,1260,0,0,0,0,0,0,,,,,,,,,0,0,71.55,0,0,0,0,0,1,1,0,0,71.55,15,0,71.55,15 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HDWF3,0,0,1,72.5,75.93,1320,1320,0,0,0,0,0,0,,,,,,,,,0,0,75.93,0,0,0,0,0,0,0,0,0,74.6,15,0,74.6,15 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HEZ1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HILLSTN1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HPRG1,0,0,1,0,0,960,960,0,0,0,85,85,85,,,,,,,,,0,27,60,1,1,1,1,0,0,0,1,60,60,0,60,60,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HPRL1,0,0,1,1.1,0,960,960,0,0,16.06679,0,0,0,,,,,,,,,0,0,75,0,0,0,1,1,1,1,1,75,75,0,75,75,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HUMENSW,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HUMEV,0,0,0,14.5,14,120,120,0,0,0,0,0,0,,,,,,,,,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HVWWBA1G,0,0,0,0,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HVWWBA1L,0,0,0,0.005,0,52.92,52.92,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,HVWWPV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JBUTTERS,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,142,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JEMALNG1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLA01,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLA02,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLA03,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLA04,0,0,0,0,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLB01,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLB02,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JLB03,0,0,0,0,0,420,420,0,0,0,0,0,0,,,,,,,,,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,JUNEESF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KABANWF1,0,0,0,88.18901,87.228,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,87.228,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KAREEYA1,0,4,1,21.6275,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KAREEYA2,0,4,1,21.4825,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KAREEYA3,0,4,1,21.56,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,4,0,0,0,0,16,21,5,8,21,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KAREEYA4,0,4,1,21.4975,22,180,300,0,0,0,0,0,0,,,,,,,,,0,0,22,0,0,0,0,0,0,0,0,0,21,5,0,21,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KARSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KEPBG1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KEPBL1,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KEPSF1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KEPWF1,0,0,0,30.1,30,480,480,0,0,0,0,0,0,,,,,,,,,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KIAMSF1,0,0,0,0,0,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KIATAWF1,0,0,0,25.1,25.9,180,420,0,0,0,0,0,0,,,,,,,,,0,0,25.9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KPP_1,0,0,1,761.29834,761,479.9,479.9,0,0,0,0,0,0,,,,,,,,,0,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,KSP1,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LADBROK1,0,0,0,-0.01,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LADBROK2,0,0,0,0.02,0,480,480,0,0,0,0,0,0,,,,,,,,,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LBBG1,0,0,1,0,0,300,300,0,0,0,13,13,13,,,,,,,,,0,11,24,1,1,1,1,0,0,0,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LBBL1,0,0,1,0.45,0,300,300,13,13,13,0,0,0,,,,,,,,,0,0,24,0,0,0,1,1,1,1,1,24,24,0,24,24,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LEM_WIL,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LGAPWF1,0,0,0,29.2,28.4,600,600,0,0,0,0,0,0,,,,,,,,,0,0,28.4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LGAPWF2,0,0,0,17.81,17.78,600,600,0,0,0,0,0,0,,,,,,,,,0,0,17.78,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LILYSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LIMOSF11,0,0,0,0,0,2640,2640,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LIMOSF21,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LI_WY_CA,0,0,1,52.74597,53,1680,1680,22.69959,51,6,12.78378,0,0,,,,,,,,,0,0,182,1,1,1,0,1,1,1,0,0,71,1,0,71,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LKBONNY1,0,0,0,28.66833,29.115,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,29.115,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LKBONNY2,0,0,0,49.9848,49.789,1920,1920,0,0,0,0,0,0,,,,,,,,,0,0,49.789,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LKBONNY3,0,0,0,13.45312,12.504,480,480,0,0,0,0,0,0,,,,,,,,,0,0,12.504,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LK_ECHO,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LNGS1,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LNGS2,0,0,0,0,0,780,900,0,0,0,0,0,0,,,,,,,,,0,0,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LONSDALE,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,19,0,0,0,0,0,0,0,0,0,0,5,0,0,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LOYYB1,0,0,1,566.91644,570,598.13,598.13,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,49.84375,570,319.125,49.84375,570,319.125 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LOYYB2,0,0,1,568.7962,570,600,600,0,0,0,0,0,0,,,,,,,,,0,0,570,1,1,1,1,1,1,1,1,50,570,350.625,50,570,350.625 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LYA1,0,0,1,502,510,300,300,10,10,10,0,0,0,,,,,,,,,5,0,520,1,1,1,1,1,1,1,1,25,520,300,25,520,300 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LYA2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,204,300,0,204,300 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LYA3,0,0,1,556,560,300,300,10,10,10,0,0,0,,,,,,,,,5,0,560,1,1,1,1,1,1,1,1,25,560,300,25,560,300 +D,DUNIT,,2,"2023/12/14 04:30:00",1,LYA4,0,0,1,545,550,300,300,10,10,10,0,0,0,,,,,,,,,5,0,550,1,1,1,1,1,1,1,1,25,550,300,25,550,300 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MACARTH1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MACKNTSH,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,88,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MANNSF2,0,0,0,0,0,240,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MANSLR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MAPS2PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MAPS3PV1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MARYRSF1,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MBPS2PV1,0,0,0,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MCKAY1,0,0,0,0.02,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,300,0,0,0,0,1,1,0,0,299,300,19.95,300,300,19.95 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MEADOWBK,0,0,1,29.89468,30,480,60,0,18,1,0,0,0,,,,,,,,,0,0,44,1,1,0,0,1,1,0,0,0,42,4.5,0,42,8 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MERCER01,0,0,0,78.6,77.6,1980,1980,0,0,0,0,0,0,,,,,,,,,0,0,77.6,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,METZSF1,0,0,0,0,0,1380,1380,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MEWF1,0,0,0,162.67673,162.25583,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,162.25583,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MIDDLSF1,0,0,0,0.05,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MINTARO,0,0,0,0.08545,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MOLNGSF1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MOORAWF1,0,0,0,142.39,143.16,3660,3660,0,0,0,0,0,0,,,,,,,,,0,0,143.16,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MOREESF1,0,0,0,0,0,180,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MORTLK11,0,4,1,232,273,780,780,0,0,0,0,0,0,,,,,,,,,0,0,273,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MORTLK12,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,269,0,0,0,0,0,0,0,0,0,292,125,0,292,125 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MOUSF1,0,0,0,0,0,1020,1020,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MP1,0,0,1,431.87915,418.60802,180,180,20,60,50,0,20,20,,,,,,,,,0,0,730,1,1,1,1,1,1,1,1,60,575.19189,308.12238,60,575.19189,308.12238 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MP2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,25.01717,700,220,25.01717,700,220 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MPP_1,0,0,1,425.71921,426,299.94,299.94,0,0,0,0,0,0,,,,,,,,,0,0,426,0,0,0,0,0,0,0,0,0,425.9939,350,0,425.9939,350 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MPP_2,0,0,1,404.37146,405,119.94,119.94,0,0,0,0,0,0,,,,,,,,,0,0,405,0,0,0,0,0,0,0,0,0,404.9971,350,0,404.9971,350 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MRTLSWF1,0,0,0,0,0,1860,1860,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MSTUART1,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,138,43,0,138,43 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MSTUART2,0,0,0,0,0,660,660,0,0,0,0,0,0,,,,,,,,,0,0,138,0,0,0,0,0,0,0,0,0,144,43,0,144,43 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MSTUART3,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MTGELWF1,0,0,0,99.27061,100,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MTMILLAR,0,0,0,0,0,840,840,0,0,0,0,0,0,,,,,,,,,0,0,17.066,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MURRAY,0,0,1,0,0,6000,9000,0,0,0,0,0,0,,,,,,,,,0,0,915,0,0,0,4,0,0,4,4,10,886,105,10,886,105 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MUSSELR1,0,0,0,125.8,125.3,10080,9000,0,0,0,0,0,0,,,,,,,,,0,0,125.3,0,0,0,0,0,0,0,0,0,125.3,50,0,125.3,50 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MUWAWF1,0,0,0,80.12,75.66,2700,1380,0,0,0,0,0,0,,,,,,,,,0,0,75.66,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MUWAWF2,0,0,0,103.2,96.48886,2400,2400,0,0,0,0,0,0,,,,,,,,,0,0,96.48886,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MWPS1PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MWPS2PV1,0,0,1,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MWPS3PV1,0,0,1,0,0,120,120,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,MWPS4PV1,0,0,0,0,0,60,60,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NBHWF1,0,0,0,59.2,60.2,600,600,0,0,0,0,0,0,,,,,,,,,0,0,60.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NEVERSF1,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NEWENSF1,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NEWENSF2,0,0,0,0,0,2399.85,2399.85,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NPS,0,0,0,0,0,6,6,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NUMURSF1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,NYNGAN1,0,0,0,0,0,1200,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OAKEY1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,172.99594,40,0,172.99594,40 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OAKEY1SF,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OAKEY2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,170,40,0,170,40 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OAKEY2SF,0,0,0,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OAKLAND1,0,0,0,34.6,32.8,600,600,0,0,0,0,0,0,,,,,,,,,0,0,32.8,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,OSB-AG,0,0,0,0,0,300,300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,181.01999,145,0,181.01999,145 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PAREPS1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PAREPW1,0,0,0,65.64,69.609,2460,2460,0,0,0,0,0,0,,,,,,,,,0,0,69.609,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PARSF1,0,0,0,0.00153,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PIBESSG1,0,0,1,0,0,60,60,0,0,0,0,1,2,,,,,,,,,0,0,1,1,1,0,1,0,0,0,1,1,4.301,0,1,4.301,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PIBESSL1,0,0,1,0.148,0,60,60,0,0,0,0,0,0,,,,,,,,,4,0,4,0,0,0,1,1,1,1,1,4,4.301,0,4,4.301,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,POAT110,0,0,1,83.5244,98,960,960,0,26.53515,19.85028,0,0,0,,,,,,,,,46.87805,0,113,0,3,3,3,1,1,1,1,57,98,5,62,113.5,5 +D,DUNIT,,2,"2023/12/14 04:30:00",1,POAT220,0,0,1,118.39513,120,960,1200,0,29,40,0,0.71795,0,,,,,,,,,3.12195,0,120,0,1,1,1,1,1,1,1,57,120,0,61,121,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,POR01,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,POR03,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PPCCGT,0,0,1,164.15668,167,540,540,0,0,0,0,0,0,,,,,,,,,0,0,241,0,0,0,0,0,0,0,0,49.85147,241,165,49.85147,241,165 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PTSTAN1,0,0,0,0,0,900,900,0,0,0,0,0,0,,,,,,,,,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PUMP1,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,PUMP2,0,0,0,0,0,7200,7200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QBYNBG1,0,0,1,0,0,120,120,0,0,0,5,5,5,,,,,,,,,0,5,10,1,1,1,1,0,0,0,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QBYNBL1,0,0,1,0.1825,0,120,120,5,5,5,0,0,0,,,,,,,,,5,0,10,0,0,0,1,1,1,1,1,10,10,0,10,10,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QPS1,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QPS2,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QPS3,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QPS4,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,QPS5,0,0,0,0,0,600,600,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,127,74,0,127,74 +D,DUNIT,,2,"2023/12/14 04:30:00",1,REECE1,0,0,0,0,0,60,60,0,0,0,0,23,22,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,REECE2,0,0,0,0,0,60,60,0,0,0,0,55,20,,,,,,,,,0,0,119,1,1,0,0,0,0,0,0,0,0,1,0,0,1 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RESS1G,0,0,1,0,0,720,720,0,0,0,34,34,34,,,,,,,,,0,0,59,1,1,1,1,0,0,0,1,59,59.99872,0,59,59.99872,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RESS1L,0,0,1,5.97107,5,720,720,34,34,34,0,0,0,,,,,,,,,0,0,59,0,0,0,0,1,1,1,1,0,59.99988,0,59,59.99988,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RIVNBG2,0,0,1,0.07926,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,64.99936,0,0,64.99936,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RIVNBL2,0,0,1,0,0,780,780,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,65,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ROMA_7,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,ROMA_8,0,0,0,0,0,360,360,0,0,0,0,0,0,,,,,,,,,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RRSF1,0,0,0,0,0,41760,41760,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_NSW6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_QLD1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_SA6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_TAS1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC1,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC10,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC11,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC12,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC2,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC3,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC4,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC5,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC6,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC7,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC8,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RT_VIC9,0,0,0,0,0,6000,6000,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RUGBYR1,0,0,0,0,0,540,540,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,RYEPARK1,0,0,0,86.06134,83.832,1620,1620,0,0,0,0,0,0,,,,,,,,,0,0,83.832,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SALTCRK1,0,0,0,37.44,37.538,660,660,0,0,0,0,0,0,,,,,,,,,0,0,37.538,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SAPHWF1,0,0,0,94.80888,94.159,3240,3240,0,0,0,0,0,0,,,,,,,,,0,0,94.159,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SEBSF1,0,0,0,0,0,1080,1080,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SHGEN,0,0,0,0,0,960,960,0,0,0,0,0,0,,,,,,,,,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SHPUMP,0,0,0,0,0,720,720,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SITHE01,0,0,0,0.1639,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SMCSF1,0,0,0,0,0.02704,1500,1500,0,0,0,0,0,0,,,,,,,,,0,0,0.02704,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNAPPER1,0,0,0,0,0,1800,1800,0,0,0,0,0,0,,,,,,,,,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNOWNTH1,0,0,0,52.1,52.2,540,300,0,0,0,0,0,0,,,,,,,,,0,0,52.2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNOWSTH1,0,0,0,66.6,68.255,480,240,0,0,0,0,0,0,,,,,,,,,0,0,68.255,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNOWTWN1,0,0,0,66.19481,66.767,1200,600,0,0,0,0,0,0,,,,,,,,,0,0,66.767,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNOWYGJP,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNOWYP,0,0,0,0,0,6000,1200,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SNUG1,0,0,0,0,0,180,180,0,0,0,0,0,0,,,,,,,,,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,SRSF1,0,0,0,0,0,15300,15300,0,0,0,0,0,0,,,,,,,,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +D,DUNIT,,2,"2023/12/14 04:30:00",1,STAN-1,0,0,0,184.81985,185,180,179.96,0,0,0,0,0,0,,,,,,,,,0,0,365,0,0,0,0,0,0,0,0,0,364.87149,185,0,364.87149,185 +D,DUNIT,,2,"2023/12/14 04:30:00",1,STAN-2,0,0,1,199.2527,200,239.95,239.69,0,0,0,0,10,10,,,,,,,,,0,3,365,1,1,0,1,1,1,1,1,15,360,170.00249,15,361.53888,170.00249 +D,DUNIT,,2,"2023/12/14 04:30:00",1,STAN-3,0,0,1,158.33829,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,257.34296,150,14.99679,257.34296,150 +D,DUNIT,,2,"2023/12/14 04:30:00",1,STAN-4,0,0,1,158.2742,160,179.96,179.96,0,0,0,0,10,10,,,,,,,,,0,3,270,1,1,0,1,1,1,1,1,14.99679,264.7901,156.42844,14.99679,264.7901,156.42844 \ No newline at end of file diff --git a/data/csv/titanic.csv b/data/csv/titanic.csv new file mode 100644 index 000000000000..97c718ffaaa1 --- /dev/null +++ b/data/csv/titanic.csv @@ -0,0 +1,892 @@ +PassengerId,Survived,Pclass,Name,Gender,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked +1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S +2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C +3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S +4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S +5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S +6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q +7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S +8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S +9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S +10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C +11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S +12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S +13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S +14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S +15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S +16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S +17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q +18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S +19,0,3,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31,1,0,345763,18,,S +20,1,3,"Masselmani, Mrs. Fatima",female,,0,0,2649,7.225,,C +21,0,2,"Fynney, Mr. Joseph J",male,35,0,0,239865,26,,S +22,1,2,"Beesley, Mr. Lawrence",male,34,0,0,248698,13,D56,S +23,1,3,"McGowan, Miss. Anna ""Annie""",female,15,0,0,330923,8.0292,,Q +24,1,1,"Sloper, Mr. William Thompson",male,28,0,0,113788,35.5,A6,S +25,0,3,"Palsson, Miss. Torborg Danira",female,8,3,1,349909,21.075,,S +26,1,3,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38,1,5,347077,31.3875,,S +27,0,3,"Emir, Mr. Farred Chehab",male,,0,0,2631,7.225,,C +28,0,1,"Fortune, Mr. Charles Alexander",male,19,3,2,19950,263,C23 C25 C27,S +29,1,3,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0,0,330959,7.8792,,Q +30,0,3,"Todoroff, Mr. Lalio",male,,0,0,349216,7.8958,,S +31,0,1,"Uruchurtu, Don. Manuel E",male,40,0,0,PC 17601,27.7208,,C +32,1,1,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1,0,PC 17569,146.5208,B78,C +33,1,3,"Glynn, Miss. Mary Agatha",female,,0,0,335677,7.75,,Q +34,0,2,"Wheadon, Mr. Edward H",male,66,0,0,C.A. 24579,10.5,,S +35,0,1,"Meyer, Mr. Edgar Joseph",male,28,1,0,PC 17604,82.1708,,C +36,0,1,"Holverson, Mr. Alexander Oskar",male,42,1,0,113789,52,,S +37,1,3,"Mamee, Mr. Hanna",male,,0,0,2677,7.2292,,C +38,0,3,"Cann, Mr. Ernest Charles",male,21,0,0,A./5. 2152,8.05,,S +39,0,3,"Vander Planke, Miss. Augusta Maria",female,18,2,0,345764,18,,S +40,1,3,"Nicola-Yarred, Miss. Jamila",female,14,1,0,2651,11.2417,,C +41,0,3,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40,1,0,7546,9.475,,S +42,0,2,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27,1,0,11668,21,,S +43,0,3,"Kraeff, Mr. Theodor",male,,0,0,349253,7.8958,,C +44,1,2,"Laroche, Miss. Simonne Marie Anne Andree",female,3,1,2,SC/Paris 2123,41.5792,,C +45,1,3,"Devaney, Miss. Margaret Delia",female,19,0,0,330958,7.8792,,Q +46,0,3,"Rogers, Mr. William John",male,,0,0,S.C./A.4. 23567,8.05,,S +47,0,3,"Lennon, Mr. Denis",male,,1,0,370371,15.5,,Q +48,1,3,"O'Driscoll, Miss. Bridget",female,,0,0,14311,7.75,,Q +49,0,3,"Samaan, Mr. Youssef",male,,2,0,2662,21.6792,,C +50,0,3,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18,1,0,349237,17.8,,S +51,0,3,"Panula, Master. Juha Niilo",male,7,4,1,3101295,39.6875,,S +52,0,3,"Nosworthy, Mr. Richard Cater",male,21,0,0,A/4. 39886,7.8,,S +53,1,1,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49,1,0,PC 17572,76.7292,D33,C +54,1,2,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29,1,0,2926,26,,S +55,0,1,"Ostby, Mr. Engelhart Cornelius",male,65,0,1,113509,61.9792,B30,C +56,1,1,"Woolner, Mr. Hugh",male,,0,0,19947,35.5,C52,S +57,1,2,"Rugg, Miss. Emily",female,21,0,0,C.A. 31026,10.5,,S +58,0,3,"Novel, Mr. Mansouer",male,28.5,0,0,2697,7.2292,,C +59,1,2,"West, Miss. Constance Mirium",female,5,1,2,C.A. 34651,27.75,,S +60,0,3,"Goodwin, Master. William Frederick",male,11,5,2,CA 2144,46.9,,S +61,0,3,"Sirayanian, Mr. Orsen",male,22,0,0,2669,7.2292,,C +62,1,1,"Icard, Miss. Amelie",female,38,0,0,113572,80,B28, +63,0,1,"Harris, Mr. Henry Birkhardt",male,45,1,0,36973,83.475,C83,S +64,0,3,"Skoog, Master. Harald",male,4,3,2,347088,27.9,,S +65,0,1,"Stewart, Mr. Albert A",male,,0,0,PC 17605,27.7208,,C +66,1,3,"Moubarek, Master. Gerios",male,,1,1,2661,15.2458,,C +67,1,2,"Nye, Mrs. (Elizabeth Ramell)",female,29,0,0,C.A. 29395,10.5,F33,S +68,0,3,"Crease, Mr. Ernest James",male,19,0,0,S.P. 3464,8.1583,,S +69,1,3,"Andersson, Miss. Erna Alexandra",female,17,4,2,3101281,7.925,,S +70,0,3,"Kink, Mr. Vincenz",male,26,2,0,315151,8.6625,,S +71,0,2,"Jenkin, Mr. Stephen Curnow",male,32,0,0,C.A. 33111,10.5,,S +72,0,3,"Goodwin, Miss. Lillian Amy",female,16,5,2,CA 2144,46.9,,S +73,0,2,"Hood, Mr. Ambrose Jr",male,21,0,0,S.O.C. 14879,73.5,,S +74,0,3,"Chronopoulos, Mr. Apostolos",male,26,1,0,2680,14.4542,,C +75,1,3,"Bing, Mr. Lee",male,32,0,0,1601,56.4958,,S +76,0,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S +77,0,3,"Staneff, Mr. Ivan",male,,0,0,349208,7.8958,,S +78,0,3,"Moutal, Mr. Rahamin Haim",male,,0,0,374746,8.05,,S +79,1,2,"Caldwell, Master. Alden Gates",male,0.83,0,2,248738,29,,S +80,1,3,"Dowdell, Miss. Elizabeth",female,30,0,0,364516,12.475,,S +81,0,3,"Waelens, Mr. Achille",male,22,0,0,345767,9,,S +82,1,3,"Sheerlinck, Mr. Jan Baptist",male,29,0,0,345779,9.5,,S +83,1,3,"McDermott, Miss. Brigdet Delia",female,,0,0,330932,7.7875,,Q +84,0,1,"Carrau, Mr. Francisco M",male,28,0,0,113059,47.1,,S +85,1,2,"Ilett, Miss. Bertha",female,17,0,0,SO/C 14885,10.5,,S +86,1,3,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33,3,0,3101278,15.85,,S +87,0,3,"Ford, Mr. William Neal",male,16,1,3,W./C. 6608,34.375,,S +88,0,3,"Slocovski, Mr. Selman Francis",male,,0,0,SOTON/OQ 392086,8.05,,S +89,1,1,"Fortune, Miss. Mabel Helen",female,23,3,2,19950,263,C23 C25 C27,S +90,0,3,"Celotti, Mr. Francesco",male,24,0,0,343275,8.05,,S +91,0,3,"Christmann, Mr. Emil",male,29,0,0,343276,8.05,,S +92,0,3,"Andreasson, Mr. Paul Edvin",male,20,0,0,347466,7.8542,,S +93,0,1,"Chaffee, Mr. Herbert Fuller",male,46,1,0,W.E.P. 5734,61.175,E31,S +94,0,3,"Dean, Mr. Bertram Frank",male,26,1,2,C.A. 2315,20.575,,S +95,0,3,"Coxon, Mr. Daniel",male,59,0,0,364500,7.25,,S +96,0,3,"Shorney, Mr. Charles Joseph",male,,0,0,374910,8.05,,S +97,0,1,"Goldschmidt, Mr. George B",male,71,0,0,PC 17754,34.6542,A5,C +98,1,1,"Greenfield, Mr. William Bertram",male,23,0,1,PC 17759,63.3583,D10 D12,C +99,1,2,"Doling, Mrs. John T (Ada Julia Bone)",female,34,0,1,231919,23,,S +100,0,2,"Kantor, Mr. Sinai",male,34,1,0,244367,26,,S +101,0,3,"Petranec, Miss. Matilda",female,28,0,0,349245,7.8958,,S +102,0,3,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0,0,349215,7.8958,,S +103,0,1,"White, Mr. Richard Frasar",male,21,0,1,35281,77.2875,D26,S +104,0,3,"Johansson, Mr. Gustaf Joel",male,33,0,0,7540,8.6542,,S +105,0,3,"Gustafsson, Mr. Anders Vilhelm",male,37,2,0,3101276,7.925,,S +106,0,3,"Mionoff, Mr. Stoytcho",male,28,0,0,349207,7.8958,,S +107,1,3,"Salkjelsvik, Miss. Anna Kristine",female,21,0,0,343120,7.65,,S +108,1,3,"Moss, Mr. Albert Johan",male,,0,0,312991,7.775,,S +109,0,3,"Rekic, Mr. Tido",male,38,0,0,349249,7.8958,,S +110,1,3,"Moran, Miss. Bertha",female,,1,0,371110,24.15,,Q +111,0,1,"Porter, Mr. Walter Chamberlain",male,47,0,0,110465,52,C110,S +112,0,3,"Zabour, Miss. Hileni",female,14.5,1,0,2665,14.4542,,C +113,0,3,"Barton, Mr. David John",male,22,0,0,324669,8.05,,S +114,0,3,"Jussila, Miss. Katriina",female,20,1,0,4136,9.825,,S +115,0,3,"Attalah, Miss. Malake",female,17,0,0,2627,14.4583,,C +116,0,3,"Pekoniemi, Mr. Edvard",male,21,0,0,STON/O 2. 3101294,7.925,,S +117,0,3,"Connors, Mr. Patrick",male,70.5,0,0,370369,7.75,,Q +118,0,2,"Turpin, Mr. William John Robert",male,29,1,0,11668,21,,S +119,0,1,"Baxter, Mr. Quigg Edmond",male,24,0,1,PC 17558,247.5208,B58 B60,C +120,0,3,"Andersson, Miss. Ellis Anna Maria",female,2,4,2,347082,31.275,,S +121,0,2,"Hickman, Mr. Stanley George",male,21,2,0,S.O.C. 14879,73.5,,S +122,0,3,"Moore, Mr. Leonard Charles",male,,0,0,A4. 54510,8.05,,S +123,0,2,"Nasser, Mr. Nicholas",male,32.5,1,0,237736,30.0708,,C +124,1,2,"Webber, Miss. Susan",female,32.5,0,0,27267,13,E101,S +125,0,1,"White, Mr. Percival Wayland",male,54,0,1,35281,77.2875,D26,S +126,1,3,"Nicola-Yarred, Master. Elias",male,12,1,0,2651,11.2417,,C +127,0,3,"McMahon, Mr. Martin",male,,0,0,370372,7.75,,Q +128,1,3,"Madsen, Mr. Fridtjof Arne",male,24,0,0,C 17369,7.1417,,S +129,1,3,"Peter, Miss. Anna",female,,1,1,2668,22.3583,F E69,C +130,0,3,"Ekstrom, Mr. Johan",male,45,0,0,347061,6.975,,S +131,0,3,"Drazenoic, Mr. Jozef",male,33,0,0,349241,7.8958,,C +132,0,3,"Coelho, Mr. Domingos Fernandeo",male,20,0,0,SOTON/O.Q. 3101307,7.05,,S +133,0,3,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47,1,0,A/5. 3337,14.5,,S +134,1,2,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29,1,0,228414,26,,S +135,0,2,"Sobey, Mr. Samuel James Hayden",male,25,0,0,C.A. 29178,13,,S +136,0,2,"Richard, Mr. Emile",male,23,0,0,SC/PARIS 2133,15.0458,,C +137,1,1,"Newsom, Miss. Helen Monypeny",female,19,0,2,11752,26.2833,D47,S +138,0,1,"Futrelle, Mr. Jacques Heath",male,37,1,0,113803,53.1,C123,S +139,0,3,"Osen, Mr. Olaf Elon",male,16,0,0,7534,9.2167,,S +140,0,1,"Giglio, Mr. Victor",male,24,0,0,PC 17593,79.2,B86,C +141,0,3,"Boulos, Mrs. Joseph (Sultana)",female,,0,2,2678,15.2458,,C +142,1,3,"Nysten, Miss. Anna Sofia",female,22,0,0,347081,7.75,,S +143,1,3,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24,1,0,STON/O2. 3101279,15.85,,S +144,0,3,"Burke, Mr. Jeremiah",male,19,0,0,365222,6.75,,Q +145,0,2,"Andrew, Mr. Edgardo Samuel",male,18,0,0,231945,11.5,,S +146,0,2,"Nicholls, Mr. Joseph Charles",male,19,1,1,C.A. 33112,36.75,,S +147,1,3,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27,0,0,350043,7.7958,,S +148,0,3,"Ford, Miss. Robina Maggie ""Ruby""",female,9,2,2,W./C. 6608,34.375,,S +149,0,2,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0,2,230080,26,F2,S +150,0,2,"Byles, Rev. Thomas Roussel Davids",male,42,0,0,244310,13,,S +151,0,2,"Bateman, Rev. Robert James",male,51,0,0,S.O.P. 1166,12.525,,S +152,1,1,"Pears, Mrs. Thomas (Edith Wearne)",female,22,1,0,113776,66.6,C2,S +153,0,3,"Meo, Mr. Alfonzo",male,55.5,0,0,A.5. 11206,8.05,,S +154,0,3,"van Billiard, Mr. Austin Blyler",male,40.5,0,2,A/5. 851,14.5,,S +155,0,3,"Olsen, Mr. Ole Martin",male,,0,0,Fa 265302,7.3125,,S +156,0,1,"Williams, Mr. Charles Duane",male,51,0,1,PC 17597,61.3792,,C +157,1,3,"Gilnagh, Miss. Katherine ""Katie""",female,16,0,0,35851,7.7333,,Q +158,0,3,"Corn, Mr. Harry",male,30,0,0,SOTON/OQ 392090,8.05,,S +159,0,3,"Smiljanic, Mr. Mile",male,,0,0,315037,8.6625,,S +160,0,3,"Sage, Master. Thomas Henry",male,,8,2,CA. 2343,69.55,,S +161,0,3,"Cribb, Mr. John Hatfield",male,44,0,1,371362,16.1,,S +162,1,2,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40,0,0,C.A. 33595,15.75,,S +163,0,3,"Bengtsson, Mr. John Viktor",male,26,0,0,347068,7.775,,S +164,0,3,"Calic, Mr. Jovo",male,17,0,0,315093,8.6625,,S +165,0,3,"Panula, Master. Eino Viljami",male,1,4,1,3101295,39.6875,,S +166,1,3,"Goldsmith, Master. Frank John William ""Frankie""",male,9,0,2,363291,20.525,,S +167,1,1,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0,1,113505,55,E33,S +168,0,3,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45,1,4,347088,27.9,,S +169,0,1,"Baumann, Mr. John D",male,,0,0,PC 17318,25.925,,S +170,0,3,"Ling, Mr. Lee",male,28,0,0,1601,56.4958,,S +171,0,1,"Van der hoef, Mr. Wyckoff",male,61,0,0,111240,33.5,B19,S +172,0,3,"Rice, Master. Arthur",male,4,4,1,382652,29.125,,Q +173,1,3,"Johnson, Miss. Eleanor Ileen",female,1,1,1,347742,11.1333,,S +174,0,3,"Sivola, Mr. Antti Wilhelm",male,21,0,0,STON/O 2. 3101280,7.925,,S +175,0,1,"Smith, Mr. James Clinch",male,56,0,0,17764,30.6958,A7,C +176,0,3,"Klasen, Mr. Klas Albin",male,18,1,1,350404,7.8542,,S +177,0,3,"Lefebre, Master. Henry Forbes",male,,3,1,4133,25.4667,,S +178,0,1,"Isham, Miss. Ann Elizabeth",female,50,0,0,PC 17595,28.7125,C49,C +179,0,2,"Hale, Mr. Reginald",male,30,0,0,250653,13,,S +180,0,3,"Leonard, Mr. Lionel",male,36,0,0,LINE,0,,S +181,0,3,"Sage, Miss. Constance Gladys",female,,8,2,CA. 2343,69.55,,S +182,0,2,"Pernot, Mr. Rene",male,,0,0,SC/PARIS 2131,15.05,,C +183,0,3,"Asplund, Master. Clarence Gustaf Hugo",male,9,4,2,347077,31.3875,,S +184,1,2,"Becker, Master. Richard F",male,1,2,1,230136,39,F4,S +185,1,3,"Kink-Heilmann, Miss. Luise Gretchen",female,4,0,2,315153,22.025,,S +186,0,1,"Rood, Mr. Hugh Roscoe",male,,0,0,113767,50,A32,S +187,1,3,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1,0,370365,15.5,,Q +188,1,1,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45,0,0,111428,26.55,,S +189,0,3,"Bourke, Mr. John",male,40,1,1,364849,15.5,,Q +190,0,3,"Turcin, Mr. Stjepan",male,36,0,0,349247,7.8958,,S +191,1,2,"Pinsky, Mrs. (Rosa)",female,32,0,0,234604,13,,S +192,0,2,"Carbines, Mr. William",male,19,0,0,28424,13,,S +193,1,3,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19,1,0,350046,7.8542,,S +194,1,2,"Navratil, Master. Michel M",male,3,1,1,230080,26,F2,S +195,1,1,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44,0,0,PC 17610,27.7208,B4,C +196,1,1,"Lurette, Miss. Elise",female,58,0,0,PC 17569,146.5208,B80,C +197,0,3,"Mernagh, Mr. Robert",male,,0,0,368703,7.75,,Q +198,0,3,"Olsen, Mr. Karl Siegwart Andreas",male,42,0,1,4579,8.4042,,S +199,1,3,"Madigan, Miss. Margaret ""Maggie""",female,,0,0,370370,7.75,,Q +200,0,2,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24,0,0,248747,13,,S +201,0,3,"Vande Walle, Mr. Nestor Cyriel",male,28,0,0,345770,9.5,,S +202,0,3,"Sage, Mr. Frederick",male,,8,2,CA. 2343,69.55,,S +203,0,3,"Johanson, Mr. Jakob Alfred",male,34,0,0,3101264,6.4958,,S +204,0,3,"Youseff, Mr. Gerious",male,45.5,0,0,2628,7.225,,C +205,1,3,"Cohen, Mr. Gurshon ""Gus""",male,18,0,0,A/5 3540,8.05,,S +206,0,3,"Strom, Miss. Telma Matilda",female,2,0,1,347054,10.4625,G6,S +207,0,3,"Backstrom, Mr. Karl Alfred",male,32,1,0,3101278,15.85,,S +208,1,3,"Albimona, Mr. Nassef Cassem",male,26,0,0,2699,18.7875,,C +209,1,3,"Carr, Miss. Helen ""Ellen""",female,16,0,0,367231,7.75,,Q +210,1,1,"Blank, Mr. Henry",male,40,0,0,112277,31,A31,C +211,0,3,"Ali, Mr. Ahmed",male,24,0,0,SOTON/O.Q. 3101311,7.05,,S +212,1,2,"Cameron, Miss. Clear Annie",female,35,0,0,F.C.C. 13528,21,,S +213,0,3,"Perkin, Mr. John Henry",male,22,0,0,A/5 21174,7.25,,S +214,0,2,"Givard, Mr. Hans Kristensen",male,30,0,0,250646,13,,S +215,0,3,"Kiernan, Mr. Philip",male,,1,0,367229,7.75,,Q +216,1,1,"Newell, Miss. Madeleine",female,31,1,0,35273,113.275,D36,C +217,1,3,"Honkanen, Miss. Eliina",female,27,0,0,STON/O2. 3101283,7.925,,S +218,0,2,"Jacobsohn, Mr. Sidney Samuel",male,42,1,0,243847,27,,S +219,1,1,"Bazzani, Miss. Albina",female,32,0,0,11813,76.2917,D15,C +220,0,2,"Harris, Mr. Walter",male,30,0,0,W/C 14208,10.5,,S +221,1,3,"Sunderland, Mr. Victor Francis",male,16,0,0,SOTON/OQ 392089,8.05,,S +222,0,2,"Bracken, Mr. James H",male,27,0,0,220367,13,,S +223,0,3,"Green, Mr. George Henry",male,51,0,0,21440,8.05,,S +224,0,3,"Nenkoff, Mr. Christo",male,,0,0,349234,7.8958,,S +225,1,1,"Hoyt, Mr. Frederick Maxfield",male,38,1,0,19943,90,C93,S +226,0,3,"Berglund, Mr. Karl Ivar Sven",male,22,0,0,PP 4348,9.35,,S +227,1,2,"Mellors, Mr. William John",male,19,0,0,SW/PP 751,10.5,,S +228,0,3,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0,0,A/5 21173,7.25,,S +229,0,2,"Fahlstrom, Mr. Arne Jonas",male,18,0,0,236171,13,,S +230,0,3,"Lefebre, Miss. Mathilde",female,,3,1,4133,25.4667,,S +231,1,1,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35,1,0,36973,83.475,C83,S +232,0,3,"Larsson, Mr. Bengt Edvin",male,29,0,0,347067,7.775,,S +233,0,2,"Sjostedt, Mr. Ernst Adolf",male,59,0,0,237442,13.5,,S +234,1,3,"Asplund, Miss. Lillian Gertrud",female,5,4,2,347077,31.3875,,S +235,0,2,"Leyson, Mr. Robert William Norman",male,24,0,0,C.A. 29566,10.5,,S +236,0,3,"Harknett, Miss. Alice Phoebe",female,,0,0,W./C. 6609,7.55,,S +237,0,2,"Hold, Mr. Stephen",male,44,1,0,26707,26,,S +238,1,2,"Collyer, Miss. Marjorie ""Lottie""",female,8,0,2,C.A. 31921,26.25,,S +239,0,2,"Pengelly, Mr. Frederick William",male,19,0,0,28665,10.5,,S +240,0,2,"Hunt, Mr. George Henry",male,33,0,0,SCO/W 1585,12.275,,S +241,0,3,"Zabour, Miss. Thamine",female,,1,0,2665,14.4542,,C +242,1,3,"Murphy, Miss. Katherine ""Kate""",female,,1,0,367230,15.5,,Q +243,0,2,"Coleridge, Mr. Reginald Charles",male,29,0,0,W./C. 14263,10.5,,S +244,0,3,"Maenpaa, Mr. Matti Alexanteri",male,22,0,0,STON/O 2. 3101275,7.125,,S +245,0,3,"Attalah, Mr. Sleiman",male,30,0,0,2694,7.225,,C +246,0,1,"Minahan, Dr. William Edward",male,44,2,0,19928,90,C78,Q +247,0,3,"Lindahl, Miss. Agda Thorilda Viktoria",female,25,0,0,347071,7.775,,S +248,1,2,"Hamalainen, Mrs. William (Anna)",female,24,0,2,250649,14.5,,S +249,1,1,"Beckwith, Mr. Richard Leonard",male,37,1,1,11751,52.5542,D35,S +250,0,2,"Carter, Rev. Ernest Courtenay",male,54,1,0,244252,26,,S +251,0,3,"Reed, Mr. James George",male,,0,0,362316,7.25,,S +252,0,3,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29,1,1,347054,10.4625,G6,S +253,0,1,"Stead, Mr. William Thomas",male,62,0,0,113514,26.55,C87,S +254,0,3,"Lobb, Mr. William Arthur",male,30,1,0,A/5. 3336,16.1,,S +255,0,3,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41,0,2,370129,20.2125,,S +256,1,3,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29,0,2,2650,15.2458,,C +257,1,1,"Thorne, Mrs. Gertrude Maybelle",female,,0,0,PC 17585,79.2,,C +258,1,1,"Cherry, Miss. Gladys",female,30,0,0,110152,86.5,B77,S +259,1,1,"Ward, Miss. Anna",female,35,0,0,PC 17755,512.3292,,C +260,1,2,"Parrish, Mrs. (Lutie Davis)",female,50,0,1,230433,26,,S +261,0,3,"Smith, Mr. Thomas",male,,0,0,384461,7.75,,Q +262,1,3,"Asplund, Master. Edvin Rojj Felix",male,3,4,2,347077,31.3875,,S +263,0,1,"Taussig, Mr. Emil",male,52,1,1,110413,79.65,E67,S +264,0,1,"Harrison, Mr. William",male,40,0,0,112059,0,B94,S +265,0,3,"Henry, Miss. Delia",female,,0,0,382649,7.75,,Q +266,0,2,"Reeves, Mr. David",male,36,0,0,C.A. 17248,10.5,,S +267,0,3,"Panula, Mr. Ernesti Arvid",male,16,4,1,3101295,39.6875,,S +268,1,3,"Persson, Mr. Ernst Ulrik",male,25,1,0,347083,7.775,,S +269,1,1,"Graham, Mrs. William Thompson (Edith Junkins)",female,58,0,1,PC 17582,153.4625,C125,S +270,1,1,"Bissette, Miss. Amelia",female,35,0,0,PC 17760,135.6333,C99,S +271,0,1,"Cairns, Mr. Alexander",male,,0,0,113798,31,,S +272,1,3,"Tornquist, Mr. William Henry",male,25,0,0,LINE,0,,S +273,1,2,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41,0,1,250644,19.5,,S +274,0,1,"Natsch, Mr. Charles H",male,37,0,1,PC 17596,29.7,C118,C +275,1,3,"Healy, Miss. Hanora ""Nora""",female,,0,0,370375,7.75,,Q +276,1,1,"Andrews, Miss. Kornelia Theodosia",female,63,1,0,13502,77.9583,D7,S +277,0,3,"Lindblom, Miss. Augusta Charlotta",female,45,0,0,347073,7.75,,S +278,0,2,"Parkes, Mr. Francis ""Frank""",male,,0,0,239853,0,,S +279,0,3,"Rice, Master. Eric",male,7,4,1,382652,29.125,,Q +280,1,3,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35,1,1,C.A. 2673,20.25,,S +281,0,3,"Duane, Mr. Frank",male,65,0,0,336439,7.75,,Q +282,0,3,"Olsson, Mr. Nils Johan Goransson",male,28,0,0,347464,7.8542,,S +283,0,3,"de Pelsmaeker, Mr. Alfons",male,16,0,0,345778,9.5,,S +284,1,3,"Dorking, Mr. Edward Arthur",male,19,0,0,A/5. 10482,8.05,,S +285,0,1,"Smith, Mr. Richard William",male,,0,0,113056,26,A19,S +286,0,3,"Stankovic, Mr. Ivan",male,33,0,0,349239,8.6625,,C +287,1,3,"de Mulder, Mr. Theodore",male,30,0,0,345774,9.5,,S +288,0,3,"Naidenoff, Mr. Penko",male,22,0,0,349206,7.8958,,S +289,1,2,"Hosono, Mr. Masabumi",male,42,0,0,237798,13,,S +290,1,3,"Connolly, Miss. Kate",female,22,0,0,370373,7.75,,Q +291,1,1,"Barber, Miss. Ellen ""Nellie""",female,26,0,0,19877,78.85,,S +292,1,1,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19,1,0,11967,91.0792,B49,C +293,0,2,"Levy, Mr. Rene Jacques",male,36,0,0,SC/Paris 2163,12.875,D,C +294,0,3,"Haas, Miss. Aloisia",female,24,0,0,349236,8.85,,S +295,0,3,"Mineff, Mr. Ivan",male,24,0,0,349233,7.8958,,S +296,0,1,"Lewy, Mr. Ervin G",male,,0,0,PC 17612,27.7208,,C +297,0,3,"Hanna, Mr. Mansour",male,23.5,0,0,2693,7.2292,,C +298,0,1,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.55,C22 C26,S +299,1,1,"Saalfeld, Mr. Adolphe",male,,0,0,19988,30.5,C106,S +300,1,1,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50,0,1,PC 17558,247.5208,B58 B60,C +301,1,3,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0,0,9234,7.75,,Q +302,1,3,"McCoy, Mr. Bernard",male,,2,0,367226,23.25,,Q +303,0,3,"Johnson, Mr. William Cahoone Jr",male,19,0,0,LINE,0,,S +304,1,2,"Keane, Miss. Nora A",female,,0,0,226593,12.35,E101,Q +305,0,3,"Williams, Mr. Howard Hugh ""Harry""",male,,0,0,A/5 2466,8.05,,S +306,1,1,"Allison, Master. Hudson Trevor",male,0.92,1,2,113781,151.55,C22 C26,S +307,1,1,"Fleming, Miss. Margaret",female,,0,0,17421,110.8833,,C +308,1,1,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17,1,0,PC 17758,108.9,C65,C +309,0,2,"Abelson, Mr. Samuel",male,30,1,0,P/PP 3381,24,,C +310,1,1,"Francatelli, Miss. Laura Mabel",female,30,0,0,PC 17485,56.9292,E36,C +311,1,1,"Hays, Miss. Margaret Bechstein",female,24,0,0,11767,83.1583,C54,C +312,1,1,"Ryerson, Miss. Emily Borie",female,18,2,2,PC 17608,262.375,B57 B59 B63 B66,C +313,0,2,"Lahtinen, Mrs. William (Anna Sylfven)",female,26,1,1,250651,26,,S +314,0,3,"Hendekovic, Mr. Ignjac",male,28,0,0,349243,7.8958,,S +315,0,2,"Hart, Mr. Benjamin",male,43,1,1,F.C.C. 13529,26.25,,S +316,1,3,"Nilsson, Miss. Helmina Josefina",female,26,0,0,347470,7.8542,,S +317,1,2,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24,1,0,244367,26,,S +318,0,2,"Moraweck, Dr. Ernest",male,54,0,0,29011,14,,S +319,1,1,"Wick, Miss. Mary Natalie",female,31,0,2,36928,164.8667,C7,S +320,1,1,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40,1,1,16966,134.5,E34,C +321,0,3,"Dennis, Mr. Samuel",male,22,0,0,A/5 21172,7.25,,S +322,0,3,"Danoff, Mr. Yoto",male,27,0,0,349219,7.8958,,S +323,1,2,"Slayter, Miss. Hilda Mary",female,30,0,0,234818,12.35,,Q +324,1,2,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22,1,1,248738,29,,S +325,0,3,"Sage, Mr. George John Jr",male,,8,2,CA. 2343,69.55,,S +326,1,1,"Young, Miss. Marie Grice",female,36,0,0,PC 17760,135.6333,C32,C +327,0,3,"Nysveen, Mr. Johan Hansen",male,61,0,0,345364,6.2375,,S +328,1,2,"Ball, Mrs. (Ada E Hall)",female,36,0,0,28551,13,D,S +329,1,3,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31,1,1,363291,20.525,,S +330,1,1,"Hippach, Miss. Jean Gertrude",female,16,0,1,111361,57.9792,B18,C +331,1,3,"McCoy, Miss. Agnes",female,,2,0,367226,23.25,,Q +332,0,1,"Partner, Mr. Austen",male,45.5,0,0,113043,28.5,C124,S +333,0,1,"Graham, Mr. George Edward",male,38,0,1,PC 17582,153.4625,C91,S +334,0,3,"Vander Planke, Mr. Leo Edmondus",male,16,2,0,345764,18,,S +335,1,1,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1,0,PC 17611,133.65,,S +336,0,3,"Denkoff, Mr. Mitto",male,,0,0,349225,7.8958,,S +337,0,1,"Pears, Mr. Thomas Clinton",male,29,1,0,113776,66.6,C2,S +338,1,1,"Burns, Miss. Elizabeth Margaret",female,41,0,0,16966,134.5,E40,C +339,1,3,"Dahl, Mr. Karl Edwart",male,45,0,0,7598,8.05,,S +340,0,1,"Blackwell, Mr. Stephen Weart",male,45,0,0,113784,35.5,T,S +341,1,2,"Navratil, Master. Edmond Roger",male,2,1,1,230080,26,F2,S +342,1,1,"Fortune, Miss. Alice Elizabeth",female,24,3,2,19950,263,C23 C25 C27,S +343,0,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13,,S +344,0,2,"Sedgwick, Mr. Charles Frederick Waddington",male,25,0,0,244361,13,,S +345,0,2,"Fox, Mr. Stanley Hubert",male,36,0,0,229236,13,,S +346,1,2,"Brown, Miss. Amelia ""Mildred""",female,24,0,0,248733,13,F33,S +347,1,2,"Smith, Miss. Marion Elsie",female,40,0,0,31418,13,,S +348,1,3,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1,0,386525,16.1,,S +349,1,3,"Coutts, Master. William Loch ""William""",male,3,1,1,C.A. 37671,15.9,,S +350,0,3,"Dimic, Mr. Jovan",male,42,0,0,315088,8.6625,,S +351,0,3,"Odahl, Mr. Nils Martin",male,23,0,0,7267,9.225,,S +352,0,1,"Williams-Lambert, Mr. Fletcher Fellows",male,,0,0,113510,35,C128,S +353,0,3,"Elias, Mr. Tannous",male,15,1,1,2695,7.2292,,C +354,0,3,"Arnold-Franchi, Mr. Josef",male,25,1,0,349237,17.8,,S +355,0,3,"Yousif, Mr. Wazli",male,,0,0,2647,7.225,,C +356,0,3,"Vanden Steen, Mr. Leo Peter",male,28,0,0,345783,9.5,,S +357,1,1,"Bowerman, Miss. Elsie Edith",female,22,0,1,113505,55,E33,S +358,0,2,"Funk, Miss. Annie Clemmer",female,38,0,0,237671,13,,S +359,1,3,"McGovern, Miss. Mary",female,,0,0,330931,7.8792,,Q +360,1,3,"Mockler, Miss. Helen Mary ""Ellie""",female,,0,0,330980,7.8792,,Q +361,0,3,"Skoog, Mr. Wilhelm",male,40,1,4,347088,27.9,,S +362,0,2,"del Carlo, Mr. Sebastiano",male,29,1,0,SC/PARIS 2167,27.7208,,C +363,0,3,"Barbara, Mrs. (Catherine David)",female,45,0,1,2691,14.4542,,C +364,0,3,"Asim, Mr. Adola",male,35,0,0,SOTON/O.Q. 3101310,7.05,,S +365,0,3,"O'Brien, Mr. Thomas",male,,1,0,370365,15.5,,Q +366,0,3,"Adahl, Mr. Mauritz Nils Martin",male,30,0,0,C 7076,7.25,,S +367,1,1,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60,1,0,110813,75.25,D37,C +368,1,3,"Moussa, Mrs. (Mantoura Boulos)",female,,0,0,2626,7.2292,,C +369,1,3,"Jermyn, Miss. Annie",female,,0,0,14313,7.75,,Q +370,1,1,"Aubart, Mme. Leontine Pauline",female,24,0,0,PC 17477,69.3,B35,C +371,1,1,"Harder, Mr. George Achilles",male,25,1,0,11765,55.4417,E50,C +372,0,3,"Wiklund, Mr. Jakob Alfred",male,18,1,0,3101267,6.4958,,S +373,0,3,"Beavan, Mr. William Thomas",male,19,0,0,323951,8.05,,S +374,0,1,"Ringhini, Mr. Sante",male,22,0,0,PC 17760,135.6333,,C +375,0,3,"Palsson, Miss. Stina Viola",female,3,3,1,349909,21.075,,S +376,1,1,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1,0,PC 17604,82.1708,,C +377,1,3,"Landergren, Miss. Aurora Adelia",female,22,0,0,C 7077,7.25,,S +378,0,1,"Widener, Mr. Harry Elkins",male,27,0,2,113503,211.5,C82,C +379,0,3,"Betros, Mr. Tannous",male,20,0,0,2648,4.0125,,C +380,0,3,"Gustafsson, Mr. Karl Gideon",male,19,0,0,347069,7.775,,S +381,1,1,"Bidois, Miss. Rosalie",female,42,0,0,PC 17757,227.525,,C +382,1,3,"Nakid, Miss. Maria (""Mary"")",female,1,0,2,2653,15.7417,,C +383,0,3,"Tikkanen, Mr. Juho",male,32,0,0,STON/O 2. 3101293,7.925,,S +384,1,1,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35,1,0,113789,52,,S +385,0,3,"Plotcharsky, Mr. Vasil",male,,0,0,349227,7.8958,,S +386,0,2,"Davies, Mr. Charles Henry",male,18,0,0,S.O.C. 14879,73.5,,S +387,0,3,"Goodwin, Master. Sidney Leonard",male,1,5,2,CA 2144,46.9,,S +388,1,2,"Buss, Miss. Kate",female,36,0,0,27849,13,,S +389,0,3,"Sadlier, Mr. Matthew",male,,0,0,367655,7.7292,,Q +390,1,2,"Lehmann, Miss. Bertha",female,17,0,0,SC 1748,12,,C +391,1,1,"Carter, Mr. William Ernest",male,36,1,2,113760,120,B96 B98,S +392,1,3,"Jansson, Mr. Carl Olof",male,21,0,0,350034,7.7958,,S +393,0,3,"Gustafsson, Mr. Johan Birger",male,28,2,0,3101277,7.925,,S +394,1,1,"Newell, Miss. Marjorie",female,23,1,0,35273,113.275,D36,C +395,1,3,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24,0,2,PP 9549,16.7,G6,S +396,0,3,"Johansson, Mr. Erik",male,22,0,0,350052,7.7958,,S +397,0,3,"Olsson, Miss. Elina",female,31,0,0,350407,7.8542,,S +398,0,2,"McKane, Mr. Peter David",male,46,0,0,28403,26,,S +399,0,2,"Pain, Dr. Alfred",male,23,0,0,244278,10.5,,S +400,1,2,"Trout, Mrs. William H (Jessie L)",female,28,0,0,240929,12.65,,S +401,1,3,"Niskanen, Mr. Juha",male,39,0,0,STON/O 2. 3101289,7.925,,S +402,0,3,"Adams, Mr. John",male,26,0,0,341826,8.05,,S +403,0,3,"Jussila, Miss. Mari Aina",female,21,1,0,4137,9.825,,S +404,0,3,"Hakkarainen, Mr. Pekka Pietari",male,28,1,0,STON/O2. 3101279,15.85,,S +405,0,3,"Oreskovic, Miss. Marija",female,20,0,0,315096,8.6625,,S +406,0,2,"Gale, Mr. Shadrach",male,34,1,0,28664,21,,S +407,0,3,"Widegren, Mr. Carl/Charles Peter",male,51,0,0,347064,7.75,,S +408,1,2,"Richards, Master. William Rowe",male,3,1,1,29106,18.75,,S +409,0,3,"Birkeland, Mr. Hans Martin Monsen",male,21,0,0,312992,7.775,,S +410,0,3,"Lefebre, Miss. Ida",female,,3,1,4133,25.4667,,S +411,0,3,"Sdycoff, Mr. Todor",male,,0,0,349222,7.8958,,S +412,0,3,"Hart, Mr. Henry",male,,0,0,394140,6.8583,,Q +413,1,1,"Minahan, Miss. Daisy E",female,33,1,0,19928,90,C78,Q +414,0,2,"Cunningham, Mr. Alfred Fleming",male,,0,0,239853,0,,S +415,1,3,"Sundman, Mr. Johan Julian",male,44,0,0,STON/O 2. 3101269,7.925,,S +416,0,3,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0,0,343095,8.05,,S +417,1,2,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34,1,1,28220,32.5,,S +418,1,2,"Silven, Miss. Lyyli Karoliina",female,18,0,2,250652,13,,S +419,0,2,"Matthews, Mr. William John",male,30,0,0,28228,13,,S +420,0,3,"Van Impe, Miss. Catharina",female,10,0,2,345773,24.15,,S +421,0,3,"Gheorgheff, Mr. Stanio",male,,0,0,349254,7.8958,,C +422,0,3,"Charters, Mr. David",male,21,0,0,A/5. 13032,7.7333,,Q +423,0,3,"Zimmerman, Mr. Leo",male,29,0,0,315082,7.875,,S +424,0,3,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28,1,1,347080,14.4,,S +425,0,3,"Rosblom, Mr. Viktor Richard",male,18,1,1,370129,20.2125,,S +426,0,3,"Wiseman, Mr. Phillippe",male,,0,0,A/4. 34244,7.25,,S +427,1,2,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28,1,0,2003,26,,S +428,1,2,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19,0,0,250655,26,,S +429,0,3,"Flynn, Mr. James",male,,0,0,364851,7.75,,Q +430,1,3,"Pickard, Mr. Berk (Berk Trembisky)",male,32,0,0,SOTON/O.Q. 392078,8.05,E10,S +431,1,1,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28,0,0,110564,26.55,C52,S +432,1,3,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1,0,376564,16.1,,S +433,1,2,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42,1,0,SC/AH 3085,26,,S +434,0,3,"Kallio, Mr. Nikolai Erland",male,17,0,0,STON/O 2. 3101274,7.125,,S +435,0,1,"Silvey, Mr. William Baird",male,50,1,0,13507,55.9,E44,S +436,1,1,"Carter, Miss. Lucile Polk",female,14,1,2,113760,120,B96 B98,S +437,0,3,"Ford, Miss. Doolina Margaret ""Daisy""",female,21,2,2,W./C. 6608,34.375,,S +438,1,2,"Richards, Mrs. Sidney (Emily Hocking)",female,24,2,3,29106,18.75,,S +439,0,1,"Fortune, Mr. Mark",male,64,1,4,19950,263,C23 C25 C27,S +440,0,2,"Kvillner, Mr. Johan Henrik Johannesson",male,31,0,0,C.A. 18723,10.5,,S +441,1,2,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45,1,1,F.C.C. 13529,26.25,,S +442,0,3,"Hampe, Mr. Leon",male,20,0,0,345769,9.5,,S +443,0,3,"Petterson, Mr. Johan Emil",male,25,1,0,347076,7.775,,S +444,1,2,"Reynaldo, Ms. Encarnacion",female,28,0,0,230434,13,,S +445,1,3,"Johannesen-Bratthammer, Mr. Bernt",male,,0,0,65306,8.1125,,S +446,1,1,"Dodge, Master. Washington",male,4,0,2,33638,81.8583,A34,S +447,1,2,"Mellinger, Miss. Madeleine Violet",female,13,0,1,250644,19.5,,S +448,1,1,"Seward, Mr. Frederic Kimber",male,34,0,0,113794,26.55,,S +449,1,3,"Baclini, Miss. Marie Catherine",female,5,2,1,2666,19.2583,,C +450,1,1,"Peuchen, Major. Arthur Godfrey",male,52,0,0,113786,30.5,C104,S +451,0,2,"West, Mr. Edwy Arthur",male,36,1,2,C.A. 34651,27.75,,S +452,0,3,"Hagland, Mr. Ingvald Olai Olsen",male,,1,0,65303,19.9667,,S +453,0,1,"Foreman, Mr. Benjamin Laventall",male,30,0,0,113051,27.75,C111,C +454,1,1,"Goldenberg, Mr. Samuel L",male,49,1,0,17453,89.1042,C92,C +455,0,3,"Peduzzi, Mr. Joseph",male,,0,0,A/5 2817,8.05,,S +456,1,3,"Jalsevac, Mr. Ivan",male,29,0,0,349240,7.8958,,C +457,0,1,"Millet, Mr. Francis Davis",male,65,0,0,13509,26.55,E38,S +458,1,1,"Kenyon, Mrs. Frederick R (Marion)",female,,1,0,17464,51.8625,D21,S +459,1,2,"Toomey, Miss. Ellen",female,50,0,0,F.C.C. 13531,10.5,,S +460,0,3,"O'Connor, Mr. Maurice",male,,0,0,371060,7.75,,Q +461,1,1,"Anderson, Mr. Harry",male,48,0,0,19952,26.55,E12,S +462,0,3,"Morley, Mr. William",male,34,0,0,364506,8.05,,S +463,0,1,"Gee, Mr. Arthur H",male,47,0,0,111320,38.5,E63,S +464,0,2,"Milling, Mr. Jacob Christian",male,48,0,0,234360,13,,S +465,0,3,"Maisner, Mr. Simon",male,,0,0,A/S 2816,8.05,,S +466,0,3,"Goncalves, Mr. Manuel Estanslas",male,38,0,0,SOTON/O.Q. 3101306,7.05,,S +467,0,2,"Campbell, Mr. William",male,,0,0,239853,0,,S +468,0,1,"Smart, Mr. John Montgomery",male,56,0,0,113792,26.55,,S +469,0,3,"Scanlan, Mr. James",male,,0,0,36209,7.725,,Q +470,1,3,"Baclini, Miss. Helene Barbara",female,0.75,2,1,2666,19.2583,,C +471,0,3,"Keefe, Mr. Arthur",male,,0,0,323592,7.25,,S +472,0,3,"Cacic, Mr. Luka",male,38,0,0,315089,8.6625,,S +473,1,2,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33,1,2,C.A. 34651,27.75,,S +474,1,2,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23,0,0,SC/AH Basle 541,13.7917,D,C +475,0,3,"Strandberg, Miss. Ida Sofia",female,22,0,0,7553,9.8375,,S +476,0,1,"Clifford, Mr. George Quincy",male,,0,0,110465,52,A14,S +477,0,2,"Renouf, Mr. Peter Henry",male,34,1,0,31027,21,,S +478,0,3,"Braund, Mr. Lewis Richard",male,29,1,0,3460,7.0458,,S +479,0,3,"Karlsson, Mr. Nils August",male,22,0,0,350060,7.5208,,S +480,1,3,"Hirvonen, Miss. Hildur E",female,2,0,1,3101298,12.2875,,S +481,0,3,"Goodwin, Master. Harold Victor",male,9,5,2,CA 2144,46.9,,S +482,0,2,"Frost, Mr. Anthony Wood ""Archie""",male,,0,0,239854,0,,S +483,0,3,"Rouse, Mr. Richard Henry",male,50,0,0,A/5 3594,8.05,,S +484,1,3,"Turkula, Mrs. (Hedwig)",female,63,0,0,4134,9.5875,,S +485,1,1,"Bishop, Mr. Dickinson H",male,25,1,0,11967,91.0792,B49,C +486,0,3,"Lefebre, Miss. Jeannie",female,,3,1,4133,25.4667,,S +487,1,1,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35,1,0,19943,90,C93,S +488,0,1,"Kent, Mr. Edward Austin",male,58,0,0,11771,29.7,B37,C +489,0,3,"Somerton, Mr. Francis William",male,30,0,0,A.5. 18509,8.05,,S +490,1,3,"Coutts, Master. Eden Leslie ""Neville""",male,9,1,1,C.A. 37671,15.9,,S +491,0,3,"Hagland, Mr. Konrad Mathias Reiersen",male,,1,0,65304,19.9667,,S +492,0,3,"Windelov, Mr. Einar",male,21,0,0,SOTON/OQ 3101317,7.25,,S +493,0,1,"Molson, Mr. Harry Markland",male,55,0,0,113787,30.5,C30,S +494,0,1,"Artagaveytia, Mr. Ramon",male,71,0,0,PC 17609,49.5042,,C +495,0,3,"Stanley, Mr. Edward Roland",male,21,0,0,A/4 45380,8.05,,S +496,0,3,"Yousseff, Mr. Gerious",male,,0,0,2627,14.4583,,C +497,1,1,"Eustis, Miss. Elizabeth Mussey",female,54,1,0,36947,78.2667,D20,C +498,0,3,"Shellard, Mr. Frederick William",male,,0,0,C.A. 6212,15.1,,S +499,0,1,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25,1,2,113781,151.55,C22 C26,S +500,0,3,"Svensson, Mr. Olof",male,24,0,0,350035,7.7958,,S +501,0,3,"Calic, Mr. Petar",male,17,0,0,315086,8.6625,,S +502,0,3,"Canavan, Miss. Mary",female,21,0,0,364846,7.75,,Q +503,0,3,"O'Sullivan, Miss. Bridget Mary",female,,0,0,330909,7.6292,,Q +504,0,3,"Laitinen, Miss. Kristina Sofia",female,37,0,0,4135,9.5875,,S +505,1,1,"Maioni, Miss. Roberta",female,16,0,0,110152,86.5,B79,S +506,0,1,"Penasco y Castellana, Mr. Victor de Satode",male,18,1,0,PC 17758,108.9,C65,C +507,1,2,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33,0,2,26360,26,,S +508,1,1,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0,0,111427,26.55,,S +509,0,3,"Olsen, Mr. Henry Margido",male,28,0,0,C 4001,22.525,,S +510,1,3,"Lang, Mr. Fang",male,26,0,0,1601,56.4958,,S +511,1,3,"Daly, Mr. Eugene Patrick",male,29,0,0,382651,7.75,,Q +512,0,3,"Webber, Mr. James",male,,0,0,SOTON/OQ 3101316,8.05,,S +513,1,1,"McGough, Mr. James Robert",male,36,0,0,PC 17473,26.2875,E25,S +514,1,1,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54,1,0,PC 17603,59.4,,C +515,0,3,"Coleff, Mr. Satio",male,24,0,0,349209,7.4958,,S +516,0,1,"Walker, Mr. William Anderson",male,47,0,0,36967,34.0208,D46,S +517,1,2,"Lemore, Mrs. (Amelia Milley)",female,34,0,0,C.A. 34260,10.5,F33,S +518,0,3,"Ryan, Mr. Patrick",male,,0,0,371110,24.15,,Q +519,1,2,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36,1,0,226875,26,,S +520,0,3,"Pavlovic, Mr. Stefo",male,32,0,0,349242,7.8958,,S +521,1,1,"Perreault, Miss. Anne",female,30,0,0,12749,93.5,B73,S +522,0,3,"Vovk, Mr. Janko",male,22,0,0,349252,7.8958,,S +523,0,3,"Lahoud, Mr. Sarkis",male,,0,0,2624,7.225,,C +524,1,1,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44,0,1,111361,57.9792,B18,C +525,0,3,"Kassem, Mr. Fared",male,,0,0,2700,7.2292,,C +526,0,3,"Farrell, Mr. James",male,40.5,0,0,367232,7.75,,Q +527,1,2,"Ridsdale, Miss. Lucy",female,50,0,0,W./C. 14258,10.5,,S +528,0,1,"Farthing, Mr. John",male,,0,0,PC 17483,221.7792,C95,S +529,0,3,"Salonen, Mr. Johan Werner",male,39,0,0,3101296,7.925,,S +530,0,2,"Hocking, Mr. Richard George",male,23,2,1,29104,11.5,,S +531,1,2,"Quick, Miss. Phyllis May",female,2,1,1,26360,26,,S +532,0,3,"Toufik, Mr. Nakli",male,,0,0,2641,7.2292,,C +533,0,3,"Elias, Mr. Joseph Jr",male,17,1,1,2690,7.2292,,C +534,1,3,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0,2,2668,22.3583,,C +535,0,3,"Cacic, Miss. Marija",female,30,0,0,315084,8.6625,,S +536,1,2,"Hart, Miss. Eva Miriam",female,7,0,2,F.C.C. 13529,26.25,,S +537,0,1,"Butt, Major. Archibald Willingham",male,45,0,0,113050,26.55,B38,S +538,1,1,"LeRoy, Miss. Bertha",female,30,0,0,PC 17761,106.425,,C +539,0,3,"Risien, Mr. Samuel Beard",male,,0,0,364498,14.5,,S +540,1,1,"Frolicher, Miss. Hedwig Margaritha",female,22,0,2,13568,49.5,B39,C +541,1,1,"Crosby, Miss. Harriet R",female,36,0,2,WE/P 5735,71,B22,S +542,0,3,"Andersson, Miss. Ingeborg Constanzia",female,9,4,2,347082,31.275,,S +543,0,3,"Andersson, Miss. Sigrid Elisabeth",female,11,4,2,347082,31.275,,S +544,1,2,"Beane, Mr. Edward",male,32,1,0,2908,26,,S +545,0,1,"Douglas, Mr. Walter Donald",male,50,1,0,PC 17761,106.425,C86,C +546,0,1,"Nicholson, Mr. Arthur Ernest",male,64,0,0,693,26,,S +547,1,2,"Beane, Mrs. Edward (Ethel Clarke)",female,19,1,0,2908,26,,S +548,1,2,"Padro y Manent, Mr. Julian",male,,0,0,SC/PARIS 2146,13.8625,,C +549,0,3,"Goldsmith, Mr. Frank John",male,33,1,1,363291,20.525,,S +550,1,2,"Davies, Master. John Morgan Jr",male,8,1,1,C.A. 33112,36.75,,S +551,1,1,"Thayer, Mr. John Borland Jr",male,17,0,2,17421,110.8833,C70,C +552,0,2,"Sharp, Mr. Percival James R",male,27,0,0,244358,26,,S +553,0,3,"O'Brien, Mr. Timothy",male,,0,0,330979,7.8292,,Q +554,1,3,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22,0,0,2620,7.225,,C +555,1,3,"Ohman, Miss. Velin",female,22,0,0,347085,7.775,,S +556,0,1,"Wright, Mr. George",male,62,0,0,113807,26.55,,S +557,1,1,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48,1,0,11755,39.6,A16,C +558,0,1,"Robbins, Mr. Victor",male,,0,0,PC 17757,227.525,,C +559,1,1,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39,1,1,110413,79.65,E67,S +560,1,3,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36,1,0,345572,17.4,,S +561,0,3,"Morrow, Mr. Thomas Rowan",male,,0,0,372622,7.75,,Q +562,0,3,"Sivic, Mr. Husein",male,40,0,0,349251,7.8958,,S +563,0,2,"Norman, Mr. Robert Douglas",male,28,0,0,218629,13.5,,S +564,0,3,"Simmons, Mr. John",male,,0,0,SOTON/OQ 392082,8.05,,S +565,0,3,"Meanwell, Miss. (Marion Ogden)",female,,0,0,SOTON/O.Q. 392087,8.05,,S +566,0,3,"Davies, Mr. Alfred J",male,24,2,0,A/4 48871,24.15,,S +567,0,3,"Stoytcheff, Mr. Ilia",male,19,0,0,349205,7.8958,,S +568,0,3,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29,0,4,349909,21.075,,S +569,0,3,"Doharr, Mr. Tannous",male,,0,0,2686,7.2292,,C +570,1,3,"Jonsson, Mr. Carl",male,32,0,0,350417,7.8542,,S +571,1,2,"Harris, Mr. George",male,62,0,0,S.W./PP 752,10.5,,S +572,1,1,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53,2,0,11769,51.4792,C101,S +573,1,1,"Flynn, Mr. John Irwin (""Irving"")",male,36,0,0,PC 17474,26.3875,E25,S +574,1,3,"Kelly, Miss. Mary",female,,0,0,14312,7.75,,Q +575,0,3,"Rush, Mr. Alfred George John",male,16,0,0,A/4. 20589,8.05,,S +576,0,3,"Patchett, Mr. George",male,19,0,0,358585,14.5,,S +577,1,2,"Garside, Miss. Ethel",female,34,0,0,243880,13,,S +578,1,1,"Silvey, Mrs. William Baird (Alice Munger)",female,39,1,0,13507,55.9,E44,S +579,0,3,"Caram, Mrs. Joseph (Maria Elias)",female,,1,0,2689,14.4583,,C +580,1,3,"Jussila, Mr. Eiriik",male,32,0,0,STON/O 2. 3101286,7.925,,S +581,1,2,"Christy, Miss. Julie Rachel",female,25,1,1,237789,30,,S +582,1,1,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39,1,1,17421,110.8833,C68,C +583,0,2,"Downton, Mr. William James",male,54,0,0,28403,26,,S +584,0,1,"Ross, Mr. John Hugo",male,36,0,0,13049,40.125,A10,C +585,0,3,"Paulner, Mr. Uscher",male,,0,0,3411,8.7125,,C +586,1,1,"Taussig, Miss. Ruth",female,18,0,2,110413,79.65,E68,S +587,0,2,"Jarvis, Mr. John Denzil",male,47,0,0,237565,15,,S +588,1,1,"Frolicher-Stehli, Mr. Maxmillian",male,60,1,1,13567,79.2,B41,C +589,0,3,"Gilinski, Mr. Eliezer",male,22,0,0,14973,8.05,,S +590,0,3,"Murdlin, Mr. Joseph",male,,0,0,A./5. 3235,8.05,,S +591,0,3,"Rintamaki, Mr. Matti",male,35,0,0,STON/O 2. 3101273,7.125,,S +592,1,1,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52,1,0,36947,78.2667,D20,C +593,0,3,"Elsbury, Mr. William James",male,47,0,0,A/5 3902,7.25,,S +594,0,3,"Bourke, Miss. Mary",female,,0,2,364848,7.75,,Q +595,0,2,"Chapman, Mr. John Henry",male,37,1,0,SC/AH 29037,26,,S +596,0,3,"Van Impe, Mr. Jean Baptiste",male,36,1,1,345773,24.15,,S +597,1,2,"Leitch, Miss. Jessie Wills",female,,0,0,248727,33,,S +598,0,3,"Johnson, Mr. Alfred",male,49,0,0,LINE,0,,S +599,0,3,"Boulos, Mr. Hanna",male,,0,0,2664,7.225,,C +600,1,1,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49,1,0,PC 17485,56.9292,A20,C +601,1,2,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24,2,1,243847,27,,S +602,0,3,"Slabenoff, Mr. Petco",male,,0,0,349214,7.8958,,S +603,0,1,"Harrington, Mr. Charles H",male,,0,0,113796,42.4,,S +604,0,3,"Torber, Mr. Ernst William",male,44,0,0,364511,8.05,,S +605,1,1,"Homer, Mr. Harry (""Mr E Haven"")",male,35,0,0,111426,26.55,,C +606,0,3,"Lindell, Mr. Edvard Bengtsson",male,36,1,0,349910,15.55,,S +607,0,3,"Karaic, Mr. Milan",male,30,0,0,349246,7.8958,,S +608,1,1,"Daniel, Mr. Robert Williams",male,27,0,0,113804,30.5,,S +609,1,2,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22,1,2,SC/Paris 2123,41.5792,,C +610,1,1,"Shutes, Miss. Elizabeth W",female,40,0,0,PC 17582,153.4625,C125,S +611,0,3,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39,1,5,347082,31.275,,S +612,0,3,"Jardin, Mr. Jose Neto",male,,0,0,SOTON/O.Q. 3101305,7.05,,S +613,1,3,"Murphy, Miss. Margaret Jane",female,,1,0,367230,15.5,,Q +614,0,3,"Horgan, Mr. John",male,,0,0,370377,7.75,,Q +615,0,3,"Brocklebank, Mr. William Alfred",male,35,0,0,364512,8.05,,S +616,1,2,"Herman, Miss. Alice",female,24,1,2,220845,65,,S +617,0,3,"Danbom, Mr. Ernst Gilbert",male,34,1,1,347080,14.4,,S +618,0,3,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26,1,0,A/5. 3336,16.1,,S +619,1,2,"Becker, Miss. Marion Louise",female,4,2,1,230136,39,F4,S +620,0,2,"Gavey, Mr. Lawrence",male,26,0,0,31028,10.5,,S +621,0,3,"Yasbeck, Mr. Antoni",male,27,1,0,2659,14.4542,,C +622,1,1,"Kimball, Mr. Edwin Nelson Jr",male,42,1,0,11753,52.5542,D19,S +623,1,3,"Nakid, Mr. Sahid",male,20,1,1,2653,15.7417,,C +624,0,3,"Hansen, Mr. Henry Damsgaard",male,21,0,0,350029,7.8542,,S +625,0,3,"Bowen, Mr. David John ""Dai""",male,21,0,0,54636,16.1,,S +626,0,1,"Sutton, Mr. Frederick",male,61,0,0,36963,32.3208,D50,S +627,0,2,"Kirkland, Rev. Charles Leonard",male,57,0,0,219533,12.35,,Q +628,1,1,"Longley, Miss. Gretchen Fiske",female,21,0,0,13502,77.9583,D9,S +629,0,3,"Bostandyeff, Mr. Guentcho",male,26,0,0,349224,7.8958,,S +630,0,3,"O'Connell, Mr. Patrick D",male,,0,0,334912,7.7333,,Q +631,1,1,"Barkworth, Mr. Algernon Henry Wilson",male,80,0,0,27042,30,A23,S +632,0,3,"Lundahl, Mr. Johan Svensson",male,51,0,0,347743,7.0542,,S +633,1,1,"Stahelin-Maeglin, Dr. Max",male,32,0,0,13214,30.5,B50,C +634,0,1,"Parr, Mr. William Henry Marsh",male,,0,0,112052,0,,S +635,0,3,"Skoog, Miss. Mabel",female,9,3,2,347088,27.9,,S +636,1,2,"Davis, Miss. Mary",female,28,0,0,237668,13,,S +637,0,3,"Leinonen, Mr. Antti Gustaf",male,32,0,0,STON/O 2. 3101292,7.925,,S +638,0,2,"Collyer, Mr. Harvey",male,31,1,1,C.A. 31921,26.25,,S +639,0,3,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41,0,5,3101295,39.6875,,S +640,0,3,"Thorneycroft, Mr. Percival",male,,1,0,376564,16.1,,S +641,0,3,"Jensen, Mr. Hans Peder",male,20,0,0,350050,7.8542,,S +642,1,1,"Sagesser, Mlle. Emma",female,24,0,0,PC 17477,69.3,B35,C +643,0,3,"Skoog, Miss. Margit Elizabeth",female,2,3,2,347088,27.9,,S +644,1,3,"Foo, Mr. Choong",male,,0,0,1601,56.4958,,S +645,1,3,"Baclini, Miss. Eugenie",female,0.75,2,1,2666,19.2583,,C +646,1,1,"Harper, Mr. Henry Sleeper",male,48,1,0,PC 17572,76.7292,D33,C +647,0,3,"Cor, Mr. Liudevit",male,19,0,0,349231,7.8958,,S +648,1,1,"Simonius-Blumer, Col. Oberst Alfons",male,56,0,0,13213,35.5,A26,C +649,0,3,"Willey, Mr. Edward",male,,0,0,S.O./P.P. 751,7.55,,S +650,1,3,"Stanley, Miss. Amy Zillah Elsie",female,23,0,0,CA. 2314,7.55,,S +651,0,3,"Mitkoff, Mr. Mito",male,,0,0,349221,7.8958,,S +652,1,2,"Doling, Miss. Elsie",female,18,0,1,231919,23,,S +653,0,3,"Kalvik, Mr. Johannes Halvorsen",male,21,0,0,8475,8.4333,,S +654,1,3,"O'Leary, Miss. Hanora ""Norah""",female,,0,0,330919,7.8292,,Q +655,0,3,"Hegarty, Miss. Hanora ""Nora""",female,18,0,0,365226,6.75,,Q +656,0,2,"Hickman, Mr. Leonard Mark",male,24,2,0,S.O.C. 14879,73.5,,S +657,0,3,"Radeff, Mr. Alexander",male,,0,0,349223,7.8958,,S +658,0,3,"Bourke, Mrs. John (Catherine)",female,32,1,1,364849,15.5,,Q +659,0,2,"Eitemiller, Mr. George Floyd",male,23,0,0,29751,13,,S +660,0,1,"Newell, Mr. Arthur Webster",male,58,0,2,35273,113.275,D48,C +661,1,1,"Frauenthal, Dr. Henry William",male,50,2,0,PC 17611,133.65,,S +662,0,3,"Badt, Mr. Mohamed",male,40,0,0,2623,7.225,,C +663,0,1,"Colley, Mr. Edward Pomeroy",male,47,0,0,5727,25.5875,E58,S +664,0,3,"Coleff, Mr. Peju",male,36,0,0,349210,7.4958,,S +665,1,3,"Lindqvist, Mr. Eino William",male,20,1,0,STON/O 2. 3101285,7.925,,S +666,0,2,"Hickman, Mr. Lewis",male,32,2,0,S.O.C. 14879,73.5,,S +667,0,2,"Butler, Mr. Reginald Fenton",male,25,0,0,234686,13,,S +668,0,3,"Rommetvedt, Mr. Knud Paust",male,,0,0,312993,7.775,,S +669,0,3,"Cook, Mr. Jacob",male,43,0,0,A/5 3536,8.05,,S +670,1,1,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1,0,19996,52,C126,S +671,1,2,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40,1,1,29750,39,,S +672,0,1,"Davidson, Mr. Thornton",male,31,1,0,F.C. 12750,52,B71,S +673,0,2,"Mitchell, Mr. Henry Michael",male,70,0,0,C.A. 24580,10.5,,S +674,1,2,"Wilhelms, Mr. Charles",male,31,0,0,244270,13,,S +675,0,2,"Watson, Mr. Ennis Hastings",male,,0,0,239856,0,,S +676,0,3,"Edvardsson, Mr. Gustaf Hjalmar",male,18,0,0,349912,7.775,,S +677,0,3,"Sawyer, Mr. Frederick Charles",male,24.5,0,0,342826,8.05,,S +678,1,3,"Turja, Miss. Anna Sofia",female,18,0,0,4138,9.8417,,S +679,0,3,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43,1,6,CA 2144,46.9,,S +680,1,1,"Cardeza, Mr. Thomas Drake Martinez",male,36,0,1,PC 17755,512.3292,B51 B53 B55,C +681,0,3,"Peters, Miss. Katie",female,,0,0,330935,8.1375,,Q +682,1,1,"Hassab, Mr. Hammad",male,27,0,0,PC 17572,76.7292,D49,C +683,0,3,"Olsvigen, Mr. Thor Anderson",male,20,0,0,6563,9.225,,S +684,0,3,"Goodwin, Mr. Charles Edward",male,14,5,2,CA 2144,46.9,,S +685,0,2,"Brown, Mr. Thomas William Solomon",male,60,1,1,29750,39,,S +686,0,2,"Laroche, Mr. Joseph Philippe Lemercier",male,25,1,2,SC/Paris 2123,41.5792,,C +687,0,3,"Panula, Mr. Jaako Arnold",male,14,4,1,3101295,39.6875,,S +688,0,3,"Dakic, Mr. Branko",male,19,0,0,349228,10.1708,,S +689,0,3,"Fischer, Mr. Eberhard Thelander",male,18,0,0,350036,7.7958,,S +690,1,1,"Madill, Miss. Georgette Alexandra",female,15,0,1,24160,211.3375,B5,S +691,1,1,"Dick, Mr. Albert Adrian",male,31,1,0,17474,57,B20,S +692,1,3,"Karun, Miss. Manca",female,4,0,1,349256,13.4167,,C +693,1,3,"Lam, Mr. Ali",male,,0,0,1601,56.4958,,S +694,0,3,"Saad, Mr. Khalil",male,25,0,0,2672,7.225,,C +695,0,1,"Weir, Col. John",male,60,0,0,113800,26.55,,S +696,0,2,"Chapman, Mr. Charles Henry",male,52,0,0,248731,13.5,,S +697,0,3,"Kelly, Mr. James",male,44,0,0,363592,8.05,,S +698,1,3,"Mullens, Miss. Katherine ""Katie""",female,,0,0,35852,7.7333,,Q +699,0,1,"Thayer, Mr. John Borland",male,49,1,1,17421,110.8833,C68,C +700,0,3,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42,0,0,348121,7.65,F G63,S +701,1,1,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18,1,0,PC 17757,227.525,C62 C64,C +702,1,1,"Silverthorne, Mr. Spencer Victor",male,35,0,0,PC 17475,26.2875,E24,S +703,0,3,"Barbara, Miss. Saiide",female,18,0,1,2691,14.4542,,C +704,0,3,"Gallagher, Mr. Martin",male,25,0,0,36864,7.7417,,Q +705,0,3,"Hansen, Mr. Henrik Juul",male,26,1,0,350025,7.8542,,S +706,0,2,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39,0,0,250655,26,,S +707,1,2,"Kelly, Mrs. Florence ""Fannie""",female,45,0,0,223596,13.5,,S +708,1,1,"Calderhead, Mr. Edward Pennington",male,42,0,0,PC 17476,26.2875,E24,S +709,1,1,"Cleaver, Miss. Alice",female,22,0,0,113781,151.55,,S +710,1,3,"Moubarek, Master. Halim Gonios (""William George"")",male,,1,1,2661,15.2458,,C +711,1,1,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24,0,0,PC 17482,49.5042,C90,C +712,0,1,"Klaber, Mr. Herman",male,,0,0,113028,26.55,C124,S +713,1,1,"Taylor, Mr. Elmer Zebley",male,48,1,0,19996,52,C126,S +714,0,3,"Larsson, Mr. August Viktor",male,29,0,0,7545,9.4833,,S +715,0,2,"Greenberg, Mr. Samuel",male,52,0,0,250647,13,,S +716,0,3,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19,0,0,348124,7.65,F G73,S +717,1,1,"Endres, Miss. Caroline Louise",female,38,0,0,PC 17757,227.525,C45,C +718,1,2,"Troutt, Miss. Edwina Celia ""Winnie""",female,27,0,0,34218,10.5,E101,S +719,0,3,"McEvoy, Mr. Michael",male,,0,0,36568,15.5,,Q +720,0,3,"Johnson, Mr. Malkolm Joackim",male,33,0,0,347062,7.775,,S +721,1,2,"Harper, Miss. Annie Jessie ""Nina""",female,6,0,1,248727,33,,S +722,0,3,"Jensen, Mr. Svend Lauritz",male,17,1,0,350048,7.0542,,S +723,0,2,"Gillespie, Mr. William Henry",male,34,0,0,12233,13,,S +724,0,2,"Hodges, Mr. Henry Price",male,50,0,0,250643,13,,S +725,1,1,"Chambers, Mr. Norman Campbell",male,27,1,0,113806,53.1,E8,S +726,0,3,"Oreskovic, Mr. Luka",male,20,0,0,315094,8.6625,,S +727,1,2,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30,3,0,31027,21,,S +728,1,3,"Mannion, Miss. Margareth",female,,0,0,36866,7.7375,,Q +729,0,2,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25,1,0,236853,26,,S +730,0,3,"Ilmakangas, Miss. Pieta Sofia",female,25,1,0,STON/O2. 3101271,7.925,,S +731,1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S +732,0,3,"Hassan, Mr. Houssein G N",male,11,0,0,2699,18.7875,,C +733,0,2,"Knight, Mr. Robert J",male,,0,0,239855,0,,S +734,0,2,"Berriman, Mr. William John",male,23,0,0,28425,13,,S +735,0,2,"Troupiansky, Mr. Moses Aaron",male,23,0,0,233639,13,,S +736,0,3,"Williams, Mr. Leslie",male,28.5,0,0,54636,16.1,,S +737,0,3,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48,1,3,W./C. 6608,34.375,,S +738,1,1,"Lesurer, Mr. Gustave J",male,35,0,0,PC 17755,512.3292,B101,C +739,0,3,"Ivanoff, Mr. Kanio",male,,0,0,349201,7.8958,,S +740,0,3,"Nankoff, Mr. Minko",male,,0,0,349218,7.8958,,S +741,1,1,"Hawksford, Mr. Walter James",male,,0,0,16988,30,D45,S +742,0,1,"Cavendish, Mr. Tyrell William",male,36,1,0,19877,78.85,C46,S +743,1,1,"Ryerson, Miss. Susan Parker ""Suzette""",female,21,2,2,PC 17608,262.375,B57 B59 B63 B66,C +744,0,3,"McNamee, Mr. Neal",male,24,1,0,376566,16.1,,S +745,1,3,"Stranden, Mr. Juho",male,31,0,0,STON/O 2. 3101288,7.925,,S +746,0,1,"Crosby, Capt. Edward Gifford",male,70,1,1,WE/P 5735,71,B22,S +747,0,3,"Abbott, Mr. Rossmore Edward",male,16,1,1,C.A. 2673,20.25,,S +748,1,2,"Sinkkonen, Miss. Anna",female,30,0,0,250648,13,,S +749,0,1,"Marvin, Mr. Daniel Warner",male,19,1,0,113773,53.1,D30,S +750,0,3,"Connaghton, Mr. Michael",male,31,0,0,335097,7.75,,Q +751,1,2,"Wells, Miss. Joan",female,4,1,1,29103,23,,S +752,1,3,"Moor, Master. Meier",male,6,0,1,392096,12.475,E121,S +753,0,3,"Vande Velde, Mr. Johannes Joseph",male,33,0,0,345780,9.5,,S +754,0,3,"Jonkoff, Mr. Lalio",male,23,0,0,349204,7.8958,,S +755,1,2,"Herman, Mrs. Samuel (Jane Laver)",female,48,1,2,220845,65,,S +756,1,2,"Hamalainen, Master. Viljo",male,0.67,1,1,250649,14.5,,S +757,0,3,"Carlsson, Mr. August Sigfrid",male,28,0,0,350042,7.7958,,S +758,0,2,"Bailey, Mr. Percy Andrew",male,18,0,0,29108,11.5,,S +759,0,3,"Theobald, Mr. Thomas Leonard",male,34,0,0,363294,8.05,,S +760,1,1,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33,0,0,110152,86.5,B77,S +761,0,3,"Garfirth, Mr. John",male,,0,0,358585,14.5,,S +762,0,3,"Nirva, Mr. Iisakki Antino Aijo",male,41,0,0,SOTON/O2 3101272,7.125,,S +763,1,3,"Barah, Mr. Hanna Assi",male,20,0,0,2663,7.2292,,C +764,1,1,"Carter, Mrs. William Ernest (Lucile Polk)",female,36,1,2,113760,120,B96 B98,S +765,0,3,"Eklund, Mr. Hans Linus",male,16,0,0,347074,7.775,,S +766,1,1,"Hogeboom, Mrs. John C (Anna Andrews)",female,51,1,0,13502,77.9583,D11,S +767,0,1,"Brewe, Dr. Arthur Jackson",male,,0,0,112379,39.6,,C +768,0,3,"Mangan, Miss. Mary",female,30.5,0,0,364850,7.75,,Q +769,0,3,"Moran, Mr. Daniel J",male,,1,0,371110,24.15,,Q +770,0,3,"Gronnestad, Mr. Daniel Danielsen",male,32,0,0,8471,8.3625,,S +771,0,3,"Lievens, Mr. Rene Aime",male,24,0,0,345781,9.5,,S +772,0,3,"Jensen, Mr. Niels Peder",male,48,0,0,350047,7.8542,,S +773,0,2,"Mack, Mrs. (Mary)",female,57,0,0,S.O./P.P. 3,10.5,E77,S +774,0,3,"Elias, Mr. Dibo",male,,0,0,2674,7.225,,C +775,1,2,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54,1,3,29105,23,,S +776,0,3,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18,0,0,347078,7.75,,S +777,0,3,"Tobin, Mr. Roger",male,,0,0,383121,7.75,F38,Q +778,1,3,"Emanuel, Miss. Virginia Ethel",female,5,0,0,364516,12.475,,S +779,0,3,"Kilgannon, Mr. Thomas J",male,,0,0,36865,7.7375,,Q +780,1,1,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43,0,1,24160,211.3375,B3,S +781,1,3,"Ayoub, Miss. Banoura",female,13,0,0,2687,7.2292,,C +782,1,1,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17,1,0,17474,57,B20,S +783,0,1,"Long, Mr. Milton Clyde",male,29,0,0,113501,30,D6,S +784,0,3,"Johnston, Mr. Andrew G",male,,1,2,W./C. 6607,23.45,,S +785,0,3,"Ali, Mr. William",male,25,0,0,SOTON/O.Q. 3101312,7.05,,S +786,0,3,"Harmer, Mr. Abraham (David Lishin)",male,25,0,0,374887,7.25,,S +787,1,3,"Sjoblom, Miss. Anna Sofia",female,18,0,0,3101265,7.4958,,S +788,0,3,"Rice, Master. George Hugh",male,8,4,1,382652,29.125,,Q +789,1,3,"Dean, Master. Bertram Vere",male,1,1,2,C.A. 2315,20.575,,S +790,0,1,"Guggenheim, Mr. Benjamin",male,46,0,0,PC 17593,79.2,B82 B84,C +791,0,3,"Keane, Mr. Andrew ""Andy""",male,,0,0,12460,7.75,,Q +792,0,2,"Gaskell, Mr. Alfred",male,16,0,0,239865,26,,S +793,0,3,"Sage, Miss. Stella Anna",female,,8,2,CA. 2343,69.55,,S +794,0,1,"Hoyt, Mr. William Fisher",male,,0,0,PC 17600,30.6958,,C +795,0,3,"Dantcheff, Mr. Ristiu",male,25,0,0,349203,7.8958,,S +796,0,2,"Otter, Mr. Richard",male,39,0,0,28213,13,,S +797,1,1,"Leader, Dr. Alice (Farnham)",female,49,0,0,17465,25.9292,D17,S +798,1,3,"Osman, Mrs. Mara",female,31,0,0,349244,8.6833,,S +799,0,3,"Ibrahim Shawah, Mr. Yousseff",male,30,0,0,2685,7.2292,,C +800,0,3,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30,1,1,345773,24.15,,S +801,0,2,"Ponesell, Mr. Martin",male,34,0,0,250647,13,,S +802,1,2,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31,1,1,C.A. 31921,26.25,,S +803,1,1,"Carter, Master. William Thornton II",male,11,1,2,113760,120,B96 B98,S +804,1,3,"Thomas, Master. Assad Alexander",male,0.42,0,1,2625,8.5167,,C +805,1,3,"Hedman, Mr. Oskar Arvid",male,27,0,0,347089,6.975,,S +806,0,3,"Johansson, Mr. Karl Johan",male,31,0,0,347063,7.775,,S +807,0,1,"Andrews, Mr. Thomas Jr",male,39,0,0,112050,0,A36,S +808,0,3,"Pettersson, Miss. Ellen Natalia",female,18,0,0,347087,7.775,,S +809,0,2,"Meyer, Mr. August",male,39,0,0,248723,13,,S +810,1,1,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33,1,0,113806,53.1,E8,S +811,0,3,"Alexander, Mr. William",male,26,0,0,3474,7.8875,,S +812,0,3,"Lester, Mr. James",male,39,0,0,A/4 48871,24.15,,S +813,0,2,"Slemen, Mr. Richard James",male,35,0,0,28206,10.5,,S +814,0,3,"Andersson, Miss. Ebba Iris Alfrida",female,6,4,2,347082,31.275,,S +815,0,3,"Tomlin, Mr. Ernest Portage",male,30.5,0,0,364499,8.05,,S +816,0,1,"Fry, Mr. Richard",male,,0,0,112058,0,B102,S +817,0,3,"Heininen, Miss. Wendla Maria",female,23,0,0,STON/O2. 3101290,7.925,,S +818,0,2,"Mallet, Mr. Albert",male,31,1,1,S.C./PARIS 2079,37.0042,,C +819,0,3,"Holm, Mr. John Fredrik Alexander",male,43,0,0,C 7075,6.45,,S +820,0,3,"Skoog, Master. Karl Thorsten",male,10,3,2,347088,27.9,,S +821,1,1,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52,1,1,12749,93.5,B69,S +822,1,3,"Lulic, Mr. Nikola",male,27,0,0,315098,8.6625,,S +823,0,1,"Reuchlin, Jonkheer. John George",male,38,0,0,19972,0,,S +824,1,3,"Moor, Mrs. (Beila)",female,27,0,1,392096,12.475,E121,S +825,0,3,"Panula, Master. Urho Abraham",male,2,4,1,3101295,39.6875,,S +826,0,3,"Flynn, Mr. John",male,,0,0,368323,6.95,,Q +827,0,3,"Lam, Mr. Len",male,,0,0,1601,56.4958,,S +828,1,2,"Mallet, Master. Andre",male,1,0,2,S.C./PARIS 2079,37.0042,,C +829,1,3,"McCormack, Mr. Thomas Joseph",male,,0,0,367228,7.75,,Q +830,1,1,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62,0,0,113572,80,B28, +831,1,3,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15,1,0,2659,14.4542,,C +832,1,2,"Richards, Master. George Sibley",male,0.83,1,1,29106,18.75,,S +833,0,3,"Saad, Mr. Amin",male,,0,0,2671,7.2292,,C +834,0,3,"Augustsson, Mr. Albert",male,23,0,0,347468,7.8542,,S +835,0,3,"Allum, Mr. Owen George",male,18,0,0,2223,8.3,,S +836,1,1,"Compton, Miss. Sara Rebecca",female,39,1,1,PC 17756,83.1583,E49,C +837,0,3,"Pasic, Mr. Jakob",male,21,0,0,315097,8.6625,,S +838,0,3,"Sirota, Mr. Maurice",male,,0,0,392092,8.05,,S +839,1,3,"Chip, Mr. Chang",male,32,0,0,1601,56.4958,,S +840,1,1,"Marechal, Mr. Pierre",male,,0,0,11774,29.7,C47,C +841,0,3,"Alhomaki, Mr. Ilmari Rudolf",male,20,0,0,SOTON/O2 3101287,7.925,,S +842,0,2,"Mudd, Mr. Thomas Charles",male,16,0,0,S.O./P.P. 3,10.5,,S +843,1,1,"Serepeca, Miss. Augusta",female,30,0,0,113798,31,,C +844,0,3,"Lemberopolous, Mr. Peter L",male,34.5,0,0,2683,6.4375,,C +845,0,3,"Culumovic, Mr. Jeso",male,17,0,0,315090,8.6625,,S +846,0,3,"Abbing, Mr. Anthony",male,42,0,0,C.A. 5547,7.55,,S +847,0,3,"Sage, Mr. Douglas Bullen",male,,8,2,CA. 2343,69.55,,S +848,0,3,"Markoff, Mr. Marin",male,35,0,0,349213,7.8958,,C +849,0,2,"Harper, Rev. John",male,28,0,1,248727,33,,S +850,1,1,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1,0,17453,89.1042,C92,C +851,0,3,"Andersson, Master. Sigvard Harald Elias",male,4,4,2,347082,31.275,,S +852,0,3,"Svensson, Mr. Johan",male,74,0,0,347060,7.775,,S +853,0,3,"Boulos, Miss. Nourelain",female,9,1,1,2678,15.2458,,C +854,1,1,"Lines, Miss. Mary Conover",female,16,0,1,PC 17592,39.4,D28,S +855,0,2,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44,1,0,244252,26,,S +856,1,3,"Aks, Mrs. Sam (Leah Rosen)",female,18,0,1,392091,9.35,,S +857,1,1,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45,1,1,36928,164.8667,,S +858,1,1,"Daly, Mr. Peter Denis ",male,51,0,0,113055,26.55,E17,S +859,1,3,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24,0,3,2666,19.2583,,C +860,0,3,"Razi, Mr. Raihed",male,,0,0,2629,7.2292,,C +861,0,3,"Hansen, Mr. Claus Peter",male,41,2,0,350026,14.1083,,S +862,0,2,"Giles, Mr. Frederick Edward",male,21,1,0,28134,11.5,,S +863,1,1,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48,0,0,17466,25.9292,D17,S +864,0,3,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8,2,CA. 2343,69.55,,S +865,0,2,"Gill, Mr. John William",male,24,0,0,233866,13,,S +866,1,2,"Bystrom, Mrs. (Karolina)",female,42,0,0,236852,13,,S +867,1,2,"Duran y More, Miss. Asuncion",female,27,1,0,SC/PARIS 2149,13.8583,,C +868,0,1,"Roebling, Mr. Washington Augustus II",male,31,0,0,PC 17590,50.4958,A24,S +869,0,3,"van Melkebeke, Mr. Philemon",male,,0,0,345777,9.5,,S +870,1,3,"Johnson, Master. Harold Theodor",male,4,1,1,347742,11.1333,,S +871,0,3,"Balkic, Mr. Cerin",male,26,0,0,349248,7.8958,,S +872,1,1,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47,1,1,11751,52.5542,D35,S +873,0,1,"Carlsson, Mr. Frans Olof",male,33,0,0,695,5,B51 B53 B55,S +874,0,3,"Vander Cruyssen, Mr. Victor",male,47,0,0,345765,9,,S +875,1,2,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28,1,0,P/PP 3381,24,,C +876,1,3,"Najib, Miss. Adele Kiamie ""Jane""",female,15,0,0,2667,7.225,,C +877,0,3,"Gustafsson, Mr. Alfred Ossian",male,20,0,0,7534,9.8458,,S +878,0,3,"Petroff, Mr. Nedelio",male,19,0,0,349212,7.8958,,S +879,0,3,"Laleff, Mr. Kristo",male,,0,0,349217,7.8958,,S +880,1,1,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56,0,1,11767,83.1583,C50,C +881,1,2,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25,0,1,230433,26,,S +882,0,3,"Markun, Mr. Johann",male,33,0,0,349257,7.8958,,S +883,0,3,"Dahlberg, Miss. Gerda Ulrika",female,22,0,0,7552,10.5167,,S +884,0,2,"Banfield, Mr. Frederick James",male,28,0,0,C.A./SOTON 34068,10.5,,S +885,0,3,"Sutehall, Mr. Henry Jr",male,25,0,0,SOTON/OQ 392076,7.05,,S +886,0,3,"Rice, Mrs. William (Margaret Norton)",female,39,0,5,382652,29.125,,Q +887,0,2,"Montvila, Rev. Juozas",male,27,0,0,211536,13,,S +888,1,1,"Graham, Miss. Margaret Edith",female,19,0,0,112053,30,B42,S +889,0,3,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1,2,W./C. 6607,23.45,,S +890,1,1,"Behr, Mr. Karl Howell",male,26,0,0,111369,30,C148,C +891,0,3,"Dooley, Mr. Patrick",male,32,0,0,370376,7.75,,Q diff --git a/examples/jdbc/pom.xml b/examples/jdbc/pom.xml index 245890708801..c12e44c6968c 100644 --- a/examples/jdbc/pom.xml +++ b/examples/jdbc/pom.xml @@ -7,8 +7,8 @@ . - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/extension/httpfs/httpfs.cpp b/extension/httpfs/httpfs.cpp index 7b8ee3379ab8..51f606416c63 100644 --- a/extension/httpfs/httpfs.cpp +++ b/extension/httpfs/httpfs.cpp @@ -1,9 +1,9 @@ #include "httpfs.hpp" #include "duckdb/common/atomic.hpp" +#include "duckdb/common/exception/http_exception.hpp" #include "duckdb/common/file_opener.hpp" #include "duckdb/common/http_state.hpp" -#include "duckdb/common/exception/http_exception.hpp" #include "duckdb/common/thread.hpp" #include "duckdb/common/types/hash.hpp" #include "duckdb/function/scalar/strftime_format.hpp" @@ -36,6 +36,8 @@ HTTPParams HTTPParams::ReadFrom(FileOpener *opener) { float retry_backoff = DEFAULT_RETRY_BACKOFF; bool force_download = DEFAULT_FORCE_DOWNLOAD; bool keep_alive = DEFAULT_KEEP_ALIVE; + bool enable_server_cert_verification = DEFAULT_ENABLE_SERVER_CERT_VERIFICATION; + std::string ca_cert_file = ""; Value value; if (FileOpener::TryGetCurrentSetting(opener, "http_timeout", value)) { @@ -56,8 +58,16 @@ HTTPParams HTTPParams::ReadFrom(FileOpener *opener) { if (FileOpener::TryGetCurrentSetting(opener, "http_keep_alive", value)) { keep_alive = value.GetValue(); } + if (FileOpener::TryGetCurrentSetting(opener, "enable_server_cert_verification", value)) { + enable_server_cert_verification = value.GetValue(); + } + if (FileOpener::TryGetCurrentSetting(opener, "ca_cert_file", value)) { + ca_cert_file = value.ToString(); + } - return {timeout, retries, retry_wait_ms, retry_backoff, force_download, keep_alive}; + return { + timeout, retries, retry_wait_ms, retry_backoff, force_download, keep_alive, enable_server_cert_verification, + ca_cert_file}; } void HTTPFileSystem::ParseUrl(string &url, string &path_out, string &proto_host_port_out) { @@ -188,7 +198,10 @@ unique_ptr HTTPFileSystem::GetClient(const HTTPP auto client = make_uniq(proto_host_port); client->set_follow_location(true); client->set_keep_alive(http_params.keep_alive); - client->enable_server_certificate_verification(false); + if (!http_params.ca_cert_file.empty()) { + client->set_ca_cert_path(http_params.ca_cert_file.c_str()); + } + client->enable_server_certificate_verification(http_params.enable_server_cert_verification); client->set_write_timeout(http_params.timeout); client->set_read_timeout(http_params.timeout); client->set_connection_timeout(http_params.timeout); diff --git a/extension/httpfs/httpfs_config.py b/extension/httpfs/httpfs_config.py index 894af2e5c13b..4c63f13d9953 100644 --- a/extension/httpfs/httpfs_config.py +++ b/extension/httpfs/httpfs_config.py @@ -8,5 +8,8 @@ # source files source_files = [ os.path.sep.join(x.split('/')) - for x in ['extension/httpfs/' + s for s in ['httpfs_extension.cpp', 'httpfs.cpp', 's3fs.cpp', 'crypto.cpp']] + for x in [ + 'extension/httpfs/' + s + for s in ['create_secret_functions.cpp', 'httpfs_extension.cpp', 'httpfs.cpp', 's3fs.cpp', 'crypto.cpp'] + ] ] diff --git a/extension/httpfs/httpfs_extension.cpp b/extension/httpfs/httpfs_extension.cpp index d94ae66a1936..7d6286788dc2 100644 --- a/extension/httpfs/httpfs_extension.cpp +++ b/extension/httpfs/httpfs_extension.cpp @@ -1,9 +1,10 @@ #define DUCKDB_EXTENSION_MAIN -#include "duckdb.hpp" #include "httpfs_extension.hpp" -#include "s3fs.hpp" + #include "create_secret_functions.hpp" +#include "duckdb.hpp" +#include "s3fs.hpp" namespace duckdb { @@ -33,6 +34,12 @@ static void LoadInternal(DatabaseInstance &instance) { "http_keep_alive", "Keep alive connections. Setting this to false can help when running into connection failures", LogicalType::BOOLEAN, Value(true)); + config.AddExtensionOption("enable_server_cert_verification", + "Enable server side certificate verification, defaults to False.", LogicalType::BOOLEAN, + Value(false)); + config.AddExtensionOption("ca_cert_file", + "Path to a custom certificate file for self-signed certificates. By default not set.", + LogicalType::VARCHAR, Value("")); // Global S3 config config.AddExtensionOption("s3_region", "S3 Region (default us-east-1)", LogicalType::VARCHAR, Value("us-east-1")); config.AddExtensionOption("s3_access_key_id", "S3 Access Key ID", LogicalType::VARCHAR); diff --git a/extension/httpfs/include/httpfs.hpp b/extension/httpfs/include/httpfs.hpp index 6e66c7020a89..2f47bb39d1b5 100644 --- a/extension/httpfs/include/httpfs.hpp +++ b/extension/httpfs/include/httpfs.hpp @@ -1,10 +1,10 @@ #pragma once +#include "duckdb/common/case_insensitive_map.hpp" #include "duckdb/common/file_system.hpp" +#include "duckdb/common/http_state.hpp" #include "duckdb/common/pair.hpp" #include "duckdb/common/unordered_map.hpp" -#include "duckdb/common/case_insensitive_map.hpp" -#include "duckdb/common/http_state.hpp" #include "duckdb/main/client_data.hpp" #include "http_metadata_cache.hpp" @@ -36,6 +36,7 @@ struct HTTPParams { static constexpr float DEFAULT_RETRY_BACKOFF = 4; static constexpr bool DEFAULT_FORCE_DOWNLOAD = false; static constexpr bool DEFAULT_KEEP_ALIVE = true; + static constexpr bool DEFAULT_ENABLE_SERVER_CERT_VERIFICATION = false; uint64_t timeout; uint64_t retries; @@ -43,6 +44,8 @@ struct HTTPParams { float retry_backoff; bool force_download; bool keep_alive; + bool enable_server_cert_verification; + std::string ca_cert_file; static HTTPParams ReadFrom(FileOpener *opener); }; diff --git a/extension/icu/icu-strptime.cpp b/extension/icu/icu-strptime.cpp index 61d4413c4baa..d54d15a3700b 100644 --- a/extension/icu/icu-strptime.cpp +++ b/extension/icu/icu-strptime.cpp @@ -246,7 +246,7 @@ struct ICUStrptime : public ICUDateFunc { TailPatch(name, db, types); } - static bool CastFromVarchar(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { + static bool VarcharToTimestampTZ(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { auto &cast_data = parameters.cast_data->Cast(); auto &info = cast_data.info->Cast(); CalendarPtr cal(info.calendar->clone()); @@ -260,7 +260,7 @@ struct ICUStrptime : public ICUDateFunc { bool has_offset = false; if (!Timestamp::TryConvertTimestampTZ(str, len, result, has_offset, tz)) { auto msg = Timestamp::ConversionError(string(str, len)); - HandleCastError::AssignError(msg, parameters.error_message); + HandleCastError::AssignError(msg, parameters); mask.SetInvalid(idx); } else if (!has_offset) { // Convert parts to a TZ (default or parsed) if no offset was provided @@ -280,15 +280,56 @@ struct ICUStrptime : public ICUDateFunc { return true; } + static bool VarcharToTimeTZ(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { + auto &cast_data = parameters.cast_data->Cast(); + auto &info = cast_data.info->Cast(); + CalendarPtr cal(info.calendar->clone()); + + UnaryExecutor::ExecuteWithNulls( + source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) { + dtime_tz_t result; + const auto str = input.GetData(); + const auto len = input.GetSize(); + bool has_offset = false; + idx_t pos = 0; + if (!Time::TryConvertTimeTZ(str, len, pos, result, has_offset, false)) { + auto msg = Time::ConversionError(string(str, len)); + HandleCastError::AssignError(msg, parameters); + mask.SetInvalid(idx); + } else if (!has_offset) { + // Convert parts to a TZ (default or parsed) if no offset was provided + auto calendar = cal.get(); + + // Extract the offset from the calendar + auto offset = ExtractField(calendar, UCAL_ZONE_OFFSET); + offset += ExtractField(calendar, UCAL_DST_OFFSET); + offset /= Interval::MSECS_PER_SEC; + + // Apply it to the offset +00 time we parsed. + result = dtime_tz_t(result.time(), offset); + } + + return result; + }); + return true; + } + static BoundCastInfo BindCastFromVarchar(BindCastInput &input, const LogicalType &source, const LogicalType &target) { if (!input.context) { - throw InternalException("Missing context for VARCHAR to TIMESTAMPTZ cast."); + throw InternalException("Missing context for VARCHAR to TIME/TIMESTAMPTZ cast."); } auto cast_data = make_uniq(make_uniq(*input.context)); - return BoundCastInfo(CastFromVarchar, std::move(cast_data)); + switch (target.id()) { + case LogicalTypeId::TIMESTAMP_TZ: + return BoundCastInfo(VarcharToTimestampTZ, std::move(cast_data)); + case LogicalTypeId::TIME_TZ: + return BoundCastInfo(VarcharToTimeTZ, std::move(cast_data)); + default: + throw InternalException("Unsupported type for VARCHAR to TIME/TIMESTAMPTZ cast."); + } } static void AddCasts(DatabaseInstance &db) { @@ -296,6 +337,7 @@ struct ICUStrptime : public ICUDateFunc { auto &casts = config.GetCastFunctions(); casts.RegisterCastFunction(LogicalType::VARCHAR, LogicalType::TIMESTAMP_TZ, BindCastFromVarchar); + casts.RegisterCastFunction(LogicalType::VARCHAR, LogicalType::TIME_TZ, BindCastFromVarchar); } }; diff --git a/extension/icu/icu-timezone.cpp b/extension/icu/icu-timezone.cpp index 5451be5f6c29..032b3ab04013 100644 --- a/extension/icu/icu-timezone.cpp +++ b/extension/icu/icu-timezone.cpp @@ -8,6 +8,7 @@ #include "duckdb/parser/parsed_data/create_table_function_info.hpp" #include "include/icu-datefunc.hpp" #include "duckdb/transaction/meta_transaction.hpp" +#include "duckdb/common/operator/cast_operators.hpp" namespace duckdb { @@ -138,13 +139,23 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc { return GetTime(calendar, micros); } + struct CastTimestampUsToUs { + template + static inline DST Operation(SRC input) { + // no-op + return input; + } + }; + + template static bool CastFromNaive(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { auto &cast_data = parameters.cast_data->Cast(); auto &info = cast_data.info->Cast(); CalendarPtr calendar(info.calendar->clone()); - UnaryExecutor::Execute( - source, result, count, [&](timestamp_t input) { return Operation(calendar.get(), input); }); + UnaryExecutor::Execute(source, result, count, [&](timestamp_t input) { + return Operation(calendar.get(), OP::template Operation(input)); + }); return true; } @@ -154,8 +165,18 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc { } auto cast_data = make_uniq(make_uniq(*input.context)); - - return BoundCastInfo(CastFromNaive, std::move(cast_data)); + switch (source.id()) { + case LogicalTypeId::TIMESTAMP: + return BoundCastInfo(CastFromNaive, std::move(cast_data)); + case LogicalTypeId::TIMESTAMP_MS: + return BoundCastInfo(CastFromNaive, std::move(cast_data)); + case LogicalTypeId::TIMESTAMP_NS: + return BoundCastInfo(CastFromNaive, std::move(cast_data)); + case LogicalTypeId::TIMESTAMP_SEC: + return BoundCastInfo(CastFromNaive, std::move(cast_data)); + default: + throw InternalException("Type %s not handled in BindCastFromNaive", LogicalTypeIdToString(source.id())); + } } static void AddCasts(DatabaseInstance &db) { @@ -163,6 +184,9 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc { auto &casts = config.GetCastFunctions(); casts.RegisterCastFunction(LogicalType::TIMESTAMP, LogicalType::TIMESTAMP_TZ, BindCastFromNaive); + casts.RegisterCastFunction(LogicalType::TIMESTAMP_MS, LogicalType::TIMESTAMP_TZ, BindCastFromNaive); + casts.RegisterCastFunction(LogicalType::TIMESTAMP_NS, LogicalType::TIMESTAMP_TZ, BindCastFromNaive); + casts.RegisterCastFunction(LogicalType::TIMESTAMP_S, LogicalType::TIMESTAMP_TZ, BindCastFromNaive); } }; diff --git a/extension/inet/include/inet_functions.hpp b/extension/inet/include/inet_functions.hpp index 1e5bafa77b8f..80df9c68d023 100644 --- a/extension/inet/include/inet_functions.hpp +++ b/extension/inet/include/inet_functions.hpp @@ -19,7 +19,9 @@ struct INetFunctions { static bool CastINETToVarchar(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); static void Host(DataChunk &args, ExpressionState &state, Vector &result); + static void Family(DataChunk &args, ExpressionState &state, Vector &result); static void Subtract(DataChunk &args, ExpressionState &state, Vector &result); + static void Add(DataChunk &args, ExpressionState &state, Vector &result); }; } // namespace duckdb diff --git a/extension/inet/include/ipaddress.hpp b/extension/inet/include/ipaddress.hpp index a063cd34c77f..aa6fff576460 100644 --- a/extension/inet/include/ipaddress.hpp +++ b/extension/inet/include/ipaddress.hpp @@ -11,27 +11,32 @@ #include "duckdb/common/common.hpp" #include "duckdb/common/types.hpp" #include "duckdb/common/types/string_type.hpp" +#include "duckdb/common/uhugeint.hpp" namespace duckdb { +struct CastParameters; enum class IPAddressType : uint8_t { IP_ADDRESS_INVALID = 0, IP_ADDRESS_V4 = 1, IP_ADDRESS_V6 = 2 }; class IPAddress { public: constexpr static const int32_t IPV4_DEFAULT_MASK = 32; + constexpr static const int32_t IPV6_DEFAULT_MASK = 128; + constexpr static const int32_t IPV6_QUIBBLE_BITS = 16; + constexpr static const int32_t IPV6_NUM_QUIBBLE = 8; public: IPAddress(); - IPAddress(IPAddressType type, hugeint_t address, uint16_t mask); + IPAddress(IPAddressType type, uhugeint_t address, uint16_t mask); IPAddressType type; - hugeint_t address; + uhugeint_t address; uint16_t mask; public: static IPAddress FromIPv4(int32_t address, uint16_t mask); - static IPAddress FromIPv6(hugeint_t address, uint16_t mask); - static bool TryParse(string_t input, IPAddress &result, string *error_message); + static IPAddress FromIPv6(uhugeint_t address, uint16_t mask); + static bool TryParse(string_t input, IPAddress &result, CastParameters ¶meters); static IPAddress FromString(string_t input); string ToString() const; diff --git a/extension/inet/inet_extension.cpp b/extension/inet/inet_extension.cpp index f477ecb916a2..86d0bf921ce1 100644 --- a/extension/inet/inet_extension.cpp +++ b/extension/inet/inet_extension.cpp @@ -21,6 +21,8 @@ void InetExtension::Load(DuckDB &db) { // add the "inet" type child_list_t children; children.push_back(make_pair("ip_type", LogicalType::UTINYINT)); + // The address type would ideally be UHUGEINT, but the initial version was HUGEINT + // so maintain backwards-compatibility with db written with older versions. children.push_back(make_pair("address", LogicalType::HUGEINT)); children.push_back(make_pair("mask", LogicalType::USMALLINT)); auto inet_type = LogicalType::STRUCT(std::move(children)); @@ -36,10 +38,15 @@ void InetExtension::Load(DuckDB &db) { // add inet functions ExtensionUtil::RegisterFunction(*db.instance, ScalarFunction("host", {inet_type}, LogicalType::VARCHAR, INetFunctions::Host)); + ExtensionUtil::RegisterFunction( + *db.instance, ScalarFunction("family", {inet_type}, LogicalType::UTINYINT, INetFunctions::Family)); // Add - function with ALTER_ON_CONFLICT - ScalarFunction substract_fun("-", {inet_type, LogicalType::BIGINT}, inet_type, INetFunctions::Subtract); + ScalarFunction substract_fun("-", {inet_type, LogicalType::HUGEINT}, inet_type, INetFunctions::Subtract); ExtensionUtil::AddFunctionOverload(*db.instance, substract_fun); + + ScalarFunction add_fun("+", {inet_type, LogicalType::HUGEINT}, inet_type, INetFunctions::Add); + ExtensionUtil::AddFunctionOverload(*db.instance, add_fun); } std::string InetExtension::Name() { diff --git a/extension/inet/inet_functions.cpp b/extension/inet/inet_functions.cpp index 007b8e1657be..2603190e8604 100644 --- a/extension/inet/inet_functions.cpp +++ b/extension/inet/inet_functions.cpp @@ -3,13 +3,43 @@ #include "duckdb/common/string_util.hpp" #include "duckdb/common/pair.hpp" #include "duckdb/common/operator/cast_operators.hpp" +#include "duckdb/common/operator/subtract.hpp" +#include "duckdb/common/operator/add.hpp" #include "duckdb/common/types/cast_helpers.hpp" #include "duckdb/common/vector_operations/generic_executor.hpp" namespace duckdb { +// While the address field is better represented as a uhugeint_t, the original +// implementation used hugeint_t, so to maintain backward-compatibility it will +// continue to be stored as signed. However, operations on the address values +// will use the unsigned variant, so use the functions below to convert to/from +// the compatible representation. using INET_TYPE = StructTypeTernary; +static uhugeint_t FromCompatAddr(hugeint_t compat_addr, IPAddressType addr_type) { + uhugeint_t retval = static_cast(compat_addr); + // Only flip the bit for order on IPv6 addresses. It can never be set in IPv4 + if (addr_type == IPAddressType::IP_ADDRESS_V6) { + // The top bit is flipped when storing as the signed hugeint so that sorting + // works correctly. Flip it back here to have a proper unsigned value. + retval.upper ^= (uint64_t(1) << 63); + } + + return retval; +} + +static hugeint_t ToCompatAddr(uhugeint_t new_addr, IPAddressType addr_type) { + if (addr_type == IPAddressType::IP_ADDRESS_V6) { + // Flip the top bit when storing as a signed hugeint_t so that sorting + // works correctly. + new_addr.upper ^= (uint64_t(1) << 63); + } + // Don't need to flip the bit for IPv4, and the original IPv4 only + // implementation didn't do the flipping, so maintain compatibility. + return static_cast(new_addr); +} + bool INetFunctions::CastVarcharToINET(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { auto constant = source.GetVectorType() == VectorType::CONSTANT_VECTOR; @@ -31,13 +61,13 @@ bool INetFunctions::CastVarcharToINET(Vector &source, Vector &result, idx_t coun continue; } IPAddress inet; - if (!IPAddress::TryParse(input[idx], inet, parameters.error_message)) { + if (!IPAddress::TryParse(input[idx], inet, parameters)) { FlatVector::SetNull(result, i, true); success = false; continue; } ip_type[i] = uint8_t(inet.type); - address_data[i] = inet.address; + address_data[i] = ToCompatAddr(inet.address, inet.type); mask_data[i] = inet.mask; } if (constant) { @@ -48,7 +78,9 @@ bool INetFunctions::CastVarcharToINET(Vector &source, Vector &result, idx_t coun bool INetFunctions::CastINETToVarchar(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { GenericExecutor::ExecuteUnary>(source, result, count, [&](INET_TYPE input) { - IPAddress inet(IPAddressType(input.a_val), input.b_val, input.c_val); + auto addr_type = IPAddressType(input.a_val); + auto unsigned_addr = FromCompatAddr(input.b_val, addr_type); + IPAddress inet(addr_type, unsigned_addr, input.c_val); auto str = inet.ToString(); return StringVector::AddString(result, str); }); @@ -58,25 +90,68 @@ bool INetFunctions::CastINETToVarchar(Vector &source, Vector &result, idx_t coun void INetFunctions::Host(DataChunk &args, ExpressionState &state, Vector &result) { GenericExecutor::ExecuteUnary>( args.data[0], result, args.size(), [&](INET_TYPE input) { - IPAddress inet(IPAddressType(input.a_val), input.b_val, IPAddress::IPV4_DEFAULT_MASK); + auto inetType = IPAddressType(input.a_val); + auto mask = + inetType == IPAddressType::IP_ADDRESS_V4 ? IPAddress::IPV4_DEFAULT_MASK : IPAddress::IPV6_DEFAULT_MASK; + auto unsigned_addr = FromCompatAddr(input.b_val, inetType); + IPAddress inet(inetType, unsigned_addr, mask); auto str = inet.ToString(); return StringVector::AddString(result, str); }); } -void INetFunctions::Subtract(DataChunk &args, ExpressionState &state, Vector &result) { - GenericExecutor::ExecuteBinary, INET_TYPE>( - args.data[0], args.data[1], result, args.size(), [&](INET_TYPE ip, PrimitiveType val) { - auto new_address = ip.b_val - val.val; - if (new_address < 0) { - throw NotImplementedException("Out of range!?"); - } - INET_TYPE result; - result.a_val = ip.a_val; - result.b_val = new_address; - result.c_val = ip.c_val; - return result; +void INetFunctions::Family(DataChunk &args, ExpressionState &state, Vector &result) { + GenericExecutor::ExecuteUnary>( + args.data[0], result, args.size(), [&](INET_TYPE input) { + auto inetType = IPAddressType(input.a_val); + return inetType == IPAddressType::IP_ADDRESS_V4 ? 4 : 6; }); } +// The signed hugeint_t value cannot extend through the full IPv6 range in one +// operation, but it is the largest native signed type available and should be +// appropriate for most realistic operations. Using the signed type will make +// the add/subtract SQL interface the most natural. +static INET_TYPE AddImplementation(INET_TYPE ip, hugeint_t val) { + if (val == 0) { + return ip; + } + + INET_TYPE result; + auto addr_type = IPAddressType(ip.a_val); + uhugeint_t address_in = FromCompatAddr(ip.b_val, addr_type); + uhugeint_t address_out; + result.a_val = ip.a_val; + result.c_val = ip.c_val; + + // Use the overflow checking operators to ensure well-defined behavior. The + // operators must operate on the same type signedness, so convert the operand as + // necessary, and choose between add/subtraction operations. + if (val > 0) { + address_out = AddOperatorOverflowCheck::Operation(address_in, val); + } else { + address_out = SubtractOperatorOverflowCheck::Operation(address_in, -val); + } + + if (addr_type == IPAddressType::IP_ADDRESS_V4 && address_out >= (uhugeint_t(0xffffffff))) { + throw OutOfRangeException("Cannot add %s to %s.", val, IPAddress(addr_type, address_in, ip.c_val).ToString()); + } + + result.b_val = ToCompatAddr(address_out, addr_type); + + return result; +} + +void INetFunctions::Subtract(DataChunk &args, ExpressionState &state, Vector &result) { + GenericExecutor::ExecuteBinary, INET_TYPE>( + args.data[0], args.data[1], result, args.size(), + [&](INET_TYPE ip, PrimitiveType val) { return AddImplementation(ip, -val.val); }); +} + +void INetFunctions::Add(DataChunk &args, ExpressionState &state, Vector &result) { + GenericExecutor::ExecuteBinary, INET_TYPE>( + args.data[0], args.data[1], result, args.size(), + [&](INET_TYPE ip, PrimitiveType val) { return AddImplementation(ip, val.val); }); +} + } // namespace duckdb diff --git a/extension/inet/ipaddress.cpp b/extension/inet/ipaddress.cpp index 319a7d17a1b3..121dedc3832b 100644 --- a/extension/inet/ipaddress.cpp +++ b/extension/inet/ipaddress.cpp @@ -1,29 +1,48 @@ #include "ipaddress.hpp" #include "duckdb/common/operator/cast_operators.hpp" #include "duckdb/common/types/cast_helpers.hpp" +#include "duckdb/common/string_util.hpp" + +#include +#include namespace duckdb { +constexpr static const int32_t HEX_BITSIZE = 4; +constexpr static const int32_t MAX_QUIBBLE_DIGITS = 4; +constexpr static const idx_t QUIBBLES_PER_HALF = 4; + IPAddress::IPAddress() : type(IPAddressType::IP_ADDRESS_INVALID) { } -IPAddress::IPAddress(IPAddressType type, hugeint_t address, uint16_t mask) : type(type), address(address), mask(mask) { +IPAddress::IPAddress(IPAddressType type, uhugeint_t address, uint16_t mask) : type(type), address(address), mask(mask) { } IPAddress IPAddress::FromIPv4(int32_t address, uint16_t mask) { return IPAddress(IPAddressType::IP_ADDRESS_V4, address, mask); } -IPAddress IPAddress::FromIPv6(hugeint_t address, uint16_t mask) { +IPAddress IPAddress::FromIPv6(uhugeint_t address, uint16_t mask) { return IPAddress(IPAddressType::IP_ADDRESS_V6, address, mask); } -static bool IPAddressError(string_t input, string *error_message, string error) { +static bool IPAddressError(string_t input, CastParameters ¶meters, string error) { string e = "Failed to convert string \"" + input.GetString() + "\" to inet: " + error; - HandleCastError::AssignError(e, error_message); + HandleCastError::AssignError(e, parameters); return false; } -bool IPAddress::TryParse(string_t input, IPAddress &result, string *error_message) { +// Even though inet_pton() and inet_ntop() exist in network libraries, the +// parsing and formatting functions are implemented in-line here to ensure +// consistent behavior across implementations as well as provide better error +// messages. +// +// Additionally, there wouldn't be much code savings since using +// those functions would need to use pre-processor directives between Windows +// and POSIX systems, temporary structures would need to be created and data +// copied into and of them, and careful bytes swapping would be necessary to get +// the resulting values into the proper native types. + +static bool TryParseIPv4(string_t input, IPAddress &result, CastParameters ¶meters) { auto data = input.GetData(); auto size = input.GetSize(); idx_t c = 0; @@ -36,11 +55,11 @@ bool IPAddress::TryParse(string_t input, IPAddress &result, string *error_messag c++; } if (start == c) { - return IPAddressError(input, error_message, "Expected a number"); + return IPAddressError(input, parameters, "Expected a number"); } uint8_t number; if (!TryCast::Operation(string_t(data + start, c - start), number)) { - return IPAddressError(input, error_message, "Expected a number between 0 and 255"); + return IPAddressError(input, parameters, "Expected a number between 0 and 255"); } address <<= 8; address += number; @@ -53,7 +72,7 @@ bool IPAddress::TryParse(string_t input, IPAddress &result, string *error_messag } parse_dot: if (c == size || data[c] != '.') { - return IPAddressError(input, error_message, "Expected a dot"); + return IPAddressError(input, parameters, "Expected a dot"); } c++; goto parse_number; @@ -64,7 +83,7 @@ bool IPAddress::TryParse(string_t input, IPAddress &result, string *error_messag return true; } if (data[c] != '/') { - return IPAddressError(input, error_message, "Expected a slash"); + return IPAddressError(input, parameters, "Expected a slash"); } c++; start = c; @@ -73,16 +92,209 @@ bool IPAddress::TryParse(string_t input, IPAddress &result, string *error_messag } uint8_t mask; if (!TryCast::Operation(string_t(data + start, c - start), mask)) { - return IPAddressError(input, error_message, "Expected a number between 0 and 32"); + return IPAddressError(input, parameters, "Expected a number between 0 and 32"); } if (mask > 32) { - return IPAddressError(input, error_message, "Expected a number between 0 and 32"); + return IPAddressError(input, parameters, "Expected a number between 0 and 32"); } result.mask = mask; return true; } -string IPAddress::ToString() const { +/* + IPv6 addresses are 128-bit values. + + When written, these are broken up into 8 16-bit values and represented as up + to 4 hexadecimal digits. Formally, these values are called hextets, but + informally they can be called quibbles. This comes from the fact there are 4 + "nibbles" (4-bit) values, so quad-nibble, or quibble. + + A series of 2 or more zero quibbles can be written as a double-colon, "::". + This can be done only once, for the longest run of zero quibbles, in a given + address. + + For example: + + 2001:db8:0:0:0:cef3:35:363 + + becomes + + 2001:db8::cef3:35:363 + + Both address representations are considered valid, but the compressed form is + canonical and should be preferred in textual output. More examples can be + found in test cases, such as test/sql/inet/test_ipv6_inet_type.test. +*/ +static void ParseQuibble(uint16_t &result, const char *buf, idx_t len) { + result = 0; + for (idx_t c = 0; c < len; ++c) { + result = (result << HEX_BITSIZE) + StringUtil::GetHexValue(buf[c]); + } +} + +/* +Compute the bitshift to store or retrieve a given quibble from one of the halves +of an address. + */ +static idx_t QuibbleHalfAddressBitShift(const idx_t quibble, bool &is_upper) { + const idx_t this_offset = quibble % QUIBBLES_PER_HALF; + const idx_t quibble_shift = (QUIBBLES_PER_HALF - 1) - this_offset; + is_upper = quibble < QUIBBLES_PER_HALF; + + return quibble_shift * IPAddress::IPV6_QUIBBLE_BITS; +} + +static bool TryParseIPv6(string_t input, IPAddress &result, CastParameters ¶meters) { + auto data = input.GetData(); + auto size = input.GetSize(); + idx_t c = 0; + int parsed_quibble_count = 0; + uint16_t quibbles[IPAddress::IPV6_NUM_QUIBBLE] = {}; + int first_quibble_count = -1; + result.type = IPAddressType::IP_ADDRESS_V6; + result.mask = IPAddress::IPV6_DEFAULT_MASK; + while (c < size && parsed_quibble_count < IPAddress::IPV6_NUM_QUIBBLE) { + // Find and parse the next quibble + auto start = c; + while (c < size && StringUtil::CharacterIsHex(data[c])) { + ++c; + } + idx_t len = c - start; + if (len > MAX_QUIBBLE_DIGITS) { + return IPAddressError(input, parameters, "Expected 4 or fewer hex digits"); + } + + if (c < size && data[c] == '.') { + // This might be the IPv4 dotted decimal form, but it must occur at the end + // so find the full length, and confirm only valid characters are present. + c = start; + while (c < size && (StringUtil::CharacterIsDigit(data[c]) || data[c] == '.')) { + ++c; + } + + // c must either be at the end, or pointing to the "/" of the prefix mask. + if (c < size && data[c] != '/') { + return IPAddressError(input, parameters, "IPv4 format can only be used for the final 2 quibbles."); + } + + IPAddress ipv4; + if (!TryParseIPv4(string_t(&data[start], c - start), ipv4, parameters)) { + return false; + } + + // Put the ipv4 parsed 2 quibbles into the proper address location. + quibbles[parsed_quibble_count++] = ipv4.address.lower >> IPAddress::IPV6_QUIBBLE_BITS; + quibbles[parsed_quibble_count++] = ipv4.address.lower & 0xffff; + continue; + } + + if (c < size && data[c] != ':' && data[c] != '/') { + return IPAddressError(input, parameters, "Unexpected character found"); + } + + if (len > 0) { + ParseQuibble(quibbles[parsed_quibble_count++], &data[start], len); + } + + // Check for double colon + if (c + 1 < size && data[c] == ':' && data[c + 1] == ':') { + if (first_quibble_count != -1) { + return IPAddressError(input, parameters, "Encountered more than one double-colon"); + } + // Special check for another colon, any other invalid character will + // be caught in the main loop + if (c + 2 < size && data[c + 2] == ':') { + return IPAddressError(input, parameters, "Encountered more than two consecutive colons"); + } + first_quibble_count = parsed_quibble_count; + ++c; + } + + // Parse the mask if specified + if (c < size && data[c] == '/') { + start = ++c; + while (c < size && StringUtil::CharacterIsDigit(data[c])) { + ++c; + } + uint8_t mask; + if (!TryCast::Operation(string_t(&data[start], c - start), mask)) { + return IPAddressError(input, parameters, "Expected a number between 0 and 128"); + } + if (mask > IPAddress::IPV6_DEFAULT_MASK) { + return IPAddressError(input, parameters, "Expected a number between 0 and 128"); + } + result.mask = mask; + break; + } + ++c; + } + + if (parsed_quibble_count < IPAddress::IPV6_NUM_QUIBBLE && first_quibble_count == -1) { + return IPAddressError(input, parameters, "Expected 8 sets of 4 hex digits."); + } + + if (c < size) { + return IPAddressError(input, parameters, "Unexpected extra characters"); + } + + // Operate on each half of the 128 bit address directly to make the bit operations much more + // efficient. + result.address.upper = 0; + result.address.lower = 0; + + idx_t output_idx = 0; + for (int parsed_idx = 0; parsed_idx < parsed_quibble_count; ++parsed_idx, ++output_idx) { + if (parsed_idx == first_quibble_count) { + // All the quibbles before the double-colon were output, now skip + // to where the bottom set was defined. + int missing_quibbles = IPAddress::IPV6_NUM_QUIBBLE - parsed_quibble_count; + if (missing_quibbles == 0) { + return IPAddressError(input, parameters, "Invalid double-colon, too many hex digits."); + } + // Advanced the output by the number of missing quibbles, they will be zero. + output_idx += missing_quibbles; + } + + bool is_upper; + const idx_t bitshift = QuibbleHalfAddressBitShift(output_idx, is_upper); + if (is_upper) { + result.address.upper |= static_cast(quibbles[parsed_idx]) << bitshift; + } else { + result.address.lower |= static_cast(quibbles[parsed_idx]) << bitshift; + } + } + + return true; +} + +bool IPAddress::TryParse(string_t input, IPAddress &result, CastParameters ¶meters) { + auto data = input.GetData(); + auto size = input.GetSize(); + // Start by detecting whether the string is an IPv4 or IPv6 address, or neither. + idx_t c = 0; + while (c < size && StringUtil::CharacterIsHex(data[c])) { + c++; + } + if (c == size) { + return IPAddressError(input, parameters, "Expected an IP address"); + } + + // IPv6 can start with a colon + if (data[c] == ':') { + return TryParseIPv6(input, result, parameters); + } + + if (c == 0) { + return IPAddressError(input, parameters, "Expected a number"); + } + if (data[c] == '.') { + return TryParseIPv4(input, result, parameters); + } + + return IPAddressError(input, parameters, "Expected an IP address"); +} + +static string ToStringIPv4(const uhugeint_t &address, const uint8_t mask) { string result; for (idx_t i = 0; i < 4; i++) { if (i > 0) { @@ -98,11 +310,112 @@ string IPAddress::ToString() const { return result; } +static string ToStringIPv6(const IPAddress &addr) { + uint16_t quibbles[IPAddress::IPV6_NUM_QUIBBLE]; + idx_t zero_run = 0; + idx_t zero_start = 0; + // The total number of quibbles can't be a start index, so use it to track + // when a zero run is not in progress. + idx_t this_zero_start = IPAddress::IPV6_NUM_QUIBBLE; + + // Convert the packed bits into quibbles while looking for the maximum run of zeros + for (idx_t i = 0; i < IPAddress::IPV6_NUM_QUIBBLE; ++i) { + bool is_upper; + const idx_t bitshift = QuibbleHalfAddressBitShift(i, is_upper); + // Operate on each half separately to make the bit operations more efficient. + if (is_upper) { + quibbles[i] = Hugeint::Cast((addr.address.upper >> bitshift) & 0xFFFF); + } else { + quibbles[i] = Hugeint::Cast((addr.address.lower >> bitshift) & 0xFFFF); + } + + if (quibbles[i] == 0 && this_zero_start == IPAddress::IPV6_NUM_QUIBBLE) { + this_zero_start = i; + } else if (quibbles[i] != 0 && this_zero_start != IPAddress::IPV6_NUM_QUIBBLE) { + // This is the end of the current run of zero quibbles + idx_t this_run = i - this_zero_start; + // Save this run if it is larger than previous runs. If it is equal, + // the left-most should be used according to the standard, so keep + // the previous start value. Also per the standard, do not count a + // single zero quibble as a run. + if (this_run > 1 && this_run > zero_run) { + zero_run = this_run; + zero_start = this_zero_start; + } + this_zero_start = IPAddress::IPV6_NUM_QUIBBLE; + } + } + + // Handle a zero run through the end of the address + if (this_zero_start != IPAddress::IPV6_NUM_QUIBBLE) { + idx_t this_run = IPAddress::IPV6_NUM_QUIBBLE - this_zero_start; + if (this_run > 1 && this_run > zero_run) { + zero_run = this_run; + zero_start = this_zero_start; + } + } + + const idx_t zero_end = zero_start + zero_run; + std::ostringstream result; + result << std::hex; + + for (idx_t i = 0; i < IPAddress::IPV6_NUM_QUIBBLE; ++i) { + if (i > 0) { + result << ":"; + } + + if (i < zero_end && i >= zero_start) { + // Handle the special case of the run being at the beginning + if (i == 0) { + result << ":"; + } + // Adjust the index to skip past the zero quibbles + i = zero_end - 1; + + // Handle the special case of the run being at the end + if (i == IPAddress::IPV6_NUM_QUIBBLE - 1) { + result << ":"; + } + } else if ( + // Deprecated IPv4 form with all leading zeros (except handle special case ::1) + (i == 6 && zero_start == 0 && zero_end == 6 && quibbles[7] != 1) + // Ipv4-mapped addresses: ::ffff:111.222.33.44 + || (i == 6 && zero_start == 0 && zero_end == 5 && quibbles[5] == 0xffff) + // Ipv4 translated addresses: ::ffff:0:111.222.33.44 + || (i == 6 && zero_start == 0 && zero_end == 4 && quibbles[4] == 0xffff && quibbles[5] == 0)) { + // Pass along the lower 2 quibbles, and use the IPv4 default mask to suppress + // ToStringIPv4 from trying to print a mask value + result << ToStringIPv4(addr.address & 0xffffffff, IPAddress::IPV4_DEFAULT_MASK); + break; + } else { + result << quibbles[i]; + } + } + + if (addr.mask != IPAddress::IPV6_DEFAULT_MASK) { + result << "/" << std::dec << addr.mask; + } + return result.str(); +} + +string IPAddress::ToString() const { + if (type == IPAddressType::IP_ADDRESS_V4) { + return ToStringIPv4(this->address, this->mask); + } + + if (type == IPAddressType::IP_ADDRESS_V6) { + return ToStringIPv6(*this); + } + + throw ConversionException("Invalid IPAddress"); +} + IPAddress IPAddress::FromString(string_t input) { IPAddress result; - string error_message; - if (!TryParse(input, result, &error_message)) { - throw ConversionException(error_message); + CastParameters parameters; + auto success = TryParse(input, result, parameters); + if (!success) { + throw InternalException("Not successful but no exception was thrown"); } return result; } diff --git a/extension/json/buffered_json_reader.cpp b/extension/json/buffered_json_reader.cpp index 868e71ecea86..2e4653862f4b 100644 --- a/extension/json/buffered_json_reader.cpp +++ b/extension/json/buffered_json_reader.cpp @@ -304,11 +304,11 @@ idx_t BufferedJSONReader::GetLineNumber(idx_t buf_index, idx_t line_or_object_in line += buffer_line_or_object_counts[b_idx]; } } - } - if (can_throw) { - thrown = true; - // SQL uses 1-based indexing so I guess we will do that in our exception here as well - return line + 1; + if (can_throw) { + thrown = true; + // SQL uses 1-based indexing so I guess we will do that in our exception here as well + return line + 1; + } } TaskScheduler::YieldThread(); } @@ -331,6 +331,7 @@ void BufferedJSONReader::ThrowTransformError(idx_t buf_index, idx_t line_or_obje } double BufferedJSONReader::GetProgress() const { + lock_guard guard(lock); if (HasFileHandle()) { return 100.0 - 100.0 * double(file_handle->Remaining()) / double(file_handle->FileSize()); } else { diff --git a/extension/json/include/buffered_json_reader.hpp b/extension/json/include/buffered_json_reader.hpp index c7e31cac5c37..b4a894a53529 100644 --- a/extension/json/include/buffered_json_reader.hpp +++ b/extension/json/include/buffered_json_reader.hpp @@ -90,9 +90,9 @@ struct JSONFileHandle { //! Read properties idx_t read_position; - idx_t requested_reads; + atomic requested_reads; atomic actual_reads; - bool last_read_requested; + atomic last_read_requested; //! Cached buffers for resetting when reading stream vector cached_buffers; @@ -161,7 +161,7 @@ class BufferedJSONReader { bool thrown; public: - mutex lock; + mutable mutex lock; MultiFileReaderData reader_data; }; diff --git a/extension/json/include/json_transform.hpp b/extension/json/include/json_transform.hpp index b87538fe0800..222f9003b79f 100644 --- a/extension/json/include/json_transform.hpp +++ b/extension/json/include/json_transform.hpp @@ -40,6 +40,8 @@ struct JSONTransformOptions { string error_message; //! Index of the object where the error occurred idx_t object_index = DConstants::INVALID_INDEX; + //! Cast parameters + CastParameters parameters; public: void Serialize(Serializer &serializer) const; diff --git a/extension/json/json_functions.cpp b/extension/json/json_functions.cpp index f4b724f79da8..db2a6ed4ded2 100644 --- a/extension/json/json_functions.cpp +++ b/extension/json/json_functions.cpp @@ -224,8 +224,7 @@ static bool CastVarcharToJSON(Vector &source, Vector &result, idx_t count, CastP if (!doc) { mask.SetInvalid(idx); if (success) { - HandleCastError::AssignError(JSONCommon::FormatParseError(data, length, error), - parameters.error_message); + HandleCastError::AssignError(JSONCommon::FormatParseError(data, length, error), parameters); success = false; } } diff --git a/extension/json/json_functions/json_create.cpp b/extension/json/json_functions/json_create.cpp index 0abd23491a33..2167ae902e5b 100644 --- a/extension/json/json_functions/json_create.cpp +++ b/extension/json/json_functions/json_create.cpp @@ -61,6 +61,9 @@ static LogicalType GetJSONType(StructNames &const_struct_names, const LogicalTyp // The nested types need to conform as well case LogicalTypeId::LIST: return LogicalType::LIST(GetJSONType(const_struct_names, ListType::GetChildType(type))); + case LogicalTypeId::ARRAY: + return LogicalType::ARRAY(GetJSONType(const_struct_names, ArrayType::GetChildType(type)), + ArrayType::GetSize(type)); // Struct and MAP are treated as JSON values case LogicalTypeId::STRUCT: { child_list_t child_types; @@ -435,6 +438,9 @@ static void CreateValuesList(const StructNames &names, yyjson_mut_doc *doc, yyjs static void CreateValuesArray(const StructNames &names, yyjson_mut_doc *doc, yyjson_mut_val *vals[], Vector &value_v, idx_t count) { + + value_v.Flatten(count); + // Initialize array for the nested values auto &child_v = ArrayVector::GetEntry(value_v); auto array_size = ArrayType::GetSize(value_v.GetType()); diff --git a/extension/json/json_functions/json_transform.cpp b/extension/json/json_functions/json_transform.cpp index aaab5cb42791..7aa0345b7d42 100644 --- a/extension/json/json_functions/json_transform.cpp +++ b/extension/json/json_functions/json_transform.cpp @@ -13,13 +13,13 @@ namespace duckdb { -JSONTransformOptions::JSONTransformOptions() { +JSONTransformOptions::JSONTransformOptions() : parameters(false, &error_message) { } JSONTransformOptions::JSONTransformOptions(bool strict_cast_p, bool error_duplicate_key_p, bool error_missing_key_p, bool error_unkown_key_p) : strict_cast(strict_cast_p), error_duplicate_key(error_duplicate_key_p), error_missing_key(error_missing_key_p), - error_unknown_key(error_unkown_key_p) { + error_unknown_key(error_unkown_key_p), parameters(false, &error_message) { } //! Forward declaration for recursion @@ -135,7 +135,7 @@ static inline bool GetValueDecimal(yyjson_val *val, T &result, uint8_t w, uint8_ bool success; switch (unsafe_yyjson_get_tag(val)) { case YYJSON_TYPE_STR | YYJSON_SUBTYPE_NONE: - success = OP::template Operation(GetString(val), result, &options.error_message, w, s); + success = OP::template Operation(GetString(val), result, options.parameters, w, s); break; case YYJSON_TYPE_ARR | YYJSON_SUBTYPE_NONE: case YYJSON_TYPE_OBJ | YYJSON_SUBTYPE_NONE: @@ -143,17 +143,16 @@ static inline bool GetValueDecimal(yyjson_val *val, T &result, uint8_t w, uint8_ break; case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE: case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE: - success = OP::template Operation(unsafe_yyjson_get_bool(val), result, &options.error_message, w, s); + success = OP::template Operation(unsafe_yyjson_get_bool(val), result, options.parameters, w, s); break; case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT: - success = - OP::template Operation(unsafe_yyjson_get_uint(val), result, &options.error_message, w, s); + success = OP::template Operation(unsafe_yyjson_get_uint(val), result, options.parameters, w, s); break; case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT: - success = OP::template Operation(unsafe_yyjson_get_sint(val), result, &options.error_message, w, s); + success = OP::template Operation(unsafe_yyjson_get_sint(val), result, options.parameters, w, s); break; case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL: - success = OP::template Operation(unsafe_yyjson_get_real(val), result, &options.error_message, w, s); + success = OP::template Operation(unsafe_yyjson_get_real(val), result, options.parameters, w, s); break; default: throw InternalException("Unknown yyjson tag in GetValueString"); @@ -982,7 +981,7 @@ static bool JSONToAnyCast(Vector &source, Vector &result, idx_t count, CastParam auto success = TransformFunctionInternal(source, count, result, alc, options); if (!success) { - HandleCastError::AssignError(options.error_message, parameters.error_message); + HandleCastError::AssignError(options.error_message, parameters); } return success; } diff --git a/extension/json/json_scan.cpp b/extension/json/json_scan.cpp index f96d6c55eac6..618b19465823 100644 --- a/extension/json/json_scan.cpp +++ b/extension/json/json_scan.cpp @@ -569,6 +569,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) { if (file_done) { lock_guard guard(gstate.lock); TryIncrementFileIndex(gstate); + lock_guard reader_guard(current_reader->lock); current_reader->GetFileHandle().Close(); } diff --git a/extension/parquet/column_writer.cpp b/extension/parquet/column_writer.cpp index bad4e9fac799..8eb0f68877a6 100644 --- a/extension/parquet/column_writer.cpp +++ b/extension/parquet/column_writer.cpp @@ -285,7 +285,7 @@ class ColumnWriterPageState { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -663,19 +663,17 @@ void BasicColumnWriter::FinalizeWrite(ColumnWriterState &state_p) { auto &column_writer = writer.GetWriter(); auto start_offset = column_writer.GetTotalWritten(); - auto page_offset = start_offset; // flush the dictionary if (HasDictionary(state)) { column_chunk.meta_data.statistics.distinct_count = DictionarySize(state); column_chunk.meta_data.statistics.__isset.distinct_count = true; - column_chunk.meta_data.dictionary_page_offset = page_offset; + column_chunk.meta_data.dictionary_page_offset = start_offset; column_chunk.meta_data.__isset.dictionary_page_offset = true; FlushDictionary(state, state.stats_state.get()); - page_offset += state.write_info[0].compressed_size; } // record the start position of the pages for this column - column_chunk.meta_data.data_page_offset = page_offset; + column_chunk.meta_data.data_page_offset = column_writer.GetTotalWritten(); SetParquetStatistics(state, column_chunk); // write the individual pages to disk @@ -790,14 +788,14 @@ struct ParquetCastOperator : public BaseParquetOperator { struct ParquetTimestampNSOperator : public BaseParquetOperator { template static TGT Operation(SRC input) { - return Timestamp::FromEpochNanoSeconds(input).value; + return Timestamp::FromEpochNanoSecondsPossiblyInfinite(input).value; } }; struct ParquetTimestampSOperator : public BaseParquetOperator { template static TGT Operation(SRC input) { - return Timestamp::FromEpochSeconds(input).value; + return Timestamp::FromEpochSecondsPossiblyInfinite(input).value; } }; @@ -1828,9 +1826,102 @@ void ListColumnWriter::FinalizeWrite(ColumnWriterState &state_p) { child_writer->FinalizeWrite(*state.child_state); } +//===--------------------------------------------------------------------===// +// Array Column Writer +//===--------------------------------------------------------------------===// +class ArrayColumnWriter : public ListColumnWriter { +public: + ArrayColumnWriter(ParquetWriter &writer, idx_t schema_idx, vector schema_path_p, idx_t max_repeat, + idx_t max_define, unique_ptr child_writer_p, bool can_have_nulls) + : ListColumnWriter(writer, schema_idx, std::move(schema_path_p), max_repeat, max_define, + std::move(child_writer_p), can_have_nulls) { + } + ~ArrayColumnWriter() override = default; + +public: + void Analyze(ColumnWriterState &state, ColumnWriterState *parent, Vector &vector, idx_t count) override; + void Prepare(ColumnWriterState &state, ColumnWriterState *parent, Vector &vector, idx_t count) override; + void Write(ColumnWriterState &state, Vector &vector, idx_t count) override; +}; + +void ArrayColumnWriter::Analyze(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) { + auto &state = state_p.Cast(); + auto &array_child = ArrayVector::GetEntry(vector); + auto array_size = ArrayType::GetSize(vector.GetType()); + child_writer->Analyze(*state.child_state, &state_p, array_child, array_size * count); +} + +void ArrayColumnWriter::Prepare(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) { + auto &state = state_p.Cast(); + + auto array_size = ArrayType::GetSize(vector.GetType()); + auto &validity = FlatVector::Validity(vector); + + // write definition levels and repeats + // the main difference between this and ListColumnWriter::Prepare is that we need to make sure to write out + // repetition levels and definitions for the child elements of the array even if the array itself is NULL. + idx_t start = 0; + idx_t vcount = parent ? parent->definition_levels.size() - state.parent_index : count; + idx_t vector_index = 0; + for (idx_t i = start; i < vcount; i++) { + idx_t parent_index = state.parent_index + i; + if (parent && !parent->is_empty.empty() && parent->is_empty[parent_index]) { + state.definition_levels.push_back(parent->definition_levels[parent_index]); + state.repetition_levels.push_back(parent->repetition_levels[parent_index]); + state.is_empty.push_back(true); + continue; + } + auto first_repeat_level = + parent && !parent->repetition_levels.empty() ? parent->repetition_levels[parent_index] : max_repeat; + if (parent && parent->definition_levels[parent_index] != PARQUET_DEFINE_VALID) { + state.definition_levels.push_back(parent->definition_levels[parent_index]); + state.repetition_levels.push_back(first_repeat_level); + state.is_empty.push_back(false); + for (idx_t k = 1; k < array_size; k++) { + state.repetition_levels.push_back(max_repeat + 1); + state.definition_levels.push_back(parent->definition_levels[parent_index]); + state.is_empty.push_back(false); + } + } else if (validity.RowIsValid(vector_index)) { + // push the repetition levels + state.definition_levels.push_back(PARQUET_DEFINE_VALID); + state.is_empty.push_back(false); + + state.repetition_levels.push_back(first_repeat_level); + for (idx_t k = 1; k < array_size; k++) { + state.repetition_levels.push_back(max_repeat + 1); + state.definition_levels.push_back(PARQUET_DEFINE_VALID); + state.is_empty.push_back(false); + } + } else { + state.definition_levels.push_back(max_define - 1); + state.repetition_levels.push_back(first_repeat_level); + state.is_empty.push_back(false); + for (idx_t k = 1; k < array_size; k++) { + state.repetition_levels.push_back(max_repeat + 1); + state.definition_levels.push_back(max_define - 1); + state.is_empty.push_back(false); + } + } + vector_index++; + } + state.parent_index += vcount; + + auto &array_child = ArrayVector::GetEntry(vector); + child_writer->Prepare(*state.child_state, &state_p, array_child, count * array_size); +} + +void ArrayColumnWriter::Write(ColumnWriterState &state_p, Vector &vector, idx_t count) { + auto &state = state_p.Cast(); + auto array_size = ArrayType::GetSize(vector.GetType()); + auto &array_child = ArrayVector::GetEntry(vector); + child_writer->Write(*state.child_state, array_child, count * array_size); +} + //===--------------------------------------------------------------------===// // Create Column Writer //===--------------------------------------------------------------------===// + unique_ptr ColumnWriter::CreateWriterRecursive(vector &schemas, ParquetWriter &writer, const LogicalType &type, const string &name, vector schema_path, @@ -1879,8 +1970,9 @@ unique_ptr ColumnWriter::CreateWriterRecursive(vector(writer, schema_idx, std::move(schema_path), max_repeat, max_define, std::move(child_writers), can_have_nulls); } - if (type.id() == LogicalTypeId::LIST) { - auto &child_type = ListType::GetChildType(type); + if (type.id() == LogicalTypeId::LIST || type.id() == LogicalTypeId::ARRAY) { + auto is_list = type.id() == LogicalTypeId::LIST; + auto &child_type = is_list ? ListType::GetChildType(type) : ArrayType::GetChildType(type); // set up the two schema elements for the list // for some reason we only set the converted type in the OPTIONAL element // first an OPTIONAL element @@ -1907,14 +1999,19 @@ unique_ptr ColumnWriter::CreateWriterRecursive(vector(writer, schema_idx, std::move(schema_path), max_repeat, max_define, - std::move(child_writer), can_have_nulls); + if (is_list) { + return make_uniq(writer, schema_idx, std::move(schema_path), max_repeat, max_define, + std::move(child_writer), can_have_nulls); + } else { + return make_uniq(writer, schema_idx, std::move(schema_path), max_repeat, max_define, + std::move(child_writer), can_have_nulls); + } } if (type.id() == LogicalTypeId::MAP) { // map type diff --git a/extension/parquet/include/column_writer.hpp b/extension/parquet/include/column_writer.hpp index eb3ca519e695..e80e9dfab2ce 100644 --- a/extension/parquet/include/column_writer.hpp +++ b/extension/parquet/include/column_writer.hpp @@ -29,7 +29,7 @@ class ColumnWriterState { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -51,7 +51,7 @@ class ColumnWriterStatistics { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/extension/parquet/parquet_extension.cpp b/extension/parquet/parquet_extension.cpp index 57906656eb29..695ff37b60d0 100644 --- a/extension/parquet/parquet_extension.cpp +++ b/extension/parquet/parquet_extension.cpp @@ -47,7 +47,6 @@ struct ParquetReadBindData : public TableFunctionData { shared_ptr initial_reader; vector files; atomic chunk_count; - atomic cur_file; vector names; vector types; @@ -389,10 +388,15 @@ class ParquetScanFunction { // missing metadata entry in cache, no usable stats return nullptr; } - auto handle = fs.OpenFile(file_name, FileFlags::FILE_FLAGS_READ); - // we need to check if the metadata cache entries are current - if (fs.GetLastModifiedTime(*handle) >= metadata->read_time) { - // missing or invalid metadata entry in cache, no usable stats overall + if (!fs.IsRemoteFile(file_name)) { + auto handle = fs.OpenFile(file_name, FileFlags::FILE_FLAGS_READ); + // we need to check if the metadata cache entries are current + if (fs.GetLastModifiedTime(*handle) >= metadata->read_time) { + // missing or invalid metadata entry in cache, no usable stats overall + return nullptr; + } + } else { + // for remote files we just avoid reading stats entirely return nullptr; } ParquetReader reader(context, bind_data.parquet_options, metadata); @@ -484,15 +488,16 @@ class ParquetScanFunction { static double ParquetProgress(ClientContext &context, const FunctionData *bind_data_p, const GlobalTableFunctionState *global_state) { auto &bind_data = bind_data_p->Cast(); + auto &gstate = global_state->Cast(); if (bind_data.files.empty()) { return 100.0; } if (bind_data.initial_file_cardinality == 0) { - return (100.0 * (bind_data.cur_file + 1)) / bind_data.files.size(); + return (100.0 * (gstate.file_index + 1)) / bind_data.files.size(); } - auto percentage = std::min( + auto percentage = MinValue( 100.0, (bind_data.chunk_count * STANDARD_VECTOR_SIZE * 100.0 / bind_data.initial_file_cardinality)); - return (percentage + 100.0 * bind_data.cur_file) / bind_data.files.size(); + return (percentage + 100.0 * gstate.file_index) / bind_data.files.size(); } static unique_ptr @@ -628,7 +633,10 @@ class ParquetScanFunction { static idx_t ParquetScanMaxThreads(ClientContext &context, const FunctionData *bind_data) { auto &data = bind_data->Cast(); - return std::max(data.initial_file_row_groups, idx_t(1)) * data.files.size(); + if (data.files.size() > 1) { + return TaskScheduler::GetScheduler(context).NumberOfThreads(); + } + return MaxValue(data.initial_file_row_groups, (idx_t)1); } // This function looks for the next available row group. If not available, it will open files from bind_data.files diff --git a/extension/parquet/parquet_timestamp.cpp b/extension/parquet/parquet_timestamp.cpp index e8779061d704..3451e26686a0 100644 --- a/extension/parquet/parquet_timestamp.cpp +++ b/extension/parquet/parquet_timestamp.cpp @@ -43,10 +43,20 @@ Int96 TimestampToImpalaTimestamp(timestamp_t &ts) { timestamp_t ParquetTimestampMicrosToTimestamp(const int64_t &raw_ts) { return Timestamp::FromEpochMicroSeconds(raw_ts); } + timestamp_t ParquetTimestampMsToTimestamp(const int64_t &raw_ts) { + timestamp_t input(raw_ts); + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochMs(raw_ts); } + timestamp_t ParquetTimestampNsToTimestamp(const int64_t &raw_ts) { + timestamp_t input(raw_ts); + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochNanoSeconds(raw_ts); } diff --git a/extension/parquet/parquet_writer.cpp b/extension/parquet/parquet_writer.cpp index 0999a8aa8b98..7c299fa793a1 100644 --- a/extension/parquet/parquet_writer.cpp +++ b/extension/parquet/parquet_writer.cpp @@ -170,6 +170,10 @@ CopyTypeSupport ParquetWriter::TypeIsSupported(const LogicalType &type) { auto &child_type = ListType::GetChildType(type); return TypeIsSupported(child_type); } + if (id == LogicalTypeId::ARRAY) { + auto &child_type = ArrayType::GetChildType(type); + return TypeIsSupported(child_type); + } if (id == LogicalTypeId::UNION) { auto count = UnionType::GetMemberCount(type); for (idx_t i = 0; i < count; i++) { diff --git a/extension/tpch/dbgen/answers/sf100/q01.csv b/extension/tpch/dbgen/answers/sf100/q01.csv new file mode 100644 index 000000000000..2c020499444e --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q01.csv @@ -0,0 +1,5 @@ +l_returnflag|l_linestatus|sum_qty|sum_base_price|sum_disc_price|sum_charge|avg_qty|avg_price|avg_disc|count_order +A|F|3775127758.00|5660776097194.45|5377736398183.9374|5592847429515.927026|25.499370423275426|38236.11698430489|0.050002243530929025|148047881 +N|F|98553062.00|147771098385.98|140384965965.0348|145999793032.775829|25.501556956882876|38237.1993888045|0.04998528433805397|3864590 +N|O|7436302976.00|11150725681373.59|10593195308234.8523|11016932248183.655467|25.500009404374193|38237.227646360945|0.04999791831562552|291619617 +R|F|3775724970.00|5661603032745.34|5378513563915.4097|5593662252666.916161|25.50006628406532|38236.697258452965|0.05000130433965413|148067261 diff --git a/extension/tpch/dbgen/answers/sf100/q02.csv b/extension/tpch/dbgen/answers/sf100/q02.csv new file mode 100644 index 000000000000..df9b4b0b5c21 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q02.csv @@ -0,0 +1,101 @@ +s_acctbal|s_name|n_name|p_partkey|p_mfgr|s_address|s_phone|s_comment +9999.70|Supplier#000239544|UNITED KINGDOM|6739531|Manufacturer#4|1UCMu3TLyUThghoeZ8arg6cV3Mr|33-509-584-9496|y against the pending, final packages. fluffily +9999.65|Supplier#000143654|FRANCE|2393647|Manufacturer#3|kJjo119CzmTjMWx3wtinBzb1M1TO1IiJZtR1|16-166-504-5864|are quickly along the quickly bold escap +9999.49|Supplier#000615014|GERMANY|12365001|Manufacturer#3|Xo0xcyhnIKUs0WM|17-780-902-4027|pinto beans nag furiously i +9999.28|Supplier#000494480|ROMANIA|17244462|Manufacturer#3|KdpYAP2EDtNA NrNE0CYS7usfwv F|29-756-312-1779|dolites. requests wake. slyly final packa +9998.87|Supplier#000826281|ROMANIA|14326252|Manufacturer#3|gGkEf9qHPHLg8V1aMBf|29-775-451-4774|ly alongside of the instructions. slyly even requests are according to the +9998.56|Supplier#000039514|UNITED KINGDOM|7539499|Manufacturer#2|M6dRVABIGLJAMkC1CGF0ZTiy8BRLeBA|33-317-828-7758|ans cajole except the regular frets. blithely special accounts haggle final fox +9997.89|Supplier#000319666|RUSSIA|19319665|Manufacturer#1|91yNuY s3DmxI5xisgQyK5R|32-972-151-6038|refully regular orbits are furiously along the unusual, bold foxes. +9997.85|Supplier#000718770|ROMANIA|718769|Manufacturer#1|ZZTXvDgzoKUsBjoBJIm3m7E22BB7W3ddD9q 6 tm|29-663-409-2865|ven, final requests wake dogged, special deposits. +9997.83|Supplier#000348318|FRANCE|9348317|Manufacturer#4|rwLDwIolqK,QdBH|16-718-707-5676|olites use doggedly according to the carefully even excuses. slyly pending pinto +9997.73|Supplier#000329974|RUSSIA|4079969|Manufacturer#3|NgyiQOCBzm|32-268-488-7178|ions are furiously regular deposits. blithely special accoun +9997.46|Supplier#000906546|FRANCE|1406543|Manufacturer#2|Re1ZXj7AQ2pkvA4XYA3hSYJC|16-249-122-4511| carefully. furiously special theo +9997.20|Supplier#000487664|FRANCE|2737657|Manufacturer#2|s8Jl8b2F50TmwxdbGpTp|16-714-518-5435|ilent packages against the expre +9997.17|Supplier#000123140|ROMANIA|5373124|Manufacturer#2|dS,AbIeVACEsHukj0oF8EiT5LYNF1otyGduYJC|29-567-411-4572|ffily express pinto beans boost carefully ironic packages. quickly special accounts haggle +9997.06|Supplier#000725417|GERMANY|10225396|Manufacturer#1|,,I9vBX0fMu7H1uTk|17-577-582-2010|furiously sly pinto beans. even deposits haggle. f +9996.45|Supplier#000795554|ROMANIA|14795553|Manufacturer#2|B9nruTrrsz9rTDZ,oxUxfhGK8ofYbw|29-305-384-2702|t the carefully unusual accou +9995.96|Supplier#000566208|FRANCE|9816180|Manufacturer#5|aeDi86Qt0k0C p6r10tABETLyu1PHj0pLht4bRV|16-665-147-8314|c instructions. ironic hocke +9995.96|Supplier#000629520|FRANCE|13129493|Manufacturer#3|HHEMDuFnY6zVhhuKZDSb,0OF04A9|16-785-547-3814|s. furiously final deposits across the expre +9995.93|Supplier#000388258|UNITED KINGDOM|6138251|Manufacturer#2|A6pSStkixOGTXhFX|33-829-188-2160|ve accounts are blithely express, express dependencies. +9995.79|Supplier#000998425|FRANCE|248424|Manufacturer#4|zHCgm,8 DBYFRFBw8bW,EeCDcdeTlYMQr|16-228-926-9937|its sleep slyly express dependencies. pending, regu +9995.42|Supplier#000220794|ROMANIA|12470757|Manufacturer#1|HvuyoaekR55LhTV9IHYg|29-557-942-9023|en dolphins nag against the quickly final ideas. requests against t +9995.35|Supplier#000660115|RUSSIA|14660114|Manufacturer#4|mM1mA1l6GW2PVaOcySqTnPRInZS|32-485-807-8645|s. daringly regular accounts nag furiously carefully regular deposits! furiously regular accounts +9995.34|Supplier#000190688|UNITED KINGDOM|13440648|Manufacturer#2|C8FJs0TYVwRe0ftT2W5fpyNksmdBznKXV6|33-424-942-1566|. quickly regular packages boost ca +9995.10|Supplier#000885436|UNITED KINGDOM|17885435|Manufacturer#1|16Hsfjgw,RpupKuBUZaMliacWy5nxR jKQN|33-504-226-2765|are according to the regularly +9995.07|Supplier#000490282|ROMANIA|12740245|Manufacturer#4|iKbpRSiMpfq|29-394-304-4131|y bold asymptotes. carefully silent excuses into the even asymptotes s +9994.85|Supplier#000581928|GERMANY|2831921|Manufacturer#1|7Pp58RF3Z2jkFQR5VUW5x65 RmSQSXBNs|17-230-642-6940|inally special accounts. silent requests sleep busily special foxes! regular pa +9994.66|Supplier#000071807|FRANCE|14821792|Manufacturer#5|RM,EOT5XGp8|16-407-922-3032|otes sleep according to the slyly furious package +9994.46|Supplier#000654651|RUSSIA|5404645|Manufacturer#4|7dh,5zQ9,EugeL7c67L8hbFni33Q4|32-280-208-7451|ly outside the blithely even excuses. slyly bold accounts was. bold ideas about the carefully +9994.15|Supplier#000750884|UNITED KINGDOM|4000871|Manufacturer#3|94Oz NA7SPetmFRGSkKGXmEhpqq74EpUFRSP67W|33-640-820-7791|ely regular packages about the even, regular accounts print fluffily fina +9994.15|Supplier#000750884|UNITED KINGDOM|4250875|Manufacturer#3|94Oz NA7SPetmFRGSkKGXmEhpqq74EpUFRSP67W|33-640-820-7791|ely regular packages about the even, regular accounts print fluffily fina +9994.11|Supplier#000213298|FRANCE|11963286|Manufacturer#5|K11Mh52K4v6NdrkSNw0S|16-813-605-2602|ular instructions must have to sleep pinto beans. special, silent instructions +9993.91|Supplier#000674336|RUSSIA|14924293|Manufacturer#3| 44JCrrbKMvQfysKtEHAZJ0YKt1|32-949-587-4877| special escapades over the special dependencies are special deposits. furiously reg +9993.58|Supplier#000597447|UNITED KINGDOM|9097428|Manufacturer#4|Y3sp,ydmoMl4,LLRab|33-986-148-2564|ily even packages about the quickly bold instructions +9993.21|Supplier#000935931|UNITED KINGDOM|7935930|Manufacturer#1|0gC91nNqy3hYuD376|33-117-102-3544|nding pinto beans serve carefully unusual platelets. slyly +9993.21|Supplier#000935931|UNITED KINGDOM|11435908|Manufacturer#2|0gC91nNqy3hYuD376|33-117-102-3544|nding pinto beans serve carefully unusual platelets. slyly +9992.71|Supplier#000401090|GERMANY|11401089|Manufacturer#1|xMvpcRI6CWdVNkqWxj5b,BObuCG|17-358-630-1671|haggle furiously. regular instructions solve above the caref +9992.70|Supplier#000245718|UNITED KINGDOM|12745693|Manufacturer#1|UeblzxBRTdV3,|33-570-729-4176|s might sleep bravely at the deposits. slyly ironi +9992.65|Supplier#000611657|UNITED KINGDOM|7611656|Manufacturer#3|DJkPsv5xKLcSFpeah|33-456-959-4171|old pinto beans. final theodolites haggle furiously outside +9991.82|Supplier#000754421|GERMANY|3504417|Manufacturer#2|iKUm74KKkfTyL3|17-908-303-8190|uriously regular requests-- furiously express requests across the final +9991.77|Supplier#000514042|ROMANIA|1014039|Manufacturer#1|enSKTYhPOxyKnBJkE4Aue50Cpont6hI2B9S Dh|29-100-282-1954|ly final patterns outside the express foxes lose furiously along the dogged +9991.03|Supplier#000403268|FRANCE|4403267|Manufacturer#4|IASY0peehSWWDJbkui05LzoOeWOmRnTWt|16-970-984-3812|e the slyly pending packages? regular packages detect around the carefull +9990.81|Supplier#000106044|ROMANIA|7106043|Manufacturer#3|ny2,rr,dO7LucvrXay6t hESu 76T|29-217-664-9441|ght affix? quickly ironic accounts haggle blith +9990.65|Supplier#000661325|RUSSIA|5411319|Manufacturer#4|iAwLTqewXa|32-312-563-2260| the furiously bold deposits: slyly pending packages wake slyly +9990.32|Supplier#000985253|FRANCE|13735239|Manufacturer#1|plp1ox91 mpCFEcvOgRhPU2S0s8srS5BKT6u|16-848-482-4079|nt packages cajole quickly around the carefully regular excuses. +9990.13|Supplier#000138240|FRANCE|1888238|Manufacturer#4|Ecc8YHzfWMyxDNXKC1LkxlHUfJI6FSx0k9iE2mAb|16-206-608-6166|fluffily slyly silent asymptotes. furiously ironic pinto beans are carefully. +9990.03|Supplier#000081720|UNITED KINGDOM|17581685|Manufacturer#4|SB0zn8EvPFJbFx,nvIcw4j7ZERoy|33-166-373-3036|blithely even warhorses engage. sometimes ironic deposits promise. fl +9989.93|Supplier#000500883|FRANCE|6000870|Manufacturer#1|Bv24cUcSFTj4u605tX1ze|16-736-685-5763| unwind blithely along the even foxes. blithely even instr +9989.46|Supplier#000625093|RUSSIA|15875047|Manufacturer#3|2TsHrlh1jRvkMNXVoZQThv2j|32-291-695-4022| detect against the fluffily thin pinto beans. furious +9988.59|Supplier#000496415|UNITED KINGDOM|10746384|Manufacturer#3|gmzOlvLD7le8|33-577-453-5087| nag fluffily slyly unusual ideas. slyly special foxes above the +9988.49|Supplier#000436244|RUSSIA|18436243|Manufacturer#5|U1MiqZoF9RbP6rzG0Nq|32-837-886-1052|above the ironic, unusual platelets. ironic packages wake carefu +9988.40|Supplier#000465785|GERMANY|11715751|Manufacturer#1|m7Dur5uzT7x6N|17-981-295-1619|e express courts. regular platelets cajole furiously. slyly brave dependenc +9988.29|Supplier#000273304|ROMANIA|3273303|Manufacturer#4|A5vT71bPG2rXVh0|29-238-280-6619|fluffily regular dependencies detect blithely slyly ironic +9988.23|Supplier#000834777|ROMANIA|6334764|Manufacturer#2|mTZfJBW1aCv8a1WZYWbIv1gM|29-851-710-7841|hely pending courts boost along the ironic foxes. s +9987.75|Supplier#000424377|FRANCE|13174363|Manufacturer#5|3 LkmDYatAewZEfEs,sot8YpAq4T43thfwQ|16-246-384-2743|arhorses engage carefully during the regular, even requests. foxes through the carefully even foxes +9987.51|Supplier#000020657|ROMANIA|5520646|Manufacturer#5|XBf0Sq7X2xE0ZTakAq Rsq01lutxjWg|29-167-460-7830| unusual requests cajole across the fluffily final requests. +9987.47|Supplier#000193113|UNITED KINGDOM|12443076|Manufacturer#4|nn,xoEei76Q054zfBt04nQz|33-692-317-4143|ions boost carefully carefully special requests. blithely final foxes sleep b +9987.30|Supplier#000355390|UNITED KINGDOM|15605344|Manufacturer#4|eisgtzmQO8ImR,zhd5rk oxPjBZUF56XBv6ZoKFm|33-376-347-5270|final deposits; bold, regular accounts are c +9987.03|Supplier#000170919|UNITED KINGDOM|5170918|Manufacturer#1|UBmLFtq010IQyj8td5|33-830-782-9233| requests. even asymptotes haggle? regular courts promise after the blithely silent multipliers. +9986.90|Supplier#000980301|RUSSIA|14480272|Manufacturer#1|mivUjyWc7uvr|32-748-246-3728|egular deposits haggle blithely. carefully final multipliers boost carefully +9986.56|Supplier#000290709|FRANCE|12790684|Manufacturer#5|oeF0guxAgtj9UIJJ,|16-173-236-8921|fily. slyly regular platelets sleep. bold instructions use quickly a +9985.79|Supplier#000508791|UNITED KINGDOM|13258777|Manufacturer#1|QyE9YL9WXLG|33-814-455-4907|ronic requests. quickly sly packages nag. furiously regular pinto beans +9985.78|Supplier#000248887|UNITED KINGDOM|12998874|Manufacturer#5|Dz0P3cAbZelkljGDKe3yyV,kZARAsXSIzoTcVxb|33-358-738-5370|ans. bravely unusual packages haggle. blit +9985.77|Supplier#000221145|FRANCE|19971125|Manufacturer#4|S6ZMs gXH6HGx44aTnE0J|16-648-985-3872|bold accounts wake fluffily carefully re +9985.54|Supplier#000147207|GERMANY|9647188|Manufacturer#1|AnAmuPOjKXjpdWG|17-345-679-3036|es sleep enticingly. slyly final instructions h +9985.54|Supplier#000147207|GERMANY|16397158|Manufacturer#2|AnAmuPOjKXjpdWG|17-345-679-3036|es sleep enticingly. slyly final instructions h +9984.95|Supplier#000888199|ROMANIA|5138183|Manufacturer#2|S6MMySs1nWjE3ZqVOiKuq3ZPlDdMj9|29-392-570-4019|s use blithely. instructions cajole blithely blit +9984.88|Supplier#000171850|FRANCE|6421831|Manufacturer#4|IVu7qjTc8zXgnJZz0Av1HIPKbdpcXWcz|16-530-650-3779|n ideas sleep carefully. carefully bold pinto beans use according to the quickly e +9984.88|Supplier#000171850|FRANCE|17671815|Manufacturer#2|IVu7qjTc8zXgnJZz0Av1HIPKbdpcXWcz|16-530-650-3779|n ideas sleep carefully. carefully bold pinto beans use according to the quickly e +9984.35|Supplier#000990772|UNITED KINGDOM|17990771|Manufacturer#3|OnOSKBSMjCOH,cWyZ|33-312-861-1228|pending instructions cajole carefully. ironic, special accounts are against the special foxes-- d +9984.34|Supplier#000818625|GERMANY|12818624|Manufacturer#5|fcOq9MdkUs|17-392-999-1881|ions sleep carefully. bold foxes are among the carefully ironi +9983.77|Supplier#000807239|ROMANIA|6307226|Manufacturer#2| y,oU,khmi|29-870-782-8107|posits. permanent platelets wake furiously above the f +9983.77|Supplier#000807239|ROMANIA|8057214|Manufacturer#4| y,oU,khmi|29-870-782-8107|posits. permanent platelets wake furiously above the f +9983.74|Supplier#000682561|GERMANY|6682560|Manufacturer#3|P0iInDbmlPKw8PhvZeChlBYdmo2tGHi8sm7m15|17-678-399-9268|counts against the bold, special deposits serve daringly final, regular attainments. enticing +9983.32|Supplier#000856704|UNITED KINGDOM|10356683|Manufacturer#4|hAk1r6e94TGXlh8u|33-265-376-9029|eas detect across the pending dolphins. blithely unusual d +9982.02|Supplier#000212153|RUSSIA|4712144|Manufacturer#3|,SFs95om,7spddd|32-353-256-5897|gular deposits. slyly bold foxes nag. packages wake blithely under the silently final platelets. un +9981.72|Supplier#000823344|FRANCE|3823343|Manufacturer#1|SxyDeygF3TJ3te9gWYLNdimmpW77RWJhO8,SbR|16-555-293-2838|s sleep slyly alongside of +9981.10|Supplier#000343979|ROMANIA|19843940|Manufacturer#5|ZeWDj4 orwhsEfSHA,bJTC5Dfb|29-231-383-6316|eep. frets cajole slyly about the silent instructions! ruthlessly busy request +9980.93|Supplier#000118263|UNITED KINGDOM|3118262|Manufacturer#2|7S46lyV BJ|33-156-772-3541|nent ideas. regular requests across the fluffily e +9980.68|Supplier#000479583|RUSSIA|1479582|Manufacturer#2|bPmubzfxUg,iV8Mw6j5rnTircPXgWj iwLsd1|32-217-607-1271|dolites. carefully special +9980.52|Supplier#000683362|ROMANIA|2933355|Manufacturer#5|bM6YgNAtXugLKZngJFJuNFolM,oe1Cs|29-387-482-2397|gside of the slyly special deposits af +9980.52|Supplier#000683362|ROMANIA|15933316|Manufacturer#3|bM6YgNAtXugLKZngJFJuNFolM,oe1Cs|29-387-482-2397|gside of the slyly special deposits af +9980.49|Supplier#000971427|ROMANIA|1221423|Manufacturer#2|tz16B8B82TQMlvTc9igJddHcR701|29-714-548-4045|efully ironic accounts-- carefully regular hockey players sleep quickly about the furiousl +9979.50|Supplier#000458742|ROMANIA|9208732|Manufacturer#2|fWjBe5ZDVJBR9tEwdz6C|29-460-746-6456|its. furiously final deposits according to the requests sle +9979.34|Supplier#000335566|ROMANIA|11335565|Manufacturer#4|9agj7tgnTgCl z|29-120-111-4388|theodolites sleep blithely pinto beans. accounts aroun +9979.04|Supplier#000966284|GERMANY|9216256|Manufacturer#4|ZVU231RHTKaBw8jmO4Dvin85lxBsnREj8|17-946-544-5166|iously unusual accounts a +9978.88|Supplier#000113445|FRANCE|12363408|Manufacturer#5|R4n2vA0VU g0KLynPI7H|16-261-874-6958|mong the carefully quiet accounts slee +9978.82|Supplier#000221713|ROMANIA|19721674|Manufacturer#4|ZJ2t14yZTMNJ IEmAX8,XQPt68L2w2jdJ|29-143-199-8338|ide of the ironic, unusual packages. quickly even tithes nag unu +9978.78|Supplier#000118448|FRANCE|368447|Manufacturer#1|IsUx9h4zQ frTbFHmUemrFQSx|16-978-504-3922|ly express instructions sleep quietly besides the deposits. final instruc +9978.78|Supplier#000118448|FRANCE|1118447|Manufacturer#3|IsUx9h4zQ frTbFHmUemrFQSx|16-978-504-3922|ly express instructions sleep quietly besides the deposits. final instruc +9978.78|Supplier#000118448|FRANCE|12368411|Manufacturer#1|IsUx9h4zQ frTbFHmUemrFQSx|16-978-504-3922|ly express instructions sleep quietly besides the deposits. final instruc +9978.10|Supplier#000485455|ROMANIA|17485454|Manufacturer#2|zTlXQ,tRmUn40Vv|29-315-378-1870|nts cajole furiously with the slowly special att +9977.85|Supplier#000385307|UNITED KINGDOM|18635252|Manufacturer#2|qo5ndgKc6E4C|33-105-512-8982| accounts boost daringly about the special asymptotes. furiously quick requests boo +9977.78|Supplier#000558710|RUSSIA|3308706|Manufacturer#2|QSVlFamsnyUA1lVIm9lC7kFbyp08l MKvECdZU|32-190-876-7346|structions-- express, careful notornis use accounts. carefully sp +9977.78|Supplier#000558710|RUSSIA|13058683|Manufacturer#2|QSVlFamsnyUA1lVIm9lC7kFbyp08l MKvECdZU|32-190-876-7346|structions-- express, careful notornis use accounts. carefully sp +9977.12|Supplier#000218385|UNITED KINGDOM|2468378|Manufacturer#1|0nOUmiOvuAacnMGUKV0Lf4T31C4yTwy G|33-681-192-6225|kly foxes. blithely ironic accounts haggle furiously. slyly final decoys according to the express +9977.06|Supplier#000175556|ROMANIA|16175555|Manufacturer#4|bDl Hs,GGVtayIB5lDB,QpWDURB,7GHa|29-765-974-1131|riously carefully careful grouches. pai +9976.15|Supplier#000249831|ROMANIA|3249830|Manufacturer#3|lEs5ux7FADoZsnUk62VYcI9YiwkX,TskI|29-187-368-9234|into beans dazzle carefully. final ins +9975.74|Supplier#000846320|RUSSIA|8096295|Manufacturer#4|,ZwPdKJX1qmMnOQN|32-487-239-6035|furiously express ideas sleep slyly requests. acc +9975.69|Supplier#000378812|FRANCE|15628766|Manufacturer#1|tQ4eGlGNnY0pkYNRVPQ498bsjnr7|16-867-261-3212|for the blithely unusual accounts are slyly even foxes. bold, express accoun +9975.67|Supplier#000634390|ROMANIA|13134363|Manufacturer#1|zHDCa7MaLJ|29-665-426-1647|ic, express frets haggle q +9975.53|Supplier#000310136|ROMANIA|10810115|Manufacturer#5|VNWONA5Sr B|29-977-903-6199|after the ironic pinto beans sleep about the furiously fi diff --git a/extension/tpch/dbgen/answers/sf100/q03.csv b/extension/tpch/dbgen/answers/sf100/q03.csv new file mode 100644 index 000000000000..060670257889 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q03.csv @@ -0,0 +1,11 @@ +l_orderkey|revenue|o_orderdate|o_shippriority +249739810|492136.8537|1995-02-28|0 +165214338|485645.5293|1995-03-09|0 +507274210|485256.2467|1995-03-10|0 +202071367|474746.4068|1995-03-12|0 +37307463|474325.1938|1995-02-06|0 +461984355|468002.5274|1995-03-13|0 +100810368|467932.7645|1995-02-28|0 +74015523|467786.8027|1995-03-14|0 +402772582|463367.0665|1995-03-10|0 +367111712|462559.3977|1995-03-01|0 diff --git a/extension/tpch/dbgen/answers/sf100/q04.csv b/extension/tpch/dbgen/answers/sf100/q04.csv new file mode 100644 index 000000000000..a283acd0c343 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q04.csv @@ -0,0 +1,6 @@ +o_orderpriority|order_count +1-URGENT|1051801 +2-HIGH|1051366 +3-MEDIUM|1051587 +4-NOT SPECIFIED|1050950 +5-LOW|1051725 diff --git a/extension/tpch/dbgen/answers/sf100/q05.csv b/extension/tpch/dbgen/answers/sf100/q05.csv new file mode 100644 index 000000000000..e9569d660ef7 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q05.csv @@ -0,0 +1,6 @@ +n_name|revenue +VIETNAM|5310749966.8670 +INDIA|5296094837.7503 +JAPAN|5282184528.8254 +CHINA|5270934901.5602 +INDONESIA|5270340980.4608 diff --git a/extension/tpch/dbgen/answers/sf100/q06.csv b/extension/tpch/dbgen/answers/sf100/q06.csv new file mode 100644 index 000000000000..bce818ae2d6a --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q06.csv @@ -0,0 +1,2 @@ +revenue +12330426888.4637 diff --git a/extension/tpch/dbgen/answers/sf100/q07.csv b/extension/tpch/dbgen/answers/sf100/q07.csv new file mode 100644 index 000000000000..554927aa7b7a --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q07.csv @@ -0,0 +1,5 @@ +supp_nation|cust_nation|l_year|revenue +FRANCE|GERMANY|1995|5296106289.7407 +FRANCE|GERMANY|1996|5313955237.5650 +GERMANY|FRANCE|1995|5286060012.2108 +GERMANY|FRANCE|1996|5324729138.8922 diff --git a/extension/tpch/dbgen/answers/sf100/q08.csv b/extension/tpch/dbgen/answers/sf100/q08.csv new file mode 100644 index 000000000000..b82b62e4438e --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q08.csv @@ -0,0 +1,3 @@ +o_year|mkt_share +1995|0.039535108776109315 +1996|0.03897424492526502 diff --git a/extension/tpch/dbgen/answers/sf100/q09.csv b/extension/tpch/dbgen/answers/sf100/q09.csv new file mode 100644 index 000000000000..a2a8d26f81f0 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q09.csv @@ -0,0 +1,176 @@ +nation|o_year|sum_profit +ALGERIA|1998|2746388473.8032 +ALGERIA|1997|4705096214.1934 +ALGERIA|1996|4691101028.3880 +ALGERIA|1995|4692240612.2209 +ALGERIA|1994|4677512644.2049 +ALGERIA|1993|4684367583.8281 +ALGERIA|1992|4704266160.0314 +ARGENTINA|1998|2718513010.8517 +ARGENTINA|1997|4646318596.6846 +ARGENTINA|1996|4656102598.0412 +ARGENTINA|1995|4652753173.2283 +ARGENTINA|1994|4645991799.5327 +ARGENTINA|1993|4643401137.5627 +ARGENTINA|1992|4617848896.7718 +BRAZIL|1998|2731140677.1163 +BRAZIL|1997|4675931143.5076 +BRAZIL|1996|4665397071.9817 +BRAZIL|1995|4661653435.2637 +BRAZIL|1994|4664829056.3807 +BRAZIL|1993|4675246060.5211 +BRAZIL|1992|4699378591.6169 +CANADA|1998|2737663014.1858 +CANADA|1997|4680387035.7293 +CANADA|1996|4682077548.1279 +CANADA|1995|4683532053.5255 +CANADA|1994|4661595473.3244 +CANADA|1993|4663422610.2709 +CANADA|1992|4693236211.6702 +CHINA|1998|2734194369.8060 +CHINA|1997|4683510835.7253 +CHINA|1996|4694563430.7904 +CHINA|1995|4659549932.0340 +CHINA|1994|4668649255.3147 +CHINA|1993|4653663845.2788 +CHINA|1992|4671594192.3921 +EGYPT|1998|2730076443.1884 +EGYPT|1997|4641217395.7312 +EGYPT|1996|4682023903.3341 +EGYPT|1995|4656985688.9953 +EGYPT|1994|4639974596.4792 +EGYPT|1993|4654217487.6341 +EGYPT|1992|4655508405.6203 +ETHIOPIA|1998|2771891798.5626 +ETHIOPIA|1997|4691462902.6513 +ETHIOPIA|1996|4699807893.8519 +ETHIOPIA|1995|4712019051.0500 +ETHIOPIA|1994|4714485895.7143 +ETHIOPIA|1993|4673334464.7560 +ETHIOPIA|1992|4709982012.2332 +FRANCE|1998|2749352687.4774 +FRANCE|1997|4691958256.2337 +FRANCE|1996|4720197405.4933 +FRANCE|1995|4702056754.2862 +FRANCE|1994|4701239088.1534 +FRANCE|1993|4712310290.5728 +FRANCE|1992|4706154746.0950 +GERMANY|1998|2767125834.8583 +GERMANY|1997|4703923545.6778 +GERMANY|1996|4690487560.3747 +GERMANY|1995|4686747664.0253 +GERMANY|1994|4660352911.1835 +GERMANY|1993|4692160055.6115 +GERMANY|1992|4691498075.8817 +INDIA|1998|2732579085.7320 +INDIA|1997|4678477185.9828 +INDIA|1996|4673866490.2673 +INDIA|1995|4674959076.8220 +INDIA|1994|4681827178.3883 +INDIA|1993|4643481746.8153 +INDIA|1992|4665882504.0580 +INDONESIA|1998|2745112789.9308 +INDONESIA|1997|4665596134.6372 +INDONESIA|1996|4669667677.0694 +INDONESIA|1995|4667166725.6425 +INDONESIA|1994|4662762228.6715 +INDONESIA|1993|4656778134.1717 +INDONESIA|1992|4670973296.6516 +IRAN|1998|2723216170.3955 +IRAN|1997|4609684248.8494 +IRAN|1996|4628753160.9335 +IRAN|1995|4627120996.2797 +IRAN|1994|4608487551.0284 +IRAN|1993|4620764336.3543 +IRAN|1992|4627902203.8205 +IRAQ|1998|2740906684.5899 +IRAQ|1997|4666298134.8121 +IRAQ|1996|4684322817.7602 +IRAQ|1995|4653983196.7067 +IRAQ|1994|4683335111.0202 +IRAQ|1993|4667160512.2664 +IRAQ|1992|4678315491.6055 +JAPAN|1998|2724504496.6036 +JAPAN|1997|4609764983.8460 +JAPAN|1996|4650986737.2104 +JAPAN|1995|4663812104.3333 +JAPAN|1994|4633301980.7018 +JAPAN|1993|4638916610.4736 +JAPAN|1992|4656081490.0799 +JORDAN|1998|2742880098.5775 +JORDAN|1997|4672752862.4339 +JORDAN|1996|4667670128.2117 +JORDAN|1995|4651272615.6814 +JORDAN|1994|4670362946.3448 +JORDAN|1993|4673339129.9122 +JORDAN|1992|4675813230.0285 +KENYA|1998|2717580811.0000 +KENYA|1997|4606427219.5743 +KENYA|1996|4628365122.1309 +KENYA|1995|4611166905.2203 +KENYA|1994|4616660205.3054 +KENYA|1993|4629037306.5682 +KENYA|1992|4635940424.6568 +MOROCCO|1998|2728973692.6920 +MOROCCO|1997|4677385007.6678 +MOROCCO|1996|4691138516.3593 +MOROCCO|1995|4672866595.7418 +MOROCCO|1994|4679363707.8996 +MOROCCO|1993|4657343605.4867 +MOROCCO|1992|4673293158.1836 +MOZAMBIQUE|1998|2746870372.9866 +MOZAMBIQUE|1997|4657797818.0251 +MOZAMBIQUE|1996|4680907763.2698 +MOZAMBIQUE|1995|4679365111.6934 +MOZAMBIQUE|1994|4650089862.9296 +MOZAMBIQUE|1993|4674781658.7232 +MOZAMBIQUE|1992|4703066893.3666 +PERU|1998|2701947354.7482 +PERU|1997|4623755865.6737 +PERU|1996|4653145387.6256 +PERU|1995|4649971644.3930 +PERU|1994|4640145803.9750 +PERU|1993|4630471111.0602 +PERU|1992|4629977353.5552 +ROMANIA|1998|2730185251.6769 +ROMANIA|1997|4662919818.6774 +ROMANIA|1996|4692623447.6039 +ROMANIA|1995|4683093538.1776 +ROMANIA|1994|4656908200.8979 +ROMANIA|1993|4673109064.6419 +ROMANIA|1992|4659501236.8597 +RUSSIA|1998|2738455915.5436 +RUSSIA|1997|4701455238.0605 +RUSSIA|1996|4694648504.0344 +RUSSIA|1995|4674020866.8064 +RUSSIA|1994|4687989534.5975 +RUSSIA|1993|4680591337.8529 +RUSSIA|1992|4684865871.5704 +SAUDI ARABIA|1998|2722192493.2115 +SAUDI ARABIA|1997|4646872112.0183 +SAUDI ARABIA|1996|4679097125.4999 +SAUDI ARABIA|1995|4659365308.2421 +SAUDI ARABIA|1994|4668096847.3099 +SAUDI ARABIA|1993|4647885741.9225 +SAUDI ARABIA|1992|4665645732.0885 +UNITED KINGDOM|1998|2757252921.4935 +UNITED KINGDOM|1997|4687915843.3827 +UNITED KINGDOM|1996|4725596237.9521 +UNITED KINGDOM|1995|4692146767.0496 +UNITED KINGDOM|1994|4717398081.8118 +UNITED KINGDOM|1993|4694183885.2941 +UNITED KINGDOM|1992|4722609721.7765 +UNITED STATES|1998|2744344335.0383 +UNITED STATES|1997|4652698592.5866 +UNITED STATES|1996|4670553955.7057 +UNITED STATES|1995|4659218769.7598 +UNITED STATES|1994|4671044724.0807 +UNITED STATES|1993|4680519402.4766 +UNITED STATES|1992|4707714157.3208 +VIETNAM|1998|2741387136.2468 +VIETNAM|1997|4661928954.8541 +VIETNAM|1996|4690535970.8003 +VIETNAM|1995|4692078285.1287 +VIETNAM|1994|4705541885.2493 +VIETNAM|1993|4708733491.5609 +VIETNAM|1992|4681498238.7580 diff --git a/extension/tpch/dbgen/answers/sf100/q10.csv b/extension/tpch/dbgen/answers/sf100/q10.csv new file mode 100644 index 000000000000..ed18c8ed0cfb --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q10.csv @@ -0,0 +1,21 @@ +c_custkey|c_name|revenue|c_acctbal|n_name|c_address|c_phone|c_comment +7450894|Customer#007450894|936768.8469|927.18|ARGENTINA|Kub3yOhSWLuc MTLe8owZ spwzrOvVlX8WQJwuE|11-833-256-7879|the furiously unusual foxes! platelets nag boldly above the quickly bold accounts. furiously +9739771|Customer#009739771|842966.5285|1286.48|JORDAN|zoTOSQ1TrpuUDmCk9f|23-281-450-4794|boost quickly. never dogged instructions boost quickly ironic requests. pinto beans sleep carefully across +4571035|Customer#004571035|838705.6168|6704.13|UNITED KINGDOM|Z,inL0muZQK8AiEm3qme9CBjuYIO0JTfH|33-138-285-3770|ecial theodolites wake slyly across the never silent ideas. final foxes around the carefully regular +637855|Customer#000637855|812034.3778|2674.86|MOZAMBIQUE|BV7zGwFIOkc|26-852-120-2850|ges. express, special dolphins cajole around the slyly regular accounts. fu +10781974|Customer#010781974|801735.5176|5079.77|ROMANIA|pwYB0N97ySprr4vi5UZ382q0U8WCPp|29-651-722-6239|sits haggle evenly. express packages sl +11361613|Customer#011361613|800558.4337|4644.71|INDONESIA|I4gKJjA4BV6syYz|19-344-539-9187|l, special dependencies. carefully regular instructions use about the carefully bold accounts. pending accou +1259743|Customer#001259743|793274.7846|2592.74|ETHIOPIA|35Mr0In QWvDgyLt8UYPECuBEllYNShLI|15-733-636-6732|y express requests cajole furiously alongside of the carefull +5154136|Customer#005154136|787191.1959|1028.97|MOROCCO|30OHoO9k5s,HrKS3a6k9fLVsXa|25-841-379-9394|affix carefully blithely unusual requests. unusual ideas b +14986552|Customer#014986552|781645.8638|2678.94|ARGENTINA|zFVtpT4Zo,|11-671-762-3613|s. packages haggle carefully at the ironic braids. blithely regular pinto beans cajole slyly. +2905816|Customer#002905816|778729.4414|5085.53|UNITED STATES|QOfcBYPRbq|34-217-584-5820|s under the regular sheaves sleep blithely final platelets. dolphins sleep across the stealthily special ideas. furi +6184141|Customer#006184141|772721.0973|5901.88|BRAZIL|3CxIFtsmlpESaUQzurlTV|12-563-743-4211|eodolites according to the carefully final accounts use carefully slyly ironic instructions. b +7852024|Customer#007852024|769688.6616|1197.57|INDIA|ZrF1h1tpKbH9j5cVtnD3NMJFtE1my05S86WiWU09|18-141-580-3886| blithely ironic notornis cajole according to the quickly even requests! quickly re +7183231|Customer#007183231|768455.8796|-683.01|INDIA|Ds83MjPovIdahJd|18-270-127-8463|ial pinto beans among the furiously special deposits haggle quickly after the ironic, final deposits. regular theodo +1627651|Customer#001627651|768300.3006|3059.82|MOROCCO|PBXh8ZQR2xTOpgQo 7FBfI EZGZ BnD|25-732-202-4862|ts are alongside of the requests. carefully regular accounts above the ironic deposits integrate slyly pendi +13624771|Customer#013624771|767856.1562|-168.68|IRAN| uekVASYAlR1fqAFoJwcgndQAF|20-919-886-5399|unts wake furiously above the carefully special instruction +13896424|Customer#013896424|760957.6214|3798.91|INDONESIA|PzqffgfQ7p|19-494-837-4503| the quickly furious deposits. packages after the furiously unusual instructions hang slyly iron +4926817|Customer#004926817|758756.8533|5462.22|RUSSIA|4RbwBrzz6eHCI|32-610-751-1595|against the furiously regular ideas. carefully e +319150|Customer#000319150|757235.8949|3257.68|IRAN|GZg5Tg1XIJUOKHxb6C,I4h7PrwFiwitvn|20-837-276-7259|deposits. regular accounts nag. slyly ironic idea +5894188|Customer#005894188|756482.0641|3062.00|BRAZIL|,b 3YYdbkOsSZdSEekTT,Dk8dljn 4aUkzEE9M3|12-372-345-6045|slyly regular pinto beans integrate s +3387028|Customer#003387028|755937.5757|3726.64|ETHIOPIA|IWj4CTUBet5tE|15-880-219-8399|ests sleep furiously among the furiously regular p diff --git a/extension/tpch/dbgen/answers/sf100/q11.csv b/extension/tpch/dbgen/answers/sf100/q11.csv new file mode 100644 index 000000000000..fa454d522ecf --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q11.csv @@ -0,0 +1 @@ +ps_partkey|value diff --git a/extension/tpch/dbgen/answers/sf100/q12.csv b/extension/tpch/dbgen/answers/sf100/q12.csv new file mode 100644 index 000000000000..b6188e90c928 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q12.csv @@ -0,0 +1,3 @@ +l_shipmode|high_line_count|low_line_count +MAIL|623115|934713 +SHIP|622979|934534 diff --git a/extension/tpch/dbgen/answers/sf100/q13.csv b/extension/tpch/dbgen/answers/sf100/q13.csv new file mode 100644 index 000000000000..bbab018c3136 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q13.csv @@ -0,0 +1,46 @@ +c_count|custdist +0|5000179 +10|677129 +9|663272 +11|632721 +8|590190 +12|564376 +13|493876 +19|476012 +18|468917 +20|466214 +7|463524 +17|450162 +14|444360 +21|435413 +16|430482 +15|424816 +22|388554 +23|331104 +6|317746 +24|270153 +25|210444 +5|186005 +26|157228 +27|112791 +4|89724 +28|77613 +29|51770 +3|34604 +30|32654 +31|19981 +32|11764 +2|9920 +33|6711 +34|3606 +35|2015 +1|1858 +36|1063 +37|563 +38|244 +39|133 +40|62 +41|23 +42|18 +43|5 +44|1 diff --git a/extension/tpch/dbgen/answers/sf100/q14.csv b/extension/tpch/dbgen/answers/sf100/q14.csv new file mode 100644 index 000000000000..56d9167cb0af --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q14.csv @@ -0,0 +1,2 @@ +promo_revenue +16.640357433254103 diff --git a/extension/tpch/dbgen/answers/sf100/q15.csv b/extension/tpch/dbgen/answers/sf100/q15.csv new file mode 100644 index 000000000000..a0f91ca1f6e5 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q15.csv @@ -0,0 +1,2 @@ +s_suppkey|s_name|s_address|s_phone|total_revenue +8831|Supplier#000008831|Iwi3KgIdN84qDIVccoeA,NG|17-307-245-8592|2385908.0563 diff --git a/extension/tpch/dbgen/answers/sf100/q16.csv b/extension/tpch/dbgen/answers/sf100/q16.csv new file mode 100644 index 000000000000..b24972324b66 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q16.csv @@ -0,0 +1,27841 @@ +p_brand|p_type|p_size|supplier_cnt +Brand#14|SMALL BRUSHED BRASS|45|596 +Brand#34|ECONOMY BURNISHED STEEL|23|592 +Brand#44|PROMO POLISHED NICKEL|49|592 +Brand#54|LARGE BURNISHED STEEL|36|584 +Brand#14|ECONOMY BRUSHED COPPER|19|580 +Brand#13|STANDARD BRUSHED BRASS|45|579 +Brand#21|PROMO POLISHED TIN|36|579 +Brand#12|STANDARD BRUSHED TIN|9|576 +Brand#32|STANDARD ANODIZED COPPER|14|576 +Brand#32|STANDARD BURNISHED STEEL|36|576 +Brand#54|STANDARD BRUSHED TIN|49|576 +Brand#25|ECONOMY POLISHED BRASS|36|575 +Brand#54|LARGE PLATED STEEL|9|574 +Brand#12|MEDIUM BURNISHED STEEL|36|572 +Brand#22|PROMO POLISHED TIN|23|572 +Brand#25|LARGE ANODIZED NICKEL|3|572 +Brand#51|SMALL PLATED STEEL|36|572 +Brand#25|STANDARD PLATED NICKEL|19|571 +Brand#15|SMALL ANODIZED STEEL|36|570 +Brand#12|ECONOMY BURNISHED TIN|14|568 +Brand#22|PROMO POLISHED BRASS|45|566 +Brand#53|ECONOMY PLATED NICKEL|23|566 +Brand#54|PROMO PLATED STEEL|45|566 +Brand#11|LARGE BRUSHED TIN|14|565 +Brand#14|ECONOMY PLATED STEEL|14|564 +Brand#15|STANDARD PLATED BRASS|19|564 +Brand#31|STANDARD BURNISHED COPPER|23|564 +Brand#35|LARGE PLATED NICKEL|9|564 +Brand#41|SMALL PLATED COPPER|3|564 +Brand#11|LARGE ANODIZED STEEL|9|563 +Brand#23|ECONOMY PLATED NICKEL|3|563 +Brand#54|PROMO BRUSHED COPPER|36|563 +Brand#14|LARGE ANODIZED BRASS|23|560 +Brand#23|ECONOMY BURNISHED TIN|9|560 +Brand#33|ECONOMY BURNISHED TIN|45|560 +Brand#41|PROMO BRUSHED STEEL|36|560 +Brand#43|STANDARD BURNISHED TIN|23|560 +Brand#51|SMALL POLISHED BRASS|49|560 +Brand#55|SMALL BURNISHED BRASS|9|560 +Brand#24|SMALL ANODIZED NICKEL|3|559 +Brand#43|LARGE ANODIZED STEEL|23|559 +Brand#43|LARGE PLATED COPPER|49|559 +Brand#11|LARGE ANODIZED COPPER|23|556 +Brand#11|SMALL BRUSHED STEEL|45|556 +Brand#12|ECONOMY ANODIZED STEEL|19|556 +Brand#12|LARGE POLISHED NICKEL|9|556 +Brand#12|MEDIUM BURNISHED NICKEL|49|556 +Brand#33|STANDARD BRUSHED TIN|14|556 +Brand#34|MEDIUM BURNISHED COPPER|3|556 +Brand#54|LARGE BRUSHED TIN|23|556 +Brand#55|ECONOMY ANODIZED STEEL|14|556 +Brand#13|PROMO PLATED COPPER|19|555 +Brand#31|PROMO ANODIZED TIN|3|555 +Brand#51|ECONOMY PLATED NICKEL|14|553 +Brand#14|ECONOMY BRUSHED COPPER|14|552 +Brand#22|ECONOMY BURNISHED COPPER|49|552 +Brand#22|SMALL POLISHED NICKEL|36|552 +Brand#34|ECONOMY BURNISHED COPPER|9|552 +Brand#34|SMALL PLATED NICKEL|3|552 +Brand#51|MEDIUM BRUSHED STEEL|3|552 +Brand#53|LARGE BURNISHED COPPER|23|552 +Brand#53|SMALL BRUSHED NICKEL|3|552 +Brand#13|PROMO BRUSHED BRASS|45|551 +Brand#41|ECONOMY PLATED BRASS|49|551 +Brand#23|MEDIUM PLATED TIN|49|550 +Brand#41|PROMO BRUSHED COPPER|9|550 +Brand#11|STANDARD BURNISHED BRASS|23|548 +Brand#11|STANDARD PLATED NICKEL|23|548 +Brand#12|LARGE PLATED BRASS|9|548 +Brand#13|LARGE BRUSHED BRASS|9|548 +Brand#13|MEDIUM ANODIZED NICKEL|36|548 +Brand#23|SMALL ANODIZED STEEL|3|548 +Brand#23|SMALL POLISHED BRASS|36|548 +Brand#25|SMALL BRUSHED TIN|9|548 +Brand#31|PROMO POLISHED TIN|49|548 +Brand#31|SMALL BRUSHED TIN|45|548 +Brand#32|PROMO BRUSHED NICKEL|19|548 +Brand#33|PROMO PLATED NICKEL|45|548 +Brand#33|SMALL BRUSHED TIN|14|548 +Brand#34|MEDIUM BRUSHED COPPER|9|548 +Brand#41|SMALL BURNISHED COPPER|9|548 +Brand#44|MEDIUM BRUSHED BRASS|45|548 +Brand#51|ECONOMY POLISHED STEEL|49|548 +Brand#52|SMALL BRUSHED COPPER|14|548 +Brand#52|STANDARD PLATED NICKEL|9|548 +Brand#55|SMALL BRUSHED BRASS|49|548 +Brand#12|LARGE PLATED TIN|49|547 +Brand#13|MEDIUM PLATED BRASS|9|547 +Brand#22|MEDIUM ANODIZED NICKEL|3|547 +Brand#35|STANDARD PLATED NICKEL|14|547 +Brand#44|PROMO BRUSHED NICKEL|9|547 +Brand#34|PROMO BRUSHED TIN|45|546 +Brand#43|PROMO PLATED COPPER|45|546 +Brand#53|ECONOMY POLISHED STEEL|45|546 +Brand#11|LARGE POLISHED BRASS|19|544 +Brand#12|STANDARD PLATED STEEL|49|544 +Brand#13|STANDARD POLISHED STEEL|23|544 +Brand#22|MEDIUM BRUSHED NICKEL|36|544 +Brand#25|LARGE BRUSHED BRASS|9|544 +Brand#31|ECONOMY PLATED COPPER|14|544 +Brand#31|STANDARD BRUSHED BRASS|49|544 +Brand#32|LARGE BURNISHED NICKEL|14|544 +Brand#32|SMALL BRUSHED NICKEL|3|544 +Brand#34|LARGE ANODIZED COPPER|49|544 +Brand#35|SMALL ANODIZED BRASS|14|544 +Brand#51|PROMO POLISHED NICKEL|3|544 +Brand#52|PROMO PLATED COPPER|23|544 +Brand#54|ECONOMY PLATED COPPER|14|544 +Brand#55|ECONOMY BRUSHED STEEL|23|544 +Brand#14|PROMO PLATED STEEL|36|543 +Brand#22|SMALL POLISHED BRASS|19|543 +Brand#32|STANDARD BRUSHED TIN|36|543 +Brand#41|PROMO ANODIZED BRASS|19|543 +Brand#43|PROMO POLISHED COPPER|49|543 +Brand#44|STANDARD POLISHED TIN|14|543 +Brand#11|ECONOMY BURNISHED TIN|19|540 +Brand#12|SMALL BURNISHED BRASS|45|540 +Brand#13|STANDARD BRUSHED NICKEL|49|540 +Brand#14|PROMO BURNISHED BRASS|36|540 +Brand#15|SMALL BURNISHED COPPER|49|540 +Brand#15|STANDARD ANODIZED COPPER|19|540 +Brand#22|MEDIUM BURNISHED NICKEL|3|540 +Brand#22|SMALL BRUSHED STEEL|14|540 +Brand#23|ECONOMY ANODIZED COPPER|36|540 +Brand#23|STANDARD PLATED COPPER|36|540 +Brand#25|STANDARD PLATED COPPER|45|540 +Brand#31|LARGE BURNISHED STEEL|14|540 +Brand#31|PROMO PLATED NICKEL|23|540 +Brand#32|SMALL BRUSHED NICKEL|19|540 +Brand#33|ECONOMY POLISHED STEEL|36|540 +Brand#35|LARGE PLATED STEEL|49|540 +Brand#42|LARGE BRUSHED NICKEL|9|540 +Brand#43|STANDARD BURNISHED BRASS|3|540 +Brand#54|STANDARD BRUSHED COPPER|19|540 +Brand#12|MEDIUM ANODIZED NICKEL|49|539 +Brand#34|LARGE ANODIZED COPPER|45|539 +Brand#42|SMALL ANODIZED BRASS|3|539 +Brand#43|PROMO PLATED BRASS|9|539 +Brand#44|PROMO BRUSHED COPPER|45|539 +Brand#52|ECONOMY POLISHED NICKEL|19|539 +Brand#22|ECONOMY POLISHED BRASS|45|538 +Brand#22|LARGE PLATED COPPER|45|538 +Brand#23|PROMO POLISHED STEEL|23|538 +Brand#33|ECONOMY ANODIZED NICKEL|23|538 +Brand#12|SMALL BRUSHED BRASS|45|536 +Brand#13|LARGE POLISHED TIN|19|536 +Brand#13|PROMO BRUSHED COPPER|14|536 +Brand#13|PROMO BRUSHED NICKEL|14|536 +Brand#14|LARGE PLATED BRASS|36|536 +Brand#14|PROMO ANODIZED TIN|3|536 +Brand#23|MEDIUM ANODIZED BRASS|9|536 +Brand#25|ECONOMY ANODIZED TIN|49|536 +Brand#25|LARGE ANODIZED COPPER|14|536 +Brand#25|MEDIUM BRUSHED NICKEL|45|536 +Brand#25|MEDIUM BURNISHED STEEL|9|536 +Brand#25|MEDIUM PLATED NICKEL|9|536 +Brand#25|PROMO BURNISHED COPPER|45|536 +Brand#31|PROMO POLISHED NICKEL|9|536 +Brand#32|SMALL BRUSHED COPPER|49|536 +Brand#32|SMALL BURNISHED BRASS|49|536 +Brand#34|LARGE POLISHED BRASS|45|536 +Brand#34|SMALL BRUSHED NICKEL|14|536 +Brand#35|ECONOMY ANODIZED BRASS|3|536 +Brand#42|SMALL PLATED NICKEL|36|536 +Brand#42|STANDARD BURNISHED COPPER|36|536 +Brand#44|STANDARD PLATED STEEL|45|536 +Brand#51|STANDARD POLISHED TIN|9|536 +Brand#53|ECONOMY ANODIZED COPPER|45|536 +Brand#54|PROMO ANODIZED NICKEL|9|536 +Brand#54|SMALL ANODIZED BRASS|19|536 +Brand#54|STANDARD PLATED COPPER|36|536 +Brand#55|MEDIUM BRUSHED STEEL|36|536 +Brand#55|PROMO ANODIZED NICKEL|23|536 +Brand#55|PROMO BRUSHED STEEL|9|536 +Brand#55|STANDARD BURNISHED TIN|49|536 +Brand#23|MEDIUM BURNISHED STEEL|45|535 +Brand#24|PROMO PLATED NICKEL|9|535 +Brand#35|MEDIUM BRUSHED NICKEL|19|535 +Brand#35|SMALL ANODIZED BRASS|45|535 +Brand#42|SMALL PLATED STEEL|45|535 +Brand#52|PROMO POLISHED STEEL|3|535 +Brand#54|PROMO BRUSHED NICKEL|45|535 +Brand#13|ECONOMY BURNISHED TIN|19|534 +Brand#22|SMALL BURNISHED COPPER|49|534 +Brand#32|LARGE PLATED BRASS|9|534 +Brand#11|STANDARD PLATED TIN|19|532 +Brand#12|SMALL BRUSHED BRASS|3|532 +Brand#12|SMALL POLISHED COPPER|45|532 +Brand#13|STANDARD BURNISHED COPPER|36|532 +Brand#13|STANDARD PLATED TIN|36|532 +Brand#14|ECONOMY PLATED COPPER|19|532 +Brand#14|LARGE ANODIZED NICKEL|9|532 +Brand#14|MEDIUM BRUSHED NICKEL|19|532 +Brand#14|STANDARD POLISHED BRASS|3|532 +Brand#15|SMALL PLATED NICKEL|36|532 +Brand#21|ECONOMY BURNISHED NICKEL|9|532 +Brand#21|STANDARD BURNISHED STEEL|23|532 +Brand#22|LARGE POLISHED BRASS|45|532 +Brand#22|LARGE POLISHED NICKEL|9|532 +Brand#24|ECONOMY ANODIZED STEEL|36|532 +Brand#24|SMALL BURNISHED NICKEL|36|532 +Brand#31|STANDARD ANODIZED NICKEL|19|532 +Brand#33|STANDARD BRUSHED TIN|36|532 +Brand#35|PROMO PLATED NICKEL|19|532 +Brand#35|SMALL PLATED STEEL|3|532 +Brand#35|SMALL PLATED STEEL|19|532 +Brand#42|LARGE ANODIZED COPPER|49|532 +Brand#42|MEDIUM ANODIZED NICKEL|49|532 +Brand#42|SMALL PLATED NICKEL|14|532 +Brand#42|STANDARD POLISHED NICKEL|9|532 +Brand#43|PROMO PLATED COPPER|9|532 +Brand#43|STANDARD ANODIZED STEEL|3|532 +Brand#44|MEDIUM PLATED TIN|23|532 +Brand#51|PROMO BURNISHED COPPER|45|532 +Brand#52|ECONOMY BURNISHED TIN|36|532 +Brand#52|MEDIUM BURNISHED COPPER|3|532 +Brand#52|MEDIUM PLATED COPPER|9|532 +Brand#53|LARGE POLISHED TIN|9|532 +Brand#53|PROMO ANODIZED COPPER|14|532 +Brand#54|ECONOMY BRUSHED COPPER|49|532 +Brand#54|LARGE BRUSHED TIN|36|532 +Brand#55|ECONOMY ANODIZED STEEL|23|532 +Brand#11|STANDARD BURNISHED TIN|19|531 +Brand#14|PROMO POLISHED BRASS|3|531 +Brand#21|LARGE BURNISHED COPPER|23|531 +Brand#24|STANDARD ANODIZED BRASS|9|531 +Brand#32|STANDARD POLISHED BRASS|45|531 +Brand#33|PROMO POLISHED STEEL|19|531 +Brand#34|STANDARD BURNISHED NICKEL|19|531 +Brand#35|LARGE BRUSHED BRASS|23|531 +Brand#42|MEDIUM PLATED STEEL|3|531 +Brand#44|PROMO BRUSHED COPPER|23|531 +Brand#44|SMALL ANODIZED BRASS|49|531 +Brand#44|STANDARD BRUSHED TIN|36|531 +Brand#53|STANDARD PLATED TIN|9|531 +Brand#55|LARGE BRUSHED NICKEL|3|531 +Brand#55|MEDIUM BRUSHED TIN|19|531 +Brand#14|SMALL BRUSHED NICKEL|9|530 +Brand#15|STANDARD ANODIZED STEEL|19|530 +Brand#42|STANDARD POLISHED NICKEL|36|530 +Brand#51|ECONOMY ANODIZED STEEL|9|530 +Brand#11|SMALL BRUSHED TIN|23|528 +Brand#11|STANDARD POLISHED COPPER|14|528 +Brand#12|ECONOMY BURNISHED NICKEL|19|528 +Brand#12|MEDIUM BURNISHED STEEL|45|528 +Brand#12|SMALL ANODIZED STEEL|36|528 +Brand#12|SMALL POLISHED COPPER|49|528 +Brand#13|MEDIUM PLATED TIN|23|528 +Brand#13|PROMO ANODIZED NICKEL|45|528 +Brand#13|SMALL BURNISHED TIN|49|528 +Brand#14|STANDARD BRUSHED TIN|36|528 +Brand#15|ECONOMY ANODIZED BRASS|45|528 +Brand#15|LARGE BURNISHED COPPER|3|528 +Brand#15|MEDIUM PLATED BRASS|19|528 +Brand#15|PROMO PLATED STEEL|9|528 +Brand#21|LARGE ANODIZED NICKEL|23|528 +Brand#21|LARGE BRUSHED NICKEL|3|528 +Brand#21|PROMO POLISHED BRASS|19|528 +Brand#21|SMALL BRUSHED STEEL|14|528 +Brand#21|SMALL POLISHED NICKEL|23|528 +Brand#21|STANDARD PLATED BRASS|9|528 +Brand#23|SMALL ANODIZED STEEL|9|528 +Brand#24|MEDIUM BURNISHED STEEL|23|528 +Brand#25|ECONOMY POLISHED STEEL|14|528 +Brand#31|ECONOMY BURNISHED NICKEL|23|528 +Brand#31|PROMO BRUSHED TIN|9|528 +Brand#31|PROMO BRUSHED TIN|19|528 +Brand#33|LARGE ANODIZED STEEL|45|528 +Brand#33|MEDIUM PLATED STEEL|45|528 +Brand#33|PROMO POLISHED NICKEL|49|528 +Brand#34|STANDARD POLISHED BRASS|14|528 +Brand#35|ECONOMY ANODIZED COPPER|9|528 +Brand#42|ECONOMY POLISHED NICKEL|3|528 +Brand#42|PROMO ANODIZED NICKEL|45|528 +Brand#42|SMALL PLATED TIN|36|528 +Brand#42|SMALL POLISHED NICKEL|49|528 +Brand#43|ECONOMY BURNISHED BRASS|49|528 +Brand#44|ECONOMY BURNISHED TIN|9|528 +Brand#51|LARGE ANODIZED NICKEL|14|528 +Brand#51|LARGE ANODIZED TIN|36|528 +Brand#53|SMALL ANODIZED STEEL|19|528 +Brand#53|SMALL BURNISHED STEEL|9|528 +Brand#53|STANDARD POLISHED NICKEL|49|528 +Brand#54|STANDARD PLATED COPPER|14|528 +Brand#54|STANDARD POLISHED STEEL|49|528 +Brand#12|STANDARD POLISHED BRASS|19|527 +Brand#13|LARGE PLATED STEEL|3|527 +Brand#21|MEDIUM PLATED NICKEL|23|527 +Brand#21|PROMO POLISHED TIN|9|527 +Brand#22|ECONOMY POLISHED STEEL|23|527 +Brand#24|MEDIUM PLATED STEEL|14|527 +Brand#24|PROMO BURNISHED COPPER|23|527 +Brand#25|SMALL BRUSHED STEEL|3|527 +Brand#33|MEDIUM PLATED COPPER|49|527 +Brand#35|ECONOMY POLISHED NICKEL|36|527 +Brand#51|ECONOMY ANODIZED NICKEL|36|527 +Brand#51|MEDIUM PLATED NICKEL|45|527 +Brand#51|STANDARD PLATED NICKEL|23|527 +Brand#52|STANDARD POLISHED STEEL|36|527 +Brand#55|ECONOMY POLISHED BRASS|9|527 +Brand#32|ECONOMY BRUSHED NICKEL|3|526 +Brand#34|STANDARD ANODIZED TIN|9|526 +Brand#35|ECONOMY BURNISHED TIN|19|526 +Brand#41|STANDARD BRUSHED BRASS|49|526 +Brand#44|LARGE PLATED BRASS|19|526 +Brand#53|LARGE BRUSHED STEEL|19|526 +Brand#13|MEDIUM BURNISHED COPPER|3|524 +Brand#14|ECONOMY BURNISHED NICKEL|49|524 +Brand#14|LARGE BRUSHED COPPER|9|524 +Brand#14|LARGE BURNISHED COPPER|23|524 +Brand#14|PROMO BURNISHED NICKEL|45|524 +Brand#15|STANDARD BRUSHED NICKEL|19|524 +Brand#15|STANDARD BURNISHED COPPER|14|524 +Brand#21|LARGE POLISHED TIN|19|524 +Brand#21|MEDIUM PLATED NICKEL|49|524 +Brand#21|PROMO POLISHED STEEL|9|524 +Brand#21|STANDARD POLISHED TIN|23|524 +Brand#22|LARGE BRUSHED NICKEL|36|524 +Brand#22|LARGE POLISHED TIN|3|524 +Brand#23|PROMO BRUSHED BRASS|14|524 +Brand#23|PROMO POLISHED BRASS|45|524 +Brand#23|SMALL ANODIZED BRASS|3|524 +Brand#23|STANDARD PLATED BRASS|19|524 +Brand#24|LARGE PLATED NICKEL|23|524 +Brand#24|MEDIUM PLATED TIN|19|524 +Brand#31|LARGE ANODIZED COPPER|45|524 +Brand#32|LARGE ANODIZED TIN|49|524 +Brand#32|PROMO POLISHED COPPER|19|524 +Brand#32|PROMO POLISHED TIN|19|524 +Brand#32|SMALL ANODIZED COPPER|23|524 +Brand#33|LARGE POLISHED COPPER|49|524 +Brand#33|SMALL BURNISHED STEEL|23|524 +Brand#34|MEDIUM BRUSHED COPPER|36|524 +Brand#35|MEDIUM ANODIZED NICKEL|49|524 +Brand#35|PROMO BURNISHED TIN|14|524 +Brand#35|SMALL BRUSHED BRASS|23|524 +Brand#35|SMALL BRUSHED COPPER|9|524 +Brand#41|LARGE ANODIZED BRASS|14|524 +Brand#41|MEDIUM BRUSHED COPPER|9|524 +Brand#42|ECONOMY BRUSHED NICKEL|19|524 +Brand#42|PROMO POLISHED COPPER|19|524 +Brand#43|ECONOMY BURNISHED COPPER|36|524 +Brand#43|STANDARD BURNISHED TIN|36|524 +Brand#44|MEDIUM PLATED COPPER|36|524 +Brand#44|SMALL POLISHED NICKEL|14|524 +Brand#52|LARGE ANODIZED STEEL|23|524 +Brand#52|MEDIUM BRUSHED COPPER|19|524 +Brand#52|PROMO BRUSHED STEEL|45|524 +Brand#52|SMALL BURNISHED STEEL|19|524 +Brand#53|MEDIUM BURNISHED TIN|9|524 +Brand#53|SMALL BRUSHED TIN|19|524 +Brand#54|ECONOMY BURNISHED STEEL|23|524 +Brand#54|ECONOMY PLATED BRASS|19|524 +Brand#55|MEDIUM ANODIZED COPPER|3|524 +Brand#55|PROMO BRUSHED STEEL|19|524 +Brand#55|PROMO POLISHED NICKEL|19|524 +Brand#55|SMALL POLISHED BRASS|14|524 +Brand#55|STANDARD BURNISHED COPPER|45|524 +Brand#12|ECONOMY BRUSHED BRASS|14|523 +Brand#12|ECONOMY BURNISHED NICKEL|3|523 +Brand#12|PROMO PLATED STEEL|19|523 +Brand#13|MEDIUM BRUSHED TIN|49|523 +Brand#13|SMALL POLISHED NICKEL|19|523 +Brand#15|PROMO ANODIZED TIN|23|523 +Brand#15|SMALL POLISHED NICKEL|45|523 +Brand#22|MEDIUM BURNISHED COPPER|9|523 +Brand#22|SMALL BURNISHED STEEL|45|523 +Brand#23|STANDARD BURNISHED BRASS|3|523 +Brand#23|STANDARD POLISHED NICKEL|9|523 +Brand#24|MEDIUM PLATED BRASS|3|523 +Brand#25|ECONOMY ANODIZED TIN|3|523 +Brand#25|LARGE PLATED COPPER|9|523 +Brand#25|SMALL ANODIZED TIN|36|523 +Brand#31|STANDARD POLISHED STEEL|49|523 +Brand#43|SMALL POLISHED COPPER|3|523 +Brand#44|STANDARD PLATED TIN|9|523 +Brand#51|SMALL PLATED BRASS|45|523 +Brand#11|ECONOMY ANODIZED NICKEL|49|520 +Brand#11|LARGE POLISHED COPPER|14|520 +Brand#11|PROMO ANODIZED COPPER|19|520 +Brand#12|ECONOMY BRUSHED TIN|45|520 +Brand#12|LARGE PLATED STEEL|36|520 +Brand#12|MEDIUM BURNISHED BRASS|45|520 +Brand#12|MEDIUM PLATED TIN|45|520 +Brand#12|PROMO ANODIZED TIN|3|520 +Brand#12|SMALL PLATED BRASS|49|520 +Brand#13|ECONOMY PLATED BRASS|3|520 +Brand#14|PROMO BRUSHED NICKEL|19|520 +Brand#14|SMALL BRUSHED TIN|9|520 +Brand#15|ECONOMY BRUSHED COPPER|14|520 +Brand#15|SMALL ANODIZED TIN|49|520 +Brand#15|SMALL BURNISHED COPPER|9|520 +Brand#21|ECONOMY POLISHED BRASS|45|520 +Brand#21|LARGE PLATED TIN|14|520 +Brand#22|SMALL POLISHED BRASS|49|520 +Brand#23|LARGE PLATED STEEL|3|520 +Brand#23|STANDARD PLATED NICKEL|23|520 +Brand#24|ECONOMY ANODIZED NICKEL|14|520 +Brand#25|STANDARD BRUSHED BRASS|36|520 +Brand#25|STANDARD BURNISHED BRASS|23|520 +Brand#31|ECONOMY POLISHED TIN|23|520 +Brand#31|SMALL BURNISHED COPPER|19|520 +Brand#31|STANDARD ANODIZED BRASS|49|520 +Brand#32|LARGE BURNISHED TIN|49|520 +Brand#32|SMALL BRUSHED COPPER|23|520 +Brand#33|SMALL ANODIZED NICKEL|14|520 +Brand#33|STANDARD ANODIZED BRASS|19|520 +Brand#34|LARGE ANODIZED COPPER|9|520 +Brand#34|MEDIUM PLATED BRASS|36|520 +Brand#35|LARGE ANODIZED TIN|19|520 +Brand#35|LARGE BURNISHED NICKEL|3|520 +Brand#35|PROMO BRUSHED COPPER|36|520 +Brand#41|LARGE PLATED COPPER|19|520 +Brand#42|ECONOMY BURNISHED STEEL|49|520 +Brand#42|MEDIUM BURNISHED NICKEL|3|520 +Brand#42|MEDIUM BURNISHED NICKEL|23|520 +Brand#43|ECONOMY ANODIZED NICKEL|9|520 +Brand#43|ECONOMY BRUSHED STEEL|3|520 +Brand#43|LARGE BRUSHED NICKEL|14|520 +Brand#43|LARGE POLISHED STEEL|9|520 +Brand#43|PROMO BURNISHED NICKEL|49|520 +Brand#44|ECONOMY BRUSHED NICKEL|19|520 +Brand#44|LARGE BURNISHED BRASS|45|520 +Brand#44|SMALL POLISHED TIN|19|520 +Brand#51|LARGE BRUSHED STEEL|3|520 +Brand#51|SMALL BURNISHED BRASS|49|520 +Brand#52|ECONOMY BRUSHED NICKEL|3|520 +Brand#52|ECONOMY BURNISHED BRASS|3|520 +Brand#52|LARGE PLATED TIN|19|520 +Brand#52|STANDARD BRUSHED NICKEL|36|520 +Brand#52|STANDARD BURNISHED NICKEL|9|520 +Brand#53|STANDARD BRUSHED COPPER|3|520 +Brand#54|ECONOMY POLISHED COPPER|19|520 +Brand#11|ECONOMY POLISHED COPPER|23|519 +Brand#11|STANDARD BURNISHED STEEL|23|519 +Brand#12|PROMO POLISHED STEEL|23|519 +Brand#12|SMALL ANODIZED NICKEL|9|519 +Brand#12|STANDARD BURNISHED COPPER|23|519 +Brand#12|STANDARD PLATED STEEL|9|519 +Brand#14|LARGE ANODIZED COPPER|23|519 +Brand#14|PROMO BRUSHED STEEL|49|519 +Brand#14|STANDARD BRUSHED BRASS|36|519 +Brand#14|STANDARD BRUSHED STEEL|23|519 +Brand#14|STANDARD BRUSHED TIN|19|519 +Brand#21|ECONOMY ANODIZED BRASS|9|519 +Brand#22|PROMO BURNISHED COPPER|45|519 +Brand#22|SMALL PLATED TIN|14|519 +Brand#23|SMALL BRUSHED STEEL|23|519 +Brand#24|PROMO BURNISHED NICKEL|3|519 +Brand#24|SMALL BURNISHED BRASS|3|519 +Brand#24|SMALL PLATED TIN|14|519 +Brand#24|STANDARD POLISHED NICKEL|3|519 +Brand#32|LARGE BURNISHED BRASS|23|519 +Brand#32|PROMO PLATED NICKEL|19|519 +Brand#33|SMALL POLISHED TIN|19|519 +Brand#34|ECONOMY PLATED BRASS|14|519 +Brand#34|PROMO PLATED NICKEL|19|519 +Brand#41|ECONOMY BRUSHED COPPER|9|519 +Brand#41|SMALL POLISHED COPPER|36|519 +Brand#43|SMALL ANODIZED NICKEL|23|519 +Brand#44|SMALL PLATED COPPER|45|519 +Brand#52|ECONOMY PLATED TIN|19|519 +Brand#52|SMALL BURNISHED NICKEL|23|519 +Brand#53|LARGE BRUSHED NICKEL|45|519 +Brand#22|SMALL BRUSHED COPPER|36|518 +Brand#23|LARGE POLISHED BRASS|23|518 +Brand#24|STANDARD PLATED BRASS|3|518 +Brand#31|PROMO BRUSHED STEEL|49|518 +Brand#34|ECONOMY ANODIZED TIN|23|518 +Brand#52|SMALL BURNISHED BRASS|49|518 +Brand#11|ECONOMY PLATED STEEL|49|516 +Brand#11|LARGE ANODIZED TIN|14|516 +Brand#11|LARGE BURNISHED BRASS|19|516 +Brand#12|ECONOMY BURNISHED BRASS|23|516 +Brand#12|LARGE BRUSHED TIN|45|516 +Brand#12|LARGE PLATED NICKEL|49|516 +Brand#12|MEDIUM PLATED NICKEL|9|516 +Brand#12|STANDARD BURNISHED NICKEL|45|516 +Brand#13|LARGE PLATED BRASS|49|516 +Brand#13|MEDIUM BURNISHED BRASS|49|516 +Brand#13|MEDIUM PLATED BRASS|45|516 +Brand#13|MEDIUM PLATED STEEL|3|516 +Brand#14|LARGE ANODIZED STEEL|9|516 +Brand#14|LARGE BRUSHED BRASS|23|516 +Brand#14|LARGE POLISHED TIN|45|516 +Brand#15|LARGE POLISHED NICKEL|23|516 +Brand#15|PROMO BURNISHED TIN|36|516 +Brand#21|MEDIUM ANODIZED STEEL|14|516 +Brand#21|MEDIUM PLATED NICKEL|14|516 +Brand#21|PROMO ANODIZED BRASS|49|516 +Brand#21|STANDARD ANODIZED STEEL|49|516 +Brand#22|ECONOMY BRUSHED TIN|19|516 +Brand#22|SMALL BRUSHED TIN|9|516 +Brand#22|STANDARD PLATED STEEL|23|516 +Brand#22|STANDARD PLATED TIN|3|516 +Brand#22|STANDARD PLATED TIN|49|516 +Brand#24|ECONOMY POLISHED COPPER|45|516 +Brand#24|PROMO BRUSHED STEEL|14|516 +Brand#25|PROMO ANODIZED TIN|36|516 +Brand#25|PROMO BRUSHED STEEL|49|516 +Brand#31|ECONOMY BURNISHED COPPER|45|516 +Brand#31|PROMO ANODIZED NICKEL|49|516 +Brand#31|SMALL PLATED STEEL|23|516 +Brand#31|STANDARD ANODIZED STEEL|19|516 +Brand#32|LARGE POLISHED BRASS|23|516 +Brand#33|PROMO BURNISHED STEEL|49|516 +Brand#33|SMALL ANODIZED BRASS|36|516 +Brand#33|SMALL ANODIZED COPPER|14|516 +Brand#33|SMALL BRUSHED TIN|45|516 +Brand#33|SMALL POLISHED TIN|9|516 +Brand#34|ECONOMY PLATED NICKEL|23|516 +Brand#34|LARGE BURNISHED STEEL|19|516 +Brand#34|LARGE BURNISHED TIN|14|516 +Brand#34|PROMO BRUSHED COPPER|49|516 +Brand#34|PROMO BRUSHED TIN|23|516 +Brand#34|STANDARD ANODIZED BRASS|45|516 +Brand#34|STANDARD ANODIZED TIN|3|516 +Brand#35|LARGE ANODIZED BRASS|45|516 +Brand#35|LARGE POLISHED NICKEL|3|516 +Brand#35|MEDIUM BRUSHED BRASS|36|516 +Brand#35|MEDIUM BURNISHED TIN|23|516 +Brand#35|PROMO ANODIZED COPPER|49|516 +Brand#35|STANDARD POLISHED COPPER|3|516 +Brand#41|ECONOMY ANODIZED COPPER|19|516 +Brand#41|ECONOMY BRUSHED TIN|3|516 +Brand#41|MEDIUM BURNISHED TIN|9|516 +Brand#41|PROMO PLATED NICKEL|36|516 +Brand#41|SMALL ANODIZED NICKEL|9|516 +Brand#41|SMALL BURNISHED NICKEL|19|516 +Brand#41|SMALL PLATED BRASS|49|516 +Brand#41|SMALL POLISHED STEEL|19|516 +Brand#41|STANDARD PLATED NICKEL|3|516 +Brand#42|SMALL BRUSHED NICKEL|9|516 +Brand#42|SMALL POLISHED NICKEL|9|516 +Brand#42|STANDARD POLISHED STEEL|14|516 +Brand#43|MEDIUM ANODIZED COPPER|14|516 +Brand#43|PROMO PLATED COPPER|49|516 +Brand#43|PROMO PLATED TIN|19|516 +Brand#51|LARGE BRUSHED NICKEL|3|516 +Brand#51|SMALL BURNISHED BRASS|19|516 +Brand#52|ECONOMY POLISHED STEEL|19|516 +Brand#52|MEDIUM ANODIZED TIN|36|516 +Brand#52|MEDIUM BURNISHED TIN|3|516 +Brand#53|ECONOMY PLATED STEEL|36|516 +Brand#53|PROMO BURNISHED BRASS|14|516 +Brand#53|PROMO POLISHED NICKEL|14|516 +Brand#54|LARGE ANODIZED TIN|36|516 +Brand#54|PROMO BRUSHED BRASS|36|516 +Brand#54|PROMO BRUSHED STEEL|9|516 +Brand#54|SMALL POLISHED TIN|14|516 +Brand#54|STANDARD POLISHED STEEL|36|516 +Brand#55|LARGE POLISHED BRASS|45|516 +Brand#55|MEDIUM ANODIZED BRASS|19|516 +Brand#55|MEDIUM ANODIZED NICKEL|36|516 +Brand#55|SMALL POLISHED NICKEL|9|516 +Brand#11|PROMO PLATED BRASS|49|515 +Brand#13|ECONOMY PLATED COPPER|45|515 +Brand#14|LARGE BRUSHED NICKEL|14|515 +Brand#15|SMALL BRUSHED NICKEL|45|515 +Brand#22|STANDARD BURNISHED COPPER|14|515 +Brand#23|MEDIUM ANODIZED TIN|19|515 +Brand#23|STANDARD BRUSHED NICKEL|23|515 +Brand#24|ECONOMY POLISHED TIN|36|515 +Brand#24|PROMO ANODIZED NICKEL|36|515 +Brand#24|SMALL BRUSHED COPPER|36|515 +Brand#25|PROMO PLATED STEEL|9|515 +Brand#25|PROMO PLATED STEEL|36|515 +Brand#32|SMALL BURNISHED STEEL|14|515 +Brand#33|SMALL BRUSHED STEEL|49|515 +Brand#35|MEDIUM BRUSHED STEEL|9|515 +Brand#43|MEDIUM ANODIZED COPPER|19|515 +Brand#43|PROMO BURNISHED NICKEL|45|515 +Brand#44|LARGE BURNISHED STEEL|19|515 +Brand#51|LARGE ANODIZED TIN|19|515 +Brand#51|LARGE BRUSHED COPPER|9|515 +Brand#52|LARGE BRUSHED BRASS|3|515 +Brand#53|SMALL BURNISHED NICKEL|36|515 +Brand#32|MEDIUM BRUSHED TIN|49|514 +Brand#32|STANDARD PLATED COPPER|3|514 +Brand#33|STANDARD BURNISHED TIN|23|514 +Brand#35|MEDIUM BURNISHED TIN|9|514 +Brand#52|SMALL POLISHED BRASS|36|514 +Brand#55|SMALL PLATED TIN|23|514 +Brand#55|STANDARD BRUSHED COPPER|9|514 +Brand#11|ECONOMY ANODIZED STEEL|14|512 +Brand#11|ECONOMY BRUSHED STEEL|49|512 +Brand#11|LARGE PLATED STEEL|14|512 +Brand#11|STANDARD BRUSHED NICKEL|19|512 +Brand#12|ECONOMY BRUSHED BRASS|45|512 +Brand#12|LARGE BRUSHED STEEL|19|512 +Brand#12|LARGE PLATED COPPER|49|512 +Brand#12|STANDARD BRUSHED BRASS|49|512 +Brand#13|PROMO POLISHED BRASS|14|512 +Brand#14|ECONOMY BRUSHED TIN|19|512 +Brand#14|STANDARD ANODIZED COPPER|9|512 +Brand#15|MEDIUM BURNISHED BRASS|14|512 +Brand#15|SMALL ANODIZED TIN|45|512 +Brand#15|STANDARD BURNISHED BRASS|49|512 +Brand#15|STANDARD PLATED BRASS|23|512 +Brand#21|ECONOMY BURNISHED BRASS|3|512 +Brand#21|ECONOMY PLATED NICKEL|19|512 +Brand#21|LARGE BURNISHED NICKEL|23|512 +Brand#21|PROMO BRUSHED NICKEL|19|512 +Brand#22|SMALL ANODIZED TIN|49|512 +Brand#23|ECONOMY PLATED TIN|9|512 +Brand#23|LARGE PLATED BRASS|14|512 +Brand#23|LARGE POLISHED NICKEL|23|512 +Brand#23|MEDIUM BRUSHED COPPER|45|512 +Brand#23|PROMO BRUSHED COPPER|3|512 +Brand#24|MEDIUM BRUSHED BRASS|49|512 +Brand#24|SMALL BRUSHED STEEL|19|512 +Brand#24|SMALL POLISHED TIN|49|512 +Brand#25|ECONOMY PLATED BRASS|9|512 +Brand#25|MEDIUM ANODIZED COPPER|19|512 +Brand#25|PROMO BURNISHED STEEL|23|512 +Brand#25|SMALL PLATED STEEL|14|512 +Brand#31|LARGE BRUSHED TIN|49|512 +Brand#31|LARGE POLISHED COPPER|23|512 +Brand#31|PROMO PLATED NICKEL|19|512 +Brand#31|SMALL BURNISHED STEEL|36|512 +Brand#32|ECONOMY ANODIZED TIN|36|512 +Brand#32|ECONOMY ANODIZED TIN|45|512 +Brand#32|LARGE BRUSHED TIN|23|512 +Brand#32|PROMO POLISHED BRASS|49|512 +Brand#33|STANDARD BRUSHED TIN|19|512 +Brand#34|MEDIUM BURNISHED BRASS|23|512 +Brand#34|PROMO POLISHED COPPER|23|512 +Brand#35|ECONOMY ANODIZED BRASS|19|512 +Brand#35|LARGE BRUSHED NICKEL|23|512 +Brand#35|MEDIUM PLATED STEEL|49|512 +Brand#35|STANDARD PLATED STEEL|3|512 +Brand#41|PROMO BRUSHED COPPER|23|512 +Brand#41|SMALL BRUSHED TIN|49|512 +Brand#41|SMALL BURNISHED BRASS|19|512 +Brand#42|PROMO POLISHED TIN|14|512 +Brand#42|SMALL PLATED COPPER|23|512 +Brand#42|SMALL POLISHED BRASS|36|512 +Brand#42|STANDARD ANODIZED TIN|23|512 +Brand#43|LARGE POLISHED NICKEL|49|512 +Brand#44|LARGE POLISHED NICKEL|49|512 +Brand#44|PROMO ANODIZED NICKEL|49|512 +Brand#44|PROMO BRUSHED STEEL|9|512 +Brand#44|SMALL BURNISHED COPPER|36|512 +Brand#44|STANDARD BURNISHED NICKEL|23|512 +Brand#44|STANDARD BURNISHED STEEL|9|512 +Brand#51|LARGE ANODIZED BRASS|19|512 +Brand#51|PROMO BRUSHED NICKEL|9|512 +Brand#52|ECONOMY ANODIZED STEEL|14|512 +Brand#52|ECONOMY ANODIZED TIN|19|512 +Brand#52|SMALL POLISHED NICKEL|23|512 +Brand#53|LARGE BRUSHED COPPER|14|512 +Brand#53|LARGE POLISHED NICKEL|23|512 +Brand#53|SMALL ANODIZED STEEL|49|512 +Brand#53|SMALL PLATED COPPER|45|512 +Brand#53|STANDARD ANODIZED BRASS|9|512 +Brand#54|ECONOMY BURNISHED TIN|9|512 +Brand#54|SMALL BRUSHED STEEL|45|512 +Brand#55|ECONOMY ANODIZED COPPER|45|512 +Brand#55|LARGE BRUSHED COPPER|9|512 +Brand#55|MEDIUM BRUSHED COPPER|23|512 +Brand#55|SMALL PLATED TIN|49|512 +Brand#55|SMALL POLISHED COPPER|23|512 +Brand#55|STANDARD PLATED COPPER|36|512 +Brand#55|STANDARD PLATED NICKEL|49|512 +Brand#11|ECONOMY BRUSHED COPPER|36|511 +Brand#11|PROMO BRUSHED STEEL|49|511 +Brand#12|LARGE ANODIZED TIN|49|511 +Brand#12|STANDARD PLATED NICKEL|19|511 +Brand#13|LARGE BURNISHED TIN|45|511 +Brand#14|ECONOMY PLATED TIN|49|511 +Brand#15|SMALL BRUSHED TIN|23|511 +Brand#21|LARGE BRUSHED TIN|45|511 +Brand#22|MEDIUM BRUSHED NICKEL|14|511 +Brand#22|SMALL BRUSHED BRASS|3|511 +Brand#22|STANDARD BURNISHED STEEL|14|511 +Brand#24|LARGE BURNISHED NICKEL|49|511 +Brand#24|PROMO PLATED TIN|9|511 +Brand#24|STANDARD BRUSHED TIN|45|511 +Brand#25|PROMO POLISHED NICKEL|49|511 +Brand#31|STANDARD PLATED STEEL|3|511 +Brand#32|PROMO BRUSHED TIN|9|511 +Brand#33|SMALL PLATED BRASS|23|511 +Brand#35|MEDIUM PLATED NICKEL|19|511 +Brand#35|MEDIUM PLATED STEEL|14|511 +Brand#35|STANDARD POLISHED STEEL|49|511 +Brand#41|MEDIUM BURNISHED STEEL|36|511 +Brand#41|PROMO BURNISHED TIN|36|511 +Brand#41|PROMO PLATED STEEL|9|511 +Brand#42|MEDIUM BRUSHED STEEL|45|511 +Brand#44|STANDARD PLATED NICKEL|36|511 +Brand#51|ECONOMY PLATED TIN|23|511 +Brand#51|PROMO POLISHED TIN|3|511 +Brand#54|PROMO ANODIZED NICKEL|45|511 +Brand#55|PROMO BRUSHED STEEL|23|511 +Brand#55|PROMO POLISHED TIN|19|511 +Brand#12|LARGE PLATED BRASS|36|510 +Brand#21|LARGE ANODIZED TIN|3|509 +Brand#22|ECONOMY ANODIZED STEEL|36|509 +Brand#11|ECONOMY PLATED NICKEL|36|508 +Brand#11|LARGE ANODIZED NICKEL|23|508 +Brand#11|PROMO BRUSHED NICKEL|19|508 +Brand#11|PROMO PLATED COPPER|36|508 +Brand#11|STANDARD PLATED COPPER|49|508 +Brand#11|STANDARD POLISHED NICKEL|36|508 +Brand#12|PROMO PLATED BRASS|45|508 +Brand#12|STANDARD PLATED COPPER|23|508 +Brand#13|ECONOMY BRUSHED NICKEL|49|508 +Brand#13|MEDIUM BRUSHED BRASS|9|508 +Brand#13|STANDARD PLATED COPPER|49|508 +Brand#13|STANDARD POLISHED BRASS|45|508 +Brand#14|ECONOMY POLISHED COPPER|49|508 +Brand#14|LARGE PLATED BRASS|19|508 +Brand#14|SMALL PLATED TIN|14|508 +Brand#15|LARGE POLISHED TIN|23|508 +Brand#15|MEDIUM ANODIZED STEEL|23|508 +Brand#15|MEDIUM BRUSHED TIN|23|508 +Brand#15|MEDIUM PLATED COPPER|49|508 +Brand#15|MEDIUM PLATED NICKEL|14|508 +Brand#15|SMALL BURNISHED STEEL|23|508 +Brand#21|LARGE BRUSHED TIN|23|508 +Brand#21|LARGE PLATED COPPER|49|508 +Brand#21|PROMO POLISHED COPPER|14|508 +Brand#21|STANDARD BURNISHED NICKEL|23|508 +Brand#22|ECONOMY BURNISHED STEEL|14|508 +Brand#22|LARGE BRUSHED STEEL|19|508 +Brand#22|LARGE POLISHED STEEL|19|508 +Brand#22|MEDIUM ANODIZED BRASS|45|508 +Brand#22|MEDIUM BRUSHED NICKEL|45|508 +Brand#22|STANDARD ANODIZED TIN|49|508 +Brand#22|STANDARD BURNISHED BRASS|14|508 +Brand#22|STANDARD POLISHED NICKEL|36|508 +Brand#23|LARGE BRUSHED BRASS|36|508 +Brand#23|LARGE PLATED NICKEL|23|508 +Brand#23|PROMO BRUSHED NICKEL|36|508 +Brand#23|PROMO POLISHED STEEL|19|508 +Brand#23|SMALL PLATED BRASS|45|508 +Brand#24|ECONOMY ANODIZED TIN|45|508 +Brand#24|ECONOMY PLATED NICKEL|9|508 +Brand#24|ECONOMY POLISHED NICKEL|19|508 +Brand#24|MEDIUM ANODIZED BRASS|23|508 +Brand#24|MEDIUM ANODIZED TIN|3|508 +Brand#24|MEDIUM BRUSHED TIN|19|508 +Brand#24|PROMO BURNISHED NICKEL|49|508 +Brand#24|STANDARD BRUSHED COPPER|3|508 +Brand#25|ECONOMY BRUSHED COPPER|14|508 +Brand#25|LARGE ANODIZED TIN|14|508 +Brand#25|MEDIUM ANODIZED COPPER|36|508 +Brand#25|PROMO BRUSHED TIN|3|508 +Brand#25|SMALL ANODIZED BRASS|19|508 +Brand#25|SMALL PLATED TIN|23|508 +Brand#25|SMALL POLISHED COPPER|9|508 +Brand#31|ECONOMY ANODIZED TIN|45|508 +Brand#31|MEDIUM ANODIZED NICKEL|45|508 +Brand#31|SMALL ANODIZED STEEL|49|508 +Brand#31|STANDARD PLATED NICKEL|36|508 +Brand#32|MEDIUM PLATED BRASS|3|508 +Brand#32|PROMO ANODIZED TIN|19|508 +Brand#32|STANDARD BRUSHED BRASS|19|508 +Brand#33|ECONOMY BRUSHED TIN|49|508 +Brand#33|LARGE BRUSHED TIN|45|508 +Brand#33|MEDIUM BRUSHED BRASS|3|508 +Brand#33|PROMO POLISHED STEEL|9|508 +Brand#33|SMALL ANODIZED NICKEL|45|508 +Brand#33|SMALL BURNISHED COPPER|36|508 +Brand#33|STANDARD ANODIZED BRASS|23|508 +Brand#33|STANDARD ANODIZED TIN|45|508 +Brand#33|STANDARD BURNISHED BRASS|45|508 +Brand#34|LARGE BURNISHED COPPER|23|508 +Brand#34|MEDIUM PLATED NICKEL|23|508 +Brand#34|PROMO PLATED TIN|36|508 +Brand#35|ECONOMY BRUSHED STEEL|49|508 +Brand#35|ECONOMY BURNISHED TIN|14|508 +Brand#35|ECONOMY POLISHED BRASS|19|508 +Brand#35|LARGE BURNISHED STEEL|14|508 +Brand#35|MEDIUM PLATED BRASS|49|508 +Brand#35|PROMO BURNISHED BRASS|45|508 +Brand#35|PROMO BURNISHED TIN|9|508 +Brand#35|SMALL PLATED COPPER|3|508 +Brand#35|SMALL PLATED NICKEL|14|508 +Brand#41|ECONOMY ANODIZED STEEL|3|508 +Brand#41|LARGE BRUSHED STEEL|23|508 +Brand#41|LARGE BRUSHED STEEL|36|508 +Brand#41|PROMO PLATED NICKEL|9|508 +Brand#41|PROMO PLATED NICKEL|49|508 +Brand#41|SMALL BURNISHED STEEL|9|508 +Brand#42|ECONOMY POLISHED STEEL|23|508 +Brand#42|PROMO POLISHED STEEL|45|508 +Brand#42|STANDARD ANODIZED NICKEL|9|508 +Brand#43|ECONOMY BRUSHED STEEL|19|508 +Brand#43|ECONOMY PLATED BRASS|9|508 +Brand#43|LARGE PLATED COPPER|19|508 +Brand#43|SMALL PLATED STEEL|3|508 +Brand#44|ECONOMY POLISHED TIN|36|508 +Brand#44|MEDIUM BRUSHED NICKEL|9|508 +Brand#44|MEDIUM PLATED NICKEL|9|508 +Brand#44|PROMO POLISHED TIN|49|508 +Brand#44|SMALL BURNISHED COPPER|14|508 +Brand#51|SMALL PLATED STEEL|23|508 +Brand#52|LARGE ANODIZED COPPER|14|508 +Brand#52|LARGE BRUSHED STEEL|36|508 +Brand#52|PROMO ANODIZED COPPER|45|508 +Brand#52|SMALL ANODIZED BRASS|19|508 +Brand#53|LARGE BRUSHED STEEL|23|508 +Brand#53|MEDIUM ANODIZED BRASS|49|508 +Brand#53|PROMO BURNISHED NICKEL|36|508 +Brand#53|PROMO POLISHED NICKEL|36|508 +Brand#54|ECONOMY POLISHED BRASS|49|508 +Brand#54|PROMO BURNISHED BRASS|36|508 +Brand#54|PROMO PLATED TIN|45|508 +Brand#55|LARGE BRUSHED BRASS|9|508 +Brand#55|SMALL BRUSHED COPPER|14|508 +Brand#55|STANDARD ANODIZED TIN|19|508 +Brand#11|ECONOMY BURNISHED STEEL|19|507 +Brand#11|PROMO ANODIZED STEEL|9|507 +Brand#11|STANDARD BRUSHED COPPER|19|507 +Brand#12|STANDARD ANODIZED COPPER|9|507 +Brand#13|LARGE POLISHED NICKEL|3|507 +Brand#15|STANDARD PLATED TIN|3|507 +Brand#21|SMALL PLATED NICKEL|36|507 +Brand#22|PROMO PLATED NICKEL|3|507 +Brand#22|STANDARD ANODIZED BRASS|19|507 +Brand#23|STANDARD ANODIZED BRASS|3|507 +Brand#24|ECONOMY ANODIZED TIN|49|507 +Brand#24|MEDIUM BRUSHED STEEL|23|507 +Brand#24|MEDIUM PLATED TIN|45|507 +Brand#24|STANDARD POLISHED BRASS|45|507 +Brand#25|ECONOMY BRUSHED NICKEL|36|507 +Brand#31|LARGE ANODIZED NICKEL|45|507 +Brand#31|LARGE BURNISHED TIN|3|507 +Brand#31|MEDIUM PLATED STEEL|14|507 +Brand#32|LARGE BRUSHED NICKEL|3|507 +Brand#32|PROMO PLATED TIN|23|507 +Brand#32|STANDARD PLATED STEEL|19|507 +Brand#32|STANDARD PLATED TIN|9|507 +Brand#33|LARGE ANODIZED NICKEL|23|507 +Brand#33|LARGE BURNISHED BRASS|14|507 +Brand#35|MEDIUM PLATED NICKEL|36|507 +Brand#35|PROMO BRUSHED BRASS|49|507 +Brand#42|ECONOMY BURNISHED COPPER|19|507 +Brand#42|PROMO POLISHED TIN|36|507 +Brand#43|PROMO PLATED BRASS|45|507 +Brand#44|SMALL PLATED TIN|19|507 +Brand#51|LARGE BURNISHED TIN|19|507 +Brand#51|STANDARD BURNISHED TIN|9|507 +Brand#52|ECONOMY ANODIZED COPPER|45|507 +Brand#53|ECONOMY ANODIZED TIN|9|507 +Brand#53|ECONOMY BURNISHED COPPER|45|507 +Brand#53|STANDARD PLATED COPPER|36|507 +Brand#54|ECONOMY ANODIZED TIN|3|507 +Brand#54|MEDIUM ANODIZED TIN|45|507 +Brand#54|MEDIUM PLATED COPPER|3|507 +Brand#54|PROMO BRUSHED NICKEL|49|507 +Brand#54|SMALL PLATED TIN|9|507 +Brand#55|LARGE BURNISHED STEEL|3|507 +Brand#55|SMALL BURNISHED TIN|19|507 +Brand#55|SMALL PLATED COPPER|49|507 +Brand#12|LARGE BRUSHED STEEL|9|506 +Brand#31|PROMO BURNISHED NICKEL|36|506 +Brand#32|ECONOMY ANODIZED STEEL|45|506 +Brand#33|LARGE BURNISHED NICKEL|19|506 +Brand#41|ECONOMY PLATED BRASS|45|506 +Brand#41|MEDIUM BURNISHED BRASS|36|506 +Brand#43|SMALL BRUSHED STEEL|49|506 +Brand#44|LARGE BURNISHED COPPER|19|506 +Brand#51|PROMO POLISHED BRASS|3|506 +Brand#11|LARGE PLATED NICKEL|14|504 +Brand#11|PROMO POLISHED BRASS|23|504 +Brand#11|SMALL POLISHED STEEL|49|504 +Brand#12|ECONOMY BURNISHED COPPER|9|504 +Brand#12|ECONOMY BURNISHED NICKEL|9|504 +Brand#12|LARGE BURNISHED TIN|36|504 +Brand#12|LARGE POLISHED NICKEL|3|504 +Brand#12|SMALL PLATED STEEL|3|504 +Brand#13|ECONOMY ANODIZED COPPER|49|504 +Brand#13|MEDIUM BRUSHED COPPER|49|504 +Brand#13|PROMO PLATED NICKEL|3|504 +Brand#13|STANDARD ANODIZED TIN|19|504 +Brand#14|ECONOMY BRUSHED BRASS|19|504 +Brand#14|MEDIUM ANODIZED NICKEL|36|504 +Brand#14|PROMO PLATED COPPER|45|504 +Brand#14|STANDARD PLATED COPPER|19|504 +Brand#15|LARGE BRUSHED BRASS|49|504 +Brand#15|STANDARD ANODIZED BRASS|19|504 +Brand#21|ECONOMY PLATED NICKEL|49|504 +Brand#21|LARGE BRUSHED COPPER|49|504 +Brand#21|MEDIUM PLATED TIN|49|504 +Brand#22|ECONOMY POLISHED NICKEL|19|504 +Brand#22|LARGE BRUSHED TIN|14|504 +Brand#22|LARGE PLATED TIN|49|504 +Brand#22|MEDIUM BURNISHED TIN|45|504 +Brand#22|STANDARD POLISHED COPPER|36|504 +Brand#23|LARGE PLATED STEEL|9|504 +Brand#23|MEDIUM BRUSHED COPPER|36|504 +Brand#23|PROMO POLISHED COPPER|49|504 +Brand#23|SMALL BRUSHED NICKEL|9|504 +Brand#23|SMALL POLISHED STEEL|49|504 +Brand#24|STANDARD POLISHED TIN|49|504 +Brand#25|LARGE BRUSHED COPPER|45|504 +Brand#25|LARGE BRUSHED NICKEL|49|504 +Brand#25|MEDIUM ANODIZED BRASS|9|504 +Brand#25|MEDIUM BURNISHED BRASS|19|504 +Brand#25|MEDIUM BURNISHED STEEL|14|504 +Brand#25|PROMO BURNISHED COPPER|9|504 +Brand#25|STANDARD ANODIZED BRASS|19|504 +Brand#31|ECONOMY BRUSHED COPPER|3|504 +Brand#31|LARGE BURNISHED BRASS|14|504 +Brand#31|LARGE PLATED TIN|19|504 +Brand#31|MEDIUM PLATED NICKEL|36|504 +Brand#31|SMALL PLATED BRASS|23|504 +Brand#31|STANDARD BURNISHED TIN|19|504 +Brand#31|STANDARD POLISHED BRASS|23|504 +Brand#32|LARGE BRUSHED BRASS|36|504 +Brand#32|MEDIUM BRUSHED STEEL|19|504 +Brand#32|MEDIUM BURNISHED COPPER|23|504 +Brand#32|SMALL ANODIZED BRASS|45|504 +Brand#32|STANDARD POLISHED NICKEL|49|504 +Brand#33|ECONOMY BURNISHED STEEL|45|504 +Brand#33|LARGE ANODIZED COPPER|3|504 +Brand#33|LARGE ANODIZED STEEL|9|504 +Brand#33|MEDIUM BURNISHED BRASS|36|504 +Brand#33|MEDIUM PLATED COPPER|14|504 +Brand#33|PROMO BRUSHED BRASS|9|504 +Brand#33|PROMO BRUSHED TIN|45|504 +Brand#33|PROMO PLATED COPPER|9|504 +Brand#33|PROMO PLATED COPPER|36|504 +Brand#34|MEDIUM BRUSHED TIN|9|504 +Brand#34|PROMO ANODIZED COPPER|45|504 +Brand#34|SMALL ANODIZED STEEL|45|504 +Brand#34|SMALL POLISHED COPPER|19|504 +Brand#35|ECONOMY POLISHED COPPER|3|504 +Brand#35|LARGE BRUSHED BRASS|9|504 +Brand#35|LARGE POLISHED TIN|3|504 +Brand#35|MEDIUM BRUSHED BRASS|3|504 +Brand#35|STANDARD ANODIZED TIN|19|504 +Brand#35|STANDARD BRUSHED BRASS|49|504 +Brand#35|STANDARD BRUSHED TIN|45|504 +Brand#35|STANDARD BURNISHED NICKEL|45|504 +Brand#41|LARGE BRUSHED NICKEL|23|504 +Brand#41|MEDIUM ANODIZED TIN|23|504 +Brand#41|SMALL ANODIZED NICKEL|23|504 +Brand#41|SMALL POLISHED TIN|14|504 +Brand#41|STANDARD POLISHED STEEL|14|504 +Brand#42|LARGE PLATED STEEL|9|504 +Brand#42|MEDIUM BURNISHED BRASS|14|504 +Brand#42|PROMO BURNISHED TIN|14|504 +Brand#42|PROMO POLISHED COPPER|36|504 +Brand#42|SMALL PLATED TIN|14|504 +Brand#42|STANDARD BRUSHED COPPER|3|504 +Brand#42|STANDARD BURNISHED TIN|9|504 +Brand#43|LARGE BRUSHED STEEL|49|504 +Brand#43|LARGE BURNISHED NICKEL|9|504 +Brand#43|LARGE PLATED NICKEL|49|504 +Brand#43|MEDIUM PLATED NICKEL|14|504 +Brand#43|PROMO BRUSHED STEEL|36|504 +Brand#43|PROMO PLATED BRASS|49|504 +Brand#43|PROMO POLISHED NICKEL|14|504 +Brand#43|STANDARD ANODIZED BRASS|45|504 +Brand#43|STANDARD BRUSHED TIN|23|504 +Brand#44|ECONOMY BRUSHED COPPER|45|504 +Brand#44|ECONOMY BRUSHED TIN|3|504 +Brand#44|ECONOMY BURNISHED TIN|19|504 +Brand#44|PROMO BRUSHED BRASS|45|504 +Brand#51|ECONOMY ANODIZED NICKEL|23|504 +Brand#51|LARGE BURNISHED NICKEL|36|504 +Brand#51|LARGE BURNISHED NICKEL|49|504 +Brand#51|LARGE PLATED COPPER|9|504 +Brand#51|MEDIUM ANODIZED BRASS|9|504 +Brand#51|PROMO ANODIZED STEEL|14|504 +Brand#51|SMALL BRUSHED STEEL|45|504 +Brand#51|STANDARD ANODIZED COPPER|14|504 +Brand#51|STANDARD BRUSHED STEEL|9|504 +Brand#52|LARGE PLATED NICKEL|14|504 +Brand#52|MEDIUM BURNISHED NICKEL|23|504 +Brand#52|PROMO BURNISHED TIN|3|504 +Brand#52|SMALL PLATED COPPER|14|504 +Brand#52|SMALL PLATED COPPER|45|504 +Brand#52|STANDARD ANODIZED NICKEL|49|504 +Brand#52|STANDARD PLATED NICKEL|19|504 +Brand#52|STANDARD POLISHED TIN|3|504 +Brand#53|LARGE PLATED TIN|3|504 +Brand#53|MEDIUM BURNISHED STEEL|19|504 +Brand#53|SMALL BURNISHED COPPER|3|504 +Brand#54|ECONOMY PLATED NICKEL|49|504 +Brand#54|PROMO PLATED COPPER|14|504 +Brand#55|ECONOMY ANODIZED NICKEL|36|504 +Brand#55|ECONOMY PLATED COPPER|36|504 +Brand#55|LARGE BURNISHED STEEL|49|504 +Brand#55|STANDARD BRUSHED STEEL|9|504 +Brand#55|STANDARD POLISHED NICKEL|19|504 +Brand#11|ECONOMY BRUSHED NICKEL|14|503 +Brand#11|PROMO PLATED NICKEL|19|503 +Brand#11|STANDARD ANODIZED TIN|19|503 +Brand#11|STANDARD PLATED BRASS|23|503 +Brand#12|ECONOMY BRUSHED TIN|19|503 +Brand#12|ECONOMY BURNISHED BRASS|49|503 +Brand#12|LARGE ANODIZED STEEL|23|503 +Brand#12|LARGE PLATED BRASS|45|503 +Brand#12|PROMO POLISHED NICKEL|14|503 +Brand#12|SMALL PLATED TIN|49|503 +Brand#13|LARGE ANODIZED NICKEL|9|503 +Brand#13|LARGE BRUSHED BRASS|19|503 +Brand#13|SMALL ANODIZED COPPER|3|503 +Brand#13|SMALL ANODIZED TIN|3|503 +Brand#14|LARGE POLISHED COPPER|23|503 +Brand#15|LARGE ANODIZED COPPER|9|503 +Brand#15|STANDARD BURNISHED COPPER|45|503 +Brand#21|ECONOMY PLATED COPPER|3|503 +Brand#21|PROMO POLISHED STEEL|19|503 +Brand#21|PROMO POLISHED STEEL|49|503 +Brand#21|SMALL ANODIZED TIN|14|503 +Brand#22|SMALL POLISHED NICKEL|9|503 +Brand#23|LARGE ANODIZED NICKEL|36|503 +Brand#24|LARGE PLATED TIN|19|503 +Brand#24|MEDIUM ANODIZED STEEL|45|503 +Brand#24|SMALL POLISHED NICKEL|23|503 +Brand#25|MEDIUM PLATED COPPER|14|503 +Brand#25|PROMO ANODIZED COPPER|3|503 +Brand#31|MEDIUM ANODIZED COPPER|14|503 +Brand#32|PROMO ANODIZED NICKEL|23|503 +Brand#33|ECONOMY POLISHED NICKEL|19|503 +Brand#33|SMALL BURNISHED TIN|45|503 +Brand#33|STANDARD BURNISHED STEEL|14|503 +Brand#33|STANDARD PLATED NICKEL|14|503 +Brand#34|SMALL PLATED STEEL|19|503 +Brand#35|ECONOMY BRUSHED TIN|9|503 +Brand#35|MEDIUM BURNISHED COPPER|14|503 +Brand#41|SMALL ANODIZED NICKEL|45|503 +Brand#41|SMALL POLISHED STEEL|9|503 +Brand#42|MEDIUM BURNISHED NICKEL|36|503 +Brand#43|ECONOMY BRUSHED COPPER|9|503 +Brand#43|ECONOMY PLATED NICKEL|36|503 +Brand#44|ECONOMY POLISHED COPPER|9|503 +Brand#44|PROMO PLATED BRASS|45|503 +Brand#44|SMALL PLATED NICKEL|19|503 +Brand#51|ECONOMY POLISHED STEEL|23|503 +Brand#51|PROMO ANODIZED COPPER|9|503 +Brand#52|ECONOMY PLATED BRASS|9|503 +Brand#52|LARGE PLATED COPPER|3|503 +Brand#52|LARGE POLISHED TIN|23|503 +Brand#52|STANDARD PLATED NICKEL|14|503 +Brand#53|LARGE BRUSHED NICKEL|36|503 +Brand#53|PROMO ANODIZED STEEL|36|503 +Brand#53|SMALL POLISHED COPPER|19|503 +Brand#55|ECONOMY POLISHED TIN|19|503 +Brand#55|PROMO BURNISHED BRASS|36|503 +Brand#14|PROMO POLISHED STEEL|36|502 +Brand#21|ECONOMY PLATED TIN|36|502 +Brand#32|STANDARD BRUSHED COPPER|45|502 +Brand#33|LARGE PLATED TIN|9|502 +Brand#52|STANDARD BRUSHED COPPER|19|502 +Brand#55|PROMO POLISHED COPPER|14|502 +Brand#13|PROMO ANODIZED TIN|23|501 +Brand#14|PROMO PLATED STEEL|9|501 +Brand#11|ECONOMY PLATED BRASS|23|500 +Brand#11|MEDIUM ANODIZED STEEL|23|500 +Brand#11|MEDIUM BURNISHED COPPER|3|500 +Brand#11|MEDIUM BURNISHED COPPER|23|500 +Brand#11|MEDIUM PLATED STEEL|45|500 +Brand#11|PROMO BURNISHED BRASS|14|500 +Brand#11|PROMO BURNISHED STEEL|3|500 +Brand#11|PROMO PLATED TIN|45|500 +Brand#11|PROMO POLISHED STEEL|23|500 +Brand#12|MEDIUM BRUSHED NICKEL|49|500 +Brand#12|PROMO POLISHED NICKEL|49|500 +Brand#12|STANDARD ANODIZED COPPER|19|500 +Brand#12|STANDARD BURNISHED COPPER|14|500 +Brand#12|STANDARD PLATED NICKEL|23|500 +Brand#13|PROMO ANODIZED COPPER|36|500 +Brand#13|STANDARD BRUSHED COPPER|45|500 +Brand#13|STANDARD POLISHED COPPER|23|500 +Brand#13|STANDARD POLISHED TIN|45|500 +Brand#14|ECONOMY BRUSHED TIN|14|500 +Brand#14|PROMO BURNISHED NICKEL|23|500 +Brand#14|SMALL PLATED TIN|49|500 +Brand#14|STANDARD BURNISHED STEEL|19|500 +Brand#15|ECONOMY POLISHED NICKEL|9|500 +Brand#15|LARGE ANODIZED TIN|9|500 +Brand#15|LARGE BURNISHED BRASS|3|500 +Brand#15|MEDIUM ANODIZED TIN|49|500 +Brand#15|MEDIUM BURNISHED TIN|45|500 +Brand#21|ECONOMY PLATED COPPER|45|500 +Brand#21|ECONOMY POLISHED COPPER|45|500 +Brand#21|LARGE BRUSHED TIN|49|500 +Brand#21|LARGE POLISHED TIN|3|500 +Brand#21|MEDIUM BURNISHED STEEL|45|500 +Brand#21|SMALL BRUSHED COPPER|49|500 +Brand#21|STANDARD POLISHED COPPER|49|500 +Brand#22|ECONOMY BRUSHED COPPER|14|500 +Brand#22|ECONOMY POLISHED TIN|19|500 +Brand#22|PROMO BRUSHED TIN|49|500 +Brand#22|SMALL BRUSHED TIN|23|500 +Brand#23|ECONOMY ANODIZED NICKEL|19|500 +Brand#23|LARGE PLATED NICKEL|49|500 +Brand#23|LARGE PLATED STEEL|14|500 +Brand#23|PROMO ANODIZED BRASS|9|500 +Brand#23|SMALL POLISHED NICKEL|3|500 +Brand#23|STANDARD ANODIZED COPPER|45|500 +Brand#24|ECONOMY POLISHED COPPER|36|500 +Brand#24|LARGE BURNISHED COPPER|19|500 +Brand#24|LARGE POLISHED COPPER|45|500 +Brand#24|PROMO BURNISHED TIN|3|500 +Brand#24|SMALL BRUSHED STEEL|45|500 +Brand#24|SMALL BURNISHED NICKEL|45|500 +Brand#25|LARGE BURNISHED COPPER|45|500 +Brand#25|MEDIUM BURNISHED NICKEL|3|500 +Brand#25|MEDIUM BURNISHED STEEL|45|500 +Brand#25|PROMO BURNISHED TIN|14|500 +Brand#25|PROMO PLATED NICKEL|3|500 +Brand#25|SMALL BRUSHED STEEL|36|500 +Brand#25|STANDARD PLATED TIN|45|500 +Brand#31|ECONOMY PLATED COPPER|45|500 +Brand#31|ECONOMY POLISHED BRASS|45|500 +Brand#31|LARGE BRUSHED BRASS|23|500 +Brand#31|LARGE PLATED BRASS|19|500 +Brand#31|LARGE PLATED TIN|9|500 +Brand#31|STANDARD BRUSHED COPPER|19|500 +Brand#31|STANDARD POLISHED STEEL|9|500 +Brand#32|ECONOMY PLATED NICKEL|23|500 +Brand#32|ECONOMY POLISHED TIN|36|500 +Brand#32|STANDARD ANODIZED NICKEL|45|500 +Brand#32|STANDARD BRUSHED NICKEL|36|500 +Brand#33|PROMO BURNISHED TIN|14|500 +Brand#33|STANDARD PLATED TIN|36|500 +Brand#34|LARGE BURNISHED COPPER|19|500 +Brand#34|LARGE POLISHED BRASS|3|500 +Brand#34|MEDIUM BRUSHED STEEL|23|500 +Brand#34|MEDIUM BURNISHED NICKEL|14|500 +Brand#34|PROMO ANODIZED TIN|45|500 +Brand#34|PROMO BURNISHED STEEL|9|500 +Brand#34|SMALL ANODIZED TIN|49|500 +Brand#34|SMALL BURNISHED NICKEL|9|500 +Brand#34|STANDARD PLATED STEEL|45|500 +Brand#35|MEDIUM BURNISHED BRASS|23|500 +Brand#35|PROMO BURNISHED NICKEL|49|500 +Brand#35|SMALL BURNISHED BRASS|23|500 +Brand#35|SMALL BURNISHED TIN|9|500 +Brand#35|SMALL PLATED TIN|19|500 +Brand#35|STANDARD ANODIZED BRASS|9|500 +Brand#35|STANDARD ANODIZED NICKEL|14|500 +Brand#41|ECONOMY BRUSHED NICKEL|23|500 +Brand#41|ECONOMY BURNISHED NICKEL|36|500 +Brand#41|ECONOMY POLISHED BRASS|23|500 +Brand#41|ECONOMY POLISHED STEEL|19|500 +Brand#41|LARGE ANODIZED COPPER|19|500 +Brand#41|PROMO BURNISHED TIN|23|500 +Brand#41|STANDARD BURNISHED TIN|49|500 +Brand#41|STANDARD POLISHED STEEL|36|500 +Brand#42|LARGE PLATED TIN|36|500 +Brand#42|LARGE POLISHED NICKEL|3|500 +Brand#42|MEDIUM BRUSHED STEEL|9|500 +Brand#43|ECONOMY POLISHED NICKEL|49|500 +Brand#43|MEDIUM BRUSHED NICKEL|9|500 +Brand#43|SMALL ANODIZED NICKEL|19|500 +Brand#43|STANDARD BRUSHED COPPER|36|500 +Brand#44|ECONOMY BRUSHED BRASS|45|500 +Brand#44|ECONOMY BRUSHED COPPER|36|500 +Brand#44|ECONOMY BRUSHED STEEL|3|500 +Brand#44|ECONOMY POLISHED BRASS|23|500 +Brand#44|LARGE PLATED STEEL|23|500 +Brand#44|LARGE POLISHED STEEL|3|500 +Brand#44|MEDIUM ANODIZED TIN|14|500 +Brand#44|MEDIUM BURNISHED NICKEL|36|500 +Brand#44|PROMO BRUSHED STEEL|36|500 +Brand#44|PROMO BURNISHED TIN|14|500 +Brand#44|STANDARD BURNISHED BRASS|9|500 +Brand#44|STANDARD BURNISHED STEEL|3|500 +Brand#44|STANDARD BURNISHED TIN|9|500 +Brand#51|ECONOMY ANODIZED TIN|19|500 +Brand#51|ECONOMY BRUSHED TIN|19|500 +Brand#51|LARGE BURNISHED NICKEL|45|500 +Brand#51|LARGE POLISHED NICKEL|45|500 +Brand#51|PROMO POLISHED BRASS|36|500 +Brand#51|SMALL BURNISHED STEEL|19|500 +Brand#51|SMALL PLATED STEEL|14|500 +Brand#51|SMALL PLATED STEEL|19|500 +Brand#51|STANDARD BRUSHED BRASS|19|500 +Brand#51|STANDARD BURNISHED COPPER|45|500 +Brand#51|STANDARD POLISHED NICKEL|3|500 +Brand#52|ECONOMY ANODIZED COPPER|23|500 +Brand#52|ECONOMY BURNISHED NICKEL|23|500 +Brand#52|MEDIUM BURNISHED STEEL|23|500 +Brand#52|PROMO ANODIZED NICKEL|23|500 +Brand#52|SMALL BURNISHED NICKEL|9|500 +Brand#52|STANDARD ANODIZED TIN|36|500 +Brand#52|STANDARD BRUSHED TIN|19|500 +Brand#53|ECONOMY POLISHED NICKEL|23|500 +Brand#53|STANDARD BURNISHED COPPER|23|500 +Brand#53|STANDARD BURNISHED STEEL|19|500 +Brand#53|STANDARD BURNISHED TIN|45|500 +Brand#53|STANDARD POLISHED TIN|45|500 +Brand#54|ECONOMY PLATED TIN|23|500 +Brand#54|LARGE BRUSHED TIN|9|500 +Brand#54|MEDIUM BURNISHED BRASS|14|500 +Brand#54|STANDARD BRUSHED COPPER|45|500 +Brand#54|STANDARD BRUSHED STEEL|14|500 +Brand#55|ECONOMY ANODIZED NICKEL|3|500 +Brand#55|ECONOMY BRUSHED TIN|9|500 +Brand#55|ECONOMY PLATED BRASS|36|500 +Brand#55|LARGE BRUSHED BRASS|49|500 +Brand#55|LARGE PLATED NICKEL|14|500 +Brand#55|MEDIUM PLATED COPPER|14|500 +Brand#55|PROMO PLATED BRASS|49|500 +Brand#11|MEDIUM ANODIZED COPPER|19|499 +Brand#11|MEDIUM ANODIZED COPPER|49|499 +Brand#12|MEDIUM PLATED BRASS|49|499 +Brand#12|MEDIUM PLATED STEEL|36|499 +Brand#13|PROMO BRUSHED STEEL|36|499 +Brand#13|STANDARD BURNISHED BRASS|14|499 +Brand#14|ECONOMY BURNISHED COPPER|3|499 +Brand#14|STANDARD BURNISHED BRASS|49|499 +Brand#14|STANDARD POLISHED NICKEL|9|499 +Brand#14|STANDARD POLISHED NICKEL|19|499 +Brand#15|STANDARD BURNISHED NICKEL|23|499 +Brand#21|LARGE ANODIZED STEEL|36|499 +Brand#21|LARGE BURNISHED COPPER|14|499 +Brand#21|LARGE POLISHED BRASS|9|499 +Brand#22|STANDARD ANODIZED COPPER|9|499 +Brand#22|STANDARD ANODIZED NICKEL|19|499 +Brand#23|ECONOMY POLISHED TIN|19|499 +Brand#23|PROMO BURNISHED STEEL|36|499 +Brand#23|PROMO BURNISHED TIN|3|499 +Brand#24|SMALL BURNISHED COPPER|9|499 +Brand#25|LARGE POLISHED COPPER|36|499 +Brand#25|PROMO BURNISHED NICKEL|14|499 +Brand#25|STANDARD PLATED STEEL|45|499 +Brand#31|SMALL BRUSHED TIN|19|499 +Brand#31|STANDARD PLATED COPPER|19|499 +Brand#33|LARGE BURNISHED TIN|14|499 +Brand#33|MEDIUM ANODIZED NICKEL|14|499 +Brand#33|MEDIUM BURNISHED STEEL|9|499 +Brand#34|STANDARD PLATED BRASS|19|499 +Brand#35|STANDARD ANODIZED COPPER|3|499 +Brand#35|STANDARD PLATED BRASS|23|499 +Brand#42|ECONOMY PLATED COPPER|9|499 +Brand#42|LARGE BURNISHED BRASS|9|499 +Brand#42|MEDIUM BURNISHED TIN|14|499 +Brand#42|SMALL PLATED BRASS|49|499 +Brand#43|ECONOMY ANODIZED BRASS|23|499 +Brand#44|LARGE POLISHED COPPER|3|499 +Brand#44|MEDIUM BRUSHED NICKEL|45|499 +Brand#51|MEDIUM ANODIZED STEEL|14|499 +Brand#51|PROMO ANODIZED BRASS|14|499 +Brand#51|SMALL ANODIZED BRASS|45|499 +Brand#52|ECONOMY PLATED COPPER|49|499 +Brand#53|ECONOMY ANODIZED COPPER|23|499 +Brand#53|SMALL ANODIZED STEEL|14|499 +Brand#53|STANDARD BRUSHED TIN|3|499 +Brand#54|ECONOMY PLATED STEEL|9|499 +Brand#54|MEDIUM ANODIZED BRASS|9|499 +Brand#54|SMALL BRUSHED BRASS|3|499 +Brand#54|STANDARD POLISHED TIN|3|499 +Brand#55|SMALL BURNISHED COPPER|36|499 +Brand#21|PROMO BURNISHED BRASS|36|498 +Brand#22|ECONOMY POLISHED NICKEL|49|498 +Brand#23|PROMO BURNISHED STEEL|14|498 +Brand#24|LARGE BRUSHED COPPER|19|498 +Brand#31|PROMO PLATED STEEL|49|498 +Brand#32|LARGE PLATED STEEL|36|498 +Brand#34|SMALL BURNISHED TIN|49|498 +Brand#35|LARGE PLATED COPPER|19|498 +Brand#35|SMALL POLISHED BRASS|9|498 +Brand#42|ECONOMY BURNISHED STEEL|3|498 +Brand#51|LARGE BURNISHED STEEL|45|498 +Brand#51|MEDIUM BURNISHED COPPER|3|498 +Brand#51|STANDARD BRUSHED COPPER|14|498 +Brand#42|PROMO BURNISHED NICKEL|19|497 +Brand#43|STANDARD ANODIZED BRASS|36|497 +Brand#11|ECONOMY ANODIZED TIN|36|496 +Brand#11|ECONOMY BRUSHED NICKEL|49|496 +Brand#11|LARGE BRUSHED NICKEL|3|496 +Brand#11|LARGE BRUSHED NICKEL|9|496 +Brand#11|LARGE BRUSHED STEEL|9|496 +Brand#11|LARGE BURNISHED BRASS|3|496 +Brand#11|LARGE POLISHED COPPER|36|496 +Brand#11|SMALL ANODIZED STEEL|14|496 +Brand#11|SMALL POLISHED STEEL|19|496 +Brand#11|STANDARD BURNISHED TIN|23|496 +Brand#11|STANDARD POLISHED STEEL|19|496 +Brand#11|STANDARD POLISHED STEEL|36|496 +Brand#12|ECONOMY ANODIZED TIN|9|496 +Brand#12|LARGE ANODIZED COPPER|36|496 +Brand#12|LARGE BRUSHED STEEL|36|496 +Brand#12|LARGE BRUSHED TIN|36|496 +Brand#12|LARGE BURNISHED TIN|45|496 +Brand#12|MEDIUM ANODIZED TIN|19|496 +Brand#12|MEDIUM PLATED TIN|49|496 +Brand#12|PROMO ANODIZED TIN|23|496 +Brand#12|PROMO BURNISHED NICKEL|36|496 +Brand#12|SMALL POLISHED BRASS|45|496 +Brand#12|STANDARD BURNISHED STEEL|19|496 +Brand#12|STANDARD POLISHED COPPER|14|496 +Brand#13|ECONOMY ANODIZED TIN|9|496 +Brand#13|ECONOMY PLATED NICKEL|14|496 +Brand#13|LARGE ANODIZED BRASS|23|496 +Brand#13|PROMO BRUSHED TIN|9|496 +Brand#13|STANDARD PLATED NICKEL|9|496 +Brand#14|ECONOMY PLATED NICKEL|3|496 +Brand#14|LARGE POLISHED BRASS|9|496 +Brand#14|LARGE POLISHED NICKEL|45|496 +Brand#14|MEDIUM ANODIZED BRASS|9|496 +Brand#14|PROMO BRUSHED COPPER|36|496 +Brand#14|PROMO BRUSHED STEEL|36|496 +Brand#14|SMALL ANODIZED TIN|14|496 +Brand#14|STANDARD BRUSHED STEEL|3|496 +Brand#14|STANDARD PLATED TIN|3|496 +Brand#14|STANDARD POLISHED NICKEL|49|496 +Brand#15|ECONOMY BURNISHED TIN|9|496 +Brand#15|MEDIUM PLATED COPPER|36|496 +Brand#15|PROMO POLISHED NICKEL|36|496 +Brand#15|SMALL BURNISHED STEEL|49|496 +Brand#15|SMALL PLATED BRASS|36|496 +Brand#15|STANDARD ANODIZED NICKEL|23|496 +Brand#15|STANDARD POLISHED BRASS|9|496 +Brand#21|ECONOMY BURNISHED BRASS|14|496 +Brand#21|ECONOMY POLISHED TIN|3|496 +Brand#21|LARGE BRUSHED NICKEL|19|496 +Brand#21|LARGE BURNISHED NICKEL|36|496 +Brand#21|MEDIUM BRUSHED COPPER|14|496 +Brand#21|PROMO BRUSHED BRASS|45|496 +Brand#21|PROMO BURNISHED NICKEL|45|496 +Brand#21|SMALL PLATED BRASS|36|496 +Brand#21|SMALL POLISHED STEEL|3|496 +Brand#21|STANDARD POLISHED BRASS|19|496 +Brand#22|LARGE BRUSHED STEEL|3|496 +Brand#22|MEDIUM BURNISHED COPPER|49|496 +Brand#22|PROMO BRUSHED STEEL|3|496 +Brand#22|PROMO POLISHED COPPER|23|496 +Brand#22|PROMO POLISHED STEEL|23|496 +Brand#22|STANDARD BRUSHED BRASS|19|496 +Brand#23|ECONOMY BRUSHED TIN|19|496 +Brand#23|ECONOMY BURNISHED BRASS|36|496 +Brand#23|ECONOMY BURNISHED BRASS|49|496 +Brand#23|MEDIUM BRUSHED TIN|23|496 +Brand#23|MEDIUM BURNISHED COPPER|45|496 +Brand#23|MEDIUM BURNISHED STEEL|3|496 +Brand#23|MEDIUM BURNISHED TIN|9|496 +Brand#23|PROMO PLATED NICKEL|49|496 +Brand#23|SMALL POLISHED BRASS|3|496 +Brand#23|STANDARD PLATED STEEL|19|496 +Brand#23|STANDARD POLISHED TIN|45|496 +Brand#24|ECONOMY BRUSHED TIN|36|496 +Brand#24|LARGE BRUSHED STEEL|45|496 +Brand#24|LARGE BURNISHED TIN|19|496 +Brand#24|MEDIUM ANODIZED STEEL|49|496 +Brand#24|MEDIUM BURNISHED STEEL|19|496 +Brand#24|SMALL BRUSHED NICKEL|49|496 +Brand#24|SMALL POLISHED STEEL|3|496 +Brand#25|LARGE BRUSHED NICKEL|3|496 +Brand#25|MEDIUM BURNISHED STEEL|36|496 +Brand#25|MEDIUM BURNISHED STEEL|49|496 +Brand#25|PROMO ANODIZED BRASS|36|496 +Brand#25|PROMO BRUSHED BRASS|19|496 +Brand#25|PROMO BURNISHED STEEL|9|496 +Brand#25|PROMO PLATED COPPER|19|496 +Brand#25|SMALL BRUSHED COPPER|14|496 +Brand#25|STANDARD PLATED BRASS|14|496 +Brand#31|ECONOMY BRUSHED STEEL|36|496 +Brand#31|LARGE ANODIZED COPPER|19|496 +Brand#31|LARGE PLATED STEEL|36|496 +Brand#31|LARGE POLISHED BRASS|23|496 +Brand#31|MEDIUM PLATED NICKEL|49|496 +Brand#31|PROMO ANODIZED BRASS|45|496 +Brand#31|PROMO BRUSHED BRASS|14|496 +Brand#31|PROMO BURNISHED BRASS|49|496 +Brand#31|SMALL BURNISHED COPPER|45|496 +Brand#32|LARGE PLATED NICKEL|3|496 +Brand#32|MEDIUM BRUSHED COPPER|23|496 +Brand#32|MEDIUM PLATED NICKEL|19|496 +Brand#32|MEDIUM PLATED STEEL|45|496 +Brand#32|PROMO POLISHED NICKEL|3|496 +Brand#32|STANDARD BURNISHED COPPER|3|496 +Brand#32|STANDARD BURNISHED STEEL|45|496 +Brand#33|ECONOMY ANODIZED TIN|3|496 +Brand#33|LARGE POLISHED STEEL|23|496 +Brand#33|PROMO BRUSHED COPPER|49|496 +Brand#33|PROMO BURNISHED TIN|49|496 +Brand#33|SMALL BURNISHED TIN|23|496 +Brand#33|STANDARD ANODIZED NICKEL|3|496 +Brand#33|STANDARD ANODIZED NICKEL|36|496 +Brand#33|STANDARD ANODIZED TIN|49|496 +Brand#33|STANDARD BURNISHED STEEL|36|496 +Brand#33|STANDARD POLISHED BRASS|45|496 +Brand#34|ECONOMY BRUSHED COPPER|23|496 +Brand#34|ECONOMY BRUSHED STEEL|3|496 +Brand#34|MEDIUM ANODIZED NICKEL|45|496 +Brand#34|MEDIUM BRUSHED COPPER|14|496 +Brand#34|MEDIUM BRUSHED COPPER|49|496 +Brand#34|MEDIUM BURNISHED STEEL|45|496 +Brand#34|SMALL ANODIZED STEEL|49|496 +Brand#34|SMALL BURNISHED BRASS|19|496 +Brand#34|STANDARD BRUSHED NICKEL|49|496 +Brand#34|STANDARD PLATED STEEL|36|496 +Brand#35|ECONOMY PLATED COPPER|49|496 +Brand#35|MEDIUM ANODIZED COPPER|14|496 +Brand#35|MEDIUM ANODIZED NICKEL|14|496 +Brand#35|MEDIUM BURNISHED STEEL|19|496 +Brand#35|PROMO ANODIZED NICKEL|45|496 +Brand#35|SMALL POLISHED NICKEL|3|496 +Brand#41|ECONOMY ANODIZED TIN|14|496 +Brand#41|LARGE BURNISHED STEEL|23|496 +Brand#41|MEDIUM BRUSHED TIN|9|496 +Brand#41|PROMO BRUSHED COPPER|14|496 +Brand#41|SMALL BURNISHED STEEL|23|496 +Brand#42|ECONOMY BURNISHED STEEL|36|496 +Brand#42|ECONOMY PLATED BRASS|23|496 +Brand#42|LARGE BRUSHED BRASS|9|496 +Brand#42|MEDIUM PLATED TIN|3|496 +Brand#42|PROMO POLISHED COPPER|23|496 +Brand#42|SMALL BRUSHED COPPER|45|496 +Brand#42|SMALL POLISHED COPPER|36|496 +Brand#43|ECONOMY BRUSHED TIN|3|496 +Brand#43|ECONOMY BURNISHED BRASS|19|496 +Brand#43|ECONOMY PLATED NICKEL|23|496 +Brand#43|LARGE ANODIZED STEEL|49|496 +Brand#43|MEDIUM BRUSHED NICKEL|45|496 +Brand#43|PROMO ANODIZED COPPER|36|496 +Brand#43|SMALL ANODIZED TIN|36|496 +Brand#43|SMALL PLATED BRASS|45|496 +Brand#43|SMALL PLATED NICKEL|3|496 +Brand#43|STANDARD ANODIZED STEEL|23|496 +Brand#43|STANDARD BRUSHED TIN|3|496 +Brand#43|STANDARD POLISHED STEEL|45|496 +Brand#44|ECONOMY BURNISHED COPPER|14|496 +Brand#44|PROMO BURNISHED NICKEL|23|496 +Brand#44|PROMO BURNISHED TIN|49|496 +Brand#44|PROMO PLATED STEEL|36|496 +Brand#44|SMALL ANODIZED TIN|23|496 +Brand#44|SMALL PLATED STEEL|14|496 +Brand#44|STANDARD ANODIZED TIN|23|496 +Brand#44|STANDARD BRUSHED BRASS|45|496 +Brand#44|STANDARD BURNISHED STEEL|45|496 +Brand#44|STANDARD POLISHED TIN|19|496 +Brand#51|LARGE ANODIZED STEEL|45|496 +Brand#51|LARGE BRUSHED NICKEL|9|496 +Brand#51|MEDIUM PLATED STEEL|23|496 +Brand#51|PROMO ANODIZED COPPER|45|496 +Brand#51|STANDARD ANODIZED BRASS|19|496 +Brand#52|ECONOMY BURNISHED STEEL|14|496 +Brand#52|ECONOMY POLISHED TIN|9|496 +Brand#52|LARGE BRUSHED COPPER|36|496 +Brand#52|LARGE PLATED TIN|23|496 +Brand#52|MEDIUM BURNISHED COPPER|23|496 +Brand#52|MEDIUM BURNISHED NICKEL|9|496 +Brand#52|PROMO ANODIZED NICKEL|36|496 +Brand#52|PROMO POLISHED TIN|14|496 +Brand#52|SMALL BURNISHED COPPER|23|496 +Brand#52|SMALL BURNISHED NICKEL|19|496 +Brand#52|STANDARD POLISHED NICKEL|49|496 +Brand#53|LARGE PLATED BRASS|49|496 +Brand#53|MEDIUM ANODIZED TIN|36|496 +Brand#53|MEDIUM BURNISHED TIN|19|496 +Brand#53|SMALL POLISHED TIN|23|496 +Brand#54|MEDIUM ANODIZED STEEL|49|496 +Brand#54|MEDIUM ANODIZED TIN|3|496 +Brand#54|MEDIUM BRUSHED NICKEL|45|496 +Brand#54|MEDIUM PLATED COPPER|9|496 +Brand#54|SMALL POLISHED COPPER|9|496 +Brand#54|STANDARD PLATED BRASS|9|496 +Brand#55|LARGE ANODIZED NICKEL|36|496 +Brand#55|LARGE BRUSHED TIN|23|496 +Brand#55|LARGE POLISHED BRASS|9|496 +Brand#55|PROMO PLATED BRASS|19|496 +Brand#55|PROMO PLATED NICKEL|14|496 +Brand#55|SMALL PLATED COPPER|19|496 +Brand#55|SMALL POLISHED BRASS|36|496 +Brand#55|SMALL POLISHED TIN|36|496 +Brand#55|STANDARD BURNISHED NICKEL|45|496 +Brand#55|STANDARD BURNISHED TIN|9|496 +Brand#11|LARGE BURNISHED STEEL|49|495 +Brand#11|STANDARD PLATED TIN|23|495 +Brand#12|ECONOMY PLATED COPPER|9|495 +Brand#12|LARGE POLISHED COPPER|3|495 +Brand#12|MEDIUM BURNISHED COPPER|19|495 +Brand#12|PROMO PLATED BRASS|14|495 +Brand#12|SMALL ANODIZED NICKEL|45|495 +Brand#12|STANDARD POLISHED COPPER|23|495 +Brand#13|LARGE BURNISHED STEEL|14|495 +Brand#13|LARGE POLISHED BRASS|14|495 +Brand#13|LARGE POLISHED STEEL|14|495 +Brand#13|MEDIUM PLATED STEEL|14|495 +Brand#13|SMALL PLATED STEEL|45|495 +Brand#13|STANDARD BURNISHED STEEL|3|495 +Brand#14|ECONOMY PLATED NICKEL|45|495 +Brand#14|PROMO POLISHED NICKEL|9|495 +Brand#14|STANDARD BRUSHED COPPER|3|495 +Brand#21|ECONOMY PLATED TIN|14|495 +Brand#21|PROMO POLISHED BRASS|45|495 +Brand#21|STANDARD BURNISHED NICKEL|19|495 +Brand#21|STANDARD POLISHED BRASS|49|495 +Brand#22|MEDIUM BURNISHED STEEL|49|495 +Brand#23|LARGE ANODIZED BRASS|49|495 +Brand#23|LARGE BURNISHED BRASS|14|495 +Brand#23|LARGE POLISHED TIN|49|495 +Brand#23|MEDIUM ANODIZED NICKEL|36|495 +Brand#23|PROMO POLISHED BRASS|49|495 +Brand#24|PROMO PLATED BRASS|23|495 +Brand#24|STANDARD BURNISHED NICKEL|23|495 +Brand#25|STANDARD POLISHED BRASS|49|495 +Brand#31|LARGE POLISHED BRASS|9|495 +Brand#31|PROMO ANODIZED STEEL|3|495 +Brand#31|SMALL BURNISHED TIN|23|495 +Brand#32|MEDIUM ANODIZED TIN|45|495 +Brand#32|MEDIUM ANODIZED TIN|49|495 +Brand#33|ECONOMY BRUSHED NICKEL|19|495 +Brand#33|ECONOMY PLATED COPPER|9|495 +Brand#33|ECONOMY PLATED COPPER|19|495 +Brand#33|LARGE PLATED STEEL|14|495 +Brand#33|PROMO PLATED TIN|49|495 +Brand#33|SMALL ANODIZED NICKEL|9|495 +Brand#33|STANDARD POLISHED NICKEL|19|495 +Brand#34|LARGE POLISHED TIN|19|495 +Brand#34|SMALL ANODIZED BRASS|36|495 +Brand#34|SMALL PLATED NICKEL|14|495 +Brand#34|STANDARD BRUSHED STEEL|3|495 +Brand#35|LARGE PLATED BRASS|23|495 +Brand#35|STANDARD PLATED TIN|23|495 +Brand#35|STANDARD POLISHED TIN|3|495 +Brand#41|LARGE ANODIZED COPPER|45|495 +Brand#41|PROMO BRUSHED COPPER|45|495 +Brand#41|STANDARD POLISHED TIN|45|495 +Brand#42|STANDARD ANODIZED STEEL|23|495 +Brand#43|ECONOMY POLISHED TIN|45|495 +Brand#43|PROMO ANODIZED BRASS|3|495 +Brand#44|LARGE BRUSHED STEEL|3|495 +Brand#44|LARGE BURNISHED COPPER|3|495 +Brand#44|SMALL BURNISHED BRASS|45|495 +Brand#51|LARGE PLATED TIN|9|495 +Brand#51|MEDIUM ANODIZED TIN|36|495 +Brand#52|ECONOMY BRUSHED COPPER|23|495 +Brand#52|ECONOMY POLISHED BRASS|14|495 +Brand#52|ECONOMY POLISHED STEEL|36|495 +Brand#52|LARGE BRUSHED BRASS|9|495 +Brand#53|LARGE ANODIZED STEEL|36|495 +Brand#53|SMALL BURNISHED NICKEL|49|495 +Brand#53|STANDARD BURNISHED BRASS|19|495 +Brand#54|LARGE BRUSHED COPPER|19|495 +Brand#54|MEDIUM PLATED STEEL|49|495 +Brand#54|PROMO BRUSHED COPPER|23|495 +Brand#54|PROMO BRUSHED STEEL|36|495 +Brand#54|SMALL PLATED TIN|49|495 +Brand#55|ECONOMY ANODIZED COPPER|3|495 +Brand#11|LARGE ANODIZED BRASS|49|494 +Brand#11|SMALL BRUSHED BRASS|45|494 +Brand#11|SMALL POLISHED STEEL|23|494 +Brand#15|PROMO ANODIZED TIN|19|494 +Brand#23|LARGE BRUSHED BRASS|23|494 +Brand#24|SMALL POLISHED COPPER|23|494 +Brand#33|PROMO BURNISHED STEEL|19|494 +Brand#51|PROMO PLATED COPPER|45|494 +Brand#54|LARGE ANODIZED BRASS|19|494 +Brand#54|PROMO POLISHED COPPER|49|494 +Brand#55|LARGE BURNISHED NICKEL|19|494 +Brand#55|PROMO ANODIZED STEEL|19|494 +Brand#43|PROMO ANODIZED NICKEL|36|493 +Brand#11|ECONOMY ANODIZED BRASS|49|492 +Brand#11|ECONOMY BRUSHED NICKEL|23|492 +Brand#11|LARGE BRUSHED BRASS|36|492 +Brand#11|LARGE PLATED STEEL|49|492 +Brand#11|MEDIUM BURNISHED BRASS|23|492 +Brand#11|MEDIUM PLATED BRASS|36|492 +Brand#11|MEDIUM PLATED COPPER|9|492 +Brand#11|MEDIUM PLATED TIN|19|492 +Brand#11|PROMO BRUSHED STEEL|9|492 +Brand#11|PROMO BRUSHED TIN|23|492 +Brand#11|PROMO BURNISHED TIN|9|492 +Brand#11|STANDARD PLATED NICKEL|14|492 +Brand#12|ECONOMY BURNISHED TIN|49|492 +Brand#12|ECONOMY PLATED BRASS|19|492 +Brand#12|LARGE PLATED COPPER|9|492 +Brand#12|MEDIUM BURNISHED NICKEL|3|492 +Brand#12|MEDIUM BURNISHED NICKEL|23|492 +Brand#12|SMALL BURNISHED TIN|9|492 +Brand#12|SMALL POLISHED NICKEL|19|492 +Brand#12|STANDARD POLISHED COPPER|49|492 +Brand#13|ECONOMY BRUSHED NICKEL|3|492 +Brand#13|MEDIUM BURNISHED COPPER|9|492 +Brand#13|PROMO BURNISHED BRASS|36|492 +Brand#13|SMALL BRUSHED BRASS|49|492 +Brand#13|SMALL BRUSHED NICKEL|3|492 +Brand#13|SMALL BURNISHED BRASS|9|492 +Brand#13|SMALL POLISHED NICKEL|9|492 +Brand#13|STANDARD BRUSHED TIN|49|492 +Brand#13|STANDARD PLATED TIN|14|492 +Brand#14|ECONOMY POLISHED NICKEL|49|492 +Brand#14|LARGE PLATED STEEL|36|492 +Brand#14|MEDIUM BRUSHED STEEL|3|492 +Brand#14|MEDIUM PLATED NICKEL|45|492 +Brand#14|PROMO ANODIZED BRASS|49|492 +Brand#14|PROMO BRUSHED NICKEL|45|492 +Brand#14|PROMO BURNISHED NICKEL|19|492 +Brand#14|SMALL BRUSHED BRASS|23|492 +Brand#14|SMALL BURNISHED COPPER|36|492 +Brand#14|SMALL BURNISHED TIN|23|492 +Brand#14|STANDARD ANODIZED BRASS|45|492 +Brand#14|STANDARD BRUSHED BRASS|49|492 +Brand#14|STANDARD BRUSHED COPPER|23|492 +Brand#14|STANDARD BURNISHED TIN|3|492 +Brand#14|STANDARD POLISHED NICKEL|3|492 +Brand#15|ECONOMY ANODIZED STEEL|36|492 +Brand#15|LARGE ANODIZED COPPER|19|492 +Brand#15|LARGE PLATED NICKEL|49|492 +Brand#15|MEDIUM ANODIZED COPPER|14|492 +Brand#15|MEDIUM PLATED TIN|23|492 +Brand#15|SMALL POLISHED STEEL|3|492 +Brand#15|STANDARD ANODIZED BRASS|3|492 +Brand#15|STANDARD ANODIZED BRASS|45|492 +Brand#15|STANDARD BURNISHED STEEL|45|492 +Brand#21|ECONOMY BRUSHED STEEL|14|492 +Brand#21|MEDIUM PLATED COPPER|3|492 +Brand#21|PROMO BURNISHED STEEL|23|492 +Brand#21|PROMO POLISHED TIN|3|492 +Brand#21|PROMO POLISHED TIN|14|492 +Brand#21|STANDARD ANODIZED BRASS|19|492 +Brand#21|STANDARD POLISHED COPPER|3|492 +Brand#22|LARGE BRUSHED NICKEL|23|492 +Brand#22|LARGE BURNISHED COPPER|19|492 +Brand#22|MEDIUM BRUSHED STEEL|45|492 +Brand#22|PROMO ANODIZED NICKEL|9|492 +Brand#22|PROMO BRUSHED NICKEL|45|492 +Brand#22|PROMO BRUSHED TIN|45|492 +Brand#22|PROMO PLATED TIN|3|492 +Brand#22|PROMO PLATED TIN|9|492 +Brand#22|SMALL ANODIZED STEEL|49|492 +Brand#22|SMALL BURNISHED BRASS|45|492 +Brand#22|SMALL POLISHED NICKEL|14|492 +Brand#22|STANDARD ANODIZED STEEL|36|492 +Brand#22|STANDARD ANODIZED TIN|36|492 +Brand#22|STANDARD BURNISHED TIN|49|492 +Brand#22|STANDARD POLISHED BRASS|3|492 +Brand#23|ECONOMY POLISHED STEEL|23|492 +Brand#23|MEDIUM BRUSHED COPPER|19|492 +Brand#23|PROMO ANODIZED COPPER|45|492 +Brand#23|SMALL POLISHED COPPER|19|492 +Brand#23|STANDARD BURNISHED BRASS|49|492 +Brand#24|ECONOMY BRUSHED BRASS|45|492 +Brand#24|ECONOMY BRUSHED TIN|14|492 +Brand#24|LARGE BURNISHED TIN|3|492 +Brand#24|MEDIUM ANODIZED STEEL|9|492 +Brand#24|MEDIUM BURNISHED BRASS|49|492 +Brand#24|PROMO ANODIZED STEEL|19|492 +Brand#24|PROMO POLISHED COPPER|3|492 +Brand#24|STANDARD POLISHED NICKEL|23|492 +Brand#25|ECONOMY POLISHED STEEL|23|492 +Brand#25|MEDIUM PLATED BRASS|19|492 +Brand#25|SMALL PLATED STEEL|3|492 +Brand#25|STANDARD ANODIZED TIN|49|492 +Brand#31|ECONOMY PLATED NICKEL|45|492 +Brand#31|ECONOMY POLISHED NICKEL|9|492 +Brand#31|LARGE PLATED NICKEL|3|492 +Brand#31|LARGE POLISHED NICKEL|3|492 +Brand#31|MEDIUM ANODIZED TIN|19|492 +Brand#31|MEDIUM BRUSHED BRASS|36|492 +Brand#31|PROMO POLISHED NICKEL|49|492 +Brand#31|SMALL ANODIZED NICKEL|14|492 +Brand#31|SMALL PLATED NICKEL|3|492 +Brand#31|STANDARD BRUSHED BRASS|36|492 +Brand#31|STANDARD PLATED COPPER|23|492 +Brand#32|LARGE ANODIZED COPPER|49|492 +Brand#32|LARGE PLATED BRASS|14|492 +Brand#32|MEDIUM BURNISHED BRASS|23|492 +Brand#32|PROMO ANODIZED NICKEL|19|492 +Brand#32|PROMO BURNISHED BRASS|9|492 +Brand#32|PROMO BURNISHED TIN|14|492 +Brand#32|SMALL BURNISHED TIN|23|492 +Brand#32|SMALL PLATED BRASS|45|492 +Brand#33|ECONOMY ANODIZED TIN|49|492 +Brand#33|ECONOMY BRUSHED COPPER|9|492 +Brand#33|ECONOMY BRUSHED TIN|23|492 +Brand#33|ECONOMY BURNISHED NICKEL|3|492 +Brand#33|LARGE BURNISHED NICKEL|9|492 +Brand#33|LARGE PLATED NICKEL|19|492 +Brand#33|MEDIUM BRUSHED BRASS|36|492 +Brand#33|PROMO BRUSHED COPPER|9|492 +Brand#33|PROMO POLISHED COPPER|9|492 +Brand#33|SMALL ANODIZED STEEL|3|492 +Brand#33|SMALL PLATED STEEL|19|492 +Brand#33|STANDARD ANODIZED STEEL|23|492 +Brand#33|STANDARD PLATED NICKEL|9|492 +Brand#34|ECONOMY BRUSHED BRASS|14|492 +Brand#34|ECONOMY BRUSHED TIN|19|492 +Brand#34|ECONOMY BURNISHED STEEL|3|492 +Brand#34|ECONOMY POLISHED BRASS|19|492 +Brand#34|PROMO ANODIZED TIN|3|492 +Brand#34|PROMO BRUSHED STEEL|3|492 +Brand#34|SMALL BRUSHED NICKEL|19|492 +Brand#34|SMALL POLISHED TIN|49|492 +Brand#35|ECONOMY POLISHED BRASS|45|492 +Brand#35|LARGE ANODIZED NICKEL|45|492 +Brand#35|LARGE PLATED COPPER|23|492 +Brand#35|MEDIUM ANODIZED STEEL|49|492 +Brand#35|MEDIUM BRUSHED COPPER|14|492 +Brand#35|MEDIUM BRUSHED STEEL|23|492 +Brand#35|PROMO ANODIZED TIN|36|492 +Brand#35|PROMO BRUSHED BRASS|14|492 +Brand#35|PROMO BURNISHED STEEL|3|492 +Brand#35|PROMO POLISHED NICKEL|14|492 +Brand#35|SMALL POLISHED COPPER|19|492 +Brand#35|STANDARD ANODIZED TIN|23|492 +Brand#35|STANDARD BRUSHED COPPER|23|492 +Brand#41|ECONOMY PLATED COPPER|14|492 +Brand#41|LARGE ANODIZED BRASS|23|492 +Brand#41|LARGE BRUSHED NICKEL|49|492 +Brand#41|LARGE BURNISHED TIN|9|492 +Brand#41|LARGE POLISHED TIN|19|492 +Brand#41|MEDIUM BRUSHED BRASS|14|492 +Brand#41|PROMO ANODIZED BRASS|23|492 +Brand#41|PROMO PLATED BRASS|19|492 +Brand#41|SMALL PLATED BRASS|3|492 +Brand#42|LARGE ANODIZED BRASS|45|492 +Brand#42|LARGE BRUSHED STEEL|9|492 +Brand#42|MEDIUM BRUSHED COPPER|14|492 +Brand#42|MEDIUM PLATED BRASS|9|492 +Brand#42|PROMO BURNISHED STEEL|9|492 +Brand#42|PROMO PLATED TIN|14|492 +Brand#42|SMALL POLISHED COPPER|9|492 +Brand#42|STANDARD ANODIZED COPPER|23|492 +Brand#43|ECONOMY PLATED NICKEL|45|492 +Brand#43|SMALL ANODIZED BRASS|3|492 +Brand#43|SMALL BURNISHED BRASS|49|492 +Brand#43|STANDARD ANODIZED NICKEL|49|492 +Brand#43|STANDARD POLISHED NICKEL|9|492 +Brand#44|ECONOMY BURNISHED TIN|36|492 +Brand#44|LARGE BRUSHED NICKEL|45|492 +Brand#44|LARGE BURNISHED STEEL|36|492 +Brand#44|MEDIUM ANODIZED TIN|45|492 +Brand#44|MEDIUM BRUSHED TIN|3|492 +Brand#44|PROMO PLATED BRASS|23|492 +Brand#44|STANDARD ANODIZED STEEL|9|492 +Brand#51|ECONOMY BRUSHED STEEL|36|492 +Brand#51|ECONOMY BURNISHED BRASS|49|492 +Brand#51|MEDIUM BRUSHED NICKEL|19|492 +Brand#51|MEDIUM BURNISHED STEEL|19|492 +Brand#51|PROMO BURNISHED BRASS|36|492 +Brand#51|SMALL BRUSHED TIN|23|492 +Brand#51|SMALL BURNISHED NICKEL|3|492 +Brand#51|SMALL BURNISHED STEEL|14|492 +Brand#51|SMALL POLISHED BRASS|14|492 +Brand#51|STANDARD BURNISHED STEEL|9|492 +Brand#51|STANDARD PLATED COPPER|45|492 +Brand#51|STANDARD POLISHED NICKEL|49|492 +Brand#52|ECONOMY PLATED STEEL|23|492 +Brand#52|ECONOMY POLISHED BRASS|3|492 +Brand#52|ECONOMY POLISHED TIN|19|492 +Brand#52|LARGE ANODIZED BRASS|14|492 +Brand#52|LARGE BURNISHED BRASS|3|492 +Brand#52|LARGE POLISHED BRASS|23|492 +Brand#52|MEDIUM BURNISHED TIN|49|492 +Brand#52|PROMO BRUSHED BRASS|19|492 +Brand#52|PROMO BRUSHED NICKEL|14|492 +Brand#52|SMALL ANODIZED COPPER|3|492 +Brand#52|SMALL BRUSHED NICKEL|3|492 +Brand#52|SMALL BRUSHED NICKEL|36|492 +Brand#52|SMALL BURNISHED COPPER|9|492 +Brand#52|SMALL BURNISHED NICKEL|3|492 +Brand#52|SMALL PLATED COPPER|49|492 +Brand#52|SMALL POLISHED TIN|9|492 +Brand#52|STANDARD BURNISHED STEEL|19|492 +Brand#52|STANDARD PLATED TIN|49|492 +Brand#53|ECONOMY PLATED STEEL|19|492 +Brand#53|LARGE POLISHED STEEL|9|492 +Brand#53|MEDIUM PLATED TIN|23|492 +Brand#53|PROMO PLATED TIN|14|492 +Brand#53|SMALL ANODIZED BRASS|9|492 +Brand#53|SMALL BURNISHED NICKEL|23|492 +Brand#53|STANDARD BRUSHED COPPER|14|492 +Brand#53|STANDARD BURNISHED COPPER|45|492 +Brand#53|STANDARD PLATED COPPER|23|492 +Brand#54|ECONOMY BRUSHED NICKEL|36|492 +Brand#54|ECONOMY POLISHED BRASS|36|492 +Brand#54|ECONOMY POLISHED NICKEL|3|492 +Brand#54|LARGE BURNISHED COPPER|3|492 +Brand#54|LARGE PLATED BRASS|9|492 +Brand#54|MEDIUM BRUSHED BRASS|19|492 +Brand#54|PROMO ANODIZED COPPER|9|492 +Brand#54|SMALL ANODIZED NICKEL|45|492 +Brand#54|SMALL ANODIZED TIN|23|492 +Brand#54|STANDARD BRUSHED STEEL|36|492 +Brand#54|STANDARD PLATED STEEL|3|492 +Brand#55|ECONOMY ANODIZED TIN|9|492 +Brand#55|ECONOMY POLISHED COPPER|14|492 +Brand#55|LARGE BRUSHED TIN|9|492 +Brand#55|LARGE POLISHED STEEL|14|492 +Brand#55|MEDIUM BRUSHED TIN|3|492 +Brand#55|SMALL POLISHED COPPER|36|492 +Brand#55|STANDARD BURNISHED BRASS|45|492 +Brand#55|STANDARD PLATED BRASS|9|492 +Brand#55|STANDARD POLISHED STEEL|3|492 +Brand#11|PROMO PLATED COPPER|19|491 +Brand#12|LARGE PLATED STEEL|45|491 +Brand#12|SMALL PLATED STEEL|23|491 +Brand#13|ECONOMY ANODIZED TIN|36|491 +Brand#13|PROMO BURNISHED TIN|45|491 +Brand#13|PROMO PLATED BRASS|45|491 +Brand#14|SMALL PLATED STEEL|3|491 +Brand#15|LARGE PLATED STEEL|19|491 +Brand#15|SMALL BURNISHED NICKEL|49|491 +Brand#15|SMALL POLISHED BRASS|19|491 +Brand#15|SMALL POLISHED TIN|14|491 +Brand#21|LARGE BRUSHED TIN|36|491 +Brand#21|PROMO BRUSHED BRASS|3|491 +Brand#21|STANDARD BURNISHED COPPER|9|491 +Brand#23|LARGE POLISHED NICKEL|49|491 +Brand#23|MEDIUM BRUSHED NICKEL|49|491 +Brand#23|PROMO ANODIZED NICKEL|3|491 +Brand#23|PROMO BRUSHED TIN|49|491 +Brand#23|STANDARD BURNISHED COPPER|19|491 +Brand#23|STANDARD POLISHED STEEL|23|491 +Brand#24|ECONOMY BURNISHED COPPER|19|491 +Brand#24|ECONOMY POLISHED STEEL|19|491 +Brand#24|SMALL BURNISHED TIN|36|491 +Brand#25|LARGE ANODIZED COPPER|19|491 +Brand#25|MEDIUM ANODIZED COPPER|45|491 +Brand#25|MEDIUM PLATED STEEL|19|491 +Brand#25|STANDARD BURNISHED BRASS|49|491 +Brand#31|PROMO POLISHED TIN|9|491 +Brand#32|PROMO BURNISHED STEEL|45|491 +Brand#32|SMALL BURNISHED STEEL|9|491 +Brand#33|STANDARD PLATED COPPER|3|491 +Brand#34|ECONOMY POLISHED STEEL|3|491 +Brand#34|MEDIUM ANODIZED COPPER|3|491 +Brand#35|ECONOMY BURNISHED COPPER|49|491 +Brand#35|PROMO BURNISHED NICKEL|19|491 +Brand#35|STANDARD ANODIZED STEEL|23|491 +Brand#35|STANDARD BURNISHED BRASS|14|491 +Brand#41|ECONOMY BURNISHED COPPER|14|491 +Brand#41|STANDARD BRUSHED TIN|45|491 +Brand#42|PROMO PLATED BRASS|3|491 +Brand#43|ECONOMY BRUSHED BRASS|19|491 +Brand#43|LARGE ANODIZED TIN|14|491 +Brand#43|LARGE ANODIZED TIN|36|491 +Brand#43|LARGE BURNISHED TIN|19|491 +Brand#43|MEDIUM PLATED TIN|49|491 +Brand#44|PROMO ANODIZED TIN|23|491 +Brand#44|PROMO BRUSHED STEEL|23|491 +Brand#44|SMALL POLISHED BRASS|23|491 +Brand#51|ECONOMY BRUSHED COPPER|23|491 +Brand#51|LARGE PLATED TIN|36|491 +Brand#51|LARGE POLISHED TIN|19|491 +Brand#52|ECONOMY POLISHED BRASS|36|491 +Brand#52|PROMO BURNISHED BRASS|9|491 +Brand#53|ECONOMY PLATED BRASS|23|491 +Brand#53|MEDIUM PLATED STEEL|45|491 +Brand#54|SMALL PLATED COPPER|36|491 +Brand#54|STANDARD PLATED NICKEL|45|491 +Brand#13|LARGE ANODIZED BRASS|49|490 +Brand#13|PROMO BURNISHED TIN|19|490 +Brand#21|LARGE BURNISHED STEEL|19|490 +Brand#23|ECONOMY BRUSHED COPPER|9|490 +Brand#23|LARGE BURNISHED BRASS|19|490 +Brand#23|SMALL PLATED BRASS|49|490 +Brand#24|SMALL PLATED BRASS|3|490 +Brand#41|SMALL ANODIZED BRASS|36|490 +Brand#42|MEDIUM BURNISHED COPPER|14|490 +Brand#42|STANDARD ANODIZED NICKEL|36|490 +Brand#42|STANDARD BRUSHED TIN|19|490 +Brand#44|ECONOMY BRUSHED BRASS|9|490 +Brand#52|ECONOMY ANODIZED BRASS|14|490 +Brand#53|ECONOMY PLATED STEEL|14|490 +Brand#53|MEDIUM BURNISHED TIN|23|490 +Brand#11|ECONOMY ANODIZED NICKEL|36|488 +Brand#11|ECONOMY BRUSHED BRASS|19|488 +Brand#11|ECONOMY PLATED STEEL|23|488 +Brand#11|ECONOMY POLISHED STEEL|9|488 +Brand#11|LARGE ANODIZED TIN|36|488 +Brand#11|LARGE BRUSHED COPPER|14|488 +Brand#11|LARGE BRUSHED STEEL|19|488 +Brand#11|PROMO ANODIZED NICKEL|49|488 +Brand#11|PROMO BRUSHED STEEL|14|488 +Brand#11|PROMO PLATED COPPER|49|488 +Brand#11|SMALL BURNISHED STEEL|9|488 +Brand#11|SMALL PLATED STEEL|9|488 +Brand#11|STANDARD BRUSHED BRASS|14|488 +Brand#11|STANDARD BURNISHED BRASS|45|488 +Brand#11|STANDARD PLATED STEEL|23|488 +Brand#12|ECONOMY POLISHED STEEL|19|488 +Brand#12|ECONOMY POLISHED TIN|45|488 +Brand#12|LARGE ANODIZED COPPER|45|488 +Brand#12|LARGE BRUSHED NICKEL|19|488 +Brand#12|LARGE BRUSHED TIN|14|488 +Brand#12|LARGE PLATED STEEL|19|488 +Brand#12|MEDIUM BURNISHED NICKEL|9|488 +Brand#12|MEDIUM PLATED TIN|36|488 +Brand#12|SMALL BURNISHED STEEL|45|488 +Brand#12|SMALL PLATED BRASS|3|488 +Brand#12|SMALL PLATED COPPER|3|488 +Brand#12|STANDARD ANODIZED TIN|36|488 +Brand#12|STANDARD BURNISHED STEEL|23|488 +Brand#12|STANDARD POLISHED STEEL|23|488 +Brand#13|ECONOMY ANODIZED STEEL|36|488 +Brand#13|ECONOMY BURNISHED TIN|45|488 +Brand#13|ECONOMY PLATED TIN|49|488 +Brand#13|LARGE BRUSHED COPPER|36|488 +Brand#13|LARGE PLATED NICKEL|3|488 +Brand#13|LARGE POLISHED NICKEL|23|488 +Brand#13|SMALL POLISHED BRASS|36|488 +Brand#14|ECONOMY ANODIZED BRASS|9|488 +Brand#14|ECONOMY ANODIZED TIN|36|488 +Brand#14|LARGE BURNISHED COPPER|36|488 +Brand#14|MEDIUM ANODIZED BRASS|23|488 +Brand#14|MEDIUM ANODIZED COPPER|19|488 +Brand#14|PROMO ANODIZED NICKEL|9|488 +Brand#14|PROMO POLISHED COPPER|36|488 +Brand#14|SMALL ANODIZED NICKEL|36|488 +Brand#14|SMALL PLATED NICKEL|49|488 +Brand#15|ECONOMY BRUSHED STEEL|9|488 +Brand#15|ECONOMY BRUSHED TIN|49|488 +Brand#15|ECONOMY BURNISHED BRASS|9|488 +Brand#15|MEDIUM PLATED STEEL|45|488 +Brand#15|MEDIUM PLATED TIN|45|488 +Brand#15|PROMO ANODIZED TIN|36|488 +Brand#15|PROMO POLISHED TIN|23|488 +Brand#15|SMALL BURNISHED STEEL|14|488 +Brand#15|SMALL BURNISHED TIN|14|488 +Brand#15|SMALL PLATED NICKEL|9|488 +Brand#15|STANDARD POLISHED COPPER|3|488 +Brand#21|ECONOMY POLISHED BRASS|36|488 +Brand#21|LARGE BURNISHED TIN|19|488 +Brand#21|MEDIUM PLATED COPPER|14|488 +Brand#21|PROMO PLATED BRASS|23|488 +Brand#21|SMALL ANODIZED TIN|3|488 +Brand#21|SMALL BRUSHED NICKEL|9|488 +Brand#21|SMALL POLISHED BRASS|3|488 +Brand#21|STANDARD BURNISHED STEEL|3|488 +Brand#22|ECONOMY ANODIZED BRASS|3|488 +Brand#22|ECONOMY POLISHED STEEL|9|488 +Brand#22|MEDIUM BURNISHED TIN|49|488 +Brand#22|PROMO PLATED NICKEL|23|488 +Brand#22|SMALL PLATED BRASS|49|488 +Brand#22|STANDARD BURNISHED BRASS|36|488 +Brand#22|STANDARD POLISHED COPPER|3|488 +Brand#22|STANDARD POLISHED NICKEL|14|488 +Brand#22|STANDARD POLISHED STEEL|14|488 +Brand#23|ECONOMY PLATED BRASS|3|488 +Brand#23|ECONOMY PLATED BRASS|45|488 +Brand#23|LARGE ANODIZED BRASS|36|488 +Brand#23|LARGE PLATED COPPER|14|488 +Brand#23|LARGE PLATED NICKEL|36|488 +Brand#23|MEDIUM ANODIZED BRASS|14|488 +Brand#23|MEDIUM ANODIZED STEEL|49|488 +Brand#23|MEDIUM BURNISHED COPPER|19|488 +Brand#23|PROMO BURNISHED STEEL|19|488 +Brand#23|PROMO POLISHED TIN|45|488 +Brand#23|SMALL ANODIZED NICKEL|14|488 +Brand#23|SMALL POLISHED NICKEL|49|488 +Brand#23|STANDARD PLATED BRASS|45|488 +Brand#24|ECONOMY ANODIZED STEEL|45|488 +Brand#24|ECONOMY BRUSHED STEEL|19|488 +Brand#24|MEDIUM ANODIZED TIN|36|488 +Brand#24|MEDIUM BRUSHED TIN|49|488 +Brand#24|PROMO ANODIZED BRASS|36|488 +Brand#24|STANDARD ANODIZED NICKEL|9|488 +Brand#24|STANDARD PLATED BRASS|14|488 +Brand#25|LARGE BURNISHED NICKEL|3|488 +Brand#25|LARGE BURNISHED STEEL|23|488 +Brand#25|LARGE POLISHED COPPER|3|488 +Brand#25|MEDIUM BURNISHED BRASS|14|488 +Brand#25|PROMO ANODIZED STEEL|49|488 +Brand#25|PROMO BURNISHED COPPER|49|488 +Brand#25|SMALL BURNISHED COPPER|23|488 +Brand#25|STANDARD ANODIZED COPPER|36|488 +Brand#25|STANDARD BURNISHED NICKEL|9|488 +Brand#31|ECONOMY ANODIZED NICKEL|19|488 +Brand#31|ECONOMY BRUSHED STEEL|23|488 +Brand#31|ECONOMY POLISHED NICKEL|14|488 +Brand#31|LARGE BRUSHED NICKEL|9|488 +Brand#31|LARGE BURNISHED BRASS|23|488 +Brand#31|LARGE BURNISHED COPPER|3|488 +Brand#31|MEDIUM BRUSHED BRASS|9|488 +Brand#31|PROMO ANODIZED NICKEL|23|488 +Brand#31|SMALL ANODIZED COPPER|19|488 +Brand#31|SMALL BURNISHED BRASS|49|488 +Brand#31|SMALL BURNISHED STEEL|9|488 +Brand#31|STANDARD POLISHED NICKEL|19|488 +Brand#32|ECONOMY BRUSHED BRASS|45|488 +Brand#32|LARGE ANODIZED NICKEL|3|488 +Brand#32|LARGE BRUSHED TIN|45|488 +Brand#32|PROMO POLISHED STEEL|9|488 +Brand#32|SMALL ANODIZED NICKEL|9|488 +Brand#32|STANDARD ANODIZED NICKEL|3|488 +Brand#32|STANDARD PLATED TIN|36|488 +Brand#33|ECONOMY POLISHED TIN|9|488 +Brand#33|LARGE BRUSHED NICKEL|14|488 +Brand#33|MEDIUM BURNISHED NICKEL|19|488 +Brand#33|PROMO ANODIZED TIN|19|488 +Brand#33|SMALL PLATED NICKEL|36|488 +Brand#33|STANDARD BURNISHED STEEL|19|488 +Brand#34|ECONOMY ANODIZED NICKEL|9|488 +Brand#34|ECONOMY ANODIZED STEEL|3|488 +Brand#34|ECONOMY BRUSHED COPPER|3|488 +Brand#34|ECONOMY BURNISHED TIN|3|488 +Brand#34|ECONOMY PLATED TIN|19|488 +Brand#34|LARGE BRUSHED BRASS|14|488 +Brand#34|LARGE BRUSHED STEEL|19|488 +Brand#34|LARGE PLATED TIN|14|488 +Brand#34|MEDIUM BRUSHED BRASS|23|488 +Brand#34|PROMO BURNISHED TIN|23|488 +Brand#35|ECONOMY PLATED COPPER|9|488 +Brand#35|LARGE BRUSHED BRASS|14|488 +Brand#35|LARGE PLATED TIN|19|488 +Brand#35|MEDIUM BRUSHED STEEL|19|488 +Brand#35|PROMO BURNISHED NICKEL|9|488 +Brand#35|SMALL ANODIZED TIN|9|488 +Brand#35|SMALL BURNISHED TIN|36|488 +Brand#35|SMALL PLATED COPPER|19|488 +Brand#35|STANDARD BRUSHED TIN|9|488 +Brand#35|STANDARD BURNISHED COPPER|9|488 +Brand#41|ECONOMY BURNISHED NICKEL|23|488 +Brand#41|ECONOMY BURNISHED STEEL|49|488 +Brand#41|ECONOMY POLISHED TIN|19|488 +Brand#41|LARGE BURNISHED BRASS|23|488 +Brand#41|SMALL BURNISHED TIN|19|488 +Brand#41|SMALL PLATED BRASS|19|488 +Brand#41|SMALL POLISHED STEEL|49|488 +Brand#41|STANDARD ANODIZED COPPER|45|488 +Brand#41|STANDARD BRUSHED NICKEL|49|488 +Brand#41|STANDARD POLISHED COPPER|19|488 +Brand#42|ECONOMY ANODIZED BRASS|19|488 +Brand#42|ECONOMY BRUSHED TIN|3|488 +Brand#42|ECONOMY PLATED BRASS|45|488 +Brand#42|ECONOMY POLISHED TIN|9|488 +Brand#42|LARGE ANODIZED STEEL|19|488 +Brand#42|LARGE BURNISHED TIN|45|488 +Brand#42|MEDIUM ANODIZED COPPER|3|488 +Brand#42|MEDIUM BRUSHED BRASS|49|488 +Brand#42|PROMO BURNISHED BRASS|49|488 +Brand#42|PROMO BURNISHED STEEL|14|488 +Brand#42|SMALL BRUSHED BRASS|23|488 +Brand#42|SMALL BURNISHED BRASS|9|488 +Brand#43|ECONOMY POLISHED TIN|23|488 +Brand#43|ECONOMY POLISHED TIN|36|488 +Brand#43|LARGE POLISHED BRASS|36|488 +Brand#43|MEDIUM BURNISHED COPPER|49|488 +Brand#43|PROMO BRUSHED BRASS|3|488 +Brand#43|PROMO BURNISHED COPPER|3|488 +Brand#43|PROMO POLISHED BRASS|49|488 +Brand#43|SMALL BRUSHED STEEL|14|488 +Brand#44|ECONOMY BURNISHED STEEL|49|488 +Brand#44|ECONOMY PLATED STEEL|49|488 +Brand#44|ECONOMY PLATED TIN|23|488 +Brand#44|LARGE ANODIZED BRASS|49|488 +Brand#44|LARGE ANODIZED TIN|3|488 +Brand#44|LARGE PLATED NICKEL|23|488 +Brand#44|MEDIUM ANODIZED COPPER|19|488 +Brand#44|PROMO ANODIZED BRASS|3|488 +Brand#44|PROMO ANODIZED NICKEL|36|488 +Brand#44|SMALL ANODIZED NICKEL|23|488 +Brand#44|SMALL BRUSHED NICKEL|19|488 +Brand#44|SMALL POLISHED STEEL|36|488 +Brand#44|STANDARD BRUSHED TIN|23|488 +Brand#51|ECONOMY BRUSHED NICKEL|36|488 +Brand#51|LARGE BURNISHED BRASS|14|488 +Brand#51|LARGE PLATED NICKEL|36|488 +Brand#51|LARGE POLISHED TIN|45|488 +Brand#51|MEDIUM BRUSHED NICKEL|49|488 +Brand#51|SMALL POLISHED COPPER|3|488 +Brand#51|STANDARD ANODIZED NICKEL|49|488 +Brand#52|ECONOMY BRUSHED TIN|23|488 +Brand#52|ECONOMY BRUSHED TIN|49|488 +Brand#52|ECONOMY POLISHED TIN|45|488 +Brand#52|LARGE BRUSHED STEEL|14|488 +Brand#52|MEDIUM BRUSHED TIN|9|488 +Brand#52|PROMO POLISHED TIN|36|488 +Brand#52|SMALL PLATED COPPER|23|488 +Brand#52|SMALL PLATED STEEL|9|488 +Brand#52|STANDARD ANODIZED COPPER|45|488 +Brand#52|STANDARD BURNISHED BRASS|19|488 +Brand#52|STANDARD PLATED COPPER|49|488 +Brand#53|ECONOMY BRUSHED NICKEL|14|488 +Brand#53|ECONOMY BURNISHED TIN|36|488 +Brand#53|ECONOMY PLATED COPPER|3|488 +Brand#53|ECONOMY PLATED COPPER|45|488 +Brand#53|ECONOMY POLISHED BRASS|23|488 +Brand#53|LARGE ANODIZED STEEL|14|488 +Brand#53|LARGE BURNISHED BRASS|14|488 +Brand#53|MEDIUM BRUSHED NICKEL|49|488 +Brand#53|MEDIUM BURNISHED TIN|36|488 +Brand#53|PROMO BURNISHED BRASS|36|488 +Brand#53|SMALL BRUSHED STEEL|45|488 +Brand#53|SMALL PLATED COPPER|9|488 +Brand#53|STANDARD ANODIZED COPPER|3|488 +Brand#54|ECONOMY POLISHED BRASS|14|488 +Brand#54|ECONOMY POLISHED COPPER|14|488 +Brand#54|LARGE PLATED BRASS|3|488 +Brand#54|LARGE PLATED NICKEL|19|488 +Brand#54|LARGE POLISHED NICKEL|49|488 +Brand#54|MEDIUM ANODIZED COPPER|14|488 +Brand#54|MEDIUM BRUSHED COPPER|9|488 +Brand#54|MEDIUM BRUSHED COPPER|49|488 +Brand#54|MEDIUM BURNISHED BRASS|19|488 +Brand#54|MEDIUM BURNISHED NICKEL|19|488 +Brand#54|PROMO ANODIZED COPPER|23|488 +Brand#54|PROMO BRUSHED BRASS|45|488 +Brand#54|SMALL BURNISHED BRASS|14|488 +Brand#54|SMALL BURNISHED NICKEL|14|488 +Brand#54|SMALL BURNISHED NICKEL|45|488 +Brand#54|SMALL POLISHED STEEL|14|488 +Brand#54|STANDARD BRUSHED STEEL|45|488 +Brand#55|ECONOMY ANODIZED NICKEL|23|488 +Brand#55|ECONOMY BRUSHED COPPER|9|488 +Brand#55|ECONOMY BRUSHED STEEL|14|488 +Brand#55|ECONOMY BURNISHED TIN|14|488 +Brand#55|ECONOMY PLATED COPPER|45|488 +Brand#55|ECONOMY PLATED STEEL|19|488 +Brand#55|ECONOMY POLISHED NICKEL|45|488 +Brand#55|LARGE BURNISHED COPPER|14|488 +Brand#55|LARGE PLATED COPPER|3|488 +Brand#55|MEDIUM ANODIZED COPPER|36|488 +Brand#55|PROMO ANODIZED COPPER|23|488 +Brand#55|PROMO ANODIZED NICKEL|49|488 +Brand#55|SMALL BURNISHED TIN|36|488 +Brand#11|LARGE BURNISHED COPPER|23|487 +Brand#11|PROMO BURNISHED STEEL|23|487 +Brand#11|SMALL BURNISHED STEEL|23|487 +Brand#12|LARGE POLISHED COPPER|36|487 +Brand#12|LARGE POLISHED NICKEL|19|487 +Brand#12|PROMO BURNISHED COPPER|3|487 +Brand#12|PROMO POLISHED STEEL|14|487 +Brand#12|SMALL ANODIZED STEEL|9|487 +Brand#13|ECONOMY ANODIZED NICKEL|14|487 +Brand#14|ECONOMY BURNISHED STEEL|49|487 +Brand#14|LARGE POLISHED STEEL|9|487 +Brand#14|MEDIUM ANODIZED COPPER|9|487 +Brand#14|MEDIUM ANODIZED TIN|23|487 +Brand#14|MEDIUM BURNISHED STEEL|36|487 +Brand#14|PROMO ANODIZED STEEL|49|487 +Brand#14|PROMO PLATED BRASS|19|487 +Brand#14|STANDARD POLISHED COPPER|3|487 +Brand#15|MEDIUM ANODIZED NICKEL|49|487 +Brand#15|SMALL BRUSHED COPPER|9|487 +Brand#21|ECONOMY ANODIZED TIN|45|487 +Brand#21|MEDIUM BRUSHED NICKEL|14|487 +Brand#21|SMALL BURNISHED BRASS|3|487 +Brand#21|SMALL PLATED NICKEL|3|487 +Brand#21|SMALL PLATED NICKEL|14|487 +Brand#21|STANDARD BRUSHED STEEL|45|487 +Brand#21|STANDARD POLISHED COPPER|9|487 +Brand#22|LARGE ANODIZED COPPER|45|487 +Brand#22|MEDIUM ANODIZED BRASS|3|487 +Brand#22|PROMO PLATED COPPER|14|487 +Brand#22|PROMO PLATED NICKEL|14|487 +Brand#22|SMALL BURNISHED TIN|19|487 +Brand#23|ECONOMY ANODIZED STEEL|14|487 +Brand#23|ECONOMY BRUSHED TIN|3|487 +Brand#23|LARGE BRUSHED COPPER|49|487 +Brand#23|MEDIUM ANODIZED BRASS|3|487 +Brand#23|PROMO ANODIZED BRASS|3|487 +Brand#23|STANDARD BURNISHED NICKEL|36|487 +Brand#24|ECONOMY PLATED BRASS|49|487 +Brand#24|ECONOMY POLISHED BRASS|19|487 +Brand#24|MEDIUM BRUSHED STEEL|45|487 +Brand#25|ECONOMY PLATED NICKEL|14|487 +Brand#25|LARGE BRUSHED BRASS|3|487 +Brand#25|MEDIUM BRUSHED BRASS|49|487 +Brand#31|LARGE POLISHED COPPER|3|487 +Brand#31|MEDIUM BURNISHED NICKEL|3|487 +Brand#31|PROMO BURNISHED STEEL|14|487 +Brand#32|MEDIUM BURNISHED STEEL|9|487 +Brand#32|PROMO BRUSHED TIN|3|487 +Brand#32|SMALL BRUSHED BRASS|9|487 +Brand#32|SMALL BURNISHED TIN|19|487 +Brand#32|STANDARD BRUSHED STEEL|49|487 +Brand#34|ECONOMY PLATED STEEL|19|487 +Brand#34|LARGE POLISHED TIN|45|487 +Brand#34|MEDIUM BURNISHED STEEL|49|487 +Brand#35|ECONOMY BURNISHED STEEL|36|487 +Brand#35|STANDARD ANODIZED COPPER|23|487 +Brand#41|LARGE ANODIZED COPPER|49|487 +Brand#41|MEDIUM BURNISHED COPPER|9|487 +Brand#41|PROMO BRUSHED TIN|36|487 +Brand#41|SMALL BURNISHED TIN|45|487 +Brand#41|STANDARD PLATED COPPER|3|487 +Brand#41|STANDARD PLATED TIN|9|487 +Brand#42|ECONOMY ANODIZED BRASS|14|487 +Brand#42|SMALL POLISHED COPPER|49|487 +Brand#42|STANDARD PLATED STEEL|23|487 +Brand#43|ECONOMY PLATED BRASS|19|487 +Brand#43|LARGE BRUSHED STEEL|23|487 +Brand#43|MEDIUM ANODIZED BRASS|49|487 +Brand#43|PROMO POLISHED BRASS|36|487 +Brand#44|ECONOMY BURNISHED BRASS|49|487 +Brand#44|ECONOMY BURNISHED STEEL|19|487 +Brand#44|LARGE POLISHED BRASS|36|487 +Brand#44|STANDARD ANODIZED NICKEL|23|487 +Brand#51|ECONOMY PLATED BRASS|14|487 +Brand#51|MEDIUM ANODIZED NICKEL|9|487 +Brand#51|STANDARD ANODIZED BRASS|3|487 +Brand#52|LARGE POLISHED STEEL|14|487 +Brand#53|ECONOMY BURNISHED BRASS|14|487 +Brand#53|ECONOMY PLATED NICKEL|3|487 +Brand#53|LARGE ANODIZED NICKEL|23|487 +Brand#53|MEDIUM ANODIZED BRASS|9|487 +Brand#53|PROMO ANODIZED STEEL|3|487 +Brand#53|PROMO BRUSHED NICKEL|19|487 +Brand#53|PROMO POLISHED BRASS|19|487 +Brand#53|STANDARD POLISHED BRASS|23|487 +Brand#54|LARGE PLATED TIN|9|487 +Brand#54|LARGE POLISHED COPPER|9|487 +Brand#55|LARGE BRUSHED NICKEL|14|487 +Brand#55|LARGE PLATED COPPER|14|487 +Brand#55|SMALL ANODIZED COPPER|23|487 +Brand#55|SMALL BURNISHED NICKEL|3|487 +Brand#55|STANDARD ANODIZED COPPER|9|487 +Brand#55|STANDARD ANODIZED STEEL|23|487 +Brand#55|STANDARD PLATED NICKEL|9|487 +Brand#22|ECONOMY POLISHED STEEL|19|486 +Brand#24|ECONOMY ANODIZED NICKEL|36|486 +Brand#25|LARGE POLISHED COPPER|9|486 +Brand#25|MEDIUM ANODIZED TIN|19|486 +Brand#31|MEDIUM ANODIZED COPPER|19|486 +Brand#34|LARGE PLATED COPPER|36|486 +Brand#34|MEDIUM BURNISHED COPPER|23|486 +Brand#35|PROMO BRUSHED STEEL|14|486 +Brand#41|ECONOMY PLATED TIN|9|486 +Brand#44|PROMO BURNISHED COPPER|45|486 +Brand#53|MEDIUM BRUSHED COPPER|19|486 +Brand#53|SMALL PLATED STEEL|23|486 +Brand#54|ECONOMY PLATED STEEL|14|486 +Brand#44|SMALL POLISHED COPPER|3|485 +Brand#55|MEDIUM PLATED NICKEL|23|485 +Brand#11|ECONOMY BURNISHED NICKEL|9|484 +Brand#11|LARGE BRUSHED BRASS|9|484 +Brand#11|LARGE PLATED NICKEL|3|484 +Brand#11|MEDIUM BRUSHED BRASS|14|484 +Brand#11|PROMO BURNISHED COPPER|3|484 +Brand#11|SMALL BURNISHED NICKEL|3|484 +Brand#11|SMALL BURNISHED NICKEL|36|484 +Brand#11|SMALL POLISHED COPPER|9|484 +Brand#11|STANDARD BURNISHED BRASS|3|484 +Brand#11|STANDARD BURNISHED COPPER|9|484 +Brand#11|STANDARD BURNISHED COPPER|23|484 +Brand#11|STANDARD POLISHED COPPER|23|484 +Brand#11|STANDARD POLISHED COPPER|49|484 +Brand#11|STANDARD POLISHED TIN|19|484 +Brand#12|ECONOMY ANODIZED TIN|14|484 +Brand#12|ECONOMY BRUSHED NICKEL|23|484 +Brand#12|LARGE ANODIZED COPPER|14|484 +Brand#12|LARGE PLATED BRASS|23|484 +Brand#12|MEDIUM ANODIZED BRASS|14|484 +Brand#12|MEDIUM BURNISHED BRASS|9|484 +Brand#12|MEDIUM PLATED NICKEL|19|484 +Brand#12|PROMO BRUSHED NICKEL|36|484 +Brand#12|PROMO PLATED STEEL|36|484 +Brand#12|SMALL PLATED NICKEL|49|484 +Brand#12|STANDARD BRUSHED NICKEL|23|484 +Brand#12|STANDARD BURNISHED STEEL|14|484 +Brand#13|ECONOMY BRUSHED BRASS|49|484 +Brand#13|LARGE BURNISHED NICKEL|36|484 +Brand#13|LARGE BURNISHED TIN|14|484 +Brand#13|PROMO BRUSHED BRASS|23|484 +Brand#13|PROMO BRUSHED STEEL|19|484 +Brand#13|STANDARD BRUSHED COPPER|49|484 +Brand#14|ECONOMY BRUSHED STEEL|45|484 +Brand#14|ECONOMY BURNISHED BRASS|14|484 +Brand#14|ECONOMY POLISHED TIN|9|484 +Brand#14|LARGE ANODIZED COPPER|9|484 +Brand#14|LARGE ANODIZED STEEL|45|484 +Brand#14|LARGE ANODIZED TIN|45|484 +Brand#14|LARGE BRUSHED BRASS|3|484 +Brand#14|LARGE BURNISHED BRASS|9|484 +Brand#14|LARGE POLISHED TIN|49|484 +Brand#14|MEDIUM PLATED TIN|45|484 +Brand#14|PROMO BRUSHED NICKEL|14|484 +Brand#14|SMALL BURNISHED COPPER|3|484 +Brand#14|SMALL POLISHED COPPER|9|484 +Brand#14|STANDARD ANODIZED COPPER|49|484 +Brand#14|STANDARD BURNISHED STEEL|14|484 +Brand#14|STANDARD PLATED STEEL|3|484 +Brand#14|STANDARD PLATED TIN|23|484 +Brand#14|STANDARD POLISHED BRASS|36|484 +Brand#14|STANDARD POLISHED COPPER|23|484 +Brand#15|ECONOMY POLISHED COPPER|49|484 +Brand#15|LARGE BURNISHED STEEL|36|484 +Brand#15|LARGE PLATED COPPER|45|484 +Brand#15|LARGE POLISHED COPPER|9|484 +Brand#15|LARGE POLISHED NICKEL|36|484 +Brand#15|MEDIUM ANODIZED NICKEL|3|484 +Brand#15|SMALL PLATED BRASS|9|484 +Brand#15|STANDARD BURNISHED NICKEL|9|484 +Brand#21|ECONOMY PLATED BRASS|23|484 +Brand#21|LARGE PLATED BRASS|45|484 +Brand#21|MEDIUM BURNISHED STEEL|36|484 +Brand#21|PROMO POLISHED STEEL|3|484 +Brand#21|SMALL BRUSHED BRASS|19|484 +Brand#21|STANDARD ANODIZED NICKEL|14|484 +Brand#21|STANDARD BURNISHED NICKEL|45|484 +Brand#21|STANDARD BURNISHED STEEL|49|484 +Brand#21|STANDARD POLISHED STEEL|36|484 +Brand#22|ECONOMY POLISHED NICKEL|45|484 +Brand#22|LARGE ANODIZED COPPER|49|484 +Brand#22|LARGE BURNISHED COPPER|3|484 +Brand#22|LARGE PLATED COPPER|14|484 +Brand#22|PROMO ANODIZED COPPER|23|484 +Brand#22|PROMO PLATED COPPER|23|484 +Brand#22|PROMO PLATED NICKEL|19|484 +Brand#22|SMALL PLATED NICKEL|36|484 +Brand#22|STANDARD PLATED BRASS|49|484 +Brand#22|STANDARD PLATED COPPER|19|484 +Brand#23|ECONOMY ANODIZED TIN|14|484 +Brand#23|LARGE ANODIZED COPPER|23|484 +Brand#23|LARGE BURNISHED NICKEL|3|484 +Brand#23|LARGE PLATED STEEL|19|484 +Brand#23|LARGE POLISHED STEEL|49|484 +Brand#23|MEDIUM ANODIZED COPPER|45|484 +Brand#23|MEDIUM BRUSHED NICKEL|9|484 +Brand#23|PROMO BURNISHED BRASS|14|484 +Brand#23|PROMO PLATED TIN|45|484 +Brand#23|SMALL ANODIZED STEEL|49|484 +Brand#23|SMALL PLATED STEEL|49|484 +Brand#23|STANDARD BURNISHED COPPER|3|484 +Brand#24|ECONOMY PLATED BRASS|23|484 +Brand#24|ECONOMY POLISHED TIN|23|484 +Brand#24|LARGE POLISHED BRASS|45|484 +Brand#24|PROMO BRUSHED STEEL|9|484 +Brand#24|PROMO BURNISHED COPPER|45|484 +Brand#24|PROMO BURNISHED NICKEL|19|484 +Brand#24|PROMO PLATED BRASS|3|484 +Brand#24|SMALL BURNISHED TIN|3|484 +Brand#24|SMALL POLISHED STEEL|14|484 +Brand#24|SMALL POLISHED TIN|45|484 +Brand#24|STANDARD BURNISHED BRASS|36|484 +Brand#24|STANDARD BURNISHED NICKEL|36|484 +Brand#24|STANDARD POLISHED COPPER|9|484 +Brand#24|STANDARD POLISHED NICKEL|14|484 +Brand#25|ECONOMY BRUSHED NICKEL|3|484 +Brand#25|ECONOMY BRUSHED STEEL|19|484 +Brand#25|ECONOMY BRUSHED TIN|14|484 +Brand#25|ECONOMY BRUSHED TIN|23|484 +Brand#25|ECONOMY PLATED BRASS|36|484 +Brand#25|ECONOMY PLATED COPPER|45|484 +Brand#25|LARGE PLATED COPPER|45|484 +Brand#25|LARGE POLISHED BRASS|14|484 +Brand#25|PROMO PLATED NICKEL|19|484 +Brand#25|SMALL BURNISHED BRASS|14|484 +Brand#25|SMALL BURNISHED TIN|14|484 +Brand#25|SMALL PLATED COPPER|36|484 +Brand#25|SMALL POLISHED STEEL|14|484 +Brand#25|STANDARD ANODIZED NICKEL|45|484 +Brand#25|STANDARD BURNISHED NICKEL|23|484 +Brand#25|STANDARD PLATED COPPER|49|484 +Brand#31|ECONOMY BRUSHED TIN|14|484 +Brand#31|ECONOMY BURNISHED COPPER|49|484 +Brand#31|LARGE BRUSHED TIN|14|484 +Brand#31|MEDIUM BRUSHED TIN|14|484 +Brand#31|MEDIUM PLATED STEEL|36|484 +Brand#31|SMALL ANODIZED COPPER|23|484 +Brand#31|SMALL ANODIZED TIN|3|484 +Brand#31|STANDARD ANODIZED BRASS|45|484 +Brand#32|ECONOMY BRUSHED COPPER|14|484 +Brand#32|ECONOMY PLATED BRASS|9|484 +Brand#32|ECONOMY PLATED COPPER|19|484 +Brand#32|LARGE PLATED BRASS|36|484 +Brand#32|MEDIUM ANODIZED TIN|3|484 +Brand#32|MEDIUM BURNISHED TIN|9|484 +Brand#32|PROMO BRUSHED TIN|14|484 +Brand#32|PROMO BRUSHED TIN|19|484 +Brand#32|PROMO BURNISHED TIN|9|484 +Brand#32|SMALL BURNISHED BRASS|9|484 +Brand#32|STANDARD BRUSHED COPPER|36|484 +Brand#33|ECONOMY ANODIZED TIN|14|484 +Brand#33|ECONOMY BRUSHED STEEL|14|484 +Brand#33|ECONOMY BRUSHED TIN|36|484 +Brand#33|LARGE BURNISHED STEEL|36|484 +Brand#33|LARGE PLATED NICKEL|3|484 +Brand#33|SMALL PLATED TIN|45|484 +Brand#33|STANDARD BRUSHED BRASS|14|484 +Brand#33|STANDARD PLATED STEEL|45|484 +Brand#34|ECONOMY PLATED BRASS|3|484 +Brand#34|ECONOMY PLATED COPPER|23|484 +Brand#34|ECONOMY PLATED NICKEL|45|484 +Brand#34|ECONOMY POLISHED TIN|19|484 +Brand#34|LARGE BRUSHED TIN|49|484 +Brand#34|LARGE BURNISHED BRASS|14|484 +Brand#34|PROMO ANODIZED BRASS|19|484 +Brand#34|PROMO BRUSHED STEEL|23|484 +Brand#34|PROMO POLISHED NICKEL|19|484 +Brand#34|SMALL PLATED NICKEL|23|484 +Brand#34|STANDARD ANODIZED NICKEL|9|484 +Brand#34|STANDARD BRUSHED STEEL|23|484 +Brand#34|STANDARD PLATED BRASS|23|484 +Brand#34|STANDARD PLATED TIN|49|484 +Brand#34|STANDARD POLISHED TIN|9|484 +Brand#35|ECONOMY BRUSHED COPPER|23|484 +Brand#35|ECONOMY BURNISHED NICKEL|49|484 +Brand#35|LARGE BRUSHED COPPER|49|484 +Brand#35|LARGE BRUSHED STEEL|3|484 +Brand#35|LARGE POLISHED BRASS|19|484 +Brand#35|STANDARD BRUSHED COPPER|19|484 +Brand#35|STANDARD BRUSHED NICKEL|36|484 +Brand#35|STANDARD BURNISHED STEEL|23|484 +Brand#41|LARGE BURNISHED NICKEL|9|484 +Brand#41|LARGE POLISHED COPPER|49|484 +Brand#41|LARGE POLISHED TIN|23|484 +Brand#41|LARGE POLISHED TIN|36|484 +Brand#41|LARGE POLISHED TIN|49|484 +Brand#41|MEDIUM PLATED COPPER|45|484 +Brand#41|MEDIUM PLATED NICKEL|3|484 +Brand#41|PROMO BRUSHED STEEL|49|484 +Brand#41|PROMO POLISHED COPPER|9|484 +Brand#41|SMALL ANODIZED NICKEL|3|484 +Brand#41|SMALL ANODIZED NICKEL|19|484 +Brand#41|SMALL BRUSHED NICKEL|36|484 +Brand#41|SMALL BURNISHED NICKEL|49|484 +Brand#41|SMALL POLISHED TIN|49|484 +Brand#42|ECONOMY ANODIZED COPPER|45|484 +Brand#42|ECONOMY PLATED NICKEL|19|484 +Brand#42|ECONOMY POLISHED STEEL|3|484 +Brand#42|LARGE ANODIZED COPPER|36|484 +Brand#42|LARGE POLISHED COPPER|9|484 +Brand#42|LARGE POLISHED TIN|3|484 +Brand#42|MEDIUM BRUSHED NICKEL|9|484 +Brand#42|MEDIUM BURNISHED BRASS|19|484 +Brand#42|PROMO BURNISHED TIN|45|484 +Brand#42|SMALL BURNISHED TIN|19|484 +Brand#42|STANDARD ANODIZED NICKEL|49|484 +Brand#42|STANDARD BRUSHED TIN|49|484 +Brand#42|STANDARD PLATED BRASS|9|484 +Brand#42|STANDARD POLISHED STEEL|9|484 +Brand#43|MEDIUM PLATED COPPER|19|484 +Brand#43|SMALL ANODIZED BRASS|23|484 +Brand#43|SMALL BURNISHED COPPER|49|484 +Brand#43|SMALL PLATED COPPER|3|484 +Brand#43|SMALL PLATED COPPER|36|484 +Brand#43|SMALL POLISHED COPPER|9|484 +Brand#43|STANDARD ANODIZED COPPER|9|484 +Brand#43|STANDARD BRUSHED TIN|45|484 +Brand#44|ECONOMY ANODIZED TIN|49|484 +Brand#44|ECONOMY BURNISHED TIN|3|484 +Brand#44|MEDIUM PLATED BRASS|23|484 +Brand#44|MEDIUM PLATED STEEL|36|484 +Brand#44|SMALL ANODIZED BRASS|36|484 +Brand#44|SMALL PLATED BRASS|45|484 +Brand#44|STANDARD ANODIZED NICKEL|9|484 +Brand#44|STANDARD PLATED STEEL|23|484 +Brand#51|ECONOMY BURNISHED BRASS|36|484 +Brand#51|LARGE PLATED NICKEL|19|484 +Brand#51|MEDIUM BRUSHED NICKEL|9|484 +Brand#52|ECONOMY BRUSHED STEEL|45|484 +Brand#52|ECONOMY PLATED BRASS|19|484 +Brand#52|LARGE ANODIZED STEEL|14|484 +Brand#52|MEDIUM ANODIZED STEEL|19|484 +Brand#52|PROMO POLISHED TIN|23|484 +Brand#52|STANDARD BURNISHED COPPER|23|484 +Brand#52|STANDARD PLATED BRASS|9|484 +Brand#53|ECONOMY PLATED BRASS|19|484 +Brand#53|ECONOMY PLATED NICKEL|9|484 +Brand#53|ECONOMY POLISHED COPPER|23|484 +Brand#53|LARGE BRUSHED NICKEL|19|484 +Brand#53|PROMO BRUSHED BRASS|45|484 +Brand#53|PROMO BRUSHED NICKEL|45|484 +Brand#53|SMALL BURNISHED TIN|45|484 +Brand#53|STANDARD BRUSHED NICKEL|19|484 +Brand#53|STANDARD BRUSHED NICKEL|23|484 +Brand#53|STANDARD POLISHED BRASS|3|484 +Brand#54|ECONOMY BURNISHED NICKEL|45|484 +Brand#54|LARGE BURNISHED BRASS|49|484 +Brand#54|LARGE PLATED BRASS|49|484 +Brand#54|MEDIUM ANODIZED NICKEL|23|484 +Brand#54|MEDIUM PLATED BRASS|3|484 +Brand#54|MEDIUM PLATED COPPER|23|484 +Brand#54|PROMO ANODIZED TIN|14|484 +Brand#54|PROMO BRUSHED COPPER|45|484 +Brand#54|PROMO POLISHED NICKEL|14|484 +Brand#54|STANDARD ANODIZED NICKEL|9|484 +Brand#54|STANDARD POLISHED NICKEL|23|484 +Brand#54|STANDARD POLISHED NICKEL|36|484 +Brand#54|STANDARD POLISHED STEEL|9|484 +Brand#55|ECONOMY ANODIZED NICKEL|19|484 +Brand#55|ECONOMY PLATED STEEL|23|484 +Brand#55|LARGE ANODIZED STEEL|36|484 +Brand#55|LARGE BRUSHED COPPER|45|484 +Brand#55|LARGE PLATED NICKEL|9|484 +Brand#55|LARGE POLISHED COPPER|23|484 +Brand#55|STANDARD POLISHED STEEL|9|484 +Brand#11|LARGE PLATED BRASS|19|483 +Brand#11|MEDIUM ANODIZED NICKEL|36|483 +Brand#11|MEDIUM BRUSHED STEEL|9|483 +Brand#11|PROMO BURNISHED TIN|19|483 +Brand#11|SMALL ANODIZED COPPER|36|483 +Brand#13|LARGE ANODIZED NICKEL|3|483 +Brand#13|PROMO ANODIZED COPPER|3|483 +Brand#13|PROMO PLATED BRASS|49|483 +Brand#13|SMALL POLISHED TIN|36|483 +Brand#13|STANDARD ANODIZED BRASS|14|483 +Brand#14|LARGE BURNISHED NICKEL|49|483 +Brand#14|MEDIUM BURNISHED BRASS|9|483 +Brand#14|SMALL ANODIZED NICKEL|9|483 +Brand#15|MEDIUM BRUSHED STEEL|9|483 +Brand#15|SMALL PLATED COPPER|19|483 +Brand#21|MEDIUM BRUSHED STEEL|23|483 +Brand#21|MEDIUM BRUSHED STEEL|49|483 +Brand#21|MEDIUM PLATED STEEL|14|483 +Brand#21|STANDARD BRUSHED BRASS|9|483 +Brand#21|STANDARD PLATED TIN|19|483 +Brand#22|MEDIUM BRUSHED COPPER|14|483 +Brand#22|SMALL BURNISHED STEEL|3|483 +Brand#22|SMALL POLISHED TIN|45|483 +Brand#23|LARGE POLISHED COPPER|14|483 +Brand#23|STANDARD BRUSHED COPPER|36|483 +Brand#23|STANDARD BRUSHED TIN|36|483 +Brand#24|ECONOMY PLATED STEEL|36|483 +Brand#24|LARGE POLISHED TIN|3|483 +Brand#24|MEDIUM BRUSHED COPPER|19|483 +Brand#24|PROMO BRUSHED NICKEL|9|483 +Brand#24|PROMO PLATED BRASS|49|483 +Brand#25|LARGE ANODIZED STEEL|23|483 +Brand#25|LARGE BURNISHED BRASS|23|483 +Brand#25|LARGE BURNISHED NICKEL|36|483 +Brand#25|LARGE POLISHED STEEL|9|483 +Brand#25|SMALL BRUSHED TIN|49|483 +Brand#31|MEDIUM PLATED TIN|19|483 +Brand#31|PROMO BRUSHED STEEL|45|483 +Brand#31|STANDARD BRUSHED TIN|36|483 +Brand#32|PROMO BRUSHED TIN|45|483 +Brand#32|PROMO PLATED TIN|45|483 +Brand#32|SMALL BRUSHED BRASS|36|483 +Brand#33|LARGE BRUSHED STEEL|3|483 +Brand#33|PROMO BURNISHED NICKEL|9|483 +Brand#33|SMALL BRUSHED BRASS|36|483 +Brand#33|SMALL POLISHED TIN|49|483 +Brand#33|STANDARD POLISHED COPPER|19|483 +Brand#34|ECONOMY PLATED BRASS|19|483 +Brand#34|MEDIUM BRUSHED BRASS|3|483 +Brand#34|PROMO PLATED COPPER|9|483 +Brand#34|SMALL BURNISHED TIN|19|483 +Brand#35|ECONOMY PLATED STEEL|9|483 +Brand#41|ECONOMY POLISHED STEEL|49|483 +Brand#42|ECONOMY BRUSHED BRASS|14|483 +Brand#42|MEDIUM BRUSHED BRASS|3|483 +Brand#42|MEDIUM BRUSHED TIN|14|483 +Brand#42|SMALL BRUSHED BRASS|3|483 +Brand#42|STANDARD ANODIZED BRASS|36|483 +Brand#43|ECONOMY POLISHED STEEL|49|483 +Brand#43|SMALL ANODIZED NICKEL|45|483 +Brand#43|SMALL PLATED TIN|9|483 +Brand#43|STANDARD ANODIZED COPPER|23|483 +Brand#44|ECONOMY ANODIZED BRASS|14|483 +Brand#44|STANDARD PLATED COPPER|23|483 +Brand#51|ECONOMY BRUSHED TIN|36|483 +Brand#51|LARGE BURNISHED STEEL|36|483 +Brand#51|LARGE PLATED COPPER|36|483 +Brand#51|MEDIUM ANODIZED NICKEL|3|483 +Brand#51|SMALL ANODIZED NICKEL|45|483 +Brand#51|SMALL BRUSHED TIN|3|483 +Brand#52|LARGE BURNISHED COPPER|9|483 +Brand#52|MEDIUM BRUSHED STEEL|45|483 +Brand#52|PROMO PLATED NICKEL|23|483 +Brand#52|SMALL PLATED TIN|49|483 +Brand#52|STANDARD BURNISHED TIN|23|483 +Brand#52|STANDARD POLISHED NICKEL|9|483 +Brand#53|LARGE PLATED NICKEL|19|483 +Brand#53|MEDIUM ANODIZED TIN|23|483 +Brand#53|MEDIUM PLATED STEEL|9|483 +Brand#54|ECONOMY BURNISHED BRASS|45|483 +Brand#54|ECONOMY PLATED TIN|36|483 +Brand#54|ECONOMY POLISHED COPPER|45|483 +Brand#54|LARGE ANODIZED COPPER|3|483 +Brand#54|MEDIUM PLATED BRASS|14|483 +Brand#54|PROMO BURNISHED STEEL|14|483 +Brand#54|STANDARD BRUSHED NICKEL|14|483 +Brand#55|LARGE PLATED BRASS|36|483 +Brand#15|SMALL BURNISHED STEEL|19|482 +Brand#21|ECONOMY BURNISHED STEEL|14|482 +Brand#25|PROMO BRUSHED COPPER|49|482 +Brand#31|ECONOMY POLISHED BRASS|23|482 +Brand#31|PROMO ANODIZED NICKEL|36|482 +Brand#33|PROMO ANODIZED BRASS|49|482 +Brand#33|SMALL BRUSHED NICKEL|3|482 +Brand#33|SMALL PLATED STEEL|49|482 +Brand#34|PROMO BURNISHED BRASS|19|482 +Brand#35|STANDARD BRUSHED NICKEL|14|482 +Brand#42|LARGE ANODIZED NICKEL|49|482 +Brand#42|SMALL PLATED BRASS|9|482 +Brand#52|MEDIUM PLATED TIN|14|482 +Brand#53|LARGE BURNISHED TIN|23|482 +Brand#55|ECONOMY POLISHED TIN|45|482 +Brand#55|SMALL BURNISHED STEEL|9|482 +Brand#33|PROMO PLATED TIN|14|481 +Brand#33|STANDARD PLATED STEEL|36|481 +Brand#55|MEDIUM ANODIZED NICKEL|45|481 +Brand#11|ECONOMY ANODIZED COPPER|9|480 +Brand#11|ECONOMY ANODIZED COPPER|36|480 +Brand#11|ECONOMY ANODIZED TIN|45|480 +Brand#11|ECONOMY BURNISHED STEEL|9|480 +Brand#11|ECONOMY BURNISHED TIN|3|480 +Brand#11|ECONOMY PLATED BRASS|14|480 +Brand#11|LARGE BURNISHED STEEL|9|480 +Brand#11|MEDIUM ANODIZED STEEL|9|480 +Brand#11|PROMO POLISHED STEEL|3|480 +Brand#11|SMALL ANODIZED NICKEL|9|480 +Brand#11|SMALL BRUSHED COPPER|9|480 +Brand#11|SMALL PLATED BRASS|3|480 +Brand#11|SMALL POLISHED TIN|23|480 +Brand#11|SMALL POLISHED TIN|45|480 +Brand#11|STANDARD BURNISHED NICKEL|19|480 +Brand#11|STANDARD BURNISHED TIN|49|480 +Brand#11|STANDARD POLISHED COPPER|9|480 +Brand#12|ECONOMY ANODIZED COPPER|9|480 +Brand#12|ECONOMY ANODIZED STEEL|45|480 +Brand#12|ECONOMY PLATED NICKEL|9|480 +Brand#12|ECONOMY POLISHED COPPER|19|480 +Brand#12|LARGE ANODIZED NICKEL|14|480 +Brand#12|LARGE BURNISHED COPPER|9|480 +Brand#12|LARGE POLISHED BRASS|36|480 +Brand#12|LARGE POLISHED TIN|3|480 +Brand#12|MEDIUM BRUSHED COPPER|45|480 +Brand#12|MEDIUM PLATED NICKEL|14|480 +Brand#12|PROMO ANODIZED COPPER|49|480 +Brand#12|SMALL BURNISHED NICKEL|19|480 +Brand#12|SMALL PLATED COPPER|49|480 +Brand#12|SMALL PLATED TIN|36|480 +Brand#12|STANDARD ANODIZED STEEL|14|480 +Brand#12|STANDARD BURNISHED BRASS|3|480 +Brand#12|STANDARD PLATED BRASS|19|480 +Brand#13|ECONOMY ANODIZED BRASS|19|480 +Brand#13|ECONOMY POLISHED NICKEL|9|480 +Brand#13|LARGE ANODIZED BRASS|3|480 +Brand#13|MEDIUM BURNISHED TIN|45|480 +Brand#13|PROMO PLATED NICKEL|19|480 +Brand#13|SMALL BRUSHED BRASS|9|480 +Brand#13|SMALL BRUSHED COPPER|9|480 +Brand#13|SMALL BRUSHED NICKEL|36|480 +Brand#13|SMALL PLATED COPPER|49|480 +Brand#13|SMALL POLISHED BRASS|45|480 +Brand#13|STANDARD BRUSHED BRASS|36|480 +Brand#13|STANDARD BURNISHED STEEL|45|480 +Brand#13|STANDARD PLATED STEEL|36|480 +Brand#14|ECONOMY ANODIZED TIN|9|480 +Brand#14|ECONOMY BRUSHED BRASS|14|480 +Brand#14|ECONOMY BURNISHED COPPER|23|480 +Brand#14|LARGE ANODIZED NICKEL|3|480 +Brand#14|LARGE ANODIZED NICKEL|45|480 +Brand#14|LARGE BURNISHED COPPER|19|480 +Brand#14|LARGE BURNISHED COPPER|49|480 +Brand#14|LARGE PLATED NICKEL|36|480 +Brand#14|MEDIUM BURNISHED BRASS|36|480 +Brand#14|PROMO ANODIZED COPPER|23|480 +Brand#14|PROMO PLATED NICKEL|9|480 +Brand#14|PROMO POLISHED BRASS|36|480 +Brand#14|SMALL ANODIZED BRASS|19|480 +Brand#14|SMALL PLATED STEEL|14|480 +Brand#14|STANDARD ANODIZED COPPER|45|480 +Brand#14|STANDARD BRUSHED NICKEL|3|480 +Brand#14|STANDARD BURNISHED BRASS|36|480 +Brand#14|STANDARD BURNISHED COPPER|3|480 +Brand#15|ECONOMY BRUSHED STEEL|3|480 +Brand#15|ECONOMY BURNISHED NICKEL|45|480 +Brand#15|ECONOMY BURNISHED TIN|49|480 +Brand#15|ECONOMY PLATED TIN|19|480 +Brand#15|LARGE BRUSHED BRASS|19|480 +Brand#15|LARGE PLATED TIN|45|480 +Brand#15|MEDIUM ANODIZED STEEL|14|480 +Brand#15|MEDIUM BRUSHED BRASS|14|480 +Brand#15|MEDIUM BRUSHED NICKEL|23|480 +Brand#15|MEDIUM BURNISHED COPPER|9|480 +Brand#15|PROMO ANODIZED STEEL|9|480 +Brand#15|SMALL PLATED COPPER|45|480 +Brand#15|SMALL PLATED NICKEL|3|480 +Brand#15|STANDARD ANODIZED NICKEL|3|480 +Brand#21|ECONOMY ANODIZED BRASS|19|480 +Brand#21|ECONOMY ANODIZED TIN|14|480 +Brand#21|ECONOMY POLISHED NICKEL|3|480 +Brand#21|LARGE BRUSHED NICKEL|14|480 +Brand#21|MEDIUM BRUSHED STEEL|14|480 +Brand#21|PROMO BURNISHED COPPER|9|480 +Brand#21|PROMO BURNISHED TIN|49|480 +Brand#21|SMALL ANODIZED TIN|36|480 +Brand#21|SMALL BRUSHED TIN|45|480 +Brand#21|SMALL BURNISHED TIN|14|480 +Brand#21|SMALL PLATED TIN|9|480 +Brand#21|STANDARD BRUSHED NICKEL|3|480 +Brand#21|STANDARD BURNISHED COPPER|49|480 +Brand#22|ECONOMY ANODIZED STEEL|9|480 +Brand#22|ECONOMY PLATED STEEL|3|480 +Brand#22|LARGE PLATED STEEL|36|480 +Brand#22|LARGE PLATED TIN|19|480 +Brand#22|MEDIUM BRUSHED STEEL|9|480 +Brand#22|SMALL ANODIZED NICKEL|36|480 +Brand#22|SMALL PLATED STEEL|23|480 +Brand#22|SMALL POLISHED NICKEL|19|480 +Brand#22|STANDARD PLATED STEEL|3|480 +Brand#22|STANDARD PLATED TIN|9|480 +Brand#23|ECONOMY BURNISHED BRASS|3|480 +Brand#23|LARGE BRUSHED COPPER|36|480 +Brand#23|LARGE POLISHED STEEL|14|480 +Brand#23|LARGE POLISHED TIN|14|480 +Brand#23|PROMO ANODIZED COPPER|9|480 +Brand#23|PROMO BRUSHED COPPER|36|480 +Brand#23|PROMO PLATED COPPER|14|480 +Brand#23|PROMO PLATED TIN|3|480 +Brand#23|SMALL ANODIZED BRASS|14|480 +Brand#23|SMALL ANODIZED TIN|3|480 +Brand#23|SMALL BRUSHED COPPER|23|480 +Brand#23|SMALL BURNISHED NICKEL|14|480 +Brand#23|SMALL PLATED BRASS|23|480 +Brand#23|SMALL PLATED STEEL|23|480 +Brand#23|SMALL POLISHED BRASS|49|480 +Brand#23|STANDARD ANODIZED COPPER|3|480 +Brand#23|STANDARD BRUSHED BRASS|45|480 +Brand#23|STANDARD BURNISHED NICKEL|23|480 +Brand#23|STANDARD PLATED BRASS|23|480 +Brand#24|ECONOMY ANODIZED BRASS|23|480 +Brand#24|ECONOMY ANODIZED STEEL|3|480 +Brand#24|ECONOMY BURNISHED COPPER|3|480 +Brand#24|LARGE BRUSHED NICKEL|23|480 +Brand#24|LARGE POLISHED TIN|14|480 +Brand#24|MEDIUM ANODIZED STEEL|14|480 +Brand#24|MEDIUM BRUSHED COPPER|23|480 +Brand#24|PROMO BRUSHED BRASS|19|480 +Brand#24|PROMO POLISHED TIN|3|480 +Brand#24|SMALL BURNISHED COPPER|19|480 +Brand#24|SMALL PLATED TIN|49|480 +Brand#24|SMALL POLISHED BRASS|3|480 +Brand#24|SMALL POLISHED COPPER|36|480 +Brand#24|STANDARD ANODIZED COPPER|49|480 +Brand#25|ECONOMY BURNISHED COPPER|23|480 +Brand#25|LARGE POLISHED NICKEL|45|480 +Brand#25|MEDIUM BURNISHED TIN|36|480 +Brand#25|PROMO ANODIZED TIN|45|480 +Brand#25|PROMO PLATED BRASS|36|480 +Brand#25|SMALL BRUSHED NICKEL|19|480 +Brand#25|SMALL BURNISHED TIN|49|480 +Brand#25|STANDARD ANODIZED NICKEL|49|480 +Brand#31|ECONOMY ANODIZED BRASS|45|480 +Brand#31|ECONOMY ANODIZED NICKEL|36|480 +Brand#31|ECONOMY ANODIZED TIN|49|480 +Brand#31|ECONOMY BURNISHED BRASS|23|480 +Brand#31|ECONOMY POLISHED NICKEL|3|480 +Brand#31|LARGE ANODIZED TIN|3|480 +Brand#31|MEDIUM BURNISHED COPPER|9|480 +Brand#31|MEDIUM BURNISHED NICKEL|19|480 +Brand#31|PROMO BRUSHED STEEL|14|480 +Brand#31|PROMO BURNISHED COPPER|14|480 +Brand#31|SMALL BURNISHED TIN|14|480 +Brand#31|SMALL PLATED NICKEL|9|480 +Brand#31|STANDARD ANODIZED TIN|14|480 +Brand#31|STANDARD BRUSHED BRASS|14|480 +Brand#31|STANDARD BRUSHED STEEL|19|480 +Brand#31|STANDARD POLISHED BRASS|36|480 +Brand#32|LARGE BURNISHED BRASS|3|480 +Brand#32|LARGE POLISHED NICKEL|19|480 +Brand#32|PROMO ANODIZED STEEL|23|480 +Brand#32|PROMO BRUSHED COPPER|14|480 +Brand#32|PROMO BRUSHED NICKEL|3|480 +Brand#32|PROMO PLATED COPPER|19|480 +Brand#32|STANDARD BRUSHED STEEL|19|480 +Brand#33|ECONOMY POLISHED COPPER|23|480 +Brand#33|LARGE PLATED NICKEL|9|480 +Brand#33|MEDIUM BURNISHED COPPER|45|480 +Brand#33|MEDIUM PLATED NICKEL|23|480 +Brand#33|PROMO ANODIZED COPPER|9|480 +Brand#33|PROMO BRUSHED TIN|9|480 +Brand#33|PROMO POLISHED BRASS|3|480 +Brand#33|SMALL ANODIZED STEEL|14|480 +Brand#33|SMALL PLATED COPPER|49|480 +Brand#33|SMALL PLATED TIN|9|480 +Brand#33|STANDARD BRUSHED TIN|9|480 +Brand#34|ECONOMY BRUSHED BRASS|36|480 +Brand#34|ECONOMY BURNISHED BRASS|36|480 +Brand#34|ECONOMY BURNISHED COPPER|3|480 +Brand#34|ECONOMY PLATED STEEL|9|480 +Brand#34|ECONOMY POLISHED BRASS|23|480 +Brand#34|ECONOMY POLISHED TIN|14|480 +Brand#34|ECONOMY POLISHED TIN|36|480 +Brand#34|LARGE POLISHED BRASS|9|480 +Brand#34|LARGE POLISHED COPPER|36|480 +Brand#34|MEDIUM ANODIZED BRASS|19|480 +Brand#34|MEDIUM BURNISHED BRASS|14|480 +Brand#34|PROMO BRUSHED COPPER|45|480 +Brand#34|PROMO BURNISHED NICKEL|14|480 +Brand#34|PROMO PLATED BRASS|36|480 +Brand#34|SMALL ANODIZED BRASS|45|480 +Brand#34|STANDARD BURNISHED TIN|9|480 +Brand#34|STANDARD BURNISHED TIN|49|480 +Brand#35|LARGE BRUSHED STEEL|14|480 +Brand#35|MEDIUM ANODIZED BRASS|49|480 +Brand#35|MEDIUM PLATED STEEL|36|480 +Brand#35|PROMO BRUSHED TIN|19|480 +Brand#35|PROMO PLATED NICKEL|36|480 +Brand#35|SMALL ANODIZED STEEL|45|480 +Brand#35|SMALL PLATED BRASS|3|480 +Brand#35|SMALL PLATED COPPER|14|480 +Brand#35|STANDARD ANODIZED NICKEL|49|480 +Brand#35|STANDARD BURNISHED BRASS|9|480 +Brand#35|STANDARD PLATED NICKEL|19|480 +Brand#41|ECONOMY ANODIZED COPPER|9|480 +Brand#41|ECONOMY BURNISHED BRASS|49|480 +Brand#41|LARGE ANODIZED TIN|36|480 +Brand#41|LARGE BRUSHED BRASS|9|480 +Brand#41|LARGE BURNISHED STEEL|14|480 +Brand#41|LARGE POLISHED BRASS|3|480 +Brand#41|LARGE POLISHED COPPER|36|480 +Brand#41|MEDIUM BURNISHED STEEL|9|480 +Brand#41|MEDIUM PLATED COPPER|49|480 +Brand#41|MEDIUM PLATED TIN|45|480 +Brand#41|PROMO BURNISHED NICKEL|9|480 +Brand#41|PROMO BURNISHED STEEL|3|480 +Brand#41|PROMO PLATED COPPER|49|480 +Brand#41|STANDARD ANODIZED NICKEL|49|480 +Brand#42|ECONOMY BRUSHED BRASS|45|480 +Brand#42|ECONOMY POLISHED BRASS|36|480 +Brand#42|ECONOMY POLISHED TIN|3|480 +Brand#42|LARGE BRUSHED STEEL|23|480 +Brand#42|LARGE BURNISHED BRASS|19|480 +Brand#42|LARGE BURNISHED TIN|9|480 +Brand#42|PROMO BURNISHED NICKEL|9|480 +Brand#42|SMALL ANODIZED NICKEL|23|480 +Brand#42|SMALL ANODIZED TIN|9|480 +Brand#42|STANDARD ANODIZED TIN|49|480 +Brand#43|ECONOMY ANODIZED COPPER|23|480 +Brand#43|ECONOMY BURNISHED TIN|49|480 +Brand#43|LARGE ANODIZED TIN|9|480 +Brand#43|LARGE BRUSHED BRASS|3|480 +Brand#43|LARGE BURNISHED NICKEL|45|480 +Brand#43|MEDIUM BURNISHED BRASS|45|480 +Brand#43|MEDIUM PLATED STEEL|23|480 +Brand#43|PROMO ANODIZED NICKEL|14|480 +Brand#43|PROMO BRUSHED BRASS|36|480 +Brand#43|PROMO BURNISHED BRASS|14|480 +Brand#43|PROMO BURNISHED BRASS|23|480 +Brand#43|PROMO BURNISHED COPPER|19|480 +Brand#43|PROMO BURNISHED COPPER|23|480 +Brand#43|PROMO PLATED TIN|45|480 +Brand#44|ECONOMY ANODIZED NICKEL|14|480 +Brand#44|ECONOMY ANODIZED STEEL|36|480 +Brand#44|ECONOMY BURNISHED BRASS|14|480 +Brand#44|ECONOMY PLATED TIN|3|480 +Brand#44|LARGE ANODIZED BRASS|19|480 +Brand#44|LARGE BRUSHED STEEL|23|480 +Brand#44|MEDIUM BRUSHED NICKEL|36|480 +Brand#44|PROMO ANODIZED TIN|36|480 +Brand#44|PROMO POLISHED COPPER|45|480 +Brand#44|SMALL BRUSHED COPPER|14|480 +Brand#44|SMALL BURNISHED TIN|19|480 +Brand#44|STANDARD BRUSHED COPPER|3|480 +Brand#44|STANDARD BRUSHED STEEL|49|480 +Brand#44|STANDARD BURNISHED NICKEL|3|480 +Brand#44|STANDARD PLATED STEEL|19|480 +Brand#51|ECONOMY BRUSHED BRASS|36|480 +Brand#51|ECONOMY BRUSHED COPPER|19|480 +Brand#51|ECONOMY BRUSHED COPPER|45|480 +Brand#51|ECONOMY BURNISHED COPPER|23|480 +Brand#51|ECONOMY BURNISHED NICKEL|14|480 +Brand#51|ECONOMY BURNISHED TIN|9|480 +Brand#51|ECONOMY POLISHED TIN|23|480 +Brand#51|LARGE PLATED COPPER|45|480 +Brand#51|LARGE PLATED STEEL|3|480 +Brand#51|MEDIUM ANODIZED NICKEL|19|480 +Brand#51|PROMO ANODIZED BRASS|36|480 +Brand#51|PROMO ANODIZED STEEL|9|480 +Brand#51|PROMO PLATED NICKEL|45|480 +Brand#51|SMALL BRUSHED BRASS|9|480 +Brand#51|SMALL BURNISHED NICKEL|49|480 +Brand#51|STANDARD POLISHED COPPER|45|480 +Brand#52|ECONOMY ANODIZED BRASS|45|480 +Brand#52|ECONOMY ANODIZED TIN|23|480 +Brand#52|ECONOMY ANODIZED TIN|49|480 +Brand#52|LARGE ANODIZED BRASS|36|480 +Brand#52|LARGE BURNISHED TIN|36|480 +Brand#52|LARGE PLATED TIN|3|480 +Brand#52|LARGE POLISHED STEEL|9|480 +Brand#52|MEDIUM BRUSHED TIN|36|480 +Brand#52|PROMO ANODIZED STEEL|14|480 +Brand#52|STANDARD BRUSHED STEEL|3|480 +Brand#53|ECONOMY ANODIZED TIN|14|480 +Brand#53|ECONOMY BRUSHED BRASS|36|480 +Brand#53|ECONOMY BURNISHED STEEL|45|480 +Brand#53|ECONOMY PLATED BRASS|3|480 +Brand#53|ECONOMY PLATED STEEL|23|480 +Brand#53|LARGE POLISHED BRASS|19|480 +Brand#53|MEDIUM ANODIZED COPPER|36|480 +Brand#53|MEDIUM PLATED COPPER|49|480 +Brand#53|PROMO BURNISHED NICKEL|49|480 +Brand#53|PROMO POLISHED NICKEL|23|480 +Brand#53|PROMO POLISHED TIN|19|480 +Brand#53|STANDARD POLISHED NICKEL|19|480 +Brand#54|ECONOMY BURNISHED TIN|19|480 +Brand#54|LARGE BURNISHED NICKEL|49|480 +Brand#54|LARGE POLISHED STEEL|3|480 +Brand#54|MEDIUM ANODIZED BRASS|19|480 +Brand#54|PROMO PLATED COPPER|36|480 +Brand#54|SMALL BRUSHED BRASS|9|480 +Brand#54|SMALL PLATED STEEL|36|480 +Brand#54|STANDARD ANODIZED BRASS|3|480 +Brand#54|STANDARD ANODIZED TIN|9|480 +Brand#55|ECONOMY BRUSHED NICKEL|19|480 +Brand#55|ECONOMY BURNISHED COPPER|49|480 +Brand#55|ECONOMY POLISHED NICKEL|23|480 +Brand#55|ECONOMY POLISHED TIN|3|480 +Brand#55|LARGE BRUSHED BRASS|23|480 +Brand#55|LARGE BRUSHED COPPER|14|480 +Brand#55|LARGE BURNISHED COPPER|3|480 +Brand#55|LARGE PLATED COPPER|9|480 +Brand#55|MEDIUM BRUSHED STEEL|19|480 +Brand#55|MEDIUM PLATED TIN|49|480 +Brand#55|SMALL BRUSHED COPPER|9|480 +Brand#55|SMALL PLATED TIN|45|480 +Brand#55|STANDARD PLATED COPPER|19|480 +Brand#11|MEDIUM BURNISHED BRASS|3|479 +Brand#11|PROMO PLATED STEEL|23|479 +Brand#11|SMALL ANODIZED COPPER|19|479 +Brand#12|LARGE ANODIZED NICKEL|49|479 +Brand#12|LARGE PLATED STEEL|23|479 +Brand#12|SMALL ANODIZED COPPER|36|479 +Brand#12|STANDARD BRUSHED STEEL|49|479 +Brand#12|STANDARD POLISHED STEEL|36|479 +Brand#13|ECONOMY PLATED TIN|3|479 +Brand#13|LARGE PLATED TIN|36|479 +Brand#13|MEDIUM BRUSHED BRASS|3|479 +Brand#13|MEDIUM BURNISHED STEEL|3|479 +Brand#13|MEDIUM BURNISHED TIN|9|479 +Brand#13|PROMO POLISHED STEEL|3|479 +Brand#13|SMALL ANODIZED COPPER|49|479 +Brand#13|SMALL PLATED BRASS|36|479 +Brand#13|STANDARD POLISHED COPPER|3|479 +Brand#14|ECONOMY ANODIZED NICKEL|3|479 +Brand#14|ECONOMY BRUSHED TIN|45|479 +Brand#14|ECONOMY POLISHED BRASS|3|479 +Brand#14|LARGE ANODIZED BRASS|14|479 +Brand#14|LARGE PLATED TIN|36|479 +Brand#14|MEDIUM BRUSHED NICKEL|49|479 +Brand#14|SMALL PLATED COPPER|14|479 +Brand#15|LARGE BURNISHED STEEL|49|479 +Brand#15|MEDIUM ANODIZED TIN|19|479 +Brand#15|SMALL ANODIZED COPPER|3|479 +Brand#15|STANDARD BRUSHED TIN|19|479 +Brand#21|ECONOMY ANODIZED COPPER|9|479 +Brand#21|ECONOMY BURNISHED NICKEL|23|479 +Brand#21|ECONOMY PLATED BRASS|36|479 +Brand#21|LARGE BRUSHED COPPER|45|479 +Brand#21|MEDIUM PLATED BRASS|3|479 +Brand#21|SMALL BRUSHED NICKEL|45|479 +Brand#21|STANDARD PLATED COPPER|36|479 +Brand#22|LARGE ANODIZED TIN|19|479 +Brand#22|SMALL PLATED NICKEL|3|479 +Brand#22|STANDARD BRUSHED COPPER|9|479 +Brand#22|STANDARD POLISHED STEEL|49|479 +Brand#23|LARGE BRUSHED COPPER|19|479 +Brand#23|LARGE BURNISHED TIN|9|479 +Brand#23|PROMO POLISHED TIN|49|479 +Brand#23|STANDARD BRUSHED STEEL|45|479 +Brand#24|ECONOMY BRUSHED BRASS|49|479 +Brand#24|PROMO POLISHED STEEL|9|479 +Brand#25|LARGE PLATED STEEL|45|479 +Brand#25|PROMO ANODIZED BRASS|9|479 +Brand#25|PROMO ANODIZED BRASS|19|479 +Brand#25|STANDARD ANODIZED NICKEL|9|479 +Brand#31|ECONOMY BURNISHED TIN|3|479 +Brand#31|LARGE ANODIZED STEEL|45|479 +Brand#31|STANDARD PLATED NICKEL|9|479 +Brand#32|ECONOMY PLATED BRASS|45|479 +Brand#32|LARGE ANODIZED COPPER|9|479 +Brand#32|LARGE BRUSHED STEEL|9|479 +Brand#32|LARGE PLATED TIN|49|479 +Brand#32|PROMO POLISHED STEEL|23|479 +Brand#33|ECONOMY BURNISHED COPPER|3|479 +Brand#33|MEDIUM BURNISHED TIN|23|479 +Brand#33|PROMO ANODIZED BRASS|19|479 +Brand#33|SMALL PLATED COPPER|14|479 +Brand#33|SMALL PLATED TIN|23|479 +Brand#34|ECONOMY ANODIZED STEEL|36|479 +Brand#34|MEDIUM BURNISHED NICKEL|9|479 +Brand#34|PROMO PLATED BRASS|14|479 +Brand#35|LARGE ANODIZED STEEL|45|479 +Brand#35|PROMO ANODIZED COPPER|9|479 +Brand#41|ECONOMY ANODIZED NICKEL|23|479 +Brand#41|MEDIUM ANODIZED NICKEL|49|479 +Brand#41|MEDIUM BRUSHED BRASS|9|479 +Brand#41|PROMO BURNISHED STEEL|14|479 +Brand#42|ECONOMY BURNISHED COPPER|45|479 +Brand#42|PROMO PLATED NICKEL|23|479 +Brand#42|SMALL BURNISHED COPPER|19|479 +Brand#42|STANDARD ANODIZED TIN|45|479 +Brand#43|ECONOMY BRUSHED COPPER|23|479 +Brand#43|SMALL PLATED BRASS|3|479 +Brand#43|STANDARD PLATED STEEL|9|479 +Brand#43|STANDARD POLISHED BRASS|49|479 +Brand#43|STANDARD POLISHED STEEL|14|479 +Brand#44|ECONOMY PLATED TIN|49|479 +Brand#44|STANDARD POLISHED STEEL|14|479 +Brand#51|ECONOMY PLATED NICKEL|3|479 +Brand#51|ECONOMY POLISHED NICKEL|49|479 +Brand#51|LARGE PLATED BRASS|36|479 +Brand#51|MEDIUM BURNISHED TIN|23|479 +Brand#51|SMALL PLATED BRASS|49|479 +Brand#51|SMALL POLISHED TIN|23|479 +Brand#51|STANDARD PLATED STEEL|3|479 +Brand#52|ECONOMY BRUSHED NICKEL|14|479 +Brand#52|ECONOMY BRUSHED TIN|14|479 +Brand#52|MEDIUM ANODIZED STEEL|14|479 +Brand#52|MEDIUM BURNISHED NICKEL|49|479 +Brand#52|PROMO BRUSHED TIN|19|479 +Brand#52|PROMO BRUSHED TIN|36|479 +Brand#52|PROMO PLATED TIN|3|479 +Brand#52|SMALL PLATED STEEL|49|479 +Brand#53|LARGE BRUSHED COPPER|49|479 +Brand#53|LARGE PLATED STEEL|36|479 +Brand#53|MEDIUM BRUSHED NICKEL|14|479 +Brand#53|MEDIUM BURNISHED BRASS|9|479 +Brand#53|PROMO ANODIZED TIN|14|479 +Brand#53|PROMO POLISHED BRASS|14|479 +Brand#53|SMALL POLISHED NICKEL|14|479 +Brand#54|ECONOMY BURNISHED TIN|3|479 +Brand#54|LARGE BURNISHED BRASS|14|479 +Brand#54|SMALL PLATED BRASS|36|479 +Brand#54|SMALL POLISHED COPPER|19|479 +Brand#54|STANDARD BURNISHED STEEL|45|479 +Brand#55|ECONOMY BURNISHED NICKEL|49|479 +Brand#14|ECONOMY ANODIZED STEEL|3|478 +Brand#14|MEDIUM BURNISHED NICKEL|9|478 +Brand#24|STANDARD BURNISHED NICKEL|9|478 +Brand#25|MEDIUM BURNISHED NICKEL|9|478 +Brand#33|ECONOMY ANODIZED BRASS|36|478 +Brand#33|MEDIUM PLATED STEEL|36|478 +Brand#34|PROMO BRUSHED NICKEL|45|478 +Brand#41|ECONOMY ANODIZED BRASS|45|478 +Brand#42|LARGE BURNISHED STEEL|19|478 +Brand#43|ECONOMY PLATED BRASS|49|478 +Brand#51|MEDIUM BURNISHED NICKEL|36|478 +Brand#52|SMALL POLISHED BRASS|23|478 +Brand#32|MEDIUM PLATED COPPER|23|477 +Brand#35|MEDIUM PLATED BRASS|23|477 +Brand#51|STANDARD BURNISHED NICKEL|49|477 +Brand#52|LARGE BURNISHED BRASS|19|477 +Brand#52|LARGE BURNISHED NICKEL|14|477 +Brand#11|ECONOMY ANODIZED COPPER|14|476 +Brand#11|ECONOMY BURNISHED COPPER|3|476 +Brand#11|ECONOMY POLISHED COPPER|14|476 +Brand#11|LARGE ANODIZED COPPER|36|476 +Brand#11|LARGE ANODIZED TIN|9|476 +Brand#11|MEDIUM BRUSHED BRASS|49|476 +Brand#11|PROMO BURNISHED NICKEL|19|476 +Brand#11|PROMO PLATED TIN|19|476 +Brand#11|PROMO POLISHED TIN|36|476 +Brand#11|SMALL BURNISHED COPPER|36|476 +Brand#11|SMALL PLATED BRASS|19|476 +Brand#11|SMALL PLATED COPPER|49|476 +Brand#12|ECONOMY BURNISHED STEEL|23|476 +Brand#12|ECONOMY PLATED COPPER|23|476 +Brand#12|ECONOMY POLISHED TIN|9|476 +Brand#12|LARGE ANODIZED NICKEL|19|476 +Brand#12|LARGE BRUSHED STEEL|23|476 +Brand#12|MEDIUM BURNISHED TIN|3|476 +Brand#12|PROMO ANODIZED BRASS|19|476 +Brand#12|PROMO PLATED TIN|49|476 +Brand#12|PROMO POLISHED TIN|36|476 +Brand#12|SMALL PLATED BRASS|36|476 +Brand#12|SMALL POLISHED STEEL|14|476 +Brand#12|STANDARD ANODIZED NICKEL|23|476 +Brand#12|STANDARD BRUSHED COPPER|19|476 +Brand#12|STANDARD BURNISHED TIN|49|476 +Brand#12|STANDARD POLISHED NICKEL|36|476 +Brand#13|ECONOMY BRUSHED NICKEL|19|476 +Brand#13|ECONOMY PLATED BRASS|49|476 +Brand#13|ECONOMY PLATED TIN|9|476 +Brand#13|ECONOMY POLISHED TIN|45|476 +Brand#13|LARGE ANODIZED NICKEL|36|476 +Brand#13|LARGE PLATED STEEL|14|476 +Brand#13|MEDIUM ANODIZED TIN|45|476 +Brand#13|MEDIUM PLATED TIN|19|476 +Brand#13|PROMO ANODIZED BRASS|14|476 +Brand#13|PROMO POLISHED NICKEL|19|476 +Brand#13|SMALL BURNISHED BRASS|49|476 +Brand#14|ECONOMY BRUSHED BRASS|36|476 +Brand#14|ECONOMY BRUSHED STEEL|36|476 +Brand#14|ECONOMY BRUSHED TIN|23|476 +Brand#14|ECONOMY PLATED STEEL|36|476 +Brand#14|ECONOMY POLISHED NICKEL|3|476 +Brand#14|MEDIUM BRUSHED TIN|9|476 +Brand#14|MEDIUM BURNISHED STEEL|49|476 +Brand#14|PROMO ANODIZED BRASS|9|476 +Brand#14|PROMO BRUSHED STEEL|19|476 +Brand#14|PROMO PLATED TIN|14|476 +Brand#14|PROMO POLISHED NICKEL|45|476 +Brand#14|SMALL BURNISHED NICKEL|9|476 +Brand#14|STANDARD BRUSHED NICKEL|14|476 +Brand#15|ECONOMY ANODIZED BRASS|3|476 +Brand#15|ECONOMY PLATED COPPER|23|476 +Brand#15|ECONOMY PLATED TIN|9|476 +Brand#15|ECONOMY POLISHED NICKEL|45|476 +Brand#15|LARGE ANODIZED TIN|49|476 +Brand#15|LARGE BRUSHED NICKEL|3|476 +Brand#15|LARGE PLATED NICKEL|36|476 +Brand#15|MEDIUM BRUSHED COPPER|45|476 +Brand#15|MEDIUM BURNISHED COPPER|3|476 +Brand#15|PROMO BURNISHED BRASS|9|476 +Brand#15|PROMO BURNISHED COPPER|3|476 +Brand#15|PROMO PLATED COPPER|23|476 +Brand#15|SMALL ANODIZED BRASS|36|476 +Brand#15|SMALL BURNISHED NICKEL|9|476 +Brand#15|STANDARD BURNISHED BRASS|14|476 +Brand#15|STANDARD PLATED BRASS|36|476 +Brand#15|STANDARD PLATED STEEL|3|476 +Brand#21|ECONOMY BRUSHED COPPER|3|476 +Brand#21|ECONOMY BRUSHED NICKEL|23|476 +Brand#21|ECONOMY BRUSHED TIN|23|476 +Brand#21|ECONOMY POLISHED BRASS|3|476 +Brand#21|ECONOMY POLISHED NICKEL|36|476 +Brand#21|LARGE ANODIZED BRASS|45|476 +Brand#21|MEDIUM ANODIZED BRASS|14|476 +Brand#21|MEDIUM ANODIZED TIN|36|476 +Brand#21|MEDIUM PLATED TIN|9|476 +Brand#21|PROMO BRUSHED BRASS|14|476 +Brand#21|PROMO BRUSHED TIN|14|476 +Brand#21|PROMO POLISHED NICKEL|49|476 +Brand#21|SMALL BRUSHED COPPER|36|476 +Brand#21|SMALL PLATED BRASS|49|476 +Brand#21|SMALL POLISHED COPPER|14|476 +Brand#21|STANDARD BURNISHED BRASS|19|476 +Brand#21|STANDARD POLISHED NICKEL|3|476 +Brand#22|LARGE ANODIZED STEEL|23|476 +Brand#22|LARGE BRUSHED STEEL|49|476 +Brand#22|LARGE POLISHED COPPER|45|476 +Brand#22|MEDIUM ANODIZED COPPER|14|476 +Brand#22|MEDIUM PLATED NICKEL|9|476 +Brand#22|PROMO PLATED STEEL|45|476 +Brand#22|SMALL ANODIZED COPPER|36|476 +Brand#22|SMALL ANODIZED COPPER|45|476 +Brand#22|SMALL ANODIZED TIN|9|476 +Brand#22|SMALL BURNISHED NICKEL|23|476 +Brand#22|SMALL PLATED NICKEL|9|476 +Brand#22|SMALL POLISHED STEEL|19|476 +Brand#22|STANDARD ANODIZED COPPER|45|476 +Brand#22|STANDARD BRUSHED BRASS|45|476 +Brand#22|STANDARD BRUSHED NICKEL|49|476 +Brand#22|STANDARD POLISHED COPPER|45|476 +Brand#23|LARGE ANODIZED NICKEL|3|476 +Brand#23|LARGE ANODIZED NICKEL|14|476 +Brand#23|LARGE ANODIZED STEEL|36|476 +Brand#23|LARGE BURNISHED BRASS|36|476 +Brand#23|LARGE BURNISHED NICKEL|19|476 +Brand#23|MEDIUM ANODIZED NICKEL|19|476 +Brand#23|MEDIUM BURNISHED NICKEL|14|476 +Brand#23|MEDIUM PLATED BRASS|3|476 +Brand#23|PROMO POLISHED TIN|23|476 +Brand#23|SMALL ANODIZED NICKEL|23|476 +Brand#23|SMALL ANODIZED NICKEL|49|476 +Brand#23|STANDARD PLATED NICKEL|49|476 +Brand#24|ECONOMY BRUSHED NICKEL|36|476 +Brand#24|LARGE ANODIZED COPPER|36|476 +Brand#24|LARGE ANODIZED STEEL|36|476 +Brand#24|LARGE BURNISHED STEEL|45|476 +Brand#24|LARGE POLISHED BRASS|36|476 +Brand#24|PROMO ANODIZED STEEL|45|476 +Brand#24|PROMO BRUSHED NICKEL|49|476 +Brand#24|SMALL ANODIZED NICKEL|49|476 +Brand#24|SMALL PLATED BRASS|49|476 +Brand#24|SMALL PLATED COPPER|3|476 +Brand#24|SMALL PLATED NICKEL|23|476 +Brand#24|STANDARD ANODIZED TIN|23|476 +Brand#25|ECONOMY ANODIZED COPPER|3|476 +Brand#25|ECONOMY BRUSHED BRASS|23|476 +Brand#25|ECONOMY BRUSHED COPPER|19|476 +Brand#25|ECONOMY POLISHED TIN|3|476 +Brand#25|LARGE ANODIZED TIN|45|476 +Brand#25|LARGE BRUSHED STEEL|36|476 +Brand#25|LARGE PLATED NICKEL|3|476 +Brand#25|LARGE PLATED STEEL|19|476 +Brand#25|MEDIUM BRUSHED COPPER|9|476 +Brand#25|PROMO PLATED BRASS|23|476 +Brand#25|PROMO POLISHED BRASS|14|476 +Brand#25|PROMO POLISHED STEEL|19|476 +Brand#25|SMALL ANODIZED STEEL|3|476 +Brand#25|SMALL BRUSHED BRASS|14|476 +Brand#25|SMALL BRUSHED TIN|14|476 +Brand#25|SMALL BURNISHED NICKEL|14|476 +Brand#25|STANDARD ANODIZED COPPER|49|476 +Brand#25|STANDARD PLATED STEEL|3|476 +Brand#31|LARGE BRUSHED STEEL|36|476 +Brand#31|MEDIUM BRUSHED BRASS|3|476 +Brand#31|MEDIUM BRUSHED NICKEL|23|476 +Brand#31|MEDIUM PLATED COPPER|49|476 +Brand#31|PROMO POLISHED NICKEL|14|476 +Brand#31|SMALL BURNISHED STEEL|3|476 +Brand#31|SMALL POLISHED STEEL|36|476 +Brand#31|SMALL POLISHED TIN|3|476 +Brand#31|STANDARD ANODIZED NICKEL|45|476 +Brand#32|ECONOMY BRUSHED BRASS|9|476 +Brand#32|ECONOMY BURNISHED COPPER|9|476 +Brand#32|LARGE BRUSHED TIN|36|476 +Brand#32|LARGE BRUSHED TIN|49|476 +Brand#32|MEDIUM BURNISHED TIN|49|476 +Brand#32|PROMO ANODIZED BRASS|23|476 +Brand#32|SMALL ANODIZED NICKEL|23|476 +Brand#32|SMALL BURNISHED TIN|14|476 +Brand#32|STANDARD ANODIZED STEEL|9|476 +Brand#32|STANDARD ANODIZED TIN|23|476 +Brand#32|STANDARD BRUSHED COPPER|49|476 +Brand#32|STANDARD BRUSHED STEEL|23|476 +Brand#32|STANDARD BURNISHED NICKEL|3|476 +Brand#33|ECONOMY ANODIZED STEEL|45|476 +Brand#33|ECONOMY BRUSHED NICKEL|36|476 +Brand#33|ECONOMY POLISHED NICKEL|23|476 +Brand#33|MEDIUM BRUSHED BRASS|14|476 +Brand#33|MEDIUM PLATED NICKEL|45|476 +Brand#33|PROMO PLATED STEEL|49|476 +Brand#33|SMALL ANODIZED BRASS|3|476 +Brand#33|SMALL BRUSHED BRASS|23|476 +Brand#33|SMALL BRUSHED TIN|19|476 +Brand#33|SMALL BURNISHED NICKEL|14|476 +Brand#33|SMALL POLISHED NICKEL|49|476 +Brand#33|STANDARD BURNISHED TIN|45|476 +Brand#33|STANDARD PLATED TIN|49|476 +Brand#33|STANDARD POLISHED BRASS|3|476 +Brand#34|ECONOMY BRUSHED NICKEL|49|476 +Brand#34|ECONOMY BURNISHED COPPER|19|476 +Brand#34|LARGE BRUSHED TIN|3|476 +Brand#34|LARGE BRUSHED TIN|14|476 +Brand#34|MEDIUM BRUSHED COPPER|45|476 +Brand#34|MEDIUM BRUSHED STEEL|14|476 +Brand#34|MEDIUM BURNISHED BRASS|45|476 +Brand#34|MEDIUM BURNISHED COPPER|9|476 +Brand#34|PROMO BRUSHED TIN|14|476 +Brand#34|PROMO BURNISHED BRASS|14|476 +Brand#34|PROMO PLATED NICKEL|36|476 +Brand#34|PROMO POLISHED STEEL|9|476 +Brand#34|SMALL ANODIZED COPPER|3|476 +Brand#34|STANDARD PLATED BRASS|14|476 +Brand#35|ECONOMY ANODIZED COPPER|36|476 +Brand#35|ECONOMY BRUSHED BRASS|9|476 +Brand#35|ECONOMY BRUSHED NICKEL|9|476 +Brand#35|ECONOMY BRUSHED STEEL|3|476 +Brand#35|ECONOMY POLISHED BRASS|14|476 +Brand#35|LARGE ANODIZED COPPER|3|476 +Brand#35|LARGE POLISHED COPPER|19|476 +Brand#35|MEDIUM BURNISHED COPPER|3|476 +Brand#35|MEDIUM BURNISHED TIN|45|476 +Brand#35|PROMO PLATED BRASS|9|476 +Brand#35|PROMO PLATED BRASS|14|476 +Brand#35|SMALL ANODIZED BRASS|49|476 +Brand#35|SMALL ANODIZED NICKEL|14|476 +Brand#35|SMALL BURNISHED STEEL|45|476 +Brand#35|SMALL POLISHED COPPER|23|476 +Brand#35|SMALL POLISHED NICKEL|49|476 +Brand#35|STANDARD POLISHED NICKEL|49|476 +Brand#41|ECONOMY BRUSHED BRASS|49|476 +Brand#41|ECONOMY BURNISHED COPPER|19|476 +Brand#41|ECONOMY BURNISHED NICKEL|19|476 +Brand#41|ECONOMY POLISHED BRASS|19|476 +Brand#41|ECONOMY POLISHED COPPER|36|476 +Brand#41|MEDIUM ANODIZED NICKEL|9|476 +Brand#41|MEDIUM BURNISHED COPPER|14|476 +Brand#41|MEDIUM BURNISHED COPPER|45|476 +Brand#41|SMALL BURNISHED COPPER|36|476 +Brand#41|STANDARD ANODIZED BRASS|9|476 +Brand#41|STANDARD ANODIZED NICKEL|23|476 +Brand#41|STANDARD BRUSHED STEEL|36|476 +Brand#41|STANDARD PLATED BRASS|19|476 +Brand#42|ECONOMY ANODIZED NICKEL|9|476 +Brand#42|ECONOMY ANODIZED STEEL|49|476 +Brand#42|LARGE ANODIZED COPPER|14|476 +Brand#42|LARGE PLATED NICKEL|9|476 +Brand#42|MEDIUM BURNISHED TIN|36|476 +Brand#42|PROMO BRUSHED BRASS|3|476 +Brand#42|PROMO POLISHED COPPER|9|476 +Brand#42|SMALL ANODIZED BRASS|14|476 +Brand#42|SMALL ANODIZED BRASS|49|476 +Brand#42|SMALL BURNISHED BRASS|49|476 +Brand#42|STANDARD ANODIZED BRASS|45|476 +Brand#42|STANDARD BRUSHED NICKEL|36|476 +Brand#42|STANDARD BRUSHED STEEL|9|476 +Brand#42|STANDARD BURNISHED NICKEL|45|476 +Brand#43|ECONOMY BRUSHED COPPER|49|476 +Brand#43|ECONOMY POLISHED BRASS|36|476 +Brand#43|ECONOMY POLISHED STEEL|45|476 +Brand#43|ECONOMY POLISHED TIN|14|476 +Brand#43|LARGE BRUSHED NICKEL|19|476 +Brand#43|LARGE BURNISHED COPPER|9|476 +Brand#43|LARGE POLISHED TIN|45|476 +Brand#43|MEDIUM PLATED COPPER|9|476 +Brand#43|PROMO ANODIZED TIN|9|476 +Brand#43|SMALL BURNISHED COPPER|36|476 +Brand#43|STANDARD PLATED STEEL|23|476 +Brand#44|ECONOMY PLATED STEEL|14|476 +Brand#44|LARGE ANODIZED BRASS|9|476 +Brand#44|LARGE BRUSHED TIN|23|476 +Brand#44|LARGE BURNISHED BRASS|9|476 +Brand#44|LARGE BURNISHED NICKEL|45|476 +Brand#44|LARGE PLATED COPPER|9|476 +Brand#44|MEDIUM BRUSHED TIN|23|476 +Brand#44|MEDIUM PLATED BRASS|19|476 +Brand#44|MEDIUM PLATED COPPER|9|476 +Brand#44|PROMO BURNISHED BRASS|36|476 +Brand#44|SMALL ANODIZED STEEL|14|476 +Brand#44|SMALL BRUSHED BRASS|23|476 +Brand#44|SMALL BRUSHED NICKEL|23|476 +Brand#44|SMALL BURNISHED COPPER|19|476 +Brand#44|STANDARD BRUSHED STEEL|36|476 +Brand#44|STANDARD PLATED TIN|45|476 +Brand#51|ECONOMY PLATED NICKEL|45|476 +Brand#51|ECONOMY PLATED STEEL|23|476 +Brand#51|LARGE BRUSHED TIN|19|476 +Brand#51|LARGE PLATED TIN|45|476 +Brand#51|PROMO BURNISHED BRASS|3|476 +Brand#51|SMALL BRUSHED COPPER|49|476 +Brand#51|SMALL BRUSHED STEEL|3|476 +Brand#51|SMALL POLISHED NICKEL|49|476 +Brand#51|SMALL POLISHED TIN|49|476 +Brand#51|STANDARD POLISHED COPPER|36|476 +Brand#52|ECONOMY PLATED TIN|23|476 +Brand#52|LARGE BRUSHED TIN|36|476 +Brand#52|MEDIUM BURNISHED COPPER|19|476 +Brand#52|MEDIUM BURNISHED TIN|36|476 +Brand#52|PROMO BURNISHED TIN|19|476 +Brand#52|PROMO POLISHED BRASS|14|476 +Brand#52|PROMO POLISHED STEEL|23|476 +Brand#52|PROMO POLISHED TIN|19|476 +Brand#52|STANDARD POLISHED TIN|14|476 +Brand#53|ECONOMY POLISHED COPPER|14|476 +Brand#53|LARGE ANODIZED NICKEL|49|476 +Brand#53|LARGE BRUSHED TIN|19|476 +Brand#53|MEDIUM BURNISHED TIN|3|476 +Brand#53|MEDIUM PLATED NICKEL|9|476 +Brand#53|MEDIUM PLATED NICKEL|36|476 +Brand#53|MEDIUM PLATED STEEL|23|476 +Brand#53|MEDIUM PLATED STEEL|49|476 +Brand#53|PROMO BRUSHED COPPER|14|476 +Brand#53|PROMO BURNISHED COPPER|14|476 +Brand#53|SMALL ANODIZED STEEL|45|476 +Brand#53|SMALL BRUSHED COPPER|19|476 +Brand#53|SMALL BURNISHED COPPER|9|476 +Brand#53|SMALL BURNISHED NICKEL|14|476 +Brand#53|SMALL PLATED COPPER|3|476 +Brand#53|STANDARD BRUSHED BRASS|19|476 +Brand#53|STANDARD BURNISHED NICKEL|19|476 +Brand#53|STANDARD BURNISHED TIN|3|476 +Brand#53|STANDARD POLISHED BRASS|9|476 +Brand#54|ECONOMY PLATED BRASS|23|476 +Brand#54|LARGE ANODIZED COPPER|9|476 +Brand#54|LARGE ANODIZED NICKEL|14|476 +Brand#54|LARGE ANODIZED STEEL|19|476 +Brand#54|LARGE BURNISHED COPPER|49|476 +Brand#54|MEDIUM BURNISHED BRASS|45|476 +Brand#54|PROMO BRUSHED STEEL|3|476 +Brand#54|PROMO BRUSHED STEEL|49|476 +Brand#54|PROMO BRUSHED TIN|36|476 +Brand#54|SMALL ANODIZED TIN|14|476 +Brand#54|SMALL ANODIZED TIN|19|476 +Brand#54|SMALL BRUSHED COPPER|9|476 +Brand#54|SMALL PLATED STEEL|3|476 +Brand#54|SMALL PLATED STEEL|14|476 +Brand#54|STANDARD BURNISHED TIN|3|476 +Brand#54|STANDARD PLATED STEEL|9|476 +Brand#55|MEDIUM BRUSHED STEEL|23|476 +Brand#55|MEDIUM BURNISHED TIN|9|476 +Brand#55|MEDIUM PLATED TIN|14|476 +Brand#55|PROMO ANODIZED COPPER|49|476 +Brand#55|PROMO ANODIZED STEEL|3|476 +Brand#55|PROMO PLATED TIN|36|476 +Brand#55|PROMO POLISHED STEEL|45|476 +Brand#55|SMALL ANODIZED BRASS|19|476 +Brand#55|SMALL ANODIZED STEEL|3|476 +Brand#55|SMALL ANODIZED TIN|3|476 +Brand#11|ECONOMY ANODIZED BRASS|19|475 +Brand#11|ECONOMY BURNISHED BRASS|9|475 +Brand#11|LARGE BRUSHED STEEL|36|475 +Brand#11|LARGE PLATED TIN|49|475 +Brand#11|LARGE POLISHED STEEL|14|475 +Brand#11|MEDIUM PLATED COPPER|14|475 +Brand#11|PROMO BURNISHED COPPER|45|475 +Brand#11|PROMO POLISHED TIN|3|475 +Brand#12|MEDIUM ANODIZED TIN|23|475 +Brand#12|PROMO ANODIZED COPPER|14|475 +Brand#12|SMALL ANODIZED COPPER|9|475 +Brand#12|STANDARD BRUSHED TIN|45|475 +Brand#12|STANDARD BURNISHED BRASS|23|475 +Brand#13|ECONOMY ANODIZED COPPER|19|475 +Brand#13|LARGE ANODIZED STEEL|49|475 +Brand#13|MEDIUM ANODIZED BRASS|9|475 +Brand#13|PROMO BRUSHED COPPER|3|475 +Brand#13|STANDARD ANODIZED BRASS|36|475 +Brand#14|ECONOMY PLATED BRASS|45|475 +Brand#14|MEDIUM ANODIZED NICKEL|23|475 +Brand#14|MEDIUM ANODIZED TIN|3|475 +Brand#14|MEDIUM PLATED NICKEL|19|475 +Brand#15|ECONOMY BRUSHED TIN|14|475 +Brand#15|LARGE BRUSHED STEEL|45|475 +Brand#15|LARGE BURNISHED STEEL|14|475 +Brand#15|LARGE POLISHED BRASS|23|475 +Brand#15|STANDARD POLISHED STEEL|45|475 +Brand#21|LARGE ANODIZED TIN|14|475 +Brand#21|PROMO PLATED COPPER|19|475 +Brand#22|MEDIUM ANODIZED STEEL|14|475 +Brand#22|PROMO ANODIZED BRASS|23|475 +Brand#22|STANDARD BRUSHED NICKEL|19|475 +Brand#23|ECONOMY BRUSHED STEEL|3|475 +Brand#23|ECONOMY BURNISHED NICKEL|49|475 +Brand#23|MEDIUM ANODIZED BRASS|23|475 +Brand#23|MEDIUM PLATED BRASS|14|475 +Brand#23|PROMO ANODIZED STEEL|14|475 +Brand#23|PROMO PLATED STEEL|14|475 +Brand#23|SMALL PLATED TIN|14|475 +Brand#23|STANDARD BRUSHED COPPER|3|475 +Brand#23|STANDARD PLATED NICKEL|36|475 +Brand#23|STANDARD PLATED STEEL|3|475 +Brand#24|ECONOMY BRUSHED BRASS|36|475 +Brand#24|MEDIUM BURNISHED BRASS|19|475 +Brand#24|SMALL BRUSHED TIN|9|475 +Brand#24|SMALL BURNISHED STEEL|49|475 +Brand#24|SMALL POLISHED STEEL|49|475 +Brand#25|ECONOMY POLISHED NICKEL|14|475 +Brand#25|LARGE BURNISHED STEEL|9|475 +Brand#25|PROMO ANODIZED BRASS|23|475 +Brand#25|PROMO ANODIZED COPPER|23|475 +Brand#25|PROMO BRUSHED BRASS|36|475 +Brand#25|STANDARD BRUSHED NICKEL|14|475 +Brand#31|LARGE POLISHED COPPER|14|475 +Brand#31|MEDIUM PLATED BRASS|19|475 +Brand#31|PROMO POLISHED STEEL|19|475 +Brand#31|STANDARD ANODIZED BRASS|23|475 +Brand#31|STANDARD PLATED COPPER|14|475 +Brand#32|LARGE ANODIZED COPPER|14|475 +Brand#32|LARGE BRUSHED STEEL|3|475 +Brand#32|LARGE BURNISHED NICKEL|19|475 +Brand#32|PROMO POLISHED NICKEL|14|475 +Brand#32|SMALL PLATED NICKEL|19|475 +Brand#33|ECONOMY POLISHED COPPER|19|475 +Brand#33|LARGE PLATED TIN|14|475 +Brand#33|LARGE POLISHED NICKEL|36|475 +Brand#33|MEDIUM BRUSHED STEEL|45|475 +Brand#33|PROMO BRUSHED COPPER|23|475 +Brand#33|PROMO POLISHED NICKEL|3|475 +Brand#33|SMALL BRUSHED STEEL|36|475 +Brand#34|PROMO PLATED NICKEL|9|475 +Brand#35|MEDIUM PLATED COPPER|23|475 +Brand#35|SMALL POLISHED BRASS|3|475 +Brand#41|ECONOMY ANODIZED TIN|9|475 +Brand#41|PROMO BRUSHED TIN|14|475 +Brand#41|PROMO PLATED BRASS|14|475 +Brand#41|SMALL BRUSHED BRASS|49|475 +Brand#42|MEDIUM BRUSHED NICKEL|14|475 +Brand#42|MEDIUM BURNISHED STEEL|45|475 +Brand#42|MEDIUM PLATED NICKEL|19|475 +Brand#42|PROMO PLATED NICKEL|19|475 +Brand#42|STANDARD BURNISHED STEEL|3|475 +Brand#42|STANDARD POLISHED NICKEL|49|475 +Brand#43|ECONOMY BRUSHED BRASS|14|475 +Brand#43|MEDIUM BRUSHED TIN|45|475 +Brand#43|SMALL ANODIZED BRASS|19|475 +Brand#44|ECONOMY BURNISHED TIN|14|475 +Brand#44|LARGE ANODIZED COPPER|3|475 +Brand#44|LARGE PLATED COPPER|23|475 +Brand#44|PROMO BRUSHED BRASS|49|475 +Brand#44|SMALL ANODIZED NICKEL|36|475 +Brand#44|SMALL ANODIZED STEEL|3|475 +Brand#44|SMALL PLATED NICKEL|36|475 +Brand#51|SMALL POLISHED STEEL|49|475 +Brand#52|ECONOMY PLATED NICKEL|36|475 +Brand#52|LARGE BURNISHED COPPER|3|475 +Brand#52|PROMO BRUSHED STEEL|49|475 +Brand#52|STANDARD PLATED STEEL|36|475 +Brand#52|STANDARD POLISHED TIN|49|475 +Brand#53|PROMO ANODIZED TIN|19|475 +Brand#53|STANDARD PLATED COPPER|9|475 +Brand#54|ECONOMY BRUSHED NICKEL|19|475 +Brand#54|LARGE BRUSHED COPPER|14|475 +Brand#54|LARGE PLATED STEEL|45|475 +Brand#54|LARGE POLISHED NICKEL|14|475 +Brand#54|MEDIUM ANODIZED COPPER|49|475 +Brand#54|SMALL BURNISHED BRASS|36|475 +Brand#54|STANDARD ANODIZED STEEL|3|475 +Brand#54|STANDARD BRUSHED STEEL|23|475 +Brand#54|STANDARD BRUSHED TIN|14|475 +Brand#55|ECONOMY ANODIZED STEEL|19|475 +Brand#55|MEDIUM ANODIZED COPPER|9|475 +Brand#55|MEDIUM BRUSHED NICKEL|3|475 +Brand#55|PROMO BRUSHED COPPER|49|475 +Brand#55|SMALL BURNISHED STEEL|36|475 +Brand#12|MEDIUM PLATED COPPER|19|474 +Brand#14|ECONOMY POLISHED BRASS|14|474 +Brand#14|SMALL BRUSHED STEEL|49|474 +Brand#15|PROMO BRUSHED STEEL|36|474 +Brand#15|STANDARD BRUSHED TIN|49|474 +Brand#23|PROMO PLATED NICKEL|23|474 +Brand#24|MEDIUM BRUSHED STEEL|36|474 +Brand#24|PROMO PLATED TIN|23|474 +Brand#34|STANDARD ANODIZED TIN|14|474 +Brand#35|LARGE ANODIZED COPPER|45|474 +Brand#35|SMALL PLATED STEEL|49|474 +Brand#42|PROMO BRUSHED NICKEL|49|474 +Brand#44|STANDARD POLISHED COPPER|36|474 +Brand#52|SMALL BRUSHED BRASS|19|474 +Brand#55|ECONOMY BRUSHED TIN|14|474 +Brand#55|LARGE POLISHED BRASS|49|474 +Brand#11|PROMO BRUSHED STEEL|36|473 +Brand#14|LARGE ANODIZED STEEL|36|473 +Brand#15|MEDIUM BRUSHED TIN|19|473 +Brand#42|LARGE BURNISHED BRASS|36|473 +Brand#43|SMALL BRUSHED BRASS|14|473 +Brand#11|ECONOMY BRUSHED STEEL|19|472 +Brand#11|ECONOMY POLISHED TIN|9|472 +Brand#11|ECONOMY POLISHED TIN|36|472 +Brand#11|MEDIUM BURNISHED COPPER|9|472 +Brand#11|MEDIUM BURNISHED TIN|36|472 +Brand#11|MEDIUM PLATED COPPER|3|472 +Brand#11|MEDIUM PLATED STEEL|19|472 +Brand#11|PROMO BRUSHED NICKEL|45|472 +Brand#11|SMALL ANODIZED COPPER|23|472 +Brand#11|SMALL BRUSHED STEEL|14|472 +Brand#11|SMALL POLISHED BRASS|45|472 +Brand#11|SMALL POLISHED NICKEL|19|472 +Brand#11|STANDARD BURNISHED BRASS|49|472 +Brand#11|STANDARD BURNISHED TIN|3|472 +Brand#12|ECONOMY BURNISHED COPPER|36|472 +Brand#12|ECONOMY PLATED NICKEL|23|472 +Brand#12|LARGE BRUSHED COPPER|14|472 +Brand#12|LARGE BRUSHED NICKEL|36|472 +Brand#12|LARGE PLATED NICKEL|36|472 +Brand#12|MEDIUM PLATED COPPER|36|472 +Brand#12|PROMO BURNISHED BRASS|45|472 +Brand#12|SMALL ANODIZED BRASS|9|472 +Brand#12|SMALL BRUSHED STEEL|9|472 +Brand#12|SMALL BRUSHED TIN|45|472 +Brand#12|SMALL POLISHED TIN|23|472 +Brand#12|STANDARD ANODIZED COPPER|36|472 +Brand#12|STANDARD ANODIZED STEEL|3|472 +Brand#12|STANDARD ANODIZED TIN|49|472 +Brand#12|STANDARD BURNISHED TIN|3|472 +Brand#12|STANDARD POLISHED STEEL|45|472 +Brand#13|ECONOMY ANODIZED BRASS|14|472 +Brand#13|ECONOMY ANODIZED BRASS|45|472 +Brand#13|ECONOMY BURNISHED NICKEL|36|472 +Brand#13|ECONOMY POLISHED NICKEL|23|472 +Brand#13|LARGE BURNISHED COPPER|49|472 +Brand#13|MEDIUM BRUSHED COPPER|45|472 +Brand#13|MEDIUM PLATED STEEL|23|472 +Brand#13|PROMO POLISHED NICKEL|3|472 +Brand#13|SMALL BRUSHED TIN|19|472 +Brand#13|SMALL BURNISHED NICKEL|14|472 +Brand#13|SMALL BURNISHED NICKEL|23|472 +Brand#13|SMALL BURNISHED TIN|19|472 +Brand#13|SMALL PLATED NICKEL|9|472 +Brand#13|STANDARD POLISHED COPPER|45|472 +Brand#14|ECONOMY ANODIZED COPPER|36|472 +Brand#14|ECONOMY BURNISHED NICKEL|23|472 +Brand#14|LARGE BRUSHED STEEL|3|472 +Brand#14|LARGE PLATED COPPER|23|472 +Brand#14|MEDIUM BRUSHED STEEL|19|472 +Brand#14|PROMO ANODIZED NICKEL|19|472 +Brand#14|PROMO BRUSHED BRASS|19|472 +Brand#14|PROMO BRUSHED BRASS|36|472 +Brand#14|PROMO BURNISHED BRASS|23|472 +Brand#14|PROMO POLISHED COPPER|19|472 +Brand#14|SMALL BRUSHED TIN|45|472 +Brand#14|SMALL BURNISHED BRASS|3|472 +Brand#14|SMALL POLISHED COPPER|3|472 +Brand#14|STANDARD BRUSHED COPPER|49|472 +Brand#15|ECONOMY ANODIZED COPPER|23|472 +Brand#15|ECONOMY BURNISHED STEEL|3|472 +Brand#15|LARGE ANODIZED TIN|3|472 +Brand#15|LARGE BRUSHED BRASS|3|472 +Brand#15|LARGE BURNISHED TIN|45|472 +Brand#15|LARGE PLATED NICKEL|45|472 +Brand#15|MEDIUM PLATED BRASS|3|472 +Brand#15|PROMO ANODIZED NICKEL|36|472 +Brand#15|PROMO PLATED NICKEL|23|472 +Brand#15|SMALL BRUSHED COPPER|36|472 +Brand#15|SMALL BRUSHED NICKEL|36|472 +Brand#15|SMALL BURNISHED COPPER|14|472 +Brand#15|SMALL PLATED BRASS|23|472 +Brand#15|SMALL POLISHED NICKEL|9|472 +Brand#15|STANDARD BURNISHED TIN|9|472 +Brand#21|ECONOMY BRUSHED BRASS|9|472 +Brand#21|ECONOMY PLATED COPPER|23|472 +Brand#21|ECONOMY POLISHED COPPER|23|472 +Brand#21|LARGE PLATED NICKEL|9|472 +Brand#21|MEDIUM BURNISHED COPPER|9|472 +Brand#21|MEDIUM BURNISHED COPPER|14|472 +Brand#21|MEDIUM BURNISHED STEEL|23|472 +Brand#21|PROMO ANODIZED STEEL|49|472 +Brand#21|SMALL ANODIZED COPPER|45|472 +Brand#21|SMALL BRUSHED STEEL|45|472 +Brand#21|SMALL BURNISHED COPPER|45|472 +Brand#21|SMALL POLISHED STEEL|14|472 +Brand#21|STANDARD BURNISHED COPPER|19|472 +Brand#21|STANDARD POLISHED TIN|9|472 +Brand#22|ECONOMY ANODIZED BRASS|45|472 +Brand#22|ECONOMY BURNISHED COPPER|14|472 +Brand#22|ECONOMY POLISHED STEEL|14|472 +Brand#22|LARGE ANODIZED COPPER|14|472 +Brand#22|PROMO BRUSHED NICKEL|14|472 +Brand#22|PROMO BURNISHED BRASS|3|472 +Brand#22|PROMO PLATED BRASS|49|472 +Brand#22|PROMO POLISHED BRASS|14|472 +Brand#22|SMALL BRUSHED STEEL|23|472 +Brand#22|SMALL BURNISHED TIN|14|472 +Brand#22|STANDARD ANODIZED STEEL|9|472 +Brand#22|STANDARD BURNISHED STEEL|36|472 +Brand#23|ECONOMY ANODIZED STEEL|36|472 +Brand#23|ECONOMY BURNISHED TIN|49|472 +Brand#23|LARGE BURNISHED BRASS|45|472 +Brand#23|LARGE BURNISHED COPPER|19|472 +Brand#23|LARGE BURNISHED STEEL|45|472 +Brand#23|LARGE POLISHED TIN|9|472 +Brand#23|MEDIUM ANODIZED COPPER|3|472 +Brand#23|MEDIUM ANODIZED TIN|45|472 +Brand#23|MEDIUM BRUSHED TIN|9|472 +Brand#23|MEDIUM BURNISHED STEEL|23|472 +Brand#23|MEDIUM PLATED BRASS|9|472 +Brand#23|PROMO ANODIZED NICKEL|23|472 +Brand#23|PROMO ANODIZED TIN|49|472 +Brand#23|PROMO PLATED COPPER|3|472 +Brand#23|PROMO PLATED COPPER|49|472 +Brand#23|SMALL ANODIZED TIN|45|472 +Brand#23|STANDARD BRUSHED STEEL|19|472 +Brand#23|STANDARD BURNISHED COPPER|14|472 +Brand#24|ECONOMY BURNISHED NICKEL|3|472 +Brand#24|LARGE BURNISHED BRASS|14|472 +Brand#24|LARGE PLATED COPPER|49|472 +Brand#24|MEDIUM BURNISHED STEEL|45|472 +Brand#24|MEDIUM BURNISHED TIN|3|472 +Brand#24|PROMO BRUSHED BRASS|36|472 +Brand#24|SMALL ANODIZED COPPER|19|472 +Brand#24|SMALL ANODIZED STEEL|14|472 +Brand#24|SMALL BRUSHED BRASS|19|472 +Brand#24|STANDARD BURNISHED BRASS|14|472 +Brand#24|STANDARD PLATED BRASS|23|472 +Brand#24|STANDARD POLISHED TIN|9|472 +Brand#25|ECONOMY ANODIZED NICKEL|19|472 +Brand#25|ECONOMY POLISHED TIN|23|472 +Brand#25|LARGE BURNISHED NICKEL|14|472 +Brand#25|LARGE PLATED STEEL|23|472 +Brand#25|LARGE POLISHED BRASS|49|472 +Brand#25|LARGE POLISHED COPPER|14|472 +Brand#25|LARGE POLISHED TIN|19|472 +Brand#25|MEDIUM ANODIZED TIN|36|472 +Brand#25|MEDIUM BRUSHED NICKEL|14|472 +Brand#25|MEDIUM PLATED COPPER|23|472 +Brand#25|MEDIUM PLATED STEEL|9|472 +Brand#25|PROMO ANODIZED BRASS|14|472 +Brand#25|PROMO BURNISHED NICKEL|3|472 +Brand#25|PROMO PLATED STEEL|14|472 +Brand#25|SMALL BRUSHED NICKEL|9|472 +Brand#25|SMALL PLATED STEEL|19|472 +Brand#25|SMALL POLISHED COPPER|49|472 +Brand#25|STANDARD ANODIZED NICKEL|3|472 +Brand#25|STANDARD BRUSHED BRASS|3|472 +Brand#25|STANDARD BRUSHED BRASS|14|472 +Brand#31|ECONOMY ANODIZED STEEL|3|472 +Brand#31|MEDIUM ANODIZED BRASS|23|472 +Brand#31|MEDIUM ANODIZED BRASS|49|472 +Brand#31|MEDIUM BRUSHED COPPER|19|472 +Brand#31|MEDIUM BRUSHED COPPER|45|472 +Brand#31|MEDIUM BURNISHED COPPER|36|472 +Brand#31|MEDIUM PLATED STEEL|3|472 +Brand#31|PROMO BRUSHED NICKEL|14|472 +Brand#31|PROMO BURNISHED STEEL|3|472 +Brand#31|SMALL ANODIZED STEEL|9|472 +Brand#31|SMALL PLATED TIN|9|472 +Brand#31|STANDARD BRUSHED STEEL|45|472 +Brand#31|STANDARD PLATED BRASS|3|472 +Brand#31|STANDARD PLATED COPPER|45|472 +Brand#32|ECONOMY ANODIZED NICKEL|36|472 +Brand#32|ECONOMY BRUSHED STEEL|3|472 +Brand#32|ECONOMY BRUSHED TIN|19|472 +Brand#32|ECONOMY BURNISHED STEEL|3|472 +Brand#32|ECONOMY POLISHED STEEL|45|472 +Brand#32|LARGE POLISHED COPPER|45|472 +Brand#32|LARGE POLISHED TIN|3|472 +Brand#32|MEDIUM ANODIZED BRASS|45|472 +Brand#32|MEDIUM ANODIZED COPPER|36|472 +Brand#32|MEDIUM ANODIZED STEEL|9|472 +Brand#32|MEDIUM BRUSHED BRASS|49|472 +Brand#32|MEDIUM PLATED NICKEL|23|472 +Brand#32|PROMO BRUSHED BRASS|9|472 +Brand#32|PROMO BRUSHED NICKEL|14|472 +Brand#32|PROMO BRUSHED NICKEL|36|472 +Brand#32|PROMO BURNISHED NICKEL|3|472 +Brand#32|PROMO PLATED STEEL|36|472 +Brand#32|PROMO POLISHED COPPER|3|472 +Brand#32|SMALL ANODIZED STEEL|45|472 +Brand#32|SMALL BRUSHED TIN|49|472 +Brand#32|SMALL POLISHED NICKEL|19|472 +Brand#32|STANDARD PLATED COPPER|36|472 +Brand#32|STANDARD PLATED TIN|49|472 +Brand#32|STANDARD POLISHED TIN|3|472 +Brand#33|ECONOMY ANODIZED BRASS|9|472 +Brand#33|ECONOMY BRUSHED COPPER|3|472 +Brand#33|ECONOMY BRUSHED COPPER|49|472 +Brand#33|ECONOMY BURNISHED BRASS|19|472 +Brand#33|ECONOMY PLATED NICKEL|19|472 +Brand#33|PROMO ANODIZED NICKEL|23|472 +Brand#33|PROMO BRUSHED NICKEL|36|472 +Brand#33|SMALL ANODIZED NICKEL|3|472 +Brand#33|SMALL ANODIZED STEEL|9|472 +Brand#33|SMALL POLISHED STEEL|23|472 +Brand#33|STANDARD ANODIZED COPPER|19|472 +Brand#33|STANDARD ANODIZED TIN|23|472 +Brand#33|STANDARD BURNISHED COPPER|45|472 +Brand#34|ECONOMY ANODIZED NICKEL|19|472 +Brand#34|ECONOMY ANODIZED NICKEL|49|472 +Brand#34|ECONOMY BRUSHED BRASS|19|472 +Brand#34|ECONOMY BRUSHED COPPER|19|472 +Brand#34|ECONOMY PLATED COPPER|49|472 +Brand#34|LARGE ANODIZED TIN|23|472 +Brand#34|LARGE BRUSHED BRASS|49|472 +Brand#34|LARGE POLISHED NICKEL|9|472 +Brand#34|LARGE POLISHED TIN|23|472 +Brand#34|MEDIUM ANODIZED NICKEL|49|472 +Brand#34|MEDIUM BRUSHED NICKEL|36|472 +Brand#34|MEDIUM BURNISHED TIN|19|472 +Brand#34|PROMO ANODIZED TIN|49|472 +Brand#34|PROMO BRUSHED BRASS|36|472 +Brand#34|PROMO BURNISHED STEEL|45|472 +Brand#34|PROMO PLATED STEEL|9|472 +Brand#34|PROMO PLATED STEEL|19|472 +Brand#34|PROMO PLATED STEEL|36|472 +Brand#34|SMALL BRUSHED STEEL|36|472 +Brand#34|SMALL PLATED STEEL|45|472 +Brand#34|SMALL POLISHED STEEL|14|472 +Brand#34|STANDARD ANODIZED BRASS|3|472 +Brand#34|STANDARD BRUSHED TIN|9|472 +Brand#35|ECONOMY BURNISHED COPPER|9|472 +Brand#35|LARGE BURNISHED COPPER|3|472 +Brand#35|LARGE BURNISHED TIN|49|472 +Brand#35|LARGE POLISHED STEEL|45|472 +Brand#35|MEDIUM BRUSHED COPPER|3|472 +Brand#35|MEDIUM BRUSHED NICKEL|49|472 +Brand#35|PROMO PLATED NICKEL|23|472 +Brand#35|PROMO POLISHED NICKEL|23|472 +Brand#35|SMALL ANODIZED TIN|19|472 +Brand#35|SMALL BURNISHED NICKEL|45|472 +Brand#35|SMALL PLATED COPPER|9|472 +Brand#35|STANDARD ANODIZED NICKEL|19|472 +Brand#35|STANDARD POLISHED TIN|23|472 +Brand#41|ECONOMY PLATED TIN|23|472 +Brand#41|ECONOMY POLISHED BRASS|9|472 +Brand#41|ECONOMY POLISHED COPPER|23|472 +Brand#41|LARGE BRUSHED COPPER|3|472 +Brand#41|LARGE BRUSHED NICKEL|45|472 +Brand#41|LARGE BRUSHED TIN|45|472 +Brand#41|LARGE BURNISHED STEEL|9|472 +Brand#41|LARGE PLATED BRASS|19|472 +Brand#41|MEDIUM BRUSHED COPPER|14|472 +Brand#41|MEDIUM PLATED NICKEL|14|472 +Brand#41|PROMO ANODIZED COPPER|49|472 +Brand#41|PROMO ANODIZED NICKEL|49|472 +Brand#41|PROMO BURNISHED BRASS|19|472 +Brand#41|PROMO POLISHED STEEL|36|472 +Brand#41|SMALL BRUSHED STEEL|19|472 +Brand#41|SMALL BURNISHED COPPER|23|472 +Brand#41|SMALL BURNISHED NICKEL|9|472 +Brand#41|STANDARD ANODIZED BRASS|36|472 +Brand#41|STANDARD ANODIZED STEEL|23|472 +Brand#41|STANDARD POLISHED BRASS|9|472 +Brand#41|STANDARD POLISHED TIN|36|472 +Brand#42|ECONOMY BRUSHED NICKEL|9|472 +Brand#42|ECONOMY BURNISHED NICKEL|23|472 +Brand#42|ECONOMY BURNISHED TIN|49|472 +Brand#42|ECONOMY POLISHED COPPER|14|472 +Brand#42|ECONOMY POLISHED TIN|36|472 +Brand#42|LARGE ANODIZED NICKEL|36|472 +Brand#42|LARGE PLATED BRASS|49|472 +Brand#42|MEDIUM ANODIZED BRASS|19|472 +Brand#42|PROMO BRUSHED STEEL|49|472 +Brand#42|PROMO PLATED NICKEL|14|472 +Brand#42|PROMO PLATED STEEL|19|472 +Brand#42|SMALL BRUSHED TIN|9|472 +Brand#42|SMALL POLISHED BRASS|49|472 +Brand#42|STANDARD BRUSHED STEEL|3|472 +Brand#42|STANDARD PLATED STEEL|49|472 +Brand#43|ECONOMY BRUSHED COPPER|14|472 +Brand#43|ECONOMY BRUSHED COPPER|19|472 +Brand#43|ECONOMY BURNISHED NICKEL|49|472 +Brand#43|ECONOMY PLATED TIN|3|472 +Brand#43|LARGE BRUSHED TIN|23|472 +Brand#43|LARGE PLATED NICKEL|19|472 +Brand#43|MEDIUM ANODIZED COPPER|23|472 +Brand#43|MEDIUM BRUSHED COPPER|9|472 +Brand#43|MEDIUM BRUSHED NICKEL|14|472 +Brand#43|MEDIUM BURNISHED BRASS|19|472 +Brand#43|MEDIUM PLATED STEEL|36|472 +Brand#43|PROMO ANODIZED COPPER|3|472 +Brand#43|SMALL ANODIZED NICKEL|49|472 +Brand#43|SMALL BRUSHED NICKEL|23|472 +Brand#43|SMALL BURNISHED COPPER|9|472 +Brand#43|STANDARD ANODIZED COPPER|3|472 +Brand#43|STANDARD BURNISHED BRASS|23|472 +Brand#43|STANDARD PLATED BRASS|49|472 +Brand#43|STANDARD POLISHED STEEL|36|472 +Brand#44|ECONOMY BRUSHED STEEL|19|472 +Brand#44|ECONOMY BURNISHED TIN|23|472 +Brand#44|LARGE ANODIZED NICKEL|49|472 +Brand#44|LARGE ANODIZED STEEL|14|472 +Brand#44|LARGE BRUSHED TIN|45|472 +Brand#44|LARGE BURNISHED NICKEL|23|472 +Brand#44|LARGE BURNISHED TIN|45|472 +Brand#44|LARGE PLATED BRASS|14|472 +Brand#44|LARGE PLATED NICKEL|9|472 +Brand#44|LARGE PLATED NICKEL|14|472 +Brand#44|LARGE PLATED STEEL|45|472 +Brand#44|LARGE POLISHED TIN|36|472 +Brand#44|PROMO BRUSHED BRASS|36|472 +Brand#44|PROMO BRUSHED NICKEL|36|472 +Brand#44|PROMO BURNISHED TIN|23|472 +Brand#44|PROMO PLATED STEEL|14|472 +Brand#44|PROMO POLISHED TIN|14|472 +Brand#44|SMALL BRUSHED BRASS|3|472 +Brand#44|SMALL BURNISHED COPPER|9|472 +Brand#44|SMALL PLATED BRASS|36|472 +Brand#44|STANDARD ANODIZED BRASS|45|472 +Brand#51|ECONOMY ANODIZED BRASS|49|472 +Brand#51|ECONOMY ANODIZED STEEL|3|472 +Brand#51|ECONOMY BRUSHED BRASS|3|472 +Brand#51|ECONOMY BURNISHED STEEL|23|472 +Brand#51|LARGE ANODIZED STEEL|19|472 +Brand#51|LARGE BRUSHED BRASS|9|472 +Brand#51|LARGE PLATED COPPER|14|472 +Brand#51|LARGE POLISHED BRASS|36|472 +Brand#51|MEDIUM ANODIZED COPPER|9|472 +Brand#51|PROMO BURNISHED COPPER|3|472 +Brand#51|PROMO BURNISHED STEEL|49|472 +Brand#51|PROMO PLATED COPPER|3|472 +Brand#51|SMALL BRUSHED COPPER|19|472 +Brand#51|SMALL BRUSHED COPPER|23|472 +Brand#51|SMALL BURNISHED COPPER|19|472 +Brand#51|SMALL PLATED TIN|36|472 +Brand#51|STANDARD ANODIZED TIN|19|472 +Brand#51|STANDARD ANODIZED TIN|49|472 +Brand#51|STANDARD BURNISHED COPPER|3|472 +Brand#51|STANDARD PLATED STEEL|19|472 +Brand#52|LARGE BURNISHED STEEL|49|472 +Brand#52|MEDIUM BRUSHED NICKEL|45|472 +Brand#52|MEDIUM PLATED STEEL|14|472 +Brand#52|MEDIUM PLATED TIN|49|472 +Brand#52|PROMO ANODIZED COPPER|23|472 +Brand#52|PROMO ANODIZED STEEL|23|472 +Brand#52|PROMO ANODIZED STEEL|45|472 +Brand#52|PROMO BRUSHED TIN|23|472 +Brand#52|PROMO PLATED COPPER|3|472 +Brand#52|PROMO PLATED STEEL|3|472 +Brand#52|SMALL BRUSHED STEEL|36|472 +Brand#52|SMALL PLATED BRASS|23|472 +Brand#52|SMALL PLATED STEEL|19|472 +Brand#52|STANDARD PLATED BRASS|49|472 +Brand#52|STANDARD POLISHED NICKEL|3|472 +Brand#53|ECONOMY ANODIZED TIN|36|472 +Brand#53|LARGE ANODIZED NICKEL|9|472 +Brand#53|LARGE BURNISHED TIN|9|472 +Brand#53|LARGE PLATED NICKEL|49|472 +Brand#53|LARGE POLISHED COPPER|49|472 +Brand#53|MEDIUM BURNISHED COPPER|23|472 +Brand#53|MEDIUM BURNISHED COPPER|36|472 +Brand#53|MEDIUM PLATED COPPER|23|472 +Brand#53|MEDIUM PLATED TIN|36|472 +Brand#53|PROMO BRUSHED NICKEL|36|472 +Brand#53|SMALL BURNISHED COPPER|23|472 +Brand#53|STANDARD BRUSHED COPPER|49|472 +Brand#53|STANDARD BRUSHED TIN|36|472 +Brand#53|STANDARD BURNISHED BRASS|14|472 +Brand#53|STANDARD BURNISHED TIN|19|472 +Brand#53|STANDARD BURNISHED TIN|49|472 +Brand#53|STANDARD PLATED STEEL|19|472 +Brand#54|ECONOMY ANODIZED BRASS|14|472 +Brand#54|ECONOMY ANODIZED STEEL|9|472 +Brand#54|ECONOMY POLISHED COPPER|3|472 +Brand#54|ECONOMY POLISHED COPPER|36|472 +Brand#54|LARGE BRUSHED COPPER|49|472 +Brand#54|LARGE BRUSHED TIN|3|472 +Brand#54|MEDIUM ANODIZED BRASS|49|472 +Brand#54|MEDIUM BRUSHED COPPER|3|472 +Brand#54|PROMO ANODIZED BRASS|19|472 +Brand#54|PROMO BRUSHED BRASS|49|472 +Brand#54|PROMO PLATED BRASS|23|472 +Brand#54|SMALL BURNISHED TIN|23|472 +Brand#54|SMALL BURNISHED TIN|49|472 +Brand#54|STANDARD BURNISHED COPPER|49|472 +Brand#55|ECONOMY ANODIZED STEEL|45|472 +Brand#55|ECONOMY BRUSHED TIN|3|472 +Brand#55|LARGE ANODIZED STEEL|23|472 +Brand#55|LARGE POLISHED STEEL|9|472 +Brand#55|LARGE POLISHED TIN|23|472 +Brand#55|MEDIUM ANODIZED BRASS|14|472 +Brand#55|MEDIUM BRUSHED STEEL|14|472 +Brand#55|MEDIUM BURNISHED BRASS|23|472 +Brand#55|MEDIUM BURNISHED STEEL|36|472 +Brand#55|PROMO ANODIZED NICKEL|45|472 +Brand#55|PROMO ANODIZED TIN|36|472 +Brand#55|PROMO PLATED BRASS|45|472 +Brand#55|PROMO PLATED COPPER|36|472 +Brand#55|PROMO PLATED TIN|3|472 +Brand#55|SMALL POLISHED TIN|14|472 +Brand#55|STANDARD BRUSHED BRASS|23|472 +Brand#11|ECONOMY BRUSHED TIN|45|471 +Brand#11|LARGE ANODIZED NICKEL|9|471 +Brand#11|MEDIUM BRUSHED TIN|36|471 +Brand#11|SMALL BRUSHED STEEL|49|471 +Brand#12|ECONOMY PLATED BRASS|3|471 +Brand#12|ECONOMY POLISHED NICKEL|45|471 +Brand#12|MEDIUM ANODIZED NICKEL|14|471 +Brand#12|MEDIUM ANODIZED STEEL|36|471 +Brand#13|ECONOMY POLISHED COPPER|3|471 +Brand#13|ECONOMY POLISHED STEEL|23|471 +Brand#13|LARGE POLISHED BRASS|19|471 +Brand#13|MEDIUM BURNISHED STEEL|36|471 +Brand#13|PROMO ANODIZED STEEL|36|471 +Brand#13|STANDARD BURNISHED BRASS|19|471 +Brand#14|ECONOMY ANODIZED TIN|49|471 +Brand#14|PROMO POLISHED STEEL|23|471 +Brand#14|STANDARD ANODIZED NICKEL|36|471 +Brand#14|STANDARD POLISHED STEEL|3|471 +Brand#15|ECONOMY POLISHED TIN|19|471 +Brand#15|MEDIUM PLATED BRASS|49|471 +Brand#15|MEDIUM PLATED COPPER|9|471 +Brand#15|SMALL BURNISHED BRASS|3|471 +Brand#15|STANDARD ANODIZED STEEL|14|471 +Brand#15|STANDARD BRUSHED NICKEL|23|471 +Brand#21|MEDIUM ANODIZED TIN|49|471 +Brand#21|SMALL BURNISHED COPPER|19|471 +Brand#21|STANDARD POLISHED STEEL|9|471 +Brand#22|LARGE ANODIZED TIN|9|471 +Brand#22|MEDIUM BURNISHED TIN|9|471 +Brand#22|PROMO POLISHED NICKEL|23|471 +Brand#22|PROMO POLISHED TIN|14|471 +Brand#22|STANDARD BRUSHED TIN|49|471 +Brand#23|ECONOMY ANODIZED TIN|23|471 +Brand#23|ECONOMY BRUSHED TIN|36|471 +Brand#23|LARGE BURNISHED COPPER|3|471 +Brand#23|STANDARD ANODIZED BRASS|49|471 +Brand#24|ECONOMY POLISHED BRASS|9|471 +Brand#24|LARGE ANODIZED TIN|45|471 +Brand#24|PROMO PLATED STEEL|23|471 +Brand#25|ECONOMY ANODIZED STEEL|36|471 +Brand#25|ECONOMY ANODIZED TIN|9|471 +Brand#25|ECONOMY BURNISHED BRASS|36|471 +Brand#25|SMALL BURNISHED BRASS|49|471 +Brand#25|SMALL BURNISHED NICKEL|19|471 +Brand#25|SMALL POLISHED STEEL|23|471 +Brand#31|MEDIUM BRUSHED BRASS|19|471 +Brand#31|PROMO ANODIZED BRASS|14|471 +Brand#31|SMALL BURNISHED NICKEL|3|471 +Brand#32|LARGE ANODIZED STEEL|49|471 +Brand#32|LARGE BRUSHED BRASS|19|471 +Brand#32|MEDIUM BRUSHED BRASS|19|471 +Brand#32|MEDIUM BRUSHED TIN|3|471 +Brand#32|MEDIUM BURNISHED COPPER|49|471 +Brand#32|PROMO ANODIZED TIN|23|471 +Brand#32|PROMO BURNISHED BRASS|45|471 +Brand#32|SMALL PLATED TIN|14|471 +Brand#32|SMALL POLISHED BRASS|45|471 +Brand#32|SMALL POLISHED STEEL|14|471 +Brand#32|STANDARD BRUSHED BRASS|49|471 +Brand#33|LARGE ANODIZED TIN|23|471 +Brand#33|MEDIUM BURNISHED COPPER|14|471 +Brand#33|PROMO BURNISHED NICKEL|19|471 +Brand#34|LARGE POLISHED STEEL|3|471 +Brand#34|SMALL ANODIZED STEEL|19|471 +Brand#34|STANDARD BRUSHED BRASS|9|471 +Brand#34|STANDARD PLATED STEEL|49|471 +Brand#35|ECONOMY BRUSHED TIN|14|471 +Brand#35|ECONOMY PLATED TIN|3|471 +Brand#35|LARGE PLATED BRASS|14|471 +Brand#35|MEDIUM BURNISHED STEEL|9|471 +Brand#35|MEDIUM PLATED BRASS|19|471 +Brand#35|PROMO POLISHED BRASS|23|471 +Brand#35|SMALL PLATED NICKEL|36|471 +Brand#35|SMALL PLATED STEEL|9|471 +Brand#35|STANDARD PLATED NICKEL|49|471 +Brand#41|ECONOMY BRUSHED BRASS|36|471 +Brand#41|ECONOMY PLATED COPPER|45|471 +Brand#41|LARGE BURNISHED STEEL|45|471 +Brand#41|MEDIUM BRUSHED TIN|36|471 +Brand#41|PROMO BRUSHED NICKEL|45|471 +Brand#41|PROMO PLATED COPPER|23|471 +Brand#41|SMALL PLATED TIN|36|471 +Brand#42|ECONOMY BRUSHED TIN|49|471 +Brand#42|LARGE BURNISHED BRASS|14|471 +Brand#42|PROMO PLATED TIN|49|471 +Brand#43|ECONOMY ANODIZED TIN|3|471 +Brand#43|MEDIUM PLATED BRASS|9|471 +Brand#43|PROMO PLATED COPPER|14|471 +Brand#43|SMALL PLATED BRASS|23|471 +Brand#43|SMALL PLATED STEEL|19|471 +Brand#43|STANDARD POLISHED BRASS|9|471 +Brand#44|ECONOMY POLISHED STEEL|36|471 +Brand#44|LARGE BRUSHED BRASS|3|471 +Brand#44|LARGE BURNISHED TIN|23|471 +Brand#44|MEDIUM BURNISHED BRASS|36|471 +Brand#44|PROMO ANODIZED COPPER|14|471 +Brand#44|PROMO ANODIZED STEEL|36|471 +Brand#44|PROMO BURNISHED NICKEL|45|471 +Brand#44|PROMO PLATED NICKEL|45|471 +Brand#44|SMALL ANODIZED BRASS|9|471 +Brand#44|SMALL BRUSHED NICKEL|36|471 +Brand#44|STANDARD POLISHED COPPER|49|471 +Brand#51|LARGE ANODIZED NICKEL|19|471 +Brand#51|MEDIUM ANODIZED NICKEL|14|471 +Brand#51|MEDIUM ANODIZED STEEL|9|471 +Brand#51|PROMO BRUSHED BRASS|49|471 +Brand#51|PROMO PLATED NICKEL|3|471 +Brand#52|LARGE PLATED COPPER|14|471 +Brand#52|MEDIUM BRUSHED NICKEL|49|471 +Brand#52|PROMO BRUSHED BRASS|45|471 +Brand#52|PROMO PLATED TIN|23|471 +Brand#52|STANDARD POLISHED COPPER|9|471 +Brand#53|ECONOMY BRUSHED NICKEL|23|471 +Brand#53|LARGE POLISHED BRASS|3|471 +Brand#53|STANDARD ANODIZED COPPER|49|471 +Brand#53|STANDARD ANODIZED STEEL|9|471 +Brand#53|STANDARD PLATED COPPER|45|471 +Brand#54|MEDIUM ANODIZED NICKEL|3|471 +Brand#54|PROMO ANODIZED BRASS|9|471 +Brand#54|PROMO ANODIZED NICKEL|14|471 +Brand#54|PROMO POLISHED TIN|49|471 +Brand#54|STANDARD ANODIZED COPPER|49|471 +Brand#54|STANDARD BRUSHED NICKEL|9|471 +Brand#55|ECONOMY BRUSHED TIN|19|471 +Brand#55|ECONOMY POLISHED TIN|14|471 +Brand#55|LARGE BURNISHED STEEL|23|471 +Brand#55|MEDIUM BURNISHED NICKEL|3|471 +Brand#55|SMALL PLATED NICKEL|49|471 +Brand#11|SMALL POLISHED STEEL|14|470 +Brand#14|MEDIUM BRUSHED BRASS|49|470 +Brand#14|MEDIUM BURNISHED TIN|45|470 +Brand#22|PROMO ANODIZED STEEL|3|470 +Brand#22|STANDARD POLISHED STEEL|9|470 +Brand#23|ECONOMY POLISHED COPPER|45|470 +Brand#25|ECONOMY POLISHED BRASS|45|470 +Brand#25|ECONOMY POLISHED TIN|14|470 +Brand#31|ECONOMY ANODIZED STEEL|9|470 +Brand#34|PROMO POLISHED COPPER|14|470 +Brand#41|STANDARD ANODIZED STEEL|45|470 +Brand#42|PROMO PLATED BRASS|9|470 +Brand#43|LARGE BURNISHED STEEL|14|470 +Brand#51|MEDIUM BURNISHED BRASS|3|470 +Brand#51|PROMO BURNISHED BRASS|45|470 +Brand#53|SMALL POLISHED NICKEL|36|470 +Brand#55|ECONOMY BURNISHED STEEL|36|470 +Brand#55|ECONOMY PLATED COPPER|19|470 +Brand#55|MEDIUM ANODIZED BRASS|23|470 +Brand#55|SMALL BRUSHED TIN|3|470 +Brand#15|MEDIUM BRUSHED BRASS|9|469 +Brand#11|ECONOMY BRUSHED COPPER|3|468 +Brand#11|ECONOMY PLATED STEEL|19|468 +Brand#11|ECONOMY POLISHED COPPER|36|468 +Brand#11|LARGE ANODIZED COPPER|14|468 +Brand#11|LARGE ANODIZED NICKEL|3|468 +Brand#11|LARGE BURNISHED BRASS|23|468 +Brand#11|MEDIUM ANODIZED BRASS|3|468 +Brand#11|MEDIUM BRUSHED STEEL|23|468 +Brand#11|MEDIUM BURNISHED COPPER|45|468 +Brand#11|MEDIUM BURNISHED STEEL|45|468 +Brand#11|MEDIUM PLATED NICKEL|3|468 +Brand#11|PROMO BRUSHED COPPER|23|468 +Brand#11|PROMO BRUSHED NICKEL|14|468 +Brand#11|PROMO BURNISHED NICKEL|3|468 +Brand#11|PROMO POLISHED BRASS|3|468 +Brand#11|SMALL BRUSHED BRASS|14|468 +Brand#11|SMALL BRUSHED COPPER|49|468 +Brand#11|SMALL BRUSHED NICKEL|14|468 +Brand#11|SMALL BRUSHED STEEL|19|468 +Brand#11|SMALL BURNISHED BRASS|23|468 +Brand#11|SMALL PLATED TIN|19|468 +Brand#11|SMALL POLISHED BRASS|36|468 +Brand#11|STANDARD BURNISHED BRASS|36|468 +Brand#11|STANDARD BURNISHED COPPER|3|468 +Brand#11|STANDARD PLATED COPPER|45|468 +Brand#11|STANDARD POLISHED COPPER|19|468 +Brand#12|ECONOMY ANODIZED STEEL|23|468 +Brand#12|ECONOMY ANODIZED STEEL|36|468 +Brand#12|ECONOMY BRUSHED COPPER|9|468 +Brand#12|ECONOMY BRUSHED STEEL|23|468 +Brand#12|ECONOMY BURNISHED TIN|3|468 +Brand#12|ECONOMY PLATED NICKEL|49|468 +Brand#12|LARGE BRUSHED NICKEL|9|468 +Brand#12|MEDIUM ANODIZED NICKEL|23|468 +Brand#12|MEDIUM BRUSHED STEEL|19|468 +Brand#12|MEDIUM BURNISHED STEEL|9|468 +Brand#12|MEDIUM PLATED TIN|23|468 +Brand#12|PROMO POLISHED BRASS|9|468 +Brand#12|SMALL PLATED BRASS|45|468 +Brand#12|SMALL POLISHED NICKEL|9|468 +Brand#12|SMALL POLISHED TIN|14|468 +Brand#12|STANDARD ANODIZED STEEL|49|468 +Brand#12|STANDARD BURNISHED TIN|14|468 +Brand#12|STANDARD PLATED BRASS|9|468 +Brand#12|STANDARD PLATED STEEL|19|468 +Brand#12|STANDARD PLATED TIN|49|468 +Brand#12|STANDARD POLISHED BRASS|14|468 +Brand#12|STANDARD POLISHED BRASS|36|468 +Brand#13|ECONOMY BRUSHED TIN|49|468 +Brand#13|ECONOMY BURNISHED BRASS|45|468 +Brand#13|LARGE ANODIZED COPPER|23|468 +Brand#13|LARGE ANODIZED NICKEL|14|468 +Brand#13|LARGE ANODIZED NICKEL|19|468 +Brand#13|LARGE BRUSHED COPPER|3|468 +Brand#13|LARGE PLATED BRASS|9|468 +Brand#13|LARGE PLATED TIN|3|468 +Brand#13|LARGE POLISHED BRASS|49|468 +Brand#13|LARGE POLISHED STEEL|36|468 +Brand#13|MEDIUM BURNISHED NICKEL|49|468 +Brand#13|PROMO BURNISHED NICKEL|9|468 +Brand#13|PROMO PLATED BRASS|36|468 +Brand#13|SMALL ANODIZED NICKEL|19|468 +Brand#13|SMALL BRUSHED STEEL|14|468 +Brand#13|SMALL BRUSHED TIN|23|468 +Brand#13|SMALL PLATED BRASS|45|468 +Brand#13|SMALL PLATED COPPER|23|468 +Brand#13|SMALL POLISHED TIN|14|468 +Brand#13|STANDARD ANODIZED STEEL|14|468 +Brand#13|STANDARD BURNISHED COPPER|9|468 +Brand#13|STANDARD BURNISHED COPPER|14|468 +Brand#13|STANDARD BURNISHED COPPER|23|468 +Brand#13|STANDARD BURNISHED TIN|49|468 +Brand#14|ECONOMY ANODIZED COPPER|9|468 +Brand#14|ECONOMY ANODIZED NICKEL|19|468 +Brand#14|ECONOMY PLATED BRASS|19|468 +Brand#14|ECONOMY PLATED STEEL|9|468 +Brand#14|LARGE ANODIZED TIN|14|468 +Brand#14|LARGE BRUSHED COPPER|3|468 +Brand#14|LARGE BURNISHED STEEL|45|468 +Brand#14|LARGE BURNISHED TIN|49|468 +Brand#14|LARGE PLATED TIN|49|468 +Brand#14|MEDIUM ANODIZED COPPER|36|468 +Brand#14|MEDIUM BRUSHED BRASS|9|468 +Brand#14|MEDIUM BURNISHED BRASS|14|468 +Brand#14|MEDIUM BURNISHED TIN|36|468 +Brand#14|MEDIUM PLATED BRASS|23|468 +Brand#14|PROMO BURNISHED COPPER|45|468 +Brand#14|PROMO PLATED COPPER|36|468 +Brand#14|PROMO POLISHED BRASS|9|468 +Brand#14|SMALL ANODIZED NICKEL|3|468 +Brand#14|SMALL ANODIZED NICKEL|23|468 +Brand#14|SMALL ANODIZED TIN|9|468 +Brand#14|SMALL BRUSHED COPPER|3|468 +Brand#14|SMALL BRUSHED COPPER|14|468 +Brand#14|SMALL BRUSHED NICKEL|3|468 +Brand#14|STANDARD ANODIZED NICKEL|45|468 +Brand#14|STANDARD POLISHED BRASS|19|468 +Brand#14|STANDARD POLISHED COPPER|49|468 +Brand#15|ECONOMY BURNISHED BRASS|45|468 +Brand#15|ECONOMY BURNISHED TIN|36|468 +Brand#15|ECONOMY PLATED STEEL|19|468 +Brand#15|LARGE BRUSHED NICKEL|49|468 +Brand#15|LARGE BRUSHED TIN|23|468 +Brand#15|MEDIUM ANODIZED STEEL|36|468 +Brand#15|MEDIUM ANODIZED TIN|9|468 +Brand#15|MEDIUM BRUSHED TIN|14|468 +Brand#15|MEDIUM BURNISHED NICKEL|14|468 +Brand#15|MEDIUM BURNISHED STEEL|23|468 +Brand#15|PROMO BRUSHED STEEL|3|468 +Brand#15|PROMO BURNISHED BRASS|19|468 +Brand#15|PROMO BURNISHED STEEL|14|468 +Brand#15|PROMO PLATED NICKEL|45|468 +Brand#15|SMALL ANODIZED COPPER|23|468 +Brand#15|SMALL BRUSHED BRASS|23|468 +Brand#15|SMALL PLATED NICKEL|45|468 +Brand#15|STANDARD ANODIZED STEEL|45|468 +Brand#15|STANDARD BRUSHED STEEL|23|468 +Brand#15|STANDARD POLISHED STEEL|49|468 +Brand#21|ECONOMY BRUSHED BRASS|36|468 +Brand#21|ECONOMY BURNISHED NICKEL|19|468 +Brand#21|ECONOMY BURNISHED STEEL|3|468 +Brand#21|ECONOMY BURNISHED STEEL|23|468 +Brand#21|ECONOMY BURNISHED TIN|3|468 +Brand#21|ECONOMY POLISHED STEEL|49|468 +Brand#21|LARGE BRUSHED NICKEL|36|468 +Brand#21|LARGE PLATED NICKEL|14|468 +Brand#21|PROMO ANODIZED NICKEL|14|468 +Brand#21|PROMO BRUSHED BRASS|9|468 +Brand#21|PROMO BRUSHED TIN|23|468 +Brand#21|PROMO BURNISHED NICKEL|19|468 +Brand#21|SMALL BRUSHED BRASS|45|468 +Brand#21|SMALL BURNISHED COPPER|3|468 +Brand#21|SMALL BURNISHED STEEL|19|468 +Brand#21|STANDARD ANODIZED BRASS|49|468 +Brand#21|STANDARD POLISHED BRASS|23|468 +Brand#22|ECONOMY BRUSHED NICKEL|19|468 +Brand#22|ECONOMY BURNISHED BRASS|9|468 +Brand#22|ECONOMY BURNISHED NICKEL|9|468 +Brand#22|ECONOMY BURNISHED NICKEL|49|468 +Brand#22|ECONOMY POLISHED NICKEL|23|468 +Brand#22|LARGE BRUSHED BRASS|3|468 +Brand#22|LARGE BURNISHED NICKEL|19|468 +Brand#22|LARGE BURNISHED STEEL|9|468 +Brand#22|MEDIUM ANODIZED STEEL|19|468 +Brand#22|MEDIUM BURNISHED COPPER|23|468 +Brand#22|MEDIUM BURNISHED NICKEL|36|468 +Brand#22|MEDIUM PLATED NICKEL|45|468 +Brand#22|PROMO BURNISHED COPPER|23|468 +Brand#22|SMALL PLATED BRASS|9|468 +Brand#22|SMALL PLATED STEEL|19|468 +Brand#22|STANDARD ANODIZED COPPER|49|468 +Brand#22|STANDARD ANODIZED NICKEL|36|468 +Brand#22|STANDARD BRUSHED STEEL|23|468 +Brand#22|STANDARD BRUSHED STEEL|45|468 +Brand#22|STANDARD BURNISHED STEEL|19|468 +Brand#22|STANDARD PLATED STEEL|45|468 +Brand#22|STANDARD PLATED TIN|19|468 +Brand#22|STANDARD POLISHED NICKEL|45|468 +Brand#22|STANDARD POLISHED TIN|3|468 +Brand#23|ECONOMY ANODIZED BRASS|3|468 +Brand#23|ECONOMY BRUSHED BRASS|36|468 +Brand#23|LARGE ANODIZED NICKEL|45|468 +Brand#23|LARGE ANODIZED TIN|36|468 +Brand#23|LARGE PLATED TIN|9|468 +Brand#23|MEDIUM PLATED STEEL|9|468 +Brand#23|PROMO ANODIZED TIN|3|468 +Brand#23|PROMO POLISHED BRASS|9|468 +Brand#23|PROMO POLISHED NICKEL|23|468 +Brand#23|SMALL BRUSHED STEEL|49|468 +Brand#23|SMALL BRUSHED TIN|45|468 +Brand#23|SMALL BURNISHED BRASS|45|468 +Brand#23|STANDARD ANODIZED COPPER|36|468 +Brand#23|STANDARD ANODIZED STEEL|36|468 +Brand#23|STANDARD BRUSHED TIN|23|468 +Brand#23|STANDARD POLISHED NICKEL|19|468 +Brand#24|ECONOMY ANODIZED NICKEL|3|468 +Brand#24|ECONOMY BRUSHED STEEL|36|468 +Brand#24|ECONOMY BURNISHED NICKEL|23|468 +Brand#24|ECONOMY PLATED BRASS|36|468 +Brand#24|ECONOMY POLISHED NICKEL|45|468 +Brand#24|LARGE BURNISHED COPPER|36|468 +Brand#24|MEDIUM BURNISHED NICKEL|3|468 +Brand#24|PROMO BURNISHED STEEL|14|468 +Brand#24|PROMO POLISHED BRASS|23|468 +Brand#24|PROMO POLISHED STEEL|19|468 +Brand#24|SMALL ANODIZED COPPER|36|468 +Brand#24|SMALL BRUSHED COPPER|19|468 +Brand#24|SMALL BRUSHED STEEL|9|468 +Brand#24|SMALL POLISHED NICKEL|19|468 +Brand#24|STANDARD BURNISHED BRASS|9|468 +Brand#24|STANDARD BURNISHED COPPER|14|468 +Brand#25|ECONOMY BRUSHED STEEL|23|468 +Brand#25|ECONOMY BRUSHED TIN|3|468 +Brand#25|ECONOMY POLISHED TIN|45|468 +Brand#25|LARGE PLATED BRASS|9|468 +Brand#25|LARGE PLATED COPPER|3|468 +Brand#25|LARGE PLATED NICKEL|49|468 +Brand#25|MEDIUM ANODIZED STEEL|49|468 +Brand#25|MEDIUM BRUSHED STEEL|19|468 +Brand#25|PROMO BURNISHED BRASS|49|468 +Brand#25|PROMO POLISHED TIN|36|468 +Brand#25|SMALL PLATED STEEL|36|468 +Brand#25|SMALL POLISHED BRASS|3|468 +Brand#25|STANDARD ANODIZED TIN|45|468 +Brand#25|STANDARD BRUSHED STEEL|9|468 +Brand#25|STANDARD BURNISHED NICKEL|3|468 +Brand#25|STANDARD PLATED BRASS|45|468 +Brand#25|STANDARD PLATED COPPER|23|468 +Brand#25|STANDARD PLATED TIN|49|468 +Brand#25|STANDARD POLISHED BRASS|3|468 +Brand#31|ECONOMY BURNISHED BRASS|49|468 +Brand#31|ECONOMY BURNISHED STEEL|23|468 +Brand#31|ECONOMY PLATED NICKEL|23|468 +Brand#31|ECONOMY POLISHED COPPER|23|468 +Brand#31|LARGE BRUSHED STEEL|3|468 +Brand#31|LARGE BRUSHED TIN|23|468 +Brand#31|LARGE BURNISHED COPPER|9|468 +Brand#31|LARGE POLISHED NICKEL|9|468 +Brand#31|PROMO ANODIZED BRASS|3|468 +Brand#31|PROMO BURNISHED NICKEL|3|468 +Brand#31|PROMO BURNISHED STEEL|49|468 +Brand#31|PROMO BURNISHED TIN|23|468 +Brand#31|PROMO PLATED STEEL|45|468 +Brand#31|SMALL BRUSHED BRASS|3|468 +Brand#31|SMALL POLISHED STEEL|3|468 +Brand#31|STANDARD ANODIZED TIN|49|468 +Brand#32|ECONOMY ANODIZED NICKEL|19|468 +Brand#32|ECONOMY PLATED NICKEL|9|468 +Brand#32|LARGE ANODIZED BRASS|3|468 +Brand#32|LARGE BRUSHED BRASS|23|468 +Brand#32|LARGE BRUSHED STEEL|23|468 +Brand#32|LARGE BURNISHED BRASS|49|468 +Brand#32|MEDIUM ANODIZED COPPER|23|468 +Brand#32|MEDIUM BURNISHED COPPER|19|468 +Brand#32|MEDIUM PLATED COPPER|3|468 +Brand#32|PROMO BRUSHED COPPER|9|468 +Brand#32|PROMO BRUSHED STEEL|9|468 +Brand#32|PROMO BURNISHED COPPER|19|468 +Brand#32|PROMO POLISHED NICKEL|36|468 +Brand#32|SMALL ANODIZED COPPER|3|468 +Brand#32|SMALL BURNISHED COPPER|49|468 +Brand#32|SMALL POLISHED STEEL|9|468 +Brand#32|STANDARD ANODIZED BRASS|36|468 +Brand#33|ECONOMY ANODIZED COPPER|14|468 +Brand#33|ECONOMY BURNISHED BRASS|36|468 +Brand#33|ECONOMY BURNISHED NICKEL|19|468 +Brand#33|ECONOMY PLATED TIN|49|468 +Brand#33|LARGE ANODIZED NICKEL|19|468 +Brand#33|LARGE ANODIZED STEEL|3|468 +Brand#33|LARGE BRUSHED BRASS|49|468 +Brand#33|LARGE BURNISHED COPPER|19|468 +Brand#33|LARGE PLATED COPPER|45|468 +Brand#33|LARGE PLATED TIN|3|468 +Brand#33|LARGE PLATED TIN|36|468 +Brand#33|LARGE POLISHED TIN|23|468 +Brand#33|MEDIUM BURNISHED BRASS|3|468 +Brand#33|MEDIUM BURNISHED NICKEL|23|468 +Brand#33|MEDIUM BURNISHED STEEL|36|468 +Brand#33|MEDIUM PLATED COPPER|36|468 +Brand#33|PROMO BRUSHED NICKEL|23|468 +Brand#33|PROMO PLATED STEEL|9|468 +Brand#33|SMALL PLATED TIN|14|468 +Brand#33|STANDARD BURNISHED COPPER|3|468 +Brand#34|ECONOMY ANODIZED TIN|36|468 +Brand#34|ECONOMY BURNISHED STEEL|49|468 +Brand#34|ECONOMY PLATED STEEL|45|468 +Brand#34|ECONOMY PLATED TIN|23|468 +Brand#34|ECONOMY POLISHED BRASS|36|468 +Brand#34|ECONOMY POLISHED STEEL|9|468 +Brand#34|LARGE BRUSHED STEEL|36|468 +Brand#34|LARGE BURNISHED COPPER|3|468 +Brand#34|LARGE PLATED BRASS|49|468 +Brand#34|LARGE PLATED STEEL|49|468 +Brand#34|MEDIUM BRUSHED BRASS|49|468 +Brand#34|MEDIUM PLATED TIN|36|468 +Brand#34|PROMO BURNISHED TIN|3|468 +Brand#34|SMALL PLATED STEEL|3|468 +Brand#34|SMALL POLISHED COPPER|14|468 +Brand#34|SMALL POLISHED TIN|23|468 +Brand#34|STANDARD ANODIZED COPPER|23|468 +Brand#35|ECONOMY ANODIZED NICKEL|36|468 +Brand#35|ECONOMY ANODIZED STEEL|23|468 +Brand#35|ECONOMY PLATED STEEL|45|468 +Brand#35|LARGE BRUSHED NICKEL|36|468 +Brand#35|MEDIUM ANODIZED BRASS|19|468 +Brand#35|MEDIUM ANODIZED TIN|49|468 +Brand#35|MEDIUM BRUSHED BRASS|14|468 +Brand#35|MEDIUM BRUSHED COPPER|23|468 +Brand#35|PROMO ANODIZED TIN|49|468 +Brand#35|PROMO BRUSHED COPPER|3|468 +Brand#35|PROMO BRUSHED TIN|3|468 +Brand#35|PROMO BRUSHED TIN|9|468 +Brand#35|PROMO PLATED BRASS|19|468 +Brand#35|PROMO POLISHED BRASS|49|468 +Brand#35|SMALL BRUSHED BRASS|49|468 +Brand#35|SMALL BURNISHED BRASS|14|468 +Brand#35|SMALL PLATED BRASS|36|468 +Brand#35|SMALL POLISHED COPPER|45|468 +Brand#35|STANDARD ANODIZED COPPER|49|468 +Brand#35|STANDARD BRUSHED BRASS|36|468 +Brand#35|STANDARD PLATED NICKEL|23|468 +Brand#41|ECONOMY ANODIZED NICKEL|9|468 +Brand#41|ECONOMY BRUSHED NICKEL|36|468 +Brand#41|ECONOMY BURNISHED NICKEL|49|468 +Brand#41|ECONOMY BURNISHED STEEL|19|468 +Brand#41|ECONOMY BURNISHED TIN|19|468 +Brand#41|ECONOMY BURNISHED TIN|36|468 +Brand#41|LARGE BRUSHED BRASS|36|468 +Brand#41|LARGE BRUSHED STEEL|49|468 +Brand#41|LARGE BURNISHED STEEL|3|468 +Brand#41|LARGE POLISHED STEEL|36|468 +Brand#41|MEDIUM BURNISHED BRASS|19|468 +Brand#41|PROMO ANODIZED NICKEL|23|468 +Brand#41|PROMO BRUSHED STEEL|3|468 +Brand#41|PROMO POLISHED TIN|14|468 +Brand#41|SMALL POLISHED COPPER|19|468 +Brand#41|STANDARD ANODIZED STEEL|14|468 +Brand#42|ECONOMY BRUSHED BRASS|9|468 +Brand#42|ECONOMY PLATED TIN|23|468 +Brand#42|LARGE ANODIZED NICKEL|23|468 +Brand#42|LARGE PLATED COPPER|23|468 +Brand#42|LARGE PLATED COPPER|45|468 +Brand#42|LARGE PLATED NICKEL|14|468 +Brand#42|LARGE PLATED TIN|45|468 +Brand#42|LARGE POLISHED BRASS|3|468 +Brand#42|MEDIUM ANODIZED BRASS|49|468 +Brand#42|PROMO ANODIZED NICKEL|19|468 +Brand#42|SMALL BRUSHED STEEL|14|468 +Brand#42|SMALL BRUSHED TIN|45|468 +Brand#42|SMALL POLISHED BRASS|45|468 +Brand#42|SMALL POLISHED NICKEL|45|468 +Brand#42|STANDARD ANODIZED COPPER|45|468 +Brand#42|STANDARD BRUSHED COPPER|9|468 +Brand#42|STANDARD BURNISHED NICKEL|36|468 +Brand#43|LARGE ANODIZED TIN|49|468 +Brand#43|LARGE BRUSHED COPPER|9|468 +Brand#43|LARGE PLATED TIN|19|468 +Brand#43|LARGE POLISHED STEEL|14|468 +Brand#43|LARGE POLISHED TIN|9|468 +Brand#43|MEDIUM ANODIZED STEEL|36|468 +Brand#43|MEDIUM ANODIZED TIN|3|468 +Brand#43|MEDIUM ANODIZED TIN|14|468 +Brand#43|MEDIUM PLATED NICKEL|36|468 +Brand#43|PROMO ANODIZED COPPER|14|468 +Brand#43|PROMO BRUSHED BRASS|45|468 +Brand#43|PROMO BRUSHED NICKEL|36|468 +Brand#43|PROMO BURNISHED COPPER|14|468 +Brand#43|PROMO BURNISHED NICKEL|3|468 +Brand#43|PROMO PLATED COPPER|36|468 +Brand#43|PROMO POLISHED STEEL|49|468 +Brand#43|SMALL BRUSHED TIN|45|468 +Brand#43|SMALL BURNISHED TIN|19|468 +Brand#43|SMALL POLISHED NICKEL|36|468 +Brand#43|SMALL POLISHED STEEL|23|468 +Brand#43|STANDARD ANODIZED STEEL|19|468 +Brand#43|STANDARD BURNISHED NICKEL|49|468 +Brand#43|STANDARD POLISHED COPPER|14|468 +Brand#43|STANDARD POLISHED COPPER|45|468 +Brand#43|STANDARD POLISHED TIN|14|468 +Brand#44|ECONOMY PLATED NICKEL|9|468 +Brand#44|LARGE ANODIZED NICKEL|9|468 +Brand#44|LARGE BURNISHED TIN|14|468 +Brand#44|MEDIUM ANODIZED COPPER|9|468 +Brand#44|PROMO ANODIZED NICKEL|3|468 +Brand#44|PROMO BURNISHED COPPER|36|468 +Brand#44|PROMO POLISHED COPPER|3|468 +Brand#44|PROMO POLISHED STEEL|14|468 +Brand#44|SMALL ANODIZED NICKEL|45|468 +Brand#44|SMALL BRUSHED COPPER|49|468 +Brand#44|SMALL BRUSHED TIN|23|468 +Brand#44|SMALL PLATED BRASS|49|468 +Brand#44|STANDARD ANODIZED TIN|3|468 +Brand#44|STANDARD POLISHED NICKEL|9|468 +Brand#51|ECONOMY BRUSHED STEEL|49|468 +Brand#51|ECONOMY BURNISHED COPPER|3|468 +Brand#51|LARGE BURNISHED BRASS|3|468 +Brand#51|LARGE BURNISHED STEEL|14|468 +Brand#51|LARGE POLISHED COPPER|23|468 +Brand#51|MEDIUM BRUSHED BRASS|23|468 +Brand#51|MEDIUM BRUSHED NICKEL|45|468 +Brand#51|MEDIUM PLATED NICKEL|19|468 +Brand#51|MEDIUM PLATED STEEL|49|468 +Brand#51|MEDIUM PLATED TIN|19|468 +Brand#51|PROMO POLISHED TIN|45|468 +Brand#51|SMALL ANODIZED BRASS|3|468 +Brand#51|SMALL POLISHED COPPER|9|468 +Brand#51|STANDARD BURNISHED BRASS|36|468 +Brand#52|ECONOMY ANODIZED COPPER|49|468 +Brand#52|ECONOMY BURNISHED STEEL|9|468 +Brand#52|ECONOMY BURNISHED TIN|9|468 +Brand#52|ECONOMY PLATED TIN|3|468 +Brand#52|LARGE PLATED BRASS|19|468 +Brand#52|MEDIUM BRUSHED NICKEL|19|468 +Brand#52|PROMO BRUSHED BRASS|3|468 +Brand#52|PROMO BURNISHED TIN|14|468 +Brand#52|PROMO PLATED COPPER|9|468 +Brand#52|PROMO PLATED NICKEL|14|468 +Brand#52|SMALL BRUSHED NICKEL|45|468 +Brand#52|STANDARD BRUSHED NICKEL|45|468 +Brand#53|ECONOMY BURNISHED BRASS|3|468 +Brand#53|ECONOMY BURNISHED BRASS|45|468 +Brand#53|ECONOMY BURNISHED NICKEL|3|468 +Brand#53|ECONOMY PLATED STEEL|45|468 +Brand#53|ECONOMY POLISHED BRASS|49|468 +Brand#53|MEDIUM PLATED BRASS|49|468 +Brand#53|MEDIUM PLATED TIN|45|468 +Brand#53|PROMO ANODIZED BRASS|23|468 +Brand#53|PROMO ANODIZED STEEL|23|468 +Brand#53|PROMO BRUSHED STEEL|9|468 +Brand#53|PROMO PLATED BRASS|9|468 +Brand#53|PROMO POLISHED COPPER|3|468 +Brand#53|SMALL ANODIZED NICKEL|14|468 +Brand#53|SMALL BRUSHED TIN|9|468 +Brand#53|SMALL PLATED NICKEL|49|468 +Brand#53|STANDARD ANODIZED TIN|23|468 +Brand#53|STANDARD BRUSHED BRASS|14|468 +Brand#53|STANDARD BRUSHED STEEL|3|468 +Brand#53|STANDARD PLATED NICKEL|14|468 +Brand#54|ECONOMY ANODIZED NICKEL|9|468 +Brand#54|ECONOMY BRUSHED COPPER|14|468 +Brand#54|ECONOMY BURNISHED BRASS|19|468 +Brand#54|ECONOMY PLATED NICKEL|9|468 +Brand#54|ECONOMY PLATED STEEL|36|468 +Brand#54|LARGE ANODIZED COPPER|45|468 +Brand#54|LARGE POLISHED COPPER|49|468 +Brand#54|MEDIUM BURNISHED NICKEL|9|468 +Brand#54|MEDIUM BURNISHED TIN|19|468 +Brand#54|PROMO BURNISHED STEEL|36|468 +Brand#54|PROMO PLATED BRASS|36|468 +Brand#54|PROMO PLATED STEEL|23|468 +Brand#54|SMALL ANODIZED TIN|36|468 +Brand#54|SMALL BRUSHED COPPER|49|468 +Brand#54|SMALL BRUSHED STEEL|14|468 +Brand#54|SMALL BURNISHED NICKEL|36|468 +Brand#54|STANDARD BRUSHED COPPER|49|468 +Brand#54|STANDARD PLATED BRASS|36|468 +Brand#55|ECONOMY ANODIZED BRASS|45|468 +Brand#55|ECONOMY BRUSHED NICKEL|49|468 +Brand#55|ECONOMY BURNISHED TIN|45|468 +Brand#55|LARGE POLISHED COPPER|36|468 +Brand#55|MEDIUM ANODIZED COPPER|19|468 +Brand#55|MEDIUM ANODIZED NICKEL|19|468 +Brand#55|MEDIUM BRUSHED BRASS|36|468 +Brand#55|PROMO BRUSHED NICKEL|36|468 +Brand#55|PROMO BRUSHED TIN|3|468 +Brand#55|SMALL BRUSHED STEEL|3|468 +Brand#55|SMALL BRUSHED STEEL|19|468 +Brand#55|SMALL PLATED BRASS|9|468 +Brand#55|STANDARD ANODIZED BRASS|23|468 +Brand#55|STANDARD BRUSHED COPPER|49|468 +Brand#11|PROMO BURNISHED STEEL|9|467 +Brand#11|PROMO POLISHED BRASS|9|467 +Brand#11|PROMO POLISHED NICKEL|49|467 +Brand#11|SMALL BRUSHED COPPER|23|467 +Brand#11|SMALL BURNISHED TIN|49|467 +Brand#11|STANDARD ANODIZED COPPER|14|467 +Brand#12|ECONOMY BRUSHED TIN|3|467 +Brand#12|ECONOMY BURNISHED COPPER|23|467 +Brand#12|LARGE BRUSHED COPPER|45|467 +Brand#12|LARGE BURNISHED BRASS|3|467 +Brand#12|PROMO ANODIZED STEEL|45|467 +Brand#12|PROMO BRUSHED COPPER|9|467 +Brand#12|STANDARD BURNISHED TIN|9|467 +Brand#13|ECONOMY BURNISHED BRASS|3|467 +Brand#13|ECONOMY PLATED STEEL|9|467 +Brand#13|MEDIUM BRUSHED BRASS|36|467 +Brand#13|MEDIUM BRUSHED STEEL|14|467 +Brand#13|SMALL PLATED NICKEL|14|467 +Brand#13|STANDARD PLATED BRASS|23|467 +Brand#13|STANDARD POLISHED STEEL|45|467 +Brand#14|ECONOMY PLATED STEEL|45|467 +Brand#14|LARGE ANODIZED NICKEL|36|467 +Brand#14|LARGE BRUSHED NICKEL|19|467 +Brand#14|LARGE BURNISHED TIN|45|467 +Brand#14|SMALL BRUSHED BRASS|19|467 +Brand#14|SMALL POLISHED NICKEL|14|467 +Brand#15|LARGE ANODIZED BRASS|19|467 +Brand#15|LARGE POLISHED COPPER|14|467 +Brand#15|MEDIUM BURNISHED BRASS|36|467 +Brand#15|PROMO ANODIZED BRASS|49|467 +Brand#15|SMALL BRUSHED COPPER|19|467 +Brand#21|SMALL PLATED NICKEL|9|467 +Brand#21|STANDARD PLATED BRASS|19|467 +Brand#21|STANDARD PLATED NICKEL|45|467 +Brand#22|ECONOMY ANODIZED COPPER|14|467 +Brand#22|ECONOMY BRUSHED COPPER|49|467 +Brand#22|LARGE BRUSHED TIN|23|467 +Brand#22|LARGE BURNISHED COPPER|45|467 +Brand#22|PROMO POLISHED TIN|49|467 +Brand#22|SMALL ANODIZED STEEL|9|467 +Brand#23|ECONOMY PLATED COPPER|23|467 +Brand#23|LARGE PLATED TIN|49|467 +Brand#23|MEDIUM ANODIZED TIN|3|467 +Brand#23|MEDIUM BURNISHED COPPER|3|467 +Brand#23|SMALL POLISHED TIN|3|467 +Brand#24|LARGE ANODIZED BRASS|3|467 +Brand#24|LARGE PLATED STEEL|36|467 +Brand#24|PROMO PLATED COPPER|23|467 +Brand#25|ECONOMY BRUSHED BRASS|19|467 +Brand#25|LARGE ANODIZED BRASS|9|467 +Brand#25|LARGE BRUSHED BRASS|14|467 +Brand#25|MEDIUM PLATED STEEL|45|467 +Brand#25|PROMO BRUSHED BRASS|49|467 +Brand#25|SMALL BRUSHED NICKEL|49|467 +Brand#25|STANDARD BRUSHED BRASS|45|467 +Brand#25|STANDARD BURNISHED BRASS|19|467 +Brand#31|ECONOMY POLISHED STEEL|49|467 +Brand#31|MEDIUM ANODIZED TIN|3|467 +Brand#31|SMALL BURNISHED NICKEL|14|467 +Brand#32|MEDIUM PLATED COPPER|45|467 +Brand#32|PROMO ANODIZED TIN|45|467 +Brand#32|PROMO POLISHED BRASS|14|467 +Brand#32|STANDARD POLISHED TIN|36|467 +Brand#33|ECONOMY ANODIZED STEEL|36|467 +Brand#33|ECONOMY BURNISHED COPPER|14|467 +Brand#33|SMALL PLATED STEEL|45|467 +Brand#33|SMALL POLISHED STEEL|3|467 +Brand#34|ECONOMY BRUSHED BRASS|49|467 +Brand#34|ECONOMY PLATED STEEL|23|467 +Brand#34|MEDIUM PLATED NICKEL|19|467 +Brand#34|PROMO ANODIZED NICKEL|23|467 +Brand#34|PROMO BRUSHED COPPER|19|467 +Brand#34|SMALL BRUSHED STEEL|19|467 +Brand#34|SMALL BURNISHED STEEL|3|467 +Brand#34|STANDARD ANODIZED NICKEL|23|467 +Brand#34|STANDARD PLATED NICKEL|49|467 +Brand#35|ECONOMY BRUSHED COPPER|49|467 +Brand#35|ECONOMY POLISHED COPPER|9|467 +Brand#35|LARGE PLATED STEEL|45|467 +Brand#35|STANDARD BURNISHED STEEL|9|467 +Brand#35|STANDARD PLATED COPPER|14|467 +Brand#41|LARGE ANODIZED COPPER|23|467 +Brand#41|LARGE POLISHED NICKEL|19|467 +Brand#41|MEDIUM BURNISHED STEEL|49|467 +Brand#41|PROMO ANODIZED TIN|45|467 +Brand#41|PROMO PLATED BRASS|36|467 +Brand#41|STANDARD BRUSHED STEEL|49|467 +Brand#41|STANDARD BRUSHED TIN|9|467 +Brand#42|ECONOMY ANODIZED STEEL|36|467 +Brand#42|LARGE BURNISHED NICKEL|45|467 +Brand#42|MEDIUM ANODIZED BRASS|45|467 +Brand#42|PROMO BRUSHED BRASS|19|467 +Brand#42|SMALL BURNISHED BRASS|45|467 +Brand#42|STANDARD BRUSHED NICKEL|45|467 +Brand#43|ECONOMY PLATED BRASS|36|467 +Brand#43|MEDIUM BURNISHED NICKEL|3|467 +Brand#43|MEDIUM PLATED BRASS|19|467 +Brand#43|PROMO POLISHED COPPER|45|467 +Brand#43|SMALL ANODIZED BRASS|14|467 +Brand#44|ECONOMY ANODIZED COPPER|3|467 +Brand#44|LARGE PLATED NICKEL|3|467 +Brand#44|LARGE PLATED TIN|36|467 +Brand#44|PROMO POLISHED COPPER|36|467 +Brand#44|SMALL BRUSHED COPPER|3|467 +Brand#44|STANDARD BURNISHED COPPER|14|467 +Brand#51|ECONOMY ANODIZED COPPER|36|467 +Brand#51|ECONOMY PLATED STEEL|14|467 +Brand#51|MEDIUM BRUSHED COPPER|19|467 +Brand#51|MEDIUM BURNISHED COPPER|49|467 +Brand#51|PROMO PLATED STEEL|9|467 +Brand#52|LARGE ANODIZED NICKEL|45|467 +Brand#52|LARGE BURNISHED TIN|3|467 +Brand#52|STANDARD BRUSHED STEEL|19|467 +Brand#52|STANDARD BRUSHED STEEL|23|467 +Brand#53|ECONOMY ANODIZED NICKEL|49|467 +Brand#53|ECONOMY POLISHED STEEL|19|467 +Brand#53|PROMO BURNISHED COPPER|19|467 +Brand#53|SMALL BURNISHED BRASS|49|467 +Brand#53|STANDARD ANODIZED TIN|3|467 +Brand#53|STANDARD BURNISHED NICKEL|49|467 +Brand#54|ECONOMY ANODIZED TIN|49|467 +Brand#54|LARGE BRUSHED BRASS|14|467 +Brand#54|MEDIUM BURNISHED STEEL|14|467 +Brand#54|SMALL BURNISHED COPPER|19|467 +Brand#54|SMALL BURNISHED STEEL|14|467 +Brand#54|SMALL PLATED STEEL|45|467 +Brand#55|ECONOMY ANODIZED COPPER|36|467 +Brand#55|ECONOMY POLISHED COPPER|49|467 +Brand#55|LARGE ANODIZED COPPER|3|467 +Brand#55|MEDIUM PLATED TIN|19|467 +Brand#55|PROMO BURNISHED BRASS|14|467 +Brand#55|SMALL BRUSHED COPPER|3|467 +Brand#55|SMALL POLISHED BRASS|19|467 +Brand#11|STANDARD BURNISHED STEEL|9|466 +Brand#13|SMALL POLISHED TIN|3|466 +Brand#14|LARGE POLISHED TIN|36|466 +Brand#15|MEDIUM ANODIZED STEEL|45|466 +Brand#15|STANDARD BRUSHED TIN|9|466 +Brand#22|PROMO POLISHED TIN|45|466 +Brand#24|ECONOMY ANODIZED NICKEL|9|466 +Brand#24|MEDIUM ANODIZED BRASS|36|466 +Brand#24|PROMO ANODIZED BRASS|9|466 +Brand#31|SMALL BURNISHED TIN|9|466 +Brand#34|MEDIUM BURNISHED BRASS|36|466 +Brand#35|PROMO PLATED TIN|19|466 +Brand#35|STANDARD BRUSHED BRASS|9|466 +Brand#43|ECONOMY BURNISHED TIN|45|466 +Brand#43|STANDARD PLATED TIN|36|466 +Brand#44|ECONOMY PLATED COPPER|19|466 +Brand#51|SMALL POLISHED NICKEL|9|466 +Brand#52|MEDIUM BRUSHED STEEL|9|466 +Brand#52|PROMO BURNISHED NICKEL|36|466 +Brand#54|SMALL POLISHED NICKEL|45|466 +Brand#55|MEDIUM BRUSHED NICKEL|14|466 +Brand#55|STANDARD ANODIZED TIN|23|466 +Brand#13|MEDIUM BURNISHED NICKEL|45|465 +Brand#24|PROMO POLISHED COPPER|19|465 +Brand#35|ECONOMY ANODIZED NICKEL|3|465 +Brand#11|ECONOMY BRUSHED TIN|23|464 +Brand#11|ECONOMY BURNISHED TIN|14|464 +Brand#11|LARGE ANODIZED STEEL|23|464 +Brand#11|LARGE BRUSHED STEEL|14|464 +Brand#11|LARGE BURNISHED NICKEL|36|464 +Brand#11|MEDIUM ANODIZED COPPER|9|464 +Brand#11|PROMO BRUSHED NICKEL|9|464 +Brand#11|PROMO PLATED NICKEL|49|464 +Brand#11|PROMO PLATED TIN|23|464 +Brand#11|PROMO POLISHED TIN|49|464 +Brand#11|SMALL ANODIZED STEEL|3|464 +Brand#11|SMALL PLATED TIN|49|464 +Brand#11|STANDARD BRUSHED NICKEL|14|464 +Brand#11|STANDARD BRUSHED NICKEL|49|464 +Brand#12|ECONOMY ANODIZED NICKEL|14|464 +Brand#12|ECONOMY POLISHED COPPER|3|464 +Brand#12|ECONOMY POLISHED STEEL|14|464 +Brand#12|LARGE BURNISHED NICKEL|23|464 +Brand#12|LARGE BURNISHED STEEL|36|464 +Brand#12|LARGE PLATED TIN|23|464 +Brand#12|LARGE POLISHED BRASS|14|464 +Brand#12|MEDIUM BURNISHED COPPER|3|464 +Brand#12|MEDIUM BURNISHED NICKEL|45|464 +Brand#12|PROMO ANODIZED BRASS|9|464 +Brand#12|PROMO ANODIZED TIN|14|464 +Brand#12|PROMO PLATED BRASS|19|464 +Brand#12|PROMO POLISHED COPPER|49|464 +Brand#12|PROMO POLISHED STEEL|45|464 +Brand#12|SMALL ANODIZED BRASS|49|464 +Brand#12|SMALL BURNISHED NICKEL|3|464 +Brand#12|SMALL BURNISHED NICKEL|23|464 +Brand#12|SMALL PLATED COPPER|9|464 +Brand#12|STANDARD ANODIZED BRASS|45|464 +Brand#12|STANDARD BURNISHED BRASS|9|464 +Brand#12|STANDARD PLATED COPPER|49|464 +Brand#13|ECONOMY BRUSHED STEEL|36|464 +Brand#13|ECONOMY BURNISHED COPPER|23|464 +Brand#13|LARGE BURNISHED STEEL|45|464 +Brand#13|MEDIUM ANODIZED COPPER|9|464 +Brand#13|MEDIUM BRUSHED BRASS|14|464 +Brand#13|MEDIUM BURNISHED COPPER|19|464 +Brand#13|MEDIUM PLATED BRASS|19|464 +Brand#13|MEDIUM PLATED STEEL|19|464 +Brand#13|PROMO ANODIZED TIN|9|464 +Brand#13|PROMO BRUSHED TIN|45|464 +Brand#13|PROMO BURNISHED NICKEL|49|464 +Brand#13|PROMO BURNISHED STEEL|36|464 +Brand#13|SMALL ANODIZED BRASS|36|464 +Brand#13|SMALL ANODIZED TIN|45|464 +Brand#13|SMALL BURNISHED STEEL|9|464 +Brand#13|STANDARD ANODIZED STEEL|23|464 +Brand#13|STANDARD BURNISHED COPPER|3|464 +Brand#14|ECONOMY ANODIZED BRASS|14|464 +Brand#14|ECONOMY PLATED STEEL|49|464 +Brand#14|ECONOMY PLATED TIN|14|464 +Brand#14|ECONOMY PLATED TIN|23|464 +Brand#14|LARGE BRUSHED TIN|45|464 +Brand#14|LARGE POLISHED BRASS|45|464 +Brand#14|MEDIUM ANODIZED BRASS|14|464 +Brand#14|MEDIUM BRUSHED BRASS|45|464 +Brand#14|MEDIUM BURNISHED COPPER|36|464 +Brand#14|MEDIUM PLATED NICKEL|23|464 +Brand#14|MEDIUM PLATED NICKEL|49|464 +Brand#14|MEDIUM PLATED STEEL|45|464 +Brand#14|PROMO PLATED COPPER|14|464 +Brand#14|SMALL BRUSHED COPPER|19|464 +Brand#14|SMALL BRUSHED NICKEL|36|464 +Brand#14|STANDARD ANODIZED BRASS|49|464 +Brand#14|STANDARD BRUSHED NICKEL|49|464 +Brand#15|ECONOMY BRUSHED COPPER|3|464 +Brand#15|ECONOMY POLISHED STEEL|19|464 +Brand#15|ECONOMY POLISHED TIN|3|464 +Brand#15|LARGE ANODIZED TIN|23|464 +Brand#15|LARGE BRUSHED STEEL|36|464 +Brand#15|LARGE PLATED TIN|14|464 +Brand#15|MEDIUM ANODIZED BRASS|9|464 +Brand#15|MEDIUM ANODIZED BRASS|36|464 +Brand#15|MEDIUM BURNISHED COPPER|23|464 +Brand#15|MEDIUM PLATED COPPER|45|464 +Brand#15|PROMO BURNISHED STEEL|49|464 +Brand#15|PROMO BURNISHED TIN|9|464 +Brand#15|PROMO PLATED TIN|19|464 +Brand#15|PROMO POLISHED COPPER|23|464 +Brand#15|SMALL ANODIZED BRASS|23|464 +Brand#15|SMALL ANODIZED STEEL|45|464 +Brand#15|SMALL BURNISHED STEEL|3|464 +Brand#15|SMALL POLISHED COPPER|3|464 +Brand#15|STANDARD ANODIZED BRASS|36|464 +Brand#21|ECONOMY BRUSHED COPPER|36|464 +Brand#21|ECONOMY BURNISHED COPPER|36|464 +Brand#21|ECONOMY PLATED NICKEL|14|464 +Brand#21|ECONOMY PLATED NICKEL|45|464 +Brand#21|ECONOMY PLATED TIN|45|464 +Brand#21|LARGE ANODIZED NICKEL|3|464 +Brand#21|LARGE ANODIZED TIN|45|464 +Brand#21|LARGE BURNISHED NICKEL|19|464 +Brand#21|LARGE BURNISHED TIN|45|464 +Brand#21|LARGE PLATED TIN|45|464 +Brand#21|LARGE POLISHED COPPER|36|464 +Brand#21|LARGE POLISHED STEEL|9|464 +Brand#21|MEDIUM ANODIZED COPPER|36|464 +Brand#21|MEDIUM BRUSHED TIN|49|464 +Brand#21|MEDIUM PLATED TIN|45|464 +Brand#21|PROMO BRUSHED STEEL|45|464 +Brand#21|PROMO PLATED BRASS|9|464 +Brand#21|PROMO POLISHED COPPER|9|464 +Brand#21|SMALL ANODIZED STEEL|19|464 +Brand#21|STANDARD ANODIZED TIN|19|464 +Brand#21|STANDARD ANODIZED TIN|45|464 +Brand#21|STANDARD BURNISHED TIN|3|464 +Brand#21|STANDARD PLATED COPPER|45|464 +Brand#22|ECONOMY BRUSHED STEEL|19|464 +Brand#22|ECONOMY PLATED BRASS|14|464 +Brand#22|ECONOMY PLATED STEEL|45|464 +Brand#22|LARGE ANODIZED TIN|36|464 +Brand#22|LARGE BURNISHED NICKEL|14|464 +Brand#22|MEDIUM BRUSHED BRASS|9|464 +Brand#22|MEDIUM PLATED COPPER|19|464 +Brand#22|PROMO ANODIZED BRASS|49|464 +Brand#22|PROMO ANODIZED STEEL|49|464 +Brand#22|PROMO BRUSHED COPPER|23|464 +Brand#22|PROMO BRUSHED STEEL|45|464 +Brand#22|PROMO BURNISHED TIN|9|464 +Brand#22|PROMO POLISHED BRASS|49|464 +Brand#22|SMALL BRUSHED COPPER|14|464 +Brand#22|SMALL BRUSHED TIN|45|464 +Brand#22|STANDARD ANODIZED STEEL|14|464 +Brand#22|STANDARD ANODIZED TIN|9|464 +Brand#23|ECONOMY ANODIZED BRASS|23|464 +Brand#23|ECONOMY ANODIZED NICKEL|45|464 +Brand#23|ECONOMY BRUSHED COPPER|36|464 +Brand#23|ECONOMY BRUSHED TIN|49|464 +Brand#23|ECONOMY PLATED STEEL|3|464 +Brand#23|LARGE ANODIZED NICKEL|19|464 +Brand#23|LARGE ANODIZED STEEL|23|464 +Brand#23|LARGE BURNISHED COPPER|23|464 +Brand#23|LARGE BURNISHED NICKEL|14|464 +Brand#23|LARGE PLATED TIN|36|464 +Brand#23|MEDIUM BURNISHED STEEL|14|464 +Brand#23|MEDIUM BURNISHED TIN|45|464 +Brand#23|MEDIUM PLATED COPPER|19|464 +Brand#23|MEDIUM PLATED NICKEL|19|464 +Brand#23|PROMO BURNISHED NICKEL|14|464 +Brand#23|PROMO POLISHED COPPER|36|464 +Brand#23|SMALL ANODIZED STEEL|23|464 +Brand#23|STANDARD BRUSHED NICKEL|49|464 +Brand#23|STANDARD BRUSHED TIN|14|464 +Brand#23|STANDARD BURNISHED STEEL|49|464 +Brand#23|STANDARD POLISHED TIN|36|464 +Brand#24|ECONOMY ANODIZED COPPER|36|464 +Brand#24|ECONOMY BRUSHED NICKEL|23|464 +Brand#24|ECONOMY BRUSHED STEEL|14|464 +Brand#24|ECONOMY BURNISHED BRASS|14|464 +Brand#24|ECONOMY BURNISHED BRASS|45|464 +Brand#24|ECONOMY BURNISHED COPPER|9|464 +Brand#24|ECONOMY PLATED COPPER|14|464 +Brand#24|ECONOMY PLATED STEEL|23|464 +Brand#24|LARGE POLISHED BRASS|23|464 +Brand#24|MEDIUM ANODIZED NICKEL|49|464 +Brand#24|MEDIUM ANODIZED TIN|23|464 +Brand#24|MEDIUM BRUSHED COPPER|3|464 +Brand#24|MEDIUM BRUSHED NICKEL|45|464 +Brand#24|MEDIUM PLATED TIN|14|464 +Brand#24|PROMO BRUSHED COPPER|23|464 +Brand#24|PROMO BRUSHED STEEL|36|464 +Brand#24|PROMO PLATED COPPER|3|464 +Brand#24|PROMO PLATED STEEL|3|464 +Brand#24|PROMO POLISHED STEEL|45|464 +Brand#24|SMALL BURNISHED COPPER|45|464 +Brand#24|SMALL PLATED COPPER|19|464 +Brand#24|SMALL POLISHED NICKEL|49|464 +Brand#24|STANDARD ANODIZED NICKEL|19|464 +Brand#24|STANDARD ANODIZED STEEL|3|464 +Brand#24|STANDARD PLATED TIN|36|464 +Brand#24|STANDARD POLISHED NICKEL|19|464 +Brand#25|ECONOMY ANODIZED BRASS|19|464 +Brand#25|ECONOMY BRUSHED STEEL|3|464 +Brand#25|ECONOMY PLATED NICKEL|45|464 +Brand#25|LARGE BRUSHED NICKEL|19|464 +Brand#25|LARGE BRUSHED TIN|9|464 +Brand#25|LARGE BURNISHED BRASS|3|464 +Brand#25|LARGE BURNISHED BRASS|14|464 +Brand#25|LARGE POLISHED NICKEL|9|464 +Brand#25|MEDIUM BRUSHED BRASS|36|464 +Brand#25|MEDIUM BRUSHED COPPER|3|464 +Brand#25|MEDIUM BURNISHED TIN|19|464 +Brand#25|PROMO BRUSHED STEEL|3|464 +Brand#25|PROMO BURNISHED BRASS|14|464 +Brand#25|PROMO POLISHED COPPER|3|464 +Brand#25|SMALL ANODIZED BRASS|49|464 +Brand#25|SMALL ANODIZED COPPER|36|464 +Brand#25|SMALL ANODIZED COPPER|49|464 +Brand#25|SMALL BRUSHED BRASS|3|464 +Brand#25|SMALL PLATED NICKEL|19|464 +Brand#25|SMALL POLISHED STEEL|3|464 +Brand#25|STANDARD BURNISHED NICKEL|19|464 +Brand#31|ECONOMY PLATED COPPER|9|464 +Brand#31|ECONOMY PLATED NICKEL|3|464 +Brand#31|ECONOMY POLISHED STEEL|9|464 +Brand#31|LARGE ANODIZED BRASS|45|464 +Brand#31|LARGE BRUSHED COPPER|14|464 +Brand#31|LARGE BURNISHED BRASS|45|464 +Brand#31|LARGE PLATED COPPER|19|464 +Brand#31|LARGE PLATED NICKEL|45|464 +Brand#31|LARGE POLISHED NICKEL|49|464 +Brand#31|MEDIUM BURNISHED COPPER|14|464 +Brand#31|MEDIUM BURNISHED TIN|19|464 +Brand#31|MEDIUM PLATED NICKEL|45|464 +Brand#31|PROMO PLATED BRASS|49|464 +Brand#31|SMALL PLATED COPPER|3|464 +Brand#31|SMALL PLATED NICKEL|23|464 +Brand#31|SMALL POLISHED TIN|14|464 +Brand#31|STANDARD PLATED STEEL|9|464 +Brand#31|STANDARD POLISHED COPPER|49|464 +Brand#31|STANDARD POLISHED STEEL|14|464 +Brand#32|ECONOMY ANODIZED COPPER|23|464 +Brand#32|ECONOMY BRUSHED BRASS|19|464 +Brand#32|ECONOMY BRUSHED STEEL|9|464 +Brand#32|ECONOMY BURNISHED BRASS|3|464 +Brand#32|LARGE BRUSHED COPPER|3|464 +Brand#32|LARGE BURNISHED NICKEL|23|464 +Brand#32|LARGE POLISHED COPPER|49|464 +Brand#32|MEDIUM PLATED BRASS|23|464 +Brand#32|MEDIUM PLATED BRASS|49|464 +Brand#32|PROMO BURNISHED NICKEL|49|464 +Brand#32|PROMO POLISHED TIN|36|464 +Brand#32|SMALL BRUSHED BRASS|14|464 +Brand#32|SMALL BRUSHED NICKEL|23|464 +Brand#32|SMALL POLISHED STEEL|3|464 +Brand#32|SMALL POLISHED TIN|23|464 +Brand#32|STANDARD ANODIZED COPPER|23|464 +Brand#32|STANDARD BURNISHED COPPER|36|464 +Brand#32|STANDARD BURNISHED NICKEL|19|464 +Brand#32|STANDARD BURNISHED STEEL|14|464 +Brand#32|STANDARD PLATED BRASS|3|464 +Brand#32|STANDARD PLATED STEEL|14|464 +Brand#32|STANDARD POLISHED STEEL|19|464 +Brand#32|STANDARD POLISHED TIN|14|464 +Brand#33|ECONOMY BRUSHED BRASS|45|464 +Brand#33|ECONOMY BRUSHED NICKEL|14|464 +Brand#33|ECONOMY BRUSHED NICKEL|23|464 +Brand#33|ECONOMY BURNISHED BRASS|23|464 +Brand#33|LARGE PLATED BRASS|3|464 +Brand#33|LARGE POLISHED COPPER|23|464 +Brand#33|MEDIUM ANODIZED BRASS|19|464 +Brand#33|MEDIUM BRUSHED STEEL|19|464 +Brand#33|PROMO ANODIZED STEEL|19|464 +Brand#33|PROMO POLISHED BRASS|23|464 +Brand#33|PROMO POLISHED STEEL|36|464 +Brand#33|SMALL BRUSHED BRASS|49|464 +Brand#33|SMALL BRUSHED COPPER|19|464 +Brand#33|SMALL PLATED BRASS|3|464 +Brand#33|SMALL PLATED NICKEL|23|464 +Brand#33|STANDARD BRUSHED NICKEL|14|464 +Brand#33|STANDARD POLISHED COPPER|23|464 +Brand#33|STANDARD POLISHED NICKEL|3|464 +Brand#34|ECONOMY BRUSHED COPPER|14|464 +Brand#34|ECONOMY BRUSHED STEEL|49|464 +Brand#34|ECONOMY BRUSHED TIN|36|464 +Brand#34|ECONOMY BURNISHED STEEL|14|464 +Brand#34|ECONOMY POLISHED NICKEL|3|464 +Brand#34|ECONOMY POLISHED NICKEL|36|464 +Brand#34|LARGE BRUSHED TIN|19|464 +Brand#34|LARGE PLATED TIN|36|464 +Brand#34|PROMO ANODIZED BRASS|23|464 +Brand#34|PROMO BRUSHED TIN|19|464 +Brand#34|PROMO BURNISHED COPPER|23|464 +Brand#34|SMALL BURNISHED COPPER|45|464 +Brand#34|SMALL BURNISHED STEEL|9|464 +Brand#34|SMALL POLISHED TIN|14|464 +Brand#34|STANDARD ANODIZED COPPER|45|464 +Brand#34|STANDARD BURNISHED BRASS|3|464 +Brand#34|STANDARD BURNISHED TIN|36|464 +Brand#34|STANDARD PLATED BRASS|36|464 +Brand#34|STANDARD POLISHED STEEL|45|464 +Brand#35|ECONOMY BRUSHED BRASS|19|464 +Brand#35|LARGE ANODIZED BRASS|36|464 +Brand#35|LARGE ANODIZED NICKEL|23|464 +Brand#35|LARGE BRUSHED BRASS|36|464 +Brand#35|LARGE BURNISHED NICKEL|19|464 +Brand#35|LARGE BURNISHED STEEL|19|464 +Brand#35|PROMO ANODIZED BRASS|9|464 +Brand#35|PROMO ANODIZED BRASS|19|464 +Brand#35|PROMO ANODIZED STEEL|3|464 +Brand#35|PROMO BURNISHED COPPER|19|464 +Brand#35|PROMO PLATED BRASS|3|464 +Brand#35|SMALL BURNISHED COPPER|23|464 +Brand#35|SMALL PLATED NICKEL|9|464 +Brand#35|STANDARD ANODIZED COPPER|45|464 +Brand#35|STANDARD BRUSHED STEEL|49|464 +Brand#35|STANDARD PLATED TIN|45|464 +Brand#35|STANDARD POLISHED BRASS|49|464 +Brand#35|STANDARD POLISHED TIN|49|464 +Brand#41|ECONOMY BURNISHED COPPER|45|464 +Brand#41|ECONOMY BURNISHED NICKEL|3|464 +Brand#41|ECONOMY PLATED NICKEL|23|464 +Brand#41|ECONOMY POLISHED TIN|36|464 +Brand#41|MEDIUM BRUSHED BRASS|3|464 +Brand#41|MEDIUM BRUSHED BRASS|49|464 +Brand#41|MEDIUM PLATED TIN|23|464 +Brand#41|PROMO BURNISHED STEEL|23|464 +Brand#41|PROMO PLATED NICKEL|3|464 +Brand#41|PROMO POLISHED COPPER|45|464 +Brand#41|PROMO POLISHED NICKEL|23|464 +Brand#41|SMALL POLISHED BRASS|36|464 +Brand#41|SMALL POLISHED STEEL|23|464 +Brand#41|SMALL POLISHED TIN|45|464 +Brand#41|STANDARD BRUSHED BRASS|9|464 +Brand#41|STANDARD BURNISHED TIN|23|464 +Brand#41|STANDARD POLISHED BRASS|49|464 +Brand#42|ECONOMY BURNISHED BRASS|45|464 +Brand#42|ECONOMY BURNISHED COPPER|3|464 +Brand#42|ECONOMY BURNISHED TIN|23|464 +Brand#42|ECONOMY POLISHED BRASS|3|464 +Brand#42|LARGE ANODIZED COPPER|3|464 +Brand#42|LARGE BRUSHED COPPER|3|464 +Brand#42|LARGE BRUSHED NICKEL|19|464 +Brand#42|LARGE PLATED NICKEL|19|464 +Brand#42|MEDIUM ANODIZED BRASS|9|464 +Brand#42|MEDIUM ANODIZED COPPER|9|464 +Brand#42|MEDIUM BURNISHED STEEL|49|464 +Brand#42|PROMO ANODIZED BRASS|3|464 +Brand#42|PROMO ANODIZED BRASS|49|464 +Brand#42|PROMO ANODIZED NICKEL|3|464 +Brand#42|PROMO ANODIZED TIN|36|464 +Brand#42|PROMO PLATED COPPER|3|464 +Brand#42|PROMO POLISHED NICKEL|45|464 +Brand#42|SMALL BRUSHED BRASS|36|464 +Brand#42|SMALL POLISHED TIN|14|464 +Brand#42|STANDARD BURNISHED NICKEL|19|464 +Brand#42|STANDARD BURNISHED NICKEL|23|464 +Brand#43|ECONOMY ANODIZED COPPER|9|464 +Brand#43|ECONOMY ANODIZED TIN|49|464 +Brand#43|ECONOMY PLATED COPPER|3|464 +Brand#43|ECONOMY PLATED TIN|9|464 +Brand#43|ECONOMY POLISHED BRASS|23|464 +Brand#43|LARGE BRUSHED NICKEL|9|464 +Brand#43|LARGE BRUSHED STEEL|3|464 +Brand#43|LARGE PLATED NICKEL|9|464 +Brand#43|MEDIUM BURNISHED BRASS|9|464 +Brand#43|MEDIUM PLATED STEEL|19|464 +Brand#43|MEDIUM PLATED STEEL|49|464 +Brand#43|PROMO PLATED STEEL|9|464 +Brand#43|SMALL ANODIZED STEEL|23|464 +Brand#43|SMALL BRUSHED BRASS|3|464 +Brand#43|SMALL BRUSHED COPPER|49|464 +Brand#43|SMALL BURNISHED COPPER|3|464 +Brand#43|SMALL POLISHED COPPER|49|464 +Brand#43|STANDARD BRUSHED TIN|14|464 +Brand#43|STANDARD PLATED BRASS|3|464 +Brand#43|STANDARD PLATED BRASS|19|464 +Brand#43|STANDARD PLATED BRASS|45|464 +Brand#43|STANDARD POLISHED COPPER|36|464 +Brand#44|ECONOMY ANODIZED BRASS|19|464 +Brand#44|ECONOMY BRUSHED COPPER|14|464 +Brand#44|ECONOMY BURNISHED BRASS|23|464 +Brand#44|ECONOMY BURNISHED COPPER|45|464 +Brand#44|ECONOMY BURNISHED STEEL|23|464 +Brand#44|LARGE ANODIZED TIN|14|464 +Brand#44|LARGE BRUSHED COPPER|45|464 +Brand#44|LARGE BRUSHED TIN|14|464 +Brand#44|MEDIUM BURNISHED BRASS|23|464 +Brand#44|MEDIUM BURNISHED NICKEL|23|464 +Brand#44|MEDIUM PLATED BRASS|14|464 +Brand#44|PROMO BRUSHED STEEL|19|464 +Brand#44|PROMO POLISHED BRASS|9|464 +Brand#44|PROMO POLISHED TIN|45|464 +Brand#44|SMALL BRUSHED STEEL|49|464 +Brand#44|SMALL PLATED STEEL|19|464 +Brand#44|SMALL POLISHED NICKEL|23|464 +Brand#44|STANDARD ANODIZED STEEL|49|464 +Brand#44|STANDARD POLISHED COPPER|14|464 +Brand#51|ECONOMY PLATED NICKEL|23|464 +Brand#51|LARGE BRUSHED NICKEL|23|464 +Brand#51|LARGE BRUSHED NICKEL|45|464 +Brand#51|LARGE PLATED NICKEL|3|464 +Brand#51|LARGE POLISHED COPPER|36|464 +Brand#51|MEDIUM ANODIZED TIN|49|464 +Brand#51|MEDIUM BRUSHED BRASS|9|464 +Brand#51|MEDIUM PLATED STEEL|3|464 +Brand#51|PROMO BRUSHED STEEL|14|464 +Brand#51|PROMO BURNISHED BRASS|23|464 +Brand#51|PROMO BURNISHED COPPER|36|464 +Brand#51|SMALL ANODIZED COPPER|19|464 +Brand#51|SMALL BRUSHED COPPER|36|464 +Brand#51|STANDARD BRUSHED NICKEL|3|464 +Brand#52|ECONOMY ANODIZED COPPER|9|464 +Brand#52|ECONOMY BRUSHED STEEL|3|464 +Brand#52|ECONOMY BURNISHED BRASS|9|464 +Brand#52|LARGE ANODIZED BRASS|3|464 +Brand#52|LARGE ANODIZED COPPER|49|464 +Brand#52|LARGE ANODIZED NICKEL|49|464 +Brand#52|LARGE PLATED STEEL|19|464 +Brand#52|MEDIUM ANODIZED BRASS|49|464 +Brand#52|MEDIUM ANODIZED COPPER|19|464 +Brand#52|MEDIUM BURNISHED COPPER|14|464 +Brand#52|MEDIUM PLATED STEEL|45|464 +Brand#52|PROMO BRUSHED NICKEL|19|464 +Brand#52|PROMO BRUSHED STEEL|3|464 +Brand#52|PROMO BURNISHED BRASS|36|464 +Brand#52|PROMO PLATED NICKEL|45|464 +Brand#52|SMALL BRUSHED NICKEL|19|464 +Brand#52|SMALL POLISHED BRASS|14|464 +Brand#52|STANDARD ANODIZED TIN|49|464 +Brand#52|STANDARD BRUSHED BRASS|19|464 +Brand#52|STANDARD BURNISHED BRASS|49|464 +Brand#52|STANDARD PLATED TIN|3|464 +Brand#52|STANDARD POLISHED STEEL|9|464 +Brand#53|ECONOMY BRUSHED BRASS|49|464 +Brand#53|ECONOMY BRUSHED COPPER|19|464 +Brand#53|ECONOMY BURNISHED COPPER|9|464 +Brand#53|ECONOMY PLATED TIN|9|464 +Brand#53|ECONOMY POLISHED TIN|3|464 +Brand#53|LARGE BRUSHED TIN|23|464 +Brand#53|LARGE BURNISHED NICKEL|9|464 +Brand#53|MEDIUM ANODIZED COPPER|49|464 +Brand#53|MEDIUM ANODIZED STEEL|36|464 +Brand#53|MEDIUM BRUSHED COPPER|23|464 +Brand#53|MEDIUM PLATED NICKEL|23|464 +Brand#53|PROMO BURNISHED BRASS|23|464 +Brand#53|PROMO POLISHED BRASS|23|464 +Brand#53|PROMO POLISHED STEEL|9|464 +Brand#53|SMALL BURNISHED TIN|3|464 +Brand#53|SMALL PLATED BRASS|36|464 +Brand#53|STANDARD BRUSHED TIN|14|464 +Brand#53|STANDARD BRUSHED TIN|19|464 +Brand#53|STANDARD BURNISHED STEEL|49|464 +Brand#53|STANDARD PLATED COPPER|3|464 +Brand#53|STANDARD POLISHED TIN|23|464 +Brand#54|ECONOMY ANODIZED TIN|9|464 +Brand#54|ECONOMY ANODIZED TIN|36|464 +Brand#54|ECONOMY PLATED COPPER|3|464 +Brand#54|ECONOMY PLATED COPPER|23|464 +Brand#54|ECONOMY PLATED TIN|45|464 +Brand#54|ECONOMY POLISHED NICKEL|19|464 +Brand#54|MEDIUM ANODIZED NICKEL|19|464 +Brand#54|MEDIUM BRUSHED BRASS|45|464 +Brand#54|MEDIUM BRUSHED STEEL|9|464 +Brand#54|MEDIUM BRUSHED TIN|14|464 +Brand#54|MEDIUM BURNISHED NICKEL|36|464 +Brand#54|MEDIUM PLATED BRASS|19|464 +Brand#54|MEDIUM PLATED NICKEL|19|464 +Brand#54|MEDIUM PLATED NICKEL|36|464 +Brand#54|PROMO ANODIZED BRASS|14|464 +Brand#54|PROMO BRUSHED NICKEL|19|464 +Brand#54|PROMO PLATED COPPER|49|464 +Brand#54|PROMO PLATED TIN|9|464 +Brand#54|SMALL ANODIZED COPPER|19|464 +Brand#54|SMALL ANODIZED COPPER|45|464 +Brand#54|SMALL BRUSHED COPPER|19|464 +Brand#54|SMALL BRUSHED STEEL|19|464 +Brand#54|SMALL BRUSHED TIN|49|464 +Brand#54|SMALL BURNISHED STEEL|23|464 +Brand#54|SMALL POLISHED TIN|36|464 +Brand#54|STANDARD ANODIZED COPPER|45|464 +Brand#54|STANDARD ANODIZED STEEL|14|464 +Brand#54|STANDARD ANODIZED STEEL|36|464 +Brand#54|STANDARD ANODIZED TIN|36|464 +Brand#54|STANDARD BURNISHED TIN|36|464 +Brand#54|STANDARD POLISHED NICKEL|19|464 +Brand#54|STANDARD POLISHED STEEL|14|464 +Brand#55|ECONOMY ANODIZED STEEL|36|464 +Brand#55|ECONOMY ANODIZED STEEL|49|464 +Brand#55|ECONOMY BRUSHED STEEL|36|464 +Brand#55|ECONOMY BURNISHED STEEL|49|464 +Brand#55|LARGE ANODIZED TIN|9|464 +Brand#55|LARGE BRUSHED STEEL|45|464 +Brand#55|MEDIUM BURNISHED TIN|19|464 +Brand#55|MEDIUM PLATED NICKEL|49|464 +Brand#55|MEDIUM PLATED TIN|3|464 +Brand#55|PROMO BURNISHED COPPER|9|464 +Brand#55|SMALL BRUSHED NICKEL|14|464 +Brand#55|SMALL BRUSHED STEEL|49|464 +Brand#55|SMALL BURNISHED BRASS|23|464 +Brand#55|SMALL BURNISHED BRASS|36|464 +Brand#55|SMALL BURNISHED TIN|45|464 +Brand#55|SMALL PLATED COPPER|45|464 +Brand#55|SMALL POLISHED STEEL|45|464 +Brand#55|STANDARD BURNISHED STEEL|9|464 +Brand#55|STANDARD PLATED TIN|23|464 +Brand#11|LARGE ANODIZED BRASS|14|463 +Brand#11|LARGE PLATED BRASS|3|463 +Brand#11|MEDIUM BURNISHED TIN|9|463 +Brand#11|MEDIUM BURNISHED TIN|45|463 +Brand#11|PROMO BRUSHED TIN|36|463 +Brand#11|SMALL BURNISHED NICKEL|9|463 +Brand#11|STANDARD BRUSHED STEEL|36|463 +Brand#11|STANDARD PLATED TIN|14|463 +Brand#12|ECONOMY BURNISHED TIN|9|463 +Brand#12|LARGE BURNISHED STEEL|9|463 +Brand#12|LARGE PLATED NICKEL|3|463 +Brand#12|PROMO POLISHED COPPER|3|463 +Brand#12|STANDARD PLATED BRASS|36|463 +Brand#13|ECONOMY BRUSHED BRASS|3|463 +Brand#13|LARGE ANODIZED COPPER|19|463 +Brand#13|MEDIUM PLATED COPPER|9|463 +Brand#13|MEDIUM PLATED STEEL|36|463 +Brand#13|PROMO POLISHED STEEL|14|463 +Brand#13|SMALL POLISHED COPPER|3|463 +Brand#13|STANDARD BRUSHED STEEL|3|463 +Brand#14|ECONOMY BURNISHED BRASS|45|463 +Brand#14|ECONOMY PLATED TIN|36|463 +Brand#14|ECONOMY POLISHED BRASS|36|463 +Brand#14|PROMO PLATED COPPER|23|463 +Brand#14|PROMO POLISHED BRASS|49|463 +Brand#14|SMALL ANODIZED STEEL|9|463 +Brand#14|SMALL POLISHED STEEL|45|463 +Brand#15|ECONOMY BRUSHED COPPER|9|463 +Brand#15|ECONOMY BURNISHED COPPER|19|463 +Brand#15|ECONOMY BURNISHED TIN|19|463 +Brand#15|LARGE BRUSHED COPPER|9|463 +Brand#15|LARGE BURNISHED NICKEL|3|463 +Brand#15|MEDIUM ANODIZED BRASS|3|463 +Brand#15|MEDIUM BRUSHED COPPER|19|463 +Brand#15|MEDIUM BURNISHED BRASS|19|463 +Brand#15|SMALL ANODIZED BRASS|3|463 +Brand#15|STANDARD PLATED STEEL|14|463 +Brand#21|ECONOMY POLISHED BRASS|49|463 +Brand#21|LARGE ANODIZED NICKEL|49|463 +Brand#21|LARGE ANODIZED TIN|9|463 +Brand#21|MEDIUM BURNISHED BRASS|14|463 +Brand#21|PROMO BURNISHED COPPER|45|463 +Brand#21|PROMO PLATED STEEL|23|463 +Brand#21|STANDARD BURNISHED TIN|45|463 +Brand#21|STANDARD PLATED COPPER|3|463 +Brand#22|ECONOMY BURNISHED TIN|3|463 +Brand#22|ECONOMY PLATED NICKEL|14|463 +Brand#22|LARGE ANODIZED STEEL|45|463 +Brand#22|LARGE PLATED BRASS|9|463 +Brand#23|ECONOMY ANODIZED COPPER|9|463 +Brand#23|LARGE PLATED NICKEL|19|463 +Brand#23|MEDIUM ANODIZED BRASS|45|463 +Brand#23|MEDIUM BURNISHED BRASS|9|463 +Brand#23|MEDIUM PLATED TIN|36|463 +Brand#23|PROMO POLISHED NICKEL|36|463 +Brand#23|SMALL PLATED COPPER|45|463 +Brand#23|SMALL POLISHED NICKEL|9|463 +Brand#23|STANDARD ANODIZED NICKEL|9|463 +Brand#23|STANDARD BURNISHED NICKEL|49|463 +Brand#24|ECONOMY BRUSHED TIN|3|463 +Brand#24|LARGE BRUSHED NICKEL|3|463 +Brand#24|PROMO BURNISHED TIN|36|463 +Brand#24|PROMO POLISHED NICKEL|23|463 +Brand#24|SMALL ANODIZED BRASS|14|463 +Brand#24|SMALL ANODIZED NICKEL|9|463 +Brand#24|SMALL ANODIZED NICKEL|23|463 +Brand#24|SMALL ANODIZED TIN|23|463 +Brand#25|ECONOMY ANODIZED TIN|45|463 +Brand#25|LARGE BURNISHED BRASS|19|463 +Brand#25|LARGE BURNISHED COPPER|23|463 +Brand#25|LARGE POLISHED NICKEL|19|463 +Brand#25|PROMO BRUSHED STEEL|45|463 +Brand#31|LARGE ANODIZED COPPER|3|463 +Brand#31|PROMO POLISHED STEEL|36|463 +Brand#31|SMALL BURNISHED TIN|45|463 +Brand#32|ECONOMY BRUSHED TIN|45|463 +Brand#32|PROMO BRUSHED BRASS|49|463 +Brand#32|SMALL BRUSHED TIN|45|463 +Brand#32|SMALL PLATED COPPER|36|463 +Brand#33|ECONOMY BRUSHED STEEL|9|463 +Brand#33|ECONOMY PLATED BRASS|36|463 +Brand#33|ECONOMY PLATED COPPER|45|463 +Brand#33|LARGE ANODIZED COPPER|9|463 +Brand#33|LARGE BURNISHED BRASS|19|463 +Brand#33|LARGE BURNISHED COPPER|14|463 +Brand#33|LARGE BURNISHED STEEL|19|463 +Brand#33|SMALL ANODIZED NICKEL|36|463 +Brand#33|STANDARD ANODIZED STEEL|36|463 +Brand#34|ECONOMY ANODIZED BRASS|9|463 +Brand#34|LARGE ANODIZED STEEL|45|463 +Brand#34|LARGE BRUSHED NICKEL|45|463 +Brand#34|PROMO BURNISHED STEEL|49|463 +Brand#34|PROMO PLATED TIN|45|463 +Brand#34|SMALL BRUSHED TIN|14|463 +Brand#34|STANDARD BURNISHED STEEL|45|463 +Brand#34|STANDARD PLATED COPPER|14|463 +Brand#34|STANDARD POLISHED NICKEL|45|463 +Brand#35|PROMO BRUSHED NICKEL|3|463 +Brand#35|PROMO POLISHED COPPER|19|463 +Brand#35|SMALL POLISHED TIN|36|463 +Brand#35|STANDARD BRUSHED STEEL|23|463 +Brand#35|STANDARD PLATED COPPER|9|463 +Brand#41|LARGE BURNISHED COPPER|45|463 +Brand#41|LARGE PLATED COPPER|14|463 +Brand#41|MEDIUM BURNISHED TIN|23|463 +Brand#41|MEDIUM PLATED STEEL|36|463 +Brand#41|SMALL BURNISHED NICKEL|23|463 +Brand#41|STANDARD BURNISHED COPPER|23|463 +Brand#41|STANDARD BURNISHED NICKEL|14|463 +Brand#42|ECONOMY BRUSHED BRASS|3|463 +Brand#42|LARGE POLISHED STEEL|14|463 +Brand#42|MEDIUM ANODIZED TIN|9|463 +Brand#42|MEDIUM BURNISHED COPPER|49|463 +Brand#42|PROMO BRUSHED COPPER|36|463 +Brand#42|PROMO BRUSHED TIN|49|463 +Brand#42|SMALL BURNISHED COPPER|3|463 +Brand#42|STANDARD BURNISHED NICKEL|14|463 +Brand#42|STANDARD PLATED TIN|45|463 +Brand#43|LARGE BRUSHED NICKEL|36|463 +Brand#43|MEDIUM BURNISHED BRASS|49|463 +Brand#43|PROMO PLATED COPPER|3|463 +Brand#43|PROMO POLISHED BRASS|3|463 +Brand#43|PROMO POLISHED NICKEL|45|463 +Brand#43|PROMO POLISHED NICKEL|49|463 +Brand#43|STANDARD ANODIZED BRASS|49|463 +Brand#44|LARGE ANODIZED NICKEL|45|463 +Brand#44|LARGE BURNISHED BRASS|19|463 +Brand#44|LARGE BURNISHED BRASS|23|463 +Brand#44|LARGE PLATED NICKEL|19|463 +Brand#44|MEDIUM BRUSHED STEEL|49|463 +Brand#44|PROMO POLISHED COPPER|19|463 +Brand#44|SMALL BURNISHED COPPER|45|463 +Brand#44|STANDARD POLISHED TIN|9|463 +Brand#51|LARGE PLATED COPPER|3|463 +Brand#51|MEDIUM BURNISHED STEEL|49|463 +Brand#51|PROMO PLATED BRASS|45|463 +Brand#51|SMALL ANODIZED NICKEL|9|463 +Brand#52|ECONOMY PLATED STEEL|49|463 +Brand#52|MEDIUM BURNISHED BRASS|23|463 +Brand#52|PROMO POLISHED BRASS|3|463 +Brand#53|ECONOMY BRUSHED NICKEL|49|463 +Brand#53|ECONOMY BURNISHED COPPER|3|463 +Brand#53|LARGE PLATED COPPER|23|463 +Brand#53|MEDIUM BRUSHED TIN|23|463 +Brand#53|PROMO BURNISHED COPPER|9|463 +Brand#53|STANDARD ANODIZED BRASS|36|463 +Brand#54|ECONOMY BRUSHED TIN|45|463 +Brand#54|ECONOMY BURNISHED NICKEL|36|463 +Brand#54|ECONOMY POLISHED TIN|45|463 +Brand#54|MEDIUM BRUSHED TIN|45|463 +Brand#54|SMALL ANODIZED BRASS|36|463 +Brand#54|SMALL BRUSHED BRASS|36|463 +Brand#54|SMALL PLATED NICKEL|19|463 +Brand#54|STANDARD BURNISHED NICKEL|49|463 +Brand#55|ECONOMY ANODIZED TIN|49|463 +Brand#55|ECONOMY BRUSHED COPPER|23|463 +Brand#55|LARGE POLISHED STEEL|23|463 +Brand#55|MEDIUM ANODIZED BRASS|9|463 +Brand#55|MEDIUM ANODIZED TIN|19|463 +Brand#55|PROMO BRUSHED TIN|36|463 +Brand#55|SMALL ANODIZED BRASS|49|463 +Brand#55|STANDARD ANODIZED BRASS|45|463 +Brand#55|STANDARD BRUSHED TIN|19|463 +Brand#55|STANDARD BURNISHED COPPER|14|463 +Brand#55|STANDARD PLATED TIN|9|463 +Brand#11|STANDARD ANODIZED BRASS|14|462 +Brand#12|ECONOMY BURNISHED NICKEL|23|462 +Brand#12|MEDIUM BURNISHED NICKEL|36|462 +Brand#13|LARGE ANODIZED TIN|49|462 +Brand#13|MEDIUM ANODIZED STEEL|19|462 +Brand#15|ECONOMY PLATED COPPER|19|462 +Brand#15|SMALL ANODIZED TIN|36|462 +Brand#22|SMALL POLISHED STEEL|45|462 +Brand#23|ECONOMY BRUSHED COPPER|19|462 +Brand#23|LARGE PLATED BRASS|19|462 +Brand#23|STANDARD POLISHED COPPER|36|462 +Brand#24|PROMO BRUSHED TIN|19|462 +Brand#24|SMALL BRUSHED BRASS|14|462 +Brand#25|LARGE ANODIZED BRASS|3|462 +Brand#25|MEDIUM PLATED BRASS|9|462 +Brand#25|STANDARD BRUSHED STEEL|14|462 +Brand#32|PROMO BRUSHED BRASS|14|462 +Brand#32|STANDARD PLATED NICKEL|9|462 +Brand#33|MEDIUM ANODIZED TIN|23|462 +Brand#33|MEDIUM BRUSHED STEEL|14|462 +Brand#35|LARGE ANODIZED TIN|45|462 +Brand#35|MEDIUM ANODIZED STEEL|9|462 +Brand#41|STANDARD BURNISHED NICKEL|3|462 +Brand#42|STANDARD ANODIZED BRASS|9|462 +Brand#51|MEDIUM BURNISHED NICKEL|19|462 +Brand#51|SMALL PLATED COPPER|36|462 +Brand#53|ECONOMY BRUSHED BRASS|9|462 +Brand#53|STANDARD PLATED BRASS|9|462 +Brand#54|MEDIUM BURNISHED STEEL|49|462 +Brand#54|STANDARD PLATED NICKEL|23|462 +Brand#55|MEDIUM ANODIZED STEEL|45|462 +Brand#55|STANDARD ANODIZED BRASS|36|462 +Brand#12|MEDIUM PLATED STEEL|19|461 +Brand#15|ECONOMY POLISHED STEEL|14|461 +Brand#15|MEDIUM BURNISHED TIN|49|461 +Brand#24|ECONOMY ANODIZED TIN|36|461 +Brand#25|STANDARD BRUSHED TIN|14|461 +Brand#31|PROMO POLISHED COPPER|36|461 +Brand#32|ECONOMY BURNISHED NICKEL|49|461 +Brand#32|PROMO BRUSHED STEEL|14|461 +Brand#43|PROMO ANODIZED BRASS|19|461 +Brand#44|STANDARD BRUSHED COPPER|19|461 +Brand#11|ECONOMY ANODIZED STEEL|3|460 +Brand#11|ECONOMY ANODIZED TIN|19|460 +Brand#11|ECONOMY BRUSHED TIN|3|460 +Brand#11|ECONOMY PLATED COPPER|45|460 +Brand#11|ECONOMY PLATED STEEL|36|460 +Brand#11|ECONOMY POLISHED BRASS|9|460 +Brand#11|LARGE ANODIZED COPPER|3|460 +Brand#11|LARGE BRUSHED BRASS|19|460 +Brand#11|LARGE PLATED STEEL|19|460 +Brand#11|LARGE PLATED TIN|19|460 +Brand#11|MEDIUM ANODIZED BRASS|45|460 +Brand#11|MEDIUM ANODIZED NICKEL|49|460 +Brand#11|MEDIUM BRUSHED BRASS|23|460 +Brand#11|MEDIUM PLATED BRASS|23|460 +Brand#11|MEDIUM PLATED NICKEL|9|460 +Brand#11|PROMO ANODIZED NICKEL|14|460 +Brand#11|PROMO ANODIZED NICKEL|45|460 +Brand#11|PROMO PLATED NICKEL|9|460 +Brand#11|SMALL POLISHED COPPER|19|460 +Brand#11|SMALL POLISHED NICKEL|49|460 +Brand#11|STANDARD BRUSHED COPPER|45|460 +Brand#11|STANDARD BURNISHED NICKEL|23|460 +Brand#11|STANDARD PLATED NICKEL|36|460 +Brand#11|STANDARD POLISHED NICKEL|45|460 +Brand#12|ECONOMY ANODIZED NICKEL|3|460 +Brand#12|ECONOMY BURNISHED COPPER|49|460 +Brand#12|LARGE BURNISHED BRASS|14|460 +Brand#12|LARGE PLATED COPPER|36|460 +Brand#12|LARGE PLATED STEEL|9|460 +Brand#12|LARGE POLISHED NICKEL|14|460 +Brand#12|MEDIUM ANODIZED BRASS|19|460 +Brand#12|PROMO ANODIZED NICKEL|9|460 +Brand#12|PROMO BRUSHED COPPER|19|460 +Brand#12|PROMO BRUSHED STEEL|23|460 +Brand#12|SMALL BRUSHED TIN|14|460 +Brand#12|SMALL POLISHED STEEL|23|460 +Brand#12|STANDARD ANODIZED BRASS|14|460 +Brand#12|STANDARD BRUSHED STEEL|19|460 +Brand#12|STANDARD PLATED BRASS|45|460 +Brand#12|STANDARD PLATED BRASS|49|460 +Brand#12|STANDARD POLISHED NICKEL|45|460 +Brand#12|STANDARD POLISHED STEEL|19|460 +Brand#13|ECONOMY PLATED TIN|23|460 +Brand#13|ECONOMY POLISHED BRASS|19|460 +Brand#13|ECONOMY POLISHED COPPER|45|460 +Brand#13|ECONOMY POLISHED TIN|36|460 +Brand#13|LARGE BRUSHED BRASS|3|460 +Brand#13|LARGE BRUSHED NICKEL|36|460 +Brand#13|LARGE BURNISHED NICKEL|3|460 +Brand#13|LARGE BURNISHED STEEL|3|460 +Brand#13|LARGE BURNISHED TIN|49|460 +Brand#13|LARGE PLATED NICKEL|9|460 +Brand#13|MEDIUM BRUSHED NICKEL|14|460 +Brand#13|MEDIUM BURNISHED BRASS|3|460 +Brand#13|MEDIUM BURNISHED TIN|23|460 +Brand#13|PROMO ANODIZED TIN|3|460 +Brand#13|PROMO BRUSHED NICKEL|23|460 +Brand#13|PROMO POLISHED COPPER|45|460 +Brand#13|PROMO POLISHED TIN|36|460 +Brand#13|SMALL ANODIZED NICKEL|23|460 +Brand#13|SMALL ANODIZED STEEL|14|460 +Brand#13|SMALL BRUSHED NICKEL|45|460 +Brand#13|SMALL BRUSHED STEEL|3|460 +Brand#13|SMALL BRUSHED STEEL|23|460 +Brand#13|SMALL BURNISHED STEEL|45|460 +Brand#13|SMALL BURNISHED TIN|14|460 +Brand#13|STANDARD ANODIZED NICKEL|9|460 +Brand#13|STANDARD ANODIZED TIN|45|460 +Brand#13|STANDARD BRUSHED STEEL|36|460 +Brand#13|STANDARD BRUSHED TIN|9|460 +Brand#13|STANDARD BURNISHED BRASS|36|460 +Brand#13|STANDARD BURNISHED TIN|45|460 +Brand#13|STANDARD PLATED TIN|49|460 +Brand#14|ECONOMY ANODIZED NICKEL|49|460 +Brand#14|ECONOMY BURNISHED NICKEL|36|460 +Brand#14|ECONOMY BURNISHED STEEL|23|460 +Brand#14|ECONOMY BURNISHED TIN|23|460 +Brand#14|ECONOMY PLATED NICKEL|9|460 +Brand#14|LARGE BURNISHED NICKEL|23|460 +Brand#14|LARGE BURNISHED TIN|19|460 +Brand#14|MEDIUM PLATED NICKEL|14|460 +Brand#14|PROMO PLATED COPPER|9|460 +Brand#14|SMALL ANODIZED STEEL|49|460 +Brand#14|SMALL PLATED TIN|19|460 +Brand#14|SMALL POLISHED STEEL|49|460 +Brand#14|STANDARD BURNISHED TIN|9|460 +Brand#15|ECONOMY PLATED BRASS|36|460 +Brand#15|LARGE BURNISHED BRASS|9|460 +Brand#15|LARGE BURNISHED STEEL|45|460 +Brand#15|LARGE BURNISHED TIN|49|460 +Brand#15|LARGE POLISHED STEEL|45|460 +Brand#15|MEDIUM ANODIZED NICKEL|14|460 +Brand#15|MEDIUM ANODIZED STEEL|19|460 +Brand#15|MEDIUM BURNISHED NICKEL|19|460 +Brand#15|MEDIUM BURNISHED STEEL|14|460 +Brand#15|MEDIUM PLATED BRASS|45|460 +Brand#15|PROMO BURNISHED NICKEL|9|460 +Brand#15|PROMO BURNISHED STEEL|36|460 +Brand#15|PROMO PLATED COPPER|14|460 +Brand#15|PROMO POLISHED TIN|49|460 +Brand#15|SMALL BRUSHED BRASS|45|460 +Brand#15|SMALL BRUSHED TIN|45|460 +Brand#15|SMALL BURNISHED COPPER|3|460 +Brand#15|SMALL BURNISHED NICKEL|19|460 +Brand#15|SMALL PLATED NICKEL|49|460 +Brand#15|SMALL POLISHED TIN|45|460 +Brand#15|STANDARD ANODIZED TIN|14|460 +Brand#15|STANDARD PLATED COPPER|14|460 +Brand#15|STANDARD PLATED COPPER|19|460 +Brand#15|STANDARD POLISHED TIN|36|460 +Brand#21|ECONOMY POLISHED STEEL|36|460 +Brand#21|LARGE BURNISHED COPPER|36|460 +Brand#21|LARGE PLATED STEEL|19|460 +Brand#21|MEDIUM BURNISHED BRASS|45|460 +Brand#21|MEDIUM BURNISHED COPPER|45|460 +Brand#21|MEDIUM BURNISHED COPPER|49|460 +Brand#21|MEDIUM BURNISHED STEEL|9|460 +Brand#21|MEDIUM PLATED TIN|19|460 +Brand#21|PROMO ANODIZED COPPER|45|460 +Brand#21|PROMO ANODIZED STEEL|45|460 +Brand#21|PROMO BRUSHED COPPER|23|460 +Brand#21|SMALL ANODIZED BRASS|45|460 +Brand#21|SMALL BURNISHED BRASS|45|460 +Brand#21|SMALL PLATED TIN|36|460 +Brand#21|SMALL POLISHED NICKEL|3|460 +Brand#21|STANDARD ANODIZED TIN|9|460 +Brand#21|STANDARD BRUSHED NICKEL|19|460 +Brand#21|STANDARD PLATED TIN|36|460 +Brand#21|STANDARD POLISHED STEEL|23|460 +Brand#22|ECONOMY ANODIZED BRASS|14|460 +Brand#22|ECONOMY ANODIZED COPPER|45|460 +Brand#22|ECONOMY ANODIZED TIN|9|460 +Brand#22|ECONOMY BRUSHED NICKEL|9|460 +Brand#22|ECONOMY BURNISHED TIN|49|460 +Brand#22|ECONOMY POLISHED COPPER|9|460 +Brand#22|ECONOMY POLISHED TIN|14|460 +Brand#22|LARGE BRUSHED COPPER|49|460 +Brand#22|LARGE BURNISHED NICKEL|3|460 +Brand#22|LARGE POLISHED TIN|19|460 +Brand#22|MEDIUM PLATED STEEL|49|460 +Brand#22|PROMO BRUSHED TIN|36|460 +Brand#22|PROMO BURNISHED STEEL|3|460 +Brand#22|PROMO BURNISHED TIN|3|460 +Brand#22|SMALL ANODIZED COPPER|14|460 +Brand#22|SMALL BURNISHED NICKEL|45|460 +Brand#22|SMALL PLATED COPPER|45|460 +Brand#22|STANDARD ANODIZED STEEL|3|460 +Brand#22|STANDARD BURNISHED COPPER|19|460 +Brand#22|STANDARD BURNISHED STEEL|49|460 +Brand#22|STANDARD PLATED STEEL|9|460 +Brand#22|STANDARD POLISHED TIN|9|460 +Brand#22|STANDARD POLISHED TIN|49|460 +Brand#23|ECONOMY BRUSHED BRASS|23|460 +Brand#23|ECONOMY BRUSHED NICKEL|45|460 +Brand#23|ECONOMY BURNISHED COPPER|19|460 +Brand#23|ECONOMY BURNISHED COPPER|36|460 +Brand#23|ECONOMY PLATED TIN|36|460 +Brand#23|ECONOMY POLISHED COPPER|49|460 +Brand#23|LARGE BRUSHED COPPER|3|460 +Brand#23|LARGE BRUSHED COPPER|23|460 +Brand#23|LARGE PLATED NICKEL|3|460 +Brand#23|LARGE POLISHED BRASS|49|460 +Brand#23|LARGE POLISHED STEEL|23|460 +Brand#23|MEDIUM ANODIZED BRASS|19|460 +Brand#23|MEDIUM BURNISHED BRASS|36|460 +Brand#23|MEDIUM PLATED COPPER|45|460 +Brand#23|PROMO ANODIZED TIN|23|460 +Brand#23|PROMO POLISHED STEEL|14|460 +Brand#23|SMALL ANODIZED STEEL|45|460 +Brand#23|SMALL PLATED TIN|9|460 +Brand#23|STANDARD ANODIZED COPPER|14|460 +Brand#23|STANDARD ANODIZED NICKEL|14|460 +Brand#23|STANDARD ANODIZED STEEL|3|460 +Brand#23|STANDARD ANODIZED TIN|9|460 +Brand#23|STANDARD BURNISHED BRASS|14|460 +Brand#23|STANDARD PLATED STEEL|36|460 +Brand#23|STANDARD PLATED TIN|49|460 +Brand#23|STANDARD POLISHED STEEL|9|460 +Brand#24|ECONOMY PLATED STEEL|19|460 +Brand#24|ECONOMY POLISHED NICKEL|49|460 +Brand#24|ECONOMY POLISHED STEEL|9|460 +Brand#24|ECONOMY POLISHED TIN|9|460 +Brand#24|LARGE ANODIZED NICKEL|3|460 +Brand#24|LARGE ANODIZED STEEL|14|460 +Brand#24|LARGE BRUSHED NICKEL|14|460 +Brand#24|LARGE BURNISHED NICKEL|23|460 +Brand#24|LARGE BURNISHED STEEL|9|460 +Brand#24|LARGE PLATED BRASS|45|460 +Brand#24|MEDIUM ANODIZED TIN|14|460 +Brand#24|MEDIUM PLATED COPPER|14|460 +Brand#24|MEDIUM PLATED TIN|3|460 +Brand#24|PROMO BRUSHED BRASS|9|460 +Brand#24|PROMO PLATED NICKEL|23|460 +Brand#24|SMALL PLATED COPPER|49|460 +Brand#24|STANDARD BRUSHED COPPER|49|460 +Brand#25|ECONOMY ANODIZED COPPER|19|460 +Brand#25|ECONOMY ANODIZED STEEL|19|460 +Brand#25|ECONOMY BURNISHED COPPER|19|460 +Brand#25|LARGE PLATED COPPER|23|460 +Brand#25|LARGE PLATED COPPER|49|460 +Brand#25|LARGE PLATED NICKEL|19|460 +Brand#25|LARGE POLISHED STEEL|3|460 +Brand#25|MEDIUM ANODIZED BRASS|45|460 +Brand#25|MEDIUM BRUSHED STEEL|9|460 +Brand#25|PROMO POLISHED STEEL|49|460 +Brand#25|SMALL ANODIZED TIN|3|460 +Brand#25|SMALL BRUSHED COPPER|49|460 +Brand#25|SMALL BRUSHED STEEL|45|460 +Brand#25|SMALL BRUSHED TIN|23|460 +Brand#25|SMALL PLATED COPPER|19|460 +Brand#25|STANDARD ANODIZED STEEL|19|460 +Brand#25|STANDARD ANODIZED STEEL|23|460 +Brand#25|STANDARD BRUSHED COPPER|36|460 +Brand#25|STANDARD BURNISHED STEEL|36|460 +Brand#25|STANDARD BURNISHED TIN|36|460 +Brand#25|STANDARD POLISHED COPPER|45|460 +Brand#31|ECONOMY ANODIZED STEEL|19|460 +Brand#31|ECONOMY BRUSHED NICKEL|49|460 +Brand#31|ECONOMY PLATED NICKEL|49|460 +Brand#31|LARGE ANODIZED BRASS|49|460 +Brand#31|LARGE BURNISHED COPPER|45|460 +Brand#31|LARGE BURNISHED NICKEL|9|460 +Brand#31|LARGE BURNISHED STEEL|45|460 +Brand#31|LARGE PLATED STEEL|14|460 +Brand#31|LARGE POLISHED NICKEL|19|460 +Brand#31|MEDIUM ANODIZED BRASS|45|460 +Brand#31|MEDIUM BURNISHED BRASS|19|460 +Brand#31|MEDIUM PLATED BRASS|14|460 +Brand#31|MEDIUM PLATED TIN|14|460 +Brand#31|PROMO ANODIZED NICKEL|14|460 +Brand#31|PROMO ANODIZED STEEL|23|460 +Brand#31|PROMO BURNISHED BRASS|23|460 +Brand#31|SMALL BURNISHED COPPER|36|460 +Brand#31|SMALL BURNISHED NICKEL|23|460 +Brand#31|SMALL POLISHED BRASS|45|460 +Brand#31|STANDARD BRUSHED STEEL|3|460 +Brand#31|STANDARD BURNISHED NICKEL|9|460 +Brand#31|STANDARD PLATED BRASS|23|460 +Brand#32|ECONOMY ANODIZED COPPER|49|460 +Brand#32|ECONOMY BURNISHED NICKEL|14|460 +Brand#32|ECONOMY BURNISHED NICKEL|45|460 +Brand#32|ECONOMY PLATED TIN|49|460 +Brand#32|ECONOMY POLISHED COPPER|3|460 +Brand#32|LARGE PLATED NICKEL|19|460 +Brand#32|LARGE POLISHED BRASS|9|460 +Brand#32|LARGE POLISHED NICKEL|9|460 +Brand#32|LARGE POLISHED STEEL|45|460 +Brand#32|MEDIUM ANODIZED NICKEL|45|460 +Brand#32|MEDIUM ANODIZED TIN|36|460 +Brand#32|MEDIUM BRUSHED COPPER|14|460 +Brand#32|MEDIUM BRUSHED STEEL|9|460 +Brand#32|MEDIUM BURNISHED COPPER|3|460 +Brand#32|MEDIUM BURNISHED STEEL|14|460 +Brand#32|MEDIUM PLATED COPPER|19|460 +Brand#32|MEDIUM PLATED STEEL|3|460 +Brand#32|PROMO ANODIZED NICKEL|9|460 +Brand#32|PROMO ANODIZED NICKEL|14|460 +Brand#32|PROMO ANODIZED NICKEL|45|460 +Brand#32|PROMO ANODIZED STEEL|36|460 +Brand#32|PROMO BRUSHED COPPER|23|460 +Brand#32|PROMO PLATED COPPER|9|460 +Brand#32|PROMO PLATED COPPER|14|460 +Brand#32|PROMO POLISHED STEEL|3|460 +Brand#32|SMALL ANODIZED NICKEL|45|460 +Brand#32|SMALL ANODIZED STEEL|3|460 +Brand#32|SMALL BRUSHED NICKEL|45|460 +Brand#32|SMALL BURNISHED NICKEL|36|460 +Brand#32|SMALL BURNISHED STEEL|49|460 +Brand#32|SMALL PLATED BRASS|14|460 +Brand#32|SMALL PLATED TIN|3|460 +Brand#32|SMALL POLISHED COPPER|9|460 +Brand#32|SMALL POLISHED TIN|14|460 +Brand#32|STANDARD ANODIZED NICKEL|23|460 +Brand#32|STANDARD PLATED STEEL|36|460 +Brand#32|STANDARD POLISHED COPPER|36|460 +Brand#33|ECONOMY PLATED COPPER|49|460 +Brand#33|ECONOMY POLISHED STEEL|49|460 +Brand#33|LARGE ANODIZED NICKEL|45|460 +Brand#33|LARGE BRUSHED BRASS|3|460 +Brand#33|LARGE BURNISHED NICKEL|3|460 +Brand#33|MEDIUM ANODIZED BRASS|9|460 +Brand#33|MEDIUM BRUSHED COPPER|19|460 +Brand#33|MEDIUM BURNISHED TIN|19|460 +Brand#33|PROMO ANODIZED BRASS|9|460 +Brand#33|PROMO ANODIZED NICKEL|45|460 +Brand#33|PROMO BURNISHED BRASS|45|460 +Brand#33|PROMO PLATED BRASS|9|460 +Brand#33|PROMO POLISHED STEEL|14|460 +Brand#33|PROMO POLISHED TIN|49|460 +Brand#33|SMALL ANODIZED TIN|14|460 +Brand#33|SMALL BURNISHED COPPER|3|460 +Brand#33|SMALL PLATED STEEL|36|460 +Brand#33|SMALL POLISHED BRASS|23|460 +Brand#33|STANDARD ANODIZED COPPER|23|460 +Brand#33|STANDARD BRUSHED BRASS|45|460 +Brand#33|STANDARD BRUSHED STEEL|49|460 +Brand#33|STANDARD BURNISHED BRASS|49|460 +Brand#33|STANDARD BURNISHED NICKEL|3|460 +Brand#33|STANDARD PLATED NICKEL|19|460 +Brand#33|STANDARD POLISHED BRASS|9|460 +Brand#34|ECONOMY ANODIZED COPPER|14|460 +Brand#34|ECONOMY BRUSHED TIN|45|460 +Brand#34|ECONOMY PLATED STEEL|49|460 +Brand#34|LARGE ANODIZED TIN|9|460 +Brand#34|LARGE BRUSHED BRASS|45|460 +Brand#34|LARGE BRUSHED COPPER|9|460 +Brand#34|LARGE BRUSHED STEEL|14|460 +Brand#34|LARGE BRUSHED STEEL|45|460 +Brand#34|LARGE PLATED NICKEL|9|460 +Brand#34|MEDIUM PLATED NICKEL|45|460 +Brand#34|PROMO ANODIZED NICKEL|49|460 +Brand#34|PROMO ANODIZED TIN|36|460 +Brand#34|PROMO POLISHED BRASS|36|460 +Brand#34|PROMO POLISHED STEEL|19|460 +Brand#34|SMALL BURNISHED BRASS|23|460 +Brand#34|SMALL BURNISHED COPPER|23|460 +Brand#34|SMALL PLATED STEEL|49|460 +Brand#34|SMALL PLATED TIN|45|460 +Brand#34|SMALL POLISHED BRASS|45|460 +Brand#34|STANDARD ANODIZED BRASS|14|460 +Brand#34|STANDARD POLISHED BRASS|36|460 +Brand#35|ECONOMY BURNISHED NICKEL|23|460 +Brand#35|ECONOMY POLISHED STEEL|3|460 +Brand#35|LARGE ANODIZED COPPER|9|460 +Brand#35|LARGE ANODIZED COPPER|19|460 +Brand#35|LARGE BURNISHED COPPER|23|460 +Brand#35|LARGE PLATED BRASS|45|460 +Brand#35|MEDIUM BRUSHED TIN|19|460 +Brand#35|MEDIUM BURNISHED STEEL|23|460 +Brand#35|MEDIUM PLATED COPPER|36|460 +Brand#35|MEDIUM PLATED STEEL|3|460 +Brand#35|MEDIUM PLATED TIN|23|460 +Brand#35|PROMO BURNISHED NICKEL|45|460 +Brand#35|SMALL ANODIZED TIN|23|460 +Brand#35|SMALL BURNISHED STEEL|14|460 +Brand#35|SMALL BURNISHED STEEL|36|460 +Brand#35|SMALL BURNISHED TIN|45|460 +Brand#35|SMALL PLATED STEEL|36|460 +Brand#35|STANDARD ANODIZED STEEL|3|460 +Brand#35|STANDARD BURNISHED COPPER|36|460 +Brand#35|STANDARD BURNISHED COPPER|49|460 +Brand#35|STANDARD POLISHED NICKEL|23|460 +Brand#41|ECONOMY ANODIZED BRASS|49|460 +Brand#41|ECONOMY ANODIZED STEEL|19|460 +Brand#41|ECONOMY BRUSHED BRASS|14|460 +Brand#41|ECONOMY BRUSHED COPPER|23|460 +Brand#41|ECONOMY BRUSHED STEEL|3|460 +Brand#41|ECONOMY BRUSHED TIN|45|460 +Brand#41|ECONOMY POLISHED COPPER|14|460 +Brand#41|ECONOMY POLISHED COPPER|19|460 +Brand#41|LARGE ANODIZED NICKEL|23|460 +Brand#41|LARGE POLISHED STEEL|14|460 +Brand#41|MEDIUM ANODIZED BRASS|49|460 +Brand#41|MEDIUM BRUSHED NICKEL|49|460 +Brand#41|PROMO ANODIZED STEEL|49|460 +Brand#41|PROMO BRUSHED COPPER|3|460 +Brand#41|PROMO BRUSHED STEEL|45|460 +Brand#41|PROMO BURNISHED TIN|14|460 +Brand#41|PROMO PLATED TIN|3|460 +Brand#41|PROMO POLISHED NICKEL|49|460 +Brand#41|SMALL BRUSHED TIN|23|460 +Brand#41|SMALL PLATED BRASS|23|460 +Brand#41|SMALL POLISHED BRASS|19|460 +Brand#41|STANDARD ANODIZED BRASS|23|460 +Brand#41|STANDARD BURNISHED COPPER|19|460 +Brand#41|STANDARD PLATED BRASS|23|460 +Brand#41|STANDARD PLATED NICKEL|14|460 +Brand#41|STANDARD POLISHED NICKEL|23|460 +Brand#42|ECONOMY BRUSHED BRASS|19|460 +Brand#42|ECONOMY BRUSHED COPPER|19|460 +Brand#42|ECONOMY POLISHED NICKEL|49|460 +Brand#42|LARGE ANODIZED COPPER|9|460 +Brand#42|LARGE BURNISHED TIN|23|460 +Brand#42|LARGE PLATED COPPER|9|460 +Brand#42|LARGE PLATED STEEL|45|460 +Brand#42|LARGE PLATED TIN|19|460 +Brand#42|LARGE POLISHED COPPER|45|460 +Brand#42|MEDIUM PLATED STEEL|19|460 +Brand#42|MEDIUM PLATED TIN|14|460 +Brand#42|PROMO BURNISHED BRASS|14|460 +Brand#42|PROMO BURNISHED BRASS|23|460 +Brand#42|PROMO POLISHED NICKEL|36|460 +Brand#42|PROMO POLISHED STEEL|49|460 +Brand#42|SMALL ANODIZED BRASS|9|460 +Brand#42|SMALL PLATED STEEL|3|460 +Brand#42|SMALL PLATED STEEL|19|460 +Brand#42|SMALL POLISHED STEEL|45|460 +Brand#42|STANDARD ANODIZED STEEL|36|460 +Brand#42|STANDARD ANODIZED TIN|14|460 +Brand#42|STANDARD PLATED NICKEL|45|460 +Brand#43|ECONOMY ANODIZED COPPER|45|460 +Brand#43|ECONOMY ANODIZED NICKEL|23|460 +Brand#43|ECONOMY BRUSHED NICKEL|45|460 +Brand#43|LARGE ANODIZED COPPER|49|460 +Brand#43|LARGE ANODIZED STEEL|14|460 +Brand#43|LARGE BURNISHED NICKEL|23|460 +Brand#43|LARGE PLATED NICKEL|36|460 +Brand#43|MEDIUM ANODIZED NICKEL|49|460 +Brand#43|MEDIUM BRUSHED STEEL|49|460 +Brand#43|PROMO ANODIZED NICKEL|19|460 +Brand#43|PROMO ANODIZED TIN|45|460 +Brand#43|PROMO BURNISHED TIN|49|460 +Brand#43|PROMO POLISHED STEEL|23|460 +Brand#43|SMALL ANODIZED TIN|19|460 +Brand#43|SMALL BURNISHED NICKEL|19|460 +Brand#43|SMALL POLISHED BRASS|45|460 +Brand#43|STANDARD ANODIZED TIN|14|460 +Brand#43|STANDARD BRUSHED TIN|36|460 +Brand#43|STANDARD BURNISHED BRASS|9|460 +Brand#43|STANDARD PLATED NICKEL|3|460 +Brand#43|STANDARD POLISHED BRASS|3|460 +Brand#43|STANDARD POLISHED BRASS|45|460 +Brand#43|STANDARD POLISHED COPPER|23|460 +Brand#43|STANDARD POLISHED TIN|9|460 +Brand#44|ECONOMY ANODIZED BRASS|3|460 +Brand#44|ECONOMY BRUSHED TIN|23|460 +Brand#44|ECONOMY POLISHED BRASS|3|460 +Brand#44|LARGE BRUSHED COPPER|36|460 +Brand#44|LARGE BRUSHED NICKEL|3|460 +Brand#44|LARGE POLISHED NICKEL|23|460 +Brand#44|MEDIUM ANODIZED BRASS|49|460 +Brand#44|MEDIUM ANODIZED STEEL|23|460 +Brand#44|PROMO BRUSHED TIN|9|460 +Brand#44|PROMO POLISHED COPPER|14|460 +Brand#44|PROMO POLISHED STEEL|49|460 +Brand#44|SMALL ANODIZED COPPER|49|460 +Brand#44|SMALL ANODIZED NICKEL|3|460 +Brand#44|SMALL ANODIZED TIN|36|460 +Brand#44|SMALL ANODIZED TIN|49|460 +Brand#44|SMALL BRUSHED COPPER|23|460 +Brand#44|SMALL BRUSHED NICKEL|3|460 +Brand#44|SMALL BURNISHED BRASS|19|460 +Brand#44|SMALL BURNISHED STEEL|36|460 +Brand#44|SMALL POLISHED BRASS|19|460 +Brand#44|SMALL POLISHED COPPER|45|460 +Brand#44|STANDARD PLATED BRASS|36|460 +Brand#51|ECONOMY ANODIZED STEEL|49|460 +Brand#51|ECONOMY PLATED BRASS|9|460 +Brand#51|ECONOMY PLATED NICKEL|49|460 +Brand#51|ECONOMY PLATED TIN|45|460 +Brand#51|ECONOMY POLISHED TIN|9|460 +Brand#51|LARGE ANODIZED BRASS|36|460 +Brand#51|LARGE ANODIZED NICKEL|36|460 +Brand#51|LARGE POLISHED BRASS|9|460 +Brand#51|LARGE POLISHED BRASS|14|460 +Brand#51|MEDIUM ANODIZED COPPER|36|460 +Brand#51|MEDIUM ANODIZED NICKEL|23|460 +Brand#51|MEDIUM ANODIZED STEEL|45|460 +Brand#51|MEDIUM ANODIZED TIN|19|460 +Brand#51|MEDIUM BRUSHED TIN|45|460 +Brand#51|MEDIUM BURNISHED NICKEL|45|460 +Brand#51|PROMO BRUSHED STEEL|9|460 +Brand#51|PROMO PLATED STEEL|14|460 +Brand#51|SMALL BRUSHED NICKEL|45|460 +Brand#51|SMALL BRUSHED TIN|49|460 +Brand#51|SMALL BURNISHED NICKEL|14|460 +Brand#51|STANDARD ANODIZED COPPER|45|460 +Brand#51|STANDARD PLATED NICKEL|14|460 +Brand#51|STANDARD POLISHED STEEL|14|460 +Brand#52|ECONOMY BURNISHED NICKEL|19|460 +Brand#52|ECONOMY PLATED COPPER|19|460 +Brand#52|LARGE ANODIZED BRASS|23|460 +Brand#52|LARGE BRUSHED TIN|45|460 +Brand#52|LARGE PLATED STEEL|49|460 +Brand#52|MEDIUM BURNISHED BRASS|19|460 +Brand#52|MEDIUM BURNISHED TIN|19|460 +Brand#52|MEDIUM PLATED BRASS|19|460 +Brand#52|MEDIUM PLATED NICKEL|23|460 +Brand#52|PROMO ANODIZED NICKEL|49|460 +Brand#52|PROMO ANODIZED STEEL|9|460 +Brand#52|PROMO BRUSHED COPPER|23|460 +Brand#52|PROMO BURNISHED NICKEL|45|460 +Brand#52|PROMO BURNISHED STEEL|23|460 +Brand#52|PROMO PLATED STEEL|14|460 +Brand#52|SMALL BRUSHED BRASS|14|460 +Brand#52|SMALL PLATED NICKEL|9|460 +Brand#52|SMALL PLATED STEEL|36|460 +Brand#52|STANDARD ANODIZED COPPER|36|460 +Brand#52|STANDARD BRUSHED COPPER|9|460 +Brand#52|STANDARD BURNISHED STEEL|45|460 +Brand#52|STANDARD POLISHED COPPER|49|460 +Brand#52|STANDARD POLISHED STEEL|3|460 +Brand#53|ECONOMY BURNISHED NICKEL|36|460 +Brand#53|ECONOMY PLATED TIN|36|460 +Brand#53|LARGE ANODIZED STEEL|9|460 +Brand#53|LARGE ANODIZED TIN|3|460 +Brand#53|LARGE PLATED COPPER|45|460 +Brand#53|LARGE PLATED TIN|23|460 +Brand#53|MEDIUM ANODIZED NICKEL|3|460 +Brand#53|MEDIUM ANODIZED STEEL|9|460 +Brand#53|MEDIUM BRUSHED TIN|36|460 +Brand#53|MEDIUM BURNISHED NICKEL|23|460 +Brand#53|MEDIUM BURNISHED TIN|45|460 +Brand#53|MEDIUM PLATED COPPER|9|460 +Brand#53|PROMO ANODIZED NICKEL|9|460 +Brand#53|PROMO BRUSHED NICKEL|49|460 +Brand#53|PROMO BRUSHED TIN|45|460 +Brand#53|PROMO PLATED STEEL|14|460 +Brand#53|PROMO PLATED STEEL|23|460 +Brand#53|SMALL ANODIZED COPPER|45|460 +Brand#53|SMALL ANODIZED TIN|19|460 +Brand#53|SMALL BRUSHED BRASS|14|460 +Brand#53|SMALL PLATED BRASS|3|460 +Brand#53|SMALL PLATED NICKEL|36|460 +Brand#53|STANDARD BRUSHED COPPER|45|460 +Brand#53|STANDARD BRUSHED NICKEL|3|460 +Brand#54|ECONOMY BRUSHED STEEL|3|460 +Brand#54|ECONOMY BURNISHED COPPER|3|460 +Brand#54|LARGE BRUSHED STEEL|36|460 +Brand#54|MEDIUM ANODIZED STEEL|3|460 +Brand#54|MEDIUM ANODIZED TIN|19|460 +Brand#54|MEDIUM BURNISHED COPPER|14|460 +Brand#54|MEDIUM PLATED STEEL|36|460 +Brand#54|PROMO ANODIZED STEEL|3|460 +Brand#54|PROMO BRUSHED COPPER|3|460 +Brand#54|PROMO PLATED STEEL|9|460 +Brand#54|PROMO POLISHED STEEL|23|460 +Brand#54|SMALL ANODIZED BRASS|14|460 +Brand#54|SMALL BURNISHED TIN|45|460 +Brand#54|STANDARD BRUSHED BRASS|36|460 +Brand#54|STANDARD BRUSHED NICKEL|23|460 +Brand#54|STANDARD PLATED TIN|45|460 +Brand#54|STANDARD POLISHED BRASS|3|460 +Brand#55|ECONOMY ANODIZED COPPER|14|460 +Brand#55|ECONOMY ANODIZED NICKEL|49|460 +Brand#55|ECONOMY BRUSHED BRASS|14|460 +Brand#55|ECONOMY BRUSHED TIN|45|460 +Brand#55|ECONOMY BURNISHED COPPER|9|460 +Brand#55|ECONOMY BURNISHED NICKEL|23|460 +Brand#55|ECONOMY PLATED COPPER|23|460 +Brand#55|ECONOMY PLATED COPPER|49|460 +Brand#55|LARGE ANODIZED COPPER|23|460 +Brand#55|LARGE BRUSHED BRASS|36|460 +Brand#55|LARGE BURNISHED BRASS|49|460 +Brand#55|MEDIUM ANODIZED NICKEL|23|460 +Brand#55|MEDIUM ANODIZED TIN|9|460 +Brand#55|MEDIUM PLATED BRASS|9|460 +Brand#55|MEDIUM PLATED NICKEL|36|460 +Brand#55|PROMO ANODIZED BRASS|23|460 +Brand#55|PROMO ANODIZED BRASS|45|460 +Brand#55|PROMO ANODIZED COPPER|9|460 +Brand#55|PROMO ANODIZED COPPER|14|460 +Brand#55|PROMO ANODIZED TIN|19|460 +Brand#55|PROMO BRUSHED BRASS|9|460 +Brand#55|PROMO BRUSHED COPPER|19|460 +Brand#55|PROMO PLATED NICKEL|19|460 +Brand#55|PROMO PLATED TIN|49|460 +Brand#55|SMALL PLATED TIN|14|460 +Brand#55|SMALL POLISHED NICKEL|14|460 +Brand#55|STANDARD ANODIZED BRASS|14|460 +Brand#55|STANDARD ANODIZED BRASS|49|460 +Brand#55|STANDARD BRUSHED STEEL|19|460 +Brand#11|ECONOMY BRUSHED TIN|49|459 +Brand#11|ECONOMY PLATED NICKEL|19|459 +Brand#11|PROMO BURNISHED COPPER|36|459 +Brand#11|PROMO PLATED STEEL|19|459 +Brand#11|PROMO PLATED TIN|3|459 +Brand#11|SMALL BURNISHED TIN|23|459 +Brand#11|STANDARD PLATED BRASS|14|459 +Brand#11|STANDARD PLATED STEEL|9|459 +Brand#11|STANDARD PLATED TIN|45|459 +Brand#12|ECONOMY POLISHED BRASS|45|459 +Brand#12|ECONOMY POLISHED TIN|36|459 +Brand#12|LARGE BRUSHED TIN|9|459 +Brand#12|PROMO BRUSHED TIN|45|459 +Brand#12|PROMO BURNISHED NICKEL|9|459 +Brand#12|SMALL BRUSHED BRASS|36|459 +Brand#12|SMALL BURNISHED COPPER|9|459 +Brand#13|ECONOMY PLATED COPPER|23|459 +Brand#13|LARGE PLATED BRASS|14|459 +Brand#13|LARGE POLISHED BRASS|3|459 +Brand#13|MEDIUM ANODIZED STEEL|9|459 +Brand#13|PROMO ANODIZED STEEL|49|459 +Brand#14|LARGE POLISHED COPPER|19|459 +Brand#14|MEDIUM BURNISHED NICKEL|3|459 +Brand#14|MEDIUM PLATED COPPER|19|459 +Brand#14|STANDARD BRUSHED BRASS|19|459 +Brand#15|ECONOMY BRUSHED TIN|3|459 +Brand#15|LARGE BRUSHED BRASS|9|459 +Brand#15|LARGE POLISHED BRASS|49|459 +Brand#15|PROMO POLISHED STEEL|3|459 +Brand#15|SMALL BRUSHED COPPER|23|459 +Brand#15|STANDARD PLATED BRASS|45|459 +Brand#15|STANDARD PLATED TIN|14|459 +Brand#21|ECONOMY ANODIZED TIN|19|459 +Brand#21|ECONOMY BRUSHED NICKEL|3|459 +Brand#21|ECONOMY BURNISHED NICKEL|14|459 +Brand#21|LARGE ANODIZED COPPER|14|459 +Brand#21|LARGE BURNISHED BRASS|9|459 +Brand#21|LARGE POLISHED TIN|23|459 +Brand#21|MEDIUM BRUSHED BRASS|36|459 +Brand#21|MEDIUM BRUSHED COPPER|3|459 +Brand#21|MEDIUM BRUSHED STEEL|19|459 +Brand#21|MEDIUM BURNISHED STEEL|19|459 +Brand#21|PROMO PLATED STEEL|45|459 +Brand#21|SMALL ANODIZED TIN|19|459 +Brand#21|SMALL BRUSHED TIN|36|459 +Brand#21|SMALL POLISHED COPPER|19|459 +Brand#21|STANDARD PLATED NICKEL|9|459 +Brand#21|STANDARD PLATED STEEL|36|459 +Brand#22|LARGE POLISHED TIN|36|459 +Brand#22|MEDIUM PLATED TIN|9|459 +Brand#22|PROMO BURNISHED COPPER|14|459 +Brand#22|STANDARD BURNISHED COPPER|3|459 +Brand#22|STANDARD POLISHED COPPER|23|459 +Brand#23|ECONOMY BRUSHED BRASS|19|459 +Brand#23|ECONOMY BURNISHED BRASS|19|459 +Brand#23|ECONOMY POLISHED TIN|9|459 +Brand#23|LARGE BURNISHED NICKEL|23|459 +Brand#23|LARGE BURNISHED TIN|14|459 +Brand#23|MEDIUM ANODIZED NICKEL|3|459 +Brand#23|PROMO BURNISHED TIN|49|459 +Brand#23|PROMO PLATED STEEL|49|459 +Brand#23|STANDARD BRUSHED NICKEL|9|459 +Brand#23|STANDARD BURNISHED NICKEL|19|459 +Brand#23|STANDARD POLISHED BRASS|49|459 +Brand#24|ECONOMY ANODIZED COPPER|23|459 +Brand#24|LARGE ANODIZED TIN|19|459 +Brand#24|LARGE PLATED BRASS|3|459 +Brand#24|MEDIUM ANODIZED STEEL|36|459 +Brand#24|PROMO PLATED NICKEL|3|459 +Brand#24|PROMO PLATED TIN|19|459 +Brand#24|STANDARD POLISHED TIN|14|459 +Brand#25|ECONOMY BRUSHED BRASS|3|459 +Brand#25|ECONOMY BRUSHED TIN|36|459 +Brand#25|LARGE ANODIZED NICKEL|23|459 +Brand#25|LARGE BURNISHED TIN|9|459 +Brand#25|LARGE BURNISHED TIN|19|459 +Brand#25|SMALL PLATED STEEL|9|459 +Brand#25|SMALL POLISHED NICKEL|9|459 +Brand#25|SMALL POLISHED TIN|9|459 +Brand#31|ECONOMY BURNISHED TIN|49|459 +Brand#31|ECONOMY POLISHED BRASS|49|459 +Brand#31|ECONOMY POLISHED STEEL|19|459 +Brand#31|PROMO BURNISHED TIN|14|459 +Brand#31|SMALL BRUSHED COPPER|3|459 +Brand#31|STANDARD BURNISHED STEEL|9|459 +Brand#31|STANDARD BURNISHED TIN|49|459 +Brand#32|LARGE PLATED NICKEL|49|459 +Brand#32|LARGE PLATED STEEL|49|459 +Brand#33|LARGE ANODIZED BRASS|19|459 +Brand#33|PROMO ANODIZED NICKEL|36|459 +Brand#33|STANDARD ANODIZED BRASS|14|459 +Brand#33|STANDARD ANODIZED COPPER|3|459 +Brand#34|ECONOMY ANODIZED BRASS|23|459 +Brand#34|LARGE ANODIZED TIN|14|459 +Brand#34|LARGE PLATED NICKEL|36|459 +Brand#34|PROMO POLISHED TIN|14|459 +Brand#34|PROMO POLISHED TIN|36|459 +Brand#34|SMALL BURNISHED BRASS|36|459 +Brand#34|SMALL BURNISHED TIN|14|459 +Brand#34|SMALL PLATED BRASS|3|459 +Brand#34|STANDARD POLISHED STEEL|3|459 +Brand#35|ECONOMY POLISHED TIN|9|459 +Brand#35|LARGE PLATED NICKEL|3|459 +Brand#35|LARGE POLISHED COPPER|36|459 +Brand#35|MEDIUM BURNISHED NICKEL|45|459 +Brand#35|MEDIUM PLATED NICKEL|9|459 +Brand#35|STANDARD ANODIZED STEEL|49|459 +Brand#35|STANDARD POLISHED NICKEL|19|459 +Brand#41|ECONOMY BURNISHED STEEL|9|459 +Brand#41|ECONOMY POLISHED COPPER|49|459 +Brand#41|LARGE POLISHED STEEL|45|459 +Brand#41|SMALL BRUSHED NICKEL|19|459 +Brand#42|ECONOMY PLATED NICKEL|45|459 +Brand#42|ECONOMY POLISHED BRASS|19|459 +Brand#42|LARGE BRUSHED NICKEL|36|459 +Brand#42|LARGE BURNISHED NICKEL|19|459 +Brand#42|LARGE PLATED TIN|49|459 +Brand#42|MEDIUM BRUSHED TIN|23|459 +Brand#42|SMALL BRUSHED STEEL|36|459 +Brand#42|SMALL PLATED NICKEL|9|459 +Brand#42|SMALL POLISHED STEEL|23|459 +Brand#43|ECONOMY ANODIZED NICKEL|3|459 +Brand#43|LARGE PLATED TIN|49|459 +Brand#43|LARGE POLISHED COPPER|19|459 +Brand#43|PROMO BRUSHED COPPER|19|459 +Brand#43|PROMO BURNISHED TIN|3|459 +Brand#43|PROMO PLATED TIN|3|459 +Brand#43|SMALL BRUSHED NICKEL|9|459 +Brand#43|STANDARD BURNISHED NICKEL|19|459 +Brand#43|STANDARD BURNISHED STEEL|23|459 +Brand#43|STANDARD PLATED COPPER|19|459 +Brand#44|ECONOMY BURNISHED NICKEL|9|459 +Brand#44|LARGE BRUSHED STEEL|9|459 +Brand#44|MEDIUM ANODIZED TIN|23|459 +Brand#44|MEDIUM BRUSHED COPPER|14|459 +Brand#44|MEDIUM PLATED NICKEL|23|459 +Brand#44|SMALL POLISHED TIN|14|459 +Brand#44|STANDARD BURNISHED COPPER|3|459 +Brand#51|ECONOMY BRUSHED TIN|14|459 +Brand#51|ECONOMY POLISHED STEEL|9|459 +Brand#51|LARGE BRUSHED BRASS|49|459 +Brand#51|LARGE POLISHED NICKEL|36|459 +Brand#51|LARGE POLISHED TIN|36|459 +Brand#51|MEDIUM PLATED BRASS|14|459 +Brand#51|PROMO PLATED STEEL|19|459 +Brand#51|SMALL BRUSHED COPPER|45|459 +Brand#51|STANDARD ANODIZED STEEL|19|459 +Brand#51|STANDARD BURNISHED NICKEL|23|459 +Brand#51|STANDARD POLISHED BRASS|9|459 +Brand#51|STANDARD POLISHED NICKEL|9|459 +Brand#51|STANDARD POLISHED TIN|49|459 +Brand#52|ECONOMY ANODIZED STEEL|9|459 +Brand#52|ECONOMY POLISHED STEEL|49|459 +Brand#52|SMALL ANODIZED TIN|9|459 +Brand#52|STANDARD BURNISHED STEEL|49|459 +Brand#52|STANDARD POLISHED COPPER|19|459 +Brand#53|ECONOMY POLISHED STEEL|23|459 +Brand#53|ECONOMY POLISHED STEEL|49|459 +Brand#53|LARGE POLISHED COPPER|19|459 +Brand#53|MEDIUM ANODIZED NICKEL|49|459 +Brand#53|MEDIUM BURNISHED COPPER|3|459 +Brand#53|PROMO BRUSHED NICKEL|9|459 +Brand#53|PROMO PLATED TIN|19|459 +Brand#53|STANDARD ANODIZED STEEL|3|459 +Brand#53|STANDARD POLISHED BRASS|36|459 +Brand#54|ECONOMY ANODIZED COPPER|14|459 +Brand#54|ECONOMY PLATED BRASS|49|459 +Brand#54|LARGE BRUSHED TIN|19|459 +Brand#54|LARGE PLATED NICKEL|14|459 +Brand#54|MEDIUM BRUSHED NICKEL|49|459 +Brand#54|MEDIUM BURNISHED STEEL|19|459 +Brand#54|PROMO ANODIZED COPPER|19|459 +Brand#54|PROMO BURNISHED TIN|19|459 +Brand#54|PROMO PLATED COPPER|9|459 +Brand#54|SMALL ANODIZED COPPER|3|459 +Brand#54|SMALL POLISHED COPPER|3|459 +Brand#54|STANDARD ANODIZED BRASS|9|459 +Brand#55|ECONOMY BRUSHED BRASS|36|459 +Brand#55|MEDIUM BRUSHED TIN|45|459 +Brand#55|MEDIUM BURNISHED TIN|36|459 +Brand#55|MEDIUM PLATED TIN|36|459 +Brand#55|STANDARD ANODIZED BRASS|9|459 +Brand#11|ECONOMY BRUSHED COPPER|49|458 +Brand#12|MEDIUM ANODIZED BRASS|23|458 +Brand#12|PROMO ANODIZED COPPER|36|458 +Brand#13|ECONOMY BURNISHED NICKEL|19|458 +Brand#13|ECONOMY BURNISHED STEEL|9|458 +Brand#14|LARGE ANODIZED STEEL|19|458 +Brand#15|ECONOMY POLISHED COPPER|9|458 +Brand#15|LARGE BURNISHED COPPER|19|458 +Brand#23|PROMO BURNISHED COPPER|14|458 +Brand#23|STANDARD BURNISHED TIN|14|458 +Brand#24|LARGE BURNISHED COPPER|45|458 +Brand#25|LARGE ANODIZED COPPER|23|458 +Brand#25|PROMO POLISHED STEEL|23|458 +Brand#31|ECONOMY BURNISHED COPPER|19|458 +Brand#32|ECONOMY PLATED TIN|14|458 +Brand#32|ECONOMY POLISHED STEEL|14|458 +Brand#33|LARGE ANODIZED BRASS|23|458 +Brand#33|MEDIUM ANODIZED TIN|49|458 +Brand#33|PROMO PLATED BRASS|49|458 +Brand#34|ECONOMY BRUSHED COPPER|49|458 +Brand#34|ECONOMY PLATED STEEL|36|458 +Brand#41|MEDIUM PLATED BRASS|23|458 +Brand#44|STANDARD ANODIZED COPPER|9|458 +Brand#52|MEDIUM BRUSHED COPPER|23|458 +Brand#53|PROMO BURNISHED NICKEL|9|458 +Brand#55|MEDIUM PLATED NICKEL|3|458 +Brand#55|STANDARD POLISHED COPPER|23|458 +Brand#25|LARGE ANODIZED BRASS|45|457 +Brand#35|ECONOMY ANODIZED STEEL|45|457 +Brand#41|LARGE POLISHED TIN|14|457 +Brand#42|PROMO POLISHED TIN|23|457 +Brand#44|LARGE PLATED BRASS|23|457 +Brand#51|ECONOMY BURNISHED STEEL|45|457 +Brand#11|ECONOMY ANODIZED NICKEL|9|456 +Brand#11|ECONOMY BRUSHED NICKEL|9|456 +Brand#11|LARGE ANODIZED BRASS|19|456 +Brand#11|LARGE BURNISHED COPPER|36|456 +Brand#11|LARGE BURNISHED STEEL|3|456 +Brand#11|LARGE PLATED NICKEL|9|456 +Brand#11|LARGE POLISHED COPPER|23|456 +Brand#11|MEDIUM BRUSHED COPPER|49|456 +Brand#11|MEDIUM PLATED NICKEL|23|456 +Brand#11|MEDIUM PLATED STEEL|14|456 +Brand#11|PROMO BURNISHED BRASS|23|456 +Brand#11|PROMO PLATED STEEL|36|456 +Brand#11|SMALL BURNISHED STEEL|45|456 +Brand#11|SMALL POLISHED NICKEL|45|456 +Brand#11|STANDARD BRUSHED TIN|23|456 +Brand#11|STANDARD PLATED BRASS|49|456 +Brand#12|ECONOMY BRUSHED COPPER|45|456 +Brand#12|ECONOMY BRUSHED STEEL|19|456 +Brand#12|ECONOMY POLISHED BRASS|9|456 +Brand#12|LARGE ANODIZED STEEL|9|456 +Brand#12|LARGE BRUSHED COPPER|9|456 +Brand#12|LARGE POLISHED NICKEL|23|456 +Brand#12|MEDIUM ANODIZED BRASS|36|456 +Brand#12|MEDIUM ANODIZED COPPER|3|456 +Brand#12|PROMO ANODIZED BRASS|49|456 +Brand#12|PROMO PLATED NICKEL|23|456 +Brand#12|PROMO PLATED TIN|36|456 +Brand#12|PROMO POLISHED STEEL|9|456 +Brand#12|SMALL BRUSHED COPPER|3|456 +Brand#12|SMALL BRUSHED NICKEL|36|456 +Brand#12|SMALL BURNISHED TIN|49|456 +Brand#12|SMALL POLISHED BRASS|36|456 +Brand#12|STANDARD ANODIZED NICKEL|9|456 +Brand#12|STANDARD BRUSHED BRASS|14|456 +Brand#12|STANDARD BRUSHED TIN|14|456 +Brand#12|STANDARD PLATED TIN|45|456 +Brand#12|STANDARD POLISHED STEEL|49|456 +Brand#13|ECONOMY ANODIZED TIN|14|456 +Brand#13|ECONOMY BURNISHED NICKEL|45|456 +Brand#13|ECONOMY PLATED NICKEL|9|456 +Brand#13|ECONOMY PLATED NICKEL|19|456 +Brand#13|LARGE ANODIZED STEEL|36|456 +Brand#13|LARGE POLISHED STEEL|45|456 +Brand#13|LARGE POLISHED TIN|3|456 +Brand#13|MEDIUM BRUSHED NICKEL|49|456 +Brand#13|MEDIUM BURNISHED COPPER|45|456 +Brand#13|MEDIUM BURNISHED NICKEL|19|456 +Brand#13|MEDIUM PLATED NICKEL|3|456 +Brand#13|PROMO ANODIZED TIN|49|456 +Brand#13|PROMO BURNISHED STEEL|49|456 +Brand#13|PROMO BURNISHED TIN|36|456 +Brand#13|PROMO PLATED COPPER|45|456 +Brand#13|PROMO POLISHED BRASS|9|456 +Brand#13|SMALL ANODIZED BRASS|3|456 +Brand#13|SMALL POLISHED NICKEL|23|456 +Brand#13|STANDARD BRUSHED COPPER|3|456 +Brand#14|ECONOMY BRUSHED BRASS|45|456 +Brand#14|ECONOMY BRUSHED STEEL|49|456 +Brand#14|ECONOMY BURNISHED STEEL|14|456 +Brand#14|ECONOMY POLISHED NICKEL|14|456 +Brand#14|LARGE ANODIZED STEEL|14|456 +Brand#14|LARGE BURNISHED COPPER|14|456 +Brand#14|LARGE PLATED STEEL|14|456 +Brand#14|LARGE POLISHED STEEL|3|456 +Brand#14|MEDIUM BRUSHED BRASS|23|456 +Brand#14|MEDIUM BURNISHED COPPER|3|456 +Brand#14|MEDIUM BURNISHED TIN|14|456 +Brand#14|MEDIUM PLATED COPPER|36|456 +Brand#14|MEDIUM PLATED TIN|9|456 +Brand#14|PROMO ANODIZED NICKEL|36|456 +Brand#14|PROMO ANODIZED STEEL|14|456 +Brand#14|PROMO PLATED BRASS|45|456 +Brand#14|PROMO PLATED NICKEL|49|456 +Brand#14|PROMO PLATED STEEL|23|456 +Brand#14|SMALL ANODIZED TIN|49|456 +Brand#14|SMALL BRUSHED COPPER|23|456 +Brand#14|SMALL BRUSHED STEEL|23|456 +Brand#14|SMALL BURNISHED NICKEL|19|456 +Brand#14|SMALL PLATED COPPER|19|456 +Brand#14|SMALL POLISHED BRASS|45|456 +Brand#14|STANDARD ANODIZED BRASS|9|456 +Brand#14|STANDARD ANODIZED TIN|45|456 +Brand#14|STANDARD BRUSHED BRASS|14|456 +Brand#14|STANDARD BURNISHED BRASS|14|456 +Brand#14|STANDARD BURNISHED NICKEL|3|456 +Brand#14|STANDARD BURNISHED NICKEL|9|456 +Brand#14|STANDARD PLATED STEEL|9|456 +Brand#15|ECONOMY ANODIZED TIN|49|456 +Brand#15|ECONOMY BRUSHED TIN|36|456 +Brand#15|ECONOMY BURNISHED STEEL|23|456 +Brand#15|ECONOMY PLATED NICKEL|14|456 +Brand#15|ECONOMY POLISHED BRASS|36|456 +Brand#15|ECONOMY POLISHED COPPER|19|456 +Brand#15|ECONOMY POLISHED TIN|9|456 +Brand#15|LARGE ANODIZED BRASS|3|456 +Brand#15|LARGE BRUSHED COPPER|14|456 +Brand#15|LARGE PLATED TIN|23|456 +Brand#15|LARGE POLISHED NICKEL|49|456 +Brand#15|LARGE POLISHED TIN|36|456 +Brand#15|LARGE POLISHED TIN|49|456 +Brand#15|MEDIUM PLATED NICKEL|49|456 +Brand#15|MEDIUM PLATED STEEL|23|456 +Brand#15|PROMO ANODIZED NICKEL|49|456 +Brand#15|PROMO BRUSHED COPPER|19|456 +Brand#15|PROMO BRUSHED NICKEL|45|456 +Brand#15|PROMO BURNISHED NICKEL|19|456 +Brand#15|PROMO BURNISHED TIN|14|456 +Brand#15|PROMO PLATED TIN|9|456 +Brand#15|SMALL ANODIZED STEEL|23|456 +Brand#15|SMALL BRUSHED STEEL|19|456 +Brand#15|SMALL BURNISHED COPPER|36|456 +Brand#15|SMALL PLATED BRASS|49|456 +Brand#15|SMALL PLATED COPPER|36|456 +Brand#15|SMALL POLISHED NICKEL|49|456 +Brand#15|STANDARD ANODIZED NICKEL|36|456 +Brand#15|STANDARD ANODIZED STEEL|49|456 +Brand#15|STANDARD POLISHED COPPER|14|456 +Brand#15|STANDARD POLISHED TIN|14|456 +Brand#21|ECONOMY BRUSHED COPPER|45|456 +Brand#21|ECONOMY BRUSHED TIN|49|456 +Brand#21|ECONOMY POLISHED COPPER|9|456 +Brand#21|LARGE BRUSHED BRASS|3|456 +Brand#21|LARGE PLATED NICKEL|49|456 +Brand#21|LARGE POLISHED COPPER|9|456 +Brand#21|MEDIUM BRUSHED BRASS|45|456 +Brand#21|MEDIUM BURNISHED NICKEL|45|456 +Brand#21|MEDIUM BURNISHED TIN|23|456 +Brand#21|PROMO BRUSHED COPPER|36|456 +Brand#21|PROMO BRUSHED NICKEL|45|456 +Brand#21|PROMO BRUSHED STEEL|9|456 +Brand#21|PROMO BURNISHED STEEL|9|456 +Brand#21|PROMO POLISHED BRASS|3|456 +Brand#21|PROMO POLISHED BRASS|23|456 +Brand#21|SMALL BURNISHED BRASS|9|456 +Brand#21|SMALL BURNISHED STEEL|36|456 +Brand#21|SMALL POLISHED NICKEL|9|456 +Brand#21|STANDARD ANODIZED COPPER|23|456 +Brand#21|STANDARD ANODIZED TIN|36|456 +Brand#21|STANDARD BURNISHED STEEL|14|456 +Brand#21|STANDARD PLATED BRASS|49|456 +Brand#21|STANDARD POLISHED BRASS|9|456 +Brand#21|STANDARD POLISHED NICKEL|9|456 +Brand#22|ECONOMY ANODIZED BRASS|49|456 +Brand#22|ECONOMY PLATED STEEL|36|456 +Brand#22|LARGE ANODIZED STEEL|14|456 +Brand#22|LARGE BRUSHED STEEL|9|456 +Brand#22|LARGE BURNISHED BRASS|49|456 +Brand#22|LARGE BURNISHED STEEL|23|456 +Brand#22|LARGE POLISHED NICKEL|19|456 +Brand#22|LARGE POLISHED TIN|9|456 +Brand#22|MEDIUM BURNISHED COPPER|3|456 +Brand#22|MEDIUM PLATED BRASS|45|456 +Brand#22|MEDIUM PLATED TIN|14|456 +Brand#22|PROMO BRUSHED TIN|19|456 +Brand#22|PROMO BURNISHED NICKEL|36|456 +Brand#22|PROMO BURNISHED STEEL|14|456 +Brand#22|PROMO POLISHED BRASS|3|456 +Brand#22|PROMO POLISHED COPPER|19|456 +Brand#22|SMALL BRUSHED BRASS|36|456 +Brand#22|SMALL BRUSHED NICKEL|3|456 +Brand#22|SMALL PLATED COPPER|3|456 +Brand#22|STANDARD BRUSHED STEEL|19|456 +Brand#22|STANDARD BURNISHED BRASS|3|456 +Brand#22|STANDARD PLATED TIN|36|456 +Brand#22|STANDARD POLISHED TIN|23|456 +Brand#23|ECONOMY BURNISHED COPPER|3|456 +Brand#23|ECONOMY POLISHED BRASS|19|456 +Brand#23|MEDIUM BRUSHED STEEL|23|456 +Brand#23|MEDIUM BRUSHED TIN|14|456 +Brand#23|MEDIUM BURNISHED NICKEL|36|456 +Brand#23|MEDIUM BURNISHED STEEL|19|456 +Brand#23|MEDIUM PLATED STEEL|36|456 +Brand#23|PROMO ANODIZED STEEL|3|456 +Brand#23|PROMO ANODIZED TIN|36|456 +Brand#23|SMALL BRUSHED NICKEL|49|456 +Brand#23|SMALL BRUSHED STEEL|36|456 +Brand#23|SMALL PLATED STEEL|19|456 +Brand#23|STANDARD ANODIZED STEEL|49|456 +Brand#23|STANDARD ANODIZED TIN|23|456 +Brand#23|STANDARD BRUSHED BRASS|3|456 +Brand#23|STANDARD BRUSHED COPPER|49|456 +Brand#23|STANDARD PLATED BRASS|36|456 +Brand#24|ECONOMY BRUSHED BRASS|9|456 +Brand#24|ECONOMY BURNISHED STEEL|23|456 +Brand#24|ECONOMY PLATED NICKEL|36|456 +Brand#24|ECONOMY POLISHED NICKEL|36|456 +Brand#24|PROMO BRUSHED STEEL|23|456 +Brand#24|PROMO PLATED TIN|14|456 +Brand#24|SMALL BRUSHED NICKEL|9|456 +Brand#24|SMALL BRUSHED TIN|49|456 +Brand#24|SMALL BURNISHED STEEL|23|456 +Brand#24|SMALL POLISHED NICKEL|45|456 +Brand#24|STANDARD BRUSHED STEEL|23|456 +Brand#24|STANDARD BURNISHED TIN|36|456 +Brand#25|ECONOMY BRUSHED TIN|19|456 +Brand#25|ECONOMY BURNISHED BRASS|45|456 +Brand#25|ECONOMY BURNISHED COPPER|9|456 +Brand#25|ECONOMY PLATED BRASS|49|456 +Brand#25|ECONOMY PLATED STEEL|3|456 +Brand#25|ECONOMY POLISHED COPPER|9|456 +Brand#25|ECONOMY POLISHED NICKEL|9|456 +Brand#25|LARGE ANODIZED STEEL|3|456 +Brand#25|LARGE PLATED NICKEL|23|456 +Brand#25|MEDIUM BURNISHED COPPER|23|456 +Brand#25|MEDIUM BURNISHED NICKEL|19|456 +Brand#25|MEDIUM PLATED NICKEL|14|456 +Brand#25|MEDIUM PLATED STEEL|23|456 +Brand#25|MEDIUM PLATED TIN|14|456 +Brand#25|PROMO ANODIZED NICKEL|23|456 +Brand#25|PROMO BRUSHED NICKEL|3|456 +Brand#25|PROMO PLATED BRASS|14|456 +Brand#25|PROMO PLATED NICKEL|49|456 +Brand#25|PROMO POLISHED COPPER|36|456 +Brand#25|SMALL BRUSHED NICKEL|23|456 +Brand#25|SMALL POLISHED STEEL|49|456 +Brand#25|SMALL POLISHED TIN|49|456 +Brand#25|STANDARD ANODIZED BRASS|49|456 +Brand#25|STANDARD PLATED NICKEL|9|456 +Brand#31|ECONOMY BRUSHED BRASS|14|456 +Brand#31|ECONOMY BRUSHED NICKEL|14|456 +Brand#31|ECONOMY BRUSHED TIN|36|456 +Brand#31|ECONOMY PLATED BRASS|14|456 +Brand#31|ECONOMY PLATED BRASS|19|456 +Brand#31|LARGE ANODIZED STEEL|19|456 +Brand#31|LARGE BRUSHED STEEL|45|456 +Brand#31|LARGE BURNISHED BRASS|19|456 +Brand#31|LARGE BURNISHED COPPER|36|456 +Brand#31|LARGE BURNISHED TIN|19|456 +Brand#31|LARGE PLATED COPPER|23|456 +Brand#31|LARGE PLATED NICKEL|23|456 +Brand#31|LARGE POLISHED TIN|3|456 +Brand#31|MEDIUM BRUSHED STEEL|9|456 +Brand#31|MEDIUM BURNISHED STEEL|9|456 +Brand#31|PROMO ANODIZED BRASS|9|456 +Brand#31|PROMO ANODIZED COPPER|14|456 +Brand#31|PROMO BRUSHED NICKEL|23|456 +Brand#31|PROMO BURNISHED TIN|19|456 +Brand#31|PROMO PLATED STEEL|23|456 +Brand#31|PROMO POLISHED NICKEL|36|456 +Brand#31|SMALL ANODIZED NICKEL|45|456 +Brand#31|SMALL ANODIZED TIN|9|456 +Brand#31|SMALL BURNISHED BRASS|3|456 +Brand#31|SMALL POLISHED BRASS|19|456 +Brand#31|STANDARD ANODIZED BRASS|9|456 +Brand#31|STANDARD BURNISHED COPPER|19|456 +Brand#31|STANDARD POLISHED BRASS|9|456 +Brand#31|STANDARD POLISHED BRASS|14|456 +Brand#31|STANDARD POLISHED TIN|14|456 +Brand#32|ECONOMY ANODIZED STEEL|49|456 +Brand#32|ECONOMY PLATED TIN|45|456 +Brand#32|ECONOMY POLISHED COPPER|23|456 +Brand#32|ECONOMY POLISHED COPPER|45|456 +Brand#32|LARGE ANODIZED COPPER|36|456 +Brand#32|LARGE ANODIZED NICKEL|9|456 +Brand#32|MEDIUM ANODIZED STEEL|14|456 +Brand#32|MEDIUM BRUSHED TIN|9|456 +Brand#32|MEDIUM PLATED BRASS|19|456 +Brand#32|MEDIUM PLATED COPPER|9|456 +Brand#32|PROMO ANODIZED STEEL|14|456 +Brand#32|PROMO BRUSHED BRASS|36|456 +Brand#32|PROMO BURNISHED COPPER|3|456 +Brand#32|PROMO BURNISHED COPPER|23|456 +Brand#32|PROMO BURNISHED COPPER|45|456 +Brand#32|PROMO PLATED NICKEL|3|456 +Brand#32|SMALL ANODIZED COPPER|19|456 +Brand#32|SMALL PLATED STEEL|49|456 +Brand#32|STANDARD ANODIZED BRASS|14|456 +Brand#32|STANDARD POLISHED COPPER|14|456 +Brand#32|STANDARD POLISHED COPPER|19|456 +Brand#32|STANDARD POLISHED NICKEL|19|456 +Brand#32|STANDARD POLISHED STEEL|36|456 +Brand#33|ECONOMY BRUSHED NICKEL|9|456 +Brand#33|ECONOMY BURNISHED STEEL|23|456 +Brand#33|ECONOMY PLATED STEEL|36|456 +Brand#33|ECONOMY PLATED STEEL|45|456 +Brand#33|ECONOMY POLISHED BRASS|36|456 +Brand#33|ECONOMY POLISHED NICKEL|45|456 +Brand#33|ECONOMY POLISHED TIN|14|456 +Brand#33|LARGE ANODIZED STEEL|19|456 +Brand#33|LARGE ANODIZED STEEL|36|456 +Brand#33|LARGE ANODIZED TIN|3|456 +Brand#33|LARGE BRUSHED TIN|14|456 +Brand#33|LARGE BURNISHED BRASS|3|456 +Brand#33|LARGE PLATED BRASS|23|456 +Brand#33|LARGE POLISHED STEEL|49|456 +Brand#33|MEDIUM PLATED NICKEL|9|456 +Brand#33|MEDIUM PLATED NICKEL|14|456 +Brand#33|PROMO ANODIZED BRASS|36|456 +Brand#33|PROMO BRUSHED STEEL|49|456 +Brand#33|PROMO BURNISHED TIN|19|456 +Brand#33|PROMO PLATED TIN|23|456 +Brand#33|PROMO POLISHED TIN|23|456 +Brand#33|SMALL BRUSHED BRASS|19|456 +Brand#33|SMALL POLISHED NICKEL|9|456 +Brand#33|STANDARD BRUSHED STEEL|45|456 +Brand#33|STANDARD POLISHED NICKEL|49|456 +Brand#33|STANDARD POLISHED STEEL|9|456 +Brand#34|ECONOMY ANODIZED BRASS|49|456 +Brand#34|ECONOMY PLATED STEEL|3|456 +Brand#34|ECONOMY POLISHED NICKEL|14|456 +Brand#34|LARGE ANODIZED NICKEL|49|456 +Brand#34|LARGE BURNISHED TIN|3|456 +Brand#34|LARGE PLATED COPPER|14|456 +Brand#34|MEDIUM ANODIZED STEEL|19|456 +Brand#34|MEDIUM ANODIZED TIN|36|456 +Brand#34|MEDIUM BRUSHED BRASS|14|456 +Brand#34|MEDIUM BRUSHED COPPER|23|456 +Brand#34|PROMO ANODIZED COPPER|23|456 +Brand#34|PROMO BURNISHED COPPER|3|456 +Brand#34|PROMO PLATED BRASS|23|456 +Brand#34|PROMO POLISHED STEEL|36|456 +Brand#34|SMALL BRUSHED TIN|3|456 +Brand#34|SMALL BURNISHED COPPER|14|456 +Brand#34|SMALL PLATED BRASS|36|456 +Brand#34|SMALL PLATED COPPER|49|456 +Brand#34|SMALL PLATED STEEL|9|456 +Brand#34|SMALL PLATED STEEL|14|456 +Brand#34|STANDARD ANODIZED BRASS|49|456 +Brand#34|STANDARD ANODIZED NICKEL|45|456 +Brand#34|STANDARD BRUSHED NICKEL|9|456 +Brand#34|STANDARD BRUSHED STEEL|36|456 +Brand#34|STANDARD BRUSHED STEEL|45|456 +Brand#34|STANDARD PLATED STEEL|9|456 +Brand#34|STANDARD PLATED TIN|3|456 +Brand#34|STANDARD POLISHED NICKEL|23|456 +Brand#35|ECONOMY ANODIZED TIN|36|456 +Brand#35|ECONOMY BRUSHED BRASS|45|456 +Brand#35|ECONOMY BURNISHED TIN|9|456 +Brand#35|ECONOMY PLATED TIN|14|456 +Brand#35|ECONOMY POLISHED TIN|49|456 +Brand#35|LARGE ANODIZED COPPER|23|456 +Brand#35|LARGE BRUSHED BRASS|3|456 +Brand#35|LARGE BRUSHED NICKEL|3|456 +Brand#35|LARGE BRUSHED TIN|49|456 +Brand#35|MEDIUM ANODIZED STEEL|36|456 +Brand#35|MEDIUM BURNISHED COPPER|23|456 +Brand#35|PROMO ANODIZED COPPER|19|456 +Brand#35|PROMO BRUSHED TIN|23|456 +Brand#35|PROMO BURNISHED BRASS|9|456 +Brand#35|PROMO BURNISHED STEEL|14|456 +Brand#35|PROMO BURNISHED STEEL|19|456 +Brand#35|PROMO BURNISHED TIN|19|456 +Brand#35|PROMO PLATED STEEL|36|456 +Brand#35|PROMO POLISHED COPPER|49|456 +Brand#35|SMALL BRUSHED COPPER|36|456 +Brand#35|SMALL BRUSHED NICKEL|9|456 +Brand#35|SMALL BRUSHED TIN|45|456 +Brand#35|SMALL BURNISHED NICKEL|23|456 +Brand#35|SMALL POLISHED NICKEL|19|456 +Brand#35|SMALL POLISHED STEEL|9|456 +Brand#35|STANDARD BRUSHED NICKEL|3|456 +Brand#41|ECONOMY BRUSHED STEEL|36|456 +Brand#41|ECONOMY BRUSHED TIN|14|456 +Brand#41|ECONOMY BURNISHED STEEL|23|456 +Brand#41|ECONOMY PLATED STEEL|14|456 +Brand#41|ECONOMY PLATED STEEL|49|456 +Brand#41|LARGE ANODIZED STEEL|45|456 +Brand#41|LARGE BRUSHED COPPER|36|456 +Brand#41|LARGE BRUSHED STEEL|14|456 +Brand#41|LARGE BURNISHED NICKEL|36|456 +Brand#41|LARGE PLATED TIN|45|456 +Brand#41|LARGE POLISHED NICKEL|14|456 +Brand#41|MEDIUM BRUSHED NICKEL|45|456 +Brand#41|MEDIUM BURNISHED BRASS|45|456 +Brand#41|MEDIUM PLATED COPPER|19|456 +Brand#41|MEDIUM PLATED STEEL|23|456 +Brand#41|PROMO BRUSHED COPPER|36|456 +Brand#41|PROMO BURNISHED NICKEL|36|456 +Brand#41|PROMO PLATED STEEL|23|456 +Brand#41|SMALL ANODIZED NICKEL|14|456 +Brand#41|SMALL BURNISHED BRASS|14|456 +Brand#41|SMALL PLATED TIN|3|456 +Brand#41|SMALL POLISHED COPPER|3|456 +Brand#41|STANDARD BRUSHED COPPER|9|456 +Brand#41|STANDARD BRUSHED NICKEL|14|456 +Brand#41|STANDARD BRUSHED STEEL|9|456 +Brand#41|STANDARD BURNISHED NICKEL|36|456 +Brand#41|STANDARD POLISHED COPPER|3|456 +Brand#41|STANDARD POLISHED TIN|3|456 +Brand#42|ECONOMY ANODIZED COPPER|49|456 +Brand#42|ECONOMY ANODIZED NICKEL|3|456 +Brand#42|ECONOMY BRUSHED BRASS|23|456 +Brand#42|LARGE ANODIZED COPPER|45|456 +Brand#42|LARGE ANODIZED STEEL|14|456 +Brand#42|LARGE ANODIZED TIN|36|456 +Brand#42|LARGE BRUSHED BRASS|19|456 +Brand#42|LARGE BRUSHED STEEL|19|456 +Brand#42|LARGE BRUSHED TIN|14|456 +Brand#42|LARGE PLATED COPPER|49|456 +Brand#42|LARGE POLISHED COPPER|19|456 +Brand#42|MEDIUM BRUSHED STEEL|19|456 +Brand#42|MEDIUM BURNISHED COPPER|45|456 +Brand#42|PROMO BRUSHED NICKEL|19|456 +Brand#42|PROMO POLISHED BRASS|19|456 +Brand#42|SMALL ANODIZED BRASS|36|456 +Brand#42|SMALL ANODIZED STEEL|36|456 +Brand#42|SMALL BRUSHED TIN|49|456 +Brand#42|SMALL BURNISHED STEEL|3|456 +Brand#42|SMALL PLATED NICKEL|19|456 +Brand#42|STANDARD ANODIZED STEEL|14|456 +Brand#42|STANDARD BRUSHED NICKEL|19|456 +Brand#42|STANDARD BURNISHED STEEL|23|456 +Brand#42|STANDARD PLATED TIN|49|456 +Brand#42|STANDARD POLISHED BRASS|19|456 +Brand#42|STANDARD POLISHED BRASS|49|456 +Brand#43|ECONOMY BURNISHED BRASS|3|456 +Brand#43|ECONOMY BURNISHED STEEL|49|456 +Brand#43|ECONOMY POLISHED TIN|49|456 +Brand#43|LARGE ANODIZED TIN|45|456 +Brand#43|LARGE BRUSHED TIN|49|456 +Brand#43|LARGE PLATED BRASS|3|456 +Brand#43|LARGE POLISHED BRASS|45|456 +Brand#43|LARGE POLISHED COPPER|14|456 +Brand#43|LARGE POLISHED NICKEL|19|456 +Brand#43|LARGE POLISHED TIN|36|456 +Brand#43|MEDIUM ANODIZED BRASS|23|456 +Brand#43|MEDIUM ANODIZED NICKEL|23|456 +Brand#43|MEDIUM BRUSHED NICKEL|19|456 +Brand#43|MEDIUM PLATED BRASS|3|456 +Brand#43|MEDIUM PLATED BRASS|23|456 +Brand#43|PROMO ANODIZED NICKEL|49|456 +Brand#43|PROMO ANODIZED TIN|19|456 +Brand#43|PROMO BRUSHED STEEL|14|456 +Brand#43|PROMO BURNISHED BRASS|36|456 +Brand#43|PROMO PLATED BRASS|36|456 +Brand#43|PROMO PLATED TIN|36|456 +Brand#43|SMALL ANODIZED TIN|45|456 +Brand#43|SMALL BRUSHED TIN|23|456 +Brand#43|SMALL PLATED BRASS|49|456 +Brand#43|SMALL POLISHED TIN|14|456 +Brand#43|STANDARD BRUSHED NICKEL|19|456 +Brand#43|STANDARD BRUSHED STEEL|9|456 +Brand#43|STANDARD BRUSHED TIN|19|456 +Brand#43|STANDARD BURNISHED TIN|19|456 +Brand#43|STANDARD POLISHED TIN|23|456 +Brand#44|ECONOMY BRUSHED BRASS|19|456 +Brand#44|ECONOMY BRUSHED COPPER|23|456 +Brand#44|ECONOMY PLATED COPPER|23|456 +Brand#44|LARGE ANODIZED STEEL|36|456 +Brand#44|LARGE BRUSHED COPPER|19|456 +Brand#44|LARGE BURNISHED COPPER|9|456 +Brand#44|LARGE BURNISHED STEEL|23|456 +Brand#44|LARGE PLATED BRASS|9|456 +Brand#44|MEDIUM BRUSHED COPPER|19|456 +Brand#44|MEDIUM BRUSHED NICKEL|14|456 +Brand#44|MEDIUM BURNISHED BRASS|19|456 +Brand#44|MEDIUM BURNISHED COPPER|3|456 +Brand#44|MEDIUM BURNISHED COPPER|14|456 +Brand#44|MEDIUM PLATED NICKEL|3|456 +Brand#44|MEDIUM PLATED TIN|36|456 +Brand#44|PROMO BRUSHED NICKEL|49|456 +Brand#44|PROMO PLATED COPPER|36|456 +Brand#44|PROMO PLATED NICKEL|19|456 +Brand#44|PROMO POLISHED BRASS|23|456 +Brand#44|PROMO POLISHED NICKEL|45|456 +Brand#44|SMALL BURNISHED TIN|45|456 +Brand#44|SMALL POLISHED BRASS|49|456 +Brand#44|STANDARD ANODIZED COPPER|14|456 +Brand#44|STANDARD ANODIZED NICKEL|45|456 +Brand#44|STANDARD BURNISHED COPPER|36|456 +Brand#44|STANDARD BURNISHED NICKEL|49|456 +Brand#51|ECONOMY ANODIZED COPPER|49|456 +Brand#51|ECONOMY BRUSHED BRASS|9|456 +Brand#51|ECONOMY BURNISHED STEEL|36|456 +Brand#51|ECONOMY POLISHED BRASS|14|456 +Brand#51|ECONOMY POLISHED COPPER|49|456 +Brand#51|ECONOMY POLISHED STEEL|36|456 +Brand#51|LARGE ANODIZED BRASS|14|456 +Brand#51|LARGE BRUSHED COPPER|36|456 +Brand#51|LARGE BURNISHED COPPER|36|456 +Brand#51|LARGE BURNISHED NICKEL|3|456 +Brand#51|LARGE PLATED BRASS|49|456 +Brand#51|LARGE PLATED TIN|49|456 +Brand#51|MEDIUM ANODIZED NICKEL|36|456 +Brand#51|MEDIUM BRUSHED NICKEL|36|456 +Brand#51|MEDIUM PLATED BRASS|3|456 +Brand#51|PROMO BURNISHED TIN|14|456 +Brand#51|PROMO POLISHED STEEL|49|456 +Brand#51|SMALL BRUSHED NICKEL|19|456 +Brand#51|SMALL BRUSHED TIN|14|456 +Brand#51|SMALL BURNISHED BRASS|23|456 +Brand#51|SMALL BURNISHED NICKEL|9|456 +Brand#51|SMALL POLISHED STEEL|45|456 +Brand#51|STANDARD ANODIZED NICKEL|9|456 +Brand#51|STANDARD BRUSHED STEEL|36|456 +Brand#51|STANDARD BURNISHED COPPER|36|456 +Brand#51|STANDARD BURNISHED STEEL|36|456 +Brand#51|STANDARD BURNISHED TIN|49|456 +Brand#51|STANDARD POLISHED BRASS|3|456 +Brand#51|STANDARD POLISHED COPPER|9|456 +Brand#52|ECONOMY BRUSHED BRASS|49|456 +Brand#52|ECONOMY BURNISHED BRASS|45|456 +Brand#52|ECONOMY BURNISHED COPPER|14|456 +Brand#52|ECONOMY BURNISHED COPPER|49|456 +Brand#52|ECONOMY PLATED NICKEL|14|456 +Brand#52|ECONOMY PLATED NICKEL|19|456 +Brand#52|ECONOMY POLISHED BRASS|9|456 +Brand#52|LARGE BRUSHED NICKEL|36|456 +Brand#52|LARGE BRUSHED NICKEL|45|456 +Brand#52|LARGE BURNISHED BRASS|36|456 +Brand#52|LARGE PLATED BRASS|45|456 +Brand#52|LARGE PLATED NICKEL|3|456 +Brand#52|LARGE POLISHED TIN|3|456 +Brand#52|MEDIUM ANODIZED COPPER|3|456 +Brand#52|MEDIUM ANODIZED TIN|45|456 +Brand#52|MEDIUM BURNISHED STEEL|9|456 +Brand#52|PROMO BURNISHED NICKEL|14|456 +Brand#52|PROMO PLATED BRASS|45|456 +Brand#52|PROMO PLATED COPPER|14|456 +Brand#52|PROMO POLISHED COPPER|36|456 +Brand#52|SMALL ANODIZED BRASS|14|456 +Brand#52|SMALL ANODIZED NICKEL|49|456 +Brand#52|SMALL ANODIZED TIN|23|456 +Brand#52|SMALL BURNISHED STEEL|23|456 +Brand#52|STANDARD ANODIZED STEEL|14|456 +Brand#52|STANDARD ANODIZED TIN|9|456 +Brand#52|STANDARD BRUSHED BRASS|45|456 +Brand#52|STANDARD BURNISHED NICKEL|36|456 +Brand#52|STANDARD BURNISHED TIN|19|456 +Brand#52|STANDARD PLATED COPPER|45|456 +Brand#53|ECONOMY BRUSHED BRASS|19|456 +Brand#53|ECONOMY BRUSHED STEEL|14|456 +Brand#53|ECONOMY BURNISHED NICKEL|49|456 +Brand#53|LARGE ANODIZED COPPER|36|456 +Brand#53|LARGE BURNISHED BRASS|45|456 +Brand#53|LARGE PLATED NICKEL|14|456 +Brand#53|LARGE PLATED TIN|14|456 +Brand#53|LARGE POLISHED STEEL|23|456 +Brand#53|MEDIUM ANODIZED BRASS|36|456 +Brand#53|MEDIUM ANODIZED STEEL|3|456 +Brand#53|MEDIUM BURNISHED COPPER|9|456 +Brand#53|MEDIUM BURNISHED NICKEL|14|456 +Brand#53|MEDIUM PLATED BRASS|23|456 +Brand#53|MEDIUM PLATED STEEL|3|456 +Brand#53|MEDIUM PLATED STEEL|36|456 +Brand#53|MEDIUM PLATED TIN|9|456 +Brand#53|PROMO BURNISHED COPPER|3|456 +Brand#53|PROMO POLISHED COPPER|19|456 +Brand#53|SMALL ANODIZED BRASS|36|456 +Brand#53|SMALL ANODIZED NICKEL|36|456 +Brand#53|SMALL BRUSHED COPPER|9|456 +Brand#53|SMALL BRUSHED COPPER|14|456 +Brand#53|STANDARD ANODIZED BRASS|45|456 +Brand#53|STANDARD ANODIZED TIN|45|456 +Brand#53|STANDARD BURNISHED COPPER|19|456 +Brand#53|STANDARD PLATED STEEL|14|456 +Brand#53|STANDARD POLISHED COPPER|23|456 +Brand#54|ECONOMY ANODIZED BRASS|3|456 +Brand#54|ECONOMY ANODIZED COPPER|36|456 +Brand#54|ECONOMY BRUSHED BRASS|36|456 +Brand#54|ECONOMY BRUSHED COPPER|19|456 +Brand#54|ECONOMY BRUSHED TIN|9|456 +Brand#54|ECONOMY PLATED COPPER|45|456 +Brand#54|ECONOMY POLISHED STEEL|49|456 +Brand#54|ECONOMY POLISHED TIN|23|456 +Brand#54|LARGE ANODIZED BRASS|36|456 +Brand#54|LARGE BURNISHED COPPER|45|456 +Brand#54|LARGE BURNISHED STEEL|49|456 +Brand#54|LARGE POLISHED BRASS|23|456 +Brand#54|MEDIUM BURNISHED TIN|45|456 +Brand#54|MEDIUM PLATED STEEL|23|456 +Brand#54|PROMO BURNISHED NICKEL|23|456 +Brand#54|PROMO POLISHED BRASS|9|456 +Brand#54|PROMO POLISHED COPPER|9|456 +Brand#54|PROMO POLISHED COPPER|19|456 +Brand#54|PROMO POLISHED STEEL|36|456 +Brand#54|SMALL ANODIZED COPPER|9|456 +Brand#54|SMALL ANODIZED STEEL|9|456 +Brand#54|SMALL BRUSHED TIN|3|456 +Brand#54|SMALL BURNISHED NICKEL|23|456 +Brand#54|SMALL BURNISHED STEEL|49|456 +Brand#54|SMALL PLATED NICKEL|3|456 +Brand#54|SMALL PLATED STEEL|19|456 +Brand#54|STANDARD ANODIZED TIN|14|456 +Brand#54|STANDARD ANODIZED TIN|23|456 +Brand#54|STANDARD BRUSHED STEEL|19|456 +Brand#54|STANDARD BURNISHED BRASS|49|456 +Brand#54|STANDARD BURNISHED NICKEL|3|456 +Brand#54|STANDARD POLISHED COPPER|45|456 +Brand#54|STANDARD POLISHED TIN|36|456 +Brand#55|ECONOMY BRUSHED COPPER|45|456 +Brand#55|ECONOMY PLATED STEEL|14|456 +Brand#55|LARGE ANODIZED BRASS|49|456 +Brand#55|LARGE BRUSHED STEEL|36|456 +Brand#55|MEDIUM ANODIZED NICKEL|9|456 +Brand#55|PROMO BRUSHED STEEL|49|456 +Brand#55|PROMO PLATED STEEL|9|456 +Brand#55|PROMO PLATED TIN|45|456 +Brand#55|SMALL ANODIZED TIN|49|456 +Brand#55|SMALL BRUSHED TIN|49|456 +Brand#55|SMALL BURNISHED TIN|49|456 +Brand#55|SMALL PLATED COPPER|9|456 +Brand#55|SMALL POLISHED BRASS|49|456 +Brand#55|SMALL POLISHED COPPER|9|456 +Brand#55|STANDARD ANODIZED TIN|3|456 +Brand#55|STANDARD BRUSHED BRASS|9|456 +Brand#55|STANDARD BURNISHED BRASS|9|456 +Brand#55|STANDARD PLATED COPPER|23|456 +Brand#55|STANDARD PLATED STEEL|45|456 +Brand#55|STANDARD POLISHED BRASS|19|456 +Brand#11|ECONOMY BRUSHED BRASS|49|455 +Brand#11|PROMO POLISHED STEEL|9|455 +Brand#11|SMALL BRUSHED STEEL|9|455 +Brand#11|SMALL BURNISHED BRASS|9|455 +Brand#11|SMALL BURNISHED STEEL|19|455 +Brand#11|SMALL PLATED COPPER|3|455 +Brand#11|STANDARD BURNISHED STEEL|49|455 +Brand#12|ECONOMY BRUSHED STEEL|3|455 +Brand#12|LARGE BURNISHED TIN|14|455 +Brand#12|PROMO ANODIZED STEEL|14|455 +Brand#12|SMALL POLISHED BRASS|9|455 +Brand#12|STANDARD BURNISHED NICKEL|49|455 +Brand#12|STANDARD BURNISHED STEEL|3|455 +Brand#13|LARGE POLISHED TIN|23|455 +Brand#13|SMALL BURNISHED TIN|45|455 +Brand#13|STANDARD ANODIZED NICKEL|45|455 +Brand#13|STANDARD BRUSHED STEEL|9|455 +Brand#14|LARGE ANODIZED TIN|36|455 +Brand#14|MEDIUM BURNISHED STEEL|14|455 +Brand#14|SMALL POLISHED NICKEL|3|455 +Brand#14|STANDARD PLATED BRASS|3|455 +Brand#14|STANDARD PLATED BRASS|9|455 +Brand#15|LARGE BRUSHED TIN|9|455 +Brand#15|LARGE POLISHED TIN|14|455 +Brand#15|MEDIUM BRUSHED COPPER|9|455 +Brand#15|PROMO POLISHED STEEL|36|455 +Brand#15|STANDARD BURNISHED TIN|23|455 +Brand#21|ECONOMY BRUSHED TIN|14|455 +Brand#21|ECONOMY PLATED COPPER|9|455 +Brand#21|LARGE ANODIZED BRASS|19|455 +Brand#21|LARGE ANODIZED BRASS|49|455 +Brand#21|LARGE POLISHED BRASS|3|455 +Brand#21|LARGE POLISHED STEEL|14|455 +Brand#21|MEDIUM ANODIZED COPPER|3|455 +Brand#21|PROMO ANODIZED STEEL|3|455 +Brand#21|SMALL PLATED COPPER|36|455 +Brand#21|SMALL POLISHED COPPER|36|455 +Brand#21|STANDARD PLATED TIN|14|455 +Brand#22|ECONOMY ANODIZED COPPER|3|455 +Brand#22|ECONOMY PLATED COPPER|23|455 +Brand#22|LARGE BURNISHED BRASS|23|455 +Brand#22|LARGE PLATED TIN|9|455 +Brand#22|MEDIUM ANODIZED NICKEL|36|455 +Brand#23|ECONOMY BRUSHED TIN|45|455 +Brand#23|ECONOMY PLATED NICKEL|49|455 +Brand#23|LARGE BRUSHED NICKEL|45|455 +Brand#23|MEDIUM ANODIZED NICKEL|49|455 +Brand#23|MEDIUM PLATED NICKEL|45|455 +Brand#23|PROMO BURNISHED COPPER|45|455 +Brand#23|PROMO POLISHED COPPER|23|455 +Brand#23|PROMO POLISHED COPPER|45|455 +Brand#23|SMALL ANODIZED COPPER|9|455 +Brand#23|STANDARD BURNISHED STEEL|45|455 +Brand#24|LARGE ANODIZED COPPER|3|455 +Brand#24|LARGE ANODIZED NICKEL|14|455 +Brand#24|LARGE ANODIZED STEEL|19|455 +Brand#24|MEDIUM PLATED BRASS|23|455 +Brand#24|PROMO ANODIZED COPPER|36|455 +Brand#24|PROMO PLATED COPPER|19|455 +Brand#24|SMALL POLISHED STEEL|36|455 +Brand#24|STANDARD BRUSHED BRASS|36|455 +Brand#24|STANDARD BURNISHED COPPER|36|455 +Brand#25|ECONOMY ANODIZED TIN|36|455 +Brand#25|LARGE BRUSHED TIN|45|455 +Brand#25|MEDIUM BURNISHED STEEL|19|455 +Brand#25|PROMO BURNISHED BRASS|36|455 +Brand#25|STANDARD POLISHED COPPER|19|455 +Brand#25|STANDARD POLISHED COPPER|49|455 +Brand#31|ECONOMY BURNISHED TIN|45|455 +Brand#31|ECONOMY POLISHED TIN|14|455 +Brand#31|MEDIUM ANODIZED STEEL|3|455 +Brand#31|SMALL BRUSHED BRASS|9|455 +Brand#31|SMALL BRUSHED COPPER|14|455 +Brand#31|SMALL BURNISHED BRASS|9|455 +Brand#31|SMALL POLISHED TIN|23|455 +Brand#32|LARGE ANODIZED NICKEL|45|455 +Brand#32|LARGE BURNISHED STEEL|3|455 +Brand#32|LARGE POLISHED NICKEL|3|455 +Brand#32|MEDIUM BURNISHED STEEL|19|455 +Brand#32|SMALL BRUSHED STEEL|9|455 +Brand#32|STANDARD BURNISHED TIN|49|455 +Brand#32|STANDARD PLATED TIN|3|455 +Brand#33|LARGE ANODIZED STEEL|49|455 +Brand#33|MEDIUM BRUSHED NICKEL|14|455 +Brand#33|MEDIUM BURNISHED COPPER|23|455 +Brand#33|PROMO POLISHED NICKEL|23|455 +Brand#33|SMALL ANODIZED COPPER|9|455 +Brand#33|SMALL BURNISHED NICKEL|45|455 +Brand#34|MEDIUM PLATED COPPER|49|455 +Brand#34|PROMO ANODIZED NICKEL|3|455 +Brand#34|PROMO BRUSHED NICKEL|3|455 +Brand#34|PROMO PLATED BRASS|9|455 +Brand#34|STANDARD ANODIZED TIN|19|455 +Brand#34|STANDARD PLATED BRASS|9|455 +Brand#34|STANDARD POLISHED NICKEL|9|455 +Brand#35|ECONOMY BURNISHED TIN|45|455 +Brand#35|LARGE BURNISHED TIN|14|455 +Brand#35|LARGE PLATED COPPER|45|455 +Brand#35|LARGE POLISHED TIN|45|455 +Brand#35|MEDIUM BRUSHED COPPER|19|455 +Brand#35|PROMO ANODIZED COPPER|36|455 +Brand#35|PROMO POLISHED NICKEL|3|455 +Brand#35|SMALL ANODIZED NICKEL|36|455 +Brand#35|SMALL POLISHED BRASS|36|455 +Brand#35|STANDARD PLATED STEEL|49|455 +Brand#41|ECONOMY POLISHED STEEL|36|455 +Brand#41|PROMO ANODIZED NICKEL|3|455 +Brand#41|PROMO BURNISHED COPPER|9|455 +Brand#41|SMALL PLATED COPPER|14|455 +Brand#42|ECONOMY BURNISHED TIN|36|455 +Brand#42|LARGE ANODIZED COPPER|23|455 +Brand#42|MEDIUM BRUSHED TIN|49|455 +Brand#42|MEDIUM PLATED BRASS|36|455 +Brand#42|MEDIUM PLATED BRASS|49|455 +Brand#42|PROMO ANODIZED TIN|19|455 +Brand#42|PROMO BRUSHED NICKEL|45|455 +Brand#42|SMALL ANODIZED STEEL|14|455 +Brand#42|SMALL BRUSHED BRASS|49|455 +Brand#42|SMALL BRUSHED STEEL|23|455 +Brand#42|SMALL BURNISHED BRASS|19|455 +Brand#42|STANDARD BURNISHED COPPER|49|455 +Brand#43|LARGE POLISHED BRASS|3|455 +Brand#43|MEDIUM ANODIZED STEEL|45|455 +Brand#43|PROMO BURNISHED COPPER|9|455 +Brand#43|SMALL ANODIZED NICKEL|14|455 +Brand#43|SMALL POLISHED BRASS|19|455 +Brand#43|STANDARD BRUSHED BRASS|9|455 +Brand#43|STANDARD BURNISHED NICKEL|36|455 +Brand#44|LARGE BURNISHED BRASS|49|455 +Brand#44|MEDIUM ANODIZED COPPER|14|455 +Brand#44|PROMO BURNISHED TIN|45|455 +Brand#44|PROMO PLATED BRASS|49|455 +Brand#44|SMALL BURNISHED BRASS|9|455 +Brand#44|SMALL BURNISHED STEEL|49|455 +Brand#44|SMALL PLATED TIN|45|455 +Brand#44|STANDARD PLATED COPPER|45|455 +Brand#44|STANDARD POLISHED BRASS|19|455 +Brand#51|ECONOMY BRUSHED NICKEL|49|455 +Brand#51|LARGE BRUSHED STEEL|23|455 +Brand#51|LARGE PLATED TIN|3|455 +Brand#51|MEDIUM ANODIZED COPPER|45|455 +Brand#51|MEDIUM BURNISHED TIN|45|455 +Brand#51|STANDARD POLISHED COPPER|49|455 +Brand#52|ECONOMY PLATED COPPER|45|455 +Brand#52|LARGE POLISHED BRASS|14|455 +Brand#52|PROMO BRUSHED STEEL|23|455 +Brand#52|PROMO POLISHED COPPER|9|455 +Brand#52|SMALL BRUSHED TIN|14|455 +Brand#52|STANDARD BRUSHED NICKEL|49|455 +Brand#52|STANDARD PLATED STEEL|9|455 +Brand#53|ECONOMY BRUSHED TIN|9|455 +Brand#53|LARGE PLATED BRASS|19|455 +Brand#53|LARGE PLATED BRASS|45|455 +Brand#53|MEDIUM ANODIZED NICKEL|9|455 +Brand#53|PROMO BRUSHED COPPER|23|455 +Brand#53|PROMO BRUSHED STEEL|23|455 +Brand#53|SMALL PLATED STEEL|3|455 +Brand#53|STANDARD PLATED NICKEL|36|455 +Brand#54|PROMO ANODIZED TIN|36|455 +Brand#54|SMALL POLISHED STEEL|23|455 +Brand#55|ECONOMY BURNISHED STEEL|14|455 +Brand#55|ECONOMY PLATED TIN|23|455 +Brand#55|PROMO ANODIZED BRASS|19|455 +Brand#55|PROMO ANODIZED STEEL|23|455 +Brand#55|SMALL BRUSHED NICKEL|19|455 +Brand#55|STANDARD POLISHED TIN|14|455 +Brand#11|MEDIUM BRUSHED TIN|9|454 +Brand#12|STANDARD PLATED STEEL|3|454 +Brand#13|PROMO BURNISHED BRASS|14|454 +Brand#13|SMALL PLATED NICKEL|23|454 +Brand#14|LARGE PLATED NICKEL|49|454 +Brand#14|STANDARD PLATED TIN|9|454 +Brand#21|STANDARD POLISHED NICKEL|45|454 +Brand#22|PROMO ANODIZED STEEL|36|454 +Brand#22|STANDARD POLISHED TIN|36|454 +Brand#23|LARGE PLATED TIN|23|454 +Brand#24|ECONOMY POLISHED BRASS|3|454 +Brand#25|LARGE BURNISHED NICKEL|49|454 +Brand#31|SMALL ANODIZED STEEL|45|454 +Brand#32|SMALL PLATED BRASS|23|454 +Brand#33|LARGE PLATED BRASS|49|454 +Brand#34|LARGE BRUSHED COPPER|45|454 +Brand#35|SMALL PLATED NICKEL|3|454 +Brand#41|PROMO PLATED COPPER|3|454 +Brand#41|SMALL BRUSHED NICKEL|14|454 +Brand#42|ECONOMY BRUSHED STEEL|23|454 +Brand#42|PROMO BURNISHED NICKEL|36|454 +Brand#42|SMALL BURNISHED TIN|36|454 +Brand#43|ECONOMY BRUSHED STEEL|14|454 +Brand#43|ECONOMY POLISHED NICKEL|36|454 +Brand#43|PROMO BRUSHED STEEL|9|454 +Brand#44|SMALL ANODIZED COPPER|9|454 +Brand#44|SMALL PLATED NICKEL|14|454 +Brand#51|LARGE BURNISHED COPPER|45|454 +Brand#51|SMALL PLATED TIN|49|454 +Brand#52|STANDARD POLISHED NICKEL|19|454 +Brand#53|ECONOMY POLISHED TIN|36|454 +Brand#54|MEDIUM PLATED NICKEL|3|454 +Brand#54|MEDIUM PLATED TIN|9|454 +Brand#55|ECONOMY BRUSHED BRASS|49|454 +Brand#11|PROMO BURNISHED NICKEL|45|453 +Brand#11|SMALL ANODIZED BRASS|36|453 +Brand#12|LARGE POLISHED NICKEL|45|453 +Brand#33|LARGE BRUSHED NICKEL|36|453 +Brand#44|LARGE POLISHED TIN|9|453 +Brand#11|ECONOMY ANODIZED BRASS|9|452 +Brand#11|ECONOMY BRUSHED STEEL|14|452 +Brand#11|ECONOMY POLISHED COPPER|3|452 +Brand#11|ECONOMY POLISHED STEEL|36|452 +Brand#11|ECONOMY POLISHED TIN|23|452 +Brand#11|LARGE ANODIZED TIN|23|452 +Brand#11|MEDIUM BRUSHED TIN|19|452 +Brand#11|MEDIUM BURNISHED TIN|3|452 +Brand#11|MEDIUM PLATED NICKEL|36|452 +Brand#11|PROMO ANODIZED BRASS|19|452 +Brand#11|PROMO BRUSHED BRASS|9|452 +Brand#11|PROMO BRUSHED BRASS|19|452 +Brand#11|PROMO BRUSHED BRASS|36|452 +Brand#11|PROMO BURNISHED STEEL|14|452 +Brand#11|PROMO POLISHED NICKEL|23|452 +Brand#11|PROMO POLISHED STEEL|36|452 +Brand#11|SMALL ANODIZED TIN|9|452 +Brand#11|SMALL BURNISHED COPPER|23|452 +Brand#11|SMALL PLATED BRASS|45|452 +Brand#11|SMALL PLATED COPPER|9|452 +Brand#11|SMALL PLATED NICKEL|23|452 +Brand#11|SMALL POLISHED BRASS|19|452 +Brand#11|SMALL POLISHED TIN|19|452 +Brand#11|STANDARD BRUSHED BRASS|45|452 +Brand#11|STANDARD BRUSHED STEEL|23|452 +Brand#11|STANDARD BURNISHED COPPER|36|452 +Brand#11|STANDARD PLATED NICKEL|3|452 +Brand#11|STANDARD POLISHED NICKEL|14|452 +Brand#12|ECONOMY ANODIZED TIN|19|452 +Brand#12|ECONOMY ANODIZED TIN|49|452 +Brand#12|ECONOMY BRUSHED NICKEL|3|452 +Brand#12|ECONOMY PLATED BRASS|9|452 +Brand#12|ECONOMY POLISHED TIN|14|452 +Brand#12|LARGE PLATED NICKEL|19|452 +Brand#12|MEDIUM ANODIZED COPPER|9|452 +Brand#12|MEDIUM BRUSHED NICKEL|14|452 +Brand#12|PROMO ANODIZED COPPER|45|452 +Brand#12|PROMO BRUSHED NICKEL|19|452 +Brand#12|PROMO PLATED TIN|9|452 +Brand#12|PROMO POLISHED TIN|9|452 +Brand#12|SMALL ANODIZED BRASS|3|452 +Brand#12|SMALL BRUSHED COPPER|49|452 +Brand#12|SMALL BURNISHED TIN|23|452 +Brand#12|SMALL PLATED BRASS|9|452 +Brand#12|SMALL PLATED COPPER|23|452 +Brand#12|SMALL POLISHED COPPER|3|452 +Brand#12|STANDARD ANODIZED NICKEL|3|452 +Brand#12|STANDARD BRUSHED STEEL|14|452 +Brand#12|STANDARD BRUSHED TIN|49|452 +Brand#12|STANDARD BURNISHED COPPER|9|452 +Brand#12|STANDARD BURNISHED STEEL|45|452 +Brand#12|STANDARD PLATED BRASS|3|452 +Brand#12|STANDARD PLATED STEEL|36|452 +Brand#12|STANDARD POLISHED NICKEL|14|452 +Brand#12|STANDARD POLISHED TIN|14|452 +Brand#13|ECONOMY BRUSHED STEEL|19|452 +Brand#13|ECONOMY POLISHED COPPER|23|452 +Brand#13|LARGE BRUSHED NICKEL|3|452 +Brand#13|LARGE BRUSHED STEEL|49|452 +Brand#13|LARGE BURNISHED COPPER|9|452 +Brand#13|LARGE PLATED STEEL|9|452 +Brand#13|MEDIUM ANODIZED BRASS|36|452 +Brand#13|MEDIUM BRUSHED STEEL|23|452 +Brand#13|MEDIUM BRUSHED STEEL|36|452 +Brand#13|PROMO ANODIZED NICKEL|14|452 +Brand#13|PROMO BURNISHED BRASS|3|452 +Brand#13|PROMO BURNISHED NICKEL|14|452 +Brand#13|PROMO BURNISHED NICKEL|23|452 +Brand#13|SMALL BURNISHED STEEL|3|452 +Brand#13|SMALL POLISHED NICKEL|14|452 +Brand#13|STANDARD ANODIZED STEEL|45|452 +Brand#13|STANDARD BRUSHED BRASS|19|452 +Brand#13|STANDARD POLISHED BRASS|23|452 +Brand#14|ECONOMY ANODIZED NICKEL|9|452 +Brand#14|ECONOMY BRUSHED BRASS|49|452 +Brand#14|ECONOMY BURNISHED BRASS|23|452 +Brand#14|ECONOMY BURNISHED TIN|19|452 +Brand#14|ECONOMY BURNISHED TIN|49|452 +Brand#14|ECONOMY POLISHED COPPER|36|452 +Brand#14|LARGE ANODIZED BRASS|49|452 +Brand#14|LARGE ANODIZED COPPER|19|452 +Brand#14|LARGE BRUSHED BRASS|36|452 +Brand#14|LARGE PLATED COPPER|14|452 +Brand#14|LARGE PLATED NICKEL|9|452 +Brand#14|LARGE PLATED STEEL|9|452 +Brand#14|MEDIUM ANODIZED COPPER|23|452 +Brand#14|MEDIUM ANODIZED NICKEL|19|452 +Brand#14|MEDIUM BURNISHED BRASS|23|452 +Brand#14|MEDIUM BURNISHED TIN|23|452 +Brand#14|MEDIUM PLATED BRASS|14|452 +Brand#14|PROMO ANODIZED TIN|9|452 +Brand#14|PROMO BURNISHED BRASS|3|452 +Brand#14|PROMO POLISHED TIN|14|452 +Brand#14|SMALL ANODIZED BRASS|14|452 +Brand#14|SMALL BRUSHED TIN|19|452 +Brand#14|SMALL BURNISHED BRASS|23|452 +Brand#14|SMALL BURNISHED NICKEL|45|452 +Brand#14|SMALL BURNISHED TIN|19|452 +Brand#14|SMALL POLISHED TIN|45|452 +Brand#14|STANDARD ANODIZED COPPER|23|452 +Brand#14|STANDARD BRUSHED NICKEL|19|452 +Brand#14|STANDARD BRUSHED STEEL|49|452 +Brand#14|STANDARD PLATED BRASS|36|452 +Brand#14|STANDARD PLATED COPPER|14|452 +Brand#14|STANDARD POLISHED BRASS|14|452 +Brand#14|STANDARD POLISHED BRASS|45|452 +Brand#14|STANDARD POLISHED STEEL|49|452 +Brand#15|ECONOMY ANODIZED COPPER|19|452 +Brand#15|ECONOMY BRUSHED STEEL|19|452 +Brand#15|ECONOMY BRUSHED TIN|19|452 +Brand#15|ECONOMY PLATED COPPER|49|452 +Brand#15|ECONOMY PLATED STEEL|45|452 +Brand#15|LARGE ANODIZED BRASS|9|452 +Brand#15|LARGE BURNISHED NICKEL|19|452 +Brand#15|LARGE BURNISHED STEEL|3|452 +Brand#15|LARGE POLISHED COPPER|45|452 +Brand#15|PROMO ANODIZED BRASS|45|452 +Brand#15|PROMO ANODIZED COPPER|23|452 +Brand#15|PROMO ANODIZED STEEL|23|452 +Brand#15|PROMO ANODIZED TIN|3|452 +Brand#15|PROMO BURNISHED COPPER|49|452 +Brand#15|PROMO BURNISHED NICKEL|3|452 +Brand#15|PROMO POLISHED BRASS|9|452 +Brand#15|SMALL ANODIZED BRASS|19|452 +Brand#15|SMALL ANODIZED TIN|19|452 +Brand#15|SMALL BRUSHED COPPER|3|452 +Brand#15|SMALL BRUSHED COPPER|45|452 +Brand#15|SMALL BURNISHED BRASS|45|452 +Brand#15|SMALL BURNISHED COPPER|19|452 +Brand#15|STANDARD ANODIZED STEEL|9|452 +Brand#15|STANDARD BURNISHED STEEL|23|452 +Brand#15|STANDARD PLATED NICKEL|23|452 +Brand#15|STANDARD PLATED NICKEL|36|452 +Brand#15|STANDARD POLISHED COPPER|49|452 +Brand#21|ECONOMY BRUSHED NICKEL|14|452 +Brand#21|ECONOMY BURNISHED COPPER|45|452 +Brand#21|ECONOMY BURNISHED NICKEL|45|452 +Brand#21|ECONOMY PLATED NICKEL|3|452 +Brand#21|ECONOMY PLATED STEEL|3|452 +Brand#21|ECONOMY POLISHED STEEL|19|452 +Brand#21|ECONOMY POLISHED TIN|49|452 +Brand#21|LARGE ANODIZED NICKEL|45|452 +Brand#21|LARGE BURNISHED BRASS|45|452 +Brand#21|LARGE PLATED BRASS|36|452 +Brand#21|LARGE PLATED STEEL|45|452 +Brand#21|MEDIUM ANODIZED BRASS|3|452 +Brand#21|MEDIUM ANODIZED BRASS|9|452 +Brand#21|MEDIUM BRUSHED BRASS|23|452 +Brand#21|MEDIUM BRUSHED TIN|9|452 +Brand#21|PROMO POLISHED BRASS|14|452 +Brand#21|PROMO POLISHED BRASS|49|452 +Brand#21|SMALL BURNISHED TIN|19|452 +Brand#21|SMALL PLATED TIN|14|452 +Brand#21|SMALL POLISHED TIN|23|452 +Brand#21|STANDARD ANODIZED STEEL|3|452 +Brand#21|STANDARD BRUSHED BRASS|14|452 +Brand#21|STANDARD BURNISHED COPPER|3|452 +Brand#21|STANDARD BURNISHED COPPER|36|452 +Brand#21|STANDARD PLATED COPPER|23|452 +Brand#22|ECONOMY BRUSHED COPPER|19|452 +Brand#22|LARGE ANODIZED NICKEL|36|452 +Brand#22|LARGE BRUSHED COPPER|14|452 +Brand#22|LARGE BRUSHED STEEL|45|452 +Brand#22|LARGE PLATED NICKEL|14|452 +Brand#22|LARGE POLISHED COPPER|23|452 +Brand#22|MEDIUM BURNISHED COPPER|14|452 +Brand#22|MEDIUM BURNISHED TIN|36|452 +Brand#22|PROMO BRUSHED BRASS|9|452 +Brand#22|PROMO PLATED TIN|45|452 +Brand#22|PROMO POLISHED STEEL|9|452 +Brand#22|SMALL BURNISHED BRASS|49|452 +Brand#22|SMALL PLATED COPPER|14|452 +Brand#22|SMALL PLATED NICKEL|19|452 +Brand#22|SMALL POLISHED COPPER|9|452 +Brand#22|STANDARD ANODIZED NICKEL|45|452 +Brand#22|STANDARD ANODIZED TIN|3|452 +Brand#22|STANDARD BRUSHED COPPER|23|452 +Brand#22|STANDARD BRUSHED NICKEL|23|452 +Brand#22|STANDARD BRUSHED TIN|14|452 +Brand#22|STANDARD BURNISHED BRASS|23|452 +Brand#22|STANDARD POLISHED BRASS|23|452 +Brand#23|ECONOMY ANODIZED TIN|9|452 +Brand#23|ECONOMY BRUSHED BRASS|45|452 +Brand#23|ECONOMY PLATED TIN|49|452 +Brand#23|ECONOMY POLISHED NICKEL|23|452 +Brand#23|ECONOMY POLISHED STEEL|49|452 +Brand#23|LARGE POLISHED TIN|3|452 +Brand#23|MEDIUM ANODIZED STEEL|9|452 +Brand#23|MEDIUM BURNISHED BRASS|45|452 +Brand#23|MEDIUM PLATED NICKEL|23|452 +Brand#23|PROMO BURNISHED TIN|9|452 +Brand#23|PROMO PLATED NICKEL|3|452 +Brand#23|PROMO PLATED NICKEL|14|452 +Brand#23|PROMO PLATED NICKEL|36|452 +Brand#23|PROMO PLATED STEEL|9|452 +Brand#23|SMALL ANODIZED BRASS|49|452 +Brand#23|SMALL BRUSHED NICKEL|19|452 +Brand#23|SMALL BRUSHED STEEL|14|452 +Brand#23|SMALL POLISHED TIN|23|452 +Brand#23|SMALL POLISHED TIN|36|452 +Brand#23|STANDARD PLATED STEEL|23|452 +Brand#23|STANDARD POLISHED BRASS|3|452 +Brand#23|STANDARD POLISHED COPPER|14|452 +Brand#23|STANDARD POLISHED COPPER|45|452 +Brand#23|STANDARD POLISHED COPPER|49|452 +Brand#24|ECONOMY BRUSHED NICKEL|19|452 +Brand#24|ECONOMY BURNISHED BRASS|9|452 +Brand#24|ECONOMY BURNISHED NICKEL|9|452 +Brand#24|ECONOMY BURNISHED NICKEL|19|452 +Brand#24|ECONOMY PLATED BRASS|3|452 +Brand#24|ECONOMY PLATED NICKEL|23|452 +Brand#24|ECONOMY POLISHED BRASS|36|452 +Brand#24|LARGE ANODIZED BRASS|9|452 +Brand#24|LARGE ANODIZED COPPER|19|452 +Brand#24|LARGE ANODIZED COPPER|49|452 +Brand#24|LARGE ANODIZED STEEL|23|452 +Brand#24|LARGE BRUSHED COPPER|23|452 +Brand#24|LARGE BRUSHED COPPER|36|452 +Brand#24|LARGE BRUSHED TIN|19|452 +Brand#24|LARGE BURNISHED BRASS|9|452 +Brand#24|MEDIUM ANODIZED BRASS|49|452 +Brand#24|MEDIUM BURNISHED STEEL|9|452 +Brand#24|PROMO ANODIZED NICKEL|45|452 +Brand#24|PROMO BRUSHED TIN|9|452 +Brand#24|PROMO BURNISHED BRASS|9|452 +Brand#24|PROMO BURNISHED STEEL|49|452 +Brand#24|PROMO POLISHED BRASS|45|452 +Brand#24|PROMO POLISHED NICKEL|36|452 +Brand#24|SMALL BURNISHED NICKEL|9|452 +Brand#24|SMALL PLATED BRASS|45|452 +Brand#24|SMALL POLISHED STEEL|19|452 +Brand#24|SMALL POLISHED TIN|9|452 +Brand#24|STANDARD ANODIZED NICKEL|36|452 +Brand#24|STANDARD BRUSHED NICKEL|45|452 +Brand#24|STANDARD PLATED COPPER|3|452 +Brand#24|STANDARD PLATED TIN|45|452 +Brand#24|STANDARD POLISHED BRASS|14|452 +Brand#24|STANDARD POLISHED NICKEL|45|452 +Brand#25|ECONOMY ANODIZED STEEL|14|452 +Brand#25|ECONOMY BRUSHED COPPER|45|452 +Brand#25|ECONOMY BURNISHED NICKEL|3|452 +Brand#25|ECONOMY BURNISHED NICKEL|19|452 +Brand#25|ECONOMY PLATED COPPER|49|452 +Brand#25|ECONOMY PLATED STEEL|9|452 +Brand#25|ECONOMY PLATED STEEL|36|452 +Brand#25|ECONOMY POLISHED COPPER|23|452 +Brand#25|ECONOMY POLISHED STEEL|19|452 +Brand#25|LARGE ANODIZED BRASS|14|452 +Brand#25|LARGE ANODIZED STEEL|9|452 +Brand#25|LARGE PLATED BRASS|45|452 +Brand#25|LARGE PLATED TIN|36|452 +Brand#25|LARGE PLATED TIN|45|452 +Brand#25|LARGE POLISHED COPPER|19|452 +Brand#25|MEDIUM ANODIZED COPPER|9|452 +Brand#25|MEDIUM ANODIZED NICKEL|14|452 +Brand#25|PROMO ANODIZED COPPER|45|452 +Brand#25|PROMO ANODIZED COPPER|49|452 +Brand#25|PROMO BRUSHED COPPER|3|452 +Brand#25|PROMO PLATED BRASS|19|452 +Brand#25|PROMO PLATED COPPER|36|452 +Brand#25|PROMO PLATED NICKEL|14|452 +Brand#25|SMALL ANODIZED NICKEL|45|452 +Brand#25|SMALL ANODIZED STEEL|9|452 +Brand#25|SMALL ANODIZED TIN|9|452 +Brand#25|SMALL BRUSHED NICKEL|45|452 +Brand#25|SMALL BURNISHED COPPER|3|452 +Brand#25|SMALL PLATED NICKEL|14|452 +Brand#25|SMALL PLATED NICKEL|45|452 +Brand#25|SMALL POLISHED STEEL|45|452 +Brand#25|STANDARD BURNISHED BRASS|9|452 +Brand#25|STANDARD BURNISHED COPPER|23|452 +Brand#25|STANDARD PLATED TIN|3|452 +Brand#25|STANDARD POLISHED BRASS|19|452 +Brand#31|ECONOMY ANODIZED TIN|23|452 +Brand#31|ECONOMY BRUSHED BRASS|3|452 +Brand#31|ECONOMY BRUSHED BRASS|23|452 +Brand#31|ECONOMY BRUSHED NICKEL|23|452 +Brand#31|ECONOMY BURNISHED BRASS|19|452 +Brand#31|ECONOMY BURNISHED STEEL|49|452 +Brand#31|ECONOMY POLISHED BRASS|9|452 +Brand#31|LARGE BURNISHED COPPER|19|452 +Brand#31|LARGE PLATED STEEL|49|452 +Brand#31|MEDIUM ANODIZED TIN|45|452 +Brand#31|MEDIUM BRUSHED NICKEL|14|452 +Brand#31|MEDIUM BURNISHED NICKEL|23|452 +Brand#31|PROMO ANODIZED NICKEL|45|452 +Brand#31|PROMO ANODIZED TIN|23|452 +Brand#31|PROMO BURNISHED COPPER|49|452 +Brand#31|SMALL BURNISHED TIN|36|452 +Brand#31|SMALL POLISHED STEEL|23|452 +Brand#31|STANDARD ANODIZED COPPER|9|452 +Brand#31|STANDARD BRUSHED STEEL|36|452 +Brand#31|STANDARD BRUSHED TIN|9|452 +Brand#31|STANDARD PLATED BRASS|36|452 +Brand#31|STANDARD POLISHED TIN|23|452 +Brand#32|ECONOMY ANODIZED TIN|49|452 +Brand#32|ECONOMY BRUSHED STEEL|19|452 +Brand#32|ECONOMY BRUSHED STEEL|23|452 +Brand#32|ECONOMY BRUSHED TIN|36|452 +Brand#32|ECONOMY BURNISHED STEEL|19|452 +Brand#32|ECONOMY PLATED BRASS|14|452 +Brand#32|LARGE ANODIZED COPPER|45|452 +Brand#32|LARGE BRUSHED COPPER|14|452 +Brand#32|LARGE POLISHED BRASS|3|452 +Brand#32|LARGE POLISHED TIN|45|452 +Brand#32|MEDIUM PLATED NICKEL|36|452 +Brand#32|MEDIUM PLATED TIN|49|452 +Brand#32|PROMO ANODIZED TIN|49|452 +Brand#32|PROMO BURNISHED COPPER|9|452 +Brand#32|PROMO BURNISHED STEEL|9|452 +Brand#32|PROMO PLATED BRASS|9|452 +Brand#32|PROMO PLATED STEEL|45|452 +Brand#32|PROMO POLISHED COPPER|49|452 +Brand#32|PROMO POLISHED NICKEL|9|452 +Brand#32|PROMO POLISHED STEEL|49|452 +Brand#32|PROMO POLISHED TIN|49|452 +Brand#32|SMALL ANODIZED COPPER|49|452 +Brand#32|SMALL ANODIZED STEEL|19|452 +Brand#32|SMALL BRUSHED TIN|14|452 +Brand#32|SMALL BURNISHED NICKEL|3|452 +Brand#32|SMALL PLATED STEEL|19|452 +Brand#32|STANDARD ANODIZED BRASS|23|452 +Brand#33|ECONOMY BRUSHED COPPER|45|452 +Brand#33|LARGE ANODIZED BRASS|9|452 +Brand#33|LARGE BRUSHED NICKEL|19|452 +Brand#33|LARGE BURNISHED TIN|49|452 +Brand#33|MEDIUM ANODIZED BRASS|14|452 +Brand#33|MEDIUM BRUSHED BRASS|23|452 +Brand#33|MEDIUM BRUSHED STEEL|9|452 +Brand#33|MEDIUM BRUSHED TIN|19|452 +Brand#33|MEDIUM BURNISHED BRASS|19|452 +Brand#33|MEDIUM BURNISHED COPPER|19|452 +Brand#33|MEDIUM BURNISHED NICKEL|49|452 +Brand#33|PROMO ANODIZED COPPER|14|452 +Brand#33|PROMO ANODIZED TIN|45|452 +Brand#33|PROMO POLISHED COPPER|49|452 +Brand#33|PROMO POLISHED NICKEL|45|452 +Brand#33|SMALL ANODIZED NICKEL|23|452 +Brand#33|SMALL BRUSHED COPPER|23|452 +Brand#33|SMALL BRUSHED TIN|3|452 +Brand#33|SMALL BURNISHED COPPER|14|452 +Brand#33|SMALL PLATED TIN|49|452 +Brand#33|SMALL POLISHED TIN|45|452 +Brand#33|STANDARD BRUSHED BRASS|23|452 +Brand#33|STANDARD BRUSHED NICKEL|23|452 +Brand#33|STANDARD BURNISHED BRASS|9|452 +Brand#33|STANDARD BURNISHED BRASS|19|452 +Brand#33|STANDARD BURNISHED COPPER|14|452 +Brand#34|ECONOMY ANODIZED NICKEL|14|452 +Brand#34|ECONOMY BRUSHED NICKEL|3|452 +Brand#34|ECONOMY BRUSHED STEEL|9|452 +Brand#34|ECONOMY PLATED TIN|45|452 +Brand#34|LARGE ANODIZED BRASS|3|452 +Brand#34|LARGE ANODIZED BRASS|14|452 +Brand#34|LARGE PLATED STEEL|14|452 +Brand#34|MEDIUM BRUSHED BRASS|9|452 +Brand#34|PROMO BRUSHED BRASS|9|452 +Brand#34|PROMO BRUSHED NICKEL|14|452 +Brand#34|PROMO BURNISHED NICKEL|49|452 +Brand#34|PROMO PLATED BRASS|49|452 +Brand#34|SMALL BURNISHED STEEL|14|452 +Brand#34|SMALL POLISHED COPPER|23|452 +Brand#34|SMALL POLISHED NICKEL|19|452 +Brand#34|STANDARD BURNISHED BRASS|14|452 +Brand#34|STANDARD BURNISHED BRASS|19|452 +Brand#34|STANDARD BURNISHED NICKEL|3|452 +Brand#34|STANDARD BURNISHED NICKEL|36|452 +Brand#34|STANDARD BURNISHED STEEL|49|452 +Brand#34|STANDARD PLATED BRASS|45|452 +Brand#34|STANDARD PLATED COPPER|3|452 +Brand#34|STANDARD POLISHED STEEL|23|452 +Brand#34|STANDARD POLISHED TIN|45|452 +Brand#35|ECONOMY ANODIZED NICKEL|19|452 +Brand#35|ECONOMY BRUSHED NICKEL|49|452 +Brand#35|ECONOMY BRUSHED TIN|36|452 +Brand#35|ECONOMY PLATED NICKEL|3|452 +Brand#35|ECONOMY PLATED NICKEL|9|452 +Brand#35|ECONOMY PLATED TIN|23|452 +Brand#35|ECONOMY POLISHED NICKEL|49|452 +Brand#35|LARGE BRUSHED TIN|3|452 +Brand#35|LARGE BURNISHED TIN|19|452 +Brand#35|LARGE PLATED COPPER|3|452 +Brand#35|LARGE PLATED TIN|9|452 +Brand#35|MEDIUM ANODIZED BRASS|45|452 +Brand#35|MEDIUM ANODIZED COPPER|23|452 +Brand#35|MEDIUM BRUSHED COPPER|36|452 +Brand#35|MEDIUM BRUSHED COPPER|45|452 +Brand#35|MEDIUM BURNISHED BRASS|49|452 +Brand#35|MEDIUM PLATED BRASS|36|452 +Brand#35|PROMO ANODIZED BRASS|36|452 +Brand#35|PROMO BRUSHED BRASS|9|452 +Brand#35|PROMO BRUSHED STEEL|9|452 +Brand#35|PROMO PLATED TIN|36|452 +Brand#35|SMALL ANODIZED COPPER|49|452 +Brand#35|SMALL ANODIZED TIN|14|452 +Brand#35|SMALL BRUSHED BRASS|3|452 +Brand#35|SMALL BRUSHED STEEL|3|452 +Brand#35|SMALL BRUSHED STEEL|14|452 +Brand#35|SMALL BURNISHED NICKEL|19|452 +Brand#35|SMALL PLATED TIN|36|452 +Brand#35|STANDARD BURNISHED TIN|14|452 +Brand#35|STANDARD POLISHED STEEL|36|452 +Brand#41|ECONOMY ANODIZED STEEL|45|452 +Brand#41|ECONOMY BURNISHED BRASS|19|452 +Brand#41|ECONOMY POLISHED BRASS|49|452 +Brand#41|LARGE ANODIZED COPPER|3|452 +Brand#41|LARGE BRUSHED BRASS|49|452 +Brand#41|LARGE BRUSHED TIN|9|452 +Brand#41|LARGE BRUSHED TIN|49|452 +Brand#41|LARGE PLATED NICKEL|23|452 +Brand#41|LARGE POLISHED NICKEL|23|452 +Brand#41|MEDIUM ANODIZED TIN|9|452 +Brand#41|PROMO ANODIZED BRASS|14|452 +Brand#41|PROMO ANODIZED COPPER|14|452 +Brand#41|PROMO BURNISHED TIN|9|452 +Brand#41|PROMO BURNISHED TIN|45|452 +Brand#41|PROMO PLATED COPPER|36|452 +Brand#41|PROMO POLISHED BRASS|23|452 +Brand#41|PROMO POLISHED STEEL|23|452 +Brand#41|SMALL BRUSHED STEEL|49|452 +Brand#41|SMALL BURNISHED STEEL|45|452 +Brand#41|SMALL BURNISHED TIN|9|452 +Brand#41|SMALL PLATED BRASS|45|452 +Brand#41|SMALL PLATED TIN|45|452 +Brand#41|SMALL POLISHED BRASS|3|452 +Brand#41|SMALL POLISHED STEEL|14|452 +Brand#41|STANDARD BRUSHED COPPER|19|452 +Brand#41|STANDARD BRUSHED NICKEL|36|452 +Brand#41|STANDARD BURNISHED BRASS|9|452 +Brand#42|ECONOMY ANODIZED COPPER|36|452 +Brand#42|ECONOMY BRUSHED COPPER|3|452 +Brand#42|ECONOMY BRUSHED NICKEL|45|452 +Brand#42|ECONOMY BRUSHED STEEL|3|452 +Brand#42|ECONOMY PLATED NICKEL|14|452 +Brand#42|ECONOMY PLATED STEEL|23|452 +Brand#42|ECONOMY POLISHED NICKEL|23|452 +Brand#42|LARGE ANODIZED BRASS|3|452 +Brand#42|LARGE BURNISHED NICKEL|36|452 +Brand#42|LARGE PLATED TIN|14|452 +Brand#42|LARGE POLISHED BRASS|9|452 +Brand#42|MEDIUM ANODIZED BRASS|23|452 +Brand#42|MEDIUM ANODIZED STEEL|36|452 +Brand#42|MEDIUM BURNISHED COPPER|3|452 +Brand#42|MEDIUM PLATED COPPER|49|452 +Brand#42|PROMO ANODIZED STEEL|14|452 +Brand#42|PROMO BRUSHED COPPER|3|452 +Brand#42|PROMO BRUSHED NICKEL|9|452 +Brand#42|PROMO BURNISHED COPPER|19|452 +Brand#42|PROMO PLATED COPPER|19|452 +Brand#42|PROMO PLATED COPPER|36|452 +Brand#42|PROMO POLISHED NICKEL|19|452 +Brand#42|SMALL BRUSHED TIN|3|452 +Brand#42|SMALL BURNISHED BRASS|23|452 +Brand#42|SMALL PLATED NICKEL|23|452 +Brand#42|SMALL PLATED STEEL|36|452 +Brand#42|STANDARD BURNISHED COPPER|14|452 +Brand#42|STANDARD PLATED TIN|23|452 +Brand#43|ECONOMY POLISHED NICKEL|23|452 +Brand#43|ECONOMY POLISHED STEEL|3|452 +Brand#43|ECONOMY POLISHED STEEL|23|452 +Brand#43|LARGE ANODIZED COPPER|3|452 +Brand#43|LARGE BRUSHED COPPER|14|452 +Brand#43|LARGE BRUSHED NICKEL|3|452 +Brand#43|LARGE BRUSHED NICKEL|23|452 +Brand#43|LARGE BURNISHED COPPER|49|452 +Brand#43|MEDIUM ANODIZED COPPER|45|452 +Brand#43|MEDIUM BRUSHED COPPER|3|452 +Brand#43|MEDIUM BURNISHED NICKEL|45|452 +Brand#43|MEDIUM BURNISHED TIN|19|452 +Brand#43|MEDIUM PLATED BRASS|45|452 +Brand#43|MEDIUM PLATED TIN|45|452 +Brand#43|PROMO ANODIZED STEEL|19|452 +Brand#43|PROMO BRUSHED TIN|49|452 +Brand#43|PROMO PLATED NICKEL|36|452 +Brand#43|PROMO PLATED STEEL|23|452 +Brand#43|PROMO POLISHED COPPER|3|452 +Brand#43|PROMO POLISHED STEEL|9|452 +Brand#43|SMALL ANODIZED BRASS|45|452 +Brand#43|SMALL BRUSHED COPPER|19|452 +Brand#43|SMALL POLISHED STEEL|49|452 +Brand#44|ECONOMY ANODIZED COPPER|45|452 +Brand#44|ECONOMY ANODIZED STEEL|14|452 +Brand#44|ECONOMY ANODIZED STEEL|49|452 +Brand#44|ECONOMY BRUSHED BRASS|23|452 +Brand#44|ECONOMY BRUSHED COPPER|19|452 +Brand#44|ECONOMY PLATED TIN|19|452 +Brand#44|ECONOMY POLISHED BRASS|9|452 +Brand#44|ECONOMY POLISHED TIN|9|452 +Brand#44|LARGE ANODIZED BRASS|14|452 +Brand#44|LARGE POLISHED COPPER|9|452 +Brand#44|MEDIUM BURNISHED TIN|23|452 +Brand#44|MEDIUM PLATED TIN|9|452 +Brand#44|PROMO BRUSHED NICKEL|3|452 +Brand#44|PROMO PLATED NICKEL|14|452 +Brand#44|PROMO POLISHED STEEL|36|452 +Brand#44|SMALL BRUSHED TIN|3|452 +Brand#44|STANDARD ANODIZED COPPER|23|452 +Brand#44|STANDARD BRUSHED NICKEL|36|452 +Brand#44|STANDARD BURNISHED BRASS|19|452 +Brand#44|STANDARD PLATED TIN|19|452 +Brand#44|STANDARD POLISHED COPPER|45|452 +Brand#44|STANDARD POLISHED NICKEL|36|452 +Brand#51|ECONOMY ANODIZED NICKEL|45|452 +Brand#51|ECONOMY BURNISHED COPPER|36|452 +Brand#51|ECONOMY BURNISHED TIN|14|452 +Brand#51|LARGE ANODIZED STEEL|3|452 +Brand#51|LARGE ANODIZED STEEL|23|452 +Brand#51|LARGE BRUSHED TIN|49|452 +Brand#51|LARGE BURNISHED BRASS|36|452 +Brand#51|LARGE PLATED STEEL|9|452 +Brand#51|LARGE POLISHED STEEL|36|452 +Brand#51|MEDIUM BRUSHED TIN|14|452 +Brand#51|MEDIUM BRUSHED TIN|36|452 +Brand#51|MEDIUM PLATED BRASS|49|452 +Brand#51|MEDIUM PLATED COPPER|14|452 +Brand#51|MEDIUM PLATED NICKEL|9|452 +Brand#51|PROMO ANODIZED COPPER|23|452 +Brand#51|PROMO ANODIZED TIN|49|452 +Brand#51|PROMO BRUSHED BRASS|14|452 +Brand#51|PROMO BURNISHED TIN|36|452 +Brand#51|PROMO PLATED COPPER|14|452 +Brand#51|PROMO PLATED TIN|45|452 +Brand#51|PROMO POLISHED STEEL|14|452 +Brand#51|PROMO POLISHED TIN|9|452 +Brand#51|SMALL ANODIZED COPPER|14|452 +Brand#51|SMALL ANODIZED STEEL|14|452 +Brand#51|SMALL BRUSHED BRASS|36|452 +Brand#51|SMALL POLISHED STEEL|3|452 +Brand#51|STANDARD ANODIZED STEEL|23|452 +Brand#51|STANDARD BRUSHED BRASS|45|452 +Brand#51|STANDARD PLATED TIN|36|452 +Brand#52|ECONOMY ANODIZED NICKEL|19|452 +Brand#52|ECONOMY ANODIZED NICKEL|36|452 +Brand#52|ECONOMY BRUSHED STEEL|14|452 +Brand#52|ECONOMY POLISHED NICKEL|23|452 +Brand#52|LARGE ANODIZED TIN|45|452 +Brand#52|LARGE BRUSHED BRASS|19|452 +Brand#52|LARGE BRUSHED STEEL|23|452 +Brand#52|LARGE BURNISHED NICKEL|9|452 +Brand#52|LARGE PLATED NICKEL|19|452 +Brand#52|MEDIUM PLATED NICKEL|3|452 +Brand#52|PROMO BRUSHED BRASS|36|452 +Brand#52|PROMO PLATED BRASS|36|452 +Brand#52|PROMO PLATED TIN|14|452 +Brand#52|PROMO POLISHED NICKEL|45|452 +Brand#52|PROMO POLISHED TIN|45|452 +Brand#52|SMALL BRUSHED COPPER|45|452 +Brand#52|SMALL BRUSHED NICKEL|9|452 +Brand#52|SMALL BURNISHED BRASS|9|452 +Brand#52|SMALL BURNISHED BRASS|14|452 +Brand#52|STANDARD ANODIZED COPPER|14|452 +Brand#52|STANDARD BRUSHED COPPER|14|452 +Brand#52|STANDARD BRUSHED NICKEL|9|452 +Brand#52|STANDARD BURNISHED COPPER|19|452 +Brand#52|STANDARD PLATED TIN|23|452 +Brand#53|ECONOMY BRUSHED NICKEL|3|452 +Brand#53|ECONOMY BURNISHED TIN|45|452 +Brand#53|ECONOMY PLATED TIN|49|452 +Brand#53|ECONOMY POLISHED STEEL|36|452 +Brand#53|LARGE ANODIZED BRASS|23|452 +Brand#53|LARGE BURNISHED STEEL|49|452 +Brand#53|LARGE PLATED NICKEL|9|452 +Brand#53|LARGE PLATED STEEL|23|452 +Brand#53|LARGE PLATED TIN|36|452 +Brand#53|LARGE POLISHED NICKEL|3|452 +Brand#53|MEDIUM PLATED TIN|3|452 +Brand#53|PROMO ANODIZED BRASS|49|452 +Brand#53|PROMO BRUSHED TIN|49|452 +Brand#53|PROMO BURNISHED STEEL|23|452 +Brand#53|PROMO PLATED NICKEL|3|452 +Brand#53|PROMO POLISHED TIN|9|452 +Brand#53|PROMO POLISHED TIN|49|452 +Brand#53|SMALL ANODIZED TIN|23|452 +Brand#53|SMALL ANODIZED TIN|45|452 +Brand#53|SMALL BRUSHED NICKEL|9|452 +Brand#53|SMALL PLATED STEEL|36|452 +Brand#53|SMALL POLISHED BRASS|36|452 +Brand#53|STANDARD PLATED BRASS|3|452 +Brand#53|STANDARD POLISHED COPPER|14|452 +Brand#54|ECONOMY ANODIZED STEEL|36|452 +Brand#54|ECONOMY BURNISHED NICKEL|19|452 +Brand#54|LARGE ANODIZED COPPER|14|452 +Brand#54|LARGE ANODIZED TIN|9|452 +Brand#54|LARGE BRUSHED BRASS|45|452 +Brand#54|LARGE PLATED STEEL|19|452 +Brand#54|LARGE PLATED TIN|49|452 +Brand#54|MEDIUM BRUSHED NICKEL|14|452 +Brand#54|MEDIUM PLATED TIN|49|452 +Brand#54|PROMO ANODIZED NICKEL|36|452 +Brand#54|PROMO BRUSHED NICKEL|3|452 +Brand#54|PROMO BURNISHED BRASS|19|452 +Brand#54|PROMO PLATED NICKEL|3|452 +Brand#54|SMALL ANODIZED NICKEL|19|452 +Brand#54|SMALL POLISHED TIN|3|452 +Brand#54|STANDARD ANODIZED COPPER|9|452 +Brand#54|STANDARD ANODIZED NICKEL|19|452 +Brand#54|STANDARD PLATED COPPER|9|452 +Brand#54|STANDARD PLATED NICKEL|49|452 +Brand#54|STANDARD POLISHED BRASS|9|452 +Brand#55|ECONOMY ANODIZED STEEL|9|452 +Brand#55|ECONOMY BRUSHED COPPER|36|452 +Brand#55|ECONOMY BRUSHED TIN|23|452 +Brand#55|ECONOMY BURNISHED NICKEL|45|452 +Brand#55|ECONOMY BURNISHED TIN|36|452 +Brand#55|LARGE BURNISHED NICKEL|45|452 +Brand#55|LARGE POLISHED NICKEL|14|452 +Brand#55|LARGE POLISHED TIN|45|452 +Brand#55|MEDIUM BRUSHED BRASS|3|452 +Brand#55|MEDIUM BRUSHED COPPER|36|452 +Brand#55|MEDIUM BRUSHED STEEL|49|452 +Brand#55|MEDIUM BURNISHED BRASS|45|452 +Brand#55|PROMO ANODIZED STEEL|14|452 +Brand#55|PROMO PLATED COPPER|9|452 +Brand#55|SMALL BRUSHED BRASS|19|452 +Brand#55|SMALL BRUSHED NICKEL|3|452 +Brand#55|SMALL BURNISHED STEEL|45|452 +Brand#55|SMALL PLATED COPPER|23|452 +Brand#55|SMALL PLATED STEEL|19|452 +Brand#55|SMALL POLISHED COPPER|49|452 +Brand#55|SMALL POLISHED STEEL|23|452 +Brand#55|STANDARD BURNISHED BRASS|3|452 +Brand#55|STANDARD BURNISHED STEEL|49|452 +Brand#55|STANDARD POLISHED TIN|49|452 +Brand#11|MEDIUM ANODIZED NICKEL|19|451 +Brand#11|MEDIUM BRUSHED STEEL|14|451 +Brand#11|MEDIUM BURNISHED BRASS|49|451 +Brand#11|PROMO ANODIZED BRASS|3|451 +Brand#11|PROMO POLISHED TIN|9|451 +Brand#11|PROMO POLISHED TIN|23|451 +Brand#11|STANDARD POLISHED BRASS|36|451 +Brand#12|ECONOMY BRUSHED BRASS|23|451 +Brand#12|ECONOMY BURNISHED STEEL|3|451 +Brand#12|MEDIUM BRUSHED TIN|19|451 +Brand#12|PROMO PLATED STEEL|23|451 +Brand#12|SMALL POLISHED BRASS|23|451 +Brand#12|STANDARD ANODIZED COPPER|14|451 +Brand#12|STANDARD PLATED COPPER|3|451 +Brand#13|ECONOMY BURNISHED TIN|36|451 +Brand#13|LARGE BURNISHED BRASS|9|451 +Brand#13|LARGE BURNISHED COPPER|36|451 +Brand#13|LARGE BURNISHED STEEL|9|451 +Brand#13|MEDIUM PLATED TIN|45|451 +Brand#13|PROMO ANODIZED BRASS|45|451 +Brand#13|PROMO BURNISHED TIN|23|451 +Brand#13|SMALL BRUSHED TIN|45|451 +Brand#13|STANDARD ANODIZED COPPER|9|451 +Brand#13|STANDARD BURNISHED STEEL|14|451 +Brand#13|STANDARD PLATED NICKEL|19|451 +Brand#14|LARGE BURNISHED STEEL|23|451 +Brand#14|PROMO BRUSHED TIN|49|451 +Brand#14|PROMO BURNISHED BRASS|19|451 +Brand#14|SMALL BURNISHED BRASS|19|451 +Brand#15|ECONOMY POLISHED TIN|45|451 +Brand#15|LARGE BRUSHED NICKEL|9|451 +Brand#15|LARGE BRUSHED NICKEL|14|451 +Brand#15|LARGE POLISHED NICKEL|19|451 +Brand#15|PROMO POLISHED TIN|36|451 +Brand#15|SMALL BURNISHED BRASS|49|451 +Brand#15|STANDARD PLATED NICKEL|49|451 +Brand#15|STANDARD POLISHED BRASS|45|451 +Brand#21|ECONOMY ANODIZED NICKEL|14|451 +Brand#21|ECONOMY ANODIZED STEEL|3|451 +Brand#21|ECONOMY POLISHED COPPER|19|451 +Brand#21|LARGE ANODIZED TIN|19|451 +Brand#21|LARGE ANODIZED TIN|49|451 +Brand#21|PROMO PLATED COPPER|36|451 +Brand#21|PROMO POLISHED NICKEL|3|451 +Brand#21|SMALL ANODIZED NICKEL|14|451 +Brand#21|SMALL BURNISHED STEEL|3|451 +Brand#21|STANDARD PLATED COPPER|9|451 +Brand#21|STANDARD POLISHED NICKEL|23|451 +Brand#22|LARGE POLISHED COPPER|19|451 +Brand#22|MEDIUM PLATED BRASS|14|451 +Brand#22|MEDIUM PLATED STEEL|45|451 +Brand#22|PROMO BRUSHED COPPER|9|451 +Brand#22|PROMO BURNISHED TIN|36|451 +Brand#22|SMALL BURNISHED TIN|3|451 +Brand#22|SMALL BURNISHED TIN|45|451 +Brand#22|SMALL PLATED NICKEL|14|451 +Brand#22|SMALL POLISHED BRASS|36|451 +Brand#23|ECONOMY ANODIZED COPPER|3|451 +Brand#23|ECONOMY BRUSHED TIN|14|451 +Brand#23|ECONOMY POLISHED STEEL|3|451 +Brand#23|ECONOMY POLISHED TIN|45|451 +Brand#23|LARGE POLISHED TIN|36|451 +Brand#23|STANDARD BRUSHED STEEL|23|451 +Brand#24|ECONOMY BURNISHED NICKEL|45|451 +Brand#24|LARGE ANODIZED BRASS|45|451 +Brand#24|LARGE BRUSHED STEEL|49|451 +Brand#24|LARGE POLISHED BRASS|49|451 +Brand#24|LARGE POLISHED NICKEL|36|451 +Brand#24|MEDIUM PLATED BRASS|49|451 +Brand#24|PROMO BURNISHED BRASS|49|451 +Brand#24|SMALL ANODIZED COPPER|49|451 +Brand#24|SMALL PLATED TIN|9|451 +Brand#24|STANDARD BURNISHED BRASS|23|451 +Brand#24|STANDARD BURNISHED COPPER|3|451 +Brand#25|ECONOMY PLATED COPPER|9|451 +Brand#25|LARGE BRUSHED NICKEL|23|451 +Brand#25|LARGE PLATED BRASS|49|451 +Brand#25|MEDIUM PLATED NICKEL|49|451 +Brand#31|ECONOMY PLATED TIN|45|451 +Brand#31|LARGE BURNISHED NICKEL|23|451 +Brand#31|LARGE PLATED BRASS|36|451 +Brand#31|LARGE PLATED COPPER|36|451 +Brand#31|MEDIUM PLATED BRASS|3|451 +Brand#31|PROMO PLATED NICKEL|36|451 +Brand#31|STANDARD ANODIZED COPPER|45|451 +Brand#31|STANDARD BRUSHED NICKEL|14|451 +Brand#31|STANDARD PLATED BRASS|45|451 +Brand#31|STANDARD PLATED BRASS|49|451 +Brand#31|STANDARD PLATED COPPER|9|451 +Brand#31|STANDARD POLISHED BRASS|49|451 +Brand#32|ECONOMY BURNISHED TIN|19|451 +Brand#32|LARGE BURNISHED STEEL|49|451 +Brand#32|MEDIUM PLATED STEEL|9|451 +Brand#32|PROMO BRUSHED NICKEL|23|451 +Brand#32|PROMO BRUSHED STEEL|3|451 +Brand#32|PROMO BURNISHED BRASS|49|451 +Brand#32|PROMO BURNISHED STEEL|36|451 +Brand#32|STANDARD BURNISHED COPPER|9|451 +Brand#32|STANDARD POLISHED BRASS|3|451 +Brand#33|LARGE BRUSHED COPPER|49|451 +Brand#33|LARGE BURNISHED BRASS|45|451 +Brand#33|LARGE POLISHED BRASS|49|451 +Brand#33|PROMO PLATED TIN|19|451 +Brand#33|PROMO POLISHED STEEL|49|451 +Brand#33|SMALL PLATED NICKEL|19|451 +Brand#34|ECONOMY PLATED NICKEL|14|451 +Brand#34|LARGE BRUSHED STEEL|3|451 +Brand#34|LARGE BURNISHED NICKEL|3|451 +Brand#34|MEDIUM BRUSHED BRASS|19|451 +Brand#34|MEDIUM BURNISHED TIN|23|451 +Brand#34|PROMO ANODIZED TIN|23|451 +Brand#34|PROMO BURNISHED BRASS|3|451 +Brand#34|SMALL PLATED BRASS|23|451 +Brand#34|SMALL PLATED TIN|36|451 +Brand#35|LARGE BURNISHED TIN|3|451 +Brand#35|LARGE PLATED BRASS|36|451 +Brand#35|PROMO ANODIZED TIN|9|451 +Brand#35|PROMO BRUSHED NICKEL|14|451 +Brand#35|PROMO BRUSHED STEEL|3|451 +Brand#35|PROMO POLISHED TIN|45|451 +Brand#35|SMALL PLATED TIN|14|451 +Brand#35|STANDARD PLATED BRASS|14|451 +Brand#41|ECONOMY ANODIZED NICKEL|14|451 +Brand#41|LARGE BURNISHED STEEL|49|451 +Brand#41|LARGE PLATED COPPER|36|451 +Brand#41|PROMO ANODIZED TIN|9|451 +Brand#41|PROMO BURNISHED TIN|49|451 +Brand#41|SMALL BRUSHED TIN|19|451 +Brand#41|SMALL BURNISHED STEEL|3|451 +Brand#41|SMALL PLATED STEEL|23|451 +Brand#42|ECONOMY PLATED BRASS|36|451 +Brand#42|PROMO POLISHED BRASS|36|451 +Brand#42|PROMO POLISHED COPPER|3|451 +Brand#42|SMALL ANODIZED COPPER|49|451 +Brand#42|SMALL ANODIZED TIN|3|451 +Brand#42|SMALL BURNISHED NICKEL|23|451 +Brand#42|STANDARD BURNISHED COPPER|19|451 +Brand#43|ECONOMY ANODIZED COPPER|49|451 +Brand#43|ECONOMY ANODIZED STEEL|9|451 +Brand#43|ECONOMY BRUSHED BRASS|9|451 +Brand#43|ECONOMY BRUSHED STEEL|23|451 +Brand#43|ECONOMY BRUSHED STEEL|36|451 +Brand#43|ECONOMY PLATED COPPER|9|451 +Brand#43|ECONOMY POLISHED COPPER|9|451 +Brand#43|ECONOMY POLISHED COPPER|49|451 +Brand#43|LARGE ANODIZED NICKEL|3|451 +Brand#43|LARGE ANODIZED NICKEL|36|451 +Brand#43|PROMO BURNISHED BRASS|45|451 +Brand#43|SMALL BRUSHED BRASS|49|451 +Brand#43|SMALL POLISHED COPPER|14|451 +Brand#44|ECONOMY ANODIZED NICKEL|45|451 +Brand#44|ECONOMY POLISHED STEEL|23|451 +Brand#44|MEDIUM ANODIZED NICKEL|3|451 +Brand#44|MEDIUM ANODIZED NICKEL|23|451 +Brand#44|MEDIUM BRUSHED TIN|19|451 +Brand#44|PROMO BURNISHED BRASS|45|451 +Brand#44|PROMO BURNISHED COPPER|9|451 +Brand#44|SMALL ANODIZED NICKEL|49|451 +Brand#44|SMALL PLATED COPPER|14|451 +Brand#44|STANDARD BRUSHED BRASS|23|451 +Brand#44|STANDARD BURNISHED BRASS|36|451 +Brand#51|LARGE PLATED NICKEL|9|451 +Brand#51|LARGE PLATED STEEL|14|451 +Brand#51|LARGE POLISHED COPPER|3|451 +Brand#51|LARGE POLISHED COPPER|19|451 +Brand#51|MEDIUM BURNISHED TIN|14|451 +Brand#51|PROMO ANODIZED COPPER|49|451 +Brand#51|PROMO BURNISHED STEEL|3|451 +Brand#51|PROMO PLATED NICKEL|23|451 +Brand#51|PROMO POLISHED STEEL|45|451 +Brand#51|SMALL ANODIZED STEEL|3|451 +Brand#51|SMALL PLATED NICKEL|3|451 +Brand#51|SMALL PLATED NICKEL|23|451 +Brand#51|STANDARD POLISHED BRASS|36|451 +Brand#52|ECONOMY BURNISHED STEEL|45|451 +Brand#52|LARGE BRUSHED TIN|9|451 +Brand#52|LARGE PLATED STEEL|45|451 +Brand#52|LARGE POLISHED NICKEL|3|451 +Brand#52|MEDIUM ANODIZED NICKEL|49|451 +Brand#52|MEDIUM BRUSHED COPPER|36|451 +Brand#52|PROMO BURNISHED STEEL|3|451 +Brand#52|PROMO BURNISHED TIN|9|451 +Brand#52|PROMO PLATED BRASS|3|451 +Brand#52|PROMO POLISHED NICKEL|49|451 +Brand#52|SMALL BURNISHED STEEL|9|451 +Brand#52|STANDARD PLATED NICKEL|3|451 +Brand#53|LARGE ANODIZED TIN|9|451 +Brand#53|LARGE BURNISHED TIN|3|451 +Brand#53|LARGE POLISHED STEEL|36|451 +Brand#53|PROMO BURNISHED COPPER|36|451 +Brand#53|SMALL PLATED COPPER|23|451 +Brand#53|SMALL POLISHED NICKEL|3|451 +Brand#53|SMALL POLISHED STEEL|9|451 +Brand#53|STANDARD BURNISHED NICKEL|3|451 +Brand#54|ECONOMY POLISHED TIN|3|451 +Brand#54|LARGE ANODIZED NICKEL|23|451 +Brand#54|PROMO BURNISHED NICKEL|19|451 +Brand#54|PROMO PLATED COPPER|23|451 +Brand#54|SMALL BRUSHED COPPER|23|451 +Brand#54|SMALL BURNISHED TIN|36|451 +Brand#55|PROMO PLATED TIN|19|451 +Brand#55|SMALL BRUSHED BRASS|36|451 +Brand#55|SMALL BURNISHED NICKEL|9|451 +Brand#55|SMALL POLISHED STEEL|3|451 +Brand#55|STANDARD BRUSHED NICKEL|3|451 +Brand#55|STANDARD BRUSHED STEEL|45|451 +Brand#55|STANDARD POLISHED COPPER|45|451 +Brand#11|MEDIUM BURNISHED TIN|19|450 +Brand#13|LARGE BRUSHED COPPER|19|450 +Brand#14|LARGE ANODIZED NICKEL|19|450 +Brand#15|LARGE BRUSHED NICKEL|45|450 +Brand#15|STANDARD BURNISHED COPPER|19|450 +Brand#21|LARGE ANODIZED STEEL|14|450 +Brand#21|PROMO ANODIZED NICKEL|49|450 +Brand#22|LARGE POLISHED BRASS|49|450 +Brand#22|SMALL BURNISHED NICKEL|19|450 +Brand#23|PROMO BRUSHED STEEL|23|450 +Brand#23|STANDARD POLISHED TIN|3|450 +Brand#24|STANDARD BRUSHED COPPER|19|450 +Brand#31|ECONOMY ANODIZED COPPER|9|450 +Brand#31|STANDARD ANODIZED STEEL|49|450 +Brand#32|SMALL BURNISHED BRASS|45|450 +Brand#33|MEDIUM PLATED COPPER|19|450 +Brand#33|PROMO POLISHED TIN|45|450 +Brand#33|SMALL PLATED BRASS|14|450 +Brand#34|PROMO BRUSHED COPPER|36|450 +Brand#34|STANDARD PLATED COPPER|19|450 +Brand#41|ECONOMY ANODIZED BRASS|9|450 +Brand#41|LARGE BURNISHED COPPER|3|450 +Brand#41|SMALL BRUSHED STEEL|3|450 +Brand#41|STANDARD BURNISHED COPPER|49|450 +Brand#43|LARGE BURNISHED NICKEL|19|450 +Brand#43|STANDARD PLATED STEEL|14|450 +Brand#51|ECONOMY POLISHED STEEL|14|450 +Brand#52|PROMO BRUSHED COPPER|9|450 +Brand#52|STANDARD ANODIZED STEEL|3|450 +Brand#21|PROMO PLATED STEEL|49|449 +Brand#21|STANDARD POLISHED TIN|36|449 +Brand#35|MEDIUM ANODIZED TIN|36|449 +Brand#11|ECONOMY BRUSHED BRASS|45|448 +Brand#11|LARGE BURNISHED BRASS|14|448 +Brand#11|MEDIUM ANODIZED NICKEL|3|448 +Brand#11|MEDIUM BRUSHED NICKEL|3|448 +Brand#11|MEDIUM BURNISHED NICKEL|9|448 +Brand#11|MEDIUM BURNISHED NICKEL|36|448 +Brand#11|MEDIUM BURNISHED STEEL|9|448 +Brand#11|MEDIUM PLATED TIN|36|448 +Brand#11|PROMO ANODIZED BRASS|45|448 +Brand#11|PROMO ANODIZED STEEL|19|448 +Brand#11|PROMO BRUSHED COPPER|9|448 +Brand#11|PROMO BRUSHED NICKEL|23|448 +Brand#11|PROMO PLATED NICKEL|23|448 +Brand#11|SMALL ANODIZED NICKEL|19|448 +Brand#11|SMALL BRUSHED NICKEL|36|448 +Brand#11|SMALL PLATED BRASS|9|448 +Brand#11|SMALL PLATED COPPER|45|448 +Brand#11|SMALL POLISHED NICKEL|36|448 +Brand#11|SMALL POLISHED TIN|9|448 +Brand#11|STANDARD ANODIZED COPPER|19|448 +Brand#11|STANDARD ANODIZED COPPER|36|448 +Brand#11|STANDARD ANODIZED TIN|3|448 +Brand#11|STANDARD BRUSHED NICKEL|36|448 +Brand#11|STANDARD BURNISHED BRASS|14|448 +Brand#11|STANDARD POLISHED TIN|14|448 +Brand#12|ECONOMY ANODIZED TIN|36|448 +Brand#12|LARGE BRUSHED STEEL|45|448 +Brand#12|LARGE BURNISHED BRASS|49|448 +Brand#12|LARGE BURNISHED TIN|3|448 +Brand#12|LARGE POLISHED BRASS|19|448 +Brand#12|LARGE POLISHED STEEL|23|448 +Brand#12|PROMO BRUSHED TIN|9|448 +Brand#12|PROMO BURNISHED BRASS|49|448 +Brand#12|PROMO BURNISHED TIN|45|448 +Brand#12|PROMO PLATED COPPER|45|448 +Brand#12|PROMO PLATED TIN|45|448 +Brand#12|SMALL ANODIZED NICKEL|23|448 +Brand#12|SMALL BRUSHED NICKEL|3|448 +Brand#12|SMALL BRUSHED TIN|9|448 +Brand#12|SMALL PLATED TIN|45|448 +Brand#12|SMALL POLISHED NICKEL|23|448 +Brand#12|SMALL POLISHED TIN|49|448 +Brand#12|STANDARD ANODIZED TIN|3|448 +Brand#12|STANDARD BRUSHED COPPER|14|448 +Brand#12|STANDARD BRUSHED COPPER|49|448 +Brand#12|STANDARD PLATED COPPER|36|448 +Brand#12|STANDARD POLISHED TIN|3|448 +Brand#13|ECONOMY ANODIZED NICKEL|36|448 +Brand#13|ECONOMY ANODIZED STEEL|19|448 +Brand#13|ECONOMY BRUSHED TIN|14|448 +Brand#13|ECONOMY BURNISHED STEEL|45|448 +Brand#13|LARGE BRUSHED NICKEL|45|448 +Brand#13|LARGE PLATED BRASS|45|448 +Brand#13|LARGE PLATED COPPER|19|448 +Brand#13|LARGE PLATED NICKEL|23|448 +Brand#13|LARGE PLATED TIN|23|448 +Brand#13|MEDIUM ANODIZED BRASS|49|448 +Brand#13|MEDIUM ANODIZED COPPER|49|448 +Brand#13|MEDIUM ANODIZED NICKEL|49|448 +Brand#13|MEDIUM ANODIZED STEEL|23|448 +Brand#13|MEDIUM BRUSHED COPPER|3|448 +Brand#13|MEDIUM BRUSHED TIN|9|448 +Brand#13|MEDIUM BURNISHED STEEL|49|448 +Brand#13|PROMO BURNISHED COPPER|14|448 +Brand#13|PROMO BURNISHED COPPER|49|448 +Brand#13|PROMO BURNISHED NICKEL|3|448 +Brand#13|PROMO PLATED COPPER|3|448 +Brand#13|PROMO POLISHED BRASS|36|448 +Brand#13|PROMO POLISHED TIN|19|448 +Brand#13|SMALL ANODIZED STEEL|36|448 +Brand#13|SMALL BRUSHED COPPER|23|448 +Brand#13|SMALL BRUSHED NICKEL|49|448 +Brand#13|SMALL BRUSHED STEEL|36|448 +Brand#13|SMALL BURNISHED NICKEL|9|448 +Brand#13|SMALL POLISHED STEEL|14|448 +Brand#13|STANDARD ANODIZED COPPER|36|448 +Brand#13|STANDARD ANODIZED TIN|9|448 +Brand#13|STANDARD BRUSHED BRASS|3|448 +Brand#13|STANDARD BRUSHED TIN|36|448 +Brand#14|ECONOMY PLATED COPPER|14|448 +Brand#14|ECONOMY POLISHED STEEL|3|448 +Brand#14|LARGE ANODIZED COPPER|3|448 +Brand#14|LARGE ANODIZED TIN|19|448 +Brand#14|LARGE BURNISHED BRASS|14|448 +Brand#14|LARGE PLATED BRASS|45|448 +Brand#14|MEDIUM BRUSHED NICKEL|14|448 +Brand#14|MEDIUM PLATED BRASS|9|448 +Brand#14|PROMO ANODIZED BRASS|19|448 +Brand#14|PROMO ANODIZED NICKEL|49|448 +Brand#14|PROMO BURNISHED BRASS|9|448 +Brand#14|PROMO BURNISHED COPPER|49|448 +Brand#14|PROMO PLATED BRASS|9|448 +Brand#14|PROMO POLISHED TIN|36|448 +Brand#14|SMALL BRUSHED STEEL|45|448 +Brand#14|SMALL BRUSHED TIN|49|448 +Brand#14|SMALL PLATED BRASS|36|448 +Brand#14|SMALL PLATED COPPER|36|448 +Brand#14|SMALL POLISHED COPPER|19|448 +Brand#14|SMALL POLISHED NICKEL|36|448 +Brand#14|STANDARD BRUSHED BRASS|23|448 +Brand#14|STANDARD BRUSHED NICKEL|23|448 +Brand#14|STANDARD PLATED COPPER|36|448 +Brand#14|STANDARD POLISHED STEEL|19|448 +Brand#15|ECONOMY ANODIZED NICKEL|14|448 +Brand#15|ECONOMY BRUSHED BRASS|3|448 +Brand#15|ECONOMY BURNISHED STEEL|9|448 +Brand#15|ECONOMY PLATED TIN|3|448 +Brand#15|LARGE ANODIZED STEEL|45|448 +Brand#15|LARGE POLISHED TIN|3|448 +Brand#15|MEDIUM BRUSHED NICKEL|14|448 +Brand#15|MEDIUM BRUSHED STEEL|19|448 +Brand#15|PROMO ANODIZED STEEL|14|448 +Brand#15|PROMO ANODIZED TIN|45|448 +Brand#15|PROMO BRUSHED BRASS|19|448 +Brand#15|PROMO PLATED BRASS|14|448 +Brand#15|PROMO PLATED BRASS|36|448 +Brand#15|PROMO PLATED NICKEL|14|448 +Brand#15|PROMO POLISHED COPPER|9|448 +Brand#15|SMALL BURNISHED BRASS|9|448 +Brand#15|SMALL BURNISHED COPPER|45|448 +Brand#15|SMALL PLATED COPPER|23|448 +Brand#15|STANDARD BRUSHED COPPER|23|448 +Brand#15|STANDARD BRUSHED NICKEL|3|448 +Brand#15|STANDARD POLISHED NICKEL|19|448 +Brand#21|ECONOMY ANODIZED COPPER|19|448 +Brand#21|ECONOMY BRUSHED COPPER|23|448 +Brand#21|ECONOMY PLATED BRASS|49|448 +Brand#21|ECONOMY POLISHED NICKEL|45|448 +Brand#21|ECONOMY POLISHED STEEL|45|448 +Brand#21|LARGE ANODIZED TIN|23|448 +Brand#21|LARGE BRUSHED BRASS|45|448 +Brand#21|LARGE BRUSHED COPPER|23|448 +Brand#21|LARGE BRUSHED NICKEL|9|448 +Brand#21|LARGE BURNISHED NICKEL|45|448 +Brand#21|MEDIUM ANODIZED NICKEL|3|448 +Brand#21|MEDIUM ANODIZED STEEL|36|448 +Brand#21|MEDIUM BRUSHED BRASS|19|448 +Brand#21|PROMO ANODIZED COPPER|3|448 +Brand#21|PROMO ANODIZED COPPER|19|448 +Brand#21|PROMO ANODIZED STEEL|23|448 +Brand#21|PROMO BURNISHED BRASS|23|448 +Brand#21|PROMO BURNISHED NICKEL|49|448 +Brand#21|PROMO BURNISHED STEEL|36|448 +Brand#21|PROMO BURNISHED TIN|9|448 +Brand#21|PROMO PLATED NICKEL|19|448 +Brand#21|SMALL ANODIZED COPPER|19|448 +Brand#21|SMALL BURNISHED BRASS|19|448 +Brand#21|SMALL BURNISHED STEEL|49|448 +Brand#21|SMALL PLATED NICKEL|49|448 +Brand#21|STANDARD BRUSHED COPPER|9|448 +Brand#21|STANDARD BRUSHED NICKEL|36|448 +Brand#21|STANDARD BRUSHED STEEL|36|448 +Brand#21|STANDARD BRUSHED TIN|9|448 +Brand#21|STANDARD BRUSHED TIN|14|448 +Brand#21|STANDARD BURNISHED TIN|19|448 +Brand#21|STANDARD PLATED NICKEL|23|448 +Brand#22|ECONOMY ANODIZED STEEL|3|448 +Brand#22|ECONOMY BURNISHED STEEL|49|448 +Brand#22|ECONOMY PLATED COPPER|3|448 +Brand#22|ECONOMY POLISHED BRASS|14|448 +Brand#22|ECONOMY POLISHED STEEL|36|448 +Brand#22|LARGE BRUSHED TIN|45|448 +Brand#22|LARGE PLATED COPPER|49|448 +Brand#22|LARGE POLISHED NICKEL|45|448 +Brand#22|LARGE POLISHED TIN|45|448 +Brand#22|MEDIUM BRUSHED STEEL|36|448 +Brand#22|MEDIUM BURNISHED TIN|23|448 +Brand#22|MEDIUM PLATED COPPER|49|448 +Brand#22|PROMO ANODIZED COPPER|36|448 +Brand#22|PROMO ANODIZED COPPER|49|448 +Brand#22|PROMO ANODIZED STEEL|14|448 +Brand#22|PROMO ANODIZED TIN|19|448 +Brand#22|PROMO BRUSHED BRASS|14|448 +Brand#22|PROMO BRUSHED NICKEL|3|448 +Brand#22|PROMO BRUSHED STEEL|9|448 +Brand#22|PROMO BRUSHED STEEL|14|448 +Brand#22|PROMO BURNISHED NICKEL|49|448 +Brand#22|PROMO BURNISHED STEEL|36|448 +Brand#22|PROMO POLISHED COPPER|3|448 +Brand#22|SMALL ANODIZED COPPER|49|448 +Brand#22|SMALL BRUSHED BRASS|45|448 +Brand#22|SMALL PLATED COPPER|9|448 +Brand#22|SMALL PLATED COPPER|36|448 +Brand#22|SMALL POLISHED COPPER|36|448 +Brand#22|SMALL POLISHED TIN|36|448 +Brand#22|STANDARD BRUSHED COPPER|36|448 +Brand#22|STANDARD BRUSHED STEEL|9|448 +Brand#22|STANDARD BRUSHED TIN|3|448 +Brand#22|STANDARD BURNISHED COPPER|36|448 +Brand#22|STANDARD BURNISHED NICKEL|23|448 +Brand#22|STANDARD BURNISHED NICKEL|49|448 +Brand#22|STANDARD PLATED BRASS|9|448 +Brand#22|STANDARD PLATED COPPER|14|448 +Brand#22|STANDARD PLATED NICKEL|14|448 +Brand#23|ECONOMY BURNISHED TIN|45|448 +Brand#23|ECONOMY PLATED TIN|45|448 +Brand#23|ECONOMY POLISHED BRASS|3|448 +Brand#23|ECONOMY POLISHED TIN|3|448 +Brand#23|ECONOMY POLISHED TIN|14|448 +Brand#23|LARGE ANODIZED STEEL|19|448 +Brand#23|MEDIUM PLATED NICKEL|36|448 +Brand#23|MEDIUM PLATED TIN|23|448 +Brand#23|PROMO ANODIZED COPPER|14|448 +Brand#23|PROMO ANODIZED NICKEL|49|448 +Brand#23|PROMO ANODIZED STEEL|9|448 +Brand#23|PROMO POLISHED STEEL|36|448 +Brand#23|SMALL ANODIZED TIN|23|448 +Brand#23|SMALL BRUSHED NICKEL|45|448 +Brand#23|SMALL BRUSHED TIN|36|448 +Brand#23|SMALL BURNISHED NICKEL|3|448 +Brand#23|STANDARD ANODIZED NICKEL|45|448 +Brand#23|STANDARD BRUSHED STEEL|9|448 +Brand#23|STANDARD BRUSHED TIN|45|448 +Brand#23|STANDARD PLATED STEEL|45|448 +Brand#23|STANDARD POLISHED STEEL|45|448 +Brand#24|ECONOMY ANODIZED STEEL|23|448 +Brand#24|ECONOMY BURNISHED NICKEL|49|448 +Brand#24|ECONOMY BURNISHED STEEL|3|448 +Brand#24|ECONOMY PLATED COPPER|23|448 +Brand#24|ECONOMY POLISHED NICKEL|9|448 +Brand#24|ECONOMY POLISHED TIN|49|448 +Brand#24|LARGE ANODIZED STEEL|49|448 +Brand#24|LARGE ANODIZED TIN|14|448 +Brand#24|LARGE BRUSHED COPPER|49|448 +Brand#24|LARGE BURNISHED NICKEL|9|448 +Brand#24|LARGE PLATED COPPER|23|448 +Brand#24|MEDIUM BRUSHED BRASS|3|448 +Brand#24|MEDIUM BURNISHED STEEL|36|448 +Brand#24|MEDIUM PLATED BRASS|14|448 +Brand#24|MEDIUM PLATED STEEL|23|448 +Brand#24|PROMO ANODIZED COPPER|9|448 +Brand#24|PROMO ANODIZED TIN|45|448 +Brand#24|PROMO BRUSHED BRASS|23|448 +Brand#24|PROMO BRUSHED TIN|3|448 +Brand#24|PROMO POLISHED TIN|45|448 +Brand#24|SMALL BRUSHED BRASS|45|448 +Brand#24|SMALL BRUSHED COPPER|9|448 +Brand#24|SMALL PLATED BRASS|36|448 +Brand#24|SMALL PLATED TIN|45|448 +Brand#24|STANDARD ANODIZED BRASS|19|448 +Brand#24|STANDARD ANODIZED NICKEL|14|448 +Brand#24|STANDARD ANODIZED STEEL|19|448 +Brand#24|STANDARD ANODIZED STEEL|45|448 +Brand#24|STANDARD ANODIZED STEEL|49|448 +Brand#24|STANDARD BRUSHED COPPER|36|448 +Brand#24|STANDARD BRUSHED STEEL|45|448 +Brand#24|STANDARD BRUSHED TIN|9|448 +Brand#24|STANDARD BRUSHED TIN|49|448 +Brand#24|STANDARD BURNISHED NICKEL|49|448 +Brand#24|STANDARD BURNISHED STEEL|3|448 +Brand#24|STANDARD PLATED TIN|3|448 +Brand#25|ECONOMY ANODIZED COPPER|23|448 +Brand#25|ECONOMY BRUSHED TIN|9|448 +Brand#25|ECONOMY BURNISHED TIN|3|448 +Brand#25|ECONOMY PLATED BRASS|3|448 +Brand#25|ECONOMY PLATED NICKEL|9|448 +Brand#25|ECONOMY POLISHED BRASS|49|448 +Brand#25|ECONOMY POLISHED COPPER|49|448 +Brand#25|LARGE ANODIZED BRASS|49|448 +Brand#25|LARGE BRUSHED STEEL|49|448 +Brand#25|LARGE BRUSHED TIN|23|448 +Brand#25|LARGE BURNISHED COPPER|14|448 +Brand#25|LARGE BURNISHED NICKEL|45|448 +Brand#25|LARGE BURNISHED TIN|49|448 +Brand#25|LARGE POLISHED STEEL|19|448 +Brand#25|MEDIUM BRUSHED TIN|19|448 +Brand#25|MEDIUM BURNISHED NICKEL|36|448 +Brand#25|MEDIUM BURNISHED TIN|23|448 +Brand#25|MEDIUM PLATED BRASS|14|448 +Brand#25|PROMO ANODIZED COPPER|14|448 +Brand#25|PROMO ANODIZED NICKEL|14|448 +Brand#25|PROMO ANODIZED TIN|14|448 +Brand#25|PROMO ANODIZED TIN|49|448 +Brand#25|PROMO BRUSHED BRASS|3|448 +Brand#25|PROMO BRUSHED TIN|19|448 +Brand#25|SMALL ANODIZED COPPER|3|448 +Brand#25|SMALL ANODIZED TIN|14|448 +Brand#25|SMALL BURNISHED STEEL|45|448 +Brand#25|SMALL POLISHED STEEL|9|448 +Brand#25|STANDARD ANODIZED COPPER|3|448 +Brand#25|STANDARD ANODIZED STEEL|14|448 +Brand#25|STANDARD BURNISHED COPPER|14|448 +Brand#25|STANDARD BURNISHED STEEL|9|448 +Brand#25|STANDARD PLATED BRASS|9|448 +Brand#25|STANDARD POLISHED NICKEL|23|448 +Brand#25|STANDARD POLISHED NICKEL|49|448 +Brand#25|STANDARD POLISHED STEEL|45|448 +Brand#31|ECONOMY ANODIZED COPPER|49|448 +Brand#31|ECONOMY BRUSHED STEEL|19|448 +Brand#31|ECONOMY BURNISHED STEEL|9|448 +Brand#31|ECONOMY PLATED NICKEL|19|448 +Brand#31|ECONOMY PLATED STEEL|19|448 +Brand#31|ECONOMY PLATED TIN|14|448 +Brand#31|ECONOMY POLISHED COPPER|19|448 +Brand#31|LARGE ANODIZED STEEL|49|448 +Brand#31|LARGE BRUSHED NICKEL|3|448 +Brand#31|LARGE BRUSHED NICKEL|36|448 +Brand#31|LARGE BRUSHED TIN|9|448 +Brand#31|LARGE BURNISHED STEEL|9|448 +Brand#31|LARGE POLISHED STEEL|9|448 +Brand#31|MEDIUM ANODIZED STEEL|19|448 +Brand#31|PROMO BRUSHED COPPER|36|448 +Brand#31|PROMO BURNISHED NICKEL|45|448 +Brand#31|PROMO PLATED BRASS|23|448 +Brand#31|PROMO POLISHED BRASS|36|448 +Brand#31|SMALL BURNISHED STEEL|45|448 +Brand#31|SMALL POLISHED BRASS|9|448 +Brand#31|SMALL POLISHED NICKEL|3|448 +Brand#31|STANDARD BURNISHED NICKEL|19|448 +Brand#31|STANDARD BURNISHED STEEL|19|448 +Brand#32|ECONOMY ANODIZED BRASS|23|448 +Brand#32|ECONOMY PLATED TIN|3|448 +Brand#32|ECONOMY POLISHED STEEL|19|448 +Brand#32|LARGE PLATED COPPER|3|448 +Brand#32|LARGE PLATED TIN|45|448 +Brand#32|LARGE POLISHED STEEL|9|448 +Brand#32|MEDIUM ANODIZED STEEL|3|448 +Brand#32|MEDIUM BRUSHED BRASS|36|448 +Brand#32|MEDIUM BRUSHED STEEL|23|448 +Brand#32|MEDIUM PLATED BRASS|14|448 +Brand#32|MEDIUM PLATED TIN|36|448 +Brand#32|PROMO ANODIZED BRASS|49|448 +Brand#32|PROMO BURNISHED BRASS|14|448 +Brand#32|PROMO BURNISHED BRASS|23|448 +Brand#32|PROMO BURNISHED TIN|36|448 +Brand#32|PROMO PLATED STEEL|9|448 +Brand#32|SMALL ANODIZED COPPER|45|448 +Brand#32|SMALL BRUSHED TIN|9|448 +Brand#32|SMALL BURNISHED STEEL|3|448 +Brand#32|SMALL POLISHED COPPER|14|448 +Brand#32|SMALL POLISHED NICKEL|3|448 +Brand#32|STANDARD BRUSHED STEEL|3|448 +Brand#32|STANDARD BRUSHED STEEL|9|448 +Brand#32|STANDARD BURNISHED BRASS|36|448 +Brand#32|STANDARD PLATED NICKEL|14|448 +Brand#32|STANDARD PLATED TIN|45|448 +Brand#32|STANDARD POLISHED NICKEL|3|448 +Brand#32|STANDARD POLISHED NICKEL|14|448 +Brand#33|ECONOMY BRUSHED COPPER|19|448 +Brand#33|ECONOMY BURNISHED COPPER|36|448 +Brand#33|ECONOMY BURNISHED STEEL|19|448 +Brand#33|ECONOMY POLISHED COPPER|45|448 +Brand#33|ECONOMY POLISHED TIN|3|448 +Brand#33|LARGE BRUSHED TIN|49|448 +Brand#33|MEDIUM ANODIZED COPPER|3|448 +Brand#33|MEDIUM PLATED COPPER|23|448 +Brand#33|PROMO ANODIZED COPPER|19|448 +Brand#33|PROMO BRUSHED BRASS|14|448 +Brand#33|PROMO BRUSHED TIN|3|448 +Brand#33|PROMO BURNISHED COPPER|3|448 +Brand#33|PROMO BURNISHED STEEL|3|448 +Brand#33|PROMO BURNISHED TIN|36|448 +Brand#33|PROMO PLATED COPPER|19|448 +Brand#33|SMALL BRUSHED STEEL|9|448 +Brand#33|SMALL BURNISHED NICKEL|23|448 +Brand#33|SMALL POLISHED BRASS|45|448 +Brand#33|SMALL POLISHED NICKEL|23|448 +Brand#33|STANDARD ANODIZED COPPER|9|448 +Brand#33|STANDARD ANODIZED NICKEL|45|448 +Brand#33|STANDARD BRUSHED BRASS|36|448 +Brand#33|STANDARD BRUSHED COPPER|14|448 +Brand#33|STANDARD BRUSHED TIN|3|448 +Brand#33|STANDARD PLATED BRASS|3|448 +Brand#33|STANDARD PLATED STEEL|3|448 +Brand#33|STANDARD POLISHED COPPER|49|448 +Brand#34|ECONOMY BURNISHED NICKEL|36|448 +Brand#34|ECONOMY PLATED COPPER|14|448 +Brand#34|ECONOMY POLISHED STEEL|23|448 +Brand#34|LARGE ANODIZED COPPER|3|448 +Brand#34|LARGE ANODIZED NICKEL|23|448 +Brand#34|LARGE ANODIZED STEEL|19|448 +Brand#34|LARGE ANODIZED TIN|19|448 +Brand#34|LARGE BRUSHED COPPER|23|448 +Brand#34|LARGE PLATED BRASS|36|448 +Brand#34|LARGE PLATED STEEL|45|448 +Brand#34|LARGE POLISHED COPPER|19|448 +Brand#34|MEDIUM BURNISHED STEEL|19|448 +Brand#34|MEDIUM BURNISHED TIN|14|448 +Brand#34|MEDIUM PLATED COPPER|3|448 +Brand#34|MEDIUM PLATED STEEL|45|448 +Brand#34|PROMO PLATED COPPER|49|448 +Brand#34|PROMO PLATED STEEL|49|448 +Brand#34|PROMO POLISHED NICKEL|9|448 +Brand#34|SMALL BRUSHED TIN|23|448 +Brand#34|SMALL BURNISHED NICKEL|23|448 +Brand#34|STANDARD ANODIZED NICKEL|14|448 +Brand#34|STANDARD BURNISHED COPPER|9|448 +Brand#34|STANDARD BURNISHED NICKEL|9|448 +Brand#34|STANDARD PLATED COPPER|45|448 +Brand#34|STANDARD PLATED TIN|9|448 +Brand#34|STANDARD POLISHED COPPER|3|448 +Brand#35|ECONOMY BRUSHED NICKEL|45|448 +Brand#35|ECONOMY BRUSHED STEEL|36|448 +Brand#35|ECONOMY BRUSHED TIN|49|448 +Brand#35|ECONOMY BURNISHED COPPER|19|448 +Brand#35|LARGE ANODIZED TIN|3|448 +Brand#35|LARGE BURNISHED NICKEL|23|448 +Brand#35|LARGE BURNISHED NICKEL|36|448 +Brand#35|LARGE BURNISHED STEEL|3|448 +Brand#35|LARGE POLISHED TIN|9|448 +Brand#35|LARGE POLISHED TIN|19|448 +Brand#35|MEDIUM ANODIZED COPPER|9|448 +Brand#35|MEDIUM BRUSHED NICKEL|14|448 +Brand#35|MEDIUM BURNISHED COPPER|9|448 +Brand#35|PROMO ANODIZED TIN|23|448 +Brand#35|PROMO BRUSHED COPPER|23|448 +Brand#35|PROMO BURNISHED COPPER|3|448 +Brand#35|PROMO PLATED COPPER|14|448 +Brand#35|PROMO POLISHED TIN|23|448 +Brand#35|SMALL ANODIZED STEEL|19|448 +Brand#35|SMALL ANODIZED STEEL|49|448 +Brand#35|SMALL BURNISHED NICKEL|49|448 +Brand#35|SMALL PLATED STEEL|23|448 +Brand#35|SMALL POLISHED STEEL|36|448 +Brand#35|STANDARD BRUSHED BRASS|45|448 +Brand#35|STANDARD BRUSHED COPPER|3|448 +Brand#35|STANDARD BRUSHED TIN|19|448 +Brand#35|STANDARD BURNISHED COPPER|19|448 +Brand#41|ECONOMY BRUSHED COPPER|14|448 +Brand#41|ECONOMY BRUSHED NICKEL|3|448 +Brand#41|ECONOMY BURNISHED BRASS|23|448 +Brand#41|ECONOMY BURNISHED COPPER|9|448 +Brand#41|ECONOMY PLATED BRASS|14|448 +Brand#41|ECONOMY PLATED TIN|3|448 +Brand#41|ECONOMY POLISHED NICKEL|19|448 +Brand#41|ECONOMY POLISHED NICKEL|23|448 +Brand#41|LARGE ANODIZED COPPER|36|448 +Brand#41|LARGE ANODIZED STEEL|14|448 +Brand#41|LARGE BRUSHED TIN|19|448 +Brand#41|LARGE BURNISHED BRASS|49|448 +Brand#41|LARGE POLISHED BRASS|45|448 +Brand#41|MEDIUM ANODIZED NICKEL|23|448 +Brand#41|MEDIUM PLATED NICKEL|19|448 +Brand#41|MEDIUM PLATED STEEL|19|448 +Brand#41|MEDIUM PLATED TIN|49|448 +Brand#41|PROMO BURNISHED BRASS|23|448 +Brand#41|PROMO BURNISHED COPPER|36|448 +Brand#41|PROMO PLATED NICKEL|14|448 +Brand#41|PROMO PLATED TIN|49|448 +Brand#41|SMALL ANODIZED BRASS|45|448 +Brand#41|SMALL BRUSHED NICKEL|23|448 +Brand#41|SMALL BRUSHED TIN|3|448 +Brand#41|SMALL BURNISHED BRASS|45|448 +Brand#41|SMALL POLISHED COPPER|45|448 +Brand#41|SMALL POLISHED STEEL|36|448 +Brand#41|STANDARD BURNISHED BRASS|36|448 +Brand#41|STANDARD BURNISHED STEEL|9|448 +Brand#41|STANDARD BURNISHED STEEL|23|448 +Brand#41|STANDARD POLISHED TIN|9|448 +Brand#42|ECONOMY ANODIZED STEEL|19|448 +Brand#42|ECONOMY BURNISHED COPPER|49|448 +Brand#42|ECONOMY PLATED TIN|36|448 +Brand#42|ECONOMY PLATED TIN|45|448 +Brand#42|ECONOMY POLISHED NICKEL|9|448 +Brand#42|LARGE ANODIZED BRASS|23|448 +Brand#42|LARGE BURNISHED STEEL|3|448 +Brand#42|LARGE PLATED NICKEL|3|448 +Brand#42|LARGE POLISHED BRASS|45|448 +Brand#42|MEDIUM ANODIZED COPPER|45|448 +Brand#42|MEDIUM BRUSHED STEEL|3|448 +Brand#42|MEDIUM BURNISHED NICKEL|19|448 +Brand#42|MEDIUM PLATED TIN|9|448 +Brand#42|PROMO ANODIZED BRASS|14|448 +Brand#42|PROMO BURNISHED TIN|49|448 +Brand#42|PROMO POLISHED COPPER|14|448 +Brand#42|PROMO POLISHED STEEL|3|448 +Brand#42|SMALL ANODIZED TIN|19|448 +Brand#42|SMALL BRUSHED BRASS|9|448 +Brand#42|SMALL BURNISHED COPPER|49|448 +Brand#42|SMALL BURNISHED NICKEL|36|448 +Brand#42|SMALL BURNISHED STEEL|14|448 +Brand#42|SMALL POLISHED BRASS|23|448 +Brand#42|SMALL POLISHED COPPER|14|448 +Brand#42|STANDARD ANODIZED BRASS|3|448 +Brand#42|STANDARD ANODIZED TIN|19|448 +Brand#42|STANDARD BURNISHED BRASS|36|448 +Brand#42|STANDARD BURNISHED TIN|49|448 +Brand#42|STANDARD POLISHED STEEL|49|448 +Brand#42|STANDARD POLISHED TIN|19|448 +Brand#43|ECONOMY ANODIZED BRASS|19|448 +Brand#43|ECONOMY BRUSHED STEEL|49|448 +Brand#43|ECONOMY BURNISHED COPPER|45|448 +Brand#43|ECONOMY PLATED TIN|19|448 +Brand#43|ECONOMY POLISHED STEEL|36|448 +Brand#43|LARGE ANODIZED NICKEL|14|448 +Brand#43|LARGE ANODIZED STEEL|3|448 +Brand#43|LARGE PLATED BRASS|36|448 +Brand#43|LARGE PLATED COPPER|23|448 +Brand#43|LARGE POLISHED BRASS|49|448 +Brand#43|LARGE POLISHED COPPER|49|448 +Brand#43|LARGE POLISHED NICKEL|3|448 +Brand#43|MEDIUM ANODIZED STEEL|14|448 +Brand#43|MEDIUM BRUSHED BRASS|36|448 +Brand#43|MEDIUM BRUSHED STEEL|3|448 +Brand#43|MEDIUM BRUSHED TIN|49|448 +Brand#43|PROMO ANODIZED COPPER|9|448 +Brand#43|PROMO ANODIZED STEEL|9|448 +Brand#43|PROMO ANODIZED STEEL|45|448 +Brand#43|PROMO BURNISHED STEEL|45|448 +Brand#43|PROMO PLATED BRASS|19|448 +Brand#43|PROMO PLATED TIN|14|448 +Brand#43|PROMO PLATED TIN|23|448 +Brand#43|PROMO POLISHED COPPER|14|448 +Brand#43|PROMO POLISHED STEEL|45|448 +Brand#43|SMALL ANODIZED COPPER|9|448 +Brand#43|SMALL ANODIZED STEEL|3|448 +Brand#43|SMALL BRUSHED COPPER|23|448 +Brand#43|SMALL BRUSHED STEEL|9|448 +Brand#43|SMALL BURNISHED STEEL|23|448 +Brand#43|SMALL BURNISHED TIN|3|448 +Brand#43|STANDARD BURNISHED BRASS|45|448 +Brand#43|STANDARD PLATED COPPER|14|448 +Brand#43|STANDARD PLATED COPPER|45|448 +Brand#43|STANDARD POLISHED COPPER|3|448 +Brand#43|STANDARD POLISHED NICKEL|14|448 +Brand#44|ECONOMY ANODIZED COPPER|49|448 +Brand#44|ECONOMY ANODIZED STEEL|45|448 +Brand#44|ECONOMY BURNISHED COPPER|3|448 +Brand#44|ECONOMY BURNISHED COPPER|49|448 +Brand#44|ECONOMY POLISHED COPPER|3|448 +Brand#44|ECONOMY POLISHED TIN|23|448 +Brand#44|MEDIUM ANODIZED BRASS|19|448 +Brand#44|MEDIUM ANODIZED BRASS|45|448 +Brand#44|MEDIUM ANODIZED STEEL|9|448 +Brand#44|MEDIUM BRUSHED BRASS|49|448 +Brand#44|MEDIUM BRUSHED TIN|45|448 +Brand#44|MEDIUM PLATED STEEL|23|448 +Brand#44|PROMO PLATED TIN|9|448 +Brand#44|PROMO POLISHED TIN|9|448 +Brand#44|SMALL ANODIZED BRASS|45|448 +Brand#44|SMALL BRUSHED TIN|45|448 +Brand#44|SMALL BURNISHED NICKEL|3|448 +Brand#44|SMALL PLATED TIN|49|448 +Brand#44|STANDARD BRUSHED NICKEL|49|448 +Brand#44|STANDARD BURNISHED BRASS|14|448 +Brand#44|STANDARD BURNISHED TIN|49|448 +Brand#44|STANDARD PLATED BRASS|23|448 +Brand#44|STANDARD PLATED COPPER|19|448 +Brand#44|STANDARD PLATED NICKEL|19|448 +Brand#44|STANDARD PLATED STEEL|14|448 +Brand#44|STANDARD PLATED TIN|36|448 +Brand#44|STANDARD POLISHED NICKEL|23|448 +Brand#51|ECONOMY BRUSHED STEEL|23|448 +Brand#51|ECONOMY PLATED NICKEL|36|448 +Brand#51|ECONOMY POLISHED NICKEL|9|448 +Brand#51|ECONOMY POLISHED NICKEL|19|448 +Brand#51|LARGE ANODIZED COPPER|3|448 +Brand#51|LARGE ANODIZED NICKEL|49|448 +Brand#51|LARGE ANODIZED STEEL|9|448 +Brand#51|LARGE BRUSHED BRASS|3|448 +Brand#51|LARGE BURNISHED TIN|45|448 +Brand#51|LARGE PLATED COPPER|49|448 +Brand#51|LARGE POLISHED TIN|3|448 +Brand#51|MEDIUM ANODIZED NICKEL|45|448 +Brand#51|MEDIUM ANODIZED TIN|3|448 +Brand#51|MEDIUM ANODIZED TIN|23|448 +Brand#51|MEDIUM BURNISHED NICKEL|9|448 +Brand#51|MEDIUM PLATED NICKEL|3|448 +Brand#51|PROMO BRUSHED TIN|23|448 +Brand#51|PROMO BURNISHED NICKEL|9|448 +Brand#51|PROMO PLATED STEEL|3|448 +Brand#51|PROMO POLISHED NICKEL|45|448 +Brand#51|PROMO POLISHED TIN|14|448 +Brand#51|SMALL BRUSHED BRASS|14|448 +Brand#51|SMALL POLISHED BRASS|45|448 +Brand#51|SMALL POLISHED COPPER|19|448 +Brand#51|STANDARD PLATED STEEL|9|448 +Brand#51|STANDARD POLISHED STEEL|9|448 +Brand#52|ECONOMY ANODIZED NICKEL|49|448 +Brand#52|ECONOMY ANODIZED TIN|3|448 +Brand#52|ECONOMY BRUSHED COPPER|36|448 +Brand#52|ECONOMY PLATED COPPER|23|448 +Brand#52|ECONOMY PLATED TIN|14|448 +Brand#52|LARGE BURNISHED NICKEL|49|448 +Brand#52|LARGE BURNISHED TIN|23|448 +Brand#52|LARGE POLISHED NICKEL|23|448 +Brand#52|MEDIUM BRUSHED BRASS|36|448 +Brand#52|MEDIUM BURNISHED BRASS|49|448 +Brand#52|MEDIUM PLATED BRASS|9|448 +Brand#52|MEDIUM PLATED COPPER|45|448 +Brand#52|PROMO BRUSHED COPPER|3|448 +Brand#52|PROMO BURNISHED COPPER|14|448 +Brand#52|PROMO BURNISHED STEEL|36|448 +Brand#52|PROMO PLATED COPPER|36|448 +Brand#52|PROMO PLATED TIN|45|448 +Brand#52|PROMO POLISHED NICKEL|23|448 +Brand#52|SMALL BURNISHED NICKEL|45|448 +Brand#52|SMALL BURNISHED TIN|14|448 +Brand#52|STANDARD ANODIZED NICKEL|14|448 +Brand#52|STANDARD BRUSHED BRASS|49|448 +Brand#52|STANDARD BURNISHED BRASS|36|448 +Brand#52|STANDARD BURNISHED COPPER|36|448 +Brand#52|STANDARD BURNISHED NICKEL|49|448 +Brand#52|STANDARD PLATED BRASS|3|448 +Brand#52|STANDARD POLISHED BRASS|9|448 +Brand#53|ECONOMY PLATED COPPER|49|448 +Brand#53|ECONOMY POLISHED COPPER|3|448 +Brand#53|LARGE ANODIZED TIN|23|448 +Brand#53|LARGE BURNISHED STEEL|23|448 +Brand#53|LARGE PLATED COPPER|3|448 +Brand#53|MEDIUM BRUSHED BRASS|45|448 +Brand#53|MEDIUM BURNISHED BRASS|36|448 +Brand#53|MEDIUM BURNISHED TIN|49|448 +Brand#53|MEDIUM PLATED COPPER|3|448 +Brand#53|PROMO ANODIZED COPPER|9|448 +Brand#53|PROMO ANODIZED TIN|23|448 +Brand#53|PROMO PLATED NICKEL|23|448 +Brand#53|PROMO PLATED STEEL|19|448 +Brand#53|PROMO POLISHED STEEL|36|448 +Brand#53|SMALL BRUSHED TIN|3|448 +Brand#53|SMALL BRUSHED TIN|49|448 +Brand#53|SMALL BURNISHED BRASS|3|448 +Brand#53|SMALL BURNISHED STEEL|45|448 +Brand#53|STANDARD ANODIZED NICKEL|9|448 +Brand#53|STANDARD POLISHED NICKEL|14|448 +Brand#54|ECONOMY ANODIZED COPPER|3|448 +Brand#54|ECONOMY BRUSHED BRASS|9|448 +Brand#54|ECONOMY BRUSHED NICKEL|23|448 +Brand#54|ECONOMY BRUSHED TIN|49|448 +Brand#54|ECONOMY PLATED BRASS|3|448 +Brand#54|ECONOMY POLISHED COPPER|23|448 +Brand#54|ECONOMY POLISHED NICKEL|9|448 +Brand#54|LARGE ANODIZED TIN|14|448 +Brand#54|LARGE BRUSHED NICKEL|3|448 +Brand#54|LARGE BURNISHED BRASS|36|448 +Brand#54|LARGE PLATED NICKEL|45|448 +Brand#54|LARGE POLISHED TIN|9|448 +Brand#54|MEDIUM ANODIZED COPPER|3|448 +Brand#54|MEDIUM ANODIZED COPPER|36|448 +Brand#54|PROMO ANODIZED TIN|3|448 +Brand#54|PROMO BURNISHED STEEL|3|448 +Brand#54|SMALL ANODIZED STEEL|45|448 +Brand#54|SMALL BRUSHED NICKEL|9|448 +Brand#54|SMALL POLISHED BRASS|3|448 +Brand#54|SMALL POLISHED BRASS|14|448 +Brand#54|SMALL POLISHED BRASS|19|448 +Brand#54|SMALL POLISHED STEEL|36|448 +Brand#54|STANDARD BRUSHED TIN|36|448 +Brand#54|STANDARD PLATED STEEL|14|448 +Brand#54|STANDARD PLATED TIN|19|448 +Brand#55|ECONOMY ANODIZED BRASS|14|448 +Brand#55|ECONOMY ANODIZED STEEL|3|448 +Brand#55|ECONOMY PLATED NICKEL|19|448 +Brand#55|ECONOMY POLISHED BRASS|3|448 +Brand#55|LARGE ANODIZED BRASS|36|448 +Brand#55|LARGE PLATED BRASS|23|448 +Brand#55|LARGE PLATED TIN|49|448 +Brand#55|LARGE POLISHED COPPER|49|448 +Brand#55|MEDIUM ANODIZED STEEL|19|448 +Brand#55|MEDIUM ANODIZED TIN|45|448 +Brand#55|PROMO BURNISHED STEEL|23|448 +Brand#55|PROMO POLISHED TIN|45|448 +Brand#55|SMALL ANODIZED COPPER|9|448 +Brand#55|SMALL ANODIZED NICKEL|19|448 +Brand#55|SMALL ANODIZED TIN|19|448 +Brand#55|SMALL BRUSHED NICKEL|9|448 +Brand#55|SMALL BURNISHED COPPER|9|448 +Brand#55|SMALL BURNISHED NICKEL|45|448 +Brand#55|SMALL POLISHED NICKEL|45|448 +Brand#55|STANDARD ANODIZED TIN|9|448 +Brand#55|STANDARD BRUSHED NICKEL|36|448 +Brand#55|STANDARD POLISHED BRASS|36|448 +Brand#11|LARGE ANODIZED STEEL|14|447 +Brand#11|LARGE BURNISHED TIN|23|447 +Brand#11|MEDIUM BRUSHED BRASS|3|447 +Brand#11|MEDIUM BRUSHED BRASS|45|447 +Brand#11|MEDIUM PLATED STEEL|23|447 +Brand#11|SMALL ANODIZED TIN|19|447 +Brand#11|SMALL BURNISHED BRASS|19|447 +Brand#11|SMALL PLATED TIN|23|447 +Brand#11|SMALL POLISHED BRASS|3|447 +Brand#11|STANDARD BRUSHED TIN|14|447 +Brand#12|ECONOMY BURNISHED COPPER|14|447 +Brand#12|ECONOMY PLATED TIN|19|447 +Brand#12|MEDIUM BRUSHED TIN|45|447 +Brand#12|PROMO BRUSHED TIN|36|447 +Brand#12|PROMO BURNISHED STEEL|45|447 +Brand#12|PROMO PLATED BRASS|9|447 +Brand#12|SMALL BURNISHED BRASS|23|447 +Brand#12|STANDARD ANODIZED COPPER|23|447 +Brand#12|STANDARD ANODIZED TIN|9|447 +Brand#12|STANDARD PLATED TIN|19|447 +Brand#13|LARGE ANODIZED COPPER|14|447 +Brand#13|LARGE ANODIZED TIN|36|447 +Brand#13|MEDIUM ANODIZED STEEL|36|447 +Brand#13|PROMO ANODIZED NICKEL|3|447 +Brand#13|PROMO POLISHED COPPER|49|447 +Brand#13|SMALL BURNISHED COPPER|49|447 +Brand#14|ECONOMY ANODIZED BRASS|36|447 +Brand#14|LARGE POLISHED COPPER|14|447 +Brand#14|MEDIUM BRUSHED STEEL|23|447 +Brand#14|MEDIUM BURNISHED NICKEL|19|447 +Brand#14|PROMO ANODIZED TIN|49|447 +Brand#14|PROMO BRUSHED STEEL|45|447 +Brand#14|PROMO BURNISHED STEEL|49|447 +Brand#14|SMALL BRUSHED COPPER|49|447 +Brand#15|ECONOMY BRUSHED BRASS|19|447 +Brand#15|MEDIUM PLATED BRASS|9|447 +Brand#15|MEDIUM PLATED STEEL|19|447 +Brand#15|SMALL BRUSHED BRASS|19|447 +Brand#15|SMALL BURNISHED TIN|23|447 +Brand#15|STANDARD BRUSHED NICKEL|49|447 +Brand#15|STANDARD PLATED STEEL|19|447 +Brand#21|ECONOMY ANODIZED STEEL|9|447 +Brand#21|ECONOMY BRUSHED BRASS|14|447 +Brand#21|ECONOMY PLATED STEEL|49|447 +Brand#21|SMALL BRUSHED COPPER|3|447 +Brand#21|STANDARD POLISHED COPPER|36|447 +Brand#22|ECONOMY POLISHED TIN|23|447 +Brand#22|ECONOMY POLISHED TIN|49|447 +Brand#22|LARGE BRUSHED COPPER|9|447 +Brand#22|MEDIUM ANODIZED BRASS|19|447 +Brand#22|MEDIUM BRUSHED TIN|3|447 +Brand#22|PROMO ANODIZED NICKEL|14|447 +Brand#22|PROMO ANODIZED TIN|36|447 +Brand#22|PROMO PLATED NICKEL|36|447 +Brand#22|SMALL BRUSHED COPPER|23|447 +Brand#22|STANDARD POLISHED STEEL|23|447 +Brand#23|ECONOMY BURNISHED TIN|3|447 +Brand#23|ECONOMY PLATED TIN|23|447 +Brand#23|LARGE PLATED COPPER|23|447 +Brand#23|MEDIUM PLATED STEEL|19|447 +Brand#23|PROMO BURNISHED NICKEL|9|447 +Brand#23|SMALL BRUSHED BRASS|19|447 +Brand#23|SMALL BURNISHED STEEL|3|447 +Brand#23|SMALL POLISHED NICKEL|23|447 +Brand#23|STANDARD PLATED STEEL|49|447 +Brand#24|ECONOMY BRUSHED BRASS|23|447 +Brand#24|LARGE PLATED STEEL|23|447 +Brand#24|MEDIUM PLATED NICKEL|19|447 +Brand#24|PROMO ANODIZED COPPER|3|447 +Brand#24|PROMO BRUSHED BRASS|3|447 +Brand#24|SMALL BURNISHED COPPER|23|447 +Brand#24|STANDARD BURNISHED STEEL|49|447 +Brand#24|STANDARD PLATED NICKEL|49|447 +Brand#25|LARGE BRUSHED STEEL|9|447 +Brand#25|MEDIUM ANODIZED STEEL|45|447 +Brand#25|PROMO POLISHED NICKEL|3|447 +Brand#25|SMALL PLATED TIN|45|447 +Brand#31|LARGE ANODIZED TIN|23|447 +Brand#31|PROMO PLATED STEEL|14|447 +Brand#31|SMALL BRUSHED COPPER|49|447 +Brand#31|STANDARD BRUSHED BRASS|45|447 +Brand#31|STANDARD POLISHED COPPER|3|447 +Brand#32|ECONOMY BRUSHED STEEL|45|447 +Brand#32|ECONOMY BURNISHED NICKEL|19|447 +Brand#32|ECONOMY PLATED NICKEL|14|447 +Brand#32|LARGE ANODIZED STEEL|14|447 +Brand#32|LARGE PLATED TIN|19|447 +Brand#32|MEDIUM BURNISHED BRASS|36|447 +Brand#32|MEDIUM BURNISHED STEEL|45|447 +Brand#32|PROMO BURNISHED NICKEL|19|447 +Brand#32|SMALL BRUSHED COPPER|14|447 +Brand#32|SMALL POLISHED COPPER|23|447 +Brand#32|SMALL POLISHED NICKEL|45|447 +Brand#32|STANDARD BRUSHED STEEL|14|447 +Brand#32|STANDARD BURNISHED BRASS|23|447 +Brand#32|STANDARD POLISHED BRASS|36|447 +Brand#33|ECONOMY ANODIZED COPPER|3|447 +Brand#33|ECONOMY BRUSHED BRASS|23|447 +Brand#33|ECONOMY BURNISHED TIN|14|447 +Brand#33|MEDIUM PLATED STEEL|49|447 +Brand#33|PROMO POLISHED COPPER|3|447 +Brand#33|SMALL BURNISHED BRASS|3|447 +Brand#33|SMALL BURNISHED STEEL|9|447 +Brand#33|STANDARD ANODIZED COPPER|49|447 +Brand#34|LARGE PLATED BRASS|23|447 +Brand#34|MEDIUM PLATED TIN|19|447 +Brand#34|SMALL ANODIZED COPPER|9|447 +Brand#34|SMALL BRUSHED NICKEL|49|447 +Brand#34|STANDARD ANODIZED COPPER|36|447 +Brand#35|ECONOMY BRUSHED BRASS|49|447 +Brand#35|MEDIUM ANODIZED STEEL|14|447 +Brand#35|PROMO ANODIZED NICKEL|9|447 +Brand#35|PROMO ANODIZED TIN|19|447 +Brand#35|PROMO BURNISHED BRASS|14|447 +Brand#35|STANDARD ANODIZED COPPER|36|447 +Brand#35|STANDARD BURNISHED TIN|23|447 +Brand#35|STANDARD PLATED BRASS|19|447 +Brand#35|STANDARD POLISHED BRASS|45|447 +Brand#41|ECONOMY ANODIZED BRASS|3|447 +Brand#41|LARGE ANODIZED COPPER|14|447 +Brand#41|LARGE ANODIZED STEEL|36|447 +Brand#41|PROMO PLATED STEEL|45|447 +Brand#41|PROMO POLISHED STEEL|9|447 +Brand#41|SMALL POLISHED BRASS|23|447 +Brand#41|STANDARD BRUSHED STEEL|3|447 +Brand#42|ECONOMY BURNISHED COPPER|36|447 +Brand#42|ECONOMY PLATED TIN|49|447 +Brand#42|LARGE ANODIZED STEEL|9|447 +Brand#42|MEDIUM BRUSHED BRASS|23|447 +Brand#42|MEDIUM BURNISHED STEEL|14|447 +Brand#42|MEDIUM PLATED COPPER|19|447 +Brand#42|MEDIUM PLATED NICKEL|45|447 +Brand#42|PROMO ANODIZED BRASS|45|447 +Brand#42|PROMO BURNISHED TIN|19|447 +Brand#42|PROMO PLATED BRASS|49|447 +Brand#42|PROMO POLISHED NICKEL|3|447 +Brand#42|SMALL ANODIZED TIN|49|447 +Brand#42|SMALL BURNISHED STEEL|19|447 +Brand#42|STANDARD BRUSHED BRASS|9|447 +Brand#42|STANDARD PLATED TIN|3|447 +Brand#42|STANDARD PLATED TIN|14|447 +Brand#42|STANDARD POLISHED TIN|45|447 +Brand#43|ECONOMY ANODIZED NICKEL|14|447 +Brand#43|ECONOMY BURNISHED NICKEL|3|447 +Brand#43|LARGE PLATED COPPER|9|447 +Brand#43|MEDIUM ANODIZED COPPER|36|447 +Brand#43|MEDIUM BRUSHED COPPER|19|447 +Brand#43|MEDIUM BURNISHED COPPER|36|447 +Brand#43|MEDIUM PLATED NICKEL|45|447 +Brand#43|MEDIUM PLATED TIN|19|447 +Brand#43|PROMO PLATED COPPER|23|447 +Brand#43|SMALL PLATED NICKEL|14|447 +Brand#43|STANDARD BRUSHED STEEL|49|447 +Brand#43|STANDARD POLISHED NICKEL|19|447 +Brand#44|LARGE PLATED TIN|3|447 +Brand#44|MEDIUM PLATED STEEL|49|447 +Brand#44|PROMO PLATED TIN|3|447 +Brand#44|PROMO PLATED TIN|49|447 +Brand#44|PROMO POLISHED TIN|19|447 +Brand#44|STANDARD BRUSHED NICKEL|45|447 +Brand#44|STANDARD PLATED STEEL|3|447 +Brand#51|ECONOMY BRUSHED BRASS|19|447 +Brand#51|ECONOMY PLATED COPPER|9|447 +Brand#51|ECONOMY POLISHED TIN|36|447 +Brand#51|MEDIUM ANODIZED COPPER|3|447 +Brand#51|MEDIUM BURNISHED BRASS|45|447 +Brand#51|STANDARD BRUSHED TIN|3|447 +Brand#51|STANDARD POLISHED COPPER|3|447 +Brand#51|STANDARD POLISHED NICKEL|36|447 +Brand#52|ECONOMY BRUSHED TIN|3|447 +Brand#52|ECONOMY PLATED NICKEL|3|447 +Brand#52|LARGE PLATED TIN|36|447 +Brand#52|PROMO ANODIZED COPPER|3|447 +Brand#52|PROMO POLISHED BRASS|9|447 +Brand#52|SMALL POLISHED NICKEL|3|447 +Brand#52|STANDARD BURNISHED BRASS|45|447 +Brand#53|ECONOMY BURNISHED COPPER|14|447 +Brand#53|LARGE BURNISHED COPPER|3|447 +Brand#53|LARGE PLATED COPPER|19|447 +Brand#53|LARGE POLISHED BRASS|9|447 +Brand#53|LARGE POLISHED BRASS|49|447 +Brand#53|MEDIUM ANODIZED STEEL|49|447 +Brand#53|MEDIUM BRUSHED COPPER|45|447 +Brand#53|MEDIUM BRUSHED COPPER|49|447 +Brand#53|MEDIUM BURNISHED COPPER|19|447 +Brand#53|PROMO BURNISHED TIN|49|447 +Brand#53|PROMO POLISHED BRASS|3|447 +Brand#53|PROMO POLISHED TIN|3|447 +Brand#53|SMALL ANODIZED STEEL|9|447 +Brand#53|STANDARD PLATED COPPER|49|447 +Brand#54|ECONOMY PLATED TIN|19|447 +Brand#54|LARGE BRUSHED STEEL|23|447 +Brand#54|LARGE BURNISHED STEEL|3|447 +Brand#54|LARGE POLISHED BRASS|45|447 +Brand#54|SMALL PLATED COPPER|3|447 +Brand#54|STANDARD BURNISHED COPPER|9|447 +Brand#55|LARGE BURNISHED NICKEL|3|447 +Brand#55|LARGE PLATED STEEL|36|447 +Brand#55|MEDIUM PLATED TIN|23|447 +Brand#55|SMALL POLISHED STEEL|19|447 +Brand#11|ECONOMY POLISHED STEEL|49|446 +Brand#11|ECONOMY POLISHED TIN|45|446 +Brand#11|PROMO PLATED STEEL|14|446 +Brand#12|ECONOMY BRUSHED NICKEL|19|446 +Brand#12|SMALL BRUSHED NICKEL|19|446 +Brand#12|SMALL PLATED COPPER|14|446 +Brand#15|LARGE BURNISHED COPPER|45|446 +Brand#21|SMALL BRUSHED BRASS|3|446 +Brand#21|STANDARD BURNISHED STEEL|45|446 +Brand#22|STANDARD BURNISHED NICKEL|19|446 +Brand#23|PROMO BURNISHED COPPER|49|446 +Brand#25|STANDARD PLATED STEEL|23|446 +Brand#25|STANDARD PLATED STEEL|36|446 +Brand#33|SMALL POLISHED COPPER|3|446 +Brand#34|ECONOMY POLISHED STEEL|45|446 +Brand#34|PROMO ANODIZED STEEL|36|446 +Brand#35|STANDARD BURNISHED TIN|9|446 +Brand#41|SMALL ANODIZED STEEL|23|446 +Brand#42|PROMO ANODIZED STEEL|19|446 +Brand#43|ECONOMY BURNISHED STEEL|19|446 +Brand#43|LARGE BURNISHED BRASS|14|446 +Brand#44|LARGE ANODIZED STEEL|3|446 +Brand#44|MEDIUM ANODIZED TIN|49|446 +Brand#44|SMALL BRUSHED COPPER|9|446 +Brand#44|SMALL BRUSHED NICKEL|9|446 +Brand#51|STANDARD BURNISHED BRASS|9|446 +Brand#54|ECONOMY POLISHED BRASS|9|446 +Brand#54|MEDIUM PLATED TIN|45|446 +Brand#55|LARGE PLATED NICKEL|36|446 +Brand#12|LARGE POLISHED STEEL|3|445 +Brand#15|MEDIUM ANODIZED COPPER|36|445 +Brand#24|PROMO POLISHED BRASS|49|445 +Brand#41|SMALL PLATED NICKEL|23|445 +Brand#55|PROMO PLATED NICKEL|3|445 +Brand#55|PROMO POLISHED NICKEL|3|445 +Brand#11|ECONOMY ANODIZED COPPER|3|444 +Brand#11|ECONOMY BRUSHED TIN|19|444 +Brand#11|ECONOMY BURNISHED NICKEL|49|444 +Brand#11|ECONOMY BURNISHED TIN|45|444 +Brand#11|LARGE ANODIZED TIN|45|444 +Brand#11|LARGE BURNISHED COPPER|45|444 +Brand#11|LARGE BURNISHED NICKEL|49|444 +Brand#11|LARGE BURNISHED TIN|3|444 +Brand#11|LARGE PLATED BRASS|49|444 +Brand#11|LARGE POLISHED BRASS|9|444 +Brand#11|LARGE POLISHED TIN|23|444 +Brand#11|MEDIUM ANODIZED BRASS|49|444 +Brand#11|MEDIUM ANODIZED COPPER|36|444 +Brand#11|MEDIUM BRUSHED STEEL|45|444 +Brand#11|MEDIUM BURNISHED COPPER|49|444 +Brand#11|MEDIUM BURNISHED TIN|23|444 +Brand#11|PROMO ANODIZED BRASS|14|444 +Brand#11|PROMO ANODIZED COPPER|23|444 +Brand#11|PROMO ANODIZED TIN|23|444 +Brand#11|PROMO BURNISHED STEEL|49|444 +Brand#11|PROMO BURNISHED TIN|49|444 +Brand#11|PROMO PLATED NICKEL|14|444 +Brand#11|PROMO PLATED STEEL|49|444 +Brand#11|SMALL ANODIZED TIN|3|444 +Brand#11|SMALL BRUSHED TIN|9|444 +Brand#11|SMALL BURNISHED NICKEL|14|444 +Brand#11|SMALL BURNISHED TIN|3|444 +Brand#11|SMALL BURNISHED TIN|19|444 +Brand#11|SMALL PLATED NICKEL|14|444 +Brand#11|SMALL POLISHED NICKEL|9|444 +Brand#11|SMALL POLISHED TIN|3|444 +Brand#11|STANDARD ANODIZED BRASS|36|444 +Brand#11|STANDARD ANODIZED STEEL|23|444 +Brand#11|STANDARD BRUSHED COPPER|14|444 +Brand#11|STANDARD BRUSHED STEEL|45|444 +Brand#11|STANDARD BURNISHED NICKEL|3|444 +Brand#11|STANDARD BURNISHED STEEL|19|444 +Brand#11|STANDARD BURNISHED STEEL|36|444 +Brand#11|STANDARD POLISHED STEEL|14|444 +Brand#11|STANDARD POLISHED STEEL|23|444 +Brand#12|ECONOMY ANODIZED BRASS|3|444 +Brand#12|ECONOMY ANODIZED BRASS|14|444 +Brand#12|ECONOMY BRUSHED BRASS|9|444 +Brand#12|ECONOMY BRUSHED BRASS|49|444 +Brand#12|ECONOMY BRUSHED TIN|49|444 +Brand#12|ECONOMY PLATED NICKEL|36|444 +Brand#12|ECONOMY POLISHED BRASS|23|444 +Brand#12|ECONOMY POLISHED COPPER|36|444 +Brand#12|LARGE BRUSHED COPPER|19|444 +Brand#12|LARGE BRUSHED NICKEL|3|444 +Brand#12|LARGE POLISHED BRASS|3|444 +Brand#12|MEDIUM ANODIZED COPPER|19|444 +Brand#12|MEDIUM BRUSHED STEEL|9|444 +Brand#12|MEDIUM BRUSHED STEEL|45|444 +Brand#12|PROMO ANODIZED COPPER|23|444 +Brand#12|PROMO BRUSHED BRASS|45|444 +Brand#12|PROMO BRUSHED COPPER|45|444 +Brand#12|PROMO PLATED COPPER|3|444 +Brand#12|PROMO POLISHED BRASS|3|444 +Brand#12|PROMO POLISHED BRASS|19|444 +Brand#12|PROMO POLISHED TIN|19|444 +Brand#12|SMALL ANODIZED BRASS|19|444 +Brand#12|SMALL BRUSHED BRASS|19|444 +Brand#12|SMALL POLISHED NICKEL|14|444 +Brand#12|STANDARD ANODIZED NICKEL|19|444 +Brand#12|STANDARD ANODIZED NICKEL|45|444 +Brand#12|STANDARD ANODIZED NICKEL|49|444 +Brand#13|ECONOMY ANODIZED STEEL|23|444 +Brand#13|ECONOMY ANODIZED TIN|19|444 +Brand#13|LARGE ANODIZED STEEL|45|444 +Brand#13|LARGE BRUSHED COPPER|23|444 +Brand#13|LARGE BRUSHED NICKEL|9|444 +Brand#13|LARGE BRUSHED STEEL|19|444 +Brand#13|LARGE BRUSHED STEEL|23|444 +Brand#13|LARGE POLISHED COPPER|14|444 +Brand#13|LARGE POLISHED COPPER|23|444 +Brand#13|LARGE POLISHED COPPER|45|444 +Brand#13|LARGE POLISHED NICKEL|36|444 +Brand#13|MEDIUM ANODIZED COPPER|23|444 +Brand#13|MEDIUM ANODIZED TIN|3|444 +Brand#13|MEDIUM BRUSHED BRASS|19|444 +Brand#13|MEDIUM BURNISHED NICKEL|14|444 +Brand#13|MEDIUM PLATED COPPER|36|444 +Brand#13|MEDIUM PLATED TIN|3|444 +Brand#13|PROMO ANODIZED COPPER|14|444 +Brand#13|PROMO ANODIZED COPPER|19|444 +Brand#13|PROMO BRUSHED STEEL|9|444 +Brand#13|PROMO PLATED BRASS|14|444 +Brand#13|PROMO PLATED TIN|14|444 +Brand#13|PROMO PLATED TIN|19|444 +Brand#13|PROMO PLATED TIN|49|444 +Brand#13|SMALL BRUSHED COPPER|14|444 +Brand#13|SMALL BRUSHED STEEL|19|444 +Brand#13|SMALL BURNISHED COPPER|23|444 +Brand#13|SMALL BURNISHED NICKEL|36|444 +Brand#13|SMALL BURNISHED STEEL|23|444 +Brand#13|SMALL PLATED COPPER|9|444 +Brand#13|SMALL PLATED NICKEL|3|444 +Brand#13|SMALL PLATED TIN|23|444 +Brand#13|STANDARD ANODIZED NICKEL|14|444 +Brand#13|STANDARD ANODIZED STEEL|19|444 +Brand#13|STANDARD BRUSHED STEEL|14|444 +Brand#13|STANDARD BURNISHED NICKEL|49|444 +Brand#13|STANDARD POLISHED BRASS|49|444 +Brand#14|ECONOMY BRUSHED TIN|49|444 +Brand#14|ECONOMY BURNISHED BRASS|19|444 +Brand#14|ECONOMY BURNISHED COPPER|36|444 +Brand#14|ECONOMY PLATED COPPER|3|444 +Brand#14|LARGE BRUSHED TIN|19|444 +Brand#14|LARGE PLATED BRASS|9|444 +Brand#14|LARGE PLATED COPPER|19|444 +Brand#14|LARGE PLATED NICKEL|3|444 +Brand#14|LARGE POLISHED BRASS|36|444 +Brand#14|MEDIUM BURNISHED BRASS|3|444 +Brand#14|MEDIUM PLATED COPPER|49|444 +Brand#14|PROMO ANODIZED STEEL|36|444 +Brand#14|PROMO ANODIZED TIN|14|444 +Brand#14|PROMO BRUSHED BRASS|9|444 +Brand#14|PROMO BRUSHED STEEL|9|444 +Brand#14|PROMO BRUSHED TIN|19|444 +Brand#14|PROMO PLATED BRASS|3|444 +Brand#14|PROMO POLISHED BRASS|23|444 +Brand#14|PROMO POLISHED NICKEL|36|444 +Brand#14|PROMO POLISHED TIN|19|444 +Brand#14|PROMO POLISHED TIN|23|444 +Brand#14|SMALL ANODIZED TIN|3|444 +Brand#14|SMALL BURNISHED TIN|49|444 +Brand#14|SMALL PLATED COPPER|45|444 +Brand#14|SMALL POLISHED COPPER|23|444 +Brand#14|SMALL POLISHED TIN|49|444 +Brand#14|STANDARD BURNISHED NICKEL|45|444 +Brand#15|ECONOMY ANODIZED NICKEL|23|444 +Brand#15|ECONOMY ANODIZED STEEL|19|444 +Brand#15|ECONOMY ANODIZED TIN|36|444 +Brand#15|ECONOMY BRUSHED NICKEL|9|444 +Brand#15|ECONOMY BRUSHED NICKEL|14|444 +Brand#15|ECONOMY BRUSHED STEEL|14|444 +Brand#15|ECONOMY BURNISHED COPPER|23|444 +Brand#15|ECONOMY PLATED NICKEL|9|444 +Brand#15|ECONOMY PLATED STEEL|14|444 +Brand#15|ECONOMY POLISHED BRASS|14|444 +Brand#15|ECONOMY POLISHED STEEL|23|444 +Brand#15|LARGE PLATED BRASS|49|444 +Brand#15|LARGE PLATED COPPER|23|444 +Brand#15|MEDIUM ANODIZED BRASS|14|444 +Brand#15|MEDIUM ANODIZED NICKEL|9|444 +Brand#15|MEDIUM BRUSHED COPPER|23|444 +Brand#15|MEDIUM BRUSHED NICKEL|3|444 +Brand#15|MEDIUM BURNISHED NICKEL|3|444 +Brand#15|MEDIUM PLATED NICKEL|45|444 +Brand#15|MEDIUM PLATED TIN|3|444 +Brand#15|PROMO BRUSHED BRASS|36|444 +Brand#15|PROMO BRUSHED COPPER|14|444 +Brand#15|PROMO BURNISHED TIN|49|444 +Brand#15|PROMO PLATED BRASS|49|444 +Brand#15|PROMO PLATED NICKEL|3|444 +Brand#15|PROMO POLISHED TIN|45|444 +Brand#15|SMALL ANODIZED COPPER|19|444 +Brand#15|SMALL ANODIZED STEEL|49|444 +Brand#15|SMALL BRUSHED COPPER|49|444 +Brand#15|SMALL BRUSHED STEEL|9|444 +Brand#15|SMALL PLATED BRASS|3|444 +Brand#15|SMALL PLATED COPPER|49|444 +Brand#15|SMALL PLATED TIN|19|444 +Brand#15|STANDARD BRUSHED TIN|36|444 +Brand#15|STANDARD BURNISHED TIN|36|444 +Brand#15|STANDARD POLISHED COPPER|36|444 +Brand#15|STANDARD POLISHED NICKEL|49|444 +Brand#15|STANDARD POLISHED STEEL|36|444 +Brand#21|ECONOMY ANODIZED NICKEL|49|444 +Brand#21|ECONOMY ANODIZED TIN|49|444 +Brand#21|ECONOMY BRUSHED BRASS|49|444 +Brand#21|ECONOMY BRUSHED STEEL|23|444 +Brand#21|ECONOMY BRUSHED TIN|19|444 +Brand#21|ECONOMY BURNISHED TIN|23|444 +Brand#21|ECONOMY POLISHED STEEL|9|444 +Brand#21|LARGE BURNISHED BRASS|19|444 +Brand#21|LARGE PLATED NICKEL|45|444 +Brand#21|LARGE POLISHED STEEL|23|444 +Brand#21|LARGE POLISHED STEEL|45|444 +Brand#21|MEDIUM ANODIZED TIN|23|444 +Brand#21|MEDIUM PLATED BRASS|49|444 +Brand#21|PROMO BURNISHED BRASS|14|444 +Brand#21|PROMO POLISHED COPPER|3|444 +Brand#21|SMALL ANODIZED COPPER|14|444 +Brand#21|SMALL BRUSHED STEEL|19|444 +Brand#21|SMALL BRUSHED STEEL|49|444 +Brand#21|SMALL BURNISHED NICKEL|45|444 +Brand#21|SMALL POLISHED NICKEL|14|444 +Brand#21|SMALL POLISHED TIN|19|444 +Brand#21|STANDARD BRUSHED NICKEL|45|444 +Brand#22|ECONOMY ANODIZED STEEL|45|444 +Brand#22|ECONOMY POLISHED COPPER|23|444 +Brand#22|ECONOMY POLISHED NICKEL|36|444 +Brand#22|LARGE BRUSHED STEEL|14|444 +Brand#22|LARGE PLATED BRASS|36|444 +Brand#22|LARGE PLATED NICKEL|9|444 +Brand#22|LARGE PLATED NICKEL|36|444 +Brand#22|LARGE PLATED STEEL|49|444 +Brand#22|LARGE POLISHED STEEL|45|444 +Brand#22|MEDIUM ANODIZED BRASS|36|444 +Brand#22|MEDIUM ANODIZED NICKEL|45|444 +Brand#22|MEDIUM ANODIZED STEEL|36|444 +Brand#22|MEDIUM BRUSHED COPPER|3|444 +Brand#22|MEDIUM BRUSHED NICKEL|19|444 +Brand#22|MEDIUM PLATED BRASS|36|444 +Brand#22|MEDIUM PLATED COPPER|14|444 +Brand#22|PROMO ANODIZED NICKEL|23|444 +Brand#22|PROMO BURNISHED STEEL|19|444 +Brand#22|PROMO PLATED NICKEL|9|444 +Brand#22|PROMO PLATED TIN|23|444 +Brand#22|PROMO POLISHED NICKEL|49|444 +Brand#22|SMALL ANODIZED NICKEL|3|444 +Brand#22|SMALL ANODIZED STEEL|3|444 +Brand#22|SMALL BRUSHED COPPER|9|444 +Brand#22|SMALL BURNISHED TIN|36|444 +Brand#22|STANDARD ANODIZED BRASS|36|444 +Brand#22|STANDARD ANODIZED NICKEL|3|444 +Brand#22|STANDARD ANODIZED NICKEL|9|444 +Brand#22|STANDARD BRUSHED NICKEL|14|444 +Brand#22|STANDARD BRUSHED NICKEL|36|444 +Brand#22|STANDARD BURNISHED COPPER|45|444 +Brand#22|STANDARD PLATED COPPER|23|444 +Brand#22|STANDARD PLATED STEEL|19|444 +Brand#22|STANDARD POLISHED BRASS|14|444 +Brand#22|STANDARD POLISHED NICKEL|23|444 +Brand#23|ECONOMY BURNISHED NICKEL|19|444 +Brand#23|ECONOMY PLATED COPPER|14|444 +Brand#23|ECONOMY PLATED NICKEL|45|444 +Brand#23|ECONOMY POLISHED BRASS|36|444 +Brand#23|ECONOMY POLISHED COPPER|3|444 +Brand#23|LARGE BURNISHED COPPER|36|444 +Brand#23|LARGE BURNISHED NICKEL|36|444 +Brand#23|MEDIUM ANODIZED COPPER|36|444 +Brand#23|MEDIUM BRUSHED STEEL|9|444 +Brand#23|MEDIUM BURNISHED BRASS|3|444 +Brand#23|MEDIUM PLATED BRASS|49|444 +Brand#23|MEDIUM PLATED NICKEL|3|444 +Brand#23|PROMO ANODIZED BRASS|49|444 +Brand#23|PROMO ANODIZED NICKEL|14|444 +Brand#23|PROMO BRUSHED BRASS|45|444 +Brand#23|PROMO BRUSHED COPPER|23|444 +Brand#23|PROMO BURNISHED NICKEL|23|444 +Brand#23|PROMO PLATED STEEL|23|444 +Brand#23|PROMO POLISHED COPPER|9|444 +Brand#23|PROMO POLISHED NICKEL|45|444 +Brand#23|PROMO POLISHED TIN|19|444 +Brand#23|SMALL ANODIZED COPPER|45|444 +Brand#23|SMALL ANODIZED NICKEL|19|444 +Brand#23|SMALL ANODIZED TIN|14|444 +Brand#23|SMALL BURNISHED STEEL|23|444 +Brand#23|SMALL BURNISHED TIN|14|444 +Brand#23|SMALL POLISHED NICKEL|14|444 +Brand#23|STANDARD BRUSHED BRASS|49|444 +Brand#23|STANDARD BURNISHED COPPER|45|444 +Brand#23|STANDARD BURNISHED NICKEL|3|444 +Brand#23|STANDARD BURNISHED STEEL|19|444 +Brand#23|STANDARD BURNISHED TIN|9|444 +Brand#23|STANDARD PLATED BRASS|14|444 +Brand#23|STANDARD PLATED STEEL|9|444 +Brand#24|ECONOMY ANODIZED COPPER|3|444 +Brand#24|ECONOMY PLATED BRASS|45|444 +Brand#24|ECONOMY PLATED NICKEL|49|444 +Brand#24|ECONOMY PLATED TIN|49|444 +Brand#24|ECONOMY POLISHED BRASS|23|444 +Brand#24|LARGE PLATED COPPER|36|444 +Brand#24|LARGE PLATED NICKEL|9|444 +Brand#24|LARGE PLATED NICKEL|45|444 +Brand#24|LARGE PLATED TIN|9|444 +Brand#24|LARGE POLISHED NICKEL|9|444 +Brand#24|MEDIUM BRUSHED NICKEL|14|444 +Brand#24|MEDIUM BRUSHED NICKEL|19|444 +Brand#24|MEDIUM BRUSHED TIN|36|444 +Brand#24|MEDIUM BURNISHED STEEL|14|444 +Brand#24|MEDIUM PLATED BRASS|36|444 +Brand#24|MEDIUM PLATED COPPER|23|444 +Brand#24|PROMO ANODIZED TIN|36|444 +Brand#24|PROMO BRUSHED NICKEL|14|444 +Brand#24|PROMO PLATED NICKEL|14|444 +Brand#24|PROMO POLISHED BRASS|3|444 +Brand#24|SMALL ANODIZED BRASS|3|444 +Brand#24|SMALL ANODIZED BRASS|36|444 +Brand#24|SMALL BRUSHED COPPER|3|444 +Brand#24|SMALL BRUSHED COPPER|14|444 +Brand#24|SMALL POLISHED STEEL|23|444 +Brand#24|STANDARD BRUSHED NICKEL|3|444 +Brand#24|STANDARD BRUSHED STEEL|36|444 +Brand#24|STANDARD POLISHED NICKEL|49|444 +Brand#25|ECONOMY ANODIZED BRASS|14|444 +Brand#25|ECONOMY ANODIZED BRASS|49|444 +Brand#25|ECONOMY ANODIZED COPPER|36|444 +Brand#25|LARGE BRUSHED NICKEL|9|444 +Brand#25|LARGE BURNISHED NICKEL|9|444 +Brand#25|LARGE BURNISHED STEEL|14|444 +Brand#25|LARGE PLATED STEEL|9|444 +Brand#25|MEDIUM BRUSHED NICKEL|49|444 +Brand#25|MEDIUM BURNISHED COPPER|19|444 +Brand#25|MEDIUM BURNISHED NICKEL|23|444 +Brand#25|MEDIUM PLATED STEEL|3|444 +Brand#25|PROMO ANODIZED NICKEL|36|444 +Brand#25|PROMO BRUSHED BRASS|23|444 +Brand#25|PROMO BURNISHED COPPER|36|444 +Brand#25|PROMO PLATED BRASS|45|444 +Brand#25|PROMO PLATED COPPER|3|444 +Brand#25|SMALL BRUSHED BRASS|36|444 +Brand#25|SMALL BRUSHED NICKEL|3|444 +Brand#25|SMALL POLISHED TIN|36|444 +Brand#25|STANDARD ANODIZED COPPER|19|444 +Brand#25|STANDARD ANODIZED TIN|9|444 +Brand#25|STANDARD BRUSHED STEEL|19|444 +Brand#25|STANDARD BURNISHED BRASS|45|444 +Brand#25|STANDARD BURNISHED NICKEL|14|444 +Brand#25|STANDARD PLATED COPPER|3|444 +Brand#25|STANDARD PLATED NICKEL|14|444 +Brand#25|STANDARD PLATED TIN|14|444 +Brand#31|ECONOMY ANODIZED STEEL|14|444 +Brand#31|ECONOMY BURNISHED NICKEL|3|444 +Brand#31|ECONOMY BURNISHED TIN|36|444 +Brand#31|ECONOMY PLATED STEEL|49|444 +Brand#31|ECONOMY POLISHED COPPER|14|444 +Brand#31|LARGE ANODIZED COPPER|14|444 +Brand#31|LARGE ANODIZED STEEL|36|444 +Brand#31|LARGE BURNISHED STEEL|23|444 +Brand#31|LARGE POLISHED BRASS|45|444 +Brand#31|LARGE POLISHED STEEL|49|444 +Brand#31|LARGE POLISHED TIN|49|444 +Brand#31|MEDIUM ANODIZED NICKEL|36|444 +Brand#31|MEDIUM ANODIZED STEEL|36|444 +Brand#31|MEDIUM ANODIZED STEEL|49|444 +Brand#31|MEDIUM ANODIZED TIN|23|444 +Brand#31|MEDIUM ANODIZED TIN|36|444 +Brand#31|MEDIUM BRUSHED STEEL|23|444 +Brand#31|MEDIUM BURNISHED BRASS|3|444 +Brand#31|MEDIUM BURNISHED COPPER|23|444 +Brand#31|PROMO ANODIZED STEEL|45|444 +Brand#31|PROMO ANODIZED TIN|9|444 +Brand#31|PROMO BRUSHED COPPER|14|444 +Brand#31|PROMO BURNISHED BRASS|9|444 +Brand#31|PROMO BURNISHED BRASS|36|444 +Brand#31|PROMO POLISHED BRASS|14|444 +Brand#31|PROMO POLISHED NICKEL|19|444 +Brand#31|SMALL ANODIZED COPPER|14|444 +Brand#31|SMALL BURNISHED BRASS|36|444 +Brand#31|SMALL BURNISHED TIN|19|444 +Brand#31|STANDARD BRUSHED STEEL|9|444 +Brand#31|STANDARD BURNISHED BRASS|19|444 +Brand#31|STANDARD BURNISHED NICKEL|14|444 +Brand#31|STANDARD PLATED NICKEL|3|444 +Brand#32|ECONOMY BURNISHED COPPER|49|444 +Brand#32|ECONOMY PLATED TIN|23|444 +Brand#32|ECONOMY POLISHED COPPER|19|444 +Brand#32|ECONOMY POLISHED STEEL|9|444 +Brand#32|LARGE ANODIZED NICKEL|49|444 +Brand#32|LARGE ANODIZED TIN|19|444 +Brand#32|LARGE BRUSHED NICKEL|14|444 +Brand#32|LARGE BURNISHED STEEL|19|444 +Brand#32|LARGE PLATED COPPER|23|444 +Brand#32|LARGE PLATED TIN|14|444 +Brand#32|MEDIUM ANODIZED COPPER|45|444 +Brand#32|MEDIUM BRUSHED NICKEL|3|444 +Brand#32|MEDIUM BURNISHED BRASS|9|444 +Brand#32|MEDIUM BURNISHED TIN|36|444 +Brand#32|MEDIUM PLATED BRASS|45|444 +Brand#32|PROMO BRUSHED BRASS|3|444 +Brand#32|PROMO BURNISHED TIN|49|444 +Brand#32|PROMO PLATED TIN|9|444 +Brand#32|PROMO POLISHED COPPER|9|444 +Brand#32|PROMO POLISHED TIN|23|444 +Brand#32|SMALL ANODIZED TIN|3|444 +Brand#32|SMALL ANODIZED TIN|45|444 +Brand#32|SMALL BRUSHED BRASS|3|444 +Brand#32|SMALL BRUSHED STEEL|23|444 +Brand#32|SMALL BRUSHED STEEL|36|444 +Brand#32|SMALL BURNISHED TIN|36|444 +Brand#32|SMALL PLATED COPPER|45|444 +Brand#32|SMALL POLISHED STEEL|36|444 +Brand#32|STANDARD ANODIZED STEEL|3|444 +Brand#32|STANDARD BRUSHED BRASS|9|444 +Brand#32|STANDARD BRUSHED BRASS|23|444 +Brand#32|STANDARD BRUSHED NICKEL|9|444 +Brand#32|STANDARD BURNISHED BRASS|14|444 +Brand#32|STANDARD BURNISHED NICKEL|14|444 +Brand#32|STANDARD BURNISHED TIN|23|444 +Brand#32|STANDARD BURNISHED TIN|45|444 +Brand#33|ECONOMY ANODIZED COPPER|36|444 +Brand#33|ECONOMY ANODIZED NICKEL|3|444 +Brand#33|ECONOMY BRUSHED COPPER|36|444 +Brand#33|ECONOMY BRUSHED TIN|19|444 +Brand#33|ECONOMY BURNISHED NICKEL|9|444 +Brand#33|ECONOMY BURNISHED NICKEL|14|444 +Brand#33|ECONOMY POLISHED BRASS|3|444 +Brand#33|ECONOMY POLISHED BRASS|9|444 +Brand#33|LARGE ANODIZED BRASS|3|444 +Brand#33|LARGE PLATED STEEL|9|444 +Brand#33|LARGE PLATED TIN|19|444 +Brand#33|LARGE PLATED TIN|45|444 +Brand#33|MEDIUM BRUSHED COPPER|9|444 +Brand#33|MEDIUM PLATED BRASS|9|444 +Brand#33|MEDIUM PLATED STEEL|3|444 +Brand#33|PROMO ANODIZED TIN|49|444 +Brand#33|PROMO BRUSHED BRASS|45|444 +Brand#33|PROMO BRUSHED BRASS|49|444 +Brand#33|PROMO BRUSHED COPPER|14|444 +Brand#33|PROMO BRUSHED COPPER|36|444 +Brand#33|PROMO PLATED BRASS|36|444 +Brand#33|PROMO PLATED STEEL|36|444 +Brand#33|PROMO POLISHED TIN|19|444 +Brand#33|SMALL ANODIZED BRASS|45|444 +Brand#33|SMALL ANODIZED COPPER|19|444 +Brand#33|SMALL ANODIZED COPPER|36|444 +Brand#33|SMALL ANODIZED NICKEL|49|444 +Brand#33|SMALL PLATED COPPER|3|444 +Brand#33|SMALL POLISHED COPPER|14|444 +Brand#33|SMALL POLISHED TIN|23|444 +Brand#33|SMALL POLISHED TIN|36|444 +Brand#33|STANDARD ANODIZED BRASS|3|444 +Brand#33|STANDARD ANODIZED STEEL|45|444 +Brand#33|STANDARD ANODIZED TIN|3|444 +Brand#33|STANDARD BRUSHED BRASS|19|444 +Brand#33|STANDARD BURNISHED NICKEL|49|444 +Brand#34|ECONOMY ANODIZED NICKEL|45|444 +Brand#34|ECONOMY PLATED BRASS|45|444 +Brand#34|ECONOMY PLATED TIN|14|444 +Brand#34|ECONOMY PLATED TIN|36|444 +Brand#34|ECONOMY POLISHED COPPER|49|444 +Brand#34|LARGE BRUSHED NICKEL|14|444 +Brand#34|LARGE BURNISHED BRASS|49|444 +Brand#34|LARGE BURNISHED TIN|19|444 +Brand#34|LARGE PLATED NICKEL|45|444 +Brand#34|LARGE POLISHED COPPER|49|444 +Brand#34|LARGE POLISHED NICKEL|14|444 +Brand#34|LARGE POLISHED NICKEL|49|444 +Brand#34|MEDIUM ANODIZED COPPER|36|444 +Brand#34|PROMO ANODIZED BRASS|49|444 +Brand#34|PROMO BRUSHED BRASS|23|444 +Brand#34|PROMO BURNISHED TIN|9|444 +Brand#34|PROMO PLATED COPPER|19|444 +Brand#34|PROMO POLISHED BRASS|49|444 +Brand#34|PROMO POLISHED COPPER|45|444 +Brand#34|SMALL ANODIZED NICKEL|19|444 +Brand#34|SMALL BRUSHED BRASS|3|444 +Brand#34|SMALL BRUSHED COPPER|3|444 +Brand#34|SMALL BURNISHED BRASS|49|444 +Brand#34|SMALL BURNISHED TIN|3|444 +Brand#34|SMALL PLATED STEEL|23|444 +Brand#34|SMALL POLISHED BRASS|23|444 +Brand#34|SMALL POLISHED NICKEL|45|444 +Brand#34|STANDARD BRUSHED NICKEL|45|444 +Brand#34|STANDARD BRUSHED TIN|14|444 +Brand#34|STANDARD BURNISHED TIN|23|444 +Brand#34|STANDARD POLISHED COPPER|49|444 +Brand#35|ECONOMY BRUSHED NICKEL|36|444 +Brand#35|ECONOMY POLISHED TIN|19|444 +Brand#35|LARGE ANODIZED COPPER|49|444 +Brand#35|LARGE BRUSHED STEEL|23|444 +Brand#35|LARGE POLISHED BRASS|14|444 +Brand#35|LARGE POLISHED BRASS|36|444 +Brand#35|MEDIUM BURNISHED BRASS|14|444 +Brand#35|MEDIUM BURNISHED NICKEL|49|444 +Brand#35|PROMO ANODIZED BRASS|14|444 +Brand#35|PROMO BRUSHED NICKEL|36|444 +Brand#35|PROMO BRUSHED STEEL|36|444 +Brand#35|PROMO BURNISHED COPPER|45|444 +Brand#35|PROMO BURNISHED NICKEL|14|444 +Brand#35|PROMO BURNISHED TIN|3|444 +Brand#35|PROMO PLATED STEEL|3|444 +Brand#35|SMALL PLATED BRASS|23|444 +Brand#35|SMALL PLATED COPPER|23|444 +Brand#35|STANDARD ANODIZED TIN|36|444 +Brand#35|STANDARD PLATED COPPER|19|444 +Brand#35|STANDARD PLATED NICKEL|36|444 +Brand#41|ECONOMY BRUSHED COPPER|36|444 +Brand#41|ECONOMY PLATED BRASS|36|444 +Brand#41|ECONOMY POLISHED COPPER|45|444 +Brand#41|LARGE ANODIZED TIN|9|444 +Brand#41|LARGE BURNISHED BRASS|9|444 +Brand#41|MEDIUM BRUSHED BRASS|23|444 +Brand#41|MEDIUM BRUSHED TIN|49|444 +Brand#41|MEDIUM BURNISHED NICKEL|3|444 +Brand#41|MEDIUM BURNISHED STEEL|3|444 +Brand#41|MEDIUM PLATED TIN|14|444 +Brand#41|PROMO BRUSHED STEEL|23|444 +Brand#41|PROMO BURNISHED TIN|3|444 +Brand#41|PROMO PLATED BRASS|9|444 +Brand#41|PROMO PLATED BRASS|49|444 +Brand#41|PROMO POLISHED TIN|23|444 +Brand#41|SMALL BRUSHED BRASS|19|444 +Brand#41|SMALL BURNISHED COPPER|14|444 +Brand#41|SMALL BURNISHED STEEL|19|444 +Brand#41|STANDARD ANODIZED TIN|14|444 +Brand#41|STANDARD BRUSHED STEEL|45|444 +Brand#41|STANDARD PLATED NICKEL|36|444 +Brand#41|STANDARD POLISHED COPPER|49|444 +Brand#42|ECONOMY ANODIZED TIN|36|444 +Brand#42|ECONOMY BRUSHED BRASS|49|444 +Brand#42|ECONOMY BURNISHED TIN|3|444 +Brand#42|ECONOMY PLATED COPPER|14|444 +Brand#42|ECONOMY PLATED STEEL|49|444 +Brand#42|ECONOMY PLATED TIN|14|444 +Brand#42|LARGE ANODIZED STEEL|23|444 +Brand#42|LARGE ANODIZED TIN|45|444 +Brand#42|LARGE BURNISHED STEEL|23|444 +Brand#42|LARGE PLATED STEEL|49|444 +Brand#42|LARGE PLATED TIN|3|444 +Brand#42|LARGE POLISHED BRASS|49|444 +Brand#42|MEDIUM ANODIZED BRASS|14|444 +Brand#42|MEDIUM ANODIZED COPPER|19|444 +Brand#42|MEDIUM ANODIZED TIN|23|444 +Brand#42|MEDIUM BRUSHED NICKEL|19|444 +Brand#42|MEDIUM BURNISHED BRASS|45|444 +Brand#42|MEDIUM PLATED BRASS|3|444 +Brand#42|MEDIUM PLATED BRASS|23|444 +Brand#42|PROMO ANODIZED COPPER|3|444 +Brand#42|PROMO ANODIZED COPPER|9|444 +Brand#42|PROMO ANODIZED NICKEL|49|444 +Brand#42|PROMO ANODIZED STEEL|45|444 +Brand#42|PROMO ANODIZED STEEL|49|444 +Brand#42|PROMO BRUSHED STEEL|14|444 +Brand#42|PROMO BRUSHED TIN|23|444 +Brand#42|PROMO PLATED NICKEL|9|444 +Brand#42|PROMO POLISHED NICKEL|49|444 +Brand#42|SMALL ANODIZED STEEL|49|444 +Brand#42|SMALL BURNISHED COPPER|45|444 +Brand#42|SMALL PLATED BRASS|3|444 +Brand#42|STANDARD ANODIZED COPPER|19|444 +Brand#42|STANDARD BRUSHED STEEL|14|444 +Brand#42|STANDARD BURNISHED BRASS|3|444 +Brand#42|STANDARD BURNISHED TIN|19|444 +Brand#42|STANDARD POLISHED BRASS|14|444 +Brand#42|STANDARD POLISHED COPPER|49|444 +Brand#43|ECONOMY BURNISHED NICKEL|19|444 +Brand#43|ECONOMY PLATED STEEL|9|444 +Brand#43|ECONOMY POLISHED NICKEL|9|444 +Brand#43|ECONOMY POLISHED NICKEL|14|444 +Brand#43|LARGE ANODIZED BRASS|3|444 +Brand#43|LARGE BRUSHED TIN|3|444 +Brand#43|LARGE BURNISHED NICKEL|14|444 +Brand#43|LARGE PLATED NICKEL|45|444 +Brand#43|LARGE PLATED STEEL|14|444 +Brand#43|LARGE POLISHED COPPER|9|444 +Brand#43|MEDIUM ANODIZED BRASS|19|444 +Brand#43|MEDIUM BURNISHED NICKEL|9|444 +Brand#43|MEDIUM BURNISHED TIN|9|444 +Brand#43|PROMO BRUSHED COPPER|49|444 +Brand#43|PROMO BRUSHED NICKEL|45|444 +Brand#43|PROMO BRUSHED STEEL|3|444 +Brand#43|PROMO BRUSHED STEEL|23|444 +Brand#43|PROMO BURNISHED STEEL|23|444 +Brand#43|PROMO PLATED NICKEL|14|444 +Brand#43|PROMO POLISHED NICKEL|19|444 +Brand#43|SMALL ANODIZED STEEL|9|444 +Brand#43|SMALL BRUSHED NICKEL|3|444 +Brand#43|SMALL BRUSHED NICKEL|14|444 +Brand#43|SMALL BURNISHED COPPER|23|444 +Brand#43|SMALL PLATED STEEL|23|444 +Brand#43|SMALL POLISHED BRASS|14|444 +Brand#43|SMALL POLISHED COPPER|36|444 +Brand#43|STANDARD ANODIZED BRASS|3|444 +Brand#43|STANDARD ANODIZED BRASS|14|444 +Brand#43|STANDARD ANODIZED BRASS|23|444 +Brand#43|STANDARD ANODIZED STEEL|9|444 +Brand#43|STANDARD ANODIZED STEEL|45|444 +Brand#43|STANDARD BRUSHED NICKEL|14|444 +Brand#43|STANDARD BRUSHED NICKEL|49|444 +Brand#43|STANDARD BRUSHED STEEL|19|444 +Brand#43|STANDARD PLATED STEEL|19|444 +Brand#43|STANDARD POLISHED BRASS|36|444 +Brand#44|ECONOMY ANODIZED TIN|23|444 +Brand#44|ECONOMY BRUSHED TIN|45|444 +Brand#44|ECONOMY BURNISHED BRASS|9|444 +Brand#44|ECONOMY PLATED BRASS|45|444 +Brand#44|ECONOMY POLISHED STEEL|19|444 +Brand#44|LARGE ANODIZED NICKEL|36|444 +Brand#44|LARGE ANODIZED TIN|9|444 +Brand#44|LARGE ANODIZED TIN|49|444 +Brand#44|LARGE PLATED TIN|14|444 +Brand#44|LARGE PLATED TIN|19|444 +Brand#44|LARGE POLISHED NICKEL|45|444 +Brand#44|LARGE POLISHED TIN|49|444 +Brand#44|MEDIUM ANODIZED NICKEL|9|444 +Brand#44|MEDIUM BRUSHED BRASS|36|444 +Brand#44|MEDIUM BURNISHED BRASS|9|444 +Brand#44|MEDIUM BURNISHED TIN|49|444 +Brand#44|MEDIUM PLATED BRASS|49|444 +Brand#44|MEDIUM PLATED NICKEL|49|444 +Brand#44|PROMO ANODIZED BRASS|14|444 +Brand#44|PROMO BRUSHED BRASS|9|444 +Brand#44|PROMO POLISHED BRASS|36|444 +Brand#44|PROMO POLISHED BRASS|45|444 +Brand#44|PROMO POLISHED TIN|23|444 +Brand#44|SMALL ANODIZED BRASS|19|444 +Brand#44|SMALL BRUSHED STEEL|19|444 +Brand#44|SMALL BURNISHED NICKEL|45|444 +Brand#44|SMALL PLATED BRASS|9|444 +Brand#44|SMALL POLISHED NICKEL|19|444 +Brand#44|SMALL POLISHED TIN|49|444 +Brand#44|STANDARD BURNISHED COPPER|19|444 +Brand#44|STANDARD BURNISHED TIN|36|444 +Brand#44|STANDARD POLISHED COPPER|19|444 +Brand#51|ECONOMY ANODIZED NICKEL|19|444 +Brand#51|ECONOMY ANODIZED STEEL|45|444 +Brand#51|ECONOMY ANODIZED TIN|49|444 +Brand#51|ECONOMY BURNISHED STEEL|49|444 +Brand#51|ECONOMY PLATED STEEL|45|444 +Brand#51|LARGE ANODIZED COPPER|45|444 +Brand#51|LARGE BRUSHED NICKEL|19|444 +Brand#51|LARGE BURNISHED STEEL|49|444 +Brand#51|LARGE PLATED BRASS|19|444 +Brand#51|MEDIUM BRUSHED STEEL|19|444 +Brand#51|MEDIUM BURNISHED NICKEL|14|444 +Brand#51|MEDIUM BURNISHED TIN|49|444 +Brand#51|PROMO ANODIZED BRASS|9|444 +Brand#51|PROMO ANODIZED STEEL|36|444 +Brand#51|PROMO ANODIZED STEEL|49|444 +Brand#51|PROMO BRUSHED TIN|14|444 +Brand#51|PROMO BURNISHED COPPER|9|444 +Brand#51|PROMO POLISHED COPPER|9|444 +Brand#51|SMALL ANODIZED COPPER|49|444 +Brand#51|SMALL BRUSHED BRASS|45|444 +Brand#51|SMALL BRUSHED NICKEL|36|444 +Brand#51|SMALL BRUSHED TIN|9|444 +Brand#51|SMALL PLATED BRASS|3|444 +Brand#51|SMALL PLATED BRASS|23|444 +Brand#51|STANDARD ANODIZED BRASS|9|444 +Brand#51|STANDARD BURNISHED COPPER|14|444 +Brand#51|STANDARD PLATED BRASS|45|444 +Brand#51|STANDARD PLATED NICKEL|19|444 +Brand#51|STANDARD POLISHED BRASS|49|444 +Brand#51|STANDARD POLISHED COPPER|23|444 +Brand#51|STANDARD POLISHED STEEL|23|444 +Brand#51|STANDARD POLISHED STEEL|36|444 +Brand#52|ECONOMY ANODIZED COPPER|14|444 +Brand#52|ECONOMY ANODIZED STEEL|45|444 +Brand#52|ECONOMY PLATED NICKEL|9|444 +Brand#52|ECONOMY PLATED NICKEL|49|444 +Brand#52|ECONOMY PLATED TIN|36|444 +Brand#52|ECONOMY POLISHED COPPER|9|444 +Brand#52|ECONOMY POLISHED STEEL|23|444 +Brand#52|LARGE ANODIZED COPPER|36|444 +Brand#52|LARGE ANODIZED STEEL|49|444 +Brand#52|LARGE BRUSHED COPPER|3|444 +Brand#52|LARGE BRUSHED COPPER|19|444 +Brand#52|LARGE BRUSHED NICKEL|9|444 +Brand#52|LARGE BRUSHED TIN|23|444 +Brand#52|LARGE BURNISHED TIN|14|444 +Brand#52|LARGE PLATED STEEL|3|444 +Brand#52|LARGE POLISHED BRASS|36|444 +Brand#52|LARGE POLISHED COPPER|14|444 +Brand#52|MEDIUM ANODIZED COPPER|36|444 +Brand#52|MEDIUM ANODIZED STEEL|23|444 +Brand#52|MEDIUM ANODIZED STEEL|36|444 +Brand#52|MEDIUM BURNISHED BRASS|45|444 +Brand#52|MEDIUM BURNISHED TIN|9|444 +Brand#52|PROMO BRUSHED TIN|49|444 +Brand#52|PROMO BURNISHED TIN|49|444 +Brand#52|PROMO PLATED COPPER|45|444 +Brand#52|PROMO PLATED NICKEL|36|444 +Brand#52|PROMO PLATED STEEL|49|444 +Brand#52|SMALL ANODIZED BRASS|36|444 +Brand#52|SMALL BURNISHED BRASS|36|444 +Brand#52|SMALL PLATED BRASS|45|444 +Brand#52|SMALL POLISHED BRASS|49|444 +Brand#52|STANDARD ANODIZED BRASS|9|444 +Brand#52|STANDARD ANODIZED STEEL|23|444 +Brand#52|STANDARD BRUSHED COPPER|36|444 +Brand#52|STANDARD BRUSHED NICKEL|14|444 +Brand#52|STANDARD BRUSHED STEEL|49|444 +Brand#52|STANDARD BURNISHED COPPER|9|444 +Brand#52|STANDARD BURNISHED NICKEL|23|444 +Brand#52|STANDARD PLATED BRASS|23|444 +Brand#52|STANDARD PLATED COPPER|3|444 +Brand#52|STANDARD POLISHED COPPER|45|444 +Brand#52|STANDARD POLISHED TIN|36|444 +Brand#53|ECONOMY ANODIZED COPPER|19|444 +Brand#53|ECONOMY BRUSHED TIN|36|444 +Brand#53|ECONOMY BURNISHED BRASS|19|444 +Brand#53|ECONOMY BURNISHED STEEL|36|444 +Brand#53|ECONOMY PLATED NICKEL|14|444 +Brand#53|ECONOMY PLATED TIN|3|444 +Brand#53|ECONOMY POLISHED BRASS|9|444 +Brand#53|ECONOMY POLISHED STEEL|9|444 +Brand#53|LARGE ANODIZED COPPER|19|444 +Brand#53|LARGE BRUSHED COPPER|45|444 +Brand#53|LARGE PLATED COPPER|9|444 +Brand#53|LARGE PLATED NICKEL|23|444 +Brand#53|LARGE PLATED STEEL|49|444 +Brand#53|LARGE POLISHED NICKEL|19|444 +Brand#53|MEDIUM ANODIZED BRASS|14|444 +Brand#53|MEDIUM ANODIZED NICKEL|36|444 +Brand#53|MEDIUM BURNISHED STEEL|49|444 +Brand#53|PROMO PLATED BRASS|45|444 +Brand#53|PROMO PLATED COPPER|14|444 +Brand#53|PROMO POLISHED STEEL|19|444 +Brand#53|SMALL ANODIZED BRASS|3|444 +Brand#53|SMALL ANODIZED COPPER|19|444 +Brand#53|SMALL ANODIZED TIN|36|444 +Brand#53|SMALL BRUSHED BRASS|49|444 +Brand#53|SMALL BURNISHED BRASS|45|444 +Brand#53|SMALL PLATED BRASS|23|444 +Brand#53|SMALL POLISHED COPPER|14|444 +Brand#53|SMALL POLISHED STEEL|23|444 +Brand#53|STANDARD ANODIZED COPPER|9|444 +Brand#53|STANDARD ANODIZED COPPER|23|444 +Brand#53|STANDARD BRUSHED TIN|9|444 +Brand#53|STANDARD POLISHED STEEL|45|444 +Brand#54|ECONOMY ANODIZED STEEL|19|444 +Brand#54|LARGE ANODIZED NICKEL|45|444 +Brand#54|LARGE ANODIZED STEEL|36|444 +Brand#54|LARGE BURNISHED STEEL|45|444 +Brand#54|LARGE PLATED COPPER|49|444 +Brand#54|LARGE POLISHED TIN|14|444 +Brand#54|MEDIUM ANODIZED TIN|49|444 +Brand#54|MEDIUM BRUSHED COPPER|14|444 +Brand#54|MEDIUM BRUSHED STEEL|14|444 +Brand#54|MEDIUM BRUSHED TIN|49|444 +Brand#54|MEDIUM PLATED NICKEL|49|444 +Brand#54|PROMO ANODIZED BRASS|36|444 +Brand#54|PROMO ANODIZED TIN|9|444 +Brand#54|PROMO ANODIZED TIN|19|444 +Brand#54|PROMO BRUSHED TIN|45|444 +Brand#54|PROMO POLISHED TIN|23|444 +Brand#54|SMALL BRUSHED NICKEL|19|444 +Brand#54|SMALL BRUSHED NICKEL|49|444 +Brand#54|SMALL BRUSHED TIN|19|444 +Brand#54|SMALL BRUSHED TIN|45|444 +Brand#54|SMALL BURNISHED COPPER|14|444 +Brand#54|SMALL PLATED BRASS|23|444 +Brand#54|SMALL PLATED BRASS|45|444 +Brand#54|SMALL PLATED TIN|14|444 +Brand#54|SMALL POLISHED COPPER|23|444 +Brand#54|SMALL POLISHED NICKEL|23|444 +Brand#54|STANDARD ANODIZED COPPER|23|444 +Brand#54|STANDARD ANODIZED NICKEL|45|444 +Brand#54|STANDARD ANODIZED STEEL|23|444 +Brand#54|STANDARD BRUSHED COPPER|3|444 +Brand#54|STANDARD POLISHED COPPER|36|444 +Brand#55|ECONOMY BURNISHED STEEL|9|444 +Brand#55|ECONOMY BURNISHED STEEL|45|444 +Brand#55|ECONOMY POLISHED COPPER|19|444 +Brand#55|ECONOMY POLISHED TIN|49|444 +Brand#55|LARGE ANODIZED TIN|19|444 +Brand#55|LARGE BRUSHED NICKEL|23|444 +Brand#55|LARGE BURNISHED NICKEL|9|444 +Brand#55|LARGE BURNISHED NICKEL|49|444 +Brand#55|LARGE PLATED STEEL|3|444 +Brand#55|LARGE PLATED TIN|9|444 +Brand#55|LARGE POLISHED COPPER|3|444 +Brand#55|LARGE POLISHED TIN|49|444 +Brand#55|MEDIUM ANODIZED BRASS|3|444 +Brand#55|MEDIUM ANODIZED TIN|14|444 +Brand#55|MEDIUM BRUSHED BRASS|19|444 +Brand#55|MEDIUM BRUSHED BRASS|45|444 +Brand#55|MEDIUM BRUSHED STEEL|9|444 +Brand#55|MEDIUM BURNISHED COPPER|36|444 +Brand#55|MEDIUM BURNISHED TIN|23|444 +Brand#55|MEDIUM PLATED BRASS|14|444 +Brand#55|MEDIUM PLATED BRASS|49|444 +Brand#55|PROMO ANODIZED COPPER|3|444 +Brand#55|PROMO ANODIZED COPPER|45|444 +Brand#55|PROMO BRUSHED NICKEL|14|444 +Brand#55|PROMO BRUSHED NICKEL|45|444 +Brand#55|PROMO BRUSHED STEEL|3|444 +Brand#55|PROMO BURNISHED TIN|14|444 +Brand#55|PROMO PLATED COPPER|14|444 +Brand#55|PROMO POLISHED BRASS|49|444 +Brand#55|PROMO POLISHED NICKEL|23|444 +Brand#55|PROMO POLISHED STEEL|9|444 +Brand#55|SMALL ANODIZED STEEL|49|444 +Brand#55|SMALL ANODIZED TIN|14|444 +Brand#55|SMALL POLISHED TIN|3|444 +Brand#55|STANDARD ANODIZED TIN|45|444 +Brand#55|STANDARD BRUSHED COPPER|36|444 +Brand#55|STANDARD BRUSHED NICKEL|49|444 +Brand#55|STANDARD POLISHED STEEL|19|444 +Brand#11|ECONOMY ANODIZED TIN|9|443 +Brand#11|ECONOMY PLATED NICKEL|3|443 +Brand#11|LARGE BURNISHED COPPER|14|443 +Brand#11|LARGE POLISHED COPPER|19|443 +Brand#11|PROMO ANODIZED COPPER|14|443 +Brand#11|PROMO ANODIZED TIN|36|443 +Brand#11|STANDARD ANODIZED TIN|23|443 +Brand#12|ECONOMY PLATED BRASS|14|443 +Brand#12|LARGE ANODIZED BRASS|49|443 +Brand#12|LARGE POLISHED NICKEL|36|443 +Brand#12|MEDIUM BRUSHED BRASS|45|443 +Brand#12|PROMO BURNISHED STEEL|9|443 +Brand#12|SMALL BRUSHED NICKEL|49|443 +Brand#12|SMALL BURNISHED COPPER|19|443 +Brand#12|SMALL POLISHED NICKEL|36|443 +Brand#12|SMALL POLISHED STEEL|36|443 +Brand#12|STANDARD ANODIZED NICKEL|36|443 +Brand#13|ECONOMY BRUSHED COPPER|36|443 +Brand#13|ECONOMY POLISHED BRASS|3|443 +Brand#13|ECONOMY POLISHED COPPER|36|443 +Brand#13|LARGE BURNISHED NICKEL|49|443 +Brand#13|PROMO BURNISHED COPPER|23|443 +Brand#13|SMALL ANODIZED STEEL|23|443 +Brand#14|ECONOMY ANODIZED BRASS|19|443 +Brand#14|ECONOMY BRUSHED COPPER|9|443 +Brand#14|ECONOMY PLATED TIN|45|443 +Brand#14|LARGE BRUSHED TIN|49|443 +Brand#14|MEDIUM ANODIZED STEEL|36|443 +Brand#14|SMALL PLATED NICKEL|45|443 +Brand#14|STANDARD BRUSHED COPPER|19|443 +Brand#15|ECONOMY ANODIZED TIN|45|443 +Brand#15|MEDIUM BRUSHED NICKEL|49|443 +Brand#15|MEDIUM PLATED COPPER|14|443 +Brand#15|MEDIUM PLATED NICKEL|36|443 +Brand#15|MEDIUM PLATED TIN|49|443 +Brand#15|PROMO ANODIZED NICKEL|19|443 +Brand#15|PROMO BRUSHED COPPER|49|443 +Brand#15|PROMO BURNISHED NICKEL|36|443 +Brand#15|SMALL ANODIZED NICKEL|23|443 +Brand#15|SMALL BRUSHED NICKEL|9|443 +Brand#15|SMALL BRUSHED STEEL|3|443 +Brand#15|SMALL BURNISHED NICKEL|45|443 +Brand#15|SMALL PLATED STEEL|49|443 +Brand#15|STANDARD POLISHED NICKEL|36|443 +Brand#15|STANDARD POLISHED TIN|23|443 +Brand#21|ECONOMY ANODIZED TIN|3|443 +Brand#21|ECONOMY BRUSHED BRASS|45|443 +Brand#21|LARGE BURNISHED STEEL|3|443 +Brand#21|LARGE PLATED NICKEL|36|443 +Brand#21|MEDIUM ANODIZED NICKEL|49|443 +Brand#21|MEDIUM BRUSHED COPPER|9|443 +Brand#21|PROMO POLISHED BRASS|9|443 +Brand#21|SMALL BURNISHED NICKEL|14|443 +Brand#21|STANDARD BURNISHED BRASS|49|443 +Brand#21|STANDARD BURNISHED TIN|36|443 +Brand#22|LARGE PLATED TIN|45|443 +Brand#22|MEDIUM ANODIZED TIN|49|443 +Brand#22|MEDIUM BRUSHED BRASS|36|443 +Brand#22|MEDIUM PLATED NICKEL|23|443 +Brand#22|SMALL ANODIZED NICKEL|9|443 +Brand#22|SMALL POLISHED STEEL|23|443 +Brand#22|STANDARD BURNISHED STEEL|45|443 +Brand#22|STANDARD PLATED BRASS|3|443 +Brand#22|STANDARD POLISHED STEEL|36|443 +Brand#23|ECONOMY BRUSHED COPPER|45|443 +Brand#23|MEDIUM BRUSHED BRASS|19|443 +Brand#23|SMALL PLATED TIN|23|443 +Brand#23|SMALL POLISHED STEEL|3|443 +Brand#23|STANDARD BRUSHED BRASS|36|443 +Brand#23|STANDARD BRUSHED COPPER|45|443 +Brand#24|ECONOMY BRUSHED TIN|9|443 +Brand#24|MEDIUM BRUSHED TIN|3|443 +Brand#24|MEDIUM BURNISHED TIN|45|443 +Brand#24|PROMO ANODIZED STEEL|23|443 +Brand#24|PROMO ANODIZED TIN|49|443 +Brand#24|SMALL BURNISHED TIN|49|443 +Brand#25|ECONOMY BRUSHED STEEL|45|443 +Brand#25|MEDIUM BRUSHED BRASS|3|443 +Brand#25|MEDIUM BURNISHED TIN|3|443 +Brand#25|MEDIUM PLATED BRASS|45|443 +Brand#25|SMALL ANODIZED STEEL|23|443 +Brand#31|LARGE ANODIZED STEEL|9|443 +Brand#31|MEDIUM ANODIZED BRASS|36|443 +Brand#31|PROMO BURNISHED STEEL|9|443 +Brand#31|SMALL ANODIZED BRASS|23|443 +Brand#31|SMALL BRUSHED COPPER|36|443 +Brand#31|SMALL BURNISHED BRASS|45|443 +Brand#31|STANDARD ANODIZED COPPER|14|443 +Brand#31|STANDARD PLATED BRASS|14|443 +Brand#31|STANDARD POLISHED COPPER|14|443 +Brand#32|ECONOMY BURNISHED BRASS|45|443 +Brand#32|ECONOMY POLISHED COPPER|36|443 +Brand#32|LARGE ANODIZED NICKEL|23|443 +Brand#32|SMALL BURNISHED COPPER|19|443 +Brand#32|SMALL BURNISHED TIN|49|443 +Brand#32|SMALL PLATED TIN|36|443 +Brand#32|SMALL POLISHED NICKEL|14|443 +Brand#33|ECONOMY BURNISHED COPPER|49|443 +Brand#33|ECONOMY PLATED COPPER|23|443 +Brand#33|ECONOMY PLATED STEEL|19|443 +Brand#33|ECONOMY POLISHED COPPER|9|443 +Brand#33|MEDIUM BRUSHED BRASS|19|443 +Brand#33|MEDIUM BURNISHED COPPER|36|443 +Brand#33|PROMO BURNISHED COPPER|23|443 +Brand#33|PROMO BURNISHED COPPER|36|443 +Brand#33|PROMO BURNISHED TIN|23|443 +Brand#33|PROMO PLATED COPPER|14|443 +Brand#33|SMALL ANODIZED BRASS|19|443 +Brand#33|STANDARD PLATED BRASS|19|443 +Brand#34|ECONOMY ANODIZED TIN|19|443 +Brand#34|LARGE ANODIZED BRASS|19|443 +Brand#34|LARGE BURNISHED NICKEL|9|443 +Brand#34|LARGE BURNISHED NICKEL|23|443 +Brand#34|LARGE BURNISHED NICKEL|45|443 +Brand#34|STANDARD ANODIZED BRASS|9|443 +Brand#34|STANDARD PLATED COPPER|36|443 +Brand#34|STANDARD PLATED TIN|23|443 +Brand#35|ECONOMY BRUSHED NICKEL|3|443 +Brand#35|ECONOMY POLISHED BRASS|36|443 +Brand#35|LARGE PLATED COPPER|14|443 +Brand#35|MEDIUM ANODIZED NICKEL|23|443 +Brand#35|MEDIUM BRUSHED TIN|36|443 +Brand#35|MEDIUM PLATED TIN|19|443 +Brand#35|PROMO PLATED NICKEL|45|443 +Brand#35|PROMO POLISHED BRASS|19|443 +Brand#35|SMALL BURNISHED BRASS|19|443 +Brand#35|STANDARD BURNISHED STEEL|36|443 +Brand#41|LARGE PLATED BRASS|45|443 +Brand#41|PROMO PLATED STEEL|14|443 +Brand#41|PROMO POLISHED BRASS|45|443 +Brand#41|PROMO POLISHED BRASS|49|443 +Brand#41|PROMO POLISHED STEEL|19|443 +Brand#41|SMALL ANODIZED NICKEL|36|443 +Brand#41|SMALL POLISHED STEEL|3|443 +Brand#41|STANDARD PLATED TIN|19|443 +Brand#42|ECONOMY POLISHED COPPER|49|443 +Brand#42|ECONOMY POLISHED STEEL|9|443 +Brand#42|ECONOMY POLISHED TIN|45|443 +Brand#42|MEDIUM BURNISHED NICKEL|45|443 +Brand#42|PROMO BURNISHED BRASS|19|443 +Brand#42|SMALL BURNISHED BRASS|14|443 +Brand#43|LARGE BURNISHED STEEL|19|443 +Brand#43|LARGE POLISHED BRASS|23|443 +Brand#43|LARGE POLISHED STEEL|3|443 +Brand#43|LARGE POLISHED TIN|19|443 +Brand#43|MEDIUM BRUSHED STEEL|14|443 +Brand#43|MEDIUM BURNISHED COPPER|14|443 +Brand#43|PROMO BRUSHED COPPER|23|443 +Brand#43|STANDARD BRUSHED STEEL|14|443 +Brand#43|STANDARD PLATED STEEL|49|443 +Brand#44|LARGE PLATED BRASS|3|443 +Brand#44|PROMO BURNISHED BRASS|19|443 +Brand#44|PROMO POLISHED NICKEL|3|443 +Brand#44|STANDARD PLATED NICKEL|23|443 +Brand#44|STANDARD POLISHED STEEL|19|443 +Brand#44|STANDARD POLISHED TIN|49|443 +Brand#51|ECONOMY ANODIZED STEEL|36|443 +Brand#51|LARGE POLISHED BRASS|45|443 +Brand#51|MEDIUM PLATED COPPER|9|443 +Brand#51|PROMO BRUSHED TIN|45|443 +Brand#51|PROMO BURNISHED BRASS|19|443 +Brand#51|PROMO PLATED NICKEL|14|443 +Brand#51|SMALL ANODIZED NICKEL|49|443 +Brand#51|STANDARD PLATED BRASS|3|443 +Brand#51|STANDARD PLATED NICKEL|45|443 +Brand#52|ECONOMY ANODIZED NICKEL|3|443 +Brand#52|ECONOMY BURNISHED COPPER|9|443 +Brand#52|ECONOMY PLATED STEEL|3|443 +Brand#52|LARGE BRUSHED COPPER|14|443 +Brand#52|LARGE POLISHED BRASS|19|443 +Brand#52|MEDIUM ANODIZED BRASS|9|443 +Brand#52|MEDIUM BURNISHED STEEL|49|443 +Brand#52|PROMO BURNISHED NICKEL|23|443 +Brand#52|PROMO POLISHED COPPER|45|443 +Brand#52|SMALL POLISHED COPPER|49|443 +Brand#52|STANDARD BURNISHED STEEL|36|443 +Brand#53|ECONOMY ANODIZED COPPER|36|443 +Brand#53|MEDIUM PLATED TIN|19|443 +Brand#53|PROMO PLATED COPPER|49|443 +Brand#53|PROMO POLISHED NICKEL|3|443 +Brand#53|SMALL ANODIZED COPPER|3|443 +Brand#53|SMALL POLISHED BRASS|23|443 +Brand#53|STANDARD BRUSHED STEEL|19|443 +Brand#53|STANDARD BURNISHED NICKEL|9|443 +Brand#54|ECONOMY PLATED COPPER|49|443 +Brand#54|MEDIUM ANODIZED STEEL|36|443 +Brand#54|MEDIUM ANODIZED TIN|14|443 +Brand#54|SMALL POLISHED BRASS|49|443 +Brand#54|STANDARD BURNISHED BRASS|9|443 +Brand#55|ECONOMY ANODIZED TIN|23|443 +Brand#55|ECONOMY BURNISHED BRASS|23|443 +Brand#55|LARGE ANODIZED COPPER|14|443 +Brand#55|LARGE BURNISHED TIN|14|443 +Brand#55|LARGE PLATED TIN|36|443 +Brand#55|MEDIUM BURNISHED BRASS|14|443 +Brand#55|PROMO BURNISHED COPPER|23|443 +Brand#55|PROMO BURNISHED NICKEL|3|443 +Brand#55|PROMO BURNISHED NICKEL|23|443 +Brand#55|SMALL ANODIZED STEEL|14|443 +Brand#55|SMALL PLATED BRASS|19|443 +Brand#55|SMALL POLISHED COPPER|14|443 +Brand#55|STANDARD BRUSHED TIN|49|443 +Brand#11|LARGE POLISHED STEEL|36|442 +Brand#11|STANDARD PLATED COPPER|9|442 +Brand#12|SMALL BRUSHED COPPER|9|442 +Brand#13|PROMO POLISHED TIN|49|442 +Brand#14|MEDIUM BURNISHED COPPER|23|442 +Brand#15|PROMO BRUSHED STEEL|19|442 +Brand#15|SMALL BRUSHED NICKEL|19|442 +Brand#15|STANDARD BURNISHED BRASS|23|442 +Brand#22|LARGE ANODIZED COPPER|36|442 +Brand#22|STANDARD BURNISHED COPPER|49|442 +Brand#23|ECONOMY BRUSHED COPPER|49|442 +Brand#23|PROMO POLISHED NICKEL|49|442 +Brand#24|ECONOMY BURNISHED BRASS|3|442 +Brand#25|PROMO POLISHED BRASS|3|442 +Brand#25|SMALL POLISHED COPPER|23|442 +Brand#31|PROMO POLISHED STEEL|9|442 +Brand#31|SMALL ANODIZED COPPER|3|442 +Brand#31|SMALL BRUSHED STEEL|23|442 +Brand#31|STANDARD BURNISHED BRASS|23|442 +Brand#32|STANDARD PLATED BRASS|49|442 +Brand#34|SMALL PLATED NICKEL|36|442 +Brand#35|LARGE ANODIZED COPPER|14|442 +Brand#35|PROMO POLISHED STEEL|19|442 +Brand#42|MEDIUM BURNISHED STEEL|9|442 +Brand#42|PROMO POLISHED NICKEL|23|442 +Brand#42|STANDARD PLATED NICKEL|19|442 +Brand#44|ECONOMY PLATED BRASS|36|442 +Brand#44|PROMO BRUSHED NICKEL|14|442 +Brand#51|ECONOMY BRUSHED NICKEL|23|442 +Brand#51|PROMO BRUSHED TIN|49|442 +Brand#51|SMALL PLATED NICKEL|19|442 +Brand#52|ECONOMY ANODIZED STEEL|23|442 +Brand#52|MEDIUM BRUSHED STEEL|23|442 +Brand#52|SMALL ANODIZED TIN|14|442 +Brand#53|STANDARD POLISHED TIN|14|442 +Brand#55|ECONOMY POLISHED NICKEL|19|442 +Brand#55|PROMO BURNISHED STEEL|49|442 +Brand#55|SMALL POLISHED TIN|45|442 +Brand#15|STANDARD POLISHED NICKEL|45|441 +Brand#34|LARGE ANODIZED NICKEL|14|441 +Brand#34|SMALL ANODIZED COPPER|36|441 +Brand#52|STANDARD ANODIZED NICKEL|45|441 +Brand#55|PROMO ANODIZED NICKEL|36|441 +Brand#11|ECONOMY POLISHED STEEL|23|440 +Brand#11|LARGE BRUSHED TIN|19|440 +Brand#11|LARGE BURNISHED STEEL|14|440 +Brand#11|LARGE POLISHED NICKEL|3|440 +Brand#11|MEDIUM ANODIZED STEEL|19|440 +Brand#11|MEDIUM BRUSHED STEEL|49|440 +Brand#11|MEDIUM BURNISHED COPPER|19|440 +Brand#11|MEDIUM BURNISHED STEEL|3|440 +Brand#11|MEDIUM PLATED COPPER|19|440 +Brand#11|PROMO ANODIZED COPPER|3|440 +Brand#11|PROMO ANODIZED TIN|49|440 +Brand#11|PROMO BRUSHED BRASS|14|440 +Brand#11|PROMO BURNISHED TIN|23|440 +Brand#11|PROMO POLISHED NICKEL|3|440 +Brand#11|SMALL ANODIZED STEEL|9|440 +Brand#11|SMALL BRUSHED TIN|3|440 +Brand#11|SMALL PLATED TIN|9|440 +Brand#11|SMALL POLISHED NICKEL|23|440 +Brand#11|STANDARD ANODIZED COPPER|49|440 +Brand#11|STANDARD ANODIZED NICKEL|3|440 +Brand#11|STANDARD ANODIZED STEEL|14|440 +Brand#11|STANDARD ANODIZED TIN|49|440 +Brand#11|STANDARD BRUSHED BRASS|23|440 +Brand#11|STANDARD BRUSHED BRASS|49|440 +Brand#11|STANDARD BURNISHED TIN|14|440 +Brand#12|ECONOMY BRUSHED STEEL|14|440 +Brand#12|ECONOMY POLISHED STEEL|23|440 +Brand#12|LARGE ANODIZED NICKEL|9|440 +Brand#12|LARGE ANODIZED STEEL|14|440 +Brand#12|LARGE BRUSHED TIN|3|440 +Brand#12|LARGE BURNISHED TIN|9|440 +Brand#12|LARGE BURNISHED TIN|49|440 +Brand#12|LARGE PLATED COPPER|19|440 +Brand#12|LARGE POLISHED COPPER|49|440 +Brand#12|LARGE POLISHED STEEL|14|440 +Brand#12|LARGE POLISHED STEEL|49|440 +Brand#12|LARGE POLISHED TIN|49|440 +Brand#12|MEDIUM BURNISHED STEEL|23|440 +Brand#12|MEDIUM BURNISHED TIN|49|440 +Brand#12|MEDIUM PLATED COPPER|23|440 +Brand#12|PROMO BRUSHED BRASS|9|440 +Brand#12|PROMO BRUSHED COPPER|36|440 +Brand#12|PROMO BURNISHED BRASS|19|440 +Brand#12|PROMO BURNISHED COPPER|36|440 +Brand#12|PROMO PLATED BRASS|36|440 +Brand#12|PROMO POLISHED TIN|14|440 +Brand#12|PROMO POLISHED TIN|23|440 +Brand#12|SMALL ANODIZED STEEL|19|440 +Brand#12|SMALL BRUSHED NICKEL|9|440 +Brand#12|SMALL BRUSHED STEEL|19|440 +Brand#12|SMALL BURNISHED BRASS|3|440 +Brand#12|SMALL POLISHED BRASS|3|440 +Brand#12|SMALL POLISHED TIN|19|440 +Brand#12|STANDARD ANODIZED BRASS|9|440 +Brand#12|STANDARD BRUSHED COPPER|3|440 +Brand#12|STANDARD BRUSHED COPPER|36|440 +Brand#12|STANDARD BRUSHED NICKEL|14|440 +Brand#12|STANDARD BRUSHED TIN|3|440 +Brand#12|STANDARD BURNISHED BRASS|36|440 +Brand#12|STANDARD BURNISHED STEEL|36|440 +Brand#12|STANDARD PLATED TIN|23|440 +Brand#12|STANDARD POLISHED COPPER|45|440 +Brand#13|ECONOMY ANODIZED NICKEL|3|440 +Brand#13|ECONOMY BRUSHED NICKEL|45|440 +Brand#13|ECONOMY BURNISHED COPPER|19|440 +Brand#13|ECONOMY BURNISHED STEEL|19|440 +Brand#13|ECONOMY POLISHED BRASS|14|440 +Brand#13|ECONOMY POLISHED BRASS|45|440 +Brand#13|LARGE ANODIZED TIN|19|440 +Brand#13|LARGE BRUSHED BRASS|49|440 +Brand#13|LARGE POLISHED COPPER|9|440 +Brand#13|MEDIUM ANODIZED NICKEL|3|440 +Brand#13|MEDIUM ANODIZED TIN|14|440 +Brand#13|MEDIUM BURNISHED STEEL|9|440 +Brand#13|MEDIUM PLATED NICKEL|9|440 +Brand#13|PROMO ANODIZED BRASS|49|440 +Brand#13|PROMO ANODIZED TIN|45|440 +Brand#13|PROMO BURNISHED STEEL|9|440 +Brand#13|PROMO PLATED BRASS|3|440 +Brand#13|PROMO PLATED STEEL|23|440 +Brand#13|SMALL ANODIZED NICKEL|45|440 +Brand#13|SMALL BRUSHED BRASS|23|440 +Brand#13|SMALL POLISHED COPPER|14|440 +Brand#13|SMALL POLISHED COPPER|49|440 +Brand#13|STANDARD BURNISHED BRASS|45|440 +Brand#13|STANDARD PLATED NICKEL|23|440 +Brand#13|STANDARD POLISHED BRASS|14|440 +Brand#13|STANDARD POLISHED BRASS|36|440 +Brand#13|STANDARD POLISHED COPPER|9|440 +Brand#13|STANDARD POLISHED STEEL|19|440 +Brand#13|STANDARD POLISHED TIN|9|440 +Brand#14|ECONOMY ANODIZED STEEL|14|440 +Brand#14|ECONOMY POLISHED STEEL|49|440 +Brand#14|LARGE ANODIZED BRASS|19|440 +Brand#14|LARGE ANODIZED BRASS|36|440 +Brand#14|LARGE BURNISHED TIN|9|440 +Brand#14|LARGE PLATED TIN|23|440 +Brand#14|LARGE POLISHED COPPER|36|440 +Brand#14|MEDIUM ANODIZED TIN|49|440 +Brand#14|MEDIUM BRUSHED COPPER|49|440 +Brand#14|MEDIUM BRUSHED STEEL|45|440 +Brand#14|MEDIUM BRUSHED TIN|36|440 +Brand#14|MEDIUM BURNISHED COPPER|9|440 +Brand#14|MEDIUM BURNISHED STEEL|3|440 +Brand#14|MEDIUM BURNISHED TIN|3|440 +Brand#14|MEDIUM PLATED BRASS|45|440 +Brand#14|PROMO BRUSHED BRASS|3|440 +Brand#14|PROMO BRUSHED BRASS|45|440 +Brand#14|PROMO PLATED BRASS|23|440 +Brand#14|PROMO PLATED NICKEL|14|440 +Brand#14|PROMO POLISHED STEEL|45|440 +Brand#14|SMALL ANODIZED COPPER|36|440 +Brand#14|SMALL ANODIZED NICKEL|49|440 +Brand#14|SMALL BURNISHED TIN|9|440 +Brand#14|SMALL POLISHED COPPER|14|440 +Brand#14|STANDARD ANODIZED TIN|3|440 +Brand#14|STANDARD BURNISHED BRASS|45|440 +Brand#14|STANDARD PLATED NICKEL|14|440 +Brand#14|STANDARD PLATED STEEL|36|440 +Brand#15|ECONOMY ANODIZED STEEL|14|440 +Brand#15|ECONOMY ANODIZED STEEL|45|440 +Brand#15|ECONOMY BRUSHED NICKEL|36|440 +Brand#15|ECONOMY BRUSHED TIN|23|440 +Brand#15|ECONOMY POLISHED STEEL|3|440 +Brand#15|LARGE ANODIZED STEEL|36|440 +Brand#15|LARGE BRUSHED BRASS|36|440 +Brand#15|LARGE BURNISHED STEEL|9|440 +Brand#15|LARGE BURNISHED TIN|36|440 +Brand#15|LARGE PLATED COPPER|14|440 +Brand#15|LARGE PLATED COPPER|19|440 +Brand#15|LARGE PLATED STEEL|3|440 +Brand#15|LARGE PLATED STEEL|9|440 +Brand#15|LARGE POLISHED BRASS|14|440 +Brand#15|MEDIUM ANODIZED NICKEL|45|440 +Brand#15|MEDIUM BURNISHED COPPER|45|440 +Brand#15|MEDIUM BURNISHED NICKEL|49|440 +Brand#15|MEDIUM PLATED STEEL|49|440 +Brand#15|MEDIUM PLATED TIN|9|440 +Brand#15|PROMO ANODIZED COPPER|14|440 +Brand#15|PROMO BRUSHED BRASS|23|440 +Brand#15|PROMO BRUSHED BRASS|49|440 +Brand#15|PROMO BRUSHED NICKEL|23|440 +Brand#15|PROMO BURNISHED COPPER|9|440 +Brand#15|PROMO PLATED COPPER|49|440 +Brand#15|PROMO PLATED NICKEL|9|440 +Brand#15|PROMO PLATED STEEL|14|440 +Brand#15|SMALL BRUSHED STEEL|14|440 +Brand#15|SMALL BURNISHED TIN|49|440 +Brand#15|STANDARD BRUSHED BRASS|45|440 +Brand#15|STANDARD BURNISHED BRASS|19|440 +Brand#15|STANDARD BURNISHED STEEL|19|440 +Brand#15|STANDARD BURNISHED TIN|3|440 +Brand#15|STANDARD PLATED BRASS|9|440 +Brand#15|STANDARD PLATED STEEL|49|440 +Brand#15|STANDARD PLATED TIN|9|440 +Brand#15|STANDARD POLISHED COPPER|45|440 +Brand#15|STANDARD POLISHED STEEL|23|440 +Brand#21|ECONOMY ANODIZED TIN|9|440 +Brand#21|ECONOMY BURNISHED STEEL|19|440 +Brand#21|ECONOMY POLISHED COPPER|3|440 +Brand#21|LARGE BRUSHED STEEL|23|440 +Brand#21|LARGE BRUSHED STEEL|45|440 +Brand#21|LARGE BURNISHED TIN|9|440 +Brand#21|LARGE BURNISHED TIN|23|440 +Brand#21|LARGE POLISHED COPPER|23|440 +Brand#21|LARGE POLISHED TIN|36|440 +Brand#21|PROMO ANODIZED NICKEL|19|440 +Brand#21|PROMO ANODIZED TIN|45|440 +Brand#21|PROMO BRUSHED COPPER|19|440 +Brand#21|PROMO BRUSHED NICKEL|3|440 +Brand#21|PROMO BRUSHED STEEL|49|440 +Brand#21|PROMO BURNISHED STEEL|3|440 +Brand#21|PROMO BURNISHED STEEL|45|440 +Brand#21|PROMO BURNISHED TIN|3|440 +Brand#21|PROMO BURNISHED TIN|14|440 +Brand#21|PROMO PLATED BRASS|14|440 +Brand#21|PROMO POLISHED STEEL|36|440 +Brand#21|SMALL BRUSHED COPPER|23|440 +Brand#21|SMALL BRUSHED COPPER|45|440 +Brand#21|SMALL BRUSHED NICKEL|49|440 +Brand#21|SMALL BURNISHED COPPER|23|440 +Brand#21|SMALL PLATED STEEL|19|440 +Brand#21|SMALL POLISHED TIN|14|440 +Brand#21|STANDARD ANODIZED BRASS|9|440 +Brand#21|STANDARD BURNISHED BRASS|36|440 +Brand#21|STANDARD POLISHED COPPER|19|440 +Brand#22|ECONOMY ANODIZED NICKEL|45|440 +Brand#22|ECONOMY ANODIZED STEEL|14|440 +Brand#22|ECONOMY BRUSHED TIN|14|440 +Brand#22|ECONOMY BRUSHED TIN|45|440 +Brand#22|ECONOMY BURNISHED TIN|36|440 +Brand#22|ECONOMY PLATED COPPER|49|440 +Brand#22|ECONOMY POLISHED BRASS|19|440 +Brand#22|ECONOMY POLISHED BRASS|49|440 +Brand#22|LARGE ANODIZED BRASS|3|440 +Brand#22|LARGE ANODIZED STEEL|49|440 +Brand#22|LARGE BURNISHED TIN|45|440 +Brand#22|LARGE POLISHED NICKEL|14|440 +Brand#22|LARGE POLISHED TIN|49|440 +Brand#22|MEDIUM BRUSHED BRASS|45|440 +Brand#22|MEDIUM BRUSHED STEEL|23|440 +Brand#22|MEDIUM BURNISHED BRASS|23|440 +Brand#22|MEDIUM BURNISHED STEEL|36|440 +Brand#22|MEDIUM PLATED TIN|3|440 +Brand#22|PROMO ANODIZED BRASS|45|440 +Brand#22|PROMO ANODIZED STEEL|45|440 +Brand#22|PROMO BRUSHED BRASS|3|440 +Brand#22|PROMO BRUSHED BRASS|19|440 +Brand#22|PROMO BRUSHED TIN|9|440 +Brand#22|PROMO BURNISHED NICKEL|9|440 +Brand#22|PROMO BURNISHED NICKEL|23|440 +Brand#22|PROMO POLISHED BRASS|36|440 +Brand#22|PROMO POLISHED STEEL|19|440 +Brand#22|SMALL ANODIZED COPPER|9|440 +Brand#22|SMALL BURNISHED COPPER|36|440 +Brand#22|SMALL PLATED COPPER|49|440 +Brand#22|SMALL POLISHED COPPER|3|440 +Brand#22|SMALL POLISHED TIN|9|440 +Brand#22|STANDARD BRUSHED COPPER|19|440 +Brand#22|STANDARD BRUSHED NICKEL|3|440 +Brand#22|STANDARD PLATED NICKEL|19|440 +Brand#22|STANDARD POLISHED BRASS|19|440 +Brand#22|STANDARD POLISHED NICKEL|9|440 +Brand#22|STANDARD POLISHED TIN|14|440 +Brand#23|ECONOMY ANODIZED TIN|3|440 +Brand#23|ECONOMY ANODIZED TIN|36|440 +Brand#23|ECONOMY POLISHED BRASS|14|440 +Brand#23|ECONOMY POLISHED STEEL|14|440 +Brand#23|ECONOMY POLISHED TIN|23|440 +Brand#23|LARGE PLATED BRASS|45|440 +Brand#23|LARGE PLATED STEEL|23|440 +Brand#23|MEDIUM ANODIZED STEEL|45|440 +Brand#23|MEDIUM BRUSHED STEEL|19|440 +Brand#23|MEDIUM BURNISHED COPPER|14|440 +Brand#23|MEDIUM PLATED COPPER|23|440 +Brand#23|MEDIUM PLATED TIN|45|440 +Brand#23|PROMO ANODIZED NICKEL|45|440 +Brand#23|PROMO BRUSHED COPPER|49|440 +Brand#23|PROMO BRUSHED NICKEL|14|440 +Brand#23|PROMO BURNISHED BRASS|9|440 +Brand#23|SMALL BURNISHED COPPER|19|440 +Brand#23|SMALL BURNISHED TIN|36|440 +Brand#23|SMALL PLATED BRASS|19|440 +Brand#23|SMALL PLATED COPPER|49|440 +Brand#23|STANDARD ANODIZED COPPER|19|440 +Brand#23|STANDARD ANODIZED STEEL|19|440 +Brand#23|STANDARD ANODIZED STEEL|23|440 +Brand#23|STANDARD ANODIZED TIN|45|440 +Brand#23|STANDARD BRUSHED STEEL|3|440 +Brand#23|STANDARD PLATED COPPER|49|440 +Brand#24|ECONOMY ANODIZED TIN|14|440 +Brand#24|ECONOMY BRUSHED COPPER|36|440 +Brand#24|ECONOMY BRUSHED STEEL|9|440 +Brand#24|ECONOMY BURNISHED BRASS|23|440 +Brand#24|ECONOMY BURNISHED STEEL|45|440 +Brand#24|ECONOMY POLISHED BRASS|14|440 +Brand#24|ECONOMY POLISHED TIN|3|440 +Brand#24|LARGE ANODIZED BRASS|19|440 +Brand#24|LARGE BRUSHED BRASS|23|440 +Brand#24|LARGE BRUSHED COPPER|45|440 +Brand#24|LARGE BRUSHED STEEL|36|440 +Brand#24|LARGE BURNISHED STEEL|19|440 +Brand#24|LARGE POLISHED NICKEL|14|440 +Brand#24|MEDIUM ANODIZED TIN|49|440 +Brand#24|MEDIUM BURNISHED COPPER|23|440 +Brand#24|MEDIUM BURNISHED NICKEL|19|440 +Brand#24|MEDIUM BURNISHED TIN|9|440 +Brand#24|MEDIUM PLATED COPPER|45|440 +Brand#24|MEDIUM PLATED TIN|49|440 +Brand#24|PROMO ANODIZED STEEL|9|440 +Brand#24|PROMO ANODIZED TIN|9|440 +Brand#24|PROMO BURNISHED STEEL|19|440 +Brand#24|PROMO POLISHED BRASS|19|440 +Brand#24|SMALL ANODIZED TIN|36|440 +Brand#24|SMALL BRUSHED NICKEL|19|440 +Brand#24|SMALL BURNISHED COPPER|3|440 +Brand#24|SMALL BURNISHED COPPER|14|440 +Brand#24|STANDARD ANODIZED NICKEL|3|440 +Brand#24|STANDARD ANODIZED TIN|49|440 +Brand#24|STANDARD BRUSHED BRASS|19|440 +Brand#24|STANDARD BURNISHED STEEL|9|440 +Brand#24|STANDARD BURNISHED TIN|45|440 +Brand#24|STANDARD PLATED BRASS|45|440 +Brand#24|STANDARD PLATED NICKEL|3|440 +Brand#24|STANDARD PLATED STEEL|49|440 +Brand#25|ECONOMY PLATED BRASS|45|440 +Brand#25|LARGE ANODIZED COPPER|49|440 +Brand#25|LARGE ANODIZED STEEL|45|440 +Brand#25|LARGE BURNISHED BRASS|45|440 +Brand#25|LARGE PLATED TIN|9|440 +Brand#25|LARGE POLISHED STEEL|14|440 +Brand#25|LARGE POLISHED TIN|36|440 +Brand#25|MEDIUM ANODIZED BRASS|49|440 +Brand#25|MEDIUM BRUSHED COPPER|14|440 +Brand#25|MEDIUM BRUSHED COPPER|23|440 +Brand#25|MEDIUM BRUSHED COPPER|45|440 +Brand#25|MEDIUM BURNISHED BRASS|23|440 +Brand#25|MEDIUM PLATED NICKEL|23|440 +Brand#25|PROMO BRUSHED NICKEL|36|440 +Brand#25|PROMO POLISHED NICKEL|14|440 +Brand#25|PROMO POLISHED NICKEL|45|440 +Brand#25|PROMO POLISHED TIN|23|440 +Brand#25|SMALL ANODIZED TIN|23|440 +Brand#25|SMALL BURNISHED BRASS|3|440 +Brand#25|SMALL PLATED BRASS|9|440 +Brand#25|SMALL POLISHED NICKEL|49|440 +Brand#25|STANDARD ANODIZED COPPER|9|440 +Brand#25|STANDARD ANODIZED COPPER|45|440 +Brand#25|STANDARD BRUSHED BRASS|49|440 +Brand#25|STANDARD BRUSHED NICKEL|49|440 +Brand#25|STANDARD BRUSHED TIN|45|440 +Brand#25|STANDARD POLISHED COPPER|9|440 +Brand#31|ECONOMY ANODIZED BRASS|49|440 +Brand#31|ECONOMY BRUSHED NICKEL|9|440 +Brand#31|ECONOMY BURNISHED BRASS|36|440 +Brand#31|ECONOMY PLATED BRASS|9|440 +Brand#31|ECONOMY POLISHED NICKEL|49|440 +Brand#31|LARGE ANODIZED BRASS|36|440 +Brand#31|LARGE ANODIZED COPPER|49|440 +Brand#31|LARGE PLATED BRASS|9|440 +Brand#31|MEDIUM ANODIZED COPPER|49|440 +Brand#31|MEDIUM ANODIZED NICKEL|14|440 +Brand#31|MEDIUM BURNISHED COPPER|19|440 +Brand#31|MEDIUM BURNISHED NICKEL|49|440 +Brand#31|PROMO BURNISHED COPPER|9|440 +Brand#31|PROMO BURNISHED TIN|3|440 +Brand#31|PROMO PLATED TIN|9|440 +Brand#31|PROMO POLISHED TIN|14|440 +Brand#31|SMALL BRUSHED TIN|23|440 +Brand#31|SMALL BURNISHED NICKEL|45|440 +Brand#31|SMALL PLATED BRASS|3|440 +Brand#31|SMALL PLATED COPPER|14|440 +Brand#31|STANDARD BRUSHED COPPER|23|440 +Brand#31|STANDARD BRUSHED TIN|3|440 +Brand#31|STANDARD BURNISHED NICKEL|3|440 +Brand#31|STANDARD BURNISHED STEEL|49|440 +Brand#31|STANDARD PLATED BRASS|9|440 +Brand#31|STANDARD PLATED TIN|19|440 +Brand#31|STANDARD POLISHED STEEL|45|440 +Brand#32|ECONOMY BURNISHED BRASS|23|440 +Brand#32|ECONOMY BURNISHED COPPER|36|440 +Brand#32|ECONOMY POLISHED TIN|9|440 +Brand#32|LARGE ANODIZED COPPER|19|440 +Brand#32|LARGE BRUSHED STEEL|45|440 +Brand#32|LARGE BURNISHED NICKEL|3|440 +Brand#32|LARGE BURNISHED TIN|19|440 +Brand#32|MEDIUM ANODIZED BRASS|49|440 +Brand#32|MEDIUM ANODIZED STEEL|23|440 +Brand#32|MEDIUM BURNISHED BRASS|3|440 +Brand#32|MEDIUM BURNISHED COPPER|9|440 +Brand#32|MEDIUM BURNISHED NICKEL|19|440 +Brand#32|MEDIUM BURNISHED TIN|19|440 +Brand#32|PROMO ANODIZED BRASS|36|440 +Brand#32|PROMO BURNISHED NICKEL|9|440 +Brand#32|PROMO PLATED BRASS|3|440 +Brand#32|PROMO PLATED NICKEL|36|440 +Brand#32|PROMO POLISHED BRASS|9|440 +Brand#32|SMALL BRUSHED NICKEL|49|440 +Brand#32|SMALL BURNISHED TIN|45|440 +Brand#32|SMALL POLISHED TIN|36|440 +Brand#32|STANDARD ANODIZED NICKEL|49|440 +Brand#32|STANDARD BRUSHED COPPER|14|440 +Brand#32|STANDARD PLATED COPPER|49|440 +Brand#33|ECONOMY BURNISHED BRASS|14|440 +Brand#33|ECONOMY BURNISHED STEEL|49|440 +Brand#33|ECONOMY PLATED STEEL|3|440 +Brand#33|LARGE ANODIZED NICKEL|49|440 +Brand#33|LARGE BRUSHED NICKEL|45|440 +Brand#33|LARGE POLISHED BRASS|23|440 +Brand#33|LARGE POLISHED COPPER|19|440 +Brand#33|LARGE POLISHED STEEL|9|440 +Brand#33|MEDIUM ANODIZED NICKEL|9|440 +Brand#33|MEDIUM BRUSHED COPPER|23|440 +Brand#33|MEDIUM BRUSHED NICKEL|9|440 +Brand#33|MEDIUM BRUSHED TIN|23|440 +Brand#33|PROMO ANODIZED NICKEL|3|440 +Brand#33|PROMO ANODIZED STEEL|49|440 +Brand#33|PROMO BRUSHED STEEL|23|440 +Brand#33|PROMO BRUSHED STEEL|36|440 +Brand#33|PROMO BURNISHED BRASS|3|440 +Brand#33|PROMO BURNISHED STEEL|9|440 +Brand#33|PROMO POLISHED NICKEL|9|440 +Brand#33|SMALL ANODIZED TIN|45|440 +Brand#33|SMALL BRUSHED COPPER|36|440 +Brand#33|SMALL BRUSHED NICKEL|19|440 +Brand#33|SMALL BRUSHED STEEL|19|440 +Brand#33|SMALL BURNISHED BRASS|9|440 +Brand#33|SMALL BURNISHED BRASS|14|440 +Brand#33|SMALL BURNISHED NICKEL|9|440 +Brand#33|SMALL PLATED NICKEL|45|440 +Brand#33|SMALL PLATED TIN|3|440 +Brand#33|SMALL POLISHED BRASS|9|440 +Brand#33|STANDARD BURNISHED STEEL|23|440 +Brand#34|ECONOMY ANODIZED STEEL|45|440 +Brand#34|ECONOMY BRUSHED BRASS|23|440 +Brand#34|ECONOMY BURNISHED STEEL|19|440 +Brand#34|ECONOMY PLATED BRASS|23|440 +Brand#34|ECONOMY PLATED COPPER|3|440 +Brand#34|ECONOMY PLATED NICKEL|9|440 +Brand#34|LARGE BRUSHED BRASS|19|440 +Brand#34|LARGE BURNISHED COPPER|14|440 +Brand#34|LARGE PLATED STEEL|23|440 +Brand#34|LARGE POLISHED TIN|36|440 +Brand#34|MEDIUM BRUSHED STEEL|45|440 +Brand#34|MEDIUM BURNISHED NICKEL|49|440 +Brand#34|MEDIUM PLATED COPPER|45|440 +Brand#34|MEDIUM PLATED STEEL|23|440 +Brand#34|MEDIUM PLATED STEEL|36|440 +Brand#34|PROMO ANODIZED COPPER|19|440 +Brand#34|PROMO ANODIZED NICKEL|14|440 +Brand#34|PROMO BRUSHED COPPER|14|440 +Brand#34|PROMO BURNISHED BRASS|36|440 +Brand#34|PROMO BURNISHED STEEL|23|440 +Brand#34|PROMO BURNISHED TIN|19|440 +Brand#34|PROMO PLATED NICKEL|14|440 +Brand#34|PROMO PLATED TIN|14|440 +Brand#34|SMALL ANODIZED NICKEL|3|440 +Brand#34|SMALL BRUSHED BRASS|14|440 +Brand#34|SMALL BRUSHED COPPER|36|440 +Brand#34|SMALL BRUSHED NICKEL|36|440 +Brand#34|SMALL BURNISHED TIN|9|440 +Brand#35|ECONOMY PLATED NICKEL|23|440 +Brand#35|ECONOMY POLISHED COPPER|49|440 +Brand#35|ECONOMY POLISHED TIN|3|440 +Brand#35|LARGE BURNISHED STEEL|9|440 +Brand#35|LARGE PLATED STEEL|23|440 +Brand#35|MEDIUM ANODIZED NICKEL|36|440 +Brand#35|MEDIUM ANODIZED STEEL|23|440 +Brand#35|MEDIUM ANODIZED TIN|23|440 +Brand#35|MEDIUM ANODIZED TIN|45|440 +Brand#35|MEDIUM BRUSHED BRASS|23|440 +Brand#35|MEDIUM BRUSHED COPPER|9|440 +Brand#35|MEDIUM BURNISHED STEEL|45|440 +Brand#35|MEDIUM PLATED BRASS|9|440 +Brand#35|PROMO ANODIZED STEEL|45|440 +Brand#35|PROMO ANODIZED TIN|45|440 +Brand#35|PROMO BRUSHED STEEL|23|440 +Brand#35|PROMO BRUSHED TIN|14|440 +Brand#35|PROMO BURNISHED COPPER|49|440 +Brand#35|PROMO BURNISHED STEEL|9|440 +Brand#35|PROMO POLISHED STEEL|23|440 +Brand#35|SMALL BRUSHED NICKEL|36|440 +Brand#35|SMALL POLISHED STEEL|3|440 +Brand#35|SMALL POLISHED TIN|3|440 +Brand#35|STANDARD ANODIZED COPPER|9|440 +Brand#35|STANDARD ANODIZED STEEL|36|440 +Brand#35|STANDARD BURNISHED STEEL|49|440 +Brand#41|ECONOMY BRUSHED BRASS|9|440 +Brand#41|ECONOMY BRUSHED STEEL|49|440 +Brand#41|ECONOMY BURNISHED BRASS|9|440 +Brand#41|ECONOMY PLATED BRASS|23|440 +Brand#41|ECONOMY POLISHED TIN|3|440 +Brand#41|LARGE BRUSHED STEEL|19|440 +Brand#41|LARGE BURNISHED BRASS|3|440 +Brand#41|LARGE BURNISHED BRASS|36|440 +Brand#41|LARGE BURNISHED NICKEL|49|440 +Brand#41|LARGE BURNISHED TIN|23|440 +Brand#41|LARGE POLISHED BRASS|14|440 +Brand#41|LARGE POLISHED STEEL|23|440 +Brand#41|MEDIUM ANODIZED BRASS|14|440 +Brand#41|MEDIUM ANODIZED NICKEL|45|440 +Brand#41|MEDIUM BRUSHED NICKEL|23|440 +Brand#41|MEDIUM BURNISHED COPPER|3|440 +Brand#41|MEDIUM BURNISHED NICKEL|45|440 +Brand#41|MEDIUM PLATED STEEL|3|440 +Brand#41|PROMO ANODIZED NICKEL|14|440 +Brand#41|PROMO ANODIZED NICKEL|36|440 +Brand#41|PROMO ANODIZED TIN|23|440 +Brand#41|PROMO BRUSHED BRASS|14|440 +Brand#41|PROMO BRUSHED TIN|19|440 +Brand#41|PROMO BURNISHED STEEL|9|440 +Brand#41|PROMO PLATED STEEL|36|440 +Brand#41|SMALL ANODIZED STEEL|49|440 +Brand#41|SMALL BRUSHED COPPER|3|440 +Brand#41|SMALL BURNISHED NICKEL|36|440 +Brand#41|SMALL PLATED COPPER|36|440 +Brand#41|SMALL POLISHED BRASS|49|440 +Brand#41|SMALL POLISHED NICKEL|3|440 +Brand#41|STANDARD ANODIZED BRASS|45|440 +Brand#41|STANDARD ANODIZED COPPER|14|440 +Brand#41|STANDARD ANODIZED NICKEL|19|440 +Brand#41|STANDARD ANODIZED TIN|45|440 +Brand#41|STANDARD BRUSHED COPPER|45|440 +Brand#41|STANDARD BRUSHED STEEL|14|440 +Brand#41|STANDARD POLISHED COPPER|23|440 +Brand#41|STANDARD POLISHED NICKEL|14|440 +Brand#42|ECONOMY BRUSHED BRASS|36|440 +Brand#42|ECONOMY BRUSHED COPPER|9|440 +Brand#42|ECONOMY BRUSHED STEEL|19|440 +Brand#42|ECONOMY BURNISHED NICKEL|9|440 +Brand#42|ECONOMY PLATED COPPER|19|440 +Brand#42|ECONOMY POLISHED NICKEL|14|440 +Brand#42|ECONOMY POLISHED NICKEL|19|440 +Brand#42|LARGE ANODIZED NICKEL|9|440 +Brand#42|LARGE BRUSHED COPPER|19|440 +Brand#42|LARGE BRUSHED TIN|23|440 +Brand#42|LARGE BURNISHED NICKEL|14|440 +Brand#42|LARGE BURNISHED STEEL|14|440 +Brand#42|LARGE BURNISHED STEEL|49|440 +Brand#42|LARGE BURNISHED TIN|19|440 +Brand#42|LARGE PLATED STEEL|14|440 +Brand#42|MEDIUM ANODIZED NICKEL|19|440 +Brand#42|MEDIUM BURNISHED TIN|3|440 +Brand#42|MEDIUM BURNISHED TIN|19|440 +Brand#42|MEDIUM PLATED NICKEL|36|440 +Brand#42|MEDIUM PLATED STEEL|36|440 +Brand#42|PROMO BRUSHED BRASS|14|440 +Brand#42|PROMO BURNISHED NICKEL|3|440 +Brand#42|PROMO PLATED BRASS|23|440 +Brand#42|PROMO PLATED COPPER|23|440 +Brand#42|PROMO PLATED STEEL|45|440 +Brand#42|PROMO POLISHED BRASS|14|440 +Brand#42|SMALL BRUSHED NICKEL|14|440 +Brand#42|SMALL BRUSHED NICKEL|45|440 +Brand#42|SMALL BURNISHED STEEL|45|440 +Brand#42|SMALL POLISHED BRASS|19|440 +Brand#42|SMALL POLISHED COPPER|45|440 +Brand#42|SMALL POLISHED TIN|3|440 +Brand#42|STANDARD ANODIZED TIN|9|440 +Brand#42|STANDARD BRUSHED TIN|23|440 +Brand#42|STANDARD BURNISHED NICKEL|9|440 +Brand#42|STANDARD PLATED BRASS|36|440 +Brand#42|STANDARD POLISHED STEEL|3|440 +Brand#43|ECONOMY BRUSHED BRASS|3|440 +Brand#43|ECONOMY BRUSHED NICKEL|36|440 +Brand#43|ECONOMY BURNISHED STEEL|23|440 +Brand#43|ECONOMY POLISHED COPPER|45|440 +Brand#43|LARGE PLATED NICKEL|3|440 +Brand#43|MEDIUM BURNISHED STEEL|36|440 +Brand#43|MEDIUM BURNISHED TIN|3|440 +Brand#43|MEDIUM PLATED BRASS|49|440 +Brand#43|PROMO ANODIZED NICKEL|23|440 +Brand#43|PROMO ANODIZED TIN|36|440 +Brand#43|PROMO BRUSHED TIN|9|440 +Brand#43|PROMO BURNISHED BRASS|49|440 +Brand#43|PROMO BURNISHED NICKEL|23|440 +Brand#43|PROMO BURNISHED STEEL|3|440 +Brand#43|PROMO POLISHED NICKEL|9|440 +Brand#43|PROMO POLISHED TIN|36|440 +Brand#43|SMALL ANODIZED STEEL|45|440 +Brand#43|SMALL ANODIZED STEEL|49|440 +Brand#43|SMALL BRUSHED COPPER|14|440 +Brand#43|SMALL BURNISHED NICKEL|23|440 +Brand#43|SMALL PLATED NICKEL|23|440 +Brand#43|SMALL POLISHED NICKEL|23|440 +Brand#43|STANDARD ANODIZED COPPER|14|440 +Brand#43|STANDARD ANODIZED NICKEL|9|440 +Brand#43|STANDARD ANODIZED NICKEL|45|440 +Brand#43|STANDARD BURNISHED NICKEL|14|440 +Brand#43|STANDARD PLATED NICKEL|23|440 +Brand#43|STANDARD PLATED NICKEL|36|440 +Brand#43|STANDARD PLATED TIN|9|440 +Brand#43|STANDARD POLISHED BRASS|14|440 +Brand#44|ECONOMY ANODIZED NICKEL|23|440 +Brand#44|ECONOMY ANODIZED NICKEL|49|440 +Brand#44|ECONOMY BRUSHED BRASS|3|440 +Brand#44|ECONOMY PLATED STEEL|23|440 +Brand#44|ECONOMY POLISHED COPPER|49|440 +Brand#44|LARGE BRUSHED NICKEL|19|440 +Brand#44|LARGE BURNISHED STEEL|45|440 +Brand#44|LARGE PLATED STEEL|14|440 +Brand#44|LARGE POLISHED BRASS|14|440 +Brand#44|LARGE POLISHED STEEL|45|440 +Brand#44|LARGE POLISHED STEEL|49|440 +Brand#44|MEDIUM ANODIZED BRASS|23|440 +Brand#44|MEDIUM BRUSHED STEEL|19|440 +Brand#44|MEDIUM BURNISHED STEEL|19|440 +Brand#44|MEDIUM PLATED BRASS|3|440 +Brand#44|MEDIUM PLATED TIN|19|440 +Brand#44|PROMO ANODIZED NICKEL|14|440 +Brand#44|PROMO ANODIZED STEEL|14|440 +Brand#44|PROMO ANODIZED TIN|14|440 +Brand#44|PROMO BRUSHED BRASS|3|440 +Brand#44|PROMO BURNISHED TIN|36|440 +Brand#44|SMALL ANODIZED COPPER|36|440 +Brand#44|SMALL BRUSHED STEEL|9|440 +Brand#44|SMALL POLISHED COPPER|19|440 +Brand#44|STANDARD BRUSHED NICKEL|3|440 +Brand#44|STANDARD BURNISHED BRASS|3|440 +Brand#44|STANDARD BURNISHED COPPER|9|440 +Brand#44|STANDARD PLATED TIN|49|440 +Brand#44|STANDARD POLISHED STEEL|23|440 +Brand#44|STANDARD POLISHED STEEL|49|440 +Brand#51|ECONOMY BURNISHED BRASS|45|440 +Brand#51|ECONOMY PLATED BRASS|49|440 +Brand#51|LARGE ANODIZED COPPER|19|440 +Brand#51|LARGE ANODIZED COPPER|49|440 +Brand#51|LARGE ANODIZED STEEL|49|440 +Brand#51|LARGE POLISHED BRASS|3|440 +Brand#51|MEDIUM BRUSHED STEEL|9|440 +Brand#51|MEDIUM BURNISHED COPPER|14|440 +Brand#51|MEDIUM BURNISHED TIN|9|440 +Brand#51|PROMO ANODIZED NICKEL|14|440 +Brand#51|PROMO ANODIZED STEEL|3|440 +Brand#51|PROMO BRUSHED BRASS|3|440 +Brand#51|PROMO BRUSHED BRASS|9|440 +Brand#51|PROMO BRUSHED COPPER|36|440 +Brand#51|PROMO BRUSHED TIN|9|440 +Brand#51|PROMO BURNISHED NICKEL|3|440 +Brand#51|PROMO PLATED COPPER|9|440 +Brand#51|PROMO PLATED TIN|49|440 +Brand#51|PROMO POLISHED NICKEL|19|440 +Brand#51|PROMO POLISHED STEEL|9|440 +Brand#51|SMALL ANODIZED COPPER|45|440 +Brand#51|SMALL ANODIZED STEEL|9|440 +Brand#51|SMALL ANODIZED TIN|49|440 +Brand#51|SMALL BRUSHED TIN|45|440 +Brand#51|SMALL BURNISHED BRASS|36|440 +Brand#51|SMALL BURNISHED NICKEL|23|440 +Brand#51|SMALL POLISHED BRASS|19|440 +Brand#51|SMALL POLISHED TIN|9|440 +Brand#51|STANDARD BRUSHED TIN|9|440 +Brand#51|STANDARD BURNISHED BRASS|45|440 +Brand#51|STANDARD BURNISHED NICKEL|14|440 +Brand#51|STANDARD PLATED COPPER|14|440 +Brand#51|STANDARD PLATED TIN|19|440 +Brand#51|STANDARD POLISHED COPPER|19|440 +Brand#52|ECONOMY ANODIZED STEEL|36|440 +Brand#52|ECONOMY POLISHED STEEL|3|440 +Brand#52|ECONOMY POLISHED STEEL|14|440 +Brand#52|ECONOMY POLISHED TIN|23|440 +Brand#52|LARGE ANODIZED TIN|49|440 +Brand#52|LARGE PLATED COPPER|45|440 +Brand#52|LARGE POLISHED STEEL|36|440 +Brand#52|MEDIUM BRUSHED COPPER|45|440 +Brand#52|MEDIUM BRUSHED TIN|3|440 +Brand#52|MEDIUM PLATED NICKEL|14|440 +Brand#52|MEDIUM PLATED STEEL|3|440 +Brand#52|MEDIUM PLATED STEEL|23|440 +Brand#52|PROMO ANODIZED STEEL|3|440 +Brand#52|PROMO ANODIZED TIN|45|440 +Brand#52|PROMO BURNISHED STEEL|45|440 +Brand#52|SMALL ANODIZED BRASS|9|440 +Brand#52|SMALL ANODIZED BRASS|45|440 +Brand#52|SMALL ANODIZED BRASS|49|440 +Brand#52|SMALL ANODIZED TIN|49|440 +Brand#52|SMALL BRUSHED BRASS|36|440 +Brand#52|SMALL BURNISHED TIN|3|440 +Brand#52|SMALL PLATED COPPER|3|440 +Brand#52|SMALL POLISHED NICKEL|9|440 +Brand#52|SMALL POLISHED STEEL|3|440 +Brand#52|SMALL POLISHED STEEL|9|440 +Brand#52|SMALL POLISHED TIN|23|440 +Brand#52|STANDARD ANODIZED BRASS|19|440 +Brand#52|STANDARD ANODIZED STEEL|49|440 +Brand#52|STANDARD BURNISHED NICKEL|45|440 +Brand#52|STANDARD BURNISHED TIN|9|440 +Brand#52|STANDARD PLATED COPPER|19|440 +Brand#53|ECONOMY ANODIZED COPPER|9|440 +Brand#53|ECONOMY ANODIZED STEEL|14|440 +Brand#53|ECONOMY BURNISHED NICKEL|45|440 +Brand#53|ECONOMY BURNISHED TIN|23|440 +Brand#53|ECONOMY PLATED COPPER|14|440 +Brand#53|LARGE BRUSHED BRASS|45|440 +Brand#53|LARGE POLISHED COPPER|23|440 +Brand#53|LARGE POLISHED NICKEL|14|440 +Brand#53|LARGE POLISHED STEEL|45|440 +Brand#53|MEDIUM BRUSHED COPPER|3|440 +Brand#53|MEDIUM BRUSHED TIN|45|440 +Brand#53|MEDIUM PLATED COPPER|45|440 +Brand#53|PROMO ANODIZED BRASS|19|440 +Brand#53|PROMO BRUSHED BRASS|9|440 +Brand#53|PROMO BURNISHED BRASS|49|440 +Brand#53|PROMO PLATED TIN|23|440 +Brand#53|PROMO POLISHED TIN|14|440 +Brand#53|PROMO POLISHED TIN|23|440 +Brand#53|SMALL ANODIZED COPPER|49|440 +Brand#53|SMALL BRUSHED STEEL|49|440 +Brand#53|SMALL BRUSHED TIN|14|440 +Brand#53|SMALL BURNISHED BRASS|9|440 +Brand#53|SMALL BURNISHED NICKEL|19|440 +Brand#53|SMALL BURNISHED STEEL|23|440 +Brand#53|SMALL PLATED COPPER|49|440 +Brand#53|SMALL PLATED STEEL|14|440 +Brand#53|SMALL PLATED TIN|9|440 +Brand#53|STANDARD ANODIZED TIN|49|440 +Brand#53|STANDARD BURNISHED STEEL|14|440 +Brand#53|STANDARD BURNISHED STEEL|23|440 +Brand#54|ECONOMY ANODIZED TIN|45|440 +Brand#54|ECONOMY BURNISHED BRASS|9|440 +Brand#54|ECONOMY PLATED NICKEL|23|440 +Brand#54|LARGE ANODIZED TIN|45|440 +Brand#54|LARGE BRUSHED STEEL|19|440 +Brand#54|LARGE BURNISHED BRASS|23|440 +Brand#54|LARGE BURNISHED STEEL|14|440 +Brand#54|LARGE BURNISHED TIN|49|440 +Brand#54|LARGE PLATED BRASS|45|440 +Brand#54|LARGE PLATED COPPER|3|440 +Brand#54|LARGE PLATED TIN|23|440 +Brand#54|MEDIUM BURNISHED BRASS|23|440 +Brand#54|MEDIUM BURNISHED COPPER|3|440 +Brand#54|PROMO ANODIZED NICKEL|49|440 +Brand#54|PROMO BURNISHED NICKEL|45|440 +Brand#54|PROMO PLATED BRASS|49|440 +Brand#54|PROMO PLATED COPPER|19|440 +Brand#54|PROMO PLATED NICKEL|9|440 +Brand#54|PROMO PLATED TIN|3|440 +Brand#54|PROMO PLATED TIN|49|440 +Brand#54|SMALL BURNISHED BRASS|19|440 +Brand#54|SMALL PLATED STEEL|23|440 +Brand#54|SMALL POLISHED STEEL|9|440 +Brand#54|STANDARD ANODIZED NICKEL|3|440 +Brand#54|STANDARD ANODIZED STEEL|19|440 +Brand#54|STANDARD ANODIZED TIN|3|440 +Brand#54|STANDARD BRUSHED COPPER|14|440 +Brand#54|STANDARD POLISHED COPPER|9|440 +Brand#54|STANDARD POLISHED COPPER|23|440 +Brand#54|STANDARD POLISHED COPPER|49|440 +Brand#54|STANDARD POLISHED NICKEL|45|440 +Brand#54|STANDARD POLISHED TIN|9|440 +Brand#54|STANDARD POLISHED TIN|45|440 +Brand#55|ECONOMY ANODIZED TIN|45|440 +Brand#55|ECONOMY BRUSHED NICKEL|23|440 +Brand#55|ECONOMY BURNISHED BRASS|49|440 +Brand#55|ECONOMY PLATED BRASS|19|440 +Brand#55|ECONOMY PLATED TIN|3|440 +Brand#55|ECONOMY PLATED TIN|45|440 +Brand#55|ECONOMY POLISHED BRASS|49|440 +Brand#55|ECONOMY POLISHED STEEL|45|440 +Brand#55|LARGE ANODIZED STEEL|49|440 +Brand#55|LARGE ANODIZED TIN|3|440 +Brand#55|LARGE BRUSHED BRASS|45|440 +Brand#55|LARGE BRUSHED NICKEL|36|440 +Brand#55|LARGE BRUSHED NICKEL|45|440 +Brand#55|LARGE BURNISHED STEEL|45|440 +Brand#55|LARGE PLATED COPPER|19|440 +Brand#55|LARGE POLISHED NICKEL|23|440 +Brand#55|LARGE POLISHED TIN|3|440 +Brand#55|MEDIUM ANODIZED TIN|23|440 +Brand#55|MEDIUM BURNISHED STEEL|45|440 +Brand#55|PROMO ANODIZED BRASS|3|440 +Brand#55|PROMO ANODIZED NICKEL|14|440 +Brand#55|PROMO ANODIZED STEEL|9|440 +Brand#55|PROMO ANODIZED TIN|23|440 +Brand#55|PROMO BRUSHED COPPER|45|440 +Brand#55|PROMO BRUSHED NICKEL|23|440 +Brand#55|PROMO POLISHED STEEL|19|440 +Brand#55|PROMO POLISHED TIN|36|440 +Brand#55|SMALL ANODIZED TIN|36|440 +Brand#55|SMALL BRUSHED BRASS|45|440 +Brand#55|SMALL BRUSHED COPPER|49|440 +Brand#55|SMALL BURNISHED BRASS|45|440 +Brand#55|SMALL BURNISHED COPPER|19|440 +Brand#55|SMALL PLATED STEEL|45|440 +Brand#55|SMALL PLATED STEEL|49|440 +Brand#55|SMALL POLISHED TIN|49|440 +Brand#55|STANDARD ANODIZED BRASS|19|440 +Brand#55|STANDARD ANODIZED NICKEL|9|440 +Brand#55|STANDARD BRUSHED COPPER|19|440 +Brand#55|STANDARD BURNISHED BRASS|36|440 +Brand#55|STANDARD BURNISHED NICKEL|3|440 +Brand#55|STANDARD BURNISHED NICKEL|36|440 +Brand#55|STANDARD PLATED TIN|45|440 +Brand#55|STANDARD POLISHED COPPER|19|440 +Brand#11|ECONOMY ANODIZED STEEL|23|439 +Brand#11|ECONOMY PLATED TIN|23|439 +Brand#11|PROMO ANODIZED COPPER|45|439 +Brand#11|SMALL ANODIZED STEEL|19|439 +Brand#11|SMALL ANODIZED TIN|14|439 +Brand#12|ECONOMY BURNISHED TIN|19|439 +Brand#12|LARGE ANODIZED STEEL|49|439 +Brand#12|LARGE PLATED BRASS|3|439 +Brand#12|MEDIUM BRUSHED TIN|23|439 +Brand#12|PROMO BURNISHED NICKEL|19|439 +Brand#12|PROMO POLISHED BRASS|14|439 +Brand#12|PROMO POLISHED NICKEL|23|439 +Brand#12|SMALL BURNISHED BRASS|9|439 +Brand#12|SMALL BURNISHED COPPER|23|439 +Brand#12|STANDARD BRUSHED NICKEL|3|439 +Brand#13|ECONOMY PLATED NICKEL|36|439 +Brand#13|PROMO BRUSHED BRASS|19|439 +Brand#13|PROMO BRUSHED TIN|3|439 +Brand#13|STANDARD BRUSHED TIN|3|439 +Brand#13|STANDARD POLISHED NICKEL|9|439 +Brand#14|ECONOMY ANODIZED NICKEL|45|439 +Brand#14|ECONOMY BRUSHED BRASS|3|439 +Brand#14|PROMO POLISHED BRASS|45|439 +Brand#14|SMALL BRUSHED NICKEL|14|439 +Brand#14|STANDARD BURNISHED NICKEL|14|439 +Brand#14|STANDARD BURNISHED NICKEL|23|439 +Brand#15|ECONOMY BRUSHED STEEL|45|439 +Brand#15|ECONOMY BURNISHED COPPER|49|439 +Brand#15|ECONOMY POLISHED STEEL|49|439 +Brand#15|LARGE BRUSHED COPPER|19|439 +Brand#15|PROMO BURNISHED COPPER|23|439 +Brand#15|STANDARD ANODIZED TIN|19|439 +Brand#15|STANDARD BRUSHED BRASS|49|439 +Brand#21|LARGE PLATED NICKEL|19|439 +Brand#21|LARGE POLISHED NICKEL|3|439 +Brand#21|LARGE POLISHED STEEL|36|439 +Brand#21|MEDIUM BRUSHED NICKEL|19|439 +Brand#21|MEDIUM PLATED STEEL|9|439 +Brand#21|PROMO PLATED COPPER|9|439 +Brand#21|PROMO PLATED TIN|45|439 +Brand#21|PROMO POLISHED NICKEL|19|439 +Brand#21|PROMO POLISHED TIN|19|439 +Brand#21|SMALL BURNISHED COPPER|36|439 +Brand#21|STANDARD BURNISHED TIN|49|439 +Brand#21|STANDARD PLATED BRASS|45|439 +Brand#21|STANDARD PLATED NICKEL|3|439 +Brand#21|STANDARD PLATED NICKEL|49|439 +Brand#22|ECONOMY BURNISHED BRASS|49|439 +Brand#22|LARGE BRUSHED TIN|19|439 +Brand#22|LARGE BURNISHED COPPER|23|439 +Brand#22|LARGE PLATED BRASS|49|439 +Brand#22|LARGE PLATED NICKEL|49|439 +Brand#22|STANDARD BRUSHED BRASS|9|439 +Brand#23|ECONOMY PLATED STEEL|49|439 +Brand#23|LARGE ANODIZED COPPER|14|439 +Brand#23|LARGE PLATED BRASS|23|439 +Brand#23|MEDIUM ANODIZED COPPER|14|439 +Brand#23|MEDIUM BURNISHED BRASS|23|439 +Brand#23|STANDARD BURNISHED TIN|3|439 +Brand#23|STANDARD POLISHED COPPER|3|439 +Brand#24|LARGE ANODIZED COPPER|9|439 +Brand#24|LARGE BRUSHED STEEL|23|439 +Brand#24|LARGE POLISHED STEEL|3|439 +Brand#24|MEDIUM ANODIZED BRASS|45|439 +Brand#24|MEDIUM BRUSHED STEEL|14|439 +Brand#24|SMALL PLATED BRASS|9|439 +Brand#24|SMALL PLATED NICKEL|45|439 +Brand#24|STANDARD ANODIZED NICKEL|23|439 +Brand#25|ECONOMY BRUSHED NICKEL|9|439 +Brand#25|ECONOMY BRUSHED NICKEL|19|439 +Brand#25|ECONOMY POLISHED STEEL|49|439 +Brand#25|LARGE ANODIZED NICKEL|9|439 +Brand#25|LARGE PLATED NICKEL|36|439 +Brand#25|LARGE PLATED STEEL|14|439 +Brand#25|PROMO ANODIZED STEEL|19|439 +Brand#25|PROMO BURNISHED STEEL|36|439 +Brand#25|PROMO PLATED STEEL|3|439 +Brand#25|PROMO POLISHED STEEL|45|439 +Brand#25|SMALL POLISHED TIN|23|439 +Brand#25|STANDARD BURNISHED NICKEL|45|439 +Brand#25|STANDARD POLISHED BRASS|45|439 +Brand#25|STANDARD POLISHED NICKEL|45|439 +Brand#31|ECONOMY BRUSHED TIN|3|439 +Brand#31|LARGE BRUSHED BRASS|49|439 +Brand#31|LARGE POLISHED NICKEL|14|439 +Brand#31|MEDIUM BRUSHED COPPER|23|439 +Brand#31|MEDIUM PLATED NICKEL|19|439 +Brand#31|PROMO BURNISHED COPPER|36|439 +Brand#31|PROMO POLISHED BRASS|49|439 +Brand#31|STANDARD BRUSHED BRASS|19|439 +Brand#31|STANDARD BRUSHED BRASS|23|439 +Brand#32|MEDIUM BRUSHED BRASS|9|439 +Brand#32|PROMO ANODIZED TIN|9|439 +Brand#32|PROMO PLATED NICKEL|49|439 +Brand#32|PROMO POLISHED COPPER|45|439 +Brand#32|SMALL BURNISHED BRASS|3|439 +Brand#32|STANDARD POLISHED STEEL|3|439 +Brand#33|ECONOMY BRUSHED COPPER|14|439 +Brand#33|ECONOMY BURNISHED BRASS|45|439 +Brand#33|LARGE BURNISHED NICKEL|36|439 +Brand#33|MEDIUM PLATED STEEL|9|439 +Brand#33|SMALL BRUSHED NICKEL|23|439 +Brand#33|STANDARD BRUSHED NICKEL|36|439 +Brand#34|ECONOMY ANODIZED COPPER|9|439 +Brand#34|ECONOMY POLISHED NICKEL|45|439 +Brand#34|LARGE BRUSHED STEEL|49|439 +Brand#34|MEDIUM BURNISHED NICKEL|36|439 +Brand#34|SMALL ANODIZED COPPER|23|439 +Brand#34|SMALL BRUSHED BRASS|23|439 +Brand#34|SMALL BRUSHED BRASS|49|439 +Brand#34|SMALL BRUSHED TIN|45|439 +Brand#34|SMALL BURNISHED COPPER|3|439 +Brand#35|ECONOMY PLATED BRASS|36|439 +Brand#35|LARGE ANODIZED BRASS|9|439 +Brand#35|PROMO PLATED STEEL|9|439 +Brand#35|SMALL BRUSHED BRASS|45|439 +Brand#35|SMALL BRUSHED STEEL|45|439 +Brand#35|STANDARD BRUSHED BRASS|3|439 +Brand#35|STANDARD POLISHED COPPER|9|439 +Brand#41|MEDIUM ANODIZED BRASS|9|439 +Brand#41|MEDIUM ANODIZED STEEL|14|439 +Brand#41|PROMO ANODIZED STEEL|23|439 +Brand#41|PROMO BURNISHED BRASS|45|439 +Brand#41|SMALL BURNISHED COPPER|49|439 +Brand#41|STANDARD ANODIZED STEEL|19|439 +Brand#41|STANDARD BURNISHED BRASS|45|439 +Brand#41|STANDARD BURNISHED NICKEL|23|439 +Brand#41|STANDARD BURNISHED TIN|9|439 +Brand#42|LARGE ANODIZED TIN|3|439 +Brand#42|STANDARD POLISHED COPPER|23|439 +Brand#43|ECONOMY ANODIZED STEEL|49|439 +Brand#43|ECONOMY BURNISHED NICKEL|14|439 +Brand#43|ECONOMY BURNISHED TIN|3|439 +Brand#43|MEDIUM ANODIZED BRASS|14|439 +Brand#43|MEDIUM PLATED BRASS|36|439 +Brand#43|PROMO BURNISHED BRASS|3|439 +Brand#43|PROMO BURNISHED COPPER|49|439 +Brand#43|PROMO POLISHED TIN|45|439 +Brand#43|STANDARD PLATED TIN|49|439 +Brand#44|ECONOMY ANODIZED NICKEL|36|439 +Brand#44|LARGE BRUSHED NICKEL|23|439 +Brand#44|MEDIUM BURNISHED COPPER|19|439 +Brand#44|PROMO POLISHED STEEL|19|439 +Brand#44|SMALL POLISHED STEEL|14|439 +Brand#51|LARGE PLATED BRASS|14|439 +Brand#51|MEDIUM BRUSHED STEEL|23|439 +Brand#51|MEDIUM PLATED TIN|14|439 +Brand#51|MEDIUM PLATED TIN|36|439 +Brand#51|PROMO BRUSHED COPPER|45|439 +Brand#51|STANDARD ANODIZED STEEL|49|439 +Brand#52|ECONOMY BURNISHED BRASS|23|439 +Brand#52|LARGE POLISHED BRASS|49|439 +Brand#52|LARGE POLISHED TIN|45|439 +Brand#52|MEDIUM PLATED NICKEL|36|439 +Brand#52|PROMO ANODIZED TIN|9|439 +Brand#52|PROMO PLATED STEEL|19|439 +Brand#52|SMALL PLATED BRASS|49|439 +Brand#53|ECONOMY BRUSHED NICKEL|9|439 +Brand#53|LARGE ANODIZED TIN|45|439 +Brand#53|LARGE POLISHED STEEL|14|439 +Brand#53|MEDIUM ANODIZED NICKEL|14|439 +Brand#53|MEDIUM ANODIZED NICKEL|19|439 +Brand#53|MEDIUM BRUSHED STEEL|14|439 +Brand#53|PROMO POLISHED COPPER|9|439 +Brand#53|SMALL PLATED STEEL|19|439 +Brand#53|SMALL PLATED STEEL|45|439 +Brand#53|STANDARD ANODIZED NICKEL|14|439 +Brand#53|STANDARD BURNISHED BRASS|45|439 +Brand#53|STANDARD POLISHED BRASS|19|439 +Brand#54|ECONOMY BRUSHED TIN|23|439 +Brand#54|LARGE BURNISHED TIN|3|439 +Brand#54|MEDIUM ANODIZED NICKEL|14|439 +Brand#54|SMALL BRUSHED COPPER|45|439 +Brand#54|SMALL BRUSHED NICKEL|14|439 +Brand#54|STANDARD PLATED TIN|36|439 +Brand#55|ECONOMY PLATED NICKEL|3|439 +Brand#55|ECONOMY POLISHED NICKEL|14|439 +Brand#55|LARGE BRUSHED BRASS|3|439 +Brand#55|LARGE BURNISHED TIN|49|439 +Brand#55|MEDIUM ANODIZED STEEL|23|439 +Brand#55|PROMO BRUSHED BRASS|19|439 +Brand#55|PROMO BRUSHED BRASS|23|439 +Brand#55|SMALL ANODIZED NICKEL|45|439 +Brand#55|SMALL BRUSHED NICKEL|36|439 +Brand#55|STANDARD BRUSHED TIN|23|439 +Brand#55|STANDARD BURNISHED STEEL|14|439 +Brand#12|MEDIUM PLATED NICKEL|3|438 +Brand#13|LARGE PLATED BRASS|36|438 +Brand#13|PROMO ANODIZED NICKEL|19|438 +Brand#13|SMALL BRUSHED BRASS|3|438 +Brand#14|LARGE POLISHED BRASS|3|438 +Brand#14|SMALL POLISHED BRASS|3|438 +Brand#15|ECONOMY ANODIZED NICKEL|9|438 +Brand#21|MEDIUM PLATED NICKEL|9|438 +Brand#21|SMALL POLISHED NICKEL|45|438 +Brand#23|MEDIUM PLATED TIN|9|438 +Brand#24|LARGE PLATED BRASS|23|438 +Brand#31|ECONOMY BRUSHED COPPER|23|438 +Brand#32|ECONOMY ANODIZED TIN|14|438 +Brand#32|MEDIUM BRUSHED BRASS|3|438 +Brand#33|ECONOMY PLATED NICKEL|49|438 +Brand#34|SMALL PLATED TIN|23|438 +Brand#41|LARGE PLATED NICKEL|9|438 +Brand#41|SMALL BRUSHED STEEL|36|438 +Brand#43|SMALL BURNISHED STEEL|3|438 +Brand#44|MEDIUM BURNISHED NICKEL|19|438 +Brand#44|SMALL PLATED NICKEL|49|438 +Brand#51|STANDARD PLATED BRASS|49|438 +Brand#52|ECONOMY BRUSHED COPPER|14|438 +Brand#52|LARGE BURNISHED STEEL|36|438 +Brand#52|MEDIUM BRUSHED STEEL|49|438 +Brand#54|MEDIUM BRUSHED NICKEL|9|438 +Brand#54|SMALL BRUSHED BRASS|14|438 +Brand#54|SMALL BRUSHED TIN|36|438 +Brand#55|ECONOMY PLATED STEEL|9|438 +Brand#55|LARGE POLISHED STEEL|36|438 +Brand#33|ECONOMY PLATED STEEL|9|437 +Brand#33|LARGE PLATED COPPER|23|437 +Brand#34|SMALL BRUSHED STEEL|14|437 +Brand#42|MEDIUM BRUSHED TIN|3|437 +Brand#53|STANDARD POLISHED STEEL|23|437 +Brand#54|MEDIUM ANODIZED NICKEL|49|437 +Brand#11|ECONOMY BRUSHED BRASS|3|436 +Brand#11|ECONOMY BURNISHED NICKEL|45|436 +Brand#11|ECONOMY PLATED BRASS|45|436 +Brand#11|ECONOMY PLATED TIN|45|436 +Brand#11|ECONOMY POLISHED NICKEL|49|436 +Brand#11|LARGE BURNISHED NICKEL|14|436 +Brand#11|LARGE BURNISHED TIN|14|436 +Brand#11|LARGE PLATED COPPER|3|436 +Brand#11|LARGE PLATED NICKEL|36|436 +Brand#11|LARGE PLATED STEEL|45|436 +Brand#11|MEDIUM ANODIZED BRASS|23|436 +Brand#11|MEDIUM BURNISHED STEEL|14|436 +Brand#11|MEDIUM PLATED COPPER|49|436 +Brand#11|MEDIUM PLATED NICKEL|45|436 +Brand#11|PROMO ANODIZED COPPER|9|436 +Brand#11|PROMO ANODIZED STEEL|14|436 +Brand#11|PROMO BRUSHED TIN|19|436 +Brand#11|PROMO POLISHED NICKEL|14|436 +Brand#11|PROMO POLISHED STEEL|45|436 +Brand#11|SMALL ANODIZED BRASS|3|436 +Brand#11|SMALL ANODIZED TIN|36|436 +Brand#11|SMALL BURNISHED COPPER|45|436 +Brand#11|SMALL BURNISHED TIN|36|436 +Brand#11|STANDARD PLATED BRASS|9|436 +Brand#11|STANDARD PLATED NICKEL|45|436 +Brand#11|STANDARD PLATED STEEL|36|436 +Brand#11|STANDARD POLISHED BRASS|14|436 +Brand#11|STANDARD POLISHED NICKEL|23|436 +Brand#12|ECONOMY ANODIZED COPPER|45|436 +Brand#12|ECONOMY BRUSHED STEEL|9|436 +Brand#12|ECONOMY BRUSHED TIN|14|436 +Brand#12|ECONOMY PLATED TIN|36|436 +Brand#12|LARGE ANODIZED STEEL|19|436 +Brand#12|LARGE ANODIZED TIN|9|436 +Brand#12|LARGE ANODIZED TIN|45|436 +Brand#12|LARGE BURNISHED NICKEL|36|436 +Brand#12|LARGE PLATED COPPER|3|436 +Brand#12|LARGE POLISHED COPPER|45|436 +Brand#12|LARGE POLISHED TIN|23|436 +Brand#12|MEDIUM ANODIZED BRASS|49|436 +Brand#12|MEDIUM BRUSHED COPPER|9|436 +Brand#12|MEDIUM BRUSHED COPPER|49|436 +Brand#12|MEDIUM BRUSHED STEEL|14|436 +Brand#12|MEDIUM BRUSHED STEEL|36|436 +Brand#12|MEDIUM PLATED COPPER|14|436 +Brand#12|PROMO ANODIZED STEEL|3|436 +Brand#12|PROMO BRUSHED COPPER|23|436 +Brand#12|PROMO BRUSHED TIN|3|436 +Brand#12|PROMO BRUSHED TIN|14|436 +Brand#12|PROMO BURNISHED COPPER|19|436 +Brand#12|PROMO BURNISHED TIN|19|436 +Brand#12|PROMO PLATED BRASS|3|436 +Brand#12|SMALL BURNISHED STEEL|9|436 +Brand#12|SMALL BURNISHED TIN|3|436 +Brand#12|SMALL PLATED NICKEL|9|436 +Brand#12|SMALL PLATED STEEL|19|436 +Brand#12|SMALL POLISHED BRASS|14|436 +Brand#12|SMALL POLISHED NICKEL|3|436 +Brand#12|SMALL POLISHED STEEL|9|436 +Brand#12|STANDARD ANODIZED BRASS|23|436 +Brand#12|STANDARD BRUSHED STEEL|23|436 +Brand#12|STANDARD BRUSHED STEEL|36|436 +Brand#12|STANDARD POLISHED BRASS|23|436 +Brand#12|STANDARD POLISHED NICKEL|3|436 +Brand#13|ECONOMY ANODIZED NICKEL|45|436 +Brand#13|ECONOMY BRUSHED BRASS|45|436 +Brand#13|ECONOMY BRUSHED COPPER|49|436 +Brand#13|ECONOMY BURNISHED COPPER|9|436 +Brand#13|ECONOMY PLATED NICKEL|23|436 +Brand#13|ECONOMY POLISHED TIN|14|436 +Brand#13|LARGE ANODIZED TIN|23|436 +Brand#13|LARGE ANODIZED TIN|45|436 +Brand#13|LARGE BURNISHED NICKEL|19|436 +Brand#13|MEDIUM ANODIZED NICKEL|19|436 +Brand#13|MEDIUM BRUSHED BRASS|49|436 +Brand#13|MEDIUM BRUSHED COPPER|9|436 +Brand#13|MEDIUM PLATED BRASS|36|436 +Brand#13|MEDIUM PLATED NICKEL|45|436 +Brand#13|PROMO BRUSHED COPPER|49|436 +Brand#13|PROMO BRUSHED NICKEL|9|436 +Brand#13|PROMO BRUSHED NICKEL|36|436 +Brand#13|PROMO BURNISHED COPPER|19|436 +Brand#13|PROMO BURNISHED NICKEL|45|436 +Brand#13|PROMO POLISHED STEEL|19|436 +Brand#13|SMALL BRUSHED COPPER|36|436 +Brand#13|SMALL BURNISHED BRASS|36|436 +Brand#13|SMALL BURNISHED STEEL|19|436 +Brand#13|SMALL PLATED BRASS|3|436 +Brand#13|SMALL PLATED STEEL|49|436 +Brand#13|SMALL POLISHED STEEL|36|436 +Brand#13|STANDARD ANODIZED NICKEL|19|436 +Brand#13|STANDARD BURNISHED NICKEL|36|436 +Brand#13|STANDARD PLATED BRASS|49|436 +Brand#13|STANDARD PLATED COPPER|19|436 +Brand#13|STANDARD PLATED STEEL|19|436 +Brand#14|ECONOMY BURNISHED BRASS|36|436 +Brand#14|ECONOMY BURNISHED TIN|3|436 +Brand#14|ECONOMY BURNISHED TIN|36|436 +Brand#14|ECONOMY PLATED NICKEL|14|436 +Brand#14|ECONOMY POLISHED COPPER|45|436 +Brand#14|LARGE ANODIZED BRASS|45|436 +Brand#14|LARGE ANODIZED NICKEL|14|436 +Brand#14|LARGE ANODIZED STEEL|3|436 +Brand#14|LARGE PLATED TIN|19|436 +Brand#14|LARGE POLISHED STEEL|14|436 +Brand#14|LARGE POLISHED TIN|14|436 +Brand#14|MEDIUM PLATED COPPER|9|436 +Brand#14|MEDIUM PLATED NICKEL|3|436 +Brand#14|MEDIUM PLATED NICKEL|36|436 +Brand#14|MEDIUM PLATED STEEL|36|436 +Brand#14|PROMO ANODIZED COPPER|19|436 +Brand#14|PROMO ANODIZED NICKEL|23|436 +Brand#14|PROMO BRUSHED BRASS|14|436 +Brand#14|PROMO PLATED NICKEL|36|436 +Brand#14|PROMO POLISHED TIN|3|436 +Brand#14|SMALL ANODIZED COPPER|9|436 +Brand#14|SMALL ANODIZED TIN|45|436 +Brand#14|SMALL BRUSHED COPPER|36|436 +Brand#14|SMALL BRUSHED NICKEL|45|436 +Brand#14|SMALL BRUSHED STEEL|9|436 +Brand#14|SMALL BURNISHED BRASS|9|436 +Brand#14|SMALL BURNISHED BRASS|45|436 +Brand#14|SMALL BURNISHED STEEL|36|436 +Brand#14|SMALL POLISHED BRASS|14|436 +Brand#14|SMALL POLISHED NICKEL|23|436 +Brand#14|STANDARD ANODIZED BRASS|3|436 +Brand#14|STANDARD ANODIZED STEEL|14|436 +Brand#14|STANDARD BRUSHED STEEL|9|436 +Brand#14|STANDARD BRUSHED TIN|9|436 +Brand#14|STANDARD PLATED STEEL|23|436 +Brand#15|ECONOMY ANODIZED NICKEL|45|436 +Brand#15|ECONOMY BRUSHED BRASS|36|436 +Brand#15|ECONOMY PLATED BRASS|45|436 +Brand#15|ECONOMY PLATED STEEL|3|436 +Brand#15|ECONOMY PLATED TIN|23|436 +Brand#15|ECONOMY POLISHED BRASS|49|436 +Brand#15|ECONOMY POLISHED COPPER|36|436 +Brand#15|ECONOMY POLISHED TIN|49|436 +Brand#15|LARGE BRUSHED TIN|49|436 +Brand#15|LARGE BURNISHED BRASS|19|436 +Brand#15|LARGE BURNISHED BRASS|49|436 +Brand#15|LARGE BURNISHED COPPER|9|436 +Brand#15|LARGE POLISHED NICKEL|14|436 +Brand#15|MEDIUM ANODIZED NICKEL|19|436 +Brand#15|MEDIUM BRUSHED BRASS|49|436 +Brand#15|MEDIUM BRUSHED STEEL|36|436 +Brand#15|MEDIUM BRUSHED TIN|36|436 +Brand#15|MEDIUM BRUSHED TIN|45|436 +Brand#15|MEDIUM BURNISHED COPPER|14|436 +Brand#15|PROMO BRUSHED BRASS|14|436 +Brand#15|PROMO BURNISHED TIN|19|436 +Brand#15|PROMO PLATED BRASS|9|436 +Brand#15|PROMO POLISHED COPPER|14|436 +Brand#15|SMALL ANODIZED NICKEL|49|436 +Brand#15|SMALL ANODIZED TIN|14|436 +Brand#15|SMALL PLATED STEEL|14|436 +Brand#15|SMALL POLISHED TIN|49|436 +Brand#15|STANDARD BRUSHED BRASS|3|436 +Brand#15|STANDARD BRUSHED COPPER|19|436 +Brand#15|STANDARD BRUSHED TIN|45|436 +Brand#15|STANDARD BURNISHED NICKEL|45|436 +Brand#21|ECONOMY BRUSHED COPPER|19|436 +Brand#21|ECONOMY BURNISHED NICKEL|49|436 +Brand#21|ECONOMY BURNISHED TIN|49|436 +Brand#21|ECONOMY PLATED COPPER|49|436 +Brand#21|ECONOMY PLATED STEEL|19|436 +Brand#21|ECONOMY POLISHED COPPER|36|436 +Brand#21|ECONOMY POLISHED NICKEL|49|436 +Brand#21|LARGE ANODIZED BRASS|36|436 +Brand#21|LARGE ANODIZED NICKEL|19|436 +Brand#21|LARGE BRUSHED COPPER|36|436 +Brand#21|LARGE BRUSHED NICKEL|23|436 +Brand#21|LARGE BURNISHED NICKEL|49|436 +Brand#21|LARGE BURNISHED STEEL|45|436 +Brand#21|LARGE POLISHED NICKEL|36|436 +Brand#21|MEDIUM ANODIZED COPPER|14|436 +Brand#21|MEDIUM BRUSHED STEEL|36|436 +Brand#21|MEDIUM BRUSHED TIN|14|436 +Brand#21|MEDIUM PLATED COPPER|45|436 +Brand#21|PROMO ANODIZED COPPER|49|436 +Brand#21|PROMO BRUSHED BRASS|36|436 +Brand#21|PROMO BRUSHED BRASS|49|436 +Brand#21|PROMO BURNISHED STEEL|19|436 +Brand#21|PROMO PLATED BRASS|49|436 +Brand#21|PROMO POLISHED COPPER|19|436 +Brand#21|SMALL BRUSHED BRASS|49|436 +Brand#21|SMALL BRUSHED TIN|9|436 +Brand#21|SMALL BRUSHED TIN|23|436 +Brand#21|SMALL BURNISHED BRASS|23|436 +Brand#21|SMALL BURNISHED TIN|36|436 +Brand#21|SMALL BURNISHED TIN|49|436 +Brand#21|SMALL PLATED COPPER|3|436 +Brand#21|SMALL POLISHED NICKEL|36|436 +Brand#21|SMALL POLISHED STEEL|19|436 +Brand#21|STANDARD ANODIZED NICKEL|45|436 +Brand#21|STANDARD ANODIZED STEEL|9|436 +Brand#21|STANDARD BRUSHED COPPER|19|436 +Brand#21|STANDARD BRUSHED COPPER|36|436 +Brand#21|STANDARD BRUSHED TIN|23|436 +Brand#21|STANDARD PLATED STEEL|49|436 +Brand#21|STANDARD POLISHED BRASS|45|436 +Brand#21|STANDARD POLISHED COPPER|23|436 +Brand#22|ECONOMY BRUSHED BRASS|3|436 +Brand#22|ECONOMY BRUSHED BRASS|19|436 +Brand#22|ECONOMY BURNISHED COPPER|3|436 +Brand#22|ECONOMY BURNISHED NICKEL|3|436 +Brand#22|ECONOMY POLISHED STEEL|49|436 +Brand#22|LARGE ANODIZED TIN|14|436 +Brand#22|LARGE BRUSHED STEEL|36|436 +Brand#22|LARGE BURNISHED NICKEL|45|436 +Brand#22|LARGE BURNISHED TIN|14|436 +Brand#22|LARGE PLATED STEEL|9|436 +Brand#22|MEDIUM BRUSHED STEEL|49|436 +Brand#22|MEDIUM BRUSHED TIN|14|436 +Brand#22|MEDIUM BURNISHED BRASS|19|436 +Brand#22|MEDIUM PLATED COPPER|36|436 +Brand#22|PROMO ANODIZED NICKEL|36|436 +Brand#22|PROMO ANODIZED TIN|49|436 +Brand#22|PROMO BURNISHED BRASS|14|436 +Brand#22|PROMO BURNISHED TIN|23|436 +Brand#22|PROMO BURNISHED TIN|45|436 +Brand#22|PROMO POLISHED NICKEL|3|436 +Brand#22|SMALL ANODIZED STEEL|23|436 +Brand#22|SMALL ANODIZED TIN|19|436 +Brand#22|SMALL BURNISHED COPPER|9|436 +Brand#22|SMALL BURNISHED TIN|9|436 +Brand#22|SMALL POLISHED COPPER|49|436 +Brand#22|SMALL POLISHED TIN|14|436 +Brand#22|SMALL POLISHED TIN|19|436 +Brand#22|STANDARD ANODIZED BRASS|49|436 +Brand#22|STANDARD ANODIZED STEEL|49|436 +Brand#22|STANDARD BRUSHED COPPER|14|436 +Brand#22|STANDARD BRUSHED COPPER|49|436 +Brand#22|STANDARD BRUSHED STEEL|36|436 +Brand#22|STANDARD PLATED COPPER|45|436 +Brand#22|STANDARD PLATED NICKEL|45|436 +Brand#23|ECONOMY ANODIZED BRASS|9|436 +Brand#23|ECONOMY BRUSHED NICKEL|9|436 +Brand#23|ECONOMY BRUSHED STEEL|19|436 +Brand#23|ECONOMY BRUSHED STEEL|45|436 +Brand#23|ECONOMY BURNISHED COPPER|45|436 +Brand#23|ECONOMY PLATED TIN|3|436 +Brand#23|LARGE ANODIZED BRASS|3|436 +Brand#23|LARGE ANODIZED BRASS|19|436 +Brand#23|LARGE ANODIZED TIN|9|436 +Brand#23|LARGE BRUSHED BRASS|19|436 +Brand#23|LARGE BRUSHED BRASS|45|436 +Brand#23|LARGE BRUSHED NICKEL|3|436 +Brand#23|LARGE BURNISHED COPPER|9|436 +Brand#23|LARGE POLISHED NICKEL|9|436 +Brand#23|MEDIUM ANODIZED COPPER|9|436 +Brand#23|MEDIUM BRUSHED NICKEL|19|436 +Brand#23|PROMO BRUSHED BRASS|3|436 +Brand#23|PROMO BRUSHED NICKEL|3|436 +Brand#23|PROMO BURNISHED COPPER|3|436 +Brand#23|PROMO PLATED BRASS|9|436 +Brand#23|SMALL BRUSHED STEEL|19|436 +Brand#23|SMALL BURNISHED TIN|45|436 +Brand#23|SMALL PLATED BRASS|9|436 +Brand#23|SMALL PLATED STEEL|45|436 +Brand#23|SMALL PLATED TIN|49|436 +Brand#23|STANDARD ANODIZED NICKEL|49|436 +Brand#23|STANDARD BRUSHED STEEL|14|436 +Brand#23|STANDARD BURNISHED BRASS|36|436 +Brand#23|STANDARD BURNISHED STEEL|3|436 +Brand#23|STANDARD PLATED COPPER|23|436 +Brand#23|STANDARD PLATED TIN|3|436 +Brand#23|STANDARD POLISHED STEEL|3|436 +Brand#23|STANDARD POLISHED STEEL|14|436 +Brand#24|ECONOMY ANODIZED BRASS|19|436 +Brand#24|ECONOMY BRUSHED COPPER|23|436 +Brand#24|ECONOMY BRUSHED TIN|49|436 +Brand#24|ECONOMY PLATED BRASS|19|436 +Brand#24|ECONOMY PLATED TIN|9|436 +Brand#24|ECONOMY PLATED TIN|19|436 +Brand#24|LARGE BURNISHED BRASS|19|436 +Brand#24|LARGE BURNISHED STEEL|49|436 +Brand#24|LARGE PLATED NICKEL|19|436 +Brand#24|LARGE PLATED STEEL|3|436 +Brand#24|LARGE POLISHED COPPER|3|436 +Brand#24|MEDIUM ANODIZED TIN|9|436 +Brand#24|MEDIUM BRUSHED NICKEL|36|436 +Brand#24|MEDIUM BURNISHED STEEL|49|436 +Brand#24|MEDIUM PLATED STEEL|49|436 +Brand#24|PROMO ANODIZED COPPER|49|436 +Brand#24|PROMO ANODIZED NICKEL|23|436 +Brand#24|PROMO ANODIZED TIN|3|436 +Brand#24|PROMO ANODIZED TIN|19|436 +Brand#24|PROMO PLATED COPPER|14|436 +Brand#24|PROMO POLISHED NICKEL|49|436 +Brand#24|PROMO POLISHED TIN|9|436 +Brand#24|SMALL ANODIZED BRASS|9|436 +Brand#24|SMALL BURNISHED COPPER|49|436 +Brand#24|SMALL BURNISHED NICKEL|14|436 +Brand#24|SMALL BURNISHED STEEL|3|436 +Brand#24|SMALL PLATED STEEL|49|436 +Brand#24|SMALL POLISHED COPPER|19|436 +Brand#24|STANDARD ANODIZED TIN|45|436 +Brand#24|STANDARD BRUSHED BRASS|3|436 +Brand#24|STANDARD BRUSHED NICKEL|9|436 +Brand#24|STANDARD BRUSHED STEEL|14|436 +Brand#24|STANDARD BRUSHED STEEL|49|436 +Brand#24|STANDARD PLATED BRASS|9|436 +Brand#24|STANDARD PLATED COPPER|23|436 +Brand#24|STANDARD PLATED NICKEL|9|436 +Brand#24|STANDARD POLISHED STEEL|9|436 +Brand#24|STANDARD POLISHED TIN|45|436 +Brand#25|LARGE ANODIZED COPPER|36|436 +Brand#25|LARGE BRUSHED TIN|14|436 +Brand#25|LARGE BURNISHED COPPER|9|436 +Brand#25|LARGE PLATED BRASS|36|436 +Brand#25|MEDIUM ANODIZED STEEL|23|436 +Brand#25|MEDIUM BRUSHED BRASS|19|436 +Brand#25|MEDIUM BURNISHED COPPER|9|436 +Brand#25|PROMO BRUSHED BRASS|9|436 +Brand#25|PROMO BRUSHED COPPER|14|436 +Brand#25|PROMO BRUSHED COPPER|23|436 +Brand#25|PROMO BRUSHED TIN|45|436 +Brand#25|PROMO BURNISHED NICKEL|9|436 +Brand#25|PROMO BURNISHED TIN|49|436 +Brand#25|PROMO PLATED STEEL|23|436 +Brand#25|PROMO PLATED STEEL|45|436 +Brand#25|PROMO PLATED TIN|9|436 +Brand#25|SMALL ANODIZED BRASS|14|436 +Brand#25|SMALL BRUSHED NICKEL|14|436 +Brand#25|SMALL BURNISHED COPPER|49|436 +Brand#25|SMALL PLATED TIN|19|436 +Brand#25|SMALL POLISHED NICKEL|3|436 +Brand#25|STANDARD ANODIZED NICKEL|14|436 +Brand#25|STANDARD ANODIZED NICKEL|19|436 +Brand#25|STANDARD BRUSHED STEEL|49|436 +Brand#25|STANDARD BURNISHED STEEL|3|436 +Brand#25|STANDARD BURNISHED STEEL|23|436 +Brand#25|STANDARD BURNISHED TIN|14|436 +Brand#25|STANDARD PLATED TIN|36|436 +Brand#31|ECONOMY ANODIZED NICKEL|3|436 +Brand#31|ECONOMY ANODIZED TIN|19|436 +Brand#31|ECONOMY BRUSHED NICKEL|3|436 +Brand#31|ECONOMY BRUSHED TIN|9|436 +Brand#31|ECONOMY BURNISHED COPPER|14|436 +Brand#31|ECONOMY BURNISHED COPPER|23|436 +Brand#31|ECONOMY BURNISHED TIN|14|436 +Brand#31|ECONOMY PLATED COPPER|3|436 +Brand#31|ECONOMY PLATED STEEL|3|436 +Brand#31|LARGE BRUSHED BRASS|9|436 +Brand#31|LARGE BRUSHED NICKEL|45|436 +Brand#31|LARGE BRUSHED STEEL|9|436 +Brand#31|LARGE PLATED COPPER|14|436 +Brand#31|LARGE PLATED NICKEL|9|436 +Brand#31|LARGE PLATED STEEL|45|436 +Brand#31|LARGE PLATED TIN|36|436 +Brand#31|MEDIUM ANODIZED NICKEL|19|436 +Brand#31|MEDIUM ANODIZED STEEL|45|436 +Brand#31|MEDIUM BURNISHED BRASS|9|436 +Brand#31|MEDIUM BURNISHED BRASS|14|436 +Brand#31|MEDIUM PLATED BRASS|45|436 +Brand#31|MEDIUM PLATED TIN|3|436 +Brand#31|MEDIUM PLATED TIN|36|436 +Brand#31|MEDIUM PLATED TIN|45|436 +Brand#31|PROMO BURNISHED NICKEL|23|436 +Brand#31|PROMO BURNISHED TIN|36|436 +Brand#31|PROMO PLATED NICKEL|14|436 +Brand#31|SMALL ANODIZED BRASS|14|436 +Brand#31|SMALL ANODIZED BRASS|45|436 +Brand#31|SMALL ANODIZED TIN|14|436 +Brand#31|SMALL BRUSHED NICKEL|49|436 +Brand#31|SMALL BRUSHED STEEL|49|436 +Brand#31|SMALL POLISHED BRASS|14|436 +Brand#31|SMALL POLISHED NICKEL|14|436 +Brand#31|SMALL POLISHED NICKEL|45|436 +Brand#31|SMALL POLISHED TIN|45|436 +Brand#31|STANDARD ANODIZED COPPER|3|436 +Brand#31|STANDARD ANODIZED COPPER|19|436 +Brand#31|STANDARD BRUSHED COPPER|45|436 +Brand#31|STANDARD BURNISHED TIN|45|436 +Brand#31|STANDARD PLATED STEEL|49|436 +Brand#31|STANDARD POLISHED TIN|49|436 +Brand#32|ECONOMY ANODIZED BRASS|9|436 +Brand#32|ECONOMY ANODIZED NICKEL|14|436 +Brand#32|ECONOMY PLATED BRASS|36|436 +Brand#32|ECONOMY POLISHED TIN|49|436 +Brand#32|LARGE BRUSHED COPPER|23|436 +Brand#32|LARGE PLATED STEEL|3|436 +Brand#32|LARGE PLATED STEEL|14|436 +Brand#32|LARGE PLATED TIN|23|436 +Brand#32|LARGE POLISHED COPPER|14|436 +Brand#32|MEDIUM ANODIZED BRASS|36|436 +Brand#32|MEDIUM ANODIZED COPPER|9|436 +Brand#32|MEDIUM PLATED COPPER|49|436 +Brand#32|MEDIUM PLATED TIN|9|436 +Brand#32|PROMO ANODIZED BRASS|45|436 +Brand#32|PROMO ANODIZED COPPER|19|436 +Brand#32|PROMO ANODIZED COPPER|23|436 +Brand#32|PROMO ANODIZED NICKEL|3|436 +Brand#32|PROMO BRUSHED STEEL|19|436 +Brand#32|PROMO BRUSHED STEEL|23|436 +Brand#32|PROMO BURNISHED COPPER|36|436 +Brand#32|PROMO BURNISHED STEEL|3|436 +Brand#32|PROMO PLATED BRASS|23|436 +Brand#32|PROMO PLATED STEEL|49|436 +Brand#32|PROMO PLATED TIN|14|436 +Brand#32|PROMO POLISHED BRASS|23|436 +Brand#32|PROMO POLISHED TIN|45|436 +Brand#32|SMALL BRUSHED BRASS|19|436 +Brand#32|SMALL BRUSHED BRASS|49|436 +Brand#32|SMALL BRUSHED STEEL|45|436 +Brand#32|SMALL BURNISHED COPPER|9|436 +Brand#32|SMALL PLATED COPPER|14|436 +Brand#32|STANDARD ANODIZED NICKEL|9|436 +Brand#32|STANDARD ANODIZED NICKEL|36|436 +Brand#32|STANDARD ANODIZED TIN|45|436 +Brand#32|STANDARD BRUSHED TIN|14|436 +Brand#32|STANDARD PLATED NICKEL|19|436 +Brand#32|STANDARD POLISHED STEEL|49|436 +Brand#33|ECONOMY ANODIZED STEEL|3|436 +Brand#33|ECONOMY ANODIZED STEEL|14|436 +Brand#33|ECONOMY ANODIZED STEEL|23|436 +Brand#33|ECONOMY ANODIZED TIN|45|436 +Brand#33|ECONOMY BRUSHED NICKEL|49|436 +Brand#33|ECONOMY BRUSHED STEEL|36|436 +Brand#33|ECONOMY BRUSHED TIN|3|436 +Brand#33|ECONOMY PLATED BRASS|49|436 +Brand#33|LARGE ANODIZED TIN|9|436 +Brand#33|LARGE ANODIZED TIN|19|436 +Brand#33|LARGE BRUSHED COPPER|45|436 +Brand#33|LARGE BRUSHED TIN|3|436 +Brand#33|LARGE BURNISHED STEEL|45|436 +Brand#33|LARGE PLATED TIN|23|436 +Brand#33|LARGE POLISHED COPPER|9|436 +Brand#33|LARGE POLISHED NICKEL|9|436 +Brand#33|MEDIUM ANODIZED BRASS|49|436 +Brand#33|MEDIUM ANODIZED STEEL|3|436 +Brand#33|MEDIUM ANODIZED STEEL|9|436 +Brand#33|MEDIUM BURNISHED COPPER|3|436 +Brand#33|PROMO ANODIZED NICKEL|9|436 +Brand#33|PROMO BURNISHED BRASS|14|436 +Brand#33|PROMO BURNISHED COPPER|9|436 +Brand#33|PROMO BURNISHED TIN|45|436 +Brand#33|PROMO POLISHED BRASS|14|436 +Brand#33|PROMO POLISHED COPPER|14|436 +Brand#33|PROMO POLISHED COPPER|45|436 +Brand#33|SMALL ANODIZED STEEL|36|436 +Brand#33|SMALL BURNISHED COPPER|49|436 +Brand#33|SMALL BURNISHED NICKEL|36|436 +Brand#33|SMALL PLATED STEEL|14|436 +Brand#33|SMALL PLATED TIN|19|436 +Brand#33|SMALL POLISHED COPPER|36|436 +Brand#33|STANDARD BRUSHED TIN|49|436 +Brand#33|STANDARD PLATED BRASS|49|436 +Brand#33|STANDARD PLATED COPPER|14|436 +Brand#34|ECONOMY ANODIZED BRASS|36|436 +Brand#34|ECONOMY ANODIZED NICKEL|3|436 +Brand#34|ECONOMY BRUSHED NICKEL|23|436 +Brand#34|ECONOMY BRUSHED STEEL|19|436 +Brand#34|ECONOMY BURNISHED NICKEL|14|436 +Brand#34|ECONOMY BURNISHED TIN|36|436 +Brand#34|ECONOMY POLISHED COPPER|23|436 +Brand#34|LARGE ANODIZED TIN|36|436 +Brand#34|LARGE BRUSHED NICKEL|3|436 +Brand#34|LARGE BRUSHED NICKEL|9|436 +Brand#34|LARGE BURNISHED TIN|9|436 +Brand#34|LARGE PLATED COPPER|9|436 +Brand#34|LARGE PLATED COPPER|49|436 +Brand#34|LARGE POLISHED STEEL|36|436 +Brand#34|MEDIUM ANODIZED TIN|14|436 +Brand#34|MEDIUM BRUSHED NICKEL|23|436 +Brand#34|MEDIUM BRUSHED TIN|19|436 +Brand#34|MEDIUM BURNISHED STEEL|14|436 +Brand#34|MEDIUM PLATED BRASS|23|436 +Brand#34|MEDIUM PLATED STEEL|19|436 +Brand#34|PROMO ANODIZED COPPER|14|436 +Brand#34|PROMO BURNISHED BRASS|9|436 +Brand#34|PROMO PLATED BRASS|3|436 +Brand#34|PROMO PLATED BRASS|45|436 +Brand#34|PROMO POLISHED STEEL|45|436 +Brand#34|SMALL ANODIZED NICKEL|23|436 +Brand#34|SMALL POLISHED STEEL|9|436 +Brand#34|SMALL POLISHED STEEL|19|436 +Brand#34|STANDARD ANODIZED BRASS|36|436 +Brand#34|STANDARD ANODIZED NICKEL|19|436 +Brand#34|STANDARD ANODIZED NICKEL|36|436 +Brand#34|STANDARD BRUSHED TIN|3|436 +Brand#34|STANDARD BURNISHED NICKEL|45|436 +Brand#34|STANDARD BURNISHED TIN|3|436 +Brand#34|STANDARD BURNISHED TIN|45|436 +Brand#34|STANDARD POLISHED STEEL|19|436 +Brand#35|ECONOMY ANODIZED BRASS|14|436 +Brand#35|ECONOMY ANODIZED TIN|9|436 +Brand#35|ECONOMY BURNISHED TIN|49|436 +Brand#35|ECONOMY PLATED BRASS|45|436 +Brand#35|ECONOMY PLATED STEEL|14|436 +Brand#35|ECONOMY PLATED STEEL|49|436 +Brand#35|LARGE BRUSHED COPPER|23|436 +Brand#35|LARGE BRUSHED NICKEL|49|436 +Brand#35|LARGE BURNISHED NICKEL|49|436 +Brand#35|LARGE PLATED BRASS|19|436 +Brand#35|LARGE PLATED NICKEL|23|436 +Brand#35|MEDIUM ANODIZED STEEL|19|436 +Brand#35|MEDIUM PLATED NICKEL|49|436 +Brand#35|MEDIUM PLATED STEEL|23|436 +Brand#35|MEDIUM PLATED STEEL|45|436 +Brand#35|PROMO BRUSHED NICKEL|19|436 +Brand#35|PROMO POLISHED COPPER|9|436 +Brand#35|PROMO POLISHED COPPER|45|436 +Brand#35|SMALL ANODIZED BRASS|9|436 +Brand#35|SMALL ANODIZED STEEL|23|436 +Brand#35|SMALL BRUSHED NICKEL|14|436 +Brand#35|SMALL BRUSHED TIN|3|436 +Brand#35|SMALL BURNISHED NICKEL|14|436 +Brand#35|SMALL BURNISHED STEEL|3|436 +Brand#35|SMALL PLATED TIN|9|436 +Brand#35|SMALL POLISHED BRASS|23|436 +Brand#35|SMALL POLISHED COPPER|3|436 +Brand#35|SMALL POLISHED NICKEL|45|436 +Brand#35|STANDARD ANODIZED BRASS|49|436 +Brand#35|STANDARD BRUSHED COPPER|45|436 +Brand#35|STANDARD BRUSHED TIN|36|436 +Brand#35|STANDARD PLATED BRASS|45|436 +Brand#35|STANDARD PLATED TIN|19|436 +Brand#35|STANDARD POLISHED COPPER|19|436 +Brand#35|STANDARD POLISHED STEEL|45|436 +Brand#41|ECONOMY ANODIZED BRASS|19|436 +Brand#41|ECONOMY BURNISHED TIN|3|436 +Brand#41|ECONOMY PLATED BRASS|3|436 +Brand#41|LARGE ANODIZED BRASS|36|436 +Brand#41|LARGE ANODIZED TIN|3|436 +Brand#41|LARGE BRUSHED COPPER|9|436 +Brand#41|LARGE BRUSHED COPPER|14|436 +Brand#41|LARGE BRUSHED COPPER|23|436 +Brand#41|LARGE BRUSHED STEEL|45|436 +Brand#41|LARGE BRUSHED TIN|23|436 +Brand#41|LARGE BURNISHED COPPER|23|436 +Brand#41|LARGE BURNISHED COPPER|36|436 +Brand#41|LARGE BURNISHED TIN|3|436 +Brand#41|MEDIUM BRUSHED NICKEL|19|436 +Brand#41|MEDIUM BURNISHED NICKEL|23|436 +Brand#41|MEDIUM PLATED BRASS|19|436 +Brand#41|PROMO ANODIZED BRASS|3|436 +Brand#41|PROMO ANODIZED BRASS|49|436 +Brand#41|PROMO BURNISHED STEEL|19|436 +Brand#41|PROMO PLATED NICKEL|19|436 +Brand#41|PROMO PLATED TIN|14|436 +Brand#41|PROMO POLISHED COPPER|23|436 +Brand#41|SMALL BRUSHED COPPER|36|436 +Brand#41|SMALL BURNISHED STEEL|36|436 +Brand#41|SMALL PLATED NICKEL|45|436 +Brand#41|SMALL PLATED STEEL|14|436 +Brand#41|SMALL PLATED TIN|49|436 +Brand#41|STANDARD ANODIZED COPPER|23|436 +Brand#41|STANDARD BRUSHED COPPER|49|436 +Brand#41|STANDARD BURNISHED TIN|36|436 +Brand#41|STANDARD PLATED TIN|23|436 +Brand#41|STANDARD POLISHED STEEL|49|436 +Brand#42|ECONOMY ANODIZED BRASS|23|436 +Brand#42|ECONOMY BURNISHED NICKEL|3|436 +Brand#42|ECONOMY PLATED BRASS|9|436 +Brand#42|ECONOMY PLATED STEEL|19|436 +Brand#42|ECONOMY POLISHED COPPER|9|436 +Brand#42|ECONOMY POLISHED COPPER|36|436 +Brand#42|LARGE ANODIZED STEEL|36|436 +Brand#42|LARGE ANODIZED STEEL|49|436 +Brand#42|LARGE BRUSHED BRASS|14|436 +Brand#42|LARGE BRUSHED TIN|19|436 +Brand#42|LARGE BURNISHED BRASS|3|436 +Brand#42|LARGE POLISHED NICKEL|19|436 +Brand#42|LARGE POLISHED STEEL|3|436 +Brand#42|LARGE POLISHED STEEL|23|436 +Brand#42|MEDIUM BRUSHED TIN|9|436 +Brand#42|MEDIUM BURNISHED STEEL|23|436 +Brand#42|PROMO BURNISHED NICKEL|14|436 +Brand#42|PROMO BURNISHED NICKEL|23|436 +Brand#42|PROMO BURNISHED STEEL|19|436 +Brand#42|PROMO PLATED COPPER|49|436 +Brand#42|SMALL BRUSHED TIN|14|436 +Brand#42|SMALL BURNISHED TIN|14|436 +Brand#42|SMALL PLATED COPPER|3|436 +Brand#42|SMALL POLISHED BRASS|3|436 +Brand#42|SMALL POLISHED STEEL|19|436 +Brand#42|STANDARD ANODIZED BRASS|14|436 +Brand#42|STANDARD ANODIZED COPPER|9|436 +Brand#42|STANDARD BRUSHED BRASS|36|436 +Brand#42|STANDARD BRUSHED COPPER|23|436 +Brand#42|STANDARD BRUSHED NICKEL|3|436 +Brand#42|STANDARD POLISHED BRASS|23|436 +Brand#43|ECONOMY ANODIZED BRASS|36|436 +Brand#43|ECONOMY ANODIZED STEEL|3|436 +Brand#43|ECONOMY BRUSHED TIN|36|436 +Brand#43|ECONOMY BURNISHED BRASS|14|436 +Brand#43|ECONOMY BURNISHED COPPER|19|436 +Brand#43|ECONOMY PLATED COPPER|36|436 +Brand#43|ECONOMY PLATED NICKEL|9|436 +Brand#43|LARGE BRUSHED BRASS|14|436 +Brand#43|LARGE BURNISHED NICKEL|49|436 +Brand#43|LARGE BURNISHED STEEL|9|436 +Brand#43|LARGE PLATED TIN|45|436 +Brand#43|LARGE POLISHED STEEL|19|436 +Brand#43|MEDIUM ANODIZED STEEL|23|436 +Brand#43|MEDIUM BRUSHED BRASS|14|436 +Brand#43|MEDIUM BURNISHED NICKEL|14|436 +Brand#43|MEDIUM BURNISHED TIN|36|436 +Brand#43|PROMO BRUSHED NICKEL|14|436 +Brand#43|PROMO BURNISHED BRASS|9|436 +Brand#43|PROMO POLISHED BRASS|19|436 +Brand#43|PROMO POLISHED COPPER|19|436 +Brand#43|PROMO POLISHED TIN|49|436 +Brand#43|SMALL ANODIZED BRASS|49|436 +Brand#43|SMALL BRUSHED STEEL|19|436 +Brand#43|SMALL BURNISHED NICKEL|9|436 +Brand#43|SMALL BURNISHED TIN|49|436 +Brand#43|SMALL POLISHED COPPER|19|436 +Brand#43|STANDARD BRUSHED BRASS|23|436 +Brand#43|STANDARD BURNISHED COPPER|36|436 +Brand#44|ECONOMY ANODIZED STEEL|9|436 +Brand#44|ECONOMY BRUSHED NICKEL|49|436 +Brand#44|ECONOMY PLATED NICKEL|49|436 +Brand#44|ECONOMY POLISHED NICKEL|23|436 +Brand#44|LARGE ANODIZED BRASS|3|436 +Brand#44|LARGE ANODIZED COPPER|9|436 +Brand#44|LARGE BRUSHED TIN|3|436 +Brand#44|LARGE BURNISHED STEEL|49|436 +Brand#44|LARGE PLATED TIN|9|436 +Brand#44|LARGE POLISHED BRASS|45|436 +Brand#44|MEDIUM BURNISHED BRASS|49|436 +Brand#44|MEDIUM BURNISHED STEEL|49|436 +Brand#44|MEDIUM PLATED STEEL|45|436 +Brand#44|PROMO ANODIZED STEEL|19|436 +Brand#44|PROMO BURNISHED STEEL|3|436 +Brand#44|PROMO PLATED COPPER|23|436 +Brand#44|PROMO POLISHED STEEL|45|436 +Brand#44|SMALL ANODIZED NICKEL|19|436 +Brand#44|SMALL ANODIZED STEEL|9|436 +Brand#44|SMALL BURNISHED NICKEL|14|436 +Brand#44|SMALL BURNISHED NICKEL|23|436 +Brand#44|SMALL PLATED BRASS|19|436 +Brand#44|SMALL PLATED COPPER|3|436 +Brand#44|SMALL POLISHED COPPER|14|436 +Brand#44|SMALL POLISHED NICKEL|49|436 +Brand#44|SMALL POLISHED STEEL|45|436 +Brand#44|STANDARD ANODIZED COPPER|49|436 +Brand#44|STANDARD ANODIZED STEEL|19|436 +Brand#44|STANDARD BRUSHED STEEL|14|436 +Brand#44|STANDARD BURNISHED NICKEL|14|436 +Brand#51|ECONOMY ANODIZED NICKEL|14|436 +Brand#51|ECONOMY ANODIZED STEEL|23|436 +Brand#51|ECONOMY ANODIZED TIN|9|436 +Brand#51|ECONOMY BRUSHED NICKEL|45|436 +Brand#51|ECONOMY BURNISHED BRASS|23|436 +Brand#51|ECONOMY BURNISHED NICKEL|19|436 +Brand#51|ECONOMY PLATED BRASS|23|436 +Brand#51|ECONOMY POLISHED BRASS|9|436 +Brand#51|ECONOMY POLISHED NICKEL|3|436 +Brand#51|ECONOMY POLISHED STEEL|19|436 +Brand#51|ECONOMY POLISHED TIN|49|436 +Brand#51|LARGE ANODIZED BRASS|45|436 +Brand#51|LARGE ANODIZED NICKEL|3|436 +Brand#51|LARGE ANODIZED NICKEL|23|436 +Brand#51|LARGE BRUSHED COPPER|14|436 +Brand#51|LARGE BRUSHED NICKEL|49|436 +Brand#51|LARGE BRUSHED TIN|3|436 +Brand#51|LARGE BURNISHED COPPER|19|436 +Brand#51|LARGE POLISHED TIN|49|436 +Brand#51|MEDIUM BURNISHED BRASS|14|436 +Brand#51|MEDIUM BURNISHED NICKEL|23|436 +Brand#51|MEDIUM BURNISHED STEEL|36|436 +Brand#51|MEDIUM PLATED COPPER|45|436 +Brand#51|PROMO ANODIZED NICKEL|23|436 +Brand#51|PROMO BRUSHED STEEL|3|436 +Brand#51|PROMO BRUSHED STEEL|49|436 +Brand#51|PROMO BRUSHED TIN|19|436 +Brand#51|PROMO BURNISHED COPPER|14|436 +Brand#51|PROMO POLISHED BRASS|23|436 +Brand#51|SMALL BRUSHED BRASS|49|436 +Brand#51|SMALL BRUSHED STEEL|14|436 +Brand#51|SMALL BURNISHED STEEL|36|436 +Brand#51|SMALL BURNISHED TIN|19|436 +Brand#51|SMALL PLATED BRASS|36|436 +Brand#51|SMALL PLATED COPPER|45|436 +Brand#51|STANDARD ANODIZED COPPER|36|436 +Brand#51|STANDARD BURNISHED STEEL|14|436 +Brand#52|ECONOMY BRUSHED COPPER|3|436 +Brand#52|ECONOMY BURNISHED BRASS|36|436 +Brand#52|ECONOMY BURNISHED NICKEL|9|436 +Brand#52|ECONOMY PLATED BRASS|36|436 +Brand#52|ECONOMY PLATED BRASS|49|436 +Brand#52|ECONOMY PLATED STEEL|19|436 +Brand#52|ECONOMY POLISHED COPPER|3|436 +Brand#52|LARGE BRUSHED BRASS|23|436 +Brand#52|LARGE BRUSHED NICKEL|49|436 +Brand#52|LARGE BRUSHED STEEL|45|436 +Brand#52|LARGE BRUSHED TIN|19|436 +Brand#52|LARGE BURNISHED BRASS|45|436 +Brand#52|LARGE BURNISHED COPPER|19|436 +Brand#52|LARGE BURNISHED STEEL|9|436 +Brand#52|LARGE POLISHED TIN|19|436 +Brand#52|MEDIUM BRUSHED TIN|14|436 +Brand#52|PROMO ANODIZED BRASS|3|436 +Brand#52|PROMO ANODIZED NICKEL|14|436 +Brand#52|PROMO BURNISHED BRASS|23|436 +Brand#52|PROMO BURNISHED STEEL|14|436 +Brand#52|PROMO PLATED BRASS|9|436 +Brand#52|PROMO PLATED BRASS|19|436 +Brand#52|PROMO PLATED COPPER|19|436 +Brand#52|PROMO PLATED NICKEL|49|436 +Brand#52|PROMO POLISHED BRASS|49|436 +Brand#52|PROMO POLISHED STEEL|36|436 +Brand#52|SMALL ANODIZED STEEL|23|436 +Brand#52|SMALL ANODIZED TIN|36|436 +Brand#52|SMALL ANODIZED TIN|45|436 +Brand#52|SMALL BRUSHED COPPER|36|436 +Brand#52|SMALL BRUSHED STEEL|9|436 +Brand#52|SMALL BRUSHED TIN|49|436 +Brand#52|SMALL BURNISHED COPPER|14|436 +Brand#52|SMALL BURNISHED NICKEL|49|436 +Brand#52|SMALL BURNISHED STEEL|14|436 +Brand#52|SMALL POLISHED NICKEL|49|436 +Brand#52|SMALL POLISHED TIN|3|436 +Brand#52|STANDARD BRUSHED COPPER|23|436 +Brand#52|STANDARD PLATED COPPER|9|436 +Brand#52|STANDARD PLATED COPPER|36|436 +Brand#52|STANDARD PLATED STEEL|49|436 +Brand#52|STANDARD POLISHED NICKEL|14|436 +Brand#52|STANDARD POLISHED NICKEL|36|436 +Brand#53|ECONOMY BRUSHED COPPER|23|436 +Brand#53|ECONOMY BRUSHED TIN|3|436 +Brand#53|ECONOMY PLATED COPPER|23|436 +Brand#53|ECONOMY PLATED COPPER|36|436 +Brand#53|ECONOMY POLISHED BRASS|3|436 +Brand#53|LARGE ANODIZED COPPER|49|436 +Brand#53|LARGE ANODIZED TIN|19|436 +Brand#53|LARGE BRUSHED NICKEL|14|436 +Brand#53|LARGE BRUSHED NICKEL|49|436 +Brand#53|LARGE BRUSHED STEEL|14|436 +Brand#53|LARGE BRUSHED TIN|14|436 +Brand#53|LARGE BURNISHED NICKEL|49|436 +Brand#53|LARGE POLISHED COPPER|45|436 +Brand#53|MEDIUM BRUSHED BRASS|49|436 +Brand#53|MEDIUM BRUSHED NICKEL|23|436 +Brand#53|MEDIUM BURNISHED BRASS|49|436 +Brand#53|MEDIUM PLATED NICKEL|19|436 +Brand#53|MEDIUM PLATED TIN|14|436 +Brand#53|PROMO BRUSHED BRASS|23|436 +Brand#53|PROMO BRUSHED COPPER|9|436 +Brand#53|PROMO BRUSHED STEEL|19|436 +Brand#53|PROMO BURNISHED BRASS|19|436 +Brand#53|PROMO PLATED STEEL|45|436 +Brand#53|SMALL BURNISHED TIN|36|436 +Brand#53|SMALL PLATED BRASS|14|436 +Brand#53|SMALL PLATED BRASS|45|436 +Brand#53|SMALL PLATED NICKEL|9|436 +Brand#53|SMALL PLATED NICKEL|19|436 +Brand#53|STANDARD BURNISHED TIN|9|436 +Brand#53|STANDARD PLATED BRASS|45|436 +Brand#53|STANDARD PLATED NICKEL|19|436 +Brand#53|STANDARD PLATED NICKEL|45|436 +Brand#53|STANDARD PLATED TIN|19|436 +Brand#53|STANDARD PLATED TIN|36|436 +Brand#53|STANDARD POLISHED TIN|36|436 +Brand#54|ECONOMY ANODIZED COPPER|9|436 +Brand#54|ECONOMY ANODIZED COPPER|49|436 +Brand#54|ECONOMY ANODIZED NICKEL|14|436 +Brand#54|ECONOMY ANODIZED NICKEL|45|436 +Brand#54|ECONOMY BRUSHED NICKEL|9|436 +Brand#54|ECONOMY BURNISHED COPPER|36|436 +Brand#54|ECONOMY BURNISHED COPPER|45|436 +Brand#54|ECONOMY PLATED BRASS|9|436 +Brand#54|ECONOMY PLATED COPPER|36|436 +Brand#54|ECONOMY POLISHED STEEL|3|436 +Brand#54|LARGE ANODIZED BRASS|23|436 +Brand#54|LARGE ANODIZED STEEL|9|436 +Brand#54|LARGE ANODIZED STEEL|14|436 +Brand#54|LARGE ANODIZED STEEL|23|436 +Brand#54|LARGE BRUSHED STEEL|14|436 +Brand#54|LARGE BURNISHED BRASS|3|436 +Brand#54|LARGE POLISHED BRASS|14|436 +Brand#54|LARGE POLISHED COPPER|14|436 +Brand#54|LARGE POLISHED STEEL|14|436 +Brand#54|LARGE POLISHED TIN|23|436 +Brand#54|MEDIUM ANODIZED TIN|23|436 +Brand#54|MEDIUM BRUSHED STEEL|19|436 +Brand#54|MEDIUM BRUSHED TIN|19|436 +Brand#54|MEDIUM BURNISHED BRASS|3|436 +Brand#54|MEDIUM BURNISHED NICKEL|3|436 +Brand#54|PROMO BURNISHED BRASS|49|436 +Brand#54|PROMO BURNISHED TIN|3|436 +Brand#54|PROMO BURNISHED TIN|9|436 +Brand#54|PROMO PLATED BRASS|3|436 +Brand#54|PROMO POLISHED COPPER|3|436 +Brand#54|PROMO POLISHED STEEL|45|436 +Brand#54|PROMO POLISHED TIN|36|436 +Brand#54|SMALL ANODIZED COPPER|14|436 +Brand#54|SMALL ANODIZED COPPER|49|436 +Brand#54|SMALL ANODIZED NICKEL|23|436 +Brand#54|SMALL BURNISHED BRASS|3|436 +Brand#54|SMALL BURNISHED COPPER|23|436 +Brand#54|SMALL BURNISHED NICKEL|9|436 +Brand#54|SMALL PLATED BRASS|9|436 +Brand#54|SMALL POLISHED NICKEL|3|436 +Brand#54|SMALL POLISHED TIN|19|436 +Brand#54|SMALL POLISHED TIN|23|436 +Brand#54|SMALL POLISHED TIN|45|436 +Brand#54|STANDARD POLISHED BRASS|36|436 +Brand#55|ECONOMY ANODIZED BRASS|9|436 +Brand#55|ECONOMY ANODIZED COPPER|9|436 +Brand#55|ECONOMY ANODIZED TIN|36|436 +Brand#55|ECONOMY BRUSHED TIN|49|436 +Brand#55|ECONOMY PLATED STEEL|3|436 +Brand#55|ECONOMY POLISHED BRASS|45|436 +Brand#55|LARGE ANODIZED COPPER|36|436 +Brand#55|LARGE PLATED STEEL|19|436 +Brand#55|LARGE PLATED TIN|19|436 +Brand#55|MEDIUM ANODIZED NICKEL|49|436 +Brand#55|MEDIUM ANODIZED STEEL|9|436 +Brand#55|MEDIUM ANODIZED TIN|3|436 +Brand#55|MEDIUM BRUSHED BRASS|9|436 +Brand#55|MEDIUM BRUSHED COPPER|49|436 +Brand#55|MEDIUM BRUSHED TIN|23|436 +Brand#55|MEDIUM BURNISHED COPPER|23|436 +Brand#55|PROMO ANODIZED NICKEL|3|436 +Brand#55|PROMO BURNISHED NICKEL|45|436 +Brand#55|PROMO BURNISHED TIN|19|436 +Brand#55|PROMO PLATED COPPER|19|436 +Brand#55|PROMO POLISHED BRASS|9|436 +Brand#55|PROMO POLISHED STEEL|3|436 +Brand#55|SMALL BRUSHED BRASS|9|436 +Brand#55|SMALL BURNISHED STEEL|49|436 +Brand#55|SMALL PLATED COPPER|3|436 +Brand#55|SMALL POLISHED BRASS|23|436 +Brand#55|SMALL POLISHED STEEL|9|436 +Brand#55|STANDARD BRUSHED BRASS|3|436 +Brand#55|STANDARD BURNISHED COPPER|19|436 +Brand#55|STANDARD BURNISHED TIN|14|436 +Brand#55|STANDARD PLATED BRASS|36|436 +Brand#55|STANDARD PLATED NICKEL|3|436 +Brand#55|STANDARD PLATED NICKEL|14|436 +Brand#55|STANDARD POLISHED STEEL|45|436 +Brand#11|ECONOMY BRUSHED COPPER|14|435 +Brand#11|ECONOMY POLISHED NICKEL|3|435 +Brand#11|LARGE PLATED STEEL|36|435 +Brand#11|LARGE POLISHED TIN|36|435 +Brand#11|LARGE POLISHED TIN|45|435 +Brand#11|SMALL ANODIZED BRASS|45|435 +Brand#11|SMALL BRUSHED NICKEL|23|435 +Brand#12|ECONOMY BRUSHED TIN|9|435 +Brand#12|ECONOMY BURNISHED BRASS|36|435 +Brand#12|LARGE ANODIZED BRASS|36|435 +Brand#12|LARGE BRUSHED STEEL|14|435 +Brand#12|LARGE POLISHED BRASS|23|435 +Brand#12|PROMO BURNISHED COPPER|23|435 +Brand#12|PROMO PLATED NICKEL|19|435 +Brand#12|PROMO POLISHED STEEL|3|435 +Brand#13|MEDIUM BRUSHED NICKEL|45|435 +Brand#13|MEDIUM BRUSHED TIN|19|435 +Brand#13|MEDIUM PLATED COPPER|49|435 +Brand#13|PROMO PLATED STEEL|36|435 +Brand#14|LARGE ANODIZED NICKEL|23|435 +Brand#14|MEDIUM BRUSHED COPPER|19|435 +Brand#14|MEDIUM BRUSHED COPPER|23|435 +Brand#14|MEDIUM BURNISHED TIN|49|435 +Brand#14|PROMO BRUSHED TIN|45|435 +Brand#14|PROMO BURNISHED STEEL|3|435 +Brand#14|STANDARD BURNISHED STEEL|36|435 +Brand#15|ECONOMY BRUSHED BRASS|9|435 +Brand#15|LARGE BRUSHED BRASS|45|435 +Brand#15|LARGE PLATED BRASS|9|435 +Brand#15|LARGE PLATED BRASS|36|435 +Brand#15|PROMO BRUSHED TIN|19|435 +Brand#15|PROMO BRUSHED TIN|23|435 +Brand#15|PROMO POLISHED NICKEL|14|435 +Brand#15|SMALL PLATED STEEL|36|435 +Brand#15|STANDARD ANODIZED BRASS|9|435 +Brand#15|STANDARD ANODIZED TIN|49|435 +Brand#21|LARGE ANODIZED COPPER|23|435 +Brand#21|LARGE POLISHED TIN|45|435 +Brand#21|MEDIUM ANODIZED TIN|19|435 +Brand#21|MEDIUM PLATED TIN|14|435 +Brand#21|PROMO BRUSHED COPPER|14|435 +Brand#21|PROMO BRUSHED TIN|36|435 +Brand#21|PROMO BURNISHED COPPER|36|435 +Brand#21|PROMO POLISHED STEEL|14|435 +Brand#22|ECONOMY BRUSHED NICKEL|14|435 +Brand#22|ECONOMY BRUSHED NICKEL|36|435 +Brand#22|LARGE ANODIZED TIN|45|435 +Brand#22|LARGE POLISHED BRASS|19|435 +Brand#22|LARGE POLISHED STEEL|14|435 +Brand#22|MEDIUM BRUSHED BRASS|3|435 +Brand#22|PROMO PLATED STEEL|3|435 +Brand#22|PROMO POLISHED COPPER|36|435 +Brand#23|ECONOMY ANODIZED BRASS|49|435 +Brand#23|LARGE ANODIZED COPPER|3|435 +Brand#23|LARGE ANODIZED TIN|23|435 +Brand#23|LARGE BRUSHED COPPER|14|435 +Brand#23|MEDIUM BURNISHED COPPER|36|435 +Brand#23|PROMO BRUSHED TIN|9|435 +Brand#23|PROMO POLISHED BRASS|3|435 +Brand#23|SMALL BURNISHED BRASS|9|435 +Brand#23|STANDARD POLISHED BRASS|14|435 +Brand#24|ECONOMY ANODIZED BRASS|45|435 +Brand#24|ECONOMY POLISHED COPPER|3|435 +Brand#24|LARGE BRUSHED BRASS|19|435 +Brand#24|LARGE BRUSHED COPPER|9|435 +Brand#24|LARGE POLISHED NICKEL|19|435 +Brand#24|MEDIUM PLATED NICKEL|45|435 +Brand#24|PROMO BRUSHED TIN|14|435 +Brand#24|PROMO PLATED STEEL|45|435 +Brand#24|PROMO POLISHED NICKEL|9|435 +Brand#24|SMALL BURNISHED COPPER|36|435 +Brand#24|SMALL BURNISHED NICKEL|49|435 +Brand#24|STANDARD ANODIZED STEEL|14|435 +Brand#24|STANDARD BRUSHED STEEL|9|435 +Brand#24|STANDARD POLISHED NICKEL|9|435 +Brand#25|ECONOMY PLATED COPPER|3|435 +Brand#25|LARGE BURNISHED STEEL|19|435 +Brand#25|LARGE POLISHED STEEL|45|435 +Brand#25|MEDIUM ANODIZED TIN|3|435 +Brand#25|MEDIUM PLATED TIN|19|435 +Brand#25|PROMO BURNISHED STEEL|19|435 +Brand#25|PROMO POLISHED BRASS|23|435 +Brand#25|SMALL ANODIZED COPPER|45|435 +Brand#25|STANDARD BRUSHED TIN|3|435 +Brand#25|STANDARD PLATED NICKEL|45|435 +Brand#31|ECONOMY ANODIZED TIN|36|435 +Brand#31|ECONOMY POLISHED TIN|36|435 +Brand#31|LARGE POLISHED TIN|9|435 +Brand#31|MEDIUM BURNISHED STEEL|36|435 +Brand#31|MEDIUM PLATED STEEL|49|435 +Brand#31|PROMO ANODIZED COPPER|23|435 +Brand#31|PROMO ANODIZED STEEL|9|435 +Brand#31|PROMO POLISHED NICKEL|3|435 +Brand#31|STANDARD BRUSHED TIN|45|435 +Brand#31|STANDARD BURNISHED STEEL|45|435 +Brand#32|ECONOMY BURNISHED BRASS|14|435 +Brand#32|ECONOMY PLATED BRASS|23|435 +Brand#32|ECONOMY PLATED NICKEL|49|435 +Brand#32|MEDIUM ANODIZED NICKEL|9|435 +Brand#32|MEDIUM BRUSHED NICKEL|49|435 +Brand#32|MEDIUM BRUSHED STEEL|14|435 +Brand#32|MEDIUM BURNISHED NICKEL|45|435 +Brand#32|MEDIUM BURNISHED STEEL|23|435 +Brand#32|MEDIUM PLATED COPPER|36|435 +Brand#32|PROMO PLATED TIN|49|435 +Brand#32|PROMO POLISHED BRASS|3|435 +Brand#32|SMALL BURNISHED STEEL|36|435 +Brand#32|SMALL POLISHED BRASS|23|435 +Brand#32|STANDARD ANODIZED STEEL|14|435 +Brand#32|STANDARD PLATED STEEL|45|435 +Brand#33|ECONOMY ANODIZED BRASS|3|435 +Brand#33|ECONOMY BURNISHED COPPER|45|435 +Brand#33|LARGE BRUSHED STEEL|45|435 +Brand#33|SMALL POLISHED NICKEL|3|435 +Brand#34|ECONOMY ANODIZED COPPER|49|435 +Brand#34|LARGE BRUSHED COPPER|14|435 +Brand#34|LARGE BURNISHED TIN|49|435 +Brand#34|MEDIUM PLATED COPPER|23|435 +Brand#34|MEDIUM PLATED NICKEL|3|435 +Brand#34|PROMO BRUSHED TIN|3|435 +Brand#34|PROMO BURNISHED STEEL|14|435 +Brand#34|PROMO BURNISHED STEEL|36|435 +Brand#34|PROMO BURNISHED TIN|14|435 +Brand#34|PROMO POLISHED NICKEL|3|435 +Brand#34|SMALL ANODIZED NICKEL|36|435 +Brand#34|SMALL ANODIZED NICKEL|45|435 +Brand#34|SMALL BURNISHED COPPER|9|435 +Brand#34|SMALL BURNISHED TIN|36|435 +Brand#34|SMALL PLATED TIN|49|435 +Brand#34|SMALL POLISHED COPPER|49|435 +Brand#35|ECONOMY ANODIZED STEEL|9|435 +Brand#35|ECONOMY ANODIZED TIN|19|435 +Brand#35|LARGE BURNISHED COPPER|49|435 +Brand#35|LARGE BURNISHED STEEL|36|435 +Brand#35|LARGE POLISHED COPPER|23|435 +Brand#35|MEDIUM ANODIZED BRASS|9|435 +Brand#35|SMALL BRUSHED STEEL|36|435 +Brand#35|STANDARD ANODIZED NICKEL|23|435 +Brand#35|STANDARD BRUSHED TIN|23|435 +Brand#41|ECONOMY BURNISHED STEEL|3|435 +Brand#41|LARGE PLATED STEEL|14|435 +Brand#41|MEDIUM PLATED TIN|36|435 +Brand#41|SMALL ANODIZED TIN|9|435 +Brand#41|SMALL PLATED NICKEL|3|435 +Brand#41|STANDARD POLISHED NICKEL|36|435 +Brand#42|MEDIUM ANODIZED BRASS|36|435 +Brand#42|STANDARD BURNISHED BRASS|14|435 +Brand#42|STANDARD BURNISHED STEEL|19|435 +Brand#43|ECONOMY PLATED COPPER|49|435 +Brand#43|LARGE BRUSHED NICKEL|49|435 +Brand#43|LARGE BRUSHED TIN|9|435 +Brand#43|LARGE POLISHED COPPER|23|435 +Brand#43|LARGE POLISHED NICKEL|14|435 +Brand#43|MEDIUM ANODIZED TIN|45|435 +Brand#43|MEDIUM BRUSHED NICKEL|23|435 +Brand#43|PROMO BURNISHED COPPER|36|435 +Brand#43|SMALL BRUSHED NICKEL|45|435 +Brand#43|STANDARD BRUSHED TIN|49|435 +Brand#44|ECONOMY BURNISHED BRASS|19|435 +Brand#44|ECONOMY BURNISHED STEEL|9|435 +Brand#44|ECONOMY BURNISHED STEEL|36|435 +Brand#44|ECONOMY POLISHED STEEL|9|435 +Brand#44|LARGE BRUSHED TIN|49|435 +Brand#44|MEDIUM ANODIZED BRASS|14|435 +Brand#44|MEDIUM ANODIZED NICKEL|36|435 +Brand#44|MEDIUM ANODIZED TIN|36|435 +Brand#44|MEDIUM BRUSHED STEEL|36|435 +Brand#44|MEDIUM PLATED BRASS|45|435 +Brand#44|PROMO PLATED NICKEL|9|435 +Brand#44|PROMO POLISHED COPPER|9|435 +Brand#44|PROMO POLISHED NICKEL|36|435 +Brand#44|SMALL PLATED BRASS|3|435 +Brand#44|STANDARD BURNISHED NICKEL|9|435 +Brand#44|STANDARD BURNISHED TIN|3|435 +Brand#51|ECONOMY BRUSHED COPPER|14|435 +Brand#51|LARGE ANODIZED NICKEL|45|435 +Brand#51|PROMO PLATED TIN|9|435 +Brand#51|PROMO POLISHED NICKEL|23|435 +Brand#51|STANDARD ANODIZED COPPER|23|435 +Brand#51|STANDARD ANODIZED NICKEL|36|435 +Brand#52|ECONOMY BRUSHED NICKEL|23|435 +Brand#52|ECONOMY BRUSHED NICKEL|49|435 +Brand#52|LARGE BURNISHED COPPER|23|435 +Brand#52|LARGE BURNISHED COPPER|49|435 +Brand#52|MEDIUM BURNISHED NICKEL|36|435 +Brand#52|PROMO PLATED NICKEL|19|435 +Brand#52|PROMO POLISHED TIN|3|435 +Brand#52|SMALL BURNISHED COPPER|36|435 +Brand#52|SMALL BURNISHED TIN|49|435 +Brand#52|STANDARD BRUSHED BRASS|3|435 +Brand#52|STANDARD PLATED TIN|45|435 +Brand#52|STANDARD POLISHED COPPER|3|435 +Brand#53|PROMO PLATED NICKEL|36|435 +Brand#53|SMALL PLATED COPPER|19|435 +Brand#53|SMALL PLATED COPPER|36|435 +Brand#53|STANDARD BRUSHED TIN|49|435 +Brand#54|LARGE BRUSHED TIN|45|435 +Brand#54|LARGE BURNISHED STEEL|23|435 +Brand#54|LARGE PLATED NICKEL|3|435 +Brand#54|MEDIUM BURNISHED STEEL|9|435 +Brand#54|MEDIUM PLATED BRASS|23|435 +Brand#54|SMALL PLATED COPPER|19|435 +Brand#55|ECONOMY PLATED BRASS|45|435 +Brand#55|LARGE BRUSHED TIN|49|435 +Brand#55|LARGE PLATED BRASS|14|435 +Brand#55|MEDIUM PLATED COPPER|23|435 +Brand#55|PROMO PLATED BRASS|14|435 +Brand#55|STANDARD ANODIZED COPPER|49|435 +Brand#55|STANDARD PLATED STEEL|23|435 +Brand#13|LARGE POLISHED STEEL|23|434 +Brand#13|STANDARD PLATED TIN|19|434 +Brand#14|SMALL ANODIZED STEEL|3|434 +Brand#15|LARGE ANODIZED COPPER|36|434 +Brand#15|LARGE POLISHED BRASS|3|434 +Brand#15|MEDIUM ANODIZED TIN|3|434 +Brand#15|SMALL ANODIZED BRASS|45|434 +Brand#21|LARGE BURNISHED BRASS|14|434 +Brand#21|MEDIUM PLATED STEEL|36|434 +Brand#22|LARGE BURNISHED BRASS|19|434 +Brand#23|ECONOMY BRUSHED STEEL|49|434 +Brand#25|LARGE POLISHED BRASS|45|434 +Brand#25|SMALL ANODIZED BRASS|3|434 +Brand#31|LARGE ANODIZED BRASS|3|434 +Brand#31|LARGE PLATED COPPER|3|434 +Brand#31|PROMO BURNISHED TIN|45|434 +Brand#32|MEDIUM BURNISHED COPPER|45|434 +Brand#33|LARGE POLISHED NICKEL|45|434 +Brand#33|STANDARD POLISHED STEEL|19|434 +Brand#34|LARGE POLISHED COPPER|14|434 +Brand#34|PROMO ANODIZED COPPER|49|434 +Brand#35|LARGE BURNISHED BRASS|9|434 +Brand#41|LARGE PLATED NICKEL|45|434 +Brand#41|STANDARD PLATED TIN|49|434 +Brand#42|ECONOMY BURNISHED BRASS|14|434 +Brand#42|LARGE BURNISHED STEEL|36|434 +Brand#42|SMALL ANODIZED COPPER|9|434 +Brand#43|ECONOMY ANODIZED BRASS|45|434 +Brand#43|SMALL BURNISHED STEEL|14|434 +Brand#43|STANDARD POLISHED TIN|45|434 +Brand#44|PROMO BURNISHED NICKEL|36|434 +Brand#44|SMALL ANODIZED STEEL|36|434 +Brand#44|STANDARD ANODIZED TIN|45|434 +Brand#51|ECONOMY POLISHED STEEL|3|434 +Brand#51|SMALL ANODIZED STEEL|45|434 +Brand#51|SMALL PLATED BRASS|14|434 +Brand#51|STANDARD POLISHED STEEL|45|434 +Brand#53|LARGE BRUSHED BRASS|3|434 +Brand#53|LARGE BRUSHED BRASS|14|434 +Brand#53|SMALL POLISHED BRASS|14|434 +Brand#54|LARGE PLATED NICKEL|23|434 +Brand#55|PROMO BRUSHED TIN|19|434 +Brand#55|PROMO POLISHED STEEL|49|434 +Brand#55|SMALL BURNISHED BRASS|14|434 +Brand#11|ECONOMY BURNISHED COPPER|19|433 +Brand#13|MEDIUM ANODIZED TIN|19|433 +Brand#41|STANDARD BURNISHED BRASS|23|433 +Brand#41|STANDARD POLISHED COPPER|9|433 +Brand#51|STANDARD ANODIZED COPPER|9|433 +Brand#11|ECONOMY BRUSHED NICKEL|19|432 +Brand#11|ECONOMY BURNISHED TIN|23|432 +Brand#11|ECONOMY PLATED COPPER|19|432 +Brand#11|ECONOMY PLATED COPPER|49|432 +Brand#11|ECONOMY PLATED NICKEL|14|432 +Brand#11|ECONOMY PLATED TIN|14|432 +Brand#11|ECONOMY PLATED TIN|49|432 +Brand#11|LARGE BRUSHED STEEL|23|432 +Brand#11|LARGE BRUSHED TIN|45|432 +Brand#11|LARGE BURNISHED TIN|49|432 +Brand#11|LARGE PLATED COPPER|14|432 +Brand#11|LARGE PLATED COPPER|49|432 +Brand#11|MEDIUM ANODIZED STEEL|45|432 +Brand#11|MEDIUM ANODIZED TIN|14|432 +Brand#11|MEDIUM BRUSHED TIN|45|432 +Brand#11|PROMO ANODIZED NICKEL|9|432 +Brand#11|PROMO ANODIZED STEEL|45|432 +Brand#11|PROMO BRUSHED BRASS|3|432 +Brand#11|PROMO BURNISHED COPPER|9|432 +Brand#11|PROMO POLISHED BRASS|19|432 +Brand#11|PROMO POLISHED COPPER|9|432 +Brand#11|PROMO POLISHED NICKEL|45|432 +Brand#11|SMALL BRUSHED BRASS|9|432 +Brand#11|SMALL BRUSHED NICKEL|9|432 +Brand#11|SMALL BRUSHED STEEL|3|432 +Brand#11|SMALL BRUSHED TIN|49|432 +Brand#11|SMALL BURNISHED NICKEL|45|432 +Brand#11|SMALL PLATED BRASS|49|432 +Brand#11|STANDARD BRUSHED COPPER|49|432 +Brand#11|STANDARD POLISHED BRASS|3|432 +Brand#12|ECONOMY ANODIZED COPPER|49|432 +Brand#12|ECONOMY ANODIZED NICKEL|36|432 +Brand#12|ECONOMY ANODIZED TIN|23|432 +Brand#12|ECONOMY BRUSHED COPPER|36|432 +Brand#12|ECONOMY BURNISHED TIN|23|432 +Brand#12|LARGE ANODIZED COPPER|9|432 +Brand#12|LARGE ANODIZED TIN|23|432 +Brand#12|LARGE BURNISHED NICKEL|19|432 +Brand#12|MEDIUM ANODIZED TIN|49|432 +Brand#12|PROMO ANODIZED COPPER|9|432 +Brand#12|PROMO ANODIZED NICKEL|49|432 +Brand#12|PROMO BRUSHED COPPER|3|432 +Brand#12|PROMO BRUSHED COPPER|14|432 +Brand#12|PROMO BRUSHED NICKEL|14|432 +Brand#12|PROMO BURNISHED NICKEL|23|432 +Brand#12|PROMO BURNISHED STEEL|14|432 +Brand#12|PROMO BURNISHED TIN|3|432 +Brand#12|PROMO PLATED COPPER|9|432 +Brand#12|PROMO PLATED STEEL|3|432 +Brand#12|PROMO POLISHED COPPER|9|432 +Brand#12|SMALL ANODIZED COPPER|49|432 +Brand#12|SMALL BRUSHED COPPER|45|432 +Brand#12|SMALL PLATED BRASS|14|432 +Brand#12|STANDARD BRUSHED TIN|23|432 +Brand#12|STANDARD BURNISHED COPPER|19|432 +Brand#12|STANDARD PLATED BRASS|14|432 +Brand#13|ECONOMY BRUSHED STEEL|3|432 +Brand#13|ECONOMY BRUSHED STEEL|14|432 +Brand#13|ECONOMY BURNISHED NICKEL|23|432 +Brand#13|ECONOMY BURNISHED STEEL|23|432 +Brand#13|ECONOMY BURNISHED TIN|49|432 +Brand#13|ECONOMY PLATED COPPER|3|432 +Brand#13|ECONOMY PLATED COPPER|9|432 +Brand#13|ECONOMY POLISHED BRASS|49|432 +Brand#13|LARGE BRUSHED COPPER|45|432 +Brand#13|LARGE BRUSHED TIN|36|432 +Brand#13|LARGE BURNISHED COPPER|45|432 +Brand#13|LARGE BURNISHED NICKEL|14|432 +Brand#13|LARGE PLATED STEEL|36|432 +Brand#13|LARGE POLISHED STEEL|3|432 +Brand#13|LARGE POLISHED TIN|45|432 +Brand#13|MEDIUM ANODIZED COPPER|45|432 +Brand#13|MEDIUM ANODIZED STEEL|3|432 +Brand#13|MEDIUM BRUSHED COPPER|23|432 +Brand#13|MEDIUM BURNISHED COPPER|36|432 +Brand#13|MEDIUM BURNISHED STEEL|19|432 +Brand#13|MEDIUM BURNISHED STEEL|45|432 +Brand#13|PROMO BRUSHED NICKEL|45|432 +Brand#13|PROMO BURNISHED STEEL|23|432 +Brand#13|PROMO POLISHED BRASS|23|432 +Brand#13|PROMO POLISHED BRASS|45|432 +Brand#13|PROMO POLISHED NICKEL|36|432 +Brand#13|SMALL ANODIZED COPPER|23|432 +Brand#13|SMALL BRUSHED NICKEL|9|432 +Brand#13|SMALL BURNISHED NICKEL|49|432 +Brand#13|SMALL POLISHED NICKEL|3|432 +Brand#13|SMALL POLISHED STEEL|3|432 +Brand#13|STANDARD ANODIZED STEEL|36|432 +Brand#13|STANDARD POLISHED NICKEL|23|432 +Brand#13|STANDARD POLISHED NICKEL|45|432 +Brand#13|STANDARD POLISHED TIN|19|432 +Brand#13|STANDARD POLISHED TIN|23|432 +Brand#13|STANDARD POLISHED TIN|36|432 +Brand#14|ECONOMY ANODIZED COPPER|19|432 +Brand#14|ECONOMY ANODIZED COPPER|49|432 +Brand#14|ECONOMY BRUSHED STEEL|14|432 +Brand#14|ECONOMY POLISHED COPPER|23|432 +Brand#14|ECONOMY POLISHED NICKEL|36|432 +Brand#14|ECONOMY POLISHED STEEL|23|432 +Brand#14|LARGE BRUSHED NICKEL|23|432 +Brand#14|LARGE BRUSHED NICKEL|45|432 +Brand#14|LARGE BRUSHED STEEL|19|432 +Brand#14|LARGE BURNISHED COPPER|9|432 +Brand#14|LARGE PLATED STEEL|49|432 +Brand#14|LARGE POLISHED BRASS|23|432 +Brand#14|MEDIUM ANODIZED BRASS|19|432 +Brand#14|MEDIUM ANODIZED BRASS|36|432 +Brand#14|MEDIUM ANODIZED COPPER|14|432 +Brand#14|MEDIUM ANODIZED TIN|45|432 +Brand#14|MEDIUM BRUSHED BRASS|19|432 +Brand#14|MEDIUM BURNISHED NICKEL|23|432 +Brand#14|PROMO ANODIZED STEEL|3|432 +Brand#14|PROMO BRUSHED TIN|36|432 +Brand#14|PROMO BURNISHED NICKEL|14|432 +Brand#14|PROMO BURNISHED TIN|49|432 +Brand#14|PROMO PLATED NICKEL|45|432 +Brand#14|PROMO POLISHED STEEL|49|432 +Brand#14|SMALL ANODIZED COPPER|14|432 +Brand#14|SMALL ANODIZED NICKEL|19|432 +Brand#14|SMALL BURNISHED BRASS|36|432 +Brand#14|SMALL BURNISHED NICKEL|14|432 +Brand#14|SMALL BURNISHED NICKEL|23|432 +Brand#14|SMALL BURNISHED TIN|3|432 +Brand#14|SMALL PLATED BRASS|14|432 +Brand#14|SMALL PLATED COPPER|23|432 +Brand#14|SMALL PLATED STEEL|36|432 +Brand#14|SMALL PLATED TIN|45|432 +Brand#14|STANDARD BRUSHED NICKEL|45|432 +Brand#14|STANDARD PLATED BRASS|49|432 +Brand#14|STANDARD PLATED TIN|19|432 +Brand#15|ECONOMY BURNISHED NICKEL|36|432 +Brand#15|ECONOMY BURNISHED TIN|23|432 +Brand#15|ECONOMY PLATED NICKEL|3|432 +Brand#15|ECONOMY POLISHED BRASS|9|432 +Brand#15|LARGE ANODIZED BRASS|23|432 +Brand#15|LARGE ANODIZED BRASS|36|432 +Brand#15|LARGE ANODIZED NICKEL|36|432 +Brand#15|LARGE BRUSHED BRASS|23|432 +Brand#15|LARGE BRUSHED STEEL|49|432 +Brand#15|LARGE BRUSHED TIN|14|432 +Brand#15|LARGE BURNISHED COPPER|14|432 +Brand#15|LARGE PLATED COPPER|3|432 +Brand#15|MEDIUM ANODIZED NICKEL|23|432 +Brand#15|MEDIUM BURNISHED NICKEL|23|432 +Brand#15|MEDIUM PLATED BRASS|23|432 +Brand#15|MEDIUM PLATED COPPER|23|432 +Brand#15|MEDIUM PLATED NICKEL|23|432 +Brand#15|PROMO ANODIZED BRASS|9|432 +Brand#15|PROMO BRUSHED STEEL|9|432 +Brand#15|PROMO BRUSHED STEEL|45|432 +Brand#15|PROMO BURNISHED BRASS|36|432 +Brand#15|PROMO POLISHED NICKEL|45|432 +Brand#15|PROMO POLISHED NICKEL|49|432 +Brand#15|SMALL BRUSHED BRASS|9|432 +Brand#15|SMALL BRUSHED TIN|36|432 +Brand#15|SMALL BURNISHED BRASS|14|432 +Brand#15|SMALL PLATED STEEL|45|432 +Brand#15|SMALL POLISHED NICKEL|3|432 +Brand#15|STANDARD BURNISHED COPPER|49|432 +Brand#15|STANDARD BURNISHED STEEL|36|432 +Brand#21|ECONOMY ANODIZED BRASS|14|432 +Brand#21|ECONOMY ANODIZED COPPER|23|432 +Brand#21|ECONOMY BRUSHED COPPER|9|432 +Brand#21|ECONOMY PLATED BRASS|14|432 +Brand#21|ECONOMY PLATED NICKEL|9|432 +Brand#21|ECONOMY PLATED STEEL|9|432 +Brand#21|LARGE ANODIZED COPPER|49|432 +Brand#21|LARGE ANODIZED TIN|36|432 +Brand#21|LARGE BRUSHED COPPER|19|432 +Brand#21|LARGE BURNISHED NICKEL|14|432 +Brand#21|LARGE PLATED STEEL|36|432 +Brand#21|LARGE PLATED TIN|23|432 +Brand#21|MEDIUM ANODIZED STEEL|19|432 +Brand#21|MEDIUM BRUSHED BRASS|49|432 +Brand#21|MEDIUM BRUSHED COPPER|49|432 +Brand#21|MEDIUM PLATED BRASS|14|432 +Brand#21|PROMO ANODIZED NICKEL|45|432 +Brand#21|PROMO BURNISHED BRASS|19|432 +Brand#21|PROMO BURNISHED COPPER|14|432 +Brand#21|PROMO BURNISHED TIN|23|432 +Brand#21|PROMO PLATED NICKEL|45|432 +Brand#21|SMALL ANODIZED STEEL|45|432 +Brand#21|SMALL ANODIZED STEEL|49|432 +Brand#21|SMALL ANODIZED TIN|9|432 +Brand#21|SMALL BRUSHED NICKEL|23|432 +Brand#21|SMALL PLATED STEEL|3|432 +Brand#21|SMALL PLATED TIN|45|432 +Brand#21|SMALL POLISHED BRASS|9|432 +Brand#21|SMALL POLISHED BRASS|14|432 +Brand#21|SMALL POLISHED STEEL|45|432 +Brand#21|STANDARD ANODIZED STEEL|45|432 +Brand#21|STANDARD BRUSHED BRASS|3|432 +Brand#21|STANDARD BRUSHED BRASS|19|432 +Brand#21|STANDARD BRUSHED BRASS|45|432 +Brand#21|STANDARD BRUSHED TIN|19|432 +Brand#21|STANDARD BURNISHED NICKEL|3|432 +Brand#21|STANDARD PLATED BRASS|23|432 +Brand#21|STANDARD POLISHED COPPER|45|432 +Brand#21|STANDARD POLISHED NICKEL|19|432 +Brand#22|ECONOMY ANODIZED BRASS|36|432 +Brand#22|ECONOMY PLATED BRASS|19|432 +Brand#22|ECONOMY PLATED STEEL|19|432 +Brand#22|LARGE BRUSHED BRASS|36|432 +Brand#22|LARGE BRUSHED BRASS|45|432 +Brand#22|LARGE BRUSHED NICKEL|45|432 +Brand#22|LARGE BURNISHED COPPER|49|432 +Brand#22|LARGE BURNISHED STEEL|19|432 +Brand#22|LARGE BURNISHED TIN|49|432 +Brand#22|LARGE PLATED BRASS|14|432 +Brand#22|LARGE PLATED BRASS|45|432 +Brand#22|LARGE POLISHED BRASS|23|432 +Brand#22|LARGE POLISHED NICKEL|49|432 +Brand#22|LARGE POLISHED STEEL|3|432 +Brand#22|MEDIUM ANODIZED STEEL|23|432 +Brand#22|MEDIUM ANODIZED TIN|45|432 +Brand#22|MEDIUM BRUSHED BRASS|23|432 +Brand#22|MEDIUM BRUSHED NICKEL|9|432 +Brand#22|MEDIUM BURNISHED NICKEL|49|432 +Brand#22|MEDIUM PLATED BRASS|23|432 +Brand#22|MEDIUM PLATED STEEL|3|432 +Brand#22|PROMO ANODIZED NICKEL|3|432 +Brand#22|PROMO BRUSHED COPPER|45|432 +Brand#22|PROMO BURNISHED BRASS|49|432 +Brand#22|PROMO PLATED BRASS|9|432 +Brand#22|PROMO PLATED COPPER|45|432 +Brand#22|PROMO PLATED COPPER|49|432 +Brand#22|PROMO PLATED STEEL|23|432 +Brand#22|PROMO POLISHED BRASS|23|432 +Brand#22|PROMO POLISHED NICKEL|9|432 +Brand#22|SMALL ANODIZED COPPER|3|432 +Brand#22|SMALL ANODIZED COPPER|23|432 +Brand#22|SMALL BRUSHED NICKEL|19|432 +Brand#22|SMALL BURNISHED BRASS|14|432 +Brand#22|SMALL BURNISHED STEEL|19|432 +Brand#22|SMALL PLATED STEEL|36|432 +Brand#22|SMALL POLISHED NICKEL|23|432 +Brand#22|STANDARD ANODIZED BRASS|23|432 +Brand#22|STANDARD BRUSHED NICKEL|45|432 +Brand#22|STANDARD BURNISHED TIN|14|432 +Brand#23|ECONOMY ANODIZED COPPER|45|432 +Brand#23|ECONOMY BRUSHED BRASS|14|432 +Brand#23|ECONOMY BRUSHED COPPER|3|432 +Brand#23|ECONOMY BURNISHED STEEL|23|432 +Brand#23|ECONOMY BURNISHED STEEL|49|432 +Brand#23|ECONOMY BURNISHED TIN|36|432 +Brand#23|ECONOMY POLISHED NICKEL|3|432 +Brand#23|ECONOMY POLISHED NICKEL|45|432 +Brand#23|ECONOMY POLISHED STEEL|36|432 +Brand#23|LARGE ANODIZED STEEL|3|432 +Brand#23|LARGE BRUSHED STEEL|23|432 +Brand#23|LARGE BRUSHED STEEL|45|432 +Brand#23|LARGE BRUSHED TIN|49|432 +Brand#23|LARGE BURNISHED NICKEL|9|432 +Brand#23|LARGE PLATED BRASS|3|432 +Brand#23|LARGE POLISHED BRASS|14|432 +Brand#23|LARGE POLISHED NICKEL|36|432 +Brand#23|LARGE POLISHED TIN|45|432 +Brand#23|MEDIUM ANODIZED COPPER|19|432 +Brand#23|MEDIUM BRUSHED STEEL|3|432 +Brand#23|MEDIUM BURNISHED TIN|49|432 +Brand#23|PROMO ANODIZED COPPER|19|432 +Brand#23|PROMO ANODIZED COPPER|36|432 +Brand#23|PROMO ANODIZED NICKEL|9|432 +Brand#23|PROMO BRUSHED COPPER|9|432 +Brand#23|PROMO BRUSHED TIN|36|432 +Brand#23|PROMO BURNISHED NICKEL|36|432 +Brand#23|PROMO PLATED COPPER|23|432 +Brand#23|SMALL ANODIZED BRASS|9|432 +Brand#23|SMALL ANODIZED BRASS|36|432 +Brand#23|SMALL BURNISHED BRASS|14|432 +Brand#23|SMALL BURNISHED STEEL|9|432 +Brand#23|SMALL BURNISHED TIN|19|432 +Brand#23|SMALL PLATED NICKEL|36|432 +Brand#23|SMALL PLATED STEEL|3|432 +Brand#23|SMALL POLISHED COPPER|36|432 +Brand#23|SMALL POLISHED TIN|14|432 +Brand#23|STANDARD BRUSHED BRASS|19|432 +Brand#23|STANDARD BRUSHED BRASS|23|432 +Brand#23|STANDARD BRUSHED NICKEL|19|432 +Brand#23|STANDARD BURNISHED TIN|49|432 +Brand#23|STANDARD PLATED COPPER|19|432 +Brand#23|STANDARD PLATED TIN|14|432 +Brand#24|ECONOMY ANODIZED COPPER|45|432 +Brand#24|ECONOMY ANODIZED STEEL|14|432 +Brand#24|ECONOMY BRUSHED NICKEL|9|432 +Brand#24|ECONOMY BRUSHED TIN|45|432 +Brand#24|ECONOMY BURNISHED BRASS|49|432 +Brand#24|ECONOMY BURNISHED TIN|49|432 +Brand#24|ECONOMY PLATED COPPER|3|432 +Brand#24|ECONOMY PLATED COPPER|36|432 +Brand#24|ECONOMY PLATED STEEL|14|432 +Brand#24|LARGE ANODIZED COPPER|45|432 +Brand#24|LARGE BURNISHED COPPER|23|432 +Brand#24|LARGE BURNISHED COPPER|49|432 +Brand#24|LARGE BURNISHED TIN|14|432 +Brand#24|LARGE PLATED COPPER|45|432 +Brand#24|LARGE PLATED TIN|14|432 +Brand#24|LARGE PLATED TIN|45|432 +Brand#24|LARGE POLISHED NICKEL|3|432 +Brand#24|MEDIUM ANODIZED BRASS|14|432 +Brand#24|MEDIUM ANODIZED COPPER|14|432 +Brand#24|MEDIUM BURNISHED COPPER|9|432 +Brand#24|PROMO ANODIZED COPPER|45|432 +Brand#24|PROMO BRUSHED NICKEL|3|432 +Brand#24|PROMO BRUSHED TIN|49|432 +Brand#24|PROMO BURNISHED BRASS|45|432 +Brand#24|PROMO BURNISHED NICKEL|45|432 +Brand#24|PROMO BURNISHED TIN|19|432 +Brand#24|PROMO BURNISHED TIN|23|432 +Brand#24|PROMO PLATED NICKEL|19|432 +Brand#24|PROMO POLISHED STEEL|36|432 +Brand#24|SMALL BRUSHED TIN|19|432 +Brand#24|SMALL PLATED NICKEL|9|432 +Brand#24|SMALL POLISHED BRASS|45|432 +Brand#24|STANDARD ANODIZED COPPER|23|432 +Brand#24|STANDARD BRUSHED BRASS|14|432 +Brand#24|STANDARD BURNISHED COPPER|9|432 +Brand#24|STANDARD POLISHED COPPER|23|432 +Brand#24|STANDARD POLISHED STEEL|23|432 +Brand#24|STANDARD POLISHED TIN|36|432 +Brand#25|ECONOMY ANODIZED COPPER|14|432 +Brand#25|ECONOMY ANODIZED COPPER|49|432 +Brand#25|ECONOMY BURNISHED TIN|36|432 +Brand#25|ECONOMY PLATED NICKEL|3|432 +Brand#25|ECONOMY PLATED NICKEL|36|432 +Brand#25|LARGE ANODIZED COPPER|3|432 +Brand#25|LARGE BRUSHED STEEL|14|432 +Brand#25|MEDIUM ANODIZED BRASS|14|432 +Brand#25|MEDIUM ANODIZED COPPER|3|432 +Brand#25|MEDIUM ANODIZED TIN|14|432 +Brand#25|MEDIUM ANODIZED TIN|23|432 +Brand#25|MEDIUM ANODIZED TIN|45|432 +Brand#25|MEDIUM BRUSHED STEEL|49|432 +Brand#25|MEDIUM BRUSHED TIN|36|432 +Brand#25|MEDIUM BURNISHED STEEL|23|432 +Brand#25|MEDIUM PLATED BRASS|49|432 +Brand#25|MEDIUM PLATED TIN|23|432 +Brand#25|PROMO BRUSHED NICKEL|9|432 +Brand#25|PROMO BRUSHED TIN|9|432 +Brand#25|PROMO BURNISHED COPPER|19|432 +Brand#25|PROMO PLATED COPPER|14|432 +Brand#25|PROMO PLATED NICKEL|23|432 +Brand#25|PROMO PLATED TIN|19|432 +Brand#25|SMALL ANODIZED BRASS|45|432 +Brand#25|SMALL BURNISHED STEEL|3|432 +Brand#25|SMALL PLATED BRASS|23|432 +Brand#25|STANDARD ANODIZED BRASS|3|432 +Brand#25|STANDARD ANODIZED COPPER|14|432 +Brand#25|STANDARD ANODIZED TIN|3|432 +Brand#25|STANDARD BURNISHED TIN|9|432 +Brand#25|STANDARD PLATED COPPER|36|432 +Brand#25|STANDARD PLATED NICKEL|36|432 +Brand#25|STANDARD POLISHED STEEL|36|432 +Brand#31|ECONOMY ANODIZED NICKEL|45|432 +Brand#31|ECONOMY ANODIZED STEEL|23|432 +Brand#31|ECONOMY BRUSHED TIN|45|432 +Brand#31|ECONOMY PLATED NICKEL|14|432 +Brand#31|ECONOMY PLATED STEEL|9|432 +Brand#31|ECONOMY POLISHED BRASS|14|432 +Brand#31|ECONOMY POLISHED TIN|45|432 +Brand#31|LARGE ANODIZED BRASS|23|432 +Brand#31|LARGE BRUSHED BRASS|19|432 +Brand#31|LARGE BURNISHED BRASS|36|432 +Brand#31|LARGE BURNISHED COPPER|49|432 +Brand#31|LARGE PLATED STEEL|23|432 +Brand#31|LARGE PLATED TIN|23|432 +Brand#31|LARGE PLATED TIN|45|432 +Brand#31|LARGE POLISHED BRASS|36|432 +Brand#31|LARGE POLISHED NICKEL|36|432 +Brand#31|LARGE POLISHED STEEL|14|432 +Brand#31|LARGE POLISHED TIN|36|432 +Brand#31|MEDIUM BRUSHED NICKEL|3|432 +Brand#31|MEDIUM BURNISHED COPPER|45|432 +Brand#31|MEDIUM PLATED COPPER|14|432 +Brand#31|PROMO ANODIZED STEEL|19|432 +Brand#31|PROMO BRUSHED TIN|23|432 +Brand#31|PROMO BURNISHED COPPER|23|432 +Brand#31|PROMO BURNISHED NICKEL|9|432 +Brand#31|PROMO PLATED BRASS|14|432 +Brand#31|PROMO PLATED NICKEL|3|432 +Brand#31|SMALL ANODIZED COPPER|36|432 +Brand#31|SMALL ANODIZED STEEL|14|432 +Brand#31|SMALL BRUSHED NICKEL|19|432 +Brand#31|SMALL BURNISHED STEEL|14|432 +Brand#31|STANDARD ANODIZED TIN|19|432 +Brand#31|STANDARD BRUSHED COPPER|9|432 +Brand#31|STANDARD BRUSHED NICKEL|45|432 +Brand#31|STANDARD BURNISHED BRASS|36|432 +Brand#31|STANDARD BURNISHED COPPER|49|432 +Brand#31|STANDARD BURNISHED NICKEL|49|432 +Brand#31|STANDARD BURNISHED TIN|14|432 +Brand#31|STANDARD PLATED STEEL|36|432 +Brand#31|STANDARD POLISHED BRASS|19|432 +Brand#31|STANDARD POLISHED NICKEL|9|432 +Brand#31|STANDARD POLISHED NICKEL|49|432 +Brand#32|ECONOMY ANODIZED COPPER|36|432 +Brand#32|ECONOMY ANODIZED TIN|9|432 +Brand#32|ECONOMY BRUSHED NICKEL|49|432 +Brand#32|ECONOMY BURNISHED COPPER|3|432 +Brand#32|ECONOMY PLATED STEEL|23|432 +Brand#32|ECONOMY PLATED STEEL|45|432 +Brand#32|ECONOMY POLISHED TIN|45|432 +Brand#32|LARGE ANODIZED BRASS|19|432 +Brand#32|LARGE ANODIZED BRASS|45|432 +Brand#32|LARGE ANODIZED TIN|3|432 +Brand#32|LARGE BURNISHED TIN|14|432 +Brand#32|LARGE PLATED NICKEL|45|432 +Brand#32|LARGE POLISHED COPPER|9|432 +Brand#32|LARGE POLISHED STEEL|49|432 +Brand#32|MEDIUM ANODIZED BRASS|19|432 +Brand#32|MEDIUM BRUSHED BRASS|14|432 +Brand#32|MEDIUM BRUSHED COPPER|36|432 +Brand#32|MEDIUM BRUSHED NICKEL|14|432 +Brand#32|MEDIUM BRUSHED NICKEL|19|432 +Brand#32|MEDIUM BRUSHED STEEL|3|432 +Brand#32|MEDIUM BURNISHED TIN|23|432 +Brand#32|PROMO ANODIZED TIN|14|432 +Brand#32|PROMO ANODIZED TIN|36|432 +Brand#32|PROMO BRUSHED COPPER|19|432 +Brand#32|PROMO BURNISHED COPPER|49|432 +Brand#32|PROMO PLATED BRASS|14|432 +Brand#32|PROMO PLATED BRASS|19|432 +Brand#32|PROMO PLATED COPPER|3|432 +Brand#32|SMALL ANODIZED STEEL|14|432 +Brand#32|SMALL BRUSHED NICKEL|36|432 +Brand#32|SMALL BURNISHED BRASS|19|432 +Brand#32|SMALL BURNISHED BRASS|36|432 +Brand#32|SMALL BURNISHED COPPER|23|432 +Brand#32|SMALL BURNISHED NICKEL|19|432 +Brand#32|SMALL PLATED BRASS|3|432 +Brand#32|SMALL PLATED TIN|9|432 +Brand#32|SMALL PLATED TIN|45|432 +Brand#32|STANDARD ANODIZED COPPER|49|432 +Brand#32|STANDARD BURNISHED COPPER|45|432 +Brand#32|STANDARD PLATED BRASS|45|432 +Brand#32|STANDARD PLATED COPPER|45|432 +Brand#33|ECONOMY BRUSHED COPPER|23|432 +Brand#33|ECONOMY PLATED BRASS|14|432 +Brand#33|ECONOMY PLATED STEEL|49|432 +Brand#33|ECONOMY POLISHED COPPER|49|432 +Brand#33|ECONOMY POLISHED NICKEL|9|432 +Brand#33|ECONOMY POLISHED STEEL|45|432 +Brand#33|LARGE BRUSHED BRASS|9|432 +Brand#33|LARGE BRUSHED BRASS|23|432 +Brand#33|LARGE BRUSHED COPPER|19|432 +Brand#33|LARGE PLATED STEEL|3|432 +Brand#33|LARGE POLISHED NICKEL|19|432 +Brand#33|MEDIUM ANODIZED NICKEL|36|432 +Brand#33|MEDIUM BRUSHED STEEL|3|432 +Brand#33|MEDIUM PLATED TIN|45|432 +Brand#33|PROMO ANODIZED COPPER|45|432 +Brand#33|PROMO ANODIZED STEEL|3|432 +Brand#33|PROMO ANODIZED STEEL|45|432 +Brand#33|PROMO PLATED BRASS|3|432 +Brand#33|PROMO PLATED NICKEL|19|432 +Brand#33|SMALL ANODIZED NICKEL|19|432 +Brand#33|SMALL ANODIZED TIN|19|432 +Brand#33|SMALL BRUSHED COPPER|49|432 +Brand#33|SMALL BURNISHED BRASS|45|432 +Brand#33|SMALL BURNISHED TIN|9|432 +Brand#33|SMALL BURNISHED TIN|19|432 +Brand#33|SMALL PLATED NICKEL|3|432 +Brand#33|SMALL POLISHED BRASS|3|432 +Brand#33|SMALL POLISHED COPPER|19|432 +Brand#33|STANDARD BRUSHED COPPER|49|432 +Brand#33|STANDARD BURNISHED NICKEL|19|432 +Brand#33|STANDARD BURNISHED NICKEL|45|432 +Brand#33|STANDARD BURNISHED TIN|3|432 +Brand#33|STANDARD PLATED NICKEL|49|432 +Brand#33|STANDARD POLISHED NICKEL|9|432 +Brand#34|ECONOMY ANODIZED BRASS|14|432 +Brand#34|ECONOMY ANODIZED BRASS|19|432 +Brand#34|ECONOMY ANODIZED TIN|45|432 +Brand#34|ECONOMY BURNISHED COPPER|14|432 +Brand#34|ECONOMY BURNISHED COPPER|45|432 +Brand#34|LARGE ANODIZED COPPER|36|432 +Brand#34|LARGE ANODIZED TIN|3|432 +Brand#34|LARGE BRUSHED BRASS|9|432 +Brand#34|LARGE BURNISHED BRASS|45|432 +Brand#34|LARGE BURNISHED NICKEL|19|432 +Brand#34|LARGE BURNISHED TIN|23|432 +Brand#34|LARGE PLATED COPPER|19|432 +Brand#34|MEDIUM ANODIZED NICKEL|14|432 +Brand#34|MEDIUM ANODIZED STEEL|14|432 +Brand#34|MEDIUM BRUSHED NICKEL|14|432 +Brand#34|MEDIUM BURNISHED COPPER|45|432 +Brand#34|MEDIUM PLATED COPPER|19|432 +Brand#34|PROMO ANODIZED TIN|9|432 +Brand#34|PROMO ANODIZED TIN|19|432 +Brand#34|PROMO BRUSHED COPPER|23|432 +Brand#34|PROMO BRUSHED NICKEL|9|432 +Brand#34|PROMO BRUSHED TIN|9|432 +Brand#34|PROMO BURNISHED COPPER|45|432 +Brand#34|PROMO PLATED TIN|3|432 +Brand#34|PROMO PLATED TIN|49|432 +Brand#34|PROMO POLISHED COPPER|19|432 +Brand#34|PROMO POLISHED TIN|9|432 +Brand#34|SMALL ANODIZED BRASS|19|432 +Brand#34|SMALL ANODIZED TIN|45|432 +Brand#34|SMALL BRUSHED COPPER|49|432 +Brand#34|SMALL BRUSHED NICKEL|45|432 +Brand#34|SMALL BRUSHED STEEL|49|432 +Brand#34|SMALL BURNISHED BRASS|45|432 +Brand#34|SMALL BURNISHED COPPER|19|432 +Brand#34|SMALL BURNISHED COPPER|49|432 +Brand#34|SMALL BURNISHED NICKEL|36|432 +Brand#34|SMALL PLATED BRASS|9|432 +Brand#34|SMALL PLATED TIN|3|432 +Brand#34|SMALL POLISHED BRASS|14|432 +Brand#34|SMALL POLISHED BRASS|49|432 +Brand#34|STANDARD ANODIZED STEEL|19|432 +Brand#34|STANDARD BRUSHED BRASS|49|432 +Brand#34|STANDARD BRUSHED COPPER|36|432 +Brand#34|STANDARD BURNISHED NICKEL|49|432 +Brand#34|STANDARD BURNISHED STEEL|14|432 +Brand#34|STANDARD PLATED TIN|36|432 +Brand#34|STANDARD POLISHED TIN|3|432 +Brand#34|STANDARD POLISHED TIN|23|432 +Brand#34|STANDARD POLISHED TIN|49|432 +Brand#35|ECONOMY BRUSHED BRASS|36|432 +Brand#35|ECONOMY BURNISHED BRASS|19|432 +Brand#35|ECONOMY BURNISHED NICKEL|45|432 +Brand#35|ECONOMY PLATED BRASS|23|432 +Brand#35|ECONOMY PLATED NICKEL|36|432 +Brand#35|ECONOMY POLISHED NICKEL|9|432 +Brand#35|LARGE BRUSHED COPPER|19|432 +Brand#35|LARGE BRUSHED COPPER|36|432 +Brand#35|LARGE POLISHED TIN|14|432 +Brand#35|MEDIUM ANODIZED COPPER|45|432 +Brand#35|MEDIUM ANODIZED NICKEL|19|432 +Brand#35|MEDIUM ANODIZED TIN|9|432 +Brand#35|MEDIUM BRUSHED STEEL|36|432 +Brand#35|MEDIUM BURNISHED BRASS|3|432 +Brand#35|MEDIUM BURNISHED NICKEL|3|432 +Brand#35|MEDIUM BURNISHED TIN|14|432 +Brand#35|PROMO ANODIZED BRASS|49|432 +Brand#35|PROMO BRUSHED COPPER|19|432 +Brand#35|PROMO BURNISHED NICKEL|36|432 +Brand#35|SMALL ANODIZED STEEL|36|432 +Brand#35|SMALL BRUSHED BRASS|9|432 +Brand#35|SMALL BURNISHED BRASS|36|432 +Brand#35|SMALL BURNISHED BRASS|49|432 +Brand#35|SMALL PLATED BRASS|45|432 +Brand#35|SMALL PLATED BRASS|49|432 +Brand#35|STANDARD BRUSHED TIN|3|432 +Brand#35|STANDARD BURNISHED NICKEL|19|432 +Brand#35|STANDARD PLATED BRASS|49|432 +Brand#35|STANDARD PLATED STEEL|45|432 +Brand#41|ECONOMY ANODIZED NICKEL|45|432 +Brand#41|ECONOMY ANODIZED TIN|23|432 +Brand#41|ECONOMY PLATED TIN|19|432 +Brand#41|ECONOMY POLISHED STEEL|14|432 +Brand#41|LARGE ANODIZED STEEL|9|432 +Brand#41|LARGE ANODIZED STEEL|19|432 +Brand#41|LARGE PLATED NICKEL|49|432 +Brand#41|LARGE PLATED STEEL|45|432 +Brand#41|LARGE POLISHED BRASS|19|432 +Brand#41|LARGE POLISHED COPPER|14|432 +Brand#41|LARGE POLISHED STEEL|3|432 +Brand#41|LARGE POLISHED TIN|3|432 +Brand#41|MEDIUM ANODIZED BRASS|36|432 +Brand#41|MEDIUM ANODIZED COPPER|49|432 +Brand#41|MEDIUM ANODIZED TIN|49|432 +Brand#41|MEDIUM BRUSHED BRASS|19|432 +Brand#41|MEDIUM BRUSHED BRASS|45|432 +Brand#41|MEDIUM BURNISHED NICKEL|19|432 +Brand#41|MEDIUM PLATED COPPER|9|432 +Brand#41|PROMO BRUSHED BRASS|9|432 +Brand#41|PROMO BURNISHED COPPER|49|432 +Brand#41|PROMO POLISHED NICKEL|9|432 +Brand#41|SMALL PLATED STEEL|9|432 +Brand#41|SMALL POLISHED NICKEL|19|432 +Brand#41|STANDARD ANODIZED COPPER|36|432 +Brand#41|STANDARD BRUSHED TIN|23|432 +Brand#41|STANDARD BURNISHED BRASS|49|432 +Brand#41|STANDARD PLATED BRASS|9|432 +Brand#41|STANDARD POLISHED BRASS|19|432 +Brand#41|STANDARD POLISHED BRASS|45|432 +Brand#42|ECONOMY BRUSHED STEEL|36|432 +Brand#42|ECONOMY BRUSHED TIN|36|432 +Brand#42|ECONOMY BURNISHED NICKEL|36|432 +Brand#42|ECONOMY BURNISHED STEEL|23|432 +Brand#42|ECONOMY PLATED BRASS|14|432 +Brand#42|ECONOMY PLATED NICKEL|9|432 +Brand#42|ECONOMY POLISHED STEEL|49|432 +Brand#42|LARGE BRUSHED COPPER|23|432 +Brand#42|LARGE BRUSHED COPPER|45|432 +Brand#42|LARGE BRUSHED TIN|36|432 +Brand#42|LARGE BURNISHED NICKEL|9|432 +Brand#42|LARGE PLATED NICKEL|36|432 +Brand#42|MEDIUM ANODIZED TIN|14|432 +Brand#42|MEDIUM ANODIZED TIN|19|432 +Brand#42|MEDIUM BRUSHED TIN|36|432 +Brand#42|MEDIUM BURNISHED TIN|45|432 +Brand#42|MEDIUM PLATED COPPER|9|432 +Brand#42|PROMO ANODIZED COPPER|14|432 +Brand#42|PROMO ANODIZED NICKEL|9|432 +Brand#42|PROMO ANODIZED STEEL|9|432 +Brand#42|PROMO BRUSHED BRASS|9|432 +Brand#42|PROMO BRUSHED BRASS|45|432 +Brand#42|PROMO PLATED BRASS|45|432 +Brand#42|SMALL BRUSHED STEEL|19|432 +Brand#42|SMALL BURNISHED COPPER|23|432 +Brand#42|SMALL BURNISHED TIN|45|432 +Brand#42|SMALL PLATED BRASS|14|432 +Brand#42|SMALL PLATED COPPER|19|432 +Brand#42|STANDARD PLATED COPPER|45|432 +Brand#42|STANDARD POLISHED COPPER|36|432 +Brand#42|STANDARD POLISHED TIN|14|432 +Brand#43|ECONOMY ANODIZED TIN|36|432 +Brand#43|ECONOMY BRUSHED NICKEL|23|432 +Brand#43|ECONOMY BURNISHED COPPER|3|432 +Brand#43|ECONOMY BURNISHED TIN|19|432 +Brand#43|ECONOMY PLATED STEEL|49|432 +Brand#43|ECONOMY POLISHED COPPER|19|432 +Brand#43|ECONOMY POLISHED TIN|3|432 +Brand#43|LARGE ANODIZED BRASS|45|432 +Brand#43|LARGE ANODIZED COPPER|19|432 +Brand#43|LARGE BRUSHED TIN|45|432 +Brand#43|LARGE BURNISHED BRASS|3|432 +Brand#43|LARGE BURNISHED STEEL|49|432 +Brand#43|LARGE POLISHED BRASS|9|432 +Brand#43|LARGE POLISHED NICKEL|45|432 +Brand#43|MEDIUM BRUSHED NICKEL|3|432 +Brand#43|MEDIUM BRUSHED STEEL|9|432 +Brand#43|MEDIUM BURNISHED NICKEL|19|432 +Brand#43|PROMO ANODIZED BRASS|45|432 +Brand#43|PROMO ANODIZED COPPER|19|432 +Brand#43|PROMO ANODIZED COPPER|23|432 +Brand#43|PROMO ANODIZED STEEL|49|432 +Brand#43|PROMO BRUSHED NICKEL|19|432 +Brand#43|PROMO BURNISHED NICKEL|36|432 +Brand#43|PROMO BURNISHED TIN|14|432 +Brand#43|PROMO BURNISHED TIN|45|432 +Brand#43|PROMO POLISHED TIN|3|432 +Brand#43|SMALL ANODIZED TIN|23|432 +Brand#43|SMALL BRUSHED BRASS|19|432 +Brand#43|SMALL BRUSHED BRASS|23|432 +Brand#43|SMALL PLATED TIN|49|432 +Brand#43|SMALL POLISHED BRASS|9|432 +Brand#43|SMALL POLISHED TIN|9|432 +Brand#43|STANDARD ANODIZED TIN|19|432 +Brand#43|STANDARD ANODIZED TIN|45|432 +Brand#43|STANDARD BRUSHED NICKEL|45|432 +Brand#43|STANDARD BURNISHED BRASS|19|432 +Brand#43|STANDARD BURNISHED NICKEL|45|432 +Brand#43|STANDARD BURNISHED TIN|14|432 +Brand#43|STANDARD BURNISHED TIN|45|432 +Brand#43|STANDARD PLATED COPPER|36|432 +Brand#43|STANDARD PLATED STEEL|3|432 +Brand#43|STANDARD PLATED STEEL|45|432 +Brand#43|STANDARD POLISHED STEEL|9|432 +Brand#44|ECONOMY ANODIZED BRASS|23|432 +Brand#44|ECONOMY BRUSHED STEEL|23|432 +Brand#44|ECONOMY BRUSHED STEEL|49|432 +Brand#44|ECONOMY BURNISHED BRASS|3|432 +Brand#44|ECONOMY BURNISHED TIN|49|432 +Brand#44|ECONOMY PLATED NICKEL|19|432 +Brand#44|ECONOMY POLISHED BRASS|14|432 +Brand#44|ECONOMY POLISHED NICKEL|45|432 +Brand#44|LARGE ANODIZED BRASS|36|432 +Brand#44|MEDIUM BRUSHED STEEL|3|432 +Brand#44|MEDIUM BRUSHED STEEL|9|432 +Brand#44|MEDIUM BRUSHED STEEL|23|432 +Brand#44|MEDIUM BRUSHED STEEL|45|432 +Brand#44|MEDIUM BURNISHED BRASS|45|432 +Brand#44|MEDIUM BURNISHED STEEL|45|432 +Brand#44|PROMO ANODIZED BRASS|36|432 +Brand#44|PROMO ANODIZED COPPER|45|432 +Brand#44|PROMO ANODIZED COPPER|49|432 +Brand#44|PROMO ANODIZED NICKEL|19|432 +Brand#44|PROMO BRUSHED COPPER|19|432 +Brand#44|PROMO BRUSHED NICKEL|45|432 +Brand#44|PROMO BURNISHED COPPER|49|432 +Brand#44|SMALL BURNISHED BRASS|14|432 +Brand#44|SMALL BURNISHED STEEL|9|432 +Brand#44|SMALL PLATED STEEL|3|432 +Brand#44|SMALL POLISHED TIN|23|432 +Brand#44|STANDARD ANODIZED STEEL|23|432 +Brand#44|STANDARD BRUSHED BRASS|14|432 +Brand#44|STANDARD BRUSHED STEEL|19|432 +Brand#44|STANDARD PLATED COPPER|49|432 +Brand#51|ECONOMY ANODIZED NICKEL|3|432 +Brand#51|ECONOMY BURNISHED TIN|3|432 +Brand#51|ECONOMY PLATED BRASS|19|432 +Brand#51|ECONOMY PLATED NICKEL|9|432 +Brand#51|ECONOMY PLATED STEEL|36|432 +Brand#51|ECONOMY POLISHED TIN|45|432 +Brand#51|LARGE ANODIZED TIN|9|432 +Brand#51|LARGE BRUSHED STEEL|14|432 +Brand#51|LARGE BURNISHED TIN|3|432 +Brand#51|MEDIUM ANODIZED BRASS|23|432 +Brand#51|MEDIUM ANODIZED COPPER|14|432 +Brand#51|MEDIUM ANODIZED NICKEL|49|432 +Brand#51|MEDIUM BURNISHED BRASS|36|432 +Brand#51|MEDIUM BURNISHED STEEL|9|432 +Brand#51|MEDIUM BURNISHED TIN|3|432 +Brand#51|MEDIUM PLATED NICKEL|14|432 +Brand#51|PROMO ANODIZED NICKEL|3|432 +Brand#51|PROMO BURNISHED COPPER|23|432 +Brand#51|PROMO PLATED COPPER|49|432 +Brand#51|PROMO PLATED NICKEL|49|432 +Brand#51|PROMO PLATED STEEL|23|432 +Brand#51|SMALL BRUSHED BRASS|19|432 +Brand#51|SMALL BURNISHED TIN|9|432 +Brand#51|SMALL BURNISHED TIN|49|432 +Brand#51|SMALL PLATED COPPER|3|432 +Brand#51|SMALL PLATED NICKEL|49|432 +Brand#51|SMALL POLISHED COPPER|45|432 +Brand#51|SMALL POLISHED STEEL|23|432 +Brand#51|STANDARD ANODIZED STEEL|14|432 +Brand#51|STANDARD BRUSHED COPPER|23|432 +Brand#51|STANDARD BRUSHED COPPER|45|432 +Brand#51|STANDARD BRUSHED NICKEL|23|432 +Brand#51|STANDARD PLATED BRASS|23|432 +Brand#51|STANDARD PLATED COPPER|36|432 +Brand#51|STANDARD PLATED STEEL|14|432 +Brand#51|STANDARD PLATED TIN|14|432 +Brand#51|STANDARD PLATED TIN|23|432 +Brand#52|ECONOMY ANODIZED NICKEL|14|432 +Brand#52|ECONOMY ANODIZED STEEL|49|432 +Brand#52|ECONOMY BURNISHED NICKEL|3|432 +Brand#52|ECONOMY BURNISHED TIN|23|432 +Brand#52|LARGE BURNISHED TIN|19|432 +Brand#52|LARGE PLATED BRASS|36|432 +Brand#52|LARGE PLATED BRASS|49|432 +Brand#52|LARGE PLATED NICKEL|9|432 +Brand#52|LARGE POLISHED COPPER|3|432 +Brand#52|LARGE POLISHED STEEL|49|432 +Brand#52|MEDIUM ANODIZED COPPER|45|432 +Brand#52|MEDIUM ANODIZED NICKEL|14|432 +Brand#52|MEDIUM BRUSHED BRASS|45|432 +Brand#52|PROMO ANODIZED NICKEL|9|432 +Brand#52|PROMO BURNISHED COPPER|3|432 +Brand#52|PROMO BURNISHED NICKEL|49|432 +Brand#52|PROMO PLATED STEEL|9|432 +Brand#52|SMALL ANODIZED COPPER|14|432 +Brand#52|SMALL ANODIZED STEEL|9|432 +Brand#52|SMALL ANODIZED STEEL|49|432 +Brand#52|SMALL BRUSHED STEEL|45|432 +Brand#52|SMALL BURNISHED COPPER|45|432 +Brand#52|SMALL POLISHED BRASS|45|432 +Brand#52|SMALL POLISHED NICKEL|19|432 +Brand#52|SMALL POLISHED TIN|14|432 +Brand#52|STANDARD ANODIZED BRASS|45|432 +Brand#52|STANDARD ANODIZED NICKEL|36|432 +Brand#52|STANDARD BURNISHED STEEL|3|432 +Brand#52|STANDARD BURNISHED STEEL|9|432 +Brand#53|ECONOMY PLATED TIN|14|432 +Brand#53|ECONOMY POLISHED TIN|9|432 +Brand#53|ECONOMY POLISHED TIN|14|432 +Brand#53|ECONOMY POLISHED TIN|19|432 +Brand#53|LARGE ANODIZED NICKEL|45|432 +Brand#53|LARGE BURNISHED NICKEL|36|432 +Brand#53|LARGE BURNISHED STEEL|3|432 +Brand#53|MEDIUM BRUSHED STEEL|23|432 +Brand#53|MEDIUM BURNISHED STEEL|3|432 +Brand#53|PROMO BRUSHED COPPER|49|432 +Brand#53|PROMO BURNISHED TIN|14|432 +Brand#53|PROMO PLATED BRASS|23|432 +Brand#53|PROMO PLATED STEEL|9|432 +Brand#53|SMALL ANODIZED COPPER|23|432 +Brand#53|SMALL ANODIZED TIN|9|432 +Brand#53|SMALL BURNISHED STEEL|3|432 +Brand#53|SMALL BURNISHED TIN|49|432 +Brand#53|SMALL PLATED BRASS|9|432 +Brand#53|SMALL PLATED TIN|36|432 +Brand#53|SMALL POLISHED BRASS|19|432 +Brand#53|SMALL POLISHED COPPER|9|432 +Brand#53|STANDARD ANODIZED BRASS|49|432 +Brand#53|STANDARD PLATED TIN|14|432 +Brand#53|STANDARD POLISHED COPPER|45|432 +Brand#53|STANDARD POLISHED NICKEL|9|432 +Brand#53|STANDARD POLISHED STEEL|9|432 +Brand#53|STANDARD POLISHED TIN|3|432 +Brand#54|ECONOMY ANODIZED BRASS|45|432 +Brand#54|ECONOMY ANODIZED NICKEL|19|432 +Brand#54|ECONOMY BRUSHED BRASS|14|432 +Brand#54|ECONOMY BRUSHED TIN|3|432 +Brand#54|ECONOMY BRUSHED TIN|14|432 +Brand#54|ECONOMY BURNISHED NICKEL|9|432 +Brand#54|ECONOMY BURNISHED TIN|14|432 +Brand#54|ECONOMY POLISHED BRASS|19|432 +Brand#54|ECONOMY POLISHED COPPER|9|432 +Brand#54|LARGE ANODIZED COPPER|49|432 +Brand#54|LARGE ANODIZED TIN|3|432 +Brand#54|LARGE BRUSHED NICKEL|23|432 +Brand#54|LARGE BURNISHED COPPER|14|432 +Brand#54|LARGE BURNISHED COPPER|19|432 +Brand#54|LARGE PLATED COPPER|14|432 +Brand#54|LARGE POLISHED BRASS|49|432 +Brand#54|MEDIUM BRUSHED NICKEL|3|432 +Brand#54|MEDIUM BURNISHED COPPER|9|432 +Brand#54|MEDIUM PLATED STEEL|45|432 +Brand#54|MEDIUM PLATED TIN|36|432 +Brand#54|PROMO ANODIZED STEEL|36|432 +Brand#54|PROMO ANODIZED TIN|49|432 +Brand#54|PROMO BRUSHED TIN|14|432 +Brand#54|PROMO BURNISHED TIN|45|432 +Brand#54|PROMO PLATED STEEL|3|432 +Brand#54|PROMO PLATED STEEL|14|432 +Brand#54|PROMO PLATED TIN|14|432 +Brand#54|SMALL ANODIZED BRASS|45|432 +Brand#54|SMALL ANODIZED TIN|3|432 +Brand#54|SMALL ANODIZED TIN|9|432 +Brand#54|SMALL ANODIZED TIN|45|432 +Brand#54|SMALL POLISHED BRASS|23|432 +Brand#54|SMALL POLISHED NICKEL|14|432 +Brand#54|SMALL POLISHED STEEL|3|432 +Brand#54|STANDARD ANODIZED NICKEL|23|432 +Brand#55|ECONOMY BURNISHED COPPER|3|432 +Brand#55|ECONOMY BURNISHED NICKEL|14|432 +Brand#55|ECONOMY POLISHED COPPER|23|432 +Brand#55|ECONOMY POLISHED NICKEL|9|432 +Brand#55|ECONOMY POLISHED TIN|36|432 +Brand#55|LARGE ANODIZED BRASS|9|432 +Brand#55|LARGE ANODIZED STEEL|45|432 +Brand#55|LARGE BRUSHED STEEL|49|432 +Brand#55|LARGE POLISHED COPPER|9|432 +Brand#55|MEDIUM ANODIZED STEEL|3|432 +Brand#55|MEDIUM ANODIZED STEEL|14|432 +Brand#55|MEDIUM PLATED STEEL|49|432 +Brand#55|PROMO ANODIZED TIN|9|432 +Brand#55|PROMO BURNISHED TIN|9|432 +Brand#55|PROMO POLISHED NICKEL|45|432 +Brand#55|SMALL ANODIZED BRASS|9|432 +Brand#55|SMALL BRUSHED NICKEL|45|432 +Brand#55|SMALL BURNISHED NICKEL|36|432 +Brand#55|STANDARD PLATED STEEL|49|432 +Brand#55|STANDARD PLATED TIN|19|432 +Brand#55|STANDARD POLISHED BRASS|9|432 +Brand#55|STANDARD POLISHED BRASS|49|432 +Brand#11|ECONOMY BRUSHED BRASS|36|431 +Brand#11|ECONOMY BRUSHED STEEL|23|431 +Brand#11|ECONOMY BURNISHED BRASS|36|431 +Brand#11|ECONOMY PLATED TIN|3|431 +Brand#11|LARGE ANODIZED BRASS|36|431 +Brand#11|PROMO BRUSHED COPPER|3|431 +Brand#11|PROMO BURNISHED BRASS|3|431 +Brand#11|PROMO POLISHED STEEL|19|431 +Brand#11|SMALL BRUSHED NICKEL|3|431 +Brand#11|STANDARD PLATED COPPER|23|431 +Brand#12|LARGE ANODIZED BRASS|23|431 +Brand#12|LARGE ANODIZED TIN|14|431 +Brand#12|LARGE POLISHED COPPER|14|431 +Brand#12|LARGE POLISHED TIN|36|431 +Brand#12|MEDIUM ANODIZED COPPER|23|431 +Brand#12|MEDIUM ANODIZED TIN|45|431 +Brand#12|MEDIUM BRUSHED STEEL|49|431 +Brand#12|SMALL ANODIZED TIN|3|431 +Brand#12|SMALL BURNISHED COPPER|49|431 +Brand#12|SMALL BURNISHED NICKEL|36|431 +Brand#12|SMALL PLATED STEEL|36|431 +Brand#12|STANDARD BRUSHED BRASS|9|431 +Brand#13|ECONOMY BRUSHED NICKEL|23|431 +Brand#13|ECONOMY BRUSHED STEEL|9|431 +Brand#13|ECONOMY BURNISHED BRASS|14|431 +Brand#13|LARGE BURNISHED TIN|19|431 +Brand#13|MEDIUM ANODIZED TIN|23|431 +Brand#13|PROMO ANODIZED STEEL|45|431 +Brand#13|SMALL ANODIZED STEEL|45|431 +Brand#13|STANDARD BRUSHED BRASS|14|431 +Brand#14|ECONOMY POLISHED STEEL|9|431 +Brand#14|LARGE ANODIZED COPPER|49|431 +Brand#14|LARGE BURNISHED STEEL|19|431 +Brand#14|MEDIUM BRUSHED NICKEL|23|431 +Brand#14|PROMO ANODIZED STEEL|9|431 +Brand#14|PROMO BURNISHED COPPER|19|431 +Brand#14|PROMO BURNISHED TIN|9|431 +Brand#14|PROMO PLATED BRASS|14|431 +Brand#14|SMALL PLATED TIN|9|431 +Brand#14|STANDARD ANODIZED NICKEL|23|431 +Brand#15|ECONOMY BURNISHED BRASS|3|431 +Brand#15|ECONOMY PLATED BRASS|14|431 +Brand#15|ECONOMY PLATED STEEL|9|431 +Brand#15|ECONOMY POLISHED BRASS|45|431 +Brand#15|MEDIUM ANODIZED STEEL|3|431 +Brand#15|MEDIUM BURNISHED BRASS|9|431 +Brand#15|PROMO POLISHED TIN|9|431 +Brand#15|SMALL BURNISHED NICKEL|3|431 +Brand#15|STANDARD BRUSHED NICKEL|14|431 +Brand#21|ECONOMY POLISHED TIN|9|431 +Brand#21|LARGE POLISHED BRASS|23|431 +Brand#21|MEDIUM BRUSHED COPPER|23|431 +Brand#21|SMALL PLATED COPPER|9|431 +Brand#21|SMALL PLATED COPPER|23|431 +Brand#21|STANDARD BRUSHED STEEL|19|431 +Brand#21|STANDARD POLISHED STEEL|45|431 +Brand#22|ECONOMY BRUSHED BRASS|36|431 +Brand#22|ECONOMY BURNISHED BRASS|36|431 +Brand#22|ECONOMY PLATED COPPER|14|431 +Brand#22|ECONOMY POLISHED TIN|9|431 +Brand#22|LARGE ANODIZED STEEL|9|431 +Brand#22|LARGE BURNISHED TIN|19|431 +Brand#22|LARGE PLATED COPPER|36|431 +Brand#22|PROMO POLISHED NICKEL|45|431 +Brand#22|SMALL POLISHED NICKEL|49|431 +Brand#22|STANDARD POLISHED STEEL|45|431 +Brand#23|ECONOMY BURNISHED STEEL|19|431 +Brand#23|ECONOMY BURNISHED TIN|14|431 +Brand#23|ECONOMY PLATED COPPER|3|431 +Brand#23|ECONOMY PLATED NICKEL|36|431 +Brand#23|ECONOMY PLATED TIN|14|431 +Brand#23|LARGE POLISHED NICKEL|19|431 +Brand#23|MEDIUM PLATED STEEL|49|431 +Brand#23|MEDIUM PLATED TIN|19|431 +Brand#23|PROMO BURNISHED COPPER|23|431 +Brand#23|SMALL BRUSHED BRASS|49|431 +Brand#23|SMALL BRUSHED COPPER|45|431 +Brand#23|SMALL PLATED NICKEL|3|431 +Brand#23|SMALL POLISHED NICKEL|36|431 +Brand#23|STANDARD ANODIZED TIN|14|431 +Brand#23|STANDARD PLATED NICKEL|19|431 +Brand#23|STANDARD POLISHED TIN|23|431 +Brand#24|LARGE BRUSHED TIN|14|431 +Brand#24|LARGE BURNISHED TIN|9|431 +Brand#24|MEDIUM ANODIZED TIN|45|431 +Brand#24|SMALL PLATED BRASS|14|431 +Brand#24|SMALL PLATED STEEL|36|431 +Brand#24|SMALL POLISHED BRASS|23|431 +Brand#24|STANDARD BURNISHED STEEL|14|431 +Brand#25|ECONOMY ANODIZED BRASS|3|431 +Brand#25|ECONOMY BRUSHED BRASS|36|431 +Brand#25|ECONOMY BURNISHED COPPER|14|431 +Brand#25|LARGE POLISHED NICKEL|3|431 +Brand#25|PROMO PLATED BRASS|49|431 +Brand#25|PROMO PLATED TIN|23|431 +Brand#25|STANDARD PLATED NICKEL|49|431 +Brand#31|LARGE BRUSHED TIN|45|431 +Brand#31|LARGE BURNISHED NICKEL|14|431 +Brand#31|LARGE BURNISHED NICKEL|19|431 +Brand#31|LARGE POLISHED TIN|45|431 +Brand#31|PROMO ANODIZED BRASS|23|431 +Brand#31|STANDARD BRUSHED STEEL|49|431 +Brand#32|ECONOMY BRUSHED NICKEL|19|431 +Brand#32|ECONOMY PLATED COPPER|23|431 +Brand#32|ECONOMY POLISHED NICKEL|23|431 +Brand#32|ECONOMY POLISHED STEEL|23|431 +Brand#32|LARGE BURNISHED TIN|23|431 +Brand#32|MEDIUM PLATED BRASS|9|431 +Brand#32|SMALL BRUSHED COPPER|3|431 +Brand#32|STANDARD BURNISHED TIN|36|431 +Brand#33|ECONOMY PLATED STEEL|23|431 +Brand#33|ECONOMY POLISHED BRASS|23|431 +Brand#33|LARGE BRUSHED COPPER|36|431 +Brand#33|MEDIUM ANODIZED COPPER|9|431 +Brand#33|PROMO BURNISHED BRASS|9|431 +Brand#33|PROMO BURNISHED STEEL|45|431 +Brand#33|PROMO POLISHED STEEL|23|431 +Brand#33|SMALL ANODIZED COPPER|45|431 +Brand#33|SMALL POLISHED BRASS|14|431 +Brand#33|STANDARD BURNISHED TIN|49|431 +Brand#34|LARGE ANODIZED NICKEL|36|431 +Brand#34|LARGE PLATED TIN|45|431 +Brand#34|MEDIUM ANODIZED COPPER|49|431 +Brand#34|MEDIUM BURNISHED NICKEL|19|431 +Brand#34|SMALL BURNISHED TIN|45|431 +Brand#34|SMALL PLATED COPPER|14|431 +Brand#34|STANDARD BURNISHED BRASS|23|431 +Brand#34|STANDARD BURNISHED STEEL|19|431 +Brand#35|ECONOMY BRUSHED STEEL|23|431 +Brand#35|ECONOMY BURNISHED TIN|3|431 +Brand#35|LARGE ANODIZED BRASS|3|431 +Brand#35|LARGE ANODIZED NICKEL|49|431 +Brand#35|LARGE ANODIZED STEEL|19|431 +Brand#35|LARGE BURNISHED COPPER|36|431 +Brand#35|LARGE BURNISHED STEEL|49|431 +Brand#35|PROMO PLATED COPPER|49|431 +Brand#35|PROMO PLATED NICKEL|49|431 +Brand#35|PROMO POLISHED NICKEL|45|431 +Brand#35|SMALL BRUSHED TIN|49|431 +Brand#35|STANDARD ANODIZED STEEL|19|431 +Brand#35|STANDARD BURNISHED TIN|36|431 +Brand#35|STANDARD POLISHED COPPER|14|431 +Brand#41|ECONOMY ANODIZED TIN|49|431 +Brand#41|LARGE POLISHED BRASS|36|431 +Brand#41|PROMO POLISHED COPPER|36|431 +Brand#41|SMALL POLISHED BRASS|14|431 +Brand#41|SMALL POLISHED NICKEL|9|431 +Brand#41|STANDARD BURNISHED TIN|19|431 +Brand#42|ECONOMY ANODIZED STEEL|3|431 +Brand#42|ECONOMY ANODIZED TIN|45|431 +Brand#42|ECONOMY PLATED BRASS|19|431 +Brand#42|ECONOMY POLISHED BRASS|45|431 +Brand#42|LARGE BRUSHED COPPER|36|431 +Brand#42|LARGE BRUSHED STEEL|36|431 +Brand#42|LARGE BURNISHED COPPER|3|431 +Brand#42|LARGE POLISHED STEEL|49|431 +Brand#42|MEDIUM BRUSHED BRASS|9|431 +Brand#42|MEDIUM BURNISHED STEEL|19|431 +Brand#42|MEDIUM PLATED COPPER|36|431 +Brand#42|MEDIUM PLATED NICKEL|3|431 +Brand#42|MEDIUM PLATED STEEL|45|431 +Brand#42|PROMO PLATED STEEL|23|431 +Brand#42|SMALL BURNISHED STEEL|9|431 +Brand#42|SMALL PLATED COPPER|49|431 +Brand#42|SMALL PLATED STEEL|23|431 +Brand#42|SMALL POLISHED NICKEL|14|431 +Brand#42|SMALL POLISHED TIN|36|431 +Brand#42|STANDARD ANODIZED NICKEL|19|431 +Brand#42|STANDARD POLISHED COPPER|3|431 +Brand#42|STANDARD POLISHED COPPER|14|431 +Brand#43|LARGE ANODIZED STEEL|45|431 +Brand#43|LARGE BURNISHED COPPER|3|431 +Brand#43|LARGE BURNISHED COPPER|36|431 +Brand#43|PROMO ANODIZED TIN|14|431 +Brand#43|PROMO BURNISHED STEEL|49|431 +Brand#43|STANDARD ANODIZED NICKEL|23|431 +Brand#43|STANDARD BRUSHED STEEL|45|431 +Brand#44|ECONOMY ANODIZED COPPER|9|431 +Brand#44|ECONOMY ANODIZED COPPER|36|431 +Brand#44|ECONOMY BRUSHED TIN|49|431 +Brand#44|ECONOMY PLATED BRASS|19|431 +Brand#44|ECONOMY POLISHED BRASS|45|431 +Brand#44|LARGE ANODIZED NICKEL|14|431 +Brand#44|LARGE BRUSHED NICKEL|49|431 +Brand#44|LARGE POLISHED BRASS|3|431 +Brand#44|MEDIUM PLATED STEEL|14|431 +Brand#44|PROMO ANODIZED COPPER|36|431 +Brand#44|PROMO ANODIZED STEEL|45|431 +Brand#44|PROMO BRUSHED TIN|19|431 +Brand#44|SMALL ANODIZED COPPER|45|431 +Brand#44|SMALL BURNISHED TIN|36|431 +Brand#51|ECONOMY ANODIZED NICKEL|49|431 +Brand#51|ECONOMY PLATED TIN|19|431 +Brand#51|LARGE ANODIZED TIN|45|431 +Brand#51|LARGE BRUSHED COPPER|23|431 +Brand#51|LARGE BURNISHED STEEL|9|431 +Brand#51|MEDIUM BRUSHED BRASS|36|431 +Brand#51|PROMO BRUSHED NICKEL|45|431 +Brand#51|PROMO PLATED COPPER|36|431 +Brand#51|SMALL PLATED STEEL|3|431 +Brand#51|STANDARD BRUSHED TIN|19|431 +Brand#51|STANDARD BURNISHED STEEL|45|431 +Brand#51|STANDARD BURNISHED TIN|19|431 +Brand#52|ECONOMY BURNISHED NICKEL|49|431 +Brand#52|LARGE ANODIZED COPPER|23|431 +Brand#52|LARGE PLATED BRASS|9|431 +Brand#52|MEDIUM ANODIZED TIN|19|431 +Brand#52|MEDIUM BRUSHED BRASS|49|431 +Brand#52|MEDIUM PLATED STEEL|9|431 +Brand#52|PROMO POLISHED STEEL|14|431 +Brand#52|SMALL BRUSHED TIN|36|431 +Brand#52|SMALL PLATED BRASS|3|431 +Brand#52|STANDARD BRUSHED TIN|23|431 +Brand#52|STANDARD PLATED NICKEL|36|431 +Brand#53|ECONOMY ANODIZED NICKEL|45|431 +Brand#53|ECONOMY ANODIZED STEEL|49|431 +Brand#53|ECONOMY BRUSHED COPPER|9|431 +Brand#53|LARGE POLISHED TIN|45|431 +Brand#53|MEDIUM BURNISHED STEEL|45|431 +Brand#53|PROMO PLATED BRASS|36|431 +Brand#53|SMALL BRUSHED BRASS|9|431 +Brand#53|SMALL BRUSHED STEEL|14|431 +Brand#53|SMALL PLATED NICKEL|23|431 +Brand#53|SMALL POLISHED TIN|19|431 +Brand#54|ECONOMY BRUSHED COPPER|9|431 +Brand#54|LARGE BURNISHED STEEL|19|431 +Brand#54|PROMO BURNISHED TIN|49|431 +Brand#54|PROMO POLISHED NICKEL|45|431 +Brand#54|STANDARD POLISHED TIN|14|431 +Brand#55|ECONOMY PLATED TIN|36|431 +Brand#55|ECONOMY POLISHED STEEL|49|431 +Brand#55|LARGE BURNISHED BRASS|3|431 +Brand#55|LARGE BURNISHED BRASS|23|431 +Brand#55|PROMO PLATED STEEL|36|431 +Brand#55|SMALL ANODIZED COPPER|36|431 +Brand#55|SMALL BURNISHED COPPER|49|431 +Brand#55|SMALL PLATED NICKEL|36|431 +Brand#55|STANDARD PLATED NICKEL|23|431 +Brand#11|ECONOMY PLATED COPPER|9|430 +Brand#11|MEDIUM BRUSHED BRASS|19|430 +Brand#12|PROMO ANODIZED TIN|49|430 +Brand#13|SMALL PLATED BRASS|9|430 +Brand#14|LARGE BRUSHED TIN|14|430 +Brand#14|SMALL BRUSHED TIN|23|430 +Brand#15|MEDIUM ANODIZED TIN|36|430 +Brand#15|PROMO BRUSHED TIN|45|430 +Brand#21|LARGE BRUSHED STEEL|19|430 +Brand#21|MEDIUM ANODIZED BRASS|23|430 +Brand#21|MEDIUM ANODIZED COPPER|49|430 +Brand#21|STANDARD PLATED TIN|3|430 +Brand#22|ECONOMY BURNISHED TIN|45|430 +Brand#22|MEDIUM ANODIZED BRASS|49|430 +Brand#23|LARGE BURNISHED NICKEL|45|430 +Brand#23|STANDARD BURNISHED BRASS|23|430 +Brand#24|ECONOMY BRUSHED COPPER|19|430 +Brand#24|PROMO BURNISHED TIN|9|430 +Brand#24|STANDARD BURNISHED NICKEL|45|430 +Brand#25|MEDIUM PLATED STEEL|36|430 +Brand#32|SMALL PLATED STEEL|23|430 +Brand#34|LARGE BRUSHED TIN|9|430 +Brand#34|SMALL BRUSHED STEEL|3|430 +Brand#35|STANDARD POLISHED STEEL|14|430 +Brand#42|PROMO BURNISHED BRASS|3|430 +Brand#51|MEDIUM PLATED TIN|3|430 +Brand#51|PROMO BURNISHED COPPER|19|430 +Brand#51|SMALL POLISHED TIN|3|430 +Brand#51|STANDARD BRUSHED TIN|23|430 +Brand#51|STANDARD POLISHED NICKEL|45|430 +Brand#53|LARGE BRUSHED STEEL|45|430 +Brand#53|LARGE BURNISHED BRASS|36|430 +Brand#54|MEDIUM BURNISHED NICKEL|45|430 +Brand#54|SMALL PLATED BRASS|19|430 +Brand#54|STANDARD BURNISHED NICKEL|14|430 +Brand#55|LARGE BURNISHED TIN|19|430 +Brand#41|STANDARD BURNISHED COPPER|45|429 +Brand#11|ECONOMY ANODIZED COPPER|23|428 +Brand#11|ECONOMY BRUSHED COPPER|9|428 +Brand#11|ECONOMY BURNISHED COPPER|49|428 +Brand#11|ECONOMY PLATED BRASS|36|428 +Brand#11|ECONOMY PLATED COPPER|3|428 +Brand#11|ECONOMY POLISHED COPPER|19|428 +Brand#11|LARGE BRUSHED COPPER|3|428 +Brand#11|LARGE BRUSHED COPPER|45|428 +Brand#11|LARGE BRUSHED NICKEL|45|428 +Brand#11|LARGE BURNISHED TIN|45|428 +Brand#11|LARGE POLISHED STEEL|23|428 +Brand#11|MEDIUM ANODIZED BRASS|9|428 +Brand#11|MEDIUM BURNISHED BRASS|14|428 +Brand#11|MEDIUM BURNISHED NICKEL|3|428 +Brand#11|MEDIUM BURNISHED TIN|49|428 +Brand#11|PROMO ANODIZED STEEL|23|428 +Brand#11|PROMO BRUSHED COPPER|49|428 +Brand#11|PROMO BURNISHED STEEL|19|428 +Brand#11|PROMO BURNISHED STEEL|45|428 +Brand#11|PROMO BURNISHED TIN|3|428 +Brand#11|PROMO PLATED COPPER|9|428 +Brand#11|SMALL ANODIZED NICKEL|14|428 +Brand#11|SMALL BRUSHED BRASS|19|428 +Brand#11|SMALL BURNISHED NICKEL|19|428 +Brand#11|SMALL BURNISHED STEEL|49|428 +Brand#11|SMALL BURNISHED TIN|45|428 +Brand#11|SMALL PLATED COPPER|14|428 +Brand#11|SMALL PLATED STEEL|19|428 +Brand#11|STANDARD ANODIZED STEEL|3|428 +Brand#11|STANDARD BRUSHED STEEL|14|428 +Brand#11|STANDARD BURNISHED COPPER|14|428 +Brand#11|STANDARD BURNISHED STEEL|45|428 +Brand#12|ECONOMY POLISHED TIN|19|428 +Brand#12|LARGE BURNISHED COPPER|14|428 +Brand#12|LARGE BURNISHED COPPER|36|428 +Brand#12|LARGE BURNISHED COPPER|45|428 +Brand#12|LARGE POLISHED NICKEL|49|428 +Brand#12|MEDIUM ANODIZED COPPER|36|428 +Brand#12|MEDIUM ANODIZED STEEL|9|428 +Brand#12|MEDIUM BRUSHED NICKEL|3|428 +Brand#12|MEDIUM BRUSHED TIN|14|428 +Brand#12|MEDIUM BURNISHED STEEL|19|428 +Brand#12|MEDIUM PLATED BRASS|45|428 +Brand#12|MEDIUM PLATED NICKEL|49|428 +Brand#12|PROMO BURNISHED COPPER|45|428 +Brand#12|PROMO BURNISHED TIN|14|428 +Brand#12|PROMO BURNISHED TIN|49|428 +Brand#12|PROMO PLATED COPPER|36|428 +Brand#12|PROMO PLATED NICKEL|36|428 +Brand#12|PROMO POLISHED COPPER|14|428 +Brand#12|PROMO POLISHED NICKEL|19|428 +Brand#12|SMALL ANODIZED COPPER|3|428 +Brand#12|SMALL ANODIZED COPPER|23|428 +Brand#12|SMALL BRUSHED STEEL|45|428 +Brand#12|SMALL BURNISHED BRASS|14|428 +Brand#12|SMALL BURNISHED COPPER|36|428 +Brand#12|SMALL POLISHED STEEL|3|428 +Brand#12|STANDARD BRUSHED BRASS|3|428 +Brand#12|STANDARD BRUSHED COPPER|9|428 +Brand#12|STANDARD BURNISHED COPPER|36|428 +Brand#12|STANDARD BURNISHED TIN|45|428 +Brand#12|STANDARD PLATED COPPER|9|428 +Brand#13|ECONOMY ANODIZED BRASS|3|428 +Brand#13|ECONOMY ANODIZED NICKEL|19|428 +Brand#13|ECONOMY BRUSHED STEEL|23|428 +Brand#13|ECONOMY BRUSHED STEEL|45|428 +Brand#13|ECONOMY BURNISHED STEEL|49|428 +Brand#13|ECONOMY PLATED BRASS|9|428 +Brand#13|ECONOMY POLISHED BRASS|9|428 +Brand#13|ECONOMY POLISHED COPPER|14|428 +Brand#13|ECONOMY POLISHED NICKEL|36|428 +Brand#13|LARGE BRUSHED NICKEL|23|428 +Brand#13|LARGE BRUSHED TIN|49|428 +Brand#13|LARGE PLATED BRASS|19|428 +Brand#13|LARGE POLISHED NICKEL|45|428 +Brand#13|LARGE POLISHED NICKEL|49|428 +Brand#13|LARGE POLISHED STEEL|49|428 +Brand#13|MEDIUM BRUSHED COPPER|19|428 +Brand#13|MEDIUM BURNISHED COPPER|14|428 +Brand#13|MEDIUM BURNISHED COPPER|23|428 +Brand#13|MEDIUM BURNISHED TIN|49|428 +Brand#13|PROMO ANODIZED COPPER|9|428 +Brand#13|PROMO ANODIZED TIN|19|428 +Brand#13|PROMO PLATED COPPER|49|428 +Brand#13|PROMO PLATED STEEL|49|428 +Brand#13|PROMO POLISHED BRASS|19|428 +Brand#13|PROMO POLISHED NICKEL|9|428 +Brand#13|SMALL ANODIZED NICKEL|9|428 +Brand#13|SMALL ANODIZED STEEL|19|428 +Brand#13|SMALL BRUSHED STEEL|49|428 +Brand#13|SMALL BURNISHED STEEL|49|428 +Brand#13|SMALL BURNISHED TIN|23|428 +Brand#13|SMALL PLATED TIN|45|428 +Brand#13|SMALL POLISHED BRASS|49|428 +Brand#13|STANDARD BRUSHED STEEL|49|428 +Brand#13|STANDARD BURNISHED COPPER|45|428 +Brand#13|STANDARD BURNISHED COPPER|49|428 +Brand#13|STANDARD POLISHED STEEL|9|428 +Brand#14|ECONOMY ANODIZED STEEL|49|428 +Brand#14|ECONOMY BRUSHED COPPER|36|428 +Brand#14|ECONOMY BURNISHED NICKEL|14|428 +Brand#14|ECONOMY BURNISHED NICKEL|45|428 +Brand#14|ECONOMY PLATED TIN|9|428 +Brand#14|LARGE ANODIZED BRASS|9|428 +Brand#14|LARGE BRUSHED BRASS|45|428 +Brand#14|LARGE BRUSHED COPPER|14|428 +Brand#14|LARGE BRUSHED COPPER|23|428 +Brand#14|LARGE BURNISHED TIN|14|428 +Brand#14|LARGE PLATED COPPER|9|428 +Brand#14|LARGE PLATED COPPER|36|428 +Brand#14|LARGE PLATED NICKEL|19|428 +Brand#14|LARGE PLATED STEEL|45|428 +Brand#14|LARGE POLISHED BRASS|19|428 +Brand#14|MEDIUM ANODIZED STEEL|23|428 +Brand#14|MEDIUM ANODIZED STEEL|49|428 +Brand#14|MEDIUM PLATED COPPER|14|428 +Brand#14|MEDIUM PLATED NICKEL|9|428 +Brand#14|MEDIUM PLATED STEEL|49|428 +Brand#14|PROMO BRUSHED BRASS|49|428 +Brand#14|PROMO BRUSHED COPPER|19|428 +Brand#14|PROMO BRUSHED NICKEL|9|428 +Brand#14|PROMO BURNISHED STEEL|36|428 +Brand#14|PROMO PLATED STEEL|3|428 +Brand#14|PROMO POLISHED STEEL|14|428 +Brand#14|SMALL BRUSHED BRASS|49|428 +Brand#14|SMALL BRUSHED STEEL|36|428 +Brand#14|SMALL BRUSHED TIN|14|428 +Brand#14|SMALL BURNISHED TIN|14|428 +Brand#14|SMALL BURNISHED TIN|36|428 +Brand#14|SMALL PLATED NICKEL|3|428 +Brand#14|SMALL POLISHED STEEL|23|428 +Brand#14|SMALL POLISHED TIN|9|428 +Brand#14|STANDARD ANODIZED TIN|19|428 +Brand#14|STANDARD BRUSHED BRASS|3|428 +Brand#14|STANDARD BURNISHED TIN|19|428 +Brand#14|STANDARD POLISHED COPPER|45|428 +Brand#15|ECONOMY ANODIZED COPPER|49|428 +Brand#15|ECONOMY ANODIZED TIN|9|428 +Brand#15|ECONOMY BRUSHED BRASS|45|428 +Brand#15|ECONOMY BRUSHED STEEL|49|428 +Brand#15|ECONOMY BURNISHED BRASS|49|428 +Brand#15|ECONOMY BURNISHED COPPER|36|428 +Brand#15|ECONOMY PLATED COPPER|3|428 +Brand#15|LARGE BURNISHED COPPER|23|428 +Brand#15|LARGE BURNISHED NICKEL|9|428 +Brand#15|LARGE PLATED BRASS|19|428 +Brand#15|LARGE PLATED BRASS|45|428 +Brand#15|LARGE POLISHED STEEL|36|428 +Brand#15|MEDIUM BRUSHED NICKEL|36|428 +Brand#15|MEDIUM BURNISHED COPPER|49|428 +Brand#15|PROMO ANODIZED STEEL|49|428 +Brand#15|PROMO BRUSHED COPPER|23|428 +Brand#15|PROMO BRUSHED NICKEL|9|428 +Brand#15|PROMO BURNISHED BRASS|49|428 +Brand#15|PROMO BURNISHED STEEL|23|428 +Brand#15|PROMO PLATED BRASS|45|428 +Brand#15|PROMO POLISHED TIN|19|428 +Brand#15|SMALL BRUSHED NICKEL|3|428 +Brand#15|SMALL BURNISHED TIN|3|428 +Brand#15|SMALL BURNISHED TIN|19|428 +Brand#15|SMALL PLATED BRASS|19|428 +Brand#15|SMALL PLATED NICKEL|14|428 +Brand#15|SMALL POLISHED COPPER|36|428 +Brand#15|STANDARD ANODIZED COPPER|23|428 +Brand#15|STANDARD BURNISHED NICKEL|49|428 +Brand#15|STANDARD BURNISHED TIN|14|428 +Brand#15|STANDARD PLATED BRASS|3|428 +Brand#15|STANDARD PLATED NICKEL|3|428 +Brand#21|ECONOMY ANODIZED BRASS|3|428 +Brand#21|ECONOMY ANODIZED COPPER|14|428 +Brand#21|ECONOMY ANODIZED STEEL|14|428 +Brand#21|ECONOMY BRUSHED STEEL|3|428 +Brand#21|ECONOMY BURNISHED BRASS|45|428 +Brand#21|ECONOMY BURNISHED STEEL|36|428 +Brand#21|ECONOMY BURNISHED TIN|9|428 +Brand#21|ECONOMY BURNISHED TIN|14|428 +Brand#21|ECONOMY PLATED NICKEL|23|428 +Brand#21|ECONOMY PLATED TIN|3|428 +Brand#21|ECONOMY POLISHED NICKEL|9|428 +Brand#21|LARGE ANODIZED COPPER|3|428 +Brand#21|LARGE BRUSHED BRASS|19|428 +Brand#21|LARGE BRUSHED TIN|9|428 +Brand#21|LARGE PLATED STEEL|49|428 +Brand#21|LARGE POLISHED NICKEL|9|428 +Brand#21|LARGE POLISHED TIN|9|428 +Brand#21|LARGE POLISHED TIN|14|428 +Brand#21|MEDIUM ANODIZED NICKEL|36|428 +Brand#21|MEDIUM BRUSHED BRASS|3|428 +Brand#21|MEDIUM BRUSHED NICKEL|3|428 +Brand#21|MEDIUM BURNISHED NICKEL|36|428 +Brand#21|MEDIUM BURNISHED TIN|19|428 +Brand#21|MEDIUM PLATED NICKEL|45|428 +Brand#21|PROMO ANODIZED BRASS|14|428 +Brand#21|PROMO BRUSHED TIN|3|428 +Brand#21|PROMO BURNISHED BRASS|45|428 +Brand#21|SMALL ANODIZED NICKEL|45|428 +Brand#21|SMALL BRUSHED TIN|19|428 +Brand#21|SMALL BURNISHED TIN|9|428 +Brand#21|SMALL PLATED BRASS|45|428 +Brand#21|SMALL PLATED NICKEL|23|428 +Brand#21|SMALL POLISHED COPPER|23|428 +Brand#21|SMALL POLISHED STEEL|36|428 +Brand#21|SMALL POLISHED TIN|3|428 +Brand#21|SMALL POLISHED TIN|36|428 +Brand#21|STANDARD ANODIZED BRASS|23|428 +Brand#21|STANDARD ANODIZED NICKEL|49|428 +Brand#21|STANDARD BRUSHED BRASS|36|428 +Brand#21|STANDARD BRUSHED NICKEL|49|428 +Brand#21|STANDARD PLATED BRASS|14|428 +Brand#21|STANDARD PLATED TIN|23|428 +Brand#21|STANDARD POLISHED STEEL|14|428 +Brand#22|ECONOMY ANODIZED TIN|14|428 +Brand#22|ECONOMY ANODIZED TIN|36|428 +Brand#22|ECONOMY BURNISHED STEEL|23|428 +Brand#22|ECONOMY BURNISHED TIN|14|428 +Brand#22|ECONOMY BURNISHED TIN|19|428 +Brand#22|ECONOMY PLATED BRASS|3|428 +Brand#22|ECONOMY PLATED NICKEL|9|428 +Brand#22|ECONOMY PLATED STEEL|49|428 +Brand#22|ECONOMY POLISHED COPPER|3|428 +Brand#22|ECONOMY POLISHED COPPER|36|428 +Brand#22|ECONOMY POLISHED STEEL|3|428 +Brand#22|LARGE ANODIZED BRASS|9|428 +Brand#22|LARGE BURNISHED COPPER|36|428 +Brand#22|LARGE BURNISHED STEEL|45|428 +Brand#22|LARGE POLISHED TIN|23|428 +Brand#22|MEDIUM ANODIZED COPPER|19|428 +Brand#22|MEDIUM BRUSHED COPPER|19|428 +Brand#22|MEDIUM BURNISHED COPPER|36|428 +Brand#22|MEDIUM PLATED BRASS|3|428 +Brand#22|MEDIUM PLATED NICKEL|49|428 +Brand#22|PROMO ANODIZED NICKEL|19|428 +Brand#22|PROMO ANODIZED NICKEL|45|428 +Brand#22|PROMO BRUSHED TIN|3|428 +Brand#22|PROMO BRUSHED TIN|14|428 +Brand#22|PROMO BURNISHED STEEL|49|428 +Brand#22|PROMO PLATED BRASS|19|428 +Brand#22|PROMO POLISHED STEEL|36|428 +Brand#22|SMALL ANODIZED STEEL|14|428 +Brand#22|SMALL ANODIZED TIN|36|428 +Brand#22|SMALL BRUSHED BRASS|14|428 +Brand#22|SMALL BRUSHED BRASS|19|428 +Brand#22|SMALL BRUSHED STEEL|19|428 +Brand#22|SMALL BRUSHED TIN|19|428 +Brand#22|SMALL BURNISHED NICKEL|14|428 +Brand#22|SMALL PLATED NICKEL|23|428 +Brand#22|SMALL PLATED TIN|23|428 +Brand#22|SMALL POLISHED COPPER|14|428 +Brand#22|STANDARD BURNISHED BRASS|19|428 +Brand#22|STANDARD BURNISHED NICKEL|45|428 +Brand#22|STANDARD PLATED STEEL|36|428 +Brand#22|STANDARD POLISHED NICKEL|49|428 +Brand#23|ECONOMY ANODIZED BRASS|45|428 +Brand#23|ECONOMY ANODIZED NICKEL|36|428 +Brand#23|ECONOMY BRUSHED BRASS|3|428 +Brand#23|ECONOMY BURNISHED BRASS|23|428 +Brand#23|ECONOMY PLATED BRASS|14|428 +Brand#23|ECONOMY POLISHED BRASS|45|428 +Brand#23|LARGE ANODIZED STEEL|9|428 +Brand#23|LARGE BRUSHED COPPER|9|428 +Brand#23|LARGE BURNISHED TIN|45|428 +Brand#23|LARGE POLISHED BRASS|36|428 +Brand#23|LARGE POLISHED COPPER|3|428 +Brand#23|LARGE POLISHED NICKEL|14|428 +Brand#23|MEDIUM ANODIZED BRASS|36|428 +Brand#23|MEDIUM BRUSHED BRASS|3|428 +Brand#23|MEDIUM BURNISHED COPPER|23|428 +Brand#23|MEDIUM BURNISHED NICKEL|19|428 +Brand#23|MEDIUM PLATED TIN|3|428 +Brand#23|PROMO BRUSHED NICKEL|9|428 +Brand#23|PROMO BRUSHED NICKEL|23|428 +Brand#23|PROMO BURNISHED COPPER|19|428 +Brand#23|PROMO BURNISHED STEEL|3|428 +Brand#23|PROMO BURNISHED STEEL|49|428 +Brand#23|PROMO BURNISHED TIN|23|428 +Brand#23|SMALL ANODIZED NICKEL|3|428 +Brand#23|SMALL BRUSHED NICKEL|14|428 +Brand#23|SMALL BRUSHED STEEL|3|428 +Brand#23|SMALL BRUSHED TIN|49|428 +Brand#23|SMALL BURNISHED TIN|23|428 +Brand#23|SMALL PLATED COPPER|3|428 +Brand#23|SMALL PLATED NICKEL|9|428 +Brand#23|SMALL PLATED NICKEL|19|428 +Brand#23|SMALL PLATED TIN|45|428 +Brand#23|SMALL POLISHED BRASS|19|428 +Brand#23|SMALL POLISHED STEEL|14|428 +Brand#23|STANDARD BRUSHED NICKEL|45|428 +Brand#23|STANDARD BURNISHED COPPER|9|428 +Brand#23|STANDARD PLATED BRASS|9|428 +Brand#24|ECONOMY ANODIZED NICKEL|45|428 +Brand#24|ECONOMY BRUSHED COPPER|45|428 +Brand#24|ECONOMY BRUSHED COPPER|49|428 +Brand#24|ECONOMY BURNISHED COPPER|23|428 +Brand#24|ECONOMY BURNISHED TIN|9|428 +Brand#24|ECONOMY POLISHED NICKEL|14|428 +Brand#24|ECONOMY POLISHED STEEL|23|428 +Brand#24|LARGE ANODIZED STEEL|45|428 +Brand#24|LARGE BURNISHED COPPER|3|428 +Brand#24|LARGE POLISHED TIN|49|428 +Brand#24|MEDIUM ANODIZED BRASS|3|428 +Brand#24|MEDIUM ANODIZED COPPER|3|428 +Brand#24|MEDIUM ANODIZED NICKEL|23|428 +Brand#24|MEDIUM BRUSHED BRASS|36|428 +Brand#24|MEDIUM BRUSHED STEEL|49|428 +Brand#24|MEDIUM BURNISHED COPPER|14|428 +Brand#24|MEDIUM BURNISHED NICKEL|14|428 +Brand#24|MEDIUM BURNISHED TIN|19|428 +Brand#24|MEDIUM PLATED COPPER|9|428 +Brand#24|PROMO ANODIZED COPPER|19|428 +Brand#24|PROMO BRUSHED BRASS|45|428 +Brand#24|PROMO POLISHED BRASS|9|428 +Brand#24|PROMO POLISHED STEEL|49|428 +Brand#24|PROMO POLISHED TIN|14|428 +Brand#24|SMALL ANODIZED TIN|9|428 +Brand#24|SMALL BRUSHED BRASS|49|428 +Brand#24|SMALL PLATED TIN|19|428 +Brand#24|SMALL POLISHED NICKEL|3|428 +Brand#24|SMALL POLISHED TIN|36|428 +Brand#24|STANDARD BRUSHED BRASS|45|428 +Brand#24|STANDARD BURNISHED BRASS|49|428 +Brand#24|STANDARD BURNISHED NICKEL|3|428 +Brand#24|STANDARD PLATED BRASS|49|428 +Brand#24|STANDARD PLATED TIN|23|428 +Brand#25|ECONOMY ANODIZED TIN|19|428 +Brand#25|ECONOMY BRUSHED BRASS|49|428 +Brand#25|ECONOMY BURNISHED COPPER|49|428 +Brand#25|ECONOMY BURNISHED NICKEL|49|428 +Brand#25|ECONOMY PLATED COPPER|36|428 +Brand#25|ECONOMY PLATED STEEL|19|428 +Brand#25|ECONOMY POLISHED NICKEL|23|428 +Brand#25|LARGE BRUSHED BRASS|23|428 +Brand#25|LARGE BRUSHED COPPER|19|428 +Brand#25|LARGE BURNISHED STEEL|36|428 +Brand#25|LARGE PLATED COPPER|14|428 +Brand#25|LARGE PLATED COPPER|36|428 +Brand#25|LARGE PLATED NICKEL|45|428 +Brand#25|LARGE PLATED TIN|23|428 +Brand#25|LARGE POLISHED BRASS|19|428 +Brand#25|MEDIUM ANODIZED NICKEL|36|428 +Brand#25|MEDIUM PLATED TIN|36|428 +Brand#25|PROMO ANODIZED NICKEL|49|428 +Brand#25|PROMO BRUSHED STEEL|14|428 +Brand#25|PROMO BURNISHED NICKEL|36|428 +Brand#25|PROMO BURNISHED STEEL|3|428 +Brand#25|PROMO BURNISHED TIN|3|428 +Brand#25|PROMO BURNISHED TIN|9|428 +Brand#25|PROMO PLATED TIN|36|428 +Brand#25|PROMO POLISHED COPPER|14|428 +Brand#25|PROMO POLISHED COPPER|49|428 +Brand#25|PROMO POLISHED NICKEL|9|428 +Brand#25|PROMO POLISHED TIN|19|428 +Brand#25|SMALL ANODIZED NICKEL|36|428 +Brand#25|SMALL ANODIZED NICKEL|49|428 +Brand#25|SMALL ANODIZED TIN|49|428 +Brand#25|SMALL BRUSHED STEEL|23|428 +Brand#25|SMALL BURNISHED BRASS|36|428 +Brand#25|SMALL BURNISHED COPPER|14|428 +Brand#25|SMALL BURNISHED NICKEL|45|428 +Brand#25|SMALL PLATED BRASS|3|428 +Brand#25|SMALL PLATED BRASS|19|428 +Brand#25|STANDARD ANODIZED BRASS|9|428 +Brand#25|STANDARD ANODIZED BRASS|36|428 +Brand#25|STANDARD ANODIZED NICKEL|36|428 +Brand#25|STANDARD PLATED NICKEL|3|428 +Brand#25|STANDARD POLISHED BRASS|23|428 +Brand#25|STANDARD POLISHED NICKEL|36|428 +Brand#25|STANDARD POLISHED TIN|36|428 +Brand#31|ECONOMY BURNISHED STEEL|19|428 +Brand#31|ECONOMY BURNISHED STEEL|36|428 +Brand#31|ECONOMY PLATED COPPER|19|428 +Brand#31|ECONOMY PLATED TIN|19|428 +Brand#31|LARGE ANODIZED TIN|45|428 +Brand#31|LARGE BURNISHED BRASS|49|428 +Brand#31|MEDIUM BURNISHED NICKEL|36|428 +Brand#31|MEDIUM BURNISHED STEEL|23|428 +Brand#31|PROMO ANODIZED COPPER|49|428 +Brand#31|PROMO BRUSHED BRASS|9|428 +Brand#31|PROMO BRUSHED STEEL|9|428 +Brand#31|PROMO BRUSHED TIN|49|428 +Brand#31|PROMO POLISHED COPPER|49|428 +Brand#31|PROMO POLISHED TIN|23|428 +Brand#31|SMALL ANODIZED BRASS|49|428 +Brand#31|SMALL BRUSHED STEEL|45|428 +Brand#31|SMALL BURNISHED COPPER|14|428 +Brand#31|SMALL BURNISHED STEEL|19|428 +Brand#31|SMALL PLATED COPPER|9|428 +Brand#31|SMALL POLISHED TIN|49|428 +Brand#31|STANDARD ANODIZED BRASS|3|428 +Brand#31|STANDARD ANODIZED STEEL|45|428 +Brand#31|STANDARD PLATED STEEL|19|428 +Brand#31|STANDARD PLATED TIN|49|428 +Brand#31|STANDARD POLISHED COPPER|45|428 +Brand#31|STANDARD POLISHED STEEL|36|428 +Brand#31|STANDARD POLISHED TIN|19|428 +Brand#32|ECONOMY ANODIZED TIN|3|428 +Brand#32|ECONOMY BRUSHED TIN|14|428 +Brand#32|ECONOMY PLATED BRASS|49|428 +Brand#32|ECONOMY PLATED COPPER|36|428 +Brand#32|ECONOMY POLISHED NICKEL|45|428 +Brand#32|LARGE ANODIZED COPPER|23|428 +Brand#32|LARGE ANODIZED NICKEL|36|428 +Brand#32|LARGE ANODIZED STEEL|45|428 +Brand#32|LARGE BURNISHED BRASS|14|428 +Brand#32|LARGE PLATED BRASS|3|428 +Brand#32|LARGE POLISHED BRASS|14|428 +Brand#32|MEDIUM BRUSHED NICKEL|36|428 +Brand#32|MEDIUM BURNISHED STEEL|49|428 +Brand#32|MEDIUM BURNISHED TIN|14|428 +Brand#32|MEDIUM PLATED BRASS|36|428 +Brand#32|MEDIUM PLATED STEEL|49|428 +Brand#32|PROMO ANODIZED BRASS|9|428 +Brand#32|PROMO ANODIZED STEEL|45|428 +Brand#32|PROMO BRUSHED BRASS|19|428 +Brand#32|PROMO BRUSHED TIN|49|428 +Brand#32|PROMO BURNISHED NICKEL|45|428 +Brand#32|PROMO BURNISHED STEEL|14|428 +Brand#32|PROMO PLATED TIN|36|428 +Brand#32|PROMO POLISHED COPPER|23|428 +Brand#32|SMALL BRUSHED STEEL|49|428 +Brand#32|SMALL PLATED NICKEL|36|428 +Brand#32|SMALL POLISHED COPPER|19|428 +Brand#32|SMALL POLISHED TIN|3|428 +Brand#32|STANDARD ANODIZED BRASS|45|428 +Brand#32|STANDARD ANODIZED NICKEL|14|428 +Brand#32|STANDARD ANODIZED TIN|9|428 +Brand#32|STANDARD ANODIZED TIN|14|428 +Brand#32|STANDARD BRUSHED NICKEL|45|428 +Brand#32|STANDARD BURNISHED NICKEL|9|428 +Brand#32|STANDARD BURNISHED STEEL|19|428 +Brand#32|STANDARD BURNISHED TIN|3|428 +Brand#32|STANDARD PLATED NICKEL|23|428 +Brand#32|STANDARD POLISHED COPPER|49|428 +Brand#33|ECONOMY ANODIZED NICKEL|49|428 +Brand#33|ECONOMY ANODIZED TIN|36|428 +Brand#33|ECONOMY BURNISHED NICKEL|45|428 +Brand#33|ECONOMY BURNISHED STEEL|3|428 +Brand#33|ECONOMY BURNISHED STEEL|14|428 +Brand#33|ECONOMY PLATED COPPER|36|428 +Brand#33|ECONOMY POLISHED BRASS|14|428 +Brand#33|LARGE ANODIZED NICKEL|9|428 +Brand#33|LARGE ANODIZED TIN|36|428 +Brand#33|LARGE BURNISHED BRASS|23|428 +Brand#33|LARGE BURNISHED STEEL|9|428 +Brand#33|LARGE BURNISHED STEEL|49|428 +Brand#33|LARGE BURNISHED TIN|45|428 +Brand#33|LARGE PLATED BRASS|45|428 +Brand#33|MEDIUM ANODIZED TIN|9|428 +Brand#33|MEDIUM BRUSHED NICKEL|23|428 +Brand#33|MEDIUM BRUSHED STEEL|36|428 +Brand#33|MEDIUM BURNISHED TIN|9|428 +Brand#33|MEDIUM PLATED BRASS|49|428 +Brand#33|MEDIUM PLATED NICKEL|3|428 +Brand#33|PROMO BRUSHED BRASS|36|428 +Brand#33|PROMO BRUSHED NICKEL|9|428 +Brand#33|PROMO PLATED BRASS|14|428 +Brand#33|PROMO PLATED BRASS|19|428 +Brand#33|PROMO POLISHED TIN|36|428 +Brand#33|SMALL ANODIZED TIN|9|428 +Brand#33|SMALL BRUSHED COPPER|14|428 +Brand#33|SMALL POLISHED NICKEL|36|428 +Brand#33|STANDARD ANODIZED BRASS|36|428 +Brand#33|STANDARD ANODIZED TIN|19|428 +Brand#33|STANDARD BRUSHED TIN|45|428 +Brand#33|STANDARD BURNISHED BRASS|23|428 +Brand#33|STANDARD BURNISHED BRASS|36|428 +Brand#33|STANDARD BURNISHED STEEL|49|428 +Brand#33|STANDARD PLATED BRASS|36|428 +Brand#33|STANDARD POLISHED NICKEL|36|428 +Brand#34|ECONOMY ANODIZED STEEL|23|428 +Brand#34|ECONOMY ANODIZED TIN|9|428 +Brand#34|ECONOMY BRUSHED NICKEL|45|428 +Brand#34|ECONOMY BURNISHED NICKEL|3|428 +Brand#34|ECONOMY POLISHED BRASS|14|428 +Brand#34|ECONOMY POLISHED COPPER|36|428 +Brand#34|ECONOMY POLISHED NICKEL|9|428 +Brand#34|LARGE BURNISHED BRASS|9|428 +Brand#34|LARGE BURNISHED STEEL|3|428 +Brand#34|LARGE BURNISHED STEEL|23|428 +Brand#34|LARGE POLISHED NICKEL|45|428 +Brand#34|LARGE POLISHED TIN|9|428 +Brand#34|MEDIUM BRUSHED NICKEL|19|428 +Brand#34|MEDIUM BRUSHED TIN|45|428 +Brand#34|MEDIUM PLATED NICKEL|36|428 +Brand#34|MEDIUM PLATED TIN|45|428 +Brand#34|PROMO ANODIZED BRASS|3|428 +Brand#34|PROMO ANODIZED BRASS|9|428 +Brand#34|PROMO BRUSHED NICKEL|36|428 +Brand#34|PROMO BURNISHED TIN|49|428 +Brand#34|SMALL ANODIZED STEEL|14|428 +Brand#34|SMALL BRUSHED TIN|19|428 +Brand#34|SMALL BURNISHED STEEL|45|428 +Brand#34|SMALL PLATED BRASS|14|428 +Brand#34|SMALL POLISHED STEEL|23|428 +Brand#34|SMALL POLISHED STEEL|45|428 +Brand#34|STANDARD ANODIZED STEEL|23|428 +Brand#34|STANDARD ANODIZED TIN|45|428 +Brand#34|STANDARD BRUSHED BRASS|19|428 +Brand#34|STANDARD BRUSHED BRASS|45|428 +Brand#34|STANDARD BRUSHED COPPER|3|428 +Brand#34|STANDARD BRUSHED COPPER|9|428 +Brand#34|STANDARD BRUSHED TIN|23|428 +Brand#34|STANDARD BRUSHED TIN|49|428 +Brand#34|STANDARD PLATED STEEL|14|428 +Brand#34|STANDARD POLISHED COPPER|9|428 +Brand#35|ECONOMY ANODIZED COPPER|49|428 +Brand#35|ECONOMY ANODIZED STEEL|14|428 +Brand#35|ECONOMY ANODIZED TIN|3|428 +Brand#35|ECONOMY BRUSHED NICKEL|23|428 +Brand#35|ECONOMY BURNISHED BRASS|49|428 +Brand#35|ECONOMY BURNISHED COPPER|14|428 +Brand#35|ECONOMY BURNISHED NICKEL|9|428 +Brand#35|ECONOMY PLATED TIN|49|428 +Brand#35|ECONOMY POLISHED COPPER|23|428 +Brand#35|LARGE BRUSHED STEEL|9|428 +Brand#35|LARGE BURNISHED NICKEL|9|428 +Brand#35|LARGE BURNISHED TIN|23|428 +Brand#35|LARGE PLATED TIN|14|428 +Brand#35|LARGE POLISHED COPPER|45|428 +Brand#35|MEDIUM ANODIZED STEEL|3|428 +Brand#35|MEDIUM BRUSHED STEEL|49|428 +Brand#35|PROMO ANODIZED NICKEL|14|428 +Brand#35|PROMO ANODIZED STEEL|36|428 +Brand#35|PROMO BRUSHED BRASS|19|428 +Brand#35|PROMO BRUSHED COPPER|45|428 +Brand#35|PROMO BRUSHED STEEL|19|428 +Brand#35|PROMO BURNISHED TIN|45|428 +Brand#35|PROMO PLATED STEEL|19|428 +Brand#35|PROMO PLATED TIN|49|428 +Brand#35|PROMO POLISHED NICKEL|49|428 +Brand#35|PROMO POLISHED TIN|3|428 +Brand#35|PROMO POLISHED TIN|14|428 +Brand#35|SMALL ANODIZED TIN|49|428 +Brand#35|SMALL BRUSHED STEEL|19|428 +Brand#35|SMALL POLISHED STEEL|49|428 +Brand#35|STANDARD ANODIZED BRASS|45|428 +Brand#35|STANDARD BRUSHED BRASS|14|428 +Brand#35|STANDARD BRUSHED COPPER|36|428 +Brand#35|STANDARD BURNISHED TIN|3|428 +Brand#35|STANDARD POLISHED COPPER|36|428 +Brand#35|STANDARD POLISHED COPPER|45|428 +Brand#41|ECONOMY ANODIZED NICKEL|49|428 +Brand#41|ECONOMY ANODIZED STEEL|36|428 +Brand#41|ECONOMY ANODIZED TIN|19|428 +Brand#41|ECONOMY BURNISHED COPPER|36|428 +Brand#41|ECONOMY PLATED NICKEL|3|428 +Brand#41|ECONOMY POLISHED STEEL|23|428 +Brand#41|ECONOMY POLISHED STEEL|45|428 +Brand#41|LARGE ANODIZED TIN|45|428 +Brand#41|LARGE BURNISHED TIN|14|428 +Brand#41|LARGE PLATED COPPER|9|428 +Brand#41|LARGE POLISHED STEEL|19|428 +Brand#41|MEDIUM ANODIZED BRASS|19|428 +Brand#41|MEDIUM ANODIZED COPPER|36|428 +Brand#41|MEDIUM ANODIZED STEEL|36|428 +Brand#41|MEDIUM BURNISHED NICKEL|36|428 +Brand#41|MEDIUM BURNISHED STEEL|14|428 +Brand#41|MEDIUM BURNISHED STEEL|19|428 +Brand#41|PROMO BRUSHED NICKEL|19|428 +Brand#41|PROMO BURNISHED COPPER|23|428 +Brand#41|PROMO POLISHED STEEL|3|428 +Brand#41|SMALL ANODIZED STEEL|14|428 +Brand#41|SMALL BRUSHED NICKEL|9|428 +Brand#41|SMALL BRUSHED NICKEL|45|428 +Brand#41|SMALL BRUSHED TIN|45|428 +Brand#41|SMALL BURNISHED STEEL|49|428 +Brand#41|SMALL PLATED NICKEL|49|428 +Brand#41|SMALL POLISHED COPPER|14|428 +Brand#41|SMALL POLISHED TIN|36|428 +Brand#41|STANDARD ANODIZED NICKEL|9|428 +Brand#41|STANDARD ANODIZED NICKEL|36|428 +Brand#41|STANDARD ANODIZED TIN|9|428 +Brand#41|STANDARD BRUSHED TIN|14|428 +Brand#42|ECONOMY BRUSHED COPPER|45|428 +Brand#42|ECONOMY BRUSHED TIN|19|428 +Brand#42|ECONOMY BURNISHED COPPER|23|428 +Brand#42|ECONOMY BURNISHED STEEL|19|428 +Brand#42|ECONOMY PLATED BRASS|3|428 +Brand#42|ECONOMY PLATED BRASS|49|428 +Brand#42|ECONOMY PLATED NICKEL|23|428 +Brand#42|LARGE BRUSHED NICKEL|45|428 +Brand#42|LARGE BURNISHED TIN|14|428 +Brand#42|LARGE BURNISHED TIN|36|428 +Brand#42|LARGE BURNISHED TIN|49|428 +Brand#42|LARGE PLATED BRASS|3|428 +Brand#42|LARGE POLISHED BRASS|23|428 +Brand#42|MEDIUM ANODIZED COPPER|36|428 +Brand#42|MEDIUM ANODIZED NICKEL|3|428 +Brand#42|MEDIUM ANODIZED NICKEL|23|428 +Brand#42|MEDIUM ANODIZED STEEL|3|428 +Brand#42|MEDIUM BURNISHED NICKEL|49|428 +Brand#42|MEDIUM PLATED TIN|23|428 +Brand#42|MEDIUM PLATED TIN|49|428 +Brand#42|PROMO ANODIZED COPPER|23|428 +Brand#42|PROMO BRUSHED COPPER|9|428 +Brand#42|PROMO BRUSHED COPPER|45|428 +Brand#42|PROMO BRUSHED NICKEL|36|428 +Brand#42|PROMO BURNISHED STEEL|36|428 +Brand#42|PROMO PLATED NICKEL|36|428 +Brand#42|PROMO PLATED TIN|23|428 +Brand#42|SMALL ANODIZED COPPER|14|428 +Brand#42|SMALL BRUSHED TIN|19|428 +Brand#42|SMALL BURNISHED STEEL|23|428 +Brand#42|SMALL PLATED STEEL|14|428 +Brand#42|STANDARD ANODIZED NICKEL|3|428 +Brand#42|STANDARD ANODIZED NICKEL|14|428 +Brand#42|STANDARD ANODIZED STEEL|49|428 +Brand#42|STANDARD PLATED COPPER|49|428 +Brand#43|ECONOMY BRUSHED BRASS|23|428 +Brand#43|ECONOMY BRUSHED COPPER|3|428 +Brand#43|ECONOMY BURNISHED COPPER|9|428 +Brand#43|ECONOMY PLATED BRASS|23|428 +Brand#43|ECONOMY PLATED TIN|14|428 +Brand#43|ECONOMY POLISHED BRASS|3|428 +Brand#43|ECONOMY POLISHED BRASS|49|428 +Brand#43|LARGE ANODIZED STEEL|19|428 +Brand#43|LARGE ANODIZED TIN|3|428 +Brand#43|LARGE BURNISHED BRASS|19|428 +Brand#43|LARGE BURNISHED BRASS|49|428 +Brand#43|LARGE PLATED BRASS|19|428 +Brand#43|LARGE PLATED BRASS|23|428 +Brand#43|LARGE PLATED COPPER|36|428 +Brand#43|LARGE PLATED TIN|14|428 +Brand#43|MEDIUM ANODIZED BRASS|3|428 +Brand#43|MEDIUM BRUSHED COPPER|45|428 +Brand#43|MEDIUM BRUSHED NICKEL|49|428 +Brand#43|MEDIUM BURNISHED STEEL|45|428 +Brand#43|MEDIUM PLATED NICKEL|49|428 +Brand#43|MEDIUM PLATED TIN|3|428 +Brand#43|PROMO ANODIZED COPPER|45|428 +Brand#43|PROMO ANODIZED TIN|3|428 +Brand#43|PROMO BURNISHED TIN|19|428 +Brand#43|SMALL ANODIZED BRASS|36|428 +Brand#43|SMALL ANODIZED COPPER|23|428 +Brand#43|SMALL BRUSHED STEEL|45|428 +Brand#43|SMALL BRUSHED TIN|19|428 +Brand#43|SMALL BURNISHED STEEL|19|428 +Brand#43|SMALL PLATED BRASS|36|428 +Brand#43|SMALL PLATED STEEL|9|428 +Brand#43|SMALL PLATED TIN|19|428 +Brand#43|SMALL POLISHED STEEL|45|428 +Brand#43|SMALL POLISHED TIN|3|428 +Brand#43|SMALL POLISHED TIN|23|428 +Brand#43|STANDARD BRUSHED BRASS|3|428 +Brand#43|STANDARD BURNISHED NICKEL|23|428 +Brand#43|STANDARD BURNISHED STEEL|19|428 +Brand#43|STANDARD POLISHED NICKEL|45|428 +Brand#44|ECONOMY BRUSHED STEEL|14|428 +Brand#44|ECONOMY PLATED STEEL|36|428 +Brand#44|LARGE ANODIZED COPPER|19|428 +Brand#44|LARGE ANODIZED COPPER|49|428 +Brand#44|LARGE BRUSHED COPPER|49|428 +Brand#44|LARGE BRUSHED STEEL|49|428 +Brand#44|LARGE BURNISHED NICKEL|9|428 +Brand#44|LARGE BURNISHED STEEL|3|428 +Brand#44|LARGE PLATED NICKEL|36|428 +Brand#44|MEDIUM BRUSHED NICKEL|3|428 +Brand#44|MEDIUM BURNISHED COPPER|49|428 +Brand#44|MEDIUM BURNISHED STEEL|14|428 +Brand#44|MEDIUM PLATED STEEL|3|428 +Brand#44|MEDIUM PLATED STEEL|19|428 +Brand#44|PROMO PLATED BRASS|36|428 +Brand#44|PROMO PLATED NICKEL|36|428 +Brand#44|SMALL ANODIZED STEEL|45|428 +Brand#44|SMALL BRUSHED TIN|36|428 +Brand#44|SMALL BURNISHED COPPER|3|428 +Brand#44|SMALL BURNISHED NICKEL|36|428 +Brand#44|SMALL PLATED TIN|9|428 +Brand#44|SMALL PLATED TIN|23|428 +Brand#44|STANDARD ANODIZED BRASS|19|428 +Brand#44|STANDARD BRUSHED COPPER|23|428 +Brand#44|STANDARD BRUSHED COPPER|36|428 +Brand#51|ECONOMY ANODIZED COPPER|14|428 +Brand#51|ECONOMY BRUSHED BRASS|23|428 +Brand#51|ECONOMY BURNISHED COPPER|19|428 +Brand#51|ECONOMY BURNISHED TIN|49|428 +Brand#51|ECONOMY PLATED NICKEL|19|428 +Brand#51|ECONOMY PLATED STEEL|9|428 +Brand#51|ECONOMY PLATED STEEL|49|428 +Brand#51|ECONOMY POLISHED STEEL|45|428 +Brand#51|ECONOMY POLISHED TIN|19|428 +Brand#51|LARGE BRUSHED STEEL|9|428 +Brand#51|LARGE BRUSHED TIN|45|428 +Brand#51|LARGE PLATED NICKEL|23|428 +Brand#51|MEDIUM BRUSHED COPPER|36|428 +Brand#51|MEDIUM BURNISHED STEEL|23|428 +Brand#51|MEDIUM PLATED NICKEL|23|428 +Brand#51|PROMO ANODIZED BRASS|3|428 +Brand#51|PROMO ANODIZED BRASS|49|428 +Brand#51|PROMO ANODIZED NICKEL|36|428 +Brand#51|PROMO BRUSHED NICKEL|14|428 +Brand#51|PROMO BURNISHED NICKEL|23|428 +Brand#51|PROMO BURNISHED NICKEL|49|428 +Brand#51|PROMO BURNISHED STEEL|45|428 +Brand#51|PROMO PLATED TIN|3|428 +Brand#51|PROMO POLISHED BRASS|19|428 +Brand#51|PROMO POLISHED COPPER|45|428 +Brand#51|SMALL ANODIZED NICKEL|36|428 +Brand#51|SMALL BURNISHED BRASS|14|428 +Brand#51|SMALL BURNISHED COPPER|9|428 +Brand#51|SMALL BURNISHED TIN|45|428 +Brand#51|STANDARD ANODIZED NICKEL|23|428 +Brand#51|STANDARD ANODIZED TIN|9|428 +Brand#51|STANDARD BRUSHED STEEL|19|428 +Brand#51|STANDARD BRUSHED TIN|36|428 +Brand#51|STANDARD BRUSHED TIN|45|428 +Brand#51|STANDARD BURNISHED TIN|23|428 +Brand#51|STANDARD BURNISHED TIN|36|428 +Brand#52|ECONOMY ANODIZED BRASS|23|428 +Brand#52|ECONOMY BRUSHED BRASS|36|428 +Brand#52|ECONOMY PLATED BRASS|45|428 +Brand#52|ECONOMY POLISHED COPPER|36|428 +Brand#52|LARGE ANODIZED BRASS|9|428 +Brand#52|LARGE ANODIZED BRASS|49|428 +Brand#52|LARGE ANODIZED TIN|36|428 +Brand#52|LARGE BRUSHED NICKEL|14|428 +Brand#52|LARGE BURNISHED NICKEL|3|428 +Brand#52|LARGE PLATED BRASS|14|428 +Brand#52|LARGE PLATED BRASS|23|428 +Brand#52|LARGE PLATED COPPER|49|428 +Brand#52|LARGE PLATED NICKEL|36|428 +Brand#52|LARGE PLATED NICKEL|45|428 +Brand#52|LARGE POLISHED NICKEL|9|428 +Brand#52|MEDIUM ANODIZED TIN|3|428 +Brand#52|MEDIUM BRUSHED STEEL|14|428 +Brand#52|MEDIUM BURNISHED BRASS|14|428 +Brand#52|MEDIUM BURNISHED NICKEL|3|428 +Brand#52|MEDIUM PLATED STEEL|36|428 +Brand#52|PROMO ANODIZED COPPER|9|428 +Brand#52|PROMO ANODIZED NICKEL|19|428 +Brand#52|PROMO BRUSHED COPPER|19|428 +Brand#52|PROMO PLATED BRASS|14|428 +Brand#52|PROMO PLATED NICKEL|9|428 +Brand#52|PROMO POLISHED STEEL|49|428 +Brand#52|SMALL ANODIZED NICKEL|19|428 +Brand#52|SMALL ANODIZED TIN|3|428 +Brand#52|SMALL BRUSHED BRASS|49|428 +Brand#52|SMALL BRUSHED COPPER|49|428 +Brand#52|SMALL PLATED NICKEL|19|428 +Brand#52|SMALL PLATED TIN|9|428 +Brand#52|SMALL POLISHED BRASS|3|428 +Brand#52|STANDARD BRUSHED STEEL|36|428 +Brand#52|STANDARD BRUSHED TIN|9|428 +Brand#52|STANDARD BURNISHED BRASS|14|428 +Brand#52|STANDARD PLATED NICKEL|49|428 +Brand#53|ECONOMY ANODIZED BRASS|9|428 +Brand#53|ECONOMY ANODIZED COPPER|3|428 +Brand#53|ECONOMY ANODIZED STEEL|3|428 +Brand#53|ECONOMY ANODIZED STEEL|45|428 +Brand#53|ECONOMY BRUSHED COPPER|3|428 +Brand#53|ECONOMY BRUSHED COPPER|14|428 +Brand#53|ECONOMY BRUSHED STEEL|19|428 +Brand#53|ECONOMY BRUSHED STEEL|49|428 +Brand#53|ECONOMY PLATED NICKEL|45|428 +Brand#53|LARGE ANODIZED BRASS|36|428 +Brand#53|LARGE ANODIZED COPPER|9|428 +Brand#53|LARGE ANODIZED TIN|36|428 +Brand#53|LARGE BRUSHED TIN|3|428 +Brand#53|LARGE PLATED BRASS|3|428 +Brand#53|LARGE PLATED NICKEL|3|428 +Brand#53|LARGE POLISHED STEEL|49|428 +Brand#53|MEDIUM BRUSHED TIN|49|428 +Brand#53|MEDIUM BURNISHED BRASS|3|428 +Brand#53|MEDIUM BURNISHED BRASS|23|428 +Brand#53|MEDIUM BURNISHED COPPER|49|428 +Brand#53|MEDIUM BURNISHED STEEL|14|428 +Brand#53|PROMO BRUSHED BRASS|36|428 +Brand#53|PROMO BURNISHED COPPER|23|428 +Brand#53|PROMO BURNISHED NICKEL|14|428 +Brand#53|PROMO PLATED COPPER|45|428 +Brand#53|PROMO POLISHED BRASS|49|428 +Brand#53|SMALL ANODIZED BRASS|23|428 +Brand#53|SMALL ANODIZED COPPER|36|428 +Brand#53|SMALL BRUSHED COPPER|23|428 +Brand#53|SMALL PLATED TIN|23|428 +Brand#53|SMALL PLATED TIN|45|428 +Brand#53|STANDARD ANODIZED NICKEL|49|428 +Brand#53|STANDARD ANODIZED TIN|9|428 +Brand#53|STANDARD BRUSHED NICKEL|36|428 +Brand#53|STANDARD BRUSHED STEEL|9|428 +Brand#53|STANDARD BURNISHED STEEL|3|428 +Brand#53|STANDARD POLISHED TIN|19|428 +Brand#54|ECONOMY BRUSHED BRASS|49|428 +Brand#54|ECONOMY BRUSHED COPPER|36|428 +Brand#54|ECONOMY BRUSHED NICKEL|3|428 +Brand#54|ECONOMY BRUSHED STEEL|23|428 +Brand#54|ECONOMY POLISHED BRASS|3|428 +Brand#54|ECONOMY POLISHED NICKEL|45|428 +Brand#54|ECONOMY POLISHED STEEL|23|428 +Brand#54|ECONOMY POLISHED STEEL|36|428 +Brand#54|LARGE BRUSHED BRASS|3|428 +Brand#54|LARGE BURNISHED TIN|36|428 +Brand#54|LARGE BURNISHED TIN|45|428 +Brand#54|LARGE POLISHED COPPER|3|428 +Brand#54|MEDIUM BRUSHED NICKEL|19|428 +Brand#54|MEDIUM BRUSHED TIN|9|428 +Brand#54|MEDIUM BURNISHED STEEL|23|428 +Brand#54|MEDIUM PLATED COPPER|45|428 +Brand#54|PROMO ANODIZED BRASS|3|428 +Brand#54|PROMO ANODIZED STEEL|9|428 +Brand#54|PROMO ANODIZED TIN|45|428 +Brand#54|PROMO BRUSHED STEEL|14|428 +Brand#54|PROMO BRUSHED TIN|3|428 +Brand#54|PROMO BURNISHED STEEL|23|428 +Brand#54|PROMO BURNISHED STEEL|49|428 +Brand#54|PROMO POLISHED BRASS|49|428 +Brand#54|PROMO POLISHED NICKEL|36|428 +Brand#54|SMALL ANODIZED NICKEL|3|428 +Brand#54|SMALL BRUSHED NICKEL|3|428 +Brand#54|SMALL BRUSHED NICKEL|23|428 +Brand#54|SMALL BURNISHED TIN|19|428 +Brand#54|SMALL PLATED COPPER|9|428 +Brand#54|SMALL POLISHED COPPER|36|428 +Brand#54|SMALL POLISHED NICKEL|36|428 +Brand#54|SMALL POLISHED STEEL|49|428 +Brand#54|STANDARD ANODIZED COPPER|19|428 +Brand#54|STANDARD BRUSHED NICKEL|49|428 +Brand#54|STANDARD BURNISHED STEEL|36|428 +Brand#54|STANDARD PLATED STEEL|36|428 +Brand#54|STANDARD POLISHED BRASS|14|428 +Brand#54|STANDARD POLISHED STEEL|3|428 +Brand#55|ECONOMY ANODIZED BRASS|23|428 +Brand#55|ECONOMY BRUSHED BRASS|23|428 +Brand#55|ECONOMY BRUSHED COPPER|3|428 +Brand#55|ECONOMY BURNISHED BRASS|9|428 +Brand#55|ECONOMY BURNISHED TIN|3|428 +Brand#55|ECONOMY POLISHED STEEL|23|428 +Brand#55|LARGE ANODIZED COPPER|45|428 +Brand#55|LARGE ANODIZED NICKEL|19|428 +Brand#55|LARGE ANODIZED TIN|14|428 +Brand#55|LARGE BRUSHED BRASS|19|428 +Brand#55|LARGE BRUSHED COPPER|36|428 +Brand#55|LARGE BRUSHED TIN|45|428 +Brand#55|LARGE BURNISHED BRASS|19|428 +Brand#55|LARGE PLATED NICKEL|49|428 +Brand#55|LARGE POLISHED STEEL|3|428 +Brand#55|LARGE POLISHED TIN|9|428 +Brand#55|MEDIUM BRUSHED BRASS|23|428 +Brand#55|MEDIUM BURNISHED COPPER|49|428 +Brand#55|MEDIUM PLATED BRASS|23|428 +Brand#55|MEDIUM PLATED BRASS|45|428 +Brand#55|MEDIUM PLATED COPPER|9|428 +Brand#55|PROMO BRUSHED COPPER|9|428 +Brand#55|PROMO BRUSHED COPPER|36|428 +Brand#55|PROMO BRUSHED NICKEL|3|428 +Brand#55|PROMO BURNISHED COPPER|3|428 +Brand#55|PROMO BURNISHED TIN|23|428 +Brand#55|PROMO POLISHED BRASS|45|428 +Brand#55|PROMO POLISHED STEEL|14|428 +Brand#55|SMALL ANODIZED BRASS|14|428 +Brand#55|SMALL BRUSHED STEEL|23|428 +Brand#55|SMALL BRUSHED STEEL|36|428 +Brand#55|SMALL BURNISHED BRASS|3|428 +Brand#55|SMALL BURNISHED STEEL|23|428 +Brand#55|STANDARD BRUSHED BRASS|19|428 +Brand#55|STANDARD PLATED STEEL|3|428 +Brand#55|STANDARD POLISHED BRASS|14|428 +Brand#55|STANDARD POLISHED NICKEL|9|428 +Brand#11|ECONOMY ANODIZED BRASS|14|427 +Brand#11|LARGE ANODIZED NICKEL|14|427 +Brand#11|LARGE ANODIZED TIN|19|427 +Brand#11|LARGE BRUSHED BRASS|23|427 +Brand#11|MEDIUM BRUSHED COPPER|23|427 +Brand#11|PROMO POLISHED COPPER|14|427 +Brand#11|PROMO POLISHED COPPER|49|427 +Brand#11|SMALL ANODIZED TIN|45|427 +Brand#11|STANDARD BRUSHED COPPER|9|427 +Brand#11|STANDARD POLISHED NICKEL|9|427 +Brand#12|ECONOMY BRUSHED COPPER|49|427 +Brand#12|ECONOMY BURNISHED STEEL|9|427 +Brand#12|ECONOMY BURNISHED TIN|36|427 +Brand#12|ECONOMY PLATED STEEL|19|427 +Brand#12|LARGE ANODIZED NICKEL|45|427 +Brand#12|LARGE PLATED BRASS|14|427 +Brand#12|MEDIUM BURNISHED BRASS|3|427 +Brand#12|STANDARD ANODIZED BRASS|19|427 +Brand#12|STANDARD BRUSHED BRASS|45|427 +Brand#12|STANDARD BRUSHED NICKEL|9|427 +Brand#12|STANDARD PLATED STEEL|45|427 +Brand#12|STANDARD PLATED TIN|14|427 +Brand#13|ECONOMY POLISHED NICKEL|45|427 +Brand#13|LARGE BURNISHED STEEL|36|427 +Brand#13|MEDIUM PLATED NICKEL|49|427 +Brand#13|SMALL ANODIZED BRASS|19|427 +Brand#13|SMALL PLATED STEEL|14|427 +Brand#13|SMALL POLISHED COPPER|19|427 +Brand#13|STANDARD ANODIZED NICKEL|49|427 +Brand#13|STANDARD BRUSHED TIN|45|427 +Brand#13|STANDARD PLATED STEEL|45|427 +Brand#14|ECONOMY POLISHED COPPER|3|427 +Brand#14|LARGE BRUSHED STEEL|49|427 +Brand#14|LARGE BURNISHED COPPER|3|427 +Brand#14|LARGE BURNISHED COPPER|45|427 +Brand#14|LARGE BURNISHED STEEL|49|427 +Brand#14|SMALL ANODIZED TIN|19|427 +Brand#14|SMALL BRUSHED NICKEL|23|427 +Brand#14|SMALL BRUSHED TIN|36|427 +Brand#14|SMALL PLATED NICKEL|19|427 +Brand#15|ECONOMY PLATED NICKEL|19|427 +Brand#15|LARGE PLATED NICKEL|23|427 +Brand#15|LARGE PLATED TIN|9|427 +Brand#15|LARGE POLISHED NICKEL|9|427 +Brand#15|MEDIUM ANODIZED BRASS|45|427 +Brand#15|MEDIUM BURNISHED STEEL|3|427 +Brand#15|PROMO ANODIZED STEEL|19|427 +Brand#15|PROMO PLATED BRASS|23|427 +Brand#15|SMALL POLISHED BRASS|14|427 +Brand#15|SMALL POLISHED NICKEL|19|427 +Brand#15|STANDARD BRUSHED COPPER|49|427 +Brand#21|ECONOMY ANODIZED BRASS|23|427 +Brand#21|ECONOMY ANODIZED NICKEL|36|427 +Brand#21|LARGE BRUSHED STEEL|9|427 +Brand#21|MEDIUM BURNISHED TIN|3|427 +Brand#21|PROMO BURNISHED NICKEL|36|427 +Brand#21|PROMO PLATED COPPER|14|427 +Brand#21|PROMO PLATED STEEL|19|427 +Brand#21|SMALL BURNISHED TIN|3|427 +Brand#21|SMALL PLATED BRASS|3|427 +Brand#21|SMALL POLISHED NICKEL|49|427 +Brand#21|STANDARD ANODIZED STEEL|23|427 +Brand#21|STANDARD BURNISHED STEEL|36|427 +Brand#22|ECONOMY BURNISHED NICKEL|14|427 +Brand#22|LARGE PLATED COPPER|19|427 +Brand#22|MEDIUM ANODIZED NICKEL|14|427 +Brand#22|MEDIUM PLATED STEEL|23|427 +Brand#22|MEDIUM PLATED STEEL|36|427 +Brand#22|SMALL BRUSHED NICKEL|36|427 +Brand#22|SMALL BURNISHED TIN|23|427 +Brand#22|STANDARD BURNISHED BRASS|45|427 +Brand#22|STANDARD PLATED NICKEL|9|427 +Brand#22|STANDARD POLISHED TIN|19|427 +Brand#23|LARGE BRUSHED STEEL|14|427 +Brand#23|LARGE BURNISHED COPPER|49|427 +Brand#23|PROMO ANODIZED TIN|14|427 +Brand#23|SMALL ANODIZED TIN|9|427 +Brand#23|SMALL ANODIZED TIN|19|427 +Brand#23|SMALL POLISHED NICKEL|19|427 +Brand#23|STANDARD BURNISHED COPPER|23|427 +Brand#24|ECONOMY BRUSHED COPPER|9|427 +Brand#24|ECONOMY BRUSHED STEEL|45|427 +Brand#24|LARGE BRUSHED COPPER|14|427 +Brand#24|LARGE POLISHED TIN|36|427 +Brand#24|PROMO ANODIZED BRASS|14|427 +Brand#24|PROMO ANODIZED TIN|23|427 +Brand#24|PROMO BURNISHED BRASS|23|427 +Brand#24|PROMO PLATED STEEL|14|427 +Brand#24|STANDARD BRUSHED NICKEL|19|427 +Brand#25|ECONOMY PLATED TIN|3|427 +Brand#25|LARGE BURNISHED TIN|14|427 +Brand#25|LARGE PLATED STEEL|3|427 +Brand#25|MEDIUM BRUSHED STEEL|36|427 +Brand#25|SMALL BRUSHED BRASS|49|427 +Brand#25|SMALL BRUSHED STEEL|49|427 +Brand#25|SMALL BURNISHED STEEL|19|427 +Brand#25|SMALL PLATED COPPER|14|427 +Brand#25|STANDARD BURNISHED NICKEL|36|427 +Brand#31|ECONOMY BURNISHED BRASS|9|427 +Brand#31|ECONOMY PLATED BRASS|36|427 +Brand#31|PROMO BRUSHED STEEL|19|427 +Brand#31|PROMO BURNISHED BRASS|45|427 +Brand#31|SMALL BRUSHED TIN|14|427 +Brand#31|STANDARD BURNISHED STEEL|3|427 +Brand#32|ECONOMY POLISHED BRASS|3|427 +Brand#32|LARGE ANODIZED COPPER|3|427 +Brand#32|LARGE BRUSHED NICKEL|9|427 +Brand#32|MEDIUM BRUSHED COPPER|3|427 +Brand#32|MEDIUM BRUSHED STEEL|45|427 +Brand#32|SMALL ANODIZED TIN|19|427 +Brand#32|STANDARD BRUSHED TIN|23|427 +Brand#32|STANDARD BURNISHED BRASS|3|427 +Brand#32|STANDARD BURNISHED NICKEL|23|427 +Brand#33|ECONOMY ANODIZED COPPER|9|427 +Brand#33|ECONOMY ANODIZED TIN|19|427 +Brand#33|ECONOMY BRUSHED STEEL|45|427 +Brand#33|LARGE ANODIZED NICKEL|14|427 +Brand#33|LARGE BRUSHED STEEL|14|427 +Brand#33|LARGE BRUSHED TIN|9|427 +Brand#33|LARGE BURNISHED BRASS|9|427 +Brand#33|LARGE PLATED COPPER|36|427 +Brand#33|MEDIUM ANODIZED COPPER|14|427 +Brand#33|PROMO ANODIZED COPPER|36|427 +Brand#33|PROMO ANODIZED TIN|14|427 +Brand#33|PROMO BRUSHED COPPER|3|427 +Brand#33|PROMO PLATED COPPER|45|427 +Brand#33|SMALL ANODIZED STEEL|49|427 +Brand#33|SMALL PLATED BRASS|36|427 +Brand#34|LARGE ANODIZED BRASS|23|427 +Brand#34|LARGE BURNISHED BRASS|36|427 +Brand#34|LARGE PLATED BRASS|14|427 +Brand#34|LARGE PLATED TIN|49|427 +Brand#34|MEDIUM PLATED BRASS|19|427 +Brand#34|PROMO BRUSHED TIN|36|427 +Brand#34|PROMO PLATED TIN|23|427 +Brand#34|SMALL BRUSHED COPPER|9|427 +Brand#34|SMALL BURNISHED NICKEL|14|427 +Brand#34|SMALL POLISHED BRASS|9|427 +Brand#34|STANDARD BURNISHED NICKEL|14|427 +Brand#34|STANDARD PLATED STEEL|23|427 +Brand#34|STANDARD POLISHED BRASS|45|427 +Brand#35|ECONOMY BRUSHED TIN|3|427 +Brand#35|ECONOMY BURNISHED NICKEL|36|427 +Brand#35|LARGE BRUSHED NICKEL|19|427 +Brand#35|MEDIUM ANODIZED NICKEL|3|427 +Brand#35|PROMO ANODIZED STEEL|9|427 +Brand#35|SMALL ANODIZED NICKEL|19|427 +Brand#35|SMALL BRUSHED NICKEL|19|427 +Brand#35|SMALL BURNISHED STEEL|9|427 +Brand#35|SMALL BURNISHED STEEL|49|427 +Brand#35|SMALL BURNISHED TIN|23|427 +Brand#35|SMALL PLATED NICKEL|23|427 +Brand#35|SMALL PLATED TIN|23|427 +Brand#35|STANDARD BRUSHED TIN|14|427 +Brand#35|STANDARD POLISHED COPPER|49|427 +Brand#41|ECONOMY BRUSHED TIN|36|427 +Brand#41|ECONOMY PLATED NICKEL|36|427 +Brand#41|ECONOMY POLISHED BRASS|36|427 +Brand#41|LARGE BRUSHED NICKEL|19|427 +Brand#41|LARGE PLATED COPPER|3|427 +Brand#41|LARGE PLATED TIN|9|427 +Brand#41|MEDIUM BRUSHED NICKEL|14|427 +Brand#41|PROMO BURNISHED BRASS|14|427 +Brand#41|PROMO BURNISHED BRASS|49|427 +Brand#41|PROMO POLISHED NICKEL|14|427 +Brand#41|SMALL PLATED NICKEL|14|427 +Brand#41|SMALL PLATED TIN|23|427 +Brand#41|STANDARD ANODIZED NICKEL|3|427 +Brand#41|STANDARD ANODIZED TIN|3|427 +Brand#41|STANDARD BURNISHED TIN|3|427 +Brand#42|ECONOMY BRUSHED COPPER|36|427 +Brand#42|ECONOMY BRUSHED STEEL|45|427 +Brand#42|LARGE PLATED COPPER|14|427 +Brand#42|LARGE POLISHED NICKEL|23|427 +Brand#42|MEDIUM BURNISHED BRASS|3|427 +Brand#42|PROMO ANODIZED NICKEL|14|427 +Brand#42|PROMO POLISHED BRASS|45|427 +Brand#42|SMALL ANODIZED NICKEL|3|427 +Brand#42|STANDARD BRUSHED COPPER|14|427 +Brand#42|STANDARD BRUSHED TIN|3|427 +Brand#42|STANDARD BURNISHED COPPER|3|427 +Brand#42|STANDARD PLATED NICKEL|36|427 +Brand#43|ECONOMY ANODIZED COPPER|14|427 +Brand#43|ECONOMY BURNISHED NICKEL|23|427 +Brand#43|ECONOMY BURNISHED TIN|36|427 +Brand#43|ECONOMY PLATED TIN|36|427 +Brand#43|LARGE ANODIZED COPPER|14|427 +Brand#43|LARGE ANODIZED NICKEL|9|427 +Brand#43|LARGE ANODIZED NICKEL|19|427 +Brand#43|LARGE BRUSHED TIN|36|427 +Brand#43|SMALL BRUSHED NICKEL|36|427 +Brand#43|SMALL PLATED TIN|23|427 +Brand#43|STANDARD BRUSHED BRASS|14|427 +Brand#43|STANDARD BURNISHED STEEL|9|427 +Brand#44|ECONOMY ANODIZED COPPER|19|427 +Brand#44|ECONOMY PLATED COPPER|3|427 +Brand#44|LARGE POLISHED TIN|23|427 +Brand#44|MEDIUM ANODIZED TIN|9|427 +Brand#44|PROMO BURNISHED COPPER|14|427 +Brand#44|PROMO BURNISHED TIN|3|427 +Brand#44|PROMO PLATED TIN|14|427 +Brand#44|PROMO POLISHED BRASS|3|427 +Brand#44|SMALL ANODIZED BRASS|23|427 +Brand#44|SMALL ANODIZED STEEL|49|427 +Brand#44|SMALL ANODIZED TIN|45|427 +Brand#44|SMALL BRUSHED NICKEL|45|427 +Brand#44|SMALL BURNISHED NICKEL|19|427 +Brand#44|SMALL BURNISHED STEEL|23|427 +Brand#44|SMALL POLISHED BRASS|36|427 +Brand#44|STANDARD BURNISHED STEEL|14|427 +Brand#44|STANDARD PLATED BRASS|49|427 +Brand#44|STANDARD PLATED COPPER|9|427 +Brand#51|LARGE BRUSHED TIN|14|427 +Brand#51|LARGE POLISHED COPPER|49|427 +Brand#51|MEDIUM BURNISHED NICKEL|49|427 +Brand#51|MEDIUM PLATED STEEL|45|427 +Brand#51|PROMO POLISHED NICKEL|49|427 +Brand#51|SMALL BURNISHED COPPER|45|427 +Brand#51|SMALL POLISHED NICKEL|14|427 +Brand#51|SMALL POLISHED TIN|14|427 +Brand#51|STANDARD ANODIZED BRASS|36|427 +Brand#51|STANDARD PLATED COPPER|49|427 +Brand#52|ECONOMY BRUSHED TIN|36|427 +Brand#52|LARGE ANODIZED BRASS|45|427 +Brand#52|LARGE PLATED COPPER|19|427 +Brand#52|LARGE PLATED STEEL|36|427 +Brand#52|MEDIUM PLATED TIN|36|427 +Brand#52|PROMO BRUSHED TIN|45|427 +Brand#52|PROMO BURNISHED BRASS|19|427 +Brand#52|SMALL BURNISHED BRASS|19|427 +Brand#52|SMALL PLATED TIN|36|427 +Brand#52|STANDARD ANODIZED TIN|3|427 +Brand#53|ECONOMY ANODIZED COPPER|14|427 +Brand#53|ECONOMY POLISHED NICKEL|45|427 +Brand#53|PROMO POLISHED STEEL|3|427 +Brand#53|PROMO POLISHED TIN|36|427 +Brand#54|ECONOMY ANODIZED BRASS|49|427 +Brand#54|LARGE POLISHED TIN|36|427 +Brand#54|MEDIUM BURNISHED TIN|36|427 +Brand#54|PROMO ANODIZED TIN|23|427 +Brand#54|SMALL BRUSHED STEEL|9|427 +Brand#54|SMALL BURNISHED STEEL|19|427 +Brand#54|STANDARD PLATED BRASS|19|427 +Brand#54|STANDARD PLATED COPPER|45|427 +Brand#54|STANDARD PLATED TIN|23|427 +Brand#55|ECONOMY BRUSHED STEEL|45|427 +Brand#55|LARGE PLATED BRASS|9|427 +Brand#55|LARGE PLATED TIN|14|427 +Brand#55|MEDIUM BURNISHED TIN|49|427 +Brand#55|PROMO POLISHED COPPER|23|427 +Brand#55|SMALL POLISHED COPPER|45|427 +Brand#55|STANDARD ANODIZED COPPER|23|427 +Brand#55|STANDARD POLISHED NICKEL|45|427 +Brand#11|ECONOMY BRUSHED NICKEL|3|426 +Brand#11|STANDARD POLISHED TIN|36|426 +Brand#12|MEDIUM PLATED COPPER|9|426 +Brand#13|LARGE BRUSHED TIN|14|426 +Brand#14|ECONOMY ANODIZED NICKEL|14|426 +Brand#14|LARGE ANODIZED TIN|23|426 +Brand#21|ECONOMY PLATED TIN|23|426 +Brand#21|MEDIUM BURNISHED STEEL|14|426 +Brand#22|ECONOMY POLISHED NICKEL|3|426 +Brand#22|MEDIUM ANODIZED STEEL|45|426 +Brand#23|ECONOMY BRUSHED STEEL|36|426 +Brand#23|ECONOMY PLATED BRASS|9|426 +Brand#24|MEDIUM BURNISHED NICKEL|49|426 +Brand#25|PROMO BRUSHED COPPER|36|426 +Brand#25|PROMO BRUSHED TIN|23|426 +Brand#25|PROMO POLISHED NICKEL|36|426 +Brand#31|SMALL BRUSHED TIN|9|426 +Brand#31|SMALL PLATED STEEL|19|426 +Brand#32|SMALL BURNISHED NICKEL|23|426 +Brand#32|STANDARD PLATED BRASS|23|426 +Brand#34|ECONOMY ANODIZED STEEL|49|426 +Brand#41|ECONOMY POLISHED TIN|45|426 +Brand#41|MEDIUM ANODIZED NICKEL|3|426 +Brand#41|SMALL BURNISHED COPPER|3|426 +Brand#41|SMALL PLATED NICKEL|36|426 +Brand#42|LARGE PLATED STEEL|36|426 +Brand#42|STANDARD BRUSHED BRASS|23|426 +Brand#44|LARGE PLATED TIN|45|426 +Brand#44|STANDARD BRUSHED STEEL|3|426 +Brand#44|STANDARD PLATED TIN|23|426 +Brand#51|ECONOMY BRUSHED COPPER|3|426 +Brand#51|PROMO BRUSHED COPPER|49|426 +Brand#51|SMALL POLISHED BRASS|3|426 +Brand#54|MEDIUM BRUSHED TIN|3|426 +Brand#54|MEDIUM PLATED TIN|23|426 +Brand#11|PROMO BURNISHED BRASS|9|425 +Brand#21|SMALL ANODIZED NICKEL|3|425 +Brand#35|SMALL POLISHED BRASS|49|425 +Brand#42|ECONOMY ANODIZED COPPER|3|425 +Brand#53|LARGE BURNISHED COPPER|14|425 +Brand#53|SMALL POLISHED COPPER|49|425 +Brand#11|ECONOMY ANODIZED COPPER|49|424 +Brand#11|ECONOMY BRUSHED COPPER|23|424 +Brand#11|ECONOMY BRUSHED COPPER|45|424 +Brand#11|ECONOMY BURNISHED BRASS|23|424 +Brand#11|ECONOMY POLISHED COPPER|49|424 +Brand#11|LARGE BRUSHED COPPER|19|424 +Brand#11|LARGE BRUSHED TIN|3|424 +Brand#11|LARGE BRUSHED TIN|9|424 +Brand#11|LARGE BURNISHED BRASS|45|424 +Brand#11|LARGE BURNISHED COPPER|3|424 +Brand#11|LARGE PLATED NICKEL|45|424 +Brand#11|LARGE PLATED STEEL|3|424 +Brand#11|LARGE PLATED TIN|23|424 +Brand#11|LARGE POLISHED BRASS|23|424 +Brand#11|LARGE POLISHED BRASS|49|424 +Brand#11|LARGE POLISHED NICKEL|14|424 +Brand#11|LARGE POLISHED STEEL|3|424 +Brand#11|MEDIUM ANODIZED BRASS|19|424 +Brand#11|MEDIUM ANODIZED COPPER|23|424 +Brand#11|MEDIUM BRUSHED STEEL|36|424 +Brand#11|MEDIUM BURNISHED NICKEL|19|424 +Brand#11|MEDIUM PLATED COPPER|23|424 +Brand#11|PROMO ANODIZED BRASS|23|424 +Brand#11|PROMO BRUSHED TIN|3|424 +Brand#11|PROMO BRUSHED TIN|49|424 +Brand#11|PROMO PLATED BRASS|9|424 +Brand#11|PROMO PLATED BRASS|14|424 +Brand#11|PROMO PLATED STEEL|3|424 +Brand#11|PROMO POLISHED COPPER|19|424 +Brand#11|SMALL ANODIZED BRASS|14|424 +Brand#11|SMALL BRUSHED COPPER|19|424 +Brand#11|SMALL BRUSHED NICKEL|45|424 +Brand#11|SMALL BURNISHED TIN|14|424 +Brand#11|SMALL PLATED NICKEL|9|424 +Brand#11|SMALL PLATED NICKEL|45|424 +Brand#11|SMALL POLISHED STEEL|3|424 +Brand#11|STANDARD ANODIZED BRASS|23|424 +Brand#11|STANDARD ANODIZED NICKEL|49|424 +Brand#11|STANDARD BRUSHED STEEL|3|424 +Brand#11|STANDARD BURNISHED NICKEL|14|424 +Brand#11|STANDARD BURNISHED TIN|36|424 +Brand#11|STANDARD PLATED COPPER|36|424 +Brand#11|STANDARD POLISHED STEEL|9|424 +Brand#12|ECONOMY ANODIZED COPPER|14|424 +Brand#12|ECONOMY ANODIZED NICKEL|45|424 +Brand#12|ECONOMY BRUSHED NICKEL|49|424 +Brand#12|ECONOMY PLATED COPPER|3|424 +Brand#12|ECONOMY PLATED STEEL|23|424 +Brand#12|LARGE ANODIZED COPPER|23|424 +Brand#12|LARGE ANODIZED TIN|3|424 +Brand#12|LARGE BRUSHED BRASS|9|424 +Brand#12|LARGE BURNISHED NICKEL|3|424 +Brand#12|LARGE BURNISHED STEEL|3|424 +Brand#12|MEDIUM ANODIZED COPPER|45|424 +Brand#12|MEDIUM ANODIZED NICKEL|3|424 +Brand#12|MEDIUM BURNISHED COPPER|49|424 +Brand#12|MEDIUM PLATED STEEL|49|424 +Brand#12|PROMO ANODIZED BRASS|45|424 +Brand#12|PROMO BRUSHED STEEL|9|424 +Brand#12|PROMO BURNISHED BRASS|3|424 +Brand#12|PROMO BURNISHED STEEL|19|424 +Brand#12|PROMO PLATED COPPER|49|424 +Brand#12|PROMO PLATED STEEL|9|424 +Brand#12|PROMO POLISHED BRASS|36|424 +Brand#12|SMALL BRUSHED BRASS|23|424 +Brand#12|SMALL BURNISHED COPPER|45|424 +Brand#12|SMALL PLATED COPPER|45|424 +Brand#12|SMALL POLISHED STEEL|19|424 +Brand#12|STANDARD ANODIZED BRASS|49|424 +Brand#12|STANDARD ANODIZED COPPER|49|424 +Brand#12|STANDARD BURNISHED TIN|36|424 +Brand#13|ECONOMY BURNISHED BRASS|36|424 +Brand#13|ECONOMY PLATED STEEL|49|424 +Brand#13|ECONOMY PLATED TIN|19|424 +Brand#13|LARGE ANODIZED BRASS|19|424 +Brand#13|LARGE BRUSHED NICKEL|49|424 +Brand#13|LARGE BRUSHED STEEL|14|424 +Brand#13|LARGE BURNISHED COPPER|23|424 +Brand#13|LARGE PLATED COPPER|14|424 +Brand#13|LARGE PLATED TIN|9|424 +Brand#13|LARGE POLISHED BRASS|9|424 +Brand#13|LARGE POLISHED BRASS|45|424 +Brand#13|MEDIUM BRUSHED BRASS|23|424 +Brand#13|MEDIUM BURNISHED BRASS|36|424 +Brand#13|MEDIUM PLATED NICKEL|23|424 +Brand#13|PROMO BRUSHED COPPER|19|424 +Brand#13|PROMO BURNISHED COPPER|3|424 +Brand#13|PROMO BURNISHED STEEL|19|424 +Brand#13|PROMO BURNISHED TIN|9|424 +Brand#13|PROMO PLATED NICKEL|49|424 +Brand#13|PROMO PLATED TIN|45|424 +Brand#13|PROMO POLISHED COPPER|19|424 +Brand#13|PROMO POLISHED NICKEL|23|424 +Brand#13|PROMO POLISHED STEEL|9|424 +Brand#13|SMALL ANODIZED STEEL|9|424 +Brand#13|SMALL BRUSHED COPPER|3|424 +Brand#13|SMALL BURNISHED BRASS|23|424 +Brand#13|SMALL POLISHED BRASS|19|424 +Brand#13|SMALL POLISHED BRASS|23|424 +Brand#13|STANDARD BRUSHED TIN|14|424 +Brand#13|STANDARD BURNISHED NICKEL|3|424 +Brand#13|STANDARD BURNISHED NICKEL|14|424 +Brand#13|STANDARD PLATED COPPER|3|424 +Brand#13|STANDARD POLISHED STEEL|49|424 +Brand#14|ECONOMY ANODIZED TIN|45|424 +Brand#14|ECONOMY BRUSHED NICKEL|23|424 +Brand#14|ECONOMY PLATED STEEL|19|424 +Brand#14|ECONOMY POLISHED BRASS|9|424 +Brand#14|ECONOMY POLISHED BRASS|45|424 +Brand#14|ECONOMY POLISHED BRASS|49|424 +Brand#14|ECONOMY POLISHED TIN|23|424 +Brand#14|LARGE ANODIZED BRASS|3|424 +Brand#14|LARGE BRUSHED NICKEL|3|424 +Brand#14|LARGE PLATED BRASS|49|424 +Brand#14|LARGE POLISHED NICKEL|36|424 +Brand#14|LARGE POLISHED TIN|3|424 +Brand#14|MEDIUM ANODIZED COPPER|49|424 +Brand#14|MEDIUM ANODIZED STEEL|14|424 +Brand#14|MEDIUM BRUSHED STEEL|36|424 +Brand#14|MEDIUM BRUSHED TIN|14|424 +Brand#14|MEDIUM PLATED BRASS|19|424 +Brand#14|MEDIUM PLATED TIN|3|424 +Brand#14|PROMO BRUSHED COPPER|23|424 +Brand#14|PROMO BURNISHED NICKEL|9|424 +Brand#14|PROMO BURNISHED STEEL|23|424 +Brand#14|PROMO POLISHED COPPER|23|424 +Brand#14|PROMO POLISHED NICKEL|3|424 +Brand#14|PROMO POLISHED TIN|49|424 +Brand#14|SMALL ANODIZED NICKEL|45|424 +Brand#14|SMALL BRUSHED NICKEL|19|424 +Brand#14|SMALL BURNISHED NICKEL|3|424 +Brand#14|SMALL PLATED STEEL|23|424 +Brand#14|SMALL POLISHED STEEL|9|424 +Brand#14|STANDARD ANODIZED BRASS|36|424 +Brand#14|STANDARD ANODIZED STEEL|3|424 +Brand#14|STANDARD BURNISHED BRASS|3|424 +Brand#14|STANDARD BURNISHED COPPER|19|424 +Brand#14|STANDARD BURNISHED TIN|49|424 +Brand#14|STANDARD PLATED BRASS|19|424 +Brand#14|STANDARD PLATED STEEL|19|424 +Brand#14|STANDARD POLISHED COPPER|19|424 +Brand#14|STANDARD POLISHED STEEL|14|424 +Brand#15|ECONOMY ANODIZED BRASS|9|424 +Brand#15|ECONOMY ANODIZED STEEL|9|424 +Brand#15|ECONOMY BURNISHED TIN|45|424 +Brand#15|LARGE ANODIZED BRASS|45|424 +Brand#15|LARGE ANODIZED COPPER|3|424 +Brand#15|LARGE ANODIZED COPPER|45|424 +Brand#15|LARGE ANODIZED NICKEL|49|424 +Brand#15|LARGE ANODIZED STEEL|3|424 +Brand#15|LARGE ANODIZED STEEL|9|424 +Brand#15|LARGE ANODIZED TIN|19|424 +Brand#15|LARGE BRUSHED COPPER|3|424 +Brand#15|LARGE PLATED NICKEL|3|424 +Brand#15|LARGE POLISHED BRASS|36|424 +Brand#15|LARGE POLISHED STEEL|3|424 +Brand#15|LARGE POLISHED STEEL|14|424 +Brand#15|MEDIUM ANODIZED STEEL|49|424 +Brand#15|MEDIUM BURNISHED COPPER|19|424 +Brand#15|MEDIUM BURNISHED TIN|14|424 +Brand#15|PROMO PLATED COPPER|9|424 +Brand#15|PROMO PLATED NICKEL|19|424 +Brand#15|PROMO PLATED TIN|14|424 +Brand#15|PROMO POLISHED BRASS|45|424 +Brand#15|PROMO POLISHED STEEL|49|424 +Brand#15|SMALL ANODIZED BRASS|14|424 +Brand#15|SMALL BRUSHED STEEL|23|424 +Brand#15|SMALL BURNISHED STEEL|36|424 +Brand#15|SMALL PLATED NICKEL|23|424 +Brand#15|SMALL PLATED STEEL|3|424 +Brand#15|SMALL PLATED STEEL|19|424 +Brand#15|SMALL POLISHED COPPER|14|424 +Brand#15|STANDARD BURNISHED COPPER|3|424 +Brand#15|STANDARD BURNISHED STEEL|14|424 +Brand#15|STANDARD PLATED TIN|45|424 +Brand#15|STANDARD PLATED TIN|49|424 +Brand#21|ECONOMY ANODIZED COPPER|36|424 +Brand#21|ECONOMY BURNISHED COPPER|3|424 +Brand#21|LARGE BRUSHED BRASS|9|424 +Brand#21|LARGE BRUSHED COPPER|3|424 +Brand#21|LARGE BURNISHED TIN|14|424 +Brand#21|LARGE PLATED STEEL|23|424 +Brand#21|LARGE PLATED TIN|49|424 +Brand#21|MEDIUM BRUSHED COPPER|19|424 +Brand#21|MEDIUM BURNISHED COPPER|19|424 +Brand#21|MEDIUM BURNISHED STEEL|49|424 +Brand#21|MEDIUM BURNISHED TIN|45|424 +Brand#21|MEDIUM PLATED BRASS|23|424 +Brand#21|MEDIUM PLATED STEEL|3|424 +Brand#21|PROMO BRUSHED COPPER|3|424 +Brand#21|PROMO BRUSHED STEEL|14|424 +Brand#21|PROMO BURNISHED BRASS|3|424 +Brand#21|PROMO BURNISHED COPPER|3|424 +Brand#21|PROMO PLATED TIN|19|424 +Brand#21|PROMO PLATED TIN|36|424 +Brand#21|SMALL ANODIZED COPPER|9|424 +Brand#21|SMALL BRUSHED COPPER|14|424 +Brand#21|SMALL POLISHED TIN|49|424 +Brand#21|STANDARD BRUSHED COPPER|23|424 +Brand#21|STANDARD BRUSHED COPPER|49|424 +Brand#21|STANDARD BURNISHED COPPER|45|424 +Brand#21|STANDARD BURNISHED NICKEL|14|424 +Brand#21|STANDARD PLATED BRASS|3|424 +Brand#21|STANDARD PLATED COPPER|19|424 +Brand#22|ECONOMY ANODIZED BRASS|23|424 +Brand#22|ECONOMY ANODIZED COPPER|19|424 +Brand#22|ECONOMY ANODIZED TIN|23|424 +Brand#22|ECONOMY BRUSHED COPPER|23|424 +Brand#22|ECONOMY BRUSHED COPPER|36|424 +Brand#22|ECONOMY BURNISHED NICKEL|23|424 +Brand#22|ECONOMY PLATED BRASS|36|424 +Brand#22|ECONOMY PLATED NICKEL|3|424 +Brand#22|ECONOMY POLISHED COPPER|14|424 +Brand#22|LARGE BRUSHED COPPER|3|424 +Brand#22|LARGE BRUSHED TIN|3|424 +Brand#22|LARGE BRUSHED TIN|9|424 +Brand#22|LARGE PLATED NICKEL|19|424 +Brand#22|LARGE POLISHED STEEL|49|424 +Brand#22|MEDIUM ANODIZED TIN|3|424 +Brand#22|MEDIUM BRUSHED NICKEL|49|424 +Brand#22|MEDIUM BURNISHED STEEL|3|424 +Brand#22|MEDIUM BURNISHED TIN|14|424 +Brand#22|PROMO ANODIZED BRASS|9|424 +Brand#22|PROMO ANODIZED BRASS|14|424 +Brand#22|PROMO ANODIZED STEEL|23|424 +Brand#22|PROMO ANODIZED TIN|14|424 +Brand#22|PROMO BURNISHED BRASS|19|424 +Brand#22|PROMO PLATED BRASS|45|424 +Brand#22|SMALL ANODIZED BRASS|14|424 +Brand#22|SMALL ANODIZED NICKEL|19|424 +Brand#22|SMALL ANODIZED NICKEL|23|424 +Brand#22|SMALL ANODIZED STEEL|36|424 +Brand#22|SMALL BRUSHED NICKEL|45|424 +Brand#22|SMALL POLISHED BRASS|14|424 +Brand#22|SMALL POLISHED NICKEL|3|424 +Brand#22|STANDARD ANODIZED TIN|19|424 +Brand#22|STANDARD BURNISHED COPPER|9|424 +Brand#22|STANDARD PLATED COPPER|49|424 +Brand#23|ECONOMY ANODIZED NICKEL|49|424 +Brand#23|ECONOMY BURNISHED NICKEL|45|424 +Brand#23|ECONOMY BURNISHED TIN|19|424 +Brand#23|LARGE ANODIZED BRASS|45|424 +Brand#23|LARGE BRUSHED NICKEL|14|424 +Brand#23|LARGE BURNISHED BRASS|23|424 +Brand#23|LARGE POLISHED COPPER|49|424 +Brand#23|MEDIUM ANODIZED NICKEL|14|424 +Brand#23|MEDIUM BRUSHED COPPER|14|424 +Brand#23|MEDIUM BRUSHED TIN|19|424 +Brand#23|MEDIUM BURNISHED TIN|14|424 +Brand#23|MEDIUM PLATED COPPER|3|424 +Brand#23|MEDIUM PLATED NICKEL|49|424 +Brand#23|PROMO ANODIZED COPPER|3|424 +Brand#23|PROMO ANODIZED STEEL|19|424 +Brand#23|PROMO BURNISHED BRASS|3|424 +Brand#23|PROMO BURNISHED STEEL|45|424 +Brand#23|PROMO BURNISHED TIN|14|424 +Brand#23|PROMO PLATED BRASS|49|424 +Brand#23|SMALL BRUSHED BRASS|36|424 +Brand#23|SMALL BRUSHED COPPER|49|424 +Brand#23|SMALL BURNISHED STEEL|45|424 +Brand#23|SMALL POLISHED TIN|19|424 +Brand#23|STANDARD PLATED COPPER|9|424 +Brand#23|STANDARD PLATED COPPER|14|424 +Brand#23|STANDARD PLATED NICKEL|9|424 +Brand#23|STANDARD POLISHED BRASS|36|424 +Brand#23|STANDARD POLISHED NICKEL|14|424 +Brand#24|ECONOMY ANODIZED COPPER|9|424 +Brand#24|ECONOMY BURNISHED TIN|3|424 +Brand#24|ECONOMY PLATED STEEL|49|424 +Brand#24|LARGE BRUSHED STEEL|9|424 +Brand#24|LARGE PLATED BRASS|14|424 +Brand#24|LARGE PLATED TIN|49|424 +Brand#24|LARGE POLISHED STEEL|19|424 +Brand#24|LARGE POLISHED STEEL|36|424 +Brand#24|MEDIUM ANODIZED BRASS|19|424 +Brand#24|MEDIUM ANODIZED NICKEL|3|424 +Brand#24|MEDIUM BURNISHED STEEL|3|424 +Brand#24|MEDIUM BURNISHED TIN|23|424 +Brand#24|MEDIUM PLATED NICKEL|9|424 +Brand#24|PROMO ANODIZED NICKEL|19|424 +Brand#24|PROMO BURNISHED COPPER|36|424 +Brand#24|PROMO BURNISHED NICKEL|36|424 +Brand#24|PROMO PLATED STEEL|36|424 +Brand#24|PROMO POLISHED COPPER|49|424 +Brand#24|SMALL ANODIZED BRASS|45|424 +Brand#24|SMALL ANODIZED COPPER|9|424 +Brand#24|SMALL BRUSHED COPPER|49|424 +Brand#24|SMALL BRUSHED NICKEL|23|424 +Brand#24|SMALL BRUSHED STEEL|23|424 +Brand#24|SMALL BURNISHED TIN|19|424 +Brand#24|SMALL PLATED COPPER|9|424 +Brand#24|SMALL PLATED NICKEL|36|424 +Brand#24|SMALL POLISHED TIN|19|424 +Brand#24|STANDARD ANODIZED COPPER|14|424 +Brand#24|STANDARD BRUSHED COPPER|23|424 +Brand#24|STANDARD BRUSHED TIN|23|424 +Brand#24|STANDARD BURNISHED NICKEL|14|424 +Brand#24|STANDARD PLATED BRASS|36|424 +Brand#24|STANDARD PLATED COPPER|19|424 +Brand#24|STANDARD POLISHED COPPER|14|424 +Brand#25|ECONOMY BURNISHED BRASS|23|424 +Brand#25|ECONOMY PLATED NICKEL|49|424 +Brand#25|ECONOMY PLATED STEEL|49|424 +Brand#25|ECONOMY POLISHED COPPER|19|424 +Brand#25|ECONOMY POLISHED NICKEL|45|424 +Brand#25|ECONOMY POLISHED STEEL|3|424 +Brand#25|LARGE ANODIZED STEEL|49|424 +Brand#25|LARGE BURNISHED BRASS|36|424 +Brand#25|LARGE PLATED NICKEL|14|424 +Brand#25|LARGE PLATED TIN|49|424 +Brand#25|LARGE POLISHED BRASS|3|424 +Brand#25|MEDIUM ANODIZED NICKEL|23|424 +Brand#25|MEDIUM ANODIZED NICKEL|45|424 +Brand#25|MEDIUM ANODIZED STEEL|9|424 +Brand#25|MEDIUM BRUSHED NICKEL|9|424 +Brand#25|MEDIUM BRUSHED STEEL|23|424 +Brand#25|MEDIUM BURNISHED BRASS|36|424 +Brand#25|MEDIUM PLATED COPPER|3|424 +Brand#25|PROMO ANODIZED BRASS|49|424 +Brand#25|PROMO BRUSHED STEEL|19|424 +Brand#25|PROMO BURNISHED NICKEL|19|424 +Brand#25|PROMO PLATED NICKEL|9|424 +Brand#25|SMALL ANODIZED TIN|19|424 +Brand#25|SMALL BRUSHED COPPER|9|424 +Brand#25|SMALL BRUSHED COPPER|19|424 +Brand#25|SMALL PLATED COPPER|23|424 +Brand#25|SMALL POLISHED BRASS|9|424 +Brand#25|SMALL POLISHED TIN|3|424 +Brand#25|STANDARD ANODIZED STEEL|36|424 +Brand#25|STANDARD ANODIZED TIN|36|424 +Brand#25|STANDARD BRUSHED BRASS|19|424 +Brand#25|STANDARD BURNISHED COPPER|3|424 +Brand#25|STANDARD PLATED BRASS|3|424 +Brand#25|STANDARD PLATED BRASS|36|424 +Brand#25|STANDARD POLISHED TIN|45|424 +Brand#31|ECONOMY ANODIZED BRASS|3|424 +Brand#31|ECONOMY BRUSHED COPPER|49|424 +Brand#31|ECONOMY BRUSHED NICKEL|36|424 +Brand#31|ECONOMY BURNISHED TIN|19|424 +Brand#31|ECONOMY POLISHED TIN|3|424 +Brand#31|LARGE ANODIZED NICKEL|36|424 +Brand#31|LARGE BRUSHED NICKEL|23|424 +Brand#31|LARGE BRUSHED STEEL|23|424 +Brand#31|LARGE PLATED COPPER|9|424 +Brand#31|LARGE POLISHED COPPER|49|424 +Brand#31|MEDIUM BRUSHED COPPER|14|424 +Brand#31|MEDIUM BURNISHED STEEL|19|424 +Brand#31|MEDIUM PLATED STEEL|23|424 +Brand#31|PROMO BRUSHED BRASS|23|424 +Brand#31|PROMO PLATED COPPER|3|424 +Brand#31|PROMO PLATED NICKEL|9|424 +Brand#31|PROMO POLISHED COPPER|19|424 +Brand#31|PROMO POLISHED TIN|3|424 +Brand#31|SMALL ANODIZED TIN|36|424 +Brand#31|SMALL BRUSHED NICKEL|14|424 +Brand#31|SMALL BRUSHED STEEL|14|424 +Brand#31|SMALL BURNISHED NICKEL|9|424 +Brand#31|SMALL PLATED COPPER|23|424 +Brand#31|SMALL PLATED COPPER|36|424 +Brand#31|SMALL POLISHED COPPER|49|424 +Brand#31|SMALL POLISHED NICKEL|19|424 +Brand#31|STANDARD ANODIZED BRASS|36|424 +Brand#31|STANDARD BRUSHED NICKEL|49|424 +Brand#31|STANDARD BURNISHED BRASS|3|424 +Brand#31|STANDARD BURNISHED NICKEL|36|424 +Brand#31|STANDARD PLATED NICKEL|19|424 +Brand#32|ECONOMY ANODIZED BRASS|3|424 +Brand#32|ECONOMY BURNISHED NICKEL|3|424 +Brand#32|ECONOMY BURNISHED NICKEL|9|424 +Brand#32|ECONOMY BURNISHED STEEL|9|424 +Brand#32|ECONOMY POLISHED NICKEL|49|424 +Brand#32|ECONOMY POLISHED STEEL|49|424 +Brand#32|LARGE ANODIZED NICKEL|19|424 +Brand#32|LARGE BRUSHED BRASS|49|424 +Brand#32|LARGE PLATED NICKEL|36|424 +Brand#32|LARGE POLISHED STEEL|19|424 +Brand#32|MEDIUM BRUSHED BRASS|23|424 +Brand#32|PROMO ANODIZED COPPER|36|424 +Brand#32|PROMO ANODIZED COPPER|49|424 +Brand#32|PROMO BRUSHED NICKEL|45|424 +Brand#32|PROMO PLATED STEEL|19|424 +Brand#32|PROMO PLATED TIN|3|424 +Brand#32|PROMO POLISHED BRASS|36|424 +Brand#32|PROMO POLISHED COPPER|36|424 +Brand#32|PROMO POLISHED NICKEL|45|424 +Brand#32|PROMO POLISHED STEEL|36|424 +Brand#32|SMALL ANODIZED COPPER|14|424 +Brand#32|SMALL PLATED STEEL|45|424 +Brand#32|STANDARD ANODIZED STEEL|36|424 +Brand#32|STANDARD BRUSHED TIN|45|424 +Brand#32|STANDARD BURNISHED COPPER|49|424 +Brand#32|STANDARD BURNISHED TIN|14|424 +Brand#32|STANDARD PLATED NICKEL|3|424 +Brand#32|STANDARD POLISHED COPPER|3|424 +Brand#32|STANDARD POLISHED NICKEL|9|424 +Brand#32|STANDARD POLISHED STEEL|9|424 +Brand#33|ECONOMY ANODIZED COPPER|45|424 +Brand#33|ECONOMY ANODIZED NICKEL|36|424 +Brand#33|ECONOMY ANODIZED STEEL|49|424 +Brand#33|ECONOMY BRUSHED BRASS|19|424 +Brand#33|ECONOMY BURNISHED BRASS|49|424 +Brand#33|ECONOMY PLATED BRASS|9|424 +Brand#33|ECONOMY PLATED TIN|3|424 +Brand#33|ECONOMY POLISHED STEEL|19|424 +Brand#33|LARGE ANODIZED COPPER|19|424 +Brand#33|LARGE ANODIZED COPPER|45|424 +Brand#33|LARGE BRUSHED COPPER|14|424 +Brand#33|LARGE POLISHED BRASS|45|424 +Brand#33|MEDIUM ANODIZED COPPER|36|424 +Brand#33|MEDIUM ANODIZED STEEL|14|424 +Brand#33|MEDIUM ANODIZED TIN|45|424 +Brand#33|MEDIUM PLATED TIN|19|424 +Brand#33|MEDIUM PLATED TIN|23|424 +Brand#33|PROMO ANODIZED STEEL|9|424 +Brand#33|PROMO BURNISHED COPPER|49|424 +Brand#33|PROMO BURNISHED NICKEL|23|424 +Brand#33|PROMO BURNISHED NICKEL|45|424 +Brand#33|PROMO PLATED BRASS|45|424 +Brand#33|PROMO PLATED NICKEL|23|424 +Brand#33|PROMO PLATED TIN|3|424 +Brand#33|PROMO POLISHED TIN|3|424 +Brand#33|SMALL ANODIZED BRASS|23|424 +Brand#33|SMALL ANODIZED STEEL|45|424 +Brand#33|SMALL ANODIZED TIN|36|424 +Brand#33|SMALL BRUSHED STEEL|14|424 +Brand#33|SMALL BRUSHED STEEL|45|424 +Brand#33|SMALL BURNISHED BRASS|49|424 +Brand#33|STANDARD ANODIZED BRASS|49|424 +Brand#33|STANDARD BRUSHED STEEL|9|424 +Brand#33|STANDARD BRUSHED STEEL|19|424 +Brand#33|STANDARD PLATED COPPER|36|424 +Brand#33|STANDARD PLATED COPPER|49|424 +Brand#33|STANDARD PLATED NICKEL|36|424 +Brand#33|STANDARD POLISHED BRASS|19|424 +Brand#33|STANDARD POLISHED NICKEL|23|424 +Brand#33|STANDARD POLISHED STEEL|23|424 +Brand#34|ECONOMY ANODIZED COPPER|23|424 +Brand#34|ECONOMY ANODIZED TIN|14|424 +Brand#34|ECONOMY BRUSHED TIN|14|424 +Brand#34|ECONOMY BURNISHED TIN|9|424 +Brand#34|ECONOMY PLATED BRASS|9|424 +Brand#34|ECONOMY PLATED TIN|49|424 +Brand#34|ECONOMY POLISHED NICKEL|23|424 +Brand#34|ECONOMY POLISHED TIN|45|424 +Brand#34|LARGE ANODIZED STEEL|36|424 +Brand#34|LARGE BRUSHED BRASS|3|424 +Brand#34|LARGE POLISHED COPPER|9|424 +Brand#34|LARGE POLISHED NICKEL|23|424 +Brand#34|MEDIUM ANODIZED BRASS|23|424 +Brand#34|MEDIUM BRUSHED STEEL|36|424 +Brand#34|MEDIUM BRUSHED TIN|23|424 +Brand#34|MEDIUM BURNISHED NICKEL|3|424 +Brand#34|MEDIUM PLATED BRASS|9|424 +Brand#34|MEDIUM PLATED STEEL|9|424 +Brand#34|SMALL ANODIZED TIN|3|424 +Brand#34|SMALL ANODIZED TIN|36|424 +Brand#34|SMALL PLATED NICKEL|19|424 +Brand#34|SMALL POLISHED NICKEL|9|424 +Brand#34|SMALL POLISHED TIN|19|424 +Brand#34|STANDARD ANODIZED BRASS|23|424 +Brand#34|STANDARD ANODIZED TIN|36|424 +Brand#34|STANDARD BRUSHED COPPER|19|424 +Brand#34|STANDARD BURNISHED COPPER|3|424 +Brand#34|STANDARD PLATED BRASS|49|424 +Brand#34|STANDARD PLATED TIN|19|424 +Brand#35|ECONOMY ANODIZED BRASS|45|424 +Brand#35|ECONOMY ANODIZED BRASS|49|424 +Brand#35|ECONOMY ANODIZED STEEL|19|424 +Brand#35|ECONOMY POLISHED COPPER|14|424 +Brand#35|ECONOMY POLISHED STEEL|9|424 +Brand#35|ECONOMY POLISHED TIN|36|424 +Brand#35|LARGE BRUSHED TIN|19|424 +Brand#35|LARGE PLATED COPPER|9|424 +Brand#35|LARGE POLISHED NICKEL|14|424 +Brand#35|MEDIUM ANODIZED STEEL|45|424 +Brand#35|MEDIUM BRUSHED NICKEL|9|424 +Brand#35|MEDIUM BRUSHED STEEL|3|424 +Brand#35|MEDIUM BURNISHED BRASS|36|424 +Brand#35|MEDIUM BURNISHED BRASS|45|424 +Brand#35|PROMO ANODIZED COPPER|45|424 +Brand#35|PROMO BRUSHED COPPER|14|424 +Brand#35|PROMO BRUSHED STEEL|49|424 +Brand#35|PROMO PLATED COPPER|3|424 +Brand#35|PROMO POLISHED COPPER|23|424 +Brand#35|PROMO POLISHED STEEL|3|424 +Brand#35|PROMO POLISHED STEEL|49|424 +Brand#35|PROMO POLISHED TIN|19|424 +Brand#35|SMALL PLATED BRASS|14|424 +Brand#35|SMALL POLISHED TIN|9|424 +Brand#35|STANDARD ANODIZED STEEL|9|424 +Brand#35|STANDARD ANODIZED STEEL|14|424 +Brand#35|STANDARD BRUSHED NICKEL|9|424 +Brand#35|STANDARD BRUSHED NICKEL|23|424 +Brand#35|STANDARD PLATED NICKEL|3|424 +Brand#35|STANDARD PLATED STEEL|36|424 +Brand#35|STANDARD POLISHED COPPER|23|424 +Brand#35|STANDARD POLISHED NICKEL|3|424 +Brand#35|STANDARD POLISHED TIN|9|424 +Brand#41|ECONOMY ANODIZED BRASS|36|424 +Brand#41|ECONOMY BURNISHED BRASS|45|424 +Brand#41|ECONOMY BURNISHED STEEL|14|424 +Brand#41|ECONOMY PLATED COPPER|23|424 +Brand#41|LARGE ANODIZED STEEL|23|424 +Brand#41|LARGE POLISHED NICKEL|3|424 +Brand#41|LARGE POLISHED TIN|9|424 +Brand#41|MEDIUM ANODIZED TIN|14|424 +Brand#41|MEDIUM BRUSHED COPPER|3|424 +Brand#41|MEDIUM BRUSHED COPPER|49|424 +Brand#41|MEDIUM BRUSHED STEEL|19|424 +Brand#41|MEDIUM BURNISHED BRASS|23|424 +Brand#41|PROMO ANODIZED BRASS|36|424 +Brand#41|PROMO BRUSHED BRASS|3|424 +Brand#41|PROMO BRUSHED BRASS|19|424 +Brand#41|PROMO BRUSHED BRASS|36|424 +Brand#41|PROMO BRUSHED NICKEL|36|424 +Brand#41|PROMO BURNISHED NICKEL|14|424 +Brand#41|PROMO BURNISHED NICKEL|19|424 +Brand#41|PROMO POLISHED BRASS|36|424 +Brand#41|PROMO POLISHED COPPER|3|424 +Brand#41|SMALL ANODIZED STEEL|9|424 +Brand#41|SMALL ANODIZED TIN|14|424 +Brand#41|SMALL POLISHED COPPER|49|424 +Brand#41|SMALL POLISHED TIN|3|424 +Brand#41|STANDARD ANODIZED COPPER|19|424 +Brand#41|STANDARD ANODIZED TIN|23|424 +Brand#41|STANDARD BRUSHED COPPER|23|424 +Brand#41|STANDARD BRUSHED STEEL|23|424 +Brand#41|STANDARD BURNISHED COPPER|9|424 +Brand#41|STANDARD BURNISHED STEEL|19|424 +Brand#41|STANDARD PLATED COPPER|19|424 +Brand#41|STANDARD POLISHED BRASS|23|424 +Brand#41|STANDARD POLISHED COPPER|14|424 +Brand#41|STANDARD POLISHED NICKEL|19|424 +Brand#42|ECONOMY ANODIZED BRASS|45|424 +Brand#42|ECONOMY BRUSHED NICKEL|3|424 +Brand#42|ECONOMY PLATED COPPER|3|424 +Brand#42|ECONOMY PLATED COPPER|36|424 +Brand#42|ECONOMY POLISHED TIN|14|424 +Brand#42|ECONOMY POLISHED TIN|19|424 +Brand#42|LARGE ANODIZED TIN|49|424 +Brand#42|LARGE BURNISHED NICKEL|23|424 +Brand#42|LARGE BURNISHED STEEL|45|424 +Brand#42|LARGE PLATED NICKEL|49|424 +Brand#42|LARGE POLISHED NICKEL|9|424 +Brand#42|LARGE POLISHED NICKEL|49|424 +Brand#42|MEDIUM ANODIZED STEEL|23|424 +Brand#42|MEDIUM BRUSHED STEEL|36|424 +Brand#42|MEDIUM BURNISHED STEEL|36|424 +Brand#42|PROMO ANODIZED NICKEL|36|424 +Brand#42|PROMO ANODIZED TIN|3|424 +Brand#42|PROMO BURNISHED COPPER|23|424 +Brand#42|PROMO POLISHED BRASS|23|424 +Brand#42|PROMO POLISHED NICKEL|9|424 +Brand#42|PROMO POLISHED TIN|19|424 +Brand#42|SMALL BRUSHED BRASS|45|424 +Brand#42|SMALL PLATED BRASS|19|424 +Brand#42|SMALL PLATED BRASS|45|424 +Brand#42|SMALL PLATED NICKEL|49|424 +Brand#42|STANDARD BRUSHED STEEL|19|424 +Brand#42|STANDARD BURNISHED STEEL|36|424 +Brand#42|STANDARD BURNISHED STEEL|45|424 +Brand#42|STANDARD PLATED COPPER|36|424 +Brand#42|STANDARD PLATED STEEL|36|424 +Brand#42|STANDARD POLISHED STEEL|23|424 +Brand#42|STANDARD POLISHED TIN|23|424 +Brand#43|ECONOMY BRUSHED STEEL|45|424 +Brand#43|ECONOMY POLISHED TIN|19|424 +Brand#43|LARGE BRUSHED STEEL|36|424 +Brand#43|LARGE BURNISHED BRASS|23|424 +Brand#43|LARGE BURNISHED COPPER|23|424 +Brand#43|LARGE PLATED BRASS|14|424 +Brand#43|LARGE PLATED STEEL|3|424 +Brand#43|LARGE PLATED STEEL|49|424 +Brand#43|LARGE POLISHED COPPER|45|424 +Brand#43|MEDIUM ANODIZED TIN|19|424 +Brand#43|MEDIUM ANODIZED TIN|49|424 +Brand#43|MEDIUM BRUSHED STEEL|19|424 +Brand#43|MEDIUM BURNISHED TIN|45|424 +Brand#43|MEDIUM PLATED NICKEL|23|424 +Brand#43|MEDIUM PLATED STEEL|14|424 +Brand#43|MEDIUM PLATED TIN|23|424 +Brand#43|PROMO BRUSHED BRASS|49|424 +Brand#43|PROMO PLATED COPPER|19|424 +Brand#43|PROMO PLATED NICKEL|9|424 +Brand#43|PROMO PLATED STEEL|19|424 +Brand#43|PROMO PLATED STEEL|45|424 +Brand#43|SMALL BRUSHED NICKEL|49|424 +Brand#43|SMALL BURNISHED STEEL|36|424 +Brand#43|SMALL PLATED STEEL|14|424 +Brand#43|SMALL POLISHED NICKEL|19|424 +Brand#43|STANDARD BRUSHED TIN|9|424 +Brand#44|ECONOMY ANODIZED STEEL|3|424 +Brand#44|ECONOMY ANODIZED STEEL|19|424 +Brand#44|ECONOMY BRUSHED COPPER|9|424 +Brand#44|ECONOMY BRUSHED TIN|36|424 +Brand#44|ECONOMY PLATED BRASS|23|424 +Brand#44|ECONOMY PLATED STEEL|9|424 +Brand#44|ECONOMY PLATED STEEL|19|424 +Brand#44|ECONOMY POLISHED NICKEL|3|424 +Brand#44|LARGE ANODIZED BRASS|45|424 +Brand#44|LARGE ANODIZED COPPER|23|424 +Brand#44|LARGE ANODIZED NICKEL|23|424 +Brand#44|LARGE BRUSHED BRASS|19|424 +Brand#44|LARGE PLATED TIN|49|424 +Brand#44|MEDIUM BURNISHED NICKEL|45|424 +Brand#44|MEDIUM BURNISHED STEEL|9|424 +Brand#44|MEDIUM PLATED TIN|3|424 +Brand#44|PROMO ANODIZED NICKEL|45|424 +Brand#44|PROMO BRUSHED TIN|36|424 +Brand#44|PROMO BURNISHED BRASS|3|424 +Brand#44|PROMO BURNISHED COPPER|19|424 +Brand#44|PROMO PLATED STEEL|23|424 +Brand#44|PROMO PLATED TIN|36|424 +Brand#44|PROMO POLISHED TIN|36|424 +Brand#44|SMALL ANODIZED COPPER|3|424 +Brand#44|SMALL BRUSHED COPPER|45|424 +Brand#44|SMALL BRUSHED NICKEL|14|424 +Brand#44|SMALL BRUSHED STEEL|36|424 +Brand#44|SMALL BURNISHED NICKEL|49|424 +Brand#44|SMALL BURNISHED TIN|9|424 +Brand#44|SMALL PLATED BRASS|23|424 +Brand#44|SMALL PLATED COPPER|9|424 +Brand#44|SMALL PLATED COPPER|36|424 +Brand#44|SMALL PLATED COPPER|49|424 +Brand#44|SMALL POLISHED BRASS|14|424 +Brand#44|STANDARD BRUSHED COPPER|14|424 +Brand#44|STANDARD BURNISHED BRASS|49|424 +Brand#44|STANDARD BURNISHED COPPER|45|424 +Brand#44|STANDARD PLATED STEEL|36|424 +Brand#44|STANDARD POLISHED BRASS|36|424 +Brand#51|ECONOMY ANODIZED BRASS|36|424 +Brand#51|ECONOMY ANODIZED TIN|14|424 +Brand#51|ECONOMY BRUSHED COPPER|49|424 +Brand#51|ECONOMY PLATED STEEL|3|424 +Brand#51|ECONOMY POLISHED COPPER|23|424 +Brand#51|ECONOMY POLISHED TIN|3|424 +Brand#51|LARGE BRUSHED BRASS|45|424 +Brand#51|LARGE BURNISHED BRASS|23|424 +Brand#51|LARGE BURNISHED BRASS|45|424 +Brand#51|MEDIUM ANODIZED BRASS|36|424 +Brand#51|PROMO ANODIZED COPPER|3|424 +Brand#51|PROMO BRUSHED BRASS|36|424 +Brand#51|PROMO BRUSHED COPPER|14|424 +Brand#51|PROMO BRUSHED TIN|3|424 +Brand#51|PROMO BURNISHED TIN|3|424 +Brand#51|PROMO POLISHED BRASS|49|424 +Brand#51|PROMO POLISHED STEEL|19|424 +Brand#51|SMALL ANODIZED COPPER|36|424 +Brand#51|SMALL ANODIZED NICKEL|14|424 +Brand#51|SMALL ANODIZED STEEL|19|424 +Brand#51|SMALL ANODIZED TIN|36|424 +Brand#51|SMALL BRUSHED COPPER|9|424 +Brand#51|SMALL PLATED NICKEL|14|424 +Brand#51|SMALL PLATED STEEL|45|424 +Brand#51|SMALL PLATED TIN|9|424 +Brand#51|SMALL POLISHED BRASS|9|424 +Brand#51|SMALL POLISHED COPPER|23|424 +Brand#51|SMALL POLISHED STEEL|36|424 +Brand#51|STANDARD ANODIZED STEEL|45|424 +Brand#51|STANDARD BRUSHED NICKEL|19|424 +Brand#51|STANDARD BRUSHED NICKEL|36|424 +Brand#51|STANDARD BRUSHED STEEL|14|424 +Brand#51|STANDARD BURNISHED NICKEL|45|424 +Brand#51|STANDARD BURNISHED STEEL|23|424 +Brand#51|STANDARD BURNISHED TIN|14|424 +Brand#51|STANDARD PLATED COPPER|19|424 +Brand#51|STANDARD POLISHED NICKEL|14|424 +Brand#52|ECONOMY ANODIZED STEEL|3|424 +Brand#52|ECONOMY ANODIZED TIN|9|424 +Brand#52|ECONOMY BRUSHED STEEL|23|424 +Brand#52|ECONOMY PLATED COPPER|3|424 +Brand#52|ECONOMY PLATED NICKEL|45|424 +Brand#52|ECONOMY POLISHED NICKEL|49|424 +Brand#52|ECONOMY POLISHED STEEL|45|424 +Brand#52|LARGE ANODIZED COPPER|45|424 +Brand#52|LARGE BRUSHED STEEL|49|424 +Brand#52|LARGE BURNISHED NICKEL|23|424 +Brand#52|LARGE PLATED TIN|45|424 +Brand#52|LARGE POLISHED TIN|49|424 +Brand#52|MEDIUM ANODIZED COPPER|23|424 +Brand#52|MEDIUM ANODIZED STEEL|49|424 +Brand#52|MEDIUM BRUSHED NICKEL|3|424 +Brand#52|MEDIUM BURNISHED COPPER|9|424 +Brand#52|MEDIUM BURNISHED TIN|14|424 +Brand#52|MEDIUM PLATED NICKEL|49|424 +Brand#52|PROMO ANODIZED COPPER|36|424 +Brand#52|PROMO BRUSHED BRASS|23|424 +Brand#52|PROMO BRUSHED COPPER|49|424 +Brand#52|PROMO BRUSHED STEEL|19|424 +Brand#52|PROMO BRUSHED TIN|9|424 +Brand#52|PROMO BURNISHED BRASS|14|424 +Brand#52|SMALL BURNISHED BRASS|45|424 +Brand#52|SMALL BURNISHED NICKEL|14|424 +Brand#52|SMALL PLATED TIN|19|424 +Brand#52|STANDARD ANODIZED NICKEL|19|424 +Brand#52|STANDARD BRUSHED COPPER|49|424 +Brand#52|STANDARD BRUSHED STEEL|9|424 +Brand#52|STANDARD BRUSHED STEEL|14|424 +Brand#52|STANDARD BURNISHED BRASS|9|424 +Brand#52|STANDARD PLATED TIN|19|424 +Brand#52|STANDARD POLISHED STEEL|23|424 +Brand#53|ECONOMY BRUSHED BRASS|45|424 +Brand#53|ECONOMY BURNISHED NICKEL|23|424 +Brand#53|ECONOMY BURNISHED STEEL|3|424 +Brand#53|LARGE BRUSHED NICKEL|9|424 +Brand#53|LARGE BURNISHED NICKEL|3|424 +Brand#53|LARGE BURNISHED STEEL|9|424 +Brand#53|LARGE POLISHED TIN|19|424 +Brand#53|MEDIUM ANODIZED BRASS|45|424 +Brand#53|MEDIUM BRUSHED BRASS|36|424 +Brand#53|MEDIUM PLATED BRASS|3|424 +Brand#53|MEDIUM PLATED COPPER|19|424 +Brand#53|PROMO ANODIZED NICKEL|3|424 +Brand#53|PROMO ANODIZED STEEL|45|424 +Brand#53|PROMO BRUSHED BRASS|19|424 +Brand#53|PROMO BURNISHED BRASS|3|424 +Brand#53|PROMO PLATED BRASS|14|424 +Brand#53|SMALL ANODIZED TIN|3|424 +Brand#53|SMALL BRUSHED COPPER|3|424 +Brand#53|SMALL BURNISHED BRASS|23|424 +Brand#53|SMALL BURNISHED COPPER|45|424 +Brand#53|SMALL PLATED COPPER|14|424 +Brand#53|STANDARD ANODIZED COPPER|19|424 +Brand#53|STANDARD BURNISHED BRASS|9|424 +Brand#53|STANDARD PLATED BRASS|14|424 +Brand#53|STANDARD PLATED NICKEL|3|424 +Brand#54|ECONOMY BURNISHED COPPER|49|424 +Brand#54|ECONOMY BURNISHED NICKEL|49|424 +Brand#54|ECONOMY BURNISHED STEEL|45|424 +Brand#54|ECONOMY PLATED TIN|49|424 +Brand#54|MEDIUM BRUSHED BRASS|14|424 +Brand#54|MEDIUM BRUSHED STEEL|36|424 +Brand#54|MEDIUM PLATED STEEL|9|424 +Brand#54|PROMO ANODIZED STEEL|49|424 +Brand#54|PROMO BURNISHED BRASS|3|424 +Brand#54|PROMO BURNISHED COPPER|3|424 +Brand#54|PROMO BURNISHED COPPER|49|424 +Brand#54|PROMO PLATED STEEL|36|424 +Brand#54|PROMO POLISHED TIN|19|424 +Brand#54|SMALL BURNISHED BRASS|9|424 +Brand#54|SMALL PLATED STEEL|9|424 +Brand#54|SMALL POLISHED BRASS|45|424 +Brand#54|STANDARD ANODIZED STEEL|9|424 +Brand#54|STANDARD BRUSHED TIN|9|424 +Brand#54|STANDARD BURNISHED BRASS|19|424 +Brand#54|STANDARD BURNISHED BRASS|36|424 +Brand#54|STANDARD BURNISHED TIN|9|424 +Brand#55|ECONOMY ANODIZED NICKEL|45|424 +Brand#55|ECONOMY BURNISHED STEEL|3|424 +Brand#55|ECONOMY PLATED NICKEL|49|424 +Brand#55|ECONOMY PLATED TIN|19|424 +Brand#55|ECONOMY POLISHED BRASS|14|424 +Brand#55|ECONOMY POLISHED STEEL|9|424 +Brand#55|LARGE BURNISHED STEEL|9|424 +Brand#55|LARGE BURNISHED TIN|23|424 +Brand#55|LARGE BURNISHED TIN|36|424 +Brand#55|LARGE PLATED STEEL|14|424 +Brand#55|LARGE POLISHED BRASS|19|424 +Brand#55|LARGE POLISHED STEEL|45|424 +Brand#55|MEDIUM ANODIZED COPPER|49|424 +Brand#55|MEDIUM BRUSHED COPPER|9|424 +Brand#55|MEDIUM BURNISHED BRASS|9|424 +Brand#55|MEDIUM BURNISHED BRASS|49|424 +Brand#55|MEDIUM BURNISHED NICKEL|14|424 +Brand#55|MEDIUM BURNISHED NICKEL|19|424 +Brand#55|MEDIUM BURNISHED STEEL|3|424 +Brand#55|MEDIUM PLATED NICKEL|14|424 +Brand#55|MEDIUM PLATED NICKEL|45|424 +Brand#55|MEDIUM PLATED STEEL|19|424 +Brand#55|MEDIUM PLATED STEEL|36|424 +Brand#55|PROMO ANODIZED COPPER|36|424 +Brand#55|PROMO ANODIZED STEEL|36|424 +Brand#55|PROMO BRUSHED COPPER|23|424 +Brand#55|PROMO BRUSHED TIN|45|424 +Brand#55|PROMO BURNISHED NICKEL|36|424 +Brand#55|PROMO BURNISHED STEEL|19|424 +Brand#55|PROMO PLATED BRASS|23|424 +Brand#55|PROMO PLATED COPPER|23|424 +Brand#55|PROMO PLATED NICKEL|23|424 +Brand#55|PROMO PLATED STEEL|14|424 +Brand#55|SMALL BURNISHED NICKEL|49|424 +Brand#55|SMALL PLATED TIN|36|424 +Brand#55|SMALL POLISHED TIN|23|424 +Brand#55|STANDARD ANODIZED NICKEL|19|424 +Brand#55|STANDARD BRUSHED TIN|45|424 +Brand#55|STANDARD PLATED NICKEL|45|424 +Brand#55|STANDARD POLISHED NICKEL|36|424 +Brand#11|ECONOMY BURNISHED NICKEL|3|423 +Brand#11|ECONOMY POLISHED NICKEL|23|423 +Brand#11|LARGE ANODIZED BRASS|9|423 +Brand#11|LARGE POLISHED COPPER|45|423 +Brand#11|LARGE POLISHED STEEL|19|423 +Brand#11|MEDIUM PLATED TIN|23|423 +Brand#11|PROMO BRUSHED COPPER|45|423 +Brand#11|SMALL BURNISHED COPPER|14|423 +Brand#11|STANDARD BRUSHED COPPER|3|423 +Brand#11|STANDARD BURNISHED BRASS|19|423 +Brand#12|ECONOMY ANODIZED COPPER|19|423 +Brand#12|ECONOMY PLATED COPPER|19|423 +Brand#12|LARGE PLATED NICKEL|23|423 +Brand#12|MEDIUM ANODIZED NICKEL|19|423 +Brand#12|MEDIUM BRUSHED COPPER|36|423 +Brand#12|MEDIUM PLATED BRASS|36|423 +Brand#12|PROMO ANODIZED NICKEL|45|423 +Brand#12|PROMO PLATED TIN|3|423 +Brand#12|SMALL ANODIZED STEEL|45|423 +Brand#12|SMALL BURNISHED TIN|14|423 +Brand#12|STANDARD ANODIZED STEEL|45|423 +Brand#12|STANDARD BRUSHED NICKEL|49|423 +Brand#12|STANDARD BURNISHED TIN|23|423 +Brand#12|STANDARD PLATED TIN|3|423 +Brand#12|STANDARD POLISHED STEEL|9|423 +Brand#13|ECONOMY BURNISHED STEEL|3|423 +Brand#13|ECONOMY BURNISHED TIN|9|423 +Brand#13|ECONOMY POLISHED COPPER|19|423 +Brand#13|LARGE ANODIZED STEEL|23|423 +Brand#13|LARGE PLATED BRASS|23|423 +Brand#13|MEDIUM BURNISHED STEEL|14|423 +Brand#13|MEDIUM PLATED STEEL|9|423 +Brand#13|PROMO ANODIZED STEEL|23|423 +Brand#13|SMALL ANODIZED NICKEL|49|423 +Brand#13|SMALL BRUSHED TIN|9|423 +Brand#13|STANDARD ANODIZED COPPER|14|423 +Brand#13|STANDARD BRUSHED STEEL|19|423 +Brand#13|STANDARD BURNISHED NICKEL|23|423 +Brand#13|STANDARD BURNISHED TIN|9|423 +Brand#13|STANDARD POLISHED STEEL|14|423 +Brand#14|ECONOMY PLATED NICKEL|49|423 +Brand#14|MEDIUM ANODIZED NICKEL|3|423 +Brand#14|MEDIUM BRUSHED COPPER|14|423 +Brand#14|MEDIUM BRUSHED TIN|23|423 +Brand#14|PROMO BURNISHED NICKEL|36|423 +Brand#14|STANDARD ANODIZED TIN|14|423 +Brand#14|STANDARD ANODIZED TIN|36|423 +Brand#14|STANDARD PLATED COPPER|49|423 +Brand#15|ECONOMY ANODIZED STEEL|23|423 +Brand#15|ECONOMY PLATED BRASS|9|423 +Brand#15|ECONOMY POLISHED NICKEL|49|423 +Brand#15|ECONOMY POLISHED STEEL|45|423 +Brand#15|LARGE BRUSHED TIN|19|423 +Brand#15|LARGE BURNISHED TIN|14|423 +Brand#15|LARGE POLISHED STEEL|23|423 +Brand#15|MEDIUM ANODIZED COPPER|3|423 +Brand#15|MEDIUM BRUSHED TIN|3|423 +Brand#15|MEDIUM BURNISHED BRASS|23|423 +Brand#15|MEDIUM BURNISHED NICKEL|36|423 +Brand#15|PROMO ANODIZED NICKEL|45|423 +Brand#15|PROMO BRUSHED BRASS|3|423 +Brand#15|PROMO BURNISHED COPPER|36|423 +Brand#15|SMALL BRUSHED TIN|3|423 +Brand#15|SMALL PLATED STEEL|9|423 +Brand#15|SMALL POLISHED STEEL|9|423 +Brand#15|STANDARD BRUSHED NICKEL|36|423 +Brand#21|LARGE BURNISHED TIN|3|423 +Brand#21|MEDIUM BURNISHED TIN|9|423 +Brand#21|PROMO BURNISHED BRASS|9|423 +Brand#21|SMALL BURNISHED NICKEL|49|423 +Brand#21|SMALL BURNISHED STEEL|9|423 +Brand#21|SMALL POLISHED BRASS|36|423 +Brand#21|SMALL POLISHED BRASS|45|423 +Brand#21|SMALL POLISHED COPPER|3|423 +Brand#21|SMALL POLISHED TIN|9|423 +Brand#22|ECONOMY ANODIZED NICKEL|19|423 +Brand#22|ECONOMY BURNISHED NICKEL|45|423 +Brand#22|ECONOMY PLATED STEEL|23|423 +Brand#22|LARGE PLATED BRASS|19|423 +Brand#22|LARGE POLISHED STEEL|36|423 +Brand#22|MEDIUM BRUSHED COPPER|23|423 +Brand#22|PROMO PLATED COPPER|3|423 +Brand#22|SMALL BURNISHED COPPER|45|423 +Brand#22|SMALL PLATED BRASS|19|423 +Brand#22|STANDARD BRUSHED TIN|45|423 +Brand#22|STANDARD BURNISHED TIN|9|423 +Brand#23|ECONOMY ANODIZED NICKEL|3|423 +Brand#23|LARGE PLATED STEEL|36|423 +Brand#23|MEDIUM BURNISHED COPPER|9|423 +Brand#23|PROMO BRUSHED NICKEL|19|423 +Brand#23|STANDARD ANODIZED COPPER|49|423 +Brand#23|STANDARD BRUSHED BRASS|9|423 +Brand#23|STANDARD BRUSHED BRASS|14|423 +Brand#23|STANDARD BURNISHED TIN|36|423 +Brand#24|MEDIUM ANODIZED COPPER|45|423 +Brand#24|MEDIUM BURNISHED NICKEL|36|423 +Brand#24|MEDIUM BURNISHED TIN|14|423 +Brand#24|PROMO POLISHED NICKEL|14|423 +Brand#24|SMALL ANODIZED COPPER|3|423 +Brand#24|STANDARD PLATED COPPER|49|423 +Brand#24|STANDARD PLATED STEEL|19|423 +Brand#25|ECONOMY ANODIZED BRASS|45|423 +Brand#25|ECONOMY ANODIZED NICKEL|9|423 +Brand#25|ECONOMY BRUSHED NICKEL|49|423 +Brand#25|ECONOMY BURNISHED STEEL|19|423 +Brand#25|ECONOMY POLISHED TIN|49|423 +Brand#25|MEDIUM BURNISHED NICKEL|49|423 +Brand#25|MEDIUM PLATED NICKEL|36|423 +Brand#25|MEDIUM PLATED TIN|49|423 +Brand#25|PROMO BRUSHED STEEL|9|423 +Brand#25|PROMO BURNISHED COPPER|14|423 +Brand#25|PROMO PLATED NICKEL|36|423 +Brand#25|STANDARD BRUSHED STEEL|45|423 +Brand#31|LARGE BURNISHED BRASS|9|423 +Brand#31|MEDIUM PLATED COPPER|9|423 +Brand#31|MEDIUM PLATED COPPER|23|423 +Brand#31|MEDIUM PLATED STEEL|19|423 +Brand#31|PROMO PLATED BRASS|9|423 +Brand#31|SMALL PLATED BRASS|45|423 +Brand#31|STANDARD POLISHED TIN|9|423 +Brand#32|ECONOMY ANODIZED COPPER|19|423 +Brand#32|ECONOMY ANODIZED STEEL|36|423 +Brand#32|ECONOMY PLATED BRASS|19|423 +Brand#32|LARGE POLISHED COPPER|3|423 +Brand#32|LARGE POLISHED COPPER|19|423 +Brand#32|MEDIUM ANODIZED COPPER|49|423 +Brand#32|MEDIUM ANODIZED NICKEL|19|423 +Brand#32|MEDIUM PLATED NICKEL|9|423 +Brand#32|MEDIUM PLATED TIN|14|423 +Brand#32|PROMO ANODIZED STEEL|9|423 +Brand#32|PROMO BRUSHED TIN|36|423 +Brand#32|PROMO PLATED STEEL|23|423 +Brand#32|SMALL ANODIZED NICKEL|3|423 +Brand#32|STANDARD ANODIZED STEEL|23|423 +Brand#32|STANDARD BURNISHED COPPER|19|423 +Brand#33|LARGE BRUSHED NICKEL|49|423 +Brand#33|LARGE BURNISHED TIN|19|423 +Brand#33|LARGE PLATED STEEL|19|423 +Brand#33|LARGE POLISHED COPPER|45|423 +Brand#33|MEDIUM ANODIZED TIN|36|423 +Brand#33|MEDIUM PLATED BRASS|3|423 +Brand#33|PROMO ANODIZED BRASS|45|423 +Brand#33|PROMO ANODIZED TIN|36|423 +Brand#33|PROMO BURNISHED COPPER|14|423 +Brand#33|PROMO POLISHED COPPER|19|423 +Brand#33|SMALL BURNISHED STEEL|45|423 +Brand#33|SMALL POLISHED BRASS|36|423 +Brand#33|STANDARD BURNISHED NICKEL|36|423 +Brand#34|LARGE PLATED COPPER|3|423 +Brand#34|MEDIUM BRUSHED NICKEL|3|423 +Brand#34|PROMO BRUSHED BRASS|3|423 +Brand#34|PROMO PLATED COPPER|23|423 +Brand#35|ECONOMY ANODIZED COPPER|23|423 +Brand#35|LARGE ANODIZED STEEL|14|423 +Brand#35|LARGE BRUSHED TIN|45|423 +Brand#35|MEDIUM BURNISHED TIN|49|423 +Brand#35|PROMO BURNISHED COPPER|36|423 +Brand#35|PROMO POLISHED NICKEL|19|423 +Brand#35|SMALL PLATED COPPER|36|423 +Brand#35|SMALL POLISHED COPPER|36|423 +Brand#35|SMALL POLISHED TIN|19|423 +Brand#35|STANDARD BURNISHED NICKEL|14|423 +Brand#35|STANDARD BURNISHED STEEL|3|423 +Brand#41|ECONOMY BRUSHED NICKEL|19|423 +Brand#41|ECONOMY POLISHED BRASS|3|423 +Brand#41|LARGE ANODIZED NICKEL|14|423 +Brand#41|LARGE PLATED COPPER|49|423 +Brand#41|PROMO BRUSHED BRASS|45|423 +Brand#41|PROMO BRUSHED STEEL|9|423 +Brand#41|PROMO POLISHED NICKEL|36|423 +Brand#41|SMALL BURNISHED NICKEL|14|423 +Brand#41|SMALL PLATED TIN|14|423 +Brand#41|STANDARD PLATED NICKEL|45|423 +Brand#41|STANDARD PLATED TIN|45|423 +Brand#42|ECONOMY BURNISHED NICKEL|49|423 +Brand#42|LARGE ANODIZED BRASS|14|423 +Brand#42|MEDIUM BRUSHED STEEL|14|423 +Brand#42|MEDIUM BURNISHED BRASS|49|423 +Brand#42|PROMO POLISHED COPPER|45|423 +Brand#42|SMALL BURNISHED BRASS|36|423 +Brand#42|STANDARD BRUSHED TIN|9|423 +Brand#43|ECONOMY BRUSHED COPPER|36|423 +Brand#43|LARGE ANODIZED STEEL|9|423 +Brand#43|LARGE POLISHED BRASS|19|423 +Brand#43|MEDIUM BURNISHED BRASS|3|423 +Brand#43|PROMO BRUSHED COPPER|14|423 +Brand#43|SMALL ANODIZED COPPER|45|423 +Brand#43|SMALL BURNISHED NICKEL|14|423 +Brand#43|STANDARD POLISHED COPPER|49|423 +Brand#44|ECONOMY ANODIZED BRASS|49|423 +Brand#44|ECONOMY BURNISHED NICKEL|19|423 +Brand#44|ECONOMY PLATED NICKEL|3|423 +Brand#44|ECONOMY PLATED STEEL|45|423 +Brand#44|LARGE ANODIZED TIN|23|423 +Brand#44|MEDIUM ANODIZED NICKEL|14|423 +Brand#44|MEDIUM ANODIZED STEEL|19|423 +Brand#44|MEDIUM ANODIZED STEEL|36|423 +Brand#44|MEDIUM BRUSHED TIN|14|423 +Brand#44|MEDIUM BURNISHED BRASS|3|423 +Brand#44|MEDIUM BURNISHED NICKEL|14|423 +Brand#44|PROMO ANODIZED BRASS|45|423 +Brand#44|PROMO ANODIZED NICKEL|23|423 +Brand#44|PROMO BRUSHED COPPER|14|423 +Brand#44|PROMO BRUSHED COPPER|36|423 +Brand#51|ECONOMY BURNISHED BRASS|9|423 +Brand#51|ECONOMY BURNISHED TIN|45|423 +Brand#51|LARGE ANODIZED TIN|23|423 +Brand#51|LARGE BRUSHED BRASS|36|423 +Brand#51|LARGE PLATED NICKEL|14|423 +Brand#51|MEDIUM BRUSHED BRASS|45|423 +Brand#51|MEDIUM PLATED COPPER|49|423 +Brand#51|MEDIUM PLATED NICKEL|49|423 +Brand#51|MEDIUM PLATED TIN|23|423 +Brand#51|PROMO ANODIZED COPPER|19|423 +Brand#51|SMALL BRUSHED NICKEL|49|423 +Brand#51|STANDARD BURNISHED COPPER|19|423 +Brand#52|MEDIUM ANODIZED BRASS|45|423 +Brand#52|MEDIUM BURNISHED NICKEL|19|423 +Brand#52|PROMO PLATED TIN|36|423 +Brand#53|ECONOMY ANODIZED COPPER|49|423 +Brand#53|ECONOMY BRUSHED TIN|45|423 +Brand#53|ECONOMY BURNISHED NICKEL|9|423 +Brand#53|MEDIUM BURNISHED BRASS|19|423 +Brand#53|SMALL BURNISHED COPPER|19|423 +Brand#53|SMALL POLISHED NICKEL|19|423 +Brand#53|STANDARD BURNISHED BRASS|23|423 +Brand#54|ECONOMY ANODIZED STEEL|23|423 +Brand#54|LARGE ANODIZED STEEL|3|423 +Brand#54|LARGE BRUSHED COPPER|23|423 +Brand#54|LARGE BRUSHED STEEL|3|423 +Brand#54|LARGE POLISHED STEEL|9|423 +Brand#54|MEDIUM BRUSHED NICKEL|36|423 +Brand#54|PROMO PLATED NICKEL|14|423 +Brand#54|SMALL POLISHED NICKEL|9|423 +Brand#54|STANDARD BRUSHED BRASS|45|423 +Brand#55|LARGE POLISHED NICKEL|45|423 +Brand#55|MEDIUM PLATED COPPER|36|423 +Brand#55|PROMO ANODIZED NICKEL|9|423 +Brand#55|PROMO BRUSHED TIN|9|423 +Brand#55|PROMO BURNISHED TIN|49|423 +Brand#55|PROMO PLATED TIN|9|423 +Brand#55|PROMO POLISHED TIN|49|423 +Brand#55|SMALL BRUSHED TIN|9|423 +Brand#55|SMALL PLATED TIN|9|423 +Brand#55|SMALL POLISHED COPPER|19|423 +Brand#55|STANDARD ANODIZED STEEL|9|423 +Brand#55|STANDARD POLISHED BRASS|23|423 +Brand#11|SMALL PLATED STEEL|45|422 +Brand#11|SMALL POLISHED COPPER|45|422 +Brand#11|STANDARD ANODIZED NICKEL|19|422 +Brand#11|STANDARD POLISHED BRASS|23|422 +Brand#12|ECONOMY PLATED BRASS|36|422 +Brand#12|LARGE BRUSHED NICKEL|23|422 +Brand#15|LARGE ANODIZED NICKEL|45|422 +Brand#21|ECONOMY BURNISHED COPPER|9|422 +Brand#21|SMALL BURNISHED BRASS|49|422 +Brand#22|STANDARD PLATED TIN|45|422 +Brand#23|SMALL PLATED NICKEL|49|422 +Brand#24|LARGE BURNISHED BRASS|3|422 +Brand#24|LARGE PLATED COPPER|9|422 +Brand#24|SMALL BRUSHED STEEL|36|422 +Brand#25|STANDARD PLATED TIN|19|422 +Brand#31|ECONOMY POLISHED NICKEL|23|422 +Brand#31|LARGE PLATED BRASS|23|422 +Brand#31|PROMO PLATED STEEL|9|422 +Brand#31|SMALL BRUSHED TIN|36|422 +Brand#32|MEDIUM BRUSHED NICKEL|23|422 +Brand#32|SMALL BURNISHED STEEL|45|422 +Brand#34|ECONOMY PLATED NICKEL|3|422 +Brand#35|SMALL ANODIZED STEEL|14|422 +Brand#35|STANDARD PLATED COPPER|36|422 +Brand#41|ECONOMY POLISHED STEEL|3|422 +Brand#41|LARGE BRUSHED TIN|36|422 +Brand#42|LARGE PLATED COPPER|3|422 +Brand#43|MEDIUM ANODIZED BRASS|9|422 +Brand#43|MEDIUM PLATED COPPER|3|422 +Brand#51|PROMO PLATED COPPER|23|422 +Brand#53|LARGE BRUSHED BRASS|36|422 +Brand#53|STANDARD BURNISHED COPPER|14|422 +Brand#55|ECONOMY BURNISHED STEEL|23|422 +Brand#25|STANDARD BURNISHED STEEL|45|421 +Brand#33|SMALL PLATED STEEL|3|421 +Brand#34|ECONOMY POLISHED BRASS|49|421 +Brand#35|ECONOMY ANODIZED STEEL|49|421 +Brand#35|LARGE BURNISHED TIN|45|421 +Brand#35|PROMO POLISHED BRASS|9|421 +Brand#11|ECONOMY ANODIZED BRASS|36|420 +Brand#11|ECONOMY ANODIZED COPPER|45|420 +Brand#11|ECONOMY BRUSHED COPPER|19|420 +Brand#11|ECONOMY BRUSHED STEEL|9|420 +Brand#11|ECONOMY PLATED TIN|9|420 +Brand#11|ECONOMY POLISHED BRASS|49|420 +Brand#11|ECONOMY POLISHED NICKEL|19|420 +Brand#11|LARGE ANODIZED STEEL|19|420 +Brand#11|LARGE BRUSHED COPPER|36|420 +Brand#11|LARGE BURNISHED COPPER|9|420 +Brand#11|LARGE PLATED BRASS|14|420 +Brand#11|LARGE PLATED COPPER|9|420 +Brand#11|LARGE PLATED TIN|9|420 +Brand#11|MEDIUM ANODIZED NICKEL|9|420 +Brand#11|MEDIUM BRUSHED NICKEL|14|420 +Brand#11|MEDIUM BRUSHED STEEL|19|420 +Brand#11|MEDIUM BURNISHED COPPER|14|420 +Brand#11|MEDIUM BURNISHED COPPER|36|420 +Brand#11|MEDIUM PLATED STEEL|49|420 +Brand#11|PROMO ANODIZED NICKEL|3|420 +Brand#11|PROMO BURNISHED STEEL|36|420 +Brand#11|PROMO PLATED TIN|14|420 +Brand#11|SMALL ANODIZED BRASS|23|420 +Brand#11|SMALL ANODIZED COPPER|49|420 +Brand#11|SMALL ANODIZED STEEL|45|420 +Brand#11|SMALL BRUSHED COPPER|45|420 +Brand#11|SMALL POLISHED COPPER|36|420 +Brand#11|STANDARD ANODIZED BRASS|49|420 +Brand#11|STANDARD ANODIZED NICKEL|45|420 +Brand#11|STANDARD ANODIZED TIN|9|420 +Brand#11|STANDARD BURNISHED BRASS|9|420 +Brand#11|STANDARD BURNISHED COPPER|49|420 +Brand#11|STANDARD PLATED NICKEL|49|420 +Brand#11|STANDARD PLATED STEEL|49|420 +Brand#11|STANDARD PLATED TIN|49|420 +Brand#12|ECONOMY BRUSHED BRASS|3|420 +Brand#12|ECONOMY BRUSHED COPPER|3|420 +Brand#12|ECONOMY BRUSHED COPPER|14|420 +Brand#12|ECONOMY PLATED NICKEL|3|420 +Brand#12|ECONOMY PLATED STEEL|14|420 +Brand#12|LARGE ANODIZED BRASS|19|420 +Brand#12|LARGE BRUSHED COPPER|23|420 +Brand#12|LARGE BURNISHED NICKEL|14|420 +Brand#12|LARGE BURNISHED STEEL|23|420 +Brand#12|LARGE PLATED TIN|19|420 +Brand#12|LARGE POLISHED STEEL|19|420 +Brand#12|MEDIUM ANODIZED COPPER|49|420 +Brand#12|MEDIUM BRUSHED NICKEL|19|420 +Brand#12|MEDIUM BRUSHED TIN|9|420 +Brand#12|MEDIUM PLATED COPPER|49|420 +Brand#12|MEDIUM PLATED NICKEL|45|420 +Brand#12|PROMO ANODIZED NICKEL|23|420 +Brand#12|PROMO ANODIZED STEEL|49|420 +Brand#12|PROMO BURNISHED STEEL|3|420 +Brand#12|PROMO POLISHED TIN|3|420 +Brand#12|SMALL ANODIZED TIN|14|420 +Brand#12|SMALL PLATED STEEL|45|420 +Brand#12|SMALL PLATED STEEL|49|420 +Brand#12|STANDARD BRUSHED TIN|19|420 +Brand#12|STANDARD BURNISHED NICKEL|9|420 +Brand#12|STANDARD BURNISHED NICKEL|19|420 +Brand#13|ECONOMY ANODIZED BRASS|23|420 +Brand#13|ECONOMY ANODIZED STEEL|49|420 +Brand#13|ECONOMY POLISHED BRASS|36|420 +Brand#13|ECONOMY POLISHED STEEL|3|420 +Brand#13|ECONOMY POLISHED TIN|3|420 +Brand#13|LARGE ANODIZED NICKEL|45|420 +Brand#13|LARGE BRUSHED STEEL|45|420 +Brand#13|LARGE BURNISHED BRASS|49|420 +Brand#13|LARGE BURNISHED STEEL|49|420 +Brand#13|LARGE BURNISHED TIN|36|420 +Brand#13|LARGE POLISHED BRASS|36|420 +Brand#13|LARGE POLISHED TIN|49|420 +Brand#13|MEDIUM ANODIZED BRASS|19|420 +Brand#13|MEDIUM PLATED TIN|14|420 +Brand#13|PROMO ANODIZED BRASS|3|420 +Brand#13|PROMO ANODIZED NICKEL|9|420 +Brand#13|PROMO ANODIZED NICKEL|36|420 +Brand#13|PROMO ANODIZED STEEL|9|420 +Brand#13|PROMO BRUSHED COPPER|23|420 +Brand#13|PROMO BRUSHED TIN|19|420 +Brand#13|PROMO BURNISHED NICKEL|36|420 +Brand#13|PROMO BURNISHED STEEL|14|420 +Brand#13|PROMO PLATED BRASS|19|420 +Brand#13|PROMO PLATED BRASS|23|420 +Brand#13|PROMO PLATED COPPER|36|420 +Brand#13|PROMO PLATED NICKEL|45|420 +Brand#13|PROMO PLATED TIN|3|420 +Brand#13|PROMO POLISHED TIN|14|420 +Brand#13|SMALL ANODIZED COPPER|19|420 +Brand#13|SMALL ANODIZED COPPER|36|420 +Brand#13|SMALL ANODIZED NICKEL|3|420 +Brand#13|SMALL ANODIZED NICKEL|14|420 +Brand#13|SMALL BURNISHED TIN|3|420 +Brand#13|SMALL PLATED NICKEL|19|420 +Brand#13|SMALL POLISHED BRASS|14|420 +Brand#13|SMALL POLISHED TIN|19|420 +Brand#13|STANDARD ANODIZED NICKEL|23|420 +Brand#13|STANDARD BURNISHED BRASS|9|420 +Brand#13|STANDARD BURNISHED BRASS|23|420 +Brand#13|STANDARD BURNISHED TIN|36|420 +Brand#13|STANDARD PLATED COPPER|23|420 +Brand#14|ECONOMY BRUSHED NICKEL|3|420 +Brand#14|ECONOMY BURNISHED COPPER|14|420 +Brand#14|ECONOMY PLATED COPPER|49|420 +Brand#14|LARGE ANODIZED TIN|9|420 +Brand#14|LARGE PLATED COPPER|3|420 +Brand#14|LARGE POLISHED NICKEL|9|420 +Brand#14|LARGE POLISHED TIN|23|420 +Brand#14|MEDIUM BRUSHED STEEL|14|420 +Brand#14|MEDIUM BRUSHED STEEL|49|420 +Brand#14|MEDIUM BRUSHED TIN|19|420 +Brand#14|MEDIUM BURNISHED STEEL|45|420 +Brand#14|MEDIUM PLATED STEEL|14|420 +Brand#14|PROMO ANODIZED COPPER|49|420 +Brand#14|PROMO ANODIZED STEEL|45|420 +Brand#14|PROMO BURNISHED BRASS|49|420 +Brand#14|PROMO BURNISHED TIN|3|420 +Brand#14|SMALL ANODIZED BRASS|49|420 +Brand#14|SMALL ANODIZED STEEL|23|420 +Brand#14|SMALL PLATED BRASS|23|420 +Brand#14|SMALL POLISHED BRASS|19|420 +Brand#14|SMALL POLISHED BRASS|36|420 +Brand#14|SMALL POLISHED NICKEL|49|420 +Brand#14|STANDARD ANODIZED COPPER|14|420 +Brand#14|STANDARD BURNISHED COPPER|36|420 +Brand#14|STANDARD PLATED NICKEL|23|420 +Brand#14|STANDARD PLATED STEEL|14|420 +Brand#14|STANDARD PLATED TIN|45|420 +Brand#14|STANDARD POLISHED NICKEL|36|420 +Brand#15|ECONOMY ANODIZED COPPER|3|420 +Brand#15|ECONOMY ANODIZED NICKEL|36|420 +Brand#15|ECONOMY BRUSHED NICKEL|49|420 +Brand#15|ECONOMY BRUSHED STEEL|23|420 +Brand#15|ECONOMY BRUSHED STEEL|36|420 +Brand#15|ECONOMY BURNISHED NICKEL|49|420 +Brand#15|ECONOMY POLISHED NICKEL|36|420 +Brand#15|ECONOMY POLISHED STEEL|9|420 +Brand#15|LARGE ANODIZED BRASS|14|420 +Brand#15|LARGE ANODIZED NICKEL|3|420 +Brand#15|LARGE ANODIZED TIN|45|420 +Brand#15|LARGE BRUSHED COPPER|36|420 +Brand#15|LARGE BURNISHED TIN|9|420 +Brand#15|LARGE BURNISHED TIN|23|420 +Brand#15|LARGE PLATED STEEL|23|420 +Brand#15|MEDIUM BRUSHED STEEL|45|420 +Brand#15|MEDIUM BRUSHED TIN|49|420 +Brand#15|MEDIUM BURNISHED TIN|19|420 +Brand#15|MEDIUM PLATED STEEL|9|420 +Brand#15|PROMO ANODIZED COPPER|49|420 +Brand#15|PROMO ANODIZED NICKEL|3|420 +Brand#15|PROMO ANODIZED NICKEL|23|420 +Brand#15|PROMO BRUSHED NICKEL|3|420 +Brand#15|PROMO BRUSHED STEEL|49|420 +Brand#15|PROMO BURNISHED COPPER|19|420 +Brand#15|PROMO PLATED NICKEL|49|420 +Brand#15|PROMO POLISHED STEEL|14|420 +Brand#15|SMALL ANODIZED COPPER|9|420 +Brand#15|SMALL ANODIZED COPPER|36|420 +Brand#15|SMALL BRUSHED NICKEL|14|420 +Brand#15|SMALL BURNISHED NICKEL|14|420 +Brand#15|SMALL BURNISHED STEEL|9|420 +Brand#15|STANDARD BURNISHED NICKEL|36|420 +Brand#15|STANDARD BURNISHED STEEL|9|420 +Brand#15|STANDARD PLATED STEEL|45|420 +Brand#15|STANDARD POLISHED BRASS|14|420 +Brand#15|STANDARD POLISHED COPPER|19|420 +Brand#15|STANDARD POLISHED STEEL|9|420 +Brand#15|STANDARD POLISHED TIN|3|420 +Brand#21|ECONOMY ANODIZED COPPER|49|420 +Brand#21|ECONOMY ANODIZED STEEL|19|420 +Brand#21|ECONOMY ANODIZED STEEL|45|420 +Brand#21|ECONOMY BRUSHED STEEL|19|420 +Brand#21|ECONOMY BURNISHED BRASS|9|420 +Brand#21|ECONOMY BURNISHED BRASS|36|420 +Brand#21|ECONOMY PLATED BRASS|19|420 +Brand#21|ECONOMY POLISHED COPPER|49|420 +Brand#21|ECONOMY POLISHED NICKEL|19|420 +Brand#21|ECONOMY POLISHED STEEL|3|420 +Brand#21|ECONOMY POLISHED TIN|23|420 +Brand#21|LARGE ANODIZED BRASS|3|420 +Brand#21|LARGE BRUSHED BRASS|23|420 +Brand#21|LARGE BRUSHED COPPER|9|420 +Brand#21|LARGE BRUSHED NICKEL|45|420 +Brand#21|LARGE BRUSHED TIN|3|420 +Brand#21|LARGE BURNISHED BRASS|49|420 +Brand#21|LARGE PLATED COPPER|9|420 +Brand#21|LARGE PLATED COPPER|23|420 +Brand#21|LARGE PLATED COPPER|36|420 +Brand#21|LARGE POLISHED NICKEL|45|420 +Brand#21|MEDIUM ANODIZED NICKEL|45|420 +Brand#21|MEDIUM ANODIZED STEEL|3|420 +Brand#21|MEDIUM BRUSHED NICKEL|9|420 +Brand#21|MEDIUM BURNISHED BRASS|3|420 +Brand#21|PROMO ANODIZED BRASS|23|420 +Brand#21|PROMO ANODIZED STEEL|36|420 +Brand#21|PROMO BRUSHED STEEL|3|420 +Brand#21|PROMO BRUSHED TIN|49|420 +Brand#21|PROMO BURNISHED COPPER|23|420 +Brand#21|PROMO BURNISHED NICKEL|23|420 +Brand#21|PROMO PLATED TIN|49|420 +Brand#21|PROMO POLISHED COPPER|36|420 +Brand#21|SMALL ANODIZED STEEL|23|420 +Brand#21|SMALL BRUSHED BRASS|36|420 +Brand#21|SMALL BURNISHED COPPER|9|420 +Brand#21|STANDARD BRUSHED TIN|3|420 +Brand#21|STANDARD BURNISHED STEEL|9|420 +Brand#21|STANDARD POLISHED STEEL|49|420 +Brand#22|ECONOMY BRUSHED BRASS|14|420 +Brand#22|ECONOMY BRUSHED BRASS|49|420 +Brand#22|ECONOMY BURNISHED COPPER|9|420 +Brand#22|ECONOMY BURNISHED NICKEL|19|420 +Brand#22|ECONOMY BURNISHED STEEL|45|420 +Brand#22|ECONOMY PLATED NICKEL|45|420 +Brand#22|LARGE BRUSHED TIN|49|420 +Brand#22|LARGE BURNISHED TIN|3|420 +Brand#22|LARGE PLATED BRASS|23|420 +Brand#22|LARGE POLISHED COPPER|3|420 +Brand#22|LARGE POLISHED COPPER|49|420 +Brand#22|MEDIUM ANODIZED STEEL|3|420 +Brand#22|MEDIUM ANODIZED TIN|23|420 +Brand#22|MEDIUM BRUSHED NICKEL|3|420 +Brand#22|MEDIUM BRUSHED TIN|23|420 +Brand#22|MEDIUM BURNISHED BRASS|49|420 +Brand#22|MEDIUM BURNISHED STEEL|14|420 +Brand#22|MEDIUM BURNISHED STEEL|19|420 +Brand#22|PROMO BRUSHED STEEL|36|420 +Brand#22|PROMO BURNISHED COPPER|19|420 +Brand#22|PROMO PLATED BRASS|3|420 +Brand#22|PROMO POLISHED NICKEL|19|420 +Brand#22|PROMO POLISHED NICKEL|36|420 +Brand#22|SMALL ANODIZED STEEL|19|420 +Brand#22|SMALL ANODIZED TIN|3|420 +Brand#22|SMALL BRUSHED COPPER|49|420 +Brand#22|SMALL BRUSHED TIN|14|420 +Brand#22|SMALL PLATED TIN|49|420 +Brand#22|SMALL POLISHED COPPER|19|420 +Brand#22|SMALL POLISHED STEEL|9|420 +Brand#22|STANDARD ANODIZED BRASS|3|420 +Brand#22|STANDARD BURNISHED STEEL|9|420 +Brand#22|STANDARD PLATED BRASS|14|420 +Brand#22|STANDARD PLATED BRASS|19|420 +Brand#23|ECONOMY BRUSHED COPPER|14|420 +Brand#23|ECONOMY BURNISHED COPPER|23|420 +Brand#23|ECONOMY PLATED BRASS|49|420 +Brand#23|ECONOMY PLATED STEEL|14|420 +Brand#23|ECONOMY PLATED STEEL|36|420 +Brand#23|LARGE ANODIZED STEEL|49|420 +Brand#23|LARGE BRUSHED STEEL|36|420 +Brand#23|LARGE BURNISHED BRASS|9|420 +Brand#23|LARGE BURNISHED BRASS|49|420 +Brand#23|LARGE BURNISHED NICKEL|49|420 +Brand#23|LARGE BURNISHED STEEL|36|420 +Brand#23|LARGE POLISHED NICKEL|45|420 +Brand#23|LARGE POLISHED STEEL|19|420 +Brand#23|MEDIUM ANODIZED STEEL|23|420 +Brand#23|MEDIUM ANODIZED TIN|49|420 +Brand#23|MEDIUM BRUSHED NICKEL|3|420 +Brand#23|MEDIUM BRUSHED NICKEL|14|420 +Brand#23|MEDIUM BURNISHED BRASS|19|420 +Brand#23|MEDIUM BURNISHED COPPER|49|420 +Brand#23|MEDIUM PLATED COPPER|14|420 +Brand#23|MEDIUM PLATED NICKEL|14|420 +Brand#23|PROMO BRUSHED TIN|45|420 +Brand#23|PROMO PLATED TIN|14|420 +Brand#23|PROMO POLISHED NICKEL|19|420 +Brand#23|PROMO POLISHED STEEL|9|420 +Brand#23|SMALL ANODIZED COPPER|36|420 +Brand#23|SMALL POLISHED COPPER|9|420 +Brand#23|SMALL POLISHED STEEL|19|420 +Brand#23|SMALL POLISHED TIN|9|420 +Brand#23|STANDARD ANODIZED STEEL|14|420 +Brand#23|STANDARD ANODIZED TIN|36|420 +Brand#23|STANDARD BURNISHED BRASS|45|420 +Brand#23|STANDARD BURNISHED NICKEL|9|420 +Brand#23|STANDARD PLATED NICKEL|45|420 +Brand#23|STANDARD PLATED TIN|19|420 +Brand#24|ECONOMY ANODIZED BRASS|36|420 +Brand#24|ECONOMY ANODIZED STEEL|19|420 +Brand#24|ECONOMY ANODIZED TIN|9|420 +Brand#24|ECONOMY BURNISHED TIN|14|420 +Brand#24|ECONOMY BURNISHED TIN|36|420 +Brand#24|ECONOMY PLATED STEEL|9|420 +Brand#24|ECONOMY POLISHED STEEL|14|420 +Brand#24|LARGE ANODIZED BRASS|49|420 +Brand#24|LARGE ANODIZED TIN|36|420 +Brand#24|LARGE BURNISHED NICKEL|3|420 +Brand#24|LARGE BURNISHED STEEL|23|420 +Brand#24|LARGE PLATED STEEL|49|420 +Brand#24|LARGE POLISHED BRASS|19|420 +Brand#24|MEDIUM ANODIZED NICKEL|36|420 +Brand#24|MEDIUM ANODIZED STEEL|19|420 +Brand#24|MEDIUM BRUSHED TIN|23|420 +Brand#24|MEDIUM PLATED TIN|9|420 +Brand#24|PROMO PLATED BRASS|9|420 +Brand#24|SMALL ANODIZED NICKEL|45|420 +Brand#24|SMALL ANODIZED TIN|14|420 +Brand#24|SMALL ANODIZED TIN|45|420 +Brand#24|SMALL BRUSHED NICKEL|14|420 +Brand#24|SMALL BURNISHED NICKEL|19|420 +Brand#24|SMALL PLATED NICKEL|19|420 +Brand#24|SMALL POLISHED STEEL|9|420 +Brand#24|STANDARD ANODIZED COPPER|19|420 +Brand#24|STANDARD ANODIZED TIN|9|420 +Brand#24|STANDARD BRUSHED NICKEL|14|420 +Brand#24|STANDARD PLATED TIN|19|420 +Brand#25|ECONOMY ANODIZED NICKEL|3|420 +Brand#25|ECONOMY BRUSHED COPPER|9|420 +Brand#25|ECONOMY BRUSHED TIN|49|420 +Brand#25|ECONOMY PLATED BRASS|19|420 +Brand#25|ECONOMY PLATED COPPER|19|420 +Brand#25|ECONOMY PLATED TIN|23|420 +Brand#25|ECONOMY POLISHED COPPER|3|420 +Brand#25|ECONOMY POLISHED STEEL|36|420 +Brand#25|LARGE BURNISHED COPPER|49|420 +Brand#25|MEDIUM ANODIZED STEEL|14|420 +Brand#25|MEDIUM BRUSHED TIN|45|420 +Brand#25|MEDIUM BURNISHED BRASS|9|420 +Brand#25|MEDIUM BURNISHED NICKEL|45|420 +Brand#25|MEDIUM PLATED COPPER|19|420 +Brand#25|PROMO ANODIZED NICKEL|3|420 +Brand#25|PROMO BRUSHED COPPER|19|420 +Brand#25|PROMO BRUSHED NICKEL|23|420 +Brand#25|PROMO BURNISHED BRASS|19|420 +Brand#25|PROMO PLATED BRASS|3|420 +Brand#25|SMALL ANODIZED STEEL|19|420 +Brand#25|SMALL BURNISHED BRASS|19|420 +Brand#25|SMALL BURNISHED NICKEL|36|420 +Brand#25|SMALL BURNISHED STEEL|23|420 +Brand#25|SMALL POLISHED COPPER|19|420 +Brand#25|STANDARD ANODIZED BRASS|45|420 +Brand#25|STANDARD ANODIZED COPPER|23|420 +Brand#25|STANDARD BRUSHED BRASS|23|420 +Brand#25|STANDARD BRUSHED COPPER|49|420 +Brand#25|STANDARD BURNISHED STEEL|49|420 +Brand#25|STANDARD BURNISHED TIN|3|420 +Brand#25|STANDARD POLISHED COPPER|3|420 +Brand#25|STANDARD POLISHED TIN|23|420 +Brand#31|ECONOMY ANODIZED BRASS|36|420 +Brand#31|ECONOMY ANODIZED COPPER|3|420 +Brand#31|ECONOMY ANODIZED STEEL|49|420 +Brand#31|ECONOMY BRUSHED STEEL|3|420 +Brand#31|ECONOMY BURNISHED NICKEL|14|420 +Brand#31|ECONOMY BURNISHED NICKEL|19|420 +Brand#31|ECONOMY PLATED STEEL|14|420 +Brand#31|ECONOMY PLATED STEEL|36|420 +Brand#31|ECONOMY POLISHED TIN|19|420 +Brand#31|LARGE ANODIZED NICKEL|3|420 +Brand#31|LARGE ANODIZED TIN|19|420 +Brand#31|LARGE BRUSHED NICKEL|14|420 +Brand#31|LARGE PLATED BRASS|49|420 +Brand#31|MEDIUM ANODIZED NICKEL|9|420 +Brand#31|MEDIUM BRUSHED BRASS|14|420 +Brand#31|MEDIUM BRUSHED BRASS|49|420 +Brand#31|MEDIUM BRUSHED TIN|23|420 +Brand#31|MEDIUM BURNISHED TIN|14|420 +Brand#31|MEDIUM BURNISHED TIN|23|420 +Brand#31|MEDIUM PLATED COPPER|36|420 +Brand#31|PROMO ANODIZED STEEL|49|420 +Brand#31|PROMO BRUSHED NICKEL|45|420 +Brand#31|PROMO PLATED COPPER|19|420 +Brand#31|PROMO POLISHED BRASS|9|420 +Brand#31|SMALL BRUSHED NICKEL|45|420 +Brand#31|SMALL BURNISHED BRASS|14|420 +Brand#31|SMALL PLATED STEEL|3|420 +Brand#31|SMALL PLATED TIN|14|420 +Brand#31|SMALL POLISHED BRASS|23|420 +Brand#31|SMALL POLISHED STEEL|49|420 +Brand#31|STANDARD BRUSHED BRASS|9|420 +Brand#31|STANDARD BURNISHED COPPER|3|420 +Brand#31|STANDARD BURNISHED COPPER|14|420 +Brand#31|STANDARD PLATED NICKEL|45|420 +Brand#31|STANDARD POLISHED NICKEL|36|420 +Brand#31|STANDARD POLISHED NICKEL|45|420 +Brand#32|ECONOMY ANODIZED COPPER|3|420 +Brand#32|ECONOMY ANODIZED NICKEL|3|420 +Brand#32|ECONOMY ANODIZED NICKEL|45|420 +Brand#32|ECONOMY BRUSHED COPPER|23|420 +Brand#32|ECONOMY POLISHED BRASS|19|420 +Brand#32|ECONOMY POLISHED COPPER|49|420 +Brand#32|LARGE ANODIZED TIN|45|420 +Brand#32|LARGE BRUSHED COPPER|49|420 +Brand#32|LARGE BRUSHED STEEL|49|420 +Brand#32|LARGE BURNISHED BRASS|36|420 +Brand#32|LARGE BURNISHED TIN|45|420 +Brand#32|LARGE PLATED COPPER|9|420 +Brand#32|LARGE POLISHED COPPER|23|420 +Brand#32|LARGE POLISHED NICKEL|45|420 +Brand#32|MEDIUM ANODIZED COPPER|14|420 +Brand#32|MEDIUM ANODIZED NICKEL|23|420 +Brand#32|MEDIUM BRUSHED STEEL|36|420 +Brand#32|MEDIUM PLATED NICKEL|3|420 +Brand#32|MEDIUM PLATED NICKEL|14|420 +Brand#32|MEDIUM PLATED NICKEL|45|420 +Brand#32|MEDIUM PLATED NICKEL|49|420 +Brand#32|MEDIUM PLATED STEEL|14|420 +Brand#32|PROMO ANODIZED BRASS|14|420 +Brand#32|PROMO BRUSHED STEEL|45|420 +Brand#32|PROMO BURNISHED NICKEL|23|420 +Brand#32|PROMO BURNISHED STEEL|23|420 +Brand#32|PROMO POLISHED BRASS|19|420 +Brand#32|SMALL ANODIZED BRASS|49|420 +Brand#32|SMALL ANODIZED COPPER|9|420 +Brand#32|SMALL ANODIZED NICKEL|49|420 +Brand#32|SMALL ANODIZED STEEL|36|420 +Brand#32|SMALL BRUSHED COPPER|19|420 +Brand#32|SMALL BURNISHED NICKEL|14|420 +Brand#32|SMALL BURNISHED STEEL|19|420 +Brand#32|SMALL BURNISHED TIN|9|420 +Brand#32|SMALL PLATED NICKEL|3|420 +Brand#32|SMALL POLISHED COPPER|45|420 +Brand#32|STANDARD ANODIZED BRASS|9|420 +Brand#32|STANDARD ANODIZED TIN|3|420 +Brand#32|STANDARD BRUSHED STEEL|45|420 +Brand#32|STANDARD PLATED NICKEL|49|420 +Brand#32|STANDARD POLISHED COPPER|9|420 +Brand#33|ECONOMY BRUSHED NICKEL|3|420 +Brand#33|ECONOMY BURNISHED NICKEL|49|420 +Brand#33|ECONOMY PLATED NICKEL|9|420 +Brand#33|ECONOMY POLISHED COPPER|3|420 +Brand#33|LARGE BRUSHED STEEL|9|420 +Brand#33|LARGE BURNISHED COPPER|36|420 +Brand#33|LARGE PLATED COPPER|9|420 +Brand#33|LARGE POLISHED COPPER|36|420 +Brand#33|LARGE POLISHED TIN|3|420 +Brand#33|MEDIUM ANODIZED BRASS|45|420 +Brand#33|MEDIUM BRUSHED NICKEL|36|420 +Brand#33|PROMO BRUSHED NICKEL|14|420 +Brand#33|PROMO BRUSHED NICKEL|19|420 +Brand#33|PROMO BRUSHED STEEL|14|420 +Brand#33|PROMO BURNISHED BRASS|23|420 +Brand#33|PROMO BURNISHED BRASS|49|420 +Brand#33|PROMO BURNISHED STEEL|23|420 +Brand#33|PROMO PLATED NICKEL|49|420 +Brand#33|PROMO PLATED STEEL|3|420 +Brand#33|PROMO PLATED STEEL|45|420 +Brand#33|SMALL ANODIZED STEEL|19|420 +Brand#33|SMALL ANODIZED TIN|3|420 +Brand#33|SMALL BRUSHED COPPER|3|420 +Brand#33|SMALL BRUSHED NICKEL|45|420 +Brand#33|SMALL BRUSHED TIN|9|420 +Brand#33|SMALL BURNISHED STEEL|19|420 +Brand#33|SMALL BURNISHED TIN|36|420 +Brand#33|SMALL PLATED COPPER|9|420 +Brand#33|SMALL PLATED NICKEL|14|420 +Brand#33|SMALL POLISHED COPPER|9|420 +Brand#33|STANDARD ANODIZED BRASS|45|420 +Brand#33|STANDARD ANODIZED NICKEL|9|420 +Brand#33|STANDARD ANODIZED NICKEL|49|420 +Brand#33|STANDARD BURNISHED COPPER|19|420 +Brand#33|STANDARD PLATED COPPER|9|420 +Brand#33|STANDARD PLATED STEEL|14|420 +Brand#33|STANDARD PLATED TIN|23|420 +Brand#33|STANDARD PLATED TIN|45|420 +Brand#33|STANDARD POLISHED TIN|36|420 +Brand#34|ECONOMY ANODIZED COPPER|36|420 +Brand#34|ECONOMY ANODIZED NICKEL|23|420 +Brand#34|ECONOMY ANODIZED STEEL|19|420 +Brand#34|ECONOMY BRUSHED BRASS|3|420 +Brand#34|ECONOMY BRUSHED STEEL|45|420 +Brand#34|ECONOMY BURNISHED BRASS|3|420 +Brand#34|ECONOMY BURNISHED NICKEL|49|420 +Brand#34|ECONOMY PLATED STEEL|14|420 +Brand#34|ECONOMY POLISHED COPPER|14|420 +Brand#34|LARGE ANODIZED NICKEL|45|420 +Brand#34|LARGE ANODIZED TIN|49|420 +Brand#34|LARGE BRUSHED BRASS|23|420 +Brand#34|LARGE BRUSHED COPPER|36|420 +Brand#34|LARGE BRUSHED NICKEL|23|420 +Brand#34|LARGE BURNISHED STEEL|36|420 +Brand#34|LARGE PLATED BRASS|9|420 +Brand#34|LARGE PLATED COPPER|23|420 +Brand#34|LARGE PLATED COPPER|45|420 +Brand#34|LARGE PLATED NICKEL|19|420 +Brand#34|LARGE POLISHED TIN|3|420 +Brand#34|MEDIUM ANODIZED COPPER|9|420 +Brand#34|MEDIUM ANODIZED STEEL|45|420 +Brand#34|MEDIUM BURNISHED STEEL|3|420 +Brand#34|MEDIUM BURNISHED STEEL|9|420 +Brand#34|PROMO ANODIZED BRASS|45|420 +Brand#34|PROMO PLATED STEEL|3|420 +Brand#34|PROMO POLISHED STEEL|23|420 +Brand#34|SMALL BURNISHED BRASS|3|420 +Brand#34|SMALL PLATED BRASS|19|420 +Brand#34|SMALL POLISHED NICKEL|23|420 +Brand#34|STANDARD BRUSHED STEEL|9|420 +Brand#34|STANDARD BRUSHED TIN|19|420 +Brand#34|STANDARD POLISHED COPPER|23|420 +Brand#35|ECONOMY ANODIZED BRASS|9|420 +Brand#35|ECONOMY BRUSHED COPPER|19|420 +Brand#35|ECONOMY BURNISHED COPPER|45|420 +Brand#35|ECONOMY PLATED TIN|36|420 +Brand#35|ECONOMY POLISHED BRASS|23|420 +Brand#35|LARGE ANODIZED STEEL|3|420 +Brand#35|LARGE BRUSHED STEEL|45|420 +Brand#35|LARGE BRUSHED TIN|9|420 +Brand#35|LARGE PLATED STEEL|14|420 +Brand#35|LARGE POLISHED COPPER|9|420 +Brand#35|MEDIUM ANODIZED BRASS|14|420 +Brand#35|MEDIUM BRUSHED NICKEL|3|420 +Brand#35|MEDIUM PLATED NICKEL|14|420 +Brand#35|MEDIUM PLATED STEEL|19|420 +Brand#35|MEDIUM PLATED TIN|9|420 +Brand#35|PROMO ANODIZED NICKEL|19|420 +Brand#35|PROMO BRUSHED TIN|45|420 +Brand#35|PROMO BURNISHED COPPER|14|420 +Brand#35|PROMO BURNISHED STEEL|45|420 +Brand#35|PROMO PLATED BRASS|23|420 +Brand#35|PROMO PLATED COPPER|45|420 +Brand#35|PROMO POLISHED BRASS|3|420 +Brand#35|SMALL ANODIZED STEEL|9|420 +Brand#35|SMALL POLISHED STEEL|19|420 +Brand#35|SMALL POLISHED TIN|14|420 +Brand#35|STANDARD ANODIZED BRASS|3|420 +Brand#35|STANDARD ANODIZED NICKEL|9|420 +Brand#35|STANDARD BRUSHED COPPER|14|420 +Brand#35|STANDARD BURNISHED NICKEL|36|420 +Brand#35|STANDARD PLATED TIN|49|420 +Brand#35|STANDARD POLISHED TIN|19|420 +Brand#41|ECONOMY BURNISHED COPPER|23|420 +Brand#41|ECONOMY BURNISHED NICKEL|14|420 +Brand#41|ECONOMY PLATED TIN|14|420 +Brand#41|ECONOMY POLISHED NICKEL|45|420 +Brand#41|ECONOMY POLISHED TIN|14|420 +Brand#41|LARGE ANODIZED NICKEL|19|420 +Brand#41|LARGE ANODIZED NICKEL|45|420 +Brand#41|LARGE BRUSHED COPPER|49|420 +Brand#41|LARGE PLATED NICKEL|36|420 +Brand#41|LARGE POLISHED COPPER|23|420 +Brand#41|LARGE POLISHED NICKEL|49|420 +Brand#41|MEDIUM ANODIZED COPPER|3|420 +Brand#41|MEDIUM ANODIZED COPPER|9|420 +Brand#41|MEDIUM ANODIZED TIN|45|420 +Brand#41|MEDIUM BRUSHED TIN|19|420 +Brand#41|MEDIUM BRUSHED TIN|23|420 +Brand#41|MEDIUM BURNISHED COPPER|23|420 +Brand#41|MEDIUM BURNISHED TIN|19|420 +Brand#41|PROMO ANODIZED NICKEL|45|420 +Brand#41|PROMO POLISHED BRASS|14|420 +Brand#41|PROMO POLISHED COPPER|19|420 +Brand#41|SMALL ANODIZED BRASS|9|420 +Brand#41|SMALL ANODIZED BRASS|19|420 +Brand#41|SMALL ANODIZED COPPER|14|420 +Brand#41|SMALL BRUSHED BRASS|9|420 +Brand#41|SMALL BRUSHED BRASS|45|420 +Brand#41|STANDARD ANODIZED COPPER|49|420 +Brand#41|STANDARD ANODIZED TIN|36|420 +Brand#41|STANDARD BRUSHED NICKEL|45|420 +Brand#41|STANDARD PLATED STEEL|9|420 +Brand#41|STANDARD POLISHED STEEL|23|420 +Brand#41|STANDARD POLISHED TIN|23|420 +Brand#42|ECONOMY ANODIZED BRASS|3|420 +Brand#42|ECONOMY BURNISHED BRASS|9|420 +Brand#42|ECONOMY BURNISHED BRASS|19|420 +Brand#42|ECONOMY BURNISHED COPPER|14|420 +Brand#42|ECONOMY PLATED STEEL|36|420 +Brand#42|ECONOMY PLATED TIN|3|420 +Brand#42|ECONOMY POLISHED BRASS|9|420 +Brand#42|ECONOMY POLISHED COPPER|3|420 +Brand#42|LARGE ANODIZED BRASS|19|420 +Brand#42|LARGE BRUSHED COPPER|14|420 +Brand#42|LARGE BRUSHED NICKEL|49|420 +Brand#42|LARGE BRUSHED STEEL|45|420 +Brand#42|LARGE BURNISHED NICKEL|49|420 +Brand#42|LARGE POLISHED BRASS|19|420 +Brand#42|LARGE POLISHED NICKEL|45|420 +Brand#42|LARGE POLISHED STEEL|45|420 +Brand#42|MEDIUM ANODIZED NICKEL|9|420 +Brand#42|MEDIUM ANODIZED NICKEL|45|420 +Brand#42|MEDIUM PLATED TIN|36|420 +Brand#42|PROMO ANODIZED BRASS|19|420 +Brand#42|PROMO PLATED TIN|3|420 +Brand#42|SMALL BURNISHED TIN|3|420 +Brand#42|SMALL PLATED STEEL|9|420 +Brand#42|SMALL PLATED TIN|45|420 +Brand#42|SMALL POLISHED TIN|49|420 +Brand#42|STANDARD ANODIZED BRASS|23|420 +Brand#42|STANDARD BURNISHED COPPER|23|420 +Brand#42|STANDARD BURNISHED NICKEL|3|420 +Brand#42|STANDARD PLATED BRASS|23|420 +Brand#42|STANDARD PLATED NICKEL|3|420 +Brand#42|STANDARD PLATED STEEL|9|420 +Brand#42|STANDARD POLISHED COPPER|19|420 +Brand#42|STANDARD POLISHED NICKEL|3|420 +Brand#42|STANDARD POLISHED STEEL|45|420 +Brand#43|ECONOMY ANODIZED NICKEL|36|420 +Brand#43|ECONOMY BRUSHED COPPER|45|420 +Brand#43|ECONOMY BRUSHED STEEL|9|420 +Brand#43|ECONOMY BURNISHED COPPER|49|420 +Brand#43|ECONOMY PLATED BRASS|3|420 +Brand#43|ECONOMY PLATED COPPER|19|420 +Brand#43|LARGE BRUSHED COPPER|19|420 +Brand#43|LARGE BRUSHED COPPER|49|420 +Brand#43|LARGE BURNISHED STEEL|3|420 +Brand#43|LARGE PLATED BRASS|45|420 +Brand#43|LARGE POLISHED STEEL|23|420 +Brand#43|MEDIUM ANODIZED COPPER|3|420 +Brand#43|MEDIUM ANODIZED STEEL|9|420 +Brand#43|MEDIUM ANODIZED TIN|9|420 +Brand#43|MEDIUM BRUSHED BRASS|3|420 +Brand#43|MEDIUM BRUSHED BRASS|45|420 +Brand#43|MEDIUM BURNISHED NICKEL|36|420 +Brand#43|MEDIUM PLATED STEEL|3|420 +Brand#43|PROMO BRUSHED TIN|14|420 +Brand#43|PROMO BURNISHED STEEL|36|420 +Brand#43|PROMO PLATED NICKEL|23|420 +Brand#43|PROMO POLISHED NICKEL|3|420 +Brand#43|SMALL ANODIZED COPPER|19|420 +Brand#43|SMALL BRUSHED BRASS|45|420 +Brand#43|SMALL BRUSHED STEEL|3|420 +Brand#43|SMALL BURNISHED NICKEL|36|420 +Brand#43|SMALL BURNISHED NICKEL|49|420 +Brand#43|SMALL BURNISHED STEEL|45|420 +Brand#43|SMALL POLISHED COPPER|45|420 +Brand#43|STANDARD ANODIZED STEEL|14|420 +Brand#43|STANDARD ANODIZED STEEL|36|420 +Brand#43|STANDARD BURNISHED STEEL|45|420 +Brand#43|STANDARD BURNISHED TIN|49|420 +Brand#43|STANDARD POLISHED STEEL|3|420 +Brand#43|STANDARD POLISHED STEEL|23|420 +Brand#44|ECONOMY ANODIZED NICKEL|19|420 +Brand#44|ECONOMY BRUSHED TIN|19|420 +Brand#44|ECONOMY PLATED BRASS|49|420 +Brand#44|ECONOMY PLATED TIN|45|420 +Brand#44|ECONOMY POLISHED BRASS|19|420 +Brand#44|ECONOMY POLISHED STEEL|14|420 +Brand#44|LARGE BRUSHED STEEL|14|420 +Brand#44|LARGE BURNISHED BRASS|14|420 +Brand#44|LARGE PLATED STEEL|49|420 +Brand#44|LARGE POLISHED BRASS|23|420 +Brand#44|LARGE POLISHED TIN|19|420 +Brand#44|MEDIUM BRUSHED COPPER|45|420 +Brand#44|MEDIUM BRUSHED NICKEL|19|420 +Brand#44|MEDIUM PLATED COPPER|14|420 +Brand#44|MEDIUM PLATED TIN|45|420 +Brand#44|PROMO BURNISHED COPPER|3|420 +Brand#44|PROMO BURNISHED STEEL|19|420 +Brand#44|PROMO BURNISHED TIN|9|420 +Brand#44|PROMO PLATED COPPER|9|420 +Brand#44|PROMO PLATED STEEL|45|420 +Brand#44|SMALL ANODIZED STEEL|19|420 +Brand#44|SMALL BRUSHED STEEL|14|420 +Brand#44|SMALL BURNISHED BRASS|3|420 +Brand#44|SMALL BURNISHED TIN|3|420 +Brand#44|SMALL POLISHED STEEL|3|420 +Brand#44|SMALL POLISHED TIN|36|420 +Brand#44|STANDARD ANODIZED BRASS|14|420 +Brand#44|STANDARD BRUSHED BRASS|36|420 +Brand#44|STANDARD PLATED BRASS|45|420 +Brand#44|STANDARD PLATED NICKEL|3|420 +Brand#44|STANDARD POLISHED STEEL|9|420 +Brand#44|STANDARD POLISHED TIN|3|420 +Brand#51|ECONOMY ANODIZED COPPER|45|420 +Brand#51|ECONOMY BRUSHED NICKEL|9|420 +Brand#51|ECONOMY PLATED TIN|9|420 +Brand#51|LARGE ANODIZED COPPER|9|420 +Brand#51|LARGE ANODIZED TIN|49|420 +Brand#51|LARGE BRUSHED TIN|23|420 +Brand#51|LARGE BURNISHED NICKEL|23|420 +Brand#51|LARGE PLATED BRASS|45|420 +Brand#51|LARGE PLATED STEEL|23|420 +Brand#51|LARGE POLISHED NICKEL|9|420 +Brand#51|LARGE POLISHED STEEL|9|420 +Brand#51|LARGE POLISHED STEEL|19|420 +Brand#51|LARGE POLISHED STEEL|49|420 +Brand#51|MEDIUM ANODIZED BRASS|3|420 +Brand#51|MEDIUM BURNISHED BRASS|23|420 +Brand#51|MEDIUM BURNISHED COPPER|45|420 +Brand#51|MEDIUM PLATED COPPER|19|420 +Brand#51|PROMO ANODIZED COPPER|14|420 +Brand#51|PROMO PLATED BRASS|23|420 +Brand#51|PROMO POLISHED NICKEL|9|420 +Brand#51|SMALL ANODIZED TIN|14|420 +Brand#51|SMALL ANODIZED TIN|19|420 +Brand#51|SMALL ANODIZED TIN|23|420 +Brand#51|SMALL BURNISHED TIN|23|420 +Brand#51|SMALL PLATED COPPER|49|420 +Brand#51|SMALL POLISHED STEEL|14|420 +Brand#51|SMALL POLISHED TIN|36|420 +Brand#51|STANDARD BRUSHED COPPER|3|420 +Brand#51|STANDARD BRUSHED COPPER|19|420 +Brand#51|STANDARD POLISHED BRASS|19|420 +Brand#52|ECONOMY BRUSHED BRASS|9|420 +Brand#52|ECONOMY PLATED TIN|49|420 +Brand#52|LARGE ANODIZED BRASS|19|420 +Brand#52|LARGE BRUSHED TIN|14|420 +Brand#52|LARGE BURNISHED BRASS|23|420 +Brand#52|LARGE BURNISHED BRASS|49|420 +Brand#52|LARGE BURNISHED COPPER|45|420 +Brand#52|LARGE BURNISHED STEEL|19|420 +Brand#52|LARGE PLATED COPPER|36|420 +Brand#52|LARGE PLATED TIN|49|420 +Brand#52|MEDIUM ANODIZED COPPER|49|420 +Brand#52|MEDIUM ANODIZED TIN|14|420 +Brand#52|MEDIUM BRUSHED BRASS|9|420 +Brand#52|MEDIUM PLATED BRASS|36|420 +Brand#52|PROMO ANODIZED BRASS|19|420 +Brand#52|PROMO BURNISHED COPPER|45|420 +Brand#52|SMALL ANODIZED COPPER|45|420 +Brand#52|SMALL ANODIZED COPPER|49|420 +Brand#52|SMALL ANODIZED TIN|19|420 +Brand#52|SMALL POLISHED NICKEL|14|420 +Brand#52|STANDARD ANODIZED BRASS|49|420 +Brand#52|STANDARD BRUSHED BRASS|14|420 +Brand#52|STANDARD BRUSHED COPPER|3|420 +Brand#52|STANDARD BRUSHED COPPER|45|420 +Brand#52|STANDARD PLATED BRASS|19|420 +Brand#52|STANDARD PLATED BRASS|45|420 +Brand#52|STANDARD PLATED NICKEL|23|420 +Brand#52|STANDARD POLISHED TIN|45|420 +Brand#53|ECONOMY ANODIZED NICKEL|9|420 +Brand#53|ECONOMY ANODIZED NICKEL|36|420 +Brand#53|ECONOMY ANODIZED STEEL|36|420 +Brand#53|ECONOMY ANODIZED TIN|49|420 +Brand#53|ECONOMY BRUSHED BRASS|14|420 +Brand#53|ECONOMY BRUSHED STEEL|36|420 +Brand#53|ECONOMY BURNISHED COPPER|23|420 +Brand#53|ECONOMY BURNISHED TIN|3|420 +Brand#53|ECONOMY PLATED STEEL|9|420 +Brand#53|ECONOMY PLATED TIN|45|420 +Brand#53|ECONOMY POLISHED BRASS|19|420 +Brand#53|ECONOMY POLISHED NICKEL|49|420 +Brand#53|ECONOMY POLISHED STEEL|3|420 +Brand#53|LARGE ANODIZED BRASS|45|420 +Brand#53|LARGE ANODIZED STEEL|49|420 +Brand#53|LARGE BRUSHED COPPER|19|420 +Brand#53|LARGE BRUSHED TIN|45|420 +Brand#53|LARGE BURNISHED COPPER|19|420 +Brand#53|LARGE BURNISHED COPPER|45|420 +Brand#53|LARGE BURNISHED NICKEL|19|420 +Brand#53|LARGE BURNISHED STEEL|36|420 +Brand#53|LARGE POLISHED STEEL|19|420 +Brand#53|MEDIUM ANODIZED STEEL|45|420 +Brand#53|MEDIUM ANODIZED TIN|3|420 +Brand#53|MEDIUM ANODIZED TIN|14|420 +Brand#53|MEDIUM BRUSHED BRASS|9|420 +Brand#53|MEDIUM BRUSHED COPPER|36|420 +Brand#53|MEDIUM BRUSHED TIN|9|420 +Brand#53|MEDIUM PLATED COPPER|36|420 +Brand#53|PROMO ANODIZED BRASS|14|420 +Brand#53|PROMO ANODIZED COPPER|3|420 +Brand#53|PROMO ANODIZED COPPER|36|420 +Brand#53|PROMO ANODIZED STEEL|49|420 +Brand#53|PROMO BRUSHED STEEL|36|420 +Brand#53|PROMO BURNISHED TIN|3|420 +Brand#53|PROMO POLISHED COPPER|36|420 +Brand#53|SMALL ANODIZED BRASS|49|420 +Brand#53|SMALL BRUSHED STEEL|9|420 +Brand#53|SMALL BURNISHED BRASS|36|420 +Brand#53|SMALL BURNISHED COPPER|49|420 +Brand#53|SMALL BURNISHED NICKEL|9|420 +Brand#53|SMALL PLATED STEEL|9|420 +Brand#53|SMALL PLATED TIN|49|420 +Brand#53|SMALL POLISHED NICKEL|9|420 +Brand#53|SMALL POLISHED STEEL|3|420 +Brand#53|SMALL POLISHED TIN|3|420 +Brand#53|SMALL POLISHED TIN|14|420 +Brand#53|STANDARD ANODIZED NICKEL|23|420 +Brand#53|STANDARD ANODIZED NICKEL|36|420 +Brand#53|STANDARD ANODIZED STEEL|19|420 +Brand#53|STANDARD ANODIZED TIN|14|420 +Brand#53|STANDARD PLATED STEEL|36|420 +Brand#54|ECONOMY ANODIZED NICKEL|3|420 +Brand#54|ECONOMY BRUSHED NICKEL|49|420 +Brand#54|ECONOMY BRUSHED STEEL|45|420 +Brand#54|ECONOMY BURNISHED BRASS|14|420 +Brand#54|ECONOMY PLATED TIN|9|420 +Brand#54|ECONOMY PLATED TIN|14|420 +Brand#54|LARGE ANODIZED COPPER|36|420 +Brand#54|LARGE ANODIZED NICKEL|19|420 +Brand#54|LARGE BRUSHED STEEL|49|420 +Brand#54|LARGE BURNISHED NICKEL|23|420 +Brand#54|LARGE PLATED STEEL|14|420 +Brand#54|LARGE POLISHED NICKEL|3|420 +Brand#54|LARGE POLISHED NICKEL|45|420 +Brand#54|LARGE POLISHED TIN|19|420 +Brand#54|MEDIUM BURNISHED COPPER|49|420 +Brand#54|MEDIUM BURNISHED TIN|49|420 +Brand#54|MEDIUM PLATED TIN|3|420 +Brand#54|PROMO BRUSHED BRASS|19|420 +Brand#54|PROMO BURNISHED TIN|36|420 +Brand#54|PROMO PLATED BRASS|9|420 +Brand#54|PROMO POLISHED BRASS|36|420 +Brand#54|SMALL BRUSHED BRASS|23|420 +Brand#54|SMALL BRUSHED COPPER|36|420 +Brand#54|SMALL PLATED STEEL|49|420 +Brand#54|SMALL PLATED TIN|23|420 +Brand#54|STANDARD ANODIZED BRASS|14|420 +Brand#54|STANDARD ANODIZED COPPER|36|420 +Brand#54|STANDARD ANODIZED STEEL|45|420 +Brand#54|STANDARD BRUSHED BRASS|9|420 +Brand#54|STANDARD BRUSHED COPPER|36|420 +Brand#54|STANDARD BURNISHED BRASS|3|420 +Brand#54|STANDARD BURNISHED NICKEL|45|420 +Brand#54|STANDARD POLISHED COPPER|14|420 +Brand#55|ECONOMY ANODIZED COPPER|49|420 +Brand#55|ECONOMY BRUSHED STEEL|9|420 +Brand#55|ECONOMY BRUSHED TIN|36|420 +Brand#55|ECONOMY PLATED COPPER|9|420 +Brand#55|ECONOMY PLATED TIN|49|420 +Brand#55|ECONOMY POLISHED NICKEL|3|420 +Brand#55|LARGE ANODIZED BRASS|19|420 +Brand#55|LARGE ANODIZED NICKEL|9|420 +Brand#55|LARGE BURNISHED BRASS|14|420 +Brand#55|LARGE BURNISHED BRASS|36|420 +Brand#55|LARGE BURNISHED COPPER|36|420 +Brand#55|LARGE PLATED TIN|3|420 +Brand#55|LARGE POLISHED BRASS|3|420 +Brand#55|LARGE POLISHED BRASS|36|420 +Brand#55|MEDIUM ANODIZED NICKEL|3|420 +Brand#55|MEDIUM BRUSHED COPPER|3|420 +Brand#55|PROMO BURNISHED STEEL|14|420 +Brand#55|PROMO PLATED COPPER|3|420 +Brand#55|PROMO PLATED TIN|14|420 +Brand#55|PROMO POLISHED BRASS|3|420 +Brand#55|SMALL ANODIZED COPPER|49|420 +Brand#55|SMALL ANODIZED STEEL|45|420 +Brand#55|SMALL BRUSHED NICKEL|23|420 +Brand#55|SMALL PLATED BRASS|49|420 +Brand#55|SMALL PLATED NICKEL|23|420 +Brand#55|SMALL PLATED STEEL|9|420 +Brand#55|STANDARD BRUSHED BRASS|45|420 +Brand#55|STANDARD BRUSHED STEEL|3|420 +Brand#55|STANDARD BURNISHED TIN|23|420 +Brand#55|STANDARD PLATED BRASS|45|420 +Brand#55|STANDARD POLISHED TIN|23|420 +Brand#11|ECONOMY BURNISHED STEEL|14|419 +Brand#11|ECONOMY PLATED NICKEL|9|419 +Brand#11|LARGE BRUSHED NICKEL|14|419 +Brand#11|LARGE POLISHED STEEL|45|419 +Brand#11|MEDIUM BURNISHED BRASS|19|419 +Brand#11|MEDIUM BURNISHED STEEL|19|419 +Brand#11|PROMO BRUSHED STEEL|23|419 +Brand#11|PROMO POLISHED STEEL|49|419 +Brand#11|SMALL ANODIZED STEEL|49|419 +Brand#12|ECONOMY ANODIZED NICKEL|49|419 +Brand#12|LARGE ANODIZED STEEL|45|419 +Brand#12|MEDIUM BURNISHED COPPER|14|419 +Brand#12|SMALL BRUSHED BRASS|14|419 +Brand#12|SMALL BRUSHED COPPER|23|419 +Brand#12|SMALL BRUSHED STEEL|23|419 +Brand#13|ECONOMY BURNISHED BRASS|19|419 +Brand#13|ECONOMY PLATED COPPER|19|419 +Brand#13|ECONOMY PLATED TIN|14|419 +Brand#13|LARGE PLATED BRASS|3|419 +Brand#13|LARGE POLISHED COPPER|19|419 +Brand#13|PROMO POLISHED COPPER|9|419 +Brand#13|SMALL BURNISHED BRASS|45|419 +Brand#13|SMALL BURNISHED COPPER|19|419 +Brand#13|SMALL POLISHED NICKEL|36|419 +Brand#14|ECONOMY ANODIZED BRASS|49|419 +Brand#14|LARGE BURNISHED TIN|3|419 +Brand#14|LARGE POLISHED NICKEL|3|419 +Brand#14|MEDIUM BRUSHED BRASS|3|419 +Brand#14|MEDIUM BURNISHED COPPER|49|419 +Brand#14|MEDIUM BURNISHED NICKEL|45|419 +Brand#14|MEDIUM BURNISHED TIN|19|419 +Brand#14|PROMO ANODIZED BRASS|36|419 +Brand#14|PROMO ANODIZED NICKEL|14|419 +Brand#14|PROMO PLATED STEEL|19|419 +Brand#14|PROMO POLISHED BRASS|19|419 +Brand#14|SMALL PLATED NICKEL|36|419 +Brand#14|STANDARD BURNISHED STEEL|3|419 +Brand#14|STANDARD POLISHED TIN|23|419 +Brand#15|MEDIUM BURNISHED TIN|36|419 +Brand#15|SMALL PLATED BRASS|45|419 +Brand#15|SMALL PLATED TIN|23|419 +Brand#21|ECONOMY ANODIZED BRASS|49|419 +Brand#21|LARGE BURNISHED COPPER|3|419 +Brand#21|MEDIUM ANODIZED BRASS|49|419 +Brand#21|MEDIUM ANODIZED COPPER|23|419 +Brand#21|MEDIUM ANODIZED NICKEL|9|419 +Brand#21|PROMO BRUSHED TIN|9|419 +Brand#21|SMALL ANODIZED BRASS|19|419 +Brand#21|SMALL PLATED STEEL|49|419 +Brand#21|SMALL POLISHED BRASS|49|419 +Brand#21|STANDARD BRUSHED STEEL|49|419 +Brand#22|ECONOMY PLATED STEEL|14|419 +Brand#22|LARGE ANODIZED NICKEL|9|419 +Brand#22|LARGE BRUSHED NICKEL|3|419 +Brand#22|LARGE PLATED STEEL|19|419 +Brand#22|LARGE POLISHED STEEL|23|419 +Brand#22|MEDIUM PLATED COPPER|23|419 +Brand#22|SMALL BRUSHED STEEL|49|419 +Brand#22|SMALL BURNISHED COPPER|19|419 +Brand#22|STANDARD BRUSHED BRASS|36|419 +Brand#22|STANDARD BURNISHED NICKEL|14|419 +Brand#23|PROMO ANODIZED STEEL|23|419 +Brand#23|PROMO BRUSHED STEEL|3|419 +Brand#23|SMALL BRUSHED TIN|9|419 +Brand#23|SMALL POLISHED STEEL|23|419 +Brand#24|ECONOMY ANODIZED BRASS|14|419 +Brand#24|ECONOMY BURNISHED BRASS|19|419 +Brand#24|ECONOMY BURNISHED COPPER|36|419 +Brand#24|LARGE ANODIZED NICKEL|49|419 +Brand#24|LARGE BURNISHED BRASS|49|419 +Brand#24|MEDIUM BRUSHED NICKEL|9|419 +Brand#24|MEDIUM BURNISHED COPPER|19|419 +Brand#24|PROMO PLATED BRASS|36|419 +Brand#24|PROMO PLATED COPPER|45|419 +Brand#24|PROMO PLATED COPPER|49|419 +Brand#24|PROMO POLISHED BRASS|36|419 +Brand#24|SMALL BURNISHED TIN|45|419 +Brand#24|STANDARD ANODIZED TIN|14|419 +Brand#24|STANDARD PLATED TIN|14|419 +Brand#25|ECONOMY PLATED TIN|9|419 +Brand#25|LARGE PLATED TIN|3|419 +Brand#25|MEDIUM BRUSHED TIN|3|419 +Brand#25|PROMO BRUSHED TIN|14|419 +Brand#25|SMALL PLATED COPPER|9|419 +Brand#25|STANDARD BRUSHED COPPER|45|419 +Brand#25|STANDARD POLISHED STEEL|14|419 +Brand#31|ECONOMY ANODIZED TIN|9|419 +Brand#31|ECONOMY BURNISHED TIN|23|419 +Brand#31|LARGE BRUSHED BRASS|45|419 +Brand#31|LARGE PLATED BRASS|45|419 +Brand#31|PROMO ANODIZED BRASS|49|419 +Brand#31|PROMO BURNISHED BRASS|19|419 +Brand#31|PROMO POLISHED STEEL|45|419 +Brand#31|SMALL POLISHED COPPER|19|419 +Brand#31|STANDARD BRUSHED COPPER|3|419 +Brand#31|STANDARD BURNISHED BRASS|45|419 +Brand#31|STANDARD BURNISHED COPPER|9|419 +Brand#32|ECONOMY ANODIZED BRASS|19|419 +Brand#32|ECONOMY PLATED BRASS|3|419 +Brand#32|ECONOMY POLISHED TIN|3|419 +Brand#32|LARGE BURNISHED COPPER|14|419 +Brand#32|LARGE BURNISHED TIN|3|419 +Brand#32|SMALL ANODIZED TIN|9|419 +Brand#32|SMALL BRUSHED TIN|23|419 +Brand#32|STANDARD BRUSHED TIN|3|419 +Brand#32|STANDARD PLATED TIN|19|419 +Brand#33|ECONOMY BRUSHED TIN|14|419 +Brand#33|LARGE BURNISHED COPPER|3|419 +Brand#33|LARGE POLISHED TIN|9|419 +Brand#33|MEDIUM PLATED TIN|3|419 +Brand#33|PROMO POLISHED BRASS|49|419 +Brand#33|SMALL BURNISHED TIN|14|419 +Brand#33|STANDARD BURNISHED BRASS|14|419 +Brand#33|STANDARD BURNISHED TIN|19|419 +Brand#34|MEDIUM ANODIZED COPPER|23|419 +Brand#34|MEDIUM BRUSHED TIN|3|419 +Brand#34|SMALL PLATED BRASS|49|419 +Brand#34|SMALL POLISHED NICKEL|36|419 +Brand#34|STANDARD PLATED COPPER|23|419 +Brand#34|STANDARD POLISHED BRASS|9|419 +Brand#35|ECONOMY ANODIZED NICKEL|14|419 +Brand#35|ECONOMY POLISHED BRASS|9|419 +Brand#35|LARGE BRUSHED STEEL|19|419 +Brand#35|LARGE POLISHED BRASS|9|419 +Brand#35|LARGE POLISHED COPPER|14|419 +Brand#35|LARGE POLISHED COPPER|49|419 +Brand#35|PROMO ANODIZED COPPER|23|419 +Brand#35|SMALL BURNISHED BRASS|9|419 +Brand#35|SMALL BURNISHED NICKEL|9|419 +Brand#35|SMALL PLATED TIN|3|419 +Brand#35|STANDARD BURNISHED BRASS|49|419 +Brand#41|ECONOMY BRUSHED NICKEL|45|419 +Brand#41|ECONOMY BURNISHED STEEL|45|419 +Brand#41|LARGE ANODIZED NICKEL|3|419 +Brand#41|LARGE BRUSHED COPPER|19|419 +Brand#41|LARGE PLATED STEEL|9|419 +Brand#41|PROMO PLATED COPPER|45|419 +Brand#41|PROMO PLATED TIN|9|419 +Brand#41|PROMO PLATED TIN|36|419 +Brand#41|SMALL BURNISHED BRASS|23|419 +Brand#41|SMALL BURNISHED COPPER|19|419 +Brand#41|SMALL PLATED STEEL|36|419 +Brand#41|SMALL POLISHED NICKEL|49|419 +Brand#41|STANDARD BRUSHED BRASS|45|419 +Brand#41|STANDARD BRUSHED TIN|49|419 +Brand#41|STANDARD PLATED NICKEL|19|419 +Brand#41|STANDARD POLISHED TIN|14|419 +Brand#42|ECONOMY ANODIZED BRASS|9|419 +Brand#42|ECONOMY BRUSHED TIN|45|419 +Brand#42|LARGE BURNISHED COPPER|14|419 +Brand#42|LARGE POLISHED BRASS|36|419 +Brand#42|MEDIUM PLATED COPPER|45|419 +Brand#42|PROMO ANODIZED STEEL|36|419 +Brand#42|STANDARD BRUSHED NICKEL|14|419 +Brand#42|STANDARD POLISHED NICKEL|19|419 +Brand#43|ECONOMY ANODIZED TIN|19|419 +Brand#43|LARGE ANODIZED NICKEL|49|419 +Brand#43|LARGE POLISHED TIN|14|419 +Brand#43|PROMO BRUSHED TIN|23|419 +Brand#43|PROMO BRUSHED TIN|36|419 +Brand#43|SMALL BURNISHED TIN|14|419 +Brand#43|STANDARD ANODIZED BRASS|9|419 +Brand#43|STANDARD PLATED COPPER|23|419 +Brand#43|STANDARD POLISHED NICKEL|49|419 +Brand#44|ECONOMY ANODIZED BRASS|9|419 +Brand#44|LARGE BRUSHED COPPER|23|419 +Brand#44|SMALL BRUSHED BRASS|45|419 +Brand#44|STANDARD BRUSHED COPPER|49|419 +Brand#44|STANDARD BURNISHED BRASS|23|419 +Brand#44|STANDARD POLISHED NICKEL|14|419 +Brand#44|STANDARD POLISHED TIN|36|419 +Brand#51|ECONOMY ANODIZED TIN|23|419 +Brand#51|ECONOMY POLISHED COPPER|14|419 +Brand#51|LARGE PLATED STEEL|45|419 +Brand#51|LARGE POLISHED COPPER|45|419 +Brand#51|PROMO ANODIZED TIN|23|419 +Brand#51|PROMO BRUSHED NICKEL|3|419 +Brand#51|SMALL BRUSHED BRASS|3|419 +Brand#51|STANDARD ANODIZED NICKEL|19|419 +Brand#51|STANDARD BRUSHED BRASS|14|419 +Brand#51|STANDARD PLATED NICKEL|36|419 +Brand#52|ECONOMY BRUSHED TIN|19|419 +Brand#52|LARGE ANODIZED NICKEL|23|419 +Brand#52|MEDIUM PLATED NICKEL|9|419 +Brand#52|PROMO ANODIZED BRASS|9|419 +Brand#52|SMALL BRUSHED TIN|23|419 +Brand#52|STANDARD BRUSHED NICKEL|23|419 +Brand#52|STANDARD BURNISHED COPPER|14|419 +Brand#53|ECONOMY BURNISHED STEEL|14|419 +Brand#53|ECONOMY PLATED STEEL|49|419 +Brand#53|LARGE PLATED TIN|45|419 +Brand#53|SMALL ANODIZED NICKEL|49|419 +Brand#53|STANDARD PLATED STEEL|45|419 +Brand#53|STANDARD POLISHED COPPER|36|419 +Brand#53|STANDARD POLISHED NICKEL|45|419 +Brand#54|ECONOMY BURNISHED COPPER|19|419 +Brand#54|ECONOMY BURNISHED TIN|45|419 +Brand#54|LARGE BRUSHED TIN|14|419 +Brand#54|LARGE POLISHED NICKEL|19|419 +Brand#54|PROMO BRUSHED BRASS|23|419 +Brand#54|PROMO BRUSHED NICKEL|23|419 +Brand#54|PROMO BURNISHED TIN|23|419 +Brand#54|PROMO PLATED BRASS|14|419 +Brand#54|PROMO PLATED STEEL|19|419 +Brand#54|SMALL BRUSHED STEEL|3|419 +Brand#54|STANDARD BURNISHED COPPER|14|419 +Brand#55|ECONOMY PLATED COPPER|3|419 +Brand#55|ECONOMY PLATED TIN|9|419 +Brand#55|ECONOMY POLISHED COPPER|45|419 +Brand#55|MEDIUM BURNISHED NICKEL|49|419 +Brand#55|PROMO PLATED COPPER|49|419 +Brand#55|SMALL POLISHED NICKEL|3|419 +Brand#55|SMALL POLISHED TIN|9|419 +Brand#55|STANDARD BURNISHED NICKEL|23|419 +Brand#12|MEDIUM PLATED TIN|19|418 +Brand#14|SMALL POLISHED NICKEL|45|418 +Brand#15|LARGE ANODIZED STEEL|19|418 +Brand#21|STANDARD BURNISHED TIN|14|418 +Brand#22|ECONOMY BURNISHED BRASS|23|418 +Brand#22|ECONOMY BURNISHED TIN|23|418 +Brand#22|ECONOMY PLATED BRASS|9|418 +Brand#23|LARGE ANODIZED NICKEL|9|418 +Brand#23|PROMO BURNISHED BRASS|23|418 +Brand#25|ECONOMY BURNISHED BRASS|19|418 +Brand#25|ECONOMY POLISHED TIN|9|418 +Brand#32|LARGE PLATED TIN|9|418 +Brand#35|MEDIUM ANODIZED BRASS|36|418 +Brand#35|MEDIUM PLATED NICKEL|3|418 +Brand#41|LARGE PLATED BRASS|23|418 +Brand#41|LARGE POLISHED NICKEL|9|418 +Brand#42|MEDIUM BURNISHED BRASS|9|418 +Brand#42|MEDIUM PLATED TIN|19|418 +Brand#43|LARGE POLISHED TIN|3|418 +Brand#43|SMALL POLISHED STEEL|19|418 +Brand#44|SMALL BRUSHED COPPER|36|418 +Brand#51|ECONOMY POLISHED NICKEL|45|418 +Brand#51|PROMO ANODIZED TIN|9|418 +Brand#51|PROMO PLATED BRASS|49|418 +Brand#52|LARGE POLISHED BRASS|9|418 +Brand#52|LARGE POLISHED TIN|9|418 +Brand#53|ECONOMY ANODIZED BRASS|49|418 +Brand#53|ECONOMY POLISHED TIN|23|418 +Brand#54|ECONOMY BURNISHED STEEL|9|418 +Brand#54|PROMO ANODIZED BRASS|45|418 +Brand#54|PROMO BRUSHED STEEL|23|418 +Brand#55|ECONOMY BRUSHED BRASS|19|418 +Brand#55|LARGE ANODIZED NICKEL|45|418 +Brand#55|LARGE POLISHED TIN|36|418 +Brand#55|SMALL ANODIZED BRASS|3|418 +Brand#11|LARGE ANODIZED TIN|49|417 +Brand#35|LARGE BRUSHED COPPER|14|417 +Brand#11|ECONOMY ANODIZED COPPER|19|416 +Brand#11|ECONOMY ANODIZED NICKEL|19|416 +Brand#11|ECONOMY ANODIZED STEEL|49|416 +Brand#11|ECONOMY BURNISHED BRASS|19|416 +Brand#11|ECONOMY BURNISHED COPPER|14|416 +Brand#11|ECONOMY BURNISHED COPPER|23|416 +Brand#11|ECONOMY BURNISHED STEEL|23|416 +Brand#11|LARGE ANODIZED COPPER|9|416 +Brand#11|LARGE ANODIZED STEEL|49|416 +Brand#11|LARGE BRUSHED TIN|49|416 +Brand#11|LARGE POLISHED TIN|19|416 +Brand#11|MEDIUM ANODIZED TIN|36|416 +Brand#11|MEDIUM BRUSHED NICKEL|19|416 +Brand#11|MEDIUM BRUSHED STEEL|3|416 +Brand#11|MEDIUM BRUSHED TIN|49|416 +Brand#11|MEDIUM PLATED TIN|9|416 +Brand#11|PROMO BRUSHED TIN|45|416 +Brand#11|PROMO BURNISHED COPPER|23|416 +Brand#11|PROMO BURNISHED TIN|36|416 +Brand#11|PROMO POLISHED TIN|14|416 +Brand#11|SMALL ANODIZED BRASS|49|416 +Brand#11|SMALL ANODIZED TIN|23|416 +Brand#11|SMALL BURNISHED BRASS|49|416 +Brand#11|SMALL BURNISHED COPPER|19|416 +Brand#11|SMALL POLISHED COPPER|14|416 +Brand#11|STANDARD ANODIZED COPPER|45|416 +Brand#11|STANDARD ANODIZED NICKEL|14|416 +Brand#11|STANDARD ANODIZED STEEL|45|416 +Brand#11|STANDARD BRUSHED TIN|3|416 +Brand#11|STANDARD BRUSHED TIN|19|416 +Brand#11|STANDARD BRUSHED TIN|49|416 +Brand#11|STANDARD PLATED BRASS|3|416 +Brand#11|STANDARD POLISHED TIN|3|416 +Brand#12|ECONOMY ANODIZED COPPER|23|416 +Brand#12|ECONOMY ANODIZED NICKEL|23|416 +Brand#12|ECONOMY ANODIZED STEEL|9|416 +Brand#12|ECONOMY BRUSHED NICKEL|36|416 +Brand#12|ECONOMY BURNISHED BRASS|45|416 +Brand#12|ECONOMY PLATED NICKEL|45|416 +Brand#12|ECONOMY PLATED TIN|3|416 +Brand#12|ECONOMY POLISHED BRASS|14|416 +Brand#12|ECONOMY POLISHED COPPER|23|416 +Brand#12|LARGE BRUSHED BRASS|3|416 +Brand#12|LARGE BRUSHED COPPER|3|416 +Brand#12|MEDIUM ANODIZED COPPER|14|416 +Brand#12|MEDIUM ANODIZED STEEL|45|416 +Brand#12|MEDIUM BURNISHED STEEL|49|416 +Brand#12|PROMO BRUSHED BRASS|3|416 +Brand#12|PROMO BURNISHED STEEL|23|416 +Brand#12|PROMO POLISHED BRASS|45|416 +Brand#12|PROMO POLISHED STEEL|36|416 +Brand#12|SMALL ANODIZED STEEL|23|416 +Brand#12|SMALL BRUSHED NICKEL|23|416 +Brand#12|SMALL BRUSHED STEEL|3|416 +Brand#12|SMALL BRUSHED STEEL|49|416 +Brand#12|SMALL PLATED NICKEL|19|416 +Brand#12|SMALL POLISHED COPPER|14|416 +Brand#12|SMALL POLISHED TIN|36|416 +Brand#12|STANDARD ANODIZED STEEL|36|416 +Brand#12|STANDARD BRUSHED COPPER|23|416 +Brand#12|STANDARD BRUSHED NICKEL|36|416 +Brand#12|STANDARD BURNISHED COPPER|3|416 +Brand#12|STANDARD BURNISHED NICKEL|23|416 +Brand#12|STANDARD POLISHED TIN|36|416 +Brand#13|ECONOMY BRUSHED BRASS|9|416 +Brand#13|ECONOMY BRUSHED COPPER|19|416 +Brand#13|ECONOMY BRUSHED TIN|3|416 +Brand#13|ECONOMY BURNISHED COPPER|49|416 +Brand#13|ECONOMY BURNISHED TIN|14|416 +Brand#13|ECONOMY PLATED BRASS|19|416 +Brand#13|ECONOMY PLATED BRASS|45|416 +Brand#13|ECONOMY POLISHED STEEL|9|416 +Brand#13|LARGE ANODIZED NICKEL|49|416 +Brand#13|LARGE ANODIZED TIN|9|416 +Brand#13|LARGE BRUSHED TIN|23|416 +Brand#13|LARGE BURNISHED NICKEL|9|416 +Brand#13|LARGE PLATED NICKEL|14|416 +Brand#13|LARGE PLATED NICKEL|45|416 +Brand#13|LARGE PLATED TIN|14|416 +Brand#13|MEDIUM ANODIZED COPPER|3|416 +Brand#13|MEDIUM ANODIZED COPPER|19|416 +Brand#13|MEDIUM ANODIZED TIN|9|416 +Brand#13|MEDIUM BRUSHED COPPER|14|416 +Brand#13|MEDIUM BURNISHED BRASS|23|416 +Brand#13|MEDIUM BURNISHED TIN|3|416 +Brand#13|MEDIUM PLATED BRASS|23|416 +Brand#13|PROMO ANODIZED STEEL|3|416 +Brand#13|PROMO ANODIZED TIN|14|416 +Brand#13|PROMO BRUSHED STEEL|14|416 +Brand#13|PROMO PLATED BRASS|9|416 +Brand#13|SMALL ANODIZED BRASS|23|416 +Brand#13|SMALL ANODIZED COPPER|14|416 +Brand#13|SMALL BRUSHED TIN|36|416 +Brand#13|SMALL PLATED COPPER|19|416 +Brand#13|SMALL PLATED TIN|3|416 +Brand#13|SMALL PLATED TIN|9|416 +Brand#13|SMALL POLISHED STEEL|49|416 +Brand#13|STANDARD ANODIZED TIN|49|416 +Brand#13|STANDARD BRUSHED TIN|19|416 +Brand#13|STANDARD PLATED NICKEL|3|416 +Brand#13|STANDARD PLATED NICKEL|45|416 +Brand#13|STANDARD PLATED STEEL|14|416 +Brand#14|ECONOMY ANODIZED STEEL|19|416 +Brand#14|ECONOMY PLATED BRASS|9|416 +Brand#14|ECONOMY PLATED BRASS|14|416 +Brand#14|ECONOMY PLATED BRASS|23|416 +Brand#14|ECONOMY POLISHED STEEL|19|416 +Brand#14|LARGE ANODIZED COPPER|45|416 +Brand#14|LARGE ANODIZED STEEL|49|416 +Brand#14|LARGE BRUSHED STEEL|36|416 +Brand#14|LARGE BURNISHED BRASS|3|416 +Brand#14|LARGE BURNISHED BRASS|19|416 +Brand#14|LARGE BURNISHED NICKEL|36|416 +Brand#14|LARGE PLATED BRASS|23|416 +Brand#14|LARGE PLATED NICKEL|45|416 +Brand#14|MEDIUM ANODIZED BRASS|45|416 +Brand#14|MEDIUM ANODIZED NICKEL|9|416 +Brand#14|MEDIUM BRUSHED TIN|49|416 +Brand#14|MEDIUM BURNISHED COPPER|19|416 +Brand#14|MEDIUM BURNISHED NICKEL|36|416 +Brand#14|MEDIUM PLATED TIN|14|416 +Brand#14|PROMO ANODIZED NICKEL|45|416 +Brand#14|PROMO BRUSHED NICKEL|23|416 +Brand#14|PROMO BRUSHED STEEL|3|416 +Brand#14|PROMO BRUSHED STEEL|23|416 +Brand#14|PROMO BURNISHED TIN|23|416 +Brand#14|PROMO PLATED STEEL|14|416 +Brand#14|PROMO POLISHED COPPER|9|416 +Brand#14|PROMO POLISHED STEEL|9|416 +Brand#14|SMALL ANODIZED COPPER|19|416 +Brand#14|SMALL BRUSHED BRASS|36|416 +Brand#14|SMALL BURNISHED COPPER|14|416 +Brand#14|SMALL PLATED BRASS|9|416 +Brand#14|SMALL PLATED BRASS|45|416 +Brand#14|SMALL PLATED STEEL|9|416 +Brand#14|SMALL POLISHED BRASS|9|416 +Brand#14|SMALL POLISHED TIN|36|416 +Brand#14|STANDARD ANODIZED STEEL|49|416 +Brand#14|STANDARD BRUSHED TIN|49|416 +Brand#14|STANDARD PLATED NICKEL|49|416 +Brand#14|STANDARD POLISHED COPPER|14|416 +Brand#14|STANDARD POLISHED TIN|9|416 +Brand#15|ECONOMY BRUSHED NICKEL|3|416 +Brand#15|LARGE ANODIZED BRASS|49|416 +Brand#15|LARGE ANODIZED NICKEL|9|416 +Brand#15|LARGE BURNISHED NICKEL|36|416 +Brand#15|LARGE PLATED COPPER|49|416 +Brand#15|LARGE POLISHED COPPER|49|416 +Brand#15|MEDIUM ANODIZED COPPER|23|416 +Brand#15|MEDIUM ANODIZED COPPER|49|416 +Brand#15|MEDIUM BRUSHED STEEL|3|416 +Brand#15|MEDIUM BRUSHED STEEL|14|416 +Brand#15|MEDIUM BURNISHED STEEL|9|416 +Brand#15|MEDIUM BURNISHED STEEL|19|416 +Brand#15|PROMO ANODIZED BRASS|3|416 +Brand#15|PROMO BRUSHED COPPER|36|416 +Brand#15|PROMO BRUSHED TIN|49|416 +Brand#15|PROMO POLISHED COPPER|36|416 +Brand#15|PROMO POLISHED STEEL|9|416 +Brand#15|SMALL ANODIZED NICKEL|19|416 +Brand#15|SMALL ANODIZED TIN|9|416 +Brand#15|SMALL BURNISHED NICKEL|23|416 +Brand#15|SMALL BURNISHED TIN|36|416 +Brand#15|SMALL PLATED COPPER|9|416 +Brand#15|SMALL PLATED TIN|9|416 +Brand#15|SMALL PLATED TIN|36|416 +Brand#15|SMALL POLISHED COPPER|23|416 +Brand#15|SMALL POLISHED STEEL|23|416 +Brand#15|STANDARD ANODIZED NICKEL|49|416 +Brand#15|STANDARD BRUSHED COPPER|36|416 +Brand#15|STANDARD BRUSHED NICKEL|45|416 +Brand#15|STANDARD BURNISHED COPPER|9|416 +Brand#15|STANDARD BURNISHED NICKEL|14|416 +Brand#15|STANDARD BURNISHED NICKEL|19|416 +Brand#21|ECONOMY ANODIZED NICKEL|3|416 +Brand#21|ECONOMY BRUSHED BRASS|19|416 +Brand#21|ECONOMY PLATED STEEL|36|416 +Brand#21|ECONOMY POLISHED BRASS|23|416 +Brand#21|LARGE ANODIZED COPPER|9|416 +Brand#21|LARGE BRUSHED BRASS|14|416 +Brand#21|LARGE BURNISHED NICKEL|9|416 +Brand#21|LARGE POLISHED NICKEL|14|416 +Brand#21|LARGE POLISHED NICKEL|23|416 +Brand#21|MEDIUM ANODIZED STEEL|23|416 +Brand#21|MEDIUM BURNISHED NICKEL|3|416 +Brand#21|MEDIUM BURNISHED TIN|36|416 +Brand#21|MEDIUM PLATED NICKEL|3|416 +Brand#21|MEDIUM PLATED TIN|23|416 +Brand#21|PROMO ANODIZED BRASS|45|416 +Brand#21|PROMO BURNISHED COPPER|49|416 +Brand#21|SMALL ANODIZED BRASS|9|416 +Brand#21|SMALL ANODIZED COPPER|23|416 +Brand#21|SMALL ANODIZED COPPER|36|416 +Brand#21|SMALL ANODIZED COPPER|49|416 +Brand#21|SMALL BRUSHED NICKEL|3|416 +Brand#21|SMALL BRUSHED STEEL|3|416 +Brand#21|SMALL PLATED BRASS|19|416 +Brand#21|SMALL PLATED BRASS|23|416 +Brand#21|SMALL POLISHED COPPER|49|416 +Brand#21|STANDARD ANODIZED NICKEL|19|416 +Brand#21|STANDARD ANODIZED TIN|3|416 +Brand#21|STANDARD BRUSHED COPPER|14|416 +Brand#21|STANDARD BRUSHED NICKEL|14|416 +Brand#21|STANDARD BURNISHED TIN|23|416 +Brand#21|STANDARD PLATED TIN|49|416 +Brand#21|STANDARD POLISHED BRASS|36|416 +Brand#22|ECONOMY BRUSHED NICKEL|45|416 +Brand#22|ECONOMY BURNISHED BRASS|19|416 +Brand#22|LARGE ANODIZED STEEL|3|416 +Brand#22|LARGE ANODIZED STEEL|19|416 +Brand#22|LARGE BRUSHED COPPER|19|416 +Brand#22|LARGE BRUSHED NICKEL|14|416 +Brand#22|LARGE POLISHED COPPER|14|416 +Brand#22|LARGE POLISHED COPPER|36|416 +Brand#22|LARGE POLISHED STEEL|9|416 +Brand#22|MEDIUM ANODIZED BRASS|14|416 +Brand#22|MEDIUM ANODIZED TIN|19|416 +Brand#22|MEDIUM BRUSHED NICKEL|23|416 +Brand#22|MEDIUM BRUSHED TIN|49|416 +Brand#22|PROMO ANODIZED BRASS|3|416 +Brand#22|PROMO BURNISHED TIN|19|416 +Brand#22|PROMO PLATED STEEL|49|416 +Brand#22|PROMO PLATED TIN|49|416 +Brand#22|PROMO POLISHED STEEL|14|416 +Brand#22|SMALL BURNISHED STEEL|49|416 +Brand#22|STANDARD ANODIZED STEEL|45|416 +Brand#22|STANDARD PLATED TIN|14|416 +Brand#22|STANDARD PLATED TIN|23|416 +Brand#22|STANDARD POLISHED COPPER|49|416 +Brand#22|STANDARD POLISHED STEEL|3|416 +Brand#23|ECONOMY ANODIZED COPPER|14|416 +Brand#23|ECONOMY ANODIZED STEEL|3|416 +Brand#23|ECONOMY ANODIZED STEEL|49|416 +Brand#23|ECONOMY PLATED NICKEL|19|416 +Brand#23|ECONOMY POLISHED COPPER|23|416 +Brand#23|ECONOMY POLISHED NICKEL|14|416 +Brand#23|LARGE BURNISHED COPPER|14|416 +Brand#23|LARGE BURNISHED TIN|3|416 +Brand#23|LARGE PLATED STEEL|45|416 +Brand#23|LARGE PLATED TIN|14|416 +Brand#23|LARGE POLISHED BRASS|19|416 +Brand#23|LARGE POLISHED BRASS|45|416 +Brand#23|MEDIUM ANODIZED NICKEL|9|416 +Brand#23|MEDIUM BRUSHED STEEL|45|416 +Brand#23|MEDIUM BRUSHED STEEL|49|416 +Brand#23|MEDIUM PLATED STEEL|23|416 +Brand#23|PROMO ANODIZED STEEL|36|416 +Brand#23|PROMO BRUSHED BRASS|19|416 +Brand#23|PROMO BURNISHED NICKEL|19|416 +Brand#23|PROMO PLATED BRASS|19|416 +Brand#23|PROMO PLATED TIN|23|416 +Brand#23|PROMO POLISHED NICKEL|3|416 +Brand#23|SMALL ANODIZED BRASS|23|416 +Brand#23|SMALL ANODIZED COPPER|3|416 +Brand#23|SMALL BRUSHED BRASS|3|416 +Brand#23|SMALL BRUSHED NICKEL|23|416 +Brand#23|SMALL BURNISHED BRASS|19|416 +Brand#23|SMALL BURNISHED BRASS|23|416 +Brand#23|SMALL PLATED NICKEL|23|416 +Brand#23|SMALL POLISHED COPPER|14|416 +Brand#23|STANDARD ANODIZED NICKEL|3|416 +Brand#23|STANDARD BURNISHED STEEL|36|416 +Brand#23|STANDARD PLATED COPPER|45|416 +Brand#23|STANDARD POLISHED NICKEL|3|416 +Brand#23|STANDARD POLISHED NICKEL|49|416 +Brand#24|ECONOMY BRUSHED STEEL|23|416 +Brand#24|ECONOMY BRUSHED TIN|23|416 +Brand#24|ECONOMY BURNISHED NICKEL|14|416 +Brand#24|ECONOMY PLATED TIN|36|416 +Brand#24|ECONOMY POLISHED COPPER|14|416 +Brand#24|ECONOMY POLISHED STEEL|45|416 +Brand#24|LARGE BRUSHED NICKEL|19|416 +Brand#24|LARGE BURNISHED NICKEL|14|416 +Brand#24|LARGE PLATED STEEL|9|416 +Brand#24|LARGE POLISHED TIN|45|416 +Brand#24|MEDIUM ANODIZED STEEL|23|416 +Brand#24|MEDIUM PLATED NICKEL|23|416 +Brand#24|MEDIUM PLATED STEEL|19|416 +Brand#24|PROMO BRUSHED BRASS|14|416 +Brand#24|PROMO BRUSHED COPPER|3|416 +Brand#24|PROMO BRUSHED STEEL|3|416 +Brand#24|PROMO PLATED NICKEL|36|416 +Brand#24|PROMO POLISHED COPPER|45|416 +Brand#24|PROMO POLISHED NICKEL|3|416 +Brand#24|PROMO POLISHED STEEL|3|416 +Brand#24|SMALL ANODIZED COPPER|45|416 +Brand#24|SMALL ANODIZED NICKEL|14|416 +Brand#24|SMALL ANODIZED STEEL|3|416 +Brand#24|SMALL ANODIZED TIN|19|416 +Brand#24|SMALL BRUSHED BRASS|9|416 +Brand#24|SMALL BRUSHED NICKEL|3|416 +Brand#24|SMALL BURNISHED NICKEL|3|416 +Brand#24|SMALL PLATED STEEL|45|416 +Brand#24|STANDARD ANODIZED STEEL|36|416 +Brand#24|STANDARD ANODIZED TIN|19|416 +Brand#24|STANDARD BURNISHED BRASS|3|416 +Brand#24|STANDARD PLATED TIN|49|416 +Brand#24|STANDARD POLISHED TIN|23|416 +Brand#25|ECONOMY ANODIZED NICKEL|14|416 +Brand#25|ECONOMY ANODIZED NICKEL|23|416 +Brand#25|ECONOMY ANODIZED STEEL|9|416 +Brand#25|ECONOMY BURNISHED COPPER|36|416 +Brand#25|ECONOMY BURNISHED STEEL|49|416 +Brand#25|ECONOMY PLATED TIN|45|416 +Brand#25|ECONOMY POLISHED NICKEL|49|416 +Brand#25|LARGE ANODIZED NICKEL|14|416 +Brand#25|LARGE ANODIZED NICKEL|19|416 +Brand#25|LARGE BRUSHED BRASS|49|416 +Brand#25|LARGE BRUSHED TIN|49|416 +Brand#25|MEDIUM ANODIZED TIN|9|416 +Brand#25|MEDIUM BRUSHED COPPER|36|416 +Brand#25|MEDIUM BRUSHED NICKEL|36|416 +Brand#25|MEDIUM BURNISHED BRASS|3|416 +Brand#25|MEDIUM BURNISHED TIN|45|416 +Brand#25|MEDIUM PLATED STEEL|49|416 +Brand#25|PROMO ANODIZED COPPER|19|416 +Brand#25|PROMO BURNISHED COPPER|23|416 +Brand#25|SMALL ANODIZED NICKEL|14|416 +Brand#25|SMALL ANODIZED NICKEL|19|416 +Brand#25|SMALL BURNISHED TIN|19|416 +Brand#25|SMALL POLISHED COPPER|45|416 +Brand#25|SMALL POLISHED NICKEL|23|416 +Brand#25|STANDARD ANODIZED TIN|19|416 +Brand#25|STANDARD POLISHED BRASS|14|416 +Brand#25|STANDARD POLISHED NICKEL|19|416 +Brand#25|STANDARD POLISHED STEEL|23|416 +Brand#25|STANDARD POLISHED TIN|3|416 +Brand#25|STANDARD POLISHED TIN|19|416 +Brand#31|ECONOMY ANODIZED BRASS|14|416 +Brand#31|ECONOMY ANODIZED TIN|14|416 +Brand#31|ECONOMY BRUSHED BRASS|49|416 +Brand#31|ECONOMY BURNISHED COPPER|36|416 +Brand#31|ECONOMY PLATED TIN|23|416 +Brand#31|ECONOMY POLISHED NICKEL|45|416 +Brand#31|ECONOMY POLISHED STEEL|3|416 +Brand#31|LARGE ANODIZED NICKEL|19|416 +Brand#31|LARGE ANODIZED NICKEL|49|416 +Brand#31|LARGE BRUSHED COPPER|9|416 +Brand#31|LARGE BRUSHED STEEL|14|416 +Brand#31|LARGE BRUSHED STEEL|19|416 +Brand#31|LARGE BURNISHED BRASS|3|416 +Brand#31|LARGE BURNISHED TIN|14|416 +Brand#31|LARGE PLATED NICKEL|36|416 +Brand#31|LARGE POLISHED STEEL|3|416 +Brand#31|LARGE POLISHED STEEL|36|416 +Brand#31|MEDIUM BRUSHED COPPER|49|416 +Brand#31|MEDIUM BURNISHED NICKEL|45|416 +Brand#31|MEDIUM BURNISHED STEEL|49|416 +Brand#31|MEDIUM BURNISHED TIN|3|416 +Brand#31|PROMO ANODIZED NICKEL|3|416 +Brand#31|PROMO BURNISHED COPPER|3|416 +Brand#31|PROMO BURNISHED STEEL|36|416 +Brand#31|PROMO PLATED NICKEL|45|416 +Brand#31|PROMO PLATED STEEL|3|416 +Brand#31|PROMO PLATED STEEL|36|416 +Brand#31|PROMO PLATED TIN|45|416 +Brand#31|PROMO POLISHED STEEL|23|416 +Brand#31|SMALL ANODIZED COPPER|45|416 +Brand#31|SMALL ANODIZED NICKEL|19|416 +Brand#31|SMALL ANODIZED NICKEL|49|416 +Brand#31|SMALL BRUSHED BRASS|14|416 +Brand#31|SMALL PLATED NICKEL|14|416 +Brand#31|SMALL PLATED NICKEL|36|416 +Brand#31|SMALL PLATED TIN|23|416 +Brand#31|STANDARD ANODIZED TIN|23|416 +Brand#31|STANDARD BRUSHED NICKEL|36|416 +Brand#31|STANDARD BURNISHED TIN|23|416 +Brand#31|STANDARD POLISHED COPPER|9|416 +Brand#31|STANDARD POLISHED COPPER|36|416 +Brand#31|STANDARD POLISHED NICKEL|23|416 +Brand#31|STANDARD POLISHED STEEL|19|416 +Brand#31|STANDARD POLISHED TIN|36|416 +Brand#32|ECONOMY BRUSHED TIN|9|416 +Brand#32|ECONOMY BURNISHED TIN|49|416 +Brand#32|ECONOMY PLATED STEEL|3|416 +Brand#32|ECONOMY PLATED STEEL|14|416 +Brand#32|ECONOMY POLISHED BRASS|36|416 +Brand#32|LARGE ANODIZED STEEL|19|416 +Brand#32|LARGE BRUSHED COPPER|36|416 +Brand#32|LARGE BRUSHED NICKEL|45|416 +Brand#32|LARGE BURNISHED STEEL|45|416 +Brand#32|LARGE PLATED NICKEL|9|416 +Brand#32|LARGE POLISHED BRASS|49|416 +Brand#32|LARGE POLISHED STEEL|14|416 +Brand#32|MEDIUM BRUSHED COPPER|19|416 +Brand#32|PROMO ANODIZED NICKEL|36|416 +Brand#32|PROMO ANODIZED STEEL|49|416 +Brand#32|PROMO BURNISHED TIN|45|416 +Brand#32|PROMO PLATED NICKEL|14|416 +Brand#32|PROMO POLISHED TIN|9|416 +Brand#32|SMALL ANODIZED NICKEL|14|416 +Brand#32|SMALL BRUSHED COPPER|9|416 +Brand#32|SMALL BRUSHED TIN|19|416 +Brand#32|SMALL PLATED NICKEL|14|416 +Brand#32|STANDARD ANODIZED COPPER|19|416 +Brand#32|STANDARD BRUSHED TIN|19|416 +Brand#32|STANDARD BRUSHED TIN|49|416 +Brand#32|STANDARD BURNISHED BRASS|19|416 +Brand#32|STANDARD BURNISHED STEEL|9|416 +Brand#32|STANDARD PLATED BRASS|19|416 +Brand#32|STANDARD PLATED STEEL|9|416 +Brand#32|STANDARD PLATED STEEL|49|416 +Brand#32|STANDARD POLISHED BRASS|19|416 +Brand#32|STANDARD POLISHED NICKEL|23|416 +Brand#33|ECONOMY ANODIZED NICKEL|14|416 +Brand#33|ECONOMY BURNISHED BRASS|9|416 +Brand#33|ECONOMY POLISHED COPPER|14|416 +Brand#33|ECONOMY POLISHED TIN|49|416 +Brand#33|LARGE BRUSHED BRASS|14|416 +Brand#33|LARGE BRUSHED COPPER|23|416 +Brand#33|LARGE PLATED COPPER|19|416 +Brand#33|LARGE PLATED NICKEL|36|416 +Brand#33|LARGE POLISHED COPPER|14|416 +Brand#33|LARGE POLISHED STEEL|19|416 +Brand#33|MEDIUM ANODIZED STEEL|36|416 +Brand#33|MEDIUM BRUSHED TIN|3|416 +Brand#33|MEDIUM BRUSHED TIN|14|416 +Brand#33|MEDIUM BURNISHED BRASS|49|416 +Brand#33|MEDIUM BURNISHED STEEL|49|416 +Brand#33|PROMO ANODIZED BRASS|3|416 +Brand#33|PROMO ANODIZED BRASS|23|416 +Brand#33|PROMO ANODIZED NICKEL|14|416 +Brand#33|PROMO ANODIZED STEEL|14|416 +Brand#33|PROMO BRUSHED NICKEL|45|416 +Brand#33|PROMO PLATED COPPER|23|416 +Brand#33|PROMO PLATED NICKEL|36|416 +Brand#33|PROMO PLATED STEEL|19|416 +Brand#33|SMALL BRUSHED BRASS|3|416 +Brand#33|SMALL BRUSHED BRASS|9|416 +Brand#33|SMALL PLATED STEEL|9|416 +Brand#33|SMALL POLISHED STEEL|9|416 +Brand#33|STANDARD ANODIZED TIN|14|416 +Brand#33|STANDARD BRUSHED BRASS|3|416 +Brand#33|STANDARD BRUSHED COPPER|9|416 +Brand#33|STANDARD BURNISHED COPPER|23|416 +Brand#33|STANDARD BURNISHED COPPER|49|416 +Brand#33|STANDARD POLISHED NICKEL|45|416 +Brand#33|STANDARD POLISHED STEEL|3|416 +Brand#33|STANDARD POLISHED TIN|9|416 +Brand#34|ECONOMY ANODIZED COPPER|45|416 +Brand#34|ECONOMY BRUSHED TIN|3|416 +Brand#34|ECONOMY BURNISHED NICKEL|23|416 +Brand#34|ECONOMY BURNISHED STEEL|9|416 +Brand#34|ECONOMY POLISHED COPPER|3|416 +Brand#34|LARGE ANODIZED STEEL|3|416 +Brand#34|LARGE PLATED NICKEL|23|416 +Brand#34|LARGE POLISHED COPPER|23|416 +Brand#34|LARGE POLISHED NICKEL|3|416 +Brand#34|LARGE POLISHED TIN|49|416 +Brand#34|MEDIUM ANODIZED COPPER|45|416 +Brand#34|MEDIUM BRUSHED COPPER|19|416 +Brand#34|MEDIUM BRUSHED NICKEL|9|416 +Brand#34|MEDIUM BRUSHED STEEL|49|416 +Brand#34|MEDIUM BURNISHED TIN|9|416 +Brand#34|MEDIUM PLATED COPPER|36|416 +Brand#34|PROMO BRUSHED BRASS|14|416 +Brand#34|PROMO BURNISHED TIN|45|416 +Brand#34|PROMO POLISHED BRASS|19|416 +Brand#34|PROMO POLISHED NICKEL|14|416 +Brand#34|SMALL ANODIZED TIN|19|416 +Brand#34|SMALL BURNISHED NICKEL|45|416 +Brand#34|SMALL PLATED NICKEL|9|416 +Brand#34|STANDARD BRUSHED COPPER|14|416 +Brand#34|STANDARD BRUSHED STEEL|14|416 +Brand#34|STANDARD BRUSHED TIN|36|416 +Brand#34|STANDARD BURNISHED BRASS|36|416 +Brand#34|STANDARD BURNISHED COPPER|45|416 +Brand#34|STANDARD POLISHED BRASS|3|416 +Brand#34|STANDARD POLISHED COPPER|36|416 +Brand#34|STANDARD POLISHED NICKEL|36|416 +Brand#35|ECONOMY ANODIZED STEEL|3|416 +Brand#35|ECONOMY BRUSHED COPPER|14|416 +Brand#35|ECONOMY BRUSHED NICKEL|19|416 +Brand#35|ECONOMY BURNISHED BRASS|14|416 +Brand#35|ECONOMY PLATED STEEL|23|416 +Brand#35|ECONOMY POLISHED COPPER|36|416 +Brand#35|LARGE ANODIZED BRASS|19|416 +Brand#35|LARGE ANODIZED STEEL|9|416 +Brand#35|LARGE ANODIZED TIN|14|416 +Brand#35|LARGE BURNISHED BRASS|45|416 +Brand#35|LARGE BURNISHED COPPER|45|416 +Brand#35|LARGE POLISHED STEEL|36|416 +Brand#35|LARGE POLISHED TIN|36|416 +Brand#35|MEDIUM BRUSHED BRASS|9|416 +Brand#35|PROMO BRUSHED BRASS|45|416 +Brand#35|PROMO BRUSHED NICKEL|45|416 +Brand#35|PROMO BURNISHED BRASS|3|416 +Brand#35|PROMO BURNISHED STEEL|23|416 +Brand#35|PROMO BURNISHED STEEL|49|416 +Brand#35|PROMO PLATED STEEL|23|416 +Brand#35|PROMO POLISHED COPPER|3|416 +Brand#35|PROMO POLISHED STEEL|9|416 +Brand#35|SMALL ANODIZED COPPER|45|416 +Brand#35|SMALL ANODIZED NICKEL|45|416 +Brand#35|SMALL BRUSHED TIN|23|416 +Brand#35|SMALL BURNISHED COPPER|49|416 +Brand#35|SMALL POLISHED NICKEL|14|416 +Brand#35|STANDARD ANODIZED COPPER|14|416 +Brand#35|STANDARD BURNISHED BRASS|36|416 +Brand#35|STANDARD BURNISHED COPPER|3|416 +Brand#35|STANDARD POLISHED BRASS|23|416 +Brand#41|ECONOMY ANODIZED COPPER|3|416 +Brand#41|ECONOMY ANODIZED TIN|36|416 +Brand#41|ECONOMY BRUSHED BRASS|3|416 +Brand#41|ECONOMY PLATED NICKEL|45|416 +Brand#41|ECONOMY PLATED STEEL|19|416 +Brand#41|ECONOMY POLISHED NICKEL|49|416 +Brand#41|LARGE ANODIZED BRASS|45|416 +Brand#41|LARGE ANODIZED NICKEL|49|416 +Brand#41|LARGE ANODIZED TIN|19|416 +Brand#41|LARGE BRUSHED BRASS|23|416 +Brand#41|LARGE BRUSHED TIN|3|416 +Brand#41|LARGE BURNISHED BRASS|14|416 +Brand#41|LARGE BURNISHED TIN|49|416 +Brand#41|LARGE PLATED BRASS|36|416 +Brand#41|LARGE PLATED NICKEL|3|416 +Brand#41|LARGE PLATED TIN|23|416 +Brand#41|LARGE POLISHED COPPER|9|416 +Brand#41|MEDIUM BRUSHED STEEL|23|416 +Brand#41|MEDIUM BURNISHED BRASS|3|416 +Brand#41|MEDIUM PLATED COPPER|23|416 +Brand#41|PROMO ANODIZED NICKEL|19|416 +Brand#41|PROMO ANODIZED TIN|3|416 +Brand#41|PROMO BURNISHED COPPER|14|416 +Brand#41|PROMO BURNISHED COPPER|45|416 +Brand#41|PROMO PLATED BRASS|45|416 +Brand#41|PROMO POLISHED COPPER|14|416 +Brand#41|SMALL ANODIZED BRASS|49|416 +Brand#41|SMALL BRUSHED BRASS|36|416 +Brand#41|SMALL BRUSHED COPPER|14|416 +Brand#41|SMALL BRUSHED COPPER|23|416 +Brand#41|SMALL BRUSHED COPPER|49|416 +Brand#41|SMALL BRUSHED STEEL|23|416 +Brand#41|SMALL BURNISHED BRASS|3|416 +Brand#41|SMALL BURNISHED NICKEL|45|416 +Brand#41|SMALL PLATED BRASS|36|416 +Brand#41|SMALL POLISHED BRASS|45|416 +Brand#41|STANDARD ANODIZED NICKEL|14|416 +Brand#41|STANDARD BRUSHED NICKEL|3|416 +Brand#41|STANDARD BRUSHED TIN|36|416 +Brand#41|STANDARD BURNISHED STEEL|14|416 +Brand#41|STANDARD PLATED BRASS|49|416 +Brand#41|STANDARD PLATED NICKEL|23|416 +Brand#41|STANDARD POLISHED STEEL|3|416 +Brand#42|ECONOMY ANODIZED STEEL|23|416 +Brand#42|ECONOMY ANODIZED TIN|14|416 +Brand#42|ECONOMY ANODIZED TIN|49|416 +Brand#42|ECONOMY BURNISHED TIN|14|416 +Brand#42|ECONOMY PLATED STEEL|3|416 +Brand#42|ECONOMY POLISHED TIN|23|416 +Brand#42|LARGE ANODIZED BRASS|9|416 +Brand#42|LARGE ANODIZED TIN|9|416 +Brand#42|LARGE BRUSHED NICKEL|23|416 +Brand#42|LARGE PLATED COPPER|36|416 +Brand#42|LARGE POLISHED TIN|36|416 +Brand#42|MEDIUM ANODIZED BRASS|3|416 +Brand#42|MEDIUM ANODIZED COPPER|49|416 +Brand#42|MEDIUM ANODIZED TIN|36|416 +Brand#42|MEDIUM BRUSHED NICKEL|45|416 +Brand#42|MEDIUM BURNISHED TIN|49|416 +Brand#42|MEDIUM PLATED NICKEL|14|416 +Brand#42|MEDIUM PLATED NICKEL|23|416 +Brand#42|MEDIUM PLATED STEEL|23|416 +Brand#42|PROMO PLATED COPPER|14|416 +Brand#42|PROMO POLISHED BRASS|3|416 +Brand#42|PROMO POLISHED STEEL|23|416 +Brand#42|SMALL BRUSHED COPPER|19|416 +Brand#42|SMALL BURNISHED COPPER|9|416 +Brand#42|SMALL PLATED BRASS|23|416 +Brand#42|SMALL POLISHED STEEL|9|416 +Brand#42|STANDARD ANODIZED COPPER|14|416 +Brand#42|STANDARD ANODIZED NICKEL|45|416 +Brand#42|STANDARD BRUSHED BRASS|49|416 +Brand#42|STANDARD BRUSHED TIN|45|416 +Brand#42|STANDARD BURNISHED BRASS|9|416 +Brand#42|STANDARD PLATED TIN|19|416 +Brand#42|STANDARD POLISHED TIN|9|416 +Brand#43|ECONOMY ANODIZED COPPER|3|416 +Brand#43|ECONOMY ANODIZED STEEL|14|416 +Brand#43|ECONOMY BURNISHED BRASS|23|416 +Brand#43|ECONOMY BURNISHED COPPER|23|416 +Brand#43|ECONOMY POLISHED NICKEL|45|416 +Brand#43|LARGE ANODIZED BRASS|23|416 +Brand#43|LARGE BRUSHED TIN|19|416 +Brand#43|LARGE BURNISHED BRASS|45|416 +Brand#43|LARGE BURNISHED TIN|3|416 +Brand#43|LARGE PLATED COPPER|3|416 +Brand#43|LARGE POLISHED STEEL|49|416 +Brand#43|MEDIUM BRUSHED COPPER|49|416 +Brand#43|PROMO ANODIZED STEEL|36|416 +Brand#43|PROMO BRUSHED BRASS|19|416 +Brand#43|PROMO BRUSHED BRASS|23|416 +Brand#43|PROMO BRUSHED NICKEL|23|416 +Brand#43|PROMO BRUSHED STEEL|19|416 +Brand#43|PROMO BURNISHED COPPER|45|416 +Brand#43|PROMO BURNISHED TIN|9|416 +Brand#43|PROMO PLATED NICKEL|19|416 +Brand#43|PROMO POLISHED STEEL|3|416 +Brand#43|PROMO POLISHED TIN|14|416 +Brand#43|PROMO POLISHED TIN|19|416 +Brand#43|SMALL BRUSHED COPPER|3|416 +Brand#43|SMALL BRUSHED STEEL|36|416 +Brand#43|SMALL BRUSHED TIN|36|416 +Brand#43|SMALL BURNISHED BRASS|9|416 +Brand#43|SMALL PLATED BRASS|19|416 +Brand#43|SMALL PLATED COPPER|45|416 +Brand#43|STANDARD ANODIZED COPPER|36|416 +Brand#43|STANDARD BRUSHED BRASS|36|416 +Brand#43|STANDARD BRUSHED BRASS|45|416 +Brand#43|STANDARD BRUSHED COPPER|49|416 +Brand#43|STANDARD BRUSHED NICKEL|23|416 +Brand#43|STANDARD BURNISHED COPPER|45|416 +Brand#43|STANDARD BURNISHED STEEL|36|416 +Brand#43|STANDARD PLATED BRASS|9|416 +Brand#43|STANDARD PLATED BRASS|36|416 +Brand#44|ECONOMY ANODIZED TIN|14|416 +Brand#44|ECONOMY BURNISHED NICKEL|36|416 +Brand#44|ECONOMY POLISHED COPPER|19|416 +Brand#44|ECONOMY POLISHED STEEL|3|416 +Brand#44|LARGE ANODIZED STEEL|45|416 +Brand#44|LARGE ANODIZED STEEL|49|416 +Brand#44|LARGE BRUSHED BRASS|23|416 +Brand#44|LARGE BRUSHED NICKEL|14|416 +Brand#44|LARGE BRUSHED TIN|9|416 +Brand#44|LARGE BURNISHED COPPER|36|416 +Brand#44|LARGE PLATED COPPER|45|416 +Brand#44|LARGE POLISHED COPPER|14|416 +Brand#44|LARGE POLISHED COPPER|45|416 +Brand#44|LARGE POLISHED COPPER|49|416 +Brand#44|LARGE POLISHED NICKEL|19|416 +Brand#44|MEDIUM ANODIZED BRASS|36|416 +Brand#44|MEDIUM ANODIZED STEEL|49|416 +Brand#44|MEDIUM BURNISHED TIN|45|416 +Brand#44|MEDIUM PLATED NICKEL|45|416 +Brand#44|MEDIUM PLATED TIN|49|416 +Brand#44|PROMO ANODIZED COPPER|19|416 +Brand#44|PROMO BRUSHED STEEL|14|416 +Brand#44|PROMO BURNISHED STEEL|45|416 +Brand#44|PROMO POLISHED NICKEL|9|416 +Brand#44|SMALL BURNISHED BRASS|23|416 +Brand#44|SMALL BURNISHED STEEL|3|416 +Brand#44|SMALL PLATED BRASS|14|416 +Brand#44|SMALL PLATED TIN|14|416 +Brand#44|SMALL POLISHED COPPER|9|416 +Brand#44|SMALL POLISHED COPPER|49|416 +Brand#44|SMALL POLISHED NICKEL|45|416 +Brand#44|STANDARD BRUSHED BRASS|3|416 +Brand#44|STANDARD BRUSHED TIN|49|416 +Brand#44|STANDARD BURNISHED TIN|14|416 +Brand#44|STANDARD PLATED NICKEL|9|416 +Brand#44|STANDARD POLISHED BRASS|14|416 +Brand#44|STANDARD POLISHED NICKEL|49|416 +Brand#51|ECONOMY ANODIZED COPPER|23|416 +Brand#51|ECONOMY ANODIZED TIN|45|416 +Brand#51|ECONOMY BRUSHED COPPER|9|416 +Brand#51|ECONOMY PLATED TIN|36|416 +Brand#51|ECONOMY POLISHED BRASS|45|416 +Brand#51|ECONOMY POLISHED COPPER|45|416 +Brand#51|LARGE ANODIZED STEEL|36|416 +Brand#51|LARGE ANODIZED TIN|3|416 +Brand#51|LARGE BRUSHED COPPER|49|416 +Brand#51|LARGE BURNISHED BRASS|9|416 +Brand#51|LARGE BURNISHED TIN|36|416 +Brand#51|LARGE PLATED BRASS|3|416 +Brand#51|LARGE PLATED COPPER|23|416 +Brand#51|MEDIUM ANODIZED STEEL|23|416 +Brand#51|MEDIUM ANODIZED STEEL|36|416 +Brand#51|MEDIUM PLATED BRASS|36|416 +Brand#51|PROMO BRUSHED STEEL|36|416 +Brand#51|PROMO BRUSHED TIN|36|416 +Brand#51|PROMO BURNISHED TIN|9|416 +Brand#51|PROMO BURNISHED TIN|49|416 +Brand#51|PROMO PLATED TIN|19|416 +Brand#51|PROMO POLISHED COPPER|3|416 +Brand#51|PROMO POLISHED STEEL|3|416 +Brand#51|PROMO POLISHED TIN|36|416 +Brand#51|SMALL BRUSHED COPPER|14|416 +Brand#51|SMALL BRUSHED STEEL|36|416 +Brand#51|SMALL BURNISHED COPPER|3|416 +Brand#51|SMALL BURNISHED COPPER|49|416 +Brand#51|STANDARD ANODIZED STEEL|3|416 +Brand#52|ECONOMY ANODIZED BRASS|3|416 +Brand#52|ECONOMY ANODIZED BRASS|19|416 +Brand#52|ECONOMY BURNISHED TIN|49|416 +Brand#52|ECONOMY POLISHED COPPER|45|416 +Brand#52|ECONOMY POLISHED COPPER|49|416 +Brand#52|LARGE ANODIZED COPPER|9|416 +Brand#52|LARGE ANODIZED NICKEL|19|416 +Brand#52|LARGE BURNISHED BRASS|9|416 +Brand#52|MEDIUM ANODIZED BRASS|14|416 +Brand#52|MEDIUM ANODIZED COPPER|14|416 +Brand#52|MEDIUM ANODIZED NICKEL|23|416 +Brand#52|MEDIUM ANODIZED STEEL|3|416 +Brand#52|MEDIUM BURNISHED COPPER|49|416 +Brand#52|MEDIUM BURNISHED STEEL|36|416 +Brand#52|MEDIUM PLATED COPPER|19|416 +Brand#52|MEDIUM PLATED TIN|3|416 +Brand#52|PROMO ANODIZED TIN|14|416 +Brand#52|PROMO ANODIZED TIN|19|416 +Brand#52|PROMO BRUSHED NICKEL|45|416 +Brand#52|PROMO BURNISHED COPPER|23|416 +Brand#52|PROMO BURNISHED COPPER|49|416 +Brand#52|PROMO BURNISHED NICKEL|19|416 +Brand#52|PROMO BURNISHED STEEL|9|416 +Brand#52|PROMO POLISHED NICKEL|19|416 +Brand#52|SMALL ANODIZED BRASS|3|416 +Brand#52|SMALL BRUSHED BRASS|3|416 +Brand#52|SMALL BRUSHED NICKEL|49|416 +Brand#52|SMALL BRUSHED STEEL|23|416 +Brand#52|SMALL POLISHED BRASS|9|416 +Brand#52|STANDARD ANODIZED TIN|14|416 +Brand#52|STANDARD ANODIZED TIN|19|416 +Brand#52|STANDARD BRUSHED TIN|36|416 +Brand#52|STANDARD BURNISHED NICKEL|3|416 +Brand#52|STANDARD BURNISHED NICKEL|19|416 +Brand#52|STANDARD PLATED BRASS|14|416 +Brand#52|STANDARD POLISHED COPPER|36|416 +Brand#52|STANDARD POLISHED NICKEL|23|416 +Brand#53|ECONOMY BRUSHED BRASS|3|416 +Brand#53|ECONOMY BURNISHED BRASS|49|416 +Brand#53|ECONOMY BURNISHED TIN|14|416 +Brand#53|ECONOMY BURNISHED TIN|19|416 +Brand#53|LARGE ANODIZED BRASS|9|416 +Brand#53|LARGE ANODIZED COPPER|23|416 +Brand#53|LARGE BRUSHED TIN|49|416 +Brand#53|LARGE BURNISHED NICKEL|23|416 +Brand#53|LARGE BURNISHED STEEL|45|416 +Brand#53|LARGE POLISHED BRASS|36|416 +Brand#53|MEDIUM ANODIZED BRASS|19|416 +Brand#53|MEDIUM BRUSHED BRASS|23|416 +Brand#53|MEDIUM BURNISHED COPPER|14|416 +Brand#53|MEDIUM BURNISHED NICKEL|19|416 +Brand#53|PROMO ANODIZED BRASS|45|416 +Brand#53|PROMO ANODIZED NICKEL|45|416 +Brand#53|PROMO BRUSHED BRASS|3|416 +Brand#53|PROMO BRUSHED TIN|14|416 +Brand#53|PROMO BURNISHED STEEL|9|416 +Brand#53|PROMO PLATED STEEL|3|416 +Brand#53|PROMO PLATED TIN|36|416 +Brand#53|PROMO PLATED TIN|45|416 +Brand#53|PROMO POLISHED NICKEL|9|416 +Brand#53|PROMO POLISHED STEEL|49|416 +Brand#53|SMALL ANODIZED NICKEL|19|416 +Brand#53|SMALL BRUSHED BRASS|19|416 +Brand#53|SMALL BURNISHED COPPER|36|416 +Brand#53|SMALL BURNISHED TIN|19|416 +Brand#53|SMALL POLISHED COPPER|3|416 +Brand#53|SMALL POLISHED NICKEL|23|416 +Brand#53|STANDARD ANODIZED BRASS|3|416 +Brand#53|STANDARD ANODIZED COPPER|45|416 +Brand#53|STANDARD ANODIZED TIN|36|416 +Brand#53|STANDARD BRUSHED TIN|45|416 +Brand#53|STANDARD BURNISHED BRASS|3|416 +Brand#53|STANDARD BURNISHED STEEL|36|416 +Brand#53|STANDARD PLATED TIN|45|416 +Brand#54|ECONOMY ANODIZED BRASS|19|416 +Brand#54|ECONOMY ANODIZED COPPER|19|416 +Brand#54|ECONOMY ANODIZED NICKEL|49|416 +Brand#54|ECONOMY ANODIZED STEEL|49|416 +Brand#54|ECONOMY BRUSHED STEEL|9|416 +Brand#54|ECONOMY BURNISHED COPPER|9|416 +Brand#54|LARGE ANODIZED BRASS|49|416 +Brand#54|LARGE ANODIZED COPPER|23|416 +Brand#54|LARGE PLATED STEEL|23|416 +Brand#54|LARGE POLISHED BRASS|9|416 +Brand#54|MEDIUM BRUSHED COPPER|19|416 +Brand#54|MEDIUM BURNISHED STEEL|36|416 +Brand#54|MEDIUM BURNISHED STEEL|45|416 +Brand#54|PROMO BRUSHED COPPER|9|416 +Brand#54|PROMO BRUSHED STEEL|19|416 +Brand#54|PROMO BURNISHED BRASS|23|416 +Brand#54|PROMO BURNISHED COPPER|45|416 +Brand#54|PROMO POLISHED STEEL|49|416 +Brand#54|PROMO POLISHED TIN|45|416 +Brand#54|SMALL ANODIZED BRASS|3|416 +Brand#54|SMALL ANODIZED BRASS|23|416 +Brand#54|SMALL BRUSHED BRASS|45|416 +Brand#54|SMALL PLATED NICKEL|14|416 +Brand#54|SMALL POLISHED TIN|9|416 +Brand#54|STANDARD BURNISHED COPPER|3|416 +Brand#54|STANDARD BURNISHED TIN|49|416 +Brand#54|STANDARD PLATED STEEL|23|416 +Brand#54|STANDARD PLATED TIN|49|416 +Brand#54|STANDARD POLISHED NICKEL|3|416 +Brand#54|STANDARD POLISHED STEEL|45|416 +Brand#55|ECONOMY ANODIZED BRASS|49|416 +Brand#55|ECONOMY BRUSHED NICKEL|36|416 +Brand#55|ECONOMY BURNISHED BRASS|14|416 +Brand#55|ECONOMY BURNISHED NICKEL|9|416 +Brand#55|ECONOMY PLATED BRASS|9|416 +Brand#55|ECONOMY POLISHED BRASS|23|416 +Brand#55|ECONOMY POLISHED NICKEL|36|416 +Brand#55|LARGE ANODIZED BRASS|14|416 +Brand#55|LARGE PLATED BRASS|49|416 +Brand#55|LARGE PLATED STEEL|45|416 +Brand#55|LARGE PLATED TIN|45|416 +Brand#55|LARGE POLISHED BRASS|23|416 +Brand#55|MEDIUM ANODIZED NICKEL|14|416 +Brand#55|MEDIUM BRUSHED NICKEL|23|416 +Brand#55|MEDIUM BRUSHED STEEL|3|416 +Brand#55|MEDIUM BURNISHED NICKEL|9|416 +Brand#55|MEDIUM PLATED STEEL|14|416 +Brand#55|PROMO BRUSHED NICKEL|19|416 +Brand#55|PROMO BURNISHED BRASS|49|416 +Brand#55|PROMO BURNISHED COPPER|36|416 +Brand#55|PROMO BURNISHED STEEL|36|416 +Brand#55|PROMO POLISHED TIN|9|416 +Brand#55|SMALL ANODIZED STEEL|36|416 +Brand#55|SMALL BURNISHED BRASS|49|416 +Brand#55|SMALL BURNISHED NICKEL|23|416 +Brand#55|SMALL BURNISHED STEEL|3|416 +Brand#55|SMALL PLATED BRASS|36|416 +Brand#55|SMALL PLATED NICKEL|19|416 +Brand#55|STANDARD BRUSHED BRASS|49|416 +Brand#55|STANDARD BURNISHED BRASS|14|416 +Brand#55|STANDARD BURNISHED COPPER|23|416 +Brand#55|STANDARD BURNISHED COPPER|36|416 +Brand#55|STANDARD BURNISHED STEEL|23|416 +Brand#55|STANDARD PLATED TIN|14|416 +Brand#55|STANDARD POLISHED COPPER|36|416 +Brand#11|ECONOMY PLATED STEEL|3|415 +Brand#11|LARGE BURNISHED NICKEL|45|415 +Brand#11|MEDIUM BRUSHED BRASS|36|415 +Brand#11|MEDIUM BRUSHED COPPER|9|415 +Brand#11|MEDIUM BRUSHED TIN|14|415 +Brand#11|MEDIUM PLATED COPPER|36|415 +Brand#11|SMALL PLATED BRASS|36|415 +Brand#11|STANDARD PLATED TIN|9|415 +Brand#12|ECONOMY BRUSHED NICKEL|14|415 +Brand#12|ECONOMY BRUSHED STEEL|45|415 +Brand#12|ECONOMY BURNISHED BRASS|3|415 +Brand#12|LARGE ANODIZED TIN|19|415 +Brand#12|LARGE BRUSHED NICKEL|49|415 +Brand#12|LARGE BURNISHED STEEL|14|415 +Brand#12|LARGE PLATED BRASS|19|415 +Brand#12|PROMO BRUSHED COPPER|49|415 +Brand#12|PROMO BURNISHED COPPER|9|415 +Brand#12|SMALL BURNISHED STEEL|23|415 +Brand#12|STANDARD ANODIZED STEEL|19|415 +Brand#12|STANDARD POLISHED STEEL|3|415 +Brand#13|ECONOMY BURNISHED STEEL|14|415 +Brand#13|ECONOMY BURNISHED TIN|3|415 +Brand#13|ECONOMY POLISHED TIN|49|415 +Brand#13|LARGE BURNISHED NICKEL|23|415 +Brand#13|MEDIUM BRUSHED TIN|14|415 +Brand#13|MEDIUM BRUSHED TIN|23|415 +Brand#13|MEDIUM PLATED BRASS|14|415 +Brand#14|ECONOMY POLISHED TIN|19|415 +Brand#14|LARGE POLISHED STEEL|36|415 +Brand#14|PROMO BRUSHED COPPER|9|415 +Brand#14|PROMO BRUSHED TIN|23|415 +Brand#14|STANDARD ANODIZED NICKEL|3|415 +Brand#14|STANDARD PLATED NICKEL|36|415 +Brand#15|ECONOMY ANODIZED NICKEL|3|415 +Brand#15|ECONOMY BRUSHED COPPER|36|415 +Brand#15|LARGE BRUSHED STEEL|3|415 +Brand#15|LARGE POLISHED COPPER|3|415 +Brand#15|LARGE POLISHED STEEL|19|415 +Brand#15|MEDIUM ANODIZED TIN|45|415 +Brand#15|SMALL ANODIZED NICKEL|14|415 +Brand#15|SMALL BRUSHED STEEL|45|415 +Brand#15|STANDARD POLISHED STEEL|14|415 +Brand#21|ECONOMY PLATED NICKEL|36|415 +Brand#21|ECONOMY POLISHED NICKEL|23|415 +Brand#21|ECONOMY POLISHED TIN|14|415 +Brand#21|LARGE ANODIZED STEEL|49|415 +Brand#21|LARGE BRUSHED BRASS|49|415 +Brand#21|LARGE BURNISHED NICKEL|3|415 +Brand#21|PROMO BRUSHED TIN|19|415 +Brand#21|PROMO PLATED COPPER|3|415 +Brand#21|SMALL BRUSHED STEEL|9|415 +Brand#21|STANDARD PLATED NICKEL|36|415 +Brand#21|STANDARD POLISHED NICKEL|14|415 +Brand#22|MEDIUM ANODIZED STEEL|49|415 +Brand#22|MEDIUM ANODIZED TIN|36|415 +Brand#22|PROMO ANODIZED COPPER|14|415 +Brand#22|PROMO BURNISHED BRASS|23|415 +Brand#22|PROMO PLATED TIN|36|415 +Brand#22|PROMO POLISHED COPPER|49|415 +Brand#22|PROMO POLISHED STEEL|3|415 +Brand#22|STANDARD ANODIZED COPPER|3|415 +Brand#22|STANDARD BURNISHED BRASS|49|415 +Brand#22|STANDARD PLATED NICKEL|49|415 +Brand#23|ECONOMY BURNISHED STEEL|14|415 +Brand#23|ECONOMY POLISHED NICKEL|9|415 +Brand#23|LARGE ANODIZED TIN|45|415 +Brand#23|MEDIUM BRUSHED BRASS|36|415 +Brand#23|PROMO BURNISHED COPPER|9|415 +Brand#23|PROMO BURNISHED STEEL|9|415 +Brand#23|SMALL BURNISHED NICKEL|36|415 +Brand#23|STANDARD ANODIZED BRASS|36|415 +Brand#23|STANDARD POLISHED NICKEL|45|415 +Brand#24|LARGE ANODIZED BRASS|23|415 +Brand#24|LARGE BURNISHED STEEL|36|415 +Brand#24|MEDIUM BRUSHED BRASS|9|415 +Brand#24|MEDIUM BURNISHED BRASS|23|415 +Brand#24|MEDIUM PLATED NICKEL|3|415 +Brand#24|MEDIUM PLATED STEEL|45|415 +Brand#24|PROMO BRUSHED NICKEL|23|415 +Brand#24|PROMO PLATED STEEL|49|415 +Brand#24|PROMO PLATED TIN|49|415 +Brand#24|SMALL BURNISHED BRASS|14|415 +Brand#24|SMALL BURNISHED STEEL|9|415 +Brand#24|SMALL BURNISHED STEEL|14|415 +Brand#25|ECONOMY ANODIZED COPPER|9|415 +Brand#25|ECONOMY POLISHED NICKEL|36|415 +Brand#25|MEDIUM BRUSHED NICKEL|23|415 +Brand#25|PROMO BRUSHED COPPER|45|415 +Brand#25|PROMO BRUSHED NICKEL|14|415 +Brand#25|PROMO BRUSHED STEEL|36|415 +Brand#25|PROMO POLISHED BRASS|45|415 +Brand#25|SMALL POLISHED COPPER|14|415 +Brand#25|STANDARD BRUSHED COPPER|14|415 +Brand#25|STANDARD PLATED STEEL|49|415 +Brand#31|ECONOMY PLATED TIN|9|415 +Brand#31|PROMO PLATED BRASS|36|415 +Brand#31|PROMO PLATED TIN|23|415 +Brand#31|PROMO PLATED TIN|49|415 +Brand#31|SMALL BRUSHED NICKEL|23|415 +Brand#31|SMALL PLATED NICKEL|49|415 +Brand#31|STANDARD BRUSHED STEEL|14|415 +Brand#31|STANDARD BURNISHED STEEL|23|415 +Brand#32|ECONOMY PLATED NICKEL|3|415 +Brand#32|LARGE ANODIZED TIN|14|415 +Brand#32|LARGE PLATED COPPER|49|415 +Brand#32|MEDIUM ANODIZED NICKEL|36|415 +Brand#32|MEDIUM BRUSHED TIN|14|415 +Brand#32|MEDIUM BRUSHED TIN|23|415 +Brand#32|MEDIUM BURNISHED TIN|3|415 +Brand#32|SMALL ANODIZED BRASS|3|415 +Brand#32|SMALL ANODIZED BRASS|14|415 +Brand#32|SMALL PLATED BRASS|19|415 +Brand#32|STANDARD ANODIZED TIN|19|415 +Brand#32|STANDARD BURNISHED NICKEL|45|415 +Brand#33|ECONOMY ANODIZED COPPER|23|415 +Brand#33|LARGE BURNISHED TIN|9|415 +Brand#33|MEDIUM ANODIZED COPPER|45|415 +Brand#33|MEDIUM BURNISHED COPPER|9|415 +Brand#33|MEDIUM PLATED COPPER|3|415 +Brand#33|PROMO ANODIZED STEEL|36|415 +Brand#33|PROMO PLATED TIN|9|415 +Brand#33|SMALL BRUSHED STEEL|23|415 +Brand#33|SMALL BURNISHED COPPER|19|415 +Brand#33|STANDARD PLATED NICKEL|23|415 +Brand#34|ECONOMY BRUSHED BRASS|9|415 +Brand#34|ECONOMY POLISHED COPPER|45|415 +Brand#34|LARGE BURNISHED COPPER|36|415 +Brand#34|LARGE BURNISHED STEEL|49|415 +Brand#34|LARGE PLATED TIN|19|415 +Brand#34|MEDIUM BURNISHED STEEL|23|415 +Brand#34|MEDIUM BURNISHED TIN|45|415 +Brand#34|PROMO BRUSHED STEEL|19|415 +Brand#34|PROMO PLATED COPPER|14|415 +Brand#34|PROMO PLATED NICKEL|45|415 +Brand#34|SMALL BURNISHED NICKEL|49|415 +Brand#34|STANDARD ANODIZED BRASS|19|415 +Brand#34|STANDARD ANODIZED COPPER|3|415 +Brand#34|STANDARD POLISHED STEEL|9|415 +Brand#35|ECONOMY PLATED TIN|9|415 +Brand#35|LARGE ANODIZED TIN|23|415 +Brand#35|MEDIUM BRUSHED BRASS|19|415 +Brand#35|PROMO BRUSHED COPPER|49|415 +Brand#35|SMALL ANODIZED NICKEL|23|415 +Brand#35|SMALL BURNISHED STEEL|19|415 +Brand#35|STANDARD PLATED TIN|3|415 +Brand#35|STANDARD POLISHED STEEL|9|415 +Brand#41|ECONOMY BRUSHED STEEL|19|415 +Brand#41|LARGE ANODIZED TIN|14|415 +Brand#41|LARGE BURNISHED TIN|36|415 +Brand#41|LARGE PLATED STEEL|23|415 +Brand#41|MEDIUM ANODIZED COPPER|23|415 +Brand#41|MEDIUM PLATED BRASS|36|415 +Brand#41|PROMO BURNISHED NICKEL|45|415 +Brand#41|STANDARD BURNISHED BRASS|3|415 +Brand#41|STANDARD PLATED STEEL|49|415 +Brand#42|ECONOMY BRUSHED COPPER|49|415 +Brand#42|ECONOMY PLATED NICKEL|49|415 +Brand#42|LARGE BRUSHED STEEL|3|415 +Brand#42|LARGE PLATED COPPER|19|415 +Brand#42|LARGE POLISHED TIN|9|415 +Brand#42|PROMO POLISHED STEEL|36|415 +Brand#42|SMALL BURNISHED TIN|49|415 +Brand#42|SMALL POLISHED COPPER|23|415 +Brand#42|STANDARD POLISHED COPPER|45|415 +Brand#43|ECONOMY BURNISHED STEEL|3|415 +Brand#43|ECONOMY BURNISHED TIN|23|415 +Brand#43|ECONOMY POLISHED STEEL|19|415 +Brand#43|LARGE PLATED COPPER|45|415 +Brand#43|MEDIUM BRUSHED TIN|3|415 +Brand#43|MEDIUM PLATED TIN|14|415 +Brand#43|PROMO BURNISHED NICKEL|19|415 +Brand#43|PROMO POLISHED NICKEL|36|415 +Brand#43|SMALL BURNISHED NICKEL|3|415 +Brand#43|SMALL POLISHED TIN|36|415 +Brand#43|STANDARD ANODIZED TIN|36|415 +Brand#43|STANDARD BURNISHED COPPER|3|415 +Brand#44|LARGE BRUSHED TIN|36|415 +Brand#44|LARGE POLISHED TIN|14|415 +Brand#44|MEDIUM BRUSHED NICKEL|23|415 +Brand#44|PROMO BRUSHED NICKEL|23|415 +Brand#44|PROMO BURNISHED STEEL|23|415 +Brand#44|PROMO PLATED COPPER|3|415 +Brand#44|PROMO POLISHED BRASS|19|415 +Brand#44|STANDARD BRUSHED COPPER|45|415 +Brand#51|MEDIUM BRUSHED BRASS|19|415 +Brand#51|PROMO ANODIZED STEEL|45|415 +Brand#51|PROMO PLATED STEEL|49|415 +Brand#51|SMALL BRUSHED STEEL|19|415 +Brand#51|STANDARD ANODIZED NICKEL|45|415 +Brand#52|ECONOMY PLATED BRASS|23|415 +Brand#52|ECONOMY POLISHED BRASS|23|415 +Brand#52|ECONOMY POLISHED NICKEL|3|415 +Brand#52|LARGE ANODIZED NICKEL|9|415 +Brand#52|LARGE BURNISHED COPPER|36|415 +Brand#52|MEDIUM PLATED COPPER|49|415 +Brand#52|PROMO PLATED BRASS|23|415 +Brand#52|SMALL BRUSHED COPPER|3|415 +Brand#52|STANDARD ANODIZED COPPER|49|415 +Brand#52|STANDARD ANODIZED STEEL|45|415 +Brand#52|STANDARD POLISHED BRASS|14|415 +Brand#53|ECONOMY POLISHED COPPER|49|415 +Brand#53|LARGE BRUSHED COPPER|36|415 +Brand#53|MEDIUM ANODIZED TIN|19|415 +Brand#53|MEDIUM BURNISHED TIN|14|415 +Brand#54|ECONOMY ANODIZED COPPER|23|415 +Brand#54|LARGE ANODIZED COPPER|19|415 +Brand#54|LARGE BRUSHED STEEL|9|415 +Brand#54|MEDIUM ANODIZED COPPER|19|415 +Brand#54|MEDIUM BRUSHED COPPER|23|415 +Brand#54|PROMO ANODIZED NICKEL|23|415 +Brand#54|PROMO BURNISHED COPPER|36|415 +Brand#54|PROMO POLISHED NICKEL|19|415 +Brand#54|STANDARD ANODIZED TIN|45|415 +Brand#54|STANDARD BURNISHED BRASS|23|415 +Brand#54|STANDARD BURNISHED TIN|23|415 +Brand#55|LARGE ANODIZED NICKEL|49|415 +Brand#55|LARGE BRUSHED STEEL|3|415 +Brand#55|PROMO PLATED BRASS|3|415 +Brand#55|STANDARD ANODIZED COPPER|36|415 +Brand#55|STANDARD BURNISHED TIN|45|415 +Brand#55|STANDARD POLISHED COPPER|9|415 +Brand#11|ECONOMY POLISHED TIN|49|414 +Brand#11|PROMO PLATED COPPER|3|414 +Brand#11|PROMO POLISHED TIN|19|414 +Brand#12|MEDIUM ANODIZED STEEL|19|414 +Brand#12|MEDIUM PLATED COPPER|3|414 +Brand#12|STANDARD BURNISHED NICKEL|36|414 +Brand#13|LARGE BURNISHED TIN|3|414 +Brand#15|LARGE PLATED TIN|19|414 +Brand#15|STANDARD BRUSHED COPPER|14|414 +Brand#22|ECONOMY BRUSHED NICKEL|3|414 +Brand#22|PROMO POLISHED COPPER|45|414 +Brand#22|SMALL ANODIZED BRASS|19|414 +Brand#23|SMALL POLISHED COPPER|23|414 +Brand#24|ECONOMY POLISHED NICKEL|3|414 +Brand#25|SMALL BRUSHED TIN|36|414 +Brand#31|LARGE ANODIZED TIN|49|414 +Brand#31|STANDARD PLATED COPPER|3|414 +Brand#32|ECONOMY PLATED NICKEL|45|414 +Brand#32|ECONOMY POLISHED BRASS|9|414 +Brand#33|ECONOMY BURNISHED STEEL|9|414 +Brand#34|STANDARD PLATED NICKEL|36|414 +Brand#35|SMALL POLISHED BRASS|45|414 +Brand#41|LARGE PLATED BRASS|49|414 +Brand#41|LARGE PLATED STEEL|19|414 +Brand#41|SMALL BURNISHED TIN|49|414 +Brand#41|STANDARD ANODIZED BRASS|19|414 +Brand#42|MEDIUM BURNISHED NICKEL|14|414 +Brand#42|STANDARD PLATED COPPER|19|414 +Brand#43|SMALL PLATED NICKEL|45|414 +Brand#44|LARGE BURNISHED NICKEL|49|414 +Brand#51|MEDIUM PLATED STEEL|36|414 +Brand#51|SMALL ANODIZED STEEL|23|414 +Brand#53|PROMO BURNISHED BRASS|9|414 +Brand#14|SMALL PLATED STEEL|49|413 +Brand#51|STANDARD PLATED STEEL|36|413 +Brand#53|ECONOMY ANODIZED BRASS|19|413 +Brand#11|ECONOMY ANODIZED NICKEL|3|412 +Brand#11|ECONOMY ANODIZED STEEL|9|412 +Brand#11|ECONOMY BRUSHED BRASS|9|412 +Brand#11|ECONOMY PLATED NICKEL|23|412 +Brand#11|LARGE BURNISHED BRASS|9|412 +Brand#11|LARGE PLATED COPPER|19|412 +Brand#11|LARGE POLISHED COPPER|3|412 +Brand#11|MEDIUM BRUSHED COPPER|3|412 +Brand#11|MEDIUM BURNISHED STEEL|36|412 +Brand#11|MEDIUM PLATED BRASS|9|412 +Brand#11|MEDIUM PLATED BRASS|19|412 +Brand#11|PROMO ANODIZED COPPER|36|412 +Brand#11|PROMO BRUSHED TIN|14|412 +Brand#11|PROMO BURNISHED BRASS|36|412 +Brand#11|PROMO BURNISHED COPPER|14|412 +Brand#11|PROMO BURNISHED COPPER|19|412 +Brand#11|PROMO BURNISHED NICKEL|9|412 +Brand#11|PROMO PLATED NICKEL|36|412 +Brand#11|PROMO POLISHED BRASS|36|412 +Brand#11|PROMO POLISHED COPPER|23|412 +Brand#11|PROMO POLISHED STEEL|14|412 +Brand#11|SMALL ANODIZED NICKEL|45|412 +Brand#11|SMALL BRUSHED NICKEL|49|412 +Brand#11|SMALL BURNISHED BRASS|36|412 +Brand#11|SMALL PLATED STEEL|36|412 +Brand#11|SMALL POLISHED BRASS|49|412 +Brand#11|SMALL POLISHED STEEL|36|412 +Brand#11|STANDARD BRUSHED BRASS|9|412 +Brand#11|STANDARD BRUSHED NICKEL|45|412 +Brand#11|STANDARD BURNISHED NICKEL|45|412 +Brand#11|STANDARD BURNISHED NICKEL|49|412 +Brand#11|STANDARD POLISHED BRASS|45|412 +Brand#11|STANDARD POLISHED BRASS|49|412 +Brand#12|ECONOMY BRUSHED COPPER|19|412 +Brand#12|ECONOMY BURNISHED BRASS|19|412 +Brand#12|ECONOMY BURNISHED TIN|45|412 +Brand#12|ECONOMY PLATED TIN|14|412 +Brand#12|ECONOMY POLISHED NICKEL|19|412 +Brand#12|LARGE ANODIZED BRASS|3|412 +Brand#12|LARGE ANODIZED NICKEL|23|412 +Brand#12|LARGE BRUSHED COPPER|49|412 +Brand#12|LARGE BRUSHED TIN|19|412 +Brand#12|LARGE BURNISHED STEEL|45|412 +Brand#12|LARGE PLATED NICKEL|45|412 +Brand#12|LARGE PLATED STEEL|49|412 +Brand#12|LARGE PLATED TIN|14|412 +Brand#12|LARGE POLISHED BRASS|45|412 +Brand#12|MEDIUM ANODIZED STEEL|49|412 +Brand#12|MEDIUM ANODIZED TIN|3|412 +Brand#12|MEDIUM BRUSHED BRASS|19|412 +Brand#12|MEDIUM BRUSHED BRASS|23|412 +Brand#12|MEDIUM BURNISHED TIN|36|412 +Brand#12|MEDIUM PLATED NICKEL|36|412 +Brand#12|MEDIUM PLATED TIN|9|412 +Brand#12|MEDIUM PLATED TIN|14|412 +Brand#12|PROMO ANODIZED NICKEL|14|412 +Brand#12|PROMO BRUSHED NICKEL|45|412 +Brand#12|PROMO BURNISHED BRASS|23|412 +Brand#12|PROMO POLISHED NICKEL|36|412 +Brand#12|SMALL ANODIZED TIN|45|412 +Brand#12|SMALL BRUSHED BRASS|49|412 +Brand#12|SMALL BRUSHED TIN|36|412 +Brand#12|SMALL BURNISHED TIN|19|412 +Brand#12|SMALL PLATED STEEL|9|412 +Brand#12|SMALL POLISHED BRASS|49|412 +Brand#12|STANDARD BURNISHED COPPER|49|412 +Brand#12|STANDARD PLATED COPPER|19|412 +Brand#12|STANDARD POLISHED COPPER|36|412 +Brand#12|STANDARD POLISHED NICKEL|23|412 +Brand#12|STANDARD POLISHED STEEL|14|412 +Brand#13|ECONOMY ANODIZED STEEL|14|412 +Brand#13|ECONOMY ANODIZED STEEL|45|412 +Brand#13|ECONOMY BRUSHED NICKEL|9|412 +Brand#13|ECONOMY BRUSHED TIN|23|412 +Brand#13|ECONOMY BURNISHED NICKEL|3|412 +Brand#13|ECONOMY BURNISHED NICKEL|9|412 +Brand#13|ECONOMY PLATED COPPER|14|412 +Brand#13|ECONOMY PLATED TIN|45|412 +Brand#13|ECONOMY POLISHED BRASS|23|412 +Brand#13|LARGE ANODIZED BRASS|36|412 +Brand#13|LARGE BRUSHED STEEL|3|412 +Brand#13|LARGE BRUSHED TIN|3|412 +Brand#13|MEDIUM BRUSHED NICKEL|3|412 +Brand#13|MEDIUM BRUSHED NICKEL|9|412 +Brand#13|MEDIUM BURNISHED TIN|36|412 +Brand#13|MEDIUM PLATED COPPER|3|412 +Brand#13|PROMO BRUSHED BRASS|36|412 +Brand#13|PROMO BURNISHED TIN|3|412 +Brand#13|PROMO PLATED NICKEL|14|412 +Brand#13|PROMO PLATED STEEL|45|412 +Brand#13|PROMO POLISHED COPPER|3|412 +Brand#13|PROMO POLISHED STEEL|49|412 +Brand#13|SMALL BRUSHED BRASS|36|412 +Brand#13|SMALL BRUSHED TIN|14|412 +Brand#13|SMALL BURNISHED COPPER|36|412 +Brand#13|SMALL BURNISHED TIN|9|412 +Brand#13|SMALL PLATED COPPER|36|412 +Brand#13|SMALL PLATED COPPER|45|412 +Brand#13|SMALL PLATED STEEL|36|412 +Brand#13|STANDARD ANODIZED BRASS|45|412 +Brand#13|STANDARD BRUSHED STEEL|45|412 +Brand#13|STANDARD PLATED TIN|23|412 +Brand#13|STANDARD POLISHED BRASS|9|412 +Brand#13|STANDARD POLISHED BRASS|19|412 +Brand#13|STANDARD POLISHED COPPER|14|412 +Brand#13|STANDARD POLISHED NICKEL|36|412 +Brand#13|STANDARD POLISHED STEEL|36|412 +Brand#14|ECONOMY ANODIZED STEEL|36|412 +Brand#14|ECONOMY BRUSHED COPPER|49|412 +Brand#14|ECONOMY BRUSHED STEEL|3|412 +Brand#14|ECONOMY BRUSHED TIN|36|412 +Brand#14|ECONOMY BURNISHED BRASS|49|412 +Brand#14|ECONOMY BURNISHED COPPER|9|412 +Brand#14|ECONOMY BURNISHED COPPER|49|412 +Brand#14|ECONOMY BURNISHED STEEL|3|412 +Brand#14|ECONOMY PLATED STEEL|3|412 +Brand#14|ECONOMY PLATED TIN|19|412 +Brand#14|LARGE BRUSHED BRASS|49|412 +Brand#14|LARGE BRUSHED STEEL|9|412 +Brand#14|LARGE PLATED NICKEL|14|412 +Brand#14|LARGE PLATED TIN|9|412 +Brand#14|LARGE PLATED TIN|14|412 +Brand#14|LARGE POLISHED STEEL|23|412 +Brand#14|MEDIUM BRUSHED COPPER|9|412 +Brand#14|MEDIUM BRUSHED COPPER|45|412 +Brand#14|MEDIUM BURNISHED NICKEL|14|412 +Brand#14|PROMO ANODIZED BRASS|23|412 +Brand#14|PROMO BRUSHED NICKEL|36|412 +Brand#14|PROMO BRUSHED STEEL|14|412 +Brand#14|PROMO PLATED TIN|9|412 +Brand#14|SMALL ANODIZED STEEL|14|412 +Brand#14|SMALL BRUSHED BRASS|3|412 +Brand#14|SMALL BURNISHED STEEL|3|412 +Brand#14|SMALL PLATED NICKEL|23|412 +Brand#14|SMALL PLATED STEEL|45|412 +Brand#14|STANDARD ANODIZED NICKEL|49|412 +Brand#14|STANDARD BRUSHED BRASS|45|412 +Brand#14|STANDARD BRUSHED STEEL|36|412 +Brand#14|STANDARD BURNISHED BRASS|23|412 +Brand#14|STANDARD BURNISHED TIN|45|412 +Brand#15|ECONOMY ANODIZED COPPER|36|412 +Brand#15|ECONOMY ANODIZED TIN|3|412 +Brand#15|ECONOMY BRUSHED BRASS|23|412 +Brand#15|ECONOMY BRUSHED COPPER|23|412 +Brand#15|ECONOMY BRUSHED NICKEL|23|412 +Brand#15|ECONOMY BURNISHED NICKEL|9|412 +Brand#15|ECONOMY BURNISHED STEEL|19|412 +Brand#15|ECONOMY PLATED TIN|14|412 +Brand#15|ECONOMY POLISHED STEEL|36|412 +Brand#15|LARGE ANODIZED COPPER|49|412 +Brand#15|LARGE ANODIZED STEEL|23|412 +Brand#15|LARGE BURNISHED BRASS|45|412 +Brand#15|LARGE BURNISHED STEEL|19|412 +Brand#15|LARGE PLATED STEEL|45|412 +Brand#15|LARGE PLATED TIN|36|412 +Brand#15|LARGE POLISHED BRASS|19|412 +Brand#15|LARGE POLISHED COPPER|23|412 +Brand#15|LARGE POLISHED STEEL|9|412 +Brand#15|MEDIUM BRUSHED BRASS|23|412 +Brand#15|MEDIUM BRUSHED BRASS|36|412 +Brand#15|MEDIUM BRUSHED COPPER|3|412 +Brand#15|MEDIUM BRUSHED COPPER|36|412 +Brand#15|MEDIUM BRUSHED NICKEL|45|412 +Brand#15|MEDIUM BRUSHED STEEL|49|412 +Brand#15|MEDIUM BRUSHED TIN|9|412 +Brand#15|MEDIUM BURNISHED BRASS|45|412 +Brand#15|MEDIUM BURNISHED BRASS|49|412 +Brand#15|MEDIUM PLATED TIN|36|412 +Brand#15|PROMO ANODIZED BRASS|23|412 +Brand#15|PROMO ANODIZED BRASS|36|412 +Brand#15|PROMO BRUSHED TIN|3|412 +Brand#15|PROMO BURNISHED BRASS|3|412 +Brand#15|PROMO BURNISHED TIN|3|412 +Brand#15|PROMO PLATED STEEL|19|412 +Brand#15|PROMO PLATED TIN|23|412 +Brand#15|PROMO PLATED TIN|45|412 +Brand#15|PROMO POLISHED BRASS|49|412 +Brand#15|PROMO POLISHED COPPER|45|412 +Brand#15|SMALL ANODIZED STEEL|19|412 +Brand#15|SMALL ANODIZED TIN|23|412 +Brand#15|SMALL BRUSHED BRASS|3|412 +Brand#15|SMALL PLATED BRASS|14|412 +Brand#15|SMALL POLISHED COPPER|19|412 +Brand#15|STANDARD ANODIZED BRASS|49|412 +Brand#15|STANDARD ANODIZED COPPER|36|412 +Brand#15|STANDARD PLATED BRASS|14|412 +Brand#15|STANDARD PLATED COPPER|3|412 +Brand#15|STANDARD PLATED COPPER|45|412 +Brand#15|STANDARD POLISHED NICKEL|14|412 +Brand#21|ECONOMY ANODIZED BRASS|45|412 +Brand#21|ECONOMY BRUSHED STEEL|36|412 +Brand#21|ECONOMY BRUSHED STEEL|45|412 +Brand#21|ECONOMY PLATED STEEL|45|412 +Brand#21|LARGE BRUSHED BRASS|36|412 +Brand#21|LARGE BURNISHED COPPER|19|412 +Brand#21|LARGE POLISHED COPPER|19|412 +Brand#21|MEDIUM ANODIZED COPPER|19|412 +Brand#21|MEDIUM BURNISHED BRASS|36|412 +Brand#21|MEDIUM BURNISHED COPPER|36|412 +Brand#21|MEDIUM PLATED COPPER|49|412 +Brand#21|PROMO ANODIZED BRASS|36|412 +Brand#21|SMALL ANODIZED TIN|49|412 +Brand#21|SMALL BRUSHED COPPER|19|412 +Brand#21|SMALL BRUSHED TIN|14|412 +Brand#21|SMALL BRUSHED TIN|49|412 +Brand#21|SMALL POLISHED COPPER|9|412 +Brand#21|STANDARD BRUSHED TIN|36|412 +Brand#21|STANDARD BURNISHED BRASS|14|412 +Brand#21|STANDARD BURNISHED BRASS|45|412 +Brand#21|STANDARD PLATED NICKEL|19|412 +Brand#21|STANDARD PLATED STEEL|9|412 +Brand#21|STANDARD PLATED STEEL|45|412 +Brand#21|STANDARD POLISHED STEEL|19|412 +Brand#22|ECONOMY ANODIZED BRASS|19|412 +Brand#22|ECONOMY BRUSHED STEEL|49|412 +Brand#22|ECONOMY BURNISHED COPPER|23|412 +Brand#22|ECONOMY BURNISHED STEEL|3|412 +Brand#22|ECONOMY PLATED BRASS|45|412 +Brand#22|ECONOMY PLATED BRASS|49|412 +Brand#22|ECONOMY PLATED TIN|3|412 +Brand#22|ECONOMY PLATED TIN|9|412 +Brand#22|LARGE ANODIZED COPPER|19|412 +Brand#22|LARGE BRUSHED BRASS|14|412 +Brand#22|LARGE BRUSHED BRASS|49|412 +Brand#22|LARGE BRUSHED NICKEL|49|412 +Brand#22|LARGE PLATED STEEL|14|412 +Brand#22|LARGE PLATED STEEL|23|412 +Brand#22|LARGE POLISHED BRASS|9|412 +Brand#22|MEDIUM BURNISHED NICKEL|14|412 +Brand#22|MEDIUM PLATED COPPER|9|412 +Brand#22|MEDIUM PLATED STEEL|9|412 +Brand#22|PROMO ANODIZED BRASS|19|412 +Brand#22|PROMO ANODIZED NICKEL|49|412 +Brand#22|PROMO ANODIZED TIN|3|412 +Brand#22|PROMO BRUSHED STEEL|19|412 +Brand#22|PROMO POLISHED TIN|3|412 +Brand#22|SMALL ANODIZED STEEL|45|412 +Brand#22|SMALL BRUSHED NICKEL|23|412 +Brand#22|SMALL BURNISHED BRASS|36|412 +Brand#22|SMALL BURNISHED COPPER|3|412 +Brand#22|SMALL BURNISHED COPPER|23|412 +Brand#22|SMALL BURNISHED NICKEL|3|412 +Brand#22|SMALL PLATED BRASS|45|412 +Brand#22|SMALL PLATED STEEL|9|412 +Brand#22|STANDARD ANODIZED BRASS|14|412 +Brand#22|STANDARD ANODIZED TIN|23|412 +Brand#22|STANDARD BRUSHED STEEL|49|412 +Brand#22|STANDARD BURNISHED COPPER|23|412 +Brand#22|STANDARD BURNISHED TIN|23|412 +Brand#22|STANDARD PLATED STEEL|14|412 +Brand#23|ECONOMY ANODIZED BRASS|19|412 +Brand#23|ECONOMY PLATED BRASS|36|412 +Brand#23|ECONOMY POLISHED COPPER|19|412 +Brand#23|LARGE ANODIZED TIN|14|412 +Brand#23|LARGE BRUSHED STEEL|3|412 +Brand#23|LARGE BURNISHED STEEL|49|412 +Brand#23|LARGE POLISHED COPPER|36|412 +Brand#23|LARGE POLISHED NICKEL|3|412 +Brand#23|MEDIUM BRUSHED COPPER|3|412 +Brand#23|MEDIUM BRUSHED TIN|45|412 +Brand#23|MEDIUM BURNISHED NICKEL|45|412 +Brand#23|MEDIUM BURNISHED TIN|19|412 +Brand#23|MEDIUM PLATED BRASS|19|412 +Brand#23|MEDIUM PLATED NICKEL|9|412 +Brand#23|PROMO ANODIZED BRASS|23|412 +Brand#23|PROMO ANODIZED STEEL|49|412 +Brand#23|PROMO BRUSHED STEEL|36|412 +Brand#23|PROMO BRUSHED STEEL|45|412 +Brand#23|PROMO BRUSHED STEEL|49|412 +Brand#23|PROMO PLATED COPPER|9|412 +Brand#23|SMALL BRUSHED COPPER|36|412 +Brand#23|SMALL BRUSHED STEEL|45|412 +Brand#23|SMALL BURNISHED NICKEL|9|412 +Brand#23|SMALL BURNISHED STEEL|49|412 +Brand#23|STANDARD ANODIZED NICKEL|36|412 +Brand#23|STANDARD ANODIZED TIN|49|412 +Brand#23|STANDARD BRUSHED NICKEL|3|412 +Brand#23|STANDARD BURNISHED STEEL|23|412 +Brand#23|STANDARD POLISHED BRASS|19|412 +Brand#24|ECONOMY ANODIZED STEEL|9|412 +Brand#24|LARGE ANODIZED COPPER|14|412 +Brand#24|LARGE BRUSHED BRASS|3|412 +Brand#24|LARGE BRUSHED BRASS|14|412 +Brand#24|LARGE BRUSHED NICKEL|36|412 +Brand#24|LARGE BRUSHED TIN|23|412 +Brand#24|LARGE BRUSHED TIN|49|412 +Brand#24|LARGE BURNISHED BRASS|36|412 +Brand#24|LARGE POLISHED COPPER|23|412 +Brand#24|LARGE POLISHED NICKEL|23|412 +Brand#24|MEDIUM BRUSHED COPPER|14|412 +Brand#24|MEDIUM BRUSHED NICKEL|49|412 +Brand#24|MEDIUM BRUSHED STEEL|3|412 +Brand#24|MEDIUM PLATED NICKEL|36|412 +Brand#24|PROMO BRUSHED COPPER|36|412 +Brand#24|PROMO BURNISHED COPPER|9|412 +Brand#24|PROMO BURNISHED NICKEL|14|412 +Brand#24|SMALL ANODIZED COPPER|23|412 +Brand#24|SMALL ANODIZED STEEL|9|412 +Brand#24|SMALL BRUSHED NICKEL|45|412 +Brand#24|SMALL BRUSHED TIN|3|412 +Brand#24|SMALL PLATED NICKEL|14|412 +Brand#24|SMALL POLISHED COPPER|3|412 +Brand#24|SMALL POLISHED COPPER|9|412 +Brand#24|SMALL POLISHED NICKEL|14|412 +Brand#24|SMALL POLISHED TIN|14|412 +Brand#24|STANDARD ANODIZED BRASS|3|412 +Brand#24|STANDARD ANODIZED NICKEL|45|412 +Brand#24|STANDARD ANODIZED NICKEL|49|412 +Brand#24|STANDARD BRUSHED BRASS|23|412 +Brand#24|STANDARD PLATED BRASS|19|412 +Brand#24|STANDARD PLATED STEEL|3|412 +Brand#24|STANDARD POLISHED BRASS|49|412 +Brand#25|ECONOMY ANODIZED BRASS|23|412 +Brand#25|ECONOMY BURNISHED STEEL|14|412 +Brand#25|ECONOMY POLISHED NICKEL|19|412 +Brand#25|LARGE ANODIZED BRASS|19|412 +Brand#25|LARGE ANODIZED NICKEL|49|412 +Brand#25|LARGE ANODIZED TIN|49|412 +Brand#25|LARGE BRUSHED COPPER|3|412 +Brand#25|LARGE BURNISHED COPPER|3|412 +Brand#25|LARGE BURNISHED TIN|45|412 +Brand#25|MEDIUM ANODIZED BRASS|3|412 +Brand#25|MEDIUM ANODIZED COPPER|49|412 +Brand#25|MEDIUM BRUSHED BRASS|23|412 +Brand#25|MEDIUM BRUSHED TIN|14|412 +Brand#25|MEDIUM BURNISHED COPPER|36|412 +Brand#25|PROMO BURNISHED BRASS|23|412 +Brand#25|SMALL BURNISHED COPPER|19|412 +Brand#25|SMALL PLATED NICKEL|3|412 +Brand#25|SMALL PLATED STEEL|23|412 +Brand#25|STANDARD ANODIZED STEEL|45|412 +Brand#25|STANDARD BRUSHED STEEL|36|412 +Brand#25|STANDARD BRUSHED TIN|9|412 +Brand#25|STANDARD BURNISHED BRASS|3|412 +Brand#25|STANDARD BURNISHED TIN|23|412 +Brand#25|STANDARD BURNISHED TIN|49|412 +Brand#25|STANDARD POLISHED NICKEL|3|412 +Brand#25|STANDARD POLISHED NICKEL|9|412 +Brand#25|STANDARD POLISHED NICKEL|14|412 +Brand#25|STANDARD POLISHED STEEL|19|412 +Brand#25|STANDARD POLISHED STEEL|49|412 +Brand#31|ECONOMY ANODIZED BRASS|19|412 +Brand#31|ECONOMY ANODIZED STEEL|45|412 +Brand#31|ECONOMY PLATED COPPER|36|412 +Brand#31|ECONOMY PLATED COPPER|49|412 +Brand#31|ECONOMY POLISHED BRASS|3|412 +Brand#31|ECONOMY POLISHED NICKEL|19|412 +Brand#31|LARGE ANODIZED BRASS|9|412 +Brand#31|LARGE ANODIZED BRASS|19|412 +Brand#31|LARGE ANODIZED STEEL|23|412 +Brand#31|LARGE BURNISHED NICKEL|45|412 +Brand#31|LARGE POLISHED TIN|14|412 +Brand#31|MEDIUM ANODIZED NICKEL|3|412 +Brand#31|MEDIUM ANODIZED NICKEL|23|412 +Brand#31|MEDIUM BURNISHED BRASS|36|412 +Brand#31|MEDIUM BURNISHED TIN|9|412 +Brand#31|MEDIUM PLATED NICKEL|3|412 +Brand#31|PROMO ANODIZED COPPER|9|412 +Brand#31|PROMO BRUSHED STEEL|3|412 +Brand#31|PROMO BRUSHED STEEL|23|412 +Brand#31|PROMO BRUSHED TIN|45|412 +Brand#31|PROMO BURNISHED COPPER|19|412 +Brand#31|PROMO BURNISHED TIN|9|412 +Brand#31|PROMO PLATED BRASS|19|412 +Brand#31|PROMO POLISHED COPPER|3|412 +Brand#31|PROMO POLISHED NICKEL|45|412 +Brand#31|SMALL BRUSHED NICKEL|36|412 +Brand#31|SMALL BURNISHED NICKEL|19|412 +Brand#31|SMALL PLATED COPPER|19|412 +Brand#31|SMALL POLISHED STEEL|45|412 +Brand#31|STANDARD BRUSHED NICKEL|9|412 +Brand#31|STANDARD BURNISHED NICKEL|45|412 +Brand#31|STANDARD POLISHED COPPER|19|412 +Brand#32|ECONOMY ANODIZED BRASS|49|412 +Brand#32|ECONOMY ANODIZED TIN|23|412 +Brand#32|ECONOMY BURNISHED COPPER|14|412 +Brand#32|ECONOMY PLATED NICKEL|19|412 +Brand#32|ECONOMY POLISHED TIN|23|412 +Brand#32|LARGE ANODIZED BRASS|23|412 +Brand#32|LARGE ANODIZED TIN|9|412 +Brand#32|LARGE ANODIZED TIN|36|412 +Brand#32|LARGE BURNISHED COPPER|45|412 +Brand#32|LARGE PLATED BRASS|23|412 +Brand#32|LARGE PLATED TIN|3|412 +Brand#32|MEDIUM ANODIZED TIN|19|412 +Brand#32|MEDIUM BRUSHED STEEL|49|412 +Brand#32|MEDIUM PLATED COPPER|14|412 +Brand#32|PROMO POLISHED NICKEL|23|412 +Brand#32|PROMO POLISHED STEEL|14|412 +Brand#32|SMALL ANODIZED STEEL|49|412 +Brand#32|SMALL ANODIZED TIN|49|412 +Brand#32|SMALL BRUSHED TIN|36|412 +Brand#32|SMALL BURNISHED NICKEL|49|412 +Brand#32|SMALL PLATED BRASS|36|412 +Brand#32|SMALL PLATED COPPER|19|412 +Brand#32|SMALL PLATED STEEL|3|412 +Brand#32|SMALL POLISHED BRASS|14|412 +Brand#32|SMALL POLISHED NICKEL|36|412 +Brand#32|STANDARD ANODIZED COPPER|3|412 +Brand#32|STANDARD BRUSHED BRASS|14|412 +Brand#32|STANDARD BRUSHED NICKEL|3|412 +Brand#32|STANDARD BURNISHED COPPER|23|412 +Brand#33|ECONOMY BRUSHED BRASS|3|412 +Brand#33|ECONOMY BRUSHED NICKEL|45|412 +Brand#33|ECONOMY BURNISHED BRASS|3|412 +Brand#33|ECONOMY BURNISHED TIN|19|412 +Brand#33|ECONOMY PLATED BRASS|19|412 +Brand#33|LARGE BRUSHED BRASS|19|412 +Brand#33|LARGE BURNISHED NICKEL|23|412 +Brand#33|LARGE BURNISHED STEEL|3|412 +Brand#33|MEDIUM ANODIZED NICKEL|45|412 +Brand#33|MEDIUM ANODIZED NICKEL|49|412 +Brand#33|MEDIUM BRUSHED COPPER|3|412 +Brand#33|MEDIUM BRUSHED COPPER|36|412 +Brand#33|MEDIUM BURNISHED BRASS|9|412 +Brand#33|MEDIUM BURNISHED STEEL|23|412 +Brand#33|MEDIUM BURNISHED TIN|36|412 +Brand#33|MEDIUM PLATED NICKEL|36|412 +Brand#33|MEDIUM PLATED TIN|36|412 +Brand#33|PROMO ANODIZED NICKEL|19|412 +Brand#33|PROMO BURNISHED TIN|9|412 +Brand#33|PROMO PLATED COPPER|49|412 +Brand#33|PROMO PLATED STEEL|23|412 +Brand#33|PROMO POLISHED BRASS|19|412 +Brand#33|PROMO POLISHED COPPER|36|412 +Brand#33|SMALL ANODIZED BRASS|49|412 +Brand#33|SMALL ANODIZED TIN|49|412 +Brand#33|SMALL PLATED NICKEL|49|412 +Brand#33|SMALL PLATED STEEL|23|412 +Brand#33|SMALL POLISHED COPPER|49|412 +Brand#33|SMALL POLISHED NICKEL|19|412 +Brand#33|SMALL POLISHED STEEL|14|412 +Brand#33|STANDARD ANODIZED NICKEL|14|412 +Brand#33|STANDARD ANODIZED TIN|9|412 +Brand#33|STANDARD BRUSHED COPPER|19|412 +Brand#33|STANDARD BURNISHED COPPER|36|412 +Brand#33|STANDARD POLISHED COPPER|14|412 +Brand#33|STANDARD POLISHED COPPER|45|412 +Brand#33|STANDARD POLISHED TIN|14|412 +Brand#34|ECONOMY BRUSHED NICKEL|9|412 +Brand#34|ECONOMY BURNISHED TIN|23|412 +Brand#34|LARGE BURNISHED NICKEL|49|412 +Brand#34|LARGE PLATED TIN|9|412 +Brand#34|MEDIUM ANODIZED STEEL|49|412 +Brand#34|MEDIUM ANODIZED TIN|23|412 +Brand#34|MEDIUM BRUSHED TIN|14|412 +Brand#34|MEDIUM BURNISHED BRASS|3|412 +Brand#34|MEDIUM BURNISHED TIN|49|412 +Brand#34|PROMO ANODIZED COPPER|9|412 +Brand#34|PROMO ANODIZED STEEL|9|412 +Brand#34|PROMO ANODIZED STEEL|23|412 +Brand#34|PROMO ANODIZED STEEL|49|412 +Brand#34|PROMO BURNISHED BRASS|45|412 +Brand#34|PROMO BURNISHED NICKEL|3|412 +Brand#34|PROMO POLISHED NICKEL|49|412 +Brand#34|PROMO POLISHED TIN|3|412 +Brand#34|PROMO POLISHED TIN|49|412 +Brand#34|SMALL ANODIZED COPPER|19|412 +Brand#34|SMALL ANODIZED STEEL|9|412 +Brand#34|SMALL BRUSHED COPPER|23|412 +Brand#34|SMALL BRUSHED TIN|9|412 +Brand#34|SMALL POLISHED STEEL|49|412 +Brand#34|STANDARD ANODIZED COPPER|9|412 +Brand#34|STANDARD ANODIZED COPPER|19|412 +Brand#34|STANDARD ANODIZED STEEL|36|412 +Brand#34|STANDARD BRUSHED NICKEL|23|412 +Brand#34|STANDARD BRUSHED STEEL|19|412 +Brand#34|STANDARD BURNISHED BRASS|45|412 +Brand#34|STANDARD PLATED COPPER|9|412 +Brand#34|STANDARD PLATED STEEL|19|412 +Brand#34|STANDARD POLISHED COPPER|19|412 +Brand#34|STANDARD POLISHED NICKEL|19|412 +Brand#35|ECONOMY ANODIZED NICKEL|9|412 +Brand#35|ECONOMY BRUSHED COPPER|9|412 +Brand#35|ECONOMY PLATED BRASS|3|412 +Brand#35|ECONOMY PLATED BRASS|14|412 +Brand#35|ECONOMY POLISHED COPPER|45|412 +Brand#35|LARGE BURNISHED BRASS|49|412 +Brand#35|LARGE BURNISHED COPPER|9|412 +Brand#35|LARGE BURNISHED COPPER|14|412 +Brand#35|LARGE BURNISHED NICKEL|45|412 +Brand#35|LARGE PLATED NICKEL|45|412 +Brand#35|MEDIUM BRUSHED NICKEL|23|412 +Brand#35|MEDIUM BURNISHED COPPER|49|412 +Brand#35|MEDIUM BURNISHED STEEL|14|412 +Brand#35|PROMO ANODIZED STEEL|49|412 +Brand#35|PROMO BURNISHED NICKEL|23|412 +Brand#35|PROMO PLATED COPPER|9|412 +Brand#35|PROMO PLATED COPPER|36|412 +Brand#35|PROMO POLISHED BRASS|36|412 +Brand#35|PROMO POLISHED COPPER|14|412 +Brand#35|SMALL ANODIZED NICKEL|49|412 +Brand#35|SMALL BRUSHED NICKEL|3|412 +Brand#35|SMALL BURNISHED COPPER|36|412 +Brand#35|SMALL BURNISHED TIN|3|412 +Brand#35|SMALL PLATED BRASS|9|412 +Brand#35|SMALL PLATED BRASS|19|412 +Brand#35|STANDARD BRUSHED BRASS|19|412 +Brand#35|STANDARD BRUSHED COPPER|49|412 +Brand#35|STANDARD BRUSHED NICKEL|19|412 +Brand#35|STANDARD BURNISHED STEEL|45|412 +Brand#35|STANDARD PLATED COPPER|45|412 +Brand#35|STANDARD PLATED STEEL|14|412 +Brand#35|STANDARD PLATED TIN|9|412 +Brand#41|ECONOMY ANODIZED BRASS|14|412 +Brand#41|ECONOMY BRUSHED COPPER|45|412 +Brand#41|ECONOMY BRUSHED TIN|23|412 +Brand#41|ECONOMY PLATED BRASS|19|412 +Brand#41|ECONOMY PLATED NICKEL|14|412 +Brand#41|ECONOMY PLATED NICKEL|49|412 +Brand#41|ECONOMY PLATED STEEL|9|412 +Brand#41|ECONOMY PLATED STEEL|45|412 +Brand#41|LARGE BRUSHED STEEL|9|412 +Brand#41|LARGE BURNISHED COPPER|14|412 +Brand#41|LARGE PLATED TIN|3|412 +Brand#41|MEDIUM BRUSHED NICKEL|3|412 +Brand#41|MEDIUM BURNISHED BRASS|49|412 +Brand#41|MEDIUM BURNISHED COPPER|19|412 +Brand#41|MEDIUM PLATED NICKEL|49|412 +Brand#41|MEDIUM PLATED STEEL|45|412 +Brand#41|MEDIUM PLATED TIN|19|412 +Brand#41|PROMO PLATED BRASS|3|412 +Brand#41|PROMO POLISHED NICKEL|3|412 +Brand#41|PROMO POLISHED STEEL|14|412 +Brand#41|SMALL ANODIZED BRASS|3|412 +Brand#41|SMALL ANODIZED COPPER|36|412 +Brand#41|SMALL ANODIZED COPPER|45|412 +Brand#41|SMALL ANODIZED NICKEL|49|412 +Brand#41|SMALL BRUSHED TIN|36|412 +Brand#41|SMALL BURNISHED TIN|36|412 +Brand#41|SMALL POLISHED BRASS|9|412 +Brand#41|SMALL POLISHED TIN|9|412 +Brand#41|SMALL POLISHED TIN|23|412 +Brand#41|STANDARD BRUSHED BRASS|3|412 +Brand#41|STANDARD BURNISHED COPPER|3|412 +Brand#41|STANDARD BURNISHED STEEL|45|412 +Brand#41|STANDARD PLATED BRASS|36|412 +Brand#41|STANDARD PLATED BRASS|45|412 +Brand#41|STANDARD PLATED NICKEL|9|412 +Brand#41|STANDARD POLISHED STEEL|45|412 +Brand#42|ECONOMY BRUSHED NICKEL|14|412 +Brand#42|LARGE BRUSHED BRASS|45|412 +Brand#42|LARGE BRUSHED TIN|9|412 +Brand#42|LARGE PLATED STEEL|3|412 +Brand#42|LARGE PLATED STEEL|23|412 +Brand#42|LARGE POLISHED COPPER|3|412 +Brand#42|LARGE POLISHED STEEL|19|412 +Brand#42|LARGE POLISHED TIN|19|412 +Brand#42|LARGE POLISHED TIN|45|412 +Brand#42|MEDIUM BRUSHED BRASS|36|412 +Brand#42|MEDIUM BRUSHED BRASS|45|412 +Brand#42|MEDIUM BRUSHED STEEL|49|412 +Brand#42|PROMO ANODIZED BRASS|9|412 +Brand#42|PROMO ANODIZED BRASS|36|412 +Brand#42|PROMO BRUSHED NICKEL|14|412 +Brand#42|PROMO BRUSHED STEEL|36|412 +Brand#42|PROMO BURNISHED NICKEL|49|412 +Brand#42|PROMO BURNISHED TIN|36|412 +Brand#42|PROMO PLATED BRASS|14|412 +Brand#42|PROMO PLATED NICKEL|45|412 +Brand#42|PROMO PLATED STEEL|14|412 +Brand#42|PROMO POLISHED BRASS|9|412 +Brand#42|SMALL ANODIZED COPPER|19|412 +Brand#42|SMALL ANODIZED TIN|36|412 +Brand#42|SMALL ANODIZED TIN|45|412 +Brand#42|SMALL BRUSHED COPPER|3|412 +Brand#42|SMALL BURNISHED TIN|23|412 +Brand#42|SMALL POLISHED COPPER|19|412 +Brand#42|SMALL POLISHED NICKEL|23|412 +Brand#42|STANDARD PLATED BRASS|3|412 +Brand#42|STANDARD PLATED COPPER|23|412 +Brand#43|ECONOMY ANODIZED COPPER|19|412 +Brand#43|ECONOMY ANODIZED STEEL|19|412 +Brand#43|ECONOMY BRUSHED TIN|45|412 +Brand#43|ECONOMY BURNISHED BRASS|45|412 +Brand#43|ECONOMY PLATED BRASS|14|412 +Brand#43|ECONOMY PLATED TIN|23|412 +Brand#43|ECONOMY POLISHED COPPER|36|412 +Brand#43|LARGE ANODIZED NICKEL|23|412 +Brand#43|LARGE BRUSHED BRASS|9|412 +Brand#43|LARGE BRUSHED BRASS|36|412 +Brand#43|LARGE BRUSHED COPPER|3|412 +Brand#43|LARGE BRUSHED STEEL|45|412 +Brand#43|LARGE BURNISHED COPPER|45|412 +Brand#43|LARGE BURNISHED TIN|49|412 +Brand#43|LARGE PLATED BRASS|9|412 +Brand#43|LARGE POLISHED TIN|49|412 +Brand#43|MEDIUM BRUSHED TIN|9|412 +Brand#43|MEDIUM BURNISHED COPPER|23|412 +Brand#43|MEDIUM BURNISHED STEEL|23|412 +Brand#43|MEDIUM PLATED BRASS|14|412 +Brand#43|MEDIUM PLATED STEEL|45|412 +Brand#43|MEDIUM PLATED TIN|9|412 +Brand#43|PROMO ANODIZED BRASS|36|412 +Brand#43|PROMO BRUSHED BRASS|9|412 +Brand#43|PROMO BRUSHED NICKEL|3|412 +Brand#43|PROMO PLATED BRASS|14|412 +Brand#43|PROMO PLATED NICKEL|49|412 +Brand#43|PROMO POLISHED BRASS|9|412 +Brand#43|PROMO POLISHED COPPER|9|412 +Brand#43|PROMO POLISHED STEEL|19|412 +Brand#43|SMALL ANODIZED BRASS|9|412 +Brand#43|SMALL BRUSHED BRASS|9|412 +Brand#43|SMALL PLATED BRASS|9|412 +Brand#43|SMALL POLISHED NICKEL|3|412 +Brand#43|SMALL POLISHED STEEL|36|412 +Brand#43|STANDARD ANODIZED COPPER|45|412 +Brand#43|STANDARD BRUSHED COPPER|3|412 +Brand#43|STANDARD PLATED NICKEL|14|412 +Brand#43|STANDARD POLISHED TIN|3|412 +Brand#44|ECONOMY ANODIZED BRASS|36|412 +Brand#44|ECONOMY BRUSHED TIN|9|412 +Brand#44|ECONOMY BURNISHED COPPER|9|412 +Brand#44|ECONOMY PLATED BRASS|9|412 +Brand#44|ECONOMY POLISHED TIN|49|412 +Brand#44|LARGE ANODIZED NICKEL|3|412 +Brand#44|LARGE BURNISHED NICKEL|3|412 +Brand#44|LARGE BURNISHED TIN|49|412 +Brand#44|LARGE POLISHED TIN|45|412 +Brand#44|MEDIUM ANODIZED COPPER|3|412 +Brand#44|PROMO BRUSHED COPPER|9|412 +Brand#44|PROMO BRUSHED STEEL|45|412 +Brand#44|PROMO PLATED BRASS|19|412 +Brand#44|PROMO POLISHED NICKEL|14|412 +Brand#44|SMALL ANODIZED TIN|3|412 +Brand#44|SMALL ANODIZED TIN|14|412 +Brand#44|SMALL BRUSHED NICKEL|49|412 +Brand#44|SMALL BURNISHED STEEL|45|412 +Brand#44|SMALL PLATED STEEL|36|412 +Brand#44|SMALL POLISHED STEEL|19|412 +Brand#44|STANDARD ANODIZED STEEL|45|412 +Brand#44|STANDARD BRUSHED BRASS|19|412 +Brand#44|STANDARD BRUSHED TIN|19|412 +Brand#44|STANDARD BURNISHED NICKEL|45|412 +Brand#44|STANDARD PLATED BRASS|9|412 +Brand#44|STANDARD POLISHED NICKEL|19|412 +Brand#44|STANDARD POLISHED TIN|23|412 +Brand#51|ECONOMY ANODIZED BRASS|45|412 +Brand#51|ECONOMY BRUSHED BRASS|14|412 +Brand#51|ECONOMY BRUSHED STEEL|19|412 +Brand#51|ECONOMY BURNISHED NICKEL|36|412 +Brand#51|ECONOMY BURNISHED TIN|23|412 +Brand#51|ECONOMY BURNISHED TIN|36|412 +Brand#51|ECONOMY PLATED COPPER|23|412 +Brand#51|LARGE ANODIZED BRASS|49|412 +Brand#51|LARGE ANODIZED COPPER|36|412 +Brand#51|LARGE BRUSHED TIN|9|412 +Brand#51|LARGE BURNISHED BRASS|19|412 +Brand#51|LARGE PLATED NICKEL|49|412 +Brand#51|LARGE POLISHED NICKEL|19|412 +Brand#51|MEDIUM ANODIZED BRASS|14|412 +Brand#51|MEDIUM ANODIZED STEEL|3|412 +Brand#51|MEDIUM ANODIZED STEEL|19|412 +Brand#51|MEDIUM ANODIZED TIN|9|412 +Brand#51|MEDIUM BRUSHED BRASS|14|412 +Brand#51|MEDIUM BRUSHED STEEL|49|412 +Brand#51|MEDIUM BURNISHED COPPER|19|412 +Brand#51|MEDIUM PLATED BRASS|19|412 +Brand#51|MEDIUM PLATED BRASS|23|412 +Brand#51|PROMO ANODIZED BRASS|45|412 +Brand#51|PROMO ANODIZED TIN|19|412 +Brand#51|PROMO BURNISHED TIN|19|412 +Brand#51|PROMO PLATED BRASS|36|412 +Brand#51|PROMO POLISHED COPPER|49|412 +Brand#51|PROMO POLISHED NICKEL|14|412 +Brand#51|SMALL ANODIZED NICKEL|3|412 +Brand#51|SMALL POLISHED NICKEL|23|412 +Brand#51|STANDARD ANODIZED BRASS|45|412 +Brand#51|STANDARD ANODIZED COPPER|49|412 +Brand#51|STANDARD BRUSHED NICKEL|45|412 +Brand#51|STANDARD BRUSHED TIN|14|412 +Brand#51|STANDARD PLATED TIN|9|412 +Brand#51|STANDARD PLATED TIN|49|412 +Brand#51|STANDARD POLISHED COPPER|14|412 +Brand#51|STANDARD POLISHED TIN|19|412 +Brand#51|STANDARD POLISHED TIN|36|412 +Brand#52|ECONOMY ANODIZED BRASS|36|412 +Brand#52|ECONOMY ANODIZED TIN|14|412 +Brand#52|ECONOMY BURNISHED BRASS|49|412 +Brand#52|ECONOMY PLATED COPPER|9|412 +Brand#52|ECONOMY POLISHED TIN|36|412 +Brand#52|LARGE ANODIZED STEEL|19|412 +Brand#52|LARGE ANODIZED TIN|23|412 +Brand#52|LARGE BURNISHED BRASS|14|412 +Brand#52|LARGE BURNISHED COPPER|14|412 +Brand#52|LARGE BURNISHED STEEL|3|412 +Brand#52|MEDIUM ANODIZED BRASS|19|412 +Brand#52|MEDIUM ANODIZED STEEL|9|412 +Brand#52|MEDIUM ANODIZED TIN|49|412 +Brand#52|MEDIUM BRUSHED TIN|45|412 +Brand#52|MEDIUM BRUSHED TIN|49|412 +Brand#52|MEDIUM BURNISHED BRASS|3|412 +Brand#52|MEDIUM PLATED COPPER|3|412 +Brand#52|PROMO ANODIZED BRASS|23|412 +Brand#52|PROMO ANODIZED STEEL|49|412 +Brand#52|PROMO ANODIZED TIN|3|412 +Brand#52|PROMO BURNISHED COPPER|19|412 +Brand#52|PROMO BURNISHED NICKEL|9|412 +Brand#52|PROMO BURNISHED STEEL|19|412 +Brand#52|PROMO BURNISHED TIN|23|412 +Brand#52|PROMO BURNISHED TIN|36|412 +Brand#52|PROMO POLISHED NICKEL|9|412 +Brand#52|SMALL BRUSHED BRASS|23|412 +Brand#52|SMALL BRUSHED TIN|45|412 +Brand#52|SMALL BURNISHED NICKEL|36|412 +Brand#52|SMALL BURNISHED STEEL|36|412 +Brand#52|SMALL BURNISHED STEEL|49|412 +Brand#52|SMALL PLATED TIN|3|412 +Brand#52|SMALL PLATED TIN|14|412 +Brand#52|SMALL POLISHED BRASS|19|412 +Brand#52|SMALL POLISHED COPPER|3|412 +Brand#52|SMALL POLISHED COPPER|36|412 +Brand#52|SMALL POLISHED NICKEL|36|412 +Brand#52|SMALL POLISHED STEEL|14|412 +Brand#52|SMALL POLISHED STEEL|19|412 +Brand#52|STANDARD ANODIZED BRASS|36|412 +Brand#52|STANDARD BURNISHED BRASS|23|412 +Brand#52|STANDARD PLATED BRASS|36|412 +Brand#52|STANDARD PLATED STEEL|45|412 +Brand#52|STANDARD POLISHED BRASS|3|412 +Brand#52|STANDARD POLISHED BRASS|23|412 +Brand#52|STANDARD POLISHED BRASS|36|412 +Brand#52|STANDARD POLISHED BRASS|45|412 +Brand#52|STANDARD POLISHED STEEL|45|412 +Brand#53|ECONOMY ANODIZED BRASS|45|412 +Brand#53|ECONOMY ANODIZED NICKEL|14|412 +Brand#53|ECONOMY ANODIZED TIN|23|412 +Brand#53|ECONOMY BRUSHED TIN|49|412 +Brand#53|LARGE ANODIZED NICKEL|19|412 +Brand#53|LARGE ANODIZED TIN|14|412 +Brand#53|LARGE BRUSHED BRASS|19|412 +Brand#53|LARGE PLATED BRASS|36|412 +Brand#53|LARGE POLISHED TIN|3|412 +Brand#53|MEDIUM PLATED STEEL|14|412 +Brand#53|PROMO ANODIZED BRASS|3|412 +Brand#53|PROMO ANODIZED STEEL|14|412 +Brand#53|PROMO ANODIZED TIN|45|412 +Brand#53|PROMO BURNISHED NICKEL|3|412 +Brand#53|PROMO BURNISHED STEEL|49|412 +Brand#53|PROMO BURNISHED TIN|9|412 +Brand#53|PROMO PLATED BRASS|19|412 +Brand#53|PROMO PLATED COPPER|23|412 +Brand#53|PROMO PLATED TIN|9|412 +Brand#53|SMALL ANODIZED NICKEL|23|412 +Brand#53|SMALL ANODIZED STEEL|23|412 +Brand#53|SMALL ANODIZED STEEL|36|412 +Brand#53|SMALL BRUSHED BRASS|36|412 +Brand#53|SMALL BRUSHED TIN|45|412 +Brand#53|SMALL PLATED BRASS|49|412 +Brand#53|SMALL POLISHED BRASS|45|412 +Brand#53|SMALL POLISHED NICKEL|45|412 +Brand#53|SMALL POLISHED STEEL|36|412 +Brand#53|SMALL POLISHED STEEL|45|412 +Brand#53|STANDARD ANODIZED BRASS|19|412 +Brand#53|STANDARD ANODIZED STEEL|23|412 +Brand#53|STANDARD BRUSHED COPPER|9|412 +Brand#53|STANDARD BRUSHED COPPER|36|412 +Brand#53|STANDARD BRUSHED STEEL|49|412 +Brand#53|STANDARD PLATED BRASS|49|412 +Brand#53|STANDARD PLATED COPPER|19|412 +Brand#53|STANDARD PLATED TIN|3|412 +Brand#53|STANDARD POLISHED COPPER|3|412 +Brand#53|STANDARD POLISHED NICKEL|36|412 +Brand#53|STANDARD POLISHED STEEL|3|412 +Brand#54|ECONOMY ANODIZED BRASS|36|412 +Brand#54|ECONOMY ANODIZED STEEL|3|412 +Brand#54|ECONOMY ANODIZED TIN|14|412 +Brand#54|ECONOMY BRUSHED NICKEL|45|412 +Brand#54|ECONOMY POLISHED BRASS|45|412 +Brand#54|LARGE BRUSHED COPPER|3|412 +Brand#54|LARGE BRUSHED NICKEL|49|412 +Brand#54|LARGE BURNISHED NICKEL|9|412 +Brand#54|LARGE BURNISHED TIN|9|412 +Brand#54|LARGE PLATED TIN|3|412 +Brand#54|MEDIUM ANODIZED BRASS|3|412 +Brand#54|MEDIUM ANODIZED BRASS|14|412 +Brand#54|MEDIUM ANODIZED NICKEL|36|412 +Brand#54|MEDIUM BRUSHED BRASS|3|412 +Brand#54|PROMO ANODIZED BRASS|23|412 +Brand#54|PROMO BURNISHED COPPER|23|412 +Brand#54|PROMO PLATED NICKEL|19|412 +Brand#54|PROMO PLATED NICKEL|49|412 +Brand#54|PROMO POLISHED COPPER|45|412 +Brand#54|PROMO POLISHED STEEL|3|412 +Brand#54|PROMO POLISHED STEEL|19|412 +Brand#54|SMALL ANODIZED COPPER|36|412 +Brand#54|SMALL ANODIZED STEEL|14|412 +Brand#54|SMALL BRUSHED NICKEL|36|412 +Brand#54|SMALL BURNISHED NICKEL|19|412 +Brand#54|SMALL BURNISHED TIN|3|412 +Brand#54|SMALL PLATED TIN|36|412 +Brand#54|SMALL POLISHED COPPER|14|412 +Brand#54|SMALL POLISHED NICKEL|49|412 +Brand#54|STANDARD ANODIZED BRASS|23|412 +Brand#54|STANDARD BURNISHED STEEL|49|412 +Brand#54|STANDARD PLATED BRASS|49|412 +Brand#54|STANDARD PLATED STEEL|45|412 +Brand#54|STANDARD PLATED TIN|3|412 +Brand#54|STANDARD POLISHED NICKEL|49|412 +Brand#55|ECONOMY ANODIZED BRASS|3|412 +Brand#55|ECONOMY PLATED TIN|14|412 +Brand#55|LARGE ANODIZED BRASS|23|412 +Brand#55|LARGE ANODIZED STEEL|9|412 +Brand#55|LARGE ANODIZED TIN|49|412 +Brand#55|LARGE BRUSHED COPPER|23|412 +Brand#55|LARGE BURNISHED COPPER|19|412 +Brand#55|LARGE BURNISHED NICKEL|23|412 +Brand#55|LARGE PLATED COPPER|23|412 +Brand#55|MEDIUM BRUSHED STEEL|45|412 +Brand#55|MEDIUM BURNISHED COPPER|14|412 +Brand#55|MEDIUM PLATED COPPER|19|412 +Brand#55|MEDIUM PLATED COPPER|49|412 +Brand#55|PROMO BRUSHED NICKEL|9|412 +Brand#55|PROMO BURNISHED BRASS|19|412 +Brand#55|PROMO PLATED COPPER|45|412 +Brand#55|SMALL ANODIZED NICKEL|3|412 +Brand#55|SMALL BRUSHED COPPER|19|412 +Brand#55|SMALL BRUSHED STEEL|45|412 +Brand#55|SMALL PLATED NICKEL|14|412 +Brand#55|SMALL PLATED NICKEL|45|412 +Brand#55|STANDARD ANODIZED STEEL|36|412 +Brand#55|STANDARD ANODIZED TIN|49|412 +Brand#55|STANDARD BURNISHED BRASS|23|412 +Brand#55|STANDARD BURNISHED TIN|36|412 +Brand#55|STANDARD PLATED STEEL|19|412 +Brand#11|MEDIUM ANODIZED TIN|9|411 +Brand#11|PROMO ANODIZED BRASS|9|411 +Brand#11|PROMO BRUSHED STEEL|3|411 +Brand#11|PROMO PLATED BRASS|36|411 +Brand#11|PROMO PLATED COPPER|45|411 +Brand#11|PROMO PLATED NICKEL|3|411 +Brand#11|SMALL PLATED BRASS|14|411 +Brand#11|STANDARD POLISHED STEEL|49|411 +Brand#12|ECONOMY BURNISHED STEEL|45|411 +Brand#12|ECONOMY POLISHED COPPER|49|411 +Brand#12|LARGE ANODIZED STEEL|36|411 +Brand#12|LARGE BURNISHED BRASS|36|411 +Brand#12|MEDIUM ANODIZED TIN|36|411 +Brand#12|STANDARD ANODIZED TIN|19|411 +Brand#12|STANDARD BRUSHED BRASS|23|411 +Brand#12|STANDARD BURNISHED BRASS|49|411 +Brand#13|ECONOMY ANODIZED COPPER|9|411 +Brand#13|ECONOMY ANODIZED COPPER|45|411 +Brand#13|ECONOMY BURNISHED STEEL|36|411 +Brand#13|LARGE ANODIZED COPPER|9|411 +Brand#13|LARGE BURNISHED BRASS|14|411 +Brand#13|MEDIUM ANODIZED STEEL|14|411 +Brand#13|MEDIUM PLATED STEEL|49|411 +Brand#13|PROMO ANODIZED BRASS|19|411 +Brand#13|PROMO POLISHED COPPER|23|411 +Brand#13|SMALL BRUSHED NICKEL|19|411 +Brand#13|SMALL POLISHED COPPER|9|411 +Brand#13|SMALL POLISHED COPPER|23|411 +Brand#13|STANDARD BRUSHED BRASS|23|411 +Brand#13|STANDARD POLISHED BRASS|3|411 +Brand#14|ECONOMY ANODIZED STEEL|45|411 +Brand#14|ECONOMY POLISHED COPPER|9|411 +Brand#14|LARGE BURNISHED STEEL|36|411 +Brand#14|MEDIUM PLATED BRASS|49|411 +Brand#14|MEDIUM PLATED STEEL|9|411 +Brand#14|PROMO POLISHED COPPER|49|411 +Brand#14|SMALL BRUSHED NICKEL|49|411 +Brand#14|SMALL BURNISHED NICKEL|36|411 +Brand#14|SMALL BURNISHED STEEL|49|411 +Brand#14|SMALL PLATED TIN|36|411 +Brand#14|STANDARD PLATED COPPER|3|411 +Brand#14|STANDARD POLISHED COPPER|36|411 +Brand#15|ECONOMY BRUSHED BRASS|49|411 +Brand#15|ECONOMY PLATED COPPER|14|411 +Brand#15|ECONOMY POLISHED NICKEL|19|411 +Brand#15|PROMO POLISHED NICKEL|23|411 +Brand#15|SMALL ANODIZED NICKEL|36|411 +Brand#15|SMALL POLISHED TIN|3|411 +Brand#15|STANDARD ANODIZED COPPER|3|411 +Brand#15|STANDARD BRUSHED BRASS|9|411 +Brand#15|STANDARD PLATED NICKEL|19|411 +Brand#15|STANDARD PLATED STEEL|36|411 +Brand#21|ECONOMY POLISHED BRASS|9|411 +Brand#21|LARGE ANODIZED STEEL|3|411 +Brand#21|MEDIUM PLATED STEEL|19|411 +Brand#21|PROMO BRUSHED STEEL|19|411 +Brand#21|PROMO BURNISHED COPPER|19|411 +Brand#21|PROMO POLISHED TIN|23|411 +Brand#21|SMALL PLATED TIN|23|411 +Brand#22|ECONOMY ANODIZED NICKEL|23|411 +Brand#22|ECONOMY ANODIZED TIN|45|411 +Brand#22|ECONOMY POLISHED TIN|3|411 +Brand#22|LARGE ANODIZED COPPER|9|411 +Brand#22|LARGE BURNISHED TIN|9|411 +Brand#22|MEDIUM BRUSHED COPPER|9|411 +Brand#22|PROMO BRUSHED NICKEL|23|411 +Brand#22|PROMO BURNISHED NICKEL|19|411 +Brand#22|SMALL BRUSHED TIN|3|411 +Brand#23|ECONOMY ANODIZED COPPER|49|411 +Brand#23|LARGE ANODIZED COPPER|36|411 +Brand#23|LARGE PLATED BRASS|9|411 +Brand#23|MEDIUM BRUSHED TIN|3|411 +Brand#23|MEDIUM BURNISHED NICKEL|3|411 +Brand#23|PROMO ANODIZED BRASS|14|411 +Brand#23|PROMO PLATED COPPER|19|411 +Brand#23|PROMO PLATED NICKEL|19|411 +Brand#23|PROMO PLATED NICKEL|45|411 +Brand#23|PROMO PLATED TIN|49|411 +Brand#23|PROMO POLISHED NICKEL|9|411 +Brand#23|SMALL ANODIZED NICKEL|9|411 +Brand#23|STANDARD ANODIZED BRASS|14|411 +Brand#23|STANDARD ANODIZED TIN|3|411 +Brand#24|ECONOMY PLATED STEEL|3|411 +Brand#24|LARGE BRUSHED TIN|9|411 +Brand#24|LARGE PLATED COPPER|19|411 +Brand#24|MEDIUM PLATED STEEL|9|411 +Brand#24|PROMO BRUSHED COPPER|14|411 +Brand#24|SMALL PLATED STEEL|3|411 +Brand#25|ECONOMY BRUSHED BRASS|9|411 +Brand#25|ECONOMY BRUSHED TIN|45|411 +Brand#25|ECONOMY POLISHED BRASS|14|411 +Brand#25|LARGE BRUSHED NICKEL|14|411 +Brand#25|LARGE BURNISHED COPPER|36|411 +Brand#25|LARGE POLISHED BRASS|9|411 +Brand#25|LARGE POLISHED NICKEL|14|411 +Brand#25|LARGE POLISHED NICKEL|49|411 +Brand#25|LARGE POLISHED TIN|9|411 +Brand#25|MEDIUM ANODIZED BRASS|19|411 +Brand#25|MEDIUM BURNISHED TIN|14|411 +Brand#25|MEDIUM PLATED COPPER|45|411 +Brand#25|PROMO ANODIZED STEEL|36|411 +Brand#25|PROMO BRUSHED NICKEL|19|411 +Brand#25|PROMO BRUSHED NICKEL|45|411 +Brand#25|PROMO PLATED STEEL|19|411 +Brand#25|PROMO POLISHED NICKEL|19|411 +Brand#25|SMALL ANODIZED COPPER|23|411 +Brand#25|SMALL BRUSHED COPPER|23|411 +Brand#25|SMALL BRUSHED NICKEL|36|411 +Brand#31|LARGE BRUSHED BRASS|14|411 +Brand#31|LARGE POLISHED TIN|19|411 +Brand#31|MEDIUM ANODIZED TIN|9|411 +Brand#31|MEDIUM BRUSHED BRASS|23|411 +Brand#31|MEDIUM BURNISHED BRASS|23|411 +Brand#31|SMALL BRUSHED NICKEL|9|411 +Brand#31|SMALL POLISHED TIN|9|411 +Brand#31|STANDARD BURNISHED STEEL|36|411 +Brand#31|STANDARD POLISHED TIN|3|411 +Brand#32|ECONOMY ANODIZED BRASS|14|411 +Brand#32|ECONOMY PLATED TIN|9|411 +Brand#32|LARGE PLATED STEEL|9|411 +Brand#32|MEDIUM PLATED STEEL|19|411 +Brand#32|PROMO ANODIZED STEEL|19|411 +Brand#32|SMALL BURNISHED COPPER|14|411 +Brand#32|SMALL BURNISHED COPPER|36|411 +Brand#32|STANDARD PLATED COPPER|9|411 +Brand#32|STANDARD POLISHED STEEL|23|411 +Brand#33|LARGE ANODIZED BRASS|45|411 +Brand#33|LARGE ANODIZED BRASS|49|411 +Brand#33|LARGE BURNISHED COPPER|9|411 +Brand#33|LARGE PLATED BRASS|9|411 +Brand#33|MEDIUM BRUSHED TIN|45|411 +Brand#33|MEDIUM PLATED COPPER|9|411 +Brand#33|MEDIUM PLATED STEEL|19|411 +Brand#33|PROMO BRUSHED STEEL|19|411 +Brand#33|PROMO BRUSHED TIN|14|411 +Brand#33|PROMO PLATED TIN|45|411 +Brand#33|SMALL ANODIZED COPPER|49|411 +Brand#33|SMALL BURNISHED TIN|3|411 +Brand#33|SMALL PLATED COPPER|36|411 +Brand#33|STANDARD ANODIZED NICKEL|19|411 +Brand#33|STANDARD BRUSHED COPPER|3|411 +Brand#34|LARGE BRUSHED COPPER|49|411 +Brand#34|LARGE POLISHED STEEL|14|411 +Brand#34|MEDIUM BURNISHED BRASS|19|411 +Brand#34|MEDIUM PLATED STEEL|49|411 +Brand#34|PROMO BURNISHED STEEL|3|411 +Brand#34|PROMO PLATED NICKEL|49|411 +Brand#34|PROMO POLISHED TIN|19|411 +Brand#34|STANDARD ANODIZED STEEL|9|411 +Brand#34|STANDARD PLATED NICKEL|19|411 +Brand#35|ECONOMY BRUSHED COPPER|3|411 +Brand#35|ECONOMY PLATED COPPER|36|411 +Brand#35|LARGE BURNISHED COPPER|19|411 +Brand#35|LARGE PLATED BRASS|9|411 +Brand#35|MEDIUM BRUSHED STEEL|45|411 +Brand#35|MEDIUM BRUSHED TIN|3|411 +Brand#35|MEDIUM PLATED STEEL|9|411 +Brand#35|SMALL ANODIZED COPPER|19|411 +Brand#41|MEDIUM BRUSHED BRASS|36|411 +Brand#41|PROMO PLATED COPPER|9|411 +Brand#41|SMALL ANODIZED STEEL|45|411 +Brand#41|SMALL BURNISHED STEEL|14|411 +Brand#41|STANDARD PLATED STEEL|23|411 +Brand#42|ECONOMY BURNISHED NICKEL|45|411 +Brand#42|LARGE BRUSHED TIN|45|411 +Brand#42|LARGE PLATED NICKEL|23|411 +Brand#42|MEDIUM BRUSHED BRASS|19|411 +Brand#42|MEDIUM PLATED BRASS|45|411 +Brand#42|MEDIUM PLATED NICKEL|49|411 +Brand#42|MEDIUM PLATED STEEL|9|411 +Brand#42|PROMO ANODIZED TIN|23|411 +Brand#42|SMALL BRUSHED COPPER|23|411 +Brand#43|ECONOMY PLATED COPPER|14|411 +Brand#43|ECONOMY POLISHED BRASS|9|411 +Brand#43|SMALL PLATED COPPER|9|411 +Brand#43|SMALL PLATED NICKEL|9|411 +Brand#44|ECONOMY PLATED NICKEL|23|411 +Brand#44|ECONOMY POLISHED BRASS|49|411 +Brand#44|ECONOMY POLISHED NICKEL|49|411 +Brand#44|LARGE BRUSHED COPPER|14|411 +Brand#44|LARGE BRUSHED NICKEL|9|411 +Brand#44|MEDIUM BRUSHED BRASS|9|411 +Brand#44|PROMO PLATED NICKEL|3|411 +Brand#44|PROMO POLISHED NICKEL|23|411 +Brand#44|STANDARD ANODIZED TIN|19|411 +Brand#44|STANDARD BRUSHED NICKEL|23|411 +Brand#44|STANDARD BRUSHED STEEL|23|411 +Brand#44|STANDARD BURNISHED COPPER|23|411 +Brand#51|ECONOMY ANODIZED COPPER|3|411 +Brand#51|ECONOMY BRUSHED TIN|45|411 +Brand#51|ECONOMY PLATED TIN|14|411 +Brand#51|LARGE POLISHED STEEL|3|411 +Brand#51|LARGE POLISHED TIN|23|411 +Brand#51|PROMO PLATED BRASS|9|411 +Brand#51|PROMO PLATED COPPER|19|411 +Brand#51|SMALL ANODIZED NICKEL|23|411 +Brand#51|STANDARD ANODIZED STEEL|36|411 +Brand#51|STANDARD BURNISHED BRASS|14|411 +Brand#52|ECONOMY BRUSHED NICKEL|9|411 +Brand#52|LARGE BRUSHED BRASS|14|411 +Brand#52|LARGE BURNISHED NICKEL|36|411 +Brand#52|LARGE POLISHED STEEL|3|411 +Brand#53|ECONOMY BURNISHED COPPER|19|411 +Brand#53|ECONOMY BURNISHED NICKEL|19|411 +Brand#53|ECONOMY PLATED BRASS|49|411 +Brand#53|LARGE BRUSHED COPPER|9|411 +Brand#53|MEDIUM ANODIZED STEEL|19|411 +Brand#53|MEDIUM BRUSHED BRASS|3|411 +Brand#53|MEDIUM BRUSHED COPPER|14|411 +Brand#53|PROMO BRUSHED STEEL|3|411 +Brand#53|PROMO BURNISHED TIN|19|411 +Brand#53|PROMO PLATED NICKEL|45|411 +Brand#53|PROMO PLATED NICKEL|49|411 +Brand#53|SMALL ANODIZED STEEL|3|411 +Brand#53|SMALL BURNISHED BRASS|19|411 +Brand#53|STANDARD ANODIZED NICKEL|3|411 +Brand#53|STANDARD POLISHED STEEL|36|411 +Brand#54|LARGE PLATED COPPER|23|411 +Brand#54|MEDIUM ANODIZED NICKEL|9|411 +Brand#54|MEDIUM PLATED TIN|14|411 +Brand#54|PROMO BRUSHED COPPER|49|411 +Brand#54|PROMO BURNISHED BRASS|14|411 +Brand#55|ECONOMY BRUSHED STEEL|19|411 +Brand#55|ECONOMY BURNISHED BRASS|45|411 +Brand#55|LARGE ANODIZED BRASS|45|411 +Brand#55|MEDIUM BRUSHED NICKEL|19|411 +Brand#55|MEDIUM BRUSHED NICKEL|49|411 +Brand#55|MEDIUM PLATED TIN|45|411 +Brand#55|PROMO BURNISHED COPPER|45|411 +Brand#55|PROMO POLISHED TIN|3|411 +Brand#55|SMALL ANODIZED COPPER|45|411 +Brand#55|STANDARD POLISHED COPPER|14|411 +Brand#12|SMALL POLISHED NICKEL|45|410 +Brand#13|ECONOMY BURNISHED COPPER|36|410 +Brand#13|STANDARD BURNISHED STEEL|23|410 +Brand#13|STANDARD PLATED BRASS|9|410 +Brand#15|SMALL POLISHED NICKEL|14|410 +Brand#21|LARGE BURNISHED BRASS|36|410 +Brand#24|LARGE PLATED STEEL|14|410 +Brand#24|MEDIUM BURNISHED BRASS|45|410 +Brand#24|PROMO POLISHED NICKEL|45|410 +Brand#25|STANDARD BURNISHED STEEL|19|410 +Brand#32|ECONOMY BURNISHED STEEL|45|410 +Brand#34|MEDIUM ANODIZED BRASS|14|410 +Brand#34|SMALL ANODIZED BRASS|14|410 +Brand#35|STANDARD PLATED COPPER|3|410 +Brand#41|LARGE ANODIZED STEEL|3|410 +Brand#43|LARGE PLATED STEEL|9|410 +Brand#43|SMALL BRUSHED TIN|9|410 +Brand#43|STANDARD BRUSHED COPPER|45|410 +Brand#52|SMALL PLATED STEEL|45|410 +Brand#53|SMALL BRUSHED COPPER|45|410 +Brand#54|PROMO PLATED TIN|23|410 +Brand#55|ECONOMY BURNISHED COPPER|23|410 +Brand#12|SMALL ANODIZED TIN|19|409 +Brand#15|ECONOMY BRUSHED NICKEL|45|409 +Brand#11|ECONOMY BURNISHED STEEL|45|408 +Brand#11|ECONOMY PLATED BRASS|9|408 +Brand#11|LARGE ANODIZED COPPER|19|408 +Brand#11|LARGE ANODIZED COPPER|49|408 +Brand#11|LARGE ANODIZED TIN|3|408 +Brand#11|LARGE POLISHED BRASS|3|408 +Brand#11|LARGE POLISHED NICKEL|19|408 +Brand#11|MEDIUM BURNISHED NICKEL|45|408 +Brand#11|PROMO ANODIZED STEEL|3|408 +Brand#11|PROMO BRUSHED BRASS|23|408 +Brand#11|PROMO BURNISHED NICKEL|49|408 +Brand#11|PROMO BURNISHED TIN|45|408 +Brand#11|PROMO PLATED NICKEL|45|408 +Brand#11|PROMO POLISHED COPPER|3|408 +Brand#11|SMALL BURNISHED STEEL|36|408 +Brand#11|SMALL PLATED BRASS|23|408 +Brand#11|SMALL PLATED NICKEL|36|408 +Brand#11|SMALL PLATED STEEL|23|408 +Brand#11|STANDARD ANODIZED COPPER|23|408 +Brand#11|STANDARD ANODIZED TIN|36|408 +Brand#11|STANDARD BRUSHED NICKEL|23|408 +Brand#11|STANDARD BRUSHED STEEL|49|408 +Brand#11|STANDARD BURNISHED STEEL|3|408 +Brand#11|STANDARD PLATED COPPER|19|408 +Brand#11|STANDARD PLATED STEEL|45|408 +Brand#11|STANDARD PLATED TIN|3|408 +Brand#11|STANDARD POLISHED COPPER|36|408 +Brand#11|STANDARD POLISHED NICKEL|19|408 +Brand#12|ECONOMY POLISHED NICKEL|14|408 +Brand#12|ECONOMY POLISHED NICKEL|23|408 +Brand#12|ECONOMY POLISHED TIN|23|408 +Brand#12|LARGE BRUSHED STEEL|49|408 +Brand#12|LARGE PLATED STEEL|3|408 +Brand#12|LARGE PLATED STEEL|14|408 +Brand#12|LARGE PLATED TIN|9|408 +Brand#12|LARGE POLISHED TIN|45|408 +Brand#12|PROMO ANODIZED BRASS|36|408 +Brand#12|PROMO BRUSHED NICKEL|3|408 +Brand#12|PROMO BRUSHED STEEL|19|408 +Brand#12|PROMO BRUSHED STEEL|45|408 +Brand#12|PROMO BURNISHED NICKEL|45|408 +Brand#12|PROMO PLATED NICKEL|45|408 +Brand#12|PROMO PLATED STEEL|45|408 +Brand#12|PROMO PLATED TIN|19|408 +Brand#12|PROMO POLISHED COPPER|23|408 +Brand#12|PROMO POLISHED COPPER|45|408 +Brand#12|SMALL ANODIZED BRASS|23|408 +Brand#12|SMALL ANODIZED NICKEL|19|408 +Brand#12|SMALL ANODIZED NICKEL|36|408 +Brand#12|SMALL BURNISHED NICKEL|45|408 +Brand#12|SMALL BURNISHED STEEL|36|408 +Brand#12|SMALL PLATED NICKEL|36|408 +Brand#12|SMALL POLISHED COPPER|9|408 +Brand#12|STANDARD BRUSHED TIN|36|408 +Brand#12|STANDARD PLATED STEEL|14|408 +Brand#12|STANDARD POLISHED BRASS|9|408 +Brand#13|ECONOMY PLATED STEEL|3|408 +Brand#13|ECONOMY PLATED STEEL|36|408 +Brand#13|ECONOMY POLISHED COPPER|49|408 +Brand#13|LARGE ANODIZED NICKEL|23|408 +Brand#13|LARGE BRUSHED COPPER|9|408 +Brand#13|LARGE BRUSHED STEEL|9|408 +Brand#13|LARGE BRUSHED TIN|9|408 +Brand#13|LARGE BURNISHED BRASS|36|408 +Brand#13|LARGE BURNISHED STEEL|23|408 +Brand#13|LARGE POLISHED BRASS|23|408 +Brand#13|LARGE POLISHED TIN|36|408 +Brand#13|MEDIUM ANODIZED BRASS|23|408 +Brand#13|MEDIUM ANODIZED NICKEL|14|408 +Brand#13|MEDIUM BRUSHED COPPER|36|408 +Brand#13|MEDIUM BURNISHED NICKEL|3|408 +Brand#13|MEDIUM PLATED NICKEL|14|408 +Brand#13|MEDIUM PLATED NICKEL|19|408 +Brand#13|PROMO ANODIZED STEEL|14|408 +Brand#13|PROMO BURNISHED STEEL|45|408 +Brand#13|PROMO POLISHED NICKEL|45|408 +Brand#13|SMALL PLATED STEEL|23|408 +Brand#13|SMALL PLATED TIN|14|408 +Brand#13|SMALL PLATED TIN|49|408 +Brand#13|SMALL POLISHED COPPER|36|408 +Brand#13|STANDARD ANODIZED BRASS|49|408 +Brand#13|STANDARD ANODIZED NICKEL|36|408 +Brand#13|STANDARD PLATED COPPER|14|408 +Brand#14|ECONOMY BRUSHED COPPER|3|408 +Brand#14|ECONOMY PLATED NICKEL|36|408 +Brand#14|ECONOMY POLISHED COPPER|14|408 +Brand#14|LARGE BRUSHED COPPER|45|408 +Brand#14|LARGE BURNISHED BRASS|23|408 +Brand#14|MEDIUM BRUSHED BRASS|36|408 +Brand#14|MEDIUM BURNISHED COPPER|45|408 +Brand#14|MEDIUM BURNISHED NICKEL|49|408 +Brand#14|MEDIUM PLATED BRASS|3|408 +Brand#14|PROMO ANODIZED BRASS|14|408 +Brand#14|PROMO BRUSHED NICKEL|3|408 +Brand#14|PROMO BURNISHED COPPER|36|408 +Brand#14|PROMO BURNISHED TIN|36|408 +Brand#14|PROMO PLATED TIN|45|408 +Brand#14|SMALL ANODIZED BRASS|36|408 +Brand#14|SMALL ANODIZED TIN|23|408 +Brand#14|SMALL BRUSHED COPPER|9|408 +Brand#14|SMALL BRUSHED COPPER|45|408 +Brand#14|SMALL BURNISHED COPPER|9|408 +Brand#14|SMALL PLATED NICKEL|14|408 +Brand#14|SMALL POLISHED NICKEL|19|408 +Brand#14|STANDARD ANODIZED NICKEL|9|408 +Brand#14|STANDARD BURNISHED STEEL|23|408 +Brand#14|STANDARD PLATED COPPER|45|408 +Brand#14|STANDARD POLISHED TIN|45|408 +Brand#15|ECONOMY ANODIZED STEEL|49|408 +Brand#15|ECONOMY BURNISHED BRASS|36|408 +Brand#15|ECONOMY BURNISHED COPPER|14|408 +Brand#15|ECONOMY BURNISHED STEEL|36|408 +Brand#15|ECONOMY POLISHED NICKEL|23|408 +Brand#15|LARGE BRUSHED NICKEL|36|408 +Brand#15|LARGE BRUSHED STEEL|9|408 +Brand#15|LARGE BRUSHED STEEL|19|408 +Brand#15|LARGE PLATED BRASS|23|408 +Brand#15|LARGE PLATED TIN|49|408 +Brand#15|MEDIUM ANODIZED TIN|23|408 +Brand#15|MEDIUM BRUSHED BRASS|19|408 +Brand#15|MEDIUM BURNISHED STEEL|45|408 +Brand#15|MEDIUM PLATED STEEL|3|408 +Brand#15|PROMO BURNISHED NICKEL|49|408 +Brand#15|PROMO POLISHED BRASS|23|408 +Brand#15|PROMO POLISHED COPPER|49|408 +Brand#15|SMALL BRUSHED NICKEL|23|408 +Brand#15|SMALL POLISHED BRASS|36|408 +Brand#15|SMALL POLISHED BRASS|49|408 +Brand#15|STANDARD ANODIZED NICKEL|19|408 +Brand#15|STANDARD ANODIZED STEEL|3|408 +Brand#15|STANDARD ANODIZED TIN|23|408 +Brand#15|STANDARD BRUSHED COPPER|45|408 +Brand#15|STANDARD BURNISHED BRASS|3|408 +Brand#15|STANDARD BURNISHED COPPER|23|408 +Brand#15|STANDARD BURNISHED STEEL|3|408 +Brand#15|STANDARD PLATED NICKEL|9|408 +Brand#21|ECONOMY ANODIZED NICKEL|19|408 +Brand#21|ECONOMY BRUSHED NICKEL|36|408 +Brand#21|LARGE ANODIZED BRASS|14|408 +Brand#21|LARGE ANODIZED COPPER|45|408 +Brand#21|LARGE ANODIZED STEEL|9|408 +Brand#21|LARGE BURNISHED BRASS|3|408 +Brand#21|LARGE PLATED BRASS|23|408 +Brand#21|LARGE POLISHED COPPER|49|408 +Brand#21|MEDIUM BURNISHED BRASS|49|408 +Brand#21|PROMO ANODIZED BRASS|3|408 +Brand#21|PROMO BRUSHED COPPER|9|408 +Brand#21|PROMO BRUSHED NICKEL|14|408 +Brand#21|SMALL ANODIZED NICKEL|19|408 +Brand#21|SMALL BRUSHED BRASS|14|408 +Brand#21|STANDARD ANODIZED COPPER|19|408 +Brand#21|STANDARD BRUSHED STEEL|3|408 +Brand#21|STANDARD BRUSHED TIN|45|408 +Brand#21|STANDARD BURNISHED BRASS|3|408 +Brand#21|STANDARD BURNISHED NICKEL|36|408 +Brand#22|ECONOMY ANODIZED COPPER|49|408 +Brand#22|ECONOMY ANODIZED NICKEL|49|408 +Brand#22|ECONOMY PLATED NICKEL|23|408 +Brand#22|ECONOMY PLATED TIN|49|408 +Brand#22|ECONOMY POLISHED COPPER|49|408 +Brand#22|LARGE ANODIZED NICKEL|3|408 +Brand#22|LARGE BRUSHED COPPER|36|408 +Brand#22|LARGE BRUSHED TIN|36|408 +Brand#22|LARGE BURNISHED NICKEL|23|408 +Brand#22|MEDIUM ANODIZED NICKEL|49|408 +Brand#22|MEDIUM BRUSHED BRASS|14|408 +Brand#22|MEDIUM BURNISHED TIN|3|408 +Brand#22|MEDIUM PLATED BRASS|9|408 +Brand#22|MEDIUM PLATED NICKEL|19|408 +Brand#22|PROMO BURNISHED NICKEL|3|408 +Brand#22|PROMO POLISHED BRASS|19|408 +Brand#22|PROMO POLISHED STEEL|49|408 +Brand#22|SMALL ANODIZED TIN|45|408 +Brand#22|SMALL BRUSHED BRASS|49|408 +Brand#22|SMALL BRUSHED NICKEL|9|408 +Brand#22|SMALL BRUSHED NICKEL|14|408 +Brand#22|SMALL BURNISHED BRASS|19|408 +Brand#22|SMALL PLATED BRASS|14|408 +Brand#22|SMALL PLATED STEEL|45|408 +Brand#22|SMALL POLISHED COPPER|45|408 +Brand#22|SMALL POLISHED STEEL|36|408 +Brand#22|STANDARD ANODIZED NICKEL|23|408 +Brand#23|ECONOMY ANODIZED TIN|49|408 +Brand#23|ECONOMY BRUSHED TIN|9|408 +Brand#23|ECONOMY BURNISHED BRASS|45|408 +Brand#23|ECONOMY BURNISHED NICKEL|14|408 +Brand#23|ECONOMY BURNISHED STEEL|3|408 +Brand#23|ECONOMY BURNISHED STEEL|36|408 +Brand#23|ECONOMY PLATED STEEL|9|408 +Brand#23|ECONOMY POLISHED BRASS|23|408 +Brand#23|LARGE ANODIZED COPPER|45|408 +Brand#23|LARGE ANODIZED TIN|3|408 +Brand#23|LARGE BRUSHED BRASS|3|408 +Brand#23|LARGE BRUSHED STEEL|49|408 +Brand#23|LARGE BRUSHED TIN|45|408 +Brand#23|LARGE BURNISHED STEEL|19|408 +Brand#23|LARGE BURNISHED STEEL|23|408 +Brand#23|LARGE PLATED COPPER|9|408 +Brand#23|MEDIUM ANODIZED TIN|9|408 +Brand#23|MEDIUM PLATED BRASS|23|408 +Brand#23|MEDIUM PLATED STEEL|45|408 +Brand#23|PROMO PLATED STEEL|45|408 +Brand#23|PROMO POLISHED BRASS|14|408 +Brand#23|SMALL ANODIZED STEEL|19|408 +Brand#23|SMALL ANODIZED TIN|49|408 +Brand#23|SMALL BURNISHED COPPER|9|408 +Brand#23|SMALL BURNISHED STEEL|36|408 +Brand#23|SMALL PLATED COPPER|14|408 +Brand#23|STANDARD ANODIZED BRASS|19|408 +Brand#23|STANDARD BRUSHED COPPER|23|408 +Brand#23|STANDARD BURNISHED BRASS|9|408 +Brand#23|STANDARD BURNISHED COPPER|36|408 +Brand#23|STANDARD BURNISHED TIN|45|408 +Brand#23|STANDARD POLISHED BRASS|9|408 +Brand#23|STANDARD POLISHED COPPER|9|408 +Brand#24|ECONOMY ANODIZED BRASS|9|408 +Brand#24|ECONOMY ANODIZED BRASS|49|408 +Brand#24|ECONOMY BRUSHED BRASS|14|408 +Brand#24|ECONOMY PLATED COPPER|49|408 +Brand#24|ECONOMY POLISHED COPPER|9|408 +Brand#24|LARGE BURNISHED COPPER|9|408 +Brand#24|LARGE PLATED NICKEL|49|408 +Brand#24|LARGE POLISHED COPPER|14|408 +Brand#24|LARGE POLISHED TIN|9|408 +Brand#24|LARGE POLISHED TIN|23|408 +Brand#24|MEDIUM ANODIZED BRASS|9|408 +Brand#24|MEDIUM ANODIZED STEEL|3|408 +Brand#24|MEDIUM BURNISHED BRASS|3|408 +Brand#24|MEDIUM BURNISHED NICKEL|45|408 +Brand#24|PROMO ANODIZED BRASS|3|408 +Brand#24|PROMO ANODIZED STEEL|3|408 +Brand#24|PROMO BURNISHED BRASS|14|408 +Brand#24|PROMO BURNISHED COPPER|3|408 +Brand#24|PROMO BURNISHED TIN|45|408 +Brand#24|PROMO PLATED BRASS|19|408 +Brand#24|PROMO PLATED NICKEL|49|408 +Brand#24|PROMO POLISHED STEEL|23|408 +Brand#24|PROMO POLISHED TIN|23|408 +Brand#24|SMALL ANODIZED NICKEL|19|408 +Brand#24|SMALL BRUSHED STEEL|14|408 +Brand#24|SMALL BURNISHED TIN|9|408 +Brand#24|SMALL BURNISHED TIN|14|408 +Brand#24|SMALL PLATED BRASS|23|408 +Brand#24|SMALL POLISHED BRASS|14|408 +Brand#24|STANDARD ANODIZED BRASS|14|408 +Brand#24|STANDARD ANODIZED BRASS|23|408 +Brand#24|STANDARD BRUSHED TIN|14|408 +Brand#24|STANDARD POLISHED BRASS|19|408 +Brand#24|STANDARD POLISHED STEEL|49|408 +Brand#24|STANDARD POLISHED TIN|3|408 +Brand#25|ECONOMY BRUSHED COPPER|49|408 +Brand#25|ECONOMY BURNISHED NICKEL|36|408 +Brand#25|ECONOMY PLATED NICKEL|19|408 +Brand#25|ECONOMY POLISHED BRASS|19|408 +Brand#25|LARGE ANODIZED BRASS|36|408 +Brand#25|LARGE ANODIZED STEEL|36|408 +Brand#25|LARGE ANODIZED TIN|23|408 +Brand#25|LARGE BRUSHED NICKEL|45|408 +Brand#25|MEDIUM ANODIZED NICKEL|49|408 +Brand#25|MEDIUM ANODIZED STEEL|3|408 +Brand#25|MEDIUM BRUSHED BRASS|9|408 +Brand#25|MEDIUM BURNISHED BRASS|45|408 +Brand#25|MEDIUM BURNISHED TIN|9|408 +Brand#25|MEDIUM BURNISHED TIN|49|408 +Brand#25|PROMO ANODIZED STEEL|9|408 +Brand#25|PROMO ANODIZED TIN|9|408 +Brand#25|PROMO ANODIZED TIN|19|408 +Brand#25|PROMO ANODIZED TIN|23|408 +Brand#25|PROMO BRUSHED TIN|36|408 +Brand#25|PROMO BURNISHED BRASS|3|408 +Brand#25|PROMO BURNISHED STEEL|45|408 +Brand#25|PROMO POLISHED COPPER|19|408 +Brand#25|SMALL BURNISHED COPPER|9|408 +Brand#25|SMALL BURNISHED STEEL|14|408 +Brand#25|SMALL PLATED BRASS|14|408 +Brand#25|SMALL POLISHED BRASS|14|408 +Brand#25|STANDARD ANODIZED STEEL|3|408 +Brand#25|STANDARD ANODIZED STEEL|49|408 +Brand#25|STANDARD ANODIZED TIN|23|408 +Brand#25|STANDARD PLATED BRASS|49|408 +Brand#25|STANDARD PLATED COPPER|19|408 +Brand#25|STANDARD POLISHED STEEL|3|408 +Brand#25|STANDARD POLISHED TIN|9|408 +Brand#31|ECONOMY ANODIZED COPPER|23|408 +Brand#31|ECONOMY ANODIZED COPPER|36|408 +Brand#31|ECONOMY BRUSHED COPPER|9|408 +Brand#31|ECONOMY BRUSHED COPPER|14|408 +Brand#31|ECONOMY BRUSHED TIN|23|408 +Brand#31|ECONOMY BURNISHED COPPER|3|408 +Brand#31|ECONOMY BURNISHED NICKEL|49|408 +Brand#31|ECONOMY BURNISHED TIN|9|408 +Brand#31|ECONOMY PLATED TIN|3|408 +Brand#31|ECONOMY POLISHED STEEL|36|408 +Brand#31|LARGE BRUSHED COPPER|23|408 +Brand#31|LARGE BRUSHED TIN|36|408 +Brand#31|LARGE BURNISHED TIN|9|408 +Brand#31|LARGE PLATED COPPER|49|408 +Brand#31|LARGE PLATED NICKEL|19|408 +Brand#31|MEDIUM BRUSHED TIN|49|408 +Brand#31|MEDIUM PLATED COPPER|45|408 +Brand#31|MEDIUM PLATED STEEL|9|408 +Brand#31|PROMO ANODIZED NICKEL|9|408 +Brand#31|PROMO BRUSHED BRASS|19|408 +Brand#31|PROMO BRUSHED BRASS|36|408 +Brand#31|PROMO BRUSHED TIN|14|408 +Brand#31|PROMO BURNISHED COPPER|45|408 +Brand#31|PROMO BURNISHED TIN|49|408 +Brand#31|PROMO POLISHED COPPER|23|408 +Brand#31|SMALL ANODIZED STEEL|3|408 +Brand#31|SMALL ANODIZED TIN|45|408 +Brand#31|SMALL BURNISHED BRASS|19|408 +Brand#31|SMALL BURNISHED COPPER|3|408 +Brand#31|SMALL BURNISHED STEEL|23|408 +Brand#31|SMALL PLATED STEEL|49|408 +Brand#31|SMALL PLATED TIN|45|408 +Brand#31|STANDARD ANODIZED BRASS|19|408 +Brand#31|STANDARD ANODIZED NICKEL|49|408 +Brand#31|STANDARD PLATED BRASS|19|408 +Brand#32|ECONOMY BRUSHED COPPER|9|408 +Brand#32|ECONOMY BRUSHED COPPER|19|408 +Brand#32|ECONOMY BRUSHED NICKEL|14|408 +Brand#32|ECONOMY BRUSHED NICKEL|23|408 +Brand#32|ECONOMY BRUSHED TIN|23|408 +Brand#32|ECONOMY BURNISHED COPPER|19|408 +Brand#32|ECONOMY BURNISHED COPPER|23|408 +Brand#32|ECONOMY BURNISHED NICKEL|23|408 +Brand#32|ECONOMY BURNISHED STEEL|36|408 +Brand#32|ECONOMY PLATED STEEL|9|408 +Brand#32|ECONOMY PLATED STEEL|19|408 +Brand#32|ECONOMY POLISHED NICKEL|19|408 +Brand#32|ECONOMY POLISHED NICKEL|36|408 +Brand#32|LARGE ANODIZED STEEL|9|408 +Brand#32|LARGE BRUSHED NICKEL|23|408 +Brand#32|LARGE BRUSHED STEEL|36|408 +Brand#32|LARGE BRUSHED TIN|19|408 +Brand#32|LARGE PLATED BRASS|49|408 +Brand#32|LARGE POLISHED BRASS|19|408 +Brand#32|LARGE POLISHED NICKEL|36|408 +Brand#32|MEDIUM ANODIZED BRASS|9|408 +Brand#32|MEDIUM ANODIZED NICKEL|14|408 +Brand#32|MEDIUM ANODIZED NICKEL|49|408 +Brand#32|MEDIUM BRUSHED TIN|45|408 +Brand#32|PROMO ANODIZED COPPER|45|408 +Brand#32|PROMO ANODIZED NICKEL|49|408 +Brand#32|PROMO BRUSHED STEEL|49|408 +Brand#32|PROMO PLATED NICKEL|23|408 +Brand#32|PROMO PLATED TIN|19|408 +Brand#32|PROMO POLISHED BRASS|45|408 +Brand#32|PROMO POLISHED NICKEL|49|408 +Brand#32|SMALL ANODIZED NICKEL|36|408 +Brand#32|SMALL BRUSHED BRASS|45|408 +Brand#32|SMALL BURNISHED NICKEL|9|408 +Brand#32|SMALL POLISHED BRASS|49|408 +Brand#32|SMALL POLISHED NICKEL|9|408 +Brand#32|STANDARD BURNISHED BRASS|9|408 +Brand#32|STANDARD BURNISHED NICKEL|49|408 +Brand#32|STANDARD PLATED NICKEL|36|408 +Brand#32|STANDARD POLISHED STEEL|45|408 +Brand#33|ECONOMY PLATED BRASS|45|408 +Brand#33|ECONOMY PLATED NICKEL|14|408 +Brand#33|ECONOMY PLATED TIN|19|408 +Brand#33|ECONOMY POLISHED BRASS|49|408 +Brand#33|LARGE POLISHED BRASS|14|408 +Brand#33|LARGE POLISHED STEEL|14|408 +Brand#33|MEDIUM ANODIZED BRASS|23|408 +Brand#33|MEDIUM ANODIZED STEEL|49|408 +Brand#33|MEDIUM ANODIZED TIN|3|408 +Brand#33|MEDIUM BURNISHED BRASS|23|408 +Brand#33|MEDIUM BURNISHED STEEL|45|408 +Brand#33|MEDIUM PLATED BRASS|14|408 +Brand#33|MEDIUM PLATED NICKEL|19|408 +Brand#33|PROMO BRUSHED STEEL|9|408 +Brand#33|SMALL BRUSHED STEEL|3|408 +Brand#33|SMALL BURNISHED COPPER|9|408 +Brand#33|SMALL BURNISHED NICKEL|19|408 +Brand#33|SMALL BURNISHED TIN|49|408 +Brand#33|SMALL POLISHED STEEL|36|408 +Brand#33|SMALL POLISHED STEEL|45|408 +Brand#33|STANDARD ANODIZED STEEL|9|408 +Brand#33|STANDARD ANODIZED STEEL|14|408 +Brand#33|STANDARD ANODIZED TIN|36|408 +Brand#33|STANDARD POLISHED STEEL|14|408 +Brand#33|STANDARD POLISHED TIN|23|408 +Brand#34|ECONOMY ANODIZED STEEL|9|408 +Brand#34|ECONOMY ANODIZED STEEL|14|408 +Brand#34|ECONOMY BRUSHED STEEL|14|408 +Brand#34|ECONOMY PLATED COPPER|36|408 +Brand#34|LARGE BRUSHED STEEL|23|408 +Brand#34|LARGE BURNISHED STEEL|45|408 +Brand#34|LARGE PLATED NICKEL|49|408 +Brand#34|LARGE PLATED STEEL|36|408 +Brand#34|LARGE PLATED TIN|23|408 +Brand#34|LARGE POLISHED COPPER|3|408 +Brand#34|MEDIUM BRUSHED NICKEL|49|408 +Brand#34|MEDIUM BURNISHED COPPER|19|408 +Brand#34|MEDIUM BURNISHED NICKEL|23|408 +Brand#34|MEDIUM PLATED TIN|23|408 +Brand#34|PROMO ANODIZED NICKEL|45|408 +Brand#34|PROMO ANODIZED STEEL|19|408 +Brand#34|PROMO BRUSHED STEEL|45|408 +Brand#34|PROMO BURNISHED NICKEL|23|408 +Brand#34|PROMO PLATED NICKEL|23|408 +Brand#34|PROMO POLISHED BRASS|14|408 +Brand#34|SMALL ANODIZED STEEL|3|408 +Brand#34|SMALL BRUSHED NICKEL|9|408 +Brand#34|SMALL BRUSHED NICKEL|23|408 +Brand#34|SMALL BURNISHED NICKEL|3|408 +Brand#34|SMALL PLATED COPPER|3|408 +Brand#34|SMALL PLATED COPPER|23|408 +Brand#34|SMALL POLISHED TIN|45|408 +Brand#34|STANDARD ANODIZED TIN|49|408 +Brand#34|STANDARD BRUSHED BRASS|14|408 +Brand#34|STANDARD BRUSHED COPPER|45|408 +Brand#34|STANDARD BURNISHED COPPER|49|408 +Brand#34|STANDARD BURNISHED TIN|14|408 +Brand#34|STANDARD POLISHED BRASS|19|408 +Brand#34|STANDARD POLISHED STEEL|49|408 +Brand#35|ECONOMY BURNISHED BRASS|36|408 +Brand#35|ECONOMY BURNISHED COPPER|3|408 +Brand#35|ECONOMY BURNISHED NICKEL|3|408 +Brand#35|ECONOMY PLATED NICKEL|14|408 +Brand#35|ECONOMY POLISHED BRASS|3|408 +Brand#35|ECONOMY POLISHED NICKEL|23|408 +Brand#35|ECONOMY POLISHED STEEL|14|408 +Brand#35|LARGE ANODIZED NICKEL|19|408 +Brand#35|LARGE ANODIZED TIN|49|408 +Brand#35|LARGE BRUSHED TIN|14|408 +Brand#35|LARGE BRUSHED TIN|36|408 +Brand#35|LARGE BURNISHED STEEL|45|408 +Brand#35|MEDIUM ANODIZED BRASS|23|408 +Brand#35|MEDIUM ANODIZED TIN|14|408 +Brand#35|MEDIUM BURNISHED TIN|19|408 +Brand#35|PROMO ANODIZED BRASS|45|408 +Brand#35|PROMO ANODIZED NICKEL|3|408 +Brand#35|PROMO ANODIZED STEEL|23|408 +Brand#35|PROMO BRUSHED COPPER|9|408 +Brand#35|PROMO BURNISHED BRASS|49|408 +Brand#35|PROMO BURNISHED STEEL|36|408 +Brand#35|PROMO BURNISHED TIN|49|408 +Brand#35|PROMO PLATED BRASS|36|408 +Brand#35|SMALL BRUSHED STEEL|23|408 +Brand#35|SMALL BRUSHED TIN|36|408 +Brand#35|SMALL BURNISHED COPPER|14|408 +Brand#35|SMALL PLATED NICKEL|49|408 +Brand#35|SMALL POLISHED STEEL|45|408 +Brand#35|STANDARD ANODIZED NICKEL|36|408 +Brand#35|STANDARD ANODIZED TIN|9|408 +Brand#35|STANDARD BURNISHED NICKEL|23|408 +Brand#35|STANDARD BURNISHED STEEL|19|408 +Brand#35|STANDARD BURNISHED TIN|19|408 +Brand#35|STANDARD PLATED BRASS|9|408 +Brand#35|STANDARD POLISHED NICKEL|36|408 +Brand#35|STANDARD POLISHED STEEL|3|408 +Brand#41|ECONOMY PLATED COPPER|3|408 +Brand#41|ECONOMY POLISHED TIN|23|408 +Brand#41|LARGE BRUSHED COPPER|45|408 +Brand#41|LARGE POLISHED STEEL|49|408 +Brand#41|MEDIUM ANODIZED COPPER|19|408 +Brand#41|MEDIUM ANODIZED COPPER|45|408 +Brand#41|MEDIUM PLATED NICKEL|45|408 +Brand#41|PROMO PLATED TIN|23|408 +Brand#41|PROMO POLISHED NICKEL|45|408 +Brand#41|SMALL ANODIZED TIN|49|408 +Brand#41|SMALL BURNISHED COPPER|45|408 +Brand#41|SMALL BURNISHED NICKEL|3|408 +Brand#41|SMALL PLATED COPPER|19|408 +Brand#41|SMALL PLATED COPPER|23|408 +Brand#41|SMALL PLATED COPPER|45|408 +Brand#41|SMALL PLATED STEEL|49|408 +Brand#41|SMALL PLATED TIN|19|408 +Brand#41|SMALL POLISHED COPPER|23|408 +Brand#41|STANDARD BURNISHED NICKEL|49|408 +Brand#41|STANDARD BURNISHED TIN|45|408 +Brand#41|STANDARD POLISHED COPPER|36|408 +Brand#41|STANDARD POLISHED NICKEL|3|408 +Brand#41|STANDARD POLISHED NICKEL|9|408 +Brand#41|STANDARD POLISHED STEEL|9|408 +Brand#42|ECONOMY ANODIZED TIN|19|408 +Brand#42|ECONOMY BRUSHED COPPER|23|408 +Brand#42|ECONOMY PLATED COPPER|23|408 +Brand#42|ECONOMY PLATED TIN|9|408 +Brand#42|ECONOMY POLISHED STEEL|14|408 +Brand#42|ECONOMY POLISHED STEEL|36|408 +Brand#42|LARGE ANODIZED NICKEL|14|408 +Brand#42|LARGE ANODIZED TIN|23|408 +Brand#42|LARGE BRUSHED COPPER|9|408 +Brand#42|LARGE BURNISHED COPPER|23|408 +Brand#42|LARGE BURNISHED NICKEL|3|408 +Brand#42|LARGE PLATED TIN|23|408 +Brand#42|MEDIUM ANODIZED STEEL|14|408 +Brand#42|MEDIUM ANODIZED TIN|3|408 +Brand#42|MEDIUM BRUSHED NICKEL|49|408 +Brand#42|MEDIUM PLATED COPPER|14|408 +Brand#42|PROMO BRUSHED NICKEL|3|408 +Brand#42|PROMO BRUSHED STEEL|3|408 +Brand#42|PROMO BRUSHED STEEL|19|408 +Brand#42|PROMO BRUSHED TIN|3|408 +Brand#42|PROMO PLATED TIN|19|408 +Brand#42|PROMO PLATED TIN|45|408 +Brand#42|PROMO POLISHED TIN|45|408 +Brand#42|SMALL ANODIZED COPPER|45|408 +Brand#42|SMALL BRUSHED NICKEL|23|408 +Brand#42|SMALL BURNISHED NICKEL|3|408 +Brand#42|SMALL PLATED COPPER|9|408 +Brand#42|SMALL PLATED TIN|49|408 +Brand#42|STANDARD ANODIZED STEEL|9|408 +Brand#42|STANDARD PLATED BRASS|14|408 +Brand#42|STANDARD PLATED NICKEL|49|408 +Brand#42|STANDARD PLATED STEEL|45|408 +Brand#42|STANDARD POLISHED BRASS|3|408 +Brand#42|STANDARD POLISHED STEEL|19|408 +Brand#43|ECONOMY ANODIZED NICKEL|19|408 +Brand#43|ECONOMY BURNISHED STEEL|9|408 +Brand#43|ECONOMY PLATED COPPER|45|408 +Brand#43|ECONOMY PLATED STEEL|45|408 +Brand#43|ECONOMY POLISHED BRASS|19|408 +Brand#43|LARGE ANODIZED BRASS|49|408 +Brand#43|LARGE BRUSHED BRASS|45|408 +Brand#43|LARGE BRUSHED COPPER|45|408 +Brand#43|LARGE POLISHED STEEL|45|408 +Brand#43|MEDIUM ANODIZED COPPER|49|408 +Brand#43|MEDIUM ANODIZED NICKEL|19|408 +Brand#43|MEDIUM ANODIZED NICKEL|36|408 +Brand#43|MEDIUM BRUSHED TIN|36|408 +Brand#43|MEDIUM BURNISHED BRASS|23|408 +Brand#43|MEDIUM BURNISHED STEEL|49|408 +Brand#43|MEDIUM PLATED STEEL|9|408 +Brand#43|MEDIUM PLATED TIN|36|408 +Brand#43|PROMO ANODIZED BRASS|23|408 +Brand#43|PROMO ANODIZED NICKEL|3|408 +Brand#43|PROMO ANODIZED TIN|23|408 +Brand#43|PROMO BRUSHED BRASS|14|408 +Brand#43|PROMO BRUSHED COPPER|36|408 +Brand#43|PROMO POLISHED STEEL|36|408 +Brand#43|SMALL ANODIZED NICKEL|36|408 +Brand#43|SMALL BURNISHED BRASS|45|408 +Brand#43|SMALL BURNISHED TIN|9|408 +Brand#43|SMALL POLISHED BRASS|3|408 +Brand#43|SMALL POLISHED NICKEL|9|408 +Brand#43|STANDARD ANODIZED TIN|49|408 +Brand#43|STANDARD PLATED COPPER|9|408 +Brand#43|STANDARD POLISHED STEEL|19|408 +Brand#44|ECONOMY ANODIZED COPPER|23|408 +Brand#44|ECONOMY ANODIZED TIN|45|408 +Brand#44|ECONOMY BRUSHED NICKEL|3|408 +Brand#44|ECONOMY BRUSHED NICKEL|45|408 +Brand#44|ECONOMY BRUSHED TIN|14|408 +Brand#44|ECONOMY PLATED COPPER|36|408 +Brand#44|ECONOMY POLISHED NICKEL|19|408 +Brand#44|LARGE ANODIZED STEEL|19|408 +Brand#44|LARGE BRUSHED COPPER|3|408 +Brand#44|LARGE BRUSHED COPPER|9|408 +Brand#44|LARGE BRUSHED TIN|19|408 +Brand#44|LARGE PLATED BRASS|36|408 +Brand#44|LARGE PLATED BRASS|45|408 +Brand#44|LARGE PLATED STEEL|3|408 +Brand#44|LARGE POLISHED BRASS|19|408 +Brand#44|LARGE POLISHED NICKEL|36|408 +Brand#44|MEDIUM BURNISHED COPPER|9|408 +Brand#44|MEDIUM BURNISHED STEEL|23|408 +Brand#44|MEDIUM PLATED COPPER|19|408 +Brand#44|PROMO ANODIZED TIN|45|408 +Brand#44|PROMO PLATED STEEL|3|408 +Brand#44|PROMO POLISHED BRASS|49|408 +Brand#44|PROMO POLISHED COPPER|49|408 +Brand#44|SMALL ANODIZED NICKEL|9|408 +Brand#44|SMALL ANODIZED TIN|9|408 +Brand#44|SMALL BURNISHED BRASS|49|408 +Brand#44|SMALL BURNISHED STEEL|14|408 +Brand#44|STANDARD ANODIZED BRASS|23|408 +Brand#44|STANDARD BRUSHED NICKEL|9|408 +Brand#44|STANDARD BRUSHED STEEL|9|408 +Brand#44|STANDARD BURNISHED COPPER|49|408 +Brand#44|STANDARD PLATED NICKEL|14|408 +Brand#44|STANDARD PLATED NICKEL|49|408 +Brand#44|STANDARD POLISHED COPPER|23|408 +Brand#44|STANDARD POLISHED NICKEL|45|408 +Brand#51|ECONOMY BRUSHED BRASS|49|408 +Brand#51|ECONOMY BRUSHED NICKEL|19|408 +Brand#51|ECONOMY BRUSHED STEEL|3|408 +Brand#51|LARGE ANODIZED STEEL|14|408 +Brand#51|LARGE BRUSHED TIN|36|408 +Brand#51|MEDIUM BURNISHED STEEL|14|408 +Brand#51|MEDIUM BURNISHED TIN|19|408 +Brand#51|MEDIUM PLATED COPPER|23|408 +Brand#51|PROMO ANODIZED TIN|36|408 +Brand#51|PROMO PLATED NICKEL|19|408 +Brand#51|PROMO PLATED TIN|14|408 +Brand#51|SMALL ANODIZED COPPER|9|408 +Brand#51|SMALL BRUSHED NICKEL|9|408 +Brand#51|SMALL BURNISHED NICKEL|45|408 +Brand#51|SMALL BURNISHED STEEL|45|408 +Brand#51|SMALL BURNISHED TIN|36|408 +Brand#51|SMALL PLATED BRASS|19|408 +Brand#51|SMALL PLATED NICKEL|9|408 +Brand#51|SMALL PLATED TIN|14|408 +Brand#51|SMALL POLISHED NICKEL|36|408 +Brand#51|STANDARD BRUSHED BRASS|36|408 +Brand#51|STANDARD BRUSHED COPPER|9|408 +Brand#51|STANDARD POLISHED BRASS|45|408 +Brand#51|STANDARD POLISHED NICKEL|19|408 +Brand#51|STANDARD POLISHED TIN|14|408 +Brand#52|ECONOMY ANODIZED COPPER|36|408 +Brand#52|ECONOMY BRUSHED BRASS|14|408 +Brand#52|ECONOMY BRUSHED COPPER|19|408 +Brand#52|ECONOMY BURNISHED COPPER|19|408 +Brand#52|ECONOMY BURNISHED COPPER|36|408 +Brand#52|ECONOMY PLATED STEEL|9|408 +Brand#52|ECONOMY PLATED TIN|9|408 +Brand#52|LARGE ANODIZED COPPER|19|408 +Brand#52|LARGE BRUSHED NICKEL|23|408 +Brand#52|LARGE POLISHED NICKEL|14|408 +Brand#52|LARGE POLISHED STEEL|23|408 +Brand#52|PROMO ANODIZED BRASS|14|408 +Brand#52|PROMO ANODIZED BRASS|36|408 +Brand#52|PROMO ANODIZED COPPER|19|408 +Brand#52|PROMO BURNISHED BRASS|3|408 +Brand#52|PROMO BURNISHED BRASS|49|408 +Brand#52|PROMO BURNISHED TIN|45|408 +Brand#52|SMALL BRUSHED TIN|9|408 +Brand#52|SMALL BRUSHED TIN|19|408 +Brand#52|SMALL BURNISHED STEEL|3|408 +Brand#52|SMALL PLATED BRASS|14|408 +Brand#52|SMALL PLATED STEEL|14|408 +Brand#52|SMALL POLISHED COPPER|14|408 +Brand#52|SMALL POLISHED STEEL|45|408 +Brand#52|SMALL POLISHED TIN|19|408 +Brand#52|SMALL POLISHED TIN|49|408 +Brand#52|STANDARD ANODIZED STEEL|19|408 +Brand#52|STANDARD ANODIZED TIN|45|408 +Brand#52|STANDARD BURNISHED COPPER|49|408 +Brand#52|STANDARD BURNISHED TIN|14|408 +Brand#52|STANDARD PLATED NICKEL|45|408 +Brand#52|STANDARD PLATED TIN|14|408 +Brand#52|STANDARD POLISHED TIN|9|408 +Brand#53|ECONOMY BRUSHED TIN|14|408 +Brand#53|ECONOMY BURNISHED BRASS|23|408 +Brand#53|ECONOMY POLISHED NICKEL|14|408 +Brand#53|LARGE ANODIZED COPPER|45|408 +Brand#53|LARGE BURNISHED COPPER|49|408 +Brand#53|LARGE BURNISHED TIN|45|408 +Brand#53|LARGE POLISHED NICKEL|45|408 +Brand#53|MEDIUM BRUSHED TIN|3|408 +Brand#53|MEDIUM BRUSHED TIN|19|408 +Brand#53|MEDIUM PLATED BRASS|9|408 +Brand#53|PROMO ANODIZED STEEL|19|408 +Brand#53|PROMO BRUSHED BRASS|49|408 +Brand#53|PROMO BRUSHED NICKEL|14|408 +Brand#53|PROMO BURNISHED STEEL|3|408 +Brand#53|PROMO POLISHED STEEL|45|408 +Brand#53|SMALL ANODIZED TIN|14|408 +Brand#53|SMALL BRUSHED STEEL|23|408 +Brand#53|SMALL POLISHED COPPER|36|408 +Brand#53|SMALL POLISHED STEEL|49|408 +Brand#53|STANDARD ANODIZED STEEL|49|408 +Brand#53|STANDARD BRUSHED NICKEL|14|408 +Brand#53|STANDARD BRUSHED STEEL|14|408 +Brand#53|STANDARD BRUSHED STEEL|36|408 +Brand#53|STANDARD BRUSHED TIN|23|408 +Brand#53|STANDARD BURNISHED BRASS|49|408 +Brand#53|STANDARD BURNISHED TIN|14|408 +Brand#53|STANDARD PLATED NICKEL|9|408 +Brand#53|STANDARD POLISHED COPPER|9|408 +Brand#53|STANDARD POLISHED COPPER|19|408 +Brand#54|ECONOMY BRUSHED BRASS|23|408 +Brand#54|ECONOMY BRUSHED COPPER|3|408 +Brand#54|ECONOMY BRUSHED STEEL|19|408 +Brand#54|ECONOMY BURNISHED COPPER|14|408 +Brand#54|ECONOMY PLATED NICKEL|36|408 +Brand#54|ECONOMY PLATED NICKEL|45|408 +Brand#54|ECONOMY POLISHED NICKEL|14|408 +Brand#54|LARGE ANODIZED NICKEL|3|408 +Brand#54|LARGE BRUSHED BRASS|23|408 +Brand#54|LARGE BURNISHED BRASS|19|408 +Brand#54|LARGE BURNISHED COPPER|36|408 +Brand#54|LARGE PLATED BRASS|14|408 +Brand#54|LARGE PLATED STEEL|3|408 +Brand#54|LARGE PLATED TIN|19|408 +Brand#54|LARGE POLISHED COPPER|23|408 +Brand#54|MEDIUM ANODIZED TIN|9|408 +Brand#54|MEDIUM BURNISHED BRASS|36|408 +Brand#54|MEDIUM BURNISHED COPPER|45|408 +Brand#54|MEDIUM PLATED BRASS|45|408 +Brand#54|MEDIUM PLATED STEEL|19|408 +Brand#54|PROMO BRUSHED NICKEL|36|408 +Brand#54|PROMO BURNISHED STEEL|9|408 +Brand#54|PROMO POLISHED STEEL|14|408 +Brand#54|SMALL ANODIZED STEEL|49|408 +Brand#54|STANDARD ANODIZED STEEL|49|408 +Brand#54|STANDARD BRUSHED STEEL|9|408 +Brand#54|STANDARD BRUSHED TIN|23|408 +Brand#54|STANDARD BURNISHED BRASS|14|408 +Brand#54|STANDARD PLATED COPPER|23|408 +Brand#54|STANDARD POLISHED BRASS|23|408 +Brand#55|ECONOMY PLATED BRASS|14|408 +Brand#55|ECONOMY POLISHED STEEL|3|408 +Brand#55|LARGE ANODIZED NICKEL|23|408 +Brand#55|LARGE BRUSHED BRASS|14|408 +Brand#55|LARGE BRUSHED STEEL|14|408 +Brand#55|LARGE PLATED COPPER|49|408 +Brand#55|LARGE POLISHED COPPER|45|408 +Brand#55|LARGE POLISHED NICKEL|36|408 +Brand#55|LARGE POLISHED STEEL|49|408 +Brand#55|LARGE POLISHED TIN|14|408 +Brand#55|MEDIUM ANODIZED BRASS|45|408 +Brand#55|MEDIUM BRUSHED NICKEL|36|408 +Brand#55|MEDIUM PLATED BRASS|19|408 +Brand#55|MEDIUM PLATED BRASS|36|408 +Brand#55|MEDIUM PLATED COPPER|3|408 +Brand#55|MEDIUM PLATED STEEL|3|408 +Brand#55|PROMO ANODIZED BRASS|14|408 +Brand#55|PROMO ANODIZED NICKEL|19|408 +Brand#55|PROMO ANODIZED STEEL|45|408 +Brand#55|PROMO BRUSHED COPPER|14|408 +Brand#55|PROMO BURNISHED NICKEL|14|408 +Brand#55|PROMO PLATED NICKEL|36|408 +Brand#55|PROMO PLATED STEEL|45|408 +Brand#55|PROMO POLISHED NICKEL|36|408 +Brand#55|PROMO POLISHED NICKEL|49|408 +Brand#55|SMALL ANODIZED TIN|23|408 +Brand#55|SMALL BRUSHED COPPER|23|408 +Brand#55|SMALL BURNISHED COPPER|3|408 +Brand#55|SMALL PLATED COPPER|14|408 +Brand#55|STANDARD ANODIZED NICKEL|14|408 +Brand#55|STANDARD ANODIZED NICKEL|49|408 +Brand#55|STANDARD BRUSHED STEEL|14|408 +Brand#55|STANDARD BRUSHED STEEL|49|408 +Brand#55|STANDARD BURNISHED COPPER|3|408 +Brand#55|STANDARD BURNISHED COPPER|9|408 +Brand#55|STANDARD PLATED BRASS|49|408 +Brand#55|STANDARD PLATED COPPER|14|408 +Brand#55|STANDARD POLISHED STEEL|14|408 +Brand#11|ECONOMY ANODIZED TIN|14|407 +Brand#11|ECONOMY BURNISHED COPPER|36|407 +Brand#11|ECONOMY PLATED TIN|19|407 +Brand#11|MEDIUM ANODIZED TIN|3|407 +Brand#11|MEDIUM BRUSHED NICKEL|9|407 +Brand#11|PROMO ANODIZED TIN|14|407 +Brand#11|SMALL POLISHED NICKEL|14|407 +Brand#11|SMALL POLISHED TIN|49|407 +Brand#11|STANDARD PLATED BRASS|45|407 +Brand#12|ECONOMY POLISHED BRASS|3|407 +Brand#12|LARGE ANODIZED BRASS|14|407 +Brand#12|LARGE POLISHED BRASS|49|407 +Brand#12|PROMO PLATED TIN|23|407 +Brand#12|SMALL BURNISHED TIN|45|407 +Brand#12|SMALL POLISHED STEEL|45|407 +Brand#12|SMALL POLISHED STEEL|49|407 +Brand#12|STANDARD BURNISHED NICKEL|14|407 +Brand#12|STANDARD PLATED NICKEL|36|407 +Brand#12|STANDARD PLATED TIN|36|407 +Brand#13|LARGE ANODIZED BRASS|45|407 +Brand#13|LARGE PLATED STEEL|23|407 +Brand#13|MEDIUM BRUSHED NICKEL|23|407 +Brand#13|MEDIUM BURNISHED NICKEL|36|407 +Brand#13|MEDIUM PLATED STEEL|45|407 +Brand#13|SMALL BURNISHED BRASS|3|407 +Brand#13|STANDARD ANODIZED BRASS|23|407 +Brand#13|STANDARD BURNISHED TIN|14|407 +Brand#13|STANDARD PLATED NICKEL|49|407 +Brand#14|ECONOMY ANODIZED COPPER|23|407 +Brand#14|LARGE ANODIZED COPPER|36|407 +Brand#14|LARGE PLATED COPPER|49|407 +Brand#14|LARGE PLATED STEEL|19|407 +Brand#14|LARGE POLISHED TIN|19|407 +Brand#14|MEDIUM ANODIZED BRASS|3|407 +Brand#14|MEDIUM BRUSHED NICKEL|3|407 +Brand#14|PROMO ANODIZED COPPER|14|407 +Brand#14|PROMO PLATED BRASS|49|407 +Brand#14|PROMO POLISHED TIN|9|407 +Brand#14|SMALL ANODIZED BRASS|9|407 +Brand#14|SMALL BURNISHED BRASS|14|407 +Brand#14|SMALL BURNISHED COPPER|19|407 +Brand#14|SMALL POLISHED STEEL|19|407 +Brand#14|STANDARD ANODIZED NICKEL|19|407 +Brand#14|STANDARD BURNISHED BRASS|9|407 +Brand#15|LARGE PLATED STEEL|49|407 +Brand#15|MEDIUM BURNISHED COPPER|36|407 +Brand#15|PROMO PLATED COPPER|19|407 +Brand#15|SMALL BRUSHED STEEL|49|407 +Brand#15|SMALL BRUSHED TIN|19|407 +Brand#15|SMALL POLISHED BRASS|3|407 +Brand#15|STANDARD ANODIZED TIN|36|407 +Brand#15|STANDARD PLATED TIN|36|407 +Brand#21|ECONOMY ANODIZED TIN|23|407 +Brand#21|ECONOMY PLATED COPPER|19|407 +Brand#21|MEDIUM BRUSHED NICKEL|23|407 +Brand#21|SMALL PLATED COPPER|19|407 +Brand#21|SMALL POLISHED BRASS|19|407 +Brand#21|STANDARD ANODIZED TIN|49|407 +Brand#22|ECONOMY POLISHED TIN|45|407 +Brand#22|LARGE ANODIZED BRASS|14|407 +Brand#22|LARGE BRUSHED COPPER|45|407 +Brand#22|SMALL BRUSHED COPPER|3|407 +Brand#22|STANDARD POLISHED NICKEL|3|407 +Brand#23|ECONOMY PLATED COPPER|45|407 +Brand#23|LARGE PLATED NICKEL|14|407 +Brand#23|LARGE PLATED TIN|19|407 +Brand#23|MEDIUM ANODIZED TIN|23|407 +Brand#23|MEDIUM PLATED STEEL|3|407 +Brand#23|PROMO POLISHED STEEL|45|407 +Brand#23|SMALL ANODIZED BRASS|19|407 +Brand#23|STANDARD BURNISHED NICKEL|45|407 +Brand#23|STANDARD BURNISHED TIN|23|407 +Brand#24|ECONOMY POLISHED NICKEL|23|407 +Brand#24|MEDIUM BRUSHED TIN|14|407 +Brand#24|PROMO BRUSHED COPPER|45|407 +Brand#24|PROMO PLATED STEEL|19|407 +Brand#24|STANDARD PLATED NICKEL|36|407 +Brand#25|ECONOMY ANODIZED COPPER|45|407 +Brand#25|ECONOMY BRUSHED STEEL|36|407 +Brand#25|ECONOMY BURNISHED COPPER|45|407 +Brand#25|ECONOMY PLATED TIN|14|407 +Brand#25|ECONOMY PLATED TIN|49|407 +Brand#25|LARGE BURNISHED STEEL|49|407 +Brand#25|LARGE BURNISHED TIN|3|407 +Brand#25|LARGE POLISHED TIN|3|407 +Brand#25|PROMO ANODIZED COPPER|9|407 +Brand#25|PROMO ANODIZED TIN|3|407 +Brand#25|SMALL ANODIZED STEEL|49|407 +Brand#25|SMALL BRUSHED COPPER|36|407 +Brand#25|SMALL BURNISHED STEEL|9|407 +Brand#25|STANDARD BRUSHED STEEL|23|407 +Brand#31|ECONOMY BURNISHED STEEL|45|407 +Brand#31|ECONOMY POLISHED COPPER|9|407 +Brand#31|LARGE ANODIZED NICKEL|23|407 +Brand#31|LARGE PLATED NICKEL|49|407 +Brand#31|PROMO BURNISHED NICKEL|14|407 +Brand#31|STANDARD POLISHED COPPER|23|407 +Brand#32|LARGE BURNISHED NICKEL|36|407 +Brand#32|PROMO POLISHED STEEL|19|407 +Brand#32|SMALL PLATED COPPER|49|407 +Brand#32|STANDARD POLISHED STEEL|14|407 +Brand#33|ECONOMY POLISHED BRASS|45|407 +Brand#33|LARGE BRUSHED BRASS|36|407 +Brand#33|LARGE BRUSHED NICKEL|3|407 +Brand#33|LARGE BRUSHED STEEL|36|407 +Brand#33|LARGE POLISHED NICKEL|23|407 +Brand#33|MEDIUM ANODIZED COPPER|19|407 +Brand#33|PROMO ANODIZED COPPER|49|407 +Brand#33|SMALL ANODIZED BRASS|9|407 +Brand#33|SMALL BRUSHED COPPER|9|407 +Brand#33|SMALL BURNISHED COPPER|23|407 +Brand#33|STANDARD ANODIZED COPPER|14|407 +Brand#33|STANDARD POLISHED BRASS|23|407 +Brand#34|ECONOMY BRUSHED TIN|9|407 +Brand#34|MEDIUM BURNISHED STEEL|36|407 +Brand#34|MEDIUM PLATED COPPER|14|407 +Brand#34|SMALL ANODIZED COPPER|45|407 +Brand#34|STANDARD BRUSHED COPPER|49|407 +Brand#34|STANDARD BURNISHED BRASS|49|407 +Brand#35|ECONOMY PLATED NICKEL|49|407 +Brand#35|MEDIUM ANODIZED TIN|19|407 +Brand#35|PROMO ANODIZED COPPER|3|407 +Brand#35|PROMO ANODIZED COPPER|14|407 +Brand#35|PROMO BURNISHED TIN|36|407 +Brand#35|SMALL ANODIZED BRASS|36|407 +Brand#35|SMALL BRUSHED NICKEL|49|407 +Brand#35|SMALL PLATED COPPER|49|407 +Brand#35|STANDARD ANODIZED BRASS|23|407 +Brand#41|LARGE BURNISHED NICKEL|14|407 +Brand#41|MEDIUM ANODIZED NICKEL|36|407 +Brand#41|MEDIUM BRUSHED STEEL|3|407 +Brand#41|PROMO ANODIZED STEEL|45|407 +Brand#41|SMALL ANODIZED COPPER|9|407 +Brand#41|SMALL POLISHED NICKEL|45|407 +Brand#41|STANDARD BURNISHED BRASS|14|407 +Brand#41|STANDARD POLISHED NICKEL|45|407 +Brand#42|ECONOMY ANODIZED BRASS|36|407 +Brand#42|ECONOMY ANODIZED TIN|23|407 +Brand#42|LARGE PLATED BRASS|36|407 +Brand#42|MEDIUM ANODIZED STEEL|49|407 +Brand#42|MEDIUM ANODIZED TIN|45|407 +Brand#42|MEDIUM BRUSHED COPPER|49|407 +Brand#42|MEDIUM BRUSHED NICKEL|36|407 +Brand#42|MEDIUM BURNISHED BRASS|36|407 +Brand#42|MEDIUM PLATED BRASS|14|407 +Brand#42|PROMO BRUSHED STEEL|23|407 +Brand#42|PROMO BURNISHED BRASS|36|407 +Brand#42|PROMO BURNISHED TIN|9|407 +Brand#42|SMALL BRUSHED NICKEL|19|407 +Brand#42|SMALL BURNISHED STEEL|36|407 +Brand#42|STANDARD BRUSHED STEEL|23|407 +Brand#42|STANDARD POLISHED BRASS|45|407 +Brand#43|ECONOMY ANODIZED BRASS|9|407 +Brand#43|ECONOMY BURNISHED TIN|14|407 +Brand#43|LARGE BURNISHED STEEL|23|407 +Brand#43|SMALL BURNISHED STEEL|9|407 +Brand#43|SMALL PLATED COPPER|49|407 +Brand#43|STANDARD BURNISHED TIN|9|407 +Brand#44|LARGE ANODIZED TIN|45|407 +Brand#44|MEDIUM ANODIZED STEEL|45|407 +Brand#44|MEDIUM BRUSHED TIN|49|407 +Brand#44|MEDIUM BURNISHED NICKEL|49|407 +Brand#44|MEDIUM PLATED NICKEL|36|407 +Brand#44|MEDIUM PLATED TIN|14|407 +Brand#44|SMALL BRUSHED BRASS|9|407 +Brand#44|SMALL POLISHED BRASS|9|407 +Brand#44|STANDARD ANODIZED NICKEL|14|407 +Brand#44|STANDARD ANODIZED NICKEL|36|407 +Brand#44|STANDARD BRUSHED BRASS|49|407 +Brand#44|STANDARD BRUSHED NICKEL|14|407 +Brand#51|ECONOMY BRUSHED BRASS|45|407 +Brand#51|ECONOMY POLISHED BRASS|23|407 +Brand#51|LARGE ANODIZED BRASS|9|407 +Brand#51|LARGE BRUSHED BRASS|19|407 +Brand#51|LARGE POLISHED COPPER|9|407 +Brand#51|SMALL POLISHED STEEL|19|407 +Brand#51|STANDARD BRUSHED BRASS|3|407 +Brand#51|STANDARD PLATED COPPER|3|407 +Brand#51|STANDARD POLISHED BRASS|23|407 +Brand#52|ECONOMY POLISHED BRASS|19|407 +Brand#52|ECONOMY POLISHED COPPER|19|407 +Brand#52|LARGE PLATED STEEL|9|407 +Brand#52|LARGE POLISHED NICKEL|36|407 +Brand#52|MEDIUM BRUSHED NICKEL|36|407 +Brand#52|MEDIUM PLATED TIN|23|407 +Brand#52|PROMO ANODIZED BRASS|45|407 +Brand#52|PROMO POLISHED STEEL|9|407 +Brand#52|SMALL ANODIZED COPPER|23|407 +Brand#52|SMALL BRUSHED NICKEL|14|407 +Brand#52|SMALL PLATED BRASS|9|407 +Brand#52|STANDARD BRUSHED NICKEL|19|407 +Brand#52|STANDARD BURNISHED TIN|36|407 +Brand#52|STANDARD POLISHED TIN|19|407 +Brand#53|ECONOMY PLATED COPPER|19|407 +Brand#53|LARGE ANODIZED NICKEL|3|407 +Brand#53|LARGE BURNISHED TIN|19|407 +Brand#53|LARGE PLATED COPPER|14|407 +Brand#53|MEDIUM ANODIZED TIN|49|407 +Brand#53|MEDIUM BRUSHED STEEL|19|407 +Brand#53|MEDIUM BURNISHED BRASS|14|407 +Brand#53|PROMO ANODIZED NICKEL|14|407 +Brand#53|PROMO BRUSHED COPPER|36|407 +Brand#53|PROMO PLATED NICKEL|9|407 +Brand#53|SMALL POLISHED TIN|36|407 +Brand#53|STANDARD ANODIZED BRASS|23|407 +Brand#53|STANDARD BURNISHED TIN|23|407 +Brand#54|ECONOMY ANODIZED TIN|23|407 +Brand#54|ECONOMY PLATED TIN|3|407 +Brand#54|LARGE BRUSHED COPPER|9|407 +Brand#54|LARGE BRUSHED NICKEL|19|407 +Brand#54|LARGE PLATED NICKEL|9|407 +Brand#54|LARGE PLATED STEEL|36|407 +Brand#54|SMALL ANODIZED STEEL|19|407 +Brand#54|SMALL BURNISHED COPPER|3|407 +Brand#54|SMALL BURNISHED NICKEL|3|407 +Brand#55|ECONOMY BRUSHED COPPER|19|407 +Brand#55|LARGE ANODIZED COPPER|19|407 +Brand#55|LARGE BRUSHED NICKEL|19|407 +Brand#55|LARGE BURNISHED STEEL|19|407 +Brand#55|MEDIUM ANODIZED STEEL|36|407 +Brand#55|MEDIUM PLATED TIN|9|407 +Brand#55|SMALL ANODIZED TIN|9|407 +Brand#55|STANDARD BURNISHED NICKEL|14|407 +Brand#11|ECONOMY BURNISHED STEEL|49|406 +Brand#12|MEDIUM ANODIZED BRASS|45|406 +Brand#12|MEDIUM BURNISHED TIN|14|406 +Brand#12|PROMO BURNISHED STEEL|49|406 +Brand#12|STANDARD PLATED COPPER|14|406 +Brand#14|LARGE BRUSHED COPPER|19|406 +Brand#14|LARGE PLATED COPPER|45|406 +Brand#24|MEDIUM BURNISHED COPPER|36|406 +Brand#32|SMALL POLISHED STEEL|19|406 +Brand#33|PROMO BURNISHED COPPER|45|406 +Brand#33|SMALL ANODIZED STEEL|23|406 +Brand#34|ECONOMY ANODIZED NICKEL|36|406 +Brand#35|ECONOMY PLATED COPPER|23|406 +Brand#35|SMALL ANODIZED COPPER|14|406 +Brand#51|MEDIUM BRUSHED TIN|9|406 +Brand#52|MEDIUM BURNISHED STEEL|19|406 +Brand#52|PROMO BRUSHED NICKEL|9|406 +Brand#52|STANDARD ANODIZED BRASS|23|406 +Brand#53|ECONOMY BURNISHED COPPER|49|406 +Brand#53|ECONOMY PLATED STEEL|3|406 +Brand#11|PROMO PLATED BRASS|23|405 +Brand#13|SMALL BURNISHED STEEL|14|405 +Brand#21|STANDARD ANODIZED BRASS|3|405 +Brand#23|PROMO PLATED COPPER|36|405 +Brand#25|LARGE BRUSHED COPPER|14|405 +Brand#34|LARGE BURNISHED BRASS|19|405 +Brand#35|STANDARD BRUSHED TIN|49|405 +Brand#11|ECONOMY ANODIZED TIN|23|404 +Brand#11|ECONOMY BRUSHED NICKEL|36|404 +Brand#11|ECONOMY PLATED BRASS|49|404 +Brand#11|ECONOMY PLATED COPPER|14|404 +Brand#11|ECONOMY POLISHED BRASS|3|404 +Brand#11|ECONOMY POLISHED NICKEL|36|404 +Brand#11|ECONOMY POLISHED STEEL|3|404 +Brand#11|ECONOMY POLISHED STEEL|14|404 +Brand#11|LARGE ANODIZED BRASS|3|404 +Brand#11|LARGE ANODIZED BRASS|45|404 +Brand#11|LARGE BURNISHED BRASS|49|404 +Brand#11|LARGE BURNISHED STEEL|23|404 +Brand#11|LARGE PLATED TIN|36|404 +Brand#11|LARGE POLISHED NICKEL|45|404 +Brand#11|MEDIUM ANODIZED NICKEL|23|404 +Brand#11|MEDIUM ANODIZED STEEL|3|404 +Brand#11|MEDIUM BRUSHED COPPER|19|404 +Brand#11|MEDIUM PLATED NICKEL|49|404 +Brand#11|MEDIUM PLATED STEEL|36|404 +Brand#11|SMALL ANODIZED NICKEL|23|404 +Brand#11|SMALL ANODIZED TIN|49|404 +Brand#11|SMALL POLISHED NICKEL|3|404 +Brand#11|STANDARD BRUSHED BRASS|3|404 +Brand#11|STANDARD BRUSHED STEEL|9|404 +Brand#11|STANDARD BRUSHED TIN|36|404 +Brand#11|STANDARD POLISHED TIN|9|404 +Brand#11|STANDARD POLISHED TIN|23|404 +Brand#12|ECONOMY BRUSHED BRASS|36|404 +Brand#12|ECONOMY BURNISHED NICKEL|49|404 +Brand#12|ECONOMY BURNISHED STEEL|19|404 +Brand#12|ECONOMY PLATED TIN|9|404 +Brand#12|ECONOMY POLISHED NICKEL|3|404 +Brand#12|ECONOMY POLISHED STEEL|9|404 +Brand#12|ECONOMY POLISHED STEEL|36|404 +Brand#12|ECONOMY POLISHED TIN|3|404 +Brand#12|LARGE ANODIZED COPPER|3|404 +Brand#12|LARGE BRUSHED BRASS|23|404 +Brand#12|MEDIUM BRUSHED COPPER|14|404 +Brand#12|MEDIUM PLATED NICKEL|23|404 +Brand#12|PROMO ANODIZED STEEL|9|404 +Brand#12|PROMO ANODIZED TIN|9|404 +Brand#12|PROMO BRUSHED NICKEL|49|404 +Brand#12|PROMO PLATED BRASS|23|404 +Brand#12|PROMO PLATED NICKEL|49|404 +Brand#12|PROMO POLISHED BRASS|23|404 +Brand#12|SMALL BRUSHED COPPER|36|404 +Brand#12|SMALL BRUSHED NICKEL|45|404 +Brand#12|SMALL BURNISHED STEEL|19|404 +Brand#12|SMALL PLATED BRASS|19|404 +Brand#12|SMALL PLATED TIN|3|404 +Brand#12|STANDARD ANODIZED BRASS|3|404 +Brand#12|STANDARD ANODIZED COPPER|45|404 +Brand#12|STANDARD BRUSHED NICKEL|45|404 +Brand#12|STANDARD BRUSHED STEEL|45|404 +Brand#12|STANDARD PLATED STEEL|23|404 +Brand#12|STANDARD POLISHED BRASS|3|404 +Brand#12|STANDARD POLISHED COPPER|9|404 +Brand#13|ECONOMY BRUSHED NICKEL|14|404 +Brand#13|ECONOMY BRUSHED TIN|45|404 +Brand#13|ECONOMY BURNISHED BRASS|49|404 +Brand#13|ECONOMY BURNISHED COPPER|14|404 +Brand#13|ECONOMY PLATED TIN|36|404 +Brand#13|ECONOMY POLISHED NICKEL|14|404 +Brand#13|ECONOMY POLISHED STEEL|49|404 +Brand#13|LARGE ANODIZED STEEL|19|404 +Brand#13|LARGE BRUSHED TIN|45|404 +Brand#13|LARGE BURNISHED BRASS|19|404 +Brand#13|LARGE BURNISHED COPPER|3|404 +Brand#13|LARGE PLATED COPPER|45|404 +Brand#13|LARGE POLISHED COPPER|3|404 +Brand#13|LARGE POLISHED TIN|9|404 +Brand#13|MEDIUM ANODIZED NICKEL|45|404 +Brand#13|MEDIUM BRUSHED NICKEL|36|404 +Brand#13|MEDIUM BRUSHED STEEL|19|404 +Brand#13|MEDIUM BURNISHED BRASS|19|404 +Brand#13|PROMO ANODIZED COPPER|45|404 +Brand#13|PROMO BURNISHED COPPER|9|404 +Brand#13|PROMO BURNISHED NICKEL|19|404 +Brand#13|PROMO PLATED NICKEL|36|404 +Brand#13|PROMO PLATED TIN|23|404 +Brand#13|SMALL ANODIZED BRASS|9|404 +Brand#13|SMALL BRUSHED BRASS|19|404 +Brand#13|SMALL BURNISHED COPPER|9|404 +Brand#13|SMALL BURNISHED COPPER|14|404 +Brand#13|SMALL POLISHED COPPER|45|404 +Brand#13|SMALL POLISHED STEEL|19|404 +Brand#13|STANDARD BRUSHED NICKEL|14|404 +Brand#13|STANDARD PLATED TIN|3|404 +Brand#13|STANDARD POLISHED TIN|49|404 +Brand#14|ECONOMY BRUSHED NICKEL|14|404 +Brand#14|ECONOMY BURNISHED BRASS|3|404 +Brand#14|ECONOMY PLATED BRASS|3|404 +Brand#14|ECONOMY PLATED COPPER|36|404 +Brand#14|ECONOMY POLISHED TIN|49|404 +Brand#14|LARGE ANODIZED STEEL|23|404 +Brand#14|LARGE BRUSHED BRASS|14|404 +Brand#14|LARGE BRUSHED STEEL|14|404 +Brand#14|MEDIUM ANODIZED COPPER|3|404 +Brand#14|MEDIUM PLATED COPPER|23|404 +Brand#14|MEDIUM PLATED STEEL|19|404 +Brand#14|PROMO ANODIZED TIN|36|404 +Brand#14|PROMO BRUSHED TIN|3|404 +Brand#14|PROMO BURNISHED NICKEL|3|404 +Brand#14|PROMO BURNISHED STEEL|45|404 +Brand#14|PROMO PLATED TIN|3|404 +Brand#14|PROMO PLATED TIN|19|404 +Brand#14|PROMO POLISHED TIN|45|404 +Brand#14|SMALL ANODIZED COPPER|49|404 +Brand#14|SMALL BURNISHED COPPER|23|404 +Brand#14|SMALL BURNISHED STEEL|14|404 +Brand#14|SMALL PLATED COPPER|3|404 +Brand#14|STANDARD ANODIZED BRASS|14|404 +Brand#14|STANDARD ANODIZED TIN|49|404 +Brand#14|STANDARD BURNISHED STEEL|45|404 +Brand#14|STANDARD PLATED NICKEL|9|404 +Brand#14|STANDARD PLATED STEEL|45|404 +Brand#15|ECONOMY ANODIZED BRASS|36|404 +Brand#15|ECONOMY ANODIZED BRASS|49|404 +Brand#15|ECONOMY BRUSHED COPPER|19|404 +Brand#15|ECONOMY PLATED NICKEL|36|404 +Brand#15|ECONOMY PLATED NICKEL|45|404 +Brand#15|ECONOMY POLISHED BRASS|23|404 +Brand#15|ECONOMY POLISHED COPPER|45|404 +Brand#15|LARGE BRUSHED COPPER|23|404 +Brand#15|LARGE BRUSHED TIN|36|404 +Brand#15|LARGE PLATED COPPER|36|404 +Brand#15|MEDIUM PLATED NICKEL|19|404 +Brand#15|PROMO ANODIZED COPPER|36|404 +Brand#15|PROMO BRUSHED BRASS|45|404 +Brand#15|PROMO BRUSHED TIN|14|404 +Brand#15|PROMO BURNISHED COPPER|45|404 +Brand#15|PROMO BURNISHED NICKEL|23|404 +Brand#15|PROMO PLATED STEEL|23|404 +Brand#15|SMALL PLATED TIN|3|404 +Brand#15|SMALL POLISHED BRASS|9|404 +Brand#15|STANDARD ANODIZED NICKEL|14|404 +Brand#15|STANDARD BRUSHED BRASS|36|404 +Brand#15|STANDARD BURNISHED TIN|49|404 +Brand#15|STANDARD POLISHED NICKEL|9|404 +Brand#21|ECONOMY ANODIZED BRASS|36|404 +Brand#21|ECONOMY BRUSHED TIN|9|404 +Brand#21|ECONOMY BRUSHED TIN|45|404 +Brand#21|ECONOMY BURNISHED COPPER|23|404 +Brand#21|ECONOMY BURNISHED TIN|36|404 +Brand#21|LARGE ANODIZED STEEL|19|404 +Brand#21|LARGE PLATED NICKEL|23|404 +Brand#21|LARGE POLISHED COPPER|3|404 +Brand#21|LARGE POLISHED STEEL|3|404 +Brand#21|LARGE POLISHED STEEL|49|404 +Brand#21|MEDIUM BRUSHED TIN|3|404 +Brand#21|MEDIUM BURNISHED BRASS|23|404 +Brand#21|MEDIUM PLATED TIN|3|404 +Brand#21|PROMO ANODIZED NICKEL|9|404 +Brand#21|PROMO ANODIZED TIN|36|404 +Brand#21|PROMO BRUSHED STEEL|23|404 +Brand#21|PROMO PLATED BRASS|3|404 +Brand#21|PROMO PLATED BRASS|19|404 +Brand#21|PROMO PLATED BRASS|36|404 +Brand#21|PROMO PLATED TIN|9|404 +Brand#21|PROMO POLISHED TIN|45|404 +Brand#21|SMALL ANODIZED BRASS|23|404 +Brand#21|SMALL ANODIZED BRASS|36|404 +Brand#21|SMALL BRUSHED TIN|3|404 +Brand#21|SMALL BURNISHED NICKEL|36|404 +Brand#21|SMALL PLATED COPPER|49|404 +Brand#21|SMALL PLATED STEEL|36|404 +Brand#21|SMALL POLISHED STEEL|9|404 +Brand#21|SMALL POLISHED STEEL|49|404 +Brand#21|STANDARD BRUSHED COPPER|45|404 +Brand#21|STANDARD PLATED STEEL|3|404 +Brand#21|STANDARD PLATED TIN|45|404 +Brand#21|STANDARD POLISHED TIN|49|404 +Brand#22|ECONOMY BRUSHED BRASS|9|404 +Brand#22|ECONOMY BRUSHED STEEL|3|404 +Brand#22|ECONOMY BRUSHED STEEL|36|404 +Brand#22|ECONOMY BURNISHED BRASS|3|404 +Brand#22|ECONOMY POLISHED BRASS|23|404 +Brand#22|ECONOMY POLISHED BRASS|36|404 +Brand#22|ECONOMY POLISHED STEEL|45|404 +Brand#22|LARGE ANODIZED COPPER|23|404 +Brand#22|LARGE ANODIZED STEEL|36|404 +Brand#22|LARGE ANODIZED TIN|3|404 +Brand#22|LARGE PLATED COPPER|23|404 +Brand#22|MEDIUM ANODIZED COPPER|45|404 +Brand#22|MEDIUM BRUSHED BRASS|19|404 +Brand#22|MEDIUM BRUSHED TIN|36|404 +Brand#22|MEDIUM PLATED NICKEL|36|404 +Brand#22|PROMO ANODIZED TIN|9|404 +Brand#22|PROMO ANODIZED TIN|45|404 +Brand#22|PROMO BURNISHED COPPER|36|404 +Brand#22|PROMO PLATED COPPER|9|404 +Brand#22|PROMO PLATED TIN|14|404 +Brand#22|PROMO POLISHED BRASS|9|404 +Brand#22|PROMO POLISHED STEEL|45|404 +Brand#22|PROMO POLISHED TIN|19|404 +Brand#22|SMALL ANODIZED BRASS|49|404 +Brand#22|SMALL ANODIZED TIN|23|404 +Brand#22|SMALL BRUSHED COPPER|19|404 +Brand#22|SMALL BRUSHED STEEL|36|404 +Brand#22|SMALL PLATED STEEL|3|404 +Brand#22|SMALL PLATED STEEL|14|404 +Brand#22|STANDARD ANODIZED BRASS|9|404 +Brand#22|STANDARD BRUSHED COPPER|45|404 +Brand#22|STANDARD POLISHED STEEL|19|404 +Brand#23|ECONOMY ANODIZED NICKEL|14|404 +Brand#23|ECONOMY PLATED BRASS|19|404 +Brand#23|ECONOMY PLATED BRASS|23|404 +Brand#23|ECONOMY PLATED COPPER|9|404 +Brand#23|ECONOMY PLATED NICKEL|14|404 +Brand#23|ECONOMY POLISHED NICKEL|19|404 +Brand#23|ECONOMY POLISHED STEEL|9|404 +Brand#23|LARGE ANODIZED BRASS|9|404 +Brand#23|LARGE BURNISHED TIN|23|404 +Brand#23|MEDIUM BRUSHED NICKEL|36|404 +Brand#23|PROMO BRUSHED BRASS|36|404 +Brand#23|PROMO PLATED BRASS|14|404 +Brand#23|SMALL BRUSHED COPPER|3|404 +Brand#23|SMALL BRUSHED NICKEL|3|404 +Brand#23|SMALL POLISHED STEEL|36|404 +Brand#23|STANDARD BRUSHED COPPER|19|404 +Brand#23|STANDARD PLATED COPPER|3|404 +Brand#23|STANDARD POLISHED COPPER|19|404 +Brand#24|ECONOMY ANODIZED TIN|19|404 +Brand#24|ECONOMY BRUSHED COPPER|3|404 +Brand#24|ECONOMY BRUSHED STEEL|3|404 +Brand#24|ECONOMY BURNISHED STEEL|36|404 +Brand#24|ECONOMY BURNISHED TIN|45|404 +Brand#24|ECONOMY PLATED COPPER|19|404 +Brand#24|ECONOMY PLATED TIN|3|404 +Brand#24|LARGE ANODIZED BRASS|36|404 +Brand#24|LARGE ANODIZED TIN|23|404 +Brand#24|LARGE BRUSHED TIN|3|404 +Brand#24|LARGE BURNISHED BRASS|45|404 +Brand#24|LARGE BURNISHED NICKEL|36|404 +Brand#24|LARGE BURNISHED STEEL|14|404 +Brand#24|LARGE BURNISHED TIN|45|404 +Brand#24|LARGE PLATED TIN|36|404 +Brand#24|MEDIUM ANODIZED NICKEL|45|404 +Brand#24|MEDIUM BRUSHED TIN|9|404 +Brand#24|MEDIUM PLATED BRASS|45|404 +Brand#24|MEDIUM PLATED TIN|36|404 +Brand#24|PROMO ANODIZED NICKEL|3|404 +Brand#24|PROMO BRUSHED COPPER|49|404 +Brand#24|PROMO BRUSHED STEEL|45|404 +Brand#24|PROMO BURNISHED COPPER|14|404 +Brand#24|PROMO BURNISHED STEEL|3|404 +Brand#24|PROMO PLATED NICKEL|45|404 +Brand#24|PROMO POLISHED TIN|36|404 +Brand#24|SMALL ANODIZED STEEL|45|404 +Brand#24|SMALL BRUSHED BRASS|36|404 +Brand#24|SMALL BURNISHED BRASS|19|404 +Brand#24|SMALL POLISHED BRASS|19|404 +Brand#24|SMALL POLISHED COPPER|45|404 +Brand#24|STANDARD ANODIZED TIN|36|404 +Brand#24|STANDARD BRUSHED COPPER|14|404 +Brand#24|STANDARD BRUSHED STEEL|19|404 +Brand#24|STANDARD BURNISHED STEEL|19|404 +Brand#24|STANDARD BURNISHED STEEL|45|404 +Brand#24|STANDARD BURNISHED TIN|9|404 +Brand#24|STANDARD POLISHED BRASS|9|404 +Brand#24|STANDARD POLISHED NICKEL|36|404 +Brand#25|ECONOMY BURNISHED STEEL|23|404 +Brand#25|ECONOMY POLISHED STEEL|9|404 +Brand#25|ECONOMY POLISHED TIN|36|404 +Brand#25|LARGE BRUSHED BRASS|36|404 +Brand#25|LARGE BURNISHED BRASS|9|404 +Brand#25|LARGE BURNISHED COPPER|19|404 +Brand#25|LARGE BURNISHED TIN|36|404 +Brand#25|LARGE PLATED BRASS|14|404 +Brand#25|LARGE POLISHED COPPER|45|404 +Brand#25|MEDIUM ANODIZED TIN|49|404 +Brand#25|MEDIUM BRUSHED BRASS|14|404 +Brand#25|MEDIUM BURNISHED COPPER|14|404 +Brand#25|PROMO BRUSHED BRASS|14|404 +Brand#25|PROMO PLATED COPPER|9|404 +Brand#25|PROMO PLATED TIN|14|404 +Brand#25|PROMO POLISHED TIN|45|404 +Brand#25|SMALL ANODIZED COPPER|19|404 +Brand#25|SMALL BRUSHED BRASS|23|404 +Brand#25|SMALL BRUSHED STEEL|19|404 +Brand#25|SMALL BURNISHED BRASS|9|404 +Brand#25|SMALL BURNISHED TIN|23|404 +Brand#25|SMALL PLATED BRASS|36|404 +Brand#25|SMALL PLATED COPPER|3|404 +Brand#25|SMALL PLATED TIN|49|404 +Brand#25|SMALL POLISHED BRASS|23|404 +Brand#25|STANDARD ANODIZED NICKEL|23|404 +Brand#25|STANDARD BRUSHED COPPER|9|404 +Brand#25|STANDARD PLATED BRASS|19|404 +Brand#31|ECONOMY ANODIZED TIN|3|404 +Brand#31|ECONOMY BRUSHED BRASS|19|404 +Brand#31|ECONOMY BRUSHED COPPER|45|404 +Brand#31|ECONOMY BRUSHED NICKEL|45|404 +Brand#31|ECONOMY BRUSHED STEEL|9|404 +Brand#31|ECONOMY BURNISHED BRASS|3|404 +Brand#31|ECONOMY BURNISHED STEEL|14|404 +Brand#31|ECONOMY POLISHED STEEL|45|404 +Brand#31|LARGE ANODIZED TIN|9|404 +Brand#31|LARGE ANODIZED TIN|36|404 +Brand#31|LARGE BRUSHED BRASS|3|404 +Brand#31|LARGE BRUSHED STEEL|49|404 +Brand#31|LARGE BRUSHED TIN|19|404 +Brand#31|LARGE BURNISHED COPPER|14|404 +Brand#31|LARGE BURNISHED STEEL|19|404 +Brand#31|LARGE BURNISHED TIN|23|404 +Brand#31|LARGE PLATED TIN|49|404 +Brand#31|MEDIUM BRUSHED NICKEL|19|404 +Brand#31|MEDIUM BRUSHED NICKEL|49|404 +Brand#31|MEDIUM BRUSHED STEEL|14|404 +Brand#31|MEDIUM BRUSHED STEEL|19|404 +Brand#31|MEDIUM PLATED BRASS|9|404 +Brand#31|MEDIUM PLATED STEEL|45|404 +Brand#31|PROMO ANODIZED COPPER|45|404 +Brand#31|PROMO BRUSHED NICKEL|49|404 +Brand#31|SMALL ANODIZED COPPER|9|404 +Brand#31|SMALL BURNISHED COPPER|9|404 +Brand#31|SMALL PLATED BRASS|9|404 +Brand#31|SMALL PLATED NICKEL|19|404 +Brand#31|SMALL PLATED STEEL|45|404 +Brand#31|SMALL PLATED TIN|36|404 +Brand#31|STANDARD ANODIZED NICKEL|14|404 +Brand#31|STANDARD ANODIZED TIN|45|404 +Brand#31|STANDARD PLATED NICKEL|14|404 +Brand#32|ECONOMY BRUSHED BRASS|36|404 +Brand#32|ECONOMY BRUSHED COPPER|36|404 +Brand#32|ECONOMY BRUSHED COPPER|49|404 +Brand#32|ECONOMY BRUSHED NICKEL|36|404 +Brand#32|ECONOMY BURNISHED TIN|23|404 +Brand#32|LARGE ANODIZED BRASS|9|404 +Brand#32|LARGE BURNISHED BRASS|19|404 +Brand#32|LARGE BURNISHED COPPER|36|404 +Brand#32|LARGE PLATED TIN|36|404 +Brand#32|MEDIUM BRUSHED COPPER|9|404 +Brand#32|MEDIUM BRUSHED COPPER|45|404 +Brand#32|MEDIUM BRUSHED COPPER|49|404 +Brand#32|MEDIUM BRUSHED TIN|36|404 +Brand#32|MEDIUM BURNISHED NICKEL|49|404 +Brand#32|PROMO ANODIZED BRASS|3|404 +Brand#32|PROMO PLATED COPPER|23|404 +Brand#32|PROMO PLATED COPPER|36|404 +Brand#32|SMALL ANODIZED NICKEL|19|404 +Brand#32|SMALL POLISHED TIN|45|404 +Brand#32|STANDARD BRUSHED COPPER|23|404 +Brand#32|STANDARD PLATED STEEL|23|404 +Brand#33|ECONOMY ANODIZED COPPER|19|404 +Brand#33|ECONOMY ANODIZED TIN|9|404 +Brand#33|ECONOMY PLATED BRASS|3|404 +Brand#33|ECONOMY PLATED TIN|23|404 +Brand#33|ECONOMY POLISHED NICKEL|36|404 +Brand#33|LARGE ANODIZED COPPER|49|404 +Brand#33|LARGE BURNISHED BRASS|36|404 +Brand#33|LARGE BURNISHED BRASS|49|404 +Brand#33|LARGE BURNISHED COPPER|23|404 +Brand#33|MEDIUM BRUSHED TIN|49|404 +Brand#33|MEDIUM BURNISHED COPPER|49|404 +Brand#33|MEDIUM BURNISHED TIN|14|404 +Brand#33|PROMO BRUSHED BRASS|3|404 +Brand#33|PROMO POLISHED BRASS|9|404 +Brand#33|SMALL BRUSHED BRASS|14|404 +Brand#33|SMALL BRUSHED NICKEL|36|404 +Brand#33|SMALL BURNISHED STEEL|14|404 +Brand#33|SMALL PLATED COPPER|45|404 +Brand#33|SMALL PLATED NICKEL|9|404 +Brand#33|SMALL POLISHED NICKEL|14|404 +Brand#33|STANDARD ANODIZED NICKEL|23|404 +Brand#34|ECONOMY ANODIZED COPPER|3|404 +Brand#34|ECONOMY BURNISHED BRASS|14|404 +Brand#34|ECONOMY BURNISHED STEEL|36|404 +Brand#34|ECONOMY BURNISHED STEEL|45|404 +Brand#34|ECONOMY PLATED COPPER|19|404 +Brand#34|LARGE ANODIZED NICKEL|9|404 +Brand#34|LARGE ANODIZED STEEL|14|404 +Brand#34|LARGE POLISHED STEEL|23|404 +Brand#34|MEDIUM ANODIZED TIN|3|404 +Brand#34|MEDIUM BRUSHED BRASS|36|404 +Brand#34|MEDIUM PLATED NICKEL|9|404 +Brand#34|PROMO ANODIZED NICKEL|19|404 +Brand#34|PROMO BRUSHED COPPER|3|404 +Brand#34|PROMO BRUSHED NICKEL|23|404 +Brand#34|PROMO BURNISHED BRASS|23|404 +Brand#34|PROMO POLISHED COPPER|3|404 +Brand#34|SMALL PLATED BRASS|45|404 +Brand#34|SMALL POLISHED NICKEL|49|404 +Brand#34|SMALL POLISHED TIN|3|404 +Brand#34|STANDARD ANODIZED NICKEL|3|404 +Brand#34|STANDARD BRUSHED NICKEL|19|404 +Brand#34|STANDARD BRUSHED STEEL|49|404 +Brand#34|STANDARD PLATED BRASS|3|404 +Brand#34|STANDARD POLISHED STEEL|36|404 +Brand#35|ECONOMY ANODIZED NICKEL|49|404 +Brand#35|ECONOMY BRUSHED BRASS|14|404 +Brand#35|ECONOMY BURNISHED BRASS|3|404 +Brand#35|ECONOMY BURNISHED BRASS|23|404 +Brand#35|ECONOMY BURNISHED STEEL|9|404 +Brand#35|ECONOMY BURNISHED STEEL|49|404 +Brand#35|ECONOMY POLISHED BRASS|49|404 +Brand#35|ECONOMY POLISHED NICKEL|19|404 +Brand#35|ECONOMY POLISHED STEEL|49|404 +Brand#35|LARGE ANODIZED COPPER|36|404 +Brand#35|LARGE ANODIZED NICKEL|14|404 +Brand#35|LARGE PLATED NICKEL|19|404 +Brand#35|MEDIUM BRUSHED TIN|14|404 +Brand#35|MEDIUM BRUSHED TIN|45|404 +Brand#35|MEDIUM BRUSHED TIN|49|404 +Brand#35|MEDIUM BURNISHED STEEL|36|404 +Brand#35|MEDIUM PLATED COPPER|14|404 +Brand#35|MEDIUM PLATED TIN|36|404 +Brand#35|PROMO BRUSHED BRASS|36|404 +Brand#35|PROMO BRUSHED TIN|36|404 +Brand#35|PROMO BURNISHED BRASS|23|404 +Brand#35|PROMO PLATED NICKEL|14|404 +Brand#35|PROMO POLISHED STEEL|14|404 +Brand#35|SMALL BRUSHED BRASS|36|404 +Brand#35|SMALL BRUSHED TIN|9|404 +Brand#35|SMALL BURNISHED COPPER|3|404 +Brand#35|SMALL PLATED STEEL|45|404 +Brand#35|STANDARD ANODIZED BRASS|14|404 +Brand#35|STANDARD BRUSHED NICKEL|49|404 +Brand#35|STANDARD BRUSHED STEEL|3|404 +Brand#35|STANDARD BRUSHED STEEL|14|404 +Brand#35|STANDARD BRUSHED STEEL|36|404 +Brand#35|STANDARD BURNISHED BRASS|23|404 +Brand#41|ECONOMY BRUSHED NICKEL|9|404 +Brand#41|ECONOMY BRUSHED NICKEL|14|404 +Brand#41|ECONOMY BRUSHED STEEL|9|404 +Brand#41|ECONOMY BURNISHED BRASS|3|404 +Brand#41|ECONOMY BURNISHED COPPER|49|404 +Brand#41|ECONOMY BURNISHED NICKEL|9|404 +Brand#41|ECONOMY PLATED BRASS|9|404 +Brand#41|ECONOMY POLISHED NICKEL|36|404 +Brand#41|LARGE POLISHED NICKEL|36|404 +Brand#41|MEDIUM ANODIZED NICKEL|14|404 +Brand#41|MEDIUM ANODIZED STEEL|19|404 +Brand#41|MEDIUM ANODIZED STEEL|49|404 +Brand#41|MEDIUM BURNISHED BRASS|9|404 +Brand#41|MEDIUM PLATED BRASS|14|404 +Brand#41|MEDIUM PLATED STEEL|9|404 +Brand#41|PROMO ANODIZED NICKEL|9|404 +Brand#41|PROMO ANODIZED STEEL|19|404 +Brand#41|PROMO ANODIZED TIN|36|404 +Brand#41|PROMO BRUSHED BRASS|23|404 +Brand#41|PROMO BURNISHED NICKEL|23|404 +Brand#41|PROMO POLISHED TIN|45|404 +Brand#41|SMALL BRUSHED COPPER|45|404 +Brand#41|STANDARD POLISHED BRASS|36|404 +Brand#42|ECONOMY ANODIZED NICKEL|19|404 +Brand#42|ECONOMY ANODIZED NICKEL|45|404 +Brand#42|ECONOMY POLISHED STEEL|45|404 +Brand#42|LARGE ANODIZED COPPER|19|404 +Brand#42|LARGE ANODIZED NICKEL|3|404 +Brand#42|LARGE BRUSHED NICKEL|14|404 +Brand#42|LARGE BRUSHED STEEL|49|404 +Brand#42|LARGE BURNISHED COPPER|36|404 +Brand#42|MEDIUM ANODIZED STEEL|9|404 +Brand#42|MEDIUM BRUSHED BRASS|14|404 +Brand#42|MEDIUM BRUSHED COPPER|3|404 +Brand#42|MEDIUM BRUSHED COPPER|23|404 +Brand#42|MEDIUM BURNISHED COPPER|36|404 +Brand#42|PROMO ANODIZED COPPER|45|404 +Brand#42|PROMO ANODIZED TIN|9|404 +Brand#42|PROMO BRUSHED BRASS|36|404 +Brand#42|PROMO BRUSHED TIN|9|404 +Brand#42|PROMO BURNISHED COPPER|45|404 +Brand#42|PROMO BURNISHED COPPER|49|404 +Brand#42|PROMO POLISHED TIN|49|404 +Brand#42|SMALL ANODIZED BRASS|19|404 +Brand#42|SMALL ANODIZED NICKEL|45|404 +Brand#42|SMALL BRUSHED NICKEL|36|404 +Brand#42|SMALL PLATED COPPER|14|404 +Brand#42|SMALL PLATED NICKEL|3|404 +Brand#42|SMALL PLATED TIN|23|404 +Brand#42|SMALL POLISHED COPPER|3|404 +Brand#42|SMALL POLISHED STEEL|49|404 +Brand#42|STANDARD ANODIZED BRASS|19|404 +Brand#42|STANDARD BRUSHED COPPER|36|404 +Brand#42|STANDARD PLATED TIN|36|404 +Brand#43|ECONOMY ANODIZED TIN|9|404 +Brand#43|ECONOMY BRUSHED NICKEL|9|404 +Brand#43|ECONOMY BRUSHED NICKEL|19|404 +Brand#43|ECONOMY BRUSHED NICKEL|49|404 +Brand#43|ECONOMY PLATED BRASS|45|404 +Brand#43|ECONOMY PLATED STEEL|23|404 +Brand#43|ECONOMY PLATED TIN|45|404 +Brand#43|ECONOMY POLISHED BRASS|45|404 +Brand#43|ECONOMY POLISHED COPPER|14|404 +Brand#43|LARGE ANODIZED COPPER|23|404 +Brand#43|LARGE BRUSHED STEEL|19|404 +Brand#43|LARGE BURNISHED STEEL|45|404 +Brand#43|LARGE PLATED STEEL|23|404 +Brand#43|LARGE POLISHED NICKEL|9|404 +Brand#43|MEDIUM ANODIZED BRASS|36|404 +Brand#43|MEDIUM ANODIZED NICKEL|3|404 +Brand#43|MEDIUM ANODIZED NICKEL|9|404 +Brand#43|MEDIUM ANODIZED NICKEL|14|404 +Brand#43|MEDIUM BRUSHED COPPER|36|404 +Brand#43|MEDIUM BURNISHED BRASS|14|404 +Brand#43|MEDIUM PLATED COPPER|45|404 +Brand#43|PROMO ANODIZED STEEL|3|404 +Brand#43|PROMO BURNISHED STEEL|9|404 +Brand#43|PROMO PLATED STEEL|36|404 +Brand#43|PROMO PLATED STEEL|49|404 +Brand#43|PROMO PLATED TIN|49|404 +Brand#43|PROMO POLISHED COPPER|23|404 +Brand#43|PROMO POLISHED COPPER|36|404 +Brand#43|SMALL BRUSHED TIN|3|404 +Brand#43|SMALL POLISHED COPPER|23|404 +Brand#43|SMALL POLISHED STEEL|3|404 +Brand#43|STANDARD ANODIZED STEEL|49|404 +Brand#43|STANDARD BURNISHED COPPER|19|404 +Brand#43|STANDARD BURNISHED COPPER|23|404 +Brand#43|STANDARD PLATED TIN|14|404 +Brand#43|STANDARD POLISHED NICKEL|3|404 +Brand#44|ECONOMY ANODIZED STEEL|23|404 +Brand#44|ECONOMY BRUSHED STEEL|45|404 +Brand#44|ECONOMY BURNISHED NICKEL|49|404 +Brand#44|ECONOMY PLATED NICKEL|45|404 +Brand#44|LARGE PLATED COPPER|3|404 +Brand#44|LARGE PLATED STEEL|36|404 +Brand#44|LARGE POLISHED BRASS|49|404 +Brand#44|LARGE POLISHED COPPER|19|404 +Brand#44|MEDIUM ANODIZED BRASS|3|404 +Brand#44|MEDIUM ANODIZED NICKEL|19|404 +Brand#44|MEDIUM ANODIZED STEEL|3|404 +Brand#44|MEDIUM BRUSHED BRASS|19|404 +Brand#44|MEDIUM BRUSHED BRASS|23|404 +Brand#44|MEDIUM BRUSHED TIN|36|404 +Brand#44|MEDIUM BURNISHED NICKEL|3|404 +Brand#44|PROMO ANODIZED COPPER|3|404 +Brand#44|PROMO BRUSHED COPPER|3|404 +Brand#44|PROMO PLATED NICKEL|49|404 +Brand#44|PROMO PLATED STEEL|19|404 +Brand#44|SMALL BURNISHED BRASS|36|404 +Brand#44|SMALL PLATED STEEL|9|404 +Brand#44|SMALL POLISHED COPPER|23|404 +Brand#44|STANDARD BURNISHED NICKEL|19|404 +Brand#44|STANDARD BURNISHED TIN|19|404 +Brand#44|STANDARD PLATED COPPER|3|404 +Brand#44|STANDARD POLISHED COPPER|3|404 +Brand#44|STANDARD POLISHED STEEL|3|404 +Brand#51|ECONOMY ANODIZED BRASS|9|404 +Brand#51|ECONOMY ANODIZED BRASS|19|404 +Brand#51|ECONOMY BURNISHED COPPER|9|404 +Brand#51|ECONOMY BURNISHED TIN|19|404 +Brand#51|ECONOMY PLATED COPPER|49|404 +Brand#51|LARGE BURNISHED STEEL|3|404 +Brand#51|LARGE BURNISHED STEEL|23|404 +Brand#51|LARGE PLATED BRASS|9|404 +Brand#51|LARGE PLATED COPPER|19|404 +Brand#51|MEDIUM ANODIZED COPPER|19|404 +Brand#51|MEDIUM BRUSHED COPPER|45|404 +Brand#51|MEDIUM BURNISHED COPPER|36|404 +Brand#51|PROMO BURNISHED COPPER|49|404 +Brand#51|PROMO BURNISHED STEEL|19|404 +Brand#51|PROMO PLATED BRASS|14|404 +Brand#51|PROMO POLISHED STEEL|23|404 +Brand#51|SMALL ANODIZED BRASS|19|404 +Brand#51|SMALL ANODIZED BRASS|36|404 +Brand#51|SMALL BRUSHED STEEL|9|404 +Brand#51|SMALL PLATED BRASS|9|404 +Brand#51|SMALL POLISHED NICKEL|45|404 +Brand#51|SMALL POLISHED STEEL|9|404 +Brand#51|STANDARD ANODIZED TIN|14|404 +Brand#51|STANDARD BRUSHED NICKEL|14|404 +Brand#51|STANDARD PLATED BRASS|19|404 +Brand#51|STANDARD PLATED BRASS|36|404 +Brand#51|STANDARD PLATED TIN|45|404 +Brand#51|STANDARD POLISHED BRASS|14|404 +Brand#51|STANDARD POLISHED STEEL|19|404 +Brand#52|ECONOMY BRUSHED BRASS|23|404 +Brand#52|ECONOMY POLISHED TIN|49|404 +Brand#52|LARGE BRUSHED TIN|49|404 +Brand#52|LARGE POLISHED COPPER|36|404 +Brand#52|LARGE POLISHED COPPER|45|404 +Brand#52|MEDIUM ANODIZED BRASS|23|404 +Brand#52|MEDIUM ANODIZED STEEL|45|404 +Brand#52|MEDIUM BRUSHED BRASS|3|404 +Brand#52|MEDIUM BRUSHED BRASS|23|404 +Brand#52|MEDIUM BRUSHED COPPER|3|404 +Brand#52|MEDIUM BRUSHED COPPER|9|404 +Brand#52|MEDIUM BRUSHED TIN|23|404 +Brand#52|MEDIUM PLATED COPPER|14|404 +Brand#52|PROMO ANODIZED BRASS|49|404 +Brand#52|PROMO ANODIZED NICKEL|45|404 +Brand#52|PROMO BURNISHED COPPER|36|404 +Brand#52|PROMO PLATED TIN|19|404 +Brand#52|SMALL ANODIZED STEEL|3|404 +Brand#52|SMALL ANODIZED STEEL|45|404 +Brand#52|SMALL BRUSHED BRASS|9|404 +Brand#52|SMALL BRUSHED TIN|3|404 +Brand#52|SMALL BURNISHED BRASS|3|404 +Brand#52|SMALL BURNISHED TIN|23|404 +Brand#52|STANDARD PLATED STEEL|23|404 +Brand#52|STANDARD POLISHED TIN|23|404 +Brand#53|ECONOMY BRUSHED BRASS|23|404 +Brand#53|ECONOMY PLATED BRASS|36|404 +Brand#53|ECONOMY PLATED TIN|19|404 +Brand#53|ECONOMY POLISHED BRASS|36|404 +Brand#53|ECONOMY POLISHED BRASS|45|404 +Brand#53|LARGE BRUSHED TIN|9|404 +Brand#53|LARGE BRUSHED TIN|36|404 +Brand#53|LARGE BURNISHED STEEL|14|404 +Brand#53|LARGE BURNISHED STEEL|19|404 +Brand#53|MEDIUM ANODIZED NICKEL|45|404 +Brand#53|PROMO ANODIZED TIN|49|404 +Brand#53|PROMO BRUSHED COPPER|3|404 +Brand#53|PROMO BRUSHED STEEL|45|404 +Brand#53|PROMO BRUSHED STEEL|49|404 +Brand#53|PROMO BRUSHED TIN|36|404 +Brand#53|PROMO BURNISHED NICKEL|23|404 +Brand#53|PROMO BURNISHED STEEL|14|404 +Brand#53|PROMO BURNISHED TIN|23|404 +Brand#53|PROMO PLATED NICKEL|14|404 +Brand#53|PROMO POLISHED BRASS|9|404 +Brand#53|SMALL ANODIZED COPPER|14|404 +Brand#53|SMALL ANODIZED NICKEL|3|404 +Brand#53|SMALL PLATED NICKEL|3|404 +Brand#53|SMALL PLATED TIN|14|404 +Brand#53|SMALL POLISHED BRASS|3|404 +Brand#53|SMALL POLISHED NICKEL|49|404 +Brand#53|SMALL POLISHED STEEL|19|404 +Brand#53|STANDARD PLATED STEEL|3|404 +Brand#53|STANDARD PLATED STEEL|23|404 +Brand#53|STANDARD PLATED TIN|49|404 +Brand#53|STANDARD POLISHED STEEL|14|404 +Brand#54|ECONOMY ANODIZED BRASS|23|404 +Brand#54|ECONOMY ANODIZED STEEL|45|404 +Brand#54|ECONOMY POLISHED NICKEL|23|404 +Brand#54|LARGE BRUSHED BRASS|19|404 +Brand#54|LARGE BURNISHED NICKEL|3|404 +Brand#54|LARGE POLISHED COPPER|19|404 +Brand#54|MEDIUM BURNISHED COPPER|23|404 +Brand#54|MEDIUM PLATED COPPER|36|404 +Brand#54|PROMO ANODIZED NICKEL|19|404 +Brand#54|PROMO PLATED COPPER|45|404 +Brand#54|PROMO POLISHED NICKEL|23|404 +Brand#54|SMALL BRUSHED STEEL|23|404 +Brand#54|SMALL BRUSHED STEEL|49|404 +Brand#54|SMALL PLATED NICKEL|49|404 +Brand#54|SMALL POLISHED STEEL|19|404 +Brand#54|STANDARD ANODIZED BRASS|49|404 +Brand#54|STANDARD BRUSHED BRASS|49|404 +Brand#54|STANDARD BRUSHED STEEL|49|404 +Brand#54|STANDARD BURNISHED COPPER|23|404 +Brand#54|STANDARD BURNISHED STEEL|3|404 +Brand#54|STANDARD POLISHED STEEL|19|404 +Brand#55|ECONOMY BRUSHED NICKEL|14|404 +Brand#55|ECONOMY BURNISHED TIN|19|404 +Brand#55|ECONOMY BURNISHED TIN|23|404 +Brand#55|ECONOMY PLATED COPPER|14|404 +Brand#55|LARGE ANODIZED COPPER|9|404 +Brand#55|LARGE ANODIZED TIN|36|404 +Brand#55|LARGE BURNISHED STEEL|36|404 +Brand#55|LARGE BURNISHED TIN|45|404 +Brand#55|LARGE PLATED COPPER|36|404 +Brand#55|LARGE PLATED NICKEL|45|404 +Brand#55|MEDIUM BRUSHED TIN|49|404 +Brand#55|MEDIUM BURNISHED BRASS|19|404 +Brand#55|MEDIUM BURNISHED NICKEL|23|404 +Brand#55|PROMO BRUSHED STEEL|36|404 +Brand#55|PROMO POLISHED BRASS|14|404 +Brand#55|PROMO POLISHED NICKEL|14|404 +Brand#55|SMALL ANODIZED NICKEL|23|404 +Brand#55|SMALL PLATED NICKEL|9|404 +Brand#55|STANDARD BRUSHED BRASS|36|404 +Brand#55|STANDARD BRUSHED STEEL|36|404 +Brand#55|STANDARD BURNISHED BRASS|49|404 +Brand#55|STANDARD BURNISHED NICKEL|9|404 +Brand#55|STANDARD BURNISHED NICKEL|19|404 +Brand#55|STANDARD BURNISHED NICKEL|49|404 +Brand#55|STANDARD PLATED COPPER|45|404 +Brand#55|STANDARD PLATED COPPER|49|404 +Brand#55|STANDARD PLATED TIN|36|404 +Brand#11|ECONOMY BRUSHED STEEL|45|403 +Brand#11|LARGE BRUSHED BRASS|45|403 +Brand#11|LARGE PLATED NICKEL|49|403 +Brand#11|MEDIUM ANODIZED BRASS|14|403 +Brand#11|MEDIUM ANODIZED STEEL|36|403 +Brand#11|PROMO BRUSHED COPPER|14|403 +Brand#11|PROMO PLATED BRASS|3|403 +Brand#11|PROMO PLATED TIN|9|403 +Brand#11|PROMO POLISHED NICKEL|36|403 +Brand#11|STANDARD BRUSHED NICKEL|3|403 +Brand#11|STANDARD PLATED BRASS|19|403 +Brand#11|STANDARD PLATED STEEL|19|403 +Brand#12|LARGE PLATED COPPER|14|403 +Brand#12|MEDIUM ANODIZED BRASS|9|403 +Brand#12|MEDIUM BRUSHED STEEL|3|403 +Brand#12|MEDIUM PLATED BRASS|9|403 +Brand#12|PROMO ANODIZED NICKEL|19|403 +Brand#12|STANDARD ANODIZED TIN|45|403 +Brand#12|STANDARD BURNISHED BRASS|19|403 +Brand#12|STANDARD POLISHED TIN|19|403 +Brand#13|ECONOMY ANODIZED COPPER|14|403 +Brand#13|ECONOMY POLISHED TIN|23|403 +Brand#13|LARGE BURNISHED NICKEL|45|403 +Brand#13|SMALL PLATED COPPER|3|403 +Brand#14|ECONOMY ANODIZED STEEL|23|403 +Brand#14|ECONOMY BRUSHED COPPER|45|403 +Brand#14|LARGE BRUSHED TIN|23|403 +Brand#14|LARGE BURNISHED TIN|23|403 +Brand#14|MEDIUM ANODIZED COPPER|45|403 +Brand#14|MEDIUM ANODIZED STEEL|9|403 +Brand#14|MEDIUM BURNISHED STEEL|23|403 +Brand#14|MEDIUM PLATED TIN|49|403 +Brand#14|PROMO BURNISHED BRASS|14|403 +Brand#14|SMALL ANODIZED COPPER|23|403 +Brand#14|SMALL BURNISHED COPPER|49|403 +Brand#14|SMALL PLATED TIN|3|403 +Brand#14|STANDARD BRUSHED BRASS|9|403 +Brand#14|STANDARD BURNISHED COPPER|23|403 +Brand#15|ECONOMY BURNISHED STEEL|14|403 +Brand#15|ECONOMY POLISHED TIN|14|403 +Brand#15|LARGE PLATED BRASS|14|403 +Brand#15|MEDIUM BURNISHED BRASS|3|403 +Brand#15|PROMO ANODIZED STEEL|45|403 +Brand#15|PROMO POLISHED BRASS|36|403 +Brand#15|SMALL ANODIZED COPPER|14|403 +Brand#15|SMALL BRUSHED BRASS|49|403 +Brand#15|STANDARD POLISHED BRASS|3|403 +Brand#15|STANDARD POLISHED STEEL|3|403 +Brand#21|MEDIUM BRUSHED NICKEL|36|403 +Brand#21|MEDIUM BRUSHED STEEL|9|403 +Brand#21|SMALL ANODIZED STEEL|9|403 +Brand#21|SMALL BRUSHED BRASS|23|403 +Brand#21|STANDARD BRUSHED NICKEL|9|403 +Brand#21|STANDARD BRUSHED TIN|49|403 +Brand#22|ECONOMY ANODIZED TIN|19|403 +Brand#22|ECONOMY BURNISHED STEEL|19|403 +Brand#22|ECONOMY PLATED STEEL|9|403 +Brand#22|ECONOMY PLATED TIN|45|403 +Brand#22|LARGE ANODIZED BRASS|23|403 +Brand#22|PROMO BRUSHED NICKEL|19|403 +Brand#22|SMALL BURNISHED STEEL|9|403 +Brand#23|LARGE POLISHED STEEL|36|403 +Brand#23|SMALL BURNISHED NICKEL|23|403 +Brand#23|SMALL POLISHED BRASS|23|403 +Brand#24|ECONOMY BRUSHED NICKEL|3|403 +Brand#24|LARGE ANODIZED TIN|9|403 +Brand#24|MEDIUM ANODIZED TIN|19|403 +Brand#24|PROMO ANODIZED BRASS|49|403 +Brand#24|PROMO BURNISHED NICKEL|9|403 +Brand#24|SMALL PLATED COPPER|14|403 +Brand#24|STANDARD BRUSHED COPPER|45|403 +Brand#24|STANDARD PLATED STEEL|23|403 +Brand#24|STANDARD PLATED STEEL|45|403 +Brand#25|ECONOMY POLISHED COPPER|45|403 +Brand#25|LARGE ANODIZED NICKEL|45|403 +Brand#25|MEDIUM BRUSHED BRASS|45|403 +Brand#25|MEDIUM BRUSHED NICKEL|3|403 +Brand#25|MEDIUM PLATED TIN|9|403 +Brand#25|PROMO POLISHED BRASS|49|403 +Brand#25|PROMO POLISHED STEEL|3|403 +Brand#25|STANDARD BRUSHED BRASS|9|403 +Brand#31|ECONOMY ANODIZED NICKEL|49|403 +Brand#31|PROMO BRUSHED TIN|3|403 +Brand#31|PROMO BURNISHED BRASS|14|403 +Brand#31|PROMO PLATED BRASS|45|403 +Brand#32|ECONOMY ANODIZED COPPER|9|403 +Brand#32|ECONOMY ANODIZED STEEL|23|403 +Brand#32|LARGE BRUSHED COPPER|9|403 +Brand#32|MEDIUM ANODIZED TIN|14|403 +Brand#32|MEDIUM PLATED TIN|45|403 +Brand#32|PROMO PLATED COPPER|45|403 +Brand#32|SMALL POLISHED NICKEL|23|403 +Brand#32|STANDARD ANODIZED NICKEL|19|403 +Brand#33|ECONOMY ANODIZED NICKEL|19|403 +Brand#33|ECONOMY ANODIZED NICKEL|45|403 +Brand#33|ECONOMY PLATED NICKEL|23|403 +Brand#33|ECONOMY PLATED NICKEL|36|403 +Brand#33|LARGE PLATED BRASS|36|403 +Brand#33|MEDIUM ANODIZED NICKEL|19|403 +Brand#33|MEDIUM BRUSHED BRASS|49|403 +Brand#33|MEDIUM BURNISHED BRASS|45|403 +Brand#33|PROMO BRUSHED STEEL|45|403 +Brand#33|PROMO PLATED NICKEL|9|403 +Brand#33|PROMO POLISHED NICKEL|14|403 +Brand#33|SMALL BURNISHED BRASS|19|403 +Brand#33|STANDARD ANODIZED BRASS|9|403 +Brand#34|ECONOMY POLISHED COPPER|19|403 +Brand#34|LARGE ANODIZED COPPER|19|403 +Brand#34|LARGE POLISHED STEEL|45|403 +Brand#34|MEDIUM BRUSHED STEEL|9|403 +Brand#34|PROMO ANODIZED NICKEL|9|403 +Brand#34|PROMO BRUSHED STEEL|49|403 +Brand#34|SMALL BRUSHED BRASS|45|403 +Brand#34|SMALL BRUSHED COPPER|45|403 +Brand#34|SMALL BURNISHED BRASS|9|403 +Brand#34|STANDARD BRUSHED NICKEL|36|403 +Brand#34|STANDARD POLISHED NICKEL|14|403 +Brand#35|ECONOMY PLATED STEEL|36|403 +Brand#35|LARGE PLATED COPPER|36|403 +Brand#35|LARGE POLISHED STEEL|14|403 +Brand#35|MEDIUM BURNISHED COPPER|19|403 +Brand#35|MEDIUM BURNISHED COPPER|45|403 +Brand#35|MEDIUM PLATED TIN|49|403 +Brand#35|PROMO PLATED NICKEL|3|403 +Brand#35|PROMO PLATED STEEL|49|403 +Brand#35|PROMO PLATED TIN|3|403 +Brand#35|STANDARD PLATED TIN|36|403 +Brand#41|ECONOMY POLISHED BRASS|45|403 +Brand#41|LARGE ANODIZED BRASS|19|403 +Brand#41|LARGE PLATED BRASS|3|403 +Brand#41|LARGE PLATED STEEL|36|403 +Brand#41|MEDIUM ANODIZED BRASS|3|403 +Brand#41|MEDIUM ANODIZED STEEL|3|403 +Brand#41|PROMO POLISHED BRASS|3|403 +Brand#41|SMALL ANODIZED TIN|23|403 +Brand#41|SMALL BURNISHED TIN|23|403 +Brand#41|STANDARD ANODIZED BRASS|3|403 +Brand#42|ECONOMY BURNISHED BRASS|36|403 +Brand#42|MEDIUM BRUSHED TIN|45|403 +Brand#42|PROMO POLISHED TIN|9|403 +Brand#42|STANDARD BURNISHED TIN|45|403 +Brand#43|ECONOMY ANODIZED BRASS|49|403 +Brand#43|ECONOMY BRUSHED BRASS|49|403 +Brand#43|PROMO BURNISHED STEEL|14|403 +Brand#43|SMALL BURNISHED STEEL|49|403 +Brand#43|SMALL PLATED TIN|36|403 +Brand#43|STANDARD ANODIZED TIN|23|403 +Brand#43|STANDARD BRUSHED STEEL|23|403 +Brand#44|LARGE BRUSHED BRASS|9|403 +Brand#44|LARGE BURNISHED TIN|36|403 +Brand#44|LARGE POLISHED COPPER|23|403 +Brand#44|MEDIUM BURNISHED BRASS|14|403 +Brand#44|PROMO ANODIZED STEEL|49|403 +Brand#44|PROMO BURNISHED NICKEL|9|403 +Brand#44|PROMO POLISHED COPPER|23|403 +Brand#44|SMALL PLATED STEEL|45|403 +Brand#44|STANDARD PLATED COPPER|36|403 +Brand#44|STANDARD POLISHED BRASS|23|403 +Brand#51|LARGE POLISHED NICKEL|14|403 +Brand#51|LARGE POLISHED NICKEL|23|403 +Brand#51|MEDIUM ANODIZED COPPER|23|403 +Brand#51|MEDIUM BRUSHED COPPER|3|403 +Brand#51|PROMO ANODIZED NICKEL|49|403 +Brand#51|PROMO ANODIZED TIN|45|403 +Brand#51|PROMO BRUSHED NICKEL|19|403 +Brand#51|PROMO BRUSHED STEEL|45|403 +Brand#51|PROMO BURNISHED TIN|23|403 +Brand#51|SMALL ANODIZED TIN|45|403 +Brand#51|SMALL BURNISHED STEEL|9|403 +Brand#51|SMALL BURNISHED STEEL|23|403 +Brand#51|STANDARD ANODIZED STEEL|9|403 +Brand#51|STANDARD BRUSHED STEEL|45|403 +Brand#52|ECONOMY BRUSHED STEEL|9|403 +Brand#52|ECONOMY BURNISHED BRASS|19|403 +Brand#52|LARGE BRUSHED BRASS|36|403 +Brand#52|LARGE POLISHED COPPER|9|403 +Brand#52|MEDIUM ANODIZED NICKEL|45|403 +Brand#52|MEDIUM PLATED BRASS|45|403 +Brand#52|MEDIUM PLATED NICKEL|19|403 +Brand#52|MEDIUM PLATED NICKEL|45|403 +Brand#52|MEDIUM PLATED TIN|19|403 +Brand#52|PROMO POLISHED STEEL|19|403 +Brand#53|LARGE ANODIZED COPPER|14|403 +Brand#53|MEDIUM BURNISHED STEEL|9|403 +Brand#53|PROMO ANODIZED COPPER|23|403 +Brand#53|PROMO PLATED COPPER|36|403 +Brand#53|PROMO POLISHED COPPER|49|403 +Brand#53|SMALL PLATED NICKEL|45|403 +Brand#53|STANDARD BRUSHED STEEL|23|403 +Brand#53|STANDARD PLATED NICKEL|23|403 +Brand#54|ECONOMY BRUSHED TIN|36|403 +Brand#54|LARGE ANODIZED BRASS|45|403 +Brand#54|LARGE BURNISHED NICKEL|45|403 +Brand#54|MEDIUM ANODIZED STEEL|14|403 +Brand#54|MEDIUM BRUSHED NICKEL|23|403 +Brand#54|PROMO ANODIZED STEEL|14|403 +Brand#54|SMALL POLISHED TIN|49|403 +Brand#55|ECONOMY ANODIZED BRASS|36|403 +Brand#55|LARGE POLISHED BRASS|14|403 +Brand#55|LARGE POLISHED NICKEL|19|403 +Brand#55|MEDIUM PLATED COPPER|45|403 +Brand#55|SMALL BURNISHED TIN|3|403 +Brand#55|STANDARD POLISHED STEEL|49|403 +Brand#11|PROMO POLISHED COPPER|45|402 +Brand#12|ECONOMY PLATED NICKEL|19|402 +Brand#12|LARGE BRUSHED BRASS|36|402 +Brand#13|MEDIUM BURNISHED NICKEL|9|402 +Brand#14|PROMO BURNISHED STEEL|14|402 +Brand#22|ECONOMY BRUSHED STEEL|14|402 +Brand#23|LARGE POLISHED STEEL|45|402 +Brand#25|ECONOMY POLISHED COPPER|14|402 +Brand#25|LARGE ANODIZED STEEL|14|402 +Brand#25|LARGE POLISHED TIN|45|402 +Brand#31|MEDIUM PLATED BRASS|23|402 +Brand#32|LARGE PLATED COPPER|45|402 +Brand#32|STANDARD PLATED BRASS|14|402 +Brand#33|LARGE POLISHED NICKEL|49|402 +Brand#33|MEDIUM ANODIZED TIN|14|402 +Brand#35|LARGE POLISHED STEEL|19|402 +Brand#35|STANDARD POLISHED TIN|14|402 +Brand#42|STANDARD ANODIZED TIN|3|402 +Brand#43|SMALL POLISHED NICKEL|49|402 +Brand#43|STANDARD BURNISHED BRASS|49|402 +Brand#44|SMALL BRUSHED BRASS|36|402 +Brand#51|LARGE BRUSHED BRASS|23|402 +Brand#52|LARGE BRUSHED COPPER|9|402 +Brand#52|SMALL ANODIZED NICKEL|9|402 +Brand#53|LARGE ANODIZED BRASS|49|402 +Brand#54|ECONOMY BURNISHED BRASS|3|402 +Brand#54|LARGE PLATED TIN|45|402 +Brand#54|PROMO POLISHED COPPER|23|402 +Brand#55|LARGE POLISHED COPPER|14|402 +Brand#55|SMALL BURNISHED NICKEL|14|402 +Brand#55|STANDARD ANODIZED STEEL|14|402 +Brand#55|STANDARD PLATED COPPER|9|402 +Brand#22|LARGE POLISHED BRASS|36|401 +Brand#51|STANDARD POLISHED TIN|23|401 +Brand#53|LARGE BURNISHED COPPER|9|401 +Brand#54|STANDARD BURNISHED STEEL|23|401 +Brand#11|ECONOMY BRUSHED BRASS|14|400 +Brand#11|ECONOMY BURNISHED BRASS|14|400 +Brand#11|ECONOMY BURNISHED TIN|49|400 +Brand#11|LARGE ANODIZED NICKEL|19|400 +Brand#11|LARGE ANODIZED NICKEL|49|400 +Brand#11|LARGE BURNISHED NICKEL|19|400 +Brand#11|LARGE PLATED STEEL|23|400 +Brand#11|LARGE POLISHED COPPER|49|400 +Brand#11|MEDIUM ANODIZED BRASS|36|400 +Brand#11|MEDIUM ANODIZED NICKEL|14|400 +Brand#11|MEDIUM BRUSHED NICKEL|36|400 +Brand#11|MEDIUM BRUSHED NICKEL|49|400 +Brand#11|MEDIUM PLATED BRASS|14|400 +Brand#11|PROMO BRUSHED BRASS|49|400 +Brand#11|PROMO BRUSHED NICKEL|3|400 +Brand#11|PROMO BRUSHED STEEL|19|400 +Brand#11|PROMO BRUSHED TIN|9|400 +Brand#11|PROMO BURNISHED BRASS|45|400 +Brand#11|PROMO PLATED BRASS|45|400 +Brand#11|SMALL ANODIZED COPPER|14|400 +Brand#11|SMALL BRUSHED COPPER|3|400 +Brand#11|SMALL BURNISHED BRASS|3|400 +Brand#11|SMALL BURNISHED BRASS|14|400 +Brand#11|SMALL PLATED NICKEL|19|400 +Brand#11|SMALL PLATED STEEL|14|400 +Brand#11|SMALL POLISHED TIN|14|400 +Brand#11|STANDARD ANODIZED BRASS|19|400 +Brand#11|STANDARD ANODIZED NICKEL|9|400 +Brand#11|STANDARD ANODIZED STEEL|9|400 +Brand#11|STANDARD BRUSHED COPPER|23|400 +Brand#11|STANDARD BURNISHED TIN|9|400 +Brand#12|ECONOMY ANODIZED BRASS|23|400 +Brand#12|ECONOMY ANODIZED BRASS|36|400 +Brand#12|ECONOMY ANODIZED BRASS|49|400 +Brand#12|ECONOMY BRUSHED BRASS|19|400 +Brand#12|ECONOMY BURNISHED COPPER|19|400 +Brand#12|ECONOMY POLISHED STEEL|3|400 +Brand#12|LARGE ANODIZED BRASS|45|400 +Brand#12|LARGE ANODIZED COPPER|49|400 +Brand#12|LARGE BURNISHED COPPER|3|400 +Brand#12|LARGE BURNISHED COPPER|19|400 +Brand#12|LARGE POLISHED COPPER|23|400 +Brand#12|MEDIUM BRUSHED BRASS|3|400 +Brand#12|MEDIUM BURNISHED COPPER|9|400 +Brand#12|MEDIUM BURNISHED NICKEL|14|400 +Brand#12|MEDIUM PLATED BRASS|19|400 +Brand#12|PROMO ANODIZED STEEL|19|400 +Brand#12|PROMO ANODIZED TIN|36|400 +Brand#12|PROMO BRUSHED STEEL|49|400 +Brand#12|PROMO BURNISHED NICKEL|14|400 +Brand#12|PROMO PLATED TIN|14|400 +Brand#12|PROMO POLISHED COPPER|19|400 +Brand#12|PROMO POLISHED NICKEL|3|400 +Brand#12|PROMO POLISHED TIN|45|400 +Brand#12|SMALL ANODIZED STEEL|3|400 +Brand#12|SMALL ANODIZED TIN|36|400 +Brand#12|SMALL BRUSHED BRASS|9|400 +Brand#12|SMALL PLATED TIN|14|400 +Brand#12|STANDARD ANODIZED NICKEL|14|400 +Brand#12|STANDARD ANODIZED TIN|14|400 +Brand#12|STANDARD BRUSHED BRASS|36|400 +Brand#12|STANDARD PLATED TIN|9|400 +Brand#12|STANDARD POLISHED NICKEL|9|400 +Brand#13|ECONOMY BRUSHED COPPER|23|400 +Brand#13|ECONOMY BURNISHED COPPER|3|400 +Brand#13|ECONOMY BURNISHED TIN|23|400 +Brand#13|ECONOMY PLATED NICKEL|45|400 +Brand#13|ECONOMY POLISHED COPPER|9|400 +Brand#13|LARGE BRUSHED NICKEL|14|400 +Brand#13|LARGE BURNISHED COPPER|14|400 +Brand#13|LARGE BURNISHED TIN|23|400 +Brand#13|LARGE PLATED COPPER|9|400 +Brand#13|LARGE PLATED STEEL|45|400 +Brand#13|MEDIUM ANODIZED BRASS|14|400 +Brand#13|MEDIUM ANODIZED NICKEL|23|400 +Brand#13|MEDIUM BURNISHED STEEL|23|400 +Brand#13|MEDIUM PLATED COPPER|14|400 +Brand#13|PROMO ANODIZED BRASS|9|400 +Brand#13|PROMO ANODIZED BRASS|23|400 +Brand#13|PROMO ANODIZED TIN|36|400 +Brand#13|PROMO BRUSHED NICKEL|3|400 +Brand#13|PROMO BRUSHED STEEL|3|400 +Brand#13|PROMO BRUSHED STEEL|23|400 +Brand#13|PROMO BURNISHED COPPER|36|400 +Brand#13|PROMO PLATED NICKEL|23|400 +Brand#13|PROMO POLISHED BRASS|49|400 +Brand#13|SMALL ANODIZED COPPER|45|400 +Brand#13|SMALL BRUSHED BRASS|45|400 +Brand#13|SMALL PLATED BRASS|14|400 +Brand#13|SMALL PLATED NICKEL|45|400 +Brand#13|SMALL POLISHED TIN|23|400 +Brand#13|SMALL POLISHED TIN|49|400 +Brand#13|STANDARD ANODIZED BRASS|3|400 +Brand#13|STANDARD BRUSHED BRASS|9|400 +Brand#13|STANDARD PLATED BRASS|45|400 +Brand#13|STANDARD PLATED STEEL|3|400 +Brand#14|ECONOMY BRUSHED STEEL|23|400 +Brand#14|ECONOMY BURNISHED TIN|9|400 +Brand#14|ECONOMY BURNISHED TIN|45|400 +Brand#14|ECONOMY PLATED BRASS|36|400 +Brand#14|ECONOMY PLATED COPPER|45|400 +Brand#14|ECONOMY POLISHED STEEL|45|400 +Brand#14|ECONOMY POLISHED TIN|45|400 +Brand#14|LARGE PLATED BRASS|14|400 +Brand#14|LARGE POLISHED STEEL|49|400 +Brand#14|MEDIUM BRUSHED BRASS|14|400 +Brand#14|MEDIUM BURNISHED BRASS|49|400 +Brand#14|PROMO ANODIZED COPPER|3|400 +Brand#14|PROMO BRUSHED COPPER|14|400 +Brand#14|PROMO BURNISHED TIN|19|400 +Brand#14|PROMO PLATED NICKEL|23|400 +Brand#14|PROMO POLISHED COPPER|3|400 +Brand#14|SMALL ANODIZED STEEL|45|400 +Brand#14|SMALL PLATED STEEL|19|400 +Brand#14|SMALL POLISHED STEEL|36|400 +Brand#14|STANDARD ANODIZED STEEL|45|400 +Brand#14|STANDARD BRUSHED COPPER|9|400 +Brand#14|STANDARD BRUSHED STEEL|19|400 +Brand#14|STANDARD PLATED BRASS|45|400 +Brand#14|STANDARD POLISHED BRASS|9|400 +Brand#14|STANDARD POLISHED STEEL|23|400 +Brand#15|ECONOMY ANODIZED BRASS|23|400 +Brand#15|ECONOMY ANODIZED TIN|14|400 +Brand#15|ECONOMY ANODIZED TIN|23|400 +Brand#15|ECONOMY BRUSHED BRASS|14|400 +Brand#15|ECONOMY BURNISHED NICKEL|23|400 +Brand#15|ECONOMY PLATED BRASS|19|400 +Brand#15|LARGE ANODIZED COPPER|14|400 +Brand#15|LARGE ANODIZED NICKEL|14|400 +Brand#15|LARGE BRUSHED COPPER|45|400 +Brand#15|LARGE BURNISHED TIN|3|400 +Brand#15|LARGE POLISHED COPPER|36|400 +Brand#15|LARGE POLISHED TIN|9|400 +Brand#15|MEDIUM ANODIZED BRASS|19|400 +Brand#15|MEDIUM ANODIZED BRASS|49|400 +Brand#15|MEDIUM ANODIZED COPPER|9|400 +Brand#15|PROMO ANODIZED TIN|14|400 +Brand#15|PROMO BRUSHED TIN|36|400 +Brand#15|PROMO BURNISHED STEEL|3|400 +Brand#15|PROMO PLATED STEEL|49|400 +Brand#15|SMALL BRUSHED COPPER|14|400 +Brand#15|SMALL PLATED COPPER|14|400 +Brand#15|SMALL PLATED TIN|49|400 +Brand#15|SMALL POLISHED BRASS|23|400 +Brand#15|SMALL POLISHED COPPER|45|400 +Brand#15|SMALL POLISHED STEEL|49|400 +Brand#15|STANDARD BRUSHED STEEL|36|400 +Brand#15|STANDARD BRUSHED TIN|3|400 +Brand#15|STANDARD BURNISHED BRASS|36|400 +Brand#15|STANDARD PLATED BRASS|49|400 +Brand#15|STANDARD POLISHED TIN|9|400 +Brand#21|ECONOMY BRUSHED TIN|3|400 +Brand#21|ECONOMY BRUSHED TIN|36|400 +Brand#21|ECONOMY BURNISHED STEEL|45|400 +Brand#21|ECONOMY PLATED BRASS|9|400 +Brand#21|ECONOMY POLISHED STEEL|14|400 +Brand#21|ECONOMY POLISHED STEEL|23|400 +Brand#21|LARGE ANODIZED COPPER|19|400 +Brand#21|LARGE ANODIZED COPPER|36|400 +Brand#21|LARGE ANODIZED NICKEL|36|400 +Brand#21|LARGE BRUSHED STEEL|49|400 +Brand#21|LARGE BURNISHED COPPER|45|400 +Brand#21|LARGE BURNISHED STEEL|14|400 +Brand#21|LARGE BURNISHED STEEL|36|400 +Brand#21|LARGE PLATED BRASS|49|400 +Brand#21|LARGE POLISHED COPPER|45|400 +Brand#21|LARGE POLISHED NICKEL|49|400 +Brand#21|MEDIUM ANODIZED STEEL|9|400 +Brand#21|MEDIUM ANODIZED TIN|9|400 +Brand#21|MEDIUM BRUSHED NICKEL|45|400 +Brand#21|MEDIUM BRUSHED TIN|45|400 +Brand#21|MEDIUM PLATED COPPER|36|400 +Brand#21|PROMO ANODIZED TIN|19|400 +Brand#21|PROMO BURNISHED NICKEL|9|400 +Brand#21|PROMO BURNISHED STEEL|14|400 +Brand#21|PROMO PLATED BRASS|45|400 +Brand#21|PROMO POLISHED NICKEL|9|400 +Brand#21|PROMO POLISHED NICKEL|23|400 +Brand#21|SMALL ANODIZED NICKEL|9|400 +Brand#21|SMALL BRUSHED NICKEL|36|400 +Brand#21|SMALL POLISHED TIN|45|400 +Brand#21|STANDARD POLISHED NICKEL|36|400 +Brand#22|ECONOMY ANODIZED COPPER|9|400 +Brand#22|ECONOMY ANODIZED COPPER|36|400 +Brand#22|ECONOMY BRUSHED NICKEL|49|400 +Brand#22|ECONOMY BRUSHED STEEL|23|400 +Brand#22|ECONOMY BURNISHED STEEL|9|400 +Brand#22|LARGE ANODIZED BRASS|19|400 +Brand#22|LARGE BURNISHED STEEL|36|400 +Brand#22|LARGE POLISHED BRASS|3|400 +Brand#22|MEDIUM ANODIZED COPPER|3|400 +Brand#22|MEDIUM BURNISHED BRASS|36|400 +Brand#22|MEDIUM BURNISHED COPPER|19|400 +Brand#22|PROMO BRUSHED COPPER|3|400 +Brand#22|PROMO BURNISHED STEEL|45|400 +Brand#22|PROMO BURNISHED TIN|49|400 +Brand#22|SMALL ANODIZED BRASS|23|400 +Brand#22|SMALL ANODIZED BRASS|45|400 +Brand#22|SMALL BURNISHED STEEL|14|400 +Brand#22|SMALL POLISHED BRASS|3|400 +Brand#22|STANDARD ANODIZED COPPER|36|400 +Brand#22|STANDARD BRUSHED BRASS|3|400 +Brand#22|STANDARD BRUSHED BRASS|23|400 +Brand#22|STANDARD BRUSHED TIN|23|400 +Brand#22|STANDARD BRUSHED TIN|36|400 +Brand#22|STANDARD BURNISHED TIN|3|400 +Brand#22|STANDARD PLATED BRASS|36|400 +Brand#22|STANDARD PLATED NICKEL|3|400 +Brand#22|STANDARD PLATED STEEL|49|400 +Brand#22|STANDARD POLISHED BRASS|45|400 +Brand#22|STANDARD POLISHED TIN|45|400 +Brand#23|ECONOMY ANODIZED BRASS|14|400 +Brand#23|ECONOMY ANODIZED TIN|19|400 +Brand#23|ECONOMY BURNISHED COPPER|49|400 +Brand#23|ECONOMY POLISHED BRASS|49|400 +Brand#23|ECONOMY POLISHED COPPER|9|400 +Brand#23|LARGE ANODIZED STEEL|14|400 +Brand#23|LARGE ANODIZED TIN|49|400 +Brand#23|LARGE BRUSHED BRASS|14|400 +Brand#23|LARGE BRUSHED NICKEL|23|400 +Brand#23|LARGE BURNISHED STEEL|3|400 +Brand#23|LARGE PLATED COPPER|19|400 +Brand#23|LARGE PLATED TIN|45|400 +Brand#23|LARGE POLISHED BRASS|3|400 +Brand#23|LARGE POLISHED BRASS|9|400 +Brand#23|LARGE POLISHED STEEL|9|400 +Brand#23|MEDIUM ANODIZED STEEL|14|400 +Brand#23|MEDIUM ANODIZED TIN|36|400 +Brand#23|MEDIUM BRUSHED STEEL|14|400 +Brand#23|PROMO BRUSHED COPPER|45|400 +Brand#23|PROMO BRUSHED STEEL|9|400 +Brand#23|PROMO BURNISHED COPPER|36|400 +Brand#23|PROMO BURNISHED NICKEL|49|400 +Brand#23|SMALL ANODIZED COPPER|14|400 +Brand#23|SMALL BURNISHED BRASS|49|400 +Brand#23|SMALL BURNISHED NICKEL|49|400 +Brand#23|SMALL POLISHED BRASS|45|400 +Brand#23|STANDARD BRUSHED TIN|49|400 +Brand#23|STANDARD BURNISHED STEEL|9|400 +Brand#23|STANDARD POLISHED TIN|49|400 +Brand#24|ECONOMY ANODIZED BRASS|3|400 +Brand#24|ECONOMY BURNISHED COPPER|49|400 +Brand#24|ECONOMY PLATED NICKEL|3|400 +Brand#24|LARGE ANODIZED TIN|3|400 +Brand#24|LARGE BURNISHED BRASS|23|400 +Brand#24|LARGE BURNISHED COPPER|14|400 +Brand#24|LARGE BURNISHED STEEL|3|400 +Brand#24|LARGE POLISHED STEEL|9|400 +Brand#24|MEDIUM ANODIZED COPPER|23|400 +Brand#24|MEDIUM BURNISHED BRASS|14|400 +Brand#24|MEDIUM BURNISHED COPPER|45|400 +Brand#24|MEDIUM BURNISHED TIN|36|400 +Brand#24|MEDIUM PLATED COPPER|36|400 +Brand#24|MEDIUM PLATED COPPER|49|400 +Brand#24|MEDIUM PLATED NICKEL|49|400 +Brand#24|PROMO ANODIZED TIN|14|400 +Brand#24|PROMO BRUSHED BRASS|49|400 +Brand#24|PROMO BRUSHED STEEL|19|400 +Brand#24|PROMO BURNISHED STEEL|9|400 +Brand#24|SMALL ANODIZED BRASS|19|400 +Brand#24|SMALL ANODIZED STEEL|49|400 +Brand#24|SMALL ANODIZED TIN|3|400 +Brand#24|SMALL BRUSHED BRASS|23|400 +Brand#24|SMALL BURNISHED STEEL|19|400 +Brand#24|SMALL PLATED COPPER|36|400 +Brand#24|SMALL PLATED NICKEL|3|400 +Brand#24|SMALL PLATED STEEL|19|400 +Brand#24|SMALL PLATED TIN|36|400 +Brand#24|SMALL POLISHED BRASS|9|400 +Brand#24|SMALL POLISHED TIN|3|400 +Brand#24|STANDARD ANODIZED COPPER|45|400 +Brand#24|STANDARD BURNISHED BRASS|19|400 +Brand#24|STANDARD PLATED NICKEL|14|400 +Brand#25|ECONOMY ANODIZED STEEL|3|400 +Brand#25|ECONOMY BRUSHED NICKEL|23|400 +Brand#25|ECONOMY BRUSHED STEEL|9|400 +Brand#25|ECONOMY PLATED COPPER|23|400 +Brand#25|LARGE ANODIZED COPPER|45|400 +Brand#25|LARGE ANODIZED TIN|19|400 +Brand#25|LARGE BRUSHED TIN|36|400 +Brand#25|MEDIUM ANODIZED BRASS|23|400 +Brand#25|MEDIUM BRUSHED STEEL|45|400 +Brand#25|MEDIUM BURNISHED COPPER|49|400 +Brand#25|MEDIUM PLATED BRASS|23|400 +Brand#25|PROMO BURNISHED BRASS|9|400 +Brand#25|PROMO BURNISHED STEEL|14|400 +Brand#25|PROMO POLISHED TIN|49|400 +Brand#25|SMALL BRUSHED BRASS|9|400 +Brand#25|SMALL POLISHED NICKEL|14|400 +Brand#25|STANDARD ANODIZED STEEL|9|400 +Brand#25|STANDARD BRUSHED STEEL|3|400 +Brand#25|STANDARD BURNISHED TIN|19|400 +Brand#25|STANDARD PLATED NICKEL|23|400 +Brand#31|ECONOMY BRUSHED NICKEL|19|400 +Brand#31|ECONOMY BRUSHED STEEL|49|400 +Brand#31|ECONOMY BURNISHED BRASS|45|400 +Brand#31|ECONOMY PLATED BRASS|23|400 +Brand#31|ECONOMY POLISHED BRASS|19|400 +Brand#31|LARGE ANODIZED TIN|14|400 +Brand#31|LARGE BRUSHED BRASS|36|400 +Brand#31|LARGE PLATED COPPER|45|400 +Brand#31|LARGE POLISHED STEEL|45|400 +Brand#31|MEDIUM ANODIZED BRASS|9|400 +Brand#31|MEDIUM ANODIZED NICKEL|49|400 +Brand#31|MEDIUM BRUSHED BRASS|45|400 +Brand#31|MEDIUM BURNISHED NICKEL|9|400 +Brand#31|MEDIUM PLATED COPPER|19|400 +Brand#31|PROMO ANODIZED BRASS|36|400 +Brand#31|PROMO ANODIZED TIN|49|400 +Brand#31|PROMO BRUSHED TIN|36|400 +Brand#31|PROMO PLATED TIN|36|400 +Brand#31|PROMO POLISHED BRASS|45|400 +Brand#31|PROMO POLISHED TIN|45|400 +Brand#31|SMALL ANODIZED BRASS|36|400 +Brand#31|SMALL ANODIZED STEEL|19|400 +Brand#31|SMALL ANODIZED TIN|19|400 +Brand#31|SMALL ANODIZED TIN|23|400 +Brand#31|SMALL BRUSHED BRASS|23|400 +Brand#31|SMALL PLATED STEEL|14|400 +Brand#31|SMALL POLISHED STEEL|19|400 +Brand#31|STANDARD ANODIZED NICKEL|9|400 +Brand#31|STANDARD ANODIZED STEEL|14|400 +Brand#31|STANDARD ANODIZED STEEL|36|400 +Brand#31|STANDARD BURNISHED BRASS|14|400 +Brand#31|STANDARD BURNISHED BRASS|49|400 +Brand#31|STANDARD BURNISHED NICKEL|23|400 +Brand#31|STANDARD POLISHED BRASS|3|400 +Brand#32|ECONOMY ANODIZED NICKEL|23|400 +Brand#32|ECONOMY BURNISHED STEEL|14|400 +Brand#32|ECONOMY PLATED COPPER|9|400 +Brand#32|LARGE ANODIZED NICKEL|14|400 +Brand#32|LARGE ANODIZED TIN|23|400 +Brand#32|LARGE BRUSHED BRASS|9|400 +Brand#32|LARGE BRUSHED BRASS|14|400 +Brand#32|LARGE BURNISHED NICKEL|45|400 +Brand#32|MEDIUM PLATED STEEL|36|400 +Brand#32|PROMO ANODIZED COPPER|3|400 +Brand#32|PROMO ANODIZED COPPER|9|400 +Brand#32|PROMO ANODIZED STEEL|3|400 +Brand#32|PROMO BURNISHED TIN|3|400 +Brand#32|PROMO BURNISHED TIN|23|400 +Brand#32|PROMO PLATED BRASS|45|400 +Brand#32|PROMO PLATED BRASS|49|400 +Brand#32|PROMO PLATED NICKEL|45|400 +Brand#32|SMALL PLATED STEEL|9|400 +Brand#32|STANDARD ANODIZED COPPER|9|400 +Brand#32|STANDARD BRUSHED COPPER|19|400 +Brand#32|STANDARD BRUSHED NICKEL|23|400 +Brand#32|STANDARD PLATED NICKEL|45|400 +Brand#33|ECONOMY ANODIZED BRASS|23|400 +Brand#33|ECONOMY ANODIZED BRASS|45|400 +Brand#33|ECONOMY BURNISHED NICKEL|23|400 +Brand#33|ECONOMY BURNISHED TIN|23|400 +Brand#33|ECONOMY POLISHED COPPER|36|400 +Brand#33|ECONOMY POLISHED NICKEL|14|400 +Brand#33|ECONOMY POLISHED STEEL|14|400 +Brand#33|LARGE ANODIZED BRASS|36|400 +Brand#33|LARGE ANODIZED NICKEL|36|400 +Brand#33|LARGE BURNISHED NICKEL|14|400 +Brand#33|LARGE BURNISHED TIN|36|400 +Brand#33|LARGE PLATED NICKEL|45|400 +Brand#33|LARGE POLISHED TIN|36|400 +Brand#33|MEDIUM BRUSHED NICKEL|45|400 +Brand#33|MEDIUM BURNISHED TIN|45|400 +Brand#33|PROMO BRUSHED TIN|23|400 +Brand#33|PROMO POLISHED TIN|9|400 +Brand#33|PROMO POLISHED TIN|14|400 +Brand#33|SMALL BRUSHED TIN|49|400 +Brand#33|SMALL BURNISHED STEEL|3|400 +Brand#33|SMALL PLATED BRASS|45|400 +Brand#33|SMALL PLATED TIN|36|400 +Brand#33|SMALL POLISHED COPPER|23|400 +Brand#33|SMALL POLISHED TIN|14|400 +Brand#33|STANDARD ANODIZED COPPER|45|400 +Brand#33|STANDARD BRUSHED COPPER|36|400 +Brand#33|STANDARD BRUSHED NICKEL|9|400 +Brand#33|STANDARD BRUSHED STEEL|36|400 +Brand#33|STANDARD POLISHED STEEL|36|400 +Brand#33|STANDARD POLISHED STEEL|49|400 +Brand#34|ECONOMY BURNISHED BRASS|9|400 +Brand#34|ECONOMY BURNISHED NICKEL|45|400 +Brand#34|ECONOMY POLISHED BRASS|9|400 +Brand#34|ECONOMY POLISHED BRASS|45|400 +Brand#34|ECONOMY POLISHED STEEL|36|400 +Brand#34|LARGE ANODIZED NICKEL|3|400 +Brand#34|LARGE BURNISHED BRASS|23|400 +Brand#34|LARGE BURNISHED COPPER|9|400 +Brand#34|LARGE POLISHED STEEL|9|400 +Brand#34|MEDIUM BRUSHED TIN|36|400 +Brand#34|MEDIUM BURNISHED BRASS|49|400 +Brand#34|MEDIUM PLATED STEEL|3|400 +Brand#34|PROMO ANODIZED BRASS|36|400 +Brand#34|PROMO BURNISHED COPPER|49|400 +Brand#34|PROMO POLISHED COPPER|36|400 +Brand#34|SMALL ANODIZED COPPER|14|400 +Brand#34|SMALL ANODIZED NICKEL|9|400 +Brand#34|STANDARD BRUSHED NICKEL|14|400 +Brand#34|STANDARD BURNISHED COPPER|36|400 +Brand#34|STANDARD PLATED NICKEL|45|400 +Brand#34|STANDARD PLATED STEEL|3|400 +Brand#34|STANDARD PLATED TIN|14|400 +Brand#34|STANDARD POLISHED TIN|19|400 +Brand#34|STANDARD POLISHED TIN|36|400 +Brand#35|ECONOMY ANODIZED BRASS|23|400 +Brand#35|ECONOMY ANODIZED COPPER|19|400 +Brand#35|ECONOMY POLISHED TIN|14|400 +Brand#35|ECONOMY POLISHED TIN|45|400 +Brand#35|LARGE BURNISHED BRASS|19|400 +Brand#35|LARGE PLATED BRASS|49|400 +Brand#35|LARGE POLISHED BRASS|3|400 +Brand#35|LARGE POLISHED BRASS|49|400 +Brand#35|LARGE POLISHED COPPER|3|400 +Brand#35|MEDIUM PLATED BRASS|45|400 +Brand#35|PROMO BURNISHED NICKEL|3|400 +Brand#35|PROMO PLATED STEEL|14|400 +Brand#35|PROMO POLISHED COPPER|36|400 +Brand#35|PROMO POLISHED STEEL|45|400 +Brand#35|SMALL ANODIZED COPPER|9|400 +Brand#35|SMALL BRUSHED COPPER|45|400 +Brand#35|STANDARD ANODIZED BRASS|19|400 +Brand#35|STANDARD ANODIZED NICKEL|45|400 +Brand#35|STANDARD ANODIZED STEEL|45|400 +Brand#35|STANDARD ANODIZED TIN|3|400 +Brand#35|STANDARD BURNISHED COPPER|14|400 +Brand#35|STANDARD BURNISHED NICKEL|49|400 +Brand#35|STANDARD BURNISHED TIN|49|400 +Brand#35|STANDARD PLATED TIN|14|400 +Brand#35|STANDARD POLISHED BRASS|3|400 +Brand#35|STANDARD POLISHED TIN|45|400 +Brand#41|ECONOMY ANODIZED BRASS|23|400 +Brand#41|ECONOMY ANODIZED COPPER|49|400 +Brand#41|ECONOMY ANODIZED STEEL|9|400 +Brand#41|ECONOMY BRUSHED BRASS|45|400 +Brand#41|ECONOMY BRUSHED COPPER|3|400 +Brand#41|ECONOMY BRUSHED NICKEL|49|400 +Brand#41|ECONOMY BRUSHED STEEL|23|400 +Brand#41|ECONOMY BURNISHED COPPER|3|400 +Brand#41|ECONOMY PLATED COPPER|19|400 +Brand#41|ECONOMY PLATED STEEL|3|400 +Brand#41|ECONOMY PLATED STEEL|36|400 +Brand#41|LARGE ANODIZED NICKEL|9|400 +Brand#41|LARGE ANODIZED STEEL|49|400 +Brand#41|LARGE BURNISHED NICKEL|3|400 +Brand#41|LARGE BURNISHED NICKEL|23|400 +Brand#41|LARGE POLISHED STEEL|9|400 +Brand#41|MEDIUM PLATED BRASS|45|400 +Brand#41|MEDIUM PLATED TIN|3|400 +Brand#41|PROMO ANODIZED BRASS|9|400 +Brand#41|PROMO ANODIZED STEEL|9|400 +Brand#41|PROMO BRUSHED COPPER|19|400 +Brand#41|PROMO BRUSHED COPPER|49|400 +Brand#41|PROMO BRUSHED TIN|9|400 +Brand#41|PROMO BURNISHED COPPER|19|400 +Brand#41|PROMO PLATED STEEL|3|400 +Brand#41|SMALL ANODIZED COPPER|49|400 +Brand#41|SMALL BRUSHED COPPER|19|400 +Brand#41|SMALL BRUSHED STEEL|14|400 +Brand#41|SMALL BURNISHED TIN|3|400 +Brand#41|SMALL POLISHED COPPER|9|400 +Brand#41|SMALL POLISHED NICKEL|23|400 +Brand#41|SMALL POLISHED TIN|19|400 +Brand#41|STANDARD ANODIZED STEEL|49|400 +Brand#41|STANDARD BRUSHED BRASS|36|400 +Brand#41|STANDARD BRUSHED COPPER|3|400 +Brand#41|STANDARD BRUSHED NICKEL|9|400 +Brand#41|STANDARD BRUSHED STEEL|19|400 +Brand#41|STANDARD BRUSHED TIN|3|400 +Brand#41|STANDARD BURNISHED BRASS|19|400 +Brand#41|STANDARD BURNISHED COPPER|36|400 +Brand#41|STANDARD BURNISHED STEEL|49|400 +Brand#41|STANDARD PLATED COPPER|23|400 +Brand#41|STANDARD PLATED STEEL|3|400 +Brand#41|STANDARD PLATED TIN|14|400 +Brand#42|ECONOMY ANODIZED NICKEL|49|400 +Brand#42|ECONOMY BRUSHED TIN|14|400 +Brand#42|ECONOMY BURNISHED TIN|45|400 +Brand#42|LARGE ANODIZED STEEL|3|400 +Brand#42|LARGE BURNISHED BRASS|23|400 +Brand#42|LARGE PLATED BRASS|9|400 +Brand#42|LARGE POLISHED BRASS|14|400 +Brand#42|LARGE POLISHED COPPER|49|400 +Brand#42|MEDIUM ANODIZED NICKEL|14|400 +Brand#42|MEDIUM BRUSHED COPPER|9|400 +Brand#42|MEDIUM BURNISHED TIN|23|400 +Brand#42|PROMO ANODIZED STEEL|23|400 +Brand#42|PROMO BRUSHED COPPER|19|400 +Brand#42|PROMO BRUSHED STEEL|45|400 +Brand#42|PROMO BRUSHED TIN|14|400 +Brand#42|PROMO BRUSHED TIN|36|400 +Brand#42|PROMO BURNISHED TIN|3|400 +Brand#42|PROMO PLATED COPPER|45|400 +Brand#42|SMALL BRUSHED BRASS|14|400 +Brand#42|SMALL BURNISHED COPPER|36|400 +Brand#42|SMALL BURNISHED NICKEL|19|400 +Brand#42|SMALL POLISHED STEEL|14|400 +Brand#42|SMALL POLISHED TIN|19|400 +Brand#42|STANDARD ANODIZED COPPER|36|400 +Brand#42|STANDARD ANODIZED NICKEL|23|400 +Brand#42|STANDARD ANODIZED TIN|36|400 +Brand#42|STANDARD BRUSHED BRASS|3|400 +Brand#42|STANDARD BRUSHED BRASS|45|400 +Brand#42|STANDARD BRUSHED NICKEL|49|400 +Brand#42|STANDARD BURNISHED TIN|3|400 +Brand#42|STANDARD PLATED STEEL|3|400 +Brand#42|STANDARD POLISHED BRASS|9|400 +Brand#42|STANDARD POLISHED COPPER|9|400 +Brand#42|STANDARD POLISHED NICKEL|14|400 +Brand#43|ECONOMY ANODIZED BRASS|14|400 +Brand#43|ECONOMY ANODIZED NICKEL|45|400 +Brand#43|ECONOMY BRUSHED BRASS|36|400 +Brand#43|ECONOMY BRUSHED BRASS|45|400 +Brand#43|ECONOMY BRUSHED TIN|14|400 +Brand#43|ECONOMY PLATED COPPER|23|400 +Brand#43|ECONOMY PLATED STEEL|3|400 +Brand#43|ECONOMY PLATED STEEL|36|400 +Brand#43|ECONOMY POLISHED STEEL|14|400 +Brand#43|LARGE ANODIZED BRASS|36|400 +Brand#43|LARGE BRUSHED STEEL|14|400 +Brand#43|LARGE PLATED TIN|9|400 +Brand#43|LARGE PLATED TIN|36|400 +Brand#43|MEDIUM ANODIZED BRASS|45|400 +Brand#43|MEDIUM BRUSHED STEEL|23|400 +Brand#43|MEDIUM BURNISHED BRASS|36|400 +Brand#43|MEDIUM PLATED COPPER|36|400 +Brand#43|MEDIUM PLATED COPPER|49|400 +Brand#43|PROMO BRUSHED NICKEL|49|400 +Brand#43|PROMO BRUSHED STEEL|45|400 +Brand#43|PROMO PLATED NICKEL|3|400 +Brand#43|PROMO POLISHED BRASS|45|400 +Brand#43|PROMO POLISHED NICKEL|23|400 +Brand#43|SMALL ANODIZED NICKEL|9|400 +Brand#43|SMALL ANODIZED STEEL|14|400 +Brand#43|SMALL ANODIZED TIN|49|400 +Brand#43|SMALL POLISHED STEEL|9|400 +Brand#43|STANDARD ANODIZED NICKEL|14|400 +Brand#43|STANDARD BRUSHED BRASS|19|400 +Brand#43|STANDARD BRUSHED BRASS|49|400 +Brand#43|STANDARD BRUSHED STEEL|3|400 +Brand#43|STANDARD BURNISHED STEEL|14|400 +Brand#43|STANDARD PLATED NICKEL|45|400 +Brand#44|ECONOMY ANODIZED COPPER|14|400 +Brand#44|ECONOMY POLISHED COPPER|23|400 +Brand#44|LARGE BURNISHED COPPER|49|400 +Brand#44|LARGE BURNISHED STEEL|14|400 +Brand#44|LARGE PLATED BRASS|49|400 +Brand#44|MEDIUM BRUSHED COPPER|3|400 +Brand#44|MEDIUM BURNISHED COPPER|45|400 +Brand#44|MEDIUM BURNISHED STEEL|36|400 +Brand#44|MEDIUM BURNISHED TIN|36|400 +Brand#44|PROMO ANODIZED BRASS|9|400 +Brand#44|PROMO ANODIZED TIN|3|400 +Brand#44|PROMO ANODIZED TIN|9|400 +Brand#44|PROMO BRUSHED TIN|14|400 +Brand#44|PROMO BRUSHED TIN|49|400 +Brand#44|PROMO PLATED TIN|19|400 +Brand#44|PROMO PLATED TIN|23|400 +Brand#44|PROMO POLISHED STEEL|9|400 +Brand#44|SMALL ANODIZED COPPER|23|400 +Brand#44|SMALL BURNISHED STEEL|19|400 +Brand#44|SMALL PLATED STEEL|49|400 +Brand#44|SMALL POLISHED BRASS|3|400 +Brand#44|SMALL POLISHED NICKEL|36|400 +Brand#44|SMALL POLISHED STEEL|23|400 +Brand#44|STANDARD ANODIZED COPPER|3|400 +Brand#44|STANDARD ANODIZED STEEL|14|400 +Brand#44|STANDARD BRUSHED NICKEL|19|400 +Brand#44|STANDARD BRUSHED STEEL|45|400 +Brand#44|STANDARD BRUSHED TIN|9|400 +Brand#44|STANDARD PLATED BRASS|14|400 +Brand#44|STANDARD PLATED NICKEL|45|400 +Brand#51|ECONOMY PLATED BRASS|36|400 +Brand#51|ECONOMY POLISHED COPPER|36|400 +Brand#51|LARGE BRUSHED STEEL|45|400 +Brand#51|LARGE BURNISHED COPPER|3|400 +Brand#51|LARGE BURNISHED TIN|49|400 +Brand#51|LARGE POLISHED BRASS|19|400 +Brand#51|LARGE POLISHED NICKEL|49|400 +Brand#51|MEDIUM BRUSHED COPPER|14|400 +Brand#51|MEDIUM BRUSHED STEEL|36|400 +Brand#51|MEDIUM BURNISHED COPPER|9|400 +Brand#51|MEDIUM PLATED BRASS|9|400 +Brand#51|PROMO ANODIZED NICKEL|9|400 +Brand#51|PROMO ANODIZED NICKEL|45|400 +Brand#51|PROMO BRUSHED COPPER|19|400 +Brand#51|PROMO BURNISHED NICKEL|19|400 +Brand#51|PROMO PLATED NICKEL|9|400 +Brand#51|PROMO POLISHED BRASS|45|400 +Brand#51|PROMO POLISHED TIN|49|400 +Brand#51|SMALL ANODIZED BRASS|49|400 +Brand#51|SMALL BRUSHED NICKEL|14|400 +Brand#51|SMALL BRUSHED TIN|19|400 +Brand#51|SMALL BURNISHED STEEL|3|400 +Brand#51|SMALL PLATED COPPER|9|400 +Brand#51|SMALL PLATED COPPER|19|400 +Brand#51|SMALL POLISHED COPPER|36|400 +Brand#51|STANDARD ANODIZED BRASS|14|400 +Brand#51|STANDARD BRUSHED STEEL|3|400 +Brand#51|STANDARD BURNISHED BRASS|49|400 +Brand#51|STANDARD BURNISHED NICKEL|36|400 +Brand#51|STANDARD PLATED TIN|3|400 +Brand#52|ECONOMY BURNISHED TIN|3|400 +Brand#52|ECONOMY PLATED COPPER|36|400 +Brand#52|ECONOMY PLATED STEEL|36|400 +Brand#52|ECONOMY PLATED STEEL|45|400 +Brand#52|ECONOMY POLISHED TIN|14|400 +Brand#52|LARGE ANODIZED STEEL|36|400 +Brand#52|LARGE BRUSHED BRASS|45|400 +Brand#52|LARGE PLATED COPPER|9|400 +Brand#52|MEDIUM BURNISHED TIN|23|400 +Brand#52|PROMO ANODIZED COPPER|14|400 +Brand#52|PROMO ANODIZED NICKEL|3|400 +Brand#52|PROMO PLATED STEEL|23|400 +Brand#52|PROMO PLATED TIN|49|400 +Brand#52|SMALL ANODIZED BRASS|23|400 +Brand#52|SMALL ANODIZED STEEL|19|400 +Brand#52|SMALL BURNISHED STEEL|45|400 +Brand#52|SMALL PLATED NICKEL|23|400 +Brand#52|SMALL PLATED STEEL|23|400 +Brand#52|STANDARD ANODIZED BRASS|14|400 +Brand#52|STANDARD BRUSHED STEEL|45|400 +Brand#52|STANDARD BURNISHED STEEL|23|400 +Brand#52|STANDARD BURNISHED TIN|3|400 +Brand#52|STANDARD PLATED STEEL|3|400 +Brand#53|ECONOMY BRUSHED STEEL|3|400 +Brand#53|ECONOMY BRUSHED STEEL|23|400 +Brand#53|ECONOMY BURNISHED TIN|49|400 +Brand#53|ECONOMY PLATED BRASS|14|400 +Brand#53|LARGE ANODIZED BRASS|14|400 +Brand#53|LARGE ANODIZED NICKEL|36|400 +Brand#53|LARGE ANODIZED STEEL|3|400 +Brand#53|LARGE ANODIZED STEEL|45|400 +Brand#53|LARGE BURNISHED BRASS|49|400 +Brand#53|MEDIUM BRUSHED COPPER|9|400 +Brand#53|MEDIUM BURNISHED BRASS|45|400 +Brand#53|MEDIUM BURNISHED NICKEL|3|400 +Brand#53|MEDIUM BURNISHED NICKEL|45|400 +Brand#53|PROMO ANODIZED TIN|9|400 +Brand#53|PROMO BRUSHED TIN|3|400 +Brand#53|PROMO POLISHED COPPER|23|400 +Brand#53|PROMO POLISHED STEEL|23|400 +Brand#53|SMALL BURNISHED STEEL|14|400 +Brand#53|SMALL POLISHED BRASS|9|400 +Brand#53|STANDARD ANODIZED NICKEL|19|400 +Brand#53|STANDARD ANODIZED STEEL|14|400 +Brand#53|STANDARD BRUSHED BRASS|23|400 +Brand#53|STANDARD PLATED NICKEL|49|400 +Brand#53|STANDARD PLATED STEEL|49|400 +Brand#53|STANDARD POLISHED COPPER|49|400 +Brand#54|ECONOMY BRUSHED STEEL|49|400 +Brand#54|ECONOMY BURNISHED STEEL|36|400 +Brand#54|ECONOMY PLATED STEEL|45|400 +Brand#54|LARGE BRUSHED BRASS|36|400 +Brand#54|LARGE BRUSHED BRASS|49|400 +Brand#54|LARGE BRUSHED NICKEL|9|400 +Brand#54|LARGE PLATED COPPER|45|400 +Brand#54|LARGE POLISHED STEEL|19|400 +Brand#54|MEDIUM ANODIZED COPPER|23|400 +Brand#54|MEDIUM ANODIZED COPPER|45|400 +Brand#54|MEDIUM BURNISHED STEEL|3|400 +Brand#54|MEDIUM PLATED BRASS|9|400 +Brand#54|PROMO BRUSHED BRASS|14|400 +Brand#54|PROMO BRUSHED NICKEL|14|400 +Brand#54|PROMO BURNISHED NICKEL|14|400 +Brand#54|PROMO BURNISHED NICKEL|49|400 +Brand#54|PROMO BURNISHED STEEL|45|400 +Brand#54|PROMO PLATED BRASS|45|400 +Brand#54|PROMO POLISHED BRASS|14|400 +Brand#54|SMALL ANODIZED BRASS|9|400 +Brand#54|SMALL ANODIZED NICKEL|36|400 +Brand#54|SMALL BURNISHED BRASS|45|400 +Brand#54|SMALL PLATED COPPER|14|400 +Brand#54|SMALL PLATED COPPER|45|400 +Brand#54|SMALL PLATED NICKEL|9|400 +Brand#54|SMALL PLATED TIN|19|400 +Brand#54|STANDARD ANODIZED BRASS|45|400 +Brand#54|STANDARD ANODIZED NICKEL|14|400 +Brand#54|STANDARD BRUSHED BRASS|3|400 +Brand#54|STANDARD BRUSHED TIN|45|400 +Brand#54|STANDARD BURNISHED TIN|45|400 +Brand#54|STANDARD PLATED NICKEL|14|400 +Brand#54|STANDARD PLATED STEEL|19|400 +Brand#54|STANDARD POLISHED TIN|19|400 +Brand#55|ECONOMY ANODIZED BRASS|19|400 +Brand#55|ECONOMY ANODIZED NICKEL|9|400 +Brand#55|ECONOMY BRUSHED BRASS|45|400 +Brand#55|ECONOMY POLISHED STEEL|14|400 +Brand#55|LARGE BURNISHED TIN|3|400 +Brand#55|LARGE PLATED BRASS|19|400 +Brand#55|LARGE PLATED BRASS|45|400 +Brand#55|LARGE PLATED NICKEL|19|400 +Brand#55|LARGE PLATED NICKEL|23|400 +Brand#55|LARGE PLATED STEEL|49|400 +Brand#55|LARGE POLISHED NICKEL|3|400 +Brand#55|MEDIUM BRUSHED COPPER|45|400 +Brand#55|MEDIUM BURNISHED TIN|14|400 +Brand#55|MEDIUM PLATED STEEL|45|400 +Brand#55|PROMO ANODIZED BRASS|49|400 +Brand#55|PROMO BRUSHED BRASS|36|400 +Brand#55|PROMO BURNISHED NICKEL|49|400 +Brand#55|PROMO PLATED TIN|23|400 +Brand#55|PROMO POLISHED BRASS|23|400 +Brand#55|PROMO POLISHED BRASS|36|400 +Brand#55|SMALL ANODIZED NICKEL|9|400 +Brand#55|SMALL BRUSHED COPPER|45|400 +Brand#55|SMALL BRUSHED NICKEL|49|400 +Brand#55|SMALL BRUSHED TIN|19|400 +Brand#55|SMALL BRUSHED TIN|23|400 +Brand#55|STANDARD ANODIZED STEEL|3|400 +Brand#55|STANDARD BRUSHED NICKEL|9|400 +Brand#55|STANDARD BRUSHED TIN|36|400 +Brand#55|STANDARD BURNISHED STEEL|36|400 +Brand#11|ECONOMY ANODIZED BRASS|3|399 +Brand#11|ECONOMY BURNISHED COPPER|9|399 +Brand#11|ECONOMY POLISHED BRASS|14|399 +Brand#11|ECONOMY POLISHED BRASS|19|399 +Brand#11|LARGE PLATED TIN|14|399 +Brand#11|MEDIUM BRUSHED NICKEL|45|399 +Brand#11|MEDIUM PLATED TIN|49|399 +Brand#11|PROMO BRUSHED STEEL|45|399 +Brand#11|PROMO PLATED BRASS|19|399 +Brand#11|SMALL ANODIZED NICKEL|3|399 +Brand#11|SMALL BRUSHED COPPER|36|399 +Brand#11|STANDARD BURNISHED COPPER|45|399 +Brand#12|ECONOMY BRUSHED COPPER|23|399 +Brand#12|ECONOMY BURNISHED STEEL|14|399 +Brand#12|ECONOMY PLATED BRASS|23|399 +Brand#12|LARGE BURNISHED STEEL|19|399 +Brand#12|LARGE PLATED TIN|36|399 +Brand#12|MEDIUM ANODIZED NICKEL|45|399 +Brand#12|MEDIUM BRUSHED NICKEL|9|399 +Brand#12|MEDIUM PLATED BRASS|14|399 +Brand#12|PROMO ANODIZED TIN|19|399 +Brand#12|PROMO ANODIZED TIN|45|399 +Brand#12|SMALL ANODIZED COPPER|45|399 +Brand#12|SMALL ANODIZED STEEL|14|399 +Brand#12|SMALL ANODIZED STEEL|49|399 +Brand#12|STANDARD PLATED NICKEL|9|399 +Brand#12|STANDARD PLATED NICKEL|49|399 +Brand#12|STANDARD POLISHED COPPER|19|399 +Brand#13|MEDIUM BURNISHED NICKEL|23|399 +Brand#13|PROMO ANODIZED STEEL|19|399 +Brand#13|PROMO PLATED NICKEL|9|399 +Brand#13|PROMO PLATED STEEL|14|399 +Brand#13|PROMO POLISHED TIN|9|399 +Brand#13|SMALL BRUSHED COPPER|19|399 +Brand#13|SMALL BURNISHED NICKEL|45|399 +Brand#14|LARGE POLISHED TIN|9|399 +Brand#14|MEDIUM BRUSHED STEEL|9|399 +Brand#14|MEDIUM PLATED TIN|23|399 +Brand#14|PROMO POLISHED BRASS|14|399 +Brand#15|ECONOMY ANODIZED STEEL|3|399 +Brand#15|ECONOMY PLATED COPPER|36|399 +Brand#15|LARGE BURNISHED COPPER|49|399 +Brand#15|LARGE POLISHED BRASS|9|399 +Brand#15|PROMO BRUSHED NICKEL|49|399 +Brand#15|PROMO PLATED BRASS|19|399 +Brand#15|SMALL ANODIZED STEEL|14|399 +Brand#15|SMALL POLISHED TIN|36|399 +Brand#15|STANDARD BURNISHED BRASS|9|399 +Brand#21|LARGE ANODIZED BRASS|23|399 +Brand#21|LARGE ANODIZED NICKEL|9|399 +Brand#21|LARGE PLATED TIN|9|399 +Brand#21|MEDIUM BURNISHED TIN|49|399 +Brand#21|PROMO ANODIZED BRASS|9|399 +Brand#21|SMALL BURNISHED TIN|23|399 +Brand#21|STANDARD POLISHED BRASS|14|399 +Brand#22|LARGE PLATED COPPER|9|399 +Brand#22|MEDIUM ANODIZED COPPER|49|399 +Brand#22|SMALL BURNISHED NICKEL|9|399 +Brand#22|SMALL PLATED TIN|9|399 +Brand#22|SMALL POLISHED BRASS|45|399 +Brand#23|LARGE BRUSHED TIN|23|399 +Brand#23|LARGE PLATED COPPER|3|399 +Brand#23|PROMO PLATED NICKEL|9|399 +Brand#23|PROMO POLISHED NICKEL|14|399 +Brand#23|PROMO POLISHED STEEL|3|399 +Brand#23|SMALL ANODIZED BRASS|45|399 +Brand#23|STANDARD ANODIZED COPPER|9|399 +Brand#24|ECONOMY BURNISHED TIN|19|399 +Brand#24|LARGE BRUSHED NICKEL|49|399 +Brand#24|LARGE PLATED NICKEL|36|399 +Brand#24|PROMO ANODIZED BRASS|23|399 +Brand#24|PROMO BRUSHED TIN|45|399 +Brand#24|PROMO BURNISHED NICKEL|23|399 +Brand#24|SMALL ANODIZED BRASS|23|399 +Brand#24|SMALL ANODIZED STEEL|19|399 +Brand#24|SMALL BRUSHED TIN|23|399 +Brand#24|SMALL POLISHED NICKEL|9|399 +Brand#24|STANDARD POLISHED BRASS|3|399 +Brand#25|ECONOMY BURNISHED TIN|45|399 +Brand#25|ECONOMY POLISHED BRASS|23|399 +Brand#25|LARGE ANODIZED TIN|9|399 +Brand#25|LARGE POLISHED STEEL|36|399 +Brand#25|MEDIUM PLATED TIN|45|399 +Brand#25|SMALL PLATED COPPER|49|399 +Brand#31|ECONOMY POLISHED NICKEL|36|399 +Brand#31|ECONOMY POLISHED TIN|9|399 +Brand#31|LARGE ANODIZED STEEL|3|399 +Brand#31|MEDIUM ANODIZED BRASS|3|399 +Brand#31|PROMO BRUSHED COPPER|23|399 +Brand#31|PROMO PLATED NICKEL|49|399 +Brand#31|PROMO PLATED STEEL|19|399 +Brand#31|STANDARD BRUSHED TIN|23|399 +Brand#32|ECONOMY PLATED COPPER|45|399 +Brand#32|LARGE POLISHED STEEL|36|399 +Brand#32|LARGE POLISHED TIN|14|399 +Brand#32|SMALL BRUSHED STEEL|19|399 +Brand#32|SMALL BURNISHED NICKEL|45|399 +Brand#33|ECONOMY ANODIZED STEEL|19|399 +Brand#33|LARGE BRUSHED TIN|23|399 +Brand#33|MEDIUM BRUSHED NICKEL|19|399 +Brand#33|MEDIUM PLATED BRASS|36|399 +Brand#33|PROMO ANODIZED BRASS|14|399 +Brand#33|STANDARD BURNISHED NICKEL|14|399 +Brand#34|LARGE BURNISHED TIN|45|399 +Brand#34|LARGE PLATED BRASS|3|399 +Brand#34|PROMO BRUSHED STEEL|9|399 +Brand#34|PROMO BURNISHED COPPER|19|399 +Brand#34|PROMO PLATED TIN|19|399 +Brand#34|SMALL BRUSHED BRASS|36|399 +Brand#34|SMALL BURNISHED BRASS|14|399 +Brand#34|SMALL BURNISHED NICKEL|19|399 +Brand#34|STANDARD ANODIZED STEEL|45|399 +Brand#34|STANDARD BRUSHED NICKEL|3|399 +Brand#35|ECONOMY BURNISHED STEEL|23|399 +Brand#35|LARGE BRUSHED BRASS|45|399 +Brand#35|LARGE BRUSHED COPPER|3|399 +Brand#35|LARGE BRUSHED NICKEL|14|399 +Brand#35|LARGE BURNISHED BRASS|36|399 +Brand#35|LARGE PLATED TIN|49|399 +Brand#35|MEDIUM ANODIZED COPPER|19|399 +Brand#35|MEDIUM BURNISHED NICKEL|14|399 +Brand#35|PROMO BRUSHED NICKEL|9|399 +Brand#35|PROMO BURNISHED BRASS|19|399 +Brand#35|SMALL PLATED TIN|49|399 +Brand#35|SMALL POLISHED COPPER|9|399 +Brand#35|SMALL POLISHED STEEL|14|399 +Brand#35|STANDARD BRUSHED STEEL|45|399 +Brand#35|STANDARD BURNISHED BRASS|19|399 +Brand#35|STANDARD BURNISHED COPPER|45|399 +Brand#41|ECONOMY BURNISHED BRASS|14|399 +Brand#41|LARGE BRUSHED NICKEL|36|399 +Brand#41|MEDIUM BURNISHED TIN|45|399 +Brand#41|PROMO ANODIZED COPPER|3|399 +Brand#41|PROMO ANODIZED STEEL|36|399 +Brand#41|PROMO BRUSHED TIN|45|399 +Brand#41|PROMO BURNISHED TIN|19|399 +Brand#41|STANDARD POLISHED COPPER|45|399 +Brand#42|ECONOMY ANODIZED COPPER|23|399 +Brand#42|ECONOMY BURNISHED TIN|19|399 +Brand#42|LARGE BRUSHED NICKEL|3|399 +Brand#42|LARGE BURNISHED COPPER|49|399 +Brand#42|MEDIUM ANODIZED NICKEL|36|399 +Brand#42|SMALL ANODIZED STEEL|19|399 +Brand#42|SMALL POLISHED NICKEL|36|399 +Brand#42|STANDARD ANODIZED BRASS|49|399 +Brand#42|STANDARD BRUSHED BRASS|14|399 +Brand#42|STANDARD BURNISHED COPPER|9|399 +Brand#42|STANDARD PLATED COPPER|14|399 +Brand#43|ECONOMY BRUSHED NICKEL|14|399 +Brand#43|ECONOMY BRUSHED TIN|23|399 +Brand#43|ECONOMY BURNISHED NICKEL|9|399 +Brand#43|LARGE POLISHED COPPER|3|399 +Brand#43|SMALL ANODIZED COPPER|14|399 +Brand#43|STANDARD ANODIZED NICKEL|3|399 +Brand#43|STANDARD BRUSHED COPPER|14|399 +Brand#44|LARGE BURNISHED COPPER|14|399 +Brand#44|LARGE PLATED COPPER|14|399 +Brand#44|LARGE PLATED NICKEL|45|399 +Brand#44|PROMO BURNISHED STEEL|9|399 +Brand#44|SMALL POLISHED STEEL|9|399 +Brand#44|STANDARD POLISHED BRASS|3|399 +Brand#51|ECONOMY ANODIZED BRASS|23|399 +Brand#51|ECONOMY BURNISHED NICKEL|23|399 +Brand#51|LARGE BRUSHED NICKEL|36|399 +Brand#51|LARGE BURNISHED NICKEL|19|399 +Brand#51|PROMO BRUSHED STEEL|19|399 +Brand#52|ECONOMY ANODIZED TIN|36|399 +Brand#52|ECONOMY BURNISHED NICKEL|36|399 +Brand#52|LARGE BURNISHED NICKEL|19|399 +Brand#52|MEDIUM ANODIZED BRASS|36|399 +Brand#52|MEDIUM PLATED STEEL|49|399 +Brand#52|PROMO BRUSHED COPPER|14|399 +Brand#52|PROMO BRUSHED TIN|3|399 +Brand#52|STANDARD BURNISHED STEEL|14|399 +Brand#53|ECONOMY ANODIZED BRASS|3|399 +Brand#53|ECONOMY ANODIZED STEEL|23|399 +Brand#53|ECONOMY BRUSHED TIN|19|399 +Brand#53|LARGE PLATED BRASS|23|399 +Brand#53|LARGE PLATED COPPER|49|399 +Brand#53|LARGE PLATED STEEL|9|399 +Brand#53|MEDIUM ANODIZED BRASS|3|399 +Brand#53|MEDIUM ANODIZED STEEL|23|399 +Brand#53|PROMO BRUSHED NICKEL|3|399 +Brand#53|SMALL BRUSHED NICKEL|19|399 +Brand#53|SMALL BURNISHED STEEL|19|399 +Brand#53|SMALL PLATED TIN|19|399 +Brand#53|SMALL POLISHED STEEL|14|399 +Brand#53|STANDARD BRUSHED BRASS|49|399 +Brand#53|STANDARD BRUSHED COPPER|23|399 +Brand#54|ECONOMY ANODIZED NICKEL|23|399 +Brand#54|LARGE BURNISHED TIN|14|399 +Brand#54|PROMO ANODIZED COPPER|49|399 +Brand#54|PROMO BURNISHED STEEL|19|399 +Brand#54|SMALL ANODIZED COPPER|23|399 +Brand#54|SMALL BRUSHED NICKEL|45|399 +Brand#54|SMALL PLATED NICKEL|45|399 +Brand#55|ECONOMY BRUSHED STEEL|49|399 +Brand#55|ECONOMY PLATED NICKEL|14|399 +Brand#55|ECONOMY PLATED STEEL|49|399 +Brand#55|MEDIUM ANODIZED BRASS|49|399 +Brand#55|MEDIUM BRUSHED NICKEL|45|399 +Brand#55|MEDIUM BURNISHED NICKEL|36|399 +Brand#55|SMALL ANODIZED STEEL|19|399 +Brand#55|STANDARD BRUSHED NICKEL|19|399 +Brand#12|LARGE PLATED COPPER|23|398 +Brand#12|MEDIUM BRUSHED TIN|3|398 +Brand#13|STANDARD PLATED STEEL|9|398 +Brand#14|STANDARD ANODIZED NICKEL|14|398 +Brand#15|ECONOMY BURNISHED BRASS|23|398 +Brand#15|SMALL POLISHED NICKEL|23|398 +Brand#21|MEDIUM PLATED COPPER|9|398 +Brand#24|LARGE POLISHED BRASS|14|398 +Brand#25|ECONOMY POLISHED COPPER|36|398 +Brand#32|LARGE POLISHED TIN|23|398 +Brand#32|MEDIUM ANODIZED BRASS|14|398 +Brand#32|SMALL BURNISHED BRASS|23|398 +Brand#35|MEDIUM PLATED TIN|3|398 +Brand#35|PROMO PLATED BRASS|45|398 +Brand#35|STANDARD BURNISHED STEEL|14|398 +Brand#42|MEDIUM BURNISHED COPPER|19|398 +Brand#43|ECONOMY BURNISHED STEEL|36|398 +Brand#43|STANDARD PLATED TIN|45|398 +Brand#52|ECONOMY BRUSHED TIN|45|398 +Brand#53|PROMO ANODIZED NICKEL|23|398 +Brand#53|STANDARD PLATED BRASS|23|398 +Brand#22|LARGE POLISHED TIN|14|397 +Brand#11|ECONOMY BURNISHED BRASS|3|396 +Brand#11|ECONOMY BURNISHED BRASS|49|396 +Brand#11|ECONOMY PLATED NICKEL|45|396 +Brand#11|ECONOMY POLISHED BRASS|45|396 +Brand#11|ECONOMY POLISHED TIN|3|396 +Brand#11|LARGE ANODIZED COPPER|45|396 +Brand#11|LARGE ANODIZED STEEL|45|396 +Brand#11|LARGE BURNISHED TIN|36|396 +Brand#11|LARGE PLATED NICKEL|23|396 +Brand#11|MEDIUM BURNISHED NICKEL|49|396 +Brand#11|MEDIUM BURNISHED STEEL|23|396 +Brand#11|MEDIUM PLATED NICKEL|14|396 +Brand#11|PROMO ANODIZED BRASS|36|396 +Brand#11|PROMO BURNISHED NICKEL|36|396 +Brand#11|SMALL ANODIZED NICKEL|49|396 +Brand#11|SMALL PLATED NICKEL|49|396 +Brand#11|STANDARD POLISHED NICKEL|49|396 +Brand#11|STANDARD POLISHED STEEL|45|396 +Brand#12|ECONOMY BRUSHED NICKEL|9|396 +Brand#12|ECONOMY BURNISHED STEEL|49|396 +Brand#12|ECONOMY PLATED COPPER|36|396 +Brand#12|ECONOMY PLATED STEEL|49|396 +Brand#12|ECONOMY POLISHED COPPER|9|396 +Brand#12|LARGE ANODIZED COPPER|19|396 +Brand#12|LARGE BRUSHED TIN|23|396 +Brand#12|LARGE BURNISHED BRASS|19|396 +Brand#12|LARGE BURNISHED TIN|23|396 +Brand#12|LARGE POLISHED BRASS|9|396 +Brand#12|MEDIUM ANODIZED NICKEL|9|396 +Brand#12|MEDIUM ANODIZED NICKEL|36|396 +Brand#12|MEDIUM ANODIZED STEEL|14|396 +Brand#12|MEDIUM BRUSHED COPPER|3|396 +Brand#12|MEDIUM BURNISHED COPPER|23|396 +Brand#12|MEDIUM PLATED STEEL|9|396 +Brand#12|MEDIUM PLATED STEEL|14|396 +Brand#12|PROMO BURNISHED BRASS|36|396 +Brand#12|PROMO PLATED COPPER|23|396 +Brand#12|PROMO POLISHED STEEL|19|396 +Brand#12|PROMO POLISHED STEEL|49|396 +Brand#12|SMALL BURNISHED NICKEL|9|396 +Brand#12|SMALL BURNISHED NICKEL|49|396 +Brand#12|SMALL PLATED BRASS|23|396 +Brand#12|STANDARD ANODIZED BRASS|36|396 +Brand#12|STANDARD BURNISHED NICKEL|3|396 +Brand#13|ECONOMY ANODIZED COPPER|36|396 +Brand#13|ECONOMY BRUSHED BRASS|23|396 +Brand#13|ECONOMY BRUSHED NICKEL|36|396 +Brand#13|ECONOMY BURNISHED NICKEL|49|396 +Brand#13|ECONOMY PLATED BRASS|14|396 +Brand#13|ECONOMY PLATED NICKEL|3|396 +Brand#13|ECONOMY PLATED STEEL|45|396 +Brand#13|LARGE ANODIZED BRASS|9|396 +Brand#13|LARGE BRUSHED BRASS|36|396 +Brand#13|LARGE BRUSHED STEEL|36|396 +Brand#13|LARGE BURNISHED BRASS|3|396 +Brand#13|MEDIUM ANODIZED STEEL|49|396 +Brand#13|MEDIUM BRUSHED BRASS|45|396 +Brand#13|MEDIUM BRUSHED STEEL|3|396 +Brand#13|MEDIUM BURNISHED COPPER|49|396 +Brand#13|MEDIUM PLATED COPPER|19|396 +Brand#13|PROMO ANODIZED NICKEL|49|396 +Brand#13|PROMO BRUSHED BRASS|3|396 +Brand#13|PROMO BRUSHED NICKEL|19|396 +Brand#13|PROMO BRUSHED TIN|36|396 +Brand#13|PROMO BURNISHED TIN|49|396 +Brand#13|PROMO POLISHED COPPER|14|396 +Brand#13|PROMO POLISHED COPPER|36|396 +Brand#13|SMALL ANODIZED TIN|23|396 +Brand#13|SMALL BURNISHED COPPER|3|396 +Brand#13|SMALL PLATED COPPER|14|396 +Brand#13|SMALL POLISHED BRASS|9|396 +Brand#13|SMALL POLISHED STEEL|45|396 +Brand#13|SMALL POLISHED TIN|45|396 +Brand#13|STANDARD BURNISHED NICKEL|9|396 +Brand#13|STANDARD BURNISHED NICKEL|45|396 +Brand#14|ECONOMY ANODIZED COPPER|3|396 +Brand#14|ECONOMY BURNISHED COPPER|45|396 +Brand#14|ECONOMY BURNISHED TIN|14|396 +Brand#14|ECONOMY POLISHED BRASS|23|396 +Brand#14|LARGE ANODIZED TIN|49|396 +Brand#14|LARGE BURNISHED BRASS|49|396 +Brand#14|LARGE BURNISHED STEEL|3|396 +Brand#14|LARGE PLATED STEEL|3|396 +Brand#14|LARGE POLISHED NICKEL|14|396 +Brand#14|LARGE POLISHED NICKEL|19|396 +Brand#14|LARGE POLISHED NICKEL|23|396 +Brand#14|MEDIUM ANODIZED STEEL|19|396 +Brand#14|MEDIUM PLATED STEEL|3|396 +Brand#14|MEDIUM PLATED TIN|36|396 +Brand#14|PROMO ANODIZED TIN|45|396 +Brand#14|PROMO PLATED TIN|49|396 +Brand#14|PROMO POLISHED COPPER|14|396 +Brand#14|SMALL BRUSHED BRASS|14|396 +Brand#14|SMALL BURNISHED COPPER|45|396 +Brand#14|SMALL BURNISHED STEEL|9|396 +Brand#14|SMALL POLISHED BRASS|23|396 +Brand#14|STANDARD BURNISHED COPPER|9|396 +Brand#14|STANDARD POLISHED NICKEL|45|396 +Brand#15|ECONOMY BRUSHED TIN|9|396 +Brand#15|ECONOMY POLISHED TIN|36|396 +Brand#15|LARGE ANODIZED STEEL|14|396 +Brand#15|LARGE ANODIZED TIN|36|396 +Brand#15|LARGE BURNISHED BRASS|23|396 +Brand#15|LARGE BURNISHED NICKEL|14|396 +Brand#15|LARGE PLATED TIN|3|396 +Brand#15|MEDIUM BRUSHED BRASS|3|396 +Brand#15|PROMO ANODIZED COPPER|3|396 +Brand#15|PROMO BRUSHED COPPER|45|396 +Brand#15|PROMO BURNISHED BRASS|45|396 +Brand#15|PROMO BURNISHED STEEL|45|396 +Brand#15|PROMO BURNISHED TIN|45|396 +Brand#15|PROMO POLISHED BRASS|14|396 +Brand#15|SMALL ANODIZED BRASS|9|396 +Brand#15|SMALL ANODIZED NICKEL|45|396 +Brand#15|SMALL ANODIZED STEEL|3|396 +Brand#15|SMALL BRUSHED TIN|49|396 +Brand#15|SMALL BURNISHED COPPER|23|396 +Brand#15|SMALL POLISHED BRASS|45|396 +Brand#15|STANDARD ANODIZED TIN|9|396 +Brand#15|STANDARD BRUSHED STEEL|3|396 +Brand#15|STANDARD PLATED NICKEL|45|396 +Brand#15|STANDARD POLISHED BRASS|36|396 +Brand#15|STANDARD POLISHED TIN|19|396 +Brand#21|ECONOMY BURNISHED BRASS|49|396 +Brand#21|ECONOMY POLISHED TIN|45|396 +Brand#21|LARGE BRUSHED NICKEL|49|396 +Brand#21|LARGE PLATED BRASS|19|396 +Brand#21|LARGE PLATED TIN|36|396 +Brand#21|MEDIUM ANODIZED BRASS|45|396 +Brand#21|MEDIUM BRUSHED BRASS|9|396 +Brand#21|MEDIUM BURNISHED NICKEL|14|396 +Brand#21|MEDIUM BURNISHED NICKEL|19|396 +Brand#21|PROMO ANODIZED COPPER|9|396 +Brand#21|PROMO ANODIZED COPPER|23|396 +Brand#21|PROMO ANODIZED COPPER|36|396 +Brand#21|PROMO ANODIZED NICKEL|23|396 +Brand#21|PROMO BRUSHED COPPER|49|396 +Brand#21|PROMO BURNISHED NICKEL|3|396 +Brand#21|PROMO BURNISHED STEEL|49|396 +Brand#21|PROMO POLISHED NICKEL|14|396 +Brand#21|SMALL ANODIZED NICKEL|36|396 +Brand#21|SMALL PLATED COPPER|45|396 +Brand#21|SMALL PLATED TIN|3|396 +Brand#21|STANDARD ANODIZED BRASS|45|396 +Brand#21|STANDARD ANODIZED COPPER|9|396 +Brand#21|STANDARD ANODIZED COPPER|49|396 +Brand#21|STANDARD ANODIZED NICKEL|23|396 +Brand#21|STANDARD ANODIZED STEEL|19|396 +Brand#21|STANDARD BURNISHED TIN|9|396 +Brand#21|STANDARD PLATED COPPER|14|396 +Brand#21|STANDARD POLISHED STEEL|3|396 +Brand#21|STANDARD POLISHED TIN|3|396 +Brand#22|ECONOMY ANODIZED COPPER|23|396 +Brand#22|ECONOMY ANODIZED NICKEL|9|396 +Brand#22|ECONOMY ANODIZED NICKEL|14|396 +Brand#22|ECONOMY BRUSHED BRASS|23|396 +Brand#22|ECONOMY BRUSHED COPPER|3|396 +Brand#22|ECONOMY BRUSHED TIN|49|396 +Brand#22|ECONOMY PLATED COPPER|19|396 +Brand#22|ECONOMY PLATED COPPER|36|396 +Brand#22|ECONOMY PLATED TIN|23|396 +Brand#22|LARGE BRUSHED BRASS|19|396 +Brand#22|MEDIUM ANODIZED BRASS|9|396 +Brand#22|MEDIUM ANODIZED NICKEL|9|396 +Brand#22|MEDIUM ANODIZED STEEL|9|396 +Brand#22|MEDIUM BURNISHED BRASS|14|396 +Brand#22|MEDIUM BURNISHED NICKEL|9|396 +Brand#22|MEDIUM PLATED TIN|45|396 +Brand#22|PROMO ANODIZED COPPER|3|396 +Brand#22|PROMO BURNISHED TIN|14|396 +Brand#22|PROMO PLATED COPPER|36|396 +Brand#22|SMALL BURNISHED COPPER|14|396 +Brand#22|SMALL POLISHED BRASS|23|396 +Brand#22|STANDARD POLISHED BRASS|36|396 +Brand#22|STANDARD POLISHED COPPER|19|396 +Brand#23|ECONOMY ANODIZED COPPER|23|396 +Brand#23|ECONOMY BRUSHED BRASS|49|396 +Brand#23|ECONOMY BRUSHED NICKEL|36|396 +Brand#23|ECONOMY BRUSHED TIN|23|396 +Brand#23|LARGE BRUSHED NICKEL|9|396 +Brand#23|LARGE BURNISHED BRASS|3|396 +Brand#23|LARGE BURNISHED STEEL|14|396 +Brand#23|LARGE BURNISHED TIN|36|396 +Brand#23|LARGE PLATED BRASS|36|396 +Brand#23|LARGE POLISHED COPPER|19|396 +Brand#23|LARGE POLISHED STEEL|3|396 +Brand#23|MEDIUM ANODIZED BRASS|49|396 +Brand#23|MEDIUM ANODIZED STEEL|19|396 +Brand#23|MEDIUM BRUSHED BRASS|49|396 +Brand#23|MEDIUM BRUSHED NICKEL|23|396 +Brand#23|MEDIUM BRUSHED TIN|49|396 +Brand#23|MEDIUM BURNISHED TIN|3|396 +Brand#23|PROMO BRUSHED NICKEL|45|396 +Brand#23|PROMO BRUSHED STEEL|14|396 +Brand#23|PROMO BRUSHED STEEL|19|396 +Brand#23|PROMO BURNISHED BRASS|36|396 +Brand#23|PROMO POLISHED BRASS|23|396 +Brand#23|PROMO POLISHED BRASS|36|396 +Brand#23|SMALL ANODIZED COPPER|49|396 +Brand#23|SMALL ANODIZED NICKEL|36|396 +Brand#23|SMALL BRUSHED BRASS|23|396 +Brand#23|SMALL BRUSHED NICKEL|36|396 +Brand#23|SMALL PLATED BRASS|14|396 +Brand#23|STANDARD ANODIZED NICKEL|19|396 +Brand#23|STANDARD BRUSHED TIN|9|396 +Brand#23|STANDARD BURNISHED STEEL|14|396 +Brand#24|ECONOMY ANODIZED COPPER|14|396 +Brand#24|ECONOMY BRUSHED BRASS|19|396 +Brand#24|ECONOMY BRUSHED STEEL|49|396 +Brand#24|ECONOMY PLATED STEEL|45|396 +Brand#24|LARGE ANODIZED NICKEL|9|396 +Brand#24|LARGE BRUSHED STEEL|14|396 +Brand#24|LARGE BURNISHED TIN|36|396 +Brand#24|LARGE PLATED BRASS|9|396 +Brand#24|LARGE PLATED STEEL|19|396 +Brand#24|LARGE PLATED TIN|3|396 +Brand#24|LARGE POLISHED BRASS|3|396 +Brand#24|LARGE POLISHED COPPER|36|396 +Brand#24|LARGE POLISHED STEEL|45|396 +Brand#24|MEDIUM BRUSHED BRASS|19|396 +Brand#24|MEDIUM BRUSHED BRASS|23|396 +Brand#24|MEDIUM PLATED BRASS|19|396 +Brand#24|MEDIUM PLATED TIN|23|396 +Brand#24|PROMO BURNISHED COPPER|49|396 +Brand#24|PROMO BURNISHED STEEL|23|396 +Brand#24|SMALL BURNISHED BRASS|9|396 +Brand#24|SMALL POLISHED BRASS|49|396 +Brand#24|SMALL POLISHED STEEL|45|396 +Brand#24|STANDARD ANODIZED BRASS|45|396 +Brand#24|STANDARD ANODIZED COPPER|9|396 +Brand#24|STANDARD BRUSHED NICKEL|49|396 +Brand#24|STANDARD BURNISHED TIN|23|396 +Brand#24|STANDARD PLATED COPPER|45|396 +Brand#24|STANDARD POLISHED COPPER|3|396 +Brand#24|STANDARD POLISHED COPPER|36|396 +Brand#24|STANDARD POLISHED COPPER|45|396 +Brand#25|ECONOMY ANODIZED TIN|23|396 +Brand#25|ECONOMY BRUSHED COPPER|36|396 +Brand#25|ECONOMY BRUSHED NICKEL|14|396 +Brand#25|ECONOMY BRUSHED STEEL|49|396 +Brand#25|LARGE BRUSHED BRASS|19|396 +Brand#25|LARGE BRUSHED TIN|3|396 +Brand#25|LARGE POLISHED NICKEL|23|396 +Brand#25|LARGE POLISHED STEEL|49|396 +Brand#25|MEDIUM PLATED STEEL|14|396 +Brand#25|PROMO ANODIZED NICKEL|9|396 +Brand#25|PROMO BRUSHED BRASS|45|396 +Brand#25|PROMO BURNISHED TIN|23|396 +Brand#25|PROMO POLISHED COPPER|45|396 +Brand#25|SMALL BURNISHED STEEL|36|396 +Brand#25|SMALL POLISHED NICKEL|36|396 +Brand#25|STANDARD BRUSHED COPPER|23|396 +Brand#25|STANDARD BRUSHED NICKEL|45|396 +Brand#25|STANDARD BRUSHED TIN|49|396 +Brand#25|STANDARD BURNISHED COPPER|49|396 +Brand#25|STANDARD PLATED STEEL|19|396 +Brand#25|STANDARD POLISHED TIN|49|396 +Brand#31|ECONOMY ANODIZED COPPER|45|396 +Brand#31|ECONOMY ANODIZED STEEL|36|396 +Brand#31|LARGE ANODIZED COPPER|23|396 +Brand#31|LARGE ANODIZED COPPER|36|396 +Brand#31|LARGE ANODIZED NICKEL|14|396 +Brand#31|LARGE BURNISHED COPPER|23|396 +Brand#31|LARGE POLISHED BRASS|19|396 +Brand#31|LARGE POLISHED STEEL|23|396 +Brand#31|MEDIUM ANODIZED BRASS|19|396 +Brand#31|MEDIUM BURNISHED BRASS|49|396 +Brand#31|MEDIUM PLATED NICKEL|14|396 +Brand#31|PROMO ANODIZED COPPER|3|396 +Brand#31|PROMO BRUSHED NICKEL|36|396 +Brand#31|PROMO POLISHED NICKEL|23|396 +Brand#31|PROMO POLISHED STEEL|49|396 +Brand#31|SMALL ANODIZED COPPER|49|396 +Brand#31|SMALL ANODIZED STEEL|23|396 +Brand#31|SMALL ANODIZED STEEL|36|396 +Brand#31|SMALL POLISHED BRASS|3|396 +Brand#31|SMALL POLISHED COPPER|9|396 +Brand#31|SMALL POLISHED COPPER|14|396 +Brand#31|SMALL POLISHED COPPER|45|396 +Brand#31|SMALL POLISHED STEEL|9|396 +Brand#31|SMALL POLISHED TIN|36|396 +Brand#31|STANDARD BRUSHED NICKEL|23|396 +Brand#31|STANDARD BRUSHED TIN|49|396 +Brand#31|STANDARD PLATED COPPER|36|396 +Brand#31|STANDARD PLATED TIN|23|396 +Brand#32|ECONOMY BRUSHED NICKEL|9|396 +Brand#32|ECONOMY BRUSHED NICKEL|45|396 +Brand#32|ECONOMY BRUSHED STEEL|49|396 +Brand#32|ECONOMY BURNISHED STEEL|23|396 +Brand#32|ECONOMY POLISHED TIN|19|396 +Brand#32|LARGE BRUSHED STEEL|19|396 +Brand#32|LARGE BRUSHED TIN|3|396 +Brand#32|LARGE BURNISHED COPPER|49|396 +Brand#32|LARGE POLISHED STEEL|23|396 +Brand#32|MEDIUM BURNISHED TIN|45|396 +Brand#32|PROMO BRUSHED NICKEL|49|396 +Brand#32|PROMO BURNISHED NICKEL|14|396 +Brand#32|PROMO BURNISHED NICKEL|36|396 +Brand#32|PROMO BURNISHED TIN|19|396 +Brand#32|PROMO PLATED NICKEL|9|396 +Brand#32|SMALL BURNISHED BRASS|14|396 +Brand#32|SMALL PLATED BRASS|9|396 +Brand#32|SMALL PLATED COPPER|9|396 +Brand#32|SMALL PLATED STEEL|36|396 +Brand#32|SMALL POLISHED BRASS|9|396 +Brand#32|SMALL POLISHED TIN|19|396 +Brand#32|STANDARD BRUSHED BRASS|3|396 +Brand#32|STANDARD BRUSHED COPPER|3|396 +Brand#32|STANDARD BRUSHED NICKEL|19|396 +Brand#32|STANDARD BURNISHED STEEL|3|396 +Brand#32|STANDARD PLATED STEEL|3|396 +Brand#33|ECONOMY ANODIZED BRASS|19|396 +Brand#33|ECONOMY BRUSHED TIN|45|396 +Brand#33|ECONOMY PLATED COPPER|14|396 +Brand#33|ECONOMY PLATED TIN|9|396 +Brand#33|ECONOMY POLISHED TIN|36|396 +Brand#33|LARGE ANODIZED BRASS|14|396 +Brand#33|LARGE BRUSHED COPPER|3|396 +Brand#33|LARGE BRUSHED TIN|19|396 +Brand#33|LARGE BURNISHED COPPER|49|396 +Brand#33|LARGE POLISHED TIN|45|396 +Brand#33|MEDIUM ANODIZED STEEL|23|396 +Brand#33|MEDIUM BRUSHED COPPER|14|396 +Brand#33|MEDIUM PLATED COPPER|45|396 +Brand#33|MEDIUM PLATED NICKEL|49|396 +Brand#33|SMALL ANODIZED COPPER|23|396 +Brand#33|SMALL POLISHED NICKEL|45|396 +Brand#33|SMALL POLISHED STEEL|49|396 +Brand#33|SMALL POLISHED TIN|3|396 +Brand#33|STANDARD BRUSHED COPPER|45|396 +Brand#33|STANDARD PLATED COPPER|45|396 +Brand#33|STANDARD PLATED STEEL|49|396 +Brand#33|STANDARD PLATED TIN|19|396 +Brand#34|ECONOMY BRUSHED TIN|23|396 +Brand#34|ECONOMY BURNISHED COPPER|23|396 +Brand#34|ECONOMY BURNISHED COPPER|49|396 +Brand#34|ECONOMY PLATED NICKEL|49|396 +Brand#34|LARGE ANODIZED NICKEL|19|396 +Brand#34|LARGE BRUSHED NICKEL|36|396 +Brand#34|LARGE PLATED BRASS|45|396 +Brand#34|LARGE POLISHED TIN|14|396 +Brand#34|MEDIUM ANODIZED NICKEL|36|396 +Brand#34|MEDIUM ANODIZED TIN|19|396 +Brand#34|MEDIUM BRUSHED NICKEL|45|396 +Brand#34|MEDIUM BURNISHED COPPER|49|396 +Brand#34|SMALL ANODIZED BRASS|3|396 +Brand#34|SMALL PLATED STEEL|36|396 +Brand#34|SMALL PLATED TIN|19|396 +Brand#34|STANDARD ANODIZED STEEL|14|396 +Brand#34|STANDARD POLISHED NICKEL|49|396 +Brand#35|ECONOMY ANODIZED NICKEL|23|396 +Brand#35|ECONOMY BRUSHED BRASS|3|396 +Brand#35|ECONOMY BRUSHED STEEL|9|396 +Brand#35|ECONOMY BRUSHED TIN|23|396 +Brand#35|ECONOMY BURNISHED STEEL|14|396 +Brand#35|ECONOMY POLISHED NICKEL|14|396 +Brand#35|LARGE ANODIZED NICKEL|3|396 +Brand#35|LARGE ANODIZED STEEL|36|396 +Brand#35|LARGE ANODIZED TIN|36|396 +Brand#35|LARGE BRUSHED BRASS|49|396 +Brand#35|LARGE PLATED BRASS|3|396 +Brand#35|LARGE PLATED NICKEL|36|396 +Brand#35|LARGE PLATED STEEL|9|396 +Brand#35|LARGE POLISHED NICKEL|23|396 +Brand#35|LARGE POLISHED STEEL|23|396 +Brand#35|MEDIUM PLATED BRASS|14|396 +Brand#35|PROMO ANODIZED STEEL|19|396 +Brand#35|PROMO BURNISHED BRASS|36|396 +Brand#35|PROMO BURNISHED COPPER|9|396 +Brand#35|PROMO POLISHED STEEL|36|396 +Brand#35|SMALL ANODIZED BRASS|3|396 +Brand#35|SMALL BRUSHED NICKEL|45|396 +Brand#35|SMALL BURNISHED COPPER|9|396 +Brand#35|STANDARD ANODIZED TIN|45|396 +Brand#35|STANDARD BURNISHED NICKEL|9|396 +Brand#41|ECONOMY PLATED TIN|45|396 +Brand#41|ECONOMY POLISHED NICKEL|9|396 +Brand#41|LARGE BRUSHED NICKEL|9|396 +Brand#41|LARGE BURNISHED STEEL|19|396 +Brand#41|LARGE BURNISHED TIN|45|396 +Brand#41|LARGE POLISHED BRASS|23|396 +Brand#41|LARGE POLISHED NICKEL|45|396 +Brand#41|MEDIUM ANODIZED BRASS|45|396 +Brand#41|MEDIUM BRUSHED COPPER|36|396 +Brand#41|MEDIUM BURNISHED NICKEL|49|396 +Brand#41|MEDIUM PLATED COPPER|14|396 +Brand#41|PROMO BRUSHED TIN|3|396 +Brand#41|PROMO BURNISHED BRASS|3|396 +Brand#41|PROMO BURNISHED NICKEL|3|396 +Brand#41|PROMO BURNISHED STEEL|45|396 +Brand#41|PROMO PLATED COPPER|14|396 +Brand#41|PROMO POLISHED BRASS|19|396 +Brand#41|PROMO POLISHED TIN|49|396 +Brand#41|SMALL BRUSHED COPPER|9|396 +Brand#41|SMALL BURNISHED TIN|14|396 +Brand#41|STANDARD ANODIZED BRASS|49|396 +Brand#41|STANDARD BURNISHED COPPER|14|396 +Brand#41|STANDARD BURNISHED STEEL|3|396 +Brand#41|STANDARD PLATED COPPER|36|396 +Brand#41|STANDARD PLATED STEEL|14|396 +Brand#41|STANDARD PLATED STEEL|45|396 +Brand#41|STANDARD PLATED TIN|36|396 +Brand#42|ECONOMY ANODIZED NICKEL|23|396 +Brand#42|ECONOMY BRUSHED STEEL|14|396 +Brand#42|ECONOMY BRUSHED TIN|23|396 +Brand#42|ECONOMY BURNISHED STEEL|9|396 +Brand#42|ECONOMY BURNISHED TIN|9|396 +Brand#42|ECONOMY PLATED STEEL|9|396 +Brand#42|ECONOMY POLISHED BRASS|14|396 +Brand#42|LARGE BRUSHED COPPER|49|396 +Brand#42|LARGE BURNISHED BRASS|45|396 +Brand#42|LARGE POLISHED COPPER|14|396 +Brand#42|LARGE POLISHED NICKEL|36|396 +Brand#42|MEDIUM ANODIZED COPPER|23|396 +Brand#42|MEDIUM PLATED STEEL|14|396 +Brand#42|MEDIUM PLATED TIN|45|396 +Brand#42|PROMO ANODIZED COPPER|36|396 +Brand#42|PROMO BRUSHED COPPER|49|396 +Brand#42|PROMO BURNISHED COPPER|36|396 +Brand#42|PROMO PLATED STEEL|36|396 +Brand#42|PROMO POLISHED NICKEL|14|396 +Brand#42|SMALL BRUSHED STEEL|3|396 +Brand#42|SMALL POLISHED TIN|9|396 +Brand#42|STANDARD POLISHED TIN|36|396 +Brand#42|STANDARD POLISHED TIN|49|396 +Brand#43|ECONOMY ANODIZED BRASS|3|396 +Brand#43|ECONOMY PLATED STEEL|14|396 +Brand#43|LARGE BURNISHED BRASS|36|396 +Brand#43|LARGE BURNISHED COPPER|19|396 +Brand#43|LARGE BURNISHED NICKEL|3|396 +Brand#43|MEDIUM ANODIZED TIN|36|396 +Brand#43|MEDIUM BURNISHED TIN|14|396 +Brand#43|MEDIUM PLATED COPPER|14|396 +Brand#43|PROMO ANODIZED TIN|49|396 +Brand#43|PROMO BRUSHED NICKEL|9|396 +Brand#43|PROMO BRUSHED STEEL|49|396 +Brand#43|PROMO BURNISHED TIN|36|396 +Brand#43|PROMO POLISHED TIN|23|396 +Brand#43|SMALL ANODIZED COPPER|3|396 +Brand#43|SMALL ANODIZED COPPER|36|396 +Brand#43|SMALL ANODIZED TIN|14|396 +Brand#43|SMALL BRUSHED COPPER|36|396 +Brand#43|SMALL PLATED COPPER|23|396 +Brand#43|SMALL PLATED TIN|3|396 +Brand#43|SMALL POLISHED STEEL|14|396 +Brand#43|STANDARD ANODIZED COPPER|49|396 +Brand#43|STANDARD ANODIZED NICKEL|36|396 +Brand#43|STANDARD BURNISHED BRASS|14|396 +Brand#43|STANDARD POLISHED NICKEL|23|396 +Brand#44|ECONOMY ANODIZED NICKEL|9|396 +Brand#44|ECONOMY ANODIZED TIN|3|396 +Brand#44|ECONOMY ANODIZED TIN|19|396 +Brand#44|ECONOMY BURNISHED TIN|45|396 +Brand#44|ECONOMY POLISHED NICKEL|36|396 +Brand#44|ECONOMY POLISHED STEEL|45|396 +Brand#44|LARGE BRUSHED STEEL|36|396 +Brand#44|LARGE PLATED COPPER|49|396 +Brand#44|LARGE POLISHED COPPER|36|396 +Brand#44|LARGE POLISHED STEEL|36|396 +Brand#44|MEDIUM ANODIZED STEEL|14|396 +Brand#44|MEDIUM PLATED COPPER|49|396 +Brand#44|PROMO ANODIZED BRASS|23|396 +Brand#44|PROMO BRUSHED BRASS|23|396 +Brand#44|PROMO BRUSHED TIN|3|396 +Brand#44|PROMO BURNISHED BRASS|23|396 +Brand#44|PROMO BURNISHED STEEL|14|396 +Brand#44|PROMO PLATED COPPER|45|396 +Brand#44|PROMO POLISHED BRASS|14|396 +Brand#44|SMALL BRUSHED STEEL|23|396 +Brand#44|SMALL BURNISHED TIN|14|396 +Brand#44|SMALL BURNISHED TIN|23|396 +Brand#44|SMALL PLATED COPPER|19|396 +Brand#44|SMALL PLATED NICKEL|3|396 +Brand#44|SMALL PLATED NICKEL|23|396 +Brand#44|SMALL POLISHED NICKEL|3|396 +Brand#44|STANDARD ANODIZED STEEL|36|396 +Brand#44|STANDARD ANODIZED TIN|9|396 +Brand#44|STANDARD BRUSHED BRASS|9|396 +Brand#44|STANDARD POLISHED STEEL|36|396 +Brand#51|ECONOMY BRUSHED STEEL|9|396 +Brand#51|ECONOMY BURNISHED COPPER|49|396 +Brand#51|ECONOMY BURNISHED NICKEL|3|396 +Brand#51|ECONOMY PLATED COPPER|45|396 +Brand#51|ECONOMY PLATED STEEL|19|396 +Brand#51|ECONOMY POLISHED BRASS|49|396 +Brand#51|LARGE ANODIZED COPPER|14|396 +Brand#51|LARGE BURNISHED COPPER|14|396 +Brand#51|LARGE BURNISHED COPPER|23|396 +Brand#51|LARGE POLISHED STEEL|23|396 +Brand#51|MEDIUM ANODIZED STEEL|49|396 +Brand#51|MEDIUM BRUSHED NICKEL|3|396 +Brand#51|MEDIUM BRUSHED TIN|19|396 +Brand#51|MEDIUM PLATED COPPER|3|396 +Brand#51|PROMO ANODIZED BRASS|23|396 +Brand#51|PROMO ANODIZED NICKEL|19|396 +Brand#51|PROMO ANODIZED TIN|3|396 +Brand#51|PROMO BRUSHED NICKEL|36|396 +Brand#51|PROMO PLATED TIN|36|396 +Brand#51|PROMO POLISHED COPPER|36|396 +Brand#51|SMALL BURNISHED STEEL|49|396 +Brand#51|STANDARD ANODIZED TIN|3|396 +Brand#51|STANDARD BURNISHED COPPER|23|396 +Brand#51|STANDARD BURNISHED NICKEL|19|396 +Brand#52|ECONOMY ANODIZED NICKEL|9|396 +Brand#52|ECONOMY ANODIZED NICKEL|23|396 +Brand#52|ECONOMY BURNISHED STEEL|3|396 +Brand#52|ECONOMY PLATED BRASS|14|396 +Brand#52|ECONOMY PLATED NICKEL|23|396 +Brand#52|ECONOMY POLISHED NICKEL|9|396 +Brand#52|LARGE ANODIZED NICKEL|3|396 +Brand#52|LARGE ANODIZED STEEL|9|396 +Brand#52|LARGE ANODIZED TIN|3|396 +Brand#52|LARGE BURNISHED TIN|45|396 +Brand#52|LARGE POLISHED COPPER|49|396 +Brand#52|LARGE POLISHED NICKEL|19|396 +Brand#52|LARGE POLISHED NICKEL|49|396 +Brand#52|MEDIUM BRUSHED BRASS|14|396 +Brand#52|MEDIUM BRUSHED BRASS|19|396 +Brand#52|MEDIUM BURNISHED NICKEL|14|396 +Brand#52|PROMO BRUSHED NICKEL|3|396 +Brand#52|PROMO BRUSHED STEEL|36|396 +Brand#52|PROMO BURNISHED NICKEL|3|396 +Brand#52|PROMO POLISHED COPPER|3|396 +Brand#52|SMALL ANODIZED NICKEL|36|396 +Brand#52|SMALL BRUSHED COPPER|19|396 +Brand#52|SMALL BURNISHED COPPER|3|396 +Brand#52|SMALL PLATED COPPER|19|396 +Brand#52|STANDARD ANODIZED COPPER|9|396 +Brand#52|STANDARD PLATED STEEL|14|396 +Brand#52|STANDARD POLISHED BRASS|49|396 +Brand#52|STANDARD POLISHED STEEL|14|396 +Brand#52|STANDARD POLISHED STEEL|19|396 +Brand#53|ECONOMY ANODIZED STEEL|9|396 +Brand#53|ECONOMY ANODIZED TIN|19|396 +Brand#53|ECONOMY BRUSHED COPPER|36|396 +Brand#53|ECONOMY BRUSHED TIN|23|396 +Brand#53|ECONOMY BURNISHED COPPER|36|396 +Brand#53|ECONOMY POLISHED BRASS|14|396 +Brand#53|ECONOMY POLISHED TIN|49|396 +Brand#53|LARGE ANODIZED BRASS|3|396 +Brand#53|LARGE BRUSHED STEEL|3|396 +Brand#53|LARGE BURNISHED BRASS|3|396 +Brand#53|LARGE PLATED COPPER|36|396 +Brand#53|LARGE POLISHED BRASS|23|396 +Brand#53|LARGE POLISHED NICKEL|9|396 +Brand#53|MEDIUM BRUSHED NICKEL|19|396 +Brand#53|MEDIUM BRUSHED NICKEL|45|396 +Brand#53|MEDIUM BRUSHED STEEL|9|396 +Brand#53|MEDIUM BURNISHED NICKEL|49|396 +Brand#53|MEDIUM BURNISHED STEEL|23|396 +Brand#53|MEDIUM PLATED BRASS|14|396 +Brand#53|PROMO ANODIZED TIN|3|396 +Brand#53|PROMO BRUSHED COPPER|45|396 +Brand#53|PROMO BURNISHED TIN|36|396 +Brand#53|SMALL ANODIZED NICKEL|9|396 +Brand#53|SMALL BRUSHED COPPER|36|396 +Brand#53|SMALL BRUSHED NICKEL|14|396 +Brand#53|SMALL BRUSHED STEEL|3|396 +Brand#53|SMALL PLATED TIN|3|396 +Brand#53|STANDARD BRUSHED COPPER|19|396 +Brand#53|STANDARD BRUSHED NICKEL|45|396 +Brand#53|STANDARD BRUSHED NICKEL|49|396 +Brand#53|STANDARD BURNISHED NICKEL|36|396 +Brand#53|STANDARD BURNISHED STEEL|9|396 +Brand#53|STANDARD PLATED STEEL|9|396 +Brand#53|STANDARD POLISHED BRASS|14|396 +Brand#53|STANDARD POLISHED TIN|49|396 +Brand#54|ECONOMY BRUSHED BRASS|19|396 +Brand#54|ECONOMY BRUSHED STEEL|36|396 +Brand#54|ECONOMY BURNISHED STEEL|49|396 +Brand#54|ECONOMY POLISHED NICKEL|36|396 +Brand#54|ECONOMY POLISHED STEEL|19|396 +Brand#54|ECONOMY POLISHED TIN|9|396 +Brand#54|LARGE ANODIZED TIN|19|396 +Brand#54|LARGE BRUSHED NICKEL|36|396 +Brand#54|LARGE BURNISHED NICKEL|36|396 +Brand#54|LARGE PLATED COPPER|19|396 +Brand#54|MEDIUM BRUSHED BRASS|49|396 +Brand#54|MEDIUM BRUSHED STEEL|23|396 +Brand#54|MEDIUM BURNISHED COPPER|19|396 +Brand#54|MEDIUM PLATED BRASS|36|396 +Brand#54|PROMO BRUSHED COPPER|14|396 +Brand#54|PROMO BRUSHED COPPER|19|396 +Brand#54|PROMO POLISHED NICKEL|3|396 +Brand#54|SMALL BURNISHED COPPER|36|396 +Brand#54|SMALL BURNISHED STEEL|36|396 +Brand#54|SMALL POLISHED BRASS|36|396 +Brand#54|STANDARD ANODIZED NICKEL|36|396 +Brand#54|STANDARD BRUSHED TIN|19|396 +Brand#54|STANDARD BURNISHED COPPER|45|396 +Brand#54|STANDARD PLATED COPPER|49|396 +Brand#54|STANDARD PLATED TIN|9|396 +Brand#55|ECONOMY BRUSHED BRASS|9|396 +Brand#55|ECONOMY PLATED STEEL|45|396 +Brand#55|LARGE ANODIZED NICKEL|3|396 +Brand#55|LARGE BRUSHED COPPER|49|396 +Brand#55|LARGE BURNISHED BRASS|45|396 +Brand#55|LARGE BURNISHED NICKEL|14|396 +Brand#55|LARGE BURNISHED NICKEL|36|396 +Brand#55|LARGE BURNISHED STEEL|14|396 +Brand#55|MEDIUM BRUSHED TIN|9|396 +Brand#55|MEDIUM BURNISHED COPPER|9|396 +Brand#55|MEDIUM BURNISHED STEEL|19|396 +Brand#55|PROMO ANODIZED TIN|14|396 +Brand#55|PROMO BRUSHED NICKEL|49|396 +Brand#55|PROMO BRUSHED STEEL|45|396 +Brand#55|PROMO BURNISHED BRASS|45|396 +Brand#55|SMALL ANODIZED COPPER|14|396 +Brand#55|SMALL BRUSHED BRASS|23|396 +Brand#55|SMALL BURNISHED STEEL|14|396 +Brand#55|SMALL PLATED TIN|3|396 +Brand#55|STANDARD ANODIZED NICKEL|45|396 +Brand#55|STANDARD BURNISHED STEEL|19|396 +Brand#55|STANDARD PLATED TIN|49|396 +Brand#55|STANDARD POLISHED BRASS|45|396 +Brand#55|STANDARD POLISHED NICKEL|23|396 +Brand#55|STANDARD POLISHED TIN|3|396 +Brand#11|ECONOMY BRUSHED STEEL|36|395 +Brand#11|ECONOMY BURNISHED NICKEL|14|395 +Brand#11|LARGE BRUSHED TIN|36|395 +Brand#11|PROMO ANODIZED STEEL|49|395 +Brand#11|PROMO ANODIZED TIN|19|395 +Brand#11|PROMO BURNISHED TIN|14|395 +Brand#11|PROMO PLATED COPPER|14|395 +Brand#11|SMALL BRUSHED TIN|19|395 +Brand#11|SMALL PLATED TIN|3|395 +Brand#11|SMALL POLISHED COPPER|23|395 +Brand#12|SMALL BRUSHED COPPER|14|395 +Brand#12|SMALL BURNISHED BRASS|36|395 +Brand#12|SMALL BURNISHED NICKEL|14|395 +Brand#13|ECONOMY ANODIZED COPPER|23|395 +Brand#13|ECONOMY ANODIZED NICKEL|49|395 +Brand#13|ECONOMY ANODIZED STEEL|9|395 +Brand#13|LARGE POLISHED NICKEL|9|395 +Brand#13|MEDIUM ANODIZED TIN|49|395 +Brand#13|PROMO PLATED STEEL|9|395 +Brand#13|PROMO POLISHED STEEL|45|395 +Brand#13|SMALL ANODIZED COPPER|9|395 +Brand#13|SMALL POLISHED NICKEL|45|395 +Brand#13|SMALL POLISHED NICKEL|49|395 +Brand#13|STANDARD BURNISHED BRASS|3|395 +Brand#13|STANDARD PLATED NICKEL|14|395 +Brand#14|ECONOMY POLISHED TIN|3|395 +Brand#14|LARGE BURNISHED NICKEL|9|395 +Brand#14|MEDIUM BRUSHED TIN|3|395 +Brand#14|SMALL ANODIZED COPPER|45|395 +Brand#14|STANDARD PLATED COPPER|9|395 +Brand#15|LARGE BURNISHED TIN|19|395 +Brand#15|MEDIUM BRUSHED COPPER|49|395 +Brand#15|PROMO ANODIZED STEEL|36|395 +Brand#15|PROMO ANODIZED TIN|49|395 +Brand#15|PROMO PLATED STEEL|3|395 +Brand#15|PROMO POLISHED STEEL|23|395 +Brand#15|SMALL BURNISHED BRASS|23|395 +Brand#15|SMALL BURNISHED STEEL|45|395 +Brand#15|STANDARD BURNISHED BRASS|45|395 +Brand#15|STANDARD POLISHED TIN|49|395 +Brand#21|LARGE PLATED NICKEL|3|395 +Brand#21|PROMO POLISHED COPPER|45|395 +Brand#21|PROMO POLISHED COPPER|49|395 +Brand#21|SMALL ANODIZED NICKEL|23|395 +Brand#21|SMALL ANODIZED STEEL|36|395 +Brand#21|SMALL PLATED BRASS|14|395 +Brand#22|MEDIUM PLATED BRASS|19|395 +Brand#22|PROMO POLISHED NICKEL|14|395 +Brand#22|SMALL BURNISHED STEEL|36|395 +Brand#23|LARGE POLISHED COPPER|9|395 +Brand#23|MEDIUM ANODIZED COPPER|23|395 +Brand#23|MEDIUM BURNISHED STEEL|36|395 +Brand#23|MEDIUM PLATED COPPER|36|395 +Brand#23|MEDIUM PLATED STEEL|14|395 +Brand#23|PROMO ANODIZED COPPER|49|395 +Brand#23|PROMO BRUSHED COPPER|14|395 +Brand#23|PROMO BURNISHED STEEL|23|395 +Brand#23|SMALL ANODIZED STEEL|14|395 +Brand#23|SMALL BURNISHED BRASS|36|395 +Brand#23|SMALL BURNISHED COPPER|45|395 +Brand#23|STANDARD BRUSHED TIN|19|395 +Brand#23|STANDARD PLATED TIN|36|395 +Brand#24|ECONOMY BURNISHED STEEL|49|395 +Brand#24|LARGE ANODIZED COPPER|23|395 +Brand#24|LARGE BURNISHED TIN|49|395 +Brand#24|MEDIUM ANODIZED COPPER|49|395 +Brand#24|MEDIUM BURNISHED TIN|49|395 +Brand#24|SMALL BRUSHED TIN|14|395 +Brand#24|SMALL POLISHED NICKEL|36|395 +Brand#24|STANDARD BRUSHED NICKEL|36|395 +Brand#25|ECONOMY ANODIZED STEEL|45|395 +Brand#25|ECONOMY BURNISHED BRASS|9|395 +Brand#25|ECONOMY BURNISHED TIN|14|395 +Brand#25|LARGE BRUSHED COPPER|9|395 +Brand#25|LARGE BRUSHED COPPER|49|395 +Brand#25|LARGE BURNISHED TIN|23|395 +Brand#25|SMALL ANODIZED BRASS|23|395 +Brand#25|SMALL BRUSHED BRASS|45|395 +Brand#31|LARGE BURNISHED STEEL|36|395 +Brand#31|LARGE PLATED STEEL|3|395 +Brand#31|MEDIUM ANODIZED COPPER|23|395 +Brand#31|PROMO BRUSHED COPPER|49|395 +Brand#31|PROMO PLATED COPPER|9|395 +Brand#31|SMALL BRUSHED COPPER|45|395 +Brand#31|SMALL PLATED TIN|19|395 +Brand#31|SMALL POLISHED NICKEL|23|395 +Brand#31|SMALL POLISHED TIN|19|395 +Brand#31|STANDARD BRUSHED TIN|14|395 +Brand#31|STANDARD PLATED TIN|3|395 +Brand#32|ECONOMY ANODIZED NICKEL|9|395 +Brand#32|LARGE BRUSHED COPPER|45|395 +Brand#32|LARGE BRUSHED NICKEL|49|395 +Brand#32|LARGE PLATED COPPER|36|395 +Brand#32|LARGE POLISHED NICKEL|49|395 +Brand#32|MEDIUM BRUSHED NICKEL|45|395 +Brand#32|PROMO ANODIZED TIN|3|395 +Brand#32|SMALL PLATED TIN|19|395 +Brand#33|LARGE PLATED NICKEL|23|395 +Brand#33|MEDIUM BURNISHED NICKEL|3|395 +Brand#33|PROMO BRUSHED COPPER|45|395 +Brand#33|PROMO BURNISHED COPPER|19|395 +Brand#33|STANDARD POLISHED COPPER|3|395 +Brand#34|ECONOMY POLISHED COPPER|9|395 +Brand#34|LARGE PLATED STEEL|3|395 +Brand#34|SMALL BURNISHED STEEL|23|395 +Brand#34|STANDARD ANODIZED TIN|23|395 +Brand#34|STANDARD BURNISHED BRASS|9|395 +Brand#35|ECONOMY POLISHED NICKEL|3|395 +Brand#35|LARGE BRUSHED BRASS|19|395 +Brand#35|MEDIUM ANODIZED COPPER|36|395 +Brand#35|MEDIUM BRUSHED NICKEL|36|395 +Brand#35|PROMO BRUSHED TIN|49|395 +Brand#35|STANDARD POLISHED STEEL|23|395 +Brand#41|ECONOMY ANODIZED COPPER|23|395 +Brand#41|LARGE POLISHED COPPER|19|395 +Brand#41|PROMO BRUSHED STEEL|14|395 +Brand#41|PROMO BURNISHED BRASS|36|395 +Brand#41|SMALL ANODIZED COPPER|23|395 +Brand#41|STANDARD ANODIZED NICKEL|45|395 +Brand#41|STANDARD BRUSHED NICKEL|19|395 +Brand#41|STANDARD POLISHED BRASS|3|395 +Brand#42|ECONOMY POLISHED COPPER|19|395 +Brand#43|ECONOMY BRUSHED NICKEL|3|395 +Brand#43|MEDIUM BURNISHED COPPER|19|395 +Brand#43|MEDIUM PLATED NICKEL|3|395 +Brand#43|MEDIUM PLATED NICKEL|9|395 +Brand#43|PROMO ANODIZED STEEL|14|395 +Brand#43|PROMO PLATED BRASS|23|395 +Brand#43|SMALL BURNISHED BRASS|23|395 +Brand#43|SMALL BURNISHED COPPER|45|395 +Brand#43|SMALL POLISHED TIN|49|395 +Brand#43|STANDARD BURNISHED NICKEL|9|395 +Brand#44|ECONOMY BRUSHED COPPER|3|395 +Brand#44|ECONOMY BRUSHED NICKEL|14|395 +Brand#44|ECONOMY BURNISHED COPPER|36|395 +Brand#44|ECONOMY BURNISHED STEEL|45|395 +Brand#44|ECONOMY PLATED STEEL|3|395 +Brand#44|LARGE BURNISHED NICKEL|19|395 +Brand#44|LARGE BURNISHED TIN|19|395 +Brand#44|MEDIUM ANODIZED COPPER|23|395 +Brand#44|MEDIUM ANODIZED NICKEL|49|395 +Brand#44|MEDIUM BRUSHED COPPER|49|395 +Brand#51|ECONOMY ANODIZED COPPER|9|395 +Brand#51|MEDIUM BURNISHED BRASS|19|395 +Brand#51|PROMO BURNISHED NICKEL|45|395 +Brand#51|SMALL ANODIZED TIN|3|395 +Brand#51|STANDARD BURNISHED BRASS|3|395 +Brand#52|ECONOMY POLISHED COPPER|14|395 +Brand#52|LARGE ANODIZED NICKEL|14|395 +Brand#52|LARGE POLISHED COPPER|23|395 +Brand#52|MEDIUM ANODIZED BRASS|3|395 +Brand#52|MEDIUM BURNISHED STEEL|45|395 +Brand#52|PROMO BRUSHED COPPER|36|395 +Brand#52|PROMO POLISHED BRASS|19|395 +Brand#52|SMALL BURNISHED TIN|36|395 +Brand#52|SMALL POLISHED TIN|36|395 +Brand#53|ECONOMY BRUSHED NICKEL|19|395 +Brand#53|ECONOMY POLISHED COPPER|9|395 +Brand#53|LARGE ANODIZED NICKEL|14|395 +Brand#53|LARGE POLISHED COPPER|3|395 +Brand#53|PROMO BURNISHED STEEL|45|395 +Brand#53|SMALL BRUSHED COPPER|49|395 +Brand#53|SMALL BURNISHED STEEL|36|395 +Brand#53|STANDARD BURNISHED COPPER|9|395 +Brand#53|STANDARD BURNISHED STEEL|45|395 +Brand#54|LARGE BURNISHED TIN|23|395 +Brand#54|PROMO ANODIZED STEEL|19|395 +Brand#54|STANDARD BURNISHED COPPER|19|395 +Brand#54|STANDARD BURNISHED TIN|14|395 +Brand#55|ECONOMY PLATED NICKEL|23|395 +Brand#55|LARGE ANODIZED BRASS|3|395 +Brand#55|LARGE BRUSHED COPPER|19|395 +Brand#55|LARGE BRUSHED NICKEL|9|395 +Brand#55|MEDIUM BURNISHED BRASS|36|395 +Brand#55|MEDIUM PLATED NICKEL|9|395 +Brand#55|PROMO POLISHED NICKEL|9|395 +Brand#55|SMALL PLATED COPPER|36|395 +Brand#55|SMALL PLATED TIN|19|395 +Brand#11|LARGE BRUSHED NICKEL|36|394 +Brand#11|STANDARD ANODIZED TIN|14|394 +Brand#12|PROMO ANODIZED STEEL|23|394 +Brand#15|ECONOMY PLATED STEEL|36|394 +Brand#15|PROMO BURNISHED NICKEL|14|394 +Brand#21|ECONOMY BURNISHED COPPER|19|394 +Brand#23|LARGE BRUSHED TIN|3|394 +Brand#23|PROMO BURNISHED BRASS|49|394 +Brand#25|PROMO ANODIZED NICKEL|19|394 +Brand#33|PROMO BRUSHED TIN|19|394 +Brand#34|STANDARD BRUSHED COPPER|23|394 +Brand#35|LARGE BURNISHED BRASS|23|394 +Brand#35|STANDARD BRUSHED COPPER|9|394 +Brand#41|STANDARD ANODIZED COPPER|3|394 +Brand#42|PROMO PLATED STEEL|3|394 +Brand#42|STANDARD BURNISHED BRASS|45|394 +Brand#43|MEDIUM BRUSHED NICKEL|36|394 +Brand#43|SMALL BURNISHED BRASS|36|394 +Brand#44|MEDIUM ANODIZED NICKEL|45|394 +Brand#51|PROMO BRUSHED BRASS|45|394 +Brand#53|PROMO BRUSHED BRASS|14|394 +Brand#53|SMALL POLISHED BRASS|49|394 +Brand#55|SMALL POLISHED STEEL|14|394 +Brand#21|SMALL BURNISHED NICKEL|23|393 +Brand#32|ECONOMY POLISHED BRASS|14|393 +Brand#52|SMALL POLISHED COPPER|23|393 +Brand#11|ECONOMY BRUSHED NICKEL|45|392 +Brand#11|ECONOMY BRUSHED STEEL|3|392 +Brand#11|ECONOMY BRUSHED TIN|36|392 +Brand#11|ECONOMY POLISHED BRASS|23|392 +Brand#11|LARGE BRUSHED BRASS|3|392 +Brand#11|LARGE BRUSHED NICKEL|23|392 +Brand#11|LARGE BURNISHED COPPER|49|392 +Brand#11|LARGE BURNISHED TIN|9|392 +Brand#11|LARGE PLATED BRASS|23|392 +Brand#11|LARGE POLISHED COPPER|9|392 +Brand#11|MEDIUM BRUSHED BRASS|9|392 +Brand#11|MEDIUM BRUSHED COPPER|14|392 +Brand#11|MEDIUM PLATED BRASS|49|392 +Brand#11|PROMO ANODIZED NICKEL|23|392 +Brand#11|PROMO ANODIZED STEEL|36|392 +Brand#11|PROMO ANODIZED TIN|9|392 +Brand#11|PROMO ANODIZED TIN|45|392 +Brand#11|PROMO BURNISHED BRASS|19|392 +Brand#11|SMALL ANODIZED NICKEL|36|392 +Brand#11|SMALL BRUSHED BRASS|49|392 +Brand#11|SMALL POLISHED BRASS|9|392 +Brand#11|STANDARD ANODIZED BRASS|9|392 +Brand#11|STANDARD ANODIZED COPPER|9|392 +Brand#11|STANDARD ANODIZED STEEL|19|392 +Brand#11|STANDARD ANODIZED STEEL|36|392 +Brand#11|STANDARD ANODIZED STEEL|49|392 +Brand#11|STANDARD BRUSHED NICKEL|9|392 +Brand#11|STANDARD PLATED NICKEL|9|392 +Brand#12|ECONOMY ANODIZED TIN|3|392 +Brand#12|ECONOMY BRUSHED STEEL|49|392 +Brand#12|ECONOMY PLATED TIN|49|392 +Brand#12|LARGE BURNISHED NICKEL|45|392 +Brand#12|LARGE POLISHED COPPER|19|392 +Brand#12|MEDIUM ANODIZED STEEL|3|392 +Brand#12|MEDIUM BRUSHED BRASS|14|392 +Brand#12|MEDIUM PLATED STEEL|45|392 +Brand#12|PROMO BRUSHED BRASS|36|392 +Brand#12|PROMO BRUSHED BRASS|49|392 +Brand#12|PROMO BRUSHED STEEL|36|392 +Brand#12|PROMO BURNISHED BRASS|14|392 +Brand#12|PROMO BURNISHED TIN|9|392 +Brand#12|PROMO POLISHED COPPER|36|392 +Brand#12|PROMO POLISHED NICKEL|9|392 +Brand#12|SMALL BRUSHED NICKEL|14|392 +Brand#12|SMALL BRUSHED STEEL|36|392 +Brand#12|SMALL BURNISHED STEEL|49|392 +Brand#12|STANDARD ANODIZED STEEL|23|392 +Brand#12|STANDARD BURNISHED BRASS|14|392 +Brand#12|STANDARD PLATED BRASS|23|392 +Brand#12|STANDARD POLISHED COPPER|3|392 +Brand#12|STANDARD POLISHED TIN|49|392 +Brand#13|ECONOMY ANODIZED TIN|49|392 +Brand#13|ECONOMY BRUSHED TIN|9|392 +Brand#13|ECONOMY POLISHED NICKEL|19|392 +Brand#13|ECONOMY POLISHED NICKEL|49|392 +Brand#13|ECONOMY POLISHED TIN|19|392 +Brand#13|LARGE ANODIZED COPPER|36|392 +Brand#13|LARGE ANODIZED TIN|14|392 +Brand#13|LARGE POLISHED STEEL|9|392 +Brand#13|MEDIUM ANODIZED COPPER|14|392 +Brand#13|MEDIUM BRUSHED NICKEL|19|392 +Brand#13|PROMO BRUSHED STEEL|49|392 +Brand#13|PROMO BRUSHED TIN|14|392 +Brand#13|PROMO PLATED COPPER|23|392 +Brand#13|SMALL BRUSHED STEEL|9|392 +Brand#13|SMALL POLISHED BRASS|3|392 +Brand#13|SMALL POLISHED STEEL|9|392 +Brand#13|STANDARD ANODIZED BRASS|19|392 +Brand#13|STANDARD ANODIZED TIN|3|392 +Brand#13|STANDARD ANODIZED TIN|23|392 +Brand#13|STANDARD BURNISHED BRASS|49|392 +Brand#14|ECONOMY ANODIZED BRASS|3|392 +Brand#14|ECONOMY ANODIZED STEEL|9|392 +Brand#14|ECONOMY BRUSHED BRASS|9|392 +Brand#14|ECONOMY BRUSHED STEEL|9|392 +Brand#14|ECONOMY PLATED NICKEL|23|392 +Brand#14|ECONOMY POLISHED NICKEL|9|392 +Brand#14|LARGE BRUSHED NICKEL|9|392 +Brand#14|LARGE BURNISHED NICKEL|3|392 +Brand#14|LARGE POLISHED COPPER|49|392 +Brand#14|MEDIUM BRUSHED COPPER|3|392 +Brand#14|PROMO BRUSHED TIN|9|392 +Brand#14|PROMO BURNISHED COPPER|9|392 +Brand#14|PROMO PLATED BRASS|36|392 +Brand#14|PROMO PLATED COPPER|19|392 +Brand#14|PROMO PLATED TIN|23|392 +Brand#14|PROMO POLISHED STEEL|3|392 +Brand#14|SMALL BURNISHED BRASS|49|392 +Brand#14|STANDARD ANODIZED COPPER|19|392 +Brand#14|STANDARD ANODIZED TIN|23|392 +Brand#14|STANDARD BRUSHED COPPER|45|392 +Brand#14|STANDARD BRUSHED NICKEL|9|392 +Brand#14|STANDARD BRUSHED TIN|14|392 +Brand#14|STANDARD BURNISHED TIN|36|392 +Brand#14|STANDARD PLATED NICKEL|45|392 +Brand#15|ECONOMY ANODIZED COPPER|14|392 +Brand#15|ECONOMY BURNISHED COPPER|3|392 +Brand#15|ECONOMY BURNISHED TIN|3|392 +Brand#15|ECONOMY PLATED NICKEL|23|392 +Brand#15|ECONOMY POLISHED NICKEL|14|392 +Brand#15|LARGE PLATED NICKEL|19|392 +Brand#15|LARGE POLISHED STEEL|49|392 +Brand#15|MEDIUM ANODIZED COPPER|19|392 +Brand#15|MEDIUM BURNISHED NICKEL|9|392 +Brand#15|PROMO ANODIZED COPPER|9|392 +Brand#15|PROMO ANODIZED NICKEL|14|392 +Brand#15|PROMO BRUSHED COPPER|3|392 +Brand#15|PROMO BURNISHED COPPER|14|392 +Brand#15|PROMO PLATED COPPER|45|392 +Brand#15|PROMO POLISHED NICKEL|19|392 +Brand#15|SMALL ANODIZED STEEL|9|392 +Brand#15|SMALL BURNISHED BRASS|19|392 +Brand#15|SMALL BURNISHED TIN|45|392 +Brand#15|SMALL POLISHED NICKEL|36|392 +Brand#15|SMALL POLISHED STEEL|14|392 +Brand#15|SMALL POLISHED TIN|23|392 +Brand#15|STANDARD ANODIZED BRASS|14|392 +Brand#15|STANDARD BRUSHED NICKEL|9|392 +Brand#15|STANDARD BRUSHED STEEL|49|392 +Brand#15|STANDARD PLATED COPPER|23|392 +Brand#15|STANDARD POLISHED COPPER|9|392 +Brand#15|STANDARD POLISHED STEEL|19|392 +Brand#21|ECONOMY ANODIZED STEEL|49|392 +Brand#21|ECONOMY BRUSHED NICKEL|19|392 +Brand#21|ECONOMY BRUSHED NICKEL|45|392 +Brand#21|ECONOMY BURNISHED TIN|19|392 +Brand#21|ECONOMY POLISHED TIN|36|392 +Brand#21|LARGE BRUSHED STEEL|14|392 +Brand#21|LARGE PLATED STEEL|14|392 +Brand#21|LARGE POLISHED BRASS|36|392 +Brand#21|MEDIUM ANODIZED NICKEL|23|392 +Brand#21|PROMO BURNISHED TIN|45|392 +Brand#21|PROMO PLATED STEEL|9|392 +Brand#21|PROMO POLISHED NICKEL|36|392 +Brand#21|SMALL BRUSHED COPPER|9|392 +Brand#21|SMALL BRUSHED STEEL|36|392 +Brand#21|SMALL BURNISHED STEEL|23|392 +Brand#21|SMALL PLATED STEEL|45|392 +Brand#21|STANDARD ANODIZED BRASS|36|392 +Brand#21|STANDARD ANODIZED COPPER|14|392 +Brand#21|STANDARD ANODIZED NICKEL|3|392 +Brand#21|STANDARD BURNISHED NICKEL|49|392 +Brand#21|STANDARD POLISHED BRASS|3|392 +Brand#22|ECONOMY BRUSHED COPPER|45|392 +Brand#22|ECONOMY BRUSHED TIN|9|392 +Brand#22|LARGE ANODIZED NICKEL|19|392 +Brand#22|LARGE BRUSHED BRASS|23|392 +Brand#22|LARGE BRUSHED NICKEL|19|392 +Brand#22|LARGE BURNISHED NICKEL|36|392 +Brand#22|LARGE PLATED NICKEL|45|392 +Brand#22|MEDIUM BURNISHED NICKEL|19|392 +Brand#22|MEDIUM BURNISHED STEEL|9|392 +Brand#22|PROMO ANODIZED BRASS|36|392 +Brand#22|PROMO BRUSHED COPPER|49|392 +Brand#22|PROMO BRUSHED NICKEL|36|392 +Brand#22|PROMO BRUSHED STEEL|23|392 +Brand#22|PROMO BURNISHED COPPER|49|392 +Brand#22|PROMO PLATED NICKEL|49|392 +Brand#22|PROMO POLISHED COPPER|14|392 +Brand#22|SMALL ANODIZED BRASS|3|392 +Brand#22|SMALL BRUSHED BRASS|23|392 +Brand#22|SMALL BRUSHED COPPER|45|392 +Brand#22|SMALL PLATED TIN|19|392 +Brand#22|SMALL POLISHED BRASS|9|392 +Brand#22|STANDARD ANODIZED STEEL|19|392 +Brand#22|STANDARD ANODIZED TIN|14|392 +Brand#22|STANDARD ANODIZED TIN|45|392 +Brand#22|STANDARD BRUSHED STEEL|14|392 +Brand#22|STANDARD BRUSHED TIN|19|392 +Brand#22|STANDARD POLISHED BRASS|9|392 +Brand#22|STANDARD POLISHED NICKEL|19|392 +Brand#23|ECONOMY ANODIZED STEEL|19|392 +Brand#23|ECONOMY BRUSHED NICKEL|3|392 +Brand#23|ECONOMY BRUSHED NICKEL|19|392 +Brand#23|ECONOMY BRUSHED NICKEL|23|392 +Brand#23|ECONOMY PLATED STEEL|19|392 +Brand#23|ECONOMY POLISHED COPPER|36|392 +Brand#23|ECONOMY POLISHED NICKEL|49|392 +Brand#23|ECONOMY POLISHED TIN|36|392 +Brand#23|LARGE ANODIZED COPPER|9|392 +Brand#23|LARGE ANODIZED STEEL|45|392 +Brand#23|LARGE BRUSHED BRASS|9|392 +Brand#23|LARGE BURNISHED COPPER|45|392 +Brand#23|LARGE PLATED COPPER|45|392 +Brand#23|LARGE PLATED COPPER|49|392 +Brand#23|LARGE PLATED NICKEL|9|392 +Brand#23|LARGE POLISHED COPPER|45|392 +Brand#23|MEDIUM BRUSHED NICKEL|45|392 +Brand#23|MEDIUM BRUSHED TIN|36|392 +Brand#23|MEDIUM BURNISHED BRASS|49|392 +Brand#23|MEDIUM BURNISHED NICKEL|49|392 +Brand#23|MEDIUM PLATED COPPER|9|392 +Brand#23|PROMO ANODIZED NICKEL|19|392 +Brand#23|PROMO BRUSHED BRASS|23|392 +Brand#23|PROMO PLATED BRASS|23|392 +Brand#23|PROMO PLATED TIN|36|392 +Brand#23|SMALL BRUSHED BRASS|9|392 +Brand#23|SMALL BRUSHED COPPER|9|392 +Brand#23|SMALL BRUSHED STEEL|9|392 +Brand#23|SMALL BURNISHED TIN|49|392 +Brand#23|SMALL PLATED STEEL|14|392 +Brand#23|SMALL POLISHED TIN|49|392 +Brand#23|STANDARD BRUSHED COPPER|14|392 +Brand#23|STANDARD PLATED TIN|45|392 +Brand#23|STANDARD POLISHED TIN|19|392 +Brand#24|ECONOMY BRUSHED BRASS|3|392 +Brand#24|ECONOMY BURNISHED COPPER|14|392 +Brand#24|ECONOMY PLATED COPPER|45|392 +Brand#24|ECONOMY PLATED TIN|23|392 +Brand#24|ECONOMY POLISHED COPPER|19|392 +Brand#24|ECONOMY POLISHED COPPER|49|392 +Brand#24|LARGE BRUSHED STEEL|3|392 +Brand#24|LARGE BURNISHED NICKEL|19|392 +Brand#24|LARGE BURNISHED TIN|23|392 +Brand#24|LARGE PLATED BRASS|19|392 +Brand#24|LARGE PLATED COPPER|3|392 +Brand#24|MEDIUM BRUSHED COPPER|49|392 +Brand#24|MEDIUM BRUSHED NICKEL|3|392 +Brand#24|PROMO ANODIZED BRASS|19|392 +Brand#24|PROMO ANODIZED COPPER|23|392 +Brand#24|PROMO ANODIZED NICKEL|9|392 +Brand#24|PROMO ANODIZED STEEL|14|392 +Brand#24|PROMO BRUSHED NICKEL|45|392 +Brand#24|PROMO PLATED TIN|3|392 +Brand#24|PROMO PLATED TIN|45|392 +Brand#24|SMALL PLATED COPPER|23|392 +Brand#24|STANDARD ANODIZED COPPER|3|392 +Brand#24|STANDARD BRUSHED TIN|36|392 +Brand#25|ECONOMY ANODIZED NICKEL|49|392 +Brand#25|ECONOMY BRUSHED STEEL|14|392 +Brand#25|ECONOMY BURNISHED NICKEL|9|392 +Brand#25|ECONOMY BURNISHED STEEL|36|392 +Brand#25|ECONOMY BURNISHED TIN|9|392 +Brand#25|ECONOMY POLISHED BRASS|3|392 +Brand#25|LARGE BRUSHED STEEL|23|392 +Brand#25|LARGE PLATED BRASS|23|392 +Brand#25|MEDIUM BRUSHED STEEL|14|392 +Brand#25|MEDIUM BURNISHED COPPER|45|392 +Brand#25|PROMO BRUSHED COPPER|9|392 +Brand#25|PROMO PLATED COPPER|49|392 +Brand#25|PROMO PLATED TIN|49|392 +Brand#25|SMALL BURNISHED COPPER|45|392 +Brand#25|SMALL PLATED STEEL|45|392 +Brand#25|SMALL PLATED TIN|9|392 +Brand#25|SMALL PLATED TIN|36|392 +Brand#25|SMALL POLISHED STEEL|19|392 +Brand#25|STANDARD BURNISHED TIN|45|392 +Brand#31|ECONOMY ANODIZED NICKEL|23|392 +Brand#31|ECONOMY PLATED NICKEL|36|392 +Brand#31|LARGE PLATED TIN|14|392 +Brand#31|MEDIUM ANODIZED COPPER|3|392 +Brand#31|MEDIUM ANODIZED TIN|14|392 +Brand#31|MEDIUM BRUSHED STEEL|3|392 +Brand#31|MEDIUM BRUSHED TIN|3|392 +Brand#31|PROMO PLATED BRASS|3|392 +Brand#31|PROMO PLATED TIN|14|392 +Brand#31|SMALL ANODIZED NICKEL|36|392 +Brand#31|SMALL PLATED TIN|3|392 +Brand#31|SMALL POLISHED BRASS|49|392 +Brand#31|STANDARD ANODIZED STEEL|9|392 +Brand#31|STANDARD BRUSHED BRASS|3|392 +Brand#31|STANDARD PLATED STEEL|14|392 +Brand#31|STANDARD PLATED TIN|36|392 +Brand#31|STANDARD POLISHED NICKEL|14|392 +Brand#31|STANDARD POLISHED STEEL|3|392 +Brand#32|ECONOMY ANODIZED COPPER|14|392 +Brand#32|ECONOMY BURNISHED BRASS|9|392 +Brand#32|ECONOMY BURNISHED BRASS|19|392 +Brand#32|ECONOMY BURNISHED TIN|45|392 +Brand#32|LARGE BRUSHED BRASS|45|392 +Brand#32|LARGE BRUSHED COPPER|19|392 +Brand#32|LARGE BURNISHED BRASS|9|392 +Brand#32|LARGE PLATED BRASS|19|392 +Brand#32|LARGE POLISHED NICKEL|23|392 +Brand#32|MEDIUM ANODIZED COPPER|19|392 +Brand#32|MEDIUM BURNISHED COPPER|14|392 +Brand#32|MEDIUM BURNISHED NICKEL|36|392 +Brand#32|MEDIUM PLATED TIN|23|392 +Brand#32|PROMO PLATED STEEL|3|392 +Brand#32|SMALL BURNISHED COPPER|3|392 +Brand#32|SMALL PLATED TIN|23|392 +Brand#32|STANDARD ANODIZED BRASS|49|392 +Brand#32|STANDARD ANODIZED COPPER|36|392 +Brand#32|STANDARD ANODIZED TIN|49|392 +Brand#33|ECONOMY BRUSHED BRASS|36|392 +Brand#33|ECONOMY BURNISHED COPPER|9|392 +Brand#33|ECONOMY PLATED STEEL|14|392 +Brand#33|LARGE ANODIZED STEEL|23|392 +Brand#33|LARGE ANODIZED TIN|49|392 +Brand#33|LARGE BRUSHED TIN|36|392 +Brand#33|LARGE BURNISHED TIN|3|392 +Brand#33|LARGE PLATED BRASS|14|392 +Brand#33|LARGE PLATED STEEL|49|392 +Brand#33|LARGE POLISHED NICKEL|14|392 +Brand#33|MEDIUM ANODIZED BRASS|36|392 +Brand#33|MEDIUM ANODIZED NICKEL|3|392 +Brand#33|MEDIUM BRUSHED NICKEL|3|392 +Brand#33|MEDIUM PLATED TIN|9|392 +Brand#33|PROMO POLISHED BRASS|36|392 +Brand#33|SMALL BRUSHED TIN|36|392 +Brand#33|SMALL PLATED COPPER|23|392 +Brand#33|STANDARD ANODIZED STEEL|49|392 +Brand#33|STANDARD BRUSHED BRASS|49|392 +Brand#33|STANDARD BURNISHED TIN|14|392 +Brand#33|STANDARD POLISHED NICKEL|14|392 +Brand#33|STANDARD POLISHED TIN|3|392 +Brand#33|STANDARD POLISHED TIN|19|392 +Brand#34|ECONOMY ANODIZED BRASS|45|392 +Brand#34|ECONOMY BURNISHED BRASS|49|392 +Brand#34|ECONOMY BURNISHED NICKEL|9|392 +Brand#34|ECONOMY PLATED NICKEL|36|392 +Brand#34|LARGE ANODIZED BRASS|9|392 +Brand#34|LARGE ANODIZED BRASS|49|392 +Brand#34|LARGE BRUSHED STEEL|9|392 +Brand#34|LARGE BURNISHED BRASS|3|392 +Brand#34|LARGE BURNISHED TIN|36|392 +Brand#34|LARGE PLATED BRASS|19|392 +Brand#34|LARGE POLISHED NICKEL|36|392 +Brand#34|PROMO POLISHED TIN|45|392 +Brand#34|SMALL ANODIZED NICKEL|14|392 +Brand#34|SMALL BURNISHED COPPER|36|392 +Brand#34|SMALL BURNISHED TIN|23|392 +Brand#34|SMALL PLATED COPPER|19|392 +Brand#34|SMALL PLATED COPPER|36|392 +Brand#34|SMALL PLATED TIN|14|392 +Brand#34|SMALL POLISHED COPPER|36|392 +Brand#34|SMALL POLISHED COPPER|45|392 +Brand#34|SMALL POLISHED TIN|9|392 +Brand#34|STANDARD PLATED NICKEL|3|392 +Brand#34|STANDARD PLATED NICKEL|23|392 +Brand#34|STANDARD POLISHED COPPER|14|392 +Brand#35|ECONOMY ANODIZED BRASS|36|392 +Brand#35|ECONOMY ANODIZED TIN|23|392 +Brand#35|ECONOMY BURNISHED BRASS|45|392 +Brand#35|LARGE BURNISHED NICKEL|14|392 +Brand#35|LARGE BURNISHED TIN|9|392 +Brand#35|LARGE PLATED NICKEL|49|392 +Brand#35|MEDIUM BURNISHED COPPER|36|392 +Brand#35|MEDIUM BURNISHED TIN|3|392 +Brand#35|MEDIUM BURNISHED TIN|36|392 +Brand#35|MEDIUM PLATED BRASS|3|392 +Brand#35|MEDIUM PLATED COPPER|3|392 +Brand#35|PROMO BRUSHED STEEL|45|392 +Brand#35|PROMO BURNISHED TIN|23|392 +Brand#35|SMALL ANODIZED BRASS|23|392 +Brand#35|SMALL ANODIZED COPPER|23|392 +Brand#35|SMALL BRUSHED COPPER|19|392 +Brand#35|SMALL BURNISHED TIN|19|392 +Brand#35|SMALL POLISHED STEEL|23|392 +Brand#35|STANDARD PLATED BRASS|3|392 +Brand#41|ECONOMY BRUSHED COPPER|19|392 +Brand#41|ECONOMY BRUSHED TIN|19|392 +Brand#41|ECONOMY PLATED COPPER|9|392 +Brand#41|ECONOMY PLATED COPPER|49|392 +Brand#41|ECONOMY PLATED STEEL|23|392 +Brand#41|LARGE BRUSHED BRASS|45|392 +Brand#41|LARGE BURNISHED COPPER|9|392 +Brand#41|LARGE BURNISHED NICKEL|19|392 +Brand#41|LARGE PLATED BRASS|14|392 +Brand#41|LARGE PLATED TIN|19|392 +Brand#41|MEDIUM BRUSHED STEEL|36|392 +Brand#41|MEDIUM BRUSHED TIN|14|392 +Brand#41|PROMO BURNISHED COPPER|3|392 +Brand#41|PROMO BURNISHED NICKEL|49|392 +Brand#41|PROMO POLISHED COPPER|49|392 +Brand#41|PROMO POLISHED TIN|19|392 +Brand#41|SMALL ANODIZED BRASS|23|392 +Brand#41|SMALL ANODIZED COPPER|3|392 +Brand#41|SMALL BRUSHED BRASS|3|392 +Brand#41|SMALL BRUSHED BRASS|14|392 +Brand#41|SMALL PLATED TIN|9|392 +Brand#41|STANDARD ANODIZED STEEL|9|392 +Brand#41|STANDARD ANODIZED TIN|19|392 +Brand#41|STANDARD BRUSHED BRASS|23|392 +Brand#41|STANDARD BURNISHED NICKEL|19|392 +Brand#41|STANDARD POLISHED TIN|49|392 +Brand#42|ECONOMY ANODIZED COPPER|19|392 +Brand#42|ECONOMY ANODIZED STEEL|9|392 +Brand#42|ECONOMY ANODIZED TIN|3|392 +Brand#42|ECONOMY BRUSHED STEEL|9|392 +Brand#42|ECONOMY BRUSHED TIN|9|392 +Brand#42|ECONOMY PLATED NICKEL|3|392 +Brand#42|ECONOMY PLATED STEEL|45|392 +Brand#42|ECONOMY POLISHED BRASS|49|392 +Brand#42|ECONOMY POLISHED NICKEL|36|392 +Brand#42|LARGE ANODIZED BRASS|49|392 +Brand#42|LARGE BRUSHED BRASS|36|392 +Brand#42|LARGE BRUSHED STEEL|14|392 +Brand#42|LARGE BURNISHED BRASS|49|392 +Brand#42|LARGE PLATED STEEL|19|392 +Brand#42|MEDIUM BRUSHED NICKEL|3|392 +Brand#42|MEDIUM BURNISHED STEEL|3|392 +Brand#42|PROMO ANODIZED COPPER|19|392 +Brand#42|PROMO ANODIZED COPPER|49|392 +Brand#42|PROMO BRUSHED COPPER|14|392 +Brand#42|PROMO BRUSHED COPPER|23|392 +Brand#42|PROMO PLATED NICKEL|3|392 +Brand#42|PROMO PLATED NICKEL|49|392 +Brand#42|SMALL ANODIZED NICKEL|19|392 +Brand#42|SMALL BRUSHED TIN|36|392 +Brand#42|SMALL BURNISHED NICKEL|49|392 +Brand#42|SMALL BURNISHED TIN|9|392 +Brand#42|SMALL PLATED BRASS|36|392 +Brand#42|SMALL PLATED COPPER|36|392 +Brand#42|SMALL PLATED TIN|19|392 +Brand#42|SMALL POLISHED STEEL|36|392 +Brand#42|SMALL POLISHED TIN|45|392 +Brand#42|STANDARD BRUSHED STEEL|36|392 +Brand#42|STANDARD BURNISHED TIN|23|392 +Brand#42|STANDARD PLATED COPPER|3|392 +Brand#43|ECONOMY ANODIZED STEEL|23|392 +Brand#43|ECONOMY ANODIZED TIN|23|392 +Brand#43|ECONOMY BURNISHED BRASS|9|392 +Brand#43|ECONOMY BURNISHED BRASS|36|392 +Brand#43|ECONOMY BURNISHED COPPER|14|392 +Brand#43|ECONOMY PLATED NICKEL|3|392 +Brand#43|ECONOMY PLATED NICKEL|49|392 +Brand#43|ECONOMY POLISHED NICKEL|19|392 +Brand#43|ECONOMY POLISHED TIN|9|392 +Brand#43|LARGE ANODIZED COPPER|36|392 +Brand#43|LARGE ANODIZED COPPER|45|392 +Brand#43|LARGE BURNISHED STEEL|36|392 +Brand#43|LARGE BURNISHED TIN|9|392 +Brand#43|LARGE PLATED COPPER|14|392 +Brand#43|LARGE PLATED NICKEL|23|392 +Brand#43|LARGE PLATED TIN|3|392 +Brand#43|MEDIUM BRUSHED BRASS|23|392 +Brand#43|MEDIUM BURNISHED NICKEL|23|392 +Brand#43|PROMO ANODIZED NICKEL|45|392 +Brand#43|PROMO ANODIZED STEEL|23|392 +Brand#43|PROMO BRUSHED COPPER|45|392 +Brand#43|PROMO BURNISHED NICKEL|9|392 +Brand#43|PROMO PLATED TIN|9|392 +Brand#43|STANDARD ANODIZED COPPER|19|392 +Brand#43|STANDARD BRUSHED STEEL|36|392 +Brand#43|STANDARD BURNISHED BRASS|36|392 +Brand#43|STANDARD BURNISHED COPPER|49|392 +Brand#43|STANDARD POLISHED COPPER|9|392 +Brand#44|ECONOMY BRUSHED BRASS|36|392 +Brand#44|ECONOMY POLISHED NICKEL|14|392 +Brand#44|LARGE ANODIZED COPPER|36|392 +Brand#44|LARGE ANODIZED STEEL|23|392 +Brand#44|LARGE BRUSHED BRASS|36|392 +Brand#44|LARGE BURNISHED BRASS|3|392 +Brand#44|LARGE BURNISHED COPPER|45|392 +Brand#44|LARGE BURNISHED TIN|3|392 +Brand#44|LARGE PLATED COPPER|19|392 +Brand#44|LARGE PLATED COPPER|36|392 +Brand#44|MEDIUM ANODIZED TIN|3|392 +Brand#44|MEDIUM BRUSHED COPPER|23|392 +Brand#44|MEDIUM PLATED NICKEL|19|392 +Brand#44|PROMO ANODIZED COPPER|9|392 +Brand#44|PROMO ANODIZED STEEL|23|392 +Brand#44|PROMO BRUSHED COPPER|49|392 +Brand#44|PROMO BRUSHED TIN|45|392 +Brand#44|PROMO PLATED COPPER|49|392 +Brand#44|PROMO PLATED STEEL|49|392 +Brand#44|SMALL BRUSHED BRASS|14|392 +Brand#44|SMALL BRUSHED BRASS|19|392 +Brand#44|SMALL PLATED TIN|3|392 +Brand#44|SMALL POLISHED COPPER|36|392 +Brand#44|SMALL POLISHED TIN|45|392 +Brand#44|STANDARD BRUSHED TIN|45|392 +Brand#44|STANDARD BURNISHED STEEL|36|392 +Brand#44|STANDARD BURNISHED TIN|23|392 +Brand#44|STANDARD PLATED BRASS|3|392 +Brand#44|STANDARD POLISHED TIN|45|392 +Brand#51|ECONOMY BRUSHED TIN|9|392 +Brand#51|ECONOMY PLATED BRASS|45|392 +Brand#51|LARGE BURNISHED STEEL|19|392 +Brand#51|LARGE PLATED NICKEL|45|392 +Brand#51|LARGE PLATED TIN|19|392 +Brand#51|LARGE PLATED TIN|23|392 +Brand#51|MEDIUM ANODIZED TIN|45|392 +Brand#51|MEDIUM BRUSHED BRASS|49|392 +Brand#51|MEDIUM BRUSHED TIN|49|392 +Brand#51|MEDIUM BURNISHED NICKEL|3|392 +Brand#51|PROMO BRUSHED COPPER|9|392 +Brand#51|PROMO BURNISHED NICKEL|36|392 +Brand#51|PROMO POLISHED BRASS|9|392 +Brand#51|SMALL ANODIZED COPPER|23|392 +Brand#51|SMALL ANODIZED STEEL|49|392 +Brand#51|SMALL BRUSHED NICKEL|3|392 +Brand#51|SMALL BRUSHED NICKEL|23|392 +Brand#51|SMALL BRUSHED STEEL|49|392 +Brand#51|SMALL BURNISHED BRASS|3|392 +Brand#51|SMALL BURNISHED TIN|14|392 +Brand#51|STANDARD ANODIZED BRASS|23|392 +Brand#51|STANDARD ANODIZED COPPER|19|392 +Brand#51|STANDARD ANODIZED NICKEL|3|392 +Brand#51|STANDARD BURNISHED BRASS|23|392 +Brand#51|STANDARD BURNISHED NICKEL|3|392 +Brand#51|STANDARD PLATED STEEL|49|392 +Brand#52|ECONOMY BURNISHED NICKEL|45|392 +Brand#52|ECONOMY PLATED COPPER|14|392 +Brand#52|LARGE BRUSHED STEEL|19|392 +Brand#52|LARGE BURNISHED TIN|49|392 +Brand#52|MEDIUM PLATED COPPER|23|392 +Brand#52|MEDIUM PLATED STEEL|19|392 +Brand#52|PROMO ANODIZED STEEL|19|392 +Brand#52|PROMO ANODIZED TIN|36|392 +Brand#52|PROMO BRUSHED BRASS|49|392 +Brand#52|PROMO BRUSHED NICKEL|49|392 +Brand#52|PROMO PLATED TIN|9|392 +Brand#52|PROMO POLISHED COPPER|23|392 +Brand#52|PROMO POLISHED STEEL|45|392 +Brand#52|SMALL BRUSHED COPPER|23|392 +Brand#52|SMALL BRUSHED NICKEL|23|392 +Brand#52|SMALL BURNISHED TIN|9|392 +Brand#52|SMALL PLATED COPPER|9|392 +Brand#52|SMALL PLATED NICKEL|36|392 +Brand#52|STANDARD ANODIZED TIN|23|392 +Brand#52|STANDARD BRUSHED NICKEL|3|392 +Brand#52|STANDARD BURNISHED BRASS|3|392 +Brand#52|STANDARD PLATED COPPER|23|392 +Brand#52|STANDARD POLISHED BRASS|19|392 +Brand#53|ECONOMY ANODIZED BRASS|23|392 +Brand#53|ECONOMY BRUSHED STEEL|9|392 +Brand#53|ECONOMY BURNISHED NICKEL|14|392 +Brand#53|ECONOMY PLATED BRASS|9|392 +Brand#53|ECONOMY POLISHED NICKEL|3|392 +Brand#53|ECONOMY POLISHED TIN|45|392 +Brand#53|LARGE ANODIZED COPPER|3|392 +Brand#53|LARGE BURNISHED BRASS|19|392 +Brand#53|MEDIUM ANODIZED TIN|45|392 +Brand#53|MEDIUM PLATED TIN|49|392 +Brand#53|PROMO ANODIZED BRASS|36|392 +Brand#53|PROMO PLATED BRASS|49|392 +Brand#53|PROMO PLATED STEEL|49|392 +Brand#53|PROMO POLISHED NICKEL|19|392 +Brand#53|PROMO POLISHED STEEL|14|392 +Brand#53|SMALL BRUSHED TIN|23|392 +Brand#53|SMALL BURNISHED TIN|14|392 +Brand#53|SMALL BURNISHED TIN|23|392 +Brand#53|STANDARD ANODIZED TIN|19|392 +Brand#53|STANDARD BURNISHED COPPER|49|392 +Brand#53|STANDARD PLATED COPPER|14|392 +Brand#53|STANDARD POLISHED NICKEL|3|392 +Brand#54|ECONOMY PLATED COPPER|9|392 +Brand#54|ECONOMY PLATED NICKEL|3|392 +Brand#54|ECONOMY PLATED NICKEL|14|392 +Brand#54|ECONOMY POLISHED STEEL|14|392 +Brand#54|LARGE ANODIZED BRASS|14|392 +Brand#54|LARGE BURNISHED NICKEL|14|392 +Brand#54|LARGE BURNISHED NICKEL|19|392 +Brand#54|LARGE BURNISHED TIN|19|392 +Brand#54|LARGE PLATED COPPER|9|392 +Brand#54|LARGE PLATED NICKEL|49|392 +Brand#54|LARGE POLISHED COPPER|36|392 +Brand#54|LARGE POLISHED COPPER|45|392 +Brand#54|LARGE POLISHED STEEL|49|392 +Brand#54|MEDIUM ANODIZED STEEL|23|392 +Brand#54|MEDIUM ANODIZED STEEL|45|392 +Brand#54|MEDIUM ANODIZED TIN|36|392 +Brand#54|MEDIUM BRUSHED BRASS|36|392 +Brand#54|MEDIUM BRUSHED STEEL|3|392 +Brand#54|MEDIUM PLATED TIN|19|392 +Brand#54|PROMO ANODIZED BRASS|49|392 +Brand#54|PROMO ANODIZED COPPER|3|392 +Brand#54|PROMO BURNISHED BRASS|9|392 +Brand#54|PROMO PLATED TIN|19|392 +Brand#54|PROMO POLISHED BRASS|3|392 +Brand#54|SMALL ANODIZED STEEL|36|392 +Brand#54|SMALL BRUSHED BRASS|49|392 +Brand#54|SMALL BRUSHED TIN|9|392 +Brand#54|SMALL PLATED BRASS|14|392 +Brand#54|SMALL PLATED BRASS|49|392 +Brand#54|SMALL POLISHED BRASS|9|392 +Brand#54|STANDARD ANODIZED TIN|49|392 +Brand#54|STANDARD BRUSHED COPPER|23|392 +Brand#54|STANDARD BRUSHED NICKEL|45|392 +Brand#54|STANDARD BURNISHED NICKEL|23|392 +Brand#54|STANDARD PLATED BRASS|23|392 +Brand#54|STANDARD POLISHED BRASS|19|392 +Brand#54|STANDARD POLISHED COPPER|19|392 +Brand#55|ECONOMY ANODIZED TIN|14|392 +Brand#55|ECONOMY BRUSHED COPPER|49|392 +Brand#55|ECONOMY BURNISHED BRASS|3|392 +Brand#55|ECONOMY BURNISHED NICKEL|36|392 +Brand#55|ECONOMY BURNISHED STEEL|19|392 +Brand#55|ECONOMY PLATED NICKEL|9|392 +Brand#55|ECONOMY POLISHED COPPER|9|392 +Brand#55|LARGE ANODIZED TIN|23|392 +Brand#55|LARGE ANODIZED TIN|45|392 +Brand#55|LARGE BRUSHED STEEL|23|392 +Brand#55|PROMO BRUSHED TIN|49|392 +Brand#55|PROMO BURNISHED NICKEL|9|392 +Brand#55|PROMO BURNISHED TIN|3|392 +Brand#55|PROMO PLATED NICKEL|49|392 +Brand#55|PROMO POLISHED COPPER|36|392 +Brand#55|SMALL ANODIZED STEEL|9|392 +Brand#55|SMALL BRUSHED BRASS|14|392 +Brand#55|SMALL BURNISHED NICKEL|19|392 +Brand#55|SMALL POLISHED NICKEL|19|392 +Brand#55|STANDARD ANODIZED STEEL|49|392 +Brand#55|STANDARD ANODIZED TIN|14|392 +Brand#55|STANDARD BRUSHED COPPER|23|392 +Brand#55|STANDARD BRUSHED NICKEL|23|392 +Brand#55|STANDARD BURNISHED COPPER|49|392 +Brand#55|STANDARD POLISHED BRASS|3|392 +Brand#11|ECONOMY PLATED TIN|36|391 +Brand#11|LARGE BRUSHED STEEL|49|391 +Brand#11|PROMO ANODIZED COPPER|49|391 +Brand#11|PROMO BURNISHED NICKEL|23|391 +Brand#11|PROMO PLATED STEEL|9|391 +Brand#11|PROMO PLATED TIN|49|391 +Brand#12|ECONOMY BURNISHED NICKEL|14|391 +Brand#12|MEDIUM BURNISHED COPPER|36|391 +Brand#13|LARGE BURNISHED BRASS|23|391 +Brand#13|SMALL PLATED NICKEL|49|391 +Brand#13|STANDARD PLATED COPPER|45|391 +Brand#13|STANDARD PLATED STEEL|49|391 +Brand#14|ECONOMY PLATED NICKEL|19|391 +Brand#14|ECONOMY POLISHED COPPER|19|391 +Brand#14|LARGE BRUSHED COPPER|36|391 +Brand#14|PROMO ANODIZED NICKEL|3|391 +Brand#14|STANDARD BURNISHED NICKEL|19|391 +Brand#15|ECONOMY ANODIZED NICKEL|19|391 +Brand#15|LARGE BRUSHED BRASS|14|391 +Brand#15|MEDIUM BURNISHED TIN|23|391 +Brand#15|PROMO ANODIZED BRASS|14|391 +Brand#15|PROMO PLATED NICKEL|36|391 +Brand#15|PROMO POLISHED BRASS|3|391 +Brand#15|PROMO POLISHED STEEL|45|391 +Brand#15|STANDARD ANODIZED TIN|3|391 +Brand#21|MEDIUM PLATED COPPER|23|391 +Brand#21|PROMO ANODIZED TIN|9|391 +Brand#21|SMALL BURNISHED NICKEL|9|391 +Brand#21|SMALL POLISHED STEEL|23|391 +Brand#22|ECONOMY BURNISHED COPPER|45|391 +Brand#22|LARGE ANODIZED NICKEL|23|391 +Brand#22|LARGE BURNISHED STEEL|14|391 +Brand#22|LARGE POLISHED COPPER|9|391 +Brand#22|MEDIUM BRUSHED STEEL|3|391 +Brand#22|MEDIUM PLATED NICKEL|14|391 +Brand#22|PROMO BURNISHED NICKEL|14|391 +Brand#22|PROMO BURNISHED STEEL|23|391 +Brand#22|SMALL BURNISHED NICKEL|49|391 +Brand#23|LARGE BURNISHED TIN|19|391 +Brand#23|PROMO BURNISHED NICKEL|45|391 +Brand#23|SMALL ANODIZED COPPER|23|391 +Brand#23|SMALL BURNISHED STEEL|19|391 +Brand#23|SMALL POLISHED BRASS|9|391 +Brand#23|STANDARD BRUSHED COPPER|9|391 +Brand#24|ECONOMY PLATED COPPER|9|391 +Brand#24|LARGE POLISHED COPPER|49|391 +Brand#24|LARGE POLISHED STEEL|14|391 +Brand#24|PROMO PLATED BRASS|45|391 +Brand#24|SMALL POLISHED BRASS|36|391 +Brand#24|STANDARD POLISHED STEEL|19|391 +Brand#25|ECONOMY ANODIZED STEEL|23|391 +Brand#25|ECONOMY BURNISHED STEEL|3|391 +Brand#25|LARGE BRUSHED NICKEL|36|391 +Brand#25|MEDIUM PLATED COPPER|36|391 +Brand#25|PROMO BURNISHED COPPER|3|391 +Brand#25|PROMO POLISHED TIN|9|391 +Brand#25|SMALL BRUSHED STEEL|14|391 +Brand#25|SMALL PLATED BRASS|49|391 +Brand#25|SMALL PLATED NICKEL|36|391 +Brand#25|SMALL PLATED STEEL|49|391 +Brand#25|STANDARD ANODIZED TIN|14|391 +Brand#25|STANDARD BURNISHED COPPER|36|391 +Brand#31|ECONOMY PLATED BRASS|49|391 +Brand#31|ECONOMY POLISHED STEEL|23|391 +Brand#31|MEDIUM BRUSHED NICKEL|45|391 +Brand#31|PROMO BURNISHED STEEL|45|391 +Brand#31|STANDARD ANODIZED TIN|9|391 +Brand#31|STANDARD POLISHED BRASS|45|391 +Brand#32|ECONOMY BRUSHED COPPER|45|391 +Brand#32|LARGE BURNISHED COPPER|19|391 +Brand#32|SMALL PLATED STEEL|14|391 +Brand#32|STANDARD ANODIZED COPPER|45|391 +Brand#33|LARGE BURNISHED NICKEL|45|391 +Brand#33|STANDARD BRUSHED TIN|23|391 +Brand#33|STANDARD BURNISHED NICKEL|23|391 +Brand#33|STANDARD BURNISHED STEEL|3|391 +Brand#33|STANDARD PLATED STEEL|19|391 +Brand#34|ECONOMY BURNISHED BRASS|23|391 +Brand#34|MEDIUM BURNISHED COPPER|14|391 +Brand#34|PROMO ANODIZED STEEL|45|391 +Brand#34|SMALL POLISHED TIN|36|391 +Brand#35|ECONOMY ANODIZED TIN|14|391 +Brand#35|ECONOMY BRUSHED COPPER|36|391 +Brand#35|ECONOMY BURNISHED BRASS|9|391 +Brand#35|LARGE ANODIZED STEEL|23|391 +Brand#35|LARGE POLISHED BRASS|45|391 +Brand#35|MEDIUM BRUSHED COPPER|49|391 +Brand#35|PROMO PLATED STEEL|45|391 +Brand#35|PROMO PLATED TIN|45|391 +Brand#35|PROMO POLISHED TIN|49|391 +Brand#41|LARGE PLATED TIN|49|391 +Brand#41|MEDIUM ANODIZED STEEL|9|391 +Brand#41|PROMO BRUSHED BRASS|49|391 +Brand#41|PROMO BURNISHED BRASS|9|391 +Brand#41|PROMO PLATED TIN|45|391 +Brand#41|SMALL ANODIZED STEEL|3|391 +Brand#41|SMALL BRUSHED NICKEL|49|391 +Brand#41|SMALL PLATED STEEL|45|391 +Brand#42|LARGE BURNISHED COPPER|9|391 +Brand#42|LARGE PLATED BRASS|19|391 +Brand#42|MEDIUM PLATED NICKEL|9|391 +Brand#42|PROMO ANODIZED STEEL|3|391 +Brand#42|PROMO PLATED STEEL|9|391 +Brand#42|STANDARD BURNISHED STEEL|49|391 +Brand#43|SMALL BURNISHED NICKEL|45|391 +Brand#43|SMALL PLATED NICKEL|49|391 +Brand#44|ECONOMY POLISHED COPPER|45|391 +Brand#44|ECONOMY POLISHED NICKEL|9|391 +Brand#44|LARGE ANODIZED TIN|19|391 +Brand#44|MEDIUM PLATED COPPER|23|391 +Brand#44|PROMO BURNISHED BRASS|49|391 +Brand#44|STANDARD PLATED BRASS|19|391 +Brand#44|STANDARD PLATED TIN|3|391 +Brand#51|LARGE POLISHED TIN|9|391 +Brand#51|PROMO BRUSHED NICKEL|49|391 +Brand#51|SMALL PLATED STEEL|49|391 +Brand#52|LARGE POLISHED BRASS|3|391 +Brand#52|PROMO BRUSHED NICKEL|23|391 +Brand#52|SMALL POLISHED STEEL|23|391 +Brand#53|ECONOMY BURNISHED STEEL|9|391 +Brand#53|MEDIUM ANODIZED COPPER|23|391 +Brand#53|MEDIUM BURNISHED COPPER|45|391 +Brand#53|PROMO ANODIZED BRASS|9|391 +Brand#53|SMALL BRUSHED NICKEL|49|391 +Brand#53|SMALL BURNISHED NICKEL|3|391 +Brand#53|STANDARD BRUSHED BRASS|3|391 +Brand#53|STANDARD PLATED BRASS|36|391 +Brand#53|STANDARD POLISHED NICKEL|23|391 +Brand#54|ECONOMY BRUSHED NICKEL|14|391 +Brand#54|ECONOMY BRUSHED STEEL|14|391 +Brand#54|LARGE BRUSHED NICKEL|14|391 +Brand#54|SMALL ANODIZED NICKEL|14|391 +Brand#54|SMALL BRUSHED STEEL|36|391 +Brand#54|SMALL BURNISHED BRASS|23|391 +Brand#54|STANDARD ANODIZED TIN|19|391 +Brand#54|STANDARD BURNISHED NICKEL|36|391 +Brand#54|STANDARD PLATED BRASS|14|391 +Brand#54|STANDARD POLISHED BRASS|45|391 +Brand#55|LARGE BRUSHED TIN|14|391 +Brand#55|MEDIUM PLATED NICKEL|19|391 +Brand#55|PROMO POLISHED COPPER|3|391 +Brand#55|SMALL POLISHED BRASS|45|391 +Brand#55|STANDARD BRUSHED NICKEL|14|391 +Brand#55|STANDARD BRUSHED NICKEL|45|391 +Brand#55|STANDARD POLISHED NICKEL|3|391 +Brand#12|MEDIUM BURNISHED NICKEL|19|390 +Brand#13|STANDARD BRUSHED COPPER|9|390 +Brand#14|STANDARD POLISHED STEEL|36|390 +Brand#15|SMALL BURNISHED NICKEL|36|390 +Brand#21|LARGE PLATED BRASS|3|390 +Brand#23|SMALL PLATED COPPER|9|390 +Brand#32|MEDIUM ANODIZED COPPER|3|390 +Brand#34|PROMO POLISHED COPPER|49|390 +Brand#43|ECONOMY ANODIZED NICKEL|49|390 +Brand#43|STANDARD BRUSHED COPPER|9|390 +Brand#51|PROMO BURNISHED NICKEL|14|390 +Brand#53|ECONOMY BURNISHED STEEL|49|390 +Brand#53|PROMO BRUSHED TIN|23|390 +Brand#55|LARGE ANODIZED STEEL|19|390 +Brand#11|STANDARD BRUSHED COPPER|36|389 +Brand#15|PROMO BRUSHED COPPER|9|389 +Brand#35|LARGE POLISHED NICKEL|36|389 +Brand#53|PROMO BURNISHED STEEL|36|389 +Brand#11|ECONOMY ANODIZED BRASS|23|388 +Brand#11|ECONOMY ANODIZED NICKEL|23|388 +Brand#11|ECONOMY BURNISHED NICKEL|19|388 +Brand#11|ECONOMY PLATED BRASS|19|388 +Brand#11|ECONOMY POLISHED STEEL|19|388 +Brand#11|LARGE ANODIZED NICKEL|45|388 +Brand#11|LARGE BRUSHED COPPER|49|388 +Brand#11|LARGE PLATED STEEL|9|388 +Brand#11|MEDIUM ANODIZED COPPER|14|388 +Brand#11|MEDIUM ANODIZED TIN|23|388 +Brand#11|MEDIUM BURNISHED NICKEL|23|388 +Brand#11|MEDIUM PLATED BRASS|45|388 +Brand#11|PROMO ANODIZED NICKEL|36|388 +Brand#11|PROMO BRUSHED BRASS|45|388 +Brand#11|PROMO PLATED STEEL|45|388 +Brand#11|SMALL ANODIZED COPPER|3|388 +Brand#11|SMALL BURNISHED TIN|9|388 +Brand#11|SMALL PLATED COPPER|23|388 +Brand#11|SMALL POLISHED BRASS|14|388 +Brand#11|SMALL POLISHED COPPER|49|388 +Brand#11|SMALL POLISHED STEEL|9|388 +Brand#11|STANDARD ANODIZED COPPER|3|388 +Brand#11|STANDARD ANODIZED NICKEL|23|388 +Brand#11|STANDARD BRUSHED BRASS|36|388 +Brand#11|STANDARD BRUSHED STEEL|19|388 +Brand#11|STANDARD BURNISHED STEEL|14|388 +Brand#11|STANDARD PLATED COPPER|3|388 +Brand#12|ECONOMY BRUSHED TIN|23|388 +Brand#12|ECONOMY PLATED BRASS|49|388 +Brand#12|LARGE ANODIZED BRASS|9|388 +Brand#12|LARGE ANODIZED STEEL|3|388 +Brand#12|LARGE BRUSHED STEEL|3|388 +Brand#12|LARGE BURNISHED BRASS|45|388 +Brand#12|LARGE POLISHED STEEL|36|388 +Brand#12|MEDIUM ANODIZED TIN|9|388 +Brand#12|MEDIUM BURNISHED BRASS|23|388 +Brand#12|MEDIUM BURNISHED TIN|45|388 +Brand#12|MEDIUM PLATED TIN|3|388 +Brand#12|PROMO ANODIZED BRASS|14|388 +Brand#12|PROMO ANODIZED COPPER|19|388 +Brand#12|PROMO BRUSHED STEEL|14|388 +Brand#12|PROMO BRUSHED TIN|19|388 +Brand#12|PROMO PLATED NICKEL|9|388 +Brand#12|SMALL ANODIZED COPPER|19|388 +Brand#12|SMALL ANODIZED NICKEL|49|388 +Brand#12|SMALL ANODIZED TIN|49|388 +Brand#12|SMALL POLISHED COPPER|23|388 +Brand#12|STANDARD BURNISHED STEEL|9|388 +Brand#12|STANDARD PLATED NICKEL|45|388 +Brand#13|ECONOMY POLISHED NICKEL|3|388 +Brand#13|ECONOMY POLISHED STEEL|19|388 +Brand#13|LARGE ANODIZED TIN|3|388 +Brand#13|LARGE BURNISHED STEEL|19|388 +Brand#13|LARGE PLATED TIN|45|388 +Brand#13|LARGE POLISHED NICKEL|14|388 +Brand#13|MEDIUM ANODIZED COPPER|36|388 +Brand#13|MEDIUM ANODIZED TIN|36|388 +Brand#13|MEDIUM PLATED BRASS|49|388 +Brand#13|PROMO ANODIZED COPPER|23|388 +Brand#13|PROMO ANODIZED NICKEL|23|388 +Brand#13|PROMO BRUSHED COPPER|9|388 +Brand#13|PROMO BRUSHED COPPER|36|388 +Brand#13|SMALL ANODIZED STEEL|49|388 +Brand#13|SMALL BURNISHED COPPER|45|388 +Brand#13|SMALL BURNISHED NICKEL|3|388 +Brand#13|SMALL PLATED BRASS|49|388 +Brand#13|SMALL PLATED TIN|36|388 +Brand#13|STANDARD ANODIZED COPPER|19|388 +Brand#13|STANDARD BRUSHED COPPER|23|388 +Brand#13|STANDARD BRUSHED NICKEL|3|388 +Brand#13|STANDARD BRUSHED STEEL|23|388 +Brand#13|STANDARD BURNISHED STEEL|19|388 +Brand#13|STANDARD BURNISHED TIN|3|388 +Brand#13|STANDARD POLISHED COPPER|19|388 +Brand#14|ECONOMY BRUSHED NICKEL|19|388 +Brand#14|ECONOMY BRUSHED TIN|3|388 +Brand#14|ECONOMY BURNISHED COPPER|19|388 +Brand#14|ECONOMY BURNISHED NICKEL|19|388 +Brand#14|ECONOMY PLATED TIN|3|388 +Brand#14|ECONOMY POLISHED BRASS|19|388 +Brand#14|ECONOMY POLISHED STEEL|36|388 +Brand#14|LARGE BRUSHED NICKEL|36|388 +Brand#14|MEDIUM ANODIZED BRASS|49|388 +Brand#14|MEDIUM ANODIZED NICKEL|14|388 +Brand#14|MEDIUM ANODIZED NICKEL|49|388 +Brand#14|MEDIUM BRUSHED NICKEL|9|388 +Brand#14|PROMO ANODIZED COPPER|9|388 +Brand#14|PROMO ANODIZED COPPER|45|388 +Brand#14|PROMO BURNISHED NICKEL|49|388 +Brand#14|PROMO BURNISHED TIN|14|388 +Brand#14|PROMO PLATED STEEL|49|388 +Brand#14|SMALL ANODIZED NICKEL|14|388 +Brand#14|SMALL ANODIZED STEEL|36|388 +Brand#14|SMALL BRUSHED STEEL|19|388 +Brand#14|SMALL BURNISHED STEEL|45|388 +Brand#14|STANDARD BRUSHED STEEL|45|388 +Brand#14|STANDARD BURNISHED STEEL|49|388 +Brand#14|STANDARD PLATED TIN|49|388 +Brand#14|STANDARD POLISHED COPPER|9|388 +Brand#14|STANDARD POLISHED STEEL|9|388 +Brand#15|ECONOMY ANODIZED BRASS|19|388 +Brand#15|ECONOMY ANODIZED NICKEL|49|388 +Brand#15|ECONOMY BRUSHED COPPER|45|388 +Brand#15|ECONOMY BURNISHED TIN|14|388 +Brand#15|LARGE BRUSHED STEEL|23|388 +Brand#15|LARGE BRUSHED TIN|45|388 +Brand#15|LARGE BURNISHED BRASS|14|388 +Brand#15|LARGE BURNISHED NICKEL|23|388 +Brand#15|LARGE POLISHED BRASS|45|388 +Brand#15|LARGE POLISHED NICKEL|3|388 +Brand#15|MEDIUM PLATED NICKEL|3|388 +Brand#15|PROMO ANODIZED BRASS|19|388 +Brand#15|PROMO BRUSHED NICKEL|19|388 +Brand#15|PROMO PLATED TIN|3|388 +Brand#15|PROMO POLISHED NICKEL|9|388 +Brand#15|SMALL ANODIZED COPPER|49|388 +Brand#15|STANDARD ANODIZED COPPER|45|388 +Brand#15|STANDARD POLISHED BRASS|19|388 +Brand#21|ECONOMY BRUSHED COPPER|14|388 +Brand#21|ECONOMY BURNISHED BRASS|19|388 +Brand#21|ECONOMY BURNISHED TIN|45|388 +Brand#21|ECONOMY PLATED BRASS|3|388 +Brand#21|ECONOMY POLISHED BRASS|19|388 +Brand#21|ECONOMY POLISHED TIN|19|388 +Brand#21|LARGE ANODIZED STEEL|23|388 +Brand#21|LARGE ANODIZED STEEL|45|388 +Brand#21|LARGE BURNISHED STEEL|9|388 +Brand#21|LARGE BURNISHED TIN|36|388 +Brand#21|LARGE POLISHED BRASS|45|388 +Brand#21|MEDIUM ANODIZED COPPER|9|388 +Brand#21|MEDIUM ANODIZED STEEL|49|388 +Brand#21|PROMO ANODIZED COPPER|14|388 +Brand#21|PROMO ANODIZED TIN|49|388 +Brand#21|PROMO PLATED COPPER|49|388 +Brand#21|PROMO PLATED NICKEL|14|388 +Brand#21|PROMO POLISHED TIN|49|388 +Brand#21|SMALL ANODIZED BRASS|49|388 +Brand#21|SMALL BURNISHED COPPER|49|388 +Brand#21|SMALL PLATED BRASS|9|388 +Brand#21|SMALL POLISHED BRASS|23|388 +Brand#21|STANDARD ANODIZED COPPER|3|388 +Brand#21|STANDARD PLATED BRASS|36|388 +Brand#21|STANDARD POLISHED TIN|19|388 +Brand#22|ECONOMY ANODIZED STEEL|23|388 +Brand#22|ECONOMY BURNISHED BRASS|45|388 +Brand#22|ECONOMY PLATED COPPER|45|388 +Brand#22|ECONOMY POLISHED COPPER|19|388 +Brand#22|LARGE BRUSHED BRASS|9|388 +Brand#22|LARGE BRUSHED COPPER|23|388 +Brand#22|LARGE BURNISHED BRASS|45|388 +Brand#22|LARGE PLATED TIN|14|388 +Brand#22|MEDIUM BRUSHED STEEL|14|388 +Brand#22|MEDIUM BURNISHED COPPER|45|388 +Brand#22|MEDIUM BURNISHED NICKEL|45|388 +Brand#22|MEDIUM PLATED BRASS|49|388 +Brand#22|MEDIUM PLATED TIN|49|388 +Brand#22|PROMO ANODIZED COPPER|45|388 +Brand#22|PROMO BRUSHED NICKEL|9|388 +Brand#22|PROMO BURNISHED STEEL|9|388 +Brand#22|PROMO PLATED BRASS|23|388 +Brand#22|PROMO POLISHED TIN|9|388 +Brand#22|SMALL ANODIZED NICKEL|49|388 +Brand#22|SMALL BRUSHED STEEL|9|388 +Brand#22|SMALL BURNISHED STEEL|23|388 +Brand#22|SMALL POLISHED NICKEL|45|388 +Brand#22|SMALL POLISHED TIN|23|388 +Brand#22|STANDARD BURNISHED BRASS|9|388 +Brand#22|STANDARD BURNISHED NICKEL|3|388 +Brand#22|STANDARD PLATED NICKEL|23|388 +Brand#23|ECONOMY ANODIZED COPPER|19|388 +Brand#23|ECONOMY BURNISHED COPPER|9|388 +Brand#23|ECONOMY BURNISHED NICKEL|23|388 +Brand#23|ECONOMY BURNISHED NICKEL|36|388 +Brand#23|ECONOMY PLATED TIN|19|388 +Brand#23|ECONOMY POLISHED NICKEL|36|388 +Brand#23|LARGE BRUSHED BRASS|49|388 +Brand#23|LARGE PLATED BRASS|49|388 +Brand#23|MEDIUM ANODIZED STEEL|36|388 +Brand#23|MEDIUM BRUSHED COPPER|49|388 +Brand#23|MEDIUM BURNISHED TIN|23|388 +Brand#23|PROMO ANODIZED STEEL|45|388 +Brand#23|PROMO BRUSHED TIN|3|388 +Brand#23|PROMO BRUSHED TIN|23|388 +Brand#23|PROMO BURNISHED BRASS|19|388 +Brand#23|PROMO POLISHED COPPER|19|388 +Brand#23|PROMO POLISHED STEEL|49|388 +Brand#23|PROMO POLISHED TIN|14|388 +Brand#23|SMALL ANODIZED STEEL|36|388 +Brand#23|SMALL BRUSHED COPPER|19|388 +Brand#23|SMALL PLATED TIN|19|388 +Brand#23|SMALL POLISHED COPPER|45|388 +Brand#23|STANDARD ANODIZED STEEL|45|388 +Brand#23|STANDARD BURNISHED TIN|19|388 +Brand#24|ECONOMY BRUSHED TIN|19|388 +Brand#24|ECONOMY PLATED NICKEL|14|388 +Brand#24|ECONOMY POLISHED BRASS|49|388 +Brand#24|ECONOMY POLISHED COPPER|23|388 +Brand#24|ECONOMY POLISHED TIN|14|388 +Brand#24|LARGE ANODIZED NICKEL|23|388 +Brand#24|LARGE ANODIZED TIN|49|388 +Brand#24|MEDIUM BRUSHED STEEL|19|388 +Brand#24|MEDIUM BURNISHED NICKEL|23|388 +Brand#24|MEDIUM PLATED STEEL|3|388 +Brand#24|PROMO BRUSHED COPPER|19|388 +Brand#24|PROMO BRUSHED TIN|23|388 +Brand#24|PROMO BURNISHED BRASS|19|388 +Brand#24|SMALL ANODIZED NICKEL|36|388 +Brand#24|SMALL ANODIZED TIN|49|388 +Brand#24|SMALL BURNISHED BRASS|36|388 +Brand#24|SMALL BURNISHED BRASS|45|388 +Brand#24|SMALL PLATED TIN|3|388 +Brand#24|SMALL POLISHED TIN|23|388 +Brand#24|STANDARD ANODIZED STEEL|23|388 +Brand#24|STANDARD BRUSHED BRASS|9|388 +Brand#24|STANDARD BRUSHED STEEL|3|388 +Brand#24|STANDARD PLATED STEEL|9|388 +Brand#24|STANDARD PLATED STEEL|36|388 +Brand#24|STANDARD PLATED TIN|9|388 +Brand#24|STANDARD POLISHED BRASS|36|388 +Brand#25|ECONOMY ANODIZED TIN|14|388 +Brand#25|ECONOMY BRUSHED NICKEL|45|388 +Brand#25|ECONOMY BURNISHED BRASS|14|388 +Brand#25|ECONOMY BURNISHED NICKEL|45|388 +Brand#25|ECONOMY BURNISHED STEEL|9|388 +Brand#25|ECONOMY BURNISHED TIN|23|388 +Brand#25|ECONOMY PLATED STEEL|23|388 +Brand#25|LARGE ANODIZED NICKEL|36|388 +Brand#25|LARGE BRUSHED COPPER|36|388 +Brand#25|LARGE PLATED STEEL|36|388 +Brand#25|LARGE PLATED TIN|19|388 +Brand#25|LARGE POLISHED BRASS|23|388 +Brand#25|MEDIUM BRUSHED COPPER|49|388 +Brand#25|MEDIUM BRUSHED NICKEL|19|388 +Brand#25|PROMO BURNISHED STEEL|49|388 +Brand#25|PROMO BURNISHED TIN|45|388 +Brand#25|PROMO POLISHED BRASS|19|388 +Brand#25|PROMO POLISHED COPPER|9|388 +Brand#25|SMALL BRUSHED TIN|19|388 +Brand#25|SMALL BRUSHED TIN|45|388 +Brand#25|SMALL BURNISHED NICKEL|3|388 +Brand#25|SMALL BURNISHED TIN|3|388 +Brand#25|SMALL BURNISHED TIN|36|388 +Brand#25|SMALL PLATED NICKEL|23|388 +Brand#25|SMALL POLISHED BRASS|19|388 +Brand#25|SMALL POLISHED BRASS|36|388 +Brand#25|SMALL POLISHED BRASS|49|388 +Brand#25|STANDARD POLISHED BRASS|9|388 +Brand#25|STANDARD POLISHED STEEL|9|388 +Brand#31|ECONOMY ANODIZED BRASS|23|388 +Brand#31|ECONOMY ANODIZED COPPER|14|388 +Brand#31|ECONOMY BURNISHED STEEL|3|388 +Brand#31|ECONOMY PLATED NICKEL|9|388 +Brand#31|ECONOMY POLISHED COPPER|3|388 +Brand#31|LARGE BURNISHED NICKEL|49|388 +Brand#31|LARGE POLISHED BRASS|14|388 +Brand#31|LARGE POLISHED BRASS|49|388 +Brand#31|LARGE POLISHED COPPER|9|388 +Brand#31|LARGE POLISHED COPPER|19|388 +Brand#31|LARGE POLISHED STEEL|19|388 +Brand#31|MEDIUM BURNISHED TIN|45|388 +Brand#31|MEDIUM PLATED COPPER|3|388 +Brand#31|MEDIUM PLATED NICKEL|23|388 +Brand#31|MEDIUM PLATED TIN|9|388 +Brand#31|PROMO PLATED COPPER|23|388 +Brand#31|PROMO PLATED COPPER|49|388 +Brand#31|PROMO POLISHED BRASS|19|388 +Brand#31|PROMO POLISHED STEEL|14|388 +Brand#31|SMALL ANODIZED TIN|49|388 +Brand#31|SMALL BURNISHED COPPER|23|388 +Brand#31|SMALL BURNISHED COPPER|49|388 +Brand#31|SMALL BURNISHED TIN|49|388 +Brand#31|SMALL POLISHED COPPER|3|388 +Brand#31|STANDARD ANODIZED NICKEL|23|388 +Brand#31|STANDARD PLATED TIN|9|388 +Brand#32|ECONOMY ANODIZED BRASS|36|388 +Brand#32|ECONOMY ANODIZED BRASS|45|388 +Brand#32|ECONOMY BRUSHED BRASS|3|388 +Brand#32|ECONOMY BURNISHED NICKEL|36|388 +Brand#32|ECONOMY PLATED STEEL|36|388 +Brand#32|LARGE PLATED STEEL|23|388 +Brand#32|LARGE POLISHED TIN|49|388 +Brand#32|MEDIUM ANODIZED STEEL|36|388 +Brand#32|MEDIUM BRUSHED BRASS|45|388 +Brand#32|MEDIUM BURNISHED BRASS|19|388 +Brand#32|MEDIUM BURNISHED COPPER|36|388 +Brand#32|MEDIUM BURNISHED NICKEL|14|388 +Brand#32|MEDIUM BURNISHED STEEL|36|388 +Brand#32|PROMO ANODIZED COPPER|14|388 +Brand#32|PROMO BRUSHED COPPER|45|388 +Brand#32|PROMO PLATED BRASS|36|388 +Brand#32|SMALL ANODIZED TIN|23|388 +Brand#32|SMALL PLATED NICKEL|9|388 +Brand#32|SMALL POLISHED BRASS|19|388 +Brand#32|SMALL POLISHED COPPER|3|388 +Brand#32|SMALL POLISHED TIN|49|388 +Brand#32|STANDARD BURNISHED STEEL|49|388 +Brand#32|STANDARD BURNISHED TIN|9|388 +Brand#32|STANDARD POLISHED TIN|23|388 +Brand#32|STANDARD POLISHED TIN|49|388 +Brand#33|ECONOMY ANODIZED BRASS|14|388 +Brand#33|ECONOMY BRUSHED STEEL|23|388 +Brand#33|ECONOMY BURNISHED COPPER|23|388 +Brand#33|ECONOMY BURNISHED NICKEL|36|388 +Brand#33|ECONOMY PLATED TIN|45|388 +Brand#33|ECONOMY POLISHED TIN|23|388 +Brand#33|LARGE ANODIZED COPPER|36|388 +Brand#33|LARGE ANODIZED TIN|14|388 +Brand#33|LARGE BRUSHED BRASS|45|388 +Brand#33|LARGE BRUSHED STEEL|19|388 +Brand#33|LARGE BRUSHED STEEL|49|388 +Brand#33|LARGE PLATED COPPER|3|388 +Brand#33|LARGE PLATED NICKEL|14|388 +Brand#33|LARGE PLATED STEEL|45|388 +Brand#33|LARGE POLISHED STEEL|45|388 +Brand#33|MEDIUM BURNISHED NICKEL|36|388 +Brand#33|MEDIUM PLATED STEEL|23|388 +Brand#33|PROMO BRUSHED STEEL|3|388 +Brand#33|SMALL BURNISHED BRASS|23|388 +Brand#33|SMALL BURNISHED STEEL|49|388 +Brand#33|SMALL PLATED BRASS|49|388 +Brand#33|SMALL POLISHED BRASS|19|388 +Brand#33|SMALL POLISHED BRASS|49|388 +Brand#33|SMALL POLISHED STEEL|19|388 +Brand#33|STANDARD ANODIZED STEEL|3|388 +Brand#33|STANDARD BRUSHED NICKEL|3|388 +Brand#33|STANDARD BURNISHED COPPER|9|388 +Brand#33|STANDARD BURNISHED TIN|9|388 +Brand#33|STANDARD PLATED TIN|14|388 +Brand#33|STANDARD POLISHED STEEL|45|388 +Brand#34|ECONOMY BURNISHED NICKEL|19|388 +Brand#34|ECONOMY PLATED COPPER|45|388 +Brand#34|ECONOMY PLATED TIN|9|388 +Brand#34|ECONOMY POLISHED NICKEL|19|388 +Brand#34|ECONOMY POLISHED STEEL|14|388 +Brand#34|LARGE BURNISHED NICKEL|36|388 +Brand#34|LARGE PLATED NICKEL|3|388 +Brand#34|LARGE PLATED STEEL|9|388 +Brand#34|LARGE POLISHED BRASS|19|388 +Brand#34|LARGE POLISHED BRASS|36|388 +Brand#34|MEDIUM BRUSHED TIN|49|388 +Brand#34|PROMO PLATED BRASS|19|388 +Brand#34|PROMO PLATED COPPER|45|388 +Brand#34|STANDARD ANODIZED STEEL|3|388 +Brand#34|STANDARD BURNISHED STEEL|3|388 +Brand#34|STANDARD PLATED NICKEL|14|388 +Brand#34|STANDARD POLISHED COPPER|45|388 +Brand#35|ECONOMY ANODIZED COPPER|45|388 +Brand#35|ECONOMY BRUSHED BRASS|23|388 +Brand#35|ECONOMY BRUSHED STEEL|14|388 +Brand#35|ECONOMY BURNISHED COPPER|23|388 +Brand#35|ECONOMY BURNISHED TIN|36|388 +Brand#35|ECONOMY PLATED TIN|19|388 +Brand#35|ECONOMY POLISHED STEEL|23|388 +Brand#35|ECONOMY POLISHED STEEL|45|388 +Brand#35|LARGE ANODIZED BRASS|23|388 +Brand#35|LARGE BRUSHED NICKEL|45|388 +Brand#35|LARGE BRUSHED TIN|23|388 +Brand#35|LARGE POLISHED BRASS|23|388 +Brand#35|MEDIUM ANODIZED COPPER|49|388 +Brand#35|MEDIUM ANODIZED TIN|3|388 +Brand#35|MEDIUM BURNISHED NICKEL|36|388 +Brand#35|MEDIUM PLATED COPPER|45|388 +Brand#35|MEDIUM PLATED COPPER|49|388 +Brand#35|MEDIUM PLATED TIN|45|388 +Brand#35|PROMO ANODIZED NICKEL|49|388 +Brand#35|PROMO BRUSHED NICKEL|23|388 +Brand#35|PROMO BRUSHED NICKEL|49|388 +Brand#35|PROMO PLATED COPPER|19|388 +Brand#35|PROMO POLISHED NICKEL|36|388 +Brand#35|SMALL ANODIZED COPPER|3|388 +Brand#35|SMALL ANODIZED TIN|36|388 +Brand#35|SMALL ANODIZED TIN|45|388 +Brand#35|SMALL BRUSHED TIN|19|388 +Brand#35|SMALL POLISHED NICKEL|23|388 +Brand#35|STANDARD ANODIZED NICKEL|3|388 +Brand#41|ECONOMY ANODIZED COPPER|14|388 +Brand#41|ECONOMY BURNISHED TIN|9|388 +Brand#41|ECONOMY PLATED NICKEL|19|388 +Brand#41|ECONOMY POLISHED BRASS|14|388 +Brand#41|ECONOMY POLISHED TIN|49|388 +Brand#41|LARGE ANODIZED BRASS|49|388 +Brand#41|LARGE PLATED NICKEL|19|388 +Brand#41|MEDIUM ANODIZED STEEL|23|388 +Brand#41|MEDIUM ANODIZED TIN|3|388 +Brand#41|MEDIUM BRUSHED NICKEL|9|388 +Brand#41|MEDIUM BRUSHED STEEL|14|388 +Brand#41|MEDIUM BRUSHED STEEL|49|388 +Brand#41|MEDIUM BURNISHED TIN|49|388 +Brand#41|MEDIUM PLATED BRASS|3|388 +Brand#41|PROMO ANODIZED COPPER|36|388 +Brand#41|PROMO PLATED STEEL|19|388 +Brand#41|PROMO POLISHED STEEL|49|388 +Brand#41|SMALL PLATED BRASS|9|388 +Brand#41|SMALL PLATED NICKEL|9|388 +Brand#41|SMALL PLATED STEEL|19|388 +Brand#41|STANDARD BURNISHED STEEL|36|388 +Brand#41|STANDARD PLATED BRASS|3|388 +Brand#41|STANDARD PLATED STEEL|36|388 +Brand#42|ECONOMY PLATED NICKEL|36|388 +Brand#42|ECONOMY POLISHED COPPER|23|388 +Brand#42|LARGE POLISHED COPPER|23|388 +Brand#42|LARGE POLISHED COPPER|36|388 +Brand#42|MEDIUM ANODIZED TIN|49|388 +Brand#42|MEDIUM BRUSHED COPPER|45|388 +Brand#42|MEDIUM BRUSHED STEEL|23|388 +Brand#42|PROMO BRUSHED BRASS|23|388 +Brand#42|PROMO BRUSHED NICKEL|23|388 +Brand#42|PROMO BURNISHED STEEL|23|388 +Brand#42|PROMO BURNISHED STEEL|45|388 +Brand#42|PROMO PLATED COPPER|9|388 +Brand#42|SMALL ANODIZED NICKEL|14|388 +Brand#42|SMALL BRUSHED STEEL|9|388 +Brand#42|SMALL BURNISHED BRASS|3|388 +Brand#42|SMALL POLISHED BRASS|14|388 +Brand#42|SMALL POLISHED NICKEL|3|388 +Brand#42|SMALL POLISHED STEEL|3|388 +Brand#42|STANDARD ANODIZED STEEL|3|388 +Brand#42|STANDARD BRUSHED COPPER|19|388 +Brand#42|STANDARD BRUSHED COPPER|45|388 +Brand#42|STANDARD PLATED COPPER|9|388 +Brand#42|STANDARD POLISHED STEEL|36|388 +Brand#43|ECONOMY ANODIZED STEEL|45|388 +Brand#43|ECONOMY BRUSHED TIN|9|388 +Brand#43|ECONOMY BURNISHED STEEL|14|388 +Brand#43|LARGE ANODIZED BRASS|19|388 +Brand#43|LARGE ANODIZED STEEL|36|388 +Brand#43|LARGE BURNISHED TIN|36|388 +Brand#43|LARGE PLATED NICKEL|14|388 +Brand#43|LARGE PLATED TIN|23|388 +Brand#43|LARGE POLISHED TIN|23|388 +Brand#43|MEDIUM ANODIZED TIN|23|388 +Brand#43|MEDIUM BRUSHED BRASS|9|388 +Brand#43|MEDIUM BRUSHED BRASS|19|388 +Brand#43|MEDIUM BURNISHED COPPER|9|388 +Brand#43|MEDIUM BURNISHED COPPER|45|388 +Brand#43|MEDIUM BURNISHED NICKEL|49|388 +Brand#43|MEDIUM PLATED COPPER|23|388 +Brand#43|PROMO ANODIZED COPPER|49|388 +Brand#43|PROMO BRUSHED COPPER|9|388 +Brand#43|PROMO PLATED NICKEL|45|388 +Brand#43|PROMO PLATED STEEL|3|388 +Brand#43|PROMO POLISHED TIN|9|388 +Brand#43|SMALL ANODIZED NICKEL|3|388 +Brand#43|SMALL ANODIZED STEEL|36|388 +Brand#43|SMALL BURNISHED BRASS|3|388 +Brand#43|SMALL BURNISHED TIN|23|388 +Brand#43|SMALL PLATED COPPER|19|388 +Brand#43|SMALL PLATED STEEL|49|388 +Brand#43|STANDARD BURNISHED STEEL|49|388 +Brand#43|STANDARD PLATED BRASS|23|388 +Brand#44|ECONOMY ANODIZED TIN|36|388 +Brand#44|ECONOMY BURNISHED BRASS|36|388 +Brand#44|ECONOMY BURNISHED NICKEL|3|388 +Brand#44|ECONOMY BURNISHED NICKEL|23|388 +Brand#44|LARGE ANODIZED STEEL|9|388 +Brand#44|LARGE BRUSHED STEEL|45|388 +Brand#44|LARGE BURNISHED STEEL|9|388 +Brand#44|LARGE BURNISHED TIN|9|388 +Brand#44|LARGE PLATED NICKEL|49|388 +Brand#44|LARGE POLISHED NICKEL|14|388 +Brand#44|MEDIUM BRUSHED COPPER|36|388 +Brand#44|PROMO ANODIZED TIN|49|388 +Brand#44|PROMO PLATED COPPER|19|388 +Brand#44|PROMO POLISHED TIN|3|388 +Brand#44|SMALL ANODIZED COPPER|14|388 +Brand#44|SMALL BRUSHED BRASS|49|388 +Brand#44|SMALL BRUSHED STEEL|3|388 +Brand#44|SMALL BRUSHED TIN|49|388 +Brand#44|SMALL POLISHED TIN|3|388 +Brand#44|STANDARD ANODIZED TIN|14|388 +Brand#44|STANDARD ANODIZED TIN|49|388 +Brand#44|STANDARD PLATED COPPER|14|388 +Brand#44|STANDARD PLATED STEEL|9|388 +Brand#51|ECONOMY ANODIZED COPPER|19|388 +Brand#51|ECONOMY ANODIZED NICKEL|9|388 +Brand#51|ECONOMY BRUSHED TIN|3|388 +Brand#51|ECONOMY BURNISHED NICKEL|49|388 +Brand#51|ECONOMY PLATED COPPER|3|388 +Brand#51|ECONOMY PLATED COPPER|14|388 +Brand#51|ECONOMY PLATED COPPER|36|388 +Brand#51|ECONOMY POLISHED NICKEL|14|388 +Brand#51|LARGE ANODIZED BRASS|23|388 +Brand#51|LARGE BRUSHED NICKEL|14|388 +Brand#51|LARGE BRUSHED STEEL|19|388 +Brand#51|LARGE BURNISHED COPPER|49|388 +Brand#51|LARGE PLATED STEEL|36|388 +Brand#51|LARGE POLISHED NICKEL|3|388 +Brand#51|MEDIUM BURNISHED BRASS|49|388 +Brand#51|MEDIUM PLATED TIN|9|388 +Brand#51|PROMO PLATED BRASS|3|388 +Brand#51|SMALL ANODIZED BRASS|14|388 +Brand#51|SMALL BURNISHED COPPER|36|388 +Brand#51|SMALL POLISHED BRASS|23|388 +Brand#51|SMALL POLISHED BRASS|36|388 +Brand#51|SMALL POLISHED COPPER|14|388 +Brand#51|STANDARD BRUSHED STEEL|49|388 +Brand#51|STANDARD BURNISHED TIN|3|388 +Brand#51|STANDARD PLATED STEEL|23|388 +Brand#51|STANDARD POLISHED NICKEL|23|388 +Brand#51|STANDARD POLISHED TIN|3|388 +Brand#51|STANDARD POLISHED TIN|45|388 +Brand#52|ECONOMY ANODIZED BRASS|9|388 +Brand#52|ECONOMY ANODIZED NICKEL|45|388 +Brand#52|ECONOMY ANODIZED TIN|45|388 +Brand#52|ECONOMY BRUSHED STEEL|49|388 +Brand#52|ECONOMY BURNISHED COPPER|45|388 +Brand#52|ECONOMY BURNISHED TIN|45|388 +Brand#52|ECONOMY PLATED TIN|45|388 +Brand#52|ECONOMY POLISHED COPPER|23|388 +Brand#52|LARGE ANODIZED STEEL|3|388 +Brand#52|LARGE ANODIZED TIN|14|388 +Brand#52|LARGE BRUSHED COPPER|45|388 +Brand#52|LARGE BRUSHED NICKEL|3|388 +Brand#52|MEDIUM BRUSHED STEEL|3|388 +Brand#52|MEDIUM BRUSHED TIN|19|388 +Brand#52|PROMO POLISHED BRASS|23|388 +Brand#52|PROMO POLISHED COPPER|14|388 +Brand#52|PROMO POLISHED COPPER|19|388 +Brand#52|PROMO POLISHED TIN|9|388 +Brand#52|SMALL ANODIZED NICKEL|3|388 +Brand#52|SMALL BURNISHED TIN|19|388 +Brand#52|SMALL POLISHED STEEL|36|388 +Brand#52|STANDARD ANODIZED COPPER|3|388 +Brand#53|ECONOMY ANODIZED NICKEL|19|388 +Brand#53|ECONOMY PLATED COPPER|9|388 +Brand#53|ECONOMY PLATED NICKEL|19|388 +Brand#53|LARGE ANODIZED STEEL|19|388 +Brand#53|LARGE BRUSHED NICKEL|3|388 +Brand#53|LARGE BRUSHED NICKEL|23|388 +Brand#53|LARGE BURNISHED COPPER|36|388 +Brand#53|LARGE BURNISHED NICKEL|14|388 +Brand#53|LARGE PLATED NICKEL|36|388 +Brand#53|LARGE POLISHED COPPER|9|388 +Brand#53|MEDIUM ANODIZED COPPER|3|388 +Brand#53|MEDIUM ANODIZED STEEL|14|388 +Brand#53|MEDIUM PLATED COPPER|14|388 +Brand#53|PROMO ANODIZED COPPER|19|388 +Brand#53|PROMO BRUSHED NICKEL|23|388 +Brand#53|PROMO PLATED STEEL|36|388 +Brand#53|PROMO POLISHED COPPER|14|388 +Brand#53|SMALL PLATED BRASS|19|388 +Brand#53|SMALL POLISHED COPPER|45|388 +Brand#53|STANDARD PLATED BRASS|19|388 +Brand#54|ECONOMY ANODIZED NICKEL|36|388 +Brand#54|ECONOMY BURNISHED TIN|49|388 +Brand#54|ECONOMY PLATED BRASS|36|388 +Brand#54|ECONOMY POLISHED NICKEL|49|388 +Brand#54|ECONOMY POLISHED STEEL|9|388 +Brand#54|LARGE ANODIZED BRASS|9|388 +Brand#54|LARGE ANODIZED TIN|49|388 +Brand#54|LARGE BRUSHED STEEL|45|388 +Brand#54|LARGE BURNISHED BRASS|9|388 +Brand#54|LARGE POLISHED BRASS|19|388 +Brand#54|LARGE POLISHED TIN|3|388 +Brand#54|MEDIUM ANODIZED STEEL|19|388 +Brand#54|MEDIUM PLATED COPPER|19|388 +Brand#54|MEDIUM PLATED STEEL|14|388 +Brand#54|PROMO ANODIZED COPPER|36|388 +Brand#54|PROMO BURNISHED COPPER|19|388 +Brand#54|SMALL ANODIZED NICKEL|49|388 +Brand#54|SMALL BRUSHED TIN|23|388 +Brand#54|SMALL BURNISHED COPPER|49|388 +Brand#54|SMALL BURNISHED STEEL|45|388 +Brand#54|STANDARD BRUSHED NICKEL|36|388 +Brand#54|STANDARD BRUSHED STEEL|3|388 +Brand#54|STANDARD BURNISHED BRASS|45|388 +Brand#54|STANDARD BURNISHED STEEL|14|388 +Brand#54|STANDARD BURNISHED STEEL|19|388 +Brand#54|STANDARD PLATED COPPER|3|388 +Brand#54|STANDARD PLATED NICKEL|19|388 +Brand#54|STANDARD PLATED NICKEL|36|388 +Brand#54|STANDARD PLATED STEEL|49|388 +Brand#54|STANDARD POLISHED NICKEL|14|388 +Brand#55|ECONOMY ANODIZED TIN|3|388 +Brand#55|ECONOMY BRUSHED NICKEL|45|388 +Brand#55|ECONOMY BRUSHED STEEL|3|388 +Brand#55|ECONOMY BURNISHED NICKEL|19|388 +Brand#55|ECONOMY BURNISHED TIN|49|388 +Brand#55|ECONOMY PLATED BRASS|23|388 +Brand#55|ECONOMY PLATED BRASS|49|388 +Brand#55|ECONOMY POLISHED BRASS|36|388 +Brand#55|LARGE ANODIZED STEEL|14|388 +Brand#55|LARGE BRUSHED TIN|36|388 +Brand#55|LARGE POLISHED COPPER|19|388 +Brand#55|LARGE POLISHED NICKEL|9|388 +Brand#55|MEDIUM ANODIZED COPPER|14|388 +Brand#55|MEDIUM ANODIZED TIN|36|388 +Brand#55|MEDIUM BRUSHED BRASS|14|388 +Brand#55|MEDIUM BRUSHED BRASS|49|388 +Brand#55|MEDIUM BURNISHED BRASS|3|388 +Brand#55|MEDIUM BURNISHED STEEL|49|388 +Brand#55|MEDIUM PLATED STEEL|23|388 +Brand#55|PROMO ANODIZED TIN|49|388 +Brand#55|PROMO BURNISHED COPPER|19|388 +Brand#55|PROMO BURNISHED STEEL|3|388 +Brand#55|PROMO PLATED STEEL|49|388 +Brand#55|PROMO POLISHED COPPER|45|388 +Brand#55|SMALL ANODIZED COPPER|19|388 +Brand#55|SMALL BURNISHED COPPER|23|388 +Brand#55|SMALL POLISHED BRASS|3|388 +Brand#55|STANDARD BRUSHED TIN|3|388 +Brand#55|STANDARD BURNISHED STEEL|45|388 +Brand#55|STANDARD POLISHED TIN|9|388 +Brand#55|STANDARD POLISHED TIN|19|388 +Brand#11|ECONOMY BURNISHED NICKEL|23|387 +Brand#11|ECONOMY POLISHED COPPER|9|387 +Brand#11|LARGE POLISHED NICKEL|23|387 +Brand#11|STANDARD ANODIZED NICKEL|36|387 +Brand#11|STANDARD BURNISHED COPPER|19|387 +Brand#11|STANDARD POLISHED COPPER|45|387 +Brand#12|ECONOMY POLISHED COPPER|45|387 +Brand#12|STANDARD PLATED NICKEL|3|387 +Brand#13|ECONOMY ANODIZED COPPER|3|387 +Brand#13|LARGE PLATED COPPER|36|387 +Brand#13|LARGE PLATED NICKEL|49|387 +Brand#13|LARGE POLISHED NICKEL|19|387 +Brand#13|MEDIUM BRUSHED STEEL|49|387 +Brand#13|MEDIUM BURNISHED BRASS|14|387 +Brand#13|SMALL BRUSHED TIN|3|387 +Brand#13|STANDARD BRUSHED BRASS|49|387 +Brand#13|STANDARD BRUSHED COPPER|19|387 +Brand#14|ECONOMY BRUSHED TIN|9|387 +Brand#14|ECONOMY PLATED COPPER|23|387 +Brand#15|MEDIUM BRUSHED NICKEL|19|387 +Brand#15|MEDIUM PLATED COPPER|3|387 +Brand#15|PROMO BRUSHED STEEL|23|387 +Brand#15|PROMO BURNISHED TIN|23|387 +Brand#15|STANDARD BURNISHED COPPER|36|387 +Brand#15|STANDARD PLATED TIN|19|387 +Brand#21|MEDIUM ANODIZED NICKEL|14|387 +Brand#21|MEDIUM ANODIZED TIN|14|387 +Brand#21|MEDIUM PLATED STEEL|45|387 +Brand#21|PROMO ANODIZED NICKEL|3|387 +Brand#21|PROMO ANODIZED TIN|3|387 +Brand#21|PROMO BRUSHED BRASS|23|387 +Brand#21|PROMO PLATED COPPER|45|387 +Brand#21|SMALL ANODIZED NICKEL|49|387 +Brand#21|SMALL PLATED NICKEL|45|387 +Brand#21|SMALL PLATED TIN|49|387 +Brand#21|STANDARD PLATED NICKEL|14|387 +Brand#22|ECONOMY BRUSHED TIN|36|387 +Brand#22|ECONOMY BURNISHED NICKEL|36|387 +Brand#22|LARGE ANODIZED NICKEL|49|387 +Brand#22|LARGE BURNISHED TIN|36|387 +Brand#22|LARGE PLATED STEEL|3|387 +Brand#22|PROMO PLATED STEEL|14|387 +Brand#22|STANDARD ANODIZED BRASS|45|387 +Brand#23|ECONOMY PLATED NICKEL|23|387 +Brand#23|LARGE BURNISHED STEEL|9|387 +Brand#23|PROMO ANODIZED COPPER|23|387 +Brand#23|PROMO BRUSHED BRASS|49|387 +Brand#23|PROMO PLATED BRASS|45|387 +Brand#23|SMALL BRUSHED TIN|3|387 +Brand#23|SMALL BURNISHED TIN|9|387 +Brand#23|STANDARD BRUSHED NICKEL|14|387 +Brand#24|ECONOMY BURNISHED BRASS|36|387 +Brand#24|ECONOMY PLATED TIN|45|387 +Brand#24|LARGE PLATED BRASS|36|387 +Brand#24|MEDIUM BRUSHED COPPER|45|387 +Brand#24|SMALL BRUSHED STEEL|49|387 +Brand#24|STANDARD ANODIZED STEEL|9|387 +Brand#24|STANDARD BRUSHED TIN|19|387 +Brand#24|STANDARD PLATED COPPER|14|387 +Brand#24|STANDARD PLATED COPPER|36|387 +Brand#25|ECONOMY ANODIZED BRASS|36|387 +Brand#25|MEDIUM PLATED COPPER|9|387 +Brand#25|SMALL ANODIZED BRASS|9|387 +Brand#25|SMALL ANODIZED NICKEL|9|387 +Brand#25|SMALL ANODIZED STEEL|36|387 +Brand#31|ECONOMY BURNISHED NICKEL|45|387 +Brand#31|LARGE ANODIZED COPPER|9|387 +Brand#31|LARGE BRUSHED COPPER|19|387 +Brand#31|LARGE PLATED STEEL|19|387 +Brand#31|LARGE POLISHED COPPER|45|387 +Brand#31|MEDIUM BRUSHED COPPER|36|387 +Brand#31|MEDIUM BURNISHED COPPER|3|387 +Brand#31|SMALL BRUSHED NICKEL|3|387 +Brand#31|STANDARD ANODIZED COPPER|49|387 +Brand#32|ECONOMY ANODIZED COPPER|45|387 +Brand#32|ECONOMY BURNISHED TIN|9|387 +Brand#32|LARGE ANODIZED BRASS|49|387 +Brand#32|LARGE POLISHED NICKEL|14|387 +Brand#32|SMALL BURNISHED COPPER|45|387 +Brand#32|STANDARD POLISHED BRASS|23|387 +Brand#33|ECONOMY BRUSHED BRASS|14|387 +Brand#33|MEDIUM BURNISHED STEEL|19|387 +Brand#33|PROMO POLISHED BRASS|45|387 +Brand#33|SMALL PLATED COPPER|19|387 +Brand#33|STANDARD BURNISHED STEEL|9|387 +Brand#34|LARGE BURNISHED STEEL|9|387 +Brand#34|MEDIUM BRUSHED COPPER|3|387 +Brand#34|MEDIUM PLATED COPPER|9|387 +Brand#34|MEDIUM PLATED NICKEL|49|387 +Brand#34|PROMO ANODIZED NICKEL|36|387 +Brand#34|PROMO BURNISHED NICKEL|36|387 +Brand#34|STANDARD BURNISHED COPPER|23|387 +Brand#41|PROMO POLISHED TIN|9|387 +Brand#41|STANDARD PLATED TIN|3|387 +Brand#42|ECONOMY BURNISHED BRASS|49|387 +Brand#42|ECONOMY POLISHED COPPER|45|387 +Brand#42|LARGE BURNISHED TIN|3|387 +Brand#42|LARGE POLISHED STEEL|9|387 +Brand#42|PROMO ANODIZED BRASS|23|387 +Brand#42|PROMO BRUSHED BRASS|49|387 +Brand#42|PROMO POLISHED BRASS|49|387 +Brand#43|MEDIUM PLATED NICKEL|19|387 +Brand#43|PROMO BURNISHED STEEL|19|387 +Brand#43|SMALL ANODIZED TIN|9|387 +Brand#43|SMALL BURNISHED COPPER|19|387 +Brand#43|STANDARD ANODIZED NICKEL|19|387 +Brand#43|STANDARD BURNISHED COPPER|9|387 +Brand#44|LARGE POLISHED STEEL|23|387 +Brand#44|MEDIUM BURNISHED TIN|3|387 +Brand#44|PROMO BURNISHED NICKEL|19|387 +Brand#44|PROMO PLATED BRASS|9|387 +Brand#44|STANDARD ANODIZED COPPER|19|387 +Brand#44|STANDARD ANODIZED TIN|36|387 +Brand#51|ECONOMY ANODIZED BRASS|14|387 +Brand#51|ECONOMY BURNISHED NICKEL|45|387 +Brand#51|LARGE BURNISHED NICKEL|14|387 +Brand#51|LARGE BURNISHED TIN|9|387 +Brand#51|PROMO BURNISHED STEEL|23|387 +Brand#51|PROMO PLATED NICKEL|36|387 +Brand#51|STANDARD BRUSHED BRASS|49|387 +Brand#52|ECONOMY BRUSHED STEEL|19|387 +Brand#52|LARGE BRUSHED NICKEL|19|387 +Brand#52|MEDIUM ANODIZED TIN|9|387 +Brand#52|PROMO PLATED STEEL|36|387 +Brand#52|SMALL POLISHED STEEL|49|387 +Brand#52|STANDARD ANODIZED NICKEL|23|387 +Brand#52|STANDARD BRUSHED TIN|14|387 +Brand#52|STANDARD PLATED COPPER|14|387 +Brand#53|LARGE BRUSHED BRASS|49|387 +Brand#53|PROMO PLATED COPPER|3|387 +Brand#53|PROMO POLISHED NICKEL|45|387 +Brand#54|ECONOMY BURNISHED TIN|36|387 +Brand#54|LARGE POLISHED TIN|49|387 +Brand#54|MEDIUM BURNISHED TIN|3|387 +Brand#54|SMALL ANODIZED BRASS|49|387 +Brand#54|SMALL PLATED TIN|3|387 +Brand#54|STANDARD ANODIZED COPPER|3|387 +Brand#55|ECONOMY PLATED NICKEL|45|387 +Brand#55|LARGE BRUSHED STEEL|19|387 +Brand#55|LARGE PLATED STEEL|23|387 +Brand#55|SMALL BURNISHED STEEL|19|387 +Brand#55|SMALL PLATED STEEL|36|387 +Brand#55|STANDARD BRUSHED BRASS|14|387 +Brand#11|LARGE BURNISHED NICKEL|9|386 +Brand#14|SMALL PLATED NICKEL|9|386 +Brand#22|LARGE BURNISHED COPPER|14|386 +Brand#22|MEDIUM BRUSHED TIN|19|386 +Brand#33|ECONOMY POLISHED TIN|45|386 +Brand#34|ECONOMY BRUSHED COPPER|36|386 +Brand#35|STANDARD BRUSHED BRASS|23|386 +Brand#41|LARGE BURNISHED COPPER|49|386 +Brand#41|MEDIUM BRUSHED TIN|3|386 +Brand#43|MEDIUM BRUSHED TIN|14|386 +Brand#51|ECONOMY BRUSHED COPPER|36|386 +Brand#52|ECONOMY POLISHED TIN|3|386 +Brand#54|STANDARD BRUSHED NICKEL|19|386 +Brand#54|PROMO ANODIZED COPPER|45|385 +Brand#11|ECONOMY BURNISHED STEEL|3|384 +Brand#11|ECONOMY PLATED COPPER|36|384 +Brand#11|ECONOMY PLATED STEEL|9|384 +Brand#11|LARGE ANODIZED NICKEL|36|384 +Brand#11|LARGE BRUSHED NICKEL|19|384 +Brand#11|LARGE PLATED BRASS|36|384 +Brand#11|LARGE PLATED COPPER|36|384 +Brand#11|LARGE POLISHED NICKEL|36|384 +Brand#11|LARGE POLISHED STEEL|9|384 +Brand#11|MEDIUM PLATED TIN|14|384 +Brand#11|PROMO BRUSHED NICKEL|36|384 +Brand#11|PROMO PLATED TIN|36|384 +Brand#11|PROMO POLISHED NICKEL|19|384 +Brand#11|SMALL BURNISHED NICKEL|49|384 +Brand#11|SMALL PLATED TIN|14|384 +Brand#11|SMALL PLATED TIN|36|384 +Brand#11|STANDARD PLATED COPPER|14|384 +Brand#12|ECONOMY ANODIZED COPPER|3|384 +Brand#12|ECONOMY BURNISHED COPPER|45|384 +Brand#12|ECONOMY PLATED STEEL|9|384 +Brand#12|ECONOMY PLATED STEEL|36|384 +Brand#12|LARGE BURNISHED BRASS|9|384 +Brand#12|LARGE BURNISHED TIN|19|384 +Brand#12|LARGE POLISHED TIN|9|384 +Brand#12|MEDIUM BRUSHED BRASS|49|384 +Brand#12|MEDIUM BURNISHED STEEL|3|384 +Brand#12|MEDIUM BURNISHED TIN|23|384 +Brand#12|PROMO ANODIZED BRASS|3|384 +Brand#12|PROMO BURNISHED NICKEL|3|384 +Brand#12|PROMO POLISHED NICKEL|45|384 +Brand#12|SMALL ANODIZED BRASS|45|384 +Brand#12|SMALL BURNISHED COPPER|14|384 +Brand#12|SMALL PLATED TIN|9|384 +Brand#12|SMALL POLISHED COPPER|36|384 +Brand#12|STANDARD BURNISHED COPPER|45|384 +Brand#13|ECONOMY ANODIZED BRASS|36|384 +Brand#13|ECONOMY ANODIZED NICKEL|9|384 +Brand#13|ECONOMY BRUSHED COPPER|9|384 +Brand#13|ECONOMY PLATED BRASS|23|384 +Brand#13|ECONOMY PLATED STEEL|23|384 +Brand#13|LARGE ANODIZED COPPER|3|384 +Brand#13|LARGE ANODIZED STEEL|14|384 +Brand#13|LARGE BRUSHED COPPER|49|384 +Brand#13|LARGE BURNISHED TIN|9|384 +Brand#13|LARGE PLATED COPPER|49|384 +Brand#13|LARGE PLATED STEEL|19|384 +Brand#13|MEDIUM PLATED TIN|36|384 +Brand#13|MEDIUM PLATED TIN|49|384 +Brand#13|PROMO BURNISHED BRASS|19|384 +Brand#13|PROMO BURNISHED COPPER|45|384 +Brand#13|PROMO BURNISHED STEEL|3|384 +Brand#13|SMALL BRUSHED NICKEL|23|384 +Brand#13|SMALL BRUSHED TIN|49|384 +Brand#13|SMALL BURNISHED STEEL|36|384 +Brand#13|SMALL PLATED STEEL|3|384 +Brand#13|STANDARD ANODIZED COPPER|45|384 +Brand#13|STANDARD BRUSHED NICKEL|23|384 +Brand#13|STANDARD BURNISHED NICKEL|19|384 +Brand#13|STANDARD BURNISHED TIN|23|384 +Brand#13|STANDARD PLATED TIN|45|384 +Brand#14|ECONOMY BURNISHED NICKEL|3|384 +Brand#14|ECONOMY POLISHED NICKEL|19|384 +Brand#14|LARGE BRUSHED BRASS|9|384 +Brand#14|LARGE BRUSHED BRASS|19|384 +Brand#14|LARGE BRUSHED NICKEL|49|384 +Brand#14|LARGE BURNISHED NICKEL|14|384 +Brand#14|LARGE PLATED STEEL|23|384 +Brand#14|MEDIUM PLATED TIN|19|384 +Brand#14|PROMO BRUSHED BRASS|23|384 +Brand#14|PROMO BRUSHED COPPER|49|384 +Brand#14|PROMO BURNISHED COPPER|14|384 +Brand#14|PROMO BURNISHED TIN|45|384 +Brand#14|PROMO PLATED NICKEL|19|384 +Brand#14|PROMO PLATED TIN|36|384 +Brand#14|PROMO POLISHED NICKEL|49|384 +Brand#14|SMALL POLISHED COPPER|36|384 +Brand#14|SMALL POLISHED TIN|14|384 +Brand#14|SMALL POLISHED TIN|23|384 +Brand#14|STANDARD ANODIZED STEEL|36|384 +Brand#14|STANDARD BURNISHED COPPER|45|384 +Brand#14|STANDARD BURNISHED TIN|14|384 +Brand#14|STANDARD PLATED BRASS|14|384 +Brand#15|ECONOMY ANODIZED COPPER|9|384 +Brand#15|ECONOMY BURNISHED COPPER|45|384 +Brand#15|ECONOMY BURNISHED NICKEL|19|384 +Brand#15|ECONOMY PLATED BRASS|3|384 +Brand#15|ECONOMY PLATED TIN|45|384 +Brand#15|ECONOMY POLISHED COPPER|23|384 +Brand#15|LARGE PLATED NICKEL|14|384 +Brand#15|MEDIUM BRUSHED STEEL|23|384 +Brand#15|MEDIUM BURNISHED NICKEL|45|384 +Brand#15|MEDIUM BURNISHED TIN|9|384 +Brand#15|MEDIUM PLATED BRASS|36|384 +Brand#15|MEDIUM PLATED TIN|14|384 +Brand#15|PROMO ANODIZED TIN|9|384 +Brand#15|PROMO POLISHED BRASS|19|384 +Brand#15|PROMO POLISHED STEEL|19|384 +Brand#15|SMALL BRUSHED NICKEL|49|384 +Brand#15|SMALL BURNISHED BRASS|36|384 +Brand#15|SMALL PLATED TIN|45|384 +Brand#15|SMALL POLISHED STEEL|36|384 +Brand#15|SMALL POLISHED TIN|19|384 +Brand#15|STANDARD ANODIZED NICKEL|45|384 +Brand#15|STANDARD BRUSHED BRASS|14|384 +Brand#15|STANDARD PLATED COPPER|9|384 +Brand#15|STANDARD PLATED STEEL|9|384 +Brand#15|STANDARD POLISHED COPPER|23|384 +Brand#21|ECONOMY ANODIZED NICKEL|9|384 +Brand#21|ECONOMY BURNISHED NICKEL|36|384 +Brand#21|ECONOMY PLATED STEEL|23|384 +Brand#21|LARGE BRUSHED STEEL|36|384 +Brand#21|LARGE PLATED BRASS|14|384 +Brand#21|LARGE PLATED COPPER|14|384 +Brand#21|LARGE PLATED TIN|3|384 +Brand#21|LARGE POLISHED NICKEL|19|384 +Brand#21|MEDIUM BURNISHED BRASS|9|384 +Brand#21|MEDIUM BURNISHED NICKEL|9|384 +Brand#21|MEDIUM BURNISHED TIN|14|384 +Brand#21|MEDIUM PLATED BRASS|19|384 +Brand#21|PROMO ANODIZED BRASS|19|384 +Brand#21|PROMO PLATED TIN|3|384 +Brand#21|PROMO POLISHED NICKEL|45|384 +Brand#21|SMALL ANODIZED COPPER|3|384 +Brand#21|SMALL BURNISHED BRASS|14|384 +Brand#21|SMALL BURNISHED STEEL|14|384 +Brand#21|SMALL BURNISHED TIN|45|384 +Brand#21|STANDARD ANODIZED COPPER|36|384 +Brand#21|STANDARD BRUSHED COPPER|3|384 +Brand#21|STANDARD BURNISHED BRASS|9|384 +Brand#21|STANDARD BURNISHED BRASS|23|384 +Brand#21|STANDARD BURNISHED COPPER|14|384 +Brand#22|ECONOMY ANODIZED STEEL|49|384 +Brand#22|ECONOMY ANODIZED TIN|49|384 +Brand#22|ECONOMY BRUSHED TIN|23|384 +Brand#22|ECONOMY PLATED NICKEL|19|384 +Brand#22|ECONOMY PLATED NICKEL|49|384 +Brand#22|ECONOMY POLISHED BRASS|9|384 +Brand#22|LARGE ANODIZED TIN|23|384 +Brand#22|LARGE ANODIZED TIN|49|384 +Brand#22|LARGE PLATED NICKEL|23|384 +Brand#22|LARGE PLATED TIN|23|384 +Brand#22|LARGE POLISHED BRASS|14|384 +Brand#22|LARGE POLISHED NICKEL|36|384 +Brand#22|MEDIUM BRUSHED TIN|9|384 +Brand#22|MEDIUM PLATED TIN|36|384 +Brand#22|PROMO BRUSHED COPPER|19|384 +Brand#22|PROMO BURNISHED BRASS|45|384 +Brand#22|PROMO BURNISHED COPPER|3|384 +Brand#22|PROMO PLATED COPPER|19|384 +Brand#22|PROMO PLATED STEEL|36|384 +Brand#22|SMALL ANODIZED TIN|14|384 +Brand#22|SMALL BRUSHED NICKEL|49|384 +Brand#22|SMALL BURNISHED NICKEL|36|384 +Brand#22|SMALL PLATED TIN|36|384 +Brand#22|STANDARD BURNISHED NICKEL|36|384 +Brand#23|ECONOMY ANODIZED NICKEL|23|384 +Brand#23|ECONOMY BRUSHED STEEL|14|384 +Brand#23|ECONOMY BURNISHED COPPER|14|384 +Brand#23|ECONOMY PLATED STEEL|23|384 +Brand#23|LARGE ANODIZED COPPER|19|384 +Brand#23|LARGE BRUSHED COPPER|45|384 +Brand#23|LARGE BRUSHED TIN|14|384 +Brand#23|LARGE POLISHED TIN|19|384 +Brand#23|MEDIUM ANODIZED COPPER|49|384 +Brand#23|MEDIUM ANODIZED NICKEL|45|384 +Brand#23|MEDIUM BRUSHED BRASS|23|384 +Brand#23|PROMO ANODIZED BRASS|45|384 +Brand#23|PROMO PLATED STEEL|3|384 +Brand#23|PROMO POLISHED TIN|36|384 +Brand#23|SMALL BRUSHED TIN|19|384 +Brand#23|SMALL BRUSHED TIN|23|384 +Brand#23|SMALL BURNISHED STEEL|14|384 +Brand#23|SMALL PLATED COPPER|23|384 +Brand#23|SMALL PLATED NICKEL|14|384 +Brand#23|SMALL PLATED NICKEL|45|384 +Brand#23|SMALL PLATED STEEL|36|384 +Brand#23|SMALL POLISHED COPPER|49|384 +Brand#23|SMALL POLISHED STEEL|9|384 +Brand#23|STANDARD ANODIZED COPPER|23|384 +Brand#23|STANDARD BRUSHED STEEL|49|384 +Brand#23|STANDARD BURNISHED BRASS|19|384 +Brand#24|ECONOMY ANODIZED COPPER|49|384 +Brand#24|ECONOMY ANODIZED TIN|3|384 +Brand#24|ECONOMY BURNISHED COPPER|45|384 +Brand#24|ECONOMY BURNISHED STEEL|9|384 +Brand#24|ECONOMY POLISHED TIN|45|384 +Brand#24|LARGE ANODIZED STEEL|9|384 +Brand#24|LARGE BRUSHED BRASS|36|384 +Brand#24|MEDIUM BRUSHED BRASS|14|384 +Brand#24|MEDIUM BRUSHED BRASS|45|384 +Brand#24|MEDIUM BURNISHED COPPER|3|384 +Brand#24|PROMO ANODIZED COPPER|14|384 +Brand#24|PROMO ANODIZED STEEL|49|384 +Brand#24|PROMO PLATED STEEL|9|384 +Brand#24|PROMO PLATED TIN|36|384 +Brand#24|PROMO POLISHED NICKEL|19|384 +Brand#24|PROMO POLISHED TIN|19|384 +Brand#24|SMALL BRUSHED BRASS|3|384 +Brand#24|STANDARD ANODIZED BRASS|36|384 +Brand#24|STANDARD BRUSHED TIN|3|384 +Brand#24|STANDARD BURNISHED COPPER|45|384 +Brand#24|STANDARD BURNISHED TIN|14|384 +Brand#24|STANDARD POLISHED STEEL|45|384 +Brand#25|ECONOMY PLATED TIN|19|384 +Brand#25|ECONOMY POLISHED NICKEL|3|384 +Brand#25|ECONOMY POLISHED STEEL|45|384 +Brand#25|MEDIUM ANODIZED NICKEL|3|384 +Brand#25|MEDIUM ANODIZED NICKEL|19|384 +Brand#25|MEDIUM BRUSHED TIN|23|384 +Brand#25|PROMO ANODIZED COPPER|36|384 +Brand#25|PROMO BURNISHED TIN|36|384 +Brand#25|SMALL ANODIZED STEEL|14|384 +Brand#25|SMALL ANODIZED TIN|45|384 +Brand#25|SMALL BURNISHED STEEL|49|384 +Brand#25|SMALL BURNISHED TIN|45|384 +Brand#25|SMALL POLISHED COPPER|36|384 +Brand#25|SMALL POLISHED STEEL|36|384 +Brand#25|STANDARD ANODIZED BRASS|14|384 +Brand#25|STANDARD BRUSHED COPPER|19|384 +Brand#25|STANDARD BRUSHED NICKEL|36|384 +Brand#25|STANDARD POLISHED COPPER|36|384 +Brand#31|ECONOMY ANODIZED COPPER|19|384 +Brand#31|ECONOMY BRUSHED BRASS|45|384 +Brand#31|ECONOMY BURNISHED NICKEL|9|384 +Brand#31|ECONOMY POLISHED COPPER|36|384 +Brand#31|ECONOMY POLISHED TIN|49|384 +Brand#31|LARGE ANODIZED NICKEL|9|384 +Brand#31|LARGE ANODIZED STEEL|14|384 +Brand#31|LARGE BRUSHED TIN|3|384 +Brand#31|MEDIUM ANODIZED BRASS|14|384 +Brand#31|MEDIUM ANODIZED COPPER|45|384 +Brand#31|MEDIUM BRUSHED COPPER|9|384 +Brand#31|MEDIUM BURNISHED STEEL|3|384 +Brand#31|MEDIUM BURNISHED STEEL|14|384 +Brand#31|PROMO ANODIZED COPPER|36|384 +Brand#31|PROMO ANODIZED STEEL|14|384 +Brand#31|PROMO ANODIZED STEEL|36|384 +Brand#31|PROMO ANODIZED TIN|19|384 +Brand#31|PROMO ANODIZED TIN|36|384 +Brand#31|PROMO BRUSHED STEEL|36|384 +Brand#31|PROMO PLATED TIN|3|384 +Brand#31|PROMO POLISHED TIN|19|384 +Brand#31|SMALL ANODIZED NICKEL|9|384 +Brand#31|SMALL BRUSHED BRASS|49|384 +Brand#31|SMALL BRUSHED COPPER|19|384 +Brand#31|SMALL BURNISHED NICKEL|36|384 +Brand#31|SMALL PLATED STEEL|36|384 +Brand#31|STANDARD ANODIZED NICKEL|3|384 +Brand#31|STANDARD BRUSHED COPPER|36|384 +Brand#31|STANDARD BRUSHED NICKEL|3|384 +Brand#31|STANDARD BRUSHED TIN|19|384 +Brand#31|STANDARD BURNISHED STEEL|14|384 +Brand#31|STANDARD POLISHED TIN|45|384 +Brand#32|ECONOMY BURNISHED BRASS|49|384 +Brand#32|ECONOMY BURNISHED STEEL|49|384 +Brand#32|ECONOMY PLATED TIN|19|384 +Brand#32|ECONOMY POLISHED COPPER|9|384 +Brand#32|LARGE BRUSHED TIN|9|384 +Brand#32|LARGE BURNISHED STEEL|23|384 +Brand#32|LARGE PLATED COPPER|14|384 +Brand#32|LARGE POLISHED STEEL|3|384 +Brand#32|MEDIUM ANODIZED STEEL|49|384 +Brand#32|SMALL ANODIZED BRASS|36|384 +Brand#32|SMALL ANODIZED STEEL|9|384 +Brand#32|SMALL BRUSHED COPPER|45|384 +Brand#32|SMALL BRUSHED NICKEL|14|384 +Brand#32|SMALL BURNISHED STEEL|23|384 +Brand#32|STANDARD ANODIZED STEEL|19|384 +Brand#32|STANDARD POLISHED BRASS|14|384 +Brand#33|ECONOMY BURNISHED TIN|9|384 +Brand#33|ECONOMY BURNISHED TIN|36|384 +Brand#33|ECONOMY PLATED NICKEL|3|384 +Brand#33|ECONOMY PLATED TIN|36|384 +Brand#33|LARGE ANODIZED COPPER|23|384 +Brand#33|LARGE ANODIZED STEEL|14|384 +Brand#33|LARGE PLATED STEEL|23|384 +Brand#33|MEDIUM ANODIZED BRASS|3|384 +Brand#33|PROMO BRUSHED NICKEL|49|384 +Brand#33|PROMO BURNISHED BRASS|19|384 +Brand#33|PROMO BURNISHED NICKEL|3|384 +Brand#33|SMALL BURNISHED BRASS|36|384 +Brand#33|SMALL PLATED BRASS|19|384 +Brand#33|STANDARD BRUSHED BRASS|9|384 +Brand#33|STANDARD BRUSHED NICKEL|49|384 +Brand#33|STANDARD POLISHED COPPER|36|384 +Brand#34|ECONOMY BRUSHED NICKEL|36|384 +Brand#34|ECONOMY POLISHED TIN|3|384 +Brand#34|LARGE BRUSHED NICKEL|49|384 +Brand#34|MEDIUM ANODIZED BRASS|3|384 +Brand#34|MEDIUM ANODIZED COPPER|19|384 +Brand#34|MEDIUM ANODIZED NICKEL|3|384 +Brand#34|MEDIUM ANODIZED NICKEL|23|384 +Brand#34|MEDIUM ANODIZED STEEL|9|384 +Brand#34|PROMO ANODIZED COPPER|36|384 +Brand#34|PROMO BURNISHED COPPER|9|384 +Brand#34|PROMO PLATED STEEL|45|384 +Brand#34|PROMO POLISHED STEEL|3|384 +Brand#34|SMALL ANODIZED TIN|14|384 +Brand#34|SMALL BRUSHED BRASS|19|384 +Brand#34|SMALL BURNISHED STEEL|36|384 +Brand#34|SMALL BURNISHED STEEL|49|384 +Brand#34|SMALL POLISHED NICKEL|3|384 +Brand#34|STANDARD BURNISHED TIN|19|384 +Brand#34|STANDARD POLISHED TIN|14|384 +Brand#35|ECONOMY ANODIZED COPPER|3|384 +Brand#35|ECONOMY ANODIZED COPPER|14|384 +Brand#35|ECONOMY ANODIZED TIN|45|384 +Brand#35|ECONOMY BRUSHED STEEL|45|384 +Brand#35|ECONOMY BURNISHED COPPER|36|384 +Brand#35|ECONOMY BURNISHED NICKEL|14|384 +Brand#35|LARGE BRUSHED STEEL|36|384 +Brand#35|LARGE POLISHED STEEL|9|384 +Brand#35|MEDIUM BRUSHED BRASS|45|384 +Brand#35|MEDIUM BURNISHED NICKEL|23|384 +Brand#35|MEDIUM PLATED COPPER|19|384 +Brand#35|PROMO BURNISHED COPPER|23|384 +Brand#35|PROMO POLISHED TIN|9|384 +Brand#35|SMALL BRUSHED BRASS|14|384 +Brand#35|SMALL POLISHED NICKEL|36|384 +Brand#35|STANDARD BRUSHED STEEL|9|384 +Brand#35|STANDARD BURNISHED TIN|45|384 +Brand#35|STANDARD PLATED NICKEL|9|384 +Brand#35|STANDARD POLISHED BRASS|14|384 +Brand#35|STANDARD POLISHED BRASS|36|384 +Brand#35|STANDARD POLISHED NICKEL|45|384 +Brand#41|ECONOMY ANODIZED COPPER|45|384 +Brand#41|ECONOMY ANODIZED NICKEL|36|384 +Brand#41|ECONOMY PLATED NICKEL|9|384 +Brand#41|ECONOMY POLISHED COPPER|9|384 +Brand#41|ECONOMY POLISHED TIN|9|384 +Brand#41|LARGE ANODIZED TIN|49|384 +Brand#41|LARGE BURNISHED BRASS|45|384 +Brand#41|LARGE BURNISHED TIN|19|384 +Brand#41|LARGE PLATED TIN|14|384 +Brand#41|MEDIUM ANODIZED COPPER|14|384 +Brand#41|MEDIUM BRUSHED COPPER|19|384 +Brand#41|MEDIUM BRUSHED COPPER|45|384 +Brand#41|MEDIUM BRUSHED NICKEL|36|384 +Brand#41|MEDIUM BRUSHED STEEL|9|384 +Brand#41|MEDIUM BRUSHED STEEL|45|384 +Brand#41|MEDIUM BURNISHED COPPER|36|384 +Brand#41|MEDIUM PLATED NICKEL|36|384 +Brand#41|PROMO ANODIZED STEEL|14|384 +Brand#41|PROMO ANODIZED TIN|49|384 +Brand#41|PROMO BRUSHED NICKEL|9|384 +Brand#41|SMALL ANODIZED STEEL|19|384 +Brand#41|SMALL BRUSHED STEEL|45|384 +Brand#41|STANDARD ANODIZED COPPER|9|384 +Brand#41|STANDARD BURNISHED TIN|14|384 +Brand#42|ECONOMY ANODIZED STEEL|45|384 +Brand#42|ECONOMY BURNISHED NICKEL|14|384 +Brand#42|ECONOMY POLISHED BRASS|23|384 +Brand#42|LARGE BRUSHED TIN|3|384 +Brand#42|LARGE POLISHED TIN|14|384 +Brand#42|LARGE POLISHED TIN|23|384 +Brand#42|MEDIUM ANODIZED STEEL|45|384 +Brand#42|MEDIUM BURNISHED BRASS|23|384 +Brand#42|PROMO ANODIZED NICKEL|23|384 +Brand#42|PROMO ANODIZED TIN|49|384 +Brand#42|PROMO BURNISHED COPPER|9|384 +Brand#42|PROMO BURNISHED STEEL|3|384 +Brand#42|PROMO BURNISHED TIN|23|384 +Brand#42|SMALL ANODIZED BRASS|23|384 +Brand#42|SMALL ANODIZED COPPER|3|384 +Brand#42|SMALL BURNISHED COPPER|14|384 +Brand#42|SMALL BURNISHED NICKEL|45|384 +Brand#42|SMALL PLATED COPPER|45|384 +Brand#42|SMALL POLISHED BRASS|9|384 +Brand#42|SMALL POLISHED TIN|23|384 +Brand#43|ECONOMY ANODIZED COPPER|36|384 +Brand#43|ECONOMY ANODIZED STEEL|36|384 +Brand#43|ECONOMY POLISHED STEEL|9|384 +Brand#43|LARGE BRUSHED BRASS|49|384 +Brand#43|LARGE BRUSHED STEEL|9|384 +Brand#43|LARGE PLATED BRASS|49|384 +Brand#43|LARGE POLISHED BRASS|14|384 +Brand#43|MEDIUM ANODIZED STEEL|19|384 +Brand#43|MEDIUM BRUSHED COPPER|23|384 +Brand#43|MEDIUM BRUSHED STEEL|45|384 +Brand#43|MEDIUM BURNISHED STEEL|14|384 +Brand#43|PROMO ANODIZED BRASS|49|384 +Brand#43|PROMO ANODIZED NICKEL|9|384 +Brand#43|PROMO BURNISHED BRASS|19|384 +Brand#43|SMALL ANODIZED STEEL|19|384 +Brand#43|SMALL BRUSHED BRASS|36|384 +Brand#43|SMALL BRUSHED TIN|14|384 +Brand#43|SMALL BURNISHED BRASS|19|384 +Brand#43|SMALL POLISHED BRASS|36|384 +Brand#43|SMALL POLISHED TIN|45|384 +Brand#43|STANDARD PLATED NICKEL|49|384 +Brand#43|STANDARD POLISHED COPPER|19|384 +Brand#43|STANDARD POLISHED NICKEL|36|384 +Brand#44|ECONOMY BRUSHED NICKEL|9|384 +Brand#44|ECONOMY BRUSHED NICKEL|23|384 +Brand#44|ECONOMY BURNISHED NICKEL|45|384 +Brand#44|ECONOMY BURNISHED STEEL|3|384 +Brand#44|ECONOMY PLATED BRASS|14|384 +Brand#44|ECONOMY PLATED COPPER|9|384 +Brand#44|ECONOMY POLISHED TIN|14|384 +Brand#44|LARGE BRUSHED NICKEL|36|384 +Brand#44|MEDIUM ANODIZED COPPER|45|384 +Brand#44|MEDIUM BURNISHED NICKEL|9|384 +Brand#44|MEDIUM BURNISHED STEEL|3|384 +Brand#44|MEDIUM PLATED COPPER|3|384 +Brand#44|PROMO ANODIZED BRASS|19|384 +Brand#44|PROMO ANODIZED STEEL|3|384 +Brand#44|PROMO BURNISHED BRASS|14|384 +Brand#44|PROMO POLISHED STEEL|23|384 +Brand#44|SMALL BRUSHED TIN|14|384 +Brand#44|SMALL PLATED STEEL|23|384 +Brand#44|STANDARD ANODIZED BRASS|3|384 +Brand#44|STANDARD ANODIZED COPPER|36|384 +Brand#44|STANDARD ANODIZED NICKEL|3|384 +Brand#44|STANDARD BRUSHED COPPER|9|384 +Brand#44|STANDARD BRUSHED TIN|3|384 +Brand#44|STANDARD BRUSHED TIN|14|384 +Brand#44|STANDARD BURNISHED NICKEL|36|384 +Brand#44|STANDARD BURNISHED TIN|45|384 +Brand#44|STANDARD POLISHED COPPER|9|384 +Brand#51|ECONOMY ANODIZED STEEL|14|384 +Brand#51|ECONOMY BURNISHED BRASS|3|384 +Brand#51|ECONOMY PLATED TIN|3|384 +Brand#51|LARGE ANODIZED BRASS|3|384 +Brand#51|LARGE BURNISHED BRASS|49|384 +Brand#51|LARGE PLATED STEEL|19|384 +Brand#51|LARGE PLATED TIN|14|384 +Brand#51|LARGE POLISHED COPPER|14|384 +Brand#51|MEDIUM BRUSHED NICKEL|14|384 +Brand#51|MEDIUM PLATED BRASS|45|384 +Brand#51|MEDIUM PLATED STEEL|9|384 +Brand#51|PROMO ANODIZED COPPER|36|384 +Brand#51|PROMO BRUSHED BRASS|19|384 +Brand#51|STANDARD BURNISHED STEEL|19|384 +Brand#51|STANDARD PLATED NICKEL|49|384 +Brand#51|STANDARD POLISHED STEEL|3|384 +Brand#52|ECONOMY ANODIZED STEEL|19|384 +Brand#52|ECONOMY BRUSHED COPPER|9|384 +Brand#52|ECONOMY BRUSHED COPPER|49|384 +Brand#52|ECONOMY BRUSHED NICKEL|36|384 +Brand#52|ECONOMY BURNISHED STEEL|23|384 +Brand#52|ECONOMY BURNISHED STEEL|36|384 +Brand#52|ECONOMY POLISHED BRASS|49|384 +Brand#52|ECONOMY POLISHED NICKEL|36|384 +Brand#52|LARGE ANODIZED COPPER|3|384 +Brand#52|LARGE ANODIZED TIN|19|384 +Brand#52|LARGE BRUSHED TIN|3|384 +Brand#52|LARGE BURNISHED STEEL|14|384 +Brand#52|LARGE BURNISHED STEEL|23|384 +Brand#52|MEDIUM BRUSHED COPPER|49|384 +Brand#52|MEDIUM BRUSHED STEEL|19|384 +Brand#52|MEDIUM BURNISHED BRASS|36|384 +Brand#52|MEDIUM PLATED TIN|45|384 +Brand#52|PROMO ANODIZED STEEL|36|384 +Brand#52|PROMO ANODIZED TIN|23|384 +Brand#52|PROMO BURNISHED COPPER|9|384 +Brand#52|PROMO PLATED BRASS|49|384 +Brand#52|PROMO PLATED COPPER|49|384 +Brand#52|PROMO PLATED STEEL|45|384 +Brand#52|PROMO POLISHED NICKEL|36|384 +Brand#52|SMALL ANODIZED NICKEL|45|384 +Brand#52|SMALL BRUSHED BRASS|45|384 +Brand#52|SMALL BRUSHED COPPER|9|384 +Brand#52|SMALL BURNISHED COPPER|19|384 +Brand#52|SMALL PLATED BRASS|36|384 +Brand#52|SMALL PLATED COPPER|36|384 +Brand#52|SMALL PLATED NICKEL|45|384 +Brand#52|STANDARD BURNISHED COPPER|45|384 +Brand#53|ECONOMY ANODIZED TIN|3|384 +Brand#53|ECONOMY BRUSHED NICKEL|36|384 +Brand#53|ECONOMY PLATED NICKEL|49|384 +Brand#53|LARGE ANODIZED TIN|49|384 +Brand#53|LARGE BRUSHED BRASS|9|384 +Brand#53|LARGE POLISHED BRASS|45|384 +Brand#53|LARGE POLISHED NICKEL|36|384 +Brand#53|MEDIUM ANODIZED TIN|9|384 +Brand#53|MEDIUM PLATED BRASS|36|384 +Brand#53|MEDIUM PLATED BRASS|45|384 +Brand#53|PROMO ANODIZED COPPER|45|384 +Brand#53|PROMO ANODIZED NICKEL|49|384 +Brand#53|PROMO ANODIZED TIN|36|384 +Brand#53|PROMO BRUSHED STEEL|14|384 +Brand#53|PROMO BRUSHED TIN|19|384 +Brand#53|PROMO BURNISHED NICKEL|19|384 +Brand#53|PROMO POLISHED BRASS|36|384 +Brand#53|PROMO POLISHED NICKEL|49|384 +Brand#53|SMALL BRUSHED NICKEL|45|384 +Brand#53|STANDARD BURNISHED BRASS|36|384 +Brand#53|STANDARD BURNISHED NICKEL|23|384 +Brand#53|STANDARD POLISHED STEEL|49|384 +Brand#54|ECONOMY ANODIZED BRASS|9|384 +Brand#54|ECONOMY BRUSHED BRASS|45|384 +Brand#54|ECONOMY BURNISHED NICKEL|23|384 +Brand#54|LARGE ANODIZED NICKEL|49|384 +Brand#54|LARGE BRUSHED NICKEL|45|384 +Brand#54|LARGE POLISHED STEEL|45|384 +Brand#54|MEDIUM BURNISHED TIN|23|384 +Brand#54|MEDIUM PLATED NICKEL|14|384 +Brand#54|PROMO BURNISHED COPPER|9|384 +Brand#54|STANDARD BRUSHED NICKEL|3|384 +Brand#54|STANDARD BURNISHED NICKEL|19|384 +Brand#54|STANDARD BURNISHED STEEL|9|384 +Brand#54|STANDARD PLATED TIN|14|384 +Brand#54|STANDARD POLISHED COPPER|3|384 +Brand#55|ECONOMY BRUSHED BRASS|3|384 +Brand#55|ECONOMY BURNISHED COPPER|19|384 +Brand#55|LARGE ANODIZED STEEL|3|384 +Brand#55|LARGE PLATED COPPER|45|384 +Brand#55|LARGE POLISHED TIN|19|384 +Brand#55|MEDIUM ANODIZED COPPER|45|384 +Brand#55|MEDIUM BRUSHED COPPER|14|384 +Brand#55|MEDIUM BURNISHED NICKEL|45|384 +Brand#55|MEDIUM BURNISHED STEEL|9|384 +Brand#55|PROMO PLATED NICKEL|9|384 +Brand#55|PROMO POLISHED COPPER|19|384 +Brand#55|SMALL ANODIZED NICKEL|36|384 +Brand#55|SMALL BRUSHED STEEL|9|384 +Brand#55|SMALL BURNISHED TIN|9|384 +Brand#55|SMALL PLATED BRASS|14|384 +Brand#55|SMALL PLATED BRASS|45|384 +Brand#55|SMALL POLISHED NICKEL|36|384 +Brand#55|STANDARD ANODIZED COPPER|19|384 +Brand#55|STANDARD BRUSHED COPPER|3|384 +Brand#55|STANDARD BURNISHED BRASS|19|384 +Brand#55|STANDARD PLATED BRASS|3|384 +Brand#55|STANDARD PLATED COPPER|3|384 +Brand#55|STANDARD PLATED NICKEL|36|384 +Brand#11|ECONOMY ANODIZED BRASS|45|383 +Brand#11|ECONOMY BRUSHED TIN|14|383 +Brand#11|LARGE BRUSHED COPPER|9|383 +Brand#11|LARGE POLISHED BRASS|14|383 +Brand#11|STANDARD ANODIZED BRASS|45|383 +Brand#12|LARGE POLISHED STEEL|9|383 +Brand#12|PROMO BURNISHED NICKEL|49|383 +Brand#12|PROMO PLATED STEEL|14|383 +Brand#12|SMALL BURNISHED COPPER|3|383 +Brand#12|SMALL POLISHED BRASS|19|383 +Brand#13|ECONOMY PLATED STEEL|14|383 +Brand#13|MEDIUM BURNISHED BRASS|45|383 +Brand#13|PROMO PLATED COPPER|14|383 +Brand#13|PROMO POLISHED TIN|3|383 +Brand#13|SMALL ANODIZED BRASS|14|383 +Brand#13|SMALL ANODIZED STEEL|3|383 +Brand#14|ECONOMY BRUSHED STEEL|19|383 +Brand#14|SMALL ANODIZED TIN|36|383 +Brand#14|SMALL POLISHED BRASS|49|383 +Brand#15|MEDIUM BURNISHED STEEL|36|383 +Brand#15|PROMO POLISHED TIN|3|383 +Brand#15|SMALL ANODIZED BRASS|49|383 +Brand#15|SMALL ANODIZED COPPER|45|383 +Brand#15|SMALL ANODIZED NICKEL|3|383 +Brand#15|SMALL POLISHED TIN|9|383 +Brand#15|STANDARD PLATED COPPER|49|383 +Brand#21|LARGE BURNISHED BRASS|23|383 +Brand#21|LARGE BURNISHED COPPER|49|383 +Brand#21|LARGE PLATED COPPER|19|383 +Brand#21|MEDIUM BURNISHED NICKEL|49|383 +Brand#21|MEDIUM PLATED TIN|36|383 +Brand#21|SMALL BRUSHED NICKEL|14|383 +Brand#21|STANDARD BRUSHED NICKEL|23|383 +Brand#22|ECONOMY PLATED TIN|14|383 +Brand#22|MEDIUM BURNISHED STEEL|23|383 +Brand#22|MEDIUM PLATED STEEL|19|383 +Brand#22|PROMO BRUSHED BRASS|45|383 +Brand#22|PROMO PLATED NICKEL|45|383 +Brand#22|PROMO PLATED TIN|19|383 +Brand#22|STANDARD BRUSHED BRASS|14|383 +Brand#23|ECONOMY PLATED NICKEL|9|383 +Brand#23|MEDIUM BRUSHED BRASS|45|383 +Brand#23|PROMO BURNISHED BRASS|45|383 +Brand#23|PROMO BURNISHED TIN|36|383 +Brand#23|SMALL POLISHED NICKEL|45|383 +Brand#23|STANDARD BRUSHED NICKEL|36|383 +Brand#24|ECONOMY BRUSHED NICKEL|45|383 +Brand#24|MEDIUM BRUSHED COPPER|36|383 +Brand#24|STANDARD PLATED STEEL|14|383 +Brand#25|ECONOMY BURNISHED BRASS|3|383 +Brand#25|ECONOMY BURNISHED TIN|49|383 +Brand#25|LARGE BRUSHED COPPER|23|383 +Brand#25|MEDIUM BRUSHED TIN|49|383 +Brand#25|PROMO ANODIZED BRASS|45|383 +Brand#25|PROMO BRUSHED TIN|49|383 +Brand#25|SMALL PLATED BRASS|45|383 +Brand#25|SMALL POLISHED TIN|19|383 +Brand#25|STANDARD BRUSHED NICKEL|9|383 +Brand#25|STANDARD BURNISHED BRASS|14|383 +Brand#31|ECONOMY ANODIZED NICKEL|14|383 +Brand#31|ECONOMY POLISHED STEEL|14|383 +Brand#31|SMALL PLATED BRASS|19|383 +Brand#31|STANDARD ANODIZED NICKEL|36|383 +Brand#31|STANDARD BURNISHED TIN|36|383 +Brand#31|STANDARD PLATED STEEL|45|383 +Brand#32|ECONOMY BRUSHED COPPER|3|383 +Brand#32|ECONOMY BRUSHED TIN|49|383 +Brand#32|ECONOMY BURNISHED TIN|14|383 +Brand#32|MEDIUM BRUSHED NICKEL|9|383 +Brand#32|MEDIUM BURNISHED STEEL|3|383 +Brand#32|PROMO BRUSHED STEEL|36|383 +Brand#32|PROMO PLATED COPPER|49|383 +Brand#32|STANDARD BRUSHED NICKEL|14|383 +Brand#32|STANDARD BURNISHED BRASS|45|383 +Brand#33|ECONOMY POLISHED STEEL|9|383 +Brand#33|STANDARD BRUSHED NICKEL|45|383 +Brand#33|STANDARD BURNISHED TIN|36|383 +Brand#33|STANDARD PLATED NICKEL|45|383 +Brand#33|STANDARD PLATED STEEL|23|383 +Brand#34|ECONOMY BURNISHED TIN|14|383 +Brand#34|MEDIUM PLATED NICKEL|14|383 +Brand#34|PROMO PLATED TIN|9|383 +Brand#34|SMALL ANODIZED TIN|9|383 +Brand#34|STANDARD ANODIZED COPPER|49|383 +Brand#35|LARGE ANODIZED BRASS|14|383 +Brand#35|LARGE ANODIZED NICKEL|9|383 +Brand#35|LARGE BURNISHED STEEL|23|383 +Brand#35|PROMO PLATED COPPER|23|383 +Brand#35|STANDARD PLATED STEEL|23|383 +Brand#41|ECONOMY BURNISHED NICKEL|45|383 +Brand#41|LARGE ANODIZED TIN|23|383 +Brand#41|LARGE BURNISHED BRASS|19|383 +Brand#41|SMALL PLATED STEEL|3|383 +Brand#41|STANDARD PLATED BRASS|14|383 +Brand#42|MEDIUM ANODIZED COPPER|14|383 +Brand#43|ECONOMY ANODIZED TIN|14|383 +Brand#43|ECONOMY ANODIZED TIN|45|383 +Brand#43|ECONOMY PLATED TIN|49|383 +Brand#43|LARGE BURNISHED TIN|45|383 +Brand#43|MEDIUM ANODIZED STEEL|3|383 +Brand#43|PROMO BRUSHED TIN|45|383 +Brand#43|SMALL POLISHED NICKEL|14|383 +Brand#43|STANDARD PLATED TIN|19|383 +Brand#44|ECONOMY BRUSHED COPPER|49|383 +Brand#44|ECONOMY PLATED NICKEL|14|383 +Brand#44|ECONOMY PLATED NICKEL|36|383 +Brand#44|ECONOMY POLISHED COPPER|36|383 +Brand#44|MEDIUM ANODIZED BRASS|9|383 +Brand#44|PROMO POLISHED STEEL|3|383 +Brand#44|SMALL POLISHED TIN|9|383 +Brand#51|ECONOMY BRUSHED NICKEL|14|383 +Brand#51|ECONOMY BURNISHED STEEL|9|383 +Brand#51|ECONOMY PLATED TIN|49|383 +Brand#51|ECONOMY POLISHED NICKEL|36|383 +Brand#51|MEDIUM PLATED TIN|49|383 +Brand#51|SMALL BURNISHED BRASS|9|383 +Brand#51|SMALL BURNISHED COPPER|23|383 +Brand#51|STANDARD BRUSHED BRASS|23|383 +Brand#51|STANDARD PLATED NICKEL|9|383 +Brand#52|LARGE POLISHED TIN|36|383 +Brand#52|MEDIUM BRUSHED COPPER|14|383 +Brand#52|SMALL BRUSHED STEEL|49|383 +Brand#53|ECONOMY BRUSHED COPPER|49|383 +Brand#53|SMALL BRUSHED BRASS|3|383 +Brand#53|STANDARD ANODIZED BRASS|14|383 +Brand#54|MEDIUM BRUSHED COPPER|36|383 +Brand#54|MEDIUM BURNISHED BRASS|9|383 +Brand#54|PROMO BURNISHED NICKEL|36|383 +Brand#54|STANDARD PLATED NICKEL|3|383 +Brand#55|ECONOMY ANODIZED TIN|19|383 +Brand#55|ECONOMY POLISHED BRASS|19|383 +Brand#55|MEDIUM BURNISHED STEEL|14|383 +Brand#55|PROMO POLISHED COPPER|49|383 +Brand#55|SMALL BURNISHED TIN|14|383 +Brand#55|STANDARD ANODIZED NICKEL|23|383 +Brand#55|STANDARD ANODIZED STEEL|45|383 +Brand#55|STANDARD BURNISHED STEEL|3|383 +Brand#11|ECONOMY BURNISHED TIN|36|382 +Brand#12|PROMO BRUSHED TIN|49|382 +Brand#13|ECONOMY ANODIZED BRASS|9|382 +Brand#13|STANDARD ANODIZED STEEL|3|382 +Brand#14|ECONOMY BURNISHED STEEL|9|382 +Brand#14|LARGE BURNISHED NICKEL|19|382 +Brand#14|STANDARD POLISHED NICKEL|14|382 +Brand#41|MEDIUM BURNISHED TIN|36|382 +Brand#53|STANDARD POLISHED BRASS|45|381 +Brand#54|ECONOMY BRUSHED COPPER|23|381 +Brand#11|ECONOMY ANODIZED TIN|3|380 +Brand#11|ECONOMY BRUSHED TIN|9|380 +Brand#11|ECONOMY POLISHED NICKEL|14|380 +Brand#11|ECONOMY POLISHED STEEL|45|380 +Brand#11|LARGE ANODIZED STEEL|36|380 +Brand#11|LARGE BRUSHED BRASS|49|380 +Brand#11|LARGE BRUSHED STEEL|45|380 +Brand#11|LARGE BURNISHED NICKEL|3|380 +Brand#11|LARGE BURNISHED STEEL|19|380 +Brand#11|LARGE BURNISHED STEEL|36|380 +Brand#11|LARGE POLISHED NICKEL|9|380 +Brand#11|LARGE POLISHED NICKEL|49|380 +Brand#11|LARGE POLISHED TIN|9|380 +Brand#11|MEDIUM BURNISHED BRASS|36|380 +Brand#11|MEDIUM BURNISHED BRASS|45|380 +Brand#11|MEDIUM BURNISHED TIN|14|380 +Brand#11|MEDIUM PLATED BRASS|3|380 +Brand#11|MEDIUM PLATED STEEL|9|380 +Brand#11|PROMO ANODIZED BRASS|49|380 +Brand#11|SMALL ANODIZED BRASS|9|380 +Brand#11|SMALL ANODIZED COPPER|9|380 +Brand#11|SMALL BRUSHED BRASS|23|380 +Brand#11|SMALL BURNISHED STEEL|14|380 +Brand#11|SMALL POLISHED BRASS|23|380 +Brand#11|STANDARD BURNISHED TIN|45|380 +Brand#11|STANDARD POLISHED NICKEL|3|380 +Brand#11|STANDARD POLISHED TIN|45|380 +Brand#12|ECONOMY ANODIZED BRASS|19|380 +Brand#12|ECONOMY POLISHED TIN|49|380 +Brand#12|LARGE BRUSHED BRASS|45|380 +Brand#12|LARGE BRUSHED TIN|49|380 +Brand#12|MEDIUM ANODIZED BRASS|3|380 +Brand#12|MEDIUM ANODIZED STEEL|23|380 +Brand#12|MEDIUM BRUSHED BRASS|9|380 +Brand#12|PROMO BRUSHED NICKEL|23|380 +Brand#12|SMALL ANODIZED NICKEL|14|380 +Brand#12|SMALL BRUSHED TIN|3|380 +Brand#12|SMALL BURNISHED STEEL|3|380 +Brand#12|SMALL PLATED TIN|19|380 +Brand#12|STANDARD BRUSHED COPPER|45|380 +Brand#12|STANDARD BRUSHED STEEL|3|380 +Brand#12|STANDARD BURNISHED BRASS|45|380 +Brand#12|STANDARD POLISHED BRASS|49|380 +Brand#12|STANDARD POLISHED TIN|23|380 +Brand#13|ECONOMY BRUSHED BRASS|14|380 +Brand#13|LARGE BRUSHED NICKEL|19|380 +Brand#13|LARGE BURNISHED BRASS|45|380 +Brand#13|LARGE PLATED TIN|19|380 +Brand#13|LARGE PLATED TIN|49|380 +Brand#13|MEDIUM BRUSHED STEEL|45|380 +Brand#13|MEDIUM BRUSHED TIN|45|380 +Brand#13|MEDIUM BURNISHED BRASS|9|380 +Brand#13|MEDIUM PLATED NICKEL|36|380 +Brand#13|PROMO ANODIZED COPPER|49|380 +Brand#13|PROMO BRUSHED BRASS|14|380 +Brand#13|PROMO BURNISHED BRASS|9|380 +Brand#13|PROMO BURNISHED TIN|14|380 +Brand#13|SMALL ANODIZED TIN|9|380 +Brand#13|SMALL PLATED STEEL|19|380 +Brand#13|STANDARD ANODIZED BRASS|9|380 +Brand#13|STANDARD ANODIZED COPPER|3|380 +Brand#13|STANDARD ANODIZED NICKEL|3|380 +Brand#13|STANDARD ANODIZED STEEL|9|380 +Brand#13|STANDARD BRUSHED NICKEL|45|380 +Brand#13|STANDARD BURNISHED COPPER|19|380 +Brand#13|STANDARD BURNISHED STEEL|36|380 +Brand#13|STANDARD PLATED NICKEL|36|380 +Brand#14|ECONOMY ANODIZED COPPER|45|380 +Brand#14|ECONOMY ANODIZED NICKEL|23|380 +Brand#14|ECONOMY ANODIZED TIN|14|380 +Brand#14|ECONOMY BRUSHED NICKEL|49|380 +Brand#14|ECONOMY PLATED COPPER|9|380 +Brand#14|ECONOMY POLISHED NICKEL|45|380 +Brand#14|ECONOMY POLISHED STEEL|14|380 +Brand#14|LARGE ANODIZED NICKEL|49|380 +Brand#14|LARGE ANODIZED TIN|3|380 +Brand#14|LARGE BRUSHED STEEL|45|380 +Brand#14|LARGE BURNISHED NICKEL|45|380 +Brand#14|LARGE POLISHED COPPER|45|380 +Brand#14|MEDIUM PLATED BRASS|36|380 +Brand#14|MEDIUM PLATED COPPER|45|380 +Brand#14|MEDIUM PLATED STEEL|23|380 +Brand#14|PROMO ANODIZED BRASS|45|380 +Brand#14|PROMO ANODIZED COPPER|36|380 +Brand#14|PROMO POLISHED COPPER|45|380 +Brand#14|SMALL POLISHED COPPER|49|380 +Brand#14|STANDARD ANODIZED STEEL|23|380 +Brand#15|ECONOMY ANODIZED BRASS|14|380 +Brand#15|ECONOMY BRUSHED TIN|45|380 +Brand#15|ECONOMY BURNISHED STEEL|49|380 +Brand#15|ECONOMY PLATED TIN|49|380 +Brand#15|LARGE BURNISHED STEEL|23|380 +Brand#15|MEDIUM ANODIZED TIN|14|380 +Brand#15|MEDIUM PLATED STEEL|36|380 +Brand#15|PROMO BRUSHED NICKEL|14|380 +Brand#15|PROMO BRUSHED NICKEL|36|380 +Brand#15|PROMO BURNISHED BRASS|14|380 +Brand#15|PROMO PLATED TIN|36|380 +Brand#15|PROMO POLISHED COPPER|19|380 +Brand#15|SMALL ANODIZED NICKEL|9|380 +Brand#15|SMALL PLATED NICKEL|19|380 +Brand#15|SMALL POLISHED COPPER|9|380 +Brand#15|STANDARD ANODIZED NICKEL|9|380 +Brand#21|ECONOMY BURNISHED COPPER|14|380 +Brand#21|ECONOMY PLATED TIN|9|380 +Brand#21|ECONOMY PLATED TIN|19|380 +Brand#21|LARGE PLATED TIN|19|380 +Brand#21|MEDIUM BRUSHED COPPER|36|380 +Brand#21|MEDIUM BURNISHED NICKEL|23|380 +Brand#21|PROMO ANODIZED NICKEL|36|380 +Brand#21|PROMO BRUSHED NICKEL|49|380 +Brand#21|SMALL ANODIZED TIN|23|380 +Brand#21|SMALL ANODIZED TIN|45|380 +Brand#21|STANDARD ANODIZED NICKEL|9|380 +Brand#22|ECONOMY BRUSHED STEEL|9|380 +Brand#22|ECONOMY BURNISHED TIN|9|380 +Brand#22|ECONOMY PLATED TIN|36|380 +Brand#22|ECONOMY POLISHED COPPER|45|380 +Brand#22|ECONOMY POLISHED NICKEL|14|380 +Brand#22|LARGE PLATED BRASS|3|380 +Brand#22|MEDIUM ANODIZED BRASS|23|380 +Brand#22|MEDIUM ANODIZED COPPER|36|380 +Brand#22|MEDIUM ANODIZED TIN|14|380 +Brand#22|MEDIUM BRUSHED BRASS|49|380 +Brand#22|MEDIUM BURNISHED BRASS|3|380 +Brand#22|MEDIUM BURNISHED NICKEL|23|380 +Brand#22|MEDIUM BURNISHED TIN|19|380 +Brand#22|MEDIUM PLATED COPPER|3|380 +Brand#22|PROMO PLATED BRASS|14|380 +Brand#22|SMALL ANODIZED NICKEL|45|380 +Brand#22|SMALL POLISHED STEEL|3|380 +Brand#22|STANDARD ANODIZED COPPER|19|380 +Brand#22|STANDARD BRUSHED TIN|9|380 +Brand#22|STANDARD POLISHED BRASS|49|380 +Brand#22|STANDARD POLISHED COPPER|14|380 +Brand#23|ECONOMY ANODIZED STEEL|9|380 +Brand#23|ECONOMY POLISHED COPPER|14|380 +Brand#23|LARGE BRUSHED STEEL|9|380 +Brand#23|LARGE PLATED NICKEL|45|380 +Brand#23|MEDIUM BRUSHED BRASS|9|380 +Brand#23|MEDIUM BRUSHED COPPER|23|380 +Brand#23|MEDIUM BURNISHED BRASS|14|380 +Brand#23|MEDIUM BURNISHED TIN|36|380 +Brand#23|MEDIUM PLATED BRASS|45|380 +Brand#23|MEDIUM PLATED COPPER|49|380 +Brand#23|PROMO ANODIZED NICKEL|36|380 +Brand#23|PROMO BRUSHED BRASS|9|380 +Brand#23|PROMO BRUSHED TIN|19|380 +Brand#23|PROMO BURNISHED TIN|45|380 +Brand#23|SMALL BURNISHED NICKEL|45|380 +Brand#23|SMALL BURNISHED TIN|3|380 +Brand#23|SMALL PLATED BRASS|3|380 +Brand#23|SMALL PLATED COPPER|36|380 +Brand#23|STANDARD ANODIZED BRASS|45|380 +Brand#23|STANDARD BRUSHED STEEL|36|380 +Brand#23|STANDARD PLATED BRASS|49|380 +Brand#23|STANDARD PLATED TIN|9|380 +Brand#23|STANDARD POLISHED NICKEL|23|380 +Brand#23|STANDARD POLISHED TIN|14|380 +Brand#24|ECONOMY BURNISHED STEEL|19|380 +Brand#24|ECONOMY PLATED NICKEL|19|380 +Brand#24|ECONOMY POLISHED STEEL|3|380 +Brand#24|LARGE ANODIZED NICKEL|19|380 +Brand#24|LARGE BRUSHED STEEL|19|380 +Brand#24|LARGE BRUSHED TIN|36|380 +Brand#24|LARGE PLATED BRASS|49|380 +Brand#24|LARGE PLATED COPPER|14|380 +Brand#24|MEDIUM ANODIZED NICKEL|19|380 +Brand#24|MEDIUM BRUSHED STEEL|9|380 +Brand#24|MEDIUM PLATED COPPER|3|380 +Brand#24|MEDIUM PLATED NICKEL|14|380 +Brand#24|PROMO ANODIZED STEEL|36|380 +Brand#24|PROMO BURNISHED STEEL|36|380 +Brand#24|PROMO POLISHED STEEL|14|380 +Brand#24|SMALL ANODIZED COPPER|14|380 +Brand#24|SMALL BURNISHED BRASS|23|380 +Brand#24|SMALL BURNISHED TIN|23|380 +Brand#24|SMALL PLATED NICKEL|49|380 +Brand#24|STANDARD BURNISHED STEEL|23|380 +Brand#24|STANDARD BURNISHED TIN|19|380 +Brand#25|ECONOMY ANODIZED NICKEL|45|380 +Brand#25|LARGE BRUSHED STEEL|19|380 +Brand#25|LARGE BRUSHED STEEL|45|380 +Brand#25|LARGE BURNISHED NICKEL|19|380 +Brand#25|LARGE BURNISHED STEEL|45|380 +Brand#25|LARGE PLATED BRASS|3|380 +Brand#25|LARGE PLATED STEEL|49|380 +Brand#25|LARGE POLISHED COPPER|23|380 +Brand#25|LARGE POLISHED COPPER|49|380 +Brand#25|LARGE POLISHED TIN|49|380 +Brand#25|MEDIUM ANODIZED COPPER|23|380 +Brand#25|MEDIUM BURNISHED BRASS|49|380 +Brand#25|MEDIUM BURNISHED NICKEL|14|380 +Brand#25|MEDIUM PLATED NICKEL|45|380 +Brand#25|MEDIUM PLATED TIN|3|380 +Brand#25|PROMO ANODIZED BRASS|3|380 +Brand#25|PROMO BRUSHED NICKEL|49|380 +Brand#25|PROMO PLATED BRASS|9|380 +Brand#25|SMALL PLATED COPPER|45|380 +Brand#25|STANDARD BURNISHED BRASS|36|380 +Brand#25|STANDARD PLATED TIN|23|380 +Brand#25|STANDARD POLISHED BRASS|36|380 +Brand#31|ECONOMY BRUSHED BRASS|9|380 +Brand#31|ECONOMY BURNISHED COPPER|9|380 +Brand#31|ECONOMY PLATED STEEL|45|380 +Brand#31|LARGE PLATED BRASS|3|380 +Brand#31|MEDIUM ANODIZED STEEL|9|380 +Brand#31|MEDIUM BRUSHED NICKEL|36|380 +Brand#31|PROMO ANODIZED TIN|45|380 +Brand#31|PROMO BRUSHED COPPER|9|380 +Brand#31|PROMO PLATED COPPER|45|380 +Brand#31|SMALL ANODIZED BRASS|9|380 +Brand#31|SMALL ANODIZED NICKEL|23|380 +Brand#31|SMALL POLISHED COPPER|36|380 +Brand#31|STANDARD PLATED STEEL|23|380 +Brand#32|ECONOMY ANODIZED STEEL|14|380 +Brand#32|ECONOMY BRUSHED STEEL|14|380 +Brand#32|ECONOMY BURNISHED TIN|3|380 +Brand#32|ECONOMY PLATED TIN|36|380 +Brand#32|ECONOMY POLISHED STEEL|3|380 +Brand#32|LARGE BRUSHED STEEL|14|380 +Brand#32|LARGE BURNISHED COPPER|3|380 +Brand#32|LARGE BURNISHED STEEL|14|380 +Brand#32|LARGE BURNISHED STEEL|36|380 +Brand#32|LARGE BURNISHED TIN|36|380 +Brand#32|LARGE POLISHED TIN|19|380 +Brand#32|MEDIUM ANODIZED STEEL|19|380 +Brand#32|MEDIUM BURNISHED BRASS|49|380 +Brand#32|SMALL ANODIZED TIN|36|380 +Brand#32|STANDARD ANODIZED BRASS|3|380 +Brand#32|STANDARD PLATED COPPER|23|380 +Brand#32|STANDARD POLISHED TIN|9|380 +Brand#33|ECONOMY BRUSHED BRASS|49|380 +Brand#33|ECONOMY PLATED BRASS|23|380 +Brand#33|ECONOMY PLATED COPPER|3|380 +Brand#33|ECONOMY POLISHED TIN|19|380 +Brand#33|LARGE BURNISHED COPPER|45|380 +Brand#33|LARGE PLATED BRASS|19|380 +Brand#33|LARGE PLATED COPPER|14|380 +Brand#33|LARGE POLISHED BRASS|36|380 +Brand#33|LARGE POLISHED TIN|49|380 +Brand#33|MEDIUM ANODIZED COPPER|23|380 +Brand#33|MEDIUM ANODIZED STEEL|45|380 +Brand#33|MEDIUM BRUSHED TIN|9|380 +Brand#33|MEDIUM BURNISHED NICKEL|14|380 +Brand#33|MEDIUM PLATED BRASS|45|380 +Brand#33|PROMO BURNISHED BRASS|36|380 +Brand#33|PROMO BURNISHED NICKEL|36|380 +Brand#33|PROMO BURNISHED STEEL|36|380 +Brand#33|PROMO PLATED BRASS|23|380 +Brand#33|PROMO POLISHED STEEL|45|380 +Brand#33|SMALL BRUSHED BRASS|45|380 +Brand#33|SMALL BRUSHED NICKEL|49|380 +Brand#33|STANDARD POLISHED TIN|45|380 +Brand#34|ECONOMY ANODIZED TIN|49|380 +Brand#34|ECONOMY BRUSHED STEEL|23|380 +Brand#34|ECONOMY BRUSHED TIN|49|380 +Brand#34|LARGE ANODIZED COPPER|14|380 +Brand#34|LARGE BRUSHED BRASS|36|380 +Brand#34|LARGE BURNISHED STEEL|14|380 +Brand#34|MEDIUM ANODIZED STEEL|36|380 +Brand#34|MEDIUM PLATED TIN|49|380 +Brand#34|PROMO BRUSHED BRASS|45|380 +Brand#34|PROMO BRUSHED NICKEL|19|380 +Brand#34|PROMO BRUSHED STEEL|14|380 +Brand#34|PROMO PLATED STEEL|23|380 +Brand#34|PROMO POLISHED BRASS|3|380 +Brand#34|PROMO POLISHED BRASS|9|380 +Brand#34|SMALL ANODIZED BRASS|49|380 +Brand#34|SMALL BRUSHED NICKEL|3|380 +Brand#34|SMALL PLATED COPPER|9|380 +Brand#34|SMALL POLISHED BRASS|3|380 +Brand#34|SMALL POLISHED COPPER|9|380 +Brand#34|SMALL POLISHED NICKEL|14|380 +Brand#34|STANDARD BRUSHED BRASS|3|380 +Brand#34|STANDARD BURNISHED COPPER|14|380 +Brand#34|STANDARD BURNISHED COPPER|19|380 +Brand#34|STANDARD PLATED NICKEL|9|380 +Brand#35|ECONOMY PLATED COPPER|3|380 +Brand#35|LARGE PLATED STEEL|19|380 +Brand#35|LARGE PLATED TIN|23|380 +Brand#35|LARGE PLATED TIN|45|380 +Brand#35|LARGE POLISHED NICKEL|45|380 +Brand#35|PROMO ANODIZED NICKEL|23|380 +Brand#35|PROMO PLATED TIN|14|380 +Brand#35|SMALL ANODIZED NICKEL|9|380 +Brand#35|SMALL BRUSHED COPPER|3|380 +Brand#35|SMALL BURNISHED COPPER|45|380 +Brand#35|SMALL BURNISHED NICKEL|3|380 +Brand#35|STANDARD ANODIZED BRASS|36|380 +Brand#35|STANDARD ANODIZED COPPER|19|380 +Brand#35|STANDARD BURNISHED BRASS|45|380 +Brand#35|STANDARD BURNISHED COPPER|23|380 +Brand#35|STANDARD PLATED STEEL|19|380 +Brand#35|STANDARD POLISHED BRASS|19|380 +Brand#41|ECONOMY BRUSHED STEEL|45|380 +Brand#41|ECONOMY BURNISHED BRASS|36|380 +Brand#41|LARGE ANODIZED NICKEL|36|380 +Brand#41|LARGE BRUSHED TIN|14|380 +Brand#41|LARGE BURNISHED STEEL|36|380 +Brand#41|LARGE PLATED STEEL|49|380 +Brand#41|MEDIUM ANODIZED TIN|19|380 +Brand#41|MEDIUM BURNISHED BRASS|14|380 +Brand#41|MEDIUM BURNISHED NICKEL|9|380 +Brand#41|MEDIUM BURNISHED STEEL|45|380 +Brand#41|MEDIUM PLATED BRASS|9|380 +Brand#41|PROMO ANODIZED COPPER|9|380 +Brand#41|PROMO BRUSHED TIN|23|380 +Brand#41|PROMO POLISHED BRASS|9|380 +Brand#41|PROMO POLISHED NICKEL|19|380 +Brand#41|STANDARD ANODIZED TIN|49|380 +Brand#41|STANDARD BRUSHED COPPER|14|380 +Brand#41|STANDARD BURNISHED NICKEL|45|380 +Brand#41|STANDARD PLATED COPPER|45|380 +Brand#41|STANDARD PLATED NICKEL|49|380 +Brand#41|STANDARD PLATED STEEL|19|380 +Brand#42|ECONOMY ANODIZED COPPER|14|380 +Brand#42|ECONOMY ANODIZED TIN|9|380 +Brand#42|ECONOMY PLATED COPPER|45|380 +Brand#42|ECONOMY PLATED STEEL|14|380 +Brand#42|ECONOMY PLATED TIN|19|380 +Brand#42|MEDIUM ANODIZED STEEL|19|380 +Brand#42|PROMO BURNISHED COPPER|3|380 +Brand#42|PROMO BURNISHED STEEL|49|380 +Brand#42|PROMO PLATED TIN|9|380 +Brand#42|PROMO POLISHED STEEL|9|380 +Brand#42|SMALL ANODIZED COPPER|36|380 +Brand#42|SMALL ANODIZED NICKEL|49|380 +Brand#42|SMALL ANODIZED TIN|14|380 +Brand#42|STANDARD BRUSHED BRASS|19|380 +Brand#42|STANDARD PLATED NICKEL|23|380 +Brand#43|ECONOMY BURNISHED STEEL|45|380 +Brand#43|MEDIUM ANODIZED STEEL|49|380 +Brand#43|MEDIUM BURNISHED STEEL|9|380 +Brand#43|MEDIUM BURNISHED TIN|49|380 +Brand#43|PROMO BRUSHED TIN|19|380 +Brand#43|PROMO BURNISHED NICKEL|14|380 +Brand#43|PROMO PLATED STEEL|14|380 +Brand#43|SMALL PLATED NICKEL|19|380 +Brand#43|SMALL PLATED NICKEL|36|380 +Brand#43|SMALL POLISHED BRASS|49|380 +Brand#43|STANDARD ANODIZED BRASS|19|380 +Brand#43|STANDARD BRUSHED NICKEL|3|380 +Brand#43|STANDARD BURNISHED COPPER|14|380 +Brand#43|STANDARD BURNISHED NICKEL|3|380 +Brand#43|STANDARD PLATED TIN|23|380 +Brand#43|STANDARD POLISHED BRASS|19|380 +Brand#43|STANDARD POLISHED BRASS|23|380 +Brand#44|ECONOMY BRUSHED STEEL|9|380 +Brand#44|ECONOMY PLATED TIN|9|380 +Brand#44|ECONOMY PLATED TIN|36|380 +Brand#44|ECONOMY POLISHED BRASS|36|380 +Brand#44|MEDIUM PLATED BRASS|9|380 +Brand#44|PROMO BRUSHED BRASS|14|380 +Brand#44|PROMO BURNISHED NICKEL|3|380 +Brand#44|PROMO POLISHED NICKEL|19|380 +Brand#44|SMALL ANODIZED BRASS|3|380 +Brand#44|SMALL BRUSHED COPPER|19|380 +Brand#44|STANDARD PLATED TIN|14|380 +Brand#51|ECONOMY BURNISHED BRASS|14|380 +Brand#51|ECONOMY PLATED COPPER|19|380 +Brand#51|ECONOMY POLISHED COPPER|3|380 +Brand#51|LARGE BURNISHED NICKEL|9|380 +Brand#51|MEDIUM PLATED STEEL|14|380 +Brand#51|PROMO BURNISHED BRASS|9|380 +Brand#51|PROMO BURNISHED TIN|45|380 +Brand#51|PROMO POLISHED NICKEL|36|380 +Brand#51|SMALL BRUSHED TIN|36|380 +Brand#51|SMALL PLATED NICKEL|36|380 +Brand#51|STANDARD ANODIZED COPPER|3|380 +Brand#51|STANDARD BURNISHED COPPER|49|380 +Brand#51|STANDARD BURNISHED STEEL|3|380 +Brand#51|STANDARD PLATED STEEL|45|380 +Brand#52|LARGE PLATED NICKEL|49|380 +Brand#52|LARGE PLATED STEEL|23|380 +Brand#52|LARGE POLISHED COPPER|19|380 +Brand#52|MEDIUM ANODIZED NICKEL|9|380 +Brand#52|MEDIUM PLATED BRASS|23|380 +Brand#52|PROMO POLISHED BRASS|36|380 +Brand#52|SMALL ANODIZED COPPER|19|380 +Brand#52|SMALL ANODIZED NICKEL|23|380 +Brand#52|SMALL PLATED NICKEL|3|380 +Brand#52|SMALL PLATED NICKEL|49|380 +Brand#52|STANDARD BURNISHED TIN|49|380 +Brand#53|ECONOMY ANODIZED NICKEL|3|380 +Brand#53|ECONOMY BURNISHED STEEL|19|380 +Brand#53|ECONOMY PLATED TIN|23|380 +Brand#53|ECONOMY POLISHED COPPER|19|380 +Brand#53|LARGE ANODIZED BRASS|19|380 +Brand#53|LARGE BRUSHED COPPER|23|380 +Brand#53|LARGE PLATED STEEL|19|380 +Brand#53|LARGE PLATED TIN|49|380 +Brand#53|LARGE POLISHED STEEL|3|380 +Brand#53|LARGE POLISHED TIN|36|380 +Brand#53|LARGE POLISHED TIN|49|380 +Brand#53|MEDIUM PLATED NICKEL|14|380 +Brand#53|MEDIUM PLATED NICKEL|45|380 +Brand#53|MEDIUM PLATED STEEL|19|380 +Brand#53|PROMO ANODIZED NICKEL|19|380 +Brand#53|PROMO BURNISHED STEEL|19|380 +Brand#53|PROMO BURNISHED TIN|45|380 +Brand#53|SMALL BRUSHED STEEL|19|380 +Brand#53|SMALL BURNISHED BRASS|14|380 +Brand#53|STANDARD ANODIZED COPPER|14|380 +Brand#53|STANDARD ANODIZED NICKEL|45|380 +Brand#53|STANDARD ANODIZED STEEL|36|380 +Brand#53|STANDARD BRUSHED NICKEL|9|380 +Brand#54|ECONOMY ANODIZED COPPER|45|380 +Brand#54|ECONOMY BURNISHED BRASS|23|380 +Brand#54|ECONOMY PLATED NICKEL|19|380 +Brand#54|ECONOMY PLATED STEEL|49|380 +Brand#54|ECONOMY POLISHED TIN|14|380 +Brand#54|ECONOMY POLISHED TIN|19|380 +Brand#54|ECONOMY POLISHED TIN|36|380 +Brand#54|LARGE BURNISHED STEEL|9|380 +Brand#54|LARGE PLATED BRASS|36|380 +Brand#54|LARGE PLATED TIN|14|380 +Brand#54|MEDIUM BRUSHED TIN|23|380 +Brand#54|MEDIUM BURNISHED COPPER|36|380 +Brand#54|MEDIUM PLATED NICKEL|45|380 +Brand#54|MEDIUM PLATED STEEL|3|380 +Brand#54|PROMO BRUSHED STEEL|45|380 +Brand#54|PROMO POLISHED BRASS|19|380 +Brand#54|PROMO POLISHED BRASS|23|380 +Brand#54|PROMO POLISHED BRASS|45|380 +Brand#54|PROMO POLISHED NICKEL|9|380 +Brand#54|PROMO POLISHED STEEL|9|380 +Brand#54|SMALL ANODIZED NICKEL|9|380 +Brand#54|SMALL BRUSHED TIN|14|380 +Brand#54|SMALL BURNISHED COPPER|9|380 +Brand#54|SMALL BURNISHED COPPER|45|380 +Brand#54|STANDARD POLISHED TIN|49|380 +Brand#55|ECONOMY BRUSHED NICKEL|9|380 +Brand#55|ECONOMY BURNISHED BRASS|36|380 +Brand#55|LARGE BRUSHED STEEL|9|380 +Brand#55|LARGE POLISHED STEEL|19|380 +Brand#55|MEDIUM BRUSHED TIN|36|380 +Brand#55|PROMO ANODIZED BRASS|36|380 +Brand#55|PROMO BRUSHED BRASS|14|380 +Brand#55|PROMO PLATED BRASS|36|380 +Brand#55|PROMO POLISHED TIN|23|380 +Brand#55|SMALL ANODIZED BRASS|23|380 +Brand#55|SMALL BRUSHED TIN|45|380 +Brand#55|STANDARD BRUSHED STEEL|23|380 +Brand#55|STANDARD BURNISHED TIN|3|380 +Brand#11|PROMO BRUSHED NICKEL|49|379 +Brand#11|SMALL BRUSHED NICKEL|19|379 +Brand#11|SMALL BRUSHED TIN|14|379 +Brand#12|ECONOMY ANODIZED BRASS|45|379 +Brand#12|ECONOMY PLATED TIN|45|379 +Brand#12|MEDIUM PLATED BRASS|3|379 +Brand#13|ECONOMY POLISHED STEEL|36|379 +Brand#13|LARGE ANODIZED BRASS|14|379 +Brand#13|MEDIUM BURNISHED TIN|19|379 +Brand#13|STANDARD BURNISHED TIN|19|379 +Brand#14|ECONOMY POLISHED TIN|14|379 +Brand#14|ECONOMY POLISHED TIN|36|379 +Brand#14|LARGE BURNISHED STEEL|14|379 +Brand#14|MEDIUM ANODIZED NICKEL|45|379 +Brand#14|PROMO PLATED STEEL|45|379 +Brand#14|SMALL BURNISHED NICKEL|49|379 +Brand#14|SMALL PLATED COPPER|49|379 +Brand#14|SMALL POLISHED TIN|3|379 +Brand#15|ECONOMY BURNISHED BRASS|19|379 +Brand#15|ECONOMY PLATED BRASS|49|379 +Brand#21|ECONOMY ANODIZED TIN|36|379 +Brand#21|ECONOMY BRUSHED NICKEL|9|379 +Brand#21|LARGE BURNISHED COPPER|9|379 +Brand#21|MEDIUM ANODIZED NICKEL|19|379 +Brand#21|MEDIUM ANODIZED STEEL|45|379 +Brand#21|MEDIUM ANODIZED TIN|3|379 +Brand#21|SMALL PLATED STEEL|23|379 +Brand#21|STANDARD BURNISHED STEEL|19|379 +Brand#22|ECONOMY ANODIZED BRASS|9|379 +Brand#22|ECONOMY BRUSHED STEEL|45|379 +Brand#22|ECONOMY BURNISHED COPPER|19|379 +Brand#22|LARGE ANODIZED BRASS|36|379 +Brand#22|LARGE PLATED STEEL|45|379 +Brand#22|MEDIUM ANODIZED NICKEL|19|379 +Brand#22|MEDIUM PLATED STEEL|14|379 +Brand#22|PROMO ANODIZED STEEL|19|379 +Brand#22|SMALL PLATED STEEL|49|379 +Brand#23|ECONOMY BURNISHED NICKEL|9|379 +Brand#23|PROMO BURNISHED TIN|19|379 +Brand#23|SMALL BRUSHED BRASS|14|379 +Brand#24|ECONOMY ANODIZED COPPER|19|379 +Brand#24|ECONOMY BRUSHED NICKEL|49|379 +Brand#24|LARGE BRUSHED BRASS|49|379 +Brand#24|PROMO POLISHED COPPER|23|379 +Brand#24|SMALL ANODIZED BRASS|49|379 +Brand#24|SMALL BRUSHED TIN|36|379 +Brand#24|STANDARD ANODIZED BRASS|49|379 +Brand#25|ECONOMY BRUSHED COPPER|3|379 +Brand#25|ECONOMY PLATED BRASS|14|379 +Brand#25|LARGE POLISHED TIN|23|379 +Brand#25|MEDIUM BRUSHED COPPER|19|379 +Brand#25|MEDIUM BURNISHED STEEL|3|379 +Brand#25|SMALL ANODIZED BRASS|36|379 +Brand#25|SMALL ANODIZED NICKEL|3|379 +Brand#25|SMALL BURNISHED TIN|9|379 +Brand#25|SMALL PLATED TIN|14|379 +Brand#31|MEDIUM BURNISHED NICKEL|14|379 +Brand#31|STANDARD BURNISHED COPPER|45|379 +Brand#31|STANDARD PLATED TIN|14|379 +Brand#32|LARGE POLISHED TIN|36|379 +Brand#32|SMALL BRUSHED NICKEL|9|379 +Brand#32|STANDARD BURNISHED BRASS|49|379 +Brand#32|STANDARD POLISHED BRASS|9|379 +Brand#33|LARGE PLATED NICKEL|49|379 +Brand#34|MEDIUM PLATED BRASS|3|379 +Brand#34|STANDARD ANODIZED COPPER|14|379 +Brand#34|STANDARD BRUSHED TIN|45|379 +Brand#34|STANDARD POLISHED NICKEL|3|379 +Brand#35|ECONOMY BRUSHED STEEL|19|379 +Brand#35|MEDIUM BURNISHED STEEL|49|379 +Brand#35|SMALL ANODIZED COPPER|36|379 +Brand#35|SMALL BURNISHED TIN|49|379 +Brand#35|STANDARD PLATED COPPER|23|379 +Brand#35|STANDARD POLISHED TIN|36|379 +Brand#41|ECONOMY ANODIZED NICKEL|3|379 +Brand#41|ECONOMY ANODIZED TIN|45|379 +Brand#41|MEDIUM PLATED BRASS|49|379 +Brand#41|PROMO PLATED BRASS|23|379 +Brand#41|SMALL BRUSHED BRASS|23|379 +Brand#41|STANDARD BURNISHED NICKEL|9|379 +Brand#42|LARGE POLISHED NICKEL|14|379 +Brand#42|LARGE POLISHED STEEL|36|379 +Brand#42|PROMO BRUSHED STEEL|9|379 +Brand#42|SMALL BURNISHED NICKEL|9|379 +Brand#42|STANDARD BRUSHED COPPER|49|379 +Brand#43|LARGE ANODIZED TIN|19|379 +Brand#43|PROMO BRUSHED TIN|3|379 +Brand#43|SMALL BRUSHED COPPER|45|379 +Brand#44|MEDIUM BURNISHED TIN|19|379 +Brand#44|PROMO BRUSHED NICKEL|19|379 +Brand#44|STANDARD POLISHED BRASS|45|379 +Brand#52|LARGE BURNISHED STEEL|45|379 +Brand#52|PROMO BRUSHED COPPER|45|379 +Brand#52|SMALL ANODIZED COPPER|9|379 +Brand#52|SMALL BRUSHED STEEL|3|379 +Brand#52|STANDARD BRUSHED TIN|45|379 +Brand#53|ECONOMY PLATED BRASS|45|379 +Brand#53|LARGE POLISHED BRASS|14|379 +Brand#53|PROMO ANODIZED STEEL|9|379 +Brand#53|PROMO BURNISHED NICKEL|45|379 +Brand#54|LARGE PLATED STEEL|49|379 +Brand#54|STANDARD BRUSHED BRASS|19|379 +Brand#55|PROMO BURNISHED STEEL|45|379 +Brand#55|SMALL ANODIZED NICKEL|14|379 +Brand#11|LARGE PLATED TIN|45|378 +Brand#12|SMALL BRUSHED TIN|23|378 +Brand#13|LARGE ANODIZED STEEL|9|378 +Brand#13|PROMO PLATED TIN|9|378 +Brand#21|ECONOMY PLATED COPPER|14|378 +Brand#21|MEDIUM BURNISHED BRASS|19|378 +Brand#23|LARGE BRUSHED TIN|9|378 +Brand#41|LARGE POLISHED COPPER|3|378 +Brand#42|LARGE BRUSHED BRASS|23|378 +Brand#43|STANDARD ANODIZED TIN|9|378 +Brand#44|LARGE PLATED STEEL|19|378 +Brand#51|STANDARD ANODIZED TIN|23|378 +Brand#53|PROMO PLATED TIN|49|378 +Brand#54|STANDARD POLISHED BRASS|49|378 +Brand#55|MEDIUM BURNISHED TIN|45|378 +Brand#31|PROMO PLATED TIN|19|377 +Brand#11|ECONOMY ANODIZED NICKEL|45|376 +Brand#11|ECONOMY PLATED COPPER|23|376 +Brand#11|ECONOMY PLATED STEEL|14|376 +Brand#11|ECONOMY POLISHED BRASS|36|376 +Brand#11|ECONOMY POLISHED TIN|19|376 +Brand#11|LARGE ANODIZED STEEL|3|376 +Brand#11|LARGE PLATED NICKEL|19|376 +Brand#11|LARGE POLISHED BRASS|45|376 +Brand#11|LARGE POLISHED TIN|49|376 +Brand#11|MEDIUM ANODIZED NICKEL|45|376 +Brand#11|MEDIUM BRUSHED NICKEL|23|376 +Brand#11|MEDIUM BRUSHED TIN|3|376 +Brand#11|PROMO BRUSHED COPPER|36|376 +Brand#11|PROMO BURNISHED NICKEL|14|376 +Brand#11|SMALL ANODIZED BRASS|19|376 +Brand#11|SMALL POLISHED STEEL|45|376 +Brand#11|STANDARD BRUSHED BRASS|19|376 +Brand#12|ECONOMY PLATED COPPER|45|376 +Brand#12|ECONOMY POLISHED BRASS|36|376 +Brand#12|ECONOMY POLISHED BRASS|49|376 +Brand#12|ECONOMY POLISHED NICKEL|9|376 +Brand#12|LARGE BURNISHED BRASS|23|376 +Brand#12|LARGE POLISHED STEEL|45|376 +Brand#12|MEDIUM BRUSHED BRASS|36|376 +Brand#12|MEDIUM BRUSHED NICKEL|36|376 +Brand#12|MEDIUM BURNISHED BRASS|36|376 +Brand#12|PROMO ANODIZED COPPER|3|376 +Brand#12|PROMO PLATED BRASS|49|376 +Brand#12|PROMO PLATED COPPER|14|376 +Brand#12|SMALL ANODIZED BRASS|14|376 +Brand#12|SMALL BRUSHED COPPER|19|376 +Brand#12|SMALL BRUSHED TIN|49|376 +Brand#12|SMALL PLATED NICKEL|14|376 +Brand#12|SMALL PLATED NICKEL|23|376 +Brand#12|SMALL POLISHED NICKEL|49|376 +Brand#12|STANDARD BRUSHED NICKEL|19|376 +Brand#13|ECONOMY ANODIZED TIN|23|376 +Brand#13|ECONOMY BRUSHED STEEL|49|376 +Brand#13|ECONOMY BRUSHED TIN|19|376 +Brand#13|ECONOMY BRUSHED TIN|36|376 +Brand#13|ECONOMY BURNISHED BRASS|9|376 +Brand#13|ECONOMY POLISHED TIN|9|376 +Brand#13|LARGE PLATED NICKEL|19|376 +Brand#13|LARGE POLISHED TIN|14|376 +Brand#13|MEDIUM ANODIZED BRASS|45|376 +Brand#13|MEDIUM PLATED TIN|9|376 +Brand#13|PROMO BRUSHED BRASS|49|376 +Brand#13|PROMO BRUSHED TIN|49|376 +Brand#13|PROMO BURNISHED BRASS|23|376 +Brand#13|PROMO POLISHED TIN|45|376 +Brand#13|SMALL ANODIZED BRASS|49|376 +Brand#13|SMALL ANODIZED TIN|19|376 +Brand#13|STANDARD PLATED BRASS|14|376 +Brand#13|STANDARD POLISHED NICKEL|3|376 +Brand#14|ECONOMY ANODIZED BRASS|23|376 +Brand#14|ECONOMY BURNISHED STEEL|19|376 +Brand#14|LARGE POLISHED BRASS|14|376 +Brand#14|MEDIUM PLATED COPPER|3|376 +Brand#14|PROMO ANODIZED STEEL|19|376 +Brand#14|PROMO BRUSHED COPPER|45|376 +Brand#14|PROMO BURNISHED BRASS|45|376 +Brand#14|PROMO PLATED COPPER|49|376 +Brand#14|PROMO POLISHED NICKEL|23|376 +Brand#14|SMALL BURNISHED TIN|45|376 +Brand#14|STANDARD POLISHED NICKEL|23|376 +Brand#15|ECONOMY ANODIZED COPPER|45|376 +Brand#15|ECONOMY BURNISHED BRASS|14|376 +Brand#15|LARGE BRUSHED TIN|3|376 +Brand#15|LARGE POLISHED COPPER|19|376 +Brand#15|LARGE POLISHED TIN|45|376 +Brand#15|MEDIUM ANODIZED BRASS|23|376 +Brand#15|MEDIUM ANODIZED COPPER|45|376 +Brand#15|MEDIUM BURNISHED STEEL|49|376 +Brand#15|PROMO ANODIZED COPPER|19|376 +Brand#15|PROMO BURNISHED STEEL|9|376 +Brand#15|PROMO POLISHED COPPER|3|376 +Brand#15|SMALL BRUSHED TIN|14|376 +Brand#15|STANDARD ANODIZED COPPER|49|376 +Brand#15|STANDARD BRUSHED STEEL|9|376 +Brand#15|STANDARD BURNISHED NICKEL|3|376 +Brand#15|STANDARD BURNISHED STEEL|49|376 +Brand#15|STANDARD POLISHED BRASS|23|376 +Brand#15|STANDARD POLISHED NICKEL|23|376 +Brand#21|ECONOMY ANODIZED NICKEL|23|376 +Brand#21|ECONOMY ANODIZED STEEL|36|376 +Brand#21|ECONOMY BRUSHED STEEL|49|376 +Brand#21|ECONOMY PLATED BRASS|45|376 +Brand#21|ECONOMY PLATED STEEL|14|376 +Brand#21|LARGE POLISHED COPPER|14|376 +Brand#21|PROMO BRUSHED COPPER|45|376 +Brand#21|PROMO BRUSHED NICKEL|36|376 +Brand#21|PROMO PLATED STEEL|14|376 +Brand#21|SMALL PLATED NICKEL|19|376 +Brand#21|STANDARD ANODIZED TIN|14|376 +Brand#22|ECONOMY BRUSHED BRASS|45|376 +Brand#22|ECONOMY PLATED TIN|19|376 +Brand#22|LARGE ANODIZED BRASS|45|376 +Brand#22|LARGE ANODIZED BRASS|49|376 +Brand#22|LARGE ANODIZED COPPER|3|376 +Brand#22|LARGE BURNISHED BRASS|14|376 +Brand#22|LARGE PLATED NICKEL|3|376 +Brand#22|LARGE POLISHED NICKEL|3|376 +Brand#22|LARGE POLISHED NICKEL|23|376 +Brand#22|MEDIUM BRUSHED TIN|45|376 +Brand#22|PROMO ANODIZED TIN|23|376 +Brand#22|PROMO BURNISHED BRASS|36|376 +Brand#22|PROMO BURNISHED NICKEL|45|376 +Brand#22|SMALL BRUSHED TIN|49|376 +Brand#22|SMALL PLATED BRASS|23|376 +Brand#22|SMALL PLATED TIN|3|376 +Brand#22|STANDARD BRUSHED STEEL|3|376 +Brand#22|STANDARD BURNISHED TIN|36|376 +Brand#23|ECONOMY BRUSHED NICKEL|14|376 +Brand#23|ECONOMY BRUSHED STEEL|9|376 +Brand#23|ECONOMY POLISHED STEEL|19|376 +Brand#23|LARGE ANODIZED COPPER|49|376 +Brand#23|LARGE ANODIZED TIN|19|376 +Brand#23|MEDIUM PLATED BRASS|36|376 +Brand#23|MEDIUM PLATED TIN|14|376 +Brand#23|PROMO POLISHED COPPER|14|376 +Brand#23|PROMO POLISHED TIN|3|376 +Brand#23|SMALL ANODIZED COPPER|19|376 +Brand#23|SMALL BRUSHED COPPER|14|376 +Brand#23|SMALL BRUSHED TIN|14|376 +Brand#23|SMALL BURNISHED COPPER|36|376 +Brand#23|STANDARD BURNISHED COPPER|49|376 +Brand#23|STANDARD PLATED BRASS|3|376 +Brand#23|STANDARD POLISHED STEEL|49|376 +Brand#24|ECONOMY ANODIZED NICKEL|23|376 +Brand#24|LARGE PLATED NICKEL|3|376 +Brand#24|MEDIUM ANODIZED NICKEL|9|376 +Brand#24|MEDIUM BRUSHED TIN|45|376 +Brand#24|MEDIUM PLATED COPPER|19|376 +Brand#24|PROMO BURNISHED BRASS|3|376 +Brand#24|PROMO BURNISHED BRASS|36|376 +Brand#24|PROMO BURNISHED COPPER|19|376 +Brand#24|PROMO POLISHED TIN|49|376 +Brand#24|SMALL BURNISHED STEEL|36|376 +Brand#24|SMALL PLATED STEEL|9|376 +Brand#24|STANDARD BRUSHED COPPER|9|376 +Brand#24|STANDARD BRUSHED NICKEL|23|376 +Brand#24|STANDARD PLATED NICKEL|19|376 +Brand#24|STANDARD POLISHED STEEL|3|376 +Brand#25|ECONOMY BURNISHED STEEL|45|376 +Brand#25|ECONOMY POLISHED TIN|19|376 +Brand#25|LARGE BRUSHED BRASS|45|376 +Brand#25|LARGE BURNISHED NICKEL|23|376 +Brand#25|MEDIUM ANODIZED BRASS|36|376 +Brand#25|MEDIUM PLATED NICKEL|19|376 +Brand#25|PROMO PLATED COPPER|45|376 +Brand#25|PROMO POLISHED BRASS|36|376 +Brand#25|PROMO POLISHED NICKEL|23|376 +Brand#25|PROMO POLISHED TIN|14|376 +Brand#25|SMALL BURNISHED COPPER|36|376 +Brand#25|SMALL BURNISHED NICKEL|9|376 +Brand#25|SMALL POLISHED COPPER|3|376 +Brand#25|SMALL POLISHED TIN|45|376 +Brand#25|STANDARD ANODIZED BRASS|23|376 +Brand#25|STANDARD BRUSHED NICKEL|3|376 +Brand#25|STANDARD BRUSHED NICKEL|19|376 +Brand#25|STANDARD BRUSHED NICKEL|23|376 +Brand#25|STANDARD BRUSHED TIN|23|376 +Brand#25|STANDARD PLATED COPPER|9|376 +Brand#31|ECONOMY PLATED STEEL|23|376 +Brand#31|LARGE POLISHED NICKEL|23|376 +Brand#31|LARGE POLISHED TIN|23|376 +Brand#31|MEDIUM BURNISHED TIN|36|376 +Brand#31|PROMO ANODIZED COPPER|19|376 +Brand#31|PROMO BRUSHED BRASS|45|376 +Brand#31|PROMO BRUSHED COPPER|19|376 +Brand#31|PROMO BRUSHED NICKEL|3|376 +Brand#31|SMALL ANODIZED BRASS|3|376 +Brand#31|SMALL BRUSHED BRASS|36|376 +Brand#31|SMALL POLISHED BRASS|36|376 +Brand#31|SMALL POLISHED NICKEL|49|376 +Brand#31|STANDARD ANODIZED COPPER|23|376 +Brand#31|STANDARD ANODIZED COPPER|36|376 +Brand#31|STANDARD ANODIZED STEEL|3|376 +Brand#31|STANDARD ANODIZED TIN|36|376 +Brand#31|STANDARD BRUSHED COPPER|14|376 +Brand#32|LARGE ANODIZED BRASS|14|376 +Brand#32|LARGE ANODIZED STEEL|3|376 +Brand#32|LARGE BRUSHED BRASS|3|376 +Brand#32|LARGE BURNISHED NICKEL|9|376 +Brand#32|LARGE POLISHED BRASS|36|376 +Brand#32|MEDIUM ANODIZED TIN|23|376 +Brand#32|MEDIUM BRUSHED TIN|19|376 +Brand#32|PROMO BRUSHED BRASS|23|376 +Brand#32|PROMO BURNISHED BRASS|19|376 +Brand#32|PROMO BURNISHED BRASS|36|376 +Brand#32|PROMO POLISHED COPPER|14|376 +Brand#32|PROMO POLISHED NICKEL|19|376 +Brand#32|SMALL PLATED TIN|49|376 +Brand#32|STANDARD BRUSHED BRASS|45|376 +Brand#32|STANDARD BRUSHED NICKEL|49|376 +Brand#32|STANDARD PLATED BRASS|9|376 +Brand#32|STANDARD POLISHED TIN|45|376 +Brand#33|ECONOMY ANODIZED NICKEL|9|376 +Brand#33|ECONOMY BRUSHED TIN|9|376 +Brand#33|ECONOMY BURNISHED STEEL|36|376 +Brand#33|ECONOMY BURNISHED TIN|49|376 +Brand#33|LARGE ANODIZED NICKEL|3|376 +Brand#33|LARGE BURNISHED NICKEL|49|376 +Brand#33|LARGE POLISHED BRASS|9|376 +Brand#33|LARGE POLISHED STEEL|3|376 +Brand#33|MEDIUM BRUSHED COPPER|45|376 +Brand#33|MEDIUM BURNISHED STEEL|3|376 +Brand#33|MEDIUM PLATED BRASS|19|376 +Brand#33|MEDIUM PLATED STEEL|14|376 +Brand#33|PROMO BRUSHED NICKEL|3|376 +Brand#33|SMALL ANODIZED BRASS|14|376 +Brand#33|SMALL ANODIZED COPPER|3|376 +Brand#33|SMALL BURNISHED COPPER|45|376 +Brand#33|STANDARD BRUSHED STEEL|3|376 +Brand#33|STANDARD BRUSHED STEEL|14|376 +Brand#33|STANDARD PLATED BRASS|45|376 +Brand#33|STANDARD POLISHED BRASS|14|376 +Brand#33|STANDARD POLISHED BRASS|49|376 +Brand#34|ECONOMY POLISHED NICKEL|49|376 +Brand#34|LARGE ANODIZED STEEL|9|376 +Brand#34|LARGE BURNISHED COPPER|49|376 +Brand#34|LARGE POLISHED BRASS|14|376 +Brand#34|LARGE POLISHED BRASS|49|376 +Brand#34|LARGE POLISHED NICKEL|19|376 +Brand#34|LARGE POLISHED STEEL|19|376 +Brand#34|MEDIUM ANODIZED BRASS|36|376 +Brand#34|MEDIUM ANODIZED BRASS|45|376 +Brand#34|MEDIUM ANODIZED STEEL|3|376 +Brand#34|MEDIUM ANODIZED TIN|9|376 +Brand#34|MEDIUM PLATED TIN|9|376 +Brand#34|PROMO BRUSHED BRASS|49|376 +Brand#34|PROMO BRUSHED STEEL|36|376 +Brand#34|PROMO POLISHED NICKEL|45|376 +Brand#34|SMALL BRUSHED STEEL|23|376 +Brand#34|STANDARD ANODIZED NICKEL|49|376 +Brand#34|STANDARD BURNISHED NICKEL|23|376 +Brand#34|STANDARD BURNISHED STEEL|23|376 +Brand#34|STANDARD POLISHED BRASS|49|376 +Brand#35|ECONOMY ANODIZED NICKEL|45|376 +Brand#35|ECONOMY BRUSHED TIN|45|376 +Brand#35|ECONOMY BURNISHED STEEL|3|376 +Brand#35|ECONOMY BURNISHED STEEL|19|376 +Brand#35|ECONOMY PLATED NICKEL|19|376 +Brand#35|ECONOMY PLATED NICKEL|45|376 +Brand#35|ECONOMY POLISHED COPPER|19|376 +Brand#35|ECONOMY POLISHED STEEL|19|376 +Brand#35|LARGE PLATED COPPER|49|376 +Brand#35|LARGE POLISHED NICKEL|49|376 +Brand#35|MEDIUM ANODIZED BRASS|3|376 +Brand#35|MEDIUM ANODIZED NICKEL|45|376 +Brand#35|PROMO ANODIZED STEEL|14|376 +Brand#35|SMALL BRUSHED COPPER|49|376 +Brand#35|SMALL PLATED COPPER|45|376 +Brand#35|SMALL PLATED NICKEL|45|376 +Brand#35|STANDARD PLATED COPPER|49|376 +Brand#35|STANDARD POLISHED STEEL|19|376 +Brand#41|ECONOMY BURNISHED TIN|49|376 +Brand#41|LARGE BRUSHED NICKEL|3|376 +Brand#41|LARGE BURNISHED NICKEL|45|376 +Brand#41|MEDIUM BRUSHED COPPER|23|376 +Brand#41|MEDIUM BURNISHED COPPER|49|376 +Brand#41|MEDIUM PLATED NICKEL|9|376 +Brand#41|PROMO ANODIZED TIN|14|376 +Brand#41|PROMO BRUSHED NICKEL|49|376 +Brand#41|PROMO BURNISHED STEEL|49|376 +Brand#41|SMALL ANODIZED TIN|19|376 +Brand#41|STANDARD PLATED COPPER|14|376 +Brand#42|ECONOMY ANODIZED NICKEL|36|376 +Brand#42|ECONOMY BURNISHED STEEL|45|376 +Brand#42|LARGE ANODIZED NICKEL|19|376 +Brand#42|LARGE BURNISHED COPPER|19|376 +Brand#42|MEDIUM BRUSHED TIN|19|376 +Brand#42|MEDIUM BURNISHED NICKEL|9|376 +Brand#42|MEDIUM PLATED COPPER|23|376 +Brand#42|PROMO BRUSHED TIN|19|376 +Brand#42|PROMO BURNISHED COPPER|14|376 +Brand#42|PROMO PLATED BRASS|36|376 +Brand#42|SMALL BRUSHED COPPER|14|376 +Brand#42|SMALL BRUSHED STEEL|49|376 +Brand#42|STANDARD BRUSHED NICKEL|23|376 +Brand#42|STANDARD BURNISHED BRASS|23|376 +Brand#42|STANDARD BURNISHED TIN|14|376 +Brand#43|ECONOMY PLATED NICKEL|14|376 +Brand#43|ECONOMY PLATED STEEL|19|376 +Brand#43|ECONOMY POLISHED BRASS|14|376 +Brand#43|LARGE BRUSHED BRASS|23|376 +Brand#43|LARGE BRUSHED NICKEL|45|376 +Brand#43|LARGE BRUSHED TIN|14|376 +Brand#43|MEDIUM BRUSHED BRASS|49|376 +Brand#43|MEDIUM BURNISHED COPPER|3|376 +Brand#43|STANDARD POLISHED TIN|19|376 +Brand#43|STANDARD POLISHED TIN|49|376 +Brand#44|ECONOMY ANODIZED BRASS|45|376 +Brand#44|ECONOMY PLATED TIN|14|376 +Brand#44|LARGE BURNISHED NICKEL|36|376 +Brand#44|LARGE POLISHED NICKEL|3|376 +Brand#44|MEDIUM BURNISHED COPPER|36|376 +Brand#44|MEDIUM PLATED STEEL|9|376 +Brand#44|PROMO ANODIZED STEEL|9|376 +Brand#44|PROMO ANODIZED TIN|19|376 +Brand#44|PROMO BRUSHED STEEL|3|376 +Brand#44|PROMO BURNISHED COPPER|23|376 +Brand#44|SMALL ANODIZED BRASS|14|376 +Brand#44|SMALL BURNISHED COPPER|49|376 +Brand#44|SMALL BURNISHED NICKEL|9|376 +Brand#44|SMALL PLATED NICKEL|45|376 +Brand#44|STANDARD POLISHED STEEL|45|376 +Brand#51|ECONOMY ANODIZED TIN|3|376 +Brand#51|ECONOMY BRUSHED TIN|23|376 +Brand#51|ECONOMY BURNISHED COPPER|14|376 +Brand#51|MEDIUM BRUSHED NICKEL|23|376 +Brand#51|PROMO BRUSHED NICKEL|23|376 +Brand#51|PROMO POLISHED COPPER|19|376 +Brand#51|SMALL BURNISHED NICKEL|19|376 +Brand#51|SMALL PLATED TIN|23|376 +Brand#51|STANDARD ANODIZED NICKEL|14|376 +Brand#51|STANDARD ANODIZED TIN|45|376 +Brand#51|STANDARD BURNISHED NICKEL|9|376 +Brand#51|STANDARD BURNISHED TIN|45|376 +Brand#51|STANDARD PLATED BRASS|9|376 +Brand#52|ECONOMY ANODIZED BRASS|49|376 +Brand#52|ECONOMY BRUSHED BRASS|19|376 +Brand#52|ECONOMY BURNISHED BRASS|14|376 +Brand#52|LARGE PLATED TIN|9|376 +Brand#52|LARGE PLATED TIN|14|376 +Brand#52|MEDIUM ANODIZED NICKEL|36|376 +Brand#52|MEDIUM PLATED BRASS|3|376 +Brand#52|MEDIUM PLATED BRASS|49|376 +Brand#52|PROMO PLATED NICKEL|3|376 +Brand#52|SMALL POLISHED COPPER|9|376 +Brand#52|STANDARD POLISHED COPPER|14|376 +Brand#53|ECONOMY POLISHED NICKEL|9|376 +Brand#53|LARGE BURNISHED NICKEL|45|376 +Brand#53|LARGE BURNISHED TIN|49|376 +Brand#53|LARGE POLISHED TIN|23|376 +Brand#53|SMALL ANODIZED BRASS|14|376 +Brand#53|SMALL ANODIZED BRASS|19|376 +Brand#53|STANDARD ANODIZED COPPER|36|376 +Brand#54|ECONOMY PLATED BRASS|14|376 +Brand#54|ECONOMY PLATED STEEL|23|376 +Brand#54|ECONOMY POLISHED BRASS|23|376 +Brand#54|LARGE BRUSHED COPPER|45|376 +Brand#54|LARGE POLISHED BRASS|3|376 +Brand#54|LARGE POLISHED NICKEL|9|376 +Brand#54|MEDIUM ANODIZED BRASS|23|376 +Brand#54|MEDIUM ANODIZED NICKEL|45|376 +Brand#54|MEDIUM BURNISHED NICKEL|23|376 +Brand#54|PROMO BRUSHED BRASS|3|376 +Brand#54|PROMO BRUSHED TIN|9|376 +Brand#54|PROMO BRUSHED TIN|23|376 +Brand#54|PROMO BURNISHED BRASS|45|376 +Brand#54|PROMO BURNISHED NICKEL|3|376 +Brand#54|PROMO BURNISHED TIN|14|376 +Brand#54|PROMO POLISHED NICKEL|49|376 +Brand#54|SMALL BRUSHED COPPER|14|376 +Brand#54|SMALL PLATED COPPER|49|376 +Brand#54|SMALL PLATED TIN|45|376 +Brand#54|SMALL POLISHED COPPER|45|376 +Brand#54|STANDARD ANODIZED COPPER|14|376 +Brand#54|STANDARD ANODIZED NICKEL|49|376 +Brand#54|STANDARD BURNISHED TIN|19|376 +Brand#55|ECONOMY ANODIZED COPPER|23|376 +Brand#55|ECONOMY POLISHED TIN|23|376 +Brand#55|MEDIUM PLATED STEEL|9|376 +Brand#55|PROMO ANODIZED BRASS|9|376 +Brand#55|PROMO ANODIZED TIN|45|376 +Brand#55|PROMO BRUSHED COPPER|3|376 +Brand#55|PROMO BURNISHED COPPER|14|376 +Brand#55|PROMO POLISHED TIN|14|376 +Brand#55|SMALL PLATED NICKEL|3|376 +Brand#55|SMALL POLISHED STEEL|36|376 +Brand#55|STANDARD PLATED BRASS|19|376 +Brand#55|STANDARD PLATED STEEL|14|376 +Brand#55|STANDARD PLATED TIN|3|376 +Brand#55|STANDARD POLISHED TIN|36|376 +Brand#11|ECONOMY PLATED NICKEL|49|375 +Brand#11|SMALL PLATED STEEL|3|375 +Brand#11|STANDARD PLATED STEEL|3|375 +Brand#12|PROMO ANODIZED NICKEL|36|375 +Brand#12|PROMO BURNISHED BRASS|9|375 +Brand#12|SMALL POLISHED TIN|3|375 +Brand#12|STANDARD BURNISHED STEEL|49|375 +Brand#13|LARGE POLISHED COPPER|36|375 +Brand#13|MEDIUM BRUSHED TIN|3|375 +Brand#13|SMALL ANODIZED TIN|14|375 +Brand#13|SMALL POLISHED STEEL|23|375 +Brand#13|STANDARD PLATED STEEL|23|375 +Brand#13|STANDARD POLISHED NICKEL|19|375 +Brand#14|PROMO ANODIZED BRASS|3|375 +Brand#14|PROMO BRUSHED COPPER|3|375 +Brand#14|STANDARD PLATED TIN|14|375 +Brand#15|PROMO BURNISHED NICKEL|45|375 +Brand#15|STANDARD PLATED NICKEL|14|375 +Brand#15|STANDARD PLATED STEEL|23|375 +Brand#21|MEDIUM BRUSHED TIN|19|375 +Brand#21|PROMO PLATED TIN|14|375 +Brand#21|SMALL POLISHED NICKEL|19|375 +Brand#22|LARGE BURNISHED NICKEL|49|375 +Brand#22|MEDIUM ANODIZED COPPER|9|375 +Brand#22|MEDIUM PLATED NICKEL|3|375 +Brand#22|PROMO POLISHED COPPER|9|375 +Brand#22|STANDARD BURNISHED TIN|45|375 +Brand#22|STANDARD PLATED COPPER|9|375 +Brand#23|ECONOMY POLISHED BRASS|9|375 +Brand#23|LARGE BRUSHED NICKEL|36|375 +Brand#23|PROMO ANODIZED BRASS|36|375 +Brand#23|SMALL BURNISHED COPPER|23|375 +Brand#23|STANDARD PLATED NICKEL|3|375 +Brand#24|STANDARD ANODIZED COPPER|36|375 +Brand#24|STANDARD PLATED COPPER|9|375 +Brand#25|LARGE ANODIZED COPPER|9|375 +Brand#25|LARGE PLATED COPPER|19|375 +Brand#25|LARGE POLISHED BRASS|36|375 +Brand#25|PROMO ANODIZED STEEL|14|375 +Brand#25|PROMO PLATED STEEL|49|375 +Brand#25|SMALL BURNISHED BRASS|45|375 +Brand#31|ECONOMY BRUSHED STEEL|45|375 +Brand#31|LARGE BRUSHED COPPER|36|375 +Brand#31|LARGE BRUSHED COPPER|45|375 +Brand#31|PROMO BURNISHED BRASS|3|375 +Brand#31|PROMO BURNISHED STEEL|19|375 +Brand#31|PROMO POLISHED STEEL|3|375 +Brand#31|SMALL PLATED BRASS|49|375 +Brand#31|SMALL PLATED COPPER|45|375 +Brand#31|STANDARD ANODIZED BRASS|14|375 +Brand#32|ECONOMY BRUSHED BRASS|23|375 +Brand#32|ECONOMY PLATED COPPER|3|375 +Brand#32|ECONOMY POLISHED NICKEL|9|375 +Brand#32|PROMO BRUSHED COPPER|36|375 +Brand#32|SMALL ANODIZED TIN|14|375 +Brand#32|SMALL POLISHED BRASS|36|375 +Brand#32|STANDARD BRUSHED COPPER|9|375 +Brand#33|LARGE BURNISHED TIN|23|375 +Brand#33|PROMO PLATED COPPER|3|375 +Brand#33|PROMO PLATED NICKEL|14|375 +Brand#33|SMALL BURNISHED NICKEL|49|375 +Brand#33|STANDARD POLISHED TIN|49|375 +Brand#34|LARGE BRUSHED TIN|23|375 +Brand#34|LARGE BRUSHED TIN|36|375 +Brand#34|MEDIUM ANODIZED TIN|49|375 +Brand#34|PROMO BRUSHED BRASS|19|375 +Brand#34|PROMO BURNISHED BRASS|49|375 +Brand#35|SMALL BURNISHED BRASS|3|375 +Brand#35|SMALL PLATED STEEL|14|375 +Brand#35|SMALL POLISHED BRASS|14|375 +Brand#41|SMALL ANODIZED COPPER|19|375 +Brand#41|SMALL BRUSHED STEEL|9|375 +Brand#41|SMALL POLISHED NICKEL|14|375 +Brand#42|ECONOMY ANODIZED STEEL|14|375 +Brand#42|ECONOMY BURNISHED STEEL|14|375 +Brand#42|LARGE PLATED BRASS|23|375 +Brand#43|LARGE BURNISHED TIN|14|375 +Brand#44|LARGE BURNISHED NICKEL|14|375 +Brand#44|LARGE POLISHED STEEL|14|375 +Brand#44|MEDIUM BRUSHED STEEL|14|375 +Brand#44|PROMO ANODIZED COPPER|23|375 +Brand#44|PROMO BRUSHED BRASS|19|375 +Brand#44|SMALL PLATED COPPER|23|375 +Brand#44|STANDARD ANODIZED BRASS|36|375 +Brand#51|ECONOMY BURNISHED COPPER|45|375 +Brand#51|ECONOMY PLATED BRASS|3|375 +Brand#51|ECONOMY POLISHED NICKEL|23|375 +Brand#51|LARGE BURNISHED TIN|23|375 +Brand#51|MEDIUM ANODIZED COPPER|49|375 +Brand#51|STANDARD ANODIZED BRASS|49|375 +Brand#52|STANDARD POLISHED NICKEL|45|375 +Brand#52|STANDARD POLISHED STEEL|49|375 +Brand#53|MEDIUM BRUSHED STEEL|3|375 +Brand#53|MEDIUM BURNISHED STEEL|36|375 +Brand#53|PROMO POLISHED TIN|45|375 +Brand#53|SMALL PLATED NICKEL|14|375 +Brand#54|ECONOMY POLISHED STEEL|45|375 +Brand#54|LARGE POLISHED TIN|45|375 +Brand#54|MEDIUM PLATED COPPER|49|375 +Brand#55|SMALL BURNISHED TIN|23|375 +Brand#55|STANDARD PLATED BRASS|23|375 +Brand#14|MEDIUM BURNISHED TIN|9|374 +Brand#21|PROMO BRUSHED NICKEL|9|374 +Brand#25|PROMO POLISHED STEEL|9|374 +Brand#31|ECONOMY ANODIZED NICKEL|9|374 +Brand#51|PROMO POLISHED COPPER|23|374 +Brand#51|SMALL PLATED NICKEL|45|374 +Brand#52|ECONOMY BURNISHED TIN|14|374 +Brand#12|ECONOMY PLATED COPPER|49|373 +Brand#11|ECONOMY ANODIZED TIN|49|372 +Brand#11|ECONOMY BURNISHED TIN|9|372 +Brand#11|ECONOMY POLISHED TIN|14|372 +Brand#11|LARGE BRUSHED STEEL|3|372 +Brand#11|LARGE BURNISHED TIN|19|372 +Brand#11|LARGE POLISHED BRASS|36|372 +Brand#11|MEDIUM ANODIZED TIN|45|372 +Brand#11|MEDIUM BURNISHED STEEL|49|372 +Brand#11|MEDIUM PLATED TIN|3|372 +Brand#11|PROMO BURNISHED BRASS|49|372 +Brand#11|PROMO POLISHED BRASS|49|372 +Brand#11|SMALL ANODIZED STEEL|23|372 +Brand#11|SMALL BURNISHED NICKEL|23|372 +Brand#11|STANDARD POLISHED COPPER|3|372 +Brand#12|ECONOMY POLISHED NICKEL|36|372 +Brand#12|LARGE BRUSHED BRASS|49|372 +Brand#12|LARGE BURNISHED COPPER|23|372 +Brand#12|LARGE POLISHED COPPER|9|372 +Brand#12|LARGE POLISHED TIN|19|372 +Brand#12|PROMO BURNISHED STEEL|36|372 +Brand#12|PROMO PLATED NICKEL|14|372 +Brand#12|SMALL ANODIZED TIN|23|372 +Brand#12|SMALL BRUSHED TIN|19|372 +Brand#12|SMALL BURNISHED TIN|36|372 +Brand#12|SMALL PLATED STEEL|14|372 +Brand#12|STANDARD BURNISHED TIN|19|372 +Brand#12|STANDARD POLISHED BRASS|45|372 +Brand#12|STANDARD POLISHED TIN|9|372 +Brand#13|ECONOMY ANODIZED BRASS|49|372 +Brand#13|ECONOMY BRUSHED COPPER|45|372 +Brand#13|ECONOMY PLATED COPPER|49|372 +Brand#13|ECONOMY PLATED NICKEL|49|372 +Brand#13|LARGE BRUSHED TIN|19|372 +Brand#13|MEDIUM ANODIZED NICKEL|9|372 +Brand#13|MEDIUM PLATED COPPER|23|372 +Brand#13|PROMO ANODIZED BRASS|36|372 +Brand#13|PROMO POLISHED STEEL|23|372 +Brand#13|SMALL BURNISHED BRASS|19|372 +Brand#13|SMALL BURNISHED TIN|36|372 +Brand#13|STANDARD ANODIZED TIN|36|372 +Brand#13|STANDARD BURNISHED STEEL|49|372 +Brand#13|STANDARD PLATED COPPER|36|372 +Brand#13|STANDARD POLISHED STEEL|3|372 +Brand#14|ECONOMY BURNISHED STEEL|45|372 +Brand#14|LARGE BURNISHED BRASS|45|372 +Brand#14|LARGE PLATED TIN|3|372 +Brand#14|MEDIUM BRUSHED NICKEL|45|372 +Brand#14|SMALL BURNISHED STEEL|19|372 +Brand#14|SMALL POLISHED STEEL|14|372 +Brand#14|STANDARD ANODIZED COPPER|36|372 +Brand#14|STANDARD ANODIZED TIN|9|372 +Brand#14|STANDARD BURNISHED STEEL|9|372 +Brand#14|STANDARD POLISHED BRASS|49|372 +Brand#15|ECONOMY BURNISHED COPPER|9|372 +Brand#15|ECONOMY BURNISHED NICKEL|14|372 +Brand#15|ECONOMY PLATED STEEL|49|372 +Brand#15|ECONOMY POLISHED BRASS|3|372 +Brand#15|LARGE ANODIZED NICKEL|23|372 +Brand#15|LARGE BRUSHED COPPER|49|372 +Brand#15|LARGE BRUSHED NICKEL|19|372 +Brand#15|LARGE BRUSHED NICKEL|23|372 +Brand#15|LARGE PLATED NICKEL|9|372 +Brand#15|LARGE POLISHED NICKEL|45|372 +Brand#15|MEDIUM PLATED COPPER|19|372 +Brand#15|SMALL PLATED COPPER|3|372 +Brand#15|SMALL POLISHED STEEL|19|372 +Brand#15|STANDARD BRUSHED STEEL|45|372 +Brand#15|STANDARD PLATED TIN|23|372 +Brand#15|STANDARD POLISHED BRASS|49|372 +Brand#21|ECONOMY ANODIZED STEEL|23|372 +Brand#21|ECONOMY BRUSHED BRASS|3|372 +Brand#21|ECONOMY BURNISHED BRASS|23|372 +Brand#21|ECONOMY BURNISHED COPPER|49|372 +Brand#21|ECONOMY BURNISHED NICKEL|3|372 +Brand#21|ECONOMY BURNISHED STEEL|49|372 +Brand#21|ECONOMY PLATED COPPER|36|372 +Brand#21|LARGE ANODIZED NICKEL|14|372 +Brand#21|LARGE BRUSHED STEEL|3|372 +Brand#21|LARGE BURNISHED TIN|49|372 +Brand#21|LARGE PLATED STEEL|9|372 +Brand#21|MEDIUM BRUSHED TIN|23|372 +Brand#21|MEDIUM PLATED BRASS|45|372 +Brand#21|MEDIUM PLATED NICKEL|36|372 +Brand#21|PROMO ANODIZED STEEL|19|372 +Brand#21|PROMO BRUSHED STEEL|36|372 +Brand#21|PROMO PLATED NICKEL|49|372 +Brand#21|PROMO POLISHED BRASS|36|372 +Brand#21|SMALL BRUSHED BRASS|9|372 +Brand#21|SMALL BURNISHED BRASS|36|372 +Brand#21|SMALL BURNISHED NICKEL|3|372 +Brand#21|STANDARD ANODIZED STEEL|14|372 +Brand#21|STANDARD BRUSHED BRASS|23|372 +Brand#21|STANDARD POLISHED TIN|14|372 +Brand#22|ECONOMY BURNISHED STEEL|36|372 +Brand#22|ECONOMY POLISHED TIN|36|372 +Brand#22|LARGE BURNISHED BRASS|9|372 +Brand#22|MEDIUM BRUSHED COPPER|45|372 +Brand#22|MEDIUM BRUSHED COPPER|49|372 +Brand#22|MEDIUM BRUSHED STEEL|19|372 +Brand#22|PROMO ANODIZED COPPER|9|372 +Brand#22|PROMO BURNISHED BRASS|9|372 +Brand#22|PROMO BURNISHED COPPER|9|372 +Brand#22|SMALL ANODIZED NICKEL|14|372 +Brand#22|SMALL BRUSHED STEEL|45|372 +Brand#22|SMALL PLATED COPPER|19|372 +Brand#22|STANDARD ANODIZED NICKEL|14|372 +Brand#22|STANDARD ANODIZED NICKEL|49|372 +Brand#22|STANDARD BURNISHED NICKEL|9|372 +Brand#23|ECONOMY ANODIZED STEEL|23|372 +Brand#23|ECONOMY ANODIZED STEEL|45|372 +Brand#23|ECONOMY BRUSHED BRASS|9|372 +Brand#23|ECONOMY POLISHED TIN|49|372 +Brand#23|LARGE ANODIZED NICKEL|23|372 +Brand#23|LARGE BURNISHED TIN|49|372 +Brand#23|LARGE PLATED STEEL|49|372 +Brand#23|PROMO ANODIZED BRASS|19|372 +Brand#23|PROMO BRUSHED NICKEL|49|372 +Brand#23|PROMO PLATED BRASS|3|372 +Brand#23|PROMO PLATED STEEL|19|372 +Brand#23|PROMO PLATED STEEL|36|372 +Brand#23|PROMO PLATED TIN|19|372 +Brand#23|PROMO POLISHED COPPER|3|372 +Brand#23|PROMO POLISHED TIN|9|372 +Brand#23|SMALL BRUSHED BRASS|45|372 +Brand#23|SMALL BURNISHED COPPER|14|372 +Brand#23|SMALL BURNISHED COPPER|49|372 +Brand#23|STANDARD ANODIZED NICKEL|23|372 +Brand#23|STANDARD ANODIZED TIN|19|372 +Brand#23|STANDARD BRUSHED TIN|3|372 +Brand#23|STANDARD PLATED NICKEL|14|372 +Brand#23|STANDARD POLISHED BRASS|45|372 +Brand#24|ECONOMY ANODIZED STEEL|49|372 +Brand#24|ECONOMY BURNISHED NICKEL|36|372 +Brand#24|ECONOMY PLATED BRASS|9|372 +Brand#24|LARGE ANODIZED NICKEL|45|372 +Brand#24|LARGE BRUSHED COPPER|3|372 +Brand#24|PROMO ANODIZED BRASS|45|372 +Brand#24|PROMO BURNISHED TIN|49|372 +Brand#24|PROMO PLATED COPPER|9|372 +Brand#24|PROMO POLISHED BRASS|14|372 +Brand#24|STANDARD BURNISHED STEEL|36|372 +Brand#24|STANDARD POLISHED BRASS|23|372 +Brand#24|STANDARD POLISHED COPPER|19|372 +Brand#25|ECONOMY BRUSHED COPPER|23|372 +Brand#25|ECONOMY BURNISHED COPPER|3|372 +Brand#25|MEDIUM ANODIZED NICKEL|9|372 +Brand#25|MEDIUM BRUSHED STEEL|3|372 +Brand#25|MEDIUM PLATED BRASS|3|372 +Brand#25|MEDIUM PLATED COPPER|49|372 +Brand#25|PROMO ANODIZED NICKEL|45|372 +Brand#25|PROMO ANODIZED STEEL|45|372 +Brand#25|PROMO POLISHED TIN|3|372 +Brand#25|SMALL ANODIZED NICKEL|23|372 +Brand#25|SMALL BRUSHED TIN|3|372 +Brand#25|SMALL POLISHED TIN|14|372 +Brand#31|ECONOMY ANODIZED BRASS|9|372 +Brand#31|ECONOMY BRUSHED COPPER|36|372 +Brand#31|ECONOMY BURNISHED BRASS|14|372 +Brand#31|ECONOMY POLISHED COPPER|45|372 +Brand#31|LARGE BRUSHED NICKEL|49|372 +Brand#31|LARGE BURNISHED TIN|36|372 +Brand#31|MEDIUM ANODIZED TIN|49|372 +Brand#31|MEDIUM BRUSHED STEEL|45|372 +Brand#31|MEDIUM BURNISHED STEEL|45|372 +Brand#31|MEDIUM PLATED BRASS|36|372 +Brand#31|MEDIUM PLATED TIN|23|372 +Brand#31|MEDIUM PLATED TIN|49|372 +Brand#31|PROMO ANODIZED BRASS|19|372 +Brand#31|PROMO BURNISHED NICKEL|49|372 +Brand#31|PROMO BURNISHED STEEL|23|372 +Brand#31|PROMO POLISHED BRASS|3|372 +Brand#31|PROMO POLISHED COPPER|9|372 +Brand#31|PROMO POLISHED COPPER|14|372 +Brand#31|SMALL PLATED COPPER|49|372 +Brand#31|STANDARD BRUSHED COPPER|49|372 +Brand#31|STANDARD BURNISHED TIN|3|372 +Brand#31|STANDARD PLATED TIN|45|372 +Brand#32|ECONOMY ANODIZED TIN|19|372 +Brand#32|ECONOMY BRUSHED STEEL|36|372 +Brand#32|ECONOMY PLATED NICKEL|36|372 +Brand#32|ECONOMY POLISHED TIN|14|372 +Brand#32|LARGE BURNISHED COPPER|9|372 +Brand#32|LARGE BURNISHED STEEL|9|372 +Brand#32|LARGE PLATED STEEL|45|372 +Brand#32|MEDIUM ANODIZED BRASS|3|372 +Brand#32|MEDIUM BURNISHED NICKEL|9|372 +Brand#32|MEDIUM PLATED STEEL|23|372 +Brand#32|MEDIUM PLATED TIN|19|372 +Brand#32|PROMO BURNISHED STEEL|19|372 +Brand#32|SMALL PLATED COPPER|3|372 +Brand#32|SMALL PLATED COPPER|23|372 +Brand#32|SMALL POLISHED NICKEL|49|372 +Brand#32|SMALL POLISHED STEEL|23|372 +Brand#32|SMALL POLISHED STEEL|49|372 +Brand#32|STANDARD BURNISHED COPPER|14|372 +Brand#32|STANDARD BURNISHED STEEL|23|372 +Brand#32|STANDARD BURNISHED TIN|19|372 +Brand#32|STANDARD PLATED BRASS|36|372 +Brand#33|ECONOMY ANODIZED BRASS|49|372 +Brand#33|ECONOMY ANODIZED STEEL|9|372 +Brand#33|ECONOMY BRUSHED BRASS|9|372 +Brand#33|ECONOMY BRUSHED STEEL|3|372 +Brand#33|ECONOMY POLISHED BRASS|19|372 +Brand#33|LARGE PLATED TIN|49|372 +Brand#33|LARGE POLISHED COPPER|3|372 +Brand#33|MEDIUM BURNISHED NICKEL|9|372 +Brand#33|PROMO ANODIZED TIN|9|372 +Brand#33|PROMO BRUSHED COPPER|19|372 +Brand#33|PROMO PLATED NICKEL|3|372 +Brand#33|PROMO POLISHED COPPER|23|372 +Brand#33|SMALL BRUSHED COPPER|45|372 +Brand#33|SMALL BURNISHED STEEL|36|372 +Brand#33|STANDARD BURNISHED BRASS|3|372 +Brand#33|STANDARD PLATED BRASS|23|372 +Brand#34|ECONOMY POLISHED TIN|23|372 +Brand#34|LARGE BRUSHED COPPER|19|372 +Brand#34|MEDIUM ANODIZED NICKEL|19|372 +Brand#34|MEDIUM BRUSHED BRASS|45|372 +Brand#34|MEDIUM BURNISHED TIN|3|372 +Brand#34|PROMO BRUSHED COPPER|9|372 +Brand#34|PROMO BRUSHED NICKEL|49|372 +Brand#34|SMALL BRUSHED STEEL|45|372 +Brand#34|STANDARD BURNISHED STEEL|36|372 +Brand#34|STANDARD POLISHED STEEL|14|372 +Brand#35|ECONOMY BURNISHED STEEL|45|372 +Brand#35|ECONOMY PLATED BRASS|49|372 +Brand#35|ECONOMY PLATED COPPER|19|372 +Brand#35|ECONOMY PLATED STEEL|3|372 +Brand#35|LARGE BRUSHED COPPER|45|372 +Brand#35|LARGE BURNISHED BRASS|14|372 +Brand#35|LARGE PLATED TIN|36|372 +Brand#35|MEDIUM ANODIZED COPPER|3|372 +Brand#35|MEDIUM BRUSHED TIN|9|372 +Brand#35|PROMO PLATED BRASS|49|372 +Brand#35|PROMO PLATED NICKEL|9|372 +Brand#35|PROMO PLATED TIN|9|372 +Brand#35|SMALL POLISHED COPPER|49|372 +Brand#35|SMALL POLISHED TIN|23|372 +Brand#41|ECONOMY BRUSHED BRASS|19|372 +Brand#41|ECONOMY BRUSHED COPPER|49|372 +Brand#41|ECONOMY PLATED COPPER|36|372 +Brand#41|LARGE ANODIZED BRASS|3|372 +Brand#41|LARGE PLATED COPPER|45|372 +Brand#41|LARGE PLATED NICKEL|14|372 +Brand#41|MEDIUM BURNISHED TIN|3|372 +Brand#41|PROMO ANODIZED COPPER|45|372 +Brand#41|PROMO BRUSHED NICKEL|14|372 +Brand#41|PROMO PLATED COPPER|19|372 +Brand#41|PROMO POLISHED TIN|3|372 +Brand#41|SMALL PLATED COPPER|9|372 +Brand#41|STANDARD PLATED COPPER|49|372 +Brand#42|LARGE BRUSHED BRASS|3|372 +Brand#42|MEDIUM BURNISHED COPPER|23|372 +Brand#42|PROMO BURNISHED BRASS|45|372 +Brand#42|PROMO BURNISHED NICKEL|45|372 +Brand#42|PROMO POLISHED COPPER|49|372 +Brand#42|SMALL BRUSHED COPPER|36|372 +Brand#42|SMALL POLISHED NICKEL|19|372 +Brand#42|STANDARD ANODIZED STEEL|19|372 +Brand#43|ECONOMY BURNISHED NICKEL|36|372 +Brand#43|ECONOMY PLATED NICKEL|19|372 +Brand#43|ECONOMY POLISHED NICKEL|3|372 +Brand#43|LARGE ANODIZED BRASS|14|372 +Brand#43|LARGE BRUSHED BRASS|19|372 +Brand#43|LARGE PLATED STEEL|36|372 +Brand#43|LARGE POLISHED NICKEL|36|372 +Brand#43|LARGE POLISHED STEEL|36|372 +Brand#43|MEDIUM BRUSHED TIN|19|372 +Brand#43|PROMO ANODIZED BRASS|9|372 +Brand#43|PROMO POLISHED BRASS|14|372 +Brand#43|PROMO POLISHED BRASS|23|372 +Brand#43|SMALL BURNISHED COPPER|14|372 +Brand#43|SMALL PLATED TIN|14|372 +Brand#43|STANDARD POLISHED TIN|36|372 +Brand#44|ECONOMY BURNISHED NICKEL|14|372 +Brand#44|ECONOMY PLATED BRASS|3|372 +Brand#44|LARGE ANODIZED BRASS|23|372 +Brand#44|LARGE BRUSHED BRASS|45|372 +Brand#44|LARGE BRUSHED STEEL|19|372 +Brand#44|LARGE POLISHED BRASS|9|372 +Brand#44|LARGE POLISHED STEEL|9|372 +Brand#44|MEDIUM ANODIZED TIN|19|372 +Brand#44|MEDIUM BRUSHED BRASS|3|372 +Brand#44|MEDIUM BURNISHED COPPER|23|372 +Brand#44|MEDIUM PLATED COPPER|45|372 +Brand#44|PROMO BURNISHED BRASS|9|372 +Brand#44|PROMO BURNISHED STEEL|36|372 +Brand#44|PROMO PLATED BRASS|3|372 +Brand#44|SMALL ANODIZED NICKEL|14|372 +Brand#44|SMALL BURNISHED COPPER|23|372 +Brand#44|STANDARD BURNISHED STEEL|19|372 +Brand#44|STANDARD POLISHED BRASS|9|372 +Brand#51|ECONOMY BURNISHED STEEL|3|372 +Brand#51|ECONOMY POLISHED BRASS|19|372 +Brand#51|ECONOMY POLISHED COPPER|19|372 +Brand#51|ECONOMY POLISHED TIN|14|372 +Brand#51|MEDIUM ANODIZED BRASS|19|372 +Brand#51|MEDIUM BRUSHED TIN|23|372 +Brand#51|MEDIUM BURNISHED BRASS|9|372 +Brand#51|MEDIUM BURNISHED STEEL|3|372 +Brand#51|PROMO BRUSHED COPPER|23|372 +Brand#51|PROMO PLATED STEEL|45|372 +Brand#51|PROMO POLISHED COPPER|14|372 +Brand#52|LARGE ANODIZED TIN|9|372 +Brand#52|LARGE BURNISHED TIN|9|372 +Brand#52|MEDIUM PLATED TIN|9|372 +Brand#52|PROMO POLISHED NICKEL|14|372 +Brand#52|SMALL ANODIZED COPPER|36|372 +Brand#52|SMALL ANODIZED NICKEL|14|372 +Brand#52|STANDARD ANODIZED NICKEL|9|372 +Brand#52|STANDARD BRUSHED BRASS|23|372 +Brand#52|STANDARD BRUSHED TIN|49|372 +Brand#52|STANDARD POLISHED COPPER|23|372 +Brand#53|ECONOMY BRUSHED NICKEL|45|372 +Brand#53|ECONOMY BURNISHED STEEL|23|372 +Brand#53|ECONOMY PLATED NICKEL|36|372 +Brand#53|ECONOMY POLISHED COPPER|36|372 +Brand#53|ECONOMY POLISHED NICKEL|36|372 +Brand#53|LARGE BRUSHED STEEL|36|372 +Brand#53|LARGE BRUSHED STEEL|49|372 +Brand#53|LARGE PLATED STEEL|14|372 +Brand#53|MEDIUM ANODIZED COPPER|19|372 +Brand#53|MEDIUM ANODIZED COPPER|45|372 +Brand#53|MEDIUM PLATED BRASS|19|372 +Brand#53|MEDIUM PLATED NICKEL|49|372 +Brand#53|PROMO ANODIZED NICKEL|36|372 +Brand#53|PROMO BRUSHED COPPER|19|372 +Brand#53|PROMO PLATED COPPER|19|372 +Brand#53|PROMO PLATED TIN|3|372 +Brand#53|PROMO POLISHED COPPER|45|372 +Brand#53|SMALL BURNISHED NICKEL|45|372 +Brand#53|SMALL BURNISHED TIN|9|372 +Brand#54|ECONOMY ANODIZED STEEL|14|372 +Brand#54|ECONOMY BURNISHED NICKEL|3|372 +Brand#54|ECONOMY BURNISHED NICKEL|14|372 +Brand#54|ECONOMY BURNISHED TIN|23|372 +Brand#54|LARGE ANODIZED BRASS|3|372 +Brand#54|LARGE ANODIZED STEEL|45|372 +Brand#54|LARGE PLATED BRASS|23|372 +Brand#54|LARGE POLISHED NICKEL|23|372 +Brand#54|MEDIUM ANODIZED COPPER|9|372 +Brand#54|MEDIUM BURNISHED NICKEL|14|372 +Brand#54|MEDIUM BURNISHED TIN|14|372 +Brand#54|PROMO ANODIZED STEEL|23|372 +Brand#54|PROMO BURNISHED NICKEL|9|372 +Brand#54|PROMO PLATED COPPER|3|372 +Brand#55|ECONOMY ANODIZED COPPER|19|372 +Brand#55|ECONOMY BURNISHED COPPER|14|372 +Brand#55|LARGE ANODIZED NICKEL|14|372 +Brand#55|LARGE BURNISHED COPPER|23|372 +Brand#55|LARGE PLATED STEEL|9|372 +Brand#55|MEDIUM ANODIZED STEEL|49|372 +Brand#55|MEDIUM ANODIZED TIN|49|372 +Brand#55|MEDIUM BRUSHED NICKEL|9|372 +Brand#55|PROMO BRUSHED BRASS|45|372 +Brand#55|PROMO PLATED STEEL|19|372 +Brand#55|SMALL ANODIZED BRASS|36|372 +Brand#55|SMALL POLISHED NICKEL|23|372 +Brand#55|STANDARD ANODIZED COPPER|3|372 +Brand#55|STANDARD ANODIZED COPPER|14|372 +Brand#55|STANDARD PLATED BRASS|14|372 +Brand#11|LARGE BURNISHED BRASS|36|371 +Brand#11|LARGE POLISHED TIN|3|371 +Brand#11|MEDIUM ANODIZED COPPER|45|371 +Brand#11|MEDIUM ANODIZED STEEL|49|371 +Brand#11|MEDIUM ANODIZED TIN|19|371 +Brand#11|PROMO ANODIZED TIN|3|371 +Brand#11|PROMO PLATED COPPER|23|371 +Brand#12|ECONOMY POLISHED BRASS|19|371 +Brand#12|LARGE PLATED COPPER|45|371 +Brand#13|ECONOMY BURNISHED COPPER|45|371 +Brand#13|ECONOMY POLISHED STEEL|45|371 +Brand#13|PROMO POLISHED BRASS|3|371 +Brand#13|PROMO POLISHED NICKEL|49|371 +Brand#13|SMALL ANODIZED NICKEL|36|371 +Brand#14|LARGE POLISHED COPPER|3|371 +Brand#14|SMALL PLATED COPPER|9|371 +Brand#14|STANDARD BRUSHED COPPER|14|371 +Brand#15|ECONOMY PLATED COPPER|45|371 +Brand#15|PROMO BURNISHED BRASS|23|371 +Brand#15|PROMO PLATED COPPER|3|371 +Brand#21|LARGE ANODIZED BRASS|9|371 +Brand#21|MEDIUM PLATED BRASS|36|371 +Brand#21|PROMO BURNISHED TIN|36|371 +Brand#21|PROMO POLISHED COPPER|23|371 +Brand#22|LARGE BURNISHED BRASS|36|371 +Brand#22|STANDARD BRUSHED BRASS|49|371 +Brand#22|STANDARD PLATED COPPER|3|371 +Brand#23|ECONOMY PLATED COPPER|36|371 +Brand#24|LARGE BRUSHED NICKEL|9|371 +Brand#24|SMALL PLATED BRASS|19|371 +Brand#25|PROMO PLATED NICKEL|45|371 +Brand#31|STANDARD POLISHED STEEL|23|371 +Brand#32|ECONOMY ANODIZED STEEL|9|371 +Brand#32|MEDIUM BURNISHED NICKEL|3|371 +Brand#32|PROMO POLISHED STEEL|45|371 +Brand#33|ECONOMY ANODIZED TIN|23|371 +Brand#33|LARGE ANODIZED COPPER|14|371 +Brand#33|PROMO ANODIZED STEEL|23|371 +Brand#33|PROMO BURNISHED STEEL|14|371 +Brand#34|LARGE BRUSHED COPPER|3|371 +Brand#34|PROMO ANODIZED COPPER|3|371 +Brand#41|LARGE PLATED COPPER|23|371 +Brand#41|LARGE POLISHED COPPER|45|371 +Brand#41|MEDIUM BURNISHED TIN|14|371 +Brand#41|SMALL BURNISHED BRASS|9|371 +Brand#42|LARGE PLATED TIN|9|371 +Brand#42|STANDARD PLATED NICKEL|14|371 +Brand#43|STANDARD PLATED STEEL|36|371 +Brand#44|SMALL POLISHED STEEL|49|371 +Brand#51|LARGE POLISHED STEEL|14|371 +Brand#52|LARGE BRUSHED STEEL|9|371 +Brand#53|ECONOMY BURNISHED BRASS|9|371 +Brand#53|LARGE ANODIZED STEEL|23|371 +Brand#53|PROMO BURNISHED BRASS|45|371 +Brand#54|ECONOMY BURNISHED COPPER|23|371 +Brand#54|MEDIUM BRUSHED BRASS|9|371 +Brand#54|PROMO PLATED STEEL|49|371 +Brand#55|ECONOMY POLISHED COPPER|36|371 +Brand#55|PROMO ANODIZED TIN|3|371 +Brand#55|SMALL BURNISHED COPPER|14|371 +Brand#55|SMALL PLATED STEEL|3|371 +Brand#55|STANDARD POLISHED TIN|45|371 +Brand#23|STANDARD POLISHED COPPER|23|370 +Brand#34|SMALL ANODIZED TIN|23|370 +Brand#52|ECONOMY BURNISHED NICKEL|14|370 +Brand#54|SMALL BRUSHED BRASS|19|370 +Brand#55|ECONOMY POLISHED TIN|9|370 +Brand#55|PROMO POLISHED STEEL|36|370 +Brand#54|MEDIUM ANODIZED BRASS|36|369 +Brand#11|ECONOMY ANODIZED STEEL|45|368 +Brand#11|ECONOMY BRUSHED BRASS|23|368 +Brand#11|ECONOMY PLATED STEEL|45|368 +Brand#11|PROMO POLISHED NICKEL|9|368 +Brand#11|SMALL BRUSHED BRASS|3|368 +Brand#11|STANDARD ANODIZED TIN|45|368 +Brand#11|STANDARD BRUSHED TIN|45|368 +Brand#11|STANDARD PLATED STEEL|14|368 +Brand#11|STANDARD POLISHED BRASS|19|368 +Brand#11|STANDARD POLISHED STEEL|3|368 +Brand#12|ECONOMY ANODIZED NICKEL|9|368 +Brand#12|ECONOMY BRUSHED NICKEL|45|368 +Brand#12|ECONOMY BRUSHED STEEL|36|368 +Brand#12|ECONOMY BURNISHED COPPER|3|368 +Brand#12|ECONOMY BURNISHED NICKEL|36|368 +Brand#12|ECONOMY POLISHED NICKEL|49|368 +Brand#12|LARGE ANODIZED NICKEL|3|368 +Brand#12|LARGE BRUSHED NICKEL|45|368 +Brand#12|LARGE PLATED BRASS|49|368 +Brand#12|MEDIUM BURNISHED BRASS|14|368 +Brand#12|PROMO ANODIZED STEEL|36|368 +Brand#12|PROMO BRUSHED BRASS|14|368 +Brand#12|SMALL BURNISHED BRASS|19|368 +Brand#12|SMALL BURNISHED STEEL|14|368 +Brand#12|SMALL PLATED COPPER|36|368 +Brand#12|SMALL PLATED NICKEL|3|368 +Brand#12|SMALL POLISHED TIN|45|368 +Brand#12|STANDARD BRUSHED BRASS|19|368 +Brand#13|ECONOMY BRUSHED BRASS|36|368 +Brand#13|ECONOMY BURNISHED BRASS|23|368 +Brand#13|ECONOMY POLISHED STEEL|14|368 +Brand#13|LARGE ANODIZED STEEL|3|368 +Brand#13|LARGE BRUSHED BRASS|45|368 +Brand#13|LARGE BRUSHED COPPER|14|368 +Brand#13|LARGE BURNISHED COPPER|19|368 +Brand#13|LARGE PLATED STEEL|49|368 +Brand#13|LARGE POLISHED STEEL|19|368 +Brand#13|SMALL BRUSHED BRASS|14|368 +Brand#13|SMALL BRUSHED COPPER|45|368 +Brand#13|SMALL PLATED BRASS|23|368 +Brand#13|SMALL PLATED TIN|19|368 +Brand#13|STANDARD ANODIZED TIN|14|368 +Brand#13|STANDARD BRUSHED NICKEL|36|368 +Brand#13|STANDARD POLISHED TIN|3|368 +Brand#14|ECONOMY PLATED STEEL|23|368 +Brand#14|ECONOMY POLISHED NICKEL|23|368 +Brand#14|LARGE ANODIZED COPPER|14|368 +Brand#14|LARGE POLISHED STEEL|19|368 +Brand#14|LARGE POLISHED STEEL|45|368 +Brand#14|MEDIUM ANODIZED TIN|14|368 +Brand#14|PROMO BRUSHED NICKEL|49|368 +Brand#14|PROMO BURNISHED COPPER|23|368 +Brand#14|SMALL BRUSHED BRASS|9|368 +Brand#14|SMALL BURNISHED STEEL|23|368 +Brand#14|SMALL PLATED TIN|23|368 +Brand#14|SMALL POLISHED NICKEL|9|368 +Brand#14|STANDARD BRUSHED STEEL|14|368 +Brand#15|LARGE ANODIZED TIN|14|368 +Brand#15|LARGE POLISHED TIN|19|368 +Brand#15|MEDIUM BRUSHED BRASS|45|368 +Brand#15|SMALL BRUSHED STEEL|36|368 +Brand#15|SMALL BURNISHED TIN|9|368 +Brand#15|SMALL POLISHED STEEL|45|368 +Brand#15|STANDARD ANODIZED STEEL|23|368 +Brand#15|STANDARD BURNISHED TIN|45|368 +Brand#21|ECONOMY BRUSHED COPPER|49|368 +Brand#21|LARGE PLATED BRASS|9|368 +Brand#21|LARGE POLISHED TIN|49|368 +Brand#21|MEDIUM ANODIZED BRASS|36|368 +Brand#21|MEDIUM BURNISHED COPPER|23|368 +Brand#21|MEDIUM PLATED STEEL|23|368 +Brand#21|PROMO ANODIZED STEEL|9|368 +Brand#21|PROMO PLATED NICKEL|36|368 +Brand#21|PROMO POLISHED STEEL|23|368 +Brand#21|PROMO POLISHED STEEL|45|368 +Brand#21|SMALL ANODIZED STEEL|3|368 +Brand#21|SMALL BURNISHED STEEL|45|368 +Brand#21|SMALL POLISHED COPPER|45|368 +Brand#21|STANDARD PLATED TIN|9|368 +Brand#22|ECONOMY BRUSHED TIN|3|368 +Brand#22|LARGE ANODIZED NICKEL|45|368 +Brand#22|LARGE BRUSHED NICKEL|9|368 +Brand#22|MEDIUM ANODIZED NICKEL|23|368 +Brand#22|PROMO BRUSHED BRASS|49|368 +Brand#22|PROMO PLATED STEEL|19|368 +Brand#22|SMALL PLATED COPPER|23|368 +Brand#22|SMALL POLISHED STEEL|14|368 +Brand#22|SMALL POLISHED TIN|3|368 +Brand#22|STANDARD ANODIZED COPPER|14|368 +Brand#22|STANDARD PLATED BRASS|45|368 +Brand#22|STANDARD PLATED COPPER|36|368 +Brand#23|ECONOMY ANODIZED BRASS|36|368 +Brand#23|ECONOMY PLATED COPPER|49|368 +Brand#23|LARGE BRUSHED STEEL|19|368 +Brand#23|LARGE POLISHED TIN|23|368 +Brand#23|MEDIUM BRUSHED COPPER|9|368 +Brand#23|MEDIUM BURNISHED NICKEL|9|368 +Brand#23|PROMO BURNISHED NICKEL|3|368 +Brand#23|PROMO PLATED BRASS|36|368 +Brand#23|PROMO PLATED TIN|9|368 +Brand#23|SMALL BURNISHED NICKEL|19|368 +Brand#23|SMALL PLATED BRASS|36|368 +Brand#23|STANDARD ANODIZED BRASS|23|368 +Brand#23|STANDARD POLISHED STEEL|19|368 +Brand#24|ECONOMY ANODIZED NICKEL|19|368 +Brand#24|ECONOMY PLATED TIN|14|368 +Brand#24|ECONOMY POLISHED STEEL|36|368 +Brand#24|LARGE POLISHED COPPER|19|368 +Brand#24|LARGE POLISHED STEEL|23|368 +Brand#24|MEDIUM BURNISHED BRASS|36|368 +Brand#24|MEDIUM PLATED BRASS|9|368 +Brand#24|SMALL BRUSHED COPPER|45|368 +Brand#24|STANDARD ANODIZED TIN|3|368 +Brand#24|STANDARD BURNISHED NICKEL|19|368 +Brand#24|STANDARD BURNISHED TIN|49|368 +Brand#25|ECONOMY ANODIZED STEEL|49|368 +Brand#25|LARGE ANODIZED STEEL|19|368 +Brand#25|LARGE BRUSHED STEEL|3|368 +Brand#25|MEDIUM ANODIZED COPPER|14|368 +Brand#25|MEDIUM ANODIZED STEEL|19|368 +Brand#25|PROMO PLATED COPPER|23|368 +Brand#25|SMALL POLISHED NICKEL|45|368 +Brand#25|STANDARD PLATED BRASS|23|368 +Brand#31|ECONOMY BRUSHED TIN|19|368 +Brand#31|LARGE BRUSHED COPPER|3|368 +Brand#31|LARGE BURNISHED TIN|49|368 +Brand#31|LARGE PLATED NICKEL|14|368 +Brand#31|MEDIUM ANODIZED STEEL|23|368 +Brand#31|MEDIUM BRUSHED TIN|36|368 +Brand#31|MEDIUM BRUSHED TIN|45|368 +Brand#31|PROMO BRUSHED BRASS|3|368 +Brand#31|PROMO BRUSHED COPPER|45|368 +Brand#31|PROMO POLISHED COPPER|45|368 +Brand#31|SMALL BRUSHED STEEL|3|368 +Brand#31|SMALL PLATED BRASS|14|368 +Brand#31|SMALL PLATED BRASS|36|368 +Brand#31|SMALL POLISHED NICKEL|36|368 +Brand#32|ECONOMY ANODIZED STEEL|3|368 +Brand#32|ECONOMY ANODIZED STEEL|19|368 +Brand#32|ECONOMY PLATED STEEL|49|368 +Brand#32|ECONOMY POLISHED NICKEL|3|368 +Brand#32|PROMO BURNISHED COPPER|14|368 +Brand#32|SMALL ANODIZED BRASS|23|368 +Brand#32|SMALL BRUSHED TIN|3|368 +Brand#32|SMALL PLATED NICKEL|49|368 +Brand#32|STANDARD PLATED COPPER|14|368 +Brand#32|STANDARD PLATED TIN|14|368 +Brand#32|STANDARD POLISHED NICKEL|45|368 +Brand#33|ECONOMY POLISHED STEEL|3|368 +Brand#33|LARGE BRUSHED NICKEL|23|368 +Brand#33|LARGE BRUSHED STEEL|23|368 +Brand#33|LARGE POLISHED TIN|19|368 +Brand#33|PROMO ANODIZED TIN|3|368 +Brand#33|PROMO BRUSHED BRASS|19|368 +Brand#33|PROMO BRUSHED TIN|49|368 +Brand#33|PROMO PLATED STEEL|14|368 +Brand#33|SMALL BRUSHED NICKEL|14|368 +Brand#33|STANDARD BURNISHED STEEL|45|368 +Brand#33|STANDARD PLATED COPPER|23|368 +Brand#33|STANDARD POLISHED COPPER|9|368 +Brand#34|ECONOMY ANODIZED TIN|3|368 +Brand#34|ECONOMY BRUSHED COPPER|9|368 +Brand#34|ECONOMY BURNISHED COPPER|36|368 +Brand#34|ECONOMY POLISHED TIN|49|368 +Brand#34|LARGE BRUSHED TIN|45|368 +Brand#34|LARGE POLISHED STEEL|49|368 +Brand#34|MEDIUM ANODIZED BRASS|9|368 +Brand#34|MEDIUM BRUSHED STEEL|3|368 +Brand#34|MEDIUM PLATED STEEL|14|368 +Brand#34|PROMO ANODIZED TIN|14|368 +Brand#34|PROMO BURNISHED NICKEL|19|368 +Brand#34|PROMO POLISHED BRASS|23|368 +Brand#34|PROMO POLISHED STEEL|49|368 +Brand#34|SMALL BRUSHED BRASS|9|368 +Brand#34|SMALL BRUSHED COPPER|19|368 +Brand#34|STANDARD ANODIZED STEEL|49|368 +Brand#34|STANDARD BURNISHED STEEL|9|368 +Brand#35|ECONOMY POLISHED STEEL|36|368 +Brand#35|LARGE POLISHED TIN|49|368 +Brand#35|PROMO ANODIZED BRASS|23|368 +Brand#35|PROMO POLISHED BRASS|14|368 +Brand#35|PROMO POLISHED TIN|36|368 +Brand#35|SMALL ANODIZED TIN|3|368 +Brand#35|SMALL BRUSHED BRASS|19|368 +Brand#35|SMALL BURNISHED STEEL|23|368 +Brand#35|STANDARD BRUSHED NICKEL|45|368 +Brand#35|STANDARD BRUSHED STEEL|19|368 +Brand#41|ECONOMY ANODIZED STEEL|23|368 +Brand#41|ECONOMY ANODIZED STEEL|49|368 +Brand#41|LARGE PLATED BRASS|9|368 +Brand#41|LARGE POLISHED TIN|45|368 +Brand#41|MEDIUM PLATED STEEL|49|368 +Brand#41|PROMO BRUSHED NICKEL|3|368 +Brand#41|PROMO BRUSHED TIN|49|368 +Brand#41|PROMO PLATED NICKEL|45|368 +Brand#41|PROMO POLISHED STEEL|45|368 +Brand#41|PROMO POLISHED TIN|36|368 +Brand#41|SMALL PLATED BRASS|14|368 +Brand#41|SMALL POLISHED NICKEL|36|368 +Brand#41|STANDARD ANODIZED BRASS|14|368 +Brand#41|STANDARD ANODIZED STEEL|3|368 +Brand#41|STANDARD POLISHED NICKEL|49|368 +Brand#42|ECONOMY BRUSHED STEEL|49|368 +Brand#42|ECONOMY PLATED COPPER|49|368 +Brand#42|ECONOMY POLISHED NICKEL|45|368 +Brand#42|ECONOMY POLISHED TIN|49|368 +Brand#42|LARGE ANODIZED STEEL|45|368 +Brand#42|MEDIUM BRUSHED NICKEL|23|368 +Brand#42|PROMO POLISHED STEEL|14|368 +Brand#42|SMALL ANODIZED STEEL|9|368 +Brand#42|SMALL BRUSHED STEEL|45|368 +Brand#42|SMALL BURNISHED STEEL|49|368 +Brand#42|SMALL PLATED NICKEL|45|368 +Brand#42|STANDARD POLISHED BRASS|36|368 +Brand#42|STANDARD POLISHED NICKEL|23|368 +Brand#43|ECONOMY BURNISHED TIN|9|368 +Brand#43|LARGE ANODIZED COPPER|9|368 +Brand#43|LARGE ANODIZED NICKEL|45|368 +Brand#43|LARGE ANODIZED TIN|23|368 +Brand#43|LARGE BURNISHED COPPER|14|368 +Brand#43|MEDIUM ANODIZED NICKEL|45|368 +Brand#43|MEDIUM BRUSHED STEEL|36|368 +Brand#43|SMALL ANODIZED COPPER|49|368 +Brand#43|SMALL BRUSHED NICKEL|19|368 +Brand#43|SMALL BURNISHED TIN|36|368 +Brand#43|SMALL PLATED STEEL|45|368 +Brand#43|STANDARD PLATED NICKEL|9|368 +Brand#44|ECONOMY ANODIZED TIN|9|368 +Brand#44|ECONOMY BRUSHED STEEL|36|368 +Brand#44|ECONOMY PLATED COPPER|45|368 +Brand#44|LARGE ANODIZED COPPER|14|368 +Brand#44|LARGE BRUSHED BRASS|14|368 +Brand#44|PROMO BRUSHED TIN|23|368 +Brand#44|PROMO BURNISHED NICKEL|49|368 +Brand#44|PROMO PLATED TIN|45|368 +Brand#44|SMALL BURNISHED TIN|49|368 +Brand#44|SMALL PLATED TIN|36|368 +Brand#51|ECONOMY BRUSHED TIN|49|368 +Brand#51|ECONOMY POLISHED BRASS|3|368 +Brand#51|ECONOMY POLISHED BRASS|36|368 +Brand#51|LARGE BRUSHED BRASS|14|368 +Brand#51|LARGE POLISHED BRASS|23|368 +Brand#51|LARGE POLISHED TIN|14|368 +Brand#51|MEDIUM BRUSHED BRASS|3|368 +Brand#51|MEDIUM BURNISHED COPPER|23|368 +Brand#51|MEDIUM PLATED NICKEL|36|368 +Brand#51|MEDIUM PLATED TIN|45|368 +Brand#51|PROMO BRUSHED BRASS|23|368 +Brand#51|PROMO BURNISHED BRASS|49|368 +Brand#51|PROMO PLATED TIN|23|368 +Brand#51|SMALL ANODIZED BRASS|23|368 +Brand#51|SMALL BURNISHED COPPER|14|368 +Brand#51|SMALL PLATED COPPER|14|368 +Brand#51|STANDARD BRUSHED STEEL|23|368 +Brand#52|LARGE PLATED COPPER|23|368 +Brand#52|MEDIUM ANODIZED COPPER|9|368 +Brand#52|MEDIUM BRUSHED NICKEL|9|368 +Brand#52|MEDIUM BURNISHED STEEL|14|368 +Brand#52|SMALL BRUSHED STEEL|19|368 +Brand#52|SMALL PLATED TIN|45|368 +Brand#52|STANDARD BRUSHED BRASS|9|368 +Brand#53|ECONOMY ANODIZED NICKEL|23|368 +Brand#53|LARGE BRUSHED BRASS|23|368 +Brand#53|LARGE BURNISHED TIN|36|368 +Brand#53|MEDIUM ANODIZED BRASS|23|368 +Brand#53|MEDIUM BRUSHED TIN|14|368 +Brand#53|MEDIUM BURNISHED NICKEL|36|368 +Brand#53|SMALL ANODIZED NICKEL|45|368 +Brand#53|STANDARD BRUSHED STEEL|45|368 +Brand#53|STANDARD POLISHED BRASS|49|368 +Brand#54|LARGE PLATED TIN|36|368 +Brand#54|LARGE POLISHED NICKEL|36|368 +Brand#54|LARGE POLISHED STEEL|23|368 +Brand#54|MEDIUM BURNISHED TIN|9|368 +Brand#54|PROMO BRUSHED TIN|49|368 +Brand#54|PROMO PLATED NICKEL|36|368 +Brand#54|PROMO POLISHED TIN|9|368 +Brand#54|SMALL BURNISHED NICKEL|49|368 +Brand#54|SMALL BURNISHED STEEL|3|368 +Brand#54|SMALL POLISHED COPPER|49|368 +Brand#54|SMALL POLISHED STEEL|45|368 +Brand#54|STANDARD BURNISHED NICKEL|9|368 +Brand#54|STANDARD PLATED COPPER|19|368 +Brand#54|STANDARD POLISHED TIN|23|368 +Brand#55|ECONOMY ANODIZED NICKEL|14|368 +Brand#55|ECONOMY BURNISHED TIN|9|368 +Brand#55|ECONOMY POLISHED NICKEL|49|368 +Brand#55|LARGE BURNISHED COPPER|49|368 +Brand#55|MEDIUM BURNISHED COPPER|19|368 +Brand#55|MEDIUM PLATED BRASS|3|368 +Brand#55|PROMO BRUSHED TIN|14|368 +Brand#55|PROMO PLATED BRASS|9|368 +Brand#55|SMALL ANODIZED COPPER|3|368 +Brand#55|SMALL BRUSHED TIN|14|368 +Brand#55|STANDARD ANODIZED COPPER|45|368 +Brand#11|MEDIUM BURNISHED BRASS|9|367 +Brand#11|STANDARD POLISHED TIN|49|367 +Brand#12|LARGE ANODIZED NICKEL|36|367 +Brand#12|MEDIUM BRUSHED TIN|49|367 +Brand#12|SMALL PLATED NICKEL|45|367 +Brand#13|LARGE ANODIZED COPPER|45|367 +Brand#13|LARGE PLATED COPPER|3|367 +Brand#13|LARGE PLATED NICKEL|36|367 +Brand#13|MEDIUM BRUSHED TIN|36|367 +Brand#13|STANDARD BRUSHED NICKEL|9|367 +Brand#14|ECONOMY BRUSHED BRASS|23|367 +Brand#14|PROMO BURNISHED COPPER|3|367 +Brand#15|PROMO BRUSHED BRASS|9|367 +Brand#15|SMALL PLATED TIN|14|367 +Brand#15|STANDARD ANODIZED COPPER|9|367 +Brand#15|STANDARD BRUSHED BRASS|19|367 +Brand#15|STANDARD BRUSHED BRASS|23|367 +Brand#15|STANDARD POLISHED TIN|45|367 +Brand#21|MEDIUM ANODIZED COPPER|45|367 +Brand#21|MEDIUM PLATED COPPER|19|367 +Brand#21|STANDARD BURNISHED COPPER|23|367 +Brand#22|PROMO BRUSHED STEEL|49|367 +Brand#22|SMALL BURNISHED BRASS|9|367 +Brand#23|ECONOMY ANODIZED NICKEL|9|367 +Brand#24|LARGE BRUSHED TIN|45|367 +Brand#24|PROMO POLISHED COPPER|36|367 +Brand#24|SMALL BURNISHED NICKEL|23|367 +Brand#24|STANDARD BURNISHED TIN|3|367 +Brand#25|ECONOMY PLATED COPPER|14|367 +Brand#25|PROMO BURNISHED BRASS|45|367 +Brand#31|ECONOMY BURNISHED NICKEL|36|367 +Brand#31|MEDIUM BRUSHED TIN|9|367 +Brand#31|MEDIUM PLATED BRASS|49|367 +Brand#31|PROMO ANODIZED TIN|14|367 +Brand#31|SMALL ANODIZED NICKEL|3|367 +Brand#31|SMALL BURNISHED STEEL|49|367 +Brand#31|STANDARD BURNISHED BRASS|9|367 +Brand#32|SMALL ANODIZED BRASS|19|367 +Brand#34|ECONOMY BURNISHED TIN|19|367 +Brand#34|MEDIUM BRUSHED STEEL|19|367 +Brand#34|MEDIUM PLATED BRASS|45|367 +Brand#34|MEDIUM PLATED TIN|14|367 +Brand#35|ECONOMY PLATED BRASS|19|367 +Brand#35|ECONOMY PLATED TIN|45|367 +Brand#35|LARGE BRUSHED STEEL|49|367 +Brand#35|PROMO ANODIZED NICKEL|36|367 +Brand#35|SMALL BURNISHED BRASS|45|367 +Brand#35|STANDARD ANODIZED TIN|14|367 +Brand#41|LARGE PLATED STEEL|3|367 +Brand#41|SMALL ANODIZED TIN|45|367 +Brand#41|SMALL BRUSHED TIN|14|367 +Brand#42|PROMO BURNISHED BRASS|9|367 +Brand#42|SMALL ANODIZED COPPER|23|367 +Brand#42|SMALL ANODIZED STEEL|45|367 +Brand#42|STANDARD BRUSHED NICKEL|9|367 +Brand#43|SMALL ANODIZED TIN|3|367 +Brand#44|ECONOMY PLATED COPPER|49|367 +Brand#44|MEDIUM PLATED NICKEL|14|367 +Brand#44|STANDARD POLISHED NICKEL|3|367 +Brand#51|LARGE ANODIZED NICKEL|9|367 +Brand#51|SMALL ANODIZED BRASS|9|367 +Brand#51|SMALL POLISHED COPPER|49|367 +Brand#52|ECONOMY BRUSHED NICKEL|45|367 +Brand#52|ECONOMY BURNISHED TIN|19|367 +Brand#52|ECONOMY PLATED BRASS|3|367 +Brand#52|LARGE PLATED NICKEL|23|367 +Brand#52|MEDIUM BURNISHED BRASS|9|367 +Brand#52|PROMO ANODIZED COPPER|49|367 +Brand#52|STANDARD ANODIZED COPPER|19|367 +Brand#52|STANDARD ANODIZED COPPER|23|367 +Brand#53|LARGE PLATED BRASS|9|367 +Brand#54|ECONOMY BURNISHED STEEL|14|367 +Brand#54|ECONOMY PLATED BRASS|45|367 +Brand#54|LARGE BRUSHED BRASS|9|367 +Brand#54|LARGE PLATED BRASS|19|367 +Brand#54|LARGE PLATED NICKEL|36|367 +Brand#54|MEDIUM PLATED BRASS|49|367 +Brand#54|PROMO BRUSHED TIN|19|367 +Brand#54|SMALL ANODIZED STEEL|3|367 +Brand#55|MEDIUM BURNISHED COPPER|3|367 +Brand#55|MEDIUM BURNISHED STEEL|23|367 +Brand#21|SMALL PLATED STEEL|9|366 +Brand#23|ECONOMY PLATED STEEL|45|366 +Brand#32|LARGE BRUSHED NICKEL|36|366 +Brand#41|ECONOMY BRUSHED BRASS|23|366 +Brand#43|SMALL BURNISHED TIN|45|366 +Brand#44|STANDARD POLISHED BRASS|49|366 +Brand#51|MEDIUM ANODIZED TIN|14|366 +Brand#31|SMALL POLISHED STEEL|14|365 +Brand#11|LARGE BRUSHED BRASS|14|364 +Brand#11|LARGE BRUSHED COPPER|23|364 +Brand#11|SMALL BRUSHED STEEL|23|364 +Brand#11|STANDARD ANODIZED BRASS|3|364 +Brand#11|STANDARD POLISHED BRASS|9|364 +Brand#12|ECONOMY ANODIZED TIN|45|364 +Brand#12|ECONOMY POLISHED STEEL|49|364 +Brand#12|LARGE ANODIZED TIN|36|364 +Brand#12|LARGE BRUSHED BRASS|19|364 +Brand#12|MEDIUM BRUSHED NICKEL|23|364 +Brand#12|MEDIUM PLATED COPPER|45|364 +Brand#12|MEDIUM PLATED STEEL|3|364 +Brand#12|PROMO BRUSHED BRASS|19|364 +Brand#12|SMALL BRUSHED STEEL|14|364 +Brand#13|ECONOMY PLATED BRASS|36|364 +Brand#13|ECONOMY PLATED COPPER|36|364 +Brand#13|LARGE ANODIZED COPPER|49|364 +Brand#13|PROMO BRUSHED NICKEL|49|364 +Brand#13|PROMO PLATED STEEL|3|364 +Brand#13|PROMO POLISHED NICKEL|14|364 +Brand#13|SMALL BURNISHED BRASS|14|364 +Brand#13|STANDARD ANODIZED STEEL|49|364 +Brand#13|STANDARD BRUSHED COPPER|14|364 +Brand#13|STANDARD PLATED COPPER|9|364 +Brand#13|STANDARD POLISHED COPPER|49|364 +Brand#14|ECONOMY ANODIZED NICKEL|36|364 +Brand#14|ECONOMY ANODIZED TIN|3|364 +Brand#14|ECONOMY ANODIZED TIN|19|364 +Brand#14|ECONOMY BRUSHED NICKEL|9|364 +Brand#14|ECONOMY BURNISHED STEEL|36|364 +Brand#14|LARGE BRUSHED COPPER|49|364 +Brand#14|LARGE POLISHED BRASS|49|364 +Brand#14|LARGE POLISHED NICKEL|49|364 +Brand#14|SMALL ANODIZED BRASS|3|364 +Brand#14|SMALL ANODIZED BRASS|23|364 +Brand#14|SMALL ANODIZED BRASS|45|364 +Brand#14|SMALL POLISHED TIN|19|364 +Brand#14|STANDARD ANODIZED STEEL|9|364 +Brand#14|STANDARD BRUSHED TIN|45|364 +Brand#14|STANDARD BURNISHED BRASS|19|364 +Brand#14|STANDARD BURNISHED NICKEL|49|364 +Brand#14|STANDARD POLISHED TIN|3|364 +Brand#14|STANDARD POLISHED TIN|14|364 +Brand#15|ECONOMY ANODIZED TIN|19|364 +Brand#15|ECONOMY POLISHED BRASS|19|364 +Brand#15|LARGE ANODIZED COPPER|23|364 +Brand#15|LARGE PLATED STEEL|14|364 +Brand#15|MEDIUM ANODIZED NICKEL|36|364 +Brand#15|MEDIUM ANODIZED STEEL|9|364 +Brand#15|MEDIUM BRUSHED COPPER|14|364 +Brand#15|MEDIUM BRUSHED NICKEL|9|364 +Brand#15|MEDIUM PLATED BRASS|14|364 +Brand#15|PROMO ANODIZED NICKEL|9|364 +Brand#15|PROMO BRUSHED TIN|9|364 +Brand#15|PROMO PLATED COPPER|36|364 +Brand#15|SMALL POLISHED COPPER|49|364 +Brand#15|STANDARD ANODIZED STEEL|36|364 +Brand#15|STANDARD BRUSHED COPPER|9|364 +Brand#15|STANDARD BRUSHED TIN|23|364 +Brand#21|ECONOMY BRUSHED STEEL|9|364 +Brand#21|ECONOMY POLISHED NICKEL|14|364 +Brand#21|MEDIUM BRUSHED TIN|36|364 +Brand#21|MEDIUM PLATED BRASS|9|364 +Brand#21|PROMO BURNISHED NICKEL|14|364 +Brand#21|PROMO PLATED COPPER|23|364 +Brand#21|PROMO PLATED NICKEL|23|364 +Brand#21|SMALL ANODIZED STEEL|14|364 +Brand#21|SMALL BURNISHED COPPER|14|364 +Brand#21|SMALL BURNISHED NICKEL|19|364 +Brand#21|STANDARD ANODIZED NICKEL|36|364 +Brand#21|STANDARD BRUSHED STEEL|23|364 +Brand#22|ECONOMY ANODIZED NICKEL|3|364 +Brand#22|LARGE BURNISHED TIN|23|364 +Brand#22|LARGE PLATED COPPER|3|364 +Brand#22|MEDIUM BURNISHED BRASS|9|364 +Brand#22|MEDIUM BURNISHED STEEL|45|364 +Brand#22|MEDIUM PLATED TIN|19|364 +Brand#22|PROMO BRUSHED COPPER|14|364 +Brand#22|SMALL BURNISHED BRASS|3|364 +Brand#22|SMALL BURNISHED BRASS|23|364 +Brand#22|SMALL PLATED BRASS|36|364 +Brand#22|SMALL PLATED TIN|45|364 +Brand#22|STANDARD BURNISHED STEEL|3|364 +Brand#23|ECONOMY BURNISHED BRASS|9|364 +Brand#23|LARGE PLATED COPPER|36|364 +Brand#23|SMALL BURNISHED BRASS|3|364 +Brand#23|SMALL PLATED TIN|3|364 +Brand#23|SMALL POLISHED TIN|45|364 +Brand#23|STANDARD PLATED STEEL|14|364 +Brand#23|STANDARD PLATED TIN|23|364 +Brand#23|STANDARD POLISHED BRASS|23|364 +Brand#23|STANDARD POLISHED TIN|9|364 +Brand#24|ECONOMY BURNISHED STEEL|14|364 +Brand#24|ECONOMY POLISHED TIN|19|364 +Brand#24|LARGE BRUSHED BRASS|9|364 +Brand#24|LARGE POLISHED TIN|19|364 +Brand#24|PROMO ANODIZED NICKEL|14|364 +Brand#24|PROMO BRUSHED NICKEL|19|364 +Brand#24|PROMO BRUSHED STEEL|49|364 +Brand#24|PROMO BURNISHED STEEL|45|364 +Brand#24|SMALL ANODIZED STEEL|36|364 +Brand#24|SMALL BRUSHED COPPER|23|364 +Brand#24|SMALL PLATED COPPER|45|364 +Brand#25|ECONOMY ANODIZED NICKEL|36|364 +Brand#25|MEDIUM PLATED BRASS|36|364 +Brand#25|PROMO PLATED TIN|45|364 +Brand#25|SMALL BRUSHED COPPER|3|364 +Brand#25|SMALL PLATED NICKEL|49|364 +Brand#25|SMALL PLATED TIN|3|364 +Brand#25|STANDARD BURNISHED COPPER|45|364 +Brand#31|ECONOMY BRUSHED TIN|49|364 +Brand#31|LARGE ANODIZED BRASS|14|364 +Brand#31|LARGE BURNISHED TIN|45|364 +Brand#31|LARGE PLATED BRASS|14|364 +Brand#31|LARGE PLATED TIN|3|364 +Brand#31|LARGE POLISHED COPPER|36|364 +Brand#31|MEDIUM ANODIZED COPPER|9|364 +Brand#31|MEDIUM ANODIZED STEEL|14|364 +Brand#31|MEDIUM BURNISHED TIN|49|364 +Brand#31|PROMO POLISHED TIN|36|364 +Brand#31|SMALL BRUSHED BRASS|19|364 +Brand#31|SMALL BRUSHED STEEL|19|364 +Brand#31|SMALL BRUSHED TIN|3|364 +Brand#31|SMALL BRUSHED TIN|49|364 +Brand#31|SMALL PLATED NICKEL|45|364 +Brand#31|SMALL POLISHED COPPER|23|364 +Brand#32|ECONOMY BURNISHED TIN|36|364 +Brand#32|ECONOMY PLATED COPPER|14|364 +Brand#32|ECONOMY PLATED COPPER|49|364 +Brand#32|ECONOMY POLISHED BRASS|45|364 +Brand#32|ECONOMY POLISHED BRASS|49|364 +Brand#32|LARGE ANODIZED STEEL|36|364 +Brand#32|LARGE BURNISHED COPPER|23|364 +Brand#32|LARGE BURNISHED TIN|9|364 +Brand#32|LARGE PLATED NICKEL|14|364 +Brand#32|LARGE POLISHED TIN|9|364 +Brand#32|MEDIUM ANODIZED NICKEL|3|364 +Brand#32|MEDIUM ANODIZED TIN|9|364 +Brand#32|PROMO BRUSHED COPPER|3|364 +Brand#32|SMALL BRUSHED COPPER|36|364 +Brand#32|SMALL BURNISHED TIN|3|364 +Brand#33|ECONOMY POLISHED STEEL|23|364 +Brand#33|MEDIUM BRUSHED BRASS|45|364 +Brand#33|MEDIUM BRUSHED NICKEL|49|364 +Brand#33|MEDIUM BRUSHED STEEL|23|364 +Brand#33|MEDIUM BURNISHED NICKEL|45|364 +Brand#33|SMALL ANODIZED TIN|23|364 +Brand#33|STANDARD PLATED BRASS|9|364 +Brand#33|STANDARD POLISHED BRASS|36|364 +Brand#34|ECONOMY BURNISHED BRASS|19|364 +Brand#34|ECONOMY BURNISHED TIN|49|364 +Brand#34|LARGE BRUSHED NICKEL|19|364 +Brand#34|LARGE PLATED STEEL|19|364 +Brand#34|MEDIUM ANODIZED NICKEL|9|364 +Brand#34|MEDIUM BURNISHED NICKEL|45|364 +Brand#34|PROMO PLATED STEEL|14|364 +Brand#34|PROMO POLISHED NICKEL|23|364 +Brand#34|PROMO POLISHED NICKEL|36|364 +Brand#34|PROMO POLISHED STEEL|14|364 +Brand#34|SMALL BRUSHED COPPER|14|364 +Brand#34|STANDARD PLATED TIN|45|364 +Brand#35|ECONOMY BRUSHED NICKEL|14|364 +Brand#35|ECONOMY PLATED COPPER|45|364 +Brand#35|LARGE ANODIZED TIN|9|364 +Brand#35|LARGE BURNISHED TIN|36|364 +Brand#35|LARGE POLISHED STEEL|49|364 +Brand#35|MEDIUM PLATED NICKEL|23|364 +Brand#35|PROMO POLISHED BRASS|45|364 +Brand#35|PROMO POLISHED NICKEL|9|364 +Brand#35|SMALL PLATED NICKEL|19|364 +Brand#35|STANDARD POLISHED NICKEL|14|364 +Brand#41|ECONOMY BRUSHED STEEL|14|364 +Brand#41|ECONOMY POLISHED NICKEL|3|364 +Brand#41|ECONOMY POLISHED NICKEL|14|364 +Brand#41|ECONOMY POLISHED STEEL|9|364 +Brand#41|LARGE POLISHED BRASS|49|364 +Brand#41|MEDIUM PLATED NICKEL|23|364 +Brand#41|PROMO ANODIZED COPPER|23|364 +Brand#41|PROMO BURNISHED STEEL|36|364 +Brand#41|PROMO PLATED TIN|19|364 +Brand#41|SMALL ANODIZED STEEL|36|364 +Brand#41|SMALL BRUSHED TIN|9|364 +Brand#41|STANDARD BRUSHED COPPER|36|364 +Brand#42|ECONOMY ANODIZED NICKEL|14|364 +Brand#42|ECONOMY BURNISHED COPPER|9|364 +Brand#42|LARGE ANODIZED BRASS|36|364 +Brand#42|PROMO ANODIZED TIN|14|364 +Brand#42|SMALL ANODIZED NICKEL|9|364 +Brand#42|SMALL BRUSHED NICKEL|49|364 +Brand#42|STANDARD BURNISHED STEEL|14|364 +Brand#43|ECONOMY BRUSHED TIN|49|364 +Brand#43|ECONOMY POLISHED COPPER|3|364 +Brand#43|LARGE BURNISHED BRASS|9|364 +Brand#43|LARGE BURNISHED TIN|23|364 +Brand#43|LARGE POLISHED NICKEL|23|364 +Brand#43|MEDIUM BRUSHED TIN|23|364 +Brand#43|STANDARD BRUSHED NICKEL|9|364 +Brand#43|STANDARD BRUSHED NICKEL|36|364 +Brand#44|LARGE ANODIZED NICKEL|19|364 +Brand#44|LARGE PLATED TIN|23|364 +Brand#44|STANDARD ANODIZED COPPER|45|364 +Brand#51|ECONOMY BURNISHED STEEL|14|364 +Brand#51|LARGE ANODIZED COPPER|23|364 +Brand#51|LARGE ANODIZED TIN|14|364 +Brand#51|LARGE BRUSHED COPPER|3|364 +Brand#51|MEDIUM ANODIZED BRASS|45|364 +Brand#51|PROMO ANODIZED STEEL|23|364 +Brand#51|SMALL ANODIZED TIN|9|364 +Brand#51|STANDARD BRUSHED NICKEL|49|364 +Brand#51|STANDARD PLATED COPPER|9|364 +Brand#51|STANDARD POLISHED STEEL|49|364 +Brand#52|ECONOMY ANODIZED COPPER|19|364 +Brand#52|ECONOMY BRUSHED STEEL|36|364 +Brand#52|ECONOMY BRUSHED TIN|9|364 +Brand#52|LARGE BRUSHED COPPER|23|364 +Brand#52|MEDIUM BRUSHED STEEL|36|364 +Brand#52|SMALL BRUSHED STEEL|14|364 +Brand#53|LARGE BURNISHED TIN|14|364 +Brand#53|LARGE POLISHED COPPER|14|364 +Brand#53|MEDIUM ANODIZED COPPER|9|364 +Brand#53|MEDIUM BRUSHED NICKEL|9|364 +Brand#53|PROMO BURNISHED COPPER|49|364 +Brand#53|SMALL BRUSHED BRASS|23|364 +Brand#53|STANDARD BURNISHED NICKEL|14|364 +Brand#53|STANDARD POLISHED STEEL|19|364 +Brand#54|ECONOMY BRUSHED BRASS|3|364 +Brand#54|LARGE ANODIZED STEEL|49|364 +Brand#54|LARGE BURNISHED COPPER|23|364 +Brand#54|PROMO ANODIZED STEEL|45|364 +Brand#54|PROMO BURNISHED COPPER|14|364 +Brand#54|SMALL ANODIZED TIN|49|364 +Brand#54|SMALL BURNISHED BRASS|49|364 +Brand#54|SMALL BURNISHED TIN|14|364 +Brand#54|SMALL PLATED NICKEL|23|364 +Brand#54|STANDARD ANODIZED BRASS|19|364 +Brand#54|STANDARD BRUSHED COPPER|9|364 +Brand#54|STANDARD BRUSHED TIN|3|364 +Brand#55|LARGE BRUSHED COPPER|3|364 +Brand#55|LARGE BURNISHED COPPER|9|364 +Brand#55|LARGE BURNISHED TIN|9|364 +Brand#55|PROMO BRUSHED STEEL|14|364 +Brand#55|PROMO BURNISHED BRASS|23|364 +Brand#55|PROMO PLATED NICKEL|45|364 +Brand#55|SMALL ANODIZED BRASS|45|364 +Brand#55|STANDARD ANODIZED STEEL|19|364 +Brand#55|STANDARD BRUSHED COPPER|45|364 +Brand#55|STANDARD POLISHED STEEL|23|364 +Brand#11|LARGE POLISHED STEEL|49|363 +Brand#11|PROMO ANODIZED NICKEL|19|363 +Brand#12|LARGE BURNISHED COPPER|49|363 +Brand#13|ECONOMY BRUSHED COPPER|14|363 +Brand#14|ECONOMY ANODIZED BRASS|45|363 +Brand#14|LARGE BRUSHED TIN|3|363 +Brand#14|MEDIUM ANODIZED TIN|9|363 +Brand#14|STANDARD PLATED COPPER|23|363 +Brand#14|STANDARD POLISHED BRASS|23|363 +Brand#15|LARGE BURNISHED NICKEL|45|363 +Brand#15|MEDIUM PLATED TIN|19|363 +Brand#15|STANDARD POLISHED NICKEL|3|363 +Brand#21|ECONOMY PLATED TIN|49|363 +Brand#21|LARGE BRUSHED COPPER|14|363 +Brand#22|LARGE BURNISHED BRASS|3|363 +Brand#22|LARGE PLATED TIN|3|363 +Brand#22|SMALL ANODIZED BRASS|9|363 +Brand#22|SMALL PLATED NICKEL|45|363 +Brand#23|MEDIUM BRUSHED STEEL|36|363 +Brand#23|PROMO BRUSHED TIN|14|363 +Brand#24|MEDIUM ANODIZED COPPER|36|363 +Brand#24|MEDIUM BURNISHED BRASS|9|363 +Brand#25|ECONOMY BURNISHED TIN|19|363 +Brand#31|LARGE BURNISHED NICKEL|3|363 +Brand#31|SMALL ANODIZED BRASS|19|363 +Brand#31|SMALL BRUSHED STEEL|36|363 +Brand#31|STANDARD PLATED COPPER|49|363 +Brand#32|STANDARD BURNISHED NICKEL|36|363 +Brand#33|ECONOMY PLATED NICKEL|45|363 +Brand#33|MEDIUM BRUSHED STEEL|49|363 +Brand#33|SMALL POLISHED COPPER|45|363 +Brand#33|STANDARD PLATED STEEL|9|363 +Brand#34|ECONOMY BRUSHED STEEL|36|363 +Brand#34|MEDIUM ANODIZED BRASS|49|363 +Brand#34|PROMO BURNISHED COPPER|14|363 +Brand#34|PROMO BURNISHED TIN|36|363 +Brand#35|ECONOMY BURNISHED TIN|23|363 +Brand#35|LARGE POLISHED NICKEL|9|363 +Brand#35|STANDARD BURNISHED BRASS|3|363 +Brand#41|ECONOMY POLISHED COPPER|3|363 +Brand#41|MEDIUM ANODIZED STEEL|45|363 +Brand#41|STANDARD BRUSHED BRASS|14|363 +Brand#41|STANDARD POLISHED STEEL|19|363 +Brand#42|ECONOMY BURNISHED BRASS|23|363 +Brand#42|LARGE BURNISHED COPPER|45|363 +Brand#43|ECONOMY BRUSHED TIN|19|363 +Brand#44|ECONOMY BRUSHED NICKEL|36|363 +Brand#44|MEDIUM ANODIZED COPPER|36|363 +Brand#44|MEDIUM BRUSHED COPPER|9|363 +Brand#44|MEDIUM PLATED BRASS|36|363 +Brand#44|STANDARD ANODIZED BRASS|9|363 +Brand#44|STANDARD ANODIZED STEEL|3|363 +Brand#51|ECONOMY BURNISHED STEEL|19|363 +Brand#51|SMALL BURNISHED NICKEL|36|363 +Brand#51|SMALL BURNISHED TIN|3|363 +Brand#52|ECONOMY BRUSHED NICKEL|19|363 +Brand#53|LARGE PLATED TIN|19|363 +Brand#53|MEDIUM ANODIZED NICKEL|23|363 +Brand#53|MEDIUM PLATED NICKEL|3|363 +Brand#53|PROMO BURNISHED COPPER|45|363 +Brand#53|SMALL POLISHED COPPER|23|363 +Brand#53|SMALL POLISHED TIN|9|363 +Brand#54|MEDIUM PLATED NICKEL|9|363 +Brand#54|SMALL BRUSHED COPPER|3|363 +Brand#55|ECONOMY PLATED BRASS|3|363 +Brand#55|MEDIUM BURNISHED TIN|3|363 +Brand#55|PROMO POLISHED BRASS|19|363 +Brand#55|STANDARD PLATED NICKEL|19|363 +Brand#15|ECONOMY PLATED BRASS|23|362 +Brand#21|STANDARD PLATED STEEL|23|362 +Brand#32|LARGE POLISHED BRASS|45|362 +Brand#33|LARGE POLISHED STEEL|36|362 +Brand#35|SMALL ANODIZED STEEL|3|362 +Brand#53|MEDIUM BRUSHED BRASS|19|362 +Brand#53|STANDARD BRUSHED BRASS|9|362 +Brand#55|SMALL BRUSHED COPPER|36|362 +Brand#25|SMALL POLISHED BRASS|45|361 +Brand#11|ECONOMY PLATED BRASS|3|360 +Brand#11|LARGE BURNISHED COPPER|19|360 +Brand#11|LARGE BURNISHED NICKEL|23|360 +Brand#11|LARGE PLATED COPPER|45|360 +Brand#11|MEDIUM ANODIZED TIN|49|360 +Brand#11|MEDIUM BRUSHED COPPER|45|360 +Brand#11|MEDIUM PLATED COPPER|45|360 +Brand#11|MEDIUM PLATED TIN|45|360 +Brand#11|SMALL ANODIZED STEEL|36|360 +Brand#11|SMALL BRUSHED TIN|45|360 +Brand#11|SMALL BURNISHED STEEL|3|360 +Brand#11|SMALL POLISHED TIN|36|360 +Brand#12|ECONOMY ANODIZED BRASS|9|360 +Brand#12|ECONOMY BRUSHED TIN|36|360 +Brand#12|ECONOMY BURNISHED BRASS|14|360 +Brand#12|ECONOMY BURNISHED NICKEL|45|360 +Brand#12|ECONOMY POLISHED COPPER|14|360 +Brand#12|ECONOMY POLISHED STEEL|45|360 +Brand#12|LARGE BRUSHED NICKEL|14|360 +Brand#12|LARGE BURNISHED NICKEL|9|360 +Brand#12|LARGE BURNISHED STEEL|49|360 +Brand#12|MEDIUM BURNISHED BRASS|49|360 +Brand#12|PROMO ANODIZED BRASS|23|360 +Brand#12|PROMO BRUSHED BRASS|23|360 +Brand#12|PROMO BRUSHED NICKEL|9|360 +Brand#12|PROMO BRUSHED STEEL|3|360 +Brand#12|PROMO BURNISHED TIN|36|360 +Brand#12|PROMO PLATED NICKEL|3|360 +Brand#12|SMALL ANODIZED TIN|9|360 +Brand#12|SMALL PLATED COPPER|19|360 +Brand#12|STANDARD PLATED COPPER|45|360 +Brand#13|PROMO BRUSHED COPPER|45|360 +Brand#13|SMALL ANODIZED BRASS|45|360 +Brand#13|SMALL BRUSHED STEEL|45|360 +Brand#13|SMALL BURNISHED NICKEL|19|360 +Brand#13|STANDARD BRUSHED COPPER|36|360 +Brand#14|ECONOMY ANODIZED TIN|23|360 +Brand#14|ECONOMY BRUSHED NICKEL|45|360 +Brand#14|LARGE BRUSHED TIN|9|360 +Brand#14|MEDIUM ANODIZED TIN|19|360 +Brand#14|MEDIUM BRUSHED TIN|45|360 +Brand#14|PROMO ANODIZED STEEL|23|360 +Brand#14|PROMO ANODIZED TIN|19|360 +Brand#14|PROMO BURNISHED STEEL|9|360 +Brand#14|STANDARD ANODIZED COPPER|3|360 +Brand#15|ECONOMY POLISHED COPPER|14|360 +Brand#15|LARGE PLATED STEEL|36|360 +Brand#15|MEDIUM BURNISHED TIN|3|360 +Brand#15|PROMO BRUSHED STEEL|14|360 +Brand#15|STANDARD BRUSHED TIN|14|360 +Brand#21|ECONOMY POLISHED COPPER|14|360 +Brand#21|LARGE POLISHED BRASS|14|360 +Brand#21|PROMO BURNISHED BRASS|49|360 +Brand#21|SMALL BRUSHED NICKEL|19|360 +Brand#21|STANDARD PLATED STEEL|14|360 +Brand#22|ECONOMY ANODIZED STEEL|19|360 +Brand#22|ECONOMY BURNISHED BRASS|14|360 +Brand#22|ECONOMY PLATED NICKEL|36|360 +Brand#22|LARGE BURNISHED STEEL|3|360 +Brand#22|PROMO PLATED STEEL|9|360 +Brand#22|SMALL ANODIZED COPPER|19|360 +Brand#22|STANDARD ANODIZED STEEL|23|360 +Brand#22|STANDARD PLATED NICKEL|36|360 +Brand#23|ECONOMY BURNISHED STEEL|9|360 +Brand#23|ECONOMY PLATED COPPER|19|360 +Brand#23|MEDIUM ANODIZED NICKEL|23|360 +Brand#23|MEDIUM ANODIZED TIN|14|360 +Brand#23|MEDIUM BRUSHED BRASS|14|360 +Brand#23|PROMO ANODIZED TIN|9|360 +Brand#23|PROMO ANODIZED TIN|45|360 +Brand#23|SMALL POLISHED COPPER|3|360 +Brand#23|STANDARD POLISHED NICKEL|36|360 +Brand#23|STANDARD POLISHED STEEL|36|360 +Brand#24|ECONOMY POLISHED STEEL|49|360 +Brand#24|LARGE ANODIZED NICKEL|36|360 +Brand#24|LARGE BRUSHED BRASS|45|360 +Brand#24|LARGE PLATED NICKEL|14|360 +Brand#24|LARGE POLISHED NICKEL|45|360 +Brand#24|MEDIUM BURNISHED NICKEL|9|360 +Brand#24|SMALL BURNISHED STEEL|45|360 +Brand#24|SMALL POLISHED COPPER|14|360 +Brand#24|STANDARD BURNISHED COPPER|23|360 +Brand#24|STANDARD BURNISHED COPPER|49|360 +Brand#24|STANDARD PLATED NICKEL|23|360 +Brand#25|ECONOMY ANODIZED BRASS|9|360 +Brand#25|ECONOMY BRUSHED BRASS|45|360 +Brand#25|LARGE ANODIZED TIN|3|360 +Brand#25|LARGE BURNISHED BRASS|49|360 +Brand#25|LARGE BURNISHED STEEL|3|360 +Brand#25|MEDIUM BRUSHED TIN|9|360 +Brand#25|PROMO ANODIZED STEEL|23|360 +Brand#25|PROMO BURNISHED NICKEL|45|360 +Brand#25|PROMO POLISHED COPPER|23|360 +Brand#25|PROMO POLISHED STEEL|36|360 +Brand#25|SMALL ANODIZED STEEL|45|360 +Brand#25|SMALL BRUSHED BRASS|19|360 +Brand#25|SMALL BURNISHED BRASS|23|360 +Brand#25|STANDARD BRUSHED COPPER|3|360 +Brand#25|STANDARD PLATED STEEL|14|360 +Brand#31|ECONOMY PLATED BRASS|45|360 +Brand#31|ECONOMY PLATED TIN|49|360 +Brand#31|LARGE BRUSHED NICKEL|19|360 +Brand#31|LARGE BURNISHED NICKEL|36|360 +Brand#31|LARGE PLATED STEEL|9|360 +Brand#31|LARGE POLISHED NICKEL|45|360 +Brand#31|MEDIUM BRUSHED TIN|19|360 +Brand#31|PROMO PLATED COPPER|14|360 +Brand#31|SMALL BRUSHED BRASS|45|360 +Brand#31|SMALL BURNISHED BRASS|23|360 +Brand#31|STANDARD ANODIZED STEEL|23|360 +Brand#31|STANDARD BURNISHED COPPER|36|360 +Brand#32|MEDIUM BURNISHED BRASS|45|360 +Brand#32|PROMO BRUSHED COPPER|49|360 +Brand#32|SMALL ANODIZED COPPER|36|360 +Brand#32|SMALL BRUSHED BRASS|23|360 +Brand#32|SMALL PLATED BRASS|49|360 +Brand#32|STANDARD POLISHED COPPER|23|360 +Brand#32|STANDARD POLISHED TIN|19|360 +Brand#33|LARGE POLISHED BRASS|19|360 +Brand#33|LARGE POLISHED TIN|14|360 +Brand#33|MEDIUM BRUSHED BRASS|9|360 +Brand#33|MEDIUM BURNISHED TIN|3|360 +Brand#33|PROMO BURNISHED NICKEL|14|360 +Brand#33|SMALL PLATED BRASS|9|360 +Brand#33|STANDARD BRUSHED COPPER|23|360 +Brand#33|STANDARD PLATED NICKEL|3|360 +Brand#34|ECONOMY ANODIZED BRASS|3|360 +Brand#34|ECONOMY BRUSHED NICKEL|19|360 +Brand#34|ECONOMY POLISHED STEEL|19|360 +Brand#34|LARGE BURNISHED COPPER|45|360 +Brand#34|LARGE BURNISHED NICKEL|14|360 +Brand#34|LARGE POLISHED BRASS|23|360 +Brand#34|MEDIUM ANODIZED TIN|45|360 +Brand#34|PROMO BRUSHED TIN|49|360 +Brand#34|PROMO BURNISHED COPPER|36|360 +Brand#34|PROMO BURNISHED NICKEL|9|360 +Brand#34|PROMO PLATED COPPER|36|360 +Brand#34|SMALL ANODIZED NICKEL|49|360 +Brand#34|SMALL BRUSHED STEEL|9|360 +Brand#34|SMALL PLATED NICKEL|49|360 +Brand#34|STANDARD PLATED COPPER|49|360 +Brand#35|ECONOMY ANODIZED STEEL|36|360 +Brand#35|ECONOMY BRUSHED TIN|19|360 +Brand#35|LARGE BURNISHED BRASS|3|360 +Brand#35|MEDIUM BURNISHED NICKEL|9|360 +Brand#35|PROMO BRUSHED BRASS|3|360 +Brand#35|SMALL BRUSHED COPPER|23|360 +Brand#35|SMALL POLISHED BRASS|19|360 +Brand#35|STANDARD PLATED BRASS|36|360 +Brand#35|STANDARD POLISHED NICKEL|9|360 +Brand#41|ECONOMY ANODIZED TIN|3|360 +Brand#41|LARGE BRUSHED BRASS|19|360 +Brand#41|MEDIUM ANODIZED NICKEL|19|360 +Brand#41|PROMO ANODIZED BRASS|45|360 +Brand#41|SMALL BURNISHED BRASS|36|360 +Brand#41|STANDARD BRUSHED NICKEL|23|360 +Brand#42|ECONOMY BRUSHED NICKEL|36|360 +Brand#42|LARGE PLATED NICKEL|45|360 +Brand#42|PROMO PLATED TIN|36|360 +Brand#42|SMALL BURNISHED NICKEL|14|360 +Brand#43|PROMO POLISHED STEEL|14|360 +Brand#43|SMALL PLATED STEEL|36|360 +Brand#43|SMALL POLISHED BRASS|23|360 +Brand#43|STANDARD PLATED COPPER|49|360 +Brand#44|ECONOMY BURNISHED BRASS|45|360 +Brand#44|ECONOMY BURNISHED STEEL|14|360 +Brand#44|ECONOMY POLISHED STEEL|49|360 +Brand#44|LARGE ANODIZED COPPER|45|360 +Brand#44|LARGE BURNISHED COPPER|23|360 +Brand#44|LARGE PLATED STEEL|9|360 +Brand#44|PROMO ANODIZED BRASS|49|360 +Brand#44|PROMO BURNISHED NICKEL|14|360 +Brand#44|SMALL BRUSHED TIN|19|360 +Brand#44|STANDARD BURNISHED STEEL|23|360 +Brand#51|ECONOMY POLISHED COPPER|9|360 +Brand#51|LARGE BRUSHED COPPER|45|360 +Brand#51|MEDIUM BRUSHED COPPER|49|360 +Brand#51|PROMO PLATED STEEL|36|360 +Brand#51|SMALL PLATED STEEL|9|360 +Brand#51|SMALL PLATED TIN|45|360 +Brand#51|STANDARD BRUSHED NICKEL|9|360 +Brand#52|LARGE POLISHED STEEL|19|360 +Brand#52|LARGE POLISHED STEEL|45|360 +Brand#52|MEDIUM ANODIZED NICKEL|3|360 +Brand#52|MEDIUM BRUSHED NICKEL|23|360 +Brand#52|PROMO BRUSHED STEEL|9|360 +Brand#52|PROMO BURNISHED BRASS|45|360 +Brand#52|SMALL PLATED STEEL|3|360 +Brand#52|STANDARD ANODIZED BRASS|3|360 +Brand#52|STANDARD BRUSHED BRASS|36|360 +Brand#53|ECONOMY POLISHED NICKEL|19|360 +Brand#53|LARGE PLATED BRASS|14|360 +Brand#53|LARGE POLISHED NICKEL|49|360 +Brand#53|SMALL ANODIZED BRASS|45|360 +Brand#53|SMALL BRUSHED BRASS|45|360 +Brand#53|SMALL POLISHED TIN|45|360 +Brand#53|STANDARD BURNISHED COPPER|3|360 +Brand#53|STANDARD BURNISHED TIN|36|360 +Brand#54|ECONOMY BURNISHED BRASS|49|360 +Brand#54|LARGE BRUSHED COPPER|36|360 +Brand#54|MEDIUM PLATED COPPER|14|360 +Brand#54|PROMO ANODIZED COPPER|14|360 +Brand#54|PROMO POLISHED TIN|3|360 +Brand#54|PROMO POLISHED TIN|14|360 +Brand#54|STANDARD BRUSHED BRASS|23|360 +Brand#54|STANDARD POLISHED NICKEL|9|360 +Brand#54|STANDARD POLISHED STEEL|23|360 +Brand#55|LARGE BURNISHED COPPER|45|360 +Brand#55|MEDIUM BRUSHED TIN|14|360 +Brand#55|SMALL ANODIZED NICKEL|49|360 +Brand#55|SMALL ANODIZED TIN|45|360 +Brand#55|SMALL BURNISHED COPPER|45|360 +Brand#55|SMALL PLATED BRASS|23|360 +Brand#55|SMALL PLATED STEEL|23|360 +Brand#55|SMALL POLISHED NICKEL|49|360 +Brand#55|STANDARD ANODIZED NICKEL|36|360 +Brand#55|STANDARD PLATED STEEL|36|360 +Brand#11|ECONOMY BURNISHED NICKEL|36|359 +Brand#12|SMALL BURNISHED BRASS|49|359 +Brand#14|LARGE BRUSHED TIN|36|359 +Brand#14|LARGE POLISHED COPPER|9|359 +Brand#14|PROMO BURNISHED STEEL|19|359 +Brand#14|PROMO POLISHED NICKEL|14|359 +Brand#14|STANDARD ANODIZED BRASS|23|359 +Brand#14|STANDARD BURNISHED COPPER|49|359 +Brand#15|LARGE ANODIZED NICKEL|19|359 +Brand#15|PROMO PLATED STEEL|45|359 +Brand#15|SMALL BRUSHED TIN|9|359 +Brand#15|STANDARD BRUSHED COPPER|3|359 +Brand#21|ECONOMY BURNISHED STEEL|9|359 +Brand#21|LARGE BURNISHED STEEL|23|359 +Brand#21|LARGE PLATED COPPER|45|359 +Brand#21|LARGE POLISHED STEEL|19|359 +Brand#21|MEDIUM ANODIZED TIN|45|359 +Brand#21|SMALL ANODIZED BRASS|3|359 +Brand#22|MEDIUM ANODIZED TIN|9|359 +Brand#22|SMALL PLATED BRASS|3|359 +Brand#23|SMALL PLATED TIN|36|359 +Brand#25|LARGE PLATED NICKEL|9|359 +Brand#25|STANDARD PLATED COPPER|14|359 +Brand#25|STANDARD POLISHED COPPER|23|359 +Brand#31|ECONOMY POLISHED BRASS|36|359 +Brand#31|LARGE POLISHED BRASS|3|359 +Brand#31|PROMO BRUSHED BRASS|49|359 +Brand#31|SMALL BRUSHED COPPER|9|359 +Brand#31|SMALL PLATED TIN|49|359 +Brand#32|ECONOMY BRUSHED BRASS|14|359 +Brand#32|ECONOMY BURNISHED BRASS|36|359 +Brand#32|ECONOMY POLISHED COPPER|14|359 +Brand#32|LARGE PLATED BRASS|45|359 +Brand#32|MEDIUM ANODIZED STEEL|45|359 +Brand#32|SMALL BRUSHED STEEL|3|359 +Brand#33|PROMO ANODIZED NICKEL|49|359 +Brand#33|SMALL BRUSHED TIN|23|359 +Brand#34|MEDIUM PLATED BRASS|14|359 +Brand#34|STANDARD BRUSHED BRASS|36|359 +Brand#35|SMALL POLISHED TIN|45|359 +Brand#35|STANDARD POLISHED BRASS|9|359 +Brand#41|STANDARD PLATED COPPER|9|359 +Brand#42|PROMO POLISHED TIN|3|359 +Brand#42|STANDARD BRUSHED STEEL|49|359 +Brand#43|MEDIUM BURNISHED STEEL|3|359 +Brand#44|LARGE POLISHED STEEL|19|359 +Brand#51|LARGE PLATED BRASS|23|359 +Brand#51|LARGE POLISHED BRASS|49|359 +Brand#52|LARGE PLATED BRASS|3|359 +Brand#52|PROMO POLISHED BRASS|45|359 +Brand#53|SMALL PLATED STEEL|49|359 +Brand#54|ECONOMY BRUSHED TIN|19|359 +Brand#54|ECONOMY PLATED STEEL|3|359 +Brand#54|ECONOMY POLISHED TIN|49|359 +Brand#54|MEDIUM BRUSHED BRASS|23|359 +Brand#55|SMALL PLATED STEEL|14|359 +Brand#55|STANDARD BRUSHED TIN|9|359 +Brand#55|STANDARD POLISHED NICKEL|49|359 +Brand#11|ECONOMY BURNISHED BRASS|45|358 +Brand#14|STANDARD PLATED NICKEL|19|358 +Brand#21|LARGE PLATED COPPER|3|358 +Brand#22|LARGE BURNISHED COPPER|9|358 +Brand#25|SMALL BRUSHED COPPER|45|358 +Brand#35|SMALL POLISHED NICKEL|9|358 +Brand#55|PROMO BRUSHED TIN|23|358 +Brand#11|LARGE PLATED BRASS|9|356 +Brand#11|LARGE PLATED BRASS|45|356 +Brand#11|LARGE POLISHED TIN|14|356 +Brand#11|SMALL BURNISHED COPPER|49|356 +Brand#11|SMALL PLATED COPPER|36|356 +Brand#11|SMALL PLATED STEEL|49|356 +Brand#12|LARGE PLATED TIN|3|356 +Brand#12|MEDIUM BRUSHED COPPER|23|356 +Brand#12|PROMO BURNISHED COPPER|49|356 +Brand#12|STANDARD ANODIZED TIN|23|356 +Brand#12|STANDARD PLATED NICKEL|14|356 +Brand#13|ECONOMY BURNISHED NICKEL|14|356 +Brand#13|MEDIUM BURNISHED TIN|14|356 +Brand#13|PROMO BURNISHED BRASS|49|356 +Brand#13|SMALL BRUSHED COPPER|49|356 +Brand#13|SMALL PLATED STEEL|9|356 +Brand#13|STANDARD ANODIZED COPPER|23|356 +Brand#13|STANDARD ANODIZED COPPER|49|356 +Brand#13|STANDARD BURNISHED STEEL|9|356 +Brand#13|STANDARD POLISHED TIN|14|356 +Brand#14|LARGE BURNISHED BRASS|36|356 +Brand#14|LARGE BURNISHED STEEL|9|356 +Brand#14|LARGE PLATED NICKEL|23|356 +Brand#14|MEDIUM BURNISHED BRASS|45|356 +Brand#14|SMALL ANODIZED COPPER|3|356 +Brand#14|SMALL PLATED BRASS|19|356 +Brand#14|SMALL PLATED BRASS|49|356 +Brand#15|ECONOMY POLISHED COPPER|3|356 +Brand#15|ECONOMY POLISHED NICKEL|3|356 +Brand#15|ECONOMY POLISHED TIN|23|356 +Brand#15|LARGE ANODIZED STEEL|49|356 +Brand#15|LARGE BURNISHED COPPER|36|356 +Brand#15|LARGE PLATED BRASS|3|356 +Brand#15|LARGE PLATED COPPER|9|356 +Brand#15|PROMO ANODIZED STEEL|3|356 +Brand#15|PROMO PLATED STEEL|36|356 +Brand#21|ECONOMY ANODIZED COPPER|3|356 +Brand#21|ECONOMY ANODIZED NICKEL|45|356 +Brand#21|LARGE POLISHED BRASS|19|356 +Brand#21|MEDIUM BURNISHED COPPER|3|356 +Brand#21|PROMO ANODIZED STEEL|14|356 +Brand#21|PROMO PLATED TIN|23|356 +Brand#21|STANDARD PLATED COPPER|49|356 +Brand#21|STANDARD PLATED STEEL|19|356 +Brand#21|STANDARD POLISHED NICKEL|49|356 +Brand#22|LARGE BURNISHED NICKEL|9|356 +Brand#22|PROMO ANODIZED STEEL|9|356 +Brand#22|PROMO BRUSHED TIN|23|356 +Brand#23|ECONOMY BURNISHED BRASS|14|356 +Brand#23|LARGE BRUSHED NICKEL|19|356 +Brand#23|LARGE BRUSHED TIN|36|356 +Brand#23|MEDIUM BURNISHED NICKEL|23|356 +Brand#23|PROMO BRUSHED COPPER|19|356 +Brand#23|SMALL ANODIZED NICKEL|45|356 +Brand#23|SMALL PLATED COPPER|19|356 +Brand#24|ECONOMY ANODIZED NICKEL|49|356 +Brand#24|LARGE ANODIZED BRASS|14|356 +Brand#24|LARGE POLISHED NICKEL|49|356 +Brand#24|PROMO BRUSHED COPPER|9|356 +Brand#24|SMALL PLATED STEEL|23|356 +Brand#25|ECONOMY BURNISHED NICKEL|23|356 +Brand#25|PROMO BRUSHED STEEL|23|356 +Brand#25|PROMO BURNISHED NICKEL|23|356 +Brand#25|PROMO PLATED TIN|3|356 +Brand#25|SMALL BURNISHED NICKEL|49|356 +Brand#25|STANDARD BURNISHED NICKEL|49|356 +Brand#31|ECONOMY BRUSHED BRASS|36|356 +Brand#31|ECONOMY BRUSHED COPPER|19|356 +Brand#31|MEDIUM BRUSHED COPPER|3|356 +Brand#31|PROMO BRUSHED COPPER|3|356 +Brand#31|SMALL BRUSHED STEEL|9|356 +Brand#31|STANDARD PLATED NICKEL|49|356 +Brand#32|ECONOMY POLISHED NICKEL|14|356 +Brand#32|LARGE BRUSHED NICKEL|19|356 +Brand#32|MEDIUM PLATED TIN|3|356 +Brand#32|PROMO BRUSHED TIN|23|356 +Brand#32|PROMO BURNISHED STEEL|49|356 +Brand#32|PROMO POLISHED TIN|14|356 +Brand#32|SMALL PLATED NICKEL|45|356 +Brand#32|SMALL POLISHED COPPER|36|356 +Brand#32|SMALL POLISHED STEEL|45|356 +Brand#32|SMALL POLISHED TIN|9|356 +Brand#32|STANDARD ANODIZED STEEL|49|356 +Brand#32|STANDARD BRUSHED STEEL|36|356 +Brand#32|STANDARD PLATED TIN|23|356 +Brand#33|ECONOMY PLATED TIN|14|356 +Brand#33|LARGE BRUSHED NICKEL|9|356 +Brand#33|MEDIUM ANODIZED STEEL|19|356 +Brand#33|MEDIUM PLATED TIN|49|356 +Brand#33|PROMO ANODIZED COPPER|3|356 +Brand#33|PROMO BRUSHED BRASS|23|356 +Brand#33|PROMO BURNISHED NICKEL|49|356 +Brand#33|STANDARD BRUSHED STEEL|23|356 +Brand#33|STANDARD BURNISHED NICKEL|9|356 +Brand#33|STANDARD PLATED TIN|3|356 +Brand#34|MEDIUM ANODIZED COPPER|14|356 +Brand#34|MEDIUM PLATED BRASS|49|356 +Brand#34|PROMO ANODIZED STEEL|14|356 +Brand#34|PROMO PLATED NICKEL|3|356 +Brand#34|PROMO POLISHED COPPER|9|356 +Brand#34|PROMO POLISHED TIN|23|356 +Brand#34|SMALL ANODIZED BRASS|9|356 +Brand#34|SMALL ANODIZED BRASS|23|356 +Brand#35|ECONOMY BRUSHED COPPER|45|356 +Brand#35|LARGE ANODIZED NICKEL|36|356 +Brand#35|LARGE POLISHED NICKEL|19|356 +Brand#35|MEDIUM ANODIZED NICKEL|9|356 +Brand#35|SMALL ANODIZED NICKEL|3|356 +Brand#35|SMALL BRUSHED COPPER|14|356 +Brand#35|SMALL BRUSHED STEEL|49|356 +Brand#35|SMALL PLATED TIN|45|356 +Brand#35|SMALL POLISHED TIN|49|356 +Brand#41|ECONOMY BURNISHED STEEL|36|356 +Brand#41|ECONOMY BURNISHED TIN|23|356 +Brand#41|LARGE BRUSHED BRASS|14|356 +Brand#41|LARGE BURNISHED COPPER|19|356 +Brand#41|LARGE PLATED TIN|36|356 +Brand#41|MEDIUM PLATED STEEL|14|356 +Brand#41|PROMO ANODIZED TIN|19|356 +Brand#41|PROMO PLATED STEEL|49|356 +Brand#41|SMALL BURNISHED BRASS|49|356 +Brand#41|SMALL PLATED COPPER|49|356 +Brand#41|SMALL PLATED NICKEL|19|356 +Brand#41|STANDARD BRUSHED BRASS|19|356 +Brand#41|STANDARD BRUSHED TIN|19|356 +Brand#42|LARGE BRUSHED BRASS|49|356 +Brand#42|MEDIUM PLATED STEEL|49|356 +Brand#42|SMALL BRUSHED NICKEL|3|356 +Brand#42|STANDARD ANODIZED COPPER|3|356 +Brand#42|STANDARD ANODIZED STEEL|45|356 +Brand#42|STANDARD BRUSHED TIN|14|356 +Brand#42|STANDARD BURNISHED STEEL|9|356 +Brand#42|STANDARD PLATED BRASS|49|356 +Brand#42|STANDARD PLATED STEEL|19|356 +Brand#42|STANDARD PLATED TIN|9|356 +Brand#42|STANDARD POLISHED TIN|3|356 +Brand#43|LARGE BRUSHED COPPER|23|356 +Brand#43|LARGE PLATED STEEL|45|356 +Brand#43|MEDIUM BURNISHED TIN|23|356 +Brand#43|SMALL PLATED TIN|45|356 +Brand#43|SMALL POLISHED TIN|19|356 +Brand#43|STANDARD ANODIZED TIN|3|356 +Brand#43|STANDARD PLATED BRASS|14|356 +Brand#44|ECONOMY BURNISHED COPPER|23|356 +Brand#44|MEDIUM BRUSHED BRASS|14|356 +Brand#44|MEDIUM BRUSHED NICKEL|49|356 +Brand#44|PROMO PLATED STEEL|9|356 +Brand#44|SMALL ANODIZED STEEL|23|356 +Brand#44|SMALL POLISHED BRASS|45|356 +Brand#51|ECONOMY ANODIZED BRASS|3|356 +Brand#51|ECONOMY BRUSHED NICKEL|3|356 +Brand#51|ECONOMY BURNISHED NICKEL|9|356 +Brand#51|MEDIUM BURNISHED STEEL|45|356 +Brand#51|PROMO ANODIZED BRASS|19|356 +Brand#51|PROMO BRUSHED STEEL|23|356 +Brand#51|PROMO POLISHED BRASS|14|356 +Brand#51|SMALL BRUSHED BRASS|23|356 +Brand#51|SMALL BRUSHED STEEL|23|356 +Brand#51|SMALL PLATED TIN|3|356 +Brand#51|SMALL POLISHED NICKEL|3|356 +Brand#51|SMALL POLISHED TIN|45|356 +Brand#51|STANDARD BRUSHED BRASS|9|356 +Brand#51|STANDARD BRUSHED COPPER|36|356 +Brand#51|STANDARD BURNISHED BRASS|19|356 +Brand#51|STANDARD BURNISHED STEEL|49|356 +Brand#51|STANDARD PLATED BRASS|14|356 +Brand#52|ECONOMY POLISHED BRASS|45|356 +Brand#52|LARGE BRUSHED COPPER|49|356 +Brand#52|MEDIUM BURNISHED NICKEL|45|356 +Brand#52|MEDIUM PLATED COPPER|36|356 +Brand#52|PROMO BRUSHED NICKEL|36|356 +Brand#52|PROMO BRUSHED STEEL|14|356 +Brand#52|SMALL ANODIZED STEEL|14|356 +Brand#52|SMALL ANODIZED STEEL|36|356 +Brand#52|SMALL BURNISHED BRASS|23|356 +Brand#52|SMALL POLISHED COPPER|45|356 +Brand#52|SMALL POLISHED NICKEL|45|356 +Brand#52|STANDARD ANODIZED NICKEL|3|356 +Brand#52|STANDARD BRUSHED TIN|3|356 +Brand#53|ECONOMY ANODIZED STEEL|19|356 +Brand#53|ECONOMY ANODIZED TIN|45|356 +Brand#53|ECONOMY BRUSHED STEEL|45|356 +Brand#53|LARGE BURNISHED BRASS|23|356 +Brand#53|LARGE PLATED STEEL|45|356 +Brand#53|PROMO PLATED COPPER|9|356 +Brand#53|SMALL ANODIZED COPPER|9|356 +Brand#53|SMALL BRUSHED NICKEL|36|356 +Brand#53|STANDARD BURNISHED NICKEL|45|356 +Brand#54|MEDIUM ANODIZED BRASS|45|356 +Brand#54|MEDIUM PLATED NICKEL|23|356 +Brand#54|PROMO BRUSHED BRASS|9|356 +Brand#54|PROMO PLATED TIN|36|356 +Brand#54|STANDARD BRUSHED BRASS|14|356 +Brand#55|ECONOMY BRUSHED COPPER|14|356 +Brand#55|ECONOMY BRUSHED NICKEL|3|356 +Brand#55|LARGE BRUSHED TIN|19|356 +Brand#55|MEDIUM BRUSHED COPPER|19|356 +Brand#55|PROMO BURNISHED TIN|36|356 +Brand#55|SMALL ANODIZED STEEL|23|356 +Brand#55|SMALL BRUSHED TIN|36|356 +Brand#55|STANDARD ANODIZED BRASS|3|356 +Brand#55|STANDARD ANODIZED NICKEL|3|356 +Brand#55|STANDARD BRUSHED TIN|14|356 +Brand#55|STANDARD POLISHED COPPER|3|356 +Brand#11|LARGE PLATED COPPER|23|355 +Brand#13|ECONOMY ANODIZED STEEL|3|355 +Brand#14|SMALL POLISHED COPPER|45|355 +Brand#15|STANDARD ANODIZED COPPER|14|355 +Brand#15|STANDARD BRUSHED STEEL|14|355 +Brand#21|LARGE POLISHED BRASS|49|355 +Brand#21|MEDIUM BURNISHED STEEL|3|355 +Brand#22|SMALL BRUSHED STEEL|3|355 +Brand#22|STANDARD ANODIZED COPPER|23|355 +Brand#23|SMALL ANODIZED TIN|36|355 +Brand#25|ECONOMY PLATED STEEL|45|355 +Brand#31|ECONOMY POLISHED COPPER|49|355 +Brand#31|LARGE BURNISHED STEEL|49|355 +Brand#31|PROMO BRUSHED NICKEL|9|355 +Brand#31|PROMO POLISHED BRASS|23|355 +Brand#31|SMALL POLISHED NICKEL|9|355 +Brand#32|ECONOMY ANODIZED NICKEL|49|355 +Brand#32|ECONOMY BRUSHED TIN|3|355 +Brand#32|ECONOMY POLISHED STEEL|36|355 +Brand#33|ECONOMY BURNISHED TIN|3|355 +Brand#33|MEDIUM BRUSHED TIN|36|355 +Brand#34|ECONOMY BURNISHED BRASS|45|355 +Brand#34|PROMO ANODIZED BRASS|14|355 +Brand#34|SMALL PLATED COPPER|45|355 +Brand#34|SMALL POLISHED BRASS|36|355 +Brand#35|LARGE PLATED STEEL|3|355 +Brand#35|SMALL BRUSHED TIN|14|355 +Brand#41|STANDARD ANODIZED STEEL|36|355 +Brand#42|MEDIUM PLATED COPPER|3|355 +Brand#42|STANDARD ANODIZED COPPER|49|355 +Brand#42|STANDARD BURNISHED BRASS|49|355 +Brand#43|STANDARD POLISHED STEEL|49|355 +Brand#44|ECONOMY POLISHED TIN|45|355 +Brand#44|SMALL ANODIZED TIN|19|355 +Brand#51|PROMO BURNISHED BRASS|14|355 +Brand#51|SMALL BURNISHED BRASS|45|355 +Brand#51|STANDARD ANODIZED TIN|36|355 +Brand#53|STANDARD PLATED TIN|23|355 +Brand#54|MEDIUM BURNISHED NICKEL|49|355 +Brand#55|ECONOMY PLATED NICKEL|36|355 +Brand#23|ECONOMY BRUSHED COPPER|23|354 +Brand#41|ECONOMY ANODIZED COPPER|36|354 +Brand#51|MEDIUM BRUSHED COPPER|9|354 +Brand#52|PROMO ANODIZED TIN|49|354 +Brand#23|SMALL PLATED STEEL|9|353 +Brand#11|LARGE BRUSHED NICKEL|49|352 +Brand#11|MEDIUM ANODIZED COPPER|3|352 +Brand#11|MEDIUM PLATED STEEL|3|352 +Brand#11|PROMO BURNISHED COPPER|49|352 +Brand#11|SMALL ANODIZED COPPER|45|352 +Brand#11|SMALL BRUSHED COPPER|14|352 +Brand#11|SMALL BURNISHED BRASS|45|352 +Brand#11|SMALL BURNISHED COPPER|9|352 +Brand#12|ECONOMY ANODIZED COPPER|36|352 +Brand#12|ECONOMY ANODIZED NICKEL|19|352 +Brand#12|ECONOMY ANODIZED STEEL|49|352 +Brand#12|ECONOMY BURNISHED STEEL|36|352 +Brand#12|ECONOMY PLATED STEEL|3|352 +Brand#12|LARGE BRUSHED COPPER|36|352 +Brand#12|MEDIUM ANODIZED TIN|14|352 +Brand#12|MEDIUM BRUSHED TIN|36|352 +Brand#12|MEDIUM BURNISHED STEEL|14|352 +Brand#12|MEDIUM PLATED STEEL|23|352 +Brand#12|PROMO ANODIZED NICKEL|3|352 +Brand#12|SMALL PLATED TIN|23|352 +Brand#12|SMALL POLISHED COPPER|19|352 +Brand#12|STANDARD POLISHED TIN|45|352 +Brand#13|ECONOMY BRUSHED BRASS|19|352 +Brand#13|ECONOMY BRUSHED COPPER|3|352 +Brand#13|LARGE BRUSHED BRASS|23|352 +Brand#13|MEDIUM ANODIZED STEEL|45|352 +Brand#13|MEDIUM BRUSHED STEEL|9|352 +Brand#13|PROMO BRUSHED BRASS|9|352 +Brand#13|PROMO BRUSHED STEEL|45|352 +Brand#13|PROMO PLATED STEEL|19|352 +Brand#13|PROMO PLATED TIN|36|352 +Brand#13|SMALL PLATED NICKEL|36|352 +Brand#13|STANDARD POLISHED NICKEL|14|352 +Brand#14|ECONOMY BURNISHED BRASS|9|352 +Brand#14|LARGE BRUSHED STEEL|23|352 +Brand#14|LARGE BURNISHED TIN|36|352 +Brand#14|MEDIUM BRUSHED COPPER|36|352 +Brand#14|PROMO ANODIZED TIN|23|352 +Brand#14|PROMO PLATED NICKEL|3|352 +Brand#14|PROMO POLISHED STEEL|19|352 +Brand#14|SMALL ANODIZED STEEL|19|352 +Brand#14|SMALL BRUSHED STEEL|14|352 +Brand#14|SMALL POLISHED STEEL|3|352 +Brand#14|STANDARD ANODIZED STEEL|19|352 +Brand#14|STANDARD PLATED STEEL|49|352 +Brand#15|LARGE BURNISHED BRASS|36|352 +Brand#15|LARGE BURNISHED NICKEL|49|352 +Brand#15|PROMO BURNISHED STEEL|19|352 +Brand#15|SMALL BRUSHED BRASS|14|352 +Brand#21|ECONOMY BRUSHED BRASS|23|352 +Brand#21|LARGE BRUSHED TIN|14|352 +Brand#21|MEDIUM BRUSHED STEEL|3|352 +Brand#21|MEDIUM BRUSHED STEEL|45|352 +Brand#21|MEDIUM PLATED NICKEL|19|352 +Brand#21|STANDARD BRUSHED BRASS|49|352 +Brand#22|ECONOMY POLISHED BRASS|3|352 +Brand#22|LARGE ANODIZED NICKEL|14|352 +Brand#22|LARGE BRUSHED STEEL|23|352 +Brand#22|MEDIUM BURNISHED BRASS|45|352 +Brand#22|PROMO ANODIZED COPPER|19|352 +Brand#22|SMALL BRUSHED TIN|36|352 +Brand#22|SMALL BURNISHED TIN|49|352 +Brand#22|SMALL POLISHED COPPER|23|352 +Brand#22|STANDARD PLATED BRASS|23|352 +Brand#23|ECONOMY BRUSHED NICKEL|49|352 +Brand#23|LARGE ANODIZED BRASS|14|352 +Brand#23|MEDIUM BURNISHED STEEL|9|352 +Brand#23|PROMO ANODIZED TIN|19|352 +Brand#23|PROMO PLATED COPPER|45|352 +Brand#24|ECONOMY BRUSHED COPPER|14|352 +Brand#24|ECONOMY PLATED NICKEL|45|352 +Brand#24|LARGE BRUSHED NICKEL|45|352 +Brand#24|LARGE BURNISHED NICKEL|45|352 +Brand#24|LARGE POLISHED BRASS|9|352 +Brand#24|MEDIUM ANODIZED NICKEL|14|352 +Brand#24|PROMO BURNISHED TIN|14|352 +Brand#24|PROMO PLATED BRASS|14|352 +Brand#24|PROMO PLATED COPPER|36|352 +Brand#24|SMALL PLATED TIN|23|352 +Brand#24|STANDARD POLISHED STEEL|36|352 +Brand#24|STANDARD POLISHED TIN|19|352 +Brand#25|LARGE ANODIZED BRASS|23|352 +Brand#25|PROMO POLISHED STEEL|14|352 +Brand#25|SMALL ANODIZED COPPER|9|352 +Brand#25|STANDARD PLATED STEEL|9|352 +Brand#31|MEDIUM BRUSHED STEEL|36|352 +Brand#32|ECONOMY BRUSHED BRASS|49|352 +Brand#32|ECONOMY POLISHED BRASS|23|352 +Brand#32|LARGE ANODIZED BRASS|36|352 +Brand#32|LARGE BURNISHED BRASS|45|352 +Brand#32|PROMO ANODIZED BRASS|19|352 +Brand#32|PROMO BURNISHED BRASS|3|352 +Brand#32|STANDARD ANODIZED TIN|36|352 +Brand#33|MEDIUM BURNISHED BRASS|14|352 +Brand#33|MEDIUM PLATED BRASS|23|352 +Brand#33|PROMO BURNISHED TIN|3|352 +Brand#33|PROMO POLISHED NICKEL|36|352 +Brand#33|SMALL BURNISHED NICKEL|3|352 +Brand#33|STANDARD BRUSHED NICKEL|19|352 +Brand#34|ECONOMY POLISHED STEEL|49|352 +Brand#34|LARGE PLATED TIN|3|352 +Brand#34|MEDIUM ANODIZED STEEL|23|352 +Brand#34|MEDIUM PLATED TIN|3|352 +Brand#34|PROMO BURNISHED STEEL|19|352 +Brand#35|ECONOMY PLATED BRASS|9|352 +Brand#35|ECONOMY PLATED COPPER|14|352 +Brand#35|ECONOMY POLISHED TIN|23|352 +Brand#35|LARGE PLATED STEEL|36|352 +Brand#35|MEDIUM PLATED TIN|14|352 +Brand#35|PROMO ANODIZED BRASS|3|352 +Brand#41|ECONOMY ANODIZED STEEL|14|352 +Brand#41|ECONOMY PLATED TIN|49|352 +Brand#41|LARGE ANODIZED COPPER|9|352 +Brand#41|LARGE BRUSHED STEEL|3|352 +Brand#41|PROMO ANODIZED STEEL|3|352 +Brand#41|SMALL ANODIZED BRASS|14|352 +Brand#41|SMALL BRUSHED NICKEL|3|352 +Brand#42|ECONOMY BRUSHED NICKEL|49|352 +Brand#42|LARGE BRUSHED TIN|49|352 +Brand#42|MEDIUM BRUSHED COPPER|19|352 +Brand#42|SMALL BRUSHED BRASS|19|352 +Brand#42|STANDARD BURNISHED COPPER|45|352 +Brand#42|STANDARD PLATED BRASS|19|352 +Brand#42|STANDARD PLATED NICKEL|9|352 +Brand#43|LARGE PLATED STEEL|19|352 +Brand#43|LARGE POLISHED COPPER|36|352 +Brand#43|MEDIUM BRUSHED COPPER|14|352 +Brand#43|SMALL BRUSHED TIN|49|352 +Brand#43|STANDARD BURNISHED TIN|3|352 +Brand#44|ECONOMY ANODIZED NICKEL|3|352 +Brand#44|ECONOMY POLISHED TIN|19|352 +Brand#44|MEDIUM BURNISHED TIN|14|352 +Brand#44|PROMO ANODIZED NICKEL|9|352 +Brand#44|PROMO PLATED NICKEL|23|352 +Brand#51|LARGE BURNISHED TIN|14|352 +Brand#51|LARGE PLATED STEEL|49|352 +Brand#51|MEDIUM BURNISHED TIN|36|352 +Brand#51|PROMO ANODIZED STEEL|19|352 +Brand#51|SMALL POLISHED NICKEL|19|352 +Brand#51|SMALL POLISHED TIN|19|352 +Brand#51|STANDARD BURNISHED COPPER|9|352 +Brand#52|ECONOMY ANODIZED COPPER|3|352 +Brand#52|ECONOMY BURNISHED COPPER|3|352 +Brand#52|ECONOMY BURNISHED STEEL|49|352 +Brand#52|ECONOMY PLATED STEEL|14|352 +Brand#52|LARGE ANODIZED STEEL|45|352 +Brand#52|PROMO BURNISHED STEEL|49|352 +Brand#52|SMALL BURNISHED TIN|45|352 +Brand#52|SMALL PLATED BRASS|19|352 +Brand#52|STANDARD BURNISHED NICKEL|14|352 +Brand#52|STANDARD PLATED TIN|36|352 +Brand#53|ECONOMY BRUSHED COPPER|45|352 +Brand#53|ECONOMY BURNISHED BRASS|36|352 +Brand#53|LARGE PLATED STEEL|3|352 +Brand#53|LARGE PLATED TIN|9|352 +Brand#53|MEDIUM ANODIZED COPPER|14|352 +Brand#53|MEDIUM BRUSHED NICKEL|3|352 +Brand#53|PROMO ANODIZED COPPER|49|352 +Brand#53|PROMO PLATED BRASS|3|352 +Brand#53|SMALL BRUSHED STEEL|36|352 +Brand#53|SMALL BURNISHED STEEL|49|352 +Brand#53|STANDARD POLISHED TIN|9|352 +Brand#54|ECONOMY ANODIZED TIN|19|352 +Brand#54|LARGE ANODIZED NICKEL|9|352 +Brand#54|LARGE BRUSHED TIN|49|352 +Brand#54|PROMO ANODIZED NICKEL|3|352 +Brand#54|SMALL BURNISHED STEEL|9|352 +Brand#54|STANDARD ANODIZED BRASS|36|352 +Brand#54|STANDARD BURNISHED COPPER|36|352 +Brand#55|ECONOMY BURNISHED COPPER|36|352 +Brand#55|ECONOMY BURNISHED NICKEL|3|352 +Brand#55|ECONOMY POLISHED COPPER|3|352 +Brand#55|LARGE BURNISHED BRASS|9|352 +Brand#55|PROMO BRUSHED BRASS|3|352 +Brand#55|SMALL POLISHED BRASS|9|352 +Brand#55|STANDARD BRUSHED COPPER|14|352 +Brand#12|LARGE BRUSHED BRASS|14|351 +Brand#12|LARGE PLATED NICKEL|9|351 +Brand#12|MEDIUM BURNISHED BRASS|19|351 +Brand#12|PROMO POLISHED TIN|49|351 +Brand#14|LARGE PLATED TIN|45|351 +Brand#15|ECONOMY PLATED STEEL|23|351 +Brand#24|SMALL ANODIZED STEEL|23|351 +Brand#24|STANDARD BURNISHED COPPER|19|351 +Brand#31|STANDARD BURNISHED TIN|9|351 +Brand#32|SMALL ANODIZED BRASS|9|351 +Brand#33|PROMO ANODIZED COPPER|23|351 +Brand#33|STANDARD PLATED BRASS|14|351 +Brand#34|ECONOMY ANODIZED COPPER|19|351 +Brand#35|ECONOMY POLISHED NICKEL|45|351 +Brand#35|MEDIUM BRUSHED TIN|23|351 +Brand#35|PROMO ANODIZED TIN|14|351 +Brand#43|STANDARD BRUSHED COPPER|23|351 +Brand#43|STANDARD BURNISHED STEEL|3|351 +Brand#51|LARGE POLISHED STEEL|45|351 +Brand#51|PROMO POLISHED TIN|23|351 +Brand#51|STANDARD BRUSHED TIN|49|351 +Brand#52|SMALL PLATED TIN|23|351 +Brand#53|SMALL POLISHED TIN|49|351 +Brand#54|ECONOMY POLISHED COPPER|49|351 +Brand#54|LARGE BURNISHED BRASS|45|351 +Brand#54|SMALL ANODIZED STEEL|23|351 +Brand#55|LARGE PLATED BRASS|3|351 +Brand#11|MEDIUM BRUSHED TIN|23|350 +Brand#22|ECONOMY POLISHED NICKEL|9|350 +Brand#32|LARGE PLATED NICKEL|23|350 +Brand#11|MEDIUM BRUSHED COPPER|36|348 +Brand#11|PROMO POLISHED TIN|45|348 +Brand#11|SMALL BRUSHED TIN|36|348 +Brand#11|SMALL PLATED COPPER|19|348 +Brand#11|SMALL PLATED TIN|45|348 +Brand#11|SMALL POLISHED COPPER|3|348 +Brand#11|STANDARD BRUSHED TIN|9|348 +Brand#11|STANDARD PLATED BRASS|36|348 +Brand#11|STANDARD PLATED NICKEL|19|348 +Brand#12|ECONOMY PLATED COPPER|14|348 +Brand#12|SMALL ANODIZED COPPER|14|348 +Brand#12|STANDARD POLISHED NICKEL|49|348 +Brand#13|SMALL PLATED BRASS|19|348 +Brand#13|STANDARD PLATED TIN|9|348 +Brand#14|ECONOMY BRUSHED COPPER|23|348 +Brand#14|ECONOMY BURNISHED NICKEL|9|348 +Brand#14|ECONOMY PLATED BRASS|49|348 +Brand#14|MEDIUM ANODIZED TIN|36|348 +Brand#14|MEDIUM BURNISHED STEEL|9|348 +Brand#14|PROMO BRUSHED TIN|14|348 +Brand#14|STANDARD ANODIZED BRASS|19|348 +Brand#14|STANDARD PLATED TIN|36|348 +Brand#14|STANDARD POLISHED TIN|36|348 +Brand#14|STANDARD POLISHED TIN|49|348 +Brand#15|ECONOMY PLATED NICKEL|49|348 +Brand#15|ECONOMY PLATED TIN|36|348 +Brand#15|MEDIUM PLATED NICKEL|9|348 +Brand#15|PROMO POLISHED TIN|14|348 +Brand#15|SMALL BRUSHED BRASS|36|348 +Brand#15|STANDARD BRUSHED STEEL|19|348 +Brand#15|STANDARD PLATED COPPER|36|348 +Brand#21|ECONOMY BRUSHED NICKEL|49|348 +Brand#21|ECONOMY POLISHED BRASS|14|348 +Brand#21|LARGE BRUSHED TIN|19|348 +Brand#21|MEDIUM BRUSHED COPPER|45|348 +Brand#21|PROMO BRUSHED NICKEL|23|348 +Brand#21|PROMO PLATED STEEL|36|348 +Brand#21|SMALL ANODIZED BRASS|14|348 +Brand#21|SMALL BRUSHED STEEL|23|348 +Brand#21|STANDARD ANODIZED COPPER|45|348 +Brand#21|STANDARD BRUSHED STEEL|9|348 +Brand#21|STANDARD BRUSHED STEEL|14|348 +Brand#22|ECONOMY ANODIZED NICKEL|36|348 +Brand#22|ECONOMY BRUSHED COPPER|9|348 +Brand#22|ECONOMY BURNISHED COPPER|36|348 +Brand#22|LARGE BURNISHED STEEL|49|348 +Brand#22|MEDIUM ANODIZED COPPER|23|348 +Brand#22|PROMO PLATED BRASS|36|348 +Brand#22|PROMO POLISHED TIN|36|348 +Brand#23|ECONOMY BURNISHED TIN|23|348 +Brand#23|SMALL POLISHED BRASS|14|348 +Brand#24|MEDIUM BURNISHED COPPER|49|348 +Brand#24|STANDARD BRUSHED BRASS|49|348 +Brand#24|STANDARD POLISHED STEEL|14|348 +Brand#25|ECONOMY PLATED BRASS|23|348 +Brand#25|ECONOMY PLATED TIN|36|348 +Brand#25|ECONOMY POLISHED BRASS|9|348 +Brand#31|ECONOMY PLATED BRASS|3|348 +Brand#31|ECONOMY PLATED TIN|36|348 +Brand#32|ECONOMY BURNISHED COPPER|45|348 +Brand#32|SMALL POLISHED COPPER|49|348 +Brand#32|STANDARD BRUSHED TIN|9|348 +Brand#33|MEDIUM BURNISHED TIN|49|348 +Brand#33|STANDARD PLATED TIN|9|348 +Brand#34|ECONOMY BRUSHED COPPER|45|348 +Brand#34|ECONOMY PLATED BRASS|49|348 +Brand#34|LARGE ANODIZED BRASS|36|348 +Brand#34|LARGE ANODIZED STEEL|49|348 +Brand#34|LARGE ANODIZED TIN|45|348 +Brand#34|PROMO PLATED COPPER|3|348 +Brand#34|SMALL ANODIZED COPPER|49|348 +Brand#34|SMALL ANODIZED STEEL|23|348 +Brand#34|SMALL BURNISHED STEEL|19|348 +Brand#34|SMALL PLATED TIN|9|348 +Brand#34|SMALL POLISHED STEEL|36|348 +Brand#35|ECONOMY ANODIZED TIN|49|348 +Brand#35|LARGE BRUSHED COPPER|9|348 +Brand#35|MEDIUM BRUSHED NICKEL|45|348 +Brand#35|MEDIUM BURNISHED BRASS|9|348 +Brand#35|MEDIUM BURNISHED STEEL|3|348 +Brand#35|STANDARD ANODIZED TIN|49|348 +Brand#41|MEDIUM BURNISHED NICKEL|14|348 +Brand#41|MEDIUM PLATED COPPER|3|348 +Brand#41|MEDIUM PLATED COPPER|36|348 +Brand#41|PROMO BRUSHED NICKEL|23|348 +Brand#42|ECONOMY BRUSHED COPPER|14|348 +Brand#42|ECONOMY BURNISHED BRASS|3|348 +Brand#42|ECONOMY BURNISHED NICKEL|19|348 +Brand#42|LARGE ANODIZED NICKEL|45|348 +Brand#42|LARGE ANODIZED TIN|19|348 +Brand#42|LARGE POLISHED TIN|49|348 +Brand#42|MEDIUM BRUSHED COPPER|36|348 +Brand#42|MEDIUM PLATED BRASS|19|348 +Brand#42|PROMO ANODIZED TIN|45|348 +Brand#42|PROMO BRUSHED TIN|45|348 +Brand#42|PROMO PLATED BRASS|19|348 +Brand#42|STANDARD BRUSHED STEEL|45|348 +Brand#42|STANDARD POLISHED NICKEL|45|348 +Brand#43|ECONOMY POLISHED COPPER|23|348 +Brand#43|PROMO BRUSHED COPPER|3|348 +Brand#43|SMALL BURNISHED BRASS|14|348 +Brand#44|LARGE BURNISHED BRASS|36|348 +Brand#44|LARGE POLISHED NICKEL|9|348 +Brand#44|PROMO PLATED BRASS|14|348 +Brand#51|ECONOMY BRUSHED STEEL|14|348 +Brand#51|PROMO BURNISHED STEEL|9|348 +Brand#51|PROMO BURNISHED STEEL|36|348 +Brand#51|PROMO PLATED BRASS|19|348 +Brand#52|ECONOMY POLISHED NICKEL|45|348 +Brand#52|LARGE BRUSHED BRASS|49|348 +Brand#52|LARGE BURNISHED NICKEL|45|348 +Brand#52|LARGE POLISHED NICKEL|45|348 +Brand#52|PROMO POLISHED COPPER|49|348 +Brand#52|SMALL POLISHED COPPER|19|348 +Brand#53|LARGE PLATED NICKEL|45|348 +Brand#53|MEDIUM BRUSHED STEEL|36|348 +Brand#53|MEDIUM BURNISHED NICKEL|9|348 +Brand#53|SMALL BRUSHED NICKEL|23|348 +Brand#54|ECONOMY BURNISHED BRASS|36|348 +Brand#54|MEDIUM ANODIZED STEEL|9|348 +Brand#54|MEDIUM BURNISHED BRASS|49|348 +Brand#54|PROMO PLATED NICKEL|23|348 +Brand#54|PROMO POLISHED COPPER|14|348 +Brand#54|SMALL PLATED NICKEL|36|348 +Brand#54|SMALL POLISHED NICKEL|19|348 +Brand#55|LARGE BRUSHED TIN|3|348 +Brand#55|MEDIUM ANODIZED COPPER|23|348 +Brand#55|PROMO BURNISHED BRASS|3|348 +Brand#55|PROMO BURNISHED BRASS|9|348 +Brand#55|PROMO BURNISHED TIN|45|348 +Brand#55|SMALL POLISHED COPPER|3|348 +Brand#55|STANDARD ANODIZED TIN|36|348 +Brand#11|ECONOMY ANODIZED STEEL|36|347 +Brand#11|ECONOMY BURNISHED COPPER|45|347 +Brand#12|ECONOMY PLATED BRASS|45|347 +Brand#13|ECONOMY ANODIZED TIN|3|347 +Brand#14|STANDARD BRUSHED NICKEL|36|347 +Brand#15|SMALL PLATED STEEL|23|347 +Brand#21|PROMO ANODIZED TIN|14|347 +Brand#22|PROMO BRUSHED BRASS|36|347 +Brand#23|SMALL POLISHED STEEL|45|347 +Brand#24|MEDIUM ANODIZED COPPER|19|347 +Brand#25|MEDIUM BURNISHED COPPER|3|347 +Brand#31|ECONOMY PLATED COPPER|23|347 +Brand#33|LARGE ANODIZED TIN|45|347 +Brand#35|PROMO ANODIZED TIN|3|347 +Brand#35|PROMO PLATED TIN|23|347 +Brand#41|PROMO ANODIZED COPPER|19|347 +Brand#42|STANDARD PLATED STEEL|14|347 +Brand#43|MEDIUM BURNISHED STEEL|19|347 +Brand#43|PROMO ANODIZED BRASS|14|347 +Brand#43|SMALL POLISHED NICKEL|45|347 +Brand#44|SMALL PLATED NICKEL|9|347 +Brand#52|MEDIUM BURNISHED COPPER|36|347 +Brand#52|MEDIUM BURNISHED STEEL|3|347 +Brand#52|STANDARD ANODIZED STEEL|9|347 +Brand#53|MEDIUM BRUSHED STEEL|49|347 +Brand#54|MEDIUM BRUSHED TIN|36|347 +Brand#21|PROMO PLATED NICKEL|9|346 +Brand#23|SMALL BURNISHED COPPER|3|346 +Brand#34|SMALL BRUSHED TIN|36|346 +Brand#35|SMALL BURNISHED COPPER|19|346 +Brand#12|PROMO POLISHED BRASS|49|345 +Brand#11|LARGE BRUSHED TIN|23|344 +Brand#11|MEDIUM ANODIZED STEEL|14|344 +Brand#11|STANDARD PLATED TIN|36|344 +Brand#12|ECONOMY ANODIZED STEEL|14|344 +Brand#12|ECONOMY PLATED STEEL|45|344 +Brand#12|MEDIUM BURNISHED COPPER|45|344 +Brand#12|MEDIUM BURNISHED TIN|19|344 +Brand#12|PROMO BRUSHED TIN|23|344 +Brand#12|PROMO PLATED COPPER|19|344 +Brand#12|SMALL ANODIZED BRASS|36|344 +Brand#12|SMALL POLISHED TIN|9|344 +Brand#13|MEDIUM PLATED COPPER|45|344 +Brand#13|PROMO POLISHED STEEL|36|344 +Brand#13|SMALL POLISHED TIN|9|344 +Brand#13|STANDARD BRUSHED TIN|23|344 +Brand#13|STANDARD POLISHED COPPER|36|344 +Brand#14|LARGE PLATED BRASS|3|344 +Brand#14|MEDIUM ANODIZED STEEL|45|344 +Brand#14|MEDIUM BURNISHED BRASS|19|344 +Brand#14|MEDIUM BURNISHED STEEL|19|344 +Brand#14|PROMO POLISHED NICKEL|19|344 +Brand#15|MEDIUM PLATED STEEL|14|344 +Brand#15|STANDARD ANODIZED BRASS|23|344 +Brand#15|STANDARD BURNISHED TIN|19|344 +Brand#21|ECONOMY ANODIZED COPPER|45|344 +Brand#21|MEDIUM BRUSHED BRASS|14|344 +Brand#21|PROMO ANODIZED TIN|23|344 +Brand#21|SMALL PLATED TIN|19|344 +Brand#21|STANDARD ANODIZED BRASS|14|344 +Brand#22|ECONOMY BRUSHED NICKEL|23|344 +Brand#22|MEDIUM PLATED COPPER|45|344 +Brand#22|PROMO BRUSHED BRASS|23|344 +Brand#23|ECONOMY ANODIZED TIN|45|344 +Brand#23|ECONOMY BURNISHED STEEL|45|344 +Brand#23|ECONOMY POLISHED STEEL|45|344 +Brand#24|LARGE PLATED TIN|23|344 +Brand#24|LARGE POLISHED COPPER|9|344 +Brand#24|PROMO ANODIZED NICKEL|49|344 +Brand#24|PROMO BRUSHED TIN|36|344 +Brand#24|PROMO POLISHED COPPER|14|344 +Brand#25|LARGE PLATED BRASS|19|344 +Brand#25|LARGE POLISHED TIN|14|344 +Brand#25|STANDARD BRUSHED TIN|36|344 +Brand#25|STANDARD BURNISHED COPPER|9|344 +Brand#31|MEDIUM ANODIZED COPPER|36|344 +Brand#31|MEDIUM BURNISHED BRASS|45|344 +Brand#31|MEDIUM BURNISHED COPPER|49|344 +Brand#31|MEDIUM PLATED NICKEL|9|344 +Brand#31|PROMO BURNISHED NICKEL|19|344 +Brand#31|STANDARD BRUSHED NICKEL|19|344 +Brand#31|STANDARD PLATED NICKEL|23|344 +Brand#32|LARGE PLATED COPPER|19|344 +Brand#32|LARGE PLATED STEEL|19|344 +Brand#32|LARGE POLISHED COPPER|36|344 +Brand#32|MEDIUM ANODIZED BRASS|23|344 +Brand#32|SMALL BRUSHED STEEL|14|344 +Brand#32|STANDARD POLISHED COPPER|45|344 +Brand#33|LARGE PLATED STEEL|36|344 +Brand#33|LARGE POLISHED BRASS|3|344 +Brand#33|MEDIUM BURNISHED STEEL|14|344 +Brand#33|PROMO PLATED TIN|36|344 +Brand#34|ECONOMY BURNISHED TIN|45|344 +Brand#34|ECONOMY PLATED NICKEL|19|344 +Brand#34|ECONOMY POLISHED BRASS|3|344 +Brand#34|ECONOMY POLISHED TIN|9|344 +Brand#34|MEDIUM BURNISHED COPPER|36|344 +Brand#34|SMALL BRUSHED TIN|49|344 +Brand#35|MEDIUM PLATED COPPER|9|344 +Brand#35|SMALL BURNISHED TIN|14|344 +Brand#35|SMALL POLISHED COPPER|14|344 +Brand#35|STANDARD BURNISHED NICKEL|3|344 +Brand#41|ECONOMY BURNISHED TIN|14|344 +Brand#41|LARGE BRUSHED NICKEL|14|344 +Brand#41|MEDIUM BRUSHED TIN|45|344 +Brand#41|SMALL ANODIZED TIN|3|344 +Brand#41|SMALL ANODIZED TIN|36|344 +Brand#41|STANDARD POLISHED BRASS|14|344 +Brand#42|ECONOMY ANODIZED BRASS|49|344 +Brand#42|ECONOMY POLISHED STEEL|19|344 +Brand#42|LARGE PLATED BRASS|14|344 +Brand#42|LARGE PLATED BRASS|45|344 +Brand#42|PROMO PLATED STEEL|49|344 +Brand#42|SMALL BRUSHED COPPER|9|344 +Brand#42|SMALL PLATED TIN|9|344 +Brand#42|STANDARD PLATED BRASS|45|344 +Brand#43|STANDARD BRUSHED COPPER|19|344 +Brand#44|ECONOMY PLATED COPPER|14|344 +Brand#44|LARGE POLISHED TIN|3|344 +Brand#44|PROMO BURNISHED TIN|19|344 +Brand#44|SMALL BRUSHED TIN|9|344 +Brand#51|ECONOMY BRUSHED STEEL|45|344 +Brand#51|ECONOMY BURNISHED BRASS|19|344 +Brand#51|PROMO POLISHED TIN|19|344 +Brand#51|SMALL ANODIZED STEEL|36|344 +Brand#52|ECONOMY BRUSHED BRASS|45|344 +Brand#52|ECONOMY BRUSHED COPPER|45|344 +Brand#52|LARGE ANODIZED NICKEL|36|344 +Brand#52|LARGE BRUSHED STEEL|3|344 +Brand#52|LARGE PLATED STEEL|14|344 +Brand#52|LARGE POLISHED TIN|14|344 +Brand#52|STANDARD ANODIZED STEEL|36|344 +Brand#53|ECONOMY POLISHED STEEL|14|344 +Brand#53|LARGE BRUSHED COPPER|3|344 +Brand#53|MEDIUM BRUSHED NICKEL|36|344 +Brand#53|SMALL ANODIZED TIN|49|344 +Brand#53|SMALL BRUSHED TIN|36|344 +Brand#54|ECONOMY PLATED STEEL|19|344 +Brand#54|LARGE ANODIZED TIN|23|344 +Brand#54|PROMO POLISHED COPPER|36|344 +Brand#54|STANDARD PLATED BRASS|45|344 +Brand#55|LARGE PLATED NICKEL|3|344 +Brand#55|LARGE PLATED TIN|23|344 +Brand#55|PROMO ANODIZED COPPER|19|344 +Brand#55|PROMO PLATED STEEL|3|344 +Brand#55|SMALL BRUSHED STEEL|14|344 +Brand#55|STANDARD BURNISHED TIN|19|344 +Brand#12|LARGE BURNISHED NICKEL|49|343 +Brand#12|STANDARD ANODIZED STEEL|9|343 +Brand#13|MEDIUM PLATED BRASS|3|343 +Brand#13|PROMO POLISHED TIN|23|343 +Brand#22|ECONOMY ANODIZED TIN|3|343 +Brand#25|SMALL BURNISHED NICKEL|23|343 +Brand#25|STANDARD BURNISHED STEEL|14|343 +Brand#32|PROMO PLATED STEEL|14|343 +Brand#33|ECONOMY ANODIZED COPPER|49|343 +Brand#35|STANDARD PLATED NICKEL|45|343 +Brand#41|LARGE BRUSHED BRASS|3|343 +Brand#41|PROMO BRUSHED STEEL|19|343 +Brand#42|MEDIUM BURNISHED TIN|9|343 +Brand#43|ECONOMY BURNISHED NICKEL|45|343 +Brand#53|ECONOMY BURNISHED TIN|9|343 +Brand#53|PROMO BRUSHED TIN|9|343 +Brand#55|PROMO PLATED STEEL|23|343 +Brand#55|SMALL BURNISHED BRASS|19|343 +Brand#15|ECONOMY BRUSHED COPPER|49|342 +Brand#24|ECONOMY BRUSHED NICKEL|14|342 +Brand#24|MEDIUM BRUSHED COPPER|9|342 +Brand#24|SMALL BRUSHED STEEL|3|342 +Brand#25|LARGE POLISHED STEEL|23|342 +Brand#33|ECONOMY BURNISHED COPPER|19|342 +Brand#51|LARGE BRUSHED STEEL|49|342 +Brand#54|STANDARD PLATED BRASS|3|342 +Brand#11|ECONOMY ANODIZED NICKEL|14|340 +Brand#11|ECONOMY ANODIZED STEEL|19|340 +Brand#11|MEDIUM BURNISHED NICKEL|14|340 +Brand#11|PROMO BRUSHED COPPER|19|340 +Brand#11|PROMO POLISHED BRASS|45|340 +Brand#11|SMALL BRUSHED BRASS|36|340 +Brand#11|SMALL PLATED NICKEL|3|340 +Brand#12|ECONOMY ANODIZED STEEL|3|340 +Brand#12|ECONOMY PLATED NICKEL|14|340 +Brand#12|LARGE PLATED NICKEL|14|340 +Brand#12|MEDIUM BRUSHED NICKEL|45|340 +Brand#12|MEDIUM BURNISHED TIN|9|340 +Brand#12|PROMO BURNISHED TIN|23|340 +Brand#12|SMALL ANODIZED NICKEL|3|340 +Brand#12|STANDARD ANODIZED COPPER|3|340 +Brand#13|MEDIUM ANODIZED BRASS|3|340 +Brand#13|STANDARD PLATED BRASS|3|340 +Brand#14|PROMO PLATED COPPER|3|340 +Brand#15|ECONOMY BRUSHED NICKEL|19|340 +Brand#15|STANDARD ANODIZED TIN|45|340 +Brand#21|PROMO BURNISHED TIN|19|340 +Brand#22|ECONOMY PLATED COPPER|9|340 +Brand#22|LARGE PLATED TIN|36|340 +Brand#22|MEDIUM PLATED TIN|23|340 +Brand#22|SMALL POLISHED STEEL|49|340 +Brand#22|STANDARD POLISHED COPPER|9|340 +Brand#23|LARGE BRUSHED NICKEL|49|340 +Brand#23|PROMO POLISHED BRASS|19|340 +Brand#24|PROMO POLISHED COPPER|9|340 +Brand#24|SMALL BRUSHED TIN|45|340 +Brand#24|STANDARD POLISHED COPPER|49|340 +Brand#25|ECONOMY PLATED NICKEL|23|340 +Brand#25|ECONOMY PLATED STEEL|14|340 +Brand#25|LARGE POLISHED NICKEL|36|340 +Brand#25|PROMO BURNISHED TIN|19|340 +Brand#25|SMALL ANODIZED COPPER|14|340 +Brand#31|STANDARD ANODIZED TIN|3|340 +Brand#31|STANDARD BRUSHED STEEL|23|340 +Brand#32|LARGE ANODIZED STEEL|23|340 +Brand#32|LARGE BRUSHED TIN|14|340 +Brand#32|LARGE BURNISHED NICKEL|49|340 +Brand#32|STANDARD BRUSHED BRASS|36|340 +Brand#33|ECONOMY POLISHED NICKEL|49|340 +Brand#33|LARGE BURNISHED STEEL|14|340 +Brand#33|MEDIUM PLATED TIN|14|340 +Brand#33|PROMO POLISHED NICKEL|19|340 +Brand#33|STANDARD PLATED COPPER|19|340 +Brand#34|ECONOMY BRUSHED BRASS|45|340 +Brand#35|LARGE ANODIZED BRASS|49|340 +Brand#35|MEDIUM BRUSHED BRASS|49|340 +Brand#35|MEDIUM BRUSHED STEEL|14|340 +Brand#35|MEDIUM BURNISHED NICKEL|19|340 +Brand#35|MEDIUM PLATED NICKEL|45|340 +Brand#41|ECONOMY BRUSHED TIN|49|340 +Brand#41|MEDIUM ANODIZED BRASS|23|340 +Brand#41|MEDIUM BURNISHED STEEL|23|340 +Brand#42|ECONOMY ANODIZED COPPER|9|340 +Brand#42|ECONOMY BRUSHED NICKEL|23|340 +Brand#42|SMALL BRUSHED COPPER|49|340 +Brand#43|LARGE BRUSHED COPPER|36|340 +Brand#43|STANDARD PLATED NICKEL|19|340 +Brand#44|ECONOMY BRUSHED BRASS|49|340 +Brand#44|PROMO PLATED COPPER|14|340 +Brand#44|SMALL POLISHED NICKEL|9|340 +Brand#51|SMALL ANODIZED COPPER|3|340 +Brand#51|SMALL BRUSHED COPPER|3|340 +Brand#51|SMALL PLATED COPPER|23|340 +Brand#52|PROMO BRUSHED BRASS|14|340 +Brand#52|SMALL BURNISHED COPPER|49|340 +Brand#53|ECONOMY ANODIZED BRASS|14|340 +Brand#53|STANDARD BURNISHED COPPER|36|340 +Brand#55|ECONOMY BURNISHED COPPER|45|340 +Brand#55|LARGE POLISHED NICKEL|49|340 +Brand#55|PROMO BRUSHED BRASS|49|340 +Brand#55|PROMO POLISHED STEEL|23|340 +Brand#11|PROMO POLISHED COPPER|36|339 +Brand#12|STANDARD BRUSHED STEEL|9|339 +Brand#13|LARGE POLISHED COPPER|49|339 +Brand#15|PROMO ANODIZED COPPER|45|339 +Brand#15|SMALL ANODIZED TIN|3|339 +Brand#22|SMALL POLISHED TIN|49|339 +Brand#23|ECONOMY BRUSHED STEEL|23|339 +Brand#23|MEDIUM BURNISHED STEEL|49|339 +Brand#24|ECONOMY BURNISHED TIN|23|339 +Brand#32|MEDIUM BURNISHED NICKEL|23|339 +Brand#33|ECONOMY BRUSHED STEEL|19|339 +Brand#34|LARGE ANODIZED BRASS|45|339 +Brand#42|STANDARD BURNISHED TIN|36|339 +Brand#43|SMALL BRUSHED COPPER|9|339 +Brand#43|SMALL BRUSHED STEEL|23|339 +Brand#51|MEDIUM BRUSHED TIN|3|339 +Brand#52|MEDIUM BURNISHED COPPER|45|339 +Brand#52|PROMO BRUSHED TIN|14|339 +Brand#53|MEDIUM BRUSHED BRASS|14|339 +Brand#54|SMALL PLATED BRASS|3|339 +Brand#13|PROMO BRUSHED TIN|23|338 +Brand#22|PROMO BRUSHED COPPER|36|338 +Brand#22|SMALL PLATED NICKEL|49|338 +Brand#24|STANDARD PLATED NICKEL|45|338 +Brand#25|SMALL BRUSHED STEEL|9|337 +Brand#11|ECONOMY BURNISHED STEEL|36|336 +Brand#11|ECONOMY POLISHED NICKEL|45|336 +Brand#11|LARGE PLATED TIN|3|336 +Brand#11|MEDIUM PLATED NICKEL|19|336 +Brand#11|PROMO POLISHED BRASS|14|336 +Brand#11|SMALL BRUSHED STEEL|36|336 +Brand#13|ECONOMY ANODIZED NICKEL|23|336 +Brand#13|ECONOMY PLATED STEEL|19|336 +Brand#13|SMALL ANODIZED TIN|49|336 +Brand#13|STANDARD BRUSHED NICKEL|19|336 +Brand#13|STANDARD PLATED BRASS|36|336 +Brand#14|STANDARD BRUSHED TIN|3|336 +Brand#14|STANDARD BURNISHED COPPER|14|336 +Brand#14|STANDARD PLATED NICKEL|3|336 +Brand#14|STANDARD POLISHED TIN|19|336 +Brand#21|LARGE PLATED STEEL|3|336 +Brand#21|SMALL PLATED STEEL|14|336 +Brand#21|STANDARD ANODIZED STEEL|36|336 +Brand#22|SMALL BRUSHED BRASS|9|336 +Brand#22|STANDARD BURNISHED TIN|19|336 +Brand#23|LARGE ANODIZED NICKEL|49|336 +Brand#23|LARGE PLATED TIN|3|336 +Brand#23|STANDARD ANODIZED BRASS|9|336 +Brand#23|STANDARD ANODIZED STEEL|9|336 +Brand#24|LARGE POLISHED STEEL|49|336 +Brand#24|PROMO BRUSHED NICKEL|36|336 +Brand#25|STANDARD POLISHED COPPER|14|336 +Brand#31|SMALL PLATED STEEL|9|336 +Brand#32|PROMO POLISHED TIN|3|336 +Brand#32|STANDARD ANODIZED BRASS|19|336 +Brand#33|LARGE BRUSHED COPPER|9|336 +Brand#33|LARGE PLATED COPPER|49|336 +Brand#33|MEDIUM ANODIZED NICKEL|23|336 +Brand#33|STANDARD ANODIZED STEEL|19|336 +Brand#34|LARGE ANODIZED COPPER|23|336 +Brand#34|MEDIUM BURNISHED TIN|36|336 +Brand#34|SMALL ANODIZED STEEL|36|336 +Brand#34|SMALL PLATED NICKEL|45|336 +Brand#34|STANDARD BRUSHED BRASS|23|336 +Brand#35|ECONOMY BURNISHED NICKEL|19|336 +Brand#35|ECONOMY PLATED STEEL|19|336 +Brand#35|LARGE BRUSHED NICKEL|9|336 +Brand#35|LARGE PLATED TIN|3|336 +Brand#35|MEDIUM BURNISHED BRASS|19|336 +Brand#35|SMALL BRUSHED NICKEL|23|336 +Brand#35|SMALL BURNISHED NICKEL|36|336 +Brand#41|ECONOMY BURNISHED TIN|45|336 +Brand#41|LARGE POLISHED BRASS|9|336 +Brand#41|MEDIUM PLATED TIN|9|336 +Brand#42|STANDARD BURNISHED BRASS|19|336 +Brand#43|MEDIUM ANODIZED COPPER|9|336 +Brand#44|MEDIUM BRUSHED TIN|9|336 +Brand#44|STANDARD ANODIZED NICKEL|49|336 +Brand#44|STANDARD PLATED STEEL|49|336 +Brand#51|ECONOMY ANODIZED TIN|36|336 +Brand#51|LARGE BURNISHED COPPER|9|336 +Brand#51|MEDIUM BRUSHED STEEL|14|336 +Brand#51|PROMO ANODIZED TIN|14|336 +Brand#51|PROMO BURNISHED STEEL|14|336 +Brand#51|SMALL PLATED TIN|19|336 +Brand#52|MEDIUM BURNISHED TIN|45|336 +Brand#52|SMALL POLISHED TIN|45|336 +Brand#53|SMALL BURNISHED COPPER|14|336 +Brand#54|LARGE BURNISHED COPPER|9|336 +Brand#54|MEDIUM BRUSHED STEEL|45|336 +Brand#54|MEDIUM BRUSHED STEEL|49|336 +Brand#54|SMALL BURNISHED TIN|9|336 +Brand#55|LARGE ANODIZED COPPER|49|336 +Brand#55|MEDIUM ANODIZED BRASS|36|336 +Brand#55|PROMO ANODIZED STEEL|49|336 +Brand#55|PROMO BURNISHED COPPER|49|336 +Brand#55|STANDARD PLATED STEEL|9|336 +Brand#12|ECONOMY BURNISHED BRASS|9|335 +Brand#12|MEDIUM BRUSHED STEEL|23|335 +Brand#12|PROMO BURNISHED COPPER|14|335 +Brand#13|LARGE PLATED COPPER|23|335 +Brand#14|ECONOMY BRUSHED NICKEL|36|335 +Brand#21|PROMO BRUSHED TIN|45|335 +Brand#23|ECONOMY BURNISHED NICKEL|3|335 +Brand#23|MEDIUM ANODIZED STEEL|3|335 +Brand#24|LARGE ANODIZED STEEL|3|335 +Brand#33|LARGE POLISHED NICKEL|3|335 +Brand#34|MEDIUM BURNISHED BRASS|9|335 +Brand#34|SMALL POLISHED STEEL|3|335 +Brand#35|STANDARD PLATED STEEL|9|335 +Brand#42|LARGE ANODIZED TIN|14|335 +Brand#42|PROMO POLISHED STEEL|19|335 +Brand#55|LARGE BRUSHED NICKEL|49|335 +Brand#55|PROMO BURNISHED NICKEL|19|335 +Brand#55|PROMO BURNISHED STEEL|9|335 +Brand#11|SMALL BURNISHED COPPER|3|332 +Brand#11|STANDARD BURNISHED NICKEL|9|332 +Brand#12|LARGE PLATED TIN|45|332 +Brand#15|ECONOMY BURNISHED STEEL|45|332 +Brand#15|LARGE BRUSHED STEEL|14|332 +Brand#15|PROMO PLATED BRASS|3|332 +Brand#21|PROMO PLATED STEEL|3|332 +Brand#21|SMALL PLATED COPPER|14|332 +Brand#22|MEDIUM BRUSHED COPPER|36|332 +Brand#22|STANDARD BRUSHED COPPER|3|332 +Brand#24|MEDIUM PLATED STEEL|36|332 +Brand#24|SMALL BURNISHED BRASS|49|332 +Brand#24|SMALL PLATED STEEL|14|332 +Brand#24|SMALL POLISHED COPPER|49|332 +Brand#25|ECONOMY BRUSHED BRASS|14|332 +Brand#25|PROMO POLISHED BRASS|9|332 +Brand#25|SMALL POLISHED NICKEL|19|332 +Brand#32|MEDIUM BURNISHED BRASS|14|332 +Brand#32|STANDARD ANODIZED STEEL|45|332 +Brand#33|ECONOMY POLISHED NICKEL|3|332 +Brand#33|PROMO POLISHED STEEL|3|332 +Brand#34|ECONOMY BRUSHED NICKEL|14|332 +Brand#34|ECONOMY PLATED TIN|3|332 +Brand#35|LARGE ANODIZED STEEL|49|332 +Brand#35|LARGE POLISHED TIN|23|332 +Brand#41|LARGE ANODIZED BRASS|9|332 +Brand#41|STANDARD POLISHED TIN|19|332 +Brand#42|LARGE BURNISHED STEEL|9|332 +Brand#43|PROMO PLATED BRASS|3|332 +Brand#43|STANDARD PLATED TIN|3|332 +Brand#44|ECONOMY POLISHED COPPER|14|332 +Brand#44|LARGE BRUSHED BRASS|49|332 +Brand#44|MEDIUM ANODIZED COPPER|49|332 +Brand#44|SMALL ANODIZED COPPER|19|332 +Brand#44|SMALL BRUSHED STEEL|45|332 +Brand#51|MEDIUM PLATED STEEL|19|332 +Brand#52|ECONOMY BURNISHED COPPER|23|332 +Brand#52|ECONOMY POLISHED NICKEL|14|332 +Brand#52|ECONOMY POLISHED STEEL|9|332 +Brand#52|MEDIUM PLATED BRASS|14|332 +Brand#52|STANDARD BURNISHED COPPER|3|332 +Brand#52|STANDARD PLATED TIN|9|332 +Brand#53|LARGE POLISHED TIN|14|332 +Brand#53|PROMO PLATED NICKEL|19|332 +Brand#54|MEDIUM BRUSHED COPPER|45|332 +Brand#54|PROMO PLATED BRASS|19|332 +Brand#54|SMALL PLATED COPPER|23|332 +Brand#55|ECONOMY POLISHED STEEL|19|332 +Brand#55|PROMO POLISHED COPPER|9|332 +Brand#55|SMALL POLISHED TIN|19|332 +Brand#55|STANDARD POLISHED COPPER|49|332 +Brand#55|STANDARD POLISHED STEEL|36|332 +Brand#12|STANDARD POLISHED NICKEL|19|331 +Brand#15|ECONOMY BURNISHED NICKEL|3|331 +Brand#21|STANDARD POLISHED TIN|45|331 +Brand#22|ECONOMY PLATED BRASS|23|331 +Brand#32|STANDARD PLATED COPPER|19|331 +Brand#33|MEDIUM ANODIZED COPPER|49|331 +Brand#41|SMALL POLISHED STEEL|45|331 +Brand#42|STANDARD BRUSHED TIN|36|331 +Brand#51|MEDIUM BRUSHED COPPER|23|331 +Brand#53|PROMO POLISHED BRASS|45|331 +Brand#34|LARGE ANODIZED STEEL|23|330 +Brand#11|ECONOMY POLISHED NICKEL|9|328 +Brand#12|LARGE POLISHED TIN|14|328 +Brand#13|STANDARD PLATED BRASS|19|328 +Brand#14|SMALL BRUSHED STEEL|3|328 +Brand#14|STANDARD BURNISHED NICKEL|36|328 +Brand#14|STANDARD BURNISHED TIN|23|328 +Brand#21|MEDIUM PLATED STEEL|49|328 +Brand#24|ECONOMY ANODIZED TIN|23|328 +Brand#25|ECONOMY BURNISHED NICKEL|14|328 +Brand#25|MEDIUM PLATED NICKEL|3|328 +Brand#25|STANDARD BURNISHED COPPER|19|328 +Brand#31|LARGE BURNISHED STEEL|3|328 +Brand#31|PROMO PLATED COPPER|36|328 +Brand#32|PROMO BRUSHED BRASS|45|328 +Brand#32|SMALL ANODIZED STEEL|23|328 +Brand#33|PROMO ANODIZED TIN|23|328 +Brand#34|LARGE POLISHED COPPER|45|328 +Brand#34|PROMO BURNISHED NICKEL|45|328 +Brand#35|LARGE PLATED NICKEL|14|328 +Brand#35|LARGE POLISHED STEEL|3|328 +Brand#42|SMALL ANODIZED TIN|23|328 +Brand#43|SMALL PLATED COPPER|14|328 +Brand#44|ECONOMY POLISHED TIN|3|328 +Brand#44|STANDARD ANODIZED BRASS|49|328 +Brand#44|STANDARD BURNISHED BRASS|45|328 +Brand#44|STANDARD BURNISHED STEEL|49|328 +Brand#51|LARGE BRUSHED COPPER|19|328 +Brand#51|LARGE BRUSHED STEEL|36|328 +Brand#51|MEDIUM PLATED COPPER|36|328 +Brand#51|SMALL ANODIZED NICKEL|19|328 +Brand#51|STANDARD BRUSHED COPPER|49|328 +Brand#52|ECONOMY BURNISHED STEEL|19|328 +Brand#52|MEDIUM ANODIZED TIN|23|328 +Brand#52|PROMO POLISHED NICKEL|3|328 +Brand#52|PROMO POLISHED TIN|49|328 +Brand#52|SMALL PLATED NICKEL|14|328 +Brand#54|ECONOMY BRUSHED COPPER|45|328 +Brand#54|ECONOMY BURNISHED STEEL|3|328 +Brand#55|SMALL BRUSHED BRASS|3|328 +Brand#55|SMALL PLATED BRASS|3|328 +Brand#55|STANDARD POLISHED NICKEL|14|328 +Brand#15|PROMO PLATED TIN|49|327 +Brand#31|SMALL BURNISHED NICKEL|49|327 +Brand#32|SMALL PLATED NICKEL|23|327 +Brand#52|STANDARD PLATED STEEL|19|327 +Brand#25|ECONOMY BURNISHED BRASS|49|326 +Brand#33|MEDIUM BRUSHED COPPER|49|326 +Brand#35|SMALL ANODIZED BRASS|19|326 +Brand#41|MEDIUM ANODIZED TIN|36|326 +Brand#11|ECONOMY POLISHED COPPER|45|324 +Brand#12|ECONOMY PLATED TIN|23|324 +Brand#13|ECONOMY ANODIZED TIN|45|324 +Brand#13|LARGE BRUSHED BRASS|14|324 +Brand#13|SMALL BRUSHED NICKEL|14|324 +Brand#14|MEDIUM BURNISHED COPPER|14|324 +Brand#14|SMALL PLATED BRASS|3|324 +Brand#14|STANDARD POLISHED STEEL|45|324 +Brand#15|ECONOMY PLATED COPPER|9|324 +Brand#24|STANDARD BURNISHED BRASS|45|324 +Brand#25|PROMO ANODIZED STEEL|3|324 +Brand#31|LARGE BRUSHED COPPER|49|324 +Brand#31|MEDIUM BRUSHED NICKEL|9|324 +Brand#32|PROMO BRUSHED NICKEL|9|324 +Brand#33|ECONOMY BRUSHED STEEL|49|324 +Brand#33|LARGE BURNISHED STEEL|23|324 +Brand#34|ECONOMY PLATED COPPER|9|324 +Brand#34|PROMO POLISHED BRASS|45|324 +Brand#34|SMALL POLISHED BRASS|19|324 +Brand#35|SMALL BRUSHED STEEL|9|324 +Brand#41|ECONOMY PLATED TIN|36|324 +Brand#42|SMALL ANODIZED STEEL|3|324 +Brand#43|LARGE BURNISHED NICKEL|36|324 +Brand#44|MEDIUM BURNISHED TIN|9|324 +Brand#52|ECONOMY BRUSHED BRASS|3|324 +Brand#52|MEDIUM BRUSHED NICKEL|14|324 +Brand#53|ECONOMY POLISHED COPPER|45|324 +Brand#53|STANDARD BRUSHED BRASS|36|324 +Brand#53|STANDARD BRUSHED BRASS|45|324 +Brand#54|LARGE ANODIZED NICKEL|36|324 +Brand#54|LARGE POLISHED BRASS|36|324 +Brand#54|STANDARD PLATED NICKEL|9|324 +Brand#55|ECONOMY POLISHED STEEL|36|324 +Brand#12|MEDIUM BRUSHED COPPER|19|323 +Brand#21|STANDARD ANODIZED TIN|23|323 +Brand#21|STANDARD POLISHED COPPER|14|323 +Brand#24|ECONOMY PLATED BRASS|14|323 +Brand#25|LARGE ANODIZED TIN|36|323 +Brand#31|ECONOMY BRUSHED STEEL|14|323 +Brand#42|SMALL ANODIZED NICKEL|36|323 +Brand#44|PROMO BRUSHED STEEL|49|323 +Brand#44|PROMO BURNISHED STEEL|49|323 +Brand#54|ECONOMY BURNISHED STEEL|19|323 +Brand#22|SMALL ANODIZED BRASS|36|322 +Brand#32|SMALL POLISHED BRASS|3|322 +Brand#33|MEDIUM ANODIZED TIN|19|322 +Brand#11|LARGE ANODIZED BRASS|23|320 +Brand#13|PROMO BURNISHED BRASS|45|320 +Brand#14|SMALL BRUSHED TIN|3|320 +Brand#15|PROMO POLISHED NICKEL|3|320 +Brand#21|STANDARD BURNISHED NICKEL|9|320 +Brand#23|LARGE BRUSHED TIN|19|320 +Brand#24|MEDIUM ANODIZED COPPER|9|320 +Brand#24|MEDIUM BRUSHED NICKEL|23|320 +Brand#25|LARGE BRUSHED TIN|19|320 +Brand#25|LARGE PLATED TIN|14|320 +Brand#25|PROMO BURNISHED NICKEL|49|320 +Brand#25|STANDARD PLATED TIN|9|320 +Brand#25|STANDARD POLISHED TIN|14|320 +Brand#31|SMALL BURNISHED TIN|3|320 +Brand#32|STANDARD POLISHED BRASS|49|320 +Brand#32|STANDARD POLISHED NICKEL|36|320 +Brand#41|ECONOMY BRUSHED TIN|9|320 +Brand#42|SMALL ANODIZED STEEL|23|320 +Brand#42|SMALL BRUSHED TIN|23|320 +Brand#51|MEDIUM ANODIZED BRASS|49|320 +Brand#51|PROMO BRUSHED COPPER|3|320 +Brand#51|STANDARD PLATED COPPER|23|320 +Brand#52|LARGE POLISHED BRASS|45|320 +Brand#53|ECONOMY ANODIZED BRASS|36|320 +Brand#53|LARGE POLISHED COPPER|36|320 +Brand#53|STANDARD ANODIZED STEEL|45|320 +Brand#21|PROMO PLATED NICKEL|3|319 +Brand#23|LARGE ANODIZED BRASS|23|318 +Brand#13|PROMO PLATED COPPER|9|316 +Brand#14|ECONOMY ANODIZED COPPER|14|316 +Brand#14|MEDIUM ANODIZED STEEL|3|316 +Brand#14|STANDARD BRUSHED COPPER|36|316 +Brand#14|STANDARD BRUSHED TIN|23|316 +Brand#21|LARGE BURNISHED STEEL|49|316 +Brand#21|PROMO BRUSHED BRASS|19|316 +Brand#22|PROMO BRUSHED NICKEL|49|316 +Brand#22|STANDARD BRUSHED NICKEL|9|316 +Brand#22|STANDARD BURNISHED STEEL|23|316 +Brand#23|LARGE POLISHED COPPER|23|316 +Brand#24|ECONOMY POLISHED BRASS|45|316 +Brand#24|SMALL BRUSHED NICKEL|36|316 +Brand#31|MEDIUM BRUSHED STEEL|49|316 +Brand#33|PROMO BRUSHED TIN|36|316 +Brand#33|SMALL BRUSHED NICKEL|9|316 +Brand#41|ECONOMY ANODIZED NICKEL|19|316 +Brand#41|PROMO PLATED NICKEL|23|316 +Brand#42|SMALL PLATED STEEL|49|316 +Brand#42|STANDARD BURNISHED NICKEL|49|316 +Brand#43|PROMO BURNISHED TIN|23|316 +Brand#44|ECONOMY BRUSHED BRASS|14|316 +Brand#44|ECONOMY BURNISHED COPPER|19|316 +Brand#51|MEDIUM BRUSHED STEEL|45|316 +Brand#51|PROMO POLISHED STEEL|36|316 +Brand#51|STANDARD PLATED NICKEL|3|316 +Brand#54|PROMO PLATED NICKEL|45|316 +Brand#55|ECONOMY BURNISHED BRASS|19|316 +Brand#44|LARGE ANODIZED TIN|36|315 +Brand#55|ECONOMY PLATED STEEL|36|315 +Brand#12|PROMO PLATED STEEL|49|312 +Brand#21|MEDIUM ANODIZED BRASS|19|312 +Brand#23|STANDARD BURNISHED NICKEL|14|312 +Brand#25|MEDIUM ANODIZED STEEL|36|312 +Brand#25|STANDARD BRUSHED TIN|19|312 +Brand#31|SMALL BRUSHED COPPER|23|312 +Brand#31|STANDARD POLISHED NICKEL|3|312 +Brand#33|STANDARD ANODIZED COPPER|36|312 +Brand#34|STANDARD POLISHED BRASS|23|312 +Brand#42|MEDIUM BURNISHED COPPER|9|312 +Brand#42|SMALL ANODIZED BRASS|45|312 +Brand#43|STANDARD PLATED COPPER|3|312 +Brand#53|LARGE BRUSHED STEEL|9|312 +Brand#53|LARGE BURNISHED BRASS|9|312 +Brand#14|MEDIUM BRUSHED NICKEL|36|311 +Brand#44|STANDARD ANODIZED NICKEL|19|311 +Brand#11|LARGE BURNISHED STEEL|45|308 +Brand#12|MEDIUM PLATED BRASS|23|308 +Brand#13|SMALL ANODIZED TIN|36|308 +Brand#31|PROMO ANODIZED NICKEL|19|308 +Brand#34|LARGE PLATED NICKEL|14|308 +Brand#34|SMALL POLISHED COPPER|3|308 +Brand#42|SMALL PLATED TIN|3|308 +Brand#43|LARGE ANODIZED BRASS|9|308 +Brand#43|SMALL PLATED BRASS|14|308 +Brand#52|MEDIUM ANODIZED NICKEL|19|308 +Brand#54|LARGE PLATED COPPER|36|308 +Brand#54|PROMO BRUSHED NICKEL|9|308 +Brand#11|STANDARD BURNISHED NICKEL|36|304 +Brand#31|PROMO BRUSHED NICKEL|19|304 +Brand#35|PROMO BRUSHED BRASS|23|304 +Brand#51|ECONOMY ANODIZED STEEL|19|304 +Brand#55|MEDIUM BURNISHED COPPER|45|304 +Brand#54|ECONOMY PLATED COPPER|19|302 +Brand#24|LARGE PLATED STEEL|45|300 +Brand#34|ECONOMY PLATED BRASS|36|300 +Brand#53|MEDIUM BRUSHED STEEL|45|300 +Brand#54|LARGE POLISHED STEEL|36|296 +Brand#52|PROMO BRUSHED BRASS|9|295 +Brand#21|MEDIUM BRUSHED NICKEL|49|292 +Brand#34|PROMO ANODIZED STEEL|3|288 +Brand#14|STANDARD PLATED BRASS|23|287 +Brand#52|STANDARD BURNISHED TIN|45|283 +Brand#25|SMALL PLATED NICKEL|9|280 +Brand#13|STANDARD POLISHED NICKEL|49|276 +Brand#55|SMALL POLISHED STEEL|49|272 diff --git a/extension/tpch/dbgen/answers/sf100/q17.csv b/extension/tpch/dbgen/answers/sf100/q17.csv new file mode 100644 index 000000000000..717ac361fea5 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q17.csv @@ -0,0 +1,2 @@ +avg_yearly +32087018.99857143 diff --git a/extension/tpch/dbgen/answers/sf100/q18.csv b/extension/tpch/dbgen/answers/sf100/q18.csv new file mode 100644 index 000000000000..64d0f92939c4 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q18.csv @@ -0,0 +1,101 @@ +c_name|c_custkey|o_orderkey|o_orderdate|o_totalprice|sum(l_quantity) +Customer#011472112|11472112|458304292|1998-02-05|591036.15|322.00 +Customer#012090925|12090925|501322081|1995-02-04|586945.44|319.00 +Customer#001392379|1392379|332381222|1998-01-24|575600.00|311.00 +Customer#013458721|13458721|333307747|1997-12-19|572334.88|319.00 +Customer#008643083|8643083|84927619|1997-06-29|571417.48|316.00 +Customer#010543705|10543705|163142919|1996-06-10|569798.10|313.00 +Customer#000026377|26377|586594688|1992-04-14|569044.84|311.00 +Customer#005914657|5914657|55799200|1996-02-11|568754.48|327.00 +Customer#011461310|11461310|20662370|1992-07-22|566353.20|315.00 +Customer#007682894|7682894|532736640|1993-07-22|563532.16|316.00 +Customer#012070685|12070685|34201984|1997-06-18|563492.49|322.00 +Customer#012878113|12878113|42290181|1997-11-26|563479.57|318.00 +Customer#000506836|506836|116567399|1992-03-21|563342.71|319.00 +Customer#012848143|12848143|501771233|1994-12-06|562642.03|317.00 +Customer#003493022|3493022|182898470|1996-01-09|561296.06|318.00 +Customer#013083751|13083751|28077922|1996-10-27|560893.88|319.00 +Customer#006580315|6580315|343593507|1994-05-20|560058.60|321.00 +Customer#009427249|9427249|48881602|1993-09-19|559502.82|327.00 +Customer#009995401|9995401|530897159|1994-05-02|558771.77|305.00 +Customer#006094567|6094567|156159680|1994-11-15|558037.12|308.00 +Customer#006594658|6594658|555833473|1997-08-01|557961.99|324.00 +Customer#005925541|5925541|446215044|1992-05-13|556993.03|318.00 +Customer#007010650|7010650|587222276|1993-12-17|555946.71|329.00 +Customer#008211575|8211575|218305350|1992-12-19|555691.15|316.00 +Customer#005523215|5523215|499594150|1997-12-30|552295.59|322.00 +Customer#003592226|3592226|94936672|1992-02-28|551850.29|307.00 +Customer#006048598|6048598|45897379|1994-05-30|550195.48|318.00 +Customer#013889867|13889867|322196069|1992-12-24|549996.06|313.00 +Customer#007847146|7847146|75799361|1994-06-22|549769.03|307.00 +Customer#002538608|2538608|406952547|1992-04-14|549380.73|304.00 +Customer#011113726|11113726|346088583|1996-02-21|548790.02|303.00 +Customer#003262783|3262783|327814241|1997-04-16|548355.89|319.00 +Customer#002099413|2099413|507968289|1993-01-23|547809.74|316.00 +Customer#009950764|9950764|442334435|1996-10-07|547526.61|308.00 +Customer#012123581|12123581|496277122|1995-03-13|547335.02|312.00 +Customer#005800261|5800261|493616454|1997-01-11|547151.89|314.00 +Customer#002395564|2395564|584277191|1993-10-14|546290.18|311.00 +Customer#001382375|1382375|43491654|1992-05-20|546035.62|308.00 +Customer#001359841|1359841|373555077|1995-05-08|545367.48|304.00 +Customer#000569440|569440|119020930|1995-02-19|545201.16|309.00 +Customer#012179552|12179552|157723879|1992-01-06|545008.93|320.00 +Customer#000328568|328568|584293472|1997-02-04|544997.41|317.00 +Customer#005098117|5098117|82043264|1996-04-15|544838.33|330.00 +Customer#012375202|12375202|272622276|1995-08-13|543957.13|301.00 +Customer#006394964|6394964|410876964|1994-11-15|543654.37|324.00 +Customer#012130760|12130760|152975303|1992-11-23|543496.47|311.00 +Customer#005021956|5021956|163897538|1992-05-10|543411.84|315.00 +Customer#014745380|14745380|323533249|1993-03-31|543411.82|322.00 +Customer#005387083|5387083|394137797|1993-09-14|542890.62|308.00 +Customer#001070318|1070318|91475014|1996-11-15|542874.97|314.00 +Customer#011639476|11639476|512860422|1995-11-20|542855.00|311.00 +Customer#009557132|9557132|80293413|1992-06-12|542680.80|305.00 +Customer#012639745|12639745|215706726|1992-10-29|541693.09|305.00 +Customer#010933264|10933264|505312545|1995-07-19|541378.70|309.00 +Customer#006633514|6633514|561405959|1994-09-10|541176.68|308.00 +Customer#008668609|8668609|19730208|1994-01-24|540531.95|305.00 +Customer#000793051|793051|103963585|1996-10-27|540445.27|313.00 +Customer#000194932|194932|233298977|1997-11-16|540319.71|304.00 +Customer#007585013|7585013|41325120|1997-05-02|540248.88|309.00 +Customer#005034994|5034994|571000834|1997-08-02|540244.15|303.00 +Customer#013646452|13646452|109414535|1997-01-09|539803.25|302.00 +Customer#010763563|10763563|575451169|1994-01-18|539403.56|329.00 +Customer#003878665|3878665|465165376|1995-08-03|539331.83|312.00 +Customer#009475150|9475150|486502979|1995-01-21|539173.83|308.00 +Customer#007359265|7359265|402919200|1997-03-14|539028.84|312.00 +Customer#009274702|9274702|545970215|1997-12-17|538976.86|303.00 +Customer#008402254|8402254|539392967|1993-02-23|538886.31|333.00 +Customer#008654869|8654869|100176839|1993-04-12|538846.61|317.00 +Customer#007498450|7498450|140933856|1993-04-16|538585.17|309.00 +Customer#001291604|1291604|220248583|1995-08-18|538171.18|304.00 +Customer#005159660|5159660|160674945|1996-05-16|537771.10|310.00 +Customer#014286853|14286853|423877508|1995-03-02|536949.18|319.00 +Customer#008779822|8779822|211965092|1996-07-18|536768.43|314.00 +Customer#004955200|4955200|510010278|1996-01-08|536693.57|302.00 +Customer#008208034|8208034|446989058|1993-07-12|536601.61|315.00 +Customer#009666952|9666952|475794275|1994-09-23|536427.97|322.00 +Customer#011930665|11930665|107950688|1995-08-05|536328.78|309.00 +Customer#014831182|14831182|92086567|1996-06-12|536294.92|322.00 +Customer#009515017|9515017|462317029|1997-01-28|535876.92|308.00 +Customer#008795228|8795228|275406304|1994-12-19|535829.88|304.00 +Customer#013677323|13677323|387783079|1992-04-22|535504.63|316.00 +Customer#004965692|4965692|250733185|1994-06-12|535482.20|306.00 +Customer#004663856|4663856|159914310|1996-09-12|535322.28|315.00 +Customer#014560954|14560954|420830819|1994-03-05|534940.24|301.00 +Customer#003555572|3555572|190167361|1994-08-29|534477.19|304.00 +Customer#000299162|299162|303098309|1996-01-28|534421.58|315.00 +Customer#005747806|5747806|540886884|1994-04-14|534288.51|314.00 +Customer#013094119|13094119|111128577|1995-05-09|534239.89|316.00 +Customer#008259454|8259454|546232737|1997-12-07|534055.44|303.00 +Customer#000090529|90529|112311041|1998-01-22|534035.86|307.00 +Customer#004938865|4938865|595346338|1996-08-18|533883.75|310.00 +Customer#012726752|12726752|92511430|1995-03-06|533441.05|318.00 +Customer#009638569|9638569|16783360|1998-02-16|533372.62|308.00 +Customer#000437614|437614|569537412|1992-01-07|533305.85|305.00 +Customer#011219830|11219830|156065860|1996-07-03|533119.17|325.00 +Customer#005060768|5060768|255829888|1997-03-18|533054.97|308.00 +Customer#014112568|14112568|280056096|1997-01-30|532881.87|313.00 +Customer#012373496|12373496|61135843|1993-01-30|532734.68|303.00 +Customer#007910675|7910675|158520577|1992-02-29|532689.01|304.00 +Customer#013106491|13106491|88925410|1995-01-10|532631.76|310.00 diff --git a/extension/tpch/dbgen/answers/sf100/q19.csv b/extension/tpch/dbgen/answers/sf100/q19.csv new file mode 100644 index 000000000000..60b4e10505f7 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q19.csv @@ -0,0 +1,2 @@ +revenue +298937728.8820 diff --git a/extension/tpch/dbgen/answers/sf100/q20.csv b/extension/tpch/dbgen/answers/sf100/q20.csv new file mode 100644 index 000000000000..b19d51146685 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q20.csv @@ -0,0 +1,17972 @@ +s_name|s_address +Supplier#000000091|35WVnU7GLNbQDcc2TARavGtk6RB6ZCd46UAY +Supplier#000000157|1EmkCApL5iF +Supplier#000000197|3oYqODDUGH3XsHXmPuzYHW5NLU3,ONZl +Supplier#000000205|Alrx5TN,hdnG +Supplier#000000287|UQR8bUA4V2HxVbw9K +Supplier#000000354|wSLcCW40Q8 +Supplier#000000361|MSi62aEN53KaoRAiaH4GEo3EsKMXSwpPGU +Supplier#000000402|JR8vWoCteJtJg3okRpt0r28KEo +Supplier#000000555|8Lp0QWPLFXrJrX1sTWkAEdzUsh5ke +Supplier#000000640|FwwyFbgz7c hHViKGT0OB +Supplier#000000710|MZR2bxctPrbC2vHho0CbuOBkLJMpqOwghC +Supplier#000000736|GUIYDfv5xCxLgDx6KQ8khY ntVVnFqmfMKIgT +Supplier#000000761|tF8fMGa6HY4 w77mDwT4rO21kxwe7uTSYNW +Supplier#000000848|zuWWhrxl0hEvZ +Supplier#000000884|QEJm8KMHQ8 +Supplier#000000887|y mQ7NHjVbdqnbYr9 L +Supplier#000000935|JHRSOterYgt4MTNo7cupTzA,6MoNw 4 +Supplier#000000975|1qorM1ypBdwgPVuf6sMCKuF9D1rJN1iCTXKmalSt +Supplier#000001033|rUuZb1VUz5kGPWnB5t6vYYD0oKi +Supplier#000001367|XY28GmOq3efOxOzBMmMLdmWjMpo +Supplier#000001426|QbcoO0TUClFSzfy90Lk k +Supplier#000001454|8cBIELxY754iHJIgRXJ0 +Supplier#000001500|wnElVvfuyaPJROy6x0 +Supplier#000001626|7Jud9t6xZNzlEB, +Supplier#000001693|NtcIoaDx 4uzTVj94GpcePeXETxRm8 dX9EG0 +Supplier#000001699|bRoW MhYUCJH5bABOA53N9i +Supplier#000001726|8M92T8y7jYXzmvCANTtqR8GHuT +Supplier#000001730|aOSM0,btPDs UsC06himJn,6nswJG +Supplier#000001806|fRXWLy18Df5 +Supplier#000001931|mBhPe7YJU1aYMpwTiRdivl +Supplier#000001958|Qhq1lJz2sA9lQzBBY3ac6v mBlKy7MSrZOO7R9h +Supplier#000001990|o8nhGpKphsybKZtye0o6OfDz9GIcuGHjMs7pq +Supplier#000002022|sNvMPl3TiNZBOYV3w2XX +Supplier#000002218|Ecn1vWAWNusGB,gW +Supplier#000002245|KsYA4445HcugJAb3eCmvtUslGA7Qne +Supplier#000002265| 2gDJVukccmF0nSiHOJWxAO81s,0zKC +Supplier#000002282|n8YZgSNuC4,iZ7s5oHTMHNFdv94DwZ2rrUEb0pgD +Supplier#000002303|EoC4LCpU2cuEPKcKyTFyMGFBGkF +Supplier#000002419|BtNpaOZWiVGVE53RWL22 +Supplier#000002444|BSuVrrlq0rSsL3962GDUUGPXC0rQKl +Supplier#000002460|wxSpYNr24kDgerLJrMYX7aD02oTRMN7ii33 +Supplier#000002481|Efgj6dDYeFS7cq,V1DARlmeOiGecY +Supplier#000002494|TrHXAiwfUAI CmrRwqNgmCCgCXiejYDbjf3k,jRB +Supplier#000002719|XDDsajYoPAama6xjz37p66GQbXEd8X +Supplier#000002840|E352X9,0Z52 7Qw c8ltq1urnd66 +Supplier#000002853|A7dqcjy3GQ +Supplier#000002875|VhKeIsRayU6EvfXgyyZ8aFgvv0HMfa19q1Q +Supplier#000002941|eQNNPRrS27ngMG1ub, +Supplier#000003087|rdvMSbz1W LHZj8B5sRR,M4a +Supplier#000003095|kucdXIhJ6IYsHy0ArE7n +Supplier#000003169|dnsUqqhk7zTaDs +Supplier#000003213|Cu 9bXI aZ6CtLa1N7LX +Supplier#000003241|I,U861f8RcYEvHqfc5IqeMiJP +Supplier#000003275|SucWDuhYahP3UwkM +Supplier#000003288|nnNLdzTmV6P0uf7yBCiK3fWt2UxHJ0 +Supplier#000003304|wfdSS7fzR2 +Supplier#000003313|nFYiTwM0,WS8b wDE6EWK1vhCdJ1Gwgufh3L5j +Supplier#000003314|IDIz6TesAcXI6pXtzbO uzevXon6CH9WATfo +Supplier#000003380|Ibw,51BzsCyxl7X3zqAFc0Gu7Yx0K7mImP9z0u +Supplier#000003388|WHJ MYyq wf +Supplier#000003422|ohComRB6Mp4C5ZI3IoObmawsz8wY1iSU, +Supplier#000003448|N5QV3wl1ceVBSNRLUbEDX2JPnsb6Dlri +Supplier#000003462| MSK DOWvnU +Supplier#000003607|GdAljb2Hv8rGL +Supplier#000003617|gprSTqI5WzRjqoNhMiADCV8 pxfqx +Supplier#000003625|B2VSS5,2GVJQ6tZa37KdAmg erHp2jPgz +Supplier#000003723|I1mB,dmtyJpfO8rdEh8 myuhUVPeFs9B +Supplier#000003795|bUnbhXqCK1s9lp,8qz0lZlyi4ToUTvRuRBm +Supplier#000003849|hKP1mR9G0UbXE4wwJUxBz zZga6jKr0 +Supplier#000003902|SWoxE01jr, +Supplier#000003918|FM9w9pzhCqQLAN,aMW +Supplier#000003976|m37354k1MOEgYfeestw0 xtjcvhrJa +Supplier#000004059|yEm219AR9hZ4msN wREM7S EAws5f9LI1vo +Supplier#000004111|MmbQznC8UxRhr5zc7JZAeJy, +Supplier#000004165|w7hYN2daqScYCIRSdUn7XTDNju03gnZ +Supplier#000004236|OF0jbzhEkICu2z8BDRvEBGx4H y0EoNhScU8 +Supplier#000004246|4JQrQ4alTxXA6Xf jn +Supplier#000004373|8pb4cWvQbt8Zkefq99AW5575npj76,G +Supplier#000004527|CrB53pDuKOHF4lUrZCXck2XA4V +Supplier#000004542|eh8Pfin C2lYtZ Y nIgL +Supplier#000004574|,jwkvE5xM1WoiDNP +Supplier#000004588|rFTQEBMfO5n1GOkIENBdl4B,5pRXA,I +Supplier#000004656|dVmc5 RekLneu8huwfU7uRnn9OmzTo8uTcGwvL +Supplier#000004701|VH3WxXT69sjejL +Supplier#000004711|QmsHB,aNaxsFzYmaeuw,HErwDVPxYs4FfZ +Supplier#000005036|myA0jpBu1, +Supplier#000005158|sCBGFD10FwnNGHQvCU +Supplier#000005192|inBW K3Inv0HLU9k +Supplier#000005257|MRKS8njpTCQeHXa4qH38ZwL22ZY +Supplier#000005309|HsEwgG8I I +Supplier#000005465|VXO21ND1p92UZXa,lQCk01zEDpVsFR +Supplier#000005478|zGZjav9uM4GQc +Supplier#000005485|Gb6tnkUz2qVGywmPYVPWKw2E6h yi36OxOUz +Supplier#000005506|dDrLVuBsC4Lp +Supplier#000005516|4zdRRhzRvmxOCJ6VH9nYfMMPamLTUEoSwCwy2 +Supplier#000005542|GeT1TtPolQ6pTD37Z5M +Supplier#000005605|U5HUmJF,E7KAGe +Supplier#000005631|,W75 IFsCY9hmp2pnKBew7Fwv9Ao +Supplier#000005730|W GP,c8MvzsjwuGgShQnXZ6BD9lYOKTjZ +Supplier#000005737|OEm4O9XYoXHu0N0qRVrcF2DWS +Supplier#000005809|d80H4ynFl,FzbEh6i3ql h5kHaz +Supplier#000005836|zuX8HcnY1x5klp9k0 +Supplier#000006093|hhd6K,CN67Zvyo8ZzUb kXnULO +Supplier#000006099|R1IFvbg2n76bCg +Supplier#000006121|9RYtO5vms23vWkzCophd,4exjKC1 +Supplier#000006215|IYImP8zF0Vc4NA42TGZtJi8PTByII1GHnibnC +Supplier#000006217|a5dYX927RHND6MQ5k36N +Supplier#000006274|9Xt715Au7g7ArKrbaKO4SrqAJpGd1z5VZJjyv6 +Supplier#000006346|,6eq8ErcKt,DKEk4BRtuXy6 +Supplier#000006435|viKmUS3zs2QDcWmDDTOjkcSt +Supplier#000006463|UrvGNIYmcWSICyFNtYGEjerqnCf8zsl5X9d5H +Supplier#000006492|k03UMyF84Xg5t,xvNe +Supplier#000006493|DH5rL1zdQpVjET 1LGDn67fUXAQhKqI1g +Supplier#000006659|J7fzDxnSnYls4d6xrG9iEv9HGW nMmFLxBZ +Supplier#000006665|xrND7M6ojDR3svTOdS18RvabxhAOMVX +Supplier#000006669|eaW2 uHUYWCTgVX +Supplier#000006748|Ao0Y nDSKgoi8Va0OhmCJl +Supplier#000006808|kkNY3DrRDmPjhJ1x3H3u5giBqC7 +Supplier#000006861|Q1sU1vcBKiEarnhV +Supplier#000006863|nFlOEMjDYD +Supplier#000006949|Ffu26iJzkOgygMr1klI exZSXrw7 +Supplier#000006961|PyFaFwvvFm,V9PLRt pgzMp +Supplier#000006985|c 66IQCaBt1cyKh0,1Wpvha6tAvROXj +Supplier#000007072|Zy9t3SeZQrX9OEVUzTTRmZqdkSHFBg +Supplier#000007098|lXHSK0hoWcPPqxYd5CbjA3a4ep6NHATvKojdmux +Supplier#000007122|vegiDy1dzh1KfMO8t7r9dOM2Lv +Supplier#000007132|vCDwD0hqaigXBSG3Grjo,l88n9687o +Supplier#000007135|GzrnCh5T5VyFLatS5 +Supplier#000007147|4sPZUHoUXvFf52Mv6mKp0K3lwkGH7VJbBA +Supplier#000007169|zmORVoYECdS8SWDOVVc0OFD4 +Supplier#000007183|VL4REvDatSZphjc12W,oU7fCV,1zPlaPurqk +Supplier#000007278|jYQMXA8Tg5mSk5jzp +Supplier#000007340|SL0Z67dxV6LVWAM,T2qxeL5IZuLY1Oi2719unD +Supplier#000007398|6SMmUD1,,cmd60 +Supplier#000007402|X65wVTM tZAHEA8aV +Supplier#000007426|sW ,joySVsgbCe +Supplier#000007561|AeOlKZVX,5p +Supplier#000007589|l67BSRBgiUKCc7F2Zn382jAbJhkHKzH5,u1aHL +Supplier#000007675|gey,LgLdPXPUY7PWPsho3CgEebB09QJ +Supplier#000007777|Eqt1C2l0kLEBmyla5ZtL +Supplier#000007801|VRLI07Z UME6Pr +Supplier#000007818|uJJOYpaMOri wOStApISY +Supplier#000007865|WOnko907Ud +Supplier#000007874|CtKJvSI9NGlwGl,3LVjmBhwE8dCJqbmuU6 +Supplier#000007885|yXzIOPJJV1Ct76BeZOhgeOqCQQi4K2 +Supplier#000007922|64NB8CojA0hJA54KVoQnR0Gy5hLFdk8IGmhN +Supplier#000007926|n solT,gR6u +Supplier#000007987|e13Lx5cTDgbnHWuucXZdZR +Supplier#000007998|gDq8lqL29ldCRNUO0Qzpx5ARfDYb +Supplier#000008088|ee,b213K7qcM1kAamvsJGZRGWYb +Supplier#000008090|NCDPh2wCnl3pd6IE2LBUum9iK +Supplier#000008131|qn4j4YTwvGISf +Supplier#000008168|RcQSYRS1PgpDLnf4 +Supplier#000008231|jgTMkwr2HR0 7NB b0wOB4ufp +Supplier#000008275|qFPdnM4K0KC3gaFgd +Supplier#000008366|KTTSOnHZWpy4RcmhFwb75AWIvr89Umqp3dTtM8S +Supplier#000008423|aaJgDHqJ9,oq XivWaZvNeeD,0KdMrhA +Supplier#000008467|FcsuByT0,3ULY0p3XNrcEkUtn8bsTGUW +Supplier#000008480|Xz8nqXqo9MHFdHmFV7UP +Supplier#000008559|jwjwK2,7ycf3Xuld4RGK3nd3z2w +Supplier#000008610|9K5KbS,wbWWYz6d8KsfRtgv3j4qs5Uz5 +Supplier#000008742|kEbFansgobnO76f,W0GgB +Supplier#000008750|,8 gnqbR2,cqKx4Be6ETnh yLBicz5R7ELsVLb, +Supplier#000008879|An8q0oRCbe1UVde5ml Elgqx +Supplier#000008967|ZGvmjuekrTmvCsdjEq6mVEj,J3yA2OyFhe +Supplier#000009163|n,3d763RiS6eDKQVSeGJq3,erIo +Supplier#000009227|Ow2QH3dPBs +Supplier#000009326|4EIo0ytXUpS0LP,tJOHQRKI3ayyK +Supplier#000009359|YoUOPxC9 DluEpIXUsqFAiPs8T +Supplier#000009460|IWcUuOAjO,ZRHtVJbpKdxXm +Supplier#000009549|KX95OK6LSet2WUitP1,DL,R +Supplier#000009601|WZEUXUPc09wVnDj5l6wfRO9uR +Supplier#000009709|A9DoPk2KnKGRb12Et4g53864,xgK +Supplier#000009812|rbl9euXFoPLlKQVYDVyRouslbbbKDHAkyXY +Supplier#000009869|yOfAut Bp7aeMvk9eYRy0Ad7eY,KZ7yX3KKYEgQK +Supplier#000009961|FssDvvqF6RUMiHfWfHSTD3b5EFhBqd7 +Supplier#000010037|ajLyU9tTUlJmK +Supplier#000010045|h3D658OO,eXrUWmWrqDbPVqRx8ObnqgOxrZ +Supplier#000010232| hvL8dq, QRUW75quj4CjhpmrHce6m9 BVWqNu +Supplier#000010376|Z1CaBoiUfHIVbd2g7CPkuAxb4 +Supplier#000010378|qSHccbEcqrW,gJXQu6Npv +Supplier#000010390|sE5Ti6y7j7D avIHxphjEkw6ZHtg +Supplier#000010409|Mq6enOHxSSHSXNmTQ6fut6MdhigopRTpvL2N +Supplier#000010428|QOg,VkssnW,1h +Supplier#000010437|z TI0O 5zh5 +Supplier#000010706|KCxbncnaFjXWh7A0pmSqq92pY6cT2UHLMMyaVE2Z +Supplier#000010763|Y LUZ8Dl2TpdwYj,7wl,52iCiSPzLBWyfgup +Supplier#000010862|lVWFh35jryttjKJ atv8m51 XYj +Supplier#000010917|xjFxRZJHH1 y n13yNX +Supplier#000010936|ONefqdD0Rl2u0vqSohP4ptn2Wm9EuFSa +Supplier#000010990|pBxUfajGBbUZOPp1zb,WGmqMcIjV,3W +Supplier#000011032|xaRIG6Y6GkowoK4m8ucSEVyXG9,mQDgDwCkm +Supplier#000011126|S0X46ZS5HVvRLVgUHRNSwyaWbhtH +Supplier#000011134|nAb7N8A3OWzicMsEz +Supplier#000011196|gt3fFpGSknpABEEGtBj +Supplier#000011257|XikJcF UjnJ4cPF +Supplier#000011330|AW1Mimr7N9N5wX7Mtefx3OGvALAGBzjE713M2 +Supplier#000011357|Zjv2kcGSHpmkMgm5bm7e0G +Supplier#000011564|E1OQlNyPFyU2tcrQ1Avz7e4QU +Supplier#000011843|M8kSQnFb9hv zl2,g4LF6D9LPTG1LgN GaPO +Supplier#000011896|K8i922OOUjmZwhNRInFlEKaV +Supplier#000011906|4zVEjLnee Sb2w +Supplier#000011934|mc QWawCOKu7M +Supplier#000011951|49DoZrUAlQTecjUG9oMu +Supplier#000011963|lvok0L7dGDHxK2Fn3WeRA +Supplier#000011983|hhhMcS fJuzBpX1kQp +Supplier#000012015|bXdt9q3SSnPhwqe fDiitsf +Supplier#000012124|joqVKbbBAkfz2ctlSQM4BQkTX3b8DG +Supplier#000012265|WLRWfEREFKMFdlF04tTDbO8o1QjTJEVow5mY +Supplier#000012311|KN 2ayH9cFAJ +Supplier#000012356|4pTIBbX0PqIzVy +Supplier#000012464| YleGWktE3rpxkXw0veMOW,LiAPLA1Oz,Sz,Nkk +Supplier#000012526|,8XxyyyuTZJf0sxX0 +Supplier#000012530|9HgRYnJUoPO81v +Supplier#000012562| 2LP0DYLOsue8,t6Ei9IA6EZyjB,rLgJAq7hZ +Supplier#000012572|nCuHcnBPrPAd7iRey2 eqD +Supplier#000012587|9rdvGIMjZgf3yWqHi2G7ROWBRftK FNDEFm +Supplier#000012753|NoZBFT9v9xsotk2PAXKa2kLgQO9w,2dRHkNuV +Supplier#000012816|El pQyKLldpDkOdzpWJwvUNL3C3m637Yd +Supplier#000012878|JiHXdEaDjYLi4pIGrrRh8x2uH7naC4JTVh8kc7 +Supplier#000012932|wtz2CUhrJfjOUYDDmfmokk,pTd7O2MReH +Supplier#000012935|9fBxY16m02JP5FDsKov5D +Supplier#000012990|8Qc0 2lmELkCLBVJLCDoTQIxjbIvd +Supplier#000013077|PSm3gWstGx3 +Supplier#000013082|Xxi8VPagVm,faHrwAJSEpcWFE2iRu7 qU0RLiLAA +Supplier#000013091|6u98340ZJg405s +Supplier#000013239|zA9DfoFzITiXgL3Fy6MSjUVH, NwuIyH1QCKEo +Supplier#000013292|9IuOj7,w4P6NuNdXxQM3CuAwk91c +Supplier#000013297|jkIe8tqIueGm0Dyy05QS miRjFLzdl7h,Er0ZB +Supplier#000013490|dxJFTbhjusrt5mpshNORP35npI +Supplier#000013580|3N6sSSB4UQoCXDuNhb6jXbIWVMQtnl0 +Supplier#000013667|YO8LNi05q,nXgop5Lr9OZpLmNpjS1R5U6y +Supplier#000013691|FG2tjOdpGK +Supplier#000013866|y,,813X4tyP +Supplier#000014009|futxM3uN2arVLjy9i1iPK +Supplier#000014150|IT05NaoHG2U +Supplier#000014198|PfQUZKxde5Fbo2nRMtsME4gg +Supplier#000014220|vf5QqfgDOEVD0gQA4Tn,SlZ5nchxR +Supplier#000014401|TrpeRG1GUZg46irJY6SH4nW5XJmCCT +Supplier#000014475|wJSxDYGnMmTeo3,NoJgg8nL5oBFbvff4xL5Y +Supplier#000014499|AG8q4AaHtG1nhU1OeQYB132BSFICz UZ9 +Supplier#000014507|E 7mjZQEul9suZ EeOGi +Supplier#000014536|KnvYDZelUG9phSsH5yTRIp7 +Supplier#000014562|Y4vvhnmgqzFVwW3YRd12 +Supplier#000014622|tb2C4rUfIBaPOEPr +Supplier#000014640|cvi6zkgYw8Y89R6xsgqPD9N +Supplier#000014710| KffCsCkKk +Supplier#000014735|MZbB9RcikbrjISWii9qyzWwX,P +Supplier#000014889|Sf3EwNVXjXd +Supplier#000014916|TkszL2AMzGTcSL,fcqLTT +Supplier#000014922|2a,Q Ou stNymLU +Supplier#000014991|cMvWhpJLjvM +Supplier#000015037|G0iqw0yMKlCqoTPg Q +Supplier#000015053|DtHFyvVo2Vht +Supplier#000015092|dwc07i4tj46vhR +Supplier#000015096|icsjSrXugid,fJBF1yDWf +Supplier#000015134|uEpnhdHrgo,Z +Supplier#000015160|mbw6snW5HKRRD8 mHtxo +Supplier#000015181|kEPe7llfz5b9FfED,h4fi0shIRjfhZF9BbxF +Supplier#000015198|xB8dCRSYdFxslO +Supplier#000015461|OkMwfd0fUBJA,i0D +Supplier#000015472| ,YlPkN0bQAiwWu0NKssnoP71C5GcHKyh7PS +Supplier#000015492|DU6gLGta4muPRnvENdYMujKL2gPzmd9MJn +Supplier#000015661|Int zpOXsWd tzKvOfE9GApQJivQi9l6HsM +Supplier#000015711|nuyiG86mrhW5A7 nmUt +Supplier#000015788|Zt6P2zaDe06MGl1I GoA7NPqP7WmrLC +Supplier#000015791|B0wu,oYYCyYO30JRU3EhpWd0RlkG +Supplier#000015793|V3c2nUBoI,K8hpCM2gzsrc7aIpB +Supplier#000015861|TT,N6nbOCVA0LLEydGf1huJsWkXfLPJnGFF 8zz +Supplier#000015947|A4xnNTSVIYKhE,AUuOL +Supplier#000016007|muGAKm8MWf6F6z +Supplier#000016040|MVWW52B5PZ5o8EwkfJmh6PU8BUxw6HxtC8 +Supplier#000016054|PfA 2hEtMkZp0w9 ,AaPhQq,9RnqvIy6K6k +Supplier#000016182|yti6BbtcqY,P4YEMAUZANPI5EMa15st3OQEPdjNJ +Supplier#000016191|8et2sIjG798x3ZZ4YMdqerrUoCH9hhcpy9K2,5 +Supplier#000016209|7VVCRlPOuI6kPUQzAcpyUgpT6RRyN3,E +Supplier#000016219|EZD6KW tOTvRcsi1LVNGMOqy8oq +Supplier#000016236|J0,biEoog9hdMOHBam,eVvTltyP3D +Supplier#000016313|YOum1XqtQR4Oe1hm24lqJo6nhYZ7 +Supplier#000016358|6k3yplGkkYUo22 YIp1jwoQ8lSBQV2OZ +Supplier#000016395|GgfG sn PmcH9V6vhO6h, +Supplier#000016551|0Ds TnfgpG2VNSP,iEpDAPWGBVKIFrq 2kJ +Supplier#000016717| Hg6MF6Daz2bKEWVSYyd8X BpIgHJ +Supplier#000016774|XL5pmOdUTmlZoURJLrdp3SpQmZB9qyGIrh +Supplier#000016781|KA1ROj7wrLfQ +Supplier#000016824|DdclYd1gV79dH4iSuMPdbt +Supplier#000016865|aAwIxgFZ6R +Supplier#000016907|a4z5FsPpWm6kqU9hblI3Y 1kQR,iF +Supplier#000016973|yNNgAueS9t6 U59jRQfHFl96PuOnZUe2ftFD1 +Supplier#000016987|dm3RUBBYDxbaz9cDC4LvxV2d +Supplier#000017194|7Ui3AiEkm4UZ 725K,0k +Supplier#000017233|Lkk7xvgoF8Yhj8M +Supplier#000017246|C6rCJIeDZN0PJR +Supplier#000017253|7cQ9mIK,JKFSbBunQ5SYWE1teVAFtDnQ9s6eTrqb +Supplier#000017262|arVlrcnNxnA0DLEeaMqw2AOzlLv +Supplier#000017357|FHMsJUD7,64v3K +Supplier#000017371|zd7REvWUv1YcPAxpKT +Supplier#000017416|iqx6nnsYKM52 LEJ4v6g4IganY FD7Que +Supplier#000017629|ofHX5QOU55KI +Supplier#000017649|X9DMTmzdDLbaZZfvK +Supplier#000017683|lDat AIAiCtzCI +Supplier#000017717|dFFajfzM8mSDu +Supplier#000017721|RG5oLalZX5j1Bkfk7xcEIE8cmXl0Pc9t36Ij6tQ +Supplier#000017784|mQ,fOzdj4JQ +Supplier#000017791|Ny9v D6g3LYkYUAXHaonxLvyb5502gf8TyYqpX1i +Supplier#000017894|nDqScqatNHJdp8RptAlm3Z9wZn99 +Supplier#000017921|uCTSQ7E8QBWX Lbo5YS1MDgadaV3n1cuv +Supplier#000017928|IbHrkl0RKOhTjfp9HtI36SNfopVyQrE +Supplier#000017950|mwaxb29PdNfjMS9HvPO +Supplier#000018020|,YQMx,OGjDpWzm9rQ1Q3jdPPqVNiVzkFU +Supplier#000018046|Cm,NXOrerNylC +Supplier#000018094|WjduPVpJUDgym9f8VZXwuejHJob0IOHQH9KR +Supplier#000018120|LP84s8BnE2B7vOYge7Mr18NvZQZo c5FrsD1q8 +Supplier#000018149|LYXXz0iYIrbV4T1zy8hIcNEpJP +Supplier#000018189|1vjpIKsSbg9vtesHMvxpuhPvGPUqoLg +Supplier#000018190|zrPLnoTLolOlCcq8YfKBmfZ622yM2Q2DxtGH +Supplier#000018269|ca0ZJGQPrsyEWgfl2qwC9IslKUVlAEmCvvdpxn +Supplier#000018313|TUczZL RheRpKiN5rIunxM F1Qn9vj +Supplier#000018322|P,CoX HDKBJPhD +Supplier#000018363|Igz860BSzK GtsPQEu +Supplier#000018481|Fzq WO bVnr1K +Supplier#000018570|x0,I46CyY7,D8cNnv4MgqO7i621f +Supplier#000018626|qMwO1yBezZmJHfl +Supplier#000018661|3uPn,9G2k8Rsha +Supplier#000018664|i1qoPKcapQbTn5yWpz1MQXKTe +Supplier#000018786|cNNMUaCtf3KUlEh9dKR,vUAB,oZsFKq +Supplier#000018822|Akae001yT67QPHC1mFAH5XXim6R7 +Supplier#000018873|CKk,hGfzwcSZD7TEglruI08HryA +Supplier#000018891|4lPBbfA7TZsa7f3098yQQcQ7lDtXzW I9rsz6vju +Supplier#000018967|mSfFEbbiHlwARowgXPBu +Supplier#000018983|6SMYn8YYLw630u +Supplier#000019032|iZxgcr5I99e8GujO,Yfs2 YxAdm2JUEEoFD +Supplier#000019135|EgDcGVqIw1KWRSPqz4WTWTMDwdku5Q8ifsL p +Supplier#000019257|osvhoJnnopqDoxdAvrbVV 3xfbrhNMRbTY8j J +Supplier#000019320|y2awlQqvHK9R,JcViA0abla2vGZ0CLW +Supplier#000019325|LSx6lRcVDA864cqB +Supplier#000019347|Dqik4e7eLGBada4,cr7kYwM +Supplier#000019367| t0wBeGmpvfINhW3W8rY9i +Supplier#000019397|ErH0eJ8fkoetYiFju59pt6qX +Supplier#000019407|bWo JfAsdm0STcADLRCr2h +Supplier#000019421|M4ADB7K7wFMMCfpEJZml70dO5aVnr9KJGz +Supplier#000019488|kyRzaR7I6d6kEOrIHsBnQd +Supplier#000019513|NXPOFj67mg797yuVbF +Supplier#000019617|8ZKiTnqAO38p +Supplier#000019621|m1WQ7v8uuxTc9W8rokIz1Cs3iE +Supplier#000019640|srtJC ChNpQjILxSbQaZ4o,k +Supplier#000019658|otCP81vlBMGD7kan +Supplier#000019722|s1mSTJklTdPrRC4aZ18YOPIY7Jg6dw6yhCf,TiIi +Supplier#000019783|rVzQaGu3FSHzKS4757Fa87fE +Supplier#000019790|t2lh1AjUGIhS +Supplier#000019833|A8hOorv o,vIUmdB6qdUxqW1 +Supplier#000019872|9xZ0rVUMxtWFuThEgqZ6 +Supplier#000020044|ihR8FJCSzU7nxzVIF,d6bsCa5BqpWBk4qfTTmB6m +Supplier#000020074|suIDXt7mZBWz2yZzuGetiQzWU841,7gx +Supplier#000020100|muPVu9BfFDUoFAI 1NuY4jVyuq1CWxtoz4I94 +Supplier#000020245|mhiflinb7xUWfUz +Supplier#000020249|Gf6xy1HZJxP,pgT6 +Supplier#000020344|KJOpTFKUv1Z4kQw9UAGgIc1H +Supplier#000020435|S,mn0 8uoRwlshkpOkDL0e5KIQ,w3Cr7recysVNv +Supplier#000020443|gNGdJ BqAbIf5IeAgvXwsGYPH2yrM8 +Supplier#000020473|7j2f8tCF 0,xOocfFx4U XqzI0,pUcvjNmnVArP +Supplier#000020599|9ybg7nTN4FlRKdhqGBgMdxkt,7vtS +Supplier#000020613| yelkE5ntiaWcqsoU3T +Supplier#000020625|5OE0BlSCwQApP4adoEsS,NmR3i6CsSJi vV2B +Supplier#000020728|DTZCEMA9O2VKur6yQRCqlF MoWBFi2YnlO +Supplier#000020729|SlOPt0vPml +Supplier#000020844|6pI6uqPpVOE5 +Supplier#000020863|JCNPUZqwpmKYah4p +Supplier#000020873|ZxYSXZwC,bHl5yKlS3DvGHSehSRR4o +Supplier#000020914|G vG6VAnL7gNz3KiDy +Supplier#000020923|mw3QA1,zGfM,URTPksTqQqumsMhqeig0Lm6NRho +Supplier#000020965|UCUqqfztieLoieiXd ZAul9ph +Supplier#000021048|FtFeIotjMAqqaIRolw9eYMfaygg8RLYY M +Supplier#000021124|dHLNjQQFgSFyvyV,Z99TT8,sHk5Q8LgI9 +Supplier#000021197|3a aKAVbt,2g8 99kHNJvC +Supplier#000021203|m 0xLfPbsHCI5 +Supplier#000021218|4c1,nEv7hB +Supplier#000021313|,c14WSLXns2U5ml0D4AsXlCxbdnNyD6FH +Supplier#000021346|Oq2Y4fhb6UiKsU4 +Supplier#000021376|9NAszdyj6EfoXORBW1Q2YY8ePj97lITXt73 +Supplier#000021388|UU auCAvxGn1hJD iYSdp8m0yjBTO8YsjkMmX +Supplier#000021391|Jff76 5EPm4zRhqmANb6p4Kg2b9HTTqsug +Supplier#000021457|6vuAcuVSD59GtOLVKKQ +Supplier#000021468|uetMA5U5NucfhEPD7KI +Supplier#000021513|aPgdYFGNVA +Supplier#000021536|,4,JE0iSRMACrKZ EVY +Supplier#000021629|5ZWeMnWJB9JDBIqQZfYYq +Supplier#000021667|wko0KX,LNcO +Supplier#000021672|NUZWSyKW3E +Supplier#000021719|1ftGUg9ma3ffnYh +Supplier#000021734|2xcTGyMUuNB22mhKHSMLIe6qTt23q +Supplier#000021817|ikOidfujy4L1GCc9Zok6sVBEkJXZEVGf,hCNQIS +Supplier#000021835|gzIwOKG7qjtGJnLVK +Supplier#000021855|uSrOrDz6rwUvRmINeN1cs8aJDV7MBM7RkJWOyf +Supplier#000021881|t6vAdy5oaKN7 +Supplier#000021923|1iCs4JdHfRDta itpFSmU +Supplier#000021948|NaL9la,x8Pm9klHFeAthJ +Supplier#000021963|BnK2z34uA TVUUGwAnpOXvV0btv +Supplier#000022007|hRXkFc1gSzc3Gf2eckNxRQlk q2LOp +Supplier#000022020|pZjxnv7B4I +Supplier#000022026|2Ix78STTzLsqvLw Qq9u52 +Supplier#000022160|U,ZwnZ1Y,mhOiPPJxmQg p +Supplier#000022356|qumyibCdXVD +Supplier#000022359|N41Krnvf3oF5SoWriLFYhNUJB8x29Cb +Supplier#000022453|QGxWFn3ZaRt,CIV8haxzKkofpJUKXlnfx74MHaF +Supplier#000022461|BlVU0kOZ6Durmm1mE9skEYaEH Q2ZKFB3r +Supplier#000022499|Lx9pMUH1l3 OOM6R0Fr2UE3RHKjKUCw +Supplier#000022558|w21xG5ZVnG2H5,moLJJh0j +Supplier#000022585|CpIuRy0y VT +Supplier#000022586|jYwii6J1dXbAMZ0IIoeA6kdX s,oc,IjYRe +Supplier#000022620|G8ur1sqU6ln +Supplier#000022628|96gLl7iYiNtjwrgo6l0CEoZ 7Q9WVZoZj4 W +Supplier#000022742|3CN,z,hK35M1sQoOtkjUXPwz00YK1JrEYnd +Supplier#000022784|ggITrhm9P8ssR2RXG +Supplier#000022838|UieTlWB5NvahMuqrfhs6F8EOEFBzST n0C +Supplier#000022931|dCcMFFucCtEC9ZvT4cgVD5mjMQOydf +Supplier#000023037|Tda5Uey3ZUM4jinDf9f6uxD4O4RJ +Supplier#000023039|t2dsNtT2 cL ULdvlyv LaUMlfOTrxKH +Supplier#000023061|yV7K9,du7RJdJg rQlo +Supplier#000023093|Vbrz6NUjT0 +Supplier#000023150|1Z69Grkb5Axaxv +Supplier#000023235|IMye46EFe7vQ +Supplier#000023269|TAGEZFlEROZNSxj9zH3 Mt3D6tX +Supplier#000023288|NUrTf3qzCIqCe3JDZhOhUulRM0M 3PO +Supplier#000023328|I8QcNq82m7dRK9GLG6PcRCd77v qaSn +Supplier#000023390|gf2T,6URjkD3ePFdlrnSPYwaE9S9n8DI +Supplier#000023438|hRYmEd,Rbelfilc +Supplier#000023463|WwnJsTw7xkx,cX4z0ZStC 2Yk3HuJEKw +Supplier#000023465|Ea99qWdc6n +Supplier#000023475|sZt3sWCVPiAtaf6lHt4 +Supplier#000023531|jvfa8CaBEUm1LAqYJMAKORyCE +Supplier#000023614|tXOsWEtadbZg +Supplier#000023617|64qL1 aGcf7jzr9VEM +Supplier#000023639|u9UnVmwEwoHzIOAo5T0K52d8f5etmOp +Supplier#000023669|VXpHz HajyCG,tnVZlZ5U0 +Supplier#000023812|zjXBSJ1QBjg,mK +Supplier#000023852| IsYyYj4,RiHn5Hq5KgRauRX dzH4D8YhfENnePG +Supplier#000023861|8MX7U4xaCm8j +Supplier#000023868|AajOsDQ,IzYCun4rggGMGbcVl +Supplier#000023940|IaSstRGsr66,Y9iUA4QSAhZ8iLLVpN +Supplier#000023946|Hax5awYY8Kd,y7sVG6Q1pjRJwHgx +Supplier#000024057|NxKXsagjAj tVyDrKHBDLJq +Supplier#000024075|AhmqYRcBfiluSTYMr,Kw3 lWq47JrkFo +Supplier#000024170|R1cqBIqUcCRKkVG,CxuxopegnltFPAp3YUDaJ6g +Supplier#000024176|aDCN1Mty4k2o +Supplier#000024273| hmtZo8y4dKP7vxEFH,O +Supplier#000024298|BjTLC2Q il +Supplier#000024320|vIrh2RK74LPODeaZP0,9 toN +Supplier#000024421|CwJdwRzRLPtE289HkmKubMl +Supplier#000024533|1RrCbso61xO XNCJu 1PMH0j8T8HsTWt +Supplier#000024595|71QdQL5Vt2j5X1X2,m9xxI5OwIWRw8TS +Supplier#000024744|4V3sZQO86WRvBO +Supplier#000024781|y 3F9QOLf3gIXqw aiX4o1m6OtJ417nj50 +Supplier#000024851|yTS LocwfzWVifXynMMkEftrqwhU +Supplier#000024886|kfVGr,5cbDPQTkiigX +Supplier#000024982|s2h4a1vpmBiexZ3r K6na +Supplier#000025045|Q QNG9PrjOKgrIPNi9i5 +Supplier#000025123|IaDuCq0k6sNDUKYt 89JlquEw5 +Supplier#000025130|,ZhsaPCOR8RqsJLb2hEPI2jT0yXHg0g5cby +Supplier#000025291|Jbv1vGs,z,Cy4G4mUsQaXppSqGiGL9 +Supplier#000025346|Lx53VmWzw0sfQVB +Supplier#000025477|cEJIcpD2PX0VZu6jz +Supplier#000025490|52mWeGdXm22sFumE2Fq +Supplier#000025588|iyC5Sipvh HjGbIw 0qlJZObx7Bs, a4tJht2 +Supplier#000025603|4o1,PsNp2in,e2Q8x +Supplier#000025659|K1jMCfKIW2aifDfawE5g63XlWpm +Supplier#000025689|cDejousuBxdf75,EzIKnHkG NSp9IYqXE0 +Supplier#000025703|UjKV4PCgutt8avQqAOt9gy lNk2y +Supplier#000025772|TvDgjXldWP9HYHD,2kXSaxtP,1cLOEH +Supplier#000025778|Ej1SNDvgTe +Supplier#000025797|GBts3 LoyCmiXjSc4UXlm +Supplier#000025824|c0TrVc7WfJw2wHn7iMhC +Supplier#000025851|5jT5OSJr3dBbMC0KHt +Supplier#000025858|F,QD33RvWqo8ICZ6nPXHT4 +Supplier#000025860|8gK zSIPP4qgS,bLSS7Li4lxzRroz5 +Supplier#000025943|Xp DdySnLowPTb7zhAR2b4zRbk0vNxPceHgWd +Supplier#000025988|F3sfSWW5hSlPXIEHf +Supplier#000026003|C3BiI,m18J1pXsXDhfSkudwcRMOPudPC8Zph1ia +Supplier#000026050|pZoGlI3EGQzcdGndK +Supplier#000026086|b9o wPIj0MyqCU7 +Supplier#000026274| CpM1TABZj7Z 8t2sO Sf380yUta2fT5Na1PV +Supplier#000026361|SSPA AnVv9lc8prjqwRz8Y +Supplier#000026441|23e,EFr12pgE86yHJ98Ukt7ObHaAGsYBsI +Supplier#000026456|3YAuuFw51Pkw4e96S11eIDIfLICvpJCUPZDR46Ra +Supplier#000026457|YaKiwJuDxo +Supplier#000026507|3lgd1Bc9W,CleH4 +Supplier#000026548|rIV gtKJQeraN50 +Supplier#000026553|jV83CHz6pEJc79,T8x1NLgzAHJ85fUttRdC8WMoB +Supplier#000026605|1pqdIFQydtQCWSfSKoaEYD1EBLYHIvk9dWqrq9U +Supplier#000026610|TNwkZZfiLXJyz8HTWQIVAC0KsOzsbYBz +Supplier#000026719|ElNOeGzjD1yPXC,ziblkmiR75Vpb1gwN2qA +Supplier#000026744|h2EgY2Xj8tiLXGMVHHvcZc5koZyjy1Wa4Wnl0j4o +Supplier#000026792|AJqp5C1ZUl0prfFYD5yUw +Supplier#000026796|pK7LXTaL01cVSE +Supplier#000026810|XrIohed44LsYJHWyZ9 +Supplier#000026835|pMMZ9ILx0507,xd +Supplier#000027008|8eoWrujDl6AWibqzFu +Supplier#000027017|1MNfksFDs,y +Supplier#000027042|jN0XQydsNypBDeHZ9W7STET,1eQXRKJhY +Supplier#000027294|ekHgMUgQAmoqE6EgHgAg43n2 +Supplier#000027333|69SlMcKT3 i2MDTuXhApMuvbdUL8T42mx5N +Supplier#000027425|0oUy5oOd9fH2K7Y +Supplier#000027457|YzApwXI7nvdGOGLO6of0TZy36z +Supplier#000027472|8HU,3oPP62giDoeg +Supplier#000027601|yGk09v3RROAKgI7FL0 +Supplier#000027686|sYe8SuTGgjOQVO2RE5xgN5Ljx7l +Supplier#000027807|uC9D6b8uQp0URVDg6R TP7AVjRkEFXnIy +Supplier#000027851|dFa6Jvqipl5NGNzNbK7j +Supplier#000027861|KHkbJo9MDvyZl2bnEopkS0mnmppXlcSg +Supplier#000027869|HVZJClaCcz0pa05 +Supplier#000027875|iPGK7RNJrW90Jt +Supplier#000027944|gshVzJVkVrB2bbN6Ln0 +Supplier#000027961|379YMCetzK +Supplier#000027967|e1rKtR3wwg5,j37w8qQRj,Mx37xCesvNFG2pLK +Supplier#000028010|HU3NZCi ucFslcKJYrkgwsIWBGFqra +Supplier#000028052|KerZ2KuVwncXvt4tXRJu1B0vzIs2l gW2Rg +Supplier#000028108|6jvJJxHgtNDQrbyvxw +Supplier#000028162|QbAWEkx6yt5bpuBZsI S6jms9lzNz +Supplier#000028224|7TNrPQxJdKt9UQYRwANjP +Supplier#000028276|DIDobJVAGNkMyNlUC +Supplier#000028336|jntCF0migwuvi1lII8v5ZisE +Supplier#000028401|I,mxRhNPtNcU,gRXL6WETQwI +Supplier#000028428|KZghv6Hd2K9XSoJY1ma67 +Supplier#000028480|u MI037yPPchFEfJ9ar5tt07vOIU +Supplier#000028484|rLEBlMJGvpuY8lf +Supplier#000028670|GC5fHgGTcJQoESUl0Wl4IjjVox1s RnPlWq +Supplier#000028729|vqrcWD,bOXqxQiBI4rAsn3ODCExVRagHo3rzo +Supplier#000028752|ilgkSLu8dD2A6JgPlE1W57zfIbirde +Supplier#000028777|P71c0oHHVjvWUJrN2QJVYgKGvu7g9n4asCZU +Supplier#000028797|3UlBoiQTZXoaP +Supplier#000028838| aBWvLTyzrNYA +Supplier#000028998|IHDRFETRUMnYlXg59CFmzJ1dg aC0 +Supplier#000029106|k2CGTu6io4 XyU4ivg8 pY9yP0sqAQ +Supplier#000029167|kIiSD1OVhgkLIChlTFwkb0MsfIGB8bhdvB0 +Supplier#000029263|oLWOu9Mvhoi yIqMEBgIIvzmzgJt3TLuuNlX +Supplier#000029281|WawCS3ZlMBGos0DimkuczFCM +Supplier#000029293|PYPnio8lmKMSb7hY7yZQdmqOTMC0c5w,aSkjnF +Supplier#000029353|YpHDziGkAj9HNoJEeCCL2oUJ +Supplier#000029381|lHB1LD 6oQTMYAc +Supplier#000029394|ONZ6vUJekys4,DJLPCadg4ewwKb1eIq0N +Supplier#000029432|H6lPiJRhiHT4VePAXpQRm +Supplier#000029456|,y6VxYjedxjXq +Supplier#000029468|fpItZiN,WGqNLGoN,7 +Supplier#000029522|C0dmM0CsNYM +Supplier#000029526|LIJy6ZDNparaC1WzMz +Supplier#000029533|3wqnWDInL1ZBez5uNt +Supplier#000029549|rF1Qmi7H7,t9JhXEtTIhl +Supplier#000029555|NKxD4h0dRJMj4hsaBA26vo7vhMoKb2l +Supplier#000029576|k8HFPyGZFRcxtNgLTRAO6KNLq +Supplier#000029640|XEHsZ,eYiyL8GewnS7yIKpu,r4,T8VIFVHP +Supplier#000029718|KOkrp7OwQm7yeTZhtxLvwsdy,9tWTL5eA5RkQn +Supplier#000029729|81pI3vzR45jHwiYkKi78819aO88a6HEavd5Zy +Supplier#000029813|XqcON5JU2ycHR +Supplier#000029906|gvBEC6PpVt1h0hkvaSsYYg qBilzEa73HYAtPC +Supplier#000029931|enAswpzSnN +Supplier#000029935|pvhI3QAacBYinM +Supplier#000030012|7PPCLk1 uFE5o50aiMT3 +Supplier#000030018|4LPUYKHYbsMCMS9qc +Supplier#000030024|,5YArjvMecZikBW3i3sbBHVxOTomY +Supplier#000030060|juCeEtC8wYaNPR1Uzvv VrdpaFMrnypmg,SqQG +Supplier#000030243|,EP,P7c,s mg8mTjT +Supplier#000030298|v,3ma7WkNCUXKkhh0wXv +Supplier#000030359|B,REWyeTDIFz +Supplier#000030382|8G43e0yr09u0ZYfmFKBq,IpJP CXz5mFU3zl, +Supplier#000030432|WYpI5ZvmZmV1B6gGa1IOAftdOCBCVi NcRvAg +Supplier#000030506|XrtpGU5n1Gj +Supplier#000030533|jLnai9Re xmVHRMHdfckf7kKpXDTaotp9wi +Supplier#000030539|pMyU,DysqwbXbY0ZMDa4 +Supplier#000030550|VtLoSZr,v6q7ccWAU +Supplier#000030569|6hyE 9dVAncFjo X,HiGG1eCXS2tkvMUqnPiuUp +Supplier#000030590|qqKbQgi3gu7ELe9w3 +Supplier#000030603|S0xXCM0H15uh,cZUs6X4baf23W +Supplier#000030807|UiKY889afd2KyL786IMsetBU0o93y +Supplier#000030831|8Y4ImtJgLnqNnT2Lf +Supplier#000030898|iFTmFSODUvhQdcp2Sv4 +Supplier#000030906|JNMa6GqZpTe9imISrRRRnXhhZ +Supplier#000031049|nWZLlZ4ptNjtE 4gQe3PQF5HX74R4 +Supplier#000031134|KknLDgm7YPpLAktpM77aZL +Supplier#000031204|dUHj qfzNM, +Supplier#000031213|A8thomuTUf24EtEi +Supplier#000031246|WjOg5KQPi,OefNDL +Supplier#000031425|,uemrOIIQEV1n +Supplier#000031454|UaA4cwnfY6My eXrICum W9 +Supplier#000031507|E5tcNYTQF IE2JJh8nVXlAYf2qNlQITCEHiv +Supplier#000031528|C0KKwX4ayn9sp4bvpKPK +Supplier#000031594|bYXCe0QBTtCjGsXNyHLeLmy1mr45AIh +Supplier#000031632|IhOETYSMoE59uhFMmz2ib6NisLHOx8K +Supplier#000031879|VGZfiNMXmyY7RNTHo zLrJgD +Supplier#000031887|rCnhwYDPgMyjNKTsYF3d9yJ +Supplier#000031957|KNbubbHTFzT +Supplier#000031971|xpcSyXO3pc,FXS8BoXtsztvsWAfcaS +Supplier#000032063|v213bSPQ55YxcV0lvFLNfKc +Supplier#000032117|JqzJpPqZmggKOx1TlYplmkZWjj6hFFq2gL1sYC3 +Supplier#000032240|p3ts2zyChZ6lzB46 T7DZQfnJUbC1rv +Supplier#000032241|TiOfqZAyCGhmyIsg56nVNCgZ65d1, +Supplier#000032258|VN4KDVLlky3pxvbIYVU2GYzGTNusMScirJpp58 +Supplier#000032269|bfyp2Wp0J,GnpHasRpVg4pEqpAtQG OFG Oc +Supplier#000032373|y373vJoOMEKIxIlv1PL +Supplier#000032447|67i58f95nzHaY72aI1gSLhYKhFT059xOw +Supplier#000032449|s7CXAVnj4gC IWpZNEXfwo841GYp +Supplier#000032488|h vZR9tJjlwlEcKlCeWx +Supplier#000032494|35TYULdShDT +Supplier#000032533|,5dopLqxmz5,VxKzrc9QFP +Supplier#000032547|,E5hobhl Ki1idJ40iS +Supplier#000032555|u, 3TAlrCOKk3XRFRYck2Us7p3O7PO83LGXoB6n5 +Supplier#000032581|MUrda7bxqeQTHYlFm2nZyKdGj5NYAUdQG3xKHxG +Supplier#000032767|zoepPPVhgc8aJh76dCLZJBz7g6rdn +Supplier#000032778|tX k6EL,M5RFZucx ArroepC +Supplier#000032849|k1Xn1jMZiQeA7ybvq1QHayl6oQ ,0DHKzSsma3c +Supplier#000033016|w 6iNYUuWKOC8MIizef2zgjRHERxWCVqlS1 +Supplier#000033022|jy,Eg3haH3IQ4X1p0Oq +Supplier#000033050|GdTCPu6irkcqxJ8dn 7M,ZcuVFdPzhCPJ k +Supplier#000033052|JEWbtVF9uDoTzY5RNEpE9rFJf3X,6CnbQ0vX +Supplier#000033100|MRBWjLBToa s8Ucoc5pKan +Supplier#000033239|YvKJrn8OWf0PqLw +Supplier#000033253|E312Fdq zSd1xJtVU3xyaQs8oB6cbj +Supplier#000033259|0yYuNToKLwltJHv8Vqsqr4puteer9ooOQbj,a7ua +Supplier#000033272|w0QYCvAnGt5LSZC43Py +Supplier#000033432|F4I6,3OzBUjiR2Y7X2ZRm6 +Supplier#000033506|YHg i LfuLoxrXm0osvncozk2o,Bmza0ep6df +Supplier#000033520|RnBfp0t2Bf,aeeeS6EGT7dcTcG37dTP7p +Supplier#000033534|lcLJ1EASMsl +Supplier#000033760|83o,33Ns4TaDuy +Supplier#000033765|wxiFRXdvBrv38 +Supplier#000033770|M o3MOCyFKSz2FcNtp6Pmwt9X7Ls +Supplier#000033840|d5ftdQSxzTkOdkV84yPiNVGtxr +Supplier#000033884|z6I6BOylJF2qDrJuydgqsIpjnb7J4DVGuEKp +Supplier#000033918|S mrikdF5dmtgf9nfaG5FH7 +Supplier#000033936|rLR9QONEaK9juAm8 +Supplier#000033966|Fc5b10HZ15kZkQaIfVmVtIQp +Supplier#000033967|NM7y,77BDpaSnLOhdna RTvk +Supplier#000033972|AvR4mQqv2kI019qmyyDQKLH5EfuQIn6EpQ +Supplier#000034032|,emdeyvU9jk4apcVXPyyxIE, +Supplier#000034083|UDwEV39kVFaen,ShqaGwpETVB5P +Supplier#000034128|xwxlLhtzi 7 +Supplier#000034252|YSFZM1ufI0 +Supplier#000034376|jPSvba17WuQG3 +Supplier#000034405|xXytcZq44z1r9 +Supplier#000034558|4sBKXnunnTFtCl0i1tJHJUX6rXpszZdvzTdpG +Supplier#000034578|pmRXkxIP S8CueCmRQ8bzAkQZye +Supplier#000034593|w5zzbwMWi ho7fDVFRqpvpZarXmp8vrBnWlKH +Supplier#000034629|ZruyuKT5CKk +Supplier#000034713|x9LQWTOkSwzV3VwQ05qKS2wqEueglJ +Supplier#000034742|rY7T6zbjNXlk1bYBn57pZNUijGyV79V +Supplier#000034779|vj R0XRVSUjYN +Supplier#000034842|4NgYExec2nnGTo07E +Supplier#000034906|JFurtqiAirQx5ZHz1Tt ssxzxd5RzSVaifBNjKH +Supplier#000034942|jzPbrmaylYflcZx9vvojgsGP4ES7XAPYAR +Supplier#000034966|5tVaBmqGXWH5nH +Supplier#000035011|3gLCExs9L6hKx0e6R3sHPXOQXPWFtnP42 +Supplier#000035146|sIJXNAXveFvNwC5qREjbm0hjma,Mmt +Supplier#000035178|XJZuivPoH5 4,Eb +Supplier#000035220|hnx2FVaD7XG0 +Supplier#000035224|7hqrKTE6f7Z,usfuiMg1S6 +Supplier#000035271|MBDUstcvmzcs0qBqAIE +Supplier#000035284|nc2qRXu,QJFZmN n +Supplier#000035355|1sf3ug87bA +Supplier#000035384|BBae34fv2YFwJooWF4u5uVA +Supplier#000035398|yegJXB2sCmSVKPe +Supplier#000035456|gqNEeOYbQ,lylp +Supplier#000035481|3LfZyAGjq8OipBP,VoXe +Supplier#000035560|QitDRGf, VHwLs76io7hM8TUDMf75Sa +Supplier#000035642|t1eS BQy3xhlGME +Supplier#000035674|qVJ OYJKrOHZkkWweshnzDBbACbzeaK3ZTNmna +Supplier#000035907|dO9erMiBKx57bMqhHNsCiQ74Vp4Y gzBex +Supplier#000036034|OTg1zWwPUwtE +Supplier#000036056|IUgqwVqychWrazOIcH9neLZQMNiFNm +Supplier#000036124|D,6 sZrKDe7os1IDN +Supplier#000036149|NqPwyh7BAo6S0XTM086oBT3yL +Supplier#000036296|4N0X4 2rMGKl,O,zHBZIYX,zjCyyKiemKn +Supplier#000036370|Fu eAZOKdljaU6dMx1ddgEccnloA +Supplier#000036392|pUzvDCFSbT2ro7Qcn uAct6vZPYuopLmWGHfRmL3 +Supplier#000036573|INQW8LpmGqZ258JJ9iAbNBR1H6N5GqG +Supplier#000036580|nHNQbj vjrU +Supplier#000036690|nQCrOykKUqVzUULG +Supplier#000036860|ZxLTIWZEgkxxb1yUBf +Supplier#000036861|ya1LOUgR179Sd +Supplier#000036890|aTjwwNc145 +Supplier#000036891|EBqNhuYpDeBNvUkl7yb7QIPG +Supplier#000036982|xgIAGQBfgWaAxNBZSCguaXtnvLEzS +Supplier#000037082|5zPph3tFRjSFP6TD4A +Supplier#000037088|Rcq4qoJzXWVu +Supplier#000037139|OoHp330 ngITaKrD +Supplier#000037145| lO0LK6CEy2GsstDmEIp8nQ6yRWcC +Supplier#000037175|BZYxPWo2r4lV +Supplier#000037296|GfP8yfG0gUBArxrCmJjDMMRMjsz7D9Px +Supplier#000037308|iGt2B0ii,ga SprkRTeBDc0 +Supplier#000037321|pmBQ3qa4FL +Supplier#000037331|wqkeY67YiWCQlJJDPNDbgcqV5T97PI7KO2gvWqwh +Supplier#000037414|nGYiOge73U +Supplier#000037637|xfjjxKFiyjJ4lkiCMaFomGFOE +Supplier#000037681|ibKPSvmYgVJxvvWpPjgbkDz4DIMND4WEqJPrPVp +Supplier#000037695|EMKmsa0mspiR3myKVBcfPGa0TAnUQOVv +Supplier#000037817|J V51hJ0pT3BScLJ0Fr34SyQjsCHliGfES, +Supplier#000037842|uJf3hgGPmG0jdzRVkVTnF,atyiQjNqW0eR +Supplier#000037894|Ifzhg7nOZLLjWxXru1uMgIvl +Supplier#000037921|3Z,wWf33,mj77V6Lsdy6FeUU1wWSzaaB +Supplier#000038016|S9,oemGTL38BZOqTQ +Supplier#000038025|pojNjPQF,ZfKtb2Cgv +Supplier#000038138|,7ptPkw3Mi,dtfg1062bftJQi6T1W +Supplier#000038179|l5gBAWqD9we1Ul +Supplier#000038216|7HC2mvfM4azFpvFOCScsf, +Supplier#000038405|FMmmcWAaS28 +Supplier#000038438|RcvhJQnCoNZ9BbuHR4hSwhUhA +Supplier#000038451|LI3wWkiAKvC6KD8N0OE1ahkj7oGCKxRLLswNV +Supplier#000038485|U3T11RK5EjdRn bECrNX00bO +Supplier#000038565|FnBbl32f9p +Supplier#000038637|Zvu2EiFwn9bL,1Yep7dn8rLgQt2Cs3KkQfe +Supplier#000038666|jjCbQ,i0ZXurW,Zy Hf6yEI14Z +Supplier#000038707|Bx nElqQTHUsmi1n,X5VwGBjMF5 +Supplier#000038762|oCRLVvbymOfzSEyy29Ww QV2bUqaEGAbvK +Supplier#000038843|G6dVnzVl7RFK5c253BTPy2PfVx +Supplier#000038873|q4E0XY26xcaZ +Supplier#000038902|oWH4p4ftNxLDvr9UG8hj +Supplier#000038975|9nESYqWYew +Supplier#000038993| BCupwK2NSfNbJRIPToqSerNYictd5Fl +Supplier#000039029|qx9EP9yC3yFNU +Supplier#000039116|,ItWXpToUzTR1QOtmOVFJMe3T1q to6NJ3YW2 +Supplier#000039171|IvgrxjFT8Y0xInD8tTMFES +Supplier#000039187|aIhuij6HWc72FUeQqgd7oBSiFI2271HUjEtXhl +Supplier#000039261|oRSrL,WECC +Supplier#000039328|RuTlYLPIzYyCUmJ8P,P,PzjyRTvAZFj +Supplier#000039342|1AZqff9GCQtO9O5 gCjXFpLF2nIzcFUcwQ7Ospr +Supplier#000039371|8hoBMXPXJl9ANCswsVjlx6lpwT9AP +Supplier#000039428|ttFURCuwYwon7sTJmf +Supplier#000039564|EktVZnvrFEvB9p5gArDf8Llz27a +Supplier#000039692|J3,zu2CH4X +Supplier#000039730|OJd36NyZaRVFzJXWxqpB2v56sS,oa2X8F +Supplier#000039748|Tjc43qtSX19ud8nf0E9IM,YJZ tRqwsrekGfNap +Supplier#000039794|HBFW9c1mMjTuid3IaFLm7uxh4lcHHlCes9bXY2 +Supplier#000039869|o6uUgiGsf +Supplier#000039924|9lLYlRu2vcPjP4Gno25Zo,cPsKNn,g +Supplier#000040074|nQRexcKSx4V4bPqmiR8W2cfDgD +Supplier#000040207|DGme0QlqBUu7sfmV4JwLSZb wDzG6 +Supplier#000040233|3YFCil881LjA4ZSImyAdByVwXjAkICmQhTJA4hj +Supplier#000040249|GPgZ6PpVO8LTgJTWXFkYLCBr,HOkWEQYi +Supplier#000040367|,QwpHue20wfID8Eyi0VqVl3yRxAMrDnjRV +Supplier#000040525|wJwAoX7kQy1AMSugHNX +Supplier#000040527|6BIBHadLfF4niXepYDUU1CjOflrIyF5 +Supplier#000040583|I6YHCbDJyeR1V226gVk96Jqdi1f, +Supplier#000040621|mad6dhNnFog4kcv39GEqwEl0Rj17QidbB6U4 +Supplier#000040656|nYI4MH7e1eTj7z +Supplier#000040706|xFeMQJM22jo +Supplier#000040787|QNYOqCRMD4h5XWL4revc +Supplier#000040805|ybx2bn rn2bsG8naXO7DIWYorVxcLU80wFv9 +Supplier#000040835|FscGp hXhun6GGUmTk3XVns +Supplier#000041175|pfWD,6PatkW0U2TWTya,RimgFB +Supplier#000041202|HPujVK9y3iGVFYtZNohJ1 +Supplier#000041319|tAL7QYi,C8aBcvYzdX b +Supplier#000041369|PzR5TMvTV8afuav1bva +Supplier#000041388|,oE8I, xIUNiUcyXhRpDtRx +Supplier#000041478|NOI8ujdVQ2qZU8rxlPL,Wf00IhGm1s9VZEC +Supplier#000041603|mzjh8nSBATqLn1sDTG5H8JB79Tct9H0 +Supplier#000041647|RZCdOh3HZZTEhy0eNbaEZeN +Supplier#000041692|WCR wNUJ4J,n9UsZvXcz0rLzsAn31NtvDr +Supplier#000041731|uenFXK qUoJAAMdiKk6pMmfL +Supplier#000041740|Oe M987FxSNSRUCE0RTak +Supplier#000041743|DR9D8onFODmOxVmq5O2 6XjQqI2b7BC5 +Supplier#000041787|MQwqxqr8BU0,mKcsRXXD57Yfu6LeUKetWguC5SI +Supplier#000041789|7YBXwa0YpcRuRyOFwvh5q0UEPSnrU xWp3A +Supplier#000041819|, QK21y3vwzVsoWtVmhitZiocoehv0D1m jxn +Supplier#000041861|wecooPFRNTdNBN +Supplier#000041898|rtqMZfuBryMWekZ04QtOU8Mpu7KmS02 +Supplier#000041930|yJvgs,vSWK2,OGiRfLw +Supplier#000042038|hQhmYx4, Aw6ZJjiEvRj0ykLb76IvZuoxWSl W +Supplier#000042094|nX8JoJJzJXWM5EBecVHLLnyAxa3 +Supplier#000042154|kTZmh6OTqF,6QUVf3,EDzGGHET9V2lj +Supplier#000042162|AVyH9Kx75h,zJWms H0vGPlTKKIZFPI +Supplier#000042176|5ZrhiyTb8xGHGDH5KzGKS +Supplier#000042221|8CPsmWjfXFm6XoM2 E +Supplier#000042276|RgalqWaeVF,znvv,QG BQ5MQGfWNJPk +Supplier#000042370|JJ4qzZYbgkDh1SBpNZKV4,Bhe1kYkNaY +Supplier#000042401| naYIedOIofalyz3 +Supplier#000042446|HCR1vujMJvoHLlOYWmBnA0 +Supplier#000042467|P2HArBxph61f563gpH8NVyu29c3zzE p +Supplier#000042468|oqcV66B hsZJixanMHZHjGnv5Q +Supplier#000042664|7XQghGQX4udLQ4BmS801tPYnbk6sG2GOYvt +Supplier#000042675|LJ5rVqVWYvK6F02L eMV8QoFlkPC +Supplier#000042697|UM2TLkn,xdXw37poz1HbVeO +Supplier#000042734|H2zrBY2qfcAY,0yD87tPjKIX8XTvf0 +Supplier#000042825|zhXwVGUCPwRhtqr9PUZ0OHI07 +Supplier#000042854|PPjAWf1mU25gu5xWk +Supplier#000042870|L,fkUQbLPPZVQp9 +Supplier#000042956|lq2OggzgZa orHzavgbDPgEm l1 +Supplier#000043199|T5HdKipZQODO kz9pPdLpISUXv0Qk1VikH4h +Supplier#000043200|DYrjEqGnkKetbmehDDqyZeCz0WXbk80WGeI6t +Supplier#000043292|AjoqHFPZ 3fcTI u2m,bTHyPC +Supplier#000043407|,GB jRoGGMQNaf5maH +Supplier#000043444|CEUYvm2vJTNjy +Supplier#000043566|s60QswxtIy1Ab gBbBsdK3KJghh +Supplier#000043701|hmMmlbReUegxPEn +Supplier#000043702|Z gXclLsA RAoyBhqYCfJ9,K6TshMzw,RtwqN +Supplier#000043793|WbTusHL5QL,mRW5S9g0DUvgiqFCCF +Supplier#000043819|wnFX7O 1qbNCDjvH +Supplier#000043850|nzuOk0rqsqgjEu +Supplier#000043908|yP6621hdEhO1LqsGQFVP4vT7roeD2OEHqhSoP2V +Supplier#000043970|L6THRunR13Og +Supplier#000043974|eKx xpaTn,zLPtnMFW9pMwuk,MALoq,se0s9xwj +Supplier#000044004|KiYYrkM5GG6osT0th +Supplier#000044055|WdRx,B66Ahe9JA B6 +Supplier#000044181|p1HyXs8zmUJBZzgkvHdoSJjuPbpTf3nuqy +Supplier#000044213|m3FfpwYmHuutM1jkoNzR7sg3 +Supplier#000044302|dngEBdBZ7sCpz7OXXtx +Supplier#000044576|aqs1qNLrbM +Supplier#000044592|ezP,7f5f19XWEvzH +Supplier#000044627|RRySeqYLyspMeCI7YfopDLW5KiXxg,3wx1e +Supplier#000044643|yLF1o0yK3uZJcSDCK3 +Supplier#000044669|woQb,r0UKXpNxz4AcTYdcAKLPS +Supplier#000044678|RGBEeYf4JfJ, +Supplier#000044742|YfOqV1k 8ke,6Tlqy4O1QwEHa +Supplier#000044849|vF1325SWEDLo +Supplier#000045031|YU3U4dcDL lQtau,uyweagS,2fTO6hyhSxj5z +Supplier#000045180|sOwI1 1 1nu7prrRiWwR3mlO0MNiFDATkIV,Pn7l +Supplier#000045410|2O3E69zg 8nAZQESg66ugpRmjMzzBlb5640 +Supplier#000045572|s2BXozYcEgukSaPkYx5hfNHo3pbZobBExLay +Supplier#000045614|NsxompXdT15dJliZ4Ko6 +Supplier#000045717|sqot9u27R27qp +Supplier#000045724|Ex7si7,lXlASNMpKd Az +Supplier#000045739|yafSJaaqKG8A ZJzWkTMYdA0,KiSI +Supplier#000045751|Br50TmeliuRPH3wGiFLGZ +Supplier#000045757|gVJVFOn4QAHv6fjh3HNy2LgeI +Supplier#000045843|mnbKPBZwhhUjoGe9,hYxttvZzuPLSKOnBQsfdP +Supplier#000045860|WgtKUJKaJt0mV77VGEFJpKc +Supplier#000045887|8RdIRqy4fs4nFLUfli4qWe9 +Supplier#000045888|xVfKemegXpDDC8ucuuwEMUcyf2moF +Supplier#000045915|EKBmugREo2XGCloOe6Eluvozr7WN +Supplier#000045928|hpMmGCrA5E3ORDUoireoDhUvP5b5VzInx E0 +Supplier#000045937|uxmSGhCLWkCfqrpWZU8ISn +Supplier#000045978|vyldr1RljbOnsd4IqIl +Supplier#000046036|VPl5b52UBCj0ibm +Supplier#000046091|yMVN5VBCDZR9sUsc,tgLkbZNPwteBQ +Supplier#000046193|MRkKwl4YdHx1Yv4lapizvsFdO +Supplier#000046215|2OUPjUV8REA yw8j5RmpUS +Supplier#000046219|uaK8goIBpBIbp4eARiMzfWYdBzJf +Supplier#000046370| n9QTQBeKcK5U 687h +Supplier#000046394|ryWiIoYdh6NUNDj3ABfZQUesOQRQdWNhjVK +Supplier#000046507|tRoRhBx6TxF7xUjqfyDAm5,SSmao +Supplier#000046598|fPshNAUsB4iLmKdtBz0fMG95rq85NAFPAx2 +Supplier#000046627|Lre5gfWphcCXkK +Supplier#000046704|IZ SN57igx U34W +Supplier#000046787|YPARXk,T7 BFY6k +Supplier#000046794|Wb c3PXTNozJF9soBDOJYbUFUv +Supplier#000046812|Ng8Oj5zKZnzFCTtDanT,K +Supplier#000046817|jv7iQcCKHD7nvbZ +Supplier#000046904|OSLcCw2eR8EONwmu5qZYr8kP +Supplier#000046921|02gw3vo,haidU +Supplier#000046922|FRod14iUUymzUMhceO +Supplier#000047009|NG1wo2djq2ug5E808DzsUQfZfwHhNzVgZ4DS4 +Supplier#000047100|LVYtyhtiKG6Q4ofcqjsW 26I5Xadd5 +Supplier#000047144|NHqn1 4D HHD9n6S7szEMhlJpDfIlmw2Asuhz +Supplier#000047173|ZvBXbBJnynsId53Htpjea +Supplier#000047182|TjFOulmaHg2 +Supplier#000047187|NPA8RyA95apovoe3J0p1GoXbfFBQu9mRXe1fhAd +Supplier#000047195|Bi4JMavLDTiK7ln8jkzGyRIC7mFbVejpvchR +Supplier#000047203|olJHU08MWfH +Supplier#000047228|JTMBiduBR5 +Supplier#000047317|hf5ajFwHAXUMQbfci3oJtHu6Jgi +Supplier#000047318|ANXlYpg8ffOSa1eQe3el +Supplier#000047337|tyPki m6Mp60iWH87qP30h7QSRc57tDPL +Supplier#000047433|l7dqpej2FLFD82K5eJEpZVQDrNGjD2awg9CIQK +Supplier#000047528|XhueEsWWMn9 +Supplier#000047552|Cr6Y6lLZznse8QETL83,u3t +Supplier#000047574|Yf52YHs LI +Supplier#000047603|YRCKgxKgcakrL0qRpnIXLO7tIOyFI +Supplier#000047619|1VDm5UFtgXnqHv7ptZ7kxUozVf1FvzYiGjeQ +Supplier#000047620|8o9rg ZuW8zQ14YVVoZHCMm2Pxz,FmWwaoPqhdMQ +Supplier#000047638|yKtD5hlIq5MMIRDZhGKTwD,eLteBDMw7 +Supplier#000047838|FMPFh9Pu95mQgWXpxF1K1gF5ulP +Supplier#000047858|E dWh4OjEkN97eHv7tTIl,rB4fIj0aFicSmO5VX +Supplier#000047869|ymKshPx8niF7F0Uzr2QrJ0jh59Zzn1BOlCimBwf +Supplier#000047907|LUyv8GYG6ksgh3DyZRDNCVwY76D,e +Supplier#000047962|bI8ExJDfIUrZfAoTmi6ubdTZ4ehdqs +Supplier#000047975|6kvOQmAp r,uVizQzwXM +Supplier#000047993|7RDvz5Mqv9PJgJpMhTG3qy18TjgRb37PMks +Supplier#000047996|,cdnkuxfcq13v05T5hp2lYvnUOeB9 +Supplier#000048039|vhCtV8v PRExIpC8Fw2hQYmeFW,7M +Supplier#000048074|k2k3g7OG2mNzYWq2q2zTeS3 +Supplier#000048114|lwIfTcu6SA,Jy4EERxYChun5 +Supplier#000048115|0SCgit6tjb +Supplier#000048124|GkcCWOAclMAsttQyE,vbjSO3, +Supplier#000048250|U6Kn0vzVjp7p,QXpYuq6H0eTkXgpCSZMNracBwP +Supplier#000048278|3OIrK9VUnns1kD6FI5y4cYqak +Supplier#000048310|HtWJIXJP1,Sfk,SHFkukPNm5CS +Supplier#000048318|RnC6xPECdggWnDD7V9z2v9WZtIHVuSgfO +Supplier#000048331| piM8WeSm7mVM253Qi1tFAGSZTXMng1 +Supplier#000048504|npK1WrzL56 +Supplier#000048515|MgZxGugDABs5ZJzG89N3hv6Y bQYNE +Supplier#000048565|Mq GdWlMDHykQQ6LVy5z +Supplier#000048616|5l2JM3VJALxdf15qv +Supplier#000048623|I DNW5w0YID +Supplier#000048637|okkBzYRQxznpQ6ca3pL +Supplier#000048766|YqXTwYfd3aNL +Supplier#000048875|X rkORM2mVBjM +Supplier#000048933|NFBkyTRIRg0iD4hl hJmqQr7ikCDuuIOHWZQ +Supplier#000049059|96QiHF3zQ4Pnn9aOLLoxTDxIIV +Supplier#000049065|GKborG0nPG6RN63lGtiIIPuKbP +Supplier#000049070|dNFJ0qQAAvY2KN8dOLw3rAoKg +Supplier#000049324|k6pN4kWatdNsuwCQyr +Supplier#000049335|lPOv9AdQw0UO2RI6vcsb8TUipML2tOrYl0giu +Supplier#000049339|Whn,UenCVJ516SySi8dNPjkYl2IxwpRvWNH7YFB +Supplier#000049363|Kk2Qy6akQlsqC0 fXiJ +Supplier#000049426|0rFIDxLpvKRenAvI +Supplier#000049434|p5rJMgeBameUDWTl0cLQ5 +Supplier#000049639|7nSEQmtn95Y6rKu +Supplier#000049734|PHPaohY l2t3nsL3odFCvgEuYkZG VFM +Supplier#000049841|BRb3M5tMtWm9fB7j3xjaJ7 +Supplier#000049855|hMJSFC2frhPRTa7H +Supplier#000049941|GgSw qqZfNfccf1ZXyaXxXXwQUGU w +Supplier#000050046|c26cerVD4a7t6k +Supplier#000050102|0seMs1,r63hE3vfricR m,Xkjnl +Supplier#000050167|etCd7DpHP8NH,S5xa9UO aFlzK,ZOceIl C +Supplier#000050288|vtyW19,JmVwfbdD +Supplier#000050356|3C6jRePUHidN23e +Supplier#000050432|HWwq PItZJnmIIlSxdwm,z +Supplier#000050501|3,MO8d2BbmrhdMZeaskHL03KGiq +Supplier#000050507|Szw2RHNHPc7rOuznnn +Supplier#000050510|cn3ENwW1NVpcPoDpfANcMbKhS AZYia +Supplier#000050523|QnUhm0dxMQkEu6vj6RpuYALdlHx,jgAeFfNDY +Supplier#000050681|mWIfcxCWAOgT9bJNjmfOBoBG3IF4IJfKG Zx +Supplier#000050787|7ZPwxkDAROT91k4Zp8W y +Supplier#000050813|jVMUlP37yTG0X +Supplier#000050830|,CaSIuKb7NppysXfLWcF1dWvF6sqPAz +Supplier#000051053|l0fLJIFwPXwfNJ1mz6 +Supplier#000051076|qRNZJy9MrHTq,7LSaHv2DRn8gMBcL61vqZqX +Supplier#000051121|k,khsvq1vaIrkHo5USEuXeKk6yWW, +Supplier#000051165|fACzoPWAKM3Z1j9UodF +Supplier#000051198|qdUyRLmMt5tydcd2clS1mDctEtZ +Supplier#000051210|y1QsPDRDDZT2z0yU59OYxV +Supplier#000051211|iZb4Ju7i dqREhOmii5xhjg5 +Supplier#000051267|wyH6saWoqyH5o70mE,6hPR4P3wpmC +Supplier#000051295|,20TrTFikfRVWNp8OslfEsTY9rCENpGrNe4T +Supplier#000051344|sbBICyS65SJ +Supplier#000051346|u,a53VDz93OtbJ2Y405IYeonX1M0tv8Z8PWU +Supplier#000051401|9G4flmSvkEva2X54vfsoT +Supplier#000051527|eGt323M2Brs3vwzVR0 +Supplier#000051530|3XlEnEGe0FaNCfymBAoPT6V +Supplier#000051576|dO2MPb7mmWtjS8EoXoOmqMn +Supplier#000051613|hH1nbZZhYbk KY9DkEmQQ1EYdfAxxR +Supplier#000051647|EE3F5ApH C2oP7lRzlbTtLWaEs +Supplier#000051682|bYF7ASvCx1ECvbza8 svC +Supplier#000051690|fGVAL8nOjQzB1lzOUNnB6iGT +Supplier#000051758|tkjgYm9y14FT3JJsYkZ1qbkNm +Supplier#000051976|CA05bOZmtgR 5Zd +Supplier#000051987|rPPgV,lPuoC5V35tipb5i8YtOSrdw, +Supplier#000052109|XN0,Y2I4FJX7fUF QJNs0XPEen5WcagOZK7EZ +Supplier#000052149|QwnddppJpMApfCqsY8YR7T1 +Supplier#000052273|YvTiyQliOcSJ lLGgfxM6QBJfe +Supplier#000052301|zmmVO8KZ3wYycgQrJLeLpnLtPbli8NzyS5 +Supplier#000052307|xuLS20Ntr0TuQEHKv0su5Je +Supplier#000052323|lEgs1Lcln Rr80Grtb +Supplier#000052492|OAKcNnuNAL0h6FjD2tjkl3vK0C4A3RZfxXADLE,S +Supplier#000052626|onGlR6f9KRg uymin49 +Supplier#000052643|WULqrwLYwhKae +Supplier#000052672|SaB54dYKFpAlNnErX1 Axz +Supplier#000052733|jnQfruRU6rcWh2NhRhMPCm36Udk +Supplier#000052808|,9QOIotic6lmw35aK7 rXBOGFsMUYl8tBeOZ8 +Supplier#000052821|fPogzunZ ki6RElrRHYHE69dMXIMhD +Supplier#000052836|nx5uy2EZWaYAb,c7kuYzm7Rz qI3o1ZcbRkzoW +Supplier#000052851|AbVzytDS34 +Supplier#000052987|PEqNOf4uQXXWGFY +Supplier#000052999|m5gb64xGHPSgWn1lu8cNM3m5gRpSzGAgC +Supplier#000053099|X7LbS5iTaKP,k2i,o4oxag0ES +Supplier#000053140| H8V8xSL1rzN38HazirTSag 6,Zjiqk82ZZoYmx +Supplier#000053186|THl,AnSZrsFRZpTk359KUpFd +Supplier#000053209|tjqQNhgJeDUNNkNZYjC +Supplier#000053297|C0lA PckL6RXN8Vb0aXrl5RBiZOM4n7 +Supplier#000053400|MLV1q cvJILvt2bUcYfOTQ5h +Supplier#000053448|Ir1XgbEis2IcVzjRDw8WxU9OS +Supplier#000053522|RtX1ATr2JxjkC11,e5Xe2xy +Supplier#000053588|Ky42Ppf,Rb 6zplQ3hhDeE7ne,T +Supplier#000053602|exKVAkMYkA4b E WloqvIXCJ +Supplier#000053657|bTKZp069fIO68tz77PWQeMVMJwOk0Sm9ynRXv +Supplier#000053716|FxxuskqgRj +Supplier#000053762|shTrvzgHmii0L05z4sZ7,mLYtbWBB49 +Supplier#000053787|wgmRXE3bf leFwct6pLkznLfLCeWBUYpWbt3ut +Supplier#000053865|97T,b6ArDOAPGyZSwZx6VoCC47P,o,CvhuYcX7 +Supplier#000053934|UbAswBGoEMkMzgGXjHx965DWJfelqHzzg +Supplier#000053958|tOz57djtY4p8wpCnMZ4qP7n0iWg7TswPKWjpD4bK +Supplier#000054021|7ROdhAb7F1gDO3qdSfGt7SHi8h +Supplier#000054045|iuRw7ooa14bi9ddNx31SE5w5RX0GIuTe6WGfJ +Supplier#000054050|GUGH6XoRX0 +Supplier#000054245|2bt4eoqZ8PU24ZwGdmoa +Supplier#000054254|woaDEUgEZM im6VsBD +Supplier#000054394|0qi,5i2FVJeAZPIztxuO +Supplier#000054445|KyWqvqDxapuSV5rSuYAKavPPp4Ly3Z3I,qk1s +Supplier#000054479| LaQSuLosGINz +Supplier#000054492|RAh4x3fHCEdN hRAB,i1d1HXyC4MbKS1Q3 +Supplier#000054609|fliE2 r6dDrtMj +Supplier#000054673|UU2rOykPn3XRYHzO +Supplier#000054696|Rh6DAqcW85oaSLFF,8B5 +Supplier#000054836|W,,ZGvXJoIjhhgVpfpC67,ql +Supplier#000054904|yOHoEWYjulk0I +Supplier#000054978|wNFH1ZPOoUPZuiylj46 9 +Supplier#000055023|ELNm4VC3HYdNDGXqLpzCjgV02IMd2YEtUKgmsnr +Supplier#000055046|0YV9ErvFoHP9AZ0,WQeNL7vR +Supplier#000055057|rNsdwQl03HZJCe9IJv +Supplier#000055086|sCjyINatdcPHXBxXjveW4GJ0 +Supplier#000055157|GOf31FBcHW3qYxjcQ55 +Supplier#000055197|YDX9iJjEjNfXV45SkyifTmkPcJE5 +Supplier#000055205|ZvFXbBJOXC7fi +Supplier#000055206|ePJ2G9 mkquIIMmkj2rpm +Supplier#000055217|y 7WAQId18K9Z +Supplier#000055222|oBmy5iSUs0csBvBAASCPP6MRhkBPp5AsW30GTdL7 +Supplier#000055349|YC2oatpapKUKzUTMpUqj0 +Supplier#000055402|iZOa3MNFmcw +Supplier#000055420|slvYnetSKk6Nq +Supplier#000055541|6D7fO5HQr7j aLvJV2Cx, +Supplier#000055561|sg6IVO a6pS383 +Supplier#000055630|tZ1qULFWXyYFopKqqUtOrb7gL +Supplier#000055732|41c4BQiJKldclBCuZV63FZFEeEAHlxHUjL8Mzi +Supplier#000055856|uBKGEOAwxuHNBQMnFcuPFE9 +Supplier#000055889|GeSwrYUL7jpE3XrRwIxTbXfSseG5WL +Supplier#000055914|DHLkAgcq0Kcu8ukjbL2QIqFUAb +Supplier#000055917|KO r9,eevDtl2jvTNga0Lj +Supplier#000056061|xKXGYF1 swt2NTH4IAsO,uu +Supplier#000056188|vAkf1KQ1Cus87kr6EUsZNBoAnR4Mw +Supplier#000056205|2HrbqeVakLYo2Y0r0EZsdML26Csbl,0 +Supplier#000056212|KrfTAmxYskG52w1iyv43hGzQ +Supplier#000056335|8p56cHs9Nhjbdf8uWhdhTEqvRe JgPL3GPkZsBn +Supplier#000056377| ZNoH0WcOzs6r6rYtVROSGjPpNLAtSgcKCW4 +Supplier#000056400|,8,YMd2kgdq2hYRUIi5jcZjRiZ +Supplier#000056402|2YqSXpol7ZFcV,SNvlcLlB +Supplier#000056478|s,EnBNwjkeQ76gRU +Supplier#000056507|OTo6 9zHM9y 0FpFkXWBuMlu7VfPCLpK0aDWzw8 +Supplier#000056664| tZXwys6SH34NYU3F8Bf8 +Supplier#000056721|1u6 uCqSuqpMKFvwwmCi,sO7spx3p5iS +Supplier#000056740|r6N9I5UQ3 ltzYH2iHFo81RiO75zC +Supplier#000056991|kRKcPhExE,fQv2N6woQI,DnQtUTej +Supplier#000057015|Bf, UAYrswq5 +Supplier#000057185|nN1HLdtj9VdTrkxAA7AY +Supplier#000057364|9e7Y jEjOH +Supplier#000057373|yEKN84Q5,5IUMjWqlHl7UIEIh +Supplier#000057481|kgRPXiPUjqXohPwcWJ2,EdWLBPsZdV8 +Supplier#000057506|o0oqTnicmmS3FPtHtshK6NW9e0ByNizL +Supplier#000057620|P,0fyeVTelpx33UhxS +Supplier#000057668|1TNDUa8o885 +Supplier#000057712| 9VX3moCaLesGGO a1tjRrYs +Supplier#000057723|QgUnoB3QZFEb6 +Supplier#000057850|VrdkAUDskufiUHbsX +Supplier#000057943|ibuR14GBJ7BVTIvei YboRJ3lQ3a47NxOIkh,JR +Supplier#000058095|VOrc7qmuriEGe,HAWEDgZmvr P1c8KGyOefL +Supplier#000058098|4txX2ubnQz608qiJgjGaf +Supplier#000058146|KXZRP571dj +Supplier#000058322|j6AKsRArSiVMMJqvLGiN44bx8dbqw,x +Supplier#000058378|ihxazqp4Cv0,JOchOySAm68ktRVX +Supplier#000058411|U4gecOIPvN,mFc3X0V7NHRfkVLnBfrsUEAt4D +Supplier#000058595|A4dbU99MlIOVqs +Supplier#000058602|3imN,,nxUZKAAGOF3 +Supplier#000058676|eqW528q PykN95r +Supplier#000058754|DZynReIKyx +Supplier#000058757|O,4zu3HgQdwCxMtT4fOTY5dXm +Supplier#000058761|WuCJc4NE2Bv6rF2mX3OihvugvNHCR +Supplier#000058856|Bwh,N47af6yW6DRNdYOu,7MguuKDk5wYbnJCY +Supplier#000058874|yqOtX4m0ERRCApafG2C5YZEK +Supplier#000058893|BX3ChA6wYDTQ +Supplier#000059035|n, 4T3 XdVh7wr 6cleNHysuhZSrp +Supplier#000059073|CDAzCVFcLNMgrffr +Supplier#000059104|ShXAsbYRTKXQW +Supplier#000059148|9 O2G6jrOIDFP5s0DB9YtlkZ x +Supplier#000059190|l8zf,z4yicysoMmKmKa +Supplier#000059233|3VCMb,1YBkGMkA1sm0OLuV7xypBeADO5 +Supplier#000059304|erOzroQOln +Supplier#000059350|NftVnQ7umTVyr0lsoH1 ZF6JT9P +Supplier#000059393| EN71yN26A8e +Supplier#000059405|,wxjtP,v6NunL +Supplier#000059428|J9gHQbYE5T5a3dlzicTldirznz7cio9FiHg +Supplier#000059446|xGGb66SNWAumzEUSpA2fnpFHKbcI +Supplier#000059460|wtix1W43SclX +Supplier#000059687|lIgJfm9NAY4NSjd3nZttihnzFhAXO +Supplier#000059774|M8sDXzW5QvW +Supplier#000059882|31kgSvKyTstPBG4h +Supplier#000059955|guJ9ii cbTxEfh4bAx cv5EJbgG +Supplier#000060007|Kv qzjTaBmXO6O1glM1kQ542taw +Supplier#000060201|ckUYYsqBm9z5G1eqa0qpYAI +Supplier#000060248|Jz YLNHzbUNO6can 8gMnX +Supplier#000060267|sh9iyIp51b1fxM9YBLeGaU8,LUotTkTeRIR +Supplier#000060281|ERUCAup,9iQYWCYJCGP28FdGovdNfXO6SalwBqd +Supplier#000060356|i1NIShgLFnek2Bsc +Supplier#000060399|V3221tRfGXaRBf1EZnyEdm4 +Supplier#000060441|K5HNYJWpoal +Supplier#000060461|JHz14AKR5QMdcGkAHQkqzuexmQFVwKMA6f +Supplier#000060465|84pFOSVbs1M7gZg,VE +Supplier#000060525|IOG6MajoqibghzdwkJ7 +Supplier#000060564|r5Mi3w,8oQktvxmptbcQn +Supplier#000060575| ceHe4w54,8,F0 +Supplier#000060614|wx4repWW0ChNFUBuxUiNuP501lPlTZOSyEY +Supplier#000060678|HBlHpQ AtaLKFRvV +Supplier#000060679|iLE4Hox7MUsvhJhJppOeIwOjrs1iXIC1WwMEhC +Supplier#000060751|aQqDFSK0usWepmdl3 +Supplier#000060755|M,s6qIlLDk4amJqhnIX0jOTH6DjETQ +Supplier#000060846|vmO0Hc1nI644USM4wtFcqkfEye2WQWjA +Supplier#000060869|l9Xo tPRqhqf9NzgZIo5 +Supplier#000060883|NaS4WF9NOUwJ9SdXMi +Supplier#000060907|wzjR pSi9MnJjU,6tQFy5tJWuPep +Supplier#000060995|YOgiyPxZXELPy8cs5dMn +Supplier#000061057|37nHkAiZDdQh3Z2HZ0fQ12gaVff5Tpex Cmf +Supplier#000061072|e1 KIoxYrAr +Supplier#000061095|ASWd4cu0ACPQVuCHW +Supplier#000061115|1ySWVxI7P,2T3lgJRKHaZ,abIMiDQgp oDOt +Supplier#000061195|jYjNlAT8nf +Supplier#000061304|mrRPUmDa1BpSEeX65lkHT8LGezbIJ3ivQq +Supplier#000061405|LhVtzkweO3iK9B1zBx7a56 +Supplier#000061453|t8n JdnJReITh95ZW1T7fFI4bazLN28w +Supplier#000061502|X25wFLM7de +Supplier#000061535|Sna Mwl3wfBE5cF1kMvcfH,eG9OXSJEwr,Bi2shr +Supplier#000061559|kPwrl9sa7HitC6da0Yz4sbPDYPCGuE5xC +Supplier#000061598|vnfR,bk YX5lM +Supplier#000061686|dGL4vZA arPSMfQWAUM2 +Supplier#000061695|M2EtZklp5qHHH,Znrf +Supplier#000061765|1ggRchkwAWBRG9RzChrECLGKUybJcpJ4p +Supplier#000061830|9dmuSjDmp2vqL +Supplier#000061831|ZqlZSC2vGipUD pH8TK wEPZo391 +Supplier#000061905|xv2WzOszbAF yaY5faYqmxZaOp1D +Supplier#000061910|HuG5y3Zat17cJGjXILJZ GOWEZgR0p6YyFImgr +Supplier#000061964| BICi8uFTV,2hpR +Supplier#000062040|0YTPX6bvoAmxry1SujE +Supplier#000062047|aEwWhbEqUyB +Supplier#000062049|PXeU2D1454KS6 dMRo85HboSt5dBKUxiRp22tT, +Supplier#000062062|Gigg6lFpBmty +Supplier#000062081|CiCuW6Ybw zYpz0tOMRhCH1h8J6FkK7WbYpPzi6 +Supplier#000062100|91OEOLfPkA +Supplier#000062202|w8el1yhsNGzh1vbcpE7,Ovn7M9 +Supplier#000062441|fjHOwLeNRBYJ01YFlJCkUNUUb +Supplier#000062456|uEZc5YfXnjV32 +Supplier#000062485|lWSSzHk00B50XkbiTToCMf51U95O8bllb +Supplier#000062718|2ntErX6ct m1OmILoELYgCB4NN4hTmql,bia4fA +Supplier#000062727|zEVCqXsQqD +Supplier#000062857|RK7CJQLDzzzVMAzm67nmi +Supplier#000063100|vzH5VnsuSIrYHr3v4RWvIImPsR2,TTC +Supplier#000063115|4H2QWvc5lBxKi7FPs,axKvDs +Supplier#000063168|NJUiUk5LRibM5dDciQA5NoWbiMnE +Supplier#000063177|HqhpY4qWHS16Y SDyTC9rdfM8s,dhV +Supplier#000063188|NiZaNINUHvt +Supplier#000063293|kmrexmy1LjeG zD20lPliYYRwo5E83nG4tiTan +Supplier#000063303|yU5d jta8F0,kN5bDJ zHE +Supplier#000063440|5QxZR9DYAugiUq3MJCUbhuFL8DnPxz lG,5y +Supplier#000063525|qzOXNGHq6ZCfbd7zpL3lyx5rdg3E74wFmIN +Supplier#000063550|36SC3g5lQo0zoOs5ggOUXaNL2eom7pnWP5pv +Supplier#000063656|n5cn5kElBclwmZC7078 +Supplier#000063772|X6Ui3kYcjmf0 +Supplier#000063776| gpJkt8dGzS0D5CIWVeRHlmm8XBp4ACy +Supplier#000063784|w30WPoTqbN dc0lln07AW +Supplier#000063822|Sfse5f,8sj1 mX2Xb +Supplier#000063895|hNsOiXPkc5d3qMC +Supplier#000063900|bWmclvPfowkWwy,z3VP01uUU51DWyC3Oco6VAM8 +Supplier#000063991|hffZ1pYMj,rQP zseVJrY +Supplier#000064008|MlHxhPq83COtVnCRcDVTZL8jHZ7 +Supplier#000064101|XxotiKXVky4x 4 s +Supplier#000064155|bcf4o5e6M0C4rotmtqITLLh,t +Supplier#000064175|pa8WpJzzsRKPVY4QHJyw4l,l09eP +Supplier#000064393|qmVrGgylTJfWov +Supplier#000064394|MTbNjLSFfwpwn3OhMZhU +Supplier#000064451|tXbhwTAMn1Xnhwa7z +Supplier#000064694|x,p0RdAVE r73nWfYjOxvORYE,Cb3O8VNx8n +Supplier#000064726|OBI5 rDFbo4Xt +Supplier#000064734|S4KgP2RDVmyU7X0XknZH8TZvIxt8 +Supplier#000064773|6tDRCq MUW3Bj819wHhHkRIYqPTkj5 Fj +Supplier#000064872|5dInRBb7wbL,QYtJjUJr +Supplier#000065036|Q0Dj2lBOLKNRnZUqWPF +Supplier#000065124|JMgYW2yN0lD +Supplier#000065129|9yvNNGh0SEoc +Supplier#000065266|,WxQomggzhqA +Supplier#000065301|PbGuI,xHuiBgj0WxCJ +Supplier#000065407|9dZJJFpLhM,cAYI,lTP6H nTD,QBRFj +Supplier#000065417|5RRwCqKRyAbAul gRPh4xHidALtGD5O +Supplier#000065470|wbuiAjgxOlCt1ycM99JVDuCAG6SuyzSkpmPeBTkA +Supplier#000065485|1jiInzv2wQ5eHJLkFDuQdr380vRu +Supplier#000065581|f395DGIObu8QvUJ5DUlYdVfg2yLY1U1En1OAMnC +Supplier#000065621|Yuhki3eqW9wdxygrLw,o +Supplier#000065667|IdRl5GNagHjo42aaV8c +Supplier#000065791|Dhf2CtKuUXCA1TqUrXDJJT3n2b0BYQ +Supplier#000065954|DHDXx12wzVKcOL0wfnlfg +Supplier#000065984|YRJhC3x Dx8zAdAxpJ,ioj +Supplier#000066299|WkpQgvP5eR8DrqJ6H7dv +Supplier#000066319|stD3PSecRAarj6Vim2ndGKG +Supplier#000066346|B6nKsrz7spEWC +Supplier#000066378|6UpuhPYyx77NmAVL752DGzUeVZGa +Supplier#000066403|N4ZnPeltJ2roMoR2a6 +Supplier#000066446|zfv93NRGGLmD0awoGzG TRkBFx3oKRq,4mjQKE +Supplier#000066488|foiljONqdWzDjS0p +Supplier#000066513|8oyeBBJLAOjFvv1XEuOQXUoSxm4qI +Supplier#000066709|Sb67xsslEequxZ8 jV8rCaD71ndX4VaaqvCq +Supplier#000066778|zZFMJBXidRneDFtbVlEAfKyTb +Supplier#000066905|UApXxnxJ XBuZPgGKk381pQXwxs,D7NIpItqy +Supplier#000066925|ohVhWfKFtsQ9t +Supplier#000066968|D sM37cm6JRw7I4ze +Supplier#000066972|Fg3eV2YcV,lrMvdN62Ii9u54 +Supplier#000066996|3WrmoN2LZGHNGVGeuf20BJ8I +Supplier#000067033|gxV1LBmQJ6Y +Supplier#000067101|e2xq2vKdp1LTLC4Je7nB2 IG,SbjaLDZiP +Supplier#000067126|,bZ6E2A0QAQYYF3QLSR8u0TI1 +Supplier#000067163|gphzOwy,HOT +Supplier#000067251|yvgiIDR9ElMJDqFbwkZTUwgVQl +Supplier#000067323|EXHfv5OE kzjC +Supplier#000067330|W8K5gYuguioeOV7Sg4yyFAFdw,Y9G DRQ61X7uDG +Supplier#000067339|5357fmTIZbiQE23wjESIVp30LPL9Z +Supplier#000067429|AhNrXQaFK ,N4Gvn,ETDc81rRhVg5M3GRr +Supplier#000067495|Gfe84GIQkbseIAdXRF7E +Supplier#000067533|QSFGb qI7U8psCnkPahS +Supplier#000067560|agopm2wWKyPSrNoyGuQ BXXboMgdNFXeMTBmZ +Supplier#000067574|C8bFe9r4iAZ P7HjLp0VA4sG,cjToDb +Supplier#000067601|qpOhLUtmgjfb4XFfDz +Supplier#000067711|s9qdBLECdbzm7DAQhQy9T8t +Supplier#000067749|Q,vZsKNO4xOrjYQMsFVQNUGx0zVige qdnphr +Supplier#000067835|,DsxQcBgDyFzvuV yeMt0 +Supplier#000067845|ITDd44V2Hp8AuKYRpG7,pQhnUeMvcg4TT +Supplier#000068031|XjN77b0iIdP GiJYQjMGh31iy,J3iEpVFi556c +Supplier#000068100|M9pPDBRkUmrCfjDsUXElv +Supplier#000068137|Kbbm97VTiuJ5CuNBqgG4KVSzW9 +Supplier#000068210|dzFEnsr3AZsmsCPk2c6y9o +Supplier#000068226|7iuODi3ElA TtfmSBOLSeGA0N8gVATZoy G +Supplier#000068348|A6B9rfmaQPQHoLPyZABeGL8,T7xClcThFX +Supplier#000068442|XYQ49bFsTmYw9J +Supplier#000068454|v5cJxooSCDYpz0YEyThs0Shnscr3 +Supplier#000068602|o8eY8jHW95t,K +Supplier#000068612|qn1L2vNERgud9o032Lq4cJG +Supplier#000068663|Hr2LHCrReWArgTTy9ZyYi1YJFXTuqgyUXAq +Supplier#000068668|iCXuD1WL,m6Rs835D1fwbW4P99thU +Supplier#000068734|YIjtDb1aADY2WEQgf6hklsfYlRWoy5hIb2 +Supplier#000068958|dEhBDxGuzrEvR +Supplier#000069012|Gosm8DolTYDNUSkwkwE HFDBfP +Supplier#000069178|91d5t9uCt1NjuD8u4v +Supplier#000069180|rRqm,rJbAoTBcFcppSktIOKvinkO3 +Supplier#000069239|Fhvllnom8Zv,oI2sG7ZtR6zi +Supplier#000069366|nFsc0qZSV4fGC11zQcqg,r2xgAy57kObX,gg 0m7 +Supplier#000069368|CPNokAnmaWeNdTqZP1Hw9c0kaXCRYa +Supplier#000069541|TeJCp,b7ueoJuM5MKBW4iVbX0UeRrY +Supplier#000069633|adDIeAuppLQEJM +Supplier#000069641|XhLivLzS4Rv4 +Supplier#000069673|oM1nbfLfic +Supplier#000069772|lW3B7onhhsCpiCWoe7haHl +Supplier#000069816|QgHBSo0UMh63iM4KEHVEXe7 QtsACuv2kqI3 +Supplier#000069829|iTxbmMK5JIYd6CyvoYh9W7EebiMxhNqooWoiaP +Supplier#000069848|JOQGZDQy,FTROlldriAimsD9ZVkIrjxRfs +Supplier#000069850|Fbi0GPqPBnr1Lfj +Supplier#000069872|COzHu399K7H2C9I +Supplier#000069990|Y,jhFU21rDFpvKe9 +Supplier#000070070|7TMu5w16XlPFRhovKAGTuIs4, +Supplier#000070124|ZDp62pUnSuzjx vpgnBKcVkA3YKZl,r1ChAeE +Supplier#000070268|Y1IPZ4Wtt2vs1t8eyvBYecnz710avn6V +Supplier#000070454|odsHC4GYz7XRSoQpS,PmnTI +Supplier#000070455|D5yTtG8P,DCG +Supplier#000070501| Nxm,VdC3QcCRK7wj +Supplier#000070583|6W 187Qq7mXMOmR5O0TvsCBpJg90H5Jn +Supplier#000070609|UavCrpSAFu95RY2S725, +Supplier#000070811|z5v mQFvEQXxEWZ,LinTAM11en +Supplier#000070834|smUAS75QS0nRik5Ws1yk4PiGNIMEp7VN +Supplier#000070869|Cqxa2dXidpDI0EN ehVKyQa2KdkMGyoHOzk70 +Supplier#000070890|3CyeQ1NYyYbBteEAFmZkT8aN29Oy42J4 eS +Supplier#000070909|CRDbh1vtl7FeXM +Supplier#000070965|7VZvYs2g1qsXLqZ7thGBVGRPIFI75j2rEHAS +Supplier#000071002|VsbOjhKm4AqAnKq +Supplier#000071048|AdElA9XIUmMhfffrY4QFklvEo3IozS6 xH +Supplier#000071081|Kc3Wuod85A0E +Supplier#000071163|n5bscyPHyVP4pDJFm2hMFkd1Mt9KhPedvPt1o +Supplier#000071176|HN5HGLt5A7OS7ZrtGe5nl,ShuVxo6DVrOj 9FDDc +Supplier#000071279|T85NQMrxzNA84xelaE4dCGnlZEe,YtMMwC1u1Kg +Supplier#000071288|s4UmTH8Z 39yrUxlNAILKc5ukDP +Supplier#000071374|UrOt0HmxJiezd +Supplier#000071411|Osc4GrIvxqb7kei5,C3INpEUiz3PCwgvgnSlk0G +Supplier#000071463|7wEZb9FM4Ma6Octj +Supplier#000071540|jHbyY8OxHrHNUvaFpL10E xddpEvGqZqK3kWTjq +Supplier#000071547|hm7,Uk1FyIWb29Dj5atsgZS2IuW,TdMvqsOIEfN +Supplier#000071554|DvWM,y7NZgzkornHBZfnPv 1AEsvn,,k +Supplier#000071558|JOeH9dcN ZBIBTIBSiZ +Supplier#000071559|hiEMg5kZgt5EbskidjQPnu67pytfQnCXkKuQ +Supplier#000071657|CodgpTwXFKWOuUR +Supplier#000071674|khdxITW0 Gv8I +Supplier#000071702|I8593bGNz56xCgVvECUxsh0ryGm xoZ07aFDZg +Supplier#000071734|g2b6JkmYWmzgMGr +Supplier#000071774|9zUzAytXtRMZNLMYr2 +Supplier#000071853|5bwZHDI0OhT7e0GFuU +Supplier#000071877|MV1U4cCMBsjZHJaU8u JhgN +Supplier#000071940|HzKFBsa8KyD9L86hSMs 9sEF1U2tDBjpAz +Supplier#000071944|5N9NIZs,Bd0YixV33jTY5 +Supplier#000071978|4lXTb8E1Gm +Supplier#000072020|74acIiF0Cjc5wuEIFQV81Az +Supplier#000072053|WzqPlI7gGSXKqm,QVBaobEAN96vxW3JDHm4 +Supplier#000072077|CBCsD3yf OCG +Supplier#000072297|TNDu3 qaGy4G6XPmnqXjDZFKtpS ,htJ +Supplier#000072311|mClhntQh3aiCH0z6 +Supplier#000072313|rD KmqXQXB3zdVODmNWWltl h9tb,sYxipjY1jh +Supplier#000072353|vatnZRiJG1nBma1 +Supplier#000072380|psd IJ6s60fqDZqvg +Supplier#000072416|FKlGXoZprp68e2H,ULbW7cfoe4zSXZALqv +Supplier#000072472|n2bKkSjrWKRNY0vy2PzREu6SRRks607MA +Supplier#000072551|WD16rRo obg TWwDHV3eeptGBTVaPuEaJ +Supplier#000072598|0h0XzJwMEyrqa98tXydu +Supplier#000072620|wJxM9zEVfIa3RNJ6nTfFl,UpL67C +Supplier#000072634|jRmSP2 ehQwRp7,,eU +Supplier#000072670|qwqZQTYSypQPsnlsUSi1JFcl3S +Supplier#000072702| 1r8Qf5WLROpvGEAQL3sq49ewgdCKx +Supplier#000072828|aWNaXyVe3SF +Supplier#000072829|0yqwrrBnnt0XIRz +Supplier#000072880|vAUk6SXyuq99vHbuNpBfA7n +Supplier#000072896|QTXm9vUKfFSl GdTYFkHnryvD580 +Supplier#000072963|IQ1uLaz1QtBnVEfhsav7177K8QH5 +Supplier#000072980|1FzorN KWdnBBa4zF +Supplier#000072997|Z6BfUeUMwJYFFeyp,RCUtP2qirhtqQ +Supplier#000073054|iN6cVFf2a1Yw +Supplier#000073197|b2fZTUe7uvjroYs,lEpWgdeTbr0Xq +Supplier#000073259|WW7njZIbAtMPnDfej 8OKIRPenOBc +Supplier#000073274|rBcqLMv,yKquLg +Supplier#000073310|Io8BDI g QkjoX4D +Supplier#000073434|QJHvVCr1sq0lVWPBvyixLWpw +Supplier#000073472|jpf5dqCXdr,njEGWV0vGuTPF +Supplier#000073476|amH,QbeNmEz,DuuSZ8v0wuOKMSeiS0AiZkRj +Supplier#000073489|efAppEp02dJTdS9hcFv3x +Supplier#000073602|7tcHSxbNVRNSKf7lVx TSku51KUSu49N +Supplier#000073645|l0gG8Bs6Tl2H, ,F36hcLzFdtvhlzKs5 +Supplier#000073667|uto6ApYz1KI +Supplier#000073690|ax xO6R2YPBhfRaIGnAE2fpJk24Y +Supplier#000073695|,0,FXawvaXQwUmC2ftp +Supplier#000073722|owmCn4Kg7v +Supplier#000073753|eMT5afD5,fXr9v0zF7COxVUdB +Supplier#000073779|xK0sx1b173,UO4DCx1r7,nx +Supplier#000073786|DdV61X8ixY56IyKAHoL2wM ALbJ4srj6XrEAXq +Supplier#000073809|4SrvPrFsdGqPbyobaLdU541yaYlo5G +Supplier#000073985|9W4ND9c8GRY2 +Supplier#000073994|4i5fJiSbPVXj +Supplier#000074023|xa1xS0iNT,41ns +Supplier#000074041|,oKcAIkbMPGxGkuJ qN83ZwwKBF9N3eHi +Supplier#000074132|bV48wVzb1EOG53QV +Supplier#000074155|aQ01i3V718AYu3vg,YSbquKSm4Lsk8OZja +Supplier#000074173|pbVcPlY62F2HkMf +Supplier#000074198|EMl5IuywplvzZKtWupkynu8L +Supplier#000074237|g 6iRrotVbUNTU syYMttCxnGXc3 +Supplier#000074320|CjAPtXz1MrQt7hCRpG +Supplier#000074434|a7CQlU,8NMSS3pBAu58,38zm IppytkT +Supplier#000074445|Gse3y3Bc7YwuvXH156J18dfZKBl3b1SOtpYuJ +Supplier#000074594|KZP275S6CSsSIVZ9rWyI +Supplier#000074636|R4PbXH,Co2I06KgLbz +Supplier#000074678|rlxke863ZJy21 +Supplier#000074799|IsnAgsfOL48ftwGsqNtogxYxRDwDygjagX +Supplier#000074820|J5UQNlrezBcVIxHF0dvaqJEh882s +Supplier#000074854|AeFFwSstSymV8ni +Supplier#000074964|fsjLLuev1tPzhKM +Supplier#000074969|HPTTPDZni7k9,mFpYEw +Supplier#000074975|1gLl3tYYM5Qpn654W1 +Supplier#000074985|T8BBScsBETQaTIPLjCUW9tQ1nJlTX +Supplier#000075055|aQ3Hunn,x4jyf7V7BW0 +Supplier#000075143|fHHH8iHmciBj9rFcSUDZPLdOCEXgzV7 +Supplier#000075199|QZ89t5cHlbCfq7IkCVXP8AI4E9HMtkup,zn +Supplier#000075256|BDoQyWtfoMgmX5llN +Supplier#000075368|xAnmNIC0cgXZXR1o2P86dUrpPJ +Supplier#000075482|cK zd7k 4UFNwsu3NnChhpqmV +Supplier#000075563|ym46WYOVwR08zPZcXdPphDUTv5d0BnLfI,Xo3 +Supplier#000075564|lLo3pceXp8S5PlkfoKyHQE88nKcxop1 +Supplier#000075611|RTiQ6eZfOl ZuC5tG,S3WnJO +Supplier#000075710|h382hCbkg5yUPz,rlPopypBn4,W +Supplier#000075749|un52hxIofVUKsyuHzCGD +Supplier#000075784|nEyx2vvthRyT +Supplier#000075818|O4mW38Q5ylmS4E +Supplier#000075853|anjJcwwDujtrKvhS3lwBPNGVOcw +Supplier#000075870|bhuAF4SLKmqIe8ppVRe +Supplier#000075929|ajDtV2v02Wl,mdcRXgg8Q +Supplier#000075938|76VM JzrfJUz2emDZx21wX4E,4VIhX6H +Supplier#000075992|zxiziHnFlM29PEK,dMWdZSfVaukQu6 +Supplier#000076003|hZ4SqtpXVQB0 +Supplier#000076092|K6CUtixsc4T9Flw +Supplier#000076095|5i6VCePT7aBwrptMqf71s,,xkv,J +Supplier#000076138|CENFK yereyUm7gMLueXJisLZNJUlzZkIGc +Supplier#000076268|iaStvQ0L0r +Supplier#000076296|2soNuogFK0tjP1 AJxepBIhWQ68wDxF JcjZTs +Supplier#000076329|9Ald0dyeuJ BWV3i3eVDU,0 +Supplier#000076363|JXwZne5FZxfA1td3Ara1dUtgq6 +Supplier#000076619|Z6c168gViyfGx,japx f2MlY, +Supplier#000076751|sB KRoOGP6CM0rQGECD8VHL4zB +Supplier#000076852|eEMvY0t3Bz1PQku8PM,Nw9MNa +Supplier#000076891|nizvbULHGaYx +Supplier#000076929|TkJUbymHPzx7kGygN2LsK +Supplier#000076961|waETaQK42x4bIHCToQad +Supplier#000077074|h0AgWfIHAZzZs,tSmJi2eaQb34 +Supplier#000077137|zadrQWqeuWhU +Supplier#000077163|ByeKAARvjlgqRhO +Supplier#000077181|JqFA0fCeBy7ry7 +Supplier#000077234|BApUGxWyJJZRXm1Sp98NF EtUv7rgpI +Supplier#000077311|cyNunvILDmlmUfFuWntPVJ3SdMtjQQCwMa1a FfP +Supplier#000077378|ijPSr9lP7vD +Supplier#000077395|ZcRbkvqa7O3KP,tGYMM +Supplier#000077396|ObiFXQYrd4f +Supplier#000077445|mDtOtREgFQjlwWHLcVCZJhH +Supplier#000077451|81ToHXRLuT +Supplier#000077559|v332S6RbLVcqHR3xgj8gwJoUOZ,scz +Supplier#000077590|C4lgQleMdjekFU4ANzn2IqUS +Supplier#000077610|8wOAXbhWSG1YtIGiG3lMb +Supplier#000077646|GT5YLD8CkWoYdMxdN +Supplier#000077678|o3BIFgG1 G8g6P1BDPlo65hMa +Supplier#000077684|QaHkbQZhrB8vbf6Z +Supplier#000077708|IUztRtba,cCa8auX8tBQyNnJ5tanEklOX1VR6 +Supplier#000077762|edLCiKYv 54dd6Pk0zQ9GrEWcKjyY3Mz +Supplier#000077808|LT0OA6mVISYO1QU7i +Supplier#000077944|AUgHsqu1aHrop9XapwD7LwJ +Supplier#000077948|,6fTGICR7Y8rTopY5s9lS4yLxMcG4g8 +Supplier#000078007|6jeRHFDU j3pBr,hD,ZDssDSRDI5ubdZiJaex +Supplier#000078079|B0A9kOC1mvo2W3h +Supplier#000078115|CYSUU 3mndmZ1xI5 udYWtoluvNsc1ELf +Supplier#000078125|rsBewTWPhq2Ao ,D +Supplier#000078163|plrVEeJfwJXYO0mJ4ffKXHx,9noyG9bnIh8,ty +Supplier#000078243|y2zQZXNM4wnHTL6ctbTfcuw8FLS +Supplier#000078260|N3TxH8uH8PQMsmnw8 v8ewR9psO98Fvk 63zy1 +Supplier#000078355|RuEC2hXyZUCe4aoklpsWsPK0uX +Supplier#000078402|zp4OCibk8khd +Supplier#000078504|zpC5EWdEI1M79zUWaoLWz6urt +Supplier#000078508|UD9OJ3PkDV7TMMOvw7xlls +Supplier#000078522|P,tZ731xSAx8r,le,pJ2rZFF +Supplier#000078565|tDC3sykOsVD mExIcKBN +Supplier#000078587|DyPNozHO3aYKSXILtlkcx1TgL +Supplier#000078631|grkD8to0ck5hmTsB +Supplier#000078674|zxQ2oFvYQg9M4DaAb7XxuFP1 +Supplier#000078792|TZ,8Y xqq662 G29Wx3Z6WQ1hUa +Supplier#000078916|soDBR5hGRqsNkscUObnye4EuRBGmND8vly +Supplier#000078928|qNRA2afKmzDjReD +Supplier#000078983|uqgYPWDox2rB ddSqD6CKMBwZTIgC z +Supplier#000079050|sVGK4Oo,P6579N5d1 RNzDWHmdMnwMvN +Supplier#000079095|z0NlP1mM,3ODcSvLILno +Supplier#000079130|yxTmVsvKlfQkGFm6sIn +Supplier#000079137|dOUbTceSSYgLL6pg +Supplier#000079145|LEWqze8kCQx2XmCaXWLTzqPc +Supplier#000079152|4LqEai04L2CXAGrzugVkyC8YepL5y +Supplier#000079180|Ke6hT5c9WhPp3F2s +Supplier#000079201|eCmjFk mn0f4sCP5GtWwVPuI +Supplier#000079206|iDaYUb9sNIE5JXoa5cGMkJxM4Zf9fFKX +Supplier#000079209|,KQ1PsSfafaUCccrdl07PWS1D7F,742wdu +Supplier#000079229|kBSEp86M72ez,I5 0XbMRiU +Supplier#000079254|sEYPLyvgE dDbFe,bGjClxr +Supplier#000079265|dnKhQe4TH5y7uSb4ac6kF9CyAV4sn gEfe7SVrJ +Supplier#000079302|LqHRQ2ADaJfioBFyTtO4TQF +Supplier#000079358|Pa4sUxjQaUISrPbFy13SQSS9WFTCKtC +Supplier#000079398|zK8z4FpZcC1Q4n0Et0QGdn +Supplier#000079453|ozxXu7OhfDP5 +Supplier#000079515|IM JDiSWWusnOAdXlgk2C7OflF1mUCsee74OBOD4 +Supplier#000079527|gwst0,drDPGaU3 bHypVPS1A9EfFerRfNSBFYv +Supplier#000079624|SJMIz6Vbvabj5L3pQI,7X +Supplier#000079634|fJB3sHuTIRoD6bbzdlVg15po60qR +Supplier#000079673|lV7I9IPBTDjErrE hWT +Supplier#000079781|AM25OlkGrMx,FcrVFeJshwBeLjO +Supplier#000079804|sndR9 h8LVuYYcQrZqzwyF11RRTbs +Supplier#000079922|8QYarC,aOsap9c2AlIR3LN,Wjt +Supplier#000079944|QZKye8JsB7M9n02hF70I,QKrVhGbMcSqhM7tM +Supplier#000079957|Hq2RpQdKPY8oqr VFTGqpveKV +Supplier#000080015|r9z5QG13h4YbH +Supplier#000080016|504ZAgNOcdQyhOuvbi4Gfi72N6b979mC0 +Supplier#000080086|4NAWf7pZZEImSNoiRGBlBwZ4y4xyW84SqAbdj +Supplier#000080114|iXSckJ7VR0N21pjz34xeqY1LcjkCip +Supplier#000080271|jz1KAjzv0wfkKtx6SIP84uxSbN4uRxVGVjCjw +Supplier#000080297|qNdPAJqOgOwiMJ1moOhx,01caiQEupz1FW +Supplier#000080341|eWCCzByMAVF SPlG1ZIJ3zFWERZqyOX3Mr +Supplier#000080380|JCtuW3rGPXCIdSIRV5NZ1,zLkcaVUsVjcoGE03 +Supplier#000080444|RKasZkhuanIalj,iMKrIveVthJiNA5OXjV5w45dk +Supplier#000080459| 0qdwkOcEwtfVwzQkOunMtATphCJRqto +Supplier#000080550|9JRf1m3hGFYt6b8fiBfrls1 +Supplier#000080637|YyoJocS5LXgLzjUkKli,1KYaEo79qZFKMf3z8s +Supplier#000080671|qJLsUIzH,KUwle0cpLOPFaDE35z6ODL9CX3m +Supplier#000080749|TSnhhzRikEpUQyguUPSIHmz vT0u0TlDW93 +Supplier#000080762|XgMhKztowzuuVSc,QptK4oOIiQD +Supplier#000080778|aSnkeM3o68 +Supplier#000080803|75hPkZrlMEucAPqCk +Supplier#000080863|hakqyg0n Hv86l0S8wYzBLU2HxA9eJXrs +Supplier#000080889|zdJ22xBCQo4nPND8KlkUuj +Supplier#000080904|TxgkR DM024aj +Supplier#000081034|xbjgpWVQs7fG4 +Supplier#000081039|07qpFZCAnRDYBpHtJ27U9VTsDu I VsV5WZtjUdg +Supplier#000081057|LYUoB0n8umqNiA29fODf dCz0OYseEysDoPN +Supplier#000081069|KyHJeS2mO8 b9yz9CZorG +Supplier#000081115|6kXoCu4277SLzL7KeR,wlsoVuxhVDQ +Supplier#000081222|gOTOpIzr99chYzb2ZHJfvvmzM +Supplier#000081358|vt65y71HzExFoXqHV7MCpa6mllqlHtIYQFA05y1m +Supplier#000081371|bLCN0DttAIUgg +Supplier#000081586|2MH2ZO64VR2Koca8bCOVxqsP7tz +Supplier#000081588|RubxJmmiebr2FPk +Supplier#000081612|cH1cI1wXfMEb +Supplier#000081636|JlvF5YM2cpRYcJE +Supplier#000081651|Lt9uoLtB7lTmh6,AdgT7I,tE5k +Supplier#000081724|lAq3LHj4VgwFe11AWVME aSF +Supplier#000081760|3dlniwPl1ISrf9WR1 +Supplier#000081802|ypcPNZn6 D0J16wR3oIe +Supplier#000081884|KBx YYZ4Q2ieNK0wq4J4bjb9uRJqRWHx5Bf7d +Supplier#000081940|RnklZ6E5pgi8GoH2adB3Bq5 +Supplier#000081953|tFF,ogsQsSw +Supplier#000081989|QuS4Tmz266VNf8s3n2HUbbPvrqM +Supplier#000082120| be4 fD1DgftI3 +Supplier#000082153|cw808J,XTqw34qy5fPu +Supplier#000082365|ZJQXmSa2334WOJh7,t5sc4G5w9 +Supplier#000082466|ubcjeCgozh5pP +Supplier#000082547|ZN6I6Q8QjKFV C0aLE +Supplier#000082591|3g0LSwUUhvZ5JWm +Supplier#000082775|tlfi919dUkMjYEVw lzwiiAQviR iL2 +Supplier#000082815|GxogazWPokae +Supplier#000082823|nZKocrzxuShUuYLO3iXx1 +Supplier#000082826|SCDwYIqYb5nIMI7961p6 +Supplier#000082851|6s7dYxHBs,AjTQLLYull1PFRX +Supplier#000082964|FJXrq8h3Exck9pzeCntwrj,z0Vr75GJ +Supplier#000083008|5wwzc7uaH0G1EMdMyTcCi2OkDHntBI +Supplier#000083042|qVDAhWA2rOtiR52Y1D +Supplier#000083204| RAe3zJrRHE8wG +Supplier#000083333|KAJdrMkV5NWUBnJonTEUdp6hAGP7BI3EsgR92x +Supplier#000083350|ODUL0XIaLEx0EeDXK9O +Supplier#000083394|tb0A8 12iI9QGhqp4hdq0SoYh +Supplier#000083432|YBjfNz7uBhssg +Supplier#000083503|UThALq PXdt45hv7vnaZ6FJtkXVN7bGXldHdu +Supplier#000083551|6OIxp1x52AUs R6Navu Cu +Supplier#000083558|WV,3zcCd7KZwK7fOoWeVzLJ +Supplier#000083571|7XSnAfydzwensSZwunUhx +Supplier#000083626|50ugnLgCRAdZy0Env0weLJ +Supplier#000083690|Sr h0ociS5Y1NaUtKwo +Supplier#000083753|wyUiyS7k4hyvs04XxsVggRkq LMQoYcNti6xYDbr +Supplier#000083778|Pi1nOn2SkysHd1k8mhOalDbgua +Supplier#000083780|wKBsH,q72coN1G,g,lyXXZ +Supplier#000083836|zZE WzjFbnTWOiS +Supplier#000083848|U REsxKiWNAGYRL5 +Supplier#000083927|YxmY3iyJC pOKIX6F h0QH +Supplier#000084060|AiHNeUg3dyVJ9khS Y73eMsWvlo40QQykZ t +Supplier#000084163|cbd6c8lQIMSd0gWozWDCX48KIH9cNNj +Supplier#000084199|BfpN2T9e30eh3Vd +Supplier#000084303| ymXdRWg3 SGkklzCc4coPC +Supplier#000084311|O27Ia2QKkcOXhssKN +Supplier#000084331|mT2gJBWt SaFeL9 +Supplier#000084383|zIZaoVOGqGJwfCHzGqqQdAAkHangpiQDMnB +Supplier#000084393|XAU0lZtskvl850NGHh3OfXIsx4fD XIvd2Sl +Supplier#000084394|cWI WQ9moCphNxFvjRo +Supplier#000084421|XKQEWgO3yDV19k8pSjfxJdVEWJDHRV +Supplier#000084624|I5UEhXjbfgbmzz1cElnvYhRPEi3DqQzp +Supplier#000084647|8i6HwfU4Bs7glfjK5VlvXUT9NtyT +Supplier#000084673|6XcfDduVeLTajtswNdliqqbo1 +Supplier#000084688|Kr5eJtNSPPmdBBD0zY +Supplier#000084738|YlVGqe0uB17zdhtC22YiYUYypARZJ +Supplier#000084754|a2HbM,PGoPaWFtZz2pOxGVHPZ +Supplier#000084772|h,hY1Gg,Z3GnQmia6upFo6BJ6JpmnRS +Supplier#000084825|IgHf0WpmLoK7Nb1nd +Supplier#000084955|NVaSf01jkxFJJdpkb +Supplier#000085015|VkRXDnvIu39o6XQslMJ +Supplier#000085039|YDk3YJGixO2FqMG1dlfZ +Supplier#000085075|NvFv8Uk0hOVIKHR a2CwQR EF6OYd +Supplier#000085200|JQ2jbwtGeR4MjS8CzUCP26VWprH6l3ALYgrN, +Supplier#000085262|iLN6i7HAVQTg ,HrZccEhXvz3ErbpvH +Supplier#000085294|JsCj5e2EsydM6s +Supplier#000085326|USojkH60EKzJtqT4tHPIsz56EGAw +Supplier#000085373|wLR0gF7YGgQ8B,6E oTB +Supplier#000085402|GoF7q6YSbiYndjHn +Supplier#000085405|aZXVsJNExY faBg,oYblROHBSivB1kmszy +Supplier#000085447|vs1VNlUwhza2LlcIH8UznFm +Supplier#000085472|6krvXLKWYwcIWkD3Yobh42866fTnCNimPK1Rn +Supplier#000085527|SPOS1mrZaC +Supplier#000085603|k9KvvOzSl7sTrM,U34hfngs1aAscz0GU +Supplier#000085649|cvH7b8vNOhqicfSarSzRli0L4Rl +Supplier#000085667|fXoC4VjP644Lpjq +Supplier#000085704|p aWWtk9llsZt2an3UdUyTx1bIk8E5 +Supplier#000085770|7qKowIBN915Uj8NcVQv vO66BmzY d 5fwATYZp +Supplier#000085785|GDnauoQX4QPxD3C7Na8G3DL7JsaBNSQP2 +Supplier#000085893|P2PKkggfcoobQUQdV,WA3YgcKX2j +Supplier#000085896|v8OYjRIUZ9H +Supplier#000086187|mZXgGuvrXLHzBnd +Supplier#000086200|JkXNqjRC,SLICU gCyHnFePQM9xTBGg +Supplier#000086262|eOCKD7QXXM3GyaYkuonrle1sp,wq +Supplier#000086284|4XmooLOUK Xg8Rvc1rP,zXozv4c5H6aXy6y3H +Supplier#000086303|MPDU SZWfsMqWgt +Supplier#000086397|UZ4plCmwGHKVkYkDSc0 +Supplier#000086408|n3ECp 1NdUDdXbiGDuMYfRe ceV +Supplier#000086418|o5 jPWc1EYJrHVutc F7H +Supplier#000086497|WdmjjzDyKY0Z7Lf +Supplier#000086500|kVKUDqMYklBeVEPb9gVE,0sA0U 8wC +Supplier#000086504|7TJ,jivhK53,Kp1IKl8h Qy6A +Supplier#000086562|gBlmSjAM1b +Supplier#000086664|y8Ee6OD1kK9a2VOZGRcda5nIF1we8Jf5Wn +Supplier#000086688|rpqXp,UcT7zvf5TojCCDgqk2W +Supplier#000086735|MlqJAz7d7,7YX5YBRlaBL6SLAJPen2b TQyvfB +Supplier#000086739|BwMv3DAD2dr9OLJHPN7hfQHOlbBi2Xbh +Supplier#000086766|1qHfv10CmigHQrKn2WLSJrHvgbNAdOMfsYQ +Supplier#000086850|MmB2kZ6ABROOardWPFOpUBLOfuBSxx4log5xr5 +Supplier#000086892|saJL1G2SFxhKvsZMsUiI5DPHYXVcL5n +Supplier#000087053|gdUUURuaui6wHiK +Supplier#000087057|5MwVmnaWNvfvueRHewDjpLOCM2rF8d +Supplier#000087080|T2ovILwuzadRHxFaCf8TzESWXm +Supplier#000087199|vhkK5ZNYPc6ikg +Supplier#000087241|RHhonS8ogDqU1O lBbSkU217ChqxzzCNWq5TF +Supplier#000087242|A9bzVZe45GakTq,dgSV +Supplier#000087296|Z3GaA2rwNlWmrw26A +Supplier#000087348|AHsfqou,Teui4Ao0Vg9JZSNR2X +Supplier#000087467|GK90Cel7,oN2muBIFSJF5CL +Supplier#000087475|fq1kRTbkZ3hCVBxCEwFNIDg UxSNcxx2k2CwWz +Supplier#000087535|j3tZ592f,jvNW43wP8M4Acl34aksO6mvOgKGJ +Supplier#000087560|JxnE2tXnxYUx6n7QeJO3qbVM3U +Supplier#000087654|pXKi4mluHn1QSh +Supplier#000087673|GN0iU1OZdEuzaBmXcGt0P kXL6Tg,LakX +Supplier#000087719|s8b4eehn7FW9HKOqiAPLkh8H0BsVK4dcI +Supplier#000087735|FLYOZtBRv0,dJWHTVtBS +Supplier#000087895|SBoxiwr55Y7MXk2mI6yb44JfE3bJ9 +Supplier#000087903|zhPj 8cK4gREp4 +Supplier#000088005|m0weG5FWRHoBFHd286Cc5vCUJ YlL +Supplier#000088007|vucSJ2,qIwkEv9THUtl5Lsov8ZlD +Supplier#000088012|E 15jrQ,vcp +Supplier#000088013|ShSef4AQm8ThqgASof +Supplier#000088087|6xYyA,Z090Zlux,qivCKybs9GfBp7XuD9jWXn +Supplier#000088181|AUHUSyp8ZhUnGfjdxf7VtnsX3L8j +Supplier#000088214|3Sn5piDUXh6S32gRHW3d0S,N36H6w5XBAX +Supplier#000088252|BSrCWMpD7MDS73bm3z7xma465 +Supplier#000088267|PUjDPFNP26j3AQf4j5l,n1 +Supplier#000088305|aacOnWT,Y36mYke3vQUxoiI +Supplier#000088322|zv7C8,MIwoZc mSEydY6ze6KPPTpcXvuqy +Supplier#000088326|t6 xdJ8tfEEXtHpHCwHHPNpFsvLKr3fCCq +Supplier#000088387|tp9gRZYXjafYSKYPHOfCwv0iDsyj,gedWzwlqdhV +Supplier#000088426|hUp4QyfhHnDt8 FHatFRh +Supplier#000088476|OIYpjcn8u7Xy3BUJLdITnPR +Supplier#000088566|rgJNt vrhOrj1bB4Em3o5eXJo6Un8fHQiV +Supplier#000088719|U squ8Os6OIySPybyYAE2cq2LM3f +Supplier#000088800|1Z0IiZuupG78qkKEabpolaq3WX9g +Supplier#000088811|GK53foCHpP8Wpj +Supplier#000088831|JouR7sGKANRI +Supplier#000088914|yoqslIPwkoCaOSNsO +Supplier#000088934|HHUpW,ja,esC8IHN5JM04fLZ0sA3Ivqwv8MEL +Supplier#000089006|r8kcmZnLVW1pFQ2rrf +Supplier#000089101|Y5Rv9FElR9ODJKs3 s0VQ60dbAy3n3KHKyr +Supplier#000089134|pUz765 RzGJU,dkw8f8D8x4ZaGlpkNKUdaaNYR8 +Supplier#000089296| T3ErXMYVWO19RULJTXT5PZlYdeyyndD09 +Supplier#000089355|Yg15nxNbfCC +Supplier#000089359|kdF5Z Zff0JzTH DjKT6OZcfuq42q +Supplier#000089366|,wZh,x5cT9GPZI25hX +Supplier#000089389|l0V71qgJh3 ymaz4 fAO 3bqUJomd8 +Supplier#000089410|7OHqB52zFIKcTl0lbopMswas,d +Supplier#000089491|lqDX9wosohtyD5Fk7OoICQ8n +Supplier#000089537|mwlciJmxzAoqocjj,Tuo7cU7o +Supplier#000089653|UzaI5KspLnGJbGBRLglm1BdAEeEYkGrPk8es +Supplier#000089662|4R,mCcAfo8w3KzmNR0q2p +Supplier#000089776|ocO9xERSyk8OJUhVxRLfGB20B +Supplier#000089779|5AvET W5 oDwvhJCaPEOKMf2FT3fYOJh4Zl6P +Supplier#000089812|oCNg,Jk6siSxG0hql9C9SQm47kgsa +Supplier#000089876|M,CZ0SuqUYwXvpLNqakTjS2XRBibkiJu0xL +Supplier#000089910|2B6ixOuL1pJpFysUXaIi73 +Supplier#000090005|evUP,NrU s6yKBtpizcELSO6v4 +Supplier#000090080|DoeUt0MCLuqUSqNi26dKPA2H +Supplier#000090084|bKPtdldg4jVHsX1DVml +Supplier#000090143|338XlQQoAwsSyuVllgmG2qkr +Supplier#000090174|ps9UAiV1v24iLJyHvo9 +Supplier#000090256|z5cNsoA54035smMo,PCW +Supplier#000090398|ABbor1V2fGj +Supplier#000090597|ouWjV GEC7 aKNYIN00 +Supplier#000090649|rYY0IOpefpan +Supplier#000090664|G52alVdyFYRTO,HxcojE962Sv9Ft7Im1E +Supplier#000090699|g081TGsWsKz1D,lLZLC +Supplier#000090733|fuDxHvgtbPXClLHopHZ9p5ZX +Supplier#000090758| UyU6pJXWMGdX7Rz9JlvD6ea1LPIYyZLTcY +Supplier#000090882|7hxXmlPk4KFqYRoU1B +Supplier#000090963|At7CdMZFormMb,GEycHtd +Supplier#000090979|uRkWKCyIw41U +Supplier#000090986|0lT4B71k bjLM4I3F3B1p0paMpdUHvA Jz60Z7rg +Supplier#000090995|6U7FvBnzZJQvcVHKRYC +Supplier#000091037|Vrvxb,Op680Ry 9XglVrPQjBORns hg +Supplier#000091056|EYXFls6wK2,GXm8R15r2TgC5lod1aQ,9 +Supplier#000091065|c1TCa6c0DI sG9 6XqLED uNFasAVIi 6ZOUw +Supplier#000091160|QwyhtmVrZD +Supplier#000091174|LpDO47m2SiYJX8O5Zf5O9,V C,DuZgertw7W8n +Supplier#000091257|kxweX3agZ5oE05vHwPHsHYPhZAIQGW, +Supplier#000091334|9TinA9gmu8SXD +Supplier#000091337|C,mwA1GtRkoZbFFsGHJH8A6nrkj21 +Supplier#000091406|Gm96GWh 2rrkv5,T,IzVg3z4VcpJg0 +Supplier#000091411|k1q q0AhIeb1czjOn8EYRjAlXH50U7jUn6aB4a +Supplier#000091423|,DAzituJM,x +Supplier#000091498|HjZwIvDCaJV6XIBMTV3FtAktGQWT8xivDv +Supplier#000091541|0DV4eTPu,HrVgTivNwx +Supplier#000091542|,aSVNReCJ,YcK0FnYOGCrPSpyl +Supplier#000091639|Ica07NbeRVcLU6Q +Supplier#000091657|2YnwK,XvNuz3 +Supplier#000091661|OeMPz XAHRt57xTCRFb,H0Kyh6awCT7AZIdIL5d +Supplier#000091906|lCXrbgjXaoE3BxxL87hYgR +Supplier#000092011|Pr0EklyaMs7S,5OpW 5HGXE HYu,3e12qkVgc +Supplier#000092138|oRCiR08VuklAdN0qK5d2n +Supplier#000092187|qf0RSqCfU6iJSOyH3uJz7x +Supplier#000092269|VcyH5lyI9NHvjlkx5CNB,K +Supplier#000092288|j2LN1ziI RBoAMxsDug Lugsz +Supplier#000092344|embR4M3VtKztRUmk1adNciw2tT89HXXEYjH +Supplier#000092399|WBeL67xhczt +Supplier#000092440|C5Bg1m7b2IOZRPlRKAiH5H +Supplier#000092519|2eezVlC8GSkMjzwh1ZsoQc1zv1Og +Supplier#000092525|WJtCL0KgMb91CxQjgud +Supplier#000092588|YRAQbtA2EBXMVAzTfjKVX +Supplier#000092617|I7zR9DeX0kKmC83oq5nbWGher7eD62A +Supplier#000092626|2cGsledAhtAjO1PB7u85GmstO5z91U1 +Supplier#000092686|UN H2 vNN7eV +Supplier#000092697|RyLGwhphp3k62CxsRaoh1qw9y +Supplier#000092730|XNbl1iIIcyrrhSTq7X1WgU0iVkgXDgDp +Supplier#000092738|ChzNvitDdkKe W7dHrCGIBTo0xSYT6zc0,p +Supplier#000092750|kOX3CDsakZecA3xmPHrOWBCmK6MvWsk +Supplier#000092785|FZ40E1vArjuCPgMmsFETD9W85eQuAFU6G3psp +Supplier#000092839|V,PKpadW6ve0,AjJ4j4sV8, +Supplier#000092865|s2iKdfzZEWQQqEcze +Supplier#000093046|TkPGgFzoVyeNX6 +Supplier#000093209|,QTlAj3H2naAoZ2c +Supplier#000093274|dv77B7tk,mr8E +Supplier#000093275|2p8WybCDomDC7hvxUSC86uz8vQXRq,q4ykBtm +Supplier#000093294|o9yhdRocuS1 +Supplier#000093399|yV6fBa5Rw9Vr6qgj1 +Supplier#000093401|GktS9L,xQ24s +Supplier#000093464|OoOasSNQXo002jhNBgNsQ +Supplier#000093514|vIsOca2ITqg7iVw +Supplier#000093597|gsNqGQ6qP7loSOjKuokpT,MDS 01yR7xZRuTSGr +Supplier#000093617|8B9N6NcWQrUqsdJydrycKT0o cRgul3w +Supplier#000093652|MtN8tXIEXJT7wKUAUQsEUWBelixVi +Supplier#000093678|hjIE SzxS4wagehQXQR +Supplier#000093716|yVT8NTwmqXnhneH3dj1LmM8qA9lnQN5qP1szgI +Supplier#000093720|SGrRJXruwoQrWoTiNcwqEe +Supplier#000093766|CuyEMDUltj +Supplier#000093780|J3FAb70U7efbcaVt7s3aBDGcdyMOmYBlmRL +Supplier#000093812|BAETGvWiME +Supplier#000093876|JmkqdyAqnVMZU6ruIi N19 IoCrZIA9H5BcDcdw +Supplier#000093911|9lPuZZMv0fTNYpbxCWNfPJ868BI,u3CwwI0ezjP +Supplier#000093940|6jMCO Re3hVarMCfqgm 1CsKgYpa2sGrBVWr +Supplier#000093959|2ADqFf7mmTKC79PWlnL6P6Z1 +Supplier#000093995|DVkHsfpLDXyJ +Supplier#000094009|fM1o0VqDTA43O +Supplier#000094025|poacoa2eVxYorW,D1Vlf +Supplier#000094039|hWmbcl6BMVGLbcRGuu UCCc0qqGTMEShirGCr +Supplier#000094249|FQPS,DGTktRkbMnFxflOd9jwf2o +Supplier#000094268|pv0scLSO4fbYQhTa7lLl23dT6lgnFh2v +Supplier#000094271|v9nV4YQWkV9xpKfMyemDX7f5AEEJ62j +Supplier#000094300|kkvlnn3ijczENErny,OWJ0 +Supplier#000094575|XU zLbvHLeizLNl,W3H4 +Supplier#000094584|cTwUU6e5EJmEUpBcvpMrB4gs9xFB0qMTEEkyU +Supplier#000094585|OaCwDvI7ech4XagyI4 DXeihpqy +Supplier#000094718|12q5wrm8SGKEWMqTKfDJ6ZD,adLaweZ6WC +Supplier#000094839|Eh5BwRDsOLl IAmsTxx9VnJ84Q88 +Supplier#000094857|WEKdOlMItuj0Ru +Supplier#000094929|A4Xki9RmGTMEAX1R6W3e3K4nDXi +Supplier#000095207|yv0oVNksERA6ndY7s2J,jTC2jEHMRlPK2 +Supplier#000095267|3xxAhd2L4ltilyi0 +Supplier#000095318| KOF0jofVESZTsYAr5TIZNgqzr0VL5A17hJ +Supplier#000095466|NYTwQ 6HfghUK68,KCb CjGOCKWIMO +Supplier#000095553|AVGBrb3AmcmqBrYs5i4rBOiE1y +Supplier#000095595|WWlrdOxIt7HF8vbGz4ttWLRnYb +Supplier#000095615|F7MzYcDlTWayJS7y3etW0j5mRvk29xcwk +Supplier#000095642|CJzHBtmDq,MryqFbWH8vT8FdBQW3QcCQks25tc s +Supplier#000095662|puP9upTrO 2XTu,MRwV89geaZ0GN JRKYR,e +Supplier#000095706|oWtImdakeZTu +Supplier#000095754|uhcPrmm03Cx +Supplier#000095781|89n,hNTtmmk0G2BylyG7MB66Vm8NLow,KXNl +Supplier#000095943|rfpKaNkzd 4 E +Supplier#000095946|kmc9XTsW9iGuurIqbaxarJUS9I8eoS2jh +Supplier#000095973|yi0fIxW3l,2p4WOK6bZsovombd +Supplier#000096047|SlGIiV4Vgpbfv3CQxa05zKUcJqNTfZRc1aZJWn1U +Supplier#000096067|Q8oVGoLSoK9j4qHUZ +Supplier#000096100|tgiNcddxoEPAjTAIbNwAozwq4,,GqdV +Supplier#000096112|M26Gpy6104WiqxwG6w0Bb +Supplier#000096121|ZoO6MQEAxMU2dCGxzQi4VS1JJv +Supplier#000096243|L,yYFHMmM87Kk +Supplier#000096297|ewDl8XgC,DFgiwpeYmrIJ4DEGUDNq0Ahg +Supplier#000096361|z2etrYL1imckx +Supplier#000096572|5Cj,LSUZR0hsc1CI7mFFgl4nmDaEN3 +Supplier#000096634|uvb6PaFRO2aMVm,5W4zr +Supplier#000096736|19ngsTy3IcvYYYbKOvqZ,Zenw5o1wQ7Vt9HQu8dF +Supplier#000096754|xUtMnTUGy,vzISI003s1X2QnHUTpGAlhJrE6Vbk +Supplier#000096785|1g85j3xDUC,K1,fvIy +Supplier#000096878|yj0BUTWaqGb8OIAohFduVRW +Supplier#000096906|JLcL3J7eCBzjgI +Supplier#000096927|xmUux6XaCT63KER5gp2aXDfQVgt9uPI3 5p +Supplier#000096938|ksEvbMvaXzB6tDc4,JNjmvQgLrIWel1Uly4VZ +Supplier#000096973|Xaph1uo9EZOJVuC5 ohDFKG9IyuOZ9c7 +Supplier#000096988|gipEXuCbKqsMHjs8FGiUJj77pz8cgrf +Supplier#000097200|pXDxRpXe7XS7pAfNvxD Wh PdCX +Supplier#000097259|kYYDyzpOBPzAY3VL4jyBjD5 +Supplier#000097260|e2mDuGHzNPwXEX8adhGLYwnONprg fuAb +Supplier#000097302|ScFv2D4n38cT1wFPMdd1ah +Supplier#000097321|NTGEgDPc4O9th3kCfXsC0vFgxy0R4 +Supplier#000097372|PQ63ZiIxUxPqY2aBAeffJ +Supplier#000097436|p8tsaYQ8BRvpksp5gMLrjdTl s6KrIh05JeShb B +Supplier#000097564|Ya0Dujr,4rrlsHWez15k1uaqOo5kOrZt +Supplier#000097577|PWfv5Xv hhjH18tDLqPBkGqvfhPBm3yBE +Supplier#000097586|hZ38vxAnbZGXZurATK AXcRq +Supplier#000097716|DB1S2fo660Ee8Q1KPX3CMNYpZcAyNkhwmn Yq +Supplier#000097719|gkWthAp34avrPoJncxLSquRsBJcHAy +Supplier#000097806|VbRexQOOS18CK6CqUe1slk6K7FB4 xLC6Q7 +Supplier#000097822|tQRoKcSiDDZ6uMIHxUpq,vZ +Supplier#000097913|VMRGWNLIZUJkEz4G82UHBORvQeMFM07lzmOWd0oC +Supplier#000097914|xKgbLgEMpt4A8X +Supplier#000098296|0Hu,4y1SjVE2SmQLdqg6o8 +Supplier#000098374|,jfW,RbdNt0fy +Supplier#000098410|RpCMG1hSyNj5nvxA8 +Supplier#000098420|lZ,LHDoaLS4BcS8CRvcnFJ01jBZsBJ4gY3P +Supplier#000098546|lYtlZ,ooJSIVa7QHK14J +Supplier#000098693|VUMNTSyvfvCpX tsd +Supplier#000098697|46TgbRu2WXUOO8P +Supplier#000098798|ScNZCyhgMoQIJDJis84aCfW43ok +Supplier#000098832|yJILtMvnTzM9qyChSY1YTh0tfQDmP9saX je +Supplier#000099051|P7OHmgn9AeYbWYXz042FS0KF3mRcwb0zjeQc +Supplier#000099063|lHO9RdM1B9Bwwqx0z +Supplier#000099124|a,iE6JD7U6upo +Supplier#000099230|bqCVXGWb35SBAN7O82NQqSlf +Supplier#000099426|5Mh7OV0MaXNVBdKl1oCuBL5lRWYvrsh +Supplier#000099436|EcMajjaKYLlGXG nBpbh 8 +Supplier#000099478|M1yoKof1gj7fIQjhztVXl2q +Supplier#000099485|zMtbSyf0TzkO +Supplier#000099501|R oi5LGOOut9C9 +Supplier#000099503|cTOVml6EdJCjZz0VCf +Supplier#000099566|Jvp3UoxssG3246WnuUcQ +Supplier#000099605|5YOVtJHKx,FEcQRp8jdchR0rTqxJWYdQa +Supplier#000099624|k4s2ByMOoa +Supplier#000099653|o4dS,X0X8V97u8 +Supplier#000099660|HHi 38ulFKFDrHm9sidJAxvAzS7JUaTii +Supplier#000099704|RCZ WsjlUG7T 9tnQdOY7IWQk1P3i +Supplier#000099718|1JOiCxsXbXUsDJ 58X0ij1LIP2kDtq +Supplier#000099800|KuFR9RsIdNejQqJ4 dz8iGW +Supplier#000099869|2nBkLFPIAMlCw CZcUL wX,YzB4 +Supplier#000099877|OXV4aL9PkiR1IboxY,tEcVP75 +Supplier#000099879|35C4xGqvN1b +Supplier#000099908|FofX9,hkHFZe02sBTtbitDUk1pqJFnNb +Supplier#000099931|GGROsj 7tQzFgJMlOmqGaH4 +Supplier#000099955|,bZnsB7Zbrf7,A d,5xOVrsGS +Supplier#000099968|wYIJklcPCTYijWvZlp8e4IqSZJUO5bNQV0zjA +Supplier#000099980|rzSiQNPTVI,nLw3BDF,eVMalMRuW +Supplier#000100072|B1dtxNBu7X7juRfNOH +Supplier#000100118|zoRob,EFMFtVVToK8dSb +Supplier#000100145|Wx9fRy,Jf4 +Supplier#000100195|jKegGC2FeObXm +Supplier#000100226|M3LZzZ5LZOJaO7 s37 +Supplier#000100504|,nfMrnq Xvzf7ZqYF6wIQpYS +Supplier#000100683|r4GWgvPoGBzb23c2IBMLAf,FNODn6S +Supplier#000100689|MwZtCQPfbM +Supplier#000100690|90llffuqZE eYp51rW +Supplier#000100711|5H9IJbTpbj3TJTnQc1uOUrhdg,ROtd1 +Supplier#000100735|2jRoUgG3rHc +Supplier#000100761| yNpj37lCpopJoCrZa0ev4h2fK7MgsC1CjSytr +Supplier#000100768|R4CpXPXF EikbbtPZW8y2jK,owAKtaZbxW86 +Supplier#000100778|o,740LSjeWLnn4GCmvl7PFFss +Supplier#000100798|IoadbIGvyI9nhJYrZnh27E9KwrLbdZ +Supplier#000100873|miHKPCW6no3PitsdVySgQhALF1dJdX9YtwSnT +Supplier#000100982|omt3UGIwgWMLWZHtO603QaNVg07VcY e +Supplier#000100992|rkKRTpRv4K73886QKDU,paFW +Supplier#000101008|w7DYZZDdNEPa5s1Dw +Supplier#000101172|NsYnPeYka0aGq5oO +Supplier#000101327|spp1yahFPsyn289sPMAtMx2ZG4AN9 +Supplier#000101335|QQhhsBJh YuW G1J6YJqbkNLweriIGdjG125,,h +Supplier#000101426|Ark5,ZioTdgPtPg +Supplier#000101448|TSWKY7likSLiCpLzuJtmqCoooainDGVs V +Supplier#000101499|RchB5H76K4Q0fLG4TzR7zNn791 +Supplier#000101548|Itb1Qw4EE8f1twKVJN O +Supplier#000101568|SkQbslMUwCamczM35i,g,XI qVVF +Supplier#000101584|jttzSzqVc16zj0BDaB +Supplier#000101709|JvASh,gKnsUdoYtwPFyxk42rn +Supplier#000101711|DL90Ok443IBX9x,M bWrtXBsix9 +Supplier#000101750|,i0QEwSXwuqRlgvYA3q +Supplier#000101752| Wl79DYcgCdCeXfWFrxhdjC +Supplier#000101774|2lAVAjhUwWZhMvW9 +Supplier#000101794|7r ZhtOdf6uh3N59 +Supplier#000101795|ao,4DkXxvR, +Supplier#000101824|3NoQFI90,E +Supplier#000101844|QocreUzci7GsAw +Supplier#000101919|JcfJwa7mpeWOOYxXjbMJwhyhP3pA,DWRlPhPCco8 +Supplier#000101955|H,Kos3RZzC,u cq +Supplier#000101959|o8bbN Y5okKyF53iJ +Supplier#000102202|2v3GpcZcwUiSwJSjanTn Phaiw25e9q +Supplier#000102295|wOr7tynPmbkXhilanTAOXHa +Supplier#000102307|uqAhmZEaTzH +Supplier#000102566|7bOJMB4J0U7cV2HWv5,KI 5YvZBF2zZJy3h42vm +Supplier#000102570|dI8zYwNq3mKu4LrT4BDHHEbCoCnO pfSY +Supplier#000102599|WTttGrFik7tC2MxgU9 +Supplier#000102802|MyaYrxJNrrpkmBv4N5K +Supplier#000102921|slBcpLv8CWzLbDxkXVC,JFRCcWKc5RVtZ +Supplier#000102948|xgxEuicWsEkzpXFiM9qrw +Supplier#000102966|6WPW2ZIc7IDk,sYLl5U7K3lEvSKapub +Supplier#000103018| sIIhApFUVoX IXv2K0APBR0 TJd4sIIhNm +Supplier#000103056| RlF4wMGgbBxknaJq4fN6d6hjbapPJ4N1W0 +Supplier#000103060|XFPAraGTFETCg9Y +Supplier#000103130|uSoOuuBf79iB1iddsHxTchBtoO +Supplier#000103153|V2ykWmaITc9QUr,DgPKTOHW4lkLMp2qs8p, +Supplier#000103267|nofml7K8x3NxdYN0VzGDMHny7k7IYip +Supplier#000103299|HRhl9gON3OOqPhE4vHs6ZzjBp +Supplier#000103385|IDR0MiEZbnyAbLa5tKNNgPZbGmJctnQ6xTPNP9ZA +Supplier#000103424|9mmWVoeiESNNZLV2xbVk7,fBVv,7LincM2szAA4 +Supplier#000103473|Jwbf oqZne7N07Vv3Eu7ehiK,BUGBq2 iA1 +Supplier#000103712|uQBD1DszJeUIPuzxs0BOhb4,1rxFxo4KMALrF1 +Supplier#000103716|PhS66dWBuPU190iF4g3 +Supplier#000103825|hTyp7y7Bm5006PL9 Gj0q +Supplier#000103829|A94daNGMXHHOxrck1dbhrek8lO,nSVRyPZzJsGo6 +Supplier#000103860|69XxKuGWTU3am0mZ +Supplier#000103876|uY9qfcPKItAWPCo4 aY2ws4xcbMom0J3r2S +Supplier#000103941|,mKdZ2VZfafTUgGd7yf hMi7G73b +Supplier#000103982|pH72bSKqNpJche7 +Supplier#000104052|utVEmLvhSo HGjr +Supplier#000104054|j3qljztqHq696p5JhZr1Z9v,onKQe +Supplier#000104302|AV6pTfZ2C9aHC +Supplier#000104312|zgBbSy85H6K +Supplier#000104450|JAS7JFMjnknRlaQo2VKJQf9NBaVuqVf +Supplier#000104468|GUZysM5sPBwmKXkuoZRqHDeT +Supplier#000104515|MB1ycSFIjWvemZQWwUZ7DURMmqEp8,nHa7 +Supplier#000104563|8UZvJA6fYgl1991sSYv7L +Supplier#000104608|KRYtjAoMuyizJVZ3dQmL +Supplier#000104632|DxaRVqb86B0 +Supplier#000104640|dU RW13JiU9MrVyqY8ivlVTJklbuzAR4N96xdmYN +Supplier#000104647|vb5eSbGcNiy,vuX6UDzI7PF7F,OtX3 +Supplier#000104716|IxEL0iQjECjrenhw1AdF6hJQjFFd91f1,zq +Supplier#000104764|M8Ux3p6KzUD8WAnMLmcDDEzI42h8Ina +Supplier#000104768|d7tGs4AhFnZIsJu7SJSSc5eOcTKRRurqnzn5sup8 +Supplier#000104772|fARfWH,I60l,Mo sJJKCV +Supplier#000105010|AYgSizEt7K,6bWg +Supplier#000105029|lNWVEOZuFO4IZIpwIJIUV L5oMHHngs +Supplier#000105071|tksPt9c2URp36JW4oDS5ue7ck0lG +Supplier#000105197|RJkvKl8rYaAsFv8h +Supplier#000105223|9Yh5BVniJPPK7rC huf3Ueonkx4 +Supplier#000105385|trSnWumctTqn mVz 0DX0z1JJ9 +Supplier#000105416|biOlqKXEejp5fFIV5ivJJxe8pAF +Supplier#000105430|ZGJ9 XLt3SPgyYJ2DJLxvFj 3dVUCOQlAoPMX8Rz +Supplier#000105436|gDYvKwBoMNF5 +Supplier#000105578|cx7MSJ8uI3 +Supplier#000105588|yGF6fIceNvDZFJY1UA +Supplier#000105752|zvr2YSwY192u01yjDhyRM8M3zN3RsNZ +Supplier#000105767|S3b63bF 2aj3,DE08X5a0grLtmL9 +Supplier#000105826|rr8AeFLr8U7uaNlYHE +Supplier#000105830|pxc2J,doB2Jw0yHpGhPm2xqeVZe +Supplier#000105842|SYhbSICdrOe7UlKYhq9ukGzk +Supplier#000105850|bFEnffe2Yb +Supplier#000105877|ugz,1GYW3o o1TMgXqOJ5 +Supplier#000105887|lu8,wMznazj PLSZGE +Supplier#000105993|HlhsYSjodbPF9GB2db +Supplier#000106034|CFLWW2B9Ea3IymXEFAO360zDwBFJ,SmnS +Supplier#000106137|jlTUw5PxT,7gQSl8bq1 +Supplier#000106406|P2hMmInXNzSOQbn5w6wB2gjbTuLoH +Supplier#000106454| tddtRkfaTrCJZ8b +Supplier#000106469|ZiaDSdd,CjvXB7Fj7n4PpUZhA +Supplier#000106558|Q7GDpUzlk8Ou4FktdPZOkAV0 +Supplier#000106590|SUafKrWxTTa Yl539yqavbTWYgXjuSS2S6UGJ +Supplier#000106739|dDgP0UNKVrkjwtwNGLd MxVGpz +Supplier#000106817|YE5rjkYeFJeNaZkz +Supplier#000106823|dO1l46CKbJIV64eAv Pouwxrlfim +Supplier#000106838|oD7BZmV,tci4QVpsbV5DCWkMCFj +Supplier#000107129|QtRxHE kBIQGA FX5s J6Ks +Supplier#000107186|ZumjFS5yQ,NPPb3j0jtmYJQECxBZtsP +Supplier#000107188|b0almPUQQdoBzuRHrRmi +Supplier#000107265|DHsXpBMbkh,ofwb,vFE,ZrSnm,Ckv +Supplier#000107293|0wuLb7TApCp +Supplier#000107399|gp10lQzeJTFC M +Supplier#000107457|bixlluNGn6EPkHQsHfgbt7x9na0In4ne6GHFlBKE +Supplier#000107659|tTmSb0w3qRWicdP3KZnPAGTr +Supplier#000107840|hluOE8UzycBYJ,7SpO5NixdZ +Supplier#000107925|04014f qSyGByx6AOp6i,xVyfi7OTp +Supplier#000107984|SpIr4V6 L8CZjq9oaxPsLvHLzC,6Q8bLH +Supplier#000108035|rUEwZ0AFqMo8szhXYtLMEYQdKRVfmsnTDJmXhG +Supplier#000108117|yVcn515x0gLIJJSAaNIg9wVgC2HfOaGqRsnC5pmp +Supplier#000108158|6y80CZDP0k9uQ,zl +Supplier#000108189|AsfL9zcqDrkSnSg5b1sYpf +Supplier#000108203|Hq3DsRmopq3Qnb,LGKu3ohaX +Supplier#000108212|O VjQLYoW0td2pHKlsjykOiSvSd FMqcQcxY3eA +Supplier#000108415|JpNrE2k1h04tQKQI +Supplier#000108518|V1XcJ85qD7QaVo4BLOjEdzxYg1hBQcgW0k +Supplier#000108558|663gEAETsQw NwP +Supplier#000108652|jujxRK2Y0 xequRbKtUGLbgL,m +Supplier#000108671|gi,1 GMii66wN0J3Bb +Supplier#000108762|PaZwnfhcBjmy2winA9VrhPNF3cCY6rWSZt1hIhFD +Supplier#000108767|i3WowJMtWLqbI8ggYgguPN5l1JW 9F0,u +Supplier#000108808|5Ijw,lZ mYFVI7PQpaGmPr5UwaTb2KUIbYBF +Supplier#000108900|BWUMGhlk Z1CwnOj EPy11XfLBgLpE60ngFm +Supplier#000108911|bSuzOMmJYFjUvoSwx3w2WykYKEpyug63Z +Supplier#000108913| ZgxaPTvMAvL3IEsNNQSW +Supplier#000108927|g36xzWF2X7fXlxDhqZ8c 2BY8DhIgCWKLxk4pU8J +Supplier#000109066|Sfo4oUAIWAzEV1 zOSgOwl3Kj,J3 +Supplier#000109078|wENrnT5Oh39,d0SD84pqP +Supplier#000109155|cduA9ixrvfLt1P6eRGH7DEIJCTofmsAng +Supplier#000109178|R9UEZs4awGCMmP9dg09kzNxx8PmxL +Supplier#000109185|RBpEeggF3qwikdS46abaCs08TV +Supplier#000109248|onnD,uA,f19Ka3fF6 T87lihZk E I,w2wO3FAPy +Supplier#000109258|duENDVZYDcAelIqldDxRYT76UCj12SFn6AOJ +Supplier#000109432|AF,hC8G7BBnkhE cKV2iDw0fXgCWe9,L +Supplier#000109449|VEC1GCmKkRebsv0ya6w0 +Supplier#000109459|S7uCMjyznPkq7QlhFhIKyWQTqcoCq5r2 +Supplier#000109460|4iYYhjYiDAM +Supplier#000109485|mdlKgKJzFYtV9dOJZm +Supplier#000109544|VITD37Ax6BrvpsWIDeFuD3BEzx6390p4 d8ol +Supplier#000109580|Y42DBJ1BUqeeeMaDkTd41t +Supplier#000109585|dUJK77oN386Fryqq7ed8GdWQ7BF5hytCQ +Supplier#000109714|QUkkdWGwYkYYJiAGFgHqhXTcthgrYz8Fd +Supplier#000109727|fiiZ5HLPOCN7x qil5R +Supplier#000109870|7sYwdjhzBa +Supplier#000109933|mub WVwh1q2oru4pZ3CiJ0T4g0h5 +Supplier#000109986|v,EeRtoyQ2vI3oUBtvRsE n +Supplier#000110073|0NOiceSfsv2ZJ9O +Supplier#000110142|2hgChm8Ewr95hhpDQvs +Supplier#000110149|tHKAtGO5gzQH7AmC0e9JKz5ZRqX +Supplier#000110184|NdGnpxULlo2WgsWu72wWmhUbp +Supplier#000110273|Ri0wLI9oI 2nvx80zrNiRZ +Supplier#000110329|hQTh4sfJzQX +Supplier#000110331|Pb8UfBDokzCrdhZxufupnw +Supplier#000110412|uLQNkf4e3ObGYyi3,mNr9E9N5m6j2QdDDAJOgpg +Supplier#000110413|u Ad5hge5OtclywJpXGnWN83lsiSVF7fcd8qbm80 +Supplier#000110486|fwqrR7RadpZr8rhQtG4HJzCN0E6lNHbo64lVrR +Supplier#000110500|WuMS BzLzNTSk cdLvAnCpJQSk39HY3 +Supplier#000110596|Me8D2zJv9TxsVF53 +Supplier#000110620|QcaahwlKX2zcSNspR0YLZ6fFB6jLAtn9CJA +Supplier#000110651|zwo1zbfcb0nlBVV +Supplier#000110654|0Qg4PPYfvbzYOp +Supplier#000110735|JKCeFFKACA4 +Supplier#000110761|srM3r dtEWCBoR3Ym5SZsMiwOJpRxAl +Supplier#000110817|G3aVuVjdCVUvFoeziv0KM51pEMriIDGSX3dj +Supplier#000110847|mz4XbUZtfc97MaNIRdCE6XrCUS14qzar5ohK2vTb +Supplier#000110930|nH1IyxmGnuqNBUro6 +Supplier#000110966|wvrDYgeMb4lklGJzReGQLiq +Supplier#000111019|QiXehY2SWFgUEPdqTWAZgPrgs1jUTvl +Supplier#000111123|gA8Dz9pMA0,e3e,p +Supplier#000111183|qQXddYpIya6WX1 +Supplier#000111184|nYIIAHOf09AY +Supplier#000111230|BMRIFN9rbLCfE78Ju4wf8 +Supplier#000111308|NEgOQ9WfqDHeSb5Li +Supplier#000111400|Pnrj3tvaUy 3dNhr7z2nJNNjudcB,v +Supplier#000111410|Bn6WjlDw55yL0XEL +Supplier#000111461|CphqYLeufZXuQbh75iaWXI,h9VYVOk +Supplier#000111507|YYJvwQwgCIbvwxwJ7tq,r6qlXyrgUp9RL +Supplier#000111528|Fsr7JwW5Uwinf4MDsHugvMjFHxvEJqX9k +Supplier#000111610|MSuXDaX9fzHMnWwntVw7KlRnksj6,2c +Supplier#000111704|qONTCZ5tAOV9eWL16f2gOkS9WKpV +Supplier#000111716|RADK,,dJcRAasY68cwKLTHhJa7XvFZ8mBE +Supplier#000111766|Lpq4PoVzMNNsTdQYZhzg8CG7xPEL +Supplier#000111770|BKg7BmN3ZXvHr +Supplier#000111777|iOfFIEpArMp3NV2xzqJqfEC,iqc041l5Xe2o +Supplier#000111847|jb2,tpGCkkevR,Nt14ZttCsilEv +Supplier#000111859|BZ1tjnovNHdvUe,EgOqxR6qb5Qs +Supplier#000111867|Y6zKzw6THrlRO0BNi1Luz7HzkOAPmDbaQc1uk4sg +Supplier#000111945|fzzyWiNWAKVUkSimoQi,gWd0Gi2696 +Supplier#000111985|6gfW1VudyGFFL2AA7jVSzWJNJD7r2drS +Supplier#000112021|gKppu7h8RwE86QBYpau1cAAZnwz9,PdlbBO +Supplier#000112071|rF55ZPn9iFsKdr35E QvF +Supplier#000112082|,hmpMJseFSx +Supplier#000112136|ChP0vpoYvf2IgLhEcyNoQlBNZrlNNpnqo +Supplier#000112325|0gNIffg8C0HnxDzeLmjB7WhX 3SV6iitgbnxhVed +Supplier#000112347|5jVSGnzGJCxZjKjVS8CIWYib1 +Supplier#000112414|djJAFBlTxoNzMhE9PHIVfzPjSVHkdRSA +Supplier#000112447|klIEyA1W,Ro +Supplier#000112616|9jGCV3sOr9vJcx Pp4laTWmSyE +Supplier#000112638|rnProAAOkMK +Supplier#000112679|7RWNrix,1tQX,fRBM0zz5Www,lwXAOXnhPM +Supplier#000112764|2HRMs ,CgDypBRAoYWtAvROHoSXG vB +Supplier#000112878|TbRm7eJDK03w1Kt8P9OCQQqmFb8KyA2he65GJqcA +Supplier#000112997|u7MQFuNzQdZ3t9HmEZJBbz +Supplier#000113095|zo552BjM85HFgc2CgXHxVRJ +Supplier#000113175|7rHfCNr4raRXrEa3y9G7TkekkOCcZaUrE jTYrY +Supplier#000113266|TNwP,nmkgSozYfuGMlIMvXFMUrCO4zqGRe3M2 +Supplier#000113314|ArB194 kj3 +Supplier#000113351|5,AfISmp0qbZ43umTzeVSgzL5DFyXgskFOa +Supplier#000113448|RHOpJ6T6oWMHTQ +Supplier#000113472|5JgRj4fSwex4n9oECz92H71ErPKcALFCzRTeW4 +Supplier#000113496|eksvxzL458U +Supplier#000113508|5RxL47D28 ogPEW09VpyUDk +Supplier#000113547|U8rBQ0y,wYdHWbz7i +Supplier#000113640|AqIr3AMuOx +Supplier#000113651|kyH,Bc2D8x +Supplier#000113684|riNT5Q,5u3J1,TjQ,sKpqK0DXe +Supplier#000113825|6bYflg0I9hXct9brSLjw2pI5BFIbjA +Supplier#000113960|N1Lg9M7BPdxP37KLBlXBsqRdKfjscu560sllVZsH +Supplier#000113976| 9n4y8mjrC4zqQNJnKeEW81Vt +Supplier#000113982|oi5NWhnuatvLNGEIQtuGWo5Jd6ak +Supplier#000114003|uD7PS6ko0oV 5MbvjvK7M1R58L +Supplier#000114066|JJKY7n2m1DrW82Ut JRwo2F,38 +Supplier#000114135|SBGY7a9H6nvgpNtjYV6tB7 +Supplier#000114136|z6GglXX4CdNfx5hQUUt0ge1hICD6ogFZ +Supplier#000114175|gVSpDXlAEyY9CdmK +Supplier#000114187|XnyMvLeYU9 OHZibtrDf5nc2 +Supplier#000114195|Z66jh FiEITPF RphCFnNH8KSPLElWrxj +Supplier#000114239|t5Sy9gmUKx,83YDqHI3TRiFkn +Supplier#000114250|z3Vt8HIUTARegX1ceHaRsw3zMIZXIHuVUDnMc +Supplier#000114257|vDA0Kl5Hq37oIJlR2netSJH5BF +Supplier#000114276|MjuMx9Jpe7CfB4n6VdnTiMk5pK sh5tYNBDZ +Supplier#000114283|qfYbR0 q,Yv +Supplier#000114284|NPD9Kwq00crAMHlZ1rhx25zhB3y1ja +Supplier#000114335|7GIz0qXjKy7ntuR1vxLTnS +Supplier#000114434|vtRiIPkVrM +Supplier#000114548|dSphZGRMuc7 +Supplier#000114582|O9YH8W1oKlSszfcD8LB8llGF +Supplier#000114646|BLtrJqF5 JoM4b +Supplier#000114656|04zgN73MCnJjD1c0Mk00kVhdlH5EqiUensiT3a +Supplier#000114693|43GSORUN9xerSmjz fQpko7cIdc5B8zW7t8ZT +Supplier#000114763|1pK0Pk0ktJwzvLj2h JzxIQQp8F4H9LJ +Supplier#000114775|3hMDVrBSxDViegm,F7qZJ9IkY9gnt890i5nQ +Supplier#000114801|iy2vWkyXikPrnnWNMcbQ JB8g2h +Supplier#000114901|5GAbPqsnifdfAawVwXTVaoCr0iJV1k4yg +Supplier#000114957|GDrg9c7m9VBnWdHbqPxYWX6aXGDHC2 +Supplier#000115064|,VmuabfulFSGAS +Supplier#000115118|2IWNNKjNst3otvNJBprz +Supplier#000115132|NQGnAsIWUJiPqKKe8rGdBLbx6xo6nPQL +Supplier#000115208|ZAnFb0oRpzXOrmp 5AxifqqiLw,ylO8plovg +Supplier#000115248|gdwpivaToC0Cc5 +Supplier#000115256|isEDy123rwrq9Uu8GXmMsF n1bA6tlJnc +Supplier#000115298|QFC2NYFx,dbppzA3D xNvjiperf +Supplier#000115360|i442uAg1VKQ6FwIFADhrROWUO +Supplier#000115455|QnkBwuA0LJwcOE1UFn38gK0Y +Supplier#000115542|5P6f8Xtm6SBDhR 3yZgENpyl +Supplier#000115607| 5S5FBap5EslJj7nZ1Ic5 vx5oD +Supplier#000115621|2l7PRGLALKceic1 +Supplier#000115640|qifynrtIswlzcBj08iFjlwOY4iTLw2r7e4FLp0n +Supplier#000115649|fhJjvGYNrPMiz KLBoLC7sGdj,sAa +Supplier#000115742|0WR5IPs3qt1o40A +Supplier#000115749|2t4mouIBGbfUJ2D +Supplier#000115793|xY Nteyn8dMDtsgU0 +Supplier#000115874|m,4HSYvqioj10IbU,mwmV, SbHLalLZlUX6 +Supplier#000115962|zGarVcHOhP JqtLmjWlY So89F +Supplier#000116039|mesCL9nX 5ebzCDawq6F +Supplier#000116109|2ngRIiHh23cM3PaOvH9IIBj4d +Supplier#000116301|xWGB8LDqqCqE +Supplier#000116314|WVyymwdy0a2z7oiV71BWVd7MX1Smu5QN95 +Supplier#000116347|k5z3mKSaNYpmP42N6Bf,xU2woGZgp7GwXUW6SE1J +Supplier#000116351|5qym65 JA8FJ4CGnPWayrdRyAuV,9y +Supplier#000116457|3WwN2RpPzvYSMmSKAu3,0r9mFTOi4uOPQCUBR,C +Supplier#000116725|uQn41urqfzAG A CcM37f +Supplier#000116990|GYAorHyEpnP0 +Supplier#000117013|EDrUZ1Df8sCro,T,mZDcDn8gsl3Q5g7 ,JFX +Supplier#000117063|vlTBzfclkSWG39XEh7CJ +Supplier#000117130|0n9eH1vVWRCOFWKqHqBuCu4HVuf +Supplier#000117245|pTHK,kOgO7vsl1Cg JBfM5Ne3vd8 +Supplier#000117280|aia2zhbEqc8VfODTxHmF +Supplier#000117290|DgiZtSQcIf2y +Supplier#000117385|l4VpgLb9w3KPJbJp1 +Supplier#000117463|YuxgV0wb99LN0G9pNhtZn3aFVF8XQk +Supplier#000117544|Efke BAqBGVV9gQB2etA0mcis1 +Supplier#000117642|zY5bs8HBaA8QeR3MfxLmzWOFvjArGzMEwoyI +Supplier#000117644|1UvQ8K7R9pfWEzDER5nGfAj2YF6r +Supplier#000117690|Biz27B7D1KDHzekbEu0WL0gKV4UTleSB +Supplier#000117761|sl4bnBrqvrSj7mmnZLp9jt +Supplier#000117771|x0j3otbIP9P0r4LCYQhpD07Nsr3ReG +Supplier#000117972|Obyz5McaBRbby0vkQ e5dAJFRoHKJe9P +Supplier#000118006|FDPUmAsxIFbg +Supplier#000118040|fyA4vTg2tIG2xYziS7LKXU7x6W +Supplier#000118093|A3NEP lbo8rQd95jjagSfnl1QVga +Supplier#000118101|pyLPNwWoRXldOcKXEPraZwMwgF +Supplier#000118120|m07MCjBJBhHGbnhKm0Yu9g +Supplier#000118189|EBDoEcMZe4jiE5VLN5twQtjsS2W, +Supplier#000118235|,KA6CVsvzOqLzoIgs0mco +Supplier#000118300|AsmPS4GHNk6ixMdV1nr +Supplier#000118354|txGikjLuzQsW +Supplier#000118483|wnr jY,Ve3ONLC3OUIZZB4E88RCQplP +Supplier#000118593|5CyQ4Zr4k8Q7dpe8g55YcyfB1A0r +Supplier#000118714|CkMA8HytWRw12bUO +Supplier#000118792|DvjJhKAm1nS8gj iM9OW +Supplier#000118980|aL8DGUJxiU O oLwp +Supplier#000119173|WldX1WXSjF44za9f90ZLBBVnFpvLu +Supplier#000119184|PTlORrjZT 8z +Supplier#000119258|Tn5oF4a2Gqanx3rBV8JUA7lC3YcUqd06Wzh +Supplier#000119265|NYKB4Vu9Zr2emHt8H,ZDg0w7S8u +Supplier#000119270|uDGvr,pjWs2JfA +Supplier#000119395|TTAVjZyWO,0ewqupwY22K +Supplier#000119465|zumj O3MOl8Ruodlao +Supplier#000119495|J662F OhhcqfZqdGj2fBXi,BRUY9TTJWv +Supplier#000119507|WTROyGoxjw +Supplier#000119546|ttZvQroFbwNvR +Supplier#000119603|c3Ysxfcj VBNQGiN2XVRsc2JKhN +Supplier#000119658|pNJE7fmQYvJZy4CcN5ZqE ,wC3 +Supplier#000119702|uojtrVE1dHlsCIgoP2hWx7c +Supplier#000119720|CQ7RH4Pi4UPZEDmrWLDeNg79Opz9iun +Supplier#000119762|JhoHAnkmrE0UY1d2d6 ,DaapwQgIXJCJvi8 +Supplier#000119889|rJ0O9Rbx3OYY +Supplier#000119993|qIf2BbowGnA J3yJUaW0e YGNP3RPRu0CwKLC +Supplier#000119994|D8jfNLF1Ffn32sA8t3v JFm4nF8KsTq1cu +Supplier#000120060|Nl9Yr8VUvm2UfwkiBaIw44cVP,y0Rs +Supplier#000120083|u ZIpmVtaUGs6QGrYmL5 cutur0R dChGy6bB +Supplier#000120150|dKYfRxMVtqIa QBp2VHX4OdYPofw +Supplier#000120159|LQ1DCzxbW0eLmfQLpiwj SF04uqCUbHkot7q +Supplier#000120191|HNp,FksheL7Gz6PtEh2B0gwDvdPcI5Ddx0x67 +Supplier#000120325|kGeXsSfjNc3iHsI4KTL9Mqh35x7e +Supplier#000120326|MbdyHyfgPaV,ulwGqx,EFGB +Supplier#000120521|I0RGuGGQPbM4yYwuzi,ZPv xukfvS11 +Supplier#000120621|qHxOa0RklxH1PkCvqDFa5s5r +Supplier#000120743|PZ2upf10xxdi7cx0oZcPpmkgW6X7g +Supplier#000120755| V74NYICVoixlkasmpvy +Supplier#000120775|nCT4nFWFK3AtqOrAoeFqzmrC6UeZ,runWKXe7kfe +Supplier#000120910|Xj eCm5Oxyfr1JpdTpT4fG +Supplier#000120980|PAnxVLNcVgXYzQz5xvT6uUEst +Supplier#000121089|HGR3jeqddpf6xXrM9KnMtbMvgxeSG6P95PDJ +Supplier#000121092|9Bx KoFFNwdbxxpiS5fMZ +Supplier#000121187|sjrAHyUeAo92CGpu1BnbV7e2x7k,aeE +Supplier#000121221|dJANISQ9g0l2x8ij1IrVtsMb1p9EAVK, oO3 +Supplier#000121227|1OWHB0rjbyrBqp6 9woX8cOy6jmQLsAiO9s +Supplier#000121298|GG,jkbmDTey4pGUmRT4 +Supplier#000121323|CdW2yV5RbJp cFDYSGaxdTO7YDuL8 +Supplier#000121387|i37lHV6LJryADr +Supplier#000121399|lYuMHEMXTRUUjwA,Sab8aiPkI5tdJQgV +Supplier#000121413|XxJeGzKltDDBXTLZU6O +Supplier#000121442|ejZnPiLHE3LhYCWTh4dVy0PuYRuUGBA9m4iCTIk +Supplier#000121452|FG2ueh0niOTsanqwKCUTyP +Supplier#000121500|F7t8xSI8nOcO6N0epJnBgVxowc29M9mMtW7 +Supplier#000121579|nLIrfZaUcSlkOUqjhyj1gnHcMGffmXk wYONFx +Supplier#000121582|QMFfNG,6GLnsZU8AMbYLijcvjg7un n53 +Supplier#000121591|PQKQq3AvBoBHXJ PYA5A5NeQvm02Yj +Supplier#000121656|K84hKCfjlFCxEL,AbWD0RytdWH +Supplier#000121661|hJXGbEdsn2Qe2NpvT6DyfvuCil2tSXGlgF6SsG +Supplier#000121710|9LyKBZqhff2K1DOszEvk7Tpp3fYtq4 +Supplier#000121732|ZN3sKqs1EMH +Supplier#000121872|UwtL0AtFmRni1EUhcZg3ne9XtsS +Supplier#000121907|711ZI ObYT6GlCbvcDH7GLB +Supplier#000121935|NNbcsCA7I3nHAzYjaB,cyxsZgRdHPZN +Supplier#000121941|VGl1v,bZAoR,YIrMR9P42bf8seSs8S +Supplier#000121947|RuFpneFczkHHzhCoCIQOiY2uuu0Hq jk +Supplier#000121948|ThlN9wwbN0qT5HUcFxXEGeh +Supplier#000121985|Ih7H1c7XFCHM4gYNq +Supplier#000122009|GQ3dwAP6G5bHpcWsUyJQB +Supplier#000122040|L0gth4xQnosjZBrImzOngPv9zax +Supplier#000122044|QPV6UM2b28ly3yNMzKed +Supplier#000122099|OYEvyRy 5C6zW,CJeZJ5NtboN8wYFGu +Supplier#000122214|k64R0VKlJQSprhsPSBO w7 +Supplier#000122242|x5yqnsgpITIwK3p80T +Supplier#000122355|02xYsq9lIu9dsci7v131J +Supplier#000122481|bjJPgegIF5aoZhiBfVjJazm JXUItc8la2g4cP +Supplier#000122589|lGidjw2Oz7kPnL9c4GZYMIsvlgeUIQYUeeCEimHa +Supplier#000122609|I2FX2M0J47GldfDLx +Supplier#000122736|ZSLlVMQYlE,JQy7SM5deY2GDfz4n02KaIFHArx +Supplier#000122861|oBIuNcgVovI,ME6oji8 +Supplier#000123014|P05SN20q5uXa,Jt fifuZPQ,,5 +Supplier#000123036|,hybNluynOv9euF13ulB dI5gX95 ay4S5 +Supplier#000123057|oLus0QNOgSZLHhvgIN2xy8ai tB9zsz +Supplier#000123122|sW9qIxmrAK2pUMdNWumFFxDlR4cw5 +Supplier#000123149|qpo30XVSWSDoqqcQ9U6H6r7b6khsahI196diG +Supplier#000123151|x2JBLQbo48RraGQ1Ln1 +Supplier#000123178|6LacAY3truB6VHWEvreeaAimKy9vE6Fg2O +Supplier#000123201|NVaCX8wm iZVeh8K0wAA37 UqkvUU2s6gDNfeesD +Supplier#000123209|5OSSgZb9u0K7BZGbAXc3hN5UXibluPDf7b9c +Supplier#000123359|2E1EfCK0JuNEn55dnv65ox6mGR +Supplier#000123360|sS8x7NHovfzxqfWSCxZ +Supplier#000123412|B09JempW,Rzk07ehgkAhK7ZEu +Supplier#000123417|vHhgI2xXmdW +Supplier#000123460|AX5WRycGmoGBDEF017BrVyqXPht8vAhD +Supplier#000123473|IGde1WTfGWo8K +Supplier#000123508|rAWDz uxShUCzTbq53jMin4f1OY +Supplier#000123532|cvcjuN9lP2fKWuXybQpv9eDsTihr6Bsvq +Supplier#000123584|q9UC0rfngHfmk7YQYu +Supplier#000123661|bKR01NOtB74v9u6IwXcnlXNB8t01c4g8us +Supplier#000123772|f0QmtnvhUlf15wOO +Supplier#000123894|9AsJYrwxjLzQa4nYHRU7onn +Supplier#000123913|GWrCOp6noUg +Supplier#000123960|VYhS7uqof6ochkM7rcK +Supplier#000124055|luEy47BrUB48RYO +Supplier#000124059|kHO31nVUWeFcdAlSlSHtLugUL OXmcic9 +Supplier#000124074|Z0RVW1oXZpVz7xwnqE8pA1aOIwUAdlkMxr e +Supplier#000124119|7Mk65JKHS,4sE +Supplier#000124137|ryZ ,Uy3z7eR, +Supplier#000124174|54yBFskuWHy cnRzfh +Supplier#000124182|NYYMUkfK7MYMv6CHtV3 +Supplier#000124186|,3afOP1wrhsyXScM4VV +Supplier#000124207|NTqVYvhSFTa +Supplier#000124437|dOfCIwTgBteoBrGDtzWs2NWtr zgZh7GIIPq +Supplier#000124511|we4WQ8 YiFE7rApMnRPNsLuNkIO2Gk8sqJO +Supplier#000124513|J8BMzrMXlQ +Supplier#000124515|efbF 2PcI,e,S,RnBX70 A,V +Supplier#000124526|U6HklNh8bH6XRFuAaw193dVAEtCWnyv +Supplier#000124603|3jA,eAnIrr8MdC9U2ygpSYC +Supplier#000124694|ZEVDgVVz3ETH5eByPcWYMbUz5hX0 +Supplier#000124704|xUTGJUD9G7uwhLkakD5htP7ut8DwnhO +Supplier#000124749|rKi2efTz7XNE8vAoml +Supplier#000124772|lbdht9Ssrhy3nT,5s JEFVaz4WPM7LGk2Jav +Supplier#000124789|NSTZl o19R05raWG,1dJjnW6ws0 +Supplier#000124844|Er,I0tIOHIrTB,hGyIWmgUHPqNfKU5 vpBYCDO +Supplier#000124962|mpkiWmtfF77cz1BAj40xgtNFon7wDcW2I9weptk +Supplier#000125023|63sN5QGNz0KKljSpkJOS2CL8LZwr +Supplier#000125062|sJIwfTqZ7oWs6pmUSlIpue9biSgUzHfVYi6 +Supplier#000125097|9j9p8IM1p3oCzxx +Supplier#000125198|APLEfF00kwTnIe L0sIiX +Supplier#000125294|HoKQtlb,JbbjVgwUK1ZTCm9YD +Supplier#000125337|Vky4nZYyiDKV2turehEth +Supplier#000125356|AJdpjlu3 2nAjcaW +Supplier#000125431|G9KpHBpoIqg4 +Supplier#000125450|Ke6Tzfy8HwwnpQArAIoEnF,FoDLd +Supplier#000125499|xDYYePgr4NqJtjDy07z +Supplier#000125569|kof90uHUAVN +Supplier#000125618|WCJMjxvRaDPDhHUmETbqr9 +Supplier#000125654|lNjCrsx6YKLAVWmjfgngtGzEaxyDoC +Supplier#000125700|VHpMgLlwktpHLTO,6 +Supplier#000125791|yZjwRy2cuvANKGLJUejLr5rJaLeKaAOJdUBbB, +Supplier#000125825|Sv,Wcn2awuB +Supplier#000125873|n,4orbEr6g2Hr59anaFMZD87SRy0JNYV,gg +Supplier#000125907|zS5tg5FZK7gquK8GM,qGAKgyZ9x2 +Supplier#000125942|aLngtqhFdRnQ4oYfHstYflBp0Ymi +Supplier#000125961|c4yg3jQWxFQCFCQjY2F3ojMJm +Supplier#000126026|O937z7T2dgwntJhaX8y,KGMpuk5n63 +Supplier#000126027|XtKEVcOyLCbEO2Yf858HZ +Supplier#000126068|C9nbb0WuHktCoHIqeyPyAo +Supplier#000126110|rVRBgQIFucUiEz9EdyM +Supplier#000126210|9GwqDpryV9Tp9CG +Supplier#000126248|JJw4NLoeKZYA7GzF23ngt8 +Supplier#000126254|7,43x4bqiKtDgnb,JKg9pQrCc7iyZ7W, +Supplier#000126305|BF3HUPqFRw5hDYNVzwpmj2RQ4 +Supplier#000126308|Kah9UbQtWLp3VmgNWgCKtH6gLFm5elru3wAHkIL4 +Supplier#000126335|un,TP6SK8yH +Supplier#000126339|5rt,GBrQ7BGE wje3XTeoOOxaxXVFPu +Supplier#000126346|9dOSyl13DGjbjMxSKXypW8YZD2iOEHQB5q +Supplier#000126361|L9VcSOgqWuQ3PI3eur2Pipu +Supplier#000126381|Iv8 1DAYNSRtAbDly1sV,Oxnlykt +Supplier#000126565|UvmRBK4kebZHE +Supplier#000126566|WmmdNhaxFfvmfFBwU +Supplier#000126616|jmF3E7K8B0Nrd0voFY7LmC4iWl,WU6hQQTo +Supplier#000126668|U,4mXydDV9nOWl3bCJbQPBNYq0pKPof +Supplier#000126788|t6e2C3Y35TblohUwPzc3n +Supplier#000126913|Nrivo1t0y0HN3Ay3bS6NWFU2Dq1VRhNV9,ECR +Supplier#000127056|rF67DKFKBxU 2L5y0BPaVRlEUVN9Gnehqp5BZv1k +Supplier#000127116|puREEHcDwIbktsjU,ummU2vBF8uMywXcxIbUWe +Supplier#000127233|C5XKhvHCc4 +Supplier#000127280| 34U64M3oO9Zc5 +Supplier#000127384|ZnIJbRNMdnyNvfz17gAVOf Ec1PLISeDKIiWqGR +Supplier#000127578|0YKbxoi,tkW9Qmf +Supplier#000127632|eG6Z7cY1b6ZBGJVhs8ZTfET +Supplier#000127652|19wGCkVy5hz +Supplier#000127660|zNrG7ooUev0aOZ0kb9HGPaWtl2 +Supplier#000127761|d9FzaTdpgqjBde7 +Supplier#000127764|90Kw428gnLKGLbFvtLtRDCgx0K +Supplier#000127804|qalGRkAz2IU6veVcqcbNgHNCpki3Mw +Supplier#000127809|eBd,YIAMbzBk +Supplier#000127909|FqZXgnJaGXOpodHMVv3JE +Supplier#000127914|igc0xZIaiUCIMXhA11 +Supplier#000127967|MvgFnpI6iqtUXv8q3mMZDxqmgVL +Supplier#000128226|Qv6F6Y ggq25pMzBp +Supplier#000128359|3F9WNCA4AbxXLnPzEARc044pjN3SUqFR2 +Supplier#000128603|ZorgVjUW8Llf5EVqf0vVQHfTzVr6z7Q +Supplier#000128621|ocLpE 73,E4lTbHpGBQzLW +Supplier#000128630|NxoZTn6hr6cftCyDy2KCcbm4NlBnrjY,k +Supplier#000128642|QvTCyDxMAn53TL0CnL +Supplier#000128683|qsDBmduX6Wv zN +Supplier#000128720|1LRpQb4YToMnjHkjK6jZHENebaXznp8qbvVbBYHh +Supplier#000128895|1mvRs6vhxE9U,RwUIS4bLIR3HX +Supplier#000128909|3xnxIeTDBlRg4Ul +Supplier#000129036|gOF5VeEXFBbJKroQX +Supplier#000129083|el2gNDRjkhUAJEHEVza2JHZtz6L +Supplier#000129118|bp gjx2h5 8NHYyVtyWT9vtorFHtCPyQWC +Supplier#000129172|NHtHR,MuGmV5pwPnMxtBexHfkngaPAUohM +Supplier#000129201|H skxbzCr0Au5KkpPz7p +Supplier#000129234|SrtKsN62rOZt460Z4q,ULHgpV3EpL,DlHt, +Supplier#000129318|SwNuirMjzjSkqttgSuHmCX +Supplier#000129379|3ZmGKXF3tzB +Supplier#000129414|CcdEkr3I8hCauK4v +Supplier#000129488|C5t3paTHbq73iRRN +Supplier#000129608|5BbeiKj,6aoLnrM2k +Supplier#000129633|ONXqW,D1jyLZNjNtm +Supplier#000129645|4BPyC QTxE9mWk2gqOH5KJPLTpLwCtjQ6 +Supplier#000129660|5pJlC34,9VsF3gkVb0N4t +Supplier#000129747|SCW2TOi S9DB6svTiaad7 +Supplier#000129845|33W7KwEuz9qEB54eO3Drwt +Supplier#000129881|4d92boK7,vf9 +Supplier#000129912|wVOeBWS8zWr pK8H3 +Supplier#000129984|O,0M6YSMXMEqudgzEDJ2WGRP wu95PmgFWO +Supplier#000130046|KvitDE2d zXAMsTGBAzc +Supplier#000130100|U58fZqW4mRErgDvTHbO4 +Supplier#000130115|ecAzRtwIWUxmCGKfpdGBv1vatJK,oH6 +Supplier#000130243|JoGvIGTGVpopLq2ANnr0JmA4kwRO +Supplier#000130306|fn4 2pEMQdW3K0 +Supplier#000130311|aVPUll8nQ41gedpkFgpvUIqBy1ucNmFaxDn5cRth +Supplier#000130325|AdM9TLyBqdM6L,4 +Supplier#000130447|Eqnmj,KnvmySVl8QidmPH7dYOquv0eAq +Supplier#000130495|4BiQpKscBUOLfftnwqPeJ +Supplier#000130505|hF9g0TmVohOKd5A964tXP HuPm,TbE +Supplier#000130509|ntPy3iaaZHepjuSE +Supplier#000130513|unzN8kpDAjnWfj,cq +Supplier#000130599|5zkwhgtaPZWobBPSp,TlrCwi +Supplier#000130624|qFzV8sCnG9VYQ6sk7n69RC1wA9B9a +Supplier#000130631|o cIn eC,tudymHhs0 +Supplier#000130688|1zRzTEfC9f +Supplier#000130722|FiONgmUFWcfuW +Supplier#000130810|GFUsDclRGYS0T86qWGI4PQ,FU0xezaXvZTDLsT +Supplier#000130861|qvrmqdundTfrZeZP,zGe +Supplier#000130927|8HXbZLGGJOGSMhD9jm,kzbYT7w zaZmia3 +Supplier#000130956|UjoctWsi4uXaH9TL5JJTXSG +Supplier#000131046|FAHKJOroBK +Supplier#000131059|v5uoYPdP4A3yqHjyIAGP +Supplier#000131131|vN4qcm4Bvjpl,5etTcW +Supplier#000131155|YbGCfxziZW9FJVyrH,NHn2HP3SIv +Supplier#000131253|mXtRlyAkMiyIelmyEnaxLzs8FHDM3 +Supplier#000131304|ZNS9PNyGrcZh +Supplier#000131387|wNAyZ7QPMIbvDDS9SlwfB,5dRn31xD8wqrRR7Jc +Supplier#000131396|mjjANvx0Lx8 +Supplier#000131427|ggePp1igbxG8HwibVpB6zKYtf4Lh16NR sUkVKi, +Supplier#000131428|APpKO0e2BA8KGg +Supplier#000131433|EaNNarJakuYQCc2GF9O097CKT +Supplier#000131455|jtFRoSuR7W7VAPaMt1fUi M9ox KSJhRvILieA6 +Supplier#000131497|3fa2vOvTdL0ICKdcSqzkNtlzxjV0q +Supplier#000131507|1UhI8MamQF2ADgvFOng9 +Supplier#000131520|MglYyAWBqoD +Supplier#000131579|9EuizT27I9 +Supplier#000131712|KZtQYwC7k 0fnsvw9Aphwp FkUcAXRtY +Supplier#000131715|dwCtaHeXLCpmRoAXbODwxX4qVXQM8mZccpri +Supplier#000131802|yaPZ76SUP0maO65bAzAXjGVyFaA3 +Supplier#000131807|gbfSH6RmNtMuodjhYSnvJWVCR6tqAI +Supplier#000131918|KvgeMDk,dn +Supplier#000132063|OF,f2HW,oRpflYu3M,kXB6GQIc3iaF7u6 +Supplier#000132094|8HGSHf8kNiG1,3r1ZisOtAvUb5W lCLJnjjRB +Supplier#000132273|wbhSYJ2C0YcWXcGgDujmwKsglqG0Hi +Supplier#000132331|,aLiVixoDi +Supplier#000132335|crN0Mbk5V5PwP9oyH +Supplier#000132362|J3XDtQxQOEoZ9JG +Supplier#000132369|J,rBPXPW1qhMd6N8e6aZIpGCd +Supplier#000132595|klCd95aekm8oWho,h,,bkje3hacNwAnBps48GD6 +Supplier#000132638|lelcEC4EpAvFV +Supplier#000132649|wWGWafFod0 9W6Wd6ennRK,RiUSKuD5L1JyAW +Supplier#000132670|ruxeQYP,TTUOH10NYJuZEl +Supplier#000132760|ybtAGsF2iUAkoULS 5yHT2kBG p0q +Supplier#000132765|UuDUDXxbRRp71eeqjX63enc6kL6BoBjUU +Supplier#000132783|YL7hdH1beb8 FMRz TwHY19DKTrxr +Supplier#000132851|4n9IFmRaQQ9Y8PtY6OrC4eDaQPH88VX2N +Supplier#000132938|zTjpEz7FPQ3FCwnnIleSk XBm J Gdjf2VI +Supplier#000132953|CYLByLj44Nhcy7a7p3 0 +Supplier#000132994|TpRrxJ56HoGA8OzYbwk9ijzgCPKvBG9q6raS6W +Supplier#000133045|e4Q0t3PCK4Scn0RkJOcpTU7zN8cOLAEpTi +Supplier#000133073|7J3q5mW17Z8hbbDBx1Xe6 vPPlj3d5uV8uBd +Supplier#000133212|2BKY9FGHtQigZ0ax +Supplier#000133220|xcsVroCr2gxL1yJTcKWEasvD6Hjr +Supplier#000133261|KBF1,g5BremaIILEZVJNoHr20HiyRZ4A +Supplier#000133274|tNh6rhlpEdm,vWM +Supplier#000133320|gtrF2dqugkNTQxN8VjelJ +Supplier#000133369|foFyf1G2Cnm7MJdT12 PY4XgyMTWgerH +Supplier#000133415|XI,MA4QUjHEbxSuCZVF5I2iBaad4cbmnt d +Supplier#000133443|ls2a9T v7GT9gQXfhlA4y3x +Supplier#000133458|VwTjUWkbukYWzL0JhlIgCHyJLKpNpecz43m +Supplier#000133486|JAi5GqGLkVOOqWx,urYVmG +Supplier#000133496|phw,DlgTOXz +Supplier#000133506|acv1PP0OANN2uSz3yINWwX9j2dXJoPID7fbuoi +Supplier#000133518|LDBAM,Vo5a5bFjdmE3DABtvlVQtmUx9iRVrL +Supplier#000133630|9v7m2BX48ZCu6bWadiiwD20GxLuPnz8rVm4PqE8 +Supplier#000133749|rtQhmte4JAnNNn +Supplier#000133839|,vthNQ3Zp7NAxTPh +Supplier#000133973|rV3gFsyBOv +Supplier#000134036|NGPGurmmo6ypql YE7OPxCsvdvxgkuT +Supplier#000134064|II9ecvt1pofIDejAA,zD4JDf4s +Supplier#000134091|NmsnTqrBnkX +Supplier#000134110|hHpRdM0Tk9jqj1956vgQjTRlXG +Supplier#000134208|LzZ9tnhxbCI2pe2,WkihR0l +Supplier#000134252|gFLCOFUDrecyYhXiXwRgR +Supplier#000134287|K2cF2pd 0lEeW 7x02ZM +Supplier#000134458|ue8ssWAiPuuGCZQl5cBfNIbKQ1nCIU +Supplier#000134522|pbohePNp QAzLMF +Supplier#000134544|Kd1srfI03rDQCJOw5QvoL8TIeKm4MM3VM +Supplier#000134556|ZgOlUJ2M9c +Supplier#000134578|q4rjrS,yE9joLAY +Supplier#000134615|rIgS7Uwa51Xq3c +Supplier#000134658|emuVMfwwSNwGNTe2,Y4 +Supplier#000134744|vhx2,xDVKJklEeE5fv85 PL2 +Supplier#000134798|R186x7jvBfhOjA442Z +Supplier#000135050|6Xj8gKHaHR9uII8Fy80sm0 +Supplier#000135066|uxRo3ekfmOblaglCF097qRQdfn8ATWTaT +Supplier#000135067|MNcIa8WEVz WBn0HGzLSdyCFLMC8 +Supplier#000135231|Be5wdaXYXzRK1JviiZcLSnPTuTGB1rTUem2XA +Supplier#000135310|FexvUzIhf41bgP7X6,2GbiVatR5Yf +Supplier#000135353|c,dNnqsfS48YJT60eRNs4tnXHX kOwafOw5Ip +Supplier#000135450|3X 1MIvoblbhLdwNxJZ +Supplier#000135501|PsfZ0GtnbpaZOZ +Supplier#000135580|9A3KpijflkG5hAlNeGFIaaTZxPdPd7vxnbYphse +Supplier#000135637|oUD744mO4NuuF7bpNEz99qNNM +Supplier#000135683|zd5eG,VEVZMV4ntppCcn8 +Supplier#000135773|c,7FyJNAn EoG5KAnl4X5PB7mJYTxCrfrRPcGNG0 +Supplier#000135809|Dm7xnWl9iUuJtjcQ ozb,MKaUZfO9Q8jFMwrw7 +Supplier#000135873|cCzjrlT8IHxJ1S1WvuBpuOhj7 tADnr9S +Supplier#000135909|zj5tWj6isiJgRk1LywQ9r,5Q2 kkT4X3 +Supplier#000135934| ,dqQwPLgTeRJ4VZg FLWLCpVMdyp +Supplier#000135946|IOAHqcAIXOUs2Bc mMdpZZ +Supplier#000135982|VhFWhsZ6sau0SGro2vVq9CGHPBoQL14Ffj,C5OPm +Supplier#000135989|QX0Ru 1COVUgfd7xSszAa8TM0HWAaFkRu +Supplier#000136030|PnjgSmdmfqy5dhPgiG3i6 +Supplier#000136122|RJcL6LPxvrY BGP +Supplier#000136123|1w1dLw905HWc0FlH94r99lcvyfQ4vItj +Supplier#000136140|DEqiZuaIkm5VownhCX +Supplier#000136174|No,pr0J7l6,e1uko +Supplier#000136211|R5D0BcUpwJJtVK,Ptk +Supplier#000136216|zTtMHveLuNtmIaFbL by8yEwdU1 +Supplier#000136272|JidlzxRKlmX1m9EZ7 +Supplier#000136282|EwXnlQqwj3ouCBSHy +Supplier#000136320|gzSWGcsdURW3CTEckVph1,b +Supplier#000136392|M7VOzDxg kSXL +Supplier#000136398|6K8hGrE8dxAQRp0o8 +Supplier#000136455|QCT7u6d BD +Supplier#000136460|9rBzTPfA,cEZ +Supplier#000136541|QC,mrr7QtO2IMCumFGIvuT +Supplier#000136620|7,zbeFCknZy6XCuRcqoawhA8gUepPYS +Supplier#000136634|47DBBDVnKEkSCMnYlKrDrsMIcRjxj8Xqyg +Supplier#000136735|q,fMnVTmu6WnXcepCL2Es +Supplier#000136736|qxh5SaCvX9v7 hI5ZHzvNjzRoLAyNtG +Supplier#000136774|IBVuN,qbLkh4u7T +Supplier#000136820|gkmvj2xytd9Oij8xhPI2GRzVd3RHtdLHCGN +Supplier#000136971|qSE8,GhpFUwEMjHpI +Supplier#000136983|zTZGRQySeo0ZrsDi8VP3PRkdW +Supplier#000136996|rV6DXQ4qK8yfHDpkuzVcGL +Supplier#000137070|,rdQQQGMrDgZIkmz9SPqnYHZ +Supplier#000137084|IFWOMCQcVXJhk1oCWWO1 +Supplier#000137183|VlSj6i,pFa9EWe6 aOgWPLuH +Supplier#000137192|mmFRhljkGEB8zwJTlEF +Supplier#000137303|7bK6XAmgedGEpDqQhfD +Supplier#000137325|reIN5lwB27yXQdX 3Kh +Supplier#000137339|3iENgAS4Sz7vwvkCk +Supplier#000137473|TSX0WwfUMRTcnKD0tUQImcN2AIPabZZk +Supplier#000137507|0PgkRKubb3tiROHBpEQz,m3btfR9v1vz3j +Supplier#000137655|13r1MbwRAH +Supplier#000137667|T hG8e3IksXeG210P +Supplier#000137721|B vDUHL6WTUFvHEASWLzWu1V7bD +Supplier#000137728|ag8ZRSycEQTaqtl9 u3 +Supplier#000137791|nLMsTQrkedrmooG +Supplier#000137975|q3j8im9B31 Nvmn9,pRk 2nyrrPygsJ +Supplier#000137983|TpIxisFDqiR4xHgaz,xqxdFSke36J bwVR +Supplier#000138144|kBXR8nwMzlf EtAjKIed15ydjl +Supplier#000138148|xL1,ShwKB8kA45R8m RIgLM2lW RnclrqY +Supplier#000138241|1xAkuPb28LrCIQdR,bukVCGw3ySXvW6,uE398b83 +Supplier#000138328|UyFcFjYMTzwlr7k4OIrFOU,nkT +Supplier#000138335|RGcY1VQdeJuPalnsArcTFi8w82ArxICdrhBibk +Supplier#000138393|j2VOuNaNdh5SKMVXYHfuClZEI +Supplier#000138410|7Vbl OeaFShAQ wcmeOE4,AX +Supplier#000138471|VmWWPX5ZwAQvc +Supplier#000138500|ZFTxQVLvEl +Supplier#000138504|iktrBOhVKPBnrMhWzjabRMZm,Utl0H1Zt5c +Supplier#000138567|VWpa9si5xb,hKOsOQu5nsj2BwWw, +Supplier#000138646|bnwzZ2aC7ukk +Supplier#000138787|rm8s,VhXkPH14yC +Supplier#000138790|b9 mXQBDI9eXH2K2x +Supplier#000138800|Q,89nMBNpxHlATWGg l8j +Supplier#000138801|c3Oh8BocQUOpg70CzD MuXwmb 1DA5IzPM +Supplier#000138883|pCItLFU4Ra9u31,M +Supplier#000138925|uwA9s2wNopjxVQXp10rN,RLyglXS +Supplier#000138968|qqP0dyX24i5IDx Z6n8Yw4GHuuJ +Supplier#000139007|Vp0,L9Rm3NbsA fEH9 ghD +Supplier#000139034|yXtWtr56QGofWg4nL2QTVvIBM7unRHhsAdU2I +Supplier#000139096|g6Q6,elZxqY5SSf2VZ mRkX3az56nhXd +Supplier#000139234|8kauXXXHBkQqSB,NmDzSLpVVItF1,9tYQd +Supplier#000139241|QxfldE0Yw5BtQQg0cMFENH9ru +Supplier#000139361|K5kPkECL7RkNYLKv7GMziCWM9l, +Supplier#000139440|4rqwrbOWVs29XITAwEcD1CGD +Supplier#000139471|PHvf5KpOdDtrJQ0puGOslNVt7rW +Supplier#000139529|4 oTFqJCVXPF +Supplier#000139573|NMcPbIpA7UBI2KRL9nMWTm3Svvd +Supplier#000139581|qvRg3yGMlZCIwE8PMGddOEBz4rpFWx +Supplier#000139607|noy,D7kHt5M8nwT5O2 +Supplier#000139623|NXprsNDEWwlEnOg KD6ydwAQX +Supplier#000139718|ustVlyVxaGAilgqqD27SVP24qPwk2sd +Supplier#000139789|zkO TpCqx81Gwk,xl2gzrlxl8SU2AbhNDtI +Supplier#000139825|MqoiDwcuaOMjD,2j +Supplier#000139830|cH8n4 feGnwCpEnkTm6Ul1wyPAtZ6gU3cYncykF +Supplier#000139860|nnUIjM4DOUtmYw A kfbVakz lgY5RMEcpm6 +Supplier#000140011| CSrOt8TFrKORVo4Nef +Supplier#000140104|Ge Jgxw9HPdBWPQmeKevNR +Supplier#000140118|78EdHZ0iGNL1Z74IHYM8KND1UD9A,saB5 +Supplier#000140120|wIEW9T2H6gaxCocOARMk0y2SKvjNUuBPt9 +Supplier#000140215|FkfoENUXvsfSHNaAtvz8pPirw4n,Fvqs2Aig +Supplier#000140286|5h3djsvVk8s6ocH216dBB2VB +Supplier#000140307|IVFYpHPuhijPuQH 5UKgjj Tgd585Sedidz4 +Supplier#000140317|oagC7zSm5lAOlTMTvtB2MOvc2ndjQvkk +Supplier#000140335|7DbnrI1lJ MrOj2BA0Du,shNssvj5mG +Supplier#000140416|CqRBcWk8sJyPMetH8rYjL37 +Supplier#000140420|PUWUY,8fyUKh4Rd2FdtM,rsIJetV6wp9gx +Supplier#000140476|zSr Vv0qiRhXRGraddEqLOVaWEWIpLiKaIMX58 +Supplier#000140499|hmZxSiXaXVUjutftYU251lU2ZUT,sF8rTdAyx +Supplier#000140520|QIB4JPnejWmihzQhYEg1 +Supplier#000140546|gpmei8u1rRQUhvNTPFmPy9A8IksGjDTqpQ7wWyBn +Supplier#000140603|BZFDDQ3vJgCQBuvml9Euh35i7BSuHslqsuAGd7 +Supplier#000140710|BeTBhh11TTmfSjZfqwfiS1c8B2 ,eLuK +Supplier#000140760|f,X0KUv5gznYXjlKemIFgLTDFykagn +Supplier#000140771|ig6pzTNwUjgX +Supplier#000140882|yQvXNfs cIS3PQ,vzz +Supplier#000140911|muVB8nTT5zkGrsvHhcDzd6XKfyz +Supplier#000141036|I7gORaJqedevfb5 +Supplier#000141039|szyYFdB9Y6 +Supplier#000141163|4FPOx69l9LKHafyT +Supplier#000141180|OUQWRNLu8tfmt6uUVV4NuQ +Supplier#000141189|RPdagnQNPFT2s +Supplier#000141283|ctnvGyjO8V +Supplier#000141331|jC3V1vN4bQZn +Supplier#000141337|toPmw3F2m8geNjkqQXEnGNKB9dhBgujJNMoIQu,W +Supplier#000141397|KPyavTA9,9VHWKB96hCQujAVqOAu +Supplier#000141402|qyzEoqcxO8d +Supplier#000141427|8qjIubIP3bHY46pB B1b5hmThJsvv d2N +Supplier#000141463|4AtRCcfMhfYVdp3sORmjMAZhnWpNbNVWRxQ +Supplier#000141525|6onZQpZUHciMKH XUPyopgtOwqWX7P +Supplier#000141572|N2NnpxcUmPxp76DGZ01uNbbDscN +Supplier#000141591|9lO3ar6SsHES +Supplier#000141603|KYGIFhpyP3warPpuez9mJlI1 +Supplier#000141700|eJu9mZbXyjTJGGXCL EO2,sPF4 +Supplier#000141748|qgeqKq0VlfDe3P1 +Supplier#000141788|MTAi2zgurwateCeoed5 +Supplier#000141807|6CI7CVDRqqRg +Supplier#000141865|NsuG9kyo9TG +Supplier#000141896|ZNYLs6RmPZyyprCCvXfcUjhnKVZ,28 +Supplier#000141933|TxRqLMvYAruQxTdLQwYSn67WVUVo5U97ljR +Supplier#000141938|Y2eyu7zHmH xWcXsLHzCxtCZfcEVH4g +Supplier#000141967|U jyIaiZ2cOoiNwE,LV +Supplier#000141984| Gwkwz0jiF5ZQYFcG +Supplier#000141986|vZ6pODG6S6LBHWLEGQZcCRn3a +Supplier#000142076|hockwYtWZmDL +Supplier#000142078|swk8xlwl1gZe +Supplier#000142150|ZPfYsc1w7oNCoEppOU03qLBbyh5QJlfzXQXh +Supplier#000142161|zuaT4D6u7USFxNon4,CXHO +Supplier#000142211|GziBRx pj15s6wd34VVDN3ZA5XajcRK1vZn8i36 +Supplier#000142246|GJ8l58EoCMZsrTt5rl +Supplier#000142257|CfHBtOaVHrdjHvJCtFF +Supplier#000142271|Nu mz, g6X,q GfSUH +Supplier#000142433| 1qlt7hhAwqbCprn +Supplier#000142463|os8mx2Ck3WnSnp +Supplier#000142524|vy23bSkLfbAeRrmT7MYFhrcK2hmeDSN,Xf +Supplier#000142587|zXqq,JgmqOPc4ccH +Supplier#000142721|WnnC2kcbGK,Uf8OAW79WcJ +Supplier#000142723|,vGwagNu,bFzw +Supplier#000142738|5pWHulNUwDe,iCo1DoGS9kTfy +Supplier#000142741|nn8MBRGMbL4oP udsR +Supplier#000142758|h 75hIi76nOm1A6TWb7 dUpfr700pFf5u +Supplier#000142927|OQwJL38hN6KpoKVt +Supplier#000143022|o6k,xmenSUrIWOU34n5Q2wGGiRmGHcgsZI +Supplier#000143076|oc5K0sSRXbANoHqj9byZbwVs0WHo7ECh0DiZZgw7 +Supplier#000143162|gnoLmKs4eW8PnNG0ZXbUDF1TMHkyYKxkF09BTME +Supplier#000143234|rFr1 FA 7Pxzup +Supplier#000143289|uVC0bbRIMg7AIZK0SKOYOvmtwZfWZWRtw +Supplier#000143291|8B5r165xqL,d2A3JyBENg9 +Supplier#000143296|etuKZzbfCAO +Supplier#000143323|UwdDB,CUP9zAO8zqiazt +Supplier#000143358|kOe0Xi47KwrpTDOHJvNPqkxFTpKUjB8wf +Supplier#000143365|5FMSF0vyht3QWR +Supplier#000143387|5JUHRhjQE9uHoH87c690S5oTkmpGZwnCfRGhBH +Supplier#000143473|0,VMjT4UTqB8 +Supplier#000143576|7ZW1nPiRGYfk8,5JZWw5ELlCc +Supplier#000143694|8wAOv8moYzEor4c3jBOu2Tke0Gl6cNbRBk7Jh +Supplier#000143763|ggGWTRhXr,n1RN2K4v8R05ooJay +Supplier#000143989|oTEFssxks5ebp +Supplier#000144036|NTXhOGW cK2VORfL3dU2bTjkXLf8 +Supplier#000144084| ebKAFwwI7I8yP,FCvLX +Supplier#000144096|v4hUK9bNMCpYeK2a +Supplier#000144097|G8x3yotKN9ItbdHqNDYT12hy2OpDBPjfiXcr +Supplier#000144100|klc9LgtP5ZsnMiFQg3yCpvU6vnxAzcMTrilQVqps +Supplier#000144148|eXXW51gH03 +Supplier#000144192|Q9ZXflx9Bk3Xfe +Supplier#000144211|9H2DAGXmqRQKo04PiVy1as VR +Supplier#000144279|Jg6XDkSjgZdDBgI5eb +Supplier#000144328|TLMMFctt3RdEtH6 +Supplier#000144505|PmB4uoKMP95viN24zxk YU,Q9nmcx3yX +Supplier#000144607|yOCCkkjg6Meh3 +Supplier#000144610|Hi Six7DrZcGf4 +Supplier#000144775|0UfETxB5coKl6jeZ6RAUXUx 1NZQ3wfZV +Supplier#000144836|NFd5qiEw8f1lUP3t1ZVSppMQuOR5,Vp7Yq +Supplier#000144927|OyGNRNN29SUsEXC,hAEC2 +Supplier#000144943|Hg, RtTwIALDcmpQKzgdqJBrz4 AmZP +Supplier#000144951|VTR53GdqhSUb0W +Supplier#000145105|Z,znbqdRJoApWtRiOWpIrsrCQt 6o5H6fAXqcE +Supplier#000145133|,EdkyNAdeFp70j +Supplier#000145178|ngkPwEenOasa8 +Supplier#000145192|MEXNN4GYlx9KVReh6PVS5dr7R4b9UnLWVnvWYzQ +Supplier#000145202|XKL0M7qZ1,AAXGvzoMOdYJCIm47 +Supplier#000145246|7q4HgO9CU 5,0plfEShsasJGoKT L +Supplier#000145263|F9Odd0jKOyJKE91prNMdwuSMdM1GvyD +Supplier#000145290|VCmQ4 Yb8noDkYBR9VPMrINjY +Supplier#000145312|z29OodDXauPGyScp2yQdCfyY UpPGrQ3ZegVSxbb +Supplier#000145405|k,npBYGPFhJ75N49eLuW +Supplier#000145591|q75615,rEzv6lPmIAqh8p +Supplier#000145592|vRd4KsCwhX1EocqEZYqFkrgagE5SvQK,GW +Supplier#000145701|YtzrTgQi,bmluFq7WS38OW3jMeOdJ4eG +Supplier#000145720|A6d5PIcZO2c3Viut2saS92c9meV8S6B0M +Supplier#000145802|7b,X,Mx2NDQx +Supplier#000145898|sJYHHMmK5ko +Supplier#000146075|FOCtN82L01X4Z5Hl66Mj +Supplier#000146126|0P5L43Us6M Cadl +Supplier#000146156| cVKmBLUr,BgctTiytZU +Supplier#000146157|ZwPJAc7,wFySUtXMYC7hiQfgEBuNIE2B3z +Supplier#000146227|CJDAbyrDF8OiovOITM QEyADdYoHqtxSd,c3pLiI +Supplier#000146261|eFaKf7BnoG kssc +Supplier#000146280|G6RnQIOj19W0KTRzRs2I21 +Supplier#000146513|qKMJCmBp8IjWCVTmK6bGZiXmMm0tP,lk7IC +Supplier#000146573|EsPW0dofatKUtcHC3D0Z,QdnmhxsPFdfAINY6Ydw +Supplier#000146610|ev37OH1, 1mgmzn2QwE3IC6HamL Z3SHl +Supplier#000146680|BNO4HTRJXy8SfQV enoQL0QWgjz +Supplier#000146702|cocaE3fCTOAa 7o1 +Supplier#000146704|62nCaKeEhBaCtyzj,oeKMVp4Hh +Supplier#000146935|icJ10let94jQtpfuOpEDGusSgOgWngZAVbWdRa8 +Supplier#000147015|8tQCeSYO6,iWYTlb tezhg +Supplier#000147020|l3EH1h3EgNMfscL2OOdjXXwtf +Supplier#000147047|0dSNGRkTZUSCGUKNZMJkjFw79A +Supplier#000147147|KXVtGPO zZ1t nL9o3BYRxV0khogaXNjmjEd4 +Supplier#000147186|kuJ6fbQqmKRX2wD,rUBSNNC +Supplier#000147234|cxe,q,gLYhfQXdLns3yv0w +Supplier#000147282|q7nAYvZtpuz07fNH +Supplier#000147348|t5cEx0bK 7yXMv029hQpx t +Supplier#000147396|tYBoLfMnvebW4rgpCfFRo6OFfMDfhLUZ +Supplier#000147411|1Mk6Np lSqmo81VrLN,Z07eFy6ohvY7h +Supplier#000147439|l4w2PSkkOXgPOu8tFwUi +Supplier#000147630|x8ju2vqzNyha1N9raKeJjnr3wl +Supplier#000147646|8Yt0LGAyVaBljhjHlcI 7xk3oVE51gwy2Pd9x +Supplier#000147670|U9K,pnghTLBKyW8N +Supplier#000147758|5LORsfHngY7oAYlD +Supplier#000147770|P,vSN3pLOc6Y1EGvfm0 4z,gnavhwKSv +Supplier#000147891|mP o5s8JHTHDI6D5dpVVdoYLXUYy6ts,G8y6oxon +Supplier#000147896|ZxmThM8Q AX8iZF2wHdab2gxi +Supplier#000147897|nQCpbp2JGQG U6HHNeU7k +Supplier#000148029|SD8,2Xc Qht +Supplier#000148097|amKCjm4 2EB1NdwzC3c +Supplier#000148151|0YkRFVywTwOLKFnXkV q5 +Supplier#000148199|SCRenbcuFYdrgusELqGd3Wr05 +Supplier#000148246|Crs4BbLp6pccVkwXDpYitbeoV +Supplier#000148374|swrMeGVAJmQwjCAt +Supplier#000148452|2sOJEQB762UKCSkRfkCqPCfRaXuw0GORtiiBLxuK +Supplier#000148510|WqhsKAwTyE5IRA7We +Supplier#000148522| cCRbztmKNJYHOLuy7ApLDIuyivGyKOkC +Supplier#000148527| toVwtsXI3BemsmwelhJrkkt9al13NMrsiSi +Supplier#000148557|unpHwmazUFJNP0 +Supplier#000148583|iZ5P7jXDc1lCPjuiY6uCXi8Qj +Supplier#000148600|iE1SGgj3h,zgRUmk6PnMujCN 4VHKCZ15Vvz5b +Supplier#000148630|IAWYpH1GGmEWaLBNuS6PGaTjSGjX25S +Supplier#000148660|JGM1SWIhuOzaPZjDp0Qk62aXG +Supplier#000148699|pYWteVdSHnhJCo6L2ECG2DkbSJpwlZWZ3L1yW +Supplier#000148739| ff uEQ0vZby8l2NZ7PWbSU +Supplier#000148740|1syUah I2cn8hcsadIBpDMqE3R +Supplier#000148782|srG3YljP1hJi0ePusSJ9ful +Supplier#000148795|mB awHwkhT UnxcDRdb +Supplier#000148811|Ni7HorZnKD2Ta1MNU1fF7gJXgl +Supplier#000148904|bw XeGa,l47Gb,EqhCifdyc7xabIHDA2 +Supplier#000148979|w56 beJeVO29dL +Supplier#000149010|9ZlNHGcQCoJyj34mB210 +Supplier#000149013|z5iKyUPMRJa8XmOMB58dND7T6TODtW7Mg8 HNjG +Supplier#000149049|CK3vco4cgLCtihGR8x79CKpfllmBM +Supplier#000149061|fXPwv6bUJA4yhDYT6akrakkFahC +Supplier#000149099|AtwT0F UkS63brhI3sNRPeiBS3KOYB4gbtMdOFQ +Supplier#000149168|NDmFNIdOugy +Supplier#000149351|3DyMzxT5XBjQ,HJpL6KFVcfnTZ68pus5xwomJ +Supplier#000149389|4Q0sXrELtwnSgi +Supplier#000149398|8YMA4i9GxtRll9R,6t3d +Supplier#000149490|J6hQKaXXud35slWSjQ0WA9PKn 72Dd +Supplier#000149506|R449w96ndHv3hHDolGN0fjVhX77 +Supplier#000149518|zlS4l 5XvLskqsjYHI3a +Supplier#000149521|Ui2qQj Lg8Qde2EvIiz +Supplier#000149544|JkfKlDDaxDwOOKtxlqdRD,b,WssOBeluOfLN,y +Supplier#000149577|PGfBA8QYwu +Supplier#000149644|WMcxxJ1bzlf3 +Supplier#000149645|g4wPDvpYgOn8OGFUFr0kM7tyY +Supplier#000149657|0p1HGDDdxQbeE3AJR9 +Supplier#000149705|Q7SQzQTEulnibaAgy3qj ,nmvg7RRHMmG +Supplier#000149708|4wuj7JcTJbqvmD3 +Supplier#000149751|Dj8 b65q1YRCMCXhiooMZmDhUiE +Supplier#000149825|83hn0WIdZtsun4Ym8XL5yo +Supplier#000149976|aQHqMuVXNqzmxqVuXGHay3n8tuhxu +Supplier#000149980|zjQTBqvzRm2nfyg9L +Supplier#000150009|HR0M4ABpnzqaA4m8vgWcp8uBtY +Supplier#000150020|ybZ0wpf79vrMtci5iwu7HMIKrKiku +Supplier#000150098|aHSq P0Jmc2MndypaesAmWdbmd,tRr3D1YXbH, +Supplier#000150148|7kW SBKxk2VDpEsql8cXDtMwlPytth +Supplier#000150182|Vi8xMfBw9O5mqf6R7sfUmGhy5LEd +Supplier#000150201| y3Clh8Fi3qNyQo60B2l8mA9sD8mJo6OORN,kLs +Supplier#000150227|qOgOLYkI1BvLsBaXQ2aSJg LJY,z2kAoNWH2X +Supplier#000150425|7M,K9hUUirnnJx19sTm,u1D,hciqCrh9xCas +Supplier#000150506|5s9RbE0KDTv6lhhkqqXtWVRWzGAHjXWV +Supplier#000150534|wX8tBH9boJ +Supplier#000150655|9d9dAP2rHuF +Supplier#000150707|UYSDNDGv1c2JUBsddF,GvJP qq5siXyFhdeS +Supplier#000150745|ZsqGaHOIKe46xBkIJ,Xe6a24PuoFifEd0 +Supplier#000150750|74O,8JsXVE2aroRN2E38jH +Supplier#000150836|MKGUwnLdfc71nAKcVC,Wpwz91Uahb +Supplier#000150867|R xz4zIk6dww7ESFAENeXmw7n,lD2PaZBLucOdaK +Supplier#000150974|sRjZJKm0fIsIjB,ym32 +Supplier#000151130|AC2iCsUFIN6gjsSIcG3EFhm54ZPRsoXSg222Qjtw +Supplier#000151137|FfAl6BGNCd6 mJc41zCwm4IsMamj,D +Supplier#000151176|84zAlaYgrSOZI1pJU8iiR7LvpdFsmxE +Supplier#000151203|8ASOt2lS8w92QUSu,8 +Supplier#000151325|CamGrz0Y9kGgrP1fjUyJDCGQ +Supplier#000151333|N7aFalM185Cf39,jcVNxeqR +Supplier#000151395|1HibSOGBoRYgWmSKPyAA3O9sB,F,gGtyP0 +Supplier#000151452|WE4lTxTuUASKctqN +Supplier#000151454|,Zi1Rx4uwebnRTL0J0cx56Mgpb2Rc +Supplier#000151509|A3smWCBOx1diyRkHZqAYtm8gJSW +Supplier#000151573|pX,SnxYeUNxdZ7kH1iyUa3YGpNG8IA8D 3LtKB7 +Supplier#000151610|HGGaydUwlzJghM +Supplier#000151645|6nUI5oPvNnKZQ1er5J66Z1i +Supplier#000151667|yngqaoVl0QnxmVHtZlLfjl6rw6O3sHP7wEXqDCN +Supplier#000151713|X4,fC5UFYmt2RatPc1Qad5eeE +Supplier#000151796|lv0wiLEzwjh ENaO5Q1Wbd7tts3nf8YZ7K +Supplier#000152071|YbL1u51mluh +Supplier#000152109|sZzP9x2 jagYg +Supplier#000152115|toDR75WKBr,p6OsuF +Supplier#000152150|otBEf2IJNQAmQ6tgaY I giU3WAWETctAwbWhkcq +Supplier#000152175|05hP6,gTL7kwP7QbhjIopi3vwTAjoVU +Supplier#000152183|rz0aH2ynnTaNI 0 gOE03Q4kcuC60x +Supplier#000152195|U9qpHPNsz4l2BuUJeKmhDQ +Supplier#000152217|EcEU0Q RMx +Supplier#000152353|xmN2osASP3Vz8MLpTe,R3uXsnXlSbNxBzN9vW +Supplier#000152390|1Vkly3zgAeK6 sqdqCd3wiiDHnLWq7yVq2 +Supplier#000152598|RHSaT9czEJcKaoxNXJGh3muROdoMqBKcct0TeBJM +Supplier#000152619|cUU880fprqx2Q,ffcF1 +Supplier#000152623|,IL7Z9Z,aDU,oAwTnQ7W +Supplier#000152649|KB AUNRUKUXVy2jWcBw1mwdgnq GayfMDSy, sO0 +Supplier#000152668|paD9eh81i22IxB9e, +Supplier#000152721|SA4oixSPtKvswB1unq +Supplier#000152725|YzAmiPd5yEcGM7QBc86dlIAi4B +Supplier#000152755|UdPigtoJeYBDrRAOw2jUWERTRSTZocfg8GP +Supplier#000152806|zzwZe3rnn1WR18v731wQ1hp +Supplier#000152811|7Hmq3 HrXY1xld9Ozjddu4wbxFETijbX3r45 +Supplier#000152877|L8KuL1sBHneW7y1ZvifDEDc37s +Supplier#000152987|Y7ar4fIJ,SlPH21WTx7HMGJkIRIDKu +Supplier#000153113|a97lFfWT6eo0efO3b8CxN5ejFg hpt3y7k +Supplier#000153196|TFIb5Lym677Y1alZCp7Ya8hqy,3T7wB +Supplier#000153203|G7RWHHcs1opGa +Supplier#000153214|6x1Tq6EsmJL5IW8 i1ZR1 +Supplier#000153250|4ngzMp4stxb98RUGx kQUja4IvY +Supplier#000153298|G,bLagbZtPH50OFV0psSpP0I0 +Supplier#000153384|RUYjXEfzAvNoxaZ0NP5Yl +Supplier#000153536|PZNKJUHgQ9d4,P1ZTFt15DoFmRF7EkgQ4tVGPYv +Supplier#000153591|2C5av9Zd7iEiVAA7qRJ64N +Supplier#000153602|e,KZVQM6HPH4bDF p,OrjUkeNCj +Supplier#000153661|jYDltM4VRt7tVcZT +Supplier#000153672|DLMuTzfstqVEUzEVmKUir3G3UwshvOs4nu +Supplier#000153741|AI0UkqV1F7 +Supplier#000153746|LXD5mShH4zMd98Ale1HYmGrQN +Supplier#000153769|u6POpeAfSQlMV +Supplier#000153783|xH7mGlFZZYhOxUA73vrB +Supplier#000153808|htGd66DifN2Fy d3fc9Shh7HevA7 +Supplier#000153862|Pxp9Kq,,edjzB6ulg0Rn1K2YBx,9 +Supplier#000153868|dH5MgDKtdbn86ZXqg1XmUaXI +Supplier#000153940|VKG2hjbNJn uSVZ11YZkYro9wrQn +Supplier#000154024|G4K81QYQ1taD23fY +Supplier#000154034|w3IKNVOQwdnzkjGa9l +Supplier#000154064|dUeV1Q8gtzmy1UmnJy2pHg,HFr +Supplier#000154097|NahHfYODgNA2C +Supplier#000154217|tYgoAnnWd7PCOwqo2vkt5HGyJyP5,lP +Supplier#000154272|Q6Eqj8L0xUTVvcc9x +Supplier#000154358|Ya8x6yBPDAfWQd32 +Supplier#000154410|YBNmLo0l4Mi3nDCA0yYnIA6Jvw +Supplier#000154551|LW3hW9S3wYFq7mJGFFQMtDIn4DwqgKDcMx,IuHZ +Supplier#000154555|R79,5c2GP8qKbh0Hog +Supplier#000154558|z eZFvWw W64C3NFIC7iMl7ef +Supplier#000154621|EdIycIzpfJBwN0eUSdgM5 +Supplier#000154637|ygdkqI6MAL7So2e4HLel,U3knx2OdlXmsm +Supplier#000154653|XkYBeyR5OoBdP5hepuieR8MGlp9aQobSDWK +Supplier#000154678|iFoZ2oB9Zc +Supplier#000154698|XVDggW3eF1 +Supplier#000154699|RIS7EhkEThm bFNETT3zVuzfi4VbKNQ +Supplier#000154737|74X3gxJtiVHj X6npLyb0 +Supplier#000154839|o36SGCIxmh +Supplier#000154910|w1Qoy31ucBc9BukkoS +Supplier#000155059|IpF0u,Q4,,FRZgd7J5FB ,g +Supplier#000155132|1QFKGFRboO0U,gk oiVWakPM73upxG7,yC +Supplier#000155151|gRfKR3kMFMJ59XmpA,RbS +Supplier#000155264|Y6hK5X8UQ,y7sLxh +Supplier#000155309|Vvlc6m8LxhFLxBRVoPG,jIXacRPtcf +Supplier#000155356|jqWEuuNSLkTeCaJQNP4AFbj4mbO +Supplier#000155428|OgOfkWI2v1,zE2,2VHLgB +Supplier#000155607|7c0tqQWJsRjeAEORchJHFk5CF0UPBY +Supplier#000155724|mrM8Hgc7HO6GAk5T2qMxq5FJQ4tO +Supplier#000155743|9ASJY8tX5vZy77iXH +Supplier#000155841|3HnUE5xOWowuRl1zG5lhbrM +Supplier#000156070|CEphHBr,Bd4PCrVC1tPGZ5lNrNl +Supplier#000156120|rqFdn5o1Y4 +Supplier#000156145|r 9WMTkYd r8RzdA9ws0tkOZXN82ng2 gNgEG +Supplier#000156273|JjcVm24fRbx +Supplier#000156281|oVty0JQctrFZMmhwJ,uQe +Supplier#000156311|OXJfqeJyNp +Supplier#000156395|t4RK,tudwI1KUNAt0InqMQiH6UCC7qk +Supplier#000156428|PkO9hT6v5AdD7H3NTg7SR6 +Supplier#000156477|gTG269Z0hGg60m1wmEOT3 +Supplier#000156532|ek5Ck7m3Az kBhnHEyBeM,MlGMQxX YAMqj +Supplier#000156533|nSUi2JYTpNsypZHl3 RLKCSW5xJBbR,L1Cihh +Supplier#000156580|qQO UYPfDMjDuk0fmDS1Z0C4TPcMx2bPt,Mhr +Supplier#000156631|PfeYCYQtDZZE7QPa5wIEZtI3Hbvqp2C6 +Supplier#000156691|lvfZYX2Jl 7A6K3fsYD +Supplier#000156716|VwHSRVfSass5QNDLfDiXX12705 +Supplier#000156806|hZhF6lOTl9YyKSicG6CHQST9hNAfRWzG +Supplier#000156852|2apJs9eqgrIoVlNITJ +Supplier#000157022|7TqYeYk5tzVC2yFB7,uhlOAhw0ibuGvqC 1q9u +Supplier#000157220|NV,wUumCM8iNYkt8hw +Supplier#000157265|FS JXvRnkGLv +Supplier#000157296|f67tdKDRNn +Supplier#000157308|yEU08aL9z 5t6mbkzZTozfJNqBFSdZOwklH2cN +Supplier#000157339| kaiGKivkJGjNA6JecZHiJJY,w,,T +Supplier#000157356|D20tR56OQU155Yu79E0V +Supplier#000157361|PXT7bPlHX4QkkwubHHUTKP77T4pInmlnhhHCB6 +Supplier#000157467|wGHKZexlZvrD95G9Bp lKMKY952JdRhuAOcWvM +Supplier#000157552|17ruGOLgx2 +Supplier#000157592|uSocOjggmVADG6F +Supplier#000157620| HRYMs8NBFMb9SJjkPcjhP +Supplier#000157692|AxcguCU69K +Supplier#000157697|KP0WrWrplBBMPaYEKdEA +Supplier#000157698|pBWM55WuqWfrLJCYk3K +Supplier#000157794| U6nlL8SkCf9urndNb9KEkJQk +Supplier#000157999|swD0tAkvdhRzlsIsqWxHratU1 +Supplier#000158001|n6QwdKtpoDvPg7vJT7iHTi1lbFa67Yhss +Supplier#000158154|qduI3LMkoqGI +Supplier#000158334|vaM9jbVTdFCTSrASpRLVo +Supplier#000158353|HXh0RVTrE38i,qRxyNwEAw9Tx3qb9wMbB +Supplier#000158512|SvixNufL04wnJXxttwPhefnTOhjxumM6dWD85 +Supplier#000158531|y2p9uSKFePZ22XSyqrYQJ8oFmQpsDixj3WV,SWw +Supplier#000158685|nh323yT5Ef7c38L0A +Supplier#000158773|uO9ewHgJL eu +Supplier#000158807|dEzcx1pq D9HyeNymSS8WcZD6 COBM18 +Supplier#000158827|aX4nMFelizi3,4zfSU9N2GpV6IGQGiL +Supplier#000158886|F,j3,XKOSZRUQRMvYH5Ukgay8094O2 +Supplier#000158961|Y48UrHGfTRIztuHFpc OHhEP +Supplier#000158970|0lPVrhHS3OqgdmY0tjOiTkCUuxYr6HA,Toen +Supplier#000158987|UI62n,2ZME743t1fdHfOAabyt8S7yUdfxZKF4zab +Supplier#000159018|VMIHGjjgFG9XXuAHKolzjkk +Supplier#000159027|pYdSAVYQN7DtmVTsG1xzWeS,QKmM1mQY98GM1dMF +Supplier#000159092|XnY2dlDp347GI,ozJkO38Mb8ry +Supplier#000159238|wDrZ67YFaQmBnm5oBmfQ +Supplier#000159335|MouuZ2HWYPTIE5PiW +Supplier#000159349|3nrTqZb2po8Xndms6K9ij84LV7Jwc xVI +Supplier#000159439|y7CPlNxIcGpI58n, +Supplier#000159529|bulHpJiEV9o2OM7AXPhB5ChCjiVI1KsIA,GDM288 +Supplier#000159537|EmC1wHFG58qpnecWjhygTc7LnRR6OrfrKdap +Supplier#000159565|vG7xeZVJCrLG2jvtaLA1fcbbxcWVCY2ehzZRN, +Supplier#000159618| XYbVCcKTsl +Supplier#000159640|99FQFGQ9eM +Supplier#000159644|fatfVDwHNLucI6hG0D6TjfaQj NUjIUDeI5K +Supplier#000159649|u0dzoYWTH4Pp8sDEUOyO2GEGVCiActFW +Supplier#000159720|ll25QHFLCYf7stk7uL1, 1QvBeC +Supplier#000159751|UA1WU i7vWZAtOCKhxwW2bX2pBIQ +Supplier#000159756|6EiYCXWDFgL +Supplier#000159772|Rat9JA9cbQE0Ezd +Supplier#000159806|zorDfpKbK16lcPdjVUh +Supplier#000159848|N2dVMSZmSGwSmPmCBbxfVJaJiLC 4qKz +Supplier#000159906|xkqJY3D52CVWo +Supplier#000159978|Vn G0254tM,T8q7ASHk +Supplier#000159981|u4LrSknEHoRSE +Supplier#000160077|6eKdWs6yGkNgb8PJD +Supplier#000160136|wPff2p7B3NWsweesFdH3XE5T +Supplier#000160166|i6Y 2zEZDRKpks3IcNM +Supplier#000160257|,djL,cu,6AsIh6flRQkUIYh9gR +Supplier#000160270|LWImxGZBTkmXm4upR3AafT2maF30ez9m3MM +Supplier#000160398|PFIQ c9Hl +Supplier#000160445|noD,qHVn5XoSTbCkj +Supplier#000160666|THhX7qRvcBwSb0sgMuHPScp4dkq0RX +Supplier#000160677|7x8XGqfLwX,Lvs +Supplier#000160696|kxXfeqDguYh5CxlxvouIqLYM5I7Og4a3HwnDF +Supplier#000160747|RuIBlez,MDw8YCwre4CstiF6 +Supplier#000160749|FO1onzaA2CrYQIm3HlQwveAinZx1Jgo62k +Supplier#000160782|QBVWnIsIrS9veXdpkm03pS4AgzGLwThDYfzGgq1Q +Supplier#000160829|EoXhkAwG8PP2Xpjwd7C0LfFmv 6fL +Supplier#000160840|UnRc3B3Zqz8X u,6rGRRwT +Supplier#000160855|aGimfTM52CwXKWlOCWGYD0iRrP4AOb +Supplier#000160889|5EgGagUlvBICJJLH10l,2f,Uzcz7dhC7FU +Supplier#000161233|2de5WK44loz4Tw3QdP JaX +Supplier#000161275|0wtK3GCZG +Supplier#000161349|OKK TsMPRU4FBsHDrMGbmYd2kw5E +Supplier#000161375|V,8XUxiavwLq57nZARv538 +Supplier#000161383|dRK dMG3hIJIruqE460JFcLVq7 e7 +Supplier#000161424|VOq8n6SSTzAlDlHP5Zj bAEmTDy 14DZ +Supplier#000161498|VSTGxLD cmNbh +Supplier#000161519|Lwav4tBu1kLN4bgr +Supplier#000161537|o00ksIozd8 +Supplier#000161543|uZ0OY4Sm5wgYmRumSM6lItYg +Supplier#000161652|JRS,A,S3ADEk ssmlE6izE gfD5r89qx +Supplier#000161671|GX5TAdh3yIEdu89Jsg +Supplier#000161688|jlKvPhs37WWLSoU,eksNbIJ +Supplier#000161691|,o o9XuvXiK8TKbK6ZZ9rTsCSzHBhpvi,8 +Supplier#000161699|CW1u6lffdTqa6tsxKpYsQ1gO0X +Supplier#000161795|QYVLuJG5d1w,rfk1m10yFE,wOA1o +Supplier#000161837|LMrSUhJEvcjfS5coviIn +Supplier#000161905|XtNsVuKl9urLCHB9lwXfwi +Supplier#000161921|aaXh38ihdsKHKQwkMf12D2xklq5WLZ +Supplier#000161977|d4PZz3,Zq4UQuia9 sxW +Supplier#000161982|qa75Bh31s8ZU2oQiR6zYfKqre3IHa2hOEx7 +Supplier#000162000|SZevshrwneQ +Supplier#000162079|OofTH9lVgAfZ86Xr +Supplier#000162240|xFsyN6G lP2wNhdt8V VRK3uNsQaFOmUq37 +Supplier#000162250|OewA6U3gOy8QJZ0cd3Xpx, +Supplier#000162271|BSMFH6W1emyl8rZ +Supplier#000162374|cNIattHpYDI7FBkH d,Ou9v5tYwLRbvbuZor +Supplier#000162375|nFOTwN4X6B +Supplier#000162382|1hb p3iyaGHIPLrMRazN AQSMgSspZMaOFdU +Supplier#000162394|R7196w2O5FRSmuorWA8cm8ow j +Supplier#000162498|pcjgRyDswNEzr,BZOIt +Supplier#000162621|cHTVQWMtYVeU +Supplier#000162705|lJI7vEcyTyz +Supplier#000162742|CnN2KABpU4Ub N +Supplier#000162747|YEfbPx0mXPJ6z +Supplier#000162769|uAn9dg4MgnuQj5P840suDiZkbCtdNLRgsIh +Supplier#000162772|KBpnh Cd5oEjjW0cUcblL +Supplier#000162844|DetMbx2HND6,bbnwODTVjhJzKtU3ceNbAj +Supplier#000162886|MppgbXEYZZ5gkM8mBcYe5VESDce +Supplier#000162925|v5H4EtCnleohXHd2lU7lSJ4wca7JVVZbrziRH +Supplier#000162940|2KjdjWwBUbG1iM3XaQ +Supplier#000163001|GU6t6Lrl,5yBFlWt JBR +Supplier#000163068|8GK,jUFB09xPbGYE4eInCrAa hHTGnYk +Supplier#000163078|iipQcBii3qVMjTkbxnifnNauwXWMy +Supplier#000163082|hKl378GM1Z81Rr4hDz6H9BBR +Supplier#000163150|n58QGXPTtc8imRX1OQl amEyzkDXnvzs,N9J2 OI +Supplier#000163242|zadZOgrgOkJPBuwZxx +Supplier#000163337|m7zd7cMt0SuV +Supplier#000163405|fjkEhEK9iUwI,Xdre8,cpN59mYOReIhT8soOINv +Supplier#000163520|YTehLw1itYAT9DkaFGWXqDf6ty,XN +Supplier#000163528|zfkZkFu1RTdsrZNO5foDeFZyPlJ2QduHmu 75Up +Supplier#000163532|HcF5klzHcqylN7XniTOwDsw2o,00nVrr65J,I +Supplier#000163550|rYVappPq13KqREE62DhIyi,CKJ3vtJF7d71TDl6b +Supplier#000163568|wEYHkZXtMGAnSLb,gj +Supplier#000163616|oL1N8E07G9QyUYnuYEi0Thd9 +Supplier#000163632|ONHRtDKiI7v4rl7fWTSaLUd6rQzUH +Supplier#000163716|k gmnpONomaom5920 +Supplier#000163845|BbEi3VJzXkkHObGNgWOEggQf3q +Supplier#000163886|3VWHEo,9DnpG nNTs2xcOfIaT +Supplier#000163953|l9CPiqg3kRhbbzbnTYb2w rCkNU +Supplier#000163956|6YGIdNeUMoCyr +Supplier#000163962|K WTSjAI 7qOvZU6 +Supplier#000164012|2mTNdx3yFHKFallIbv E +Supplier#000164042|IwwKtK9K2C2EDH,diO yRq +Supplier#000164171|swKAPg8OuzRIZ4IosVMRkmQFITW +Supplier#000164203|AuwTvY7,oLs73EM +Supplier#000164233|VlwonCArl CNP,SEio0qE5aGpF6gBkRE4f9aV +Supplier#000164357|LhdFAwxM4KoZnEeZM,mjOWt7Xq946d0E4 +Supplier#000164385|acFk,kryjalRNQgmCpXuU1HF7tK +Supplier#000164546|Q8dM31u9MJSWHI +Supplier#000164633|eP9waoxNM1 HsaV sZQd +Supplier#000164687|XsEJ1qnL71sNkJrfjcly +Supplier#000164776|CRYzPBCh8hBiSakQAR +Supplier#000164789|4TniR7l7XirbWDDQNQcjHzS2hNqY +Supplier#000164901|oH,zBKxvGRPIl nmBP28VG13tX7NK5mE2k7 +Supplier#000164940|0cyA7SB,PhptTGOhVKS8SrL6D +Supplier#000164962|Fzsm7ZXpAnuMs2w0,3izH oksVob1II3Wl +Supplier#000164970|TJZPi3ua6nxorCjmF38naFCU +Supplier#000165022|XyTR3N5xW1rhQJPDQOCRKebugKYcn f +Supplier#000165122|,XaP9xolDzwes7QMAC5Q5nNvmc +Supplier#000165139|M2Ci5Is7bqrB5htvTIlNu,f +Supplier#000165152|1PJ ewgu1gGC1MNmQqwDPVMBp +Supplier#000165213|Tt72ZHvVRtnsqW,uyhtb5fQDP +Supplier#000165273|bSwdvKEULliy,Osoz6NpP +Supplier#000165529|nuEDTwxCzVXliwvc00Mno3PS4Cty6tMGg +Supplier#000165554|oQdESNzYKD4O0fbNUzqjB ta E4TrS1weyUEsWd +Supplier#000165759|kndMbltAHCf7VwIxh3Ys +Supplier#000165765|vgpn,c2XEoc +Supplier#000165860|wFofZcU2mV0 +Supplier#000165886|9JQ5Zb0HuK7FyQzNtxw1SW +Supplier#000165941|pIokaIoV K +Supplier#000165952|Q52ncEV8BPckzKbIRcz +Supplier#000166018|tsGIBpm0HASfWf7o32g +Supplier#000166071|UrWowvrswNwhS9B +Supplier#000166148|xxYUZuALbCGU041odE85tCUYwCSFAv zNstF2s +Supplier#000166310|wAUJ9MdEkW TvjFJc0qB8mfFR1,XzevY8 3dvaI7 +Supplier#000166321|tVfQpZd2BJoPzg6tnfJBqjr5Uh9950xfw 6UOcfs +Supplier#000166324| cSpmUK4JxeF,wa6oDIuZhi6xGPIFUP1CC0g3fVx +Supplier#000166428|y1mHFjvIbz42UmoqqdrzxFivZk0tubJ +Supplier#000166529|UQxqvbcgIKT1LRkd7,ZQZo0LK3CwRCAmKIrIalJ8 +Supplier#000166566|hFf2Qa3Buw2Y9q2atVG +Supplier#000166673|tbbMEF5LJLT,wm56mBO +Supplier#000166764|IEPfwTIRbrd8ce6GqZiT09i5,rwWu4Er,smmtRln +Supplier#000166850|WILpfz0H8Rpm5tzZ7XCFe2iuumH7iy3fhy48B6s3 +Supplier#000166941|fA2nyXf3CgDSe6,8JQFYpQA1YrQERHN +Supplier#000166990|MM6tVNNTuM,dxkB0FwvmsnTTHtpmqdvITK2Q +Supplier#000167131|3sqZgYYYgRwdq1yjkgawzb33AEzgT3 +Supplier#000167303|pchkP eKRfqArHiPdY,vEwS xn +Supplier#000167315|PFxzXWUOul1xLgebJLPikMIBteWOYxxy7fK1 +Supplier#000167358|TZ6rUWpG6ZGnD +Supplier#000167402|XEeK3ymEMCkctyu9qf +Supplier#000167448|7PX07FDoyad3tObsBRhQnLEpzXOt AXxQgbZIA +Supplier#000167629|oyoNtK9H9qibMEB RcMy NfB +Supplier#000167909|nM82sQbtdQtTeGw0eehUOq2IpP +Supplier#000167925|EL6K66LhoXQRLtb7Og9QBzxqjiWcyqIIB +Supplier#000167927|zVfT2f3or14rU8XPN +Supplier#000167964|obcfmzX17KZG4gvcFUZQnCUnpo0irju6x +Supplier#000167992|sE8l,jYYh7wnHA,hqjB3KImO,yk6i7YZWUx2ek +Supplier#000168052|fikalzc1l8Jf8I7Q +Supplier#000168109|0Foyilf0U35vWIJUUvw +Supplier#000168278|T7xm56erks37lTSMqMKEPiKq0 +Supplier#000168295|h6K4WSmqHobTEYRt1w0UWuxpNF23Dcv +Supplier#000168306|seQiVFi nCn wWtq +Supplier#000168322|xgGFewG06EOPws +Supplier#000168379|bfmMOVWG6 J94Xn90lBugVolzzbH06FwcivMQk +Supplier#000168545|X, NApRli5oI0DjcAeiLol9O2nnco5mC +Supplier#000168605|GeFrgVvOJfWr2 +Supplier#000168628|fa7BrLxhyQ5NSDWpU1hFgJ99uAEhoQn 13V6bQ +Supplier#000168678|fME76HB0F3C +Supplier#000168762|NPe3jRw9FQjRjD +Supplier#000168795|vt4Mu0SraDIRbqcTXavLBUUP9C16h u +Supplier#000168814|se9fIbWM,zzfGf2fT1Ay5NngF +Supplier#000168848|cDXqApSwC7SlNCp5jblvk60aNpoYvwVfhLDYrE1s +Supplier#000168851|h3krYozCJfcnYkrGbnZsX7YUXPtOyn +Supplier#000168878|57tTn2zJ FSXPWiFUsetR3H7ZFsE3lN4AUL6eeSw +Supplier#000168894|0pil2Njzg RUwDRj7Vo9Qxi5H23Q4xo +Supplier#000168972|bT30kKUkVrUu67NRPtSBEwxUKgh4fG +Supplier#000169028|Oaj6dgQVjMVxSZA nHDwcQyru3 0ojASV +Supplier#000169228|HRzsafNJbiLEcG6X9D7VOyb2E +Supplier#000169256|cyj9pdPUDq TXBGIiIZ1NJcDVL4j +Supplier#000169403|yycAWgc40AYcLcP lt61wBb27WGGPdCNtX +Supplier#000169622|VmN9VYjx7w4V,XmxvENHjNmJDrNQxALwfPpdi +Supplier#000169656|4Zymg,IoUg3ukaeb6x5T4EvRLY0sKRN62BzvY3O +Supplier#000169760|ZXXxS0ONdQ +Supplier#000169788|4DKqQlz5h2LC29lCplfUw9XXE 8 n26J +Supplier#000169804|exD0up JgTYnqQL +Supplier#000169845|bqdip Nk,XncJHp2 NmKGInT9M +Supplier#000169887|E,K1tQBPyRwr4ANhojJ HzazWiQAEfoIdeOIy8N +Supplier#000169892|q7d1hLvkrj +Supplier#000169896|8XQGqWi3yKuAvfnYoEKA +Supplier#000169934|BzddgpMZyYOtwiIjsPbn9MOTwYQJyBfQrWFx +Supplier#000169969|AZDMprra0Ww8ENC8tTf zIGN6gg6QCM +Supplier#000170108|l5M21fjLCY 6dYi +Supplier#000170166|wA tx9WPNs +Supplier#000170214|DSmYTyxI0U +Supplier#000170360|JdgEEu04xgaDn +Supplier#000170437|9egSxYyN4Q3JVQXYlm +Supplier#000170575|s55aGBkoYzfkbZbH7KdQi fhF,c4fmkALoeI4 +Supplier#000170693|a,cchnZtBrE2 9jh +Supplier#000170723|3UpuFhtnxmSc9nkBHiM9c3Y KeEjshC2LFw +Supplier#000170736|Iq,MOF9,4drf1 oRIU1rnSRrgKq4A3ZO8GW +Supplier#000170737|0OL0Gftyel,XIVs13IU,IZP arP0l +Supplier#000170778|Wy2FM8t 2ns +Supplier#000170888|lvRTeEAvIO4sn2Li4epYekaYEV17wXuy7mk +Supplier#000171047|0tQMhMilcRmPRGwt0I8tLZkzoCxGqAQoas1zc0 +Supplier#000171058|RH8WC7JWEqgFc2VP6IandMobXHbAlirQwnxddL +Supplier#000171101|bQC9hc2,VQXb +Supplier#000171138|OpnhdjWSobflS6McZHH1681m2MCR1 MZ +Supplier#000171214|NheDqpryYTpVasDwhKQYnEuhG6O27WWAUKRhpn +Supplier#000171234|ZSn3KCuJNufmGb +Supplier#000171247|eCApe4Gu xCK1ONZi,eRmaigq gthFZSGqenoSS1 +Supplier#000171291|XGw,HbUQwq6JUDBWTTd, +Supplier#000171330|9rKTlo51JCqRIuA2RI +Supplier#000171369|f37b1zqyDcf +Supplier#000171434|HZyqIiQ,nmbW3XStT +Supplier#000171481|pnEu5MP,0OQrYTaDhndPNdprxmdQVwfj6 +Supplier#000171568|,vZvSze5mJIGNRDzdRScKXvYt7o7h1SocD +Supplier#000171578|L8KPUcKB68W8NBZH +Supplier#000171723|9WKel2 kbkVQ45EWEGVOtKfuSNtVSCh7 +Supplier#000171795|U3wMYMKxqiXl9kPUFxxmXc7hZjwoV,0 dUXWTFo +Supplier#000171838|Z1HL1p4UVonPLwhXC6PNPAzSgi +Supplier#000171885|H nKSukCnTW5Nm12fOX5JANNxFri3xIUvtBlCG +Supplier#000171936|KX3yMg04WCYZwo7CnRYRQRQgHqRkKVmutcySHeg +Supplier#000172096|tmqHDtL1XBSyuMtBmlcH +Supplier#000172145|biLkENuSj9T +Supplier#000172201|1jAF0ZH DJtIuZw +Supplier#000172246|nXYQNk StVsW GUpHRJyNz6tZVyyA +Supplier#000172343|NFW7CK0x6kTv87Wp H8ey1bLdfC1vA2xCwR +Supplier#000172456|hMFxWvxMB6sxgnLiz +Supplier#000172549|LwXD6bJZFFfygYXwhi1WA +Supplier#000172778|iBT3WsYg4U9US1fk9,XPPfDFWpukK +Supplier#000172853|k,bSASFwI,ekpu8eYeaBPQKt9q1vZyBqG +Supplier#000172859|4W1zs0iZdO5CFuqn8Y7GNGx6RM9PS +Supplier#000172905|01k,eL5jxkmFbsP,yuVkBXSG8 +Supplier#000172993|vMZMti4TrLEUKwD6hb3LfxS3 +Supplier#000172999|52UsQIsi5RosMKB7Njx +Supplier#000173241|5qXbe9P yIMW +Supplier#000173258|jvDzKsrRtR79z0p +Supplier#000173260|j5SwdBvixL0rF,QMbqtxOT +Supplier#000173315|9WFaNIykeg0XCPwEF0 ryIZFdMnC +Supplier#000173326|lS,HqAyrSuSxmxJglpzT5kvhnNsiRM +Supplier#000173477|Oa3lSA8aOTo mF2pzHc0EV186zMeKBOIRgYMERg +Supplier#000173571|Lk01GwxaXkt5 K3EdmI,,fs t +Supplier#000173622|6W9a1lF,OhEo +Supplier#000173639|cs8hWVc ,f9PUWY +Supplier#000173714|OlnqyZdwCUieTYPX8NS +Supplier#000173804|SVVvtl1VEEzaR3XRGf5mwy5qWGZF ,WjP +Supplier#000173886|Grb8 D6jNvAOMRhvxyh8S 71 +Supplier#000173888|EfNI4FxEAjN46X3zJhvqGvnDb4IZMl7 +Supplier#000173930|hYHFohMf4Rimk +Supplier#000174017|D8NuMUAT,ajNBBeyUyjX +Supplier#000174025|u23eUZc10ok +Supplier#000174072|V823fxpOBAg +Supplier#000174087|4nWh4xCCW,heXw1Mo8CMEhxbrKtwfJP3 +Supplier#000174098|jP8A6oVvJ2xYsZ0qFw +Supplier#000174152|intozz0e7H85QKr6Pn +Supplier#000174172|41MEo1Pe70QNY2GVn +Supplier#000174256|wjOWafi8uuEvIhVR2 +Supplier#000174278|EVfX47KLSEuLBvNTY3W9uhJeQNdM +Supplier#000174328|HcHMMfwWdL4Bf5qXpl2n8 +Supplier#000174615|HQ5u7s8ofKZhhaKQk90Nck +Supplier#000174676|YrEwED8KxXR,5x,x35JbtFwMMNbJT0AX +Supplier#000174763|hx1aK6o8lMaTNa BnXReXtqCZ1TInwkkkgPHZ +Supplier#000174817|T c1tYHFdAPm69Dm7k IU,lur +Supplier#000174851|a2 02xnPRx wcN2YmYNbn5n +Supplier#000174853|B RTXoS73RwJw6JoSmXKiAGoj25etRf3fsO +Supplier#000174970|WxE FBCemZ4H1p,vgsa5NaK2Uv5VLYVhVARm6RGt +Supplier#000175052|8NyTTTatR8AdlBk7tzcudnNNNr2K +Supplier#000175091|9V2y1DkNEjHX6u2bfINL7UJ5ku6otIRge YdjGtO +Supplier#000175132|w,BtXzDKF3R613e1KJnVFF0NIPs5dDuMki4o9dd +Supplier#000175330|QEYJ40CO09N69 +Supplier#000175384|I1VaC5 ocxs I6WDM,Dvi0247L8qF +Supplier#000175487|QGHT3hOEuuUOmO3y5lGz +Supplier#000175538|G87JbzKTjVY7gqX +Supplier#000175727|E9zI2RRVE7VMqvhy +Supplier#000175742|zd,3DPS1dKQsGB69OxsnUO,K4u7kuoO +Supplier#000175762|JLDBPgKlqeCOI2CaqfbVLNxWtEonC +Supplier#000175846|d3hTk4Uy54PhSdc3bEKchumAOvKELlQASxr5Y +Supplier#000175851|naqPSygo2 EquLH7 E3JL8bo0lUDkc4j +Supplier#000175890|wWUoS82VkIbz7k +Supplier#000175904|SWdqP2k 1hs,aCNdYsSckWclRELIQUY +Supplier#000175905| KbsVQeUf,32CZB6QdX326PjV +Supplier#000175947|F1Pvt7UvndH +Supplier#000176004|hp34sWTwnHiH7ZiThZlSZYbmGIY,wfznCYynOr +Supplier#000176045|zSwDZ8cvf1JeG7a6FDEAUq7P +Supplier#000176116|PzGXPCsdjGVxnL1X99O4ITiEiZq +Supplier#000176187|Mt CtDG5p2iq3zaB2GkWa6VNMzlFRKO,3DWICFMl +Supplier#000176279|OdsmaC Ibb0oGHLdfKN II4 +Supplier#000176323|nUBNL7Gy4VpNDIZd7dN2DHuheY +Supplier#000176458|PmUzLCopGydPgnNzH01WqkPt675rm0 +Supplier#000176460|qznBc,tlOKMLTai8Ue0EjWZ6XUQ7S +Supplier#000176518|mn1qb7IrsuJ7 KXEYDRJqYm,eUoqBw +Supplier#000176573|PENDZcn4eaADCrP7Ti51NWewlURSM3v +Supplier#000176575|6rbixfcWQHsmdb5, +Supplier#000176704|HhEgPlDC7,i hTE +Supplier#000176729|ZB1Yr8txMRggE87oDF9KFqkqjJRBC aQHct,gX +Supplier#000176730|0KWXS6vSFyNC7hC2cxD0xyuzg +Supplier#000176771|rz60 kh1Um9 +Supplier#000176816|FHHSf9F3WGUZNYxJO n +Supplier#000176818|WU6Rs8Llf5Wijp,16g +Supplier#000176836|FhLhHr7JsFRt +Supplier#000176877|PriC8n66q57dLS7qU2k2U +Supplier#000176930|5YssOAlISPkn1zhvHjW3g +Supplier#000176958|OrkgOyqjB2mvuPo +Supplier#000176964|,5QqHP1VHUnTQV,tBCrQiS XCe +Supplier#000177011|oNPgAocsmAg,R5D0 +Supplier#000177028|9a6K125hVRb44r,PBA8sIuR +Supplier#000177042|LuTuI Hk29uP291WSy3Js5dW P7gESRqQ8N +Supplier#000177181|TSYUOCYtCW47wIU9Aybsj +Supplier#000177183|n10iiPCC3QRTbq9d0YCWfg25UzbUipe88BLe +Supplier#000177200|HClPYDiGpWz3HSj65oi5wQxMsyxEHi5eAcb1 +Supplier#000177284|7nYY4tU,XFN6aLTdHZIJME +Supplier#000177294|tYjKXi7MyHmzLfuLCknXpImDgFAHzlP +Supplier#000177311|NmG48lTIl40vA3zW0MD2nbEvvD5CRJwGSi7tK +Supplier#000177327|iGk5WbYOTNq,8kAph45ckoQ 6ZX5ZNF +Supplier#000177349|s9nJ2YwM0tHJ +Supplier#000177509|cJYLiOSHwTkE +Supplier#000177515|ymqVu8VjuYjc9ZykpYvIQO5Pz5LL +Supplier#000177575|vlnH1F6d EboiIyVSaQyOCwVTRRPcd,UJ +Supplier#000177593|tU8E 9YFvKeGx9B6WvFf68qAxz 4LB8Rs0qyCc +Supplier#000177619|7E6fC41ppKGyCTPIR +Supplier#000177667|7pmo1p3uwxiyfPlJhPraKvrY +Supplier#000177779|ulNLU5OCNVZxqM3xDeJ +Supplier#000177868|Sk,fqnI,ZsN +Supplier#000177978|G6SyVkZVPo7E2GMumY2uexq +Supplier#000178006|VmWuBBG,Q3mjjBoSDYmN8JTkH7lsWw8DJcqD2H +Supplier#000178047|cJn5tigAoI54oviZynDIIDz,3C9mCC2N +Supplier#000178123|nJLblN8xD3W9 +Supplier#000178334|PVo7vQL,wd1aL8keUou67ssrmAz +Supplier#000178422|R4E5okNSAMfb1tgUMIvPrraKPYZFrdJwVPtx +Supplier#000178550|gE7yEg1A5,v +Supplier#000178596|sgb1Q9pdO7vq52pfRJrNV7DGgSQRQL1BYkf +Supplier#000178626|64dI,F9N1TyC7pshfxv85eNhdAxhr +Supplier#000178637|v691qhH6Yx1FjDQDq02H1sjW2CgyIz2W +Supplier#000178739|2xd BEBwpKeV41kUunL +Supplier#000178828|NFAZmVy8me5e9um9Mg76l2r +Supplier#000178913|y,UtSPJuDe0WpuDmjoE8980 +Supplier#000178916|qgQt0OsCcqPaXbC +Supplier#000178917|5wIFoEO3jTNaNclh, +Supplier#000179034|2nWNzFnu2jEYmQJnYoxZABtxNwE +Supplier#000179103|yZQlWtcVhAtzv9 +Supplier#000179104|KtzwIk2p10eiJl +Supplier#000179221|X7CF8lKl8JKl35gWd3Lum30tsN0KT3siR1D +Supplier#000179223|P6Voedvj3KtKDNcV26E5esC +Supplier#000179257|7bP,s3qkuV6581LadOLSON7nLjiJ,7Z +Supplier#000179378|dr0vfHiDDnjh4IJpPrXXhetI +Supplier#000179501|EJYoJtOBVtm5l 9lGLszQz5Ol1w4 +Supplier#000179503|JKgCFLOBuHOwzxpKD +Supplier#000179613|Rk4w9I70g493Cf6iYEnImyvbvG2S63TOwwZnS +Supplier#000179677|ist7bMhJ4km7Zk WHW3,DZlOx13PgN2 +Supplier#000179802|si QKwsEcsEkZnYdsy +Supplier#000179881|i1G7jw8wN3hjok3uvIUs VzpSUTGBp TGfZEQ +Supplier#000179912|iwB8iu,ESgc5tP7FA,0whVVV qlu4IjW8 +Supplier#000180046|eQsey3UuQ0R7p3twMrVA +Supplier#000180165|6E6tlZlkWdFHnrkwOgHvx +Supplier#000180327|HUhbAox7aQ,lhYO,YAlvGGUAvk +Supplier#000180361|YZRPfXDgj2AHLRfocdJQQwJaUTRNXKOhHf6 +Supplier#000180485|076FMTRpFAp +Supplier#000180510|4U3lTj02Myd8v5V55AMRJns0mvxrqetMRM +Supplier#000180526|yT0g2DL,nWvlZDqR +Supplier#000180528|b8yPjnEgJ8dHvlHcDkQ01E5XN7JnI14SfLMP 8lQ +Supplier#000180552|ebTZTK1ei8XMGxDIm8L +Supplier#000180558|c71 w7z7wixHnuLS +Supplier#000180680|3xT,G6QKillBweJXRPi 1h8SbfUJrVldXS80og +Supplier#000180707|OIGmDb2bNsLhDKWPefVo6LYQAi5yGZSYs3qhK +Supplier#000180737|wgtAJoBrBJe8XpJ2SlYt,JESnnjNLnMIVE +Supplier#000180902|Qnob0FvpIHkF926SU8 +Supplier#000180911|7EwANmofvoXJ40PzX +Supplier#000181006|QL0R9O5p27xy1b5Jif1i0jYm3UG8W1G9 +Supplier#000181107|tZ4sE,9LucjsgTvZ2TAJG +Supplier#000181141|arxKWFp NXkxfQ33jQZ +Supplier#000181225|j33w7h5p1MWnSx clJkUeW1jMFZCuXZ +Supplier#000181263|H0uSGOX7FOnyNdWw,uiyRNR8 3dz +Supplier#000181292|3vX0EZwZbS0G5eFCzwOp0fFFAApc +Supplier#000181413|jMSE1ZSNPqPM8su8di5 +Supplier#000181425|RIkloQMjO7jA2fOH9iKNVEK7 +Supplier#000181447|y50XDISIV a +Supplier#000181520|a,4QmW9BLc +Supplier#000181558|vundVkm8gckSr0waFtliIdFv2RHR6 +Supplier#000181731|pqukNM5DZuJ95igr +Supplier#000181738|P25dpppBCUsFnkeK,b +Supplier#000181788|pMuWQTaZdnLCq1mKu,Qd2AwMtBLvyPgVl +Supplier#000181813|2iB1oP,bHbG8z21lmVo4 +Supplier#000181907|f,rK4b9Yu5YNOa4JU9DNU6 +Supplier#000182244|6gXglA6EZjQa1sCwT5SJXZ +Supplier#000182279|godIO8,ukAKtmlBAOtZLlxn +Supplier#000182486|nUs5qyXrCd +Supplier#000182510|SeKVnAZC92gJ xItcMNb +Supplier#000182517|gfx4MrnIPprDyQw8hDpckAEtuGA6 +Supplier#000182521|imEAkwZsdFpv PNO9OqbOakKF4NypKGp +Supplier#000182530|MlcAEacEbBJCVIWRuoYmkEeDhmC3ur4 +Supplier#000182582|UgvV3LLcDPxXpKD,kB6 +Supplier#000182609|w7gv54Oz1iq4SvnmWDRKTO +Supplier#000182783|eklfJp7NBX NPNH9Gd5nQSX +Supplier#000182810|YGtAO0a3nO +Supplier#000182928|1y4dCm84xpLYG3Vn,Beu2K9xe0ku3 +Supplier#000182931|RKw9rV8SRuER4apU,G0AZwqyn4F8xexx +Supplier#000182939|e1a9h0F8BWhwfGr89zPTLbQTKvc +Supplier#000182961|niuJECGDjGVFnwMde8DGJkd7SqL,W51 +Supplier#000182977|WTMu5cpr,lKeRN3rwn,tZf4RG20 +Supplier#000183034|XORV,0o5gUttzOJHadA a +Supplier#000183037|tpi0nb1tvcl9vYnYqbZj9NjEI8SlaWgf1OoCAca +Supplier#000183070|8BjuRXM4HgOAmrBV2 +Supplier#000183102|XKtmPYwpuSiDwZ +Supplier#000183125|lRVaw6ak j6pEEAd70Qr0 +Supplier#000183128|CuHeT87s2rmYj t4pjQFk1sSjXjtv31XwaVf +Supplier#000183209|LSwr,owiliyCRJkz,99snYhvDoUbAJvLbn +Supplier#000183240|egEpJ2KAwg5oyluAa R +Supplier#000183287|b8PVDEkffI6W +Supplier#000183346|5Lx2v2PrIgwrYybc81N9ord6JcqhLwPbS +Supplier#000183366|MN a5tHf4sgIzQu141P2oD53FUcKWguKyD +Supplier#000183389|SUr9DcLVZ5AG4SdixiJUpPz1GwEkA +Supplier#000183492|7aYlhRnFKsTwswDeAZvww5zGIx +Supplier#000183536|J1n JTU7reIZKTPeb,,yEkuCh8 +Supplier#000183588|Oax, Zyrv EiY +Supplier#000183655|8WuD3DXVgX0D8D,R +Supplier#000183664|,iR783KO35waa7GgQ +Supplier#000183665|6l,xPr6ZY9dPa,LrBkMsuSRosQ zL30yse4ZUBB +Supplier#000183716|q2Z7poIFPWFSQW3Z1I,n0NwaqZmIBZxSJhC, +Supplier#000183729|PGzIV9t8Rh6btBusj +Supplier#000183757|xkiJ6dSbdAg3fBE5PvVS43E +Supplier#000183783|gF35T66g4T,7Pu fX +Supplier#000183896|Y3zSMuJ oNYNFkjPoGNozN1w dg2Rm +Supplier#000183990|0XAo5mNMiYaItgemVYD5ZN +Supplier#000184003|rJvuoFBotLk6j +Supplier#000184049|UDjEzSpo PnBL4ZnxGRj3b8 +Supplier#000184180|zSQ,MdNhrPuvorCujOX7UZ,4LnduZLOV9K +Supplier#000184228|r520cohwzsdLOKKT7U,OOI4N +Supplier#000184255|AIS1oR0zdjkcOAaeMDBcoIlsR +Supplier#000184303|3IAhPots4SBVCdLoSfI9yjnx9zscKooxvI +Supplier#000184502|Q5wywnCtp42ibLVL +Supplier#000184507|fivLNh9KCrlbIdwTUViKt5TFheFyJ +Supplier#000184543|H0HIh97E0QyXlH +Supplier#000184614|xHaS1WhLpZZsPltitB1dHXjqvg7CHRYFyjY +Supplier#000184619|Y5UaRC8enBu8T0sLSTkF5QUyj +Supplier#000184647|iZJOa9,APnm5EzPy3ZUWCgjn +Supplier#000184669|p9MATEWsd6JoNDR88W7h0gjTSEyg7yZ2V8w +Supplier#000184699|FcILYCGqI1hiNUYn +Supplier#000184811|xetf81df4jJD +Supplier#000184946|XNchZCIoSmZePVF8naGW +Supplier#000184989|xO,EjKaPNUdOLxf5ZomG, +Supplier#000185064|htdtuRp1U896FvRilPCOTj2 +Supplier#000185073|CSdR9hV8PX83,fw2HeR +Supplier#000185096|2R2vT6WXzwMF +Supplier#000185167|mOrGJuUbig,pz +Supplier#000185319|JxKYkmA2cyzVtV7 dV5bH,,UXMTKkzlkAGtH +Supplier#000185322|ltUS L48ijO0o6YKhYbl6UX8S5bUJ +Supplier#000185459|c B p53HbrPdtsqX8nXBtkIwQtUn +Supplier#000185504|VLsobHBKE1wOqkU6ecbxJdaR1PJoPQ68 +Supplier#000185535|gs9xWRCrRY6o0gxbnViNULss4RhG5bYltD,J +Supplier#000185595|H1uPc7 dUB3V6pVW +Supplier#000185633|nJqGw3t5SE1oiU0sLw84RkiinGwwa3,5Bv +Supplier#000185676|wVreTawz4nrhi7I0BufkQRf +Supplier#000185680|7n3dcj8FISTCFiS kfS618xokr +Supplier#000185723|ZYStW5yRkyMoNXh,j8k +Supplier#000185729|uqvT6Idy1t +Supplier#000185798|YR8rMTQqOdsxVdVwS 3s3J +Supplier#000185875|vpIbZMu3,P 26GqFNb,FNbAMRRCVrmW3R,X +Supplier#000185890|J0bULEnIVQBZswc7aXpuXQ55Jp +Supplier#000185924|zWcCpToFP54BFC8rUOyDDPIFdJjpCcVJ9 +Supplier#000185962|2,Mp5BPxlQTnZ DG9OS5 +Supplier#000186128|O,f3GI5Zty8OcsHmo9AxB1r2yiG27FFtSfv +Supplier#000186145|Mhs84EB,U43zXIpAtoSL673Uvo +Supplier#000186171|h9,RjqWs0dx3QHMoTMw +Supplier#000186236|bRP00J2ZQo +Supplier#000186256|cHj0JHxVNiGjCCTnQw3Gm3uzCzn +Supplier#000186262|a3dk1NUSJwW,EqQycjbGBg3u +Supplier#000186278|wO0fE6IlsAufR7QhXpQvG +Supplier#000186407|y1cUt35C4l32vNI43mO fu1 +Supplier#000186413|yJ3Pc0YLZV04AETeg,3K5I +Supplier#000186457|tLyKHtGzgUs5H9G +Supplier#000186463|CEbOI2yvTrrPywgk0QnibICwKu8brv32w8pH +Supplier#000186557|2Eo8YD91, zR97x DmHtR2SGFNdf4 tfISkNR +Supplier#000186591|FA5JHlkAYV4j1j2t7SUgmO6Ua3LnEq +Supplier#000186595|uAWqIM9LlWBsmodVtMJQAoB0ei +Supplier#000186661|I,C7McCbo9RmyhI6vwloAi66TDAV +Supplier#000186671|fp6WUiHgcf8atOshUgJcMXLm93WA +Supplier#000186697|sUSlvFGfaEmVks1nFASQyHo3p78na8kV +Supplier#000186724|IqpzBPMRCpz6myMgVkqNuF +Supplier#000186788|LqGZbPbZWTOXj7dij58WhlcD7kRBZbLm1cBUD0 +Supplier#000186798|WrvbVkqvHvdWSHs7hvicuu6 +Supplier#000186866|JKiS2VuMr6yuGvC3 +Supplier#000186950|tchuNxZwQFjC4 +Supplier#000186957|HhX37BbbaseAkZOtIYeO57KKurPJX9aRaGG0p +Supplier#000187007|xnhmRVdVFiYzsu2gIAu9coe00CVO,V7kDqbGh +Supplier#000187094|CiXpBShZCBLh5kbMJVQ6UjfiUgjNN yt +Supplier#000187138|m,6ezZQCdeX9eqr +Supplier#000187139|IKvQzXrEzQsnEm E4 +Supplier#000187405|Yv1vxbkM2q8aE d1 +Supplier#000187463|ohqO92dbTrI4e6Y46UpHRyFw36q 4SX +Supplier#000187482|,YaU8X0uKtA99 +Supplier#000187485|jCSsXBFNg13ChEwO7BfSqjb wYmokXWDQ8c +Supplier#000187487|lLcM1JxEcvlVoIN8c1EIPEqSJQ +Supplier#000187507|DYrdXUemFHFUzP sjY,B4JXWA IC6ydiMBT38A +Supplier#000187529|yhWSCx9VJfHsrDC7Tb0FKf,JmAM,ydEaSpxxpcB +Supplier#000187580|JnkyGFd j1hjZaUEaSJLhXepyWqQygUtMVG +Supplier#000187621|ybdVvbfgrJgP35SL6gIhAbtw2HBb +Supplier#000187875|IfKUYrM6B5WPsXpvFgRhwn5i0oow,cA +Supplier#000187898|Cfy4xVhPXIVSd5Z1zoZbbPjwGYdGOMmPuqU +Supplier#000187938|N08dz0m8ObdN9kweRvlcQKnuxhfkJJxsT45Q +Supplier#000187950|9yjIRJpH OQDn8E,dBS +Supplier#000187990|77YxYwYnSvTvoQ69UqPHr6l2V +Supplier#000188063|vN608CZQRjwsdpCkDTpd, +Supplier#000188108|RaoLtYC8rbCrPQ +Supplier#000188113|peiJyMh4PDUMof1AQnPKE +Supplier#000188187|dueyeK5u6Z3UQ7laJopZ643GX +Supplier#000188231|iBcHTATswu8We1sFJbR7,F +Supplier#000188319|LX4jKA5MTVFOOyh +Supplier#000188366|woy8EcjjY0AUlny3F4TveWZeZdpOJ +Supplier#000188394|kXp8u0BJkMcKZ +Supplier#000188418|CGmIzlrpvrcwoei0oK4,pE9QQZloTo83P0Z6E +Supplier#000188501|KqjidU7iE1qgom0SvZWP7hypNZKZQfizCMDCvz +Supplier#000188515|Lw96wpyVGJkRwpe2v +Supplier#000188554|ZRyGKBQifkZVVrX5Kne8VqcWQiCMVbq03WSTxzi +Supplier#000188652|KqQDGa61 L2jWr +Supplier#000188705|afukFeAxgB1eRyYTBsca2 +Supplier#000188771|DeS0vjI CrykRoQztdxgxScm1b19dI +Supplier#000188893|Edge9dwL3ZfQqRcOjk0Cq9ul4Kj +Supplier#000188921|pVTGJkuMJ7mEh2cpH2DEXMqrinELlu o +Supplier#000189026|HmroiQAAScHrMLp +Supplier#000189050|Flr59erkeLMvWl0S0lWZCHmbeamvQ +Supplier#000189079|lEA6MQMb8UOdedkQTbgs zWxu 1UuwTqchg +Supplier#000189086|rphSFppHUokC0VmvCmSr3SrkAH4o +Supplier#000189111|X2fpJKUdZ OPSPevraLuiHV2V3y4 +Supplier#000189343|ih7XNuRcp8OkRYh +Supplier#000189377|1bCGYtQ1X7gBZ5Aa3NU491r6yLGbx4xje3BbdDx +Supplier#000189378|Og7j4U9coSm9WvMYlkA +Supplier#000189434|ruvHwy7KY3RUyw9JF6J1zp +Supplier#000189453|uRQcI1tPh7y0LAoumuyx5Avg Kh5lCluQsh +Supplier#000189689|jTxOouT764GmZ,zn3 +Supplier#000189692|l7idOR44gADgnut9ThJg6ELoE W +Supplier#000189698|shZ51jil 7qeVhmzWthUQp2bq,yd 8 +Supplier#000189738|G b9YXofZQBBxWGivvQs8GgwzIaJVHTe0N +Supplier#000189783|QpQnsOFk9SxGRiMfc +Supplier#000189785|GQCaOur3 FVYA0y7gAN9FQGk2nIn46t,8JAnEiW +Supplier#000189866|UXRplE8MIUpYl2y4RIklb0hjOgQ7m8bhOyEWPz5 +Supplier#000189924|Mu8ORi69TI5,htNS fuCOWrcSk,QWyS 6vhobV +Supplier#000189999|AOTG5x8Oi88z1N0ubKPg6pKh9,cEPh +Supplier#000190035|iYbs4oec86wgl2hsBwsWk0iQWf2kbAI +Supplier#000190064|a5a5qBVgq0jldgMDl +Supplier#000190119|3dM7oC3saw3XVdlFBMLV9owNuYABkxyVUyEYb +Supplier#000190140|gefD15fCQIpbHiqb +Supplier#000190192|XeejpuyQZ6B2Ktv0dlHUFPcPDDorj aZ +Supplier#000190340|iVxp5mrioOPncfK +Supplier#000190374|NEGx7dsGeufrZMwH6A0 ,p2gkfsTC,GE0n22w,GD +Supplier#000190383|10YM6xkfaDwTlYoIeEYkrRkm8T0yYuXPmKL +Supplier#000190410|14Q4drYMaKxxX5Tvn9pxIlUF +Supplier#000190479|6VIwXOUPSOwFSA9bdVXSv +Supplier#000190494|3pouH4Zqnu2ezGoa +Supplier#000190504|3Geu7aLavj4 +Supplier#000190617|,49uFQm,xhgs45QYtqh62bLY6PbzQ2waOF +Supplier#000190697|2No81yIVz1e2df,hH3DMba +Supplier#000190816|1yLgeblSTityp +Supplier#000190843|vLjp3RzxjG3mfikLqEW1dSKUmdEc8nG +Supplier#000190917|GZIBw6hBPnxKjIQBPBrd160LcMaHDh2J,BkOXjCc +Supplier#000191052|W,muYowLEKow71,d +Supplier#000191105|LITekL1SfhXaKWrSbyw JBrMr0Ol8iwI6k +Supplier#000191154|72D4uhY4IgDtQLIghTCOY +Supplier#000191312|3wp0gFkKDosnszNMxgJUA4nRymrR M7k8h +Supplier#000191384|,jWzk KYHBEEoaFv wfd3 dNzzsT7n +Supplier#000191402|2VU81zARu95x0h59RLuQwBtIxYAHTEqf +Supplier#000191430|bKj17609BDfZV5T +Supplier#000191585|bkzkabI86rBuhoD,vV +Supplier#000191983|IlunzZ mwEfJ99KS5eocV7A +Supplier#000192037|34 e0iLywLNIT6N f2 +Supplier#000192083|0ic4MFycQ3LezL6qLTOSEM +Supplier#000192126|EatyU2bnp7p9ikl +Supplier#000192296|fuFkbncFtvSKmO +Supplier#000192430|o72WjOrxDO0o +Supplier#000192482|GAVKMhAX2u0h +Supplier#000192550|PAavI0ohmj,iTHYiw5PkF1xhVtSYSd8YIn Od +Supplier#000192579|atUg5cWpwoU19TAsIgbVqbehzw +Supplier#000192674|lLNwgZ,OLjDuBCSvcRE0ey8nIUFl2mg +Supplier#000192676|hRucco3YTx9p2E +Supplier#000192826|Keza7lCNEzf8UFOt8A05X1 +Supplier#000192830|JuQ,aBomQ1VBk9xEgT2n Ms4QPhtwzyS +Supplier#000192905|wLqI4tLTdO3X,O3 +Supplier#000192914|rtN 49Fe,o +Supplier#000192939|4GtlEfXoz3KhPF27jt6Vta7TQwSdxyDZH01 +Supplier#000192991|IdtuiDdX9XNZvzm3Jyz4bvFNhdB +Supplier#000193153|uHlbgurhJhE75zeQYpluyCXl +Supplier#000193158|vMOsZ04aw,Ax NlzGLljjvZySRGg8 +Supplier#000193162|RWsMp5qFA91JDz +Supplier#000193197|Dl4QRaKe6FM458aD +Supplier#000193212|n6gcI2yUnHgmp5TPRz3hGP +Supplier#000193233|Z5sedVSzOaPULhFrtv1v6tDH0pnNO8jTsKnA +Supplier#000193439|atRKQnr 5Ej9exQGdK9CQ +Supplier#000193476|PhodWaDKyR,9s9uz0511qEia2A +Supplier#000193519|PyQhsI,94gozTsObtj7Bd5 +Supplier#000193520|oNJ1ZTWLATezYl5O,Imak,c9kP99NXpOM1kkjK +Supplier#000193590|Cvb Y4Ur6D0vE6N6zfTKTuaWq +Supplier#000193624|M5R15bh zCRLq9IQkkj4rRGZHK8 +Supplier#000193648|GPR1pzW2 RhkAYOYBJiMB5WdIeuYnzqV +Supplier#000193678|9pRvb4y45pc,fE22MsAuh6jAXEmkVB7X8SsNg +Supplier#000193691|6D5lpWRBTLf y x +Supplier#000193693|vKo3TcHxm1p9tE2F9 +Supplier#000193726|ASMUmy4Wmv3YzNXzrR +Supplier#000193762|0EjTYYYQIdkVwS11uMzp +Supplier#000193781|SUvjXypnv TYPUDmkD4FJO +Supplier#000193798|OdwXjjT9LQROwNTJxi6pxFlG2V8i63HYw5Cj1Gjp +Supplier#000193931|EdSDYKbzWQAlykED, +Supplier#000193938|r86ZtfGgXtSLc +Supplier#000193953|3jW12,X6W7XnWuOvVeVZYzyyJE7hyLS +Supplier#000194051|JMgRSCpNKaPBzsbaUAaTDC8AAu6vVV9Et +Supplier#000194058|HSjB7Im7Htl0s,G3Arjw6UuKedTApnWdbF1F7 +Supplier#000194067|Vjg2wnEu9L6Y2f9V8XgeCk7x2WiQ9 +Supplier#000194070|Bfwva,sxcnZj3Ap RO8h6bZDwCnkvC5 +Supplier#000194237|AGe18jloRVkE2Luh2L6qeSALyR49C6 +Supplier#000194262|5HwQTE9prH +Supplier#000194280|oqFjeZMPBd0LLJeeJd4q0 +Supplier#000194306|qQwDMG F66J 4m02L8b KF0CDYKnwsERNXT81Ke +Supplier#000194338|G,tywgWZNWK +Supplier#000194524|d3PhDztRWt3jcrgx +Supplier#000194562|DG4Wow8ta1chADwh +Supplier#000194645|mGx2Pb9,p3HJ1ltZwcUX1VE5gCY20YV9 +Supplier#000194701|Bi,PqcLHohi6Ag +Supplier#000194708|adMpEllU8JLvj8y ,USNCNB +Supplier#000194725|B,GDGGIaU9OeyH3 +Supplier#000194774|kK5cqVycSsSGA +Supplier#000194907|Pyo1FdvxkhtN9B LDxkvwlld7A +Supplier#000194924|ahQZvIqImIuX +Supplier#000194954|XvyozthPb1qslc6zXmjhPJ +Supplier#000195001|NYTu8bFF1DP0FEd,RYnRgdRQfg5iJ5vTweYwijtJ +Supplier#000195016|WoLxbB5xFdvt6nobIGx +Supplier#000195047|EryUj7ob1GxJEi27 TbL8dkO0xM2,zXqqM094o +Supplier#000195054|UujsTQ1p0hvGMHYuokFUA CeogySUB C +Supplier#000195073|6MA6,7w1DrfaqyGM +Supplier#000195091|57Jl5j070btnxK9FkmzuhwbWkBZ8a1yKIWdjBt +Supplier#000195170|4XQpe,rLz p865F O6d +Supplier#000195222|WyAkYLMSfEbcI07pJpraDXA0y9 +Supplier#000195298|UEtPw4W nMJXjxB3zK +Supplier#000195316|iyFfDQVjGE6d1XHa2pw5or5eYxXrOYd0QKeu +Supplier#000195329|C1VHfic,Up70O1bc8 T4Dk ny +Supplier#000195371|9YmGEivlpU1EdqH1 hPnMRbLwn4uU +Supplier#000195392|H1O3ARl1d8KDfrjvRiCnEV 7g36 KQ5HMKtolMxI +Supplier#000195449|uUMRd0lIEHVhE +Supplier#000195507|CBTkxsjBsOC7XerDaOdL +Supplier#000195535|MAPxVfyIU7F W 4ZqnoZ4jKJLqzT62u8sItf +Supplier#000195549|OVDTrAzG1SKYflqZVvj2wPRzeG +Supplier#000195557|mFwRyd2jWonqF3Xe9NRAwcmFlXjIFz +Supplier#000195663|Lg3Kk6rB1g +Supplier#000195670|x6Mu giELbb3VEjlEpbyVfQWvadCspBPNWDs +Supplier#000195749|U6B1mejuZXDZa7VBM5kMln TiyNFl5ZcZnY +Supplier#000195755|Jh13ReUn4jENOuxZPVNxreKR2jqPGPZyEgvV7ve +Supplier#000195806|pPWlrDcZftHrDmddr,jN9q2Q +Supplier#000195829|KedXWVmsR,Ev7hN7K77I +Supplier#000195885|1nUXSIYeWozCJmGAPmHttta +Supplier#000195909|p8YXoJjEpK +Supplier#000196053|RXlgmSUvPt +Supplier#000196127|aML1RfG0J8l5sOFCAXjF WU +Supplier#000196157|deLpa g 6MG2WrOJjXIEWIxTvnyzuQJOl6G +Supplier#000196210|jBTXu57iO600 +Supplier#000196217|hEM2iGneWmyfIVqf c,JR23Y +Supplier#000196309|rVfQoIZUA7,F1 +Supplier#000196323|lISH3oIwpXRTKsfBcUz6Vvs1XNR2z +Supplier#000196328|ZfIOLea0LqqpXUOlAQzQGrvcm2 +Supplier#000196447|xwpuXvUIXiMyjU600fWNuDawxkBc864uz iyi +Supplier#000196532|9mA9UKarJ3i4wwk2Y45zvzVnauVZheTXJw +Supplier#000196663|GpaMQxpty1hHnm04AECNB +Supplier#000196761|OEwxRX,16q6rZRAliZ28jp,N4JpeBFrm5 +Supplier#000196782|x2yvWay4 lDvDyOrJcTbP +Supplier#000196830|Te7q Pukx5kTE9M1M4lu8,BmLoPeo1Lgur2y +Supplier#000196838|VMMSLVtHM7BYzkbHw6 +Supplier#000196866|jusZE0ErCdWqH +Supplier#000196902|qDrtDRmh39Mk83Vga9,bEbAZN +Supplier#000197071|CMrvH2k2SNS +Supplier#000197075|O9ZEBo,,0ocHu JaBESIcF cMzt6Ksi +Supplier#000197118|qm2A TgbcVPs0yjL3f 745 +Supplier#000197205|ecrtN3oCfdjquI,iRdd,ENGKCxZ0lru +Supplier#000197444|1gpSRbCZ7dDkxbFVF +Supplier#000197448|em6R,PXTXn8LHfSdRjMWRd3jiL8GM8 +Supplier#000197479|XjuXWzH7X5wC3 +Supplier#000197496|lkOETlezzE329SRoiV aDQM6zpzV99kgBKa +Supplier#000197523|Ez,HY yFBN47uI7gWgZQulUeNEzT +Supplier#000197550|FTl2Rtcj1xqnHns +Supplier#000197584| SQaqD4j8lJf 8R6DtB327cJE7SdJwIl6 +Supplier#000197602|w3O q1,srQedFoXqjSOKfRc0tEoSI +Supplier#000197633|AtP7xOB6yc6TTPf8gj4a +Supplier#000197645|MfFEPTTjlDScZpPlJBtgTMi +Supplier#000197716|s 0czgYxEB24tk 2SgsS +Supplier#000197737|bqB66xeAgKnwawG kWBb3ln r +Supplier#000197789|Ct5c7PZ JRZUHM1rcG7zwecwPdxQFM86BcDmMjD3 +Supplier#000197810|mQtkdJ,zBUw2RRYIzeEdJt4J5MBom5Q +Supplier#000197824|x9iTmmG3Bm4gJf OkYVsqoxZZ3liLkqMl +Supplier#000197875|uWJMcvt3rojIRED,GNt7IXXE +Supplier#000197878|ChDxMG1HnRLNHF6WD3pSBfMalAKR9,7va7QekMiH +Supplier#000197893|xG3pcy0pl8PMqqEEzgJo0q2Z +Supplier#000197947|0Xa0FuYlTikW3favpfgUmhKWnPsR +Supplier#000197949|VoTiWj omrHM +Supplier#000197986|ubnWuJN54Sj2edjiR, +Supplier#000198072|,LNim8uuhx8bVoPFg3l +Supplier#000198218|4O5R5rG H,829kiLGfgCNqG6r4 +Supplier#000198277|joznZyA3crvWQ1Wj +Supplier#000198307|GIkDtjSDn8KKhHSdli +Supplier#000198484|CC fKHjvpyoeHHjlHQhYP,fG +Supplier#000198490|4V4LNSrKoKKEZgaHa2QLig8cSwrKbiO +Supplier#000198500|M4x3sJsIyvKPhdkpfN3GT9GZJwM +Supplier#000198512|rCZZ lKzImpyy4mx0R92xu +Supplier#000198520|Q8PN5byVpzE2CqF +Supplier#000198599|Lx,tsFZTl8IoeBHVHVbFcdF vpeL7kxLj90qFEzc +Supplier#000198604|QX68qUSgp7dH7uWW3GQyJ5m,XtOW1vD780 +Supplier#000198675|CID2eTXzhmP +Supplier#000198744|PT5ryjBbCT1,UmUAonlJVZVKH9dvFsBPRD +Supplier#000198865|Oj27jittKsWsQwO +Supplier#000198875|jM9VJPkNrEHTTX,1JLZemC4H3Z9TKFvg +Supplier#000198960|8ZuDlzmftV XIFklXW7 +Supplier#000198991|ZEaXNB4nimT4TDKSK9unF4ThKUlis,UIPktUf0w7 +Supplier#000199021|ZAHfR4HD7k1 +Supplier#000199087|ZVAoCA0yeGed75 +Supplier#000199142|0nB7fkz FkT6T +Supplier#000199200|QDUni,rhx2S5eFKig +Supplier#000199210|aMcgWYQ49raxSmH6 AdE +Supplier#000199215|DUiIUMIsZAMHSBNGveI +Supplier#000199280|LGyNeADfNVt8ICwBV7Yqt8IEE8d +Supplier#000199318|euE45XTZB7 +Supplier#000199385|nVWeEV5unhhEzvFR9I95uePLSGq5zPk1zzE +Supplier#000199408|,P,ZmyWOGUnnqiw uK93p +Supplier#000199536|xWMcRC98cmiekLalN +Supplier#000199599|nQM8PZlQmI9Ivi7sA +Supplier#000199694|R PC1f Sv0awcULp6i2XIdgvWuu0rcMM1q86cP +Supplier#000199825| bRfXRpqtAL0V0fmvt +Supplier#000199851|USPad3T33mncRJYFFEpp0O3dvk +Supplier#000199968|uwonvWEU QbROwI5wof3H7gGXj +Supplier#000200059|g25suwUkJvA39NZmFcDxI, +Supplier#000200257|YarQNt1rNGP3um6IpWK +Supplier#000200259|sDL0laXbzVx +Supplier#000200260|BZbwtGEzEKh0ohar5JRoLGk0aMuISqigI8s,zh +Supplier#000200278|IZkiiX0v3bfzK50DWfa zfPt,QQy2 +Supplier#000200323|gkGs6Z2jOkLlOeGfcocXXQT mTdtbM1iDASERkQ +Supplier#000200399|kWU4 db884o +Supplier#000200470|CH5Qjsu6Gq55BMH +Supplier#000200498|CD1Iz1zg858BrM +Supplier#000200554|c52qoH7zos2JTJNBV3M +Supplier#000200580|xjAk9ylFgX +Supplier#000200610|FbgwMtGDUcsFIEO29Am +Supplier#000200651|EO cs8hTlF +Supplier#000200699|IpTX6,9D,tWXmaLLcqhLASd +Supplier#000200705|kpVpwZogRPdJeaki18wawO8qVDjgZA +Supplier#000200811|HwDIFsqxEQ8t +Supplier#000200816|OBzkcFSziFmdJ9LwNQ5994xLsNl9W85jU +Supplier#000200863|AVIhc2CPL053T7lH +Supplier#000201032|ssum,l22lCNHP94iauJKcyxNkYCp +Supplier#000201045|MbyX9g50QSAyBD,pD6x,R2tkeAjon +Supplier#000201054|2cYoo mAH1qb85z +Supplier#000201240|RqXzx4zLfBU +Supplier#000201344|RtIrT,6X0QaSfE9TRt4KHcS +Supplier#000201406|Y2,wYovycxJruQzRp4bL2qy +Supplier#000201577|LL4QaMBwQSq0B55 +Supplier#000201583|ZjZaAmeMM SZJQ9HMY4Zus7W +Supplier#000201602|hicHI6cieLAuCa +Supplier#000201670|3FFc2lZ7mcr +Supplier#000201723|2Dvg0KA9xGeRntewSxx3JW +Supplier#000201731|OSM3VvHStRXO6duyfNS3F +Supplier#000201756|yu6oWQK,cROUHTeWx0oclBcOPr4EMLxN9oXZONN +Supplier#000201766|U1psNxa3MY8y2Rrjvij +Supplier#000201863|7T16z 1Um4bxbpn03Svl6xQL +Supplier#000202117| CELhG6n1,v7rqZfxe7 +Supplier#000202141|JNZNZaiY7ZR2KJr6Km4ePLGJpMv +Supplier#000202164|tTN36qn9CePaycaVQ7x +Supplier#000202183|lBjMAiyShSomdfQRALVH3 zJVCbjY +Supplier#000202196|Q9E9jA km927kP46D2d6Hf +Supplier#000202197|hMh3TFt K ZbEg82r8Lah0O +Supplier#000202204|32Ut0Ny8HE0eCS4,GdsDn0re9 +Supplier#000202254|PJv,HjU1BmW +Supplier#000202288|DO6AJXHwuiuBUtaLAA1NT6uRZ4tx +Supplier#000202429|zpjfPO tKutfI,1McQ11ZpGU7,TLQWaz6VzL +Supplier#000202455|Rn Sm8oPLqN +Supplier#000202456|KEdyiZudKmrq0Z76XsuHdFH1Mww0SPXvoBpoYI +Supplier#000202573|u kZ3raQbzX37RS8PsTyKG,mmPPTILD +Supplier#000202577|d4deEO9e9h +Supplier#000202632|Fd1FDjCH NEp7039 unjdvArV6aEhyiSsf7P +Supplier#000202638|tApg2BFXJwCCo +Supplier#000202640|1XAm6ESO4nkvphLx +Supplier#000202790|92eLYb8mQ1M7Z5wHmFX,k3LmjUwR WYiUCahF +Supplier#000202814|bkiAgJRKHKUbcbgV6 +Supplier#000202934|IggWWGnmG5RDy, +Supplier#000202984|QQ0tIRhW7u0YdwOZShLhdv1BtDbFg +Supplier#000203003|aHfigwnlmCeAf5qmTUZmz8XhxVBG6JWCS +Supplier#000203016|1FhmigiMRnHoL8L I +Supplier#000203034|rotzfnVTTDU +Supplier#000203164|RZpCJRU9oJ3ORg98KpBExR +Supplier#000203286|qsu0CS,RVI1B,0X2fsXDxINqowFhWzw6O +Supplier#000203407|EgWFQpLiLruM dC2hZOtoxG +Supplier#000203415|NEyJcTBceiP SgeXL NKV1OkaQZW rT8M31jH +Supplier#000203447|Csn JCDt9gUVj5APqfNloVaKXfMEq +Supplier#000203521|Snn4eo9WlsMSrv1eGjgB1TWu4OnO +Supplier#000203549| ghJw4xlRmCjw +Supplier#000203608|AK8sRfd8Xmdd +Supplier#000203626|9E0HmlHRs,Z0QuNm1jPYeS7KLP UUBOBQZJMZ +Supplier#000203714|PAKmsSPOGoaa,Ro6W44gC5WDuD +Supplier#000203790|ld4AVi1cPr2nA0Bcs +Supplier#000203824|hHEqbNWCV3wf4doae3l +Supplier#000203873|4L7sGz3wSAkI63ix7 +Supplier#000203896|YFuyR4Ez oRbQbDm VWVk6whcGas48LNR06UFbQa +Supplier#000203905|vp2htfrQcAtc4ydKN WHPL8Wg +Supplier#000203915|RN8ecivyCkhq5irluQaFkOLw3pgO +Supplier#000203940|DRkI7vln,f0 d99LeE +Supplier#000203945|dMHwy1nLcUh +Supplier#000204009|Ui2PO2xL6B +Supplier#000204069|L48VUnjrufLsUj,s6Mj26Gj3l9 +Supplier#000204088|9ixsd4lzDXQ9Nl +Supplier#000204112|UODPDNkm9ng9J5ouY1p6HxShnTsNclCxYkhCK +Supplier#000204133|uofHl5uAWkix0IGWqCzTiOi5hkyrc590ij3z +Supplier#000204184|ob QAzsFKlfrMOniPETs +Supplier#000204199|EGuas4pp,3WP6AYiLQzrP2tUwbEeVf +Supplier#000204212|,OgNeJ34tMvaJk7eA5 +Supplier#000204220|UU0JtI zKuv XBqN2kHE0 +Supplier#000204228|WUgATmHuV1l9 +Supplier#000204332|sItQUJa9d7P4uycqd28LA9gXd9L3Q9YypHc +Supplier#000204473|2s Wzfu0uLAo5eofeVCqL +Supplier#000204474|XpubY5pKtgPhz8NRouDz0mf4qNitpf3DKrBZY0T +Supplier#000204641|JInAwbhFRQv +Supplier#000204779|cMIfLBHjXJtfAovnc0sLpfKR9t +Supplier#000204794|u1dq2xQZhKq +Supplier#000204819|pKahL PBrH6QRK5s6MCq,skf1WB74uXg +Supplier#000204918|QcHF,eTwYzjJc5Ku +Supplier#000204959|Tloa64QqZfxhCSgIjEFXceU5z +Supplier#000204996|7MYM8AVIjU70PZDE5ca7ZzvH4JWwk0HIykb2l +Supplier#000205033|UuL sF83TTi2o,6jj,0If2 +Supplier#000205074|vKtKRwE GF4FfAoSNKNsU7oAiSK0ylH0pNm h +Supplier#000205110|XaGanp58fPpj1kLFLeypZpciHX6WStROr39N,dX +Supplier#000205173|xgmnn2VbmPVhTgJ TEGihs546O +Supplier#000205231|qXccrD7crxXtCbGtjFESRms t +Supplier#000205248|Rpy65nZLPSR,b +Supplier#000205261|181YLmBzNC2IGydj713fLLApxMhBb +Supplier#000205408|K V68A670go,g9dAiOcXn +Supplier#000205474|2QzrSXhYtBvNN75pQCF1YZS2wV6RWivjiZxUVYTG +Supplier#000205517|oSbX30bYfNpnn9XDx1n,nhChSqw1wN +Supplier#000205601|IUveJ VIrxx +Supplier#000205655|Syp6TVfluoSY6u5K1 +Supplier#000205657|oF yeLAR9panRuFgqXlb1ShGKr98vebKykgcji +Supplier#000205774|w,4kaY42GupMA +Supplier#000205785|DatQx6nkZs6 +Supplier#000205866|hxLAlEzLDJZ6zChWCWP +Supplier#000205874|XKCIaRewxiVH +Supplier#000205902|i6 QSQmMqj8wynrlgAA260zqrdzLto7tITJt +Supplier#000205915|Ly40eZ72EPNmXH34H2ufbJ1kq +Supplier#000205962|pTT lwpxlaISKQpr,dJ +Supplier#000206035|ZuIOscFyIfzlQD0DrIezYLP +Supplier#000206041|TUf,wO DE1Mj +Supplier#000206103|DDbAlYfsinXbyTGUmLpbrIdFom3mRQTP9pia7v +Supplier#000206164|OEUp4qshOI7hZEOfK0vjqS +Supplier#000206186|Qx8lKI9KNmbStXARV66F ka3Fwjx +Supplier#000206267|F7dWq8xoNMkA +Supplier#000206407|,1eRMYLJulyiXaUknF +Supplier#000206559|YBPbcuUz P8xafI,r4jE7iiNeUdkvSTDfR0afU4A +Supplier#000206567|4L05s2 e8DRu +Supplier#000206617|IC, 8kKl,FH8,AvDr3CL69dRvjbiQjh +Supplier#000206656|tNuow6wkYX18Xib5pvGq5F +Supplier#000206731|bmodIL2FPkhUVcgU3nZLxl2q8muwrIV34I +Supplier#000206770|99LI7CINY,,vEg +Supplier#000206822|iPgrlWeitF3,dvLCjGhmtkG3Xc +Supplier#000206848|JbWbY q4z6nMrsz2r210zIaz +Supplier#000206897|W,Jgiq4lBDsuWBErwScJfM 4Q17,j4Lzdys +Supplier#000207093|SkVdOBwYfabLVxA0E3cJLt5g +Supplier#000207249|eJS6HlXdj0qKtNRf5ewZGE4i,2tt3z80PGxiY +Supplier#000207282|HuAAIlivlEVw9badPwKQvOLigk +Supplier#000207326|4Swn,K0wRSyH g9ICFkv,tz4HOAoZvZTLGSln4P5 +Supplier#000207417|5EIRcJY0cP6Bhh, +Supplier#000207440|dzKGGy47kHXqVcl3JT1NM,7mdyW +Supplier#000207510|IQlyYGVbl58YsHZO3XCbexbdAaO +Supplier#000207563|iJNib8go6P4jRaSDL9U1gs0N711Yht +Supplier#000207592|oqhoyarB4kh8B645P67 +Supplier#000207597|5lShLpV3pz97uiaU CxTIDaw4Fa79rhj0 +Supplier#000207651|3RSh5YrkwoLAWmfL,RVeaTx +Supplier#000207672|9OLxOcF7mCl9rQxxNMGkyy9wPKYeEBWgSomTzYo +Supplier#000207700|jHwpXvIiofKaEpPsG5aVG0mp +Supplier#000207972|kVANcrPP1VwlPl +Supplier#000208232|trUqRkcqvho,pnf9ni +Supplier#000208268|ooOPlpO6xt6F 1xqhG1 LcEaPhXk9n9 +Supplier#000208272|io8m,WwyNcv3R5HEvgRNCOD +Supplier#000208371|R7W31oWarI7XMiVad TpwQYGl,iI +Supplier#000208380| 6U WTJHftMDdHGkmeMvgi8KTwFND7EyV +Supplier#000208425|K0QVuoUmSF ARtKkN3F8gSj8tw6jo +Supplier#000208427| 6QZWjmiGLsWuvSVCcOHgc5TTsNlrfIRLRkwh +Supplier#000208488|Is9H56UgAcuL1SdINvJIyD,ud +Supplier#000208548|RDCNCyeo7uO3jGz idq,lM9oW +Supplier#000208599|NqzSs0,gR0KqgBF24ux 9PQthCeivOIgZ +Supplier#000208655|NjO4GQ7hZU +Supplier#000208709|900Lo MCgAoM9YK0T6 +Supplier#000208760|4rjlggsFvai3x216J QWq 6 +Supplier#000208798|21UUIHl1HYGnFjOt6LrLmgNP7thyURj7n +Supplier#000208947|QWpvhv2MjefT3OD92D,TqZbFc7WOJqqAF5W48 +Supplier#000209024|tnbxzy9YKt30lzsIh2w1O6UQ3g6FCYuljwUg +Supplier#000209142|GxHzq,s12kNgAbvKYsBqxWq0DcE4w +Supplier#000209173|HhjclBDcqhSRTGR0piw,AkCYSFRgxl3,3hi +Supplier#000209176|2egWEy8ow7rGFx7UeMeqzgZysUhHb YpfpVh +Supplier#000209193|dGbk45K06g4GbGqauq62IrChyKcta0he +Supplier#000209195|6ph7GqioD2yNb2V5U6B +Supplier#000209202|d8Y1IjFRrs +Supplier#000209285|GJHymsclgNuSTIujBKL ,iOzXXt2PtJP4PcC +Supplier#000209322|k0Meta0aCgb KOq +Supplier#000209383|LBr6,I8vWMR7DIXMQC3NzYpjllxP6rIcvaswV37 +Supplier#000209443|JGeLwy3Zvp2 +Supplier#000209521|Yfy8euXdqzWN34V5rO004Zb0jJRp7mIqO +Supplier#000209593|GHTuv6kuWC 5LlO t8 +Supplier#000209614|T29lU3UlVuf2UaG0dY7UwO pozahg +Supplier#000209650|vea4j0mypE +Supplier#000209669|2vfa,O7wDqJowb2wsW +Supplier#000209676|5PG9q06XgAt +Supplier#000209838|DNnunymLUDDeJ8n9t5 OhgE +Supplier#000209895|hbIvVnlGgsj8Uz +Supplier#000210108|oMlOZMptqstgsvDK2BQoUVqpyCoy +Supplier#000210196|,gP1KTLp46 eN9J +Supplier#000210211|3N96ZyPUN1pgiJu nhXcNc5QCvOyD 3t,bjcB +Supplier#000210212|URxbIJipDJ0h6aNUYrOUDYtQNFWzfS +Supplier#000210242|7YiStQULi 3rADWuJAWu2bhLNEAGI +Supplier#000210260|W1f6Jxb3lC6r8 +Supplier#000210410|EERAIxGNNKa93r3qGrmPzCCZJIT3mZlMxmjw +Supplier#000210441|0n2XeEvBfToW069iJDtareiMHCOcE2cc5yhi741d +Supplier#000210450|7Y z,FWIYnL3eEgHnYFTorrqp4OPoGtTeh4rgb +Supplier#000210510|8GjQ1X8 1mK +Supplier#000210543|ig ujWeL20mGw8jF5nYvaqfV +Supplier#000210585|V0G3YCXXkfd5hh79GKs7M +Supplier#000210661|BLOgb Aw8GrEEA7k4,rLS69f5 zFwbzqx7 +Supplier#000210717|yjHjZR81oAUHXi6EUL2qJROSbo2CiIR +Supplier#000210718|rBu5EKgYBtHBTxxBMTn9H8FZvqsgG,NQnGTLhJ +Supplier#000210778|5d,oyBy4ZfedrqQ75Ju +Supplier#000210852|4Wstx5srmYVyH, +Supplier#000210885|0tr4aY2v5h +Supplier#000210890|VXc2c2Xenm6vSjKJ18 +Supplier#000210897|2KlkZ4ROnfhSXKQX +Supplier#000210912|HHMPnH7fC WZH +Supplier#000210923|1tWQbdd3g,H +Supplier#000210929|iXp 4l AoP +Supplier#000210938|KIHr1AkuWghzJnN0LN1QNXsRED7x +Supplier#000211042|prGyIFvCVI6L +Supplier#000211060|wABXN1v3U89l82,7O +Supplier#000211062|5qHKEHHQRGNLG +Supplier#000211098|xYuCzvMKOlDLH +Supplier#000211173|JrUPOnSvm89a3acJtu3zgBhQAn1 +Supplier#000211186|,irvwm pUs,bqEAWt4stELgpRThp0 jmD +Supplier#000211229|IgG2AJDNJxfd O66H +Supplier#000211372|B7 rx3k9FdRWKORmieMf4OQu7NJ +Supplier#000211481|NyKCDOboRs X49c9JZMzcaaeqqeXdXo9I2MyA +Supplier#000211513|fOHMHj76HKJOEU K0eiwTTztgUrIW +Supplier#000211524|CZfpxhT3OICpL,Wafp,zWksXsEg +Supplier#000211554|gYUvaia4I0 +Supplier#000211616|e2iXeb95 T3 +Supplier#000211637|MxwlKhK6hU9iF0WRQ5wF +Supplier#000211704|z,RvztcIy3fu +Supplier#000211776|9jHYukzpXqtg9q +Supplier#000211789|dOGTvEvmRu +Supplier#000211804|75qf6n1R9TxQy9xrPmrhd2x5C7PaBpMeWxR2 +Supplier#000211810|LfCeFcws ziT9USE +Supplier#000211829|fXwWrK3I7Fn5O +Supplier#000211840|1U4gi3rpPW +Supplier#000211883|dI10Di690vTzjlum5O3I +Supplier#000211887|TfmRdynzcWarVrtNuPbdPV13ruDZHTV +Supplier#000211911|JX0s22p9YaHNcI,w3lVRtX +Supplier#000212058| pWLjNDTZlSiwbQWpXdw3nXMILN9ymu9KUyc +Supplier#000212073|cm1pksmHLRI6XeIxO7aJ71I7 nv,Zy6 +Supplier#000212095|YjC5lrzEmQeToV +Supplier#000212333|GULB63sWOI7U5ZvayrYFe8D9FkJ +Supplier#000212363|hbtebpPUf1NjIoSp EyUAqniVrA83IbQu3i3 +Supplier#000212375|D096iOL5DabVj1B0LkjyGpcJ0,K +Supplier#000212423|OK5ppbJbPbXyaNPRBuK +Supplier#000212442|AqVJSUsrJ0eZ,FwzhI5XVXuPZ +Supplier#000212519|1WbkpzSS64LgsUDa1PH4KNrgkcZDNCg +Supplier#000212526|a6v s0FcyMWeIEba3HAQ2ANiXVGswFRBhdK4jO +Supplier#000212601|ABU9fDt2RLTqQ0 +Supplier#000212683|XfpMu,nGtYNyGEXdT +Supplier#000212739|ZKjRo4UsXtS6e7JrSJ9FWEtNxAdK9br6ndF3O +Supplier#000212807|Ls7lpdQfnTSvwZwaDf8,VuZ,dnMDMrjbY98 +Supplier#000212842|U23QBpmINPyGkzLDkSbcGLbI,UJsGN0Bx6L,K5 +Supplier#000212907|wz2kbI,TFWQXytXE1o5ONuoD8uMYP 9cdah +Supplier#000213053|Y0tgqmcDOmck20gs +Supplier#000213071|1CbkcbkQP74D6t3xU2SfYHgq008d +Supplier#000213232|kXLdOghLKzpd5Ihz40 +Supplier#000213252|0HUnuCQkJmH6dyvwdovfAM3 +Supplier#000213287|xD5y7 1jQ83C,m JiFqi7nsonyyW,j3WG +Supplier#000213312|9bOSHy4PvM AlzpF8 +Supplier#000213356|YCVJjYKkA5Wa,GciEfqOsvz2M +Supplier#000213549|ztFsjyYSicX40BLgciubAohWYUuhioS,9 +Supplier#000213594|5JzLmKhqPEszDw2djNU7sej8o c +Supplier#000213656|hsdf0RPUiqR6Afq38GpMbMfc +Supplier#000213661|JcwXS7VKGMcF6Nn +Supplier#000213716|3BQ8C8JrN1yVIdz +Supplier#000213717|XnECfVLfyP8WQpdndVvYvkeK6 +Supplier#000213761|s5 eM3xhBCnK02P4KogX3,L +Supplier#000213790|j1VsNpfJ85MTb +Supplier#000213800|0uwG0pjBrxPeKCmpGt tdNLIikqgBKQrKvCDfT +Supplier#000214011|YDYseP8e,nd4Kpr9FUm3nDE,NXrEdE7ZDX +Supplier#000214127|qW07vFDM4Gh9K6OdTG6JwXQHtKSAaGcLgvF +Supplier#000214190|vFQF,xQENaf3A8XPmTUL1m +Supplier#000214214|orksYGUyTnw,pl2BPPs3fJvO66OBfY +Supplier#000214226|pOdYKWfROPjWgGrmO4FZgqbjr4rtp9IaJYXOK +Supplier#000214449| Jy2m9tNIQ,n6tbcX6Q6D4FM PKAvH +Supplier#000214609|TgVvZmyCYIItIpg4RjNf8TsU 8oeGW1Pzc +Supplier#000214623|CQbtZUkIfy +Supplier#000214665|QJEJnikbhsYXWNyS17uJR +Supplier#000214778|0,VTLjYS9PAO36dq +Supplier#000214823|1SOdsvxQIJ2SK27Z,uByMUMmDE5VaRr4zsF +Supplier#000214838|UekZbjOiOpwSteIAkt5NBFanS2mWM ZQpnOupK37 +Supplier#000214917|bGqDiWW,POiIi2zRpNZJiky +Supplier#000214970|iUma9LTs2,T9,KsqfYMYB +Supplier#000215076|vaOFy1q7ylND17Nh9ZZiCUQMmvvH +Supplier#000215149|ygTJBbwZSwtKQZbg11jzapLLm +Supplier#000215153|Z4d7GyhnWL6sZsQkp5 +Supplier#000215238|NPKkKSqhrMV6BWL2hzkNtbfU +Supplier#000215305|8qGXOtlrG3eVun1lQ +Supplier#000215363|upzwlI4TKnsUtJtmDpIlgpPA5e4 +Supplier#000215371|qgdVZdwjKCL +Supplier#000215372|JgYLsmuPCXMve5YuYWxCHAe91a8bmumTb4h +Supplier#000215388|kFEAXOEFv3fn6VLNb3tExccKbc6GGlOAB2 +Supplier#000215410|p BI26FwGlsYgdl +Supplier#000215433|C90FmffsdLmiDNpC7HMZSm6UFwtuP +Supplier#000215577|mCehGbr,kUkrVrSWisc3waIqTfdyaI6 +Supplier#000215620|AzyxYM7KUNiYx5oHRBokD6 3ajaaZIc +Supplier#000215709|3cxyI 8BU3XIidawXtJD3b +Supplier#000215755|0 17PVBmGwoc4ZoaEg,i3DDGyZNIULqv +Supplier#000215816|g9DyYkapsgWGzjgqPz00SnnZisjWGS +Supplier#000215886|rUHwho5sJySD8hhfF OFh iwd48NGqb9 Tvq +Supplier#000215986|E38p79jPinAjh erSHXmQ5h +Supplier#000216062|CWrk4D73OiX,7TrLuDXKCM FrQP +Supplier#000216078|HSBEXf0Huim +Supplier#000216221|gJ,RnHsboG73uBqQp3tHObSD1K4YOhvVDGy +Supplier#000216235|mSgfwzPRl8s xKzpZDol63 +Supplier#000216276|gVzGHJupzzZajT +Supplier#000216431|oRMASGa06y9DO +Supplier#000216436|6fbPhdlENs,304Tq8oHy1G8QOXYpT6,DqG6 +Supplier#000216441|CT dMJJfh K,TUH4KHBm7QYIcFu88 +Supplier#000216452|t3Q2LfnvVROkg2V9k7dBSlWWYAtG +Supplier#000216513|Ie9aSU,SY88 GXLjltkf0g4z +Supplier#000216536|jVBy4cwposRH +Supplier#000216600|QCT3nBZzaYXIeJw0J4rcvrcPpRu6HpVJg +Supplier#000216601|jrACPy6Al7Mpm2PCY99lsW +Supplier#000216657|DR0l0m6bje3sM7dKNX7PT2OIjTGVSvx0pklR5nO +Supplier#000216688|KM,t8k2wnY5g1uBhzDqlBP7f5d +Supplier#000216690|JdHT4nT8z3jC +Supplier#000216717|nATJLjyudD4Z1eGqDk +Supplier#000216756|W AhZI15zXXf6Yvrq6P +Supplier#000216782|ROSaQ,mh6VAMHT4TThR576KjMJ0MPQLxSNOPM3k +Supplier#000216784|WGDblqZBEyW +Supplier#000216983|rPzZAnHsLfEK7,W3 +Supplier#000217011|eyKyiTO5MxpXVHyKjc +Supplier#000217063|GKWykFNBSx5U1HhlPP 1lYrFIuO7kz2nwdUB32I +Supplier#000217066|EOBIXRj7FHxAIACDhqBw AdZ6fv3yWhm12H0D +Supplier#000217115|sXOoQUd8M6W4 +Supplier#000217333|eZqQBduaZm3n2LuVj +Supplier#000217341|6QCm,X,GQdY1 QdzmY8I +Supplier#000217382|NbQq1oVD4I +Supplier#000217386|izjwl5TmJm +Supplier#000217408|TVuC73rUDhkoL,a363VHYpF +Supplier#000217497|tIz9nudT0f5wpEKOyTCw02WM9nAc5l EEG700 6 +Supplier#000217509|3O88D9GmZLhLuP6me +Supplier#000217527|6fVxOGtl4enCAwkpR5RU +Supplier#000217541|U0kVLowUtxA6DDNK9rWa3HpnWW42rZ1 +Supplier#000217557|3Eoh3Rs5uaoZ +Supplier#000217565|BniCRdHO87 otZpebumxghnek +Supplier#000217712|J3Jfn1ol8xTQoAjBLJu,Hgv9v1mqLPRcdm +Supplier#000217751|X5Ja1glreBuJHGm7VxJIoABamp +Supplier#000217803|uSFyDLYfCDTu hr5XD3zZcVOghg +Supplier#000217900|g3miNV5MsK,B9wGX6wW78a0Iq +Supplier#000217942|FsFqVKkf1LtDhvl47pf8mX +Supplier#000217969|XPnjnnDfmwGQNy +Supplier#000217971|zASb0IaANHkbvZmkwkIOAhQz2OgrWf +Supplier#000217985|BJKezr5RnQgBdX8p9Vm +Supplier#000217995|zqwDL61totfedH0S9n4pXYus8cHt +Supplier#000218030|PQsHhiiV9L4rqEVLKVphgdkiIY4CT 9Z +Supplier#000218048|jZu2kHoVjoHXE9ldN0CqwF0,VPQs7USvUBj3g +Supplier#000218068|xkwMjZhJuIphPbvdX3coRJUu7 U +Supplier#000218107|KWRFNUu40l8Uep5XJWlAbr UyjIscX4kY6E5Zyf +Supplier#000218123|Pk6oXzv5Ashuy5fjxVvSKU11 +Supplier#000218161|gyUG4F ji mv +Supplier#000218168|,R5h0fuHp8G9VIjYB42Yoq +Supplier#000218179|2RI5OlObaybpnxwJtm6qTjpQUMdP9QdK +Supplier#000218223|v68c6A3vzqlzCLsOqKyz,fCiTbwq1wII +Supplier#000218232|kFdLUGw j H61pfoH3MN5ZY0MBSVhQMcxVPq4x O +Supplier#000218249|zWAyNkfXmq 6sAZlo1SpaGub0tfn 6s +Supplier#000218264|,xRnJx6oMUXYqLlc4 +Supplier#000218291|w5f8HlPLMBF91bm5yfrCWv,bzsa +Supplier#000218300|dmSaRnyGcv16dYV EDUu +Supplier#000218334|4UEHoq,aIR5Qix +Supplier#000218351|rJJRSmF D5h6JOxJvLelAkqxm3Nk7w1S +Supplier#000218386|zhsFMxC7C0Ffs1xEAmw1 +Supplier#000218492|asUJ1E9hJ2TRX +Supplier#000218515|2Ap6,ZPfCEtuyI1voITt +Supplier#000218559|Oz2I7TQ6W4xiL1ZFqiL +Supplier#000218700|HJ23xVGQ1BFtwUH0wf +Supplier#000218716|fL6Kaa9AmonmaPh mR9pyWvwEbRdxl +Supplier#000218719|CI7KXnpsiVVxbv1p9QczscRoZng00KsD93F +Supplier#000218813|FIlMptA9YGa0e +Supplier#000218890|Nrftx7H906AJuLhZqqliHTydQiro4T07B +Supplier#000218963|7qlQm7jX8goPZisG4IJXOPCZcInqch +Supplier#000219052|l2BYokfLfnTX55FtHRtvePk6pl,v4czXKHMB +Supplier#000219096|6DJdF pBfWuR4IYb20l86GX +Supplier#000219162|X4MHofr8ckzEDTYBDVVzRsWW4 +Supplier#000219217|DQuoFDQna3aA5VovrzfZUHax +Supplier#000219220|Bc3o21kwKUocHeFg9CSSGZM8IOF2YsNQS7yuzdp1 +Supplier#000219268|e00,anRWpB7 3P +Supplier#000219353|ZhtZgCjqW1JFjUo69TrM +Supplier#000219406|FZwGEqwExyGiZqNE1rs9FceY6 +Supplier#000219467|OqGhfqBaxGriKBiWphcWpeL +Supplier#000219510|w7R805DIWiczVa,VALlbVXPb,Z DZVNe6i +Supplier#000219523|R3BD8WJYysx2J1yVInxM +Supplier#000219524|taq9MwFLQtJREZgScxxQkIUlQWfJAaZ +Supplier#000219564|uwh bk1DMyyN +Supplier#000219569|PCWmDvrl3uyCALYJjPBylv +Supplier#000219576|RXkgPqSUIGQE8 +Supplier#000219658|ryEh4xHgORR1uAfTGRLTAOYDAM +Supplier#000219727|tvkU67aiPR2Dwcs4vMbp67l +Supplier#000219769|vjUReGjJ2NSCMeEqPt9CaDJQBMEP +Supplier#000219848|2Z8Z0w4sAZdOAJpIfF8q2D2eod +Supplier#000219929|cHFpqNXXpaP3ZkAh +Supplier#000219990|NlJlA4arXGUYN,8vptxEoPiKhkNV +Supplier#000220123|V9b0bVPmMq A +Supplier#000220124|VHCeKyn5sD,SE5CA +Supplier#000220142|Sq9Yfz5KP2rOrUBg7uPP7C3g,2xl hgTlet0M +Supplier#000220244|l fmrUZdiJ,c2mNZuzsTUytFi1dRPcevm6azI +Supplier#000220252|Nc1I1hA5ml9,YjrPfjWo8nwWXTNqKJ1L +Supplier#000220270|3880SZ,Xl2UV46jVQ5RwJlgTsAx +Supplier#000220357|NPeuWNOa700jBCqCr8 +Supplier#000220366|4WUyRm77p8COprVX14mNRqqX,6u1Zhxu6PR sU +Supplier#000220403|7 B2iAintEB7hfuvd oW15ldLPKrqXDXFH1aOo +Supplier#000220409|kjOxQ0nmC,w3PwREW66z,jp6pTTf +Supplier#000220415|btWhRnBIkuyzSihcpkWM38B +Supplier#000220421|6WqCw Clfgz3bRGAUjhv0CT0W4FbiAfgm +Supplier#000220489|yPvmHICtZ75JCk S +Supplier#000220600|Ad234RSWUTEV7qRVnXk6DgHV +Supplier#000220714|lzekP8bxUGX +Supplier#000220732| yRp,1uL1udmrvvQOB +Supplier#000220814|lL37ig3bGWbp4z6sDLmzBpcYIsDm3xSkmH +Supplier#000220842|sYC1b,tU nLWMKqrP4yUvk vzIx0WR6xk72jR +Supplier#000220945|0Io2VollA8fzw54x05C2Myck nX +Supplier#000220955|HFxulTPhr39AkBLv5EBv2kyKsckW +Supplier#000221036|TxY31BZcjSVxdQjlN5PVtxAr5 +Supplier#000221057|G2pxlmmdSO7pFi +Supplier#000221089|KBA0,d5zjOv5KxiUQ9kpZ2F W +Supplier#000221107|qybHXmmV9RPt5V qepMhjNmn2KzPw3RikawT +Supplier#000221166|bmWhBfMXSIgTBS,NP,2 r +Supplier#000221224|nENZ TycBA LtDh7yXupzgyFd +Supplier#000221272|R0xlFLWAgTZLMpdA8QrHI7xu0IZKbexTW KJ3TE +Supplier#000221337|Rg4EGsJ uInowZS +Supplier#000221429|uPccXMIDVCLLbqnhY +Supplier#000221441|ZgMYLfJwkI72ftAqcRmwy5SMf54e +Supplier#000221455|HMbs6lFCoj otnBE uAqQ4G, +Supplier#000221743|maVJKEXQG7L28 aW +Supplier#000221870|iyYDTusUSc,CAeGoIFV3Y4PAzvW3fvhdYgHu9F +Supplier#000221902|tTaFeKAKf jCxqyvTpMziu143gf +Supplier#000221908|7 KSa 0PGP1q1CtFXpyNhx9cEaf2oQUW +Supplier#000221936|mtKQDcg42UkPTFdyfPJUawspQEf2cIHPq +Supplier#000221993|OPuGdssYGlSHUk +Supplier#000222012|jecdNA605BFH0uG5Bi9muoeNxURZucEf3 +Supplier#000222013|kaLmXk9D1WisClDJdQ +Supplier#000222017|nVD9Es2SmyzdyfxxBkxRhniEDK4tlNdY96w4BFw +Supplier#000222049|O,tOLdeuasIM 62K TzcqcStzB8s9SBCoW +Supplier#000222050|HjPODQuxI,kRFObqmtUI0 Dac +Supplier#000222065|3GFA8LQgEr +Supplier#000222169|XJGrzgnPUVBz7BAitlaYsvZ +Supplier#000222220|2C bhtx6WQBTZIO L3tLmx76vco6x,WXYhdw8 +Supplier#000222307|nrz1uCNBZETQQXSeWqva3KQn1X2owrjmJajUZxh +Supplier#000222312| T3NNrxZpTbIXMID1XXnxwfS322 9wbtilKOkHx, +Supplier#000222358|yA,8136pNwp46shkDIY +Supplier#000222423|UXNwFgSn aKzLRluTT9vwhTT +Supplier#000222445|dTPssBrm2mn5Eg30A0l7lQRa +Supplier#000222458|a3dzA84US,VjHFJp7zqdLhFWR +Supplier#000222514|xSRuniGIqDTm2h,eh92jTtbg +Supplier#000222521|lITzJk591itKkTEBZVe6XUbyTzKt pN4NZRh +Supplier#000222529|Fi9vNbW31hCDDI +Supplier#000222759|XOCP8FzT2OkjtiVMwXc5QM2 +Supplier#000222825|61JHKxLyD8PWN,eLRWojlyEeUd +Supplier#000222899|9ddoOczUOp saeckelprp +Supplier#000222996|1H7bD2dUf0J +Supplier#000223043|vg HTdMBA,of5DHb3aThGA9nNQE7ntypVqylR7u9 +Supplier#000223062|7XpDXYhXOmhshryi +Supplier#000223069|EjIVSIB2gqhE2sFJ +Supplier#000223198|pv2MbnR15W +Supplier#000223282|Bx0GBvhSmD,UjdcKGyBWWYcu +Supplier#000223376|nS2FudWqmOA,PT4 n Cr3GaPuihLu +Supplier#000223421|YA hiFrGw49,IIxYsz7IKO9KqvNMTk +Supplier#000223502|RWHnI,ZopGrG5Loe +Supplier#000223525|xXWgQoGiJN,m0GqqPmGjx3vQunelJKevM7L W +Supplier#000223550|kWLwR1MEgmAJ98KfnDN51LI5Or,tMxKgWV55R +Supplier#000223624|Is9,PrtkaOJ9Z2rx6GfEJ +Supplier#000223686|vFytuHP5VvhggfgZ4yQlTA98tckXe79Fp1AKL +Supplier#000223792|448rnvBzykl4iOZECLdd6 +Supplier#000223891|1xkp9c HqoqYjIaPczk1pJ +Supplier#000223970|zpufrxM9TX0eHeZGxiZ3mG8OqHoMGFoybRciF +Supplier#000224021|JQtLWW0aHPmQWUSqqUff816JnyciJ9ZbrHpv +Supplier#000224053|2NWyHV9j1adRgdrK7b3TDVtt95Q +Supplier#000224065|ERKNPBTUPVRWZcrIpmzJfrW +Supplier#000224101|QxNL5rPjAfrZGSeY2mY +Supplier#000224103|O1eX27ZU7kz9B8DFomqESlDH6gH4mN252F2 +Supplier#000224123|omKjll tSNtNNQ2O +Supplier#000224134|MrxztOw5xryEDJdTWNPh +Supplier#000224185|22JfiE0o1uTfj8WsPKR0PBO7E3Rm11ejdmb +Supplier#000224222|uxONgKKqTd7XISqH +Supplier#000224437|XPRCxR0bKEyVbQybZTbYeTg +Supplier#000224449|7KhIbANHcvSlp60JuWDf7y0 +Supplier#000224503|XP405P2FOmNnbBnTWiPFZ6 +Supplier#000224559|odvmy6wNt,S9cUCnsNBrEkR8CAJEM4E395b +Supplier#000224698|YFAIobKQ,GZb +Supplier#000224746|vCLOzm7i Ic3ah +Supplier#000224820|fFN0qP1PS5Ka804R4WwY7,R +Supplier#000224957|,g2keLIVuKFU5dwZ9G8eNl7Y7NdEi2ud +Supplier#000224967|,kkJZoLmsQhsWrEn9YmAY6DjKyxY9bBZL +Supplier#000225083|7Jd6vnOaYoxjTvC9geW fSMrX80y3zNXfmP +Supplier#000225226|53AD5Bxbpz4eBxEWkV +Supplier#000225250|Dvz0RvO9EbMEKd tg4t +Supplier#000225277|i2Q9z5dG6FJ +Supplier#000225287|jXYH8KRCZoTznkA,mhS7Q +Supplier#000225405|4BdpXEza11oEnWoMgOZeBiT7e8m +Supplier#000225639|6Eqsx JwoImgCV,y +Supplier#000225640|YEuE54xtMfO1mZ5l4NaSZngyLF +Supplier#000225772|at9CHC89 sGSRqngIm,dsx5 TqSjBc,EYF +Supplier#000225773|4nyj2awm oOnph +Supplier#000225821|L9BEdgTayBO0Wmnj +Supplier#000225890|JOEPayeff9ZoOC0n6 DkmH2wDvoc +Supplier#000225960|kinckCGaSVx74mIsbljYQzLuvTOhy6Q7gOje +Supplier#000225986|lBiXADygTWxPT,N2NFyCE,Wg1TI7W6DuyCfJYqfo +Supplier#000225989|wIGUbeaX5p0mwUB7IPs7zoNkyLldW09NaHX,lS3O +Supplier#000226013|MpHfO,WzluWuwgLgZr2,ow +Supplier#000226033|dJXNTscbDbeDMjzZXUduMWVIlJ +Supplier#000226110|L,XFgLWbT,jYU5XS3iSNS8QCj5fHO0I +Supplier#000226173|paXjQCoes72Uw55E6x0GxkqQkak4jmQ +Supplier#000226234|c1N4mVBoG1NchbDULPhCkpkS +Supplier#000226409|2gzHguv7tz18qqO5DL2s +Supplier#000226512|MLGTY8mnHLMNPBilb2NhAvKpFy4f7eZsM6 +Supplier#000226697|7uaWecyGVi7 vZK0g7j4PTV +Supplier#000226732|oQAvEL6A8CySg8Zb1E5HtdRmYzT8R +Supplier#000226807|koqx3IRDmWv +Supplier#000226854|7npyCo05NUblC0esoEo +Supplier#000226976|lkYsWMgCFMLp +Supplier#000226987|QoW9qYWQaArskq2IZQJdBS +Supplier#000227021|0TMuQ1UHWAK6P9xF lioq3ev +Supplier#000227073|F84bAat0GX EF42vPasniHvtB +Supplier#000227108|pTCEM6jbDE3y4KQoO +Supplier#000227121|0IgG5EBpKzjyOH +Supplier#000227202|4M,ezJpJbSfLA6DJ8x qyuUUG6g4AMnYv, +Supplier#000227207|nX uPGCDS9L ccMau8VUd +Supplier#000227227|hZL5tmxN,ku3jHW3US,IcxCJw +Supplier#000227379|IqFjEuSdDFKZyhCdU9ULyHglMWUvj6c5Bv +Supplier#000227519|YgupZv6Vqj2y,f,,X3Q0564xJNIrVHC1l4APPqI +Supplier#000227547|bogguMJXXZ07v +Supplier#000227790|qVKPSnPkiY356pn7aqb,cUo2d3pinJg5OuAEUDT +Supplier#000227832|IOcm8y,tYY9XqfphjDGw +Supplier#000227879|fpG6kHuNIAc2qzrQlQ9KlQVm,5zePrqNw +Supplier#000227918|,8mKVdklvCXNImlomsk0hUSwT +Supplier#000227940|t9y Z2vy3HVz6ll600JoGtr2oxTdVATKQjrtmN7S +Supplier#000228016|5Kf5yZflCfP2lY +Supplier#000228033|3dqZ68tojKe4cWafiFtYy +Supplier#000228211|2AM6UGDS5ysYslOHL +Supplier#000228287|ZxM,LB8jDWOLUTjT9 +Supplier#000228295|jiBDS1Miu6ce8iY2K7IzM +Supplier#000228316|QrPk9JhVlV227WfTWBOGjcUQYtgeZjEo +Supplier#000228402|ZZrmpN,Qejee36vD1eTIwdeG6cs +Supplier#000228412|unVLkTMEKTytF4FlAPFJ +Supplier#000228461|jSqHBhMN2rQ +Supplier#000228507|V0lhmlLzAwYw +Supplier#000228511|pVwZaLh6QBVzw32SrSrCrpRV6 +Supplier#000228573|H b4GuViWmkbUzIFebXHN +Supplier#000228633|K sZ0XSP1fHfg Dm2bB82Mksw5arhJZ5QNxqA +Supplier#000228643|dW19xVmzoaXMmIQ3QnUpgvJwE +Supplier#000228708|j1XjqzqUREwRIvfBL52i9LsRyimET8wBsNj6 +Supplier#000228753|FzUbe0b5TmWrcmxGFWrbFp3i +Supplier#000228806|ZlsULpPg2YLhNetxjmQldKxPHTqP7mwlZmv +Supplier#000228881|p72fQsz PZgiqGvKDK317kPiZ4V +Supplier#000228945|gXIeg3KE29of2unMnkugYEKS9JE +Supplier#000228971|qbQf6FA6mCk9cstAvyUlMtlhUFC,rSlT8wo +Supplier#000229016|1lyeC5aZoqvwbGjzo2rLZQ, +Supplier#000229091|3V439pXCY6xn 4xYusFRkl6u4F39hXf6 +Supplier#000229296|5y mWP8Oj bqgqbq +Supplier#000229378|N2LLB,CGoc6JjDAaVLiX +Supplier#000229518|3aPQEZNYjO3xl90rurMjkLkBp0cukvzn +Supplier#000229634|ntbEd0vb0UXIW7uFDvjQguMoiM 1DCtk +Supplier#000229645|xPuwtE2NYX4qlw4GpKl7 Y0ju6SCxjILQFy +Supplier#000229679|2r8mCXVOY pJWd +Supplier#000229786|QAFfum,PUz4PCaCNmqtmRlnP59CGtV +Supplier#000229823|xITubFcUZrjBIux fCo8sbFESfoz3tL6N,f48b,R +Supplier#000229825|1eDallnW7qH4JRn +Supplier#000229852|geZDLyKhHnDYrCHVJlwDskiG4YhSn +Supplier#000229873|JqvKm,n zhI8pAjVc,G0Lkm +Supplier#000229999|tDlb,ipPtVVYsFHiE8t0URg9z9Z1FlV +Supplier#000230076|iNgOqYb5YbHo6tl +Supplier#000230244|MKs2Y5F5berCKV1HFrJEquDzwX3cqIJ +Supplier#000230312|dzjQhwf2x57GRjBadRVCjiXL +Supplier#000230320|kT9c7XqzR8JkSfJVqz98n9MP4d4jm +Supplier#000230370|KRDtwzR0k7lLPGosd0GsTJ94x +Supplier#000230381|g2,OJNnEJlmWBNcXGH +Supplier#000230769|IgqBl29rVpG zIY7qSo6GPGZGrymBqlqHDdMs +Supplier#000230797|RUnvAPwoZhSvjnlEjm1rJJ29, OXGvgSbI +Supplier#000230802|hdvJfCbl5UbCvYB +Supplier#000230896|fnmdXFvMGloZNiqS9t8ZidcwuRORAnC +Supplier#000230901|c 7YweiOdi +Supplier#000230960|fXmS47h EAPlc +Supplier#000231102|FLBtUvrQId165F,xRNv3irazi1 +Supplier#000231121|qZ82ElQ,2Mr2f9agl5 +Supplier#000231181|D2o3iIZruPoaO5A1PHZl0ziF4SxCHY6M +Supplier#000231213|XuPyr4nE4lZ +Supplier#000231257|fYkbAJYvH1wZ8Z +Supplier#000231385|M8FhsbUBgxXWLlg5GcB3JT6a x5smqajI +Supplier#000231491|4QEQeTbJWGgUMtgQYOpXeAOt +Supplier#000231498|0uX8ZNkJ,unpmuLtavbNWKQ B +Supplier#000231508|GreL3d47uIdfyhZGu8RJC +Supplier#000231649|uHhuXEUTTNHEHBU,nUnxaEcsaPpeXNcfuFATDE +Supplier#000231677|YKe4xk3mYtER0 +Supplier#000231767|GVVM,nT9Ce,YKjcX71qmQeet +Supplier#000231848|wSI9lUvaHFk9ZTOEd1 +Supplier#000231854|VUmPhUi1Gc2ka +Supplier#000231857|kjyJZTE,MJ6hf3bDoku +Supplier#000231976| WmFgrgRGzFGjQfo6L3TDWrcxNcaW8 +Supplier#000232012|N4kwqRsPSr5y3Kvtj +Supplier#000232119|o7s4QwsmOwOqnbd7yZNzIAL3wceZcWMF1Db +Supplier#000232343|bU3nTlGs,KgVS3,8 +Supplier#000232459|vFnCLDmnSNJaTlE9e +Supplier#000232474|DP1d1RRyp4WCLggCr6hxkB,KhVQDBi +Supplier#000232490|JCIHff1q0CaqWLrnPk1eMw22ZrBJx9jjJkT +Supplier#000232628|naH3N18o2CHeydxgc2oEDiwCBVoZggI8,Kpzp9I8 +Supplier#000232706|21tDglmVrKr91Ta +Supplier#000232720|Fwpj5u0fgEVq5lBi7w2Ghwp,tTdE2PcrZly4RoX +Supplier#000232727|kKXa pSIkSKSJox8sKXA2a6eNgVQNjnDkGc1 +Supplier#000232730|q UuEXX8wMrpZeKny7 5rhgSfjIhiS0agD +Supplier#000232796|ffLq4dQLMdc5 e79xeA1J5x7nLAC2SukJFgNS3 +Supplier#000232840|6hYjmKKmZi 6i7QV4Wyb2O580ui +Supplier#000232918|vtwU02YwWYhnYaogBGTAu1b1821M +Supplier#000232954|wiyT6CvDPDPh8Rl +Supplier#000232970|i4pv7EAQK4JWKxJvcINwa FVz5b003wnvIQH2 +Supplier#000233084|NezxH7b2GuvtR7SiHXJJRai4Gg3v,MC8iOmR +Supplier#000233097|FpAz9cTPNvRrissgXeI8VyNJuHKKrhTNmndRJ +Supplier#000233105|riMKXoLwT BY2yPWMZSoiOF7lBF3Ug7 +Supplier#000233177|pv4jwOzi0L 8T9sHvhPAIHru2wyTW5GdHXLDWWZh +Supplier#000233204|4jLN WavEcUAITyCBXcr 3 +Supplier#000233306|0yrtTQx,DTwpe3lHdbV1JxSmk6 Vf1xEusV1 +Supplier#000233335|u,nSSclwYJ +Supplier#000233339|ptY6giMMQjGm5xf2m5 +Supplier#000233346|4vTU2HsCwJy9ynSkMR8 +Supplier#000233398|DSbSIMa0eS9Wc +Supplier#000233450|s1faw2y3KvD,w8 +Supplier#000233520|G92prIRX3b7V1yVmX4zZJQ4CIVz +Supplier#000233539|3qKS1Fdx2l4,bw8T4uGXCakC +Supplier#000233547|leWNMgmOuPJNrZ4yrBPCJiboBMXxYmYm +Supplier#000233597|w VuIPH8ChPKLtXKXtHGiPUHF Vh3R8RIln4yz +Supplier#000233608|3RBiq47Zmc68O +Supplier#000233617|ErTz7OZ Tv +Supplier#000233823|XsVh3Bq7dlFspmCkFQPFm5ZSpNcLgUgn +Supplier#000233934|oojqMjKEnNVd5ixW1a +Supplier#000234183|vbpVj3BpFbLQmCGJEZu +Supplier#000234286|lcKhqIkf0Dv77Tm8g1lEFU +Supplier#000234457|dCChf EFUrbB9K4Jv91V4wF 3 +Supplier#000234461|YxXJ85HTpwQq +Supplier#000234470|Mb5U3RTk034OrIaIT0vxrUIxnJ +Supplier#000234477|R1IErX72L YDOY1wN94 +Supplier#000234497|gN pzog9bhSMGG5bJNQimMWqHRBu6lcqG +Supplier#000234507|Pp72QvjdBZkNUKzxGcLTRuWhUrHyr +Supplier#000234582|dZbetb7,ETXdRXpOX62V8H9K,XJ +Supplier#000234596|7N4SE9y49ZZDz50gQtiOhEeoReyV +Supplier#000234627|axReM6JZeOM +Supplier#000234670|5G,HPbqb5kUC6SrcBoHzRAnKs +Supplier#000234715|EvPS18fzVESjq +Supplier#000234925|DcYZ4UE0ULmvXqbQxb3hAbz +Supplier#000235001|r4F,n,2N0e8bJmKl6KSSrCDMdI,8xAHik1yVEVS7 +Supplier#000235035|ykvLVhAaMjVW0ikgERO61VcjrW +Supplier#000235044|BP17PnluKxyjZ6V +Supplier#000235083|CvYTIesWs9WOKYbwzHm4rMue 5S7OmPL +Supplier#000235180|qoGfP2,n91 +Supplier#000235208|trkt,SuSvHOoaz n7UXdX8ZVMZFukQ +Supplier#000235340|nqgCEHBY64zTXr0eLAhHn7rh,PFG +Supplier#000235497|56 4,LfXy7JlcWDjVuAgBQvoz3qRgRaUO,2fS +Supplier#000235572|Qg9lg6O OwhOD48V5KRUmXW8lMw Qto r +Supplier#000235603|RjCF,QfgUfV7Ip4npSoV7yDWnndmhIUKfvBHL +Supplier#000235625|vEg,48mZH0kg DyfWT8bjVdtb +Supplier#000235639|nupH1NLQlN35xp5dARYKlrA8sxxHsiY6mLI2rYY +Supplier#000235675|,quK,us4ucSzgxHRrV3ihFDB1EpO,8KOkjGNnx +Supplier#000235688|8HGRjVkjbYR8p +Supplier#000235699|KqajPfrRkk9IHwKYS3XOJustxZ9 +Supplier#000235731|AWaZDV8CDucRkZV +Supplier#000235805|tiJxESiM2n6s +Supplier#000235894|zokMXjfZvWY3Ch9cr,DKmh0DQJpevsNX6, +Supplier#000235960|kDvsk86kR6eLmnxiPjoXRu +Supplier#000235979|aVQwJPVZHN1pa,2KrK1p,6tfo8XlA2buw s +Supplier#000236002|cW,3VK6k8Lo3RnnT6OOR ckNsj0Nl +Supplier#000236072|RQm6P6BpoMYm EZ0MbbmOCOZi1Eo +Supplier#000236169|OgSm9hksajZBgir4vH7oW4iOcd +Supplier#000236199|n1OZ6ldF8ltPk4lcqtSy +Supplier#000236289|ChKKkl3VC4i90ZbxJ5o7zJX77XSzsTn +Supplier#000236301|iKDYllgrlIOnuDlL1Z,Ssq1V,bN79uy 9rIdY +Supplier#000236333|YUPCywcyR8YX2eE2foECSFmrzcq +Supplier#000236431|Xhq 89QsMhXN7ah4hk5UzBedzzUIQBkEBD +Supplier#000236478|a7S0pI9W8MyLPAuNNS1v8DUy Rnpb92X6PfYk1 +Supplier#000236638|FWGIJrN0HvMkX2vzfNKY0KiOfJ +Supplier#000236646|aPNRTKywqYDy3oXzQ +Supplier#000236732|zfd8pbCLdVsP2pOveqOQAw +Supplier#000236752|geVMGSDSL,D9fzVOyHvW9UCF0R +Supplier#000236835|LAZtsFqHv4Pkc9vAzJ3CGp2S3rRAnFo3TkpA +Supplier#000236847|1x,YtpeVN2hgro7ONetvV +Supplier#000236939|6evXIVCKFC25s0aK IdUkGdW,EnI4nk,rBlOci0 +Supplier#000236953|GGyh3eOXFOybL4kdVB8Hu60y8 +Supplier#000237057|oDx mW NWh3F0vH6lzA30yTwVmEH +Supplier#000237096| ycnqllbu1P0eNrHgTYws +Supplier#000237108|G8URauFkmlorvcpCNghvez +Supplier#000237148|sCVxGn3cDnN09QVu6Lhp9 OJ4c1oCvbS +Supplier#000237201|w8MFY1aMcFbzZ0,iyaFpVsOPf7CJOOz9yll +Supplier#000237461|iLYbmvPi6wK +Supplier#000237547|QIPzCtaLDLtEa +Supplier#000237585|RddCptkK,61q zcGpJIg +Supplier#000237643|T753WhXoRA0yWfJcg +Supplier#000237663|0mhiIdVG8pNy43TLJduJUxOC0k4bdlHbqlRi,P +Supplier#000237881|nu0khydA8tvn5 TX1sYb6c1cOG gcpTb +Supplier#000237887|TNaHoM2S6Se6WwFLtv,Gw +Supplier#000237902|Zyeg,z93sZr62,SkfB0aJx,UyEZLpG1qjdWoUoz +Supplier#000237917|4 DsGTNpwHrG0mM,CecbEGDkTQiw7Ou8PMSI +Supplier#000238003|jIyu44ACHLmxSdlW3mKH3qza5rkdomn +Supplier#000238005|nrZlSzB4YGOeF3O8vn76JYLDTeKxipJ +Supplier#000238044|LjFNVSqF4eH1Rv +Supplier#000238165|GbaMQPV2E0jN Yqcmn7ww +Supplier#000238168|J32YhadxCNfD91DzgD76TzhtYd5BJiE +Supplier#000238327|JiemH19n30IA0NNVSLTFlTFFwPlKyAInaZ5Z +Supplier#000238459|oNZvWHRwxbLSWVd7Z +Supplier#000238460|h6tCrkmramYe3kcKhetAvqkgtVZSwDt4Fd +Supplier#000238471|vHWsPwHw0qRX6aXD7oC22yXJNCBgq +Supplier#000238570|mC2CztbGvxHPf45wsnnu6p0eaWe +Supplier#000238579|LK9f5,Lq8eHgTH4tsBFAXgWlmIIvZnCQrVs5gs Q +Supplier#000238590|Sges,ZwMAcVmbJj75KD3JT +Supplier#000238676|FWD8pa6bQG16,Pozz5A2C1Vlp4w,T7D +Supplier#000238684|9EyPzh7AQVoYqAcs3HaSfvXRn +Supplier#000238727|t,fill4xAGx3We +Supplier#000238757|bEx6Ua07Iwc5 +Supplier#000238761|cNftrEA5stoJw,VEpPFX +Supplier#000238776|r8A,rcC9LlXHiHnaMnzL0w +Supplier#000238853|ZjjDcHoxCGj +Supplier#000238895|,p0xTEBGMzoy +Supplier#000238912|Ri3e2LFb3TzpbIbmeyc54Z KuwbClw960 +Supplier#000238928|xSu9I2r89lUoQ2h07ui,Ri2xbyVyxgCoUnp8xL +Supplier#000238942|zWV9LraKiYdRrv35nS9P3dfEaF GnjDXEOK +Supplier#000238960|oAh8UQRK1HCNDZZh 6aOCox2yVN8d4Z +Supplier#000238964|qiHQNslp1N,lg +Supplier#000239016|cFhZNUtvf0e yg eBoAOnguu +Supplier#000239257|2 tjmiVzTgBKuuQbl +Supplier#000239264|bcW9XrrYmi7Q +Supplier#000239325|342aN2qTzDr +Supplier#000239335|ERiX1hgdW0zAHlXr +Supplier#000239351|rX8hR69S3fzAQ5,MbpWlRtxiw9iAiw2,1YKB8hk +Supplier#000239539|1zEzcnQFOATWAQzYWhYeRJnMZ,FifnnUoLLmJ2q +Supplier#000239590|UnKO4B3GtKyhZlpIGJkpGI +Supplier#000239599|RzAHKLrEWAoGUYiyiJQYAt6fCmO4FJ8R8jGI7,SJ +Supplier#000239618| CpuORbDpPqY,7RTAoIJgT +Supplier#000239768|OkHMrnpcKmZo +Supplier#000239792|7GWOUbQUWPj8Xfv,TE +Supplier#000239867|8KYv8kKyd2 +Supplier#000239877|s6iQD9Vr 0Ei1t +Supplier#000239882|zPPI,mpnarrr36,dkqJe80L0Z6PNYR +Supplier#000239951|fSfPB5nQMypE0PcP1TlJ4xCHNs9tYy5zs +Supplier#000240018|fw0sXs2l8vW6Pc4TW781rMXrXLDqPfI +Supplier#000240219|Fn4tshkzBlZGx4,uGAFY6lZcW7kn4clm 6eJ1 O +Supplier#000240265|EOsYhQTYnwIDnYQrO5a7s95VF5LNtVjHOVAn,RsR +Supplier#000240330|1bOUtYLiIQnhSq9l2LDIJURuDoQNz +Supplier#000240444|JzJliYIDQ7z1Znmy,axLgtOdnG794FO61SA +Supplier#000240450|sR8pbragzRGG EzlN9wV8 3Fh6l4eW9k +Supplier#000240537|bixoOrOJcH8 +Supplier#000240552|G2GH7,Uar rt4drhl +Supplier#000240577|kaTW06cspH3qKUcj xgfTo3v +Supplier#000240579|mvhLEoz114SWLZDAXT V1kLBIuOrpsR8Hk +Supplier#000240630|ZJ4q5bFch2FRojN +Supplier#000240678|wLM8laiV2PbJU +Supplier#000240833|0In49BIFHqfgJ48IzEegIvv3SGm24 +Supplier#000240857|OIoUQYtB9M0z5lgOUHzhpC0ARw9H +Supplier#000240863|rqf7E60CwH +Supplier#000240870|hx7UnoDMAo4EycDdKgtQBHtmn4vFgcA +Supplier#000240935|SuydBdfpqIp,FpJrtJDnghO08chS +Supplier#000240972|KuLY21ip6DbqdpCQingdv +Supplier#000241075|bJdn2zfokuxJrFUIlonRg +Supplier#000241107|dEWgBJB4vDpgnNSH7jUaaa8cd +Supplier#000241149| ww0R20bp,AiUnGyb,5gKJIikhycCZPuXcC +Supplier#000241167|xvZC4Uv8cuZNMb4F322MvNhFca8zANbA +Supplier#000241175|U,6yjOUPry1aUx +Supplier#000241179|9bbI6fRqh13zqx5tSG2aATMd7mb1COiD +Supplier#000241185|nLSfNqi0WAESy8Fr6 +Supplier#000241230|cgTfXVV YIXRHF5vlhFgoAzJcKrH2mS0Dyt7 +Supplier#000241472|GLfMmVqSxuiSYwfOS0mq +Supplier#000241577|BB,Z6vjLL8S3dtWvqNgNkIcCmAd +Supplier#000241600|,OaWS8orkjw4 +Supplier#000241608|laY08fxzYNHiJV26FKib8DpxCYtU +Supplier#000241613|wCQvFHrpUeouR53YRy QoZgZfHPJrD4AhAatmuG2 +Supplier#000241799|dTfZsFsOWunsI3GmPOirITU +Supplier#000241812|HNcn2Y8lwqR4Afwn +Supplier#000241899|sIXWawF045T3pawqHbW8tQX +Supplier#000241977|mq9xG,zDJdSk4u +Supplier#000242030|gx0JZrMta EOugTp7daLm +Supplier#000242041|nNRVJApB9yC9837eKjh6HlnmG3 +Supplier#000242070|BOKM8aim10s3X2yVOGDMbFd9ODn,xTmYm +Supplier#000242071|u HNHbuumQa87sxHZKjtfkV +Supplier#000242147|L18Ndx04qBdHBi68q J,CIaruvuiqLd25F7 +Supplier#000242168|u0LKJvEeDYlaNufzLR6tmR9mOKPvP +Supplier#000242309|s,,b8SyHh7sDR8Tf4S2tJVUaq1,IKAmL2l +Supplier#000242325|EjYIw7SMZ4vp,n2LwY9F2SBTtQJ0A +Supplier#000242383|ljiBGf9jgjXHwjt,,WLJlpxsQs746lET +Supplier#000242402|,VnQaWf5t6csod,, +Supplier#000242459|SQBK2s7c1 gnTkPq +Supplier#000242475|sabfAtbzXOfnmVx1IN6yACcIAVNJc0L +Supplier#000242499|pM4dyqy7wn3atrOE6Y5KBpsM4 +Supplier#000242567|pv4GarShDPJ2QGYU +Supplier#000242589|1i0pBnjXoLBz34BfuU1O8xRrSVLT9O +Supplier#000242608|BzlMRQ3Vjm414P5FgQaGtxHDEpv84Z tI +Supplier#000242650|49BA1,,n3THKCjZEbuFihy3sfl1u +Supplier#000242836|TP5Y7sJ05XkR 18YhQOlVmZHuDrPGPM +Supplier#000242938|JRCyrQAlgxQ84m9uEFo178LCPxlAfOzUTl15pgh +Supplier#000242970|LWTrtERj47unNUXy7QpGMaeccSyIst +Supplier#000243017|rATrFxHHD0qfuM,GSxX +Supplier#000243091|yYRo7bZq9hcx,91Go 7CLne PpI2V +Supplier#000243106|URLwi1sxZpU,4,MAWE +Supplier#000243154|YNJVAYZ7nyZeDMBlbPXNlwcF09 +Supplier#000243186|H3jfjA2LlmGO +Supplier#000243209|JkS1PMBzClxYrS6cOSf8yDA6 +Supplier#000243287|bDo gH2u,2gVlFEelQ +Supplier#000243305|kngtVr0uPonA1PVZRYbP92NxNtPjq5MR +Supplier#000243336|Gxl y7FZgP +Supplier#000243354|3OTzrnhBoIrfsFmgIouzydkF04tIxDTrJCHZItjP +Supplier#000243360|pBfFzpTGBFE4CdlwmPfE72 +Supplier#000243363|4uKqR5s1DDpTQhBMWHsnYL3 +Supplier#000243386|MLRvZ5k2BvSICEY,4ZXXKXiiKYZeJIZySw8zs2rK +Supplier#000243541|sVBTmk1,NG25O3q,8MqrEgKuiU Wc6L4n +Supplier#000243598|jh8PqAbSCKz65cdHKXfvWbgplRu +Supplier#000243603|hL c9q,Ko CHPyoBaMXjAAmji8BCg4h +Supplier#000243635|C xroTKld IDiaGht2 rdnm1lm5F +Supplier#000243662|t yLv80m64A0YWthQA +Supplier#000243702|NwPNk8ldXI86DguYsxhwopWCpwA +Supplier#000243743|NKY,2CUeLGQdZo7LGzVJOIU +Supplier#000243760|XuJyOCb2t zUSC47zG830d +Supplier#000243772|IUsYCpFRLV67VyOqyuakd3upbCAtydy008l +Supplier#000243813|GVZkoqC mJf,GEEUkJu28dNni +Supplier#000243831| 1Qt LvJflQxkWkyj2cB4koMyMIYClxe00N,A +Supplier#000243912|y8N0BIBvIn +Supplier#000244040|EfsNlG4gnMNwZYgidjG3wU41wv7rIVl +Supplier#000244073|vVzErCrkm,JwwfZ2jPyqGDNjIahomDTG2,cL +Supplier#000244087|6FOAVS5Qwu7Imm,fby 7GvPa +Supplier#000244120|FlbRzslCrD0,KRGhRcOR5u2O,fUHdPgYG8V +Supplier#000244153|ShuodZt SlEMV9P,L +Supplier#000244157|UOkJQYG8rohif6Z4M9oos3PHJbhRpVxnpVp j +Supplier#000244188| zgCWfYHH2ZR6iENGg7iDXpJLlg1 +Supplier#000244269|9t,oWDz10wlyQoBz7bj4t4Ic7sFHfpR +Supplier#000244270|nqbGUl4U1VaxzM6,moB,SXY6TW5YRIlFxAVjHRFk +Supplier#000244283|zqI4hF3pNGr giZfJeYHo1hA3Zc0pK0ff4fd +Supplier#000244287|DT2pmC1C4bN2q CEEhO9pAgwT +Supplier#000244299|tdbMjyBXRmCpG SN2k11zqBR,Dz9yrap +Supplier#000244398|8fLn7,ckXJ0oxtxEHBC +Supplier#000244425|,DwiEpgJUWr +Supplier#000244464|WqiCSmMvmJ +Supplier#000244554|FYoEm3fDqfL,9XpMe7A4zNTdJtCAX0CNrVBB +Supplier#000244571|TRKxL,iSuJLYrbGQwRs +Supplier#000244836|g4KQewC7r1q7mITvPRacalj2S0Bq +Supplier#000244850|nhnlwmMgiaPwgN1mWoeQBW9PldD3sOLqRXc +Supplier#000244852|OAD6u9Qwdw g DXlqW91u61hmYtaTe +Supplier#000244920|cquP6BmMtZCoDbXfAoqiVGqIePI2WTMFg6pEwh3W +Supplier#000244990|ip352ydBZXPoI qwUhbuI3m9 TGE,hmC +Supplier#000245022|bnBia7yhoqHln srg1IhM60A5BXNZSkla +Supplier#000245077|jIR5MiYNxTfUZcOvZ +Supplier#000245092|g2,bVrNGmxco95c6gKxr8gH,TOp +Supplier#000245102|pz9SYtXLItDwkgtHC6VD2Gzw +Supplier#000245169|s9yN4TxsANd 7C7Q ROMN3 +Supplier#000245171|ZhMKRp ERVitnuARJb +Supplier#000245246|LFdSvC mBsKWFMrWKK1hclkyx77 +Supplier#000245291|TDHLfLI qY +Supplier#000245306|nnP9ELLAmhRLA +Supplier#000245343|uUOKhHpUAyNT95emKuCGcnBUc5Jl9FwUTBV2Z7 +Supplier#000245364|HTdOhDi 3xvdqKK9Iecbs +Supplier#000245380|6r4LTpXFpnfUpsmv38kYG,cfLurDtDiR6 YAN +Supplier#000245458|xxyZjpdisc4YXMnem +Supplier#000245588|JpCJu4ZjIz0ping LzujcED0ZQg +Supplier#000245704|T77IZ47EETYy1 +Supplier#000245737|o6W0VE,8w8JX2qLEVq +Supplier#000245803|4jEQnmLdL8nOiHIL +Supplier#000245852|pSPrGmv,noqX0y4ssUA0A1tgwJtaR04w4Rfgu2o0 +Supplier#000245924|3Eu6E9CJo sVGTpa40kQMe7tnipUl +Supplier#000246044|Xoxki9qscbLbnTLyeggxX6plOT +Supplier#000246154|xWePwrqLXPooJd,Cb7fITeYBrMceqjG +Supplier#000246323|BU78XwACiUmKHp8Eb5P +Supplier#000246411|r,RfYqcdNfyzSB9r9k7ZTgTW +Supplier#000246447|XRn181nswwjaxSCnlo +Supplier#000246461|RUZpOnY9mHj1khJw3yw43l7fWm0F +Supplier#000246507|zKkDgsNivd2RYZk Q +Supplier#000246563|oLU,,eQioB 1pUQP6IqN8EpW2TU +Supplier#000246710|P1Vx6ofPdNYhQhag,YZgUDK88J tm +Supplier#000246793|1yeriIt95H +Supplier#000246858|xy5vgfIICjpB2kyDQLRXeokjhlGBcDhFY0 +Supplier#000246864|dYOv9qPd514qYK0Zh7CNCo1EYeDCFvOTQcM1Z +Supplier#000246877|S4wAvCbvaMWmA2UioFwl6bfpP90HvfAu +Supplier#000246899|OvgfnLUeQCZYwsckZMlkVvzR +Supplier#000246915|87O4IFAna7i7yTOqNC63wjDV,W +Supplier#000246931|L8oWsUO ,HmtVrGxlMkK +Supplier#000246970|Uix6MurEhCSOImbO7eoV9tA +Supplier#000246974|1lNTO4 JD50y0s +Supplier#000246989|4hWYTCE1neyxoN0lEd6KrFxE8cFb7hJ +Supplier#000246993|kUbCnWBV O4Y6rzqMg +Supplier#000247121|Imu,KTAtX5D +Supplier#000247301|sIoAdWK4Xkd +Supplier#000247348|,sKvK89DBTjbTSCH,x1312s +Supplier#000247424|mfLDwntekJ2y1x1D1ip7R1 +Supplier#000247609|yZ0L4MvCgtTT7PRTIH3N +Supplier#000247620|DvSpmENkXy +Supplier#000247637|rIlQaZBdoY0ATtxYF,PJz +Supplier#000247766|n62K9,lkguthqefdUvlhNGEF ,AGD +Supplier#000247925|DVGNVjqPFkZtBETjXb +Supplier#000248005|uWrKV6,xf,q2 +Supplier#000248133|yf6aKuaqI4XlOMLDz7yBKKvJ9B +Supplier#000248236|C,cPRyeo075hgqPTBTAqGN +Supplier#000248292|Uck PAT6QHxoQyJBxVLYS0epT +Supplier#000248302|gy0yCRDzVj4EY Rq9HS vmr +Supplier#000248342|gvIbonkFmGYX93ccjDFgOp9YFwWoLvYkPy +Supplier#000248425|EnkJEAAdC2dw9x7E8F6irK5ziO4GTXjIXS6GBrC +Supplier#000248581|niqTV7if,Oeqw6 Uv8EDr8NR9GZ1Ch +Supplier#000248607|nmk,1pUYTqIeI6BBpMfGTyUQVR +Supplier#000248618|EbTgoLIUhT1fxbATr +Supplier#000248631|zwWI9grwBXo6od +Supplier#000248718|,VWzTrF0dA5D7EWq +Supplier#000248747|4afTHP,uk cW8o,EhOfsWv +Supplier#000248769|aDO2LFXS3MfurpLKr YAxxLFb +Supplier#000248789|KaILU9OvAABdL1qzG2s2DXW3iKkLO7FilnDqBno7 +Supplier#000248802|07,Or3a82MJ1aHAFCcYJWB3Y8DA ZpFwl +Supplier#000248820|XpRUjH7oZXdP +Supplier#000248876|ARi,XGGXKhCdMD6GdKjXfmOj +Supplier#000248894|6bnGtyhziBA9kIhTSv6jkVasfSUnQJBVso2m +Supplier#000249058|QUrFF8DN5JrG8NNXF65 +Supplier#000249174|pUKwwfqb2T6co24 +Supplier#000249190|HCGqI,L4QU2CtRwC1RpZND +Supplier#000249437|ip1ERoUpIeOGFGQdclmuvGVmVChOboHdo63b N0 +Supplier#000249592|oGDymbtpDxHTXP +Supplier#000249609|bJYt0FbDWXB,eQeTQwPY +Supplier#000249659|03,JXVPLJmZpmoi +Supplier#000249716|rqOr5VRxq8BaqMJq neM8gtfP +Supplier#000249833|mWkJOxTIUaMWm0WeYH6r8v1 +Supplier#000249922|3botaimYRD +Supplier#000249971|EStJUJE2Bpyzq2lb +Supplier#000249982|7pJFyp45Y1f54Zea8YxcOjEWD +Supplier#000249986|ZZTJZNf Rb5KJDBCsg9iiJbZXnUF +Supplier#000250008|Ithf47tfO6xFCvV7TfE595q8j2EZT4zpb +Supplier#000250086|i6w8EmQiASKpVP +Supplier#000250161| KjJ88HM2UdxZ68 +Supplier#000250175|u,PylNeaaI79M475vh5QX6VNWyPSUQCZ +Supplier#000250202|6I0zKwC5ejfKaAo ZVB8UP5aAhP70YwpL4 +Supplier#000250225|73gh4lKydeYgWt6sgxRsg nM2bI3A +Supplier#000250230|fbHQXYcXzSapKm,4jUSHOu0DabXp +Supplier#000250267|LFMj2iGjonfSdnLnCAUww +Supplier#000250301|JAfC9LBVJwqanw0TNIyNPScDVZLmcjah +Supplier#000250364|jITTFTO2P0NT4ez2uuA5GFw P3JC +Supplier#000250420|V9 MqAoDdeIUeDt +Supplier#000250454|fMC9qNfOFkb1TSO8qYnmMoo,IxdjtvE +Supplier#000250466|RsNJzdNQ2kmwlVQ0wyAFGV47Dv4dsqsyn +Supplier#000250471|8loarBvkW2tYR2D8w7K6,A7r,P8cC +Supplier#000250473|lAFGbL5MWSjRwoL9umqQ4W63rWe1fdq6Tcz4u +Supplier#000250480|Wzes30yWOE57xm4hZbhQXigvPzUwLWWg +Supplier#000250521|n9,,P3CRvfWCa +Supplier#000250605|B8P62NVZ beTZ6tgwuFk9PCLuABJCNIEo,u +Supplier#000250666|0gr vML7Lmy2o6SLv2jGoizPkE +Supplier#000250690|wvbyRoXZS9cqzNczvNLKk2XrQP,4OWnGjA +Supplier#000250705|TTKWMTz4t16aEoUHBtwREssZ6ixAw +Supplier#000250839|M IFpPSkBvPXfO96jIxMhNNZaT JaLgkpd +Supplier#000250922|V8TitsOGk8sijWKopg6ZlLWWs +Supplier#000250936|SEPP1 MuKmBj +Supplier#000250986|jw2W2 zKeug4CFMXJgUHZIppM8qTL +Supplier#000250987|e9ObdAmVzlNV,L9wPAxyl6,izdYnTeL2crRVV +Supplier#000250997|3ljQ43kZB9yO2Rp2uIq,D Iq,u +Supplier#000251177|nDq13dRsTD6Cxv0ZszOm cdzXaZvu +Supplier#000251180|0kt3,FgO6A1lu,spTzQwBLJxhqNtZLDMz0 +Supplier#000251326|eNYVuZUfSehC0Ne,2a,JNenCbB7I5enH +Supplier#000251408|wVc2VSzqdovQ1VFVS5THI,veZp5mPhNcy +Supplier#000251558|1Bl3wGlQrcIDekx59Bf7VeqEgv31 +Supplier#000251619|PtzSHKuG2MgIlDRQPvsrB2GEo2,TAC +Supplier#000251626|b2FGExKzG7amlS,ryM6s7 +Supplier#000251661|IhZfQFIsGQ1 +Supplier#000251700|V8x6rXJFDcNGe +Supplier#000251840|,acLE3XpcJBmEKWJfJktvT XHqPLUnT +Supplier#000251964|H385SP827zJnp2cJ +Supplier#000252092|UjSL3LDadl34m +Supplier#000252122|pPJbpd83PnMZvxA96vl0uE7pa +Supplier#000252181|2VoCVMuOYYiooqME7kT6pM +Supplier#000252411|VJfIdttCZ QUFHSS2XROdCmiwtckLOa1m7lq +Supplier#000252430|zPFUr ces5pg7kRZ7AYr9 g +Supplier#000252447|Pd2WoP5V2SCbeAsIHdKNx5oRcuSgKr +Supplier#000252467|8cl5C3p ,DfVLIdh +Supplier#000252477|k765ztwI8f12DBT2cIqCpQ +Supplier#000252536|Eg0XPAGjDU5Ws882NwzzaPOQ2eS7V0H2TBvYPc +Supplier#000252566|vlUpiEAUve2jecr0FDZBZQJBay2vn1PPjoZZ +Supplier#000252763|4eLMLPz0JptxYk1p +Supplier#000252817|sZg CfXYA dimIJ3S9S6d6pZY4,ILbSeeXBIwzYg +Supplier#000252924|WpLy5kwClFmZpUiuI5kxWD +Supplier#000252953|CK9jEv,Rz dPsZ48ch1Hcz891FBg 50Gn4Q +Supplier#000253042|RvFp ADhCfTKU7jF5ee0msMlmy6dGKQK +Supplier#000253047|afOACCvkNSxLXz,wHFDU31g BX94FUaAhElwhQ +Supplier#000253280|AV2QC vDgrSu +Supplier#000253320|S0Ve0,GS ap +Supplier#000253460|hfINR4I76Z8TehUGQTpsuEntitJdIuF0zKO3 +Supplier#000253473|rXy4fnQEPNAm,lxgm5 +Supplier#000253533|2aLca9DqVqH +Supplier#000253555|nJ8dWNmaJRKkBxkLHfn39TLrdmy +Supplier#000253623| S0owFk2c2oE0RB +Supplier#000253687|Pa2vviuBNekCqlaoaa0Z8CJHr0yC4,pKjE +Supplier#000253719|EgvygVwb,gv5MD,LlrNF28JE +Supplier#000253732|hFc8LpXNPT71lJLyXphmqNC +Supplier#000253733|PaW CTJlJhNrbdwRH +Supplier#000253819|RS7eiAJsQVzNfbFavBvKys1PjndHC2HrFa5 +Supplier#000253921|5hGu3b,hPHY0Dvlh,i5 +Supplier#000253958|bM1uJmyryfivoIqMB,U3S +Supplier#000253962|nHw,3wnzyrjgOQelf,BiZUiEXd5Sz04qSl +Supplier#000253993|qovDK Q39NOCDeEZpJ +Supplier#000254011|ZBuBAePeLrM4R2nsiw6Hyhb9wZXGK9Mho, +Supplier#000254086|bN5DeI4W623di3D,wx +Supplier#000254143|2k92JYVJrQ6q,Z5fIvY +Supplier#000254158|5oEK32kPqla5UvQ +Supplier#000254282|4OW4X,tyOOZTOwzXITqY AE v1laAhGtl +Supplier#000254424|T9KrWneeXLruuWmvO7 +Supplier#000254474|ffMMS upUJtzHhz2tjbXZRLxXhjSA6Ty t1rB4D +Supplier#000254482|P NvK8Qyq5imKLYGf6y +Supplier#000254554|csWCY3lGF0c8 o7Mp S3NqFTQkNybO +Supplier#000254656|hgu7WXs5qCI Q +Supplier#000254658|fuM 5T3YWW5y6wYxgzjUZ2agYLDlZtKi +Supplier#000254742|tCMLvQMLQ1osKsddZ4KRxWJ25L hNg,uc +Supplier#000254774|eB5s2yGS1ukG95 +Supplier#000254787|qz6N3B8XmqyHS9Zf +Supplier#000254790|AMbIvBH9KiBlursuDUWN5aR +Supplier#000254818|zqBQEtR8WVSQnh0o23ciXhAMpsoaQG,VoUlkzF, +Supplier#000254877|BDmiywp,Q1i +Supplier#000254988|CYf2vKf,I7Mi,WYf4tFkyE3SoJigvy +Supplier#000254992|Y4Lloq C4TTqbO4hQ0XrZ,B +Supplier#000255114|UsFoxy4cPjnAVdJ9tHj8xSo,GFourjLDv8kS1 +Supplier#000255136|yL0c,mNarGObJIGLntWO6Hbu3MyD +Supplier#000255172|DkTbTXaPOSn8D982 I9o4Zjsucei0t7LeM +Supplier#000255222|ydn9W4l Jn7Zn665LU0PLr2ZoNg8MbC +Supplier#000255316|ddz3ihUyiyIAI9PqS9zy1nTOYJ9Dl3bp +Supplier#000255425|51BVNOODlU1fZfxPjqwE9lc +Supplier#000255823|qM,UZdCbqLfFAvGnySqPSPz +Supplier#000255848|Zff4sFvI0tqdnGAsS4suPr +Supplier#000255867|tZBRsbLtQ8QFlogUAyyCaLfF +Supplier#000255921|y8xHP88bMmUu5xbnyOBtL25DUu1n +Supplier#000256046|Dgca00XzpPwfzH NCXqKLsPAdswHL6 +Supplier#000256157|d5oYYmr2,0rLqmFlpzcAqEj +Supplier#000256162|K3,asKDLQ85 rStkq +Supplier#000256208|peZpj3KQz9sgmPyvLS0xWzwNG +Supplier#000256273|5Du2tCPKTQDv m9 kI96z6Osval,K3NXcwKWf +Supplier#000256275|sBgefBAwEEBOMHjTGB +Supplier#000256376|hxeCVVN5mjl8Z +Supplier#000256451|N5qW9Qx 0gs9NT5sCeU2jOoI2sb +Supplier#000256486|SQ2FIvvhgXw1AxlYE +Supplier#000256558|iIHJaiGEuIhxBicTjH1EiGorWc1iIk6 Tm,EA +Supplier#000256596|eBreR5plM7i3KDHRaasYYDCN +Supplier#000256750|4yDJAQlamUgaJQFE77I1uzCDI +Supplier#000256794|LRHXqyJuCVZqfRlV,QbnV7yhCVwboIK,MSDO +Supplier#000256821|Yuu53OJk8jDYfXJGO14gt +Supplier#000256974|9x3mLFAQQK3uSbz1JPj1ibwUXd RLwsow9YxuO +Supplier#000257017|0YDNCDsHwz +Supplier#000257154|bD5GVosXi90U1,dHbw9zWnuyk5MsmEcLv +Supplier#000257167|7etjuKhCu7iw +Supplier#000257188|02v84Np8dgIVFpDClxlIMhOAJLY1Y8Cq,ejyyC +Supplier#000257230|7tpau9nHyXHTNKVl +Supplier#000257244|LvkHCG7vVCp2r2LNliacJpomxs3byXzIS4Nn +Supplier#000257251|ZBu1kagedgEmSp07Isn8KtcO5yIke7Rd3x24ADjQ +Supplier#000257263|4y 9Yc9MosRGBhH3g763ba7qVy62 +Supplier#000257387|kxWonbWERjrJNWQq +Supplier#000257390|iwLmY9oMrzvKY3iXq1bf, by +Supplier#000257392|yoNMyojbB0R4dyE7mPn +Supplier#000257619|NHp3OdC0i2VeUu7HLU72uVyhEYLE +Supplier#000257659|jApvrZoiSiNGtZP94mA,ftt5DowEVM2AREwdOSWe +Supplier#000257702|TSBF2Urt63pv9slxdl0jp,i2XIX89,Ye,cUQI +Supplier#000257813|CHbynmENIh3T9fgs0wFWuOkWl +Supplier#000257853|XJLKwKhSBuKflZK4yoYpHYpQ68,oQNuUHPy +Supplier#000258000|J7LraKpYUYE4OG,EI9M6SSLIlnXvY 9bCfiehx +Supplier#000258140|g33icgWcvnXmsW2 Hbk8jRAbHei +Supplier#000258160|4tcCLbEAS4HhvZxx,u7x3SVrPqwfZfCH7qymXk +Supplier#000258228|9XkxRlf,1FlIl6 +Supplier#000258237|KxnSbipu3U1W2z,,5qkcFXpg3A3ae +Supplier#000258322|kwYE6QMLmQ46MzH +Supplier#000258324|CHTK2IZciIlTCe7DxUahBNI85,B3MOUnRFnBI +Supplier#000258352|Qzc,R7 mWdQ6Aytd8CZzKnslf6ntd8OXtp6w5 +Supplier#000258369|YQLD,JDFNE4xJqTvoLINXsKXdbIoha5X +Supplier#000258417|DHznpqLsvU +Supplier#000258454|A19xVVm19lI4C3PxO7awp H72AA89Ou +Supplier#000258539|iz4EqD2eFn +Supplier#000258550|N3xr9PiD6pc9A,rKCgOlGnQh8cJrm3boZ9TeC +Supplier#000258601|Mlo 7o6XOymjMGQy gwU0mIv6kCHXLVsbDjVJmns +Supplier#000258615|MJSwOyKrbYyazy5oQ 0P +Supplier#000258632|c1w3Bo4pdx42fN3cLB9Y4wXvAGab9D Pwj1Cs +Supplier#000258668|JHMI7SOmm6yYc0pkyQb4 +Supplier#000258688|Be7sQ6edJEgvMhA +Supplier#000258814|NNYyqWuzhkR4gYdRwF8g +Supplier#000258883|PAFSnFGLhrzqp7lYbdz9LjZrXzxT7mIrNcLCH +Supplier#000259040|kq05J1s1K hpCy +Supplier#000259078|qme bTwwPlUZp6 +Supplier#000259140|DRegHatHHqbCvefXoDfC45JSUunSAnGSPJ +Supplier#000259143|gEIflEnJrhLO2J75i +Supplier#000259180|Wr8qo1lttREHY0NBEna +Supplier#000259190|BVmHM6SRQSxZ1qwUhbYjZW9tBZD +Supplier#000259246|lZH6X7TAc4TZMJ6WM +Supplier#000259253|1yq0EK8sSGD8WYGTtpPi27SbZ +Supplier#000259261|Ng6mIwny661x9GuycZflCzfmlS5jf4x +Supplier#000259454|VdWvy712TIHRPplJ867M +Supplier#000259495|StNI,fp1wh2maeLtdzZmPEyg4rviXj +Supplier#000259514|xVGiuzMmaY7vMyFzZxMhNYLhB +Supplier#000259576|V4dqN467w,J6bC9LIhleEQ5vQ +Supplier#000259593|DBMp2BqoMZfQO2qTJzUnaAGmcsZFeoMsO +Supplier#000259726|u,KlKI38JTNi66pg,LugSC +Supplier#000259728|uus8rgj8J6ysS5X0wCzDdO5qx +Supplier#000259820|a5xOsc0iPsra +Supplier#000259902|INh AOntXpj7l5k5WMG3VDj3u,ksqRlve5q +Supplier#000259908|8ZnOsYxXrSdfXPbvVZRWHtN3 6rlUu24 +Supplier#000260111|2PnAGXl gzU7Z +Supplier#000260141|XmL1hv9o2 8UAjH +Supplier#000260148|B1coKm3TYTAZUa1gHy,mWcj +Supplier#000260158| HV1H ,ftGpz0jeSqgRx +Supplier#000260193|sVclmb09NpU0fqZ5XRsrnYrvSSk +Supplier#000260258|Z2eatBzJJBVy84UJAawHlJTXNlQfkjr5Z +Supplier#000260264|Lfiw3sdBnjOrjOp0zEPKqVEaG +Supplier#000260288|EfHrH9O00sWURh7c7CEypChut +Supplier#000260461|xA0GzB9,BO24Nh3fO2NNDjwYOZn3K +Supplier#000260482|H3SB8uEE4lwL9l +Supplier#000260545|j172 wJB1BwzZwKidwbYvK1Sn +Supplier#000260756|2VyiSEkScCIJgkzbSrQtdFTCWzUmgCS +Supplier#000260823|2DEGlHhg0V7 +Supplier#000260878|l1UPwsTeFxr9aFp66MeeRJSZ7AVLtfAIEohdO0Nw +Supplier#000260922|Wm4v6 LxM8Xfoo6Ey18HPqOcKxJ7jbBRai +Supplier#000260941|9t7XxqKT9N3,Hj2 Mwa4u +Supplier#000260961|iK6oERPGhUJ96 +Supplier#000260998|lSHlUrxSTM7zIXcQtvtrD1j +Supplier#000261029|obfRnR,Rb sbWnB6TWQkqq +Supplier#000261045|N6qwiKtICX0utkwCnP6tuZ yEO +Supplier#000261094|1wFUbl208k52 11tPvt1 +Supplier#000261125|QmLEiSxYpjDt9I6r45gV +Supplier#000261157|TJn1Jyio,EbTI33ZmV45w1DUcYky +Supplier#000261168|9dG2VSLbwkTDeMfNIiW8NSPKax1AAlp +Supplier#000261227|RkoWy TaMnHBcxMIl7Q4DEmqoLXfNLE8uV +Supplier#000261267|V4VSlxbxPcI pQO4jUecQr,Dr +Supplier#000261293|RcTSvjVQ7bpFwuT6,tjkCIBC4yElCXovhBZ3o8WP +Supplier#000261343|cQ1qZmyTmA3c4ps4yTq +Supplier#000261368|ExN2n 8zytyyuTreb1scm +Supplier#000261451|RLXu7 71Cg0xEmRPUsLQZ +Supplier#000261549|7VNEYL2XSFdzST7qZ,3C,I +Supplier#000261551|MUYhoZCfnmYWb8NkVLR3pAzByxiOaWOk7zh +Supplier#000261765|VzxJezNsKrz1xM9oyt +Supplier#000261822|QF4y1KadTq5S0aue33Dn023UlVV2bTA8Y +Supplier#000261892|dl4MVN4wDGi3b,oyydKQZXDc1 +Supplier#000261898|i sh2WVY O4901Mjxfc +Supplier#000261904|t62POhnLjAd1M1C,cPK0eU,QcbE +Supplier#000261946|XQOKSfltnHaMPn4n5ryc2TuRz4yfBT +Supplier#000262070|79F1jBS0yoNhaicZY59QOhmZBlWuc,LcNdCIxO +Supplier#000262132|,WYu6,IlrJXty +Supplier#000262311|l8i,wN9cNaB,sl2Xo0MfdonteUunB +Supplier#000262321|iCMH1LJ4plsJjEGBk9WHDB2dwsk +Supplier#000262377|8gRuT3s8UHfS0nfEzEz iNhRdGPITDpvB96RFYq3 +Supplier#000262396| SKUzBoE9ip8Vi +Supplier#000262398|C48xQSeRee1J +Supplier#000262406|az5o2Zrjp3KYl,E5raxUm +Supplier#000262450|mHZlmfOK2BvUVmrkSg5wkFLf6 +Supplier#000262485|HpbZSXCa E9m1yoP7ufeV5mK0S3Eih,3QsR6 +Supplier#000262532|ivViNanJY4hd3qIPbk0k2MHPut31ox9UNXEz0Yo +Supplier#000262547|gvN4DhTKB1YZyCBpk3kr HyOJh5DsxZS,x 2 +Supplier#000262570|Anfd0ZQTZkQnA1f7ZkYDBS5e1Y +Supplier#000262776|Vur9kZYjgTwrVG34TbY0p KU3y +Supplier#000262820|ZABcrAPYFasRVgpUBJeFopD +Supplier#000262842|x7M,ebdKWbvvJEP +Supplier#000262959|WLSDAbzhcgWZGk7Z6pF9VqS +Supplier#000262985|OaSRK XShL +Supplier#000263140|IQcwfesGbh572YhbqjQNjF1Xb4Xao0x2AwbJ,S +Supplier#000263213|EXoOEK8usRExbJJQQLkxZTaBj,9SQcKpv +Supplier#000263228|aYlXNCQLE4jueoOiXU0vUt8LByR ,EbPKBRJ +Supplier#000263278|i5aMKZrNemp fv5vHtMfz fI6p +Supplier#000263287|FOKy7nIDTQS zaHr5D48k9FVRRj +Supplier#000263334|4JJOGkR3NtiWHg54266AyP8qzFou2ATcwU +Supplier#000263401|wB4Vudwte z3SAhq05tIp +Supplier#000263405|C4x vyu2EJqix9ryx +Supplier#000263447|TmlLyKmIT2zmIeV6X +Supplier#000263551|0dK 3l2,C XzYq0ryDsDrO +Supplier#000263555|BihSSMGGtjNTNVnR6w9h5NAem +Supplier#000263563|nhiO4STc3TwBEIg630847AH +Supplier#000263666|KpvtL4EwxglW,2g1HS +Supplier#000263671|jr1,xjwDfIpVVl 69,xTDVJcA,IDPNYB7Ms +Supplier#000263731|umMHNj85kbNc6f6 J8AB5,XmyQ3sEUSc +Supplier#000263748|6Pit8kDLS4bBF3fUPgCbS,OOOOJ8s +Supplier#000263800|8shXYgWP7vVERr0f,RIiyyo39B mxnqC JSbfFh +Supplier#000263833|UKXNGUZ7Kg4dlp7VCr +Supplier#000263839|JSYhm32Re8INjfNOMGmiKIy23TnoFgjlBBE +Supplier#000263843|u,eFRrf,6dmmG9BGUUmS +Supplier#000263858|df,9uNsNYgAPBbiR5V,ASQlLMB PS +Supplier#000263897|omSLIwmmnWBFNJL85hWfRrr2lnLKNLrf8ruS +Supplier#000263912|1 gprRJMe4eo6BVdo2lwAHAzx,Hv08Pr +Supplier#000263931|n21juuClQjhzN +Supplier#000264004|ApIa8BnqoPWFIPRrs 5dBkBAMc +Supplier#000264050|TLZAQ5Lm59G3HptQgW05 +Supplier#000264242|hRoMMMjmPw +Supplier#000264291|60KTFE,2,ofrnGkSIOk8UqipgG +Supplier#000264503|rAWQ8UFyNabTKJuLf9v6zj7QsNaxh01hmtTKki2z +Supplier#000264506|wePiU2GdhXbpztchMCU +Supplier#000264613|hfQ9mOBXWKJ0PDCF4HNeX +Supplier#000264661|dUsjiuFN8N9jLLyOCOrMvCphYUZju STGhkqwz +Supplier#000264778| E3UevboIEtfMDbRzjr,2XGIr4FyIVcXnDdAi1C +Supplier#000264787|WMQwlpHbbzpxSGd +Supplier#000264847|YwNTlozJpP8vdggxi +Supplier#000264923|nEVqfER3vAcp5I,0xrzoGXUe +Supplier#000265037|BX 2T8iBPHQezMDXjcrH0gbZ +Supplier#000265069|Ka8Nv91ZZ FMwgktUi +Supplier#000265115|4X,1THPUYk8Y +Supplier#000265246| U45C7IE9Byn6CLs5fUGrpwD3V8P +Supplier#000265249|cdjyO2PIxPiDZ52 m62 +Supplier#000265282|2Bplo99jPrzj6f3hmU0NZ +Supplier#000265319|sxkQVMTqw8jtMPUxy8DhhHwq2CHa +Supplier#000265386|Qy9 drGr6gNzFe9IQsaFWisruo2JzTFwO +Supplier#000265396|rOlBI0lPCKI +Supplier#000265587|R1AFV 7by3v +Supplier#000265595|ydsSVNnEhQ4XC7Ijuh9IwK +Supplier#000265698|5Rir5bBSM2Irb,QbQpjyoAt lbM4lq1 +Supplier#000265715|EnGcO1Ueh6M5xtnjVOs8V i466bs +Supplier#000265733|r22ZQbKb9QJuiEZS55PcO86A0 dNJdq8a4UVoC0O +Supplier#000265760|QyKXaLyzElZqYPjtTQIT2XYwe,ewEOFK2go +Supplier#000265822|pP PuugWL0RSxp +Supplier#000265881|i4 9s1gzujSx5WWLL2Epa5jk +Supplier#000265947|yk3Kdcc7h,qDlSBTmEheIHT3XXrCuww +Supplier#000266088|,b VcTC7QC9TW J2z +Supplier#000266101|natBpRleP1DrayUqruxVV0MYHBrBigAUoF4 +Supplier#000266250|eZFDItKXHj +Supplier#000266267|Zcn257TerK nNvocxa 3Wwj6 +Supplier#000266328|8aCCBqdnsH123jc9M +Supplier#000266477|imhM2EmN2pFvqQFMEN0MJFUQ64 1WP0 +Supplier#000266492|9IvSSqcbCePtCHhjF8LrwssNY p +Supplier#000266494|ebSkKDF AfmeR,jKvOTzhUjrq l 5Vqru9c4AMl +Supplier#000266548|Euz,qno4ZC1iqLsB,M5IZORb9DM9C82h7 +Supplier#000266588|ns2yvIsBKzLRXpEccfXt2 cUQ5Wdi +Supplier#000266592|wtsNY 0bgah63Ws +Supplier#000266931|z0ASU3uPnNbd0kd +Supplier#000266942|FvzpmR,gTgQzLSCp8kMzWEFtG7uDHW3Z +Supplier#000266946|VXmoLB6mOcJ2wM,S0HlwaMopvPX +Supplier#000267038|5l1abWF6zP4rQH +Supplier#000267069|nXGvcElTclNLYuEAKmI26zDKkxFq1Ehkk +Supplier#000267094|nvY4LYRUKBFsf3JoW +Supplier#000267116|xWdpxCr9pANJPWJLHFkwSRgpjCgUpfnhUbp,A0 +Supplier#000267161|YBQFVyla 7yBumES2sZdcm +Supplier#000267275|P8XF euMm8Z2UpkXkYj +Supplier#000267321|8lEojEfGdIKPpnysHFZKOi,YMBQyTdDFD4XWH +Supplier#000267331|sQKqGsDY7Yte8a +Supplier#000267338|KPCtF4Yc594TScQAfAA7 +Supplier#000267355|5PI1A0p8BAsvwA0gO +Supplier#000267359|mKPJjcB,rIyR6qiv0rY57ps,4Oa8ULHZegFwGMd +Supplier#000267403|CGMrhQQQjlkwdwdc3zV5Ljsai +Supplier#000267407|CMMcVaLszM4WIjk61N06iu,eSBYH +Supplier#000267431|O5MZwKnFd3y11NTdXVFmKG +Supplier#000267474|JZYZ9PUz6SKS Zr2hE4ep4VLAIeoxexH,xv +Supplier#000267484|WKvTfyfypYGCuKX8d8ioHxKD0rJUobPbev +Supplier#000267555|Z98JAa6OvP6rpzaCtsElbp MR58gcjq0VuRWu4j +Supplier#000267590|7Da3Xt1IrzGNrc0BVnm1enuyqinBjj vH +Supplier#000267592|HzmnjyvR pvhlysKxA0XLT,ZYq4 +Supplier#000267608|t0V13T5dDEQd56YEmP +Supplier#000267646|oiHo0qtdmkU3DDk4omLTTRa4xY +Supplier#000267696|iA,77ADna4ooz4,lbqC4h1lb9bF,X +Supplier#000267717|7vHa1YHvDvobpt3JiVZrsCaZAYSWlD +Supplier#000267724|XE5ncW 8e3z8oJPOeL3,sP,JNtgCUjvoiPZ4Uv7l +Supplier#000267871|zS1UJyDzp2EYDs5aAj9 gK3Q7OyIDZT2hgQHLd +Supplier#000267923|GlVqx4nkeyY +Supplier#000268025|PuiTgkcqYIuRoEpdTaY32BIO +Supplier#000268043|,wTo7RiwxnumSCvaxJTtq660sifY1tQZVTHpH +Supplier#000268077|rhC8MgJh1dM9bla3TMzZbsSZADq +Supplier#000268180|zF4rT513BdfCiy2Es,5WecXoy5SIB3KctlHU +Supplier#000268280|3fQ5hc35viyIaCvT,YIBzq +Supplier#000268327|BI,I1GpuRllrFEkulM49UbYS3,L, r +Supplier#000268366|klzCTmGOKqilXG0oGTLjbk7PaTF2IWVld +Supplier#000268406|wclxQjl754gXG8rr5sb682kXAJgWL1Ezzqnkn +Supplier#000268497|3 sZkaZ0,qLJ5oqFTV8HtW +Supplier#000268498|GQmRyHRECLS3swYIuW +Supplier#000268547|VegYrHqWMNj4xFl16LhgjlZ +Supplier#000268562|OUN,j6EDgm +Supplier#000268689|8y JL9a1XlOMgk4Wg52Af5yP55NcyB6ePavVc nh +Supplier#000268692|1KHrKWgL0jYsH2GuKDCgGkcX +Supplier#000268696|AUvLQQhb9jTvULeq9ybb5AmP15bAlr861l0Ry +Supplier#000268847|NUG6 y3kOnR9Jn Qhuph,osuTgXBM2KmqEMOUb +Supplier#000268964|k6algHf0f 9Ro9wK +Supplier#000268984|5fgZ UQDpo61zPP1WQn +Supplier#000269052|b,5oaiVicYPdbVC pnufDhXi0y +Supplier#000269161|,qF8NgYlX0GR +Supplier#000269179|CfZhoT,SLnb,E1 V +Supplier#000269278|6vpfd8,RI6ErW2Q7sr5kMuQDtZlAPecGHVi732FP +Supplier#000269306|cRtmJqD2Tdjw1WSCjc8Im3On2 eQvS657j8,ZcD +Supplier#000269684|XPRDNtw9m7KJEq9gfN4R +Supplier#000269768|gse5RIsujmbr4xk6jZgT50aoME9uFZR +Supplier#000269823|davdP27NM1aAmuTgsWWF99WRvRruAgWzyrxR +Supplier#000270196|SJ v1TOfCadg2E8EnIegAPtH6AMsb7AYxMfVvNd +Supplier#000270281|GZL4jlQqq8nNHXhQqtlrGfOwwdGrM54NLqTbHH0 +Supplier#000270289|r qZ,IMkOvFx9lvbwDTFG +Supplier#000270389|f3HM0Jp5CTuRDWv65W BOUSmFZmHN +Supplier#000270397|x6h47Vl8CM8oN,qgku6Ab5r37bqGXjDCB +Supplier#000270453|4mf5Y3QJ0Go2L9dB70BW +Supplier#000270556|YUBlyWb0so5AWPxLc +Supplier#000270563|zcqreWolX,8M5lY0IGtIhTS,doorG0kbwzcfeYm +Supplier#000270580|cT29o9cPiKwLx7 +Supplier#000270598|jaw 3deNUBK7MOg8FBDaH +Supplier#000270615|cLmtBxMb2CcxUxJMQW78QFBOr +Supplier#000270628|2B6O6uDK8mHbIkiITqAWFGySvhCUPNXcV5ywBsS +Supplier#000270732|TaQsf8rYesObv sHTjUMbh +Supplier#000270966|O2zhX2uS9 +Supplier#000271053|c1m8jSwkePFR2Isuaw8UO4xRCQZOCtogW32Ri9Zk +Supplier#000271134|dXHnE6iUqfB81UvAPToR +Supplier#000271163|nGFKwcDxL5rR2 +Supplier#000271192|RzQybUkqvER +Supplier#000271245|OTUshb0QAYna42pGk,iI85fOlVCdY1mPF4 +Supplier#000271259|0PwFA XVe,ZmVpCD4CH54LK861SRO +Supplier#000271292|1mgONQ879N +Supplier#000271337|uyQGC09NTDTNqSnp4EtqxS +Supplier#000271357|RwlTSzSApGnxvCdgZO6ZaryVJE2dB +Supplier#000271582|hSqRdMIC8ea,AQULhJaEIDTZZD2bbPJ4y0yOh6P +Supplier#000271675|KQvnzwlrFKiDHLJUJ7oRBIJm +Supplier#000271702|jnpR vdTZ8kqtrTYI +Supplier#000271802|G YsEzLHIPuz25dqUNxBcI4YPYmTui5jkyG +Supplier#000271814|FSkXSnEAc3 +Supplier#000271850|pwTYRjU52QGsdqTfnD1GqXJeUg5W9c,8yV1 +Supplier#000272062|QwEKA2fKZ3HxmBgSbEA7oGGyJqe +Supplier#000272082|St77I4OOUCjMChZmP4z5N8e6ZS1BFjaZ +Supplier#000272126|c1Mfk9zMhTg77G3i21pJ9 ,uGHgI6o +Supplier#000272152|zMkOQ0gzkUVD2Q3cv48ur9tipl5m Y7cj +Supplier#000272215|zyLsDkD1foVd2QhVuipZFkR4zzEGle3 +Supplier#000272356|8GtMnENDCZtIc9rni +Supplier#000272388|Pb5D5egxEwPiIrSq7EjdsrqixFtuqFCn,Qeexh +Supplier#000272519|zp9D,STlX7779oSTLG0A3eM msCyUh5i +Supplier#000272544|YhgExwNtNom UHHrHV13FHCsH5D +Supplier#000272554|dzl,PDnhP domYqyTL, CPeZ WXsBi7g3YKE0 +Supplier#000272585|mE1Hy nh nAy5dR3l,EBspOQse3ucQZ1zCt +Supplier#000272626|7GRpGCnR ibHP1bDmZObVYEWYp92aY05PUl +Supplier#000272656|VwS2oGgz0pw,KGvOLf8q,pq +Supplier#000272663|wj,OzZ1rQECmzdcPP6,VIXopiaOIB96u +Supplier#000272695|vKmGXoNhxtcU46e +Supplier#000272851|XNb9wwHJTbczFJumz,CLuduy +Supplier#000272991|pepILuJlWwQbv6,Lct +Supplier#000273003|71ir0spzoXX +Supplier#000273058|9c0wDTAShHZKXt89kpXLdKWr418E +Supplier#000273068|P7qHvIEV,65Vv3WdLeLjselNuxt5 Od +Supplier#000273105|eu5h3yT4PWrzrJ +Supplier#000273197|DpaCjV2ishrPW6qkn67jHKmoIeH8YmD, +Supplier#000273385|9v7mhor587fao9scBFCylwjz +Supplier#000273427|6L2hQfDCEewsUAjH,Gg5V9 hxCyBI +Supplier#000273545|3vRuvqdkRusEfQ9ecbwY1NUq +Supplier#000273560|hkpNl3EpmALyICtkG3ECPAB4fVsmN1ka3Bd5B98 +Supplier#000273634|FXZ 180IenQCZbm70gFzJVfgH8 84vBL7AR +Supplier#000273656|Vej4vo Nmyq MUeJ9 +Supplier#000273784|qYuvcuggWvNSlF1TJGlmYxzfoVb +Supplier#000273962|SHOySMkdSl10bcl5NMsKp +Supplier#000274002|b4DBD0TwzSZUjefkGudSt22OP,Ujs5 +Supplier#000274186|inhjusUWPmUmEtCHzWnqeMrp2LrsbAxB +Supplier#000274203|TKA1XAp3w5QeNs 5blb3 kgAka 8x3C8hgNS +Supplier#000274226|yGFid,8e6xisqGDJhXHwrdk9VK iq E0L3PNUUP4 +Supplier#000274245|EXtv6B3yMMApxB65h4dJ9q +Supplier#000274250|KUL2uABcTCngDQmSR +Supplier#000274350|UXMo7cKKAXCPi +Supplier#000274507|Dx7EZUfhSv63AiGMTi,rA8XTac6OSJupv +Supplier#000274522|ZcPTpUyVknAmxqQs,OH7Sxo99h5 8, +Supplier#000274592|5aTsjgixv4h +Supplier#000274689|Qy3TWsaOFYAYWxNdCE9JVDUeDTEB2xdT +Supplier#000274776|8JD0iPrE5A54a4JzrRJ5pjZni +Supplier#000274782|FDBsmEr,AMJhQPKtH3jrGGfK +Supplier#000274830|W1XLSFyw k6MKt,Sw7Gsl67 +Supplier#000274855|6i9w73QJAazXHHVL3ifMhnof IW6736 +Supplier#000274872|bs4cJtG3yzTobP40 MqyC2BdA7s +Supplier#000274916|Bq5agjibk8XfP +Supplier#000274955|1MbURyMT0zzv +Supplier#000274965|WX8hb41S5229VNgG +Supplier#000274999|v8ZMc7vBOm3mP,8A3cbKDd3b +Supplier#000275041|0CsVeUi8KmGDrGNuvpBG2sqLLfQT +Supplier#000275063|0tqWIe9Svdx +Supplier#000275087|3LKfNeeR45X8gWWw,sb5rVEF2ehK fN +Supplier#000275102|lZHaooJ DyGC +Supplier#000275144|nn oSXdRQkDQ8M8nIV7wVPua,fLrApDCo +Supplier#000275155|R2xgmTzPlbpuUtfYmswPcsjSO11ji0wMM,4LkZC8 +Supplier#000275302|BDgLxIrnw8brJEGg,yuqo +Supplier#000275306|UVpqBRwWcwZ6KwzDcgOEsQByi6Nr +Supplier#000275326|2G7NPP9UXlJz05F +Supplier#000275367|odc9WYieAFQGmdl7qi0BfN7ylkIpFOb9c54oOZ +Supplier#000275453|51irWh5toU5EjY4xI +Supplier#000275478|X3iy7kkaQWfewD50kXAf,GD1QbqTz0 +Supplier#000275507|6iBf,IFtepu6X +Supplier#000275562|rhDd7zrUacBwOK12yR,L3zB9gY9ZE9i9F1Im +Supplier#000275605|0C79ZvLkIchVaBiwHbWAComXoXspqgfNZh4W9VZd +Supplier#000275668|zQDqLYw9qz7 +Supplier#000275812|ZwgVQoD37miCyanO +Supplier#000275814|dxT0tLrqVi31JOEBgmUcV8y4DRckxZuXX,ub +Supplier#000275868|lDDt3dITor7ECj LStfscosIxuXkS V +Supplier#000275892|ONFvGCb5v9y5J915BJAvRGiKH,g +Supplier#000275903|hh3wc0xGVP ODUti +Supplier#000275958|krvBY v,67 +Supplier#000276038|vZyCKAw8iV7cATKOCiJOwKks1t,5bQL5siPQJIe +Supplier#000276064|k3UCpLIlSV1hzCqekau8VU3CD +Supplier#000276169|MFfxeXaFpXNhyhRP +Supplier#000276187|JCJjHWW1TLyFy4aorfGJorvwttWgt,a2M8uehL +Supplier#000276218|zxkmJJgUCCkMmJtuWNtT8SwEos8IPYUK4Treu,By +Supplier#000276219|a7HA8I bzxzImPtO2mTvNzW 5dJOkAOCIqWZ +Supplier#000276256|lISAozrz81Y9pgI1f6ZGPEin0Kq z DSELT8x +Supplier#000276293|z2vL0TRlCXuD, +Supplier#000276345|7 szI1biySRDeicqpa27AcoT8MqfqdnlZ6 +Supplier#000276370|5BAdkPnQbX +Supplier#000276383|fZU,,so8hCDMaL347JtufI3TeYvulz +Supplier#000276460|Ze5SlWGw,OW0NwGevhJ +Supplier#000276471|VG67m0YRHzzngjpfsoKfr +Supplier#000276515|xqCQdvH 1WiYxbq,VB2a +Supplier#000276543|UMThiyoTlnVWP9OiAxHp,h +Supplier#000276571|OuWIupAnvKZHvFmhXqGMAYbL1s6qll8ijUD5a0Sv +Supplier#000276604|PseduYsOdzJyW2ZktsyOespvqbq +Supplier#000276708|dPSTxs7K9uebdPeeG,KKOeNV PZct9pw5Xj9JY9 +Supplier#000276717| KajY0okFP2kHcl0839TvJIj +Supplier#000276741|VLbBAusprebG5SXSlgOBrMv8uhCHf9 +Supplier#000276785|YRHFxzlmFkI4QfYo6FV7as +Supplier#000276897|cyKqyW3XTseRF +Supplier#000276967|eCKQHQHCFlKZIvGb5UzmiY,yGCuU9 +Supplier#000277129|ddmr66uA SZJ5HDg +Supplier#000277166|iWODkCxnsENtXAoeGOEkdnt1KpSU5Dvo2vBR3IFw +Supplier#000277229|F1tZgrvuT0gIdfKZDEo4MV5vA4Feb8wkaRXDvhgO +Supplier#000277330|vAlnD06FA8WZfhpOGl +Supplier#000277405|bquTVPVJU4KSmg +Supplier#000277478|9kHFdQBvr6vQd9uKtpg6uJffXS3R +Supplier#000277543|gaXakssFX4d7iJmRo +Supplier#000277653|IppSkyBKKvRGLYNtqbXTOIjp32Ov8G +Supplier#000277689|QY267aWXP4,8jGIqUvK5CB +Supplier#000277711|kF2gyLOTFyGcxHHdfa2vAuveLNHqHIxv +Supplier#000277816|FQQa6gQt09efbqpYscYDwJa +Supplier#000277949|LuYglbZo1plMM4Xm +Supplier#000278039|O7b3QeiLtkx41OhCq9uHjmJV +Supplier#000278126|JcmEScRC4blz9XFUStLpAe1Q6z rld, +Supplier#000278166|kady 9lgJiUkw2MmEfS8AyNIz8Kp +Supplier#000278280|b dBbvsmPvullNHalV0m Acm97 +Supplier#000278288|ZtIY64jpKSNMus,X6Cmg7o +Supplier#000278365|Wo9hSlvMTSLUtcuwIG0sYCVmS3UlYyzaU,q +Supplier#000278554|pIXuPdKSoGf +Supplier#000278576|084Sfyohs5cn3p3hnZ +Supplier#000278590|LOFkmmOZQd7Rv,qEvW3p +Supplier#000278634|q7UruiW8PJ0k9kZ9 +Supplier#000278781|98UMJtjahLH7XDFBea4AcE,pCtysor9 +Supplier#000278846|uST2NghNzk +Supplier#000278882|CcD8EaF8Po0r +Supplier#000278896|37hwcuZhIInpKbe74IbIYBjCsbr +Supplier#000278912|PLUjNVe3B8ZN +Supplier#000278976|S8SeiecVMXeIwDmhE5ADC2 +Supplier#000279012|JvBRdL8mSYbPlmhjoTV1xEPGdbQ2 +Supplier#000279029|s7bgSqWfnTNvYnxX7BmrGlKQaKDBy +Supplier#000279076|sNiG CAZiAi +Supplier#000279087|u3BoYeUqM5nnDdQv9 +Supplier#000279095|JafKXXQbToVl4Jal8lR7dm0CcN97cnmssFI5O +Supplier#000279138|pEOd4cLXQ5jGiAq71EbSu6 0iyox8iVIMRWsoi +Supplier#000279142|cL4cvjvbPrEK8Qzv1obnKBLhHNufOGlR +Supplier#000279182|s0,fF3jfGbNgjZ7PasPUCnvhVkVN470H +Supplier#000279255|Hth3qg3cvhW5Hll2T9JNhYqzRAJiXfzq8 +Supplier#000279286|Y4EjvpKk8vqhHZ2Y8fst 7 +Supplier#000279410|Shpuum4 00 +Supplier#000279506|XPFPnsEPq8l9JSWD lSA3i62CdAL,nt +Supplier#000279537|FhCNRjwhDA5JWcO6c3n9Set64Wl +Supplier#000279704|iV Q Rr8LMZC9Sm,Xx0IJwnkBXx +Supplier#000279820|0pfnC4zMa8c0Kp5Hts6Es +Supplier#000279823|ZtFHkzNB4tZ0AB +Supplier#000279866|NB3dricZI1vebCfeibQT8fvBk +Supplier#000279995|CrFUQmdVQU +Supplier#000280131|q3u1IdYhWs vyDjxihVVZgnisP3FrqV2g2lOWI3 +Supplier#000280168|P4VjsMI6TK51uGReTJnhubLnKuklI +Supplier#000280196|rtntXOsOW39tf4eE6LRWNOxiC4wBHN +Supplier#000280287|7EZ0t6Hw2H0Rs +Supplier#000280297|26PKC4cvpYpHqdLs,2tjhYzXL5zM6LKoP +Supplier#000280380|IrFyVxZiQ ZqyaDvArlCA0i,H9kpi +Supplier#000280384|0wTHKa5vEOnN6xj3ujYqswV3puctUim4 +Supplier#000280501|4dAMqncaxiklRW1 +Supplier#000280516|p7rNgGoNJEPpJMYrAZgdZOnzAPGh2Hl2cN9 +Supplier#000280540|9lyNZjKvl92Y,1HzNQ1 +Supplier#000280567|m3zDHiA6dc +Supplier#000280638|DYvAccILHbC5I +Supplier#000280641|,vnAslnjZol2mfhu,,zkt9QUUMo +Supplier#000280773|5VB0kpzwEG5nMzxcFBSTiIk9iw +Supplier#000280834|TC wnFmBMF +Supplier#000280884|5lb5tIfdyVwFo4Ihp4Eq1R71nQKVNCXoCxH +Supplier#000280977|7nRqGEbNUnlLhE7uFFQD +Supplier#000280989|04XTAKE, bpdE7w8yXmSskCNFawGOh +Supplier#000281182|A32UHX8YaQYPUYfWv1t9ElDP QgedUF3Cs,L +Supplier#000281223|gv4KVgrH3vu6E73GRxVbXMugS +Supplier#000281271|86sHrHnd6OEc9xzRGnRk,vY5i +Supplier#000281314|FkvfPMcGFfjWCRfqu7Khey2kH +Supplier#000281375|5Gj5nIwoMNAMQr +Supplier#000281385|l1CISpChyFOL20fa3v +Supplier#000281468|CZrtV0Kqu8HYJZG28bvCypIyG3 +Supplier#000281478|gDasX31kG8WfxlBVwv +Supplier#000281483|MovoRKu qpNX3ygogfWwuloz +Supplier#000281523|dolSb p9fLUvpIpNE83xhdllZfGgPj6sc71fMC +Supplier#000281524|H1sBYc81aU XeJQ +Supplier#000281527|nN10R7Djl109al2Nz1q2q rf0lDQ +Supplier#000281536|raRq9MbG5Et8yfhmusc6qOB +Supplier#000281586|crxyksmGSQT4 +Supplier#000281609|cOX 67ADqh,PEmEy s2XUn,sBD8 +Supplier#000281710|Mt8ByQQ1Ub,cxiI +Supplier#000281715|iDGwyMlwxPCyQOaf9mMNBImJX +Supplier#000281788|JZhaScjKSHGjrBx86cdNb9wzA3TbeejXIgKR5Ug +Supplier#000281820|Y7YdOzgSJle7tM +Supplier#000281872|J4x2sz5vWoMwHwIy4k9AW8OQLayI80nL +Supplier#000281927|M8N2X2StXZFNy5UIDBOuW3eC +Supplier#000281928|q0ovlfrlpyI6 9GXGtDs +Supplier#000281948|yP5T4JmB0B0opoC6XLKS1ZRswvZqCV9S +Supplier#000282066|6YVo6L,1yVDhg +Supplier#000282098| oywid,yAuZL67msqD1 hXUrDCF4dToul4Milt +Supplier#000282110|Dgoxv2UREREKZdFUh +Supplier#000282135|JMhqXZypNoDVJirGpDukdlJ3Tf +Supplier#000282147|9bn7DNVKmA6IR1UYV,4mMplJV +Supplier#000282186|NOHaszclYYKYl9QZ +Supplier#000282216|fCZbLjVPCpsbXSEh,ysxihnDf2 +Supplier#000282225|KbHbaQW,,3OBVJrhnAwYRN4PSJ +Supplier#000282254|Ft0p7LfH8TqUtrNC5i8bBr +Supplier#000282297|znxlhcfMIFgOetpZyQpbuyPXIR +Supplier#000282304|gyygcULgtbyzptMvu5yvTybc +Supplier#000282321|vPDs,nZNzU60ov +Supplier#000282346|VX7j0gCddu1s1Nv7fCn9NdO0o2VF9VxqKy1A +Supplier#000282370|5,0bK8uTKQ9QLmMKOkMgmxwf9G +Supplier#000282532|fSPmVSWmk0uH +Supplier#000282544|AxrMuGVfO6t3WoX L9XPzFMBwegtXBrsfBe +Supplier#000282597|tZTHnjypBdu7ZWu3quQmZ +Supplier#000282721|27zv7AIbYI8MMeucI +Supplier#000282834|uz0evDuAOnxegSG6ml6WUVufXDd,061jloII8R +Supplier#000282842|mAT0aX8nbJBBKEEVt3khahA +Supplier#000282891|,m1v4U6YtJ42uqXo M4bEP9Q +Supplier#000282897|LOZYGLvbUx5,1VJAtvv +Supplier#000282947|65hZch5hSOLt,BRArx UYal7BGFN8fgx +Supplier#000283000|vG8YDVIkNe,WAu1rwG +Supplier#000283086|EhJFUBvuu2yXXphJGZjRLKeNT3u +Supplier#000283156|Pow1uiYkwtwZEvkzKs8 +Supplier#000283166|N4Vhlrl0FhZcXYIpfQcAzVtMcQ +Supplier#000283185|GdcYnm8ri6CpJigcN7nAYUdYqNXLe +Supplier#000283226|go27byDJ1A,7pYDr51hiWqS +Supplier#000283250|or8jUvPgaf,n77gK5JxX7UC +Supplier#000283270|l YqYO4huO,p6mhZiiH +Supplier#000283293|s3NoJedB0JeUsMuZdUqcgJ3DFw6 +Supplier#000283356|kX2ZsCzIREXKAQuQPgcbgx +Supplier#000283414|P4BVBx3W Awvrg3vmKzfO6VCNfBicezdUCY3 oxS +Supplier#000283574|SfFtc5eG11t80YubSHIA5Sdw4ibWnDORgQy +Supplier#000283781|OJ49Uj8vUYTS,t3fqFLVHhh +Supplier#000283828|DNhsj h84C5lYoIaMGhQHEYXRSliy3MAF +Supplier#000283839|9VpcjSTOCu +Supplier#000284092|RfMsIteW8uwvhU +Supplier#000284239|Cbjjc08eiwfVnWgSrZ3obY +Supplier#000284306|7KEzF JjATlCHvduncYZ +Supplier#000284318|ZkP1fC4KkBpH lf +Supplier#000284341|9p7vulcueYqsUqzwTj +Supplier#000284410|3c24pzuHqNM +Supplier#000284516|K4JI1amtudKSAHU0ehdI32S SRjXKLVI +Supplier#000284538|qh9B9ymVc08WNKZBN6BUDik +Supplier#000284578|HMsa,Iu0bhEu,FxnEa4xa +Supplier#000284592|NNIM8MYPLS 4cA +Supplier#000284634|n,QvYbKjrQCycsm7xnx6E2TB 5DZ6t4T +Supplier#000284660|rqUo3INbd,69NjvU6 +Supplier#000284698|VglVxeTdBtgxC6v LdP2I3c9u vzYZ7DSOm4Q6lf +Supplier#000284713|P1l PyFgeLEEiVLDQTSrSndKMziRw +Supplier#000284742|qHjtwryOuLe7oLEc3hcv +Supplier#000284750|2lobzHbZx1gmM +Supplier#000284753|vpu5f9ZTMB2Y7DSEdL0aQxgQb Yz7fgrZ +Supplier#000284754|HdbW3SASYD yThfiWXmxqTPpiBp9eXI5y6CEX +Supplier#000284831|,1UVmJUVm3VAb6TKoj +Supplier#000284844|IZ3nU6h9mnRMFrT,ib,EyPCKdVDk2lO55Vk +Supplier#000284848|GUL5pGZUHTy2WIo +Supplier#000284853|wRniJtHFQq2J2v3 +Supplier#000284876|9sXMYfZ3S6 +Supplier#000284916|R7ZQemkZc, +Supplier#000284980|SjFmBdv619rxHe0WUXdjo +Supplier#000285014|Jlz,8uQspExMwzqA7H +Supplier#000285072|M2dT5exjEF1WU45lhW +Supplier#000285206|iFvV,6wqgqxYyvc22bmLI16GeQ +Supplier#000285213|YtLEZIZbS7RJ1GIV7TjZbgBSlSDzuWR03xl3h +Supplier#000285409|Q5lyc1WIgbIqAbj5aa +Supplier#000285545|jaRnguDcgBLHoACM5jUadtf4d2v0Sk0Mlw +Supplier#000285593|h2DIC8jJHZPt NifEh6uUv 3 +Supplier#000285676|Hc0ybMh6yeZWAuswkF +Supplier#000285715|8RTmCW2hFGxInyDAbQ0qVmPdgVYILsE8vSY +Supplier#000285760|i3ff77ZDUMX9iRnNvNpL5FWr4 +Supplier#000285771|njb3,nZadr851YvKXGBgIXqvv1eXtPzn8MyYN +Supplier#000285813|ij,Ex1xxJpp2Bz8N4ZpWmwrXw,Pbrt4 +Supplier#000285845|0V6sqzfHpbJ7CM7ZgsoQBVKBACx7My6gcKg,U +Supplier#000285901|4x8QpKpAfgYB9CH0Xn +Supplier#000286004|vYbZ6vE1SPEWThu6aSYGab,v2xSc7ucX94 +Supplier#000286017|W21gq7dE2 dONiN62BqAJ5OUF3b nL3 +Supplier#000286031|gMEc8 M4INYcQ0rUxvjScMZXvbbF77j +Supplier#000286089|J4DJrV4LtM84sXWRb1JXNhhUoyklDCl16S +Supplier#000286185|IveUlEiFdCrt6tPocsb6j,QoBlA2a6JYqHRz +Supplier#000286266|8WsMjsqGyvMKHRbv8R +Supplier#000286285|B7LdVA3snM8iO82 VujlEKArKip3 +Supplier#000286389|kccH20xSQyNhZ5L84MA +Supplier#000286421|cuqC,QzKo7s2FMNyNEmeuvnTuDZ9x +Supplier#000286520|xWbVBWBWiVSaJz1IPAMbTLQ3cbuTr4OzW +Supplier#000286531|m0S2kQYYVVbyUBjfy,ecfFS +Supplier#000286574|NAb5OhmLBlG +Supplier#000286584|,MKOPK3M81ZIbbA31mNr +Supplier#000286589|TIiiHiGgMSoRniEDLbQn chzf9AXTR6f,H YW +Supplier#000286597|YzWPY1Cw5nZBBRCyQ4lPoy9EaLA +Supplier#000286609|MUqoOhsU0iCsLHECu +Supplier#000286654|bLMYI0SykVEoreESeCUbfEMI6VK38vwGsgYbuA +Supplier#000286731|da2qQOc9I7TP,aw +Supplier#000286892|,mlNl5C77lF0Fv0Vpk +Supplier#000286903|iwYRhBWDhTVJYjwX6HTqJIi7tL +Supplier#000287160|iDjTVM7UFou7CZCjEriGolWpQ +Supplier#000287162|aqSS2i1TSswsrolG6sf2Oa +Supplier#000287218|YQFtjqh1ukQH2wnP +Supplier#000287228|s4pAh8UsqNCexp0A +Supplier#000287294|tXi67fN1p6geKzm2V7 +Supplier#000287320|bmPnJ95JOLCy9a +Supplier#000287372|6dfB0TzSyUbYKHO41IAHewQgxM0xicowirir PoX +Supplier#000287392|wY0PMH4oDilDU9EyVgYBE6X yW, +Supplier#000287429|pqnzQqcnpq,QWpVxJxNLd00S yxRxC7XyQFtIqF +Supplier#000287475|n9sDOg xS0xCRfQFW6gmf0tcwvDGkBPRne1 +Supplier#000287485|Iba qWc8Jd6RUGc,ZJzt2fv7jsY +Supplier#000287536|7IplXm8phowZ +Supplier#000287621|zSrOFszrrEnBVwyPDLXMupM8b8Hn Hk46 +Supplier#000287653|f8zEOq8b8 YIdzu9LxCMAPHg3yFAFmxT +Supplier#000287682|b,A93aDLmcKR3XH9guog6dxL +Supplier#000287712|IDw3PeHyK5ksa,7 ohfsbjcuJ2d0 +Supplier#000287835|F7jWEV,2qjt3v9t +Supplier#000287887|LjMNVSqWNFCXdi wOFcHuRYXN7HJmD +Supplier#000287972|Exb3bEHK7L1ESZ1G9P5Aj7p2q +Supplier#000288034|HK wYjdGhQbEPEP2SG,i +Supplier#000288045|O7Pw6KNInjG,DVThIHzKfLBM7 +Supplier#000288176|SvIuBtOaZavug7c +Supplier#000288223|WqR08pcojn2EuRxZk +Supplier#000288284|4hQwWyGl4G56sp0Sb0xoPaGS2 z EFKtVZauWo +Supplier#000288290|O2GGFXUJPN8C +Supplier#000288456|borfYmJFuuXhMA78OtLfw +Supplier#000288517|w5asDtEGsVUUma2aHX4JWnOtljRhu5O2a +Supplier#000288531|SS2iDtyuLqSCHzLs3rrJkdAtzX7c +Supplier#000288655|mLSYjnaUXsIsi7W0FOYRMms8xQxveLf8JUIkUQ0 +Supplier#000288685|M2jd6BuW3e0FvTEWWf1ODG20d3 +Supplier#000288707|459QAmJjzBOANg21XAl7Y +Supplier#000288875|iGa,DnrKc i, +Supplier#000288963|7OYT4jYTHbAwExU +Supplier#000289131|bys 25l1vSft6mRxLFUxAbJbtoG cM4AXOra8HE +Supplier#000289292|fXwn4pjHbWY6svWeSCeY9Wn6 +Supplier#000289405|WF,BRiv qV7Gm nWJlZbxwlYvGWer WzpJGYSGVA +Supplier#000289515|6OTsSruO73RaVuR,tUYJLGNZ0gc,KEImIWT +Supplier#000289638|8eiT0GoWTX81eO9ZK9BE +Supplier#000289639|OgO8WIY3e4o03O8ZOpql1exL8 +Supplier#000289677|U0YLUzNTBBykzbJtb +Supplier#000289720|nLnM6dUulfHC2 iUU4HRWn0XLFJd6ullo,MFCc +Supplier#000289775|Jns55tWotoaNCYdKX qM10btVyZNO2Nr5gL +Supplier#000289971|Oekj S0YAcm5IU2FtoJ,l3mqIYs5lxRuUaDDcmY5 +Supplier#000289984|gNidKVGd0cZ 5acJJK +Supplier#000290009|2CCtN3EZc0 +Supplier#000290069|6fChnIzKmioCbzi,Tj,ksjq0ZAwF +Supplier#000290120|doKp7qg,DT3gKWjJHvQH10qnkpLVHep +Supplier#000290224|nrl2RbC79vUX2Jjv879xcc8 +Supplier#000290242|Fly1wiaBwOXEp5QMWnktk0jphTCSda5T8a0GH0 +Supplier#000290244|G9Tv4r4Pif8MSClyr8BpyQTKHxfORj9fNasA +Supplier#000290279|a8OzYpT 74GQkBxsSt +Supplier#000290350|nAe1FxkTsDpX +Supplier#000290367|EB969XJ44JnL5SKwdy8 +Supplier#000290501|77AePqFKOwtoHEPH +Supplier#000290505|TwRzBfxP0h +Supplier#000290562|6zDpWQUrC8ZuKgHA6KAwI GPlvlR +Supplier#000290577|fODlU5xFdxcHlobFq7D +Supplier#000290593|d2ofnVmIL6dCqnxGeLdc qvPK36VA161 +Supplier#000290659|uXOzBpUdu6wxqjEyNmqE,mOm8ybp9st7 OB +Supplier#000290692|usqKfTIH9HIC4ZBn +Supplier#000290711|I9wt5WmmB6OLvU0Vy74WPEzpRB9Y +Supplier#000290714|va4PivUtMBsb y8ASSaIeNAl2 +Supplier#000290721|Hr9NGDp7bZfqu4p cXdBEjaWmkBJfawBhmDAO +Supplier#000290812|MrU3,fyHvop3jDGKOwzz +Supplier#000290825|BKKF oKXvl2S,7Uqzejz cSie y6tWVlwwn +Supplier#000290892|HkicRjxVvkDJZ09bw8pwaGU7 +Supplier#000290894|139WG1pV4TYb32iuDVio +Supplier#000290916|9WMSTuLAn02nrXNK +Supplier#000290935|A,3fJIKLxQf +Supplier#000290955|rfJGyC2lX73wwUOCx3637fK7GJfF5Y +Supplier#000290998|ykuWZ8MAnPkn9,uL4aPotfD1 +Supplier#000291230|btdvq2FD6VJIUu bpo6KDW +Supplier#000291239|TO4plkBlZGpD1q,D2qyb2JC TA +Supplier#000291355|zu2XHQoCJajsEEnpQ82VBN0u7NGDxqTd23SnxdW +Supplier#000291499|i,epEcDfKxQK5MY16lsBu,vCp9nn2kA +Supplier#000291501|Yc,7P7i Bt,Dg2WPPZverxvGLDw +Supplier#000291512|7TbMT2J,AXybj0uhb +Supplier#000291547|G2hFnKqlxstFy,QskXC1HbthwllG68reJthiTdm +Supplier#000291587|Es3t5bumPgdYdUz F407jy59 JQNceuz +Supplier#000291613|E0aGy7mKhOM +Supplier#000291803|C1MDaU1wyn1gh9A768hA1D, PNdE0v55z7ymIddH +Supplier#000291893|b2BZeKT6Rn Kta2 +Supplier#000291935|tyWduFGlesOvZvU20ilXjcaFTP5Aq7dIr +Supplier#000292023|Wa,hqb5g EZw,VJmtJY5XbuOkzCjX +Supplier#000292025|QjDbPmJL6qhctAAuh1lfJXi1pFaanzsCSJm0 +Supplier#000292056|LDaYi8XjPXYomwdTmOnF3zYKgve1czoV5mELcD +Supplier#000292089|vruEwbL6RGFNlCdxfFbmWjj2gRbltcMJrBFg +Supplier#000292110|9WXurbPhhtLLst 3o7HMMxY4TVYKUuK9 +Supplier#000292231|72BkE2hQfvDCeIRCE9qvd1fscsm +Supplier#000292290|XHwSypbXHvA +Supplier#000292431|qEFL2wLvfV,qWsWngITEXt PFJiQkjGl +Supplier#000292529|k8 vVvS69SkyoFTK +Supplier#000292564|96FFB7TQkcRi gQujkGhRi7x6AOC +Supplier#000292605|f4GwECnDd3m9g Lmn9c06mjKQVK +Supplier#000292613|tdIfIvnEESn3qJp65GWEG +Supplier#000292738|nzn3Is98uf6 +Supplier#000292890|yqB29hE1R9z3XEavQ9qbBVZc1WmfuT +Supplier#000292906|OsVvXwk JwEy44A +Supplier#000293043|tYO4Wb7jEHjQ1qhiPjnayW8lKPZaso +Supplier#000293165|ezcjv3QS4F9YcxALmfhNH1z +Supplier#000293180|KGYCAQgESxNj3Qr D0T89osJHf,8uoEMoaj +Supplier#000293285|Uu4mFV fO9LiC,KItJCFa +Supplier#000293286|Ttx7d2THAN0YKGae ZYBuD +Supplier#000293536|ZGqLK4ckLjYmH5Qp +Supplier#000293538|QrMaGan6XpCWIFQSH24ASJlx8 +Supplier#000293600|RNdGfnBAOtuy,mm9yQ7LxfsWp +Supplier#000293630|Ee7uOTtpXDrPS3 +Supplier#000293662|MIOaHuUTiaIdZ +Supplier#000293769|eKy1oPRu9Y9fe65XeF4ACVUJFKNhG3vv +Supplier#000293789|5ugk9t9dMBxMLO3Worde6bJjDFFB +Supplier#000293792|j4PK07rkicu rMuq17,6u 4dC1 +Supplier#000293884|PUZBqA03hOJteI1QxwMbL0mlRJHw7vSz0sI2 +Supplier#000293927|CFiXQrmQ9HmFmpaKcae8wrmoZuLhFH +Supplier#000294016|aSty3FI1ggWhYMwwzLjv2 +Supplier#000294124|pXD3aStbQ1 tgm +Supplier#000294128|axd13Ai05OEuifCvMIYvu5v,7GplXL +Supplier#000294143|5KtNfsFRudJV2 +Supplier#000294238|jBDSA o 6Qc6NXf2qS7zhbmCBTKGL +Supplier#000294278|i1FmDLLSPllYA +Supplier#000294284|BFLMFeX4zMbBzBNPY0eGFZGvIW kmsq, +Supplier#000294296|AyZ dI1IzEGAr5vi25gb3sqqGULX +Supplier#000294300|dBNsqbmfGZBBbbdbw4kOilwFrJyQgSqfNsBJ3Idh +Supplier#000294310|tQjSbkJXUEasCU +Supplier#000294313|plUWKTYzdqdRgw +Supplier#000294411|J17g43zmAy5Og4,rCnnTp +Supplier#000294453|h91hyFlE3zxgSsiYKiOpqPM0IcPVqC +Supplier#000294458|xjVwv43uKW0aTWJiBboJrzQdgJDEFx6d5s7eQO +Supplier#000294514|IRa97oQA1UCBARgEM0dKQBI62CHKNL +Supplier#000294550|fAjocyvnZ28zrb8EqA +Supplier#000294642|nwgmiFty8jRCqiCw +Supplier#000294766|172 xts1BYm5r5ccIob QS55 +Supplier#000294918|hu3Mn7O17jMtnEqQDchAL2Sd7nt +Supplier#000294942|35yS5aBtmV77jRwF2MkjfbMqNASZCjOYQJDXNVt +Supplier#000294957|cX1D5RZ ljT1Ry7VGDqfZGyNrNv9 +Supplier#000294969|i3omFR276qKGZzV5,iyZEY +Supplier#000295000|Nhm8nekqihjfRXUuYH7qS6 +Supplier#000295010|14Q7uIzP,p4Se3 +Supplier#000295028|b0Xy7vrjWCOWnG65vqqDYHoxLJF6ufMQXD +Supplier#000295036|qWt7wKFs49fKq4K0LI9M9 +Supplier#000295073|NVY9wsyozpvr +Supplier#000295105|O5vm9 FIZKn +Supplier#000295186|NnzsI0HYcAD3M +Supplier#000295233|sNoRummBCsrET7z +Supplier#000295284|f3cR8BICmeBORmmlMEic0rpnRQf5 +Supplier#000295304|xGTLL9bIPQdqc3 cpTK2X +Supplier#000295578|A9OSXKjspxaw3 +Supplier#000295653|SBKaZnT9sSLhMB2U +Supplier#000295661|9RB5ttPmsG68HHzcH4TH +Supplier#000295744|F8fMrS9IYumdWsuTaJ0ZmSGsKLjk3mvff +Supplier#000295769|h895ZJCrwTYktQc +Supplier#000295781|KfB8xW6MOoRy +Supplier#000295791|87cqOmK yyh1euAf KOyzBlg2gU,ogGYlOkbl +Supplier#000295844|wDShW7AJDhLTlwuQ3Gj,blXg +Supplier#000295847|gvsvGZWjNeqTGhZ +Supplier#000295899|PNOdSZBBsbhW3v4zR00U pTvNRC4kiuWW9 +Supplier#000295931|k6HG46WK9Ii198rWoNTRzuLTVsQE2feJiT1HAEX +Supplier#000295954|G3If4Vpv1Ti1eufIYNO8O9HcqPA1vVZQP +Supplier#000296020|gjc1LhMk59,UlhllZLfYsV16Sp3 +Supplier#000296022|se8qzIz8Byp5phcI4piGyxARFD,9T lLB8n +Supplier#000296103|FCWTK9HJLf8jcQ5QANLj9IJQMKXh +Supplier#000296135|WCs KRrWocDufwBnEP0tRls +Supplier#000296208|q6QUSy8CCOC2OlCNzQedCV7jO01N3zeNC3RKH +Supplier#000296232|DK94,4RYqrHc1C6G7IGL5hWlAF43,whQ +Supplier#000296265|bThg 5rS6KHuE4PEvWDLMGOvcOIHYPKoLERMeM +Supplier#000296344|RQtX2g1E0lRW7krgtSK1loyc1zT +Supplier#000296443|MwIaVwuWQiac7mgDS9VuNDK +Supplier#000296453|c0ejGtGm24YkIh63HpmkAMZO6 +Supplier#000296489|J7aecqtO3qjcLZslgL +Supplier#000296504| HSIFTXqYOJ0FL6d1ADjdAvh5K3 +Supplier#000296577|YdtYaF W3hBPnhvkCQ6bZbCELAFUM,Iwwu9Ss +Supplier#000296620|ext0AtK,7sny7PSQWjCnKb5 k8hf +Supplier#000296716|X8DdTUS4D27vMnFw1 497d +Supplier#000296770|NdqpJYCsOi3J +Supplier#000296799|i44VOtY12l8UOg8PPuGRbS +Supplier#000296881|DiVsLMENfTzUUZVEiWmtd9tHK5qv +Supplier#000296940|eMNKy7uuYPeLTcX2D0csmyjTlBKyiQvh2yoe +Supplier#000296971|lgUrW2TNoqFeroAi4Cm +Supplier#000296987|ovYS9cKXP6k6cVV3Cf,6ajnsaP,EFuVNSVjd6 +Supplier#000297166|KGVPmuNOuy1GbN8WDfnNA87cRJrvABcsEx,ElG +Supplier#000297249|N83mQVKThMsdJdgDody3WV,DccUcFyq5,vT +Supplier#000297325|oM0jhqXDKnS3iEvs +Supplier#000297367|oi7,sprIi2faRn,aGWffoJ20xl x +Supplier#000297418|5n8Z8sP 5Peja8 Ye09rRHnspqg4 +Supplier#000297533|JHu1sxtN 80qC,PJyu5JAXL +Supplier#000297588|0qAuHzkiMjcvk2P4Obid,YgoyeQ8g +Supplier#000297630|CCYCAY,IBx7MRUZkBstb0Ej1yO4Qc5KSZ +Supplier#000297710|z0WIf 7dz ed +Supplier#000297740|F 4eW5bTiH +Supplier#000297769|k76xGMMIc0 ZE9b7VJJk6NwwXN151Z0Pqfduaga +Supplier#000297784|w0gb30qOo,mWPzaoCew6Ys6uUogxLfgNlIee +Supplier#000297785|fPilT16n0whNILZ7 +Supplier#000297798|GYdKxJK1XRK9sJd6Q2 +Supplier#000297804|winZGJGXl62aYNIuPoqw +Supplier#000297839|DN jV,tHyFZAU +Supplier#000297922|jWDNEkgIpMypoWl0wr4tXuOhRVd3CY3 +Supplier#000297924|aHmKcyjDKCgny1dM8aCe9t6ndU1fwI5YVaHZ91 +Supplier#000297962|RIujQhIqCemEA +Supplier#000298010|caXwyrvqmT4vO6 +Supplier#000298035|DV1R4CGcM83 iUKpQWUIqm3g98sOvm1CvYU +Supplier#000298060|m6vTHNqZJAchJ9jBd +Supplier#000298189|62m,Pny1OBVoEox9Ketfc4Z85aU,yR0xXTw +Supplier#000298215|Z 3C3vwzs5 +Supplier#000298249|2FoDPwy9zpVQ3ut7i431 +Supplier#000298296|6bqdU1apkL2OoqWqf5Be5m +Supplier#000298313|bFNJ 3VxUW1DmS0HzDm8X8PP +Supplier#000298342|kzM7qMeMAKOawzCeDPksXML8wO8d2tE428 +Supplier#000298381|x JaJ8TVb3I6GiKLSLQgO01QmV,TsXnkoX6 Q +Supplier#000298410| Y3bNSvtYRAotd +Supplier#000298507|SPcIbQNf3b +Supplier#000298585|Ii9bqrwhQ 1uq8yDu1vfs +Supplier#000298652|BSSAENPGNoDHPiBf +Supplier#000298693|lL0,4kDlv,K +Supplier#000298820|4CYvRzZwH3d b8v5 +Supplier#000298831|aqX,sURWgsJHcnzAHP7xw +Supplier#000298951|s,Ls4crz5u2FUp4z,e +Supplier#000298964|SK6bOO06pEjEZUXyUgNtPcQOVECWn166EEOWZ2C +Supplier#000299021|VG8b,gh6m51fu8JgJVWNgk9VkEwA MGkwR +Supplier#000299079|DhbsrGn2l45BmxLBeGP69G54OzP7JRB3V7aW46v +Supplier#000299151|aquPIppFtKVoQDm5pysYqMGbhp9ZjjaKmAx +Supplier#000299214|FbvcFtsMgQgPFD7qA,39K VJS, 6o1dvqCw9l +Supplier#000299289|F2lonzjIYQmZG4wd52TJ5UAFXPfP4lWbA +Supplier#000299290|h0NxUoBAimFp3gGlY7I4svV4Bv3pskQGySGj5 +Supplier#000299362|GEvEu5qURyzuLtZNXEAT yqGDp +Supplier#000299416|nTDGY uFXeBu0SsFbAuMqGrRlGA u9EixqW +Supplier#000299481|WKXQgPkf 7dOyPYLpRuMMMAwsmQLwN2caTUYnvW +Supplier#000299487|ISPSM2PjtWwR8ZdtIy6U8ji5AYAt8fdlqjS +Supplier#000299506|XW2Mu,bdVxYi7tXdd4C1ekC1V vLWYjE +Supplier#000299533|9Sonfk,V17CG8F9AyPdoekAwlYnz +Supplier#000299579|B5ntlbFZphIlSlY tDSTVgKyp3C +Supplier#000299623|08GkPEB59xiwEupfbtA,BiOg5X3od,z6REhzQM +Supplier#000299670|fYD4VADHvo62n2HjjFJvZBPBmtlD1I +Supplier#000299860|ll3x3k8oNsfSKuMYHlG1Vdi +Supplier#000300055|ZuMRrW XXcQv68pRahyuzESaUCr1sl3eXWMhse3P +Supplier#000300114|luwnrfo,gV,5UO3dGimL76h2JIRsnl i q1QJ6 +Supplier#000300291|prgpneN9EEhjB8Rr4f2c +Supplier#000300320|VxvGj1N3A2dI54iZlyRKgNVPq52AUZpO8H23OMWk +Supplier#000300455|oHIKN2Zz8gCz +Supplier#000300518|PC42qp1Rbm3YEn0 +Supplier#000300637|LjddkIbZxoL8Pg1QSAGBYhG +Supplier#000300645|WjoXWWApkIf9Uc8YiDNMDVcPB0JTGmROVWuoE +Supplier#000300693|oS3Sadp5o13GvLrMpyd +Supplier#000300705|O6DcYWWkTZg782V +Supplier#000300759|MXPqYSA37gSNd +Supplier#000300807|xibRj84JeTf4,yxY3NvFFyKj0y7TE03O1gQo9884 +Supplier#000300917|ydTKykBHibmA1Zq2KT +Supplier#000300921|rS999dBUY2kExwdUuDzoq0bsQNsreUS +Supplier#000300980|SImQQYPBwefwuPkaMARwvXgTvBQZELZM +Supplier#000300985|4D3,8b8ghChhjyzhgsN4b +Supplier#000300989|,xtA7gV9JZr0yH +Supplier#000301011|r5qxFHc79Gkfm1BvuiSGc +Supplier#000301183|3ZD438cZySQVzU0s +Supplier#000301262|lPWT3MZF sNObjyQlc2s7eWR3vrTUcn4VhPhv +Supplier#000301300|8hMuCbwbs1YJKgfNSlCRxrIwlfzlV +Supplier#000301404|p3kvYHrabFlmJwpssHGw70x N1 +Supplier#000301422|tpFavCe34E0TNGBF +Supplier#000301573|Ez2jkWgw4kryZPFCW4jZT16P3g o +Supplier#000301631|7KUhDdI5hQduzM +Supplier#000301674|056COTHcIvuFvymPtcEXq2I8B58 +Supplier#000301692|7rhP 6qEbrJo6CfnW7Z SwRjRXVL +Supplier#000301937|tjle,HEGXcoXgGj,FvJ6vnj,rCa,RcsA +Supplier#000301940|86xvEjSiHjiaVdlvDy SdqU2tw7hNzeMbIATwGIX +Supplier#000301944|HhmniNy1rMaxoNK +Supplier#000301967|SHok6NKJyj r6y5imL6ZogI +Supplier#000301976|u6Lj34SNXSeJrgZgu8wdLq2hMko0i +Supplier#000302037|AvhknHwZYcqtVFCyG3uRut +Supplier#000302044|bGhLmH7zMv0QTYcB +Supplier#000302119|x0dGdaR2AcdpuekqeIfAztAI,moR8s8 +Supplier#000302131|D6XZc0dLp +Supplier#000302165|K,MxW4dsg 8z +Supplier#000302220|M7UjRA7FYxyeK,64hhbcJdqzzZO9UC +Supplier#000302245|pI QR2PfWJ +Supplier#000302253|BK4ZcMZJf1qT VaydrGsSp1Sf3rJh +Supplier#000302264|SK 8k81nFnqcE2QZKXf9LlpqW9F +Supplier#000302301|0VZC7XDOTkJi61i,iuru8weM0 +Supplier#000302429|KHMX46TsvPmrgoK +Supplier#000302491|fJif5TKGYN,6IG El6jhMDvAJKZdnThsno +Supplier#000302642|PQ,C37NcJX9c,u8 +Supplier#000302662| CEp0Lvk0gpqw64 +Supplier#000302664|npZkgw8RdPWU +Supplier#000302676|bdFUqUVEVr +Supplier#000302718|URzg3JXATMoVIQ4zZXGRx9fqg5 +Supplier#000302744|O5hIMnYczB6N6wBXnglUv62,X0PR0d0akVrg +Supplier#000302779|QeCcGesFiYhuq7LoD5UFCeKQQxlE5OeUkFfYJ0l +Supplier#000302836|RQRARVCS fjghbrlAfwH69ls7ep9PwaN0fu7uP +Supplier#000302880|XuS WNovBeJjCX +Supplier#000302948|YcEsFgZ988JKXNl39qJR6z +Supplier#000302957|Xsqy8oACg5JfabfaoBKWF j7 +Supplier#000303012|4YVgcU1XEKO4ojJofnny8J7oAz3zjxYzWqknlxf +Supplier#000303192|d,8hkOrgfx QR IKxKXE +Supplier#000303399|bE1zaltz4PWzJWnnfu06lIj5BeSCVWLWpVv1 +Supplier#000303411|ZBYLyqJ73D00IxbXqtL,G8hZeWNX52 +Supplier#000303503|NSit hRS692YbPGqQbKlKJTcqHMW5JGWTkoqe +Supplier#000303797|AliqAjPx5q6vIOx1B1Ji0SB PagUoUQC3zTj +Supplier#000303916|UfxEbDpkq4 +Supplier#000303924|P57b5jA7ODiPkc8MOIJs67T,K +Supplier#000303988|27oxLM1w2dC5LDbDshHV68 +Supplier#000303992|Egk7FHoxpCErrev3HT56kkSEOtYVYRKZz6,qI +Supplier#000304081|vhsMxuHRSZ ZrXYlyena3epFpNIV4 +Supplier#000304109|RbNByUo55S2lfao5Qu,Dsb8 +Supplier#000304147|rmis3Pm0nUnCDu8ItVW wzh +Supplier#000304214|ltLRpQFBKV70Y +Supplier#000304234|NJj5NxRA0ggThkbhcdzVuXhtOanyjeswK H +Supplier#000304307|F7KI9QY5M9lY +Supplier#000304318|Tb3Vk1a qoHZ2dDBFv9VtoHq +Supplier#000304383|eXiBPKK7TPrfcVYtVC XflGIQE7p +Supplier#000304435|wJz1pQ89dD5HL +Supplier#000304487|xydCw1b kpzC9CCUHOeqRAkGBzq +Supplier#000304526|d8l4IHIw8cImZ6fqyXwLG0OUrLoT2CmQHAAQ +Supplier#000304562|WtC3c,cAM9KbSwW2xJWN10D +Supplier#000304754|33TX XnGyJ3IsHkipVA 2h6awvEAOWU9QzDXFUrp +Supplier#000304810|9V7UhvUSbL3ys4Z +Supplier#000304930|YrahuhJObI3fXWSUin7uxPyRvt7eNHzH +Supplier#000304975|Q3u1Agv0Y J +Supplier#000305131|eyw9iLKVZZMFlQXFBjdrJqfn3WHMhcs +Supplier#000305222|ornP a7nPOpYpxWFIcD1WOEyzbn5ix,d9Zjn4TB +Supplier#000305314|Wj6L9YZp9RgP 6wVqoJuGS4fBYeW71uSjk8EW +Supplier#000305606|ia0hJTrd1O6WmK +Supplier#000305772|r5WnkgvdtmPga1hVI7J7bFDHw5QtEEOcxo8h +Supplier#000305784|xGJeCBSB4dZRhWPn0XeWyh4Lfl +Supplier#000305871|CtfoZ3LH4gO4Z32CPvywx +Supplier#000305901|W8,QOCG3oBOwPJSqziwDfnjDS +Supplier#000305952|vaHa7BxQj8dj9dheui5jGlZQ +Supplier#000305978|FMScWm9lbMB +Supplier#000305991|TVkUD1sN B3tuU6igwHv,CkawGmjJRuBDsU +Supplier#000306003|vyTnVENE0mstPu5CNwywxybh7kqnILrx2vpKI +Supplier#000306086|tFX4xyEMmqNli8j1Do8ANFQVXsISz,Mp1W C +Supplier#000306138|Z0smM1,3nWHs +Supplier#000306152|Sp8I4u71VC9EhWPnFemV1Up zT1f +Supplier#000306172|pmj6jJEv3sAD5IpA4ByfKOZW5P7 +Supplier#000306223|e69g9Ps25JeVt6I3fAoY4umq2HPN2m2XFLSC +Supplier#000306301| 1B8kfZ UsKjmskA5pBwrV8623gDeqXXgHSP +Supplier#000306331|P1TuGcrCbUW +Supplier#000306339|Lzn0aMBIFBvwyJq1C3DOQ Zbs8kVtdwsWXE +Supplier#000306363|HftSPAr6xfoMPvYNjkrL8 +Supplier#000306467|RurCkcx1yZVpRXoy1eOjlLPCKO,2f31P +Supplier#000306483|Bzvfoc5,CcxKIBoAQpRu9a8Ww25w +Supplier#000306530|Ev645niv5Toci +Supplier#000306536|62XTq8Lctun3O,5kpSSPF,pPVhCtmokjO +Supplier#000306555|g9Pbh0HEFQ6yzEjh1hN5yB +Supplier#000306563|E9USthGj11L29mZabOwDd +Supplier#000306692|NXESxYOpEu3nrUab +Supplier#000306744|NlCI0f2bRap7T +Supplier#000306792|yV7,yvZsSJmywq 7asm +Supplier#000306880|G8kfLbSNL5xQRXgcj +Supplier#000306945|dK4Ihfz8Sjc vBObQpG1 +Supplier#000307069|YVXXvJFuy,ooBzSVWePAW9nZSNnLNpH3TXvnph +Supplier#000307094|SzQ D4nvIxBwy6MU,ug +Supplier#000307128|6 1ytE3EaOnYXz9vSotMLjjI6PJ +Supplier#000307135|XHnS wftM8vJhRO X9ENQU0OlkYkN7tyOtM +Supplier#000307186|3GEpLr7GewT8IsIn7Shd 7LwdFqiXjwPm8YVXR +Supplier#000307242|1S1WWRAqAaWwaFCkScKMebjr +Supplier#000307260|vKiYnmFR4xh +Supplier#000307293|cICb4cRdD7hsjciGp 5tbFkqxzRhC7gPd1sff +Supplier#000307470|dK5 pGRMuk +Supplier#000307505|u92Rk2g5JUXRT PrN f +Supplier#000307660|RhHs0PX1LJVucg7ew8ZIRq6Gnu +Supplier#000307752|3iQ9OMVn7rNkcqIWRDqU3UNv2g +Supplier#000307754|yXFqjzHZ31OwB5 +Supplier#000307766|nlIHGZC7QEBwiAXsnKv f8SfbxQlmNqkq09 +Supplier#000307926|RyJjCRB3 IHfhKnwsKpZQqEVpt95jTulUHqnOS +Supplier#000307945|lKEPPuzfYJCWH,k9I +Supplier#000307969|JCgo7aLJPOJ,Gxsz3GDiS5O2Ssv9S,5QwtGd +Supplier#000308013|DidL9HtoNimPsRHJsU9 +Supplier#000308085|R9RDjcHjAbouWlNVnCQswWSR3IrHp,ObzzPU +Supplier#000308140|amoxT3g 06tjPKZpAyg,kddF +Supplier#000308252|6BRuCF2fjnpj3jXX5r8KgLQ2dPnkN +Supplier#000308308|BzHtB4vTv0LnCFPBIh9z +Supplier#000308376|89fAAZwBGl EufIL9RUW9nXWjHDzDyS1jB8tCf +Supplier#000308422|HGLy21QwuR +Supplier#000308423|10S8pvYCzAX 4jJzC1ni,YTEsuEwKXd5JBwPrpf +Supplier#000308473|TCzsd12,e6pxF +Supplier#000308494|VlDCJ,hijE8cNA7soevjmcRUHy1A6 +Supplier#000308581|D4bpxcHJFpZSmb 055 yV9AMLq2e +Supplier#000308596|86hpKq3zokYd +Supplier#000308648|YE04jAXb82dwjUOHzMLdmn +Supplier#000308653|A6kQllbcNzx4RrhTpskCNhgKEpVLrTkNU9 +Supplier#000308700|vZncym8tHvraWljsz +Supplier#000308797|FnkPWCkkhDHzOKrKLxcC3n6RaoJ +Supplier#000308847|adrEteYuCEVXvN,dBQ +Supplier#000308877|tFupkPix3KyUms5Tqu1qPwBrUwIPu,2Ps SyJ +Supplier#000308930|MPQnyGURSy3mBNVsBEOYS1KM6JzjQJ7A +Supplier#000308932|1X7,WZDAYYdPI +Supplier#000308976|ClgjHYiuCP7Y45FUifordNHoVIGQ +Supplier#000309054|ymk6OSBHa0RQg8UqLKZDejkKQNK +Supplier#000309128|nL1DKJ94AT73mAd8, +Supplier#000309168|SXCAdHJxuj4gJGQTW,ZH +Supplier#000309225|YctsW8xRTI1qRPH oGWFkM2ZtZWB9geWggbCL +Supplier#000309229|hAZfQV3LWR3 +Supplier#000309353|9uXcF4 gsI +Supplier#000309434|4FmgNyC1J mwSFNFsimnOcB6uQyG +Supplier#000309469|Yji5pWJTbWG4JvJU +Supplier#000309470|qkp,8iaZh0R00rKc6vwr3Qk6Lw9T7dJg9Fft3 +Supplier#000309474|xzQQDd653iX wKBmr7k6FZvFcT 1 +Supplier#000309482|y8M2EeLVPlCsfMWp0 +Supplier#000309495|ovl6jOZyQ +Supplier#000309514|IUB4rhjZ3nG4 +Supplier#000309560|0SDBAtM6P5B2AuRWTdhoK,vmhyRsH +Supplier#000309577|c74ZYsvYEQszejuyf,i +Supplier#000309758|p uEqVnCq2j5SprOTgg tzP2GZHbSMoSh +Supplier#000309837|7KAUEyLU iQmTWotGOclaTonmiW56opAjZCzt39 +Supplier#000309859|g6xcaFDL7tEH7Qwl6tTtqQG +Supplier#000309882|2hl6O3dIV3aq,PIqpMSRJJa +Supplier#000310002|BQ9R4prrhEdqUUvG +Supplier#000310059|4xYLHhYRFInsm6i9 +Supplier#000310072|KP0gZFAs8vtTAbz9jf9U1pKgE IldGAxM0XFRFdK +Supplier#000310142|F8CrFXCl2UT +Supplier#000310217|xr48Ah3n3FXZtqoELWSeO0AJ2ZpRU +Supplier#000310357|uVGimkdaa5 +Supplier#000310568|5hNI9ifAGmwJg0 +Supplier#000310876|wPqx8ikja0B6Qmh4cpj2tR +Supplier#000310879|g1ZpcwIXISPwiy3XZBGxF3ra3ok +Supplier#000311040|p2mwbQaeWqQu06RAyzD +Supplier#000311090|Xh3HwWEuhgEEl9uQbGkBVpLo,HjCfZw7ArRunoL +Supplier#000311121|DuJfXZlJR56sd4BLU +Supplier#000311264|t vhWhQvUJTBwmY,U2dy +Supplier#000311357|sCPmL g jU +Supplier#000311430|MYP2NQTbz4WNV6PaimV4udX +Supplier#000311445|0WtyA0aNvZx9 Hctm19bQOM1JJ1z +Supplier#000311493|tcQGKOTsuvYsaPQA5W l +Supplier#000311527|6tVT1QpLZ813hpoYLMbjQdM +Supplier#000311788|oOQWWUxaJvP0bf +Supplier#000311808|fPC5 bp7r0TrANg MW4krhnIrB5zVAfflkNGmn +Supplier#000311828|,eTo4HeEnxA +Supplier#000311834|6KzbIELClRMhqXCOHLoEit +Supplier#000311870|NjqCwoN1Jd4smnN49C5iRx,E, +Supplier#000311943|Q2hRk4nZQRYbsboMM7n L8xWO6z4Wi +Supplier#000312116|p7Bf3TXuyPe58Jb SicZQh1KeQmOTtC +Supplier#000312119|AMEFEl4u007F4oW5egKJWyycWIL44q +Supplier#000312158|zOeZQ3r4yEl +Supplier#000312162|R6UxODTQr9JzEzJRCBRjX1HoDq6NiGZMOyhMP7cc +Supplier#000312194|vo5Cu,RzREzO,2S wY1PGTO, +Supplier#000312358|3BgrfuYSy,EjMlvASv7ePQZ1jJhBtIBCVJSOxSz1 +Supplier#000312451|cYP5LZXMlajm4MtEkXH0Jvi +Supplier#000312550|4m07wkRyGfmuAcPOh75lkjjVMUiTy572 +Supplier#000312612|i0SXjUvGgjz +Supplier#000312631|YU8LUYWJNgWQ44W8iJjGJbrv8LM rPPv6n +Supplier#000312667|eVEGwAQTaDYp,j3hHVK +Supplier#000312738|3Ug4dXwSKqszG +Supplier#000312740|OodjY9VJw,NjDZH +Supplier#000312804|qT7jjKuLV2WhphkR9P5 Xd63OBOUlNsCt,lb +Supplier#000312814|AQ7WnDT77CCwDC,i d,0jTP3oXRHOkgMf9l8cfcK +Supplier#000312907|5dNKvuwbEY3D,c902LoOJVwIDSsvv8X0kX5Lo2Hx +Supplier#000312998|XEn6MBO9J,T2ehMwDo,w +Supplier#000313104|NBA761xG NnQHvZeGNRRotSQJJE4S3gVEB +Supplier#000313170|PzDymfun9x9U5OyTMxgnQoMmQ4SN3K,rrxd8p +Supplier#000313271|gw4fN7PPCjP5zu,ewfhKwtnZo2Q63yoEjRtSqnx +Supplier#000313289|,7vM,ySI slXi9JMg dbaeMIn3o,oPkC5Geij +Supplier#000313296|u3T1R8FoCB6FvXL4NDtufVQ0U7Jhdcj9 DNL +Supplier#000313297|xOi3g20n,goObMJ 3yiRClpIXCPYoQBu +Supplier#000313332|a nn569oIWa1Zu9z +Supplier#000313493|,rG2Bsb3t9tULIGm814,5eV4TpUalh6W +Supplier#000313503|Js8debhJAqgmwpDDmPY1IEz,gAevG +Supplier#000313514|f9LdXGYau,rEbhcCaG9P4RNBoV6 +Supplier#000313561|IFjuCIzRZ76isEaOZl29Wowq67WLKq8yOo +Supplier#000313652|r6Ccj97aLk3SpKNewaLZA0nmqBFpPA3 +Supplier#000313753|8N,Txpo5RZuhc,HA +Supplier#000313822|8PmrPKfm4XTV,IpTXZHZ4qD7n +Supplier#000313909|V3edo0B CS6XTVTK3MZL8gd5OGd7rsxho3kgqwr +Supplier#000313925|2N8mQFocs8 +Supplier#000313926|VLSBCVzfZgaS +Supplier#000313949|w,a1yBQHIxkjKpDo,Wk,zU1m +Supplier#000313992|liCsDMr,gNibo2cZ,Xq4RW292BEOxlDEN2xabi +Supplier#000314020|eEbLqqiR1z0QunV3ePwH9hmMtSiNe +Supplier#000314177|8nlOUtHIJnFCSxH +Supplier#000314180|Jxnh1XXpUSfzje474cL8esbLB2Lw +Supplier#000314211|OGpWAcK,ligx3le9ehfW1nqOBenjf7o +Supplier#000314374|jGo8Zmdm8cBDc0 1tUQKLjP2OheNRDvE3,a +Supplier#000314553|X51kwRh,FDEiFfMkQ8G7fFFshWHU +Supplier#000314649|CHXmEWdFt9nkJUbK,BNz4pHu +Supplier#000314719|l1wn9k8,pV0P +Supplier#000314744|mIBDBFWedMR +Supplier#000315001|iNrpeOQOfUQs +Supplier#000315122|6U3nsQg7,G +Supplier#000315180|U sXT EtP951emLfGZVqnCcxRbXSS7RXq +Supplier#000315182|,VwH07WzUEy4W8b jzgkO,DC6YVb,julE +Supplier#000315324|Hx7EA2SwSg8kmmym +Supplier#000315386|82s86LiPUhizFjBzqobRNfCTB +Supplier#000315394|yNL1k7GDOqgNhZInEBLY1pWPB DEol7QttX +Supplier#000315403|9mbY1vpzJDLNXhp7fPOTPGIqK +Supplier#000315492|EgKsfGuWZ3GUQQ2lkZt9x +Supplier#000315530|riQn,MQXFb6NdfXy4yH,I2 +Supplier#000315647|YTdP09wEGg01VvR7qwXPTgF +Supplier#000315671|9zRRAtx9KCcoMIeOo92mAEhKd2j04V +Supplier#000315699|tpPynh2bJT +Supplier#000315853|X0cW0LhcgSV8d8YLPvNQBnn3we +Supplier#000315862|EI31ROo8RfUsFkgeu9oy3QvvOMjCvkdm +Supplier#000315864|3W09A1tjhyeWGbJhTd +Supplier#000315891|SdflUsv4fTrA +Supplier#000315941|Abk9WUqJibU5osyI5RV9M0kiXy,m5Ixp9pqgvcO1 +Supplier#000315961|NtuvziZvUunDtWdAciyVX3Eo1I7b7J1plUtfm +Supplier#000315964|NgsfbQkY641RFi,L +Supplier#000316092|901PtYWeO67uynTdSktI +Supplier#000316157|WoB,Q2wuVgVfJvHWBmF +Supplier#000316179|GorBBpjIxQ3T00CQG,APwqi +Supplier#000316201|e0Flt1sy9yZ +Supplier#000316364|pfJqqr cAvzNO +Supplier#000316404|9dD1fjljAPLv1TKMrXgxqDyJDpny +Supplier#000316481|xgFa50opvNUiM0jKtohKC2FKYKhn9JCKQ,s +Supplier#000316498|QzbJaBcLtA1sXrD tys2gx3uk3uj +Supplier#000316505|uqMqxQ0vBY,vmq5v Eab6zJFpCP4B +Supplier#000316580|vNlZlZnYbB8EyyeIhuSg1zWKnDfGZGVJneo +Supplier#000316606|DUB1KarFeflZ1CjlDpSJX2K +Supplier#000316713|2ooJRvAg3e1gBTUnIU4ZnNT +Supplier#000316764|TrJ1,Kju9uvphR9pOYibI45 xAdpL9S6,H3qw +Supplier#000316768|botTcreUFZloZpN +Supplier#000316776|69ADsI4VM +Supplier#000316835|qfBV01VpgsTpl3o +Supplier#000316873|vHM1spVpxmsEQruwRl +Supplier#000316879|vmSy6kPMQIfeyI5Rg8R +Supplier#000316899|uCr1pCFqW6iUInteyul,ucJ5xaudBAy +Supplier#000316933|jnTi7ydJfKY,BL9c0AhXZamcHsVriuwg +Supplier#000316961|uj0wzqSWKEOAmiGTc +Supplier#000316986|kIdN1RyRIEvDUe8 +Supplier#000316993|X pgaVwQHo +Supplier#000317177|ifdsUPQEou1EOjs,2rulLtKgDR +Supplier#000317258|sTZ3z,8oRFBOyYILxu,Xo1OE1kcLl7zFOyx9iGI +Supplier#000317343|e4wA U6S7PFdPoXNfNSoO9hHxcQ cL +Supplier#000317382|oEkINY819sd8pa4MpWc5ytG369ooaLi6I7 +Supplier#000317391|QWszuitB3L 4lD1idxQ5 +Supplier#000317503|FPnNrVY7e9gtiesYh2hH,4VIIbqPJN +Supplier#000317507|4SW84f7Wv6u1 +Supplier#000317530|Hzjm8fc3Fp5K4HM,KD +Supplier#000317553|JB1wLytw5F4yHfczxASIKfgvwi2lzKQEdE +Supplier#000317610|OthiQpEEDhJbSga5N +Supplier#000317638|P7IehlfxGHMN3Bokk9JNfTRgPFpIW +Supplier#000317652|tpsSoH1x28jq2Kc0haykr4UQmC0WtyNbwOvJTR +Supplier#000317688|1h5xQqbUI2quy2y,6yG8cso +Supplier#000317788|x0sxWekd2ar +Supplier#000317789|uFk20FKu0yn4R9HBePldQWB6sYkFqbBR +Supplier#000317812|BbpizzLPiO wVskUSY8QL6yL5nRscclJ9H +Supplier#000317820|EGddYSs34pWygBSkE63 +Supplier#000317896|3oCsuiVsDHQGg0 +Supplier#000317924|Nq6WCGlBihZQ7iGT8M +Supplier#000318205|V24Q2smpUXjjnL4DKeSTlE +Supplier#000318213|z2ksjdtEiLjCS4Mgj +Supplier#000318276|mpD6HcZqq1x73x1 +Supplier#000318321|WgvvTREmblFi9Fob63 +Supplier#000318328|WSPEBgRaXMdaJ4LzZVQC4G0 +Supplier#000318339|qOt3JlfD7gSPho3LxiMsh, +Supplier#000318533|w3O3cfxskUKvtdD82VXB6m7H4hbWXs4seo3 +Supplier#000318561|MCbzjYsT0XBl,Dbl92 +Supplier#000318570| ITMrW16 9T3AGArPthnwhPIGc4xVcO5j1rPe +Supplier#000318602|DMfgVURNu0JOHYm9 22At3yKVcIVnoksMULxH +Supplier#000318609|RQsGlo 0z5jEiFHwru6m9x +Supplier#000318663|WJiZGuAzEOfj60BqpDRzp +Supplier#000318838|H53QxdGbZMLc2H0FiyQGxI +Supplier#000318839|cCE6oLMNpVoKFAbp +Supplier#000318868|kKQulgpsNlLDIZMNW +Supplier#000318966|Gu 99h4QaLvNRQGQ457csmU5nK5RndoouYL +Supplier#000319045|g2ON5X6mTuVQTQuWknypm6Trf4ra +Supplier#000319050|zeEjDkvJKZe1ApCnk 8J +Supplier#000319072|heD 7cAXZzs,cnCPyDkZz5gzsU +Supplier#000319089|Tdo,Cu2CLPx0Wr9ML6A3wuNi5FOE59yLZAGtd +Supplier#000319174|KVvs,7iY1lqnv4QJpY8JHtJPN5RSlPr6sXr5ptSs +Supplier#000319234|yv,1LgXN8rJ8KUyXNt +Supplier#000319361|f4OTgNxtFOtWjLj +Supplier#000319431|zdvdI5,v,LzuKD +Supplier#000319461|uDIiF3Qvdowo x0 XtpKvRe79Ap6daNrE +Supplier#000319482| Yk d4oQXZU66ApdnXBsVkPQRa, +Supplier#000319484|BsTQNtCuVzFYdZht5W4F +Supplier#000319523|eReQBwE3eASu8wehrwjoe,oDF,c3VkAy9v +Supplier#000319560|iPBVH7,HCiMLOmTu7dOIzTCUxTPOozJB3i +Supplier#000319620|IAMi bqCsZ82eMc4tgshx +Supplier#000319635|kQo8sdkrMu3xnX5kFE3L5gFMeFNBejm +Supplier#000319655|Lq2Uc0h1Fmu5oNPTT7jplMGXH0uDaPl0y9 +Supplier#000319700|T46ECLyIVoGx3eyqE00p8uVEhpJ,UlunNdMzKPAr +Supplier#000319709|JukK5OdfGd +Supplier#000319726|Lh63EMGyAHlHkSRmK6rV QZ6 k +Supplier#000319805|qNsjNmPXHh1AonOjm +Supplier#000319907|9ciowelQg9yynAzJnJ +Supplier#000319958|iM1xD51RnU31pF m9AfTOzVz3oIeCcOmL7izjQG +Supplier#000320016|LFLueg4IZKvGVHWokOAgFcH7SG +Supplier#000320144|srSTnoa9 mVi4yI4u4mdP7OKuMC9q +Supplier#000320248|AsUfcZk2SyBLj4zqm1x0U6zEvZBE2o +Supplier#000320256|VkS,eqIlqAUmaWCXC4txw5nEp7 +Supplier#000320282|z5yGYSDw4OBKdnAOLeqORdPqIp +Supplier#000320285|rFvtZUr1BOU27369j8KqlnrHefId6 +Supplier#000320394|Soz94lvnHDinAcrM +Supplier#000320425|f8sjNm2T,ebZKkDrdM1xxPZxnoRhTsbnx +Supplier#000320543|RRmN9,Nsg7hdhVL0jRXlllVmuo,ULirxPcEZdRP +Supplier#000320556|iqXDvbMsgUuTTNe +Supplier#000320601|XxuT3Qu p ZVsWRuw3DRmm5Mg7hMO9o +Supplier#000320666|EOnyEwHYp1HdOo94MfMf6QvzdtmLW LDrm8o +Supplier#000320668|c371xmbpyFZoQ1JxzOGzkTPK4epNCGl80ztq +Supplier#000320678|cf2LPy4 rNb zt PiOBdBMhD8a7Uj9wE8W6Iwas +Supplier#000320722|hp4UcOp7Muw +Supplier#000321025|gyS3QC45IaJOYe411r9RHsEl FPKSLaELK,T +Supplier#000321061|Ghj5pYE89,1n50TwVw,t2Cz +Supplier#000321104|4RKDbjHuHUgG6Lf4n8ExtwxiTajjt8sTbS6si +Supplier#000321122|HahlBLVgfrse +Supplier#000321170|HBCG4JUyIqQl DJZLxvvpF3sg +Supplier#000321240|U8djJ1jtvQFsL6o3bRsmT +Supplier#000321368|sYjibxuISQDqF7U OSjb9a6 fqxhdgpnuPdU5jif +Supplier#000321378|H,rhI,rQeZn0cOE5MQl1OqGqeF +Supplier#000321397|3VUGKYeZONJwcsJjKApJ59G52l4t4wADsIM +Supplier#000321399|UgeJbN0RznOV7Y +Supplier#000321405|EPjNZOWBOdpFxQGuD6rQTbKFwsAqdSDgx0 +Supplier#000321477|uU2PDkc5AWriBR6wZK0H6z9STk +Supplier#000321490|29fw1jKcDTLqqE450EonlkmS7WBP5oG +Supplier#000321503|UDNpDWBj1dZIk4iRpPs +Supplier#000321526|QEAipbhcuwDAPCoUt5z1VBHL LkuiLD +Supplier#000321572|gaCcc5cS,3fY4RS1 Lf +Supplier#000321625| mAvpfX8aQcP3NUaQ1897GLorLRbm3q1p3S67 +Supplier#000321653|HV3 TaLH06JxsDxl,tr4cLzw9P +Supplier#000321731|ilNer9AQ381KHGC11LL4GVshuCOR0UKWHTfekWvO +Supplier#000321768|cHTZaRpsp8857NhFvlxZSeJj 0o1iSqp7CtUVz7b +Supplier#000321886|huWaV0Yc8cbCE1ZgXMmzAp8lOaLT +Supplier#000322034|,L2ubV7eDZ8k2lPyK +Supplier#000322052|RJeVk7lNN7g +Supplier#000322218|xo2mk9KRbCbTojqZ9aFprI0heJFo +Supplier#000322235|ayKWozBQ,LRlvlcxPzpv +Supplier#000322310|BDFXnA7dwXZ45lI5mvDVlOw,uGia,TriM +Supplier#000322385|F2jU0rAuS6RBS0jVlVa9t8hvgOs5c3W +Supplier#000322496|E NUzEkQft,m0 +Supplier#000322516|Tuf bavStqpMnmpfgHX1s +Supplier#000322535|LavoUZT1xdP0qSsVicgqdOUcig0RuV2A,SUYBn +Supplier#000322569|NiU5eGDQ8Jamf +Supplier#000322670|K5wD0fZ33caMe8TfHguUmgkMUf +Supplier#000322691|phKzFRm3jfBxBmkVG0vWo6cIc +Supplier#000322701|lgK8laBEMEOx yIwQ +Supplier#000322702|B26g,Walyrs4DAkB2DY +Supplier#000322726|ttf7xVM2IPuy1QwDS3C48R6EIPfO4 +Supplier#000322775|rFo BTFK8tdnCuzIv,NX9vw0O +Supplier#000322820|geNNSdZYyUi1u0 +Supplier#000322843|jGRujRQBDb5j8LkCLajGUIBJRk7xU8KF9CT5kU +Supplier#000322902|WZyVV8PYT zH4MGrTh8 4UfVK4xkzqu +Supplier#000322936|l5tAg8O Tr5O +Supplier#000322961|o11dHkwh7e +Supplier#000323008|L1gWioeZI5FfOKGmTlVln608cUq +Supplier#000323050|sUnSV8 L zaYxdamA5gCW4jFM9bQSqC +Supplier#000323102|iUqVamXTHONy +Supplier#000323225|mZRTrW,LHLS2 SWlPHqX3 +Supplier#000323259|Z u4m33,UMxNXrNAvST9858QP CY +Supplier#000323318|11Gc14LnPB5 +Supplier#000323329|VsKawE8jO vi3Brw3HEAKlcLBsXyT +Supplier#000323343|jhp5W6hhK5Kdyv0EN4ipa hDpGNJ +Supplier#000323377|eAdPcPpEqz +Supplier#000323455|KYCubcp5hn3eqv7c5vu93EdP Fx +Supplier#000323460|B4WcDDEPHpq,xR93 +Supplier#000323472| MxaDEVxG fLKnzIW YLSaXIViIbkRp1 +Supplier#000323491|tonMrYzpO0PELYUCdRO9UgLxey6 92riMCtxLv +Supplier#000323505|jRF1IYjqrhWr +Supplier#000323573|PYjCVfuhHEZduwEfIEveb +Supplier#000323606|sAFZ7rHdxp7u +Supplier#000323694|zG6Nf0ooTJvba9orGegdEqIZwE8L8PXMJoBCl +Supplier#000323759|,0eUNO8BfgIIiDK8Bx +Supplier#000323788|PS6Q6H6Gv ,qHLUUc xy jREsJdcPMfh +Supplier#000323815|LDd4q2ebp8 +Supplier#000323866|m5k05Zx9ql0gVX5w,1AZcLeJJa,h JWYzKUJaue +Supplier#000323867|4ldQx9mp,rd +Supplier#000323878|EkzZW2m3JCITfLJmhQr0jE +Supplier#000323895|8RB0lZpgpiPhmzB51zKcvANkqdEkL9WDgYLH5Js +Supplier#000323915|RAmH5UmJw2TnYIvwSbgu N +Supplier#000324001|NmMQOPenPI,qR0iEZFjtq0GWojy +Supplier#000324058|tdyu2L,VEwfpX3xhU9E +Supplier#000324074|hodg6vDxEa2Zg,u62l1TADqV ArpDDV qJ8fdi5l +Supplier#000324126|6KO7o92lzFNwBDz OGpW7LQZlnGIlEQUm +Supplier#000324173|UxLZ,j6oVUpuveh qBGPkjdQA6VdTSBOmccus9U0 +Supplier#000324217|aE7mbno9Mtp0vml2hwD3ZJqM1JyBzoqgDuI9UI +Supplier#000324250|FLAxfK8f3ZgM2X3QDjWcP +Supplier#000324251|q5jZ8z4O5wu8NBit eS6L97jhK,hWM4RUN +Supplier#000324305|uyivZNStYa +Supplier#000324384|ozxVSlBi1FjJi +Supplier#000324388|ZXTGl IlUTZ0PPpLeG7XUtNE3yJ94jQ +Supplier#000324427|3C4aMGEG0c9Se77oJPfX +Supplier#000324474|EEPffhIzb4Wj4eSzvfefz, +Supplier#000324632|AZtDQTnwomm wtYwbFjgYxNEqR +Supplier#000324643|fVSQqdLuIUks6CmTUS +Supplier#000324663|iF41JoWXJrxkd27 +Supplier#000324805|VZ7Fm8zrmgJJCsNxpv5VA +Supplier#000324817|0rBesVmYbZWocuRItB7OjY36hEGmUeRYwOSpyimU +Supplier#000324821|7FLKG1J3jbNvEQU8Vq STXnmY +Supplier#000324833|7 rIu78vz5wyc3VaoTh +Supplier#000324843|1sszdJE31ngu +Supplier#000324849|CT1b4DlWrHymIWpeOV2fI3zv7NIxKIC +Supplier#000324882|jD 3Sy6k8bzx,mPLp442ug6wVCMib3i,xKa0BM68 +Supplier#000324883|NcxMvYyB55VeCd2cEYU4oobGhTFJUxZw0f, +Supplier#000324961|Uj,cXfp26S +Supplier#000324981|pKLItweLqsOKLJQkDp3 +Supplier#000325045|UMyZ3USrvtfmOgFRjlsy gfwZbu8748zG1 +Supplier#000325059|bL0RN11H,5VUZ, +Supplier#000325148|AEr09164tgGlau0ag1ILkpYzZy +Supplier#000325150|LmHW4nxaYntj1m,WEvLK +Supplier#000325207|I94kWq5keiy +Supplier#000325346|ALgqbYr5CtWHL43g0AhnOsCc9gGYbgYnEMQw2jD +Supplier#000325347|WE3B2AdT9o6xR8aL6K q4xoeA7Ml8 +Supplier#000325367|vF9vpbCPy3h4tBIeIerd4j5OEvok +Supplier#000325447|aaAFUI1i4t3cZpfK +Supplier#000325462|xTZhs8sHoRtDfZeoR8 +Supplier#000325502|UkG3cMwYBpIrFz6Sjh +Supplier#000325528|HmzKXrUsIGrZJ,H44e +Supplier#000325546|yw8kQpMq6VK +Supplier#000325608|KqYOoRyV5QQ,lh I1JC6jx3 +Supplier#000325645|9 ve10Vb35nwHG7M7BPzFx479iKy +Supplier#000325732|Ya3e5TzMyHwy55 +Supplier#000325751|Yc0TkjlcYZKM +Supplier#000325776|,f9m8wV4nKZd +Supplier#000325831|JR3aBkTnVrs56lZf,1Ml6H71,Xsea +Supplier#000325853|Qk,HSAsTE7g8pB7lM5hOiJw2dJjqveLNLQ +Supplier#000325926|MaRF90x7SiHIGm8giIMX +Supplier#000325940|SwpwfDJ6c5ko0WIIdPwyeGWKnztlwHXL5 vktS +Supplier#000325941|cX056530VeWSFyx4K6EnfSOCGXw +Supplier#000326052|ZRU0o35jqlL2j8IQCT0ubgBlVoLyLYDL +Supplier#000326155|bj9Y11QblwXrglrDxpfGpGg +Supplier#000326202|6wHo,0d eJQpj5 +Supplier#000326216|zICSC7kGt,M,MpawQyoTbqh QBHMn8 +Supplier#000326268| O6WgFlfThhI048dvMllIVUR8B +Supplier#000326310|,,2vK7uPc258hCP,4y2PaCc35tYZ anwXhRG +Supplier#000326321|72DUjpD402E4d0xHJZDXex +Supplier#000326340|l3Ig ca6Cu7k +Supplier#000326356|O 5IJdL5j2DFQbzSUfVUkhABK +Supplier#000326362|c1SwOjzsgV6aWUPcqpunMTJyKIL +Supplier#000326452|YwDSAS0CLPLnk +Supplier#000326476|8 qihlk5ZV5jxB5RkrN6QZZA nrBZN +Supplier#000326491|kmqRTPir1plcHB5iFpvOV9NbWMn9wjSH0Yuky +Supplier#000326679|V0sus4YPeY4zhP07MeHviB3 +Supplier#000326746|4xBCGWVQOHTS5 +Supplier#000326818|sowDzaFNfyFMv0xkgFo9s7y0Gjyg,oRu +Supplier#000326879|jKGufE9kL2DOKWt5 +Supplier#000326943|IRw9WMs,i,J9tkkJTzO7 +Supplier#000327001|J3DokaiG,eRuI,OT 21w7O bMaoGH +Supplier#000327059|fBU760YEB4Lnkj315Ea6 pBEkjC3zTAy6a +Supplier#000327180|F2HQM9dM0alePUfrdv1oKuZFJpDVYnqJ5L4 +Supplier#000327209|f7Kd9manfRG6v +Supplier#000327220|hEL0K7jDBLZROwLCVGiTgbJaOJ,d 4Ilqn3k +Supplier#000327287|EjuZkkyV8yyWb4jQ4,oL tesMG1UpGgsCesFCHn2 +Supplier#000327404|BdbapMEv6,k4jy2HDjYXTSz +Supplier#000327426|UUeOr4 7fGsNibfwUYNuG18t +Supplier#000327437|536WxErjMAuU0B +Supplier#000327441|qy,p4cBBX5wARWI3oQW0KYYYwA8yrMYhXwQYngR +Supplier#000327457|wA7Sg5p9EVFGsxby +Supplier#000327481|mApNFvfxsppdHtgk5O4AgjU2fCIJl1 +Supplier#000327513|afo9,EcRWSKl +Supplier#000327563|KEjQMbvTWAQi5KgW1mnX6HmqmXcoXygDJSt2,cR +Supplier#000327576|BxblzEa 5fWOBsZoehkaNlm +Supplier#000327633|yB7wC4,qHzFXCyBZbIDeO yNzOpLlIp0 +Supplier#000327704|jg8lChZLFtevLy9qHo +Supplier#000327864|6L8zsyQgffZiqeM40Kr +Supplier#000327899|6uZ3UJJia3PWHX35wh +Supplier#000327910|ohgnL9s6NF qbUaiVH IuFZd1M +Supplier#000328081|g9wgmJUvE7JJJTyBUKSvRJ04E9Wess8Rfj +Supplier#000328116|nU8XS5Yi4iqkDdBz9an5lhhF4mGtt +Supplier#000328298|qSM3lmWfsjBUGqvCFyZo0r 1gb1M3cKbIYLpbD s +Supplier#000328368|U8sqTu jCWiBD4tdOw151kDcYxCwJA +Supplier#000328420|k7eMraezMq1rr +Supplier#000328439|rIhyoN,Kohsap VeS5cG8m +Supplier#000328511|FmHvo9APTFMU +Supplier#000328529|8,gnKmNPI6v0j1HdCA +Supplier#000328532|6nO,SyrS8klFxk CZQjaecf4xn +Supplier#000328571|oGWu6eXY9A4gkEsd575B3CD6 +Supplier#000328636|HKPA01dnZcyvt, +Supplier#000328683|2LHRxGyVxz6jDkvVcKyyxtEpgLB +Supplier#000328724|qT2uQR J6A2IeM9gXjcv3hR8qtwSy9gOG +Supplier#000328789|3LPQUvqSKADjf1YSIJqgwGfyr,oE3ZI +Supplier#000328855|B9adrZhu spG1cJ,gGcol5XQDU +Supplier#000328862|zDuNkiIHakmWCy5M +Supplier#000328898|uYFaVC8Rn8feh9J7CP945Gcn +Supplier#000328917|u0MvmKSPZK5VpJrWKzlSuw,uZMEGSX33ED +Supplier#000328952|y7GtY7OaBWQLSt qXVuwNlg9o +Supplier#000328953|jAiuWBq2yf1h +Supplier#000328972|Q1ACRmQ4Ij8g +Supplier#000329069|gJiIoKxNfu0,Wt4aytOhWnSgxcbHYj +Supplier#000329343|Ao51pSfVHGuhuPuPv0VAtuzo k +Supplier#000329352|r5Sr84aOuc2VncHc1cqA43da0LfvDSHW AE8QS5 +Supplier#000329380|asE5lmMx5Z5bEC +Supplier#000329528|AzvVAlnUPzjlu4oYxGUZerzmtLQ +Supplier#000329529|nEB3FjITpoE +Supplier#000329563|rOkoAs7f,mxXHqTaQbhHVKQUkymVhx,ZONBiA +Supplier#000329635|Z1L0Jvyo57r98Km60z4NoeK38tkFBdTF +Supplier#000329675|Xs9gy8qhyZuJC9 +Supplier#000329747|JNwxhiQEFSbXDfyYNi8Uo +Supplier#000329754|oRD4 Dyw3ZHQ +Supplier#000329807|LkfzBErldLTefSYmmf1Qb +Supplier#000329853|GCy9 Gqzy5 tM2QL5cbG8sYj7bbCGaWeEX20 +Supplier#000329875|vzpTr5rRZSdP46qtS +Supplier#000329907|k2bzDGDfCH2j5WQRwa +Supplier#000329972|WafApK30O1DNmkTVpaIEdCs7jsMYF8a544b +Supplier#000330205|rCndzHGNPb48KEk70MmssDkuuA +Supplier#000330276|vCBORlJcyE0yrWjcq0WrBZtD jTx +Supplier#000330280|I21eAN3JO3i7z43hedxv +Supplier#000330354|rBEG8geEUZ6gxT +Supplier#000330383|TKJO,2uwUEbQKYX +Supplier#000330521|ZHefVg55uQL +Supplier#000330527| GUqfTtxxxUxIrF6qy +Supplier#000330597|W11Oo8zyjYE7Tlm8hx4bAyoXfz6zgV +Supplier#000330610|zvKFxID8uv,1VIyCew +Supplier#000330619|t7bBJ OlMF, +Supplier#000330806|6rqMKFB2ipMmTEg10zeBlos9R +Supplier#000330893|1e9Xa3,,oTxw7bINmIw +Supplier#000330919|9fCfCjoX8QBiiD,HWirHgZW8P1 +Supplier#000330937|dckzd19jbQ0mDfFZOH +Supplier#000330968|bTO8wXlCKEd +Supplier#000331062|VYjmKvGClc +Supplier#000331088|zC3ehYZ8o2mdevhAOkcuNVSGRYjMEWSQNkmk +Supplier#000331157|K9dlzrxVLlqExowiI1H8NzqPxaDIFb +Supplier#000331252|rHDZ51RGL3DbT9BE3R0HAx +Supplier#000331372|DCQfDXbV9nnHnfG2D5nhQ8k667Bsi I2tjDqdPK +Supplier#000331469|kTZD8exTo2rDrykUSm6uvnLwn8ZCYqcuHbI0 +Supplier#000331479|EXJeqODSajqgWobdOhMZHrvUZa4 +Supplier#000331534|NgOdhNtXg,gSNRVO6fCbdm4LHKb +Supplier#000331545|ibUXl0h2bFxI,,S0DbP6ZAQoMq +Supplier#000331548|QQfqIMh4R7YFlt7u83BECjB07sTEbJ7zCzRcO +Supplier#000331632|sD4ynl1oJPhx8BZNSp7gyc8r806j5 +Supplier#000331766|1ACmqGvFOEZF sZU,hy1coz h +Supplier#000331888|orieGBnm9QvHhhFVqXYubT06tHfygmNs8hgRKZ +Supplier#000332066|q5WQxhP9Knng,Vvw9yUWpIJR124i bg4 +Supplier#000332089|jrkx10xeWkWMXwd,rsU7AdUqZV +Supplier#000332116|H5g8NYf9Ukla,GFGGPn5xSVbOrCcg,eA6x +Supplier#000332131|3D46XrFPDujnMtNqEweDG0tvVdkt +Supplier#000332132|N5L570sZnSV +Supplier#000332223|IRAgR2m45,XGUSbWM1e5F7tQ +Supplier#000332282|5HJDRs8YX1nTPpJx20e0SGmHsoOoU3WJtwj +Supplier#000332398|qWEBGj2McPGRjx4uvV 78iwXJ +Supplier#000332405|pzJZZLZjOaq544E53EcFWKFK +Supplier#000332481|GJNj8gKZJ5wuFtPskOYplVXKP1dW sfXnS Mic +Supplier#000332523|vWiaA8m4MN1SfHOYkXTDnRAF1KoDUnGfTsvJAsR +Supplier#000332608| YFREOeeckOviIlVUukDn4X,qIJvSc89 I1on +Supplier#000332723|ffS5BiV2IdoHpnLaUnshTkz6NV 0Cm2I +Supplier#000332763|Dc bKu0Oe6nm2QndB0XDVOM +Supplier#000332771|1zkR2L Ud7nb ajlHzyWXTfbLIVPUp P SwntD +Supplier#000332795|ubkImbAiemjpwM2hij +Supplier#000332800|mHP0ggBEd8U7ZBTb1e42fSnYx7dI5Xy fy +Supplier#000332881|hf9,bXh8jO7 +Supplier#000332887|ynLoH50S5pQnTJhG3VlJhLr1WLXzvQ,eDpO9K +Supplier#000332929|qshnbtaYAcPy6x3Uc +Supplier#000332987|GySd wkOPQWdehYEZGHQtNihFpP0 +Supplier#000333013|QrTdwH0nvtCyTjmQwbA,24uNX +Supplier#000333028|IDWESBO,G Je91 +Supplier#000333052|yhL8UfLfYExc7Pi0oFdOok +Supplier#000333149|cU6joaLkS1epPFCV +Supplier#000333168|f4Yia nAySTwg3rWcHAPR5SVlTkwpkZ +Supplier#000333189|G8tRdWOitn5W1SduV1qJN +Supplier#000333324|5FI38An5b7g4OJKZF Frq +Supplier#000333351|cO5yTBb9x0xH5N,YgKQVc,gfRAn3R +Supplier#000333415|arj,ZDz46ykzDmDiKkOfo0db +Supplier#000333510|JC8NSNmVQeV2QKKBNhjU1i1AQyNzOc,oGWS9 +Supplier#000333515|mJKFEUDPqoQ2vQGe6 +Supplier#000333600|FmvMlgsSwSXyv,n5K +Supplier#000333626|nSI2jozCqJamZ8gdYHH dHYhn,X +Supplier#000333719|2DQxOfiC9WvqCGpTVuWcYAUPo6Eu0Hf4YJMu +Supplier#000333842|p9boxI8gnjscwe,5iBDUilntkfnoq +Supplier#000333921|S8dSOVdjrBvcHj +Supplier#000333930|l6lJ,QVPBvsT7jdEvTVoqZ +Supplier#000333981|Opo9P4bwCbhvUMNyh +Supplier#000333982|HnE5JG5fOctUq,yL +Supplier#000334014|5Hm6XEjlLDUasGHItON3dsYD +Supplier#000334032|R8kC8AJupcZfqkSAnrUgdod2 +Supplier#000334039|UjHWY6wvM6Ro +Supplier#000334064|951 96iInhBcIPDVy7 +Supplier#000334076|rDBhQLS2TxLz,U4ks5yp Xe36Ex4aWFiyFhQShj +Supplier#000334093|Z,rBl6vX2xt aqc8lGdGy +Supplier#000334099|kXtPZoHdz4Yr0xWhFJUoLcwc +Supplier#000334194|1QL,XLmPKcpM2uxd WEow4xpGy8BWU fcrh, +Supplier#000334219|fI,v4Ga2jJc12u8H76 6h1d3Mj,ag +Supplier#000334456|V86 0wTc877F9KV4glhPZTLzOSe4XP8VrW +Supplier#000334532|eu48gCfseS4X8 +Supplier#000334573|2WZyXK94V6 +Supplier#000334595|cr81vXGsby,ypqH +Supplier#000334626|j7ru57tryTgdWnp7snYpxCnm2fj +Supplier#000334650|CyrXHhfx MnyOkI0z5FNWXGmaw2eLb +Supplier#000334756|Wl10ovIBwI 8Rldj13WzAMcmChX +Supplier#000335024|Ty9P3XCAROgGui4z,KQgTypej 7mmFPltaig +Supplier#000335088|bt28TRBXX6u +Supplier#000335142|3QysSTrsZDvBvtB6ERlbe1 0o5TZN +Supplier#000335319|a6kcCwXtMi0uWJXVh738RBKHEL75aANtU6VGH +Supplier#000335321|f4F3wV0,rwU181lRaEzqH xg6YJG +Supplier#000335408|FcOK08G0J8LjYNFmYg +Supplier#000335438|AcoAXQ4hQWmTenxa +Supplier#000335483|P92Syw1ymyi4W0b ExnviIF5rRc +Supplier#000335508|BqFbJdjMKTmKGW8JcurMKHxn +Supplier#000335642|9sNjSgP,yIwRQ 1JgWUMJ9CUy +Supplier#000335735|pIkd xatUBVKQpVawUMnbmJOL9a4gvB +Supplier#000335790|SmuY1y95KR1LbM5syJ4S +Supplier#000335914|cOhrw9qsvrTEltu +Supplier#000335931|YcnPRXqeULTB5V394 mbMJWoi +Supplier#000335979|6w,34,f5pP +Supplier#000335991|AChv IOObhZkhiPmkt4F1ScKT0s5qOM +Supplier#000335994|kogOnkwzilajYEWN Qw7c +Supplier#000336015|vQbvOQcet2 +Supplier#000336060|nIrZV0HBux,WK1HISNj,Cf +Supplier#000336065|KpiUyedAfNV1ROpBu +Supplier#000336153|rzIK,ydQzaHPRF7zu6z7P80ViuRaVYi,CSRR +Supplier#000336206|D0O7gLHG KRiR +Supplier#000336276|oK31GbzhYyJDJb9bu94CRFjjN6N +Supplier#000336343|EXdFAf0MPMFcT +Supplier#000336382|fBceiQlfeeuJIuYq68VcDOcAPgUa6l24 +Supplier#000336384|nHbmaz Lo7uNdWRho4yTlc2HVwqSO1xgit +Supplier#000336398|ktWSC,0gvgx5QBZz +Supplier#000336401|Zhrcpu cge +Supplier#000336428|ZWYWFbNi6F4YRJqAvwx7i07s +Supplier#000336434|0PcFJJbIacjUyvfncQ4A5T1InGpJ7N2ipF +Supplier#000336457|3iLAihWlFTBx0 StSU5hK3iv +Supplier#000336483|K5rz X72viv3OBj7FoEM7Vra +Supplier#000336571|rLnSpxSI,ryPeBUc69ZBh9U +Supplier#000336685|EtRu0ZVxLAfY5sG anwuxNnz4L4lX 2Aj2vcO +Supplier#000336696|iR6szZXraFAnGNqPK,qN8DBqfOKQlj4AtlcKmLao +Supplier#000336756|pOfHdk61FuoLz6HqcTnJ,u3 +Supplier#000336844|qEuBcH4cVcBsAT4ucVMCcKzEzL +Supplier#000336893|4InQZmRXzM5M 0oBcnSZ +Supplier#000336974|VCWW6T1KB e m8THb3up44Oly +Supplier#000337089|HHJGpwbqPFmo37EKdK8 +Supplier#000337118|c8KbjFJf5KvWDAaVyvv +Supplier#000337197|BrwI21xLvXJ9LYSR1aLUp2Hpl9v +Supplier#000337218|bYoKefQF2,NV5Zlydg4A4GkY,FFV,0EYn +Supplier#000337226|vtL oCIhNsPnx +Supplier#000337255|rBg9,0ZrBou SVlgKanmD0,4u56ZZJ +Supplier#000337296|88WTZUIkKmH5yEA3O4SYKnWcaTfoW8sdMsxHT0, +Supplier#000337351|l,Cyo9mDOHqM +Supplier#000337352|wRz fLL,2aSxrRovApSY7 +Supplier#000337627|BvsIxCXKlAGQoyNTm +Supplier#000337641|L5zkGrsZaxPYsk9OQH2qOsBdWShoHLqBWrmbCA0 +Supplier#000337647|S1pJRN2UJg6Zb6aG +Supplier#000337712|hktZSwNT4Oiqnt +Supplier#000337720|OdW6dZB DlagRAhvpfaFoNJhCw +Supplier#000337924|IaEf,uPY3AC1xvPMnMp0G5oPKC4YxzFB6IEa +Supplier#000337997|FkstG4ZST0gebNnR,dxUVOVy2Scn2wz4QqcOsYB +Supplier#000338090|tEtQO1ENXs01NmwoEA +Supplier#000338121|xqURuJiAvyOPnVjWAF66NTer0ljxyK +Supplier#000338168|Pnm1AE 8q55 +Supplier#000338199|,0,q0z tqJR5H +Supplier#000338233| Fd 5mv 0ERx +Supplier#000338255|XfhZM5XMznGTqfQKkst sdaUKkmgDb +Supplier#000338330|KKl,hR7ICgjr +Supplier#000338399|Eje61yU9n9eBADvKFqE +Supplier#000338636|aiTaLVyE2UGAhHBAeYZPg3111QwXVMI iE +Supplier#000338668|45w69qOjiag +Supplier#000338867|wPBjDciBSPMUOBP5ya8XId +Supplier#000338879|Jy2jPDcK0P57 +Supplier#000338921|zNKjVYX4GnKC +Supplier#000338954|q2OEGpjZpIHFpT,Sb +Supplier#000338978|I0e0N0gsvnwzLO1dHVj,PbLp7SjJXWPeAA7g9l +Supplier#000339066|dO63ndaMJLU,KK92EQAqM2G +Supplier#000339072|bmurgI7jZuhYefVQNXwRsKbY6DOomIJIwcinL6 +Supplier#000339125|dC1fq30xLvZkkFYAC +Supplier#000339153|Mk9oiSTJT2KXnx00vgoXbT0h6SwxYt,8YG +Supplier#000339199|YnwreMMNip3 +Supplier#000339288|,eupa1rOiCxSZYVpSD8GJuGzEBqjKoVzIjJ +Supplier#000339290|pPzb0BhjGrfePi8tp8g5Lsmdfswo2WvlN +Supplier#000339303|tsMF5jfCuznfz +Supplier#000339325|ljyF8 12mqi +Supplier#000339362| BOkMswnWeHS7q84lM84WliirWLWevlpKLa +Supplier#000339385|JGNKWCSTB3aFjwpJvBaO0il3A1aG9eEEj eSGs w +Supplier#000339497|ZYRbaGUbgLcJnAFZGATWX 1M9UvdlEQ9Qb123FO +Supplier#000339636| hkS74lgIfYLdrQ5kRWY7HkPKn4dAlBzRa +Supplier#000339675|o6UY34kWtNZdj3h4WWGUN +Supplier#000339911|4Hnr bpQEfPSA4OtxAQVH2Tge4eaIMJARm +Supplier#000339987|63Vl dC3,PWRKdr5 +Supplier#000339993|oSslaQkif79Url,rHXfm6kRbRPyo xSdxEp +Supplier#000340011|2pz9o4h5IP t52GeMnDLjS,UUolkNIzKVU +Supplier#000340034|4tJsNXHjGl2IZ2wYE wJUP8 +Supplier#000340077|CSRKlof6Na31N4F9hNFdQMQRuBkM jCNpktevX0 +Supplier#000340241|IAVfIzH6zJ8ZvO +Supplier#000340249|5EYb5,ILD8qgZh88L8PCSppBH1 +Supplier#000340261|DByEwmleZXO4bBTcxqBL1V2ZSsfjI +Supplier#000340301|pt4AlO,4RU3 h +Supplier#000340452|tScWurzUKcBx5ORTQXKxFdGiSl5j +Supplier#000340546|Xook4rYXg4c6BT,G +Supplier#000340589|xXg4MMy5Zmi KxaSbzize 2msGiRWv1v +Supplier#000340647|AuPpK6Gd A25O29MyJOYFLI3r +Supplier#000340651|rn99cncBVQDqU3KWu0rDTFUrcXPH5Oox3,t9zN +Supplier#000340691|eJnyE3SI31jVk0Sr4rORTZ +Supplier#000340749|rNebQR0voo +Supplier#000340833|EYGUYZoa8TfTBwC +Supplier#000340865|qGXNKUqHsHed +Supplier#000340880|GzxRvzNvBC mkBJRFPFg6IvItV2Zwm +Supplier#000340944|2S6ZpOBwW4vDJKCK +Supplier#000341025|m8bXDptYeiXTOImu6L +Supplier#000341046|9nndQEE,M8jzi210oQl00HOOA 1Ea8,D +Supplier#000341086|RxkfqKx4oIKqTccG5QOaoQ VLZlZuB2vZ +Supplier#000341135|6gBSjq0duIscEEmyW11iG2Uxcd7KaoOrf +Supplier#000341165|dIrLOqu,WOpDbqf9 +Supplier#000341180|yScaXs0fUqyOZjHW3iiOuC75637gjFVZIGAY1B +Supplier#000341242|rnG qZEkTlF5qTUEi7bcgENCVk N CGkxrJLa,b +Supplier#000341322|nmEpK mNUSDV4mD9M0AYPLFH +Supplier#000341365|2Q9FRFj9WSlIa +Supplier#000341418|YP3gpZN7t8rcsFnjV4iaZGG7hddFx +Supplier#000341512|SfZrH,iVSA5HgJYZmGw,oUwqulfZP4HtG +Supplier#000341542|35djH1QGfC8FLZ7fG6sNWq7tNtzL7XkjNvpOwLiF +Supplier#000341718|l1R3hOknv8vJmB itcqk +Supplier#000341795|3K1PeerFO0bWha,AaeE +Supplier#000341832|wohWhhwUh +Supplier#000341842|ktG7w5MvA0zsjURYrKx2mQlLFr,JQXh8j733Nx +Supplier#000341854|H2opJjjIT9aVD0b,M2Skc2lW2kzMgFUKM4r +Supplier#000341895|GTjsRdnbF4uwVdw +Supplier#000341976|eeUCC8j8 txmn,VsLtd +Supplier#000341998|b6pHlwyBNXx1NBchuJqsY,gyJXee +Supplier#000342066|38j7OHPCK1Hl,21g +Supplier#000342142|HyxGR,0uQv0Ant +Supplier#000342143|bhewuiu03wIahMQ2xljtEjoS0LQdgfRN +Supplier#000342200|oRI,0Zt xsj,VKOK06HI +Supplier#000342231|rzekXc3VUzhhuWWC5ca,m6nHcs +Supplier#000342328|2IX2XqznjFDnke4m +Supplier#000342414|pqCZYpq5w6 DlIjGMhcCCzcg9 +Supplier#000342528|G7a1wcNC8gJhK78H +Supplier#000342704|sCJt7GXTXfe 7f, +Supplier#000342728|GWkaAKD5,V +Supplier#000342777|vz3QMrbvTz4EM37eGoxL5d,mfzW3LtF doT +Supplier#000342789|XKLFCX6ZCeSniCyQRV9WFhm,EK2TNVhYnr6y8 +Supplier#000342852|X4g6raw1D6GKzyTwX,oWmMF0ybe5wtyFfW +Supplier#000342950|7L7pyP4H2OIvC47fPTvdQ +Supplier#000342997|SFPWQa0A4M4FfhEqo +Supplier#000343201|nF4lwl0hWY9dMJmrDPWjmOzV2Hv2gwZtg,j6MLY +Supplier#000343233|RVhYXZSQH0dXXS,h0F Z +Supplier#000343289|QDalOBvEsWrM +Supplier#000343330|gJJMFP6S E,mv3fhpd +Supplier#000343367|A8fHdXboVrPNCA,sWkQLzt8b4cu9r7R +Supplier#000343562|B1wJucx3s5M 2waIo74 qrEKP3QtDc34oMmzufB +Supplier#000343675|VccbI1LiMlA62O3lBdIehRe +Supplier#000343700|OWdaMWNjhNpeAAv28 +Supplier#000343732|Ym 19G,7OV9MA +Supplier#000343769|QP0MQBTNfqjXJWEVVv 5 +Supplier#000343795|4T0L5fJ2R31IW4AZ +Supplier#000343937|EXnLpPCRwJ +Supplier#000343941|0e3ACcOiLNK,3pDPApDdEm +Supplier#000343945|RZcUxKve0QHvOuex +Supplier#000343949|tossej5qxfJzC8elAncU8zd5vXc6Eh38Nr,h +Supplier#000343985|yOsFUkv NV6UucR99C48mJj3O9XL +Supplier#000344014|Jg3vIE0vhQA, B2cmRXwVHYzbneuwhfxf +Supplier#000344033|Awq0mH1yM60rGuUem3tCMa +Supplier#000344084|waAE6sFFuhe6 +Supplier#000344093|um8eLd36OeAHQUbh4g4 +Supplier#000344128|W3mmJ2qxWIL Z1FufBnIFKGWfAyNs2T +Supplier#000344156|g0 xmhr0R7stTESzpZEnSBC1gpme8p +Supplier#000344187|mgW1BKi4L3l +Supplier#000344331|tpSiuPcZhHQ9qAzB9eS +Supplier#000344382|ql4Ofg,hSGKsVk2J2i12b2 +Supplier#000344412|P6s22b93zez5uemWn3,MwI0f +Supplier#000344416|VGPfbJBTkDMc1t4,w,Aw 6Nap +Supplier#000344431|IbvovOmW nLuyv +Supplier#000344615|zYWvA 2zWAL9SJTEgzlq1QCuhuYjI0JiOkW3GXEj +Supplier#000344631|D,4XViqy3SexC +Supplier#000344632|y5vPXOzEfWDvUFahnww7L0ZiEhlVqPdiFc7,AkPd +Supplier#000344740|OufjHh1 6M6X9 +Supplier#000344771|lMaEb,sybDPRF4JxOzickTITtOcyopts +Supplier#000344813|OIRhSNwTSM6kHpa,8h4xyvhMCjGLDXiaZ6 +Supplier#000345016|RgIoPH3Bm4Kw +Supplier#000345049|8,u9U73lDEZWBKt7nhq1aNb5qBlxp +Supplier#000345058|ZK5aUmWWG8yzv6asaH8KMvF +Supplier#000345068|SpaO k9gMSB +Supplier#000345120|72CBlUGtke7zM,vV4XH EBIklJ4,jNzRO +Supplier#000345127|3VIfcg6EwOrYE8153338SEvlossFGP9Ejn +Supplier#000345187|sRSgPAxXVVKSpHdKOWY7,bfApT1lS1XsvODACG8 +Supplier#000345362|ZCuvyyhjzT2K qZ UZ P7c22sMWVcqV +Supplier#000345375|96VBUZuByorxhDB0czhqddCKRf1Zwh4JRZDPOYji +Supplier#000345415|7afztULDxgDF,nMZmmgkEwHvhT +Supplier#000345427|N8717SgjUP28NMOsKsymBjLE +Supplier#000345489| VmSAWkLyHl +Supplier#000345497|dR4rG0ESlj,EN6kE8Lw3ceI0e +Supplier#000345498|AaSVnWJYHy9fJ7eL c,dgp9,e +Supplier#000345519|YIR4964wYpVTjKA4o8gGuuF7p7fFzGWjEDx +Supplier#000345539|DdvPgcEQL7fujnF3cFVdG74tCt1 +Supplier#000345580|2zENzEGKX9HOKdK,b +Supplier#000345663|xgu5QkV6dLp +Supplier#000345784|P0HmLUVa0mTWKO65YkM,bNSQNkiscxi6eoa +Supplier#000346099|4wbNk5AhF5FfwJwKx +Supplier#000346161|eZP8tCd2fUcN5eraA,ghx8SD5GttBIL s3fsrU4 +Supplier#000346174|yZdDb FwJJ6Sc4T,Zrdn02VK9 +Supplier#000346256|061v9tYeoLWII0HfWSAK55D1 +Supplier#000346270|hmvr4sjg5fj0zXH6tBcgTOy6t8RCv +Supplier#000346334|x6Wz7WmJQFRS6x24bOj4AjwzGUN +Supplier#000346360|8KUNky87o3XyjULby,WoaIEENk8l7oFIVYHRcI5 +Supplier#000346382|oi1NegZ2LMP1Gs0V2GCEJy9pMG60p +Supplier#000346415|CIn0gV0djhQyEZ94 +Supplier#000346452|EQPUZmBRy3GyfLQvTr1gLQe1EIC8w2SyPS4 +Supplier#000346490|6fO1p0 1RCKdmks2KOlz127 +Supplier#000346498|yOWDpkqqMcHnRe4OK8DnzF0hIcFB5exljG +Supplier#000346605|DKe9McmZZJ0dTBrXRwMZm7YGXVulZVlaEW7n pR +Supplier#000346675|xPL2orSKyY1l78LmsxXy6trN3JtS +Supplier#000346699|oc8plPxHRUolAC +Supplier#000346712|wUOwxg72tK6s,lMckJ669GUHfHDLtojL +Supplier#000346753|5,EyyV0Q,VoT2W +Supplier#000346755|eerY3Y9QSSO aDBks6MYdaUiEX +Supplier#000346803|AVUHAcr9tObp6mGWO,DTt2wdmyZBoOs,Nz3FsOzI +Supplier#000346851|ztC5lU03ZQtCw9UVAqkLN8sj19562oNKLaeQjm7 +Supplier#000346886|YxQiTFdECqwa4Twgw dz,hiI09XNrP3bhuK +Supplier#000346911|uH5TQPDyvs9Fc1v7xf +Supplier#000347007|ZyxEZCbFDaT7htWq0KW2aQlQk93YS3 +Supplier#000347169|kd2jIrvUDxtL +Supplier#000347373|7uByhg I l0ibVr VBDaLpt3JKFm +Supplier#000347388|PALZfMusaFFKmYsjY +Supplier#000347421|IBVIwRUcUUGaHGsmwErlGwKLfRvKc9MLjdM7 +Supplier#000347444|t6i733LsyIz4hHM +Supplier#000347630|xxNCjFc25RRrd4 Ubc dS49Xq52uOC04SjY5t,wF +Supplier#000347777|UXhz7yKf,1Odb,7tskqvq7,JTyPQ +Supplier#000347853|PqSZtweAbDW74tU8g +Supplier#000347926|jdulXnPSKFJroG1ugntCf7C6gblt9TUJ QW +Supplier#000348000|9955GSN 93ijFt7hGIfZn +Supplier#000348017|1uZmFwKYJS9N8oeiVEF +Supplier#000348057|k1Lr1rMFvuk +Supplier#000348067|Ot2u7pbvpx +Supplier#000348125|r41RA6sMicT49QlVVvy +Supplier#000348413|Zo5KKIzxLQ1LFXpRbDZarDZF4lnGAN +Supplier#000348476|aZTreIhbeZ40 +Supplier#000348503|GZ1687yOMCTI3k8bu4sbuQh +Supplier#000348518|rF8B12vZH5Vh7dB1DNNYHwJcA8fbaMJy +Supplier#000348569|E9375MWqcZt07QKOx93 2y +Supplier#000348583|HdUcJBXV4Xqq0kLY4 +Supplier#000348585|Nc x8gOqEBm1cY6G6QvJBAH +Supplier#000348601|ur8WbKWAyl8zHnKnJ,OSxcEzS5wnnMDEH +Supplier#000348752|ZgSV5epb7AZVe108OxQ3K +Supplier#000348780|yTSTVyxwrIW47ViK8uoq4Daig9nx iTA +Supplier#000348810|0hB2MVZYexQTlSxMG,kctI0wtcnxq1xmiKr1 +Supplier#000348856|hTaGQNE1RrB24H8Zq5pG7HLu8FOf46mF8 +Supplier#000349018|bVC1hX4wn1nGLD2JIc +Supplier#000349043|jwgna9RjKxIVK4fmux3DAQDbQFPfh3j8diB74,Q +Supplier#000349128|oJPJc3Z0os20CBBJvXbA +Supplier#000349141|x0wh QCFHK9M2IVeJVMaXS1PVxEcoQW9JxAXM +Supplier#000349209|cl8lKqzQZlfMCxDALQilyOFz6uR4Z0 5ZGIZhFYQ +Supplier#000349264|Tcnh99pRzJ0F5x8MVqkEW +Supplier#000349440|OW0bYTerynJ7ythR pGymGt9OEaAgVwcfgo +Supplier#000349490|,VhMOVzspi5VprouHAL4241WO3nd +Supplier#000349513|NJJOMFN0Q7E3SyN,JwDw +Supplier#000349555|4QXjcH6jbb3C364ed3uiJ07sh7ng +Supplier#000349592|y5biLM6rtPNshUqX8wlRmSeG8d4DchdlDIa +Supplier#000349594|F4dI6F2449cRl1aSt9gBjD3Bq9cc30Af8R5Rc +Supplier#000349610|Vj5UZGDNx0AToTEMlQenPEEpTIdC9oZl0p4N +Supplier#000349693|TJl2wRQ9p6k8tCSBMQiq6 +Supplier#000349773|iUfpVMtdtXUF5WqZl +Supplier#000349825|Xj3IvBNE0LYZDuWc,IsGL4LL2e +Supplier#000349868|x 86AdyJPIfArDMYGgzL57aOWJHa SlpEQ +Supplier#000349935|tI1FKL,aC5LxGTMUIKJrWf,PgNPLdbudQg +Supplier#000349948|1KAuQktv7Pqt +Supplier#000350029|1BVaASsmxlZuSeEn0Cc,Zsjn8f +Supplier#000350132|zl3aQHajNybLs77BFLfQHh5QYYWGXZCkhRNp +Supplier#000350147|HzLxbMiJmejv2nM9vH +Supplier#000350272|Dbzm6q22MbZh6eUuE +Supplier#000350285|2Z78p4RQ NybT6A6rvb7Rs6EU,81thd3ymAphT +Supplier#000350289|m,FKqA z2t8HrbaLYwk0dcV +Supplier#000350346|hf26MoxVQCFVlr,1MyoACdUhgauA7bdJk1QH +Supplier#000350373|KgCiRlpv4iSZPgpEkF9ix3l9CJyh +Supplier#000350375|ljHCxMP8zZbLqyYgq vpmnHiMQVE0 u1r0D +Supplier#000350403|8qnZtGGgQ MPYKuXJHk6QusKA21Cw +Supplier#000350406|XfTij9YxM2uf1ctte8q,4CfBBDqsd549kx +Supplier#000350424|p40qNED28a4,0H56,LREQpc +Supplier#000350452|r5gBLts3adZxCebPS9KGqix9HJ7H4 +Supplier#000350498|6OJ6RFrIGxHSVCtU3UkuY +Supplier#000350569|0uwomV,BRYzqsWf0Z,y3AXPcsp +Supplier#000350628|pkbpRQwpGdmqXT,NdJ03XeCDNLp7 +Supplier#000350711|zjV05VpAfNJTUCq +Supplier#000350744|Go4j,n9K D d6p76TjJfejNAagnlX8p +Supplier#000350832|7fX61yUzP5Yur,IQ6xaHUy9XY7EIJZYI +Supplier#000350949|oq,xHiOFjiQ 3dGWNY +Supplier#000350975|4Ux7ue7hlb5811ZhoNeYip6gRhQq, +Supplier#000351040|SE0h6GVN2tNIe99yWqSmDc81P6 +Supplier#000351041|aMHqVfP yUv8lNBMnF +Supplier#000351045|tThh4rg0KlmirH +Supplier#000351107|x,i4,wPCn1j2cqyulNebDj +Supplier#000351120|sAvH3Ezwqp8oLr0Ltf +Supplier#000351142|wlVNVr2DQfg mAbwY99ZjxUmmsNnrnra1 +Supplier#000351291|Uevet0q2H7M5VGYq52 l +Supplier#000351320|Vo2CfGat kpcuCMlybFPQ AWLGZG8LgPqlUG +Supplier#000351322|Yu2NgB7fF41 +Supplier#000351354|C1nDXaAERanWsxlb1EO3wSNoJZmgmM1p1yb +Supplier#000351377|Hevk lfbl0ukBVT37bA TKD8uXoQ4JpmGwS7M +Supplier#000351413|DswGwrfZl1dZ3cMQH5Cm,3 +Supplier#000351434|uoxPsqExF 4R1FrbdtaV2WKWfVFSAjydAZY +Supplier#000351461|qy6YZ0rS,vE +Supplier#000351599|1O8TlvTde97GJvPYBXpTcktWArH +Supplier#000351609|HRJh6HErCqqoxeE +Supplier#000351624|m8YhOVQtcLxTVLphqiSYiAM32cuQhIdZbM +Supplier#000351649|8Uj1kXc,e dJx +Supplier#000351682|mrq8av65kCRaI7aZ2YBIm5oEgSUAOxSvZBOIh +Supplier#000351718|dTzbCjJYVcptbCgkNjNwsA2FWLpUcttbsRA +Supplier#000351797|5 qBBfHU9N2 +Supplier#000351839|HxeXtfCMaO7 +Supplier#000351892|bnKYUW3Nw4w7BVXM ,K,Y5 +Supplier#000351893|ATjjnmHKagTEDNQ +Supplier#000351894|JBO 2C2,GfgO8TC 0cf7NXCqAeWbMN,4LNi +Supplier#000351945|CsSqQFRYmyopvdYwJ4Lx3uiEnlmhMr4 +Supplier#000351979|6L7FlpCEpD7ED,CC27aTi6 +Supplier#000352059|9xpMFyth i7Q AO6GTFgaq,8JLmK3Wqg1 +Supplier#000352095|YN j5n,2 nmxd +Supplier#000352126|SRBBX9AkBZeyEB1PdpAcOKX0LUvKg9K4wEbyFW +Supplier#000352136|w1Z35c8Zkl4Oo7Rteb1eK13Gma +Supplier#000352187|O8L1wNan8H0GhX7BwQ4BhE30 +Supplier#000352288|c6OZEsfvsF9pggvBaW0BsiuMX3S,8 ZZh +Supplier#000352317|QSoISUPLuLc8jDut9eSDwNl YPK2mik +Supplier#000352361|x1f1,p2pgtzN5vWG2xExfK5 tN8TuLfEdDXxu +Supplier#000352393|eHce6BwNBVpjfqwJcJDaatgXbA5p5YbTb,iFSc8f +Supplier#000352412|Fuq0,SDFE57 +Supplier#000352438| FzBDfC,vA4xpVPjhY2kIY9DkKu +Supplier#000352452|699R0HbQqav +Supplier#000352513|vLXAJuXxRKLfi +Supplier#000352576|iV6E3skOlwq7YnYLVANtGjF3hc kroJ0 +Supplier#000352632|LbchNHkAm0yKrzF1xwa,cf0xwk +Supplier#000352724|9BtxzneczDddgvMtRXo6N60k2dUPCirJsO +Supplier#000352739|2K02Q1z0fzUzHoVx57 +Supplier#000352840|gLmiMbyslbYd +Supplier#000352871|thSr0 n8glyq 5,9oQtfx6pHzld,Ouk88sB +Supplier#000352890|wIG5RutWpeQeTdWNU,EU +Supplier#000352901|0URhvuNQAakYqgn +Supplier#000352939|fIffZQYMAlAl PImy2KWz +Supplier#000352968|H1VBcGzhgYSJLNXyIAr +Supplier#000352969|BgQgRNtsiZgQiMt8Yw8XfWl6wjAU +Supplier#000353012|kV4G3JxImAF3OdKMJ8rg +Supplier#000353112|1jWviSk1dZ8SendBPL,fZ74JMNgaYShIZhuv9y +Supplier#000353122|67uNh9tp1tlAR3qgz5OEOnKRB6AliMMK +Supplier#000353159|CKx5morww5eaSzrouvFBX,yKw2H7gB0 +Supplier#000353176|sYXVts1Gu dJ9PNb06Ato5obTboKxOJtTwxNv +Supplier#000353225|FD kykSOw8ER2kw +Supplier#000353254| XTev8BFcTuZ36zgudZhqf54JJVhX +Supplier#000353318|oN4yfvs9nYNepM9x0UoarKRyeiUvlzMMZFy,10c5 +Supplier#000353372|rctgavrEyCkZOIWHLNGW LjvE3jSYszSI4VM2q +Supplier#000353379|opoa7kXKcSrp92Q MRM6RNhCeTw +Supplier#000353386|cXGtYIPeZZWpRB8CBhpiwMNtGG +Supplier#000353449|8wdupscNGc5CwaZAhTUUm2iE +Supplier#000353477|jWhLin IO4TtC3DjKnMd868 +Supplier#000353509|MPbiAF,gva74YCoNX2l 0UDU +Supplier#000353519|OIMdRCuQVr2dVMSYYS +Supplier#000353604|UEqT567MvyK21q4GdQ7coOrCsluhRSofQ +Supplier#000353613|RJ7uvMFx0vNHD93W48vnsl72KzcgkkkDh +Supplier#000353692|2dXleXD4QzoMtl6CyhYJqjr9tEc6xmbhyyd +Supplier#000353836|N1sPTmErHiLR6gi0wmT3YCIs3zeph +Supplier#000354031|5ciG4EZxQ2O69JSpIpp +Supplier#000354042|VKihdS6AiTjcLeny4Lhzp8UBajRcAG,g8hRJ,Ah +Supplier#000354056|kEEu5JhyaPmQuKVeweabJmMBFK 8G +Supplier#000354103|EolPuxUXr13c ljOiqi4 +Supplier#000354147|O5pQMkV2gXOlxHpNTzCV2eo1Gu7 +Supplier#000354164|vvz0npTzDiMmLBppiG gf5Gzf36H6x35GA +Supplier#000354185|NadPK NbJRdXcqq6LmXm2FNV3gWWc4GN6d +Supplier#000354225|,EdBkE9dc,DKwhuvKWI8M7Ozm +Supplier#000354306|kG2JabCX015,kIvpZ3yTxeU1U7MkrwNCIFCa +Supplier#000354307|pK3A4DniUvOaW6YLnksA +Supplier#000354389|DU BE2gs hgxRRTIDpC +Supplier#000354432|ksy2lmOUydwQsU8LTA3Colri +Supplier#000354438|hHFuHC,ftEPKaj0B4 +Supplier#000354439|K2dSug7c2OLB7W3Bijaq8NVf73A3 +Supplier#000354589|x425QjBOyX67isoOF5oG4gGT2Fj +Supplier#000354666|oqSn4UwMon1cSNFqNQViFL +Supplier#000354674|uYfnpC8qwDbgeKmmCU7by +Supplier#000354691|G9 ri1xDN4snRIc9k5wsg5KjI0dfMpbOxfh5M5 +Supplier#000354720|rd490KIwLc7KcvnLaF92YaKwRkcE3f5SwR53ewK +Supplier#000354778|T2y2DhiyVLIiH +Supplier#000354836|Xy3TiA eGZs +Supplier#000355057|FTpCSHfKZcK93EKHVPV4U2wuPHQqM +Supplier#000355153|3VSHa53KdewRjZTH5hfOWeJgJa +Supplier#000355224|LNYy4 qhVN WoOdOW4okc4PSH +Supplier#000355226|qQPBdLqQXeel6L9QBLeRSqDZt1vBDF5nsicgWLl, +Supplier#000355268|naJwmcczVFFZoKQ +Supplier#000355296|31cG8WfEw5ztmL,roIqNc5H34X +Supplier#000355310|XcWuvt 5dNGyEMajwgkPdclVOJnWirlH +Supplier#000355387|ucbvjg2TPvmXpCRtASdB5Md04gwjvk5SXVD +Supplier#000355399|lnf,H6DTrjxCEO,khcRkg9pgzokf +Supplier#000355446|VwqJIt0WPSdNQOFLbkMjOiqGWPc265sUPGO6 +Supplier#000355455|Rps88U79rxjeTTugyQPFCKRmpNuh21U +Supplier#000355536|,WzVZuuvO48yVeJ25rIep +Supplier#000355571|5gUkgyNI6vQ1 +Supplier#000355718|QPs0HA RhFi71iRlSw +Supplier#000355784|HWsB9PR0TgjPVDA6 +Supplier#000355975|d7 Qhxbwu9zqLkE7NcR9twWmTBmbA +Supplier#000356119|pa62941lw52g +Supplier#000356129|7cNt 5dbC9MKnKe6b15VObaSWcX +Supplier#000356168|ZeDd6x8O0Am +Supplier#000356227|KnudpFJIyxIvVmzhJurmow8xadk +Supplier#000356237|gZjoCyH1AxV +Supplier#000356391|nXHvV1PwjrWIZdxqDghuX1 B6q4W,TNX3M +Supplier#000356394|TRPrTVvTlj1w3DnoqfKnD8qTRZLgnnIp +Supplier#000356550|oc2,iTs2pCX6JiwPTwak39D2ljx +Supplier#000356606|DzwVPW9IWLEccffz5ecuhDj7r,,OOrsNDs3sxnrl +Supplier#000356634|uwJGzNNj2Lke0sJL8NZWCOrw FhfB1bO +Supplier#000356722|q0F6NDii1NjLsFKnKgAPUH6fA8USDxTDWIPAUJ8 +Supplier#000356822|t2Hg8WxVsm1Wye3eaTPwbE68uP8E8yJlaGbZV +Supplier#000356984|wFExF3kr4GcTJw +Supplier#000357116|qHZRw B2a6 4tMRjVq9QV37VXCPmk0qJhQxzRP1J +Supplier#000357131|6UumWJjCadmOIouKk7 Hnxp,, +Supplier#000357242|IbXQ6LCCf,jOWIuU4vOLaX0BwhHT0v,zMCx +Supplier#000357245|22cjbpNEXrT,N1lhR SaF0CI8 +Supplier#000357279|3nF2PB,b2Cf FrKt0j7arksg253SX +Supplier#000357536|Cwap92QUmKo1nHC3nGhNi,Ph0ygmN96D +Supplier#000357548|H0FRuqAtizzqdn +Supplier#000357573|TMrjWNy8 HdnE,4axc7BAqqDGn7YL1XKp1v +Supplier#000357584|Wrrjfm22aS gSsG5SvODLlVOGsdEtdGf8MzTM +Supplier#000357591|cK1QuzSfrSmY7 kB6,AqIrtuI1Cp3qnLnVNt +Supplier#000357594|5pOuKMk2a2ikrDpzSGt7XqaG4tfFYyp +Supplier#000357599|4FMAVXWwjmDVuJuqtRT0ZrBAhSqW +Supplier#000357751| fuJc3h9805GrUqyDgiwYV4er1xmJdMETq75i +Supplier#000357818|Jm1P87sQflRtEqMBTv +Supplier#000357921|2Do RuoXZcec0zA Y9 +Supplier#000358092|acQmT1dfFOBG ZopWPioonr9TPipMOU,sELRThZl +Supplier#000358113|ZvzGYkhySTajP80GFkub3tk58qfoZH7hSfMjFK +Supplier#000358116|UEDaokEhVgTATKSv7 R,c I6iLOXCwv8YhrSX,c +Supplier#000358131|qsKHtMHdvg, +Supplier#000358252|F6TKrPWuRUGeMQiaD6jBFDsMyfTWmCTWI6TyA +Supplier#000358272|3qRRylhO9N,bfS +Supplier#000358274|sdsPJrngsd1fSdSc4c p4zysJJeCP8rCcFLAa8n +Supplier#000358304|RL05KvlsbdeugZSF OnZSkzDtkPWk +Supplier#000358463|5UosCZwRcg +Supplier#000358561|14Q,GTXN77K glg9 +Supplier#000358570|JmVRRAVAme,CVZerOslHIl7,Prco +Supplier#000358651|pEyC67QAWU7T +Supplier#000358982|7x8TtSQM40Z1UXBHg +Supplier#000359028|ZQ1D0nM5Xf1OCfIr +Supplier#000359138|vS2QEI3V3EFNz +Supplier#000359255|WSRULAerUEOKktClenO50XQ +Supplier#000359386|vmw3 aPO kCr8zeCXaWGT,OS,a +Supplier#000359437|sRVoDW5K6DfrYT0 +Supplier#000359457|DNz87kT5KoWZ7MRCGw +Supplier#000359650|6IdOGxsZjmTbOOnhjR6 Ky0 +Supplier#000359728|6Mx5G3S BTYDQpqlxmlSD6ed8d3 +Supplier#000359747|wZEIyJctF3zbSp2 +Supplier#000359788|4biS 4jo5NcBSKyBweM8sLjpS1Zojnq +Supplier#000359814|35KeynwpIb2g1 +Supplier#000359831|Hv,anFetD7g7 +Supplier#000360078|9N0zVVkOy0tcSkOZXDFGnn Da8NPAzcvq +Supplier#000360143|DURQRTCo UysjZ14HG gKO2dhfyysTX +Supplier#000360205|zIM3VsUMOQ +Supplier#000360292|ReBBYi562z95obWUSKwDRH, +Supplier#000360309|78cYPdmEWLCn +Supplier#000360313| iuN44UuLyKgs0F80NYp9F,lKC2l0UJ4yl5 +Supplier#000360356|uRpmuR1NudSF4 eHNl +Supplier#000360397|VjYiXmzVymYnqZFEKb0Hgidc jQ +Supplier#000360415|fsn 1mFS7QH +Supplier#000360429|LUF78VXzjm6hg6GoqXpSi +Supplier#000360495|AxzQ6Tc94qBWkcRlCK +Supplier#000360506|PXfbbVlI9S +Supplier#000360523|gOtNSdx,KAnFEhur,QjIIGA7RLDWT2uucQP +Supplier#000360560|d655yQ5xYzo +Supplier#000360615|5iUC4QGXO8G0s52NzRZx +Supplier#000360641|AHHUs9CM8PsnvsHzo7MIeI0aY0Q ,fPOqw0Jt +Supplier#000360773|jGAOh7KdG2Lse ya8xen3ICtAHWCA +Supplier#000360814|l,HZ9 WHoM jh,dDKDpygWQqVBu +Supplier#000360821|s1 0v,yTOcGDG6d5f6IlTp 0RWK8ofOh +Supplier#000360859|NJs727k3aNax +Supplier#000360909|OjuZ7K9z9CgEkJX +Supplier#000361101|WxfLpN1mZbldLax9d,Uenom5u21qTe +Supplier#000361156|55nG89UTUNemEb0dVbnNfjzTBerjZc9khvYD5 +Supplier#000361224|,37WYKnGWITlCViWbyMu +Supplier#000361301|G0bPOw6vS93l +Supplier#000361310|PU35tE564sSeRqSd,UnGdb8Yi7ITINkMf6 +Supplier#000361461|p1XxR7XipaACCXTGte8SCWleh6ypxdH +Supplier#000361486|kXw8J8a23Z +Supplier#000361520|zO ZIFauObOO0SU5gBQt hbgBqjN0yWp9qXTgTrR +Supplier#000361522|UDQXawF7FJe +Supplier#000361539|t fANLBMri4I +Supplier#000361713|1rZRf94E2JXQ,ISThKogKF, +Supplier#000361860|RCH0Yomn62f0StlbfvnkNZb +Supplier#000362037|NUhNNFxuWM13qdVlRhOmTRkkPtnoM5PfUQF +Supplier#000362178|pgjaRm4S6bv7oCRfhpJuuX,IEb3 OJ +Supplier#000362189|t4xL9,NqXzsb6xfU5BtXMS +Supplier#000362225|UGBJjwMiMO1T +Supplier#000362258|YT1wxUvkgykW5SGbr +Supplier#000362301|fyv7jFWpFki040c +Supplier#000362362|J4tO1Jf2oKytMQghJ2gpaB4W3sn2Pd +Supplier#000362379|5UVoxRnBhnYo2PeSsEv +Supplier#000362391|u8llwC0 w1a8ugeEqNn7qnPTSwvL,EFyxnBjilEG +Supplier#000362392|L3cRX5KJoVQ1fpPNLFUemX +Supplier#000362405|FjxrhFxO7iM1cH,xIAaI4lnQSi3w1vWJ +Supplier#000362491|DdZ3N5FI6MNG60q7gmrhk5 +Supplier#000362555|SVj0L0 7Kxd10Gs3 +Supplier#000362576|6TEFrJGcrus +Supplier#000362582|4iUNng9SwRATvMKSx6HKmkC +Supplier#000362655|B4rhC2Gmsg +Supplier#000362656|DU5,3z,vBITtFrpBkeIKlH5cdatZFxbNrSsW +Supplier#000362724|4,RPsTMIjYVB6r4qij Er2a5XIW3fJA8Sh +Supplier#000362730|kg6pxHTBU5eVNirxFnS 3fxC8wJR82ctKrz03rb +Supplier#000362739|Znk0wKvABOPsP0q3hWddg9X64bhxsV +Supplier#000362796|QuKqPQraGqkQk1YGn06CILb +Supplier#000363059|XmPPrEvPxbXyzwu9UHmSmvlCF8AtX,nu +Supplier#000363109|rqUdSKpbwyrcki +Supplier#000363169|aldR3,XJBgtBhPG +Supplier#000363301|qYiycSjZw2Zojbx995hvWtB +Supplier#000363381|7oAT5EAwveI +Supplier#000363405|9gPk5IUXAtsoo +Supplier#000363421|DArgKlcSX3UB62 Yfil 1F +Supplier#000363427|4DLx,4THDV2uVwmIgCqt +Supplier#000363551|uthu3qThW2RUOkt4gsa4im01iWQr26EDKtE3Xq8 +Supplier#000363596|Wq4Tg uVgPuJOH5Zj +Supplier#000363692|OQbT8iRsIq4GQNltn2IpqQt82d3PiY +Supplier#000363712|kSp0uKyd8XjzwsgCSnDJK5gkHzkjdV3JX +Supplier#000363752|LBS x8cy6pG,wX +Supplier#000363792|O2S8bWQ,J3VzG,FRKA8U +Supplier#000363799|oHR6fCM,4h6v,7S3l2MjGNCqNX K7I8Aevc +Supplier#000363852|hnKGdKg9zp3 +Supplier#000363855|cpfZdiZxXjThGYXw9CLD76MTQ8a, eNoX +Supplier#000363866|XqGS,U8OGRe C2D,Ir 7Va9GLwHiQ +Supplier#000364074|6ISjkDKA9J3g,mo6UhXX,mHZU +Supplier#000364084|ZZf,sg7yZAF8vL8Sys0Qh68882 +Supplier#000364110|TNphCHw0db6ta15gwwwPuQR +Supplier#000364181|heG9NgULQa +Supplier#000364225|igpQRtn4W,77KSLQB +Supplier#000364291|lRrFRXPpS1H,uvXVSD4Lh6Q9iV23nj4QLw9X0,R +Supplier#000364352|tb16kcpEvTxlpKZQdzBgmW4FW6 +Supplier#000364366|VtMcKbbBi3L,1C8eGeY1yISoRBJpeY4Zu +Supplier#000364434|sKD84yF13T0YbFy +Supplier#000364435|DZLmppJeoE8XU2qjetYLl7p5rnjk6A8 +Supplier#000364605|pxfgH17bstknyEhpEo,NRcvxzN1C8Kai61ZD2 +Supplier#000364824|iTpVNrCcy7VN4vAgFl 34naPW9mLc,sqaHJaiD +Supplier#000364884|d2r0O cxWOuHGajV IoquMSDf +Supplier#000364908|ndR,pFbMPdYuHvsDv +Supplier#000364920|7ODwAe07VtUpb57gmXQwraVVQoFa01 +Supplier#000364955|6RKZbyYD6bO5 +Supplier#000364981|S2Vdl2A56Sz 3zvmCQZ +Supplier#000365020|Xt3z6j8IzvkRuwpPQb5xSMzD +Supplier#000365037|GPLQsG6rDFFtRAtB0E1,M,uT72IWj2YHJz0Cb +Supplier#000365038| qjATlrDdcR0xOfD8Cy +Supplier#000365067|zBY1r5HoowNqy +Supplier#000365153|C6KMnRvO86OIMbN2jOHNfq +Supplier#000365179|8G vm1LUnYxkNZfcaHgMGYFXlynHRKU3pY3aU +Supplier#000365180|B2ZUd,DtjNBvSclEva1BipZFWp0zCirbXp +Supplier#000365351|PEschYUDTrGZdZRi299dfzTzrGLInHy +Supplier#000365360|8qXliwgMF0b +Supplier#000365362|EPdgKfvZtbFOX4IoV XJXkv1B BP9 +Supplier#000365572|36e4DljphH +Supplier#000365582|zePT0teqr8YN94mKxBDsHWCtFWRHx9OmdbMYfvwR +Supplier#000365596| PKmiB,kDjrX8x3ZwQOO4 BFMD,bQ +Supplier#000365620|7XcowHkZIOVoH9Jl94DOIjKou4gyKNyNE +Supplier#000365717|iGmaJGy19xc +Supplier#000365746|V9Lmy8DX,4rqfaQPoClkIHCq +Supplier#000365944|gmgpOcI4kIh7TvNhH,8hx72ehKh +Supplier#000365963|4qLjFfCddFJFWMO 3jHYwxe0XBl1BvhNg +Supplier#000366128|wgg13H9tkZF1tOIStxbz, +Supplier#000366156|NyGKX6QXjdYl +Supplier#000366238|gucELRyvaiuWUx1J +Supplier#000366260|Fq9eGh Tagyd +Supplier#000366364|365CXuYVFV +Supplier#000366395|PNidNHsv21fHDgQI7 +Supplier#000366522|QX2GC,mSjpCMSJK,t8UYGdZuBaBUzf1Hj +Supplier#000366531|IscCmPr6Re9j +Supplier#000366600|wi7ghcTdFuxpxywSGPL9RfHrPupR0kE1t +Supplier#000366701|eI2qvhWOXKKfiDaslyfp9zJ1,6liCu +Supplier#000366772|FJW0bcJp5yfnMATfoe670t0FO +Supplier#000366787|NUDRMLvvK3WYaTH1Ic8jac40ePNkcOIuIDE9kt, +Supplier#000366789|Nsai6nrcRbkdAU4ycdqIblp +Supplier#000366810|OM6Trh10XFsKdENhdDnA1TP,vzjAmNXROu8Ynw4j +Supplier#000366836|nsL8nubDEX1 +Supplier#000366872|pLY36F1KeWqUvvqwkvM5mG0o7yIRpN8zLJzbjpfc +Supplier#000366889|QyLwJ1KdHsMITav7yYOzKA9 y +Supplier#000366907|tkFg4InzpObnEnWw36KZd93v1hWCN0iNZiJXO +Supplier#000367095|,rXHK ysO3KzTbW45NMImWgmHHHjSaqLZl2E0qjq +Supplier#000367117|1,WLpukyo2anIsU +Supplier#000367234|h6JK7zIMN4tfNsNuOWdAXqckJAxS9UOLkke +Supplier#000367245|mH1H ZjCLAzfLz +Supplier#000367281|g9Q4Ym9kw,,QAa,iT7oRxJeYThktB +Supplier#000367306|A iPM3q7Uqj4c8 +Supplier#000367424|3QS0Ib3d50b1ZAm +Supplier#000367439|Gob4bUqX9R9xYpIDvbFX81yLDvKmQwzXiC +Supplier#000367453|5U6LkCVSxA4D3zykUed uYI2f9LEOi4NxpVgLz +Supplier#000367557|zi5y9cXbrlhvGsmqnww5sW jroMS +Supplier#000367606|jWgwQEG7YGtUoH,E +Supplier#000367609|BKJAEuUlmOWxFgLhOQgDY7Gwu4BTsmOlmiWIY +Supplier#000367663|qA10U57awQ7zc,fnCqTs 7plzKakS6JafhDE8 +Supplier#000367678|oJ9GYtyQ6fZfIlc6XXtoRY9 +Supplier#000367727|T ALysQSr5dnNz +Supplier#000367740|mtsQEylx4i6XvexPfvAB9OPLZz4BU7QmRXAt9DBe +Supplier#000367749|0GEk6Zprbpss1a8Odj107cctlAM2H 7VHcF9uj +Supplier#000367750|wdP VG67bqUWERrbN +Supplier#000367775|TcYCXO54UwSqhxEHRAAwZy,SK0F +Supplier#000367784|T3Iziwgneuw1KYdtqQ7fHkRriXnQmf4IxqQ1z299 +Supplier#000367787|zzvrSmMOWkFR +Supplier#000367952|a1fWl4mU RICk +Supplier#000367960|4rLUvcXlrT5CNuk4XPXx54aNH +Supplier#000368007|RWCnciWkTfzks,gcmoB4KNF3W7hQq086wq6 +Supplier#000368029|mhA5toCLZ OuSgt7vUpT,qq7pV9AGEa +Supplier#000368034|py4DsYd ,u4hf07O, +Supplier#000368039|Ln2iKzyJHEbJQMwghOi0F4Ul9 +Supplier#000368262|dqfr7arFG2B 1ioZDMqAzZZxqLfsx +Supplier#000368265|kMZYc6paKDea5iUmr29W3Gus +Supplier#000368276|hAiumM4WxHeW +Supplier#000368418|xcrb52XQiWSFEihiTTXT7S7YYnerr +Supplier#000368472|Lp9xmLYbHq0,5V9DLAU +Supplier#000368500|mRPuiDPI8t9LnUr18BcSRK4LcnGNJ GOrZWgsw +Supplier#000368515|PAXoVuNKfIq4Ne2JfAZSTG4CjmCu,UHXM0 +Supplier#000368628|UsFtI0qaS8vbPde3n +Supplier#000368668|kHUFcvlBkmGIkvW +Supplier#000368671|h9,jZcfsGNA3s4JnbOzffD +Supplier#000368704|nUK0fPA0ydsma9udkdYSJkROFSjX +Supplier#000368740|Z9I,C9eoGapOEA5HQR4z51gtgOE +Supplier#000368868|OPkbaglS9 eFLxqgXxMnQ1o8gpB8u7zZp VN +Supplier#000369002|aa i86pCl3O0MrxZob 2ma +Supplier#000369234|ehoeroGi7t +Supplier#000369374|atzh37S,QRN,yluIxspHwboie +Supplier#000369379|TAUEYCjbj6, +Supplier#000369464|JeI7JYOSRE3JIV87DnXN5NEwbYpwXGD,2y +Supplier#000369517|rCKrIZ3tQgkMYy5S9zbxUhQXvihJbw,fYzBOW +Supplier#000369522|SR2IBeTn9,5BJtRNqjST8Qvc3KhVV6Qr7uoOLv +Supplier#000369607|2VTel5ii2U4kbf7iQ1 yTggtzSF0qnQ4VAKfv +Supplier#000369620|OuHidE1evDmcksuaCTVtNOQDiIQMaz 4fBzhmV, +Supplier#000369655|Vtzsb855BSWE60MNHJjilCPcWgQ5d 17 R +Supplier#000369659|Yg3hOFKsL2 +Supplier#000369679| qz25hJkyxtV4LXClmqQmy6wqMQAk G dtrQjs +Supplier#000369693|rOh8YSPoW88IzPzFsy +Supplier#000369793|iO,kTyKQZhCJljd3 +Supplier#000370010|uAjNKDeoQ3fNDI +Supplier#000370162|t9CWzHGBAW4FshgPxFXl1fo4J7JgT,DR0K +Supplier#000370217|eC960Jdq6fkdb +Supplier#000370287|Eg 8a5ngFfb2tJx +Supplier#000370302|23Dr7MkRMCux8 +Supplier#000370335|Ex7rRX8nlb7vJKmf +Supplier#000370362|2TOtM0Z2ybYcFUpCvNUPjCcWO6pAIZCV RP +Supplier#000370468|7V1TOHJ4YZZA2AodK1cCkfks7Lv37th +Supplier#000370475|X,qlGuZdA6N5gUnvZuLWvUHmUzMIDTQlNcckF2 +Supplier#000370622|IQBRsCSxh82S +Supplier#000370770|X2fhB4Ed6TQfuDCBTfvQcPq4 +Supplier#000370786|k7eRIzRAPUYnp0yXpy7mX8aslz +Supplier#000370837|D i2YU4kr MyjQ0SRgvJ +Supplier#000370852|MT4Pu4boKYq95Q pmFqKPzxC2nQ5uphv0eI86 +Supplier#000370859|5slRew31Tu9b1t88Ym +Supplier#000370961| IWJxshY2HJIMDXKaxnTiLb7DgpQvRS +Supplier#000371001|1,zn3PEWFw1t nFy81BjV +Supplier#000371029|C3xsGdjZHd2nAstDa4nYgc47PYGLtGEXEskf +Supplier#000371035|ngNhkCMB aLhL2jCZ7kTBFeWHD0n8RrSBid1NB +Supplier#000371105|4GsqTuuPvEJLLdzh8b0OjkGFNxMw +Supplier#000371165|9DKA,XloZgHAGFIwzSszeMc1NtYk0 +Supplier#000371221|1mnvhv4nG3KOsSKRtnJaV +Supplier#000371258|XU2XXATZuXDTYjHAJ wKkr7djUboppQpru +Supplier#000371288|FD,Gg8jgkhI0h4u6C +Supplier#000371320|yFUvjJJgwuCLt9FfD9BrLOAF,S4WJ9NuWr1 +Supplier#000371404|mzrYT uyecksa0ZHalRsjCHL,pM5kdzSISmg +Supplier#000371429|IEd635N4GktE +Supplier#000371441|B8r5zsZLoAMStAa Vv7QePfe4chqrU8 +Supplier#000371449|FEuL4Fxf1nPbgk70ngBnqM8i, +Supplier#000371545|0ERg7dhbYqe jqSdae8t,qsZpGbOptQ8 +Supplier#000371705|jgn7FZ3VGO8XGsf TVmRtAt1YSvo0bpZoxhvZF +Supplier#000371764|xvP3jxY2ego6EGo ZbRHX +Supplier#000372164|TUJDKR2yQMtss,wm7Q6Q +Supplier#000372433|KYWW2F7h0arZOfcAYdqc0pB8Ue4Mp1 +Supplier#000372472|x,Jp49XE32IzLVdZqLA1mmXeyEMga2qasWk5wOw5 +Supplier#000372551|L0d0JDr1pS1n,6cswQD,WutWXYkAWy +Supplier#000372626|ze7WXk6,B761l4fSLkGU9QJpwhk +Supplier#000372629|kJH8w78Soc,2QPk7pzmY8WoDIOii +Supplier#000372686|2BOqUkgczJ,mjCrmRWcJcFYT6 +Supplier#000372744|nU bFSwm661of2JngKj +Supplier#000372892|swQwb,Or3s +Supplier#000372970|n6eyOKGE vJ7vZhV +Supplier#000372987|,644re59j8zLUQqIMZi15zJzvNRZkv +Supplier#000373091|opjUP9qJkPQskCJW1wG +Supplier#000373136|aubivhkt2vl,SwZmC +Supplier#000373161|7dTLyALWShxHkJSr0TXAC3VnlVAcfU5rVO5 +Supplier#000373226|BX2mU7oVvcVKhr +Supplier#000373269|Cnb2RCMBSQAFMCtCqCzT6K04h +Supplier#000373297|b b58il8w8qWc +Supplier#000373390|YwS,XkLLbDDBwLD,A02r9ZUEHpcMRLM +Supplier#000373450|Bq0q2pU9zWqe0XcoD7vxDZZcOrzMJm5RdnlbaSP3 +Supplier#000373453|NktGNK10yNC8 +Supplier#000373512|3V7JDnYtuDnUvdpKVgOCjuMv7YubUD4 +Supplier#000373541|opWb8J17rPA2miWbX0qe dXHhgde +Supplier#000373552|Hn21lWerl36N +Supplier#000373618|MZqBB35qSOf1AxrC2D0fzJ5jI 965 +Supplier#000373634|e,YxjBtAtYg 0p qLLzzO4Uo45R +Supplier#000373663|8MpYJxfSUZa dqdVskwuW1Pq +Supplier#000373750|e3UJlr1,7doPeSGC tkQaGVxg0MrS +Supplier#000373772|lwxJkDoOw5GW7mElMaYLfBxnfFc0TFS4,WoGVl +Supplier#000373814|PXcUn0LTSJuO8omcU4Ls +Supplier#000373816|pRNFBSMHfLO8tTF3x +Supplier#000373865|gnLeegbHZ4YwZ2GNe3Kq +Supplier#000373882|5UtOeJMVJIR4odXK,zIszaS71DKNCSvzVZNvaZ2 +Supplier#000373890|aGoV1kmKAbhUeQzSDxqL9FPS5QLDA67,LO5v +Supplier#000373942|rjYaeQSUDvd0QQJ1R9NUaS9Sx D +Supplier#000374013|An9hA02gOUA4,R1Fn +Supplier#000374079|9z5A1JjfkNgX40xLkIhrx4Cl7a5j +Supplier#000374085|nn0APT4T2yhnbkx0UdPUVDSG,jtrw +Supplier#000374115|OP8Cs5WzZEaPLbH3ck056NCQltNkyPt9f1yt +Supplier#000374137|,HRlW8exgDMH74aPf,10Lwh8a2NKJ2PLW52iKhh +Supplier#000374174|vU5SbxnYILn2JeQej +Supplier#000374187| FqkIePyBcoy +Supplier#000374242|PFBDjhES2cobTy50nOea,l +Supplier#000374260|AMHoYNHjmxc6ofEWd215fbmIiQ +Supplier#000374262|P75RtVA7W pMR6xtzCpf ShygaPo2qPB +Supplier#000374267|v93tquANA2BJd7iky7B +Supplier#000374272|JTzPBG75XPPpz dx2gdV +Supplier#000374281|fy5iH,GyG19Pe +Supplier#000374339|2R5p4yjNdpsUClOHk +Supplier#000374403|kyCsZCQCid2LKrlc9Ko +Supplier#000374407|8pP0 LdOZivyyWEekhGiRelgx8bJS7kQIZUsh +Supplier#000374451|zgLL6cA9hIvi8GNRNKds60k2uhAAiMN +Supplier#000374469|O QUPWXl 07GM080fNP39k3 +Supplier#000374503|Wl0UzU509fOqbS43hFnRnq +Supplier#000374530|w7vqs6yIxKaSlXYby9hMNrJueb5 +Supplier#000374632|,yZ4goKl5bnucgCzVUWdVpZAJfM8CRbaW +Supplier#000374646|,Hmvy9r03o7dq YTFHt fBNYNIloN0 +Supplier#000374664|eiTeR6dXuYOwkk892Mmg2G +Supplier#000374704|,hwe,qXm,UP6jyI7vz7a +Supplier#000374746|yFMocrzqqZOagOayL5rpbDe5ptnq4Hou +Supplier#000374791|Bh2tNFUr0CWn5vzLfeXS1Ub1DI7GpfktRavsNe +Supplier#000374941|K1jLVvpLkxgwQ +Supplier#000375073|zAmtLKIvmHXKBy725SIgwNar +Supplier#000375078|iGaOt61ITCNzYQrUr2USp8HJzQEi7V +Supplier#000375152|9CJH 5WG4uKrDFwYpewrUt4CGw096xIqA +Supplier#000375159|DOGBynk3VsDyqYgapW4L2Se9u4HmtaUzdMy +Supplier#000375196|rTZscjnl5fQwrI1O1ak15ZvlkMXCZpat7Ica +Supplier#000375199|TULfasULOMzh,IgWz +Supplier#000375226|NSe38i,sR8rALRjv1RghCq2rubRqneuza +Supplier#000375275|M2LNRA5FB9gbvR6O +Supplier#000375411|Lsv0HyrT2QzF7M7gtRjPo3,199BflDyrHNy65OM +Supplier#000375420|knHWRcUx,Q5INtZdXtJ1tYHThGN0C1 +Supplier#000375447|7FTt8DAV9wELMTbGVujG3b3s9cka5AoCXnJ +Supplier#000375478|lFsZVNEMoAupmn +Supplier#000375563|qsSAqpB53enfCOciWN56M3L0slNIc9FWWb +Supplier#000375584|H83aB6EvYoSpx0YGSf4kGECzCm +Supplier#000375654|svgLarbNV6XLnfS +Supplier#000375684|joix,cGJxZ +Supplier#000375795|XTY1JjRRz6l8KoNuIS0Zww7 +Supplier#000375880|8LRjPcLpfaDS,OiZfE9lbexKnqr +Supplier#000375893|qi4yqhwZjDnB +Supplier#000375934|WNrtjTbqJmKdAuQFyYZM9FpjdMX9SxDLS +Supplier#000375961| KjwFsMNwaW8nQE5nGfXEtW3 +Supplier#000376013|aFARUNuzrJJWE26 +Supplier#000376029|rmPRWzaLIT, A3Smdl1feGzDBNTGL cx +Supplier#000376031|M31MGYl7dlGMm3CkzfiyQy5N LnZd +Supplier#000376049|7itPARU,QNx,Nw2 W7KN1jH +Supplier#000376085|eGHg eSc4ttXWdVqu4UxG6g6iDJaKCdvtFjgSIAO +Supplier#000376146|L2AQodZQiu46zrBAmgtcqGrMm C rfBZ +Supplier#000376152|01RxbEZ0L Gf5hYdBqT +Supplier#000376178|ocJtt4KPdD +Supplier#000376313|Q1PJI7zdxwi92IMXWkeE8u9sMCK9WmOpRW7mLL +Supplier#000376314|cILYPiqJ17oW +Supplier#000376320|irqBD FQA,pmZKEcoIuQ2AH +Supplier#000376399|5AjJ,N6LnpxD5qHdd +Supplier#000376409|iVH04wo,hk7AWr0aieWBYf3 aRM +Supplier#000376435|r12wBKG6OAvkawf0XbR62NUT,BM5eTv +Supplier#000376525|ny39B nS,jhrfADCw2 +Supplier#000376630|cCwwIZwmkPrDK cg wo5NLfgCjJmrr9WqHHvn i +Supplier#000376636|mp4fpvnub4t +Supplier#000376638|XR5dTbYxYQq29wMpvoAKa3v22AZSCqatjttQHgw +Supplier#000376641|3feRx AkkBRynFy +Supplier#000376654|rBrgnuK90sJDhZGzAv9K3GZ5Bi +Supplier#000376873|W6,JZFLPZ tMmhJVooOfL7Q9Z +Supplier#000376946|z7CHBJ7LkdnsWD4QDmiorGZRWgVZ5 +Supplier#000376980|fpVTg6oWJh +Supplier#000377081|bv7jua3ejJopyeUlBUFoIa3X +Supplier#000377114|eNaY,KYbro3S3zbPfKa cJ Y,ykvR2S +Supplier#000377117|EdRnKuJWtv9cGKIlI2S2ZJfD4hASW +Supplier#000377145|5h654q0KLmRtm8o +Supplier#000377177|yx eiqg pLs2k0aUueeorXiY,FpWUUHui +Supplier#000377189|gtkgDEFgHlvxJcqE9sd4CRCrASbUZTrdrrcX6 +Supplier#000377242|fWQw3mCmMAUfSE3ycLG +Supplier#000377365|YEUGjSYVMIskcPgzCbfV7j2PD,BE7UTy0 +Supplier#000377508|4BrNTgsHH3lQJaeaZTg O1exfVnVF +Supplier#000377536|Ul9jqHxkVpZur yINyIc +Supplier#000377540|6kcVmFyMSbXr4OzjR7iTmJ7bvFmupxqSi +Supplier#000377570|FHnhqO2jB7FJ3jqRgkT27ulhj6Got +Supplier#000377689|OeKVGbdo9e2 +Supplier#000377744|,3vPD8Eg9KUnzMDHgq0I9Kl +Supplier#000377747|I24b7s9 iFPJGiM72mqx747gdLDaK17s +Supplier#000377781|J RwVoCDr9hBZ6TM +Supplier#000377786|mSO6,bSeul3pYgRtl0FvWR4ZfIwOIRZXk +Supplier#000378000|QRgBshmMk4ymgGFhiej5yXwcWaZUvjpvPLvIyyDd +Supplier#000378023|ApRTpYWUlwQlNxoC33GghsGKorFeUgqZDU +Supplier#000378039|8TCWulX4AW2E0Q5bonWzqVdTVEVB +Supplier#000378078|CJllQbM4YRLOgKwq57CrNFvQWyJvftIuQkgewkDf +Supplier#000378086|KvBOZOOr2xSp0l6v77tR +Supplier#000378088|MNCl qH55FbRhqu61F47at5R +Supplier#000378128|,g5KfZOMflGd9yy3uBxPAhuYzDotp 3WJOpM5 +Supplier#000378171|UYmVK2BoA6J Gt3sRUtC2483uSBrV607 +Supplier#000378408|Gg4WGCEUr Pex0rpPWmAbxZRETDX +Supplier#000378591|J9ohxBmztqsb3K6bSNGIKaVU7RcpqTXK,fr +Supplier#000378602|GNyij5AGJFIrnR8TrJ3YpcsntuQVHRPcOee +Supplier#000378679|Im91INvF,7Sj0Mv,ky8ZSGRJOEyUqlfHVXaCIR +Supplier#000378682|ZuUB1oNQ1eIs2k5DW1fhKDh42TiwOLgkZAAT +Supplier#000378734|Lxzm4ugRb,eWyl0eqI6q581,nzdO0 +Supplier#000378744|nLlk6iTgt7heHWlm,mqJWcob +Supplier#000378768|1E7A2deBUxuYs sUbjMDoUoAF, 4I08xedX +Supplier#000378809|BEKAMczn4Kb8t4 0egYdX1fJgSl6ItLupsJQMtCz +Supplier#000378833|7szuAt2JHV668JQS,Uf +Supplier#000378951|qlfWbjSZSMd8Kt Jok3YAoGuNq77jmUIHMP009m +Supplier#000378966|nsQbQ89H,RI4ixfgAhhIWHg +Supplier#000378983|FpjFMNdVcsl,Ub +Supplier#000379042|HH cf,QjUJBj7acpXH4PnSFRZhYO +Supplier#000379114|8ghCpJs znFCP +Supplier#000379121|1qwvfHviSqem2qI,msugvvqEFHw5HxW7c +Supplier#000379286|oaq2EPTr SHhBn1W,L4szozvCmw45fEjcyXb +Supplier#000379324|hg0xnBgL9seDow5P,E +Supplier#000379369|BydONohUDBU43oYEiWfRA,vrgzNOJA2myyCEW +Supplier#000379383|t0sDIBwZimU8ythSnfLyPO3lFyOsr0BBwE +Supplier#000379427|MdTBFApFP7BjzFmFeKt0zTMt1 +Supplier#000379485|leOE7O,UaN0hy4ebSw2 +Supplier#000379690|pQeXAo9FrHNo5pjgqKlw6ynlI +Supplier#000379721|enyzHXT0lDjCEsBtYfPIFDkbPXr4o96 +Supplier#000379726|xrChQICJ9AXE,MtYbx3PhJd0856OjLaJ2 +Supplier#000379729|8hhiSjYEPuP7xRlxlbPvoe0d,i21RKrF1 +Supplier#000379845|SIRsaYr5AvYLLR3oJ90yHEPUlLeLM3,BMLZ +Supplier#000379877|PzbxYdJIyk421lDbW52CNlSx +Supplier#000379909|BB4eTOWRqSM,igJ3,FHUwBmc2jAq3VGnVUmwfx +Supplier#000379915|XCDhIsqh3N3pUhUmoyRaFfCZSKk4Pr0,zr6vES6 +Supplier#000379916|bEcLdVzg8HbN8QHZ +Supplier#000379982|47tmb16HRQpyzQHxNv7 w5e +Supplier#000379990|L2G1 alweOculcBFKGqMiC +Supplier#000380020|VT1HPKRa mfyJuPOX +Supplier#000380252|2Ef4,Vg COfpl r0JoJyf9pt3ycaRr9 +Supplier#000380367|1KPRiBpEiWO32Rtj +Supplier#000380385|9eqDrupVYgpWTNNsaR3iqCM4LM2C1R04bPwkv85 +Supplier#000380392|o4vp8RbRIs8gzLb, +Supplier#000380399|uChOdUmmnkP,nL,vOTITg6qw +Supplier#000380437|PqE8Q0Z3QMeogAAXkbLqsfDJx aM9sHIde92krOO +Supplier#000380488|tBkkBAr1Jy5sP +Supplier#000380622|HXHWOFPTo3RbeNXCeaGDdS3bu8TozFbkXpOaZm +Supplier#000380706|fmZeRqH2nmIds4 +Supplier#000380778|J1ArML,Eo15p +Supplier#000380782|99R1Rl9sMuWDmm9sPmjdm0Admi20M7Ukn0l8OMI +Supplier#000380869|RII9b5q 4 m ,PGDF xE 3SzKw4afNSpCtFX +Supplier#000380898|ZS5f2n,Hf9i7QKVv0dABm +Supplier#000380967|Sa8STuEv2lLO552x6pT6eiZ73f +Supplier#000380981|JAOfWAcTPOTNLh3Rm0AIqsL0h3mRMtWFoRdn8L +Supplier#000381016|J3tBRmo,oHNnlHm1Vowk,9JH55b0dzh +Supplier#000381025|cBcIdKT27o6L17yX00tzjlSJk7rV4 +Supplier#000381049|dZfO0 9oCi8OSRyo1kSSyWTFuXvsch +Supplier#000381095|K7WfM,KKJcwzy +Supplier#000381122|FmV,1HOjQR +Supplier#000381149|t,91tdkSBqwor8k6D1fMZC +Supplier#000381181|8,zRxkjn ,VJkzBsgGp6c +Supplier#000381228|,hyU6y5xpKh8S +Supplier#000381288|CpcXssfss3r +Supplier#000381330|E1kO N4ZfvTEsRqxGWug +Supplier#000381344|c6HaEMde2RJI2z1dePtpaHZX d +Supplier#000381586|Wl3trhMNoFD1GXkmqT69p +Supplier#000381608|TzzxZp7 1u8SjOH6QP mZDzIwUPsFr +Supplier#000381788|LnI,0i0TzqMLk83hq +Supplier#000381823|xPpJGPvKZBFwc +Supplier#000381866|LkH01kbYSs +Supplier#000381928|rn efHi3LVmpyLwCzJoFJIaF3QlJz +Supplier#000381987|tQpAPS1DzabD0AhM4R7eQXt9JZwioTsI +Supplier#000381990|9aB7157OQMjo91CDQc6u7pnlJDv6NHg +Supplier#000382005|2pnU7qHJIEJ +Supplier#000382006|3QOMzeLLxIfdaaYCrrZRzfMl4yXGRLXDB +Supplier#000382113|ofmXykKwPlYp +Supplier#000382124|Qjv,CEojShXuJ3 +Supplier#000382148|2adWsze6X,Ofq7,SuJYNoEIUKU +Supplier#000382220|dwpItSNo4Y7aobbcb7QozNd +Supplier#000382222|V9fH17AP,7Z ,89QG7Loox9N4KNt +Supplier#000382317|pBH8xdOmTNC6 GIv95mba3ZxjtyMIYAKiH, +Supplier#000382350|tB2Tse83O0amzVtMsi +Supplier#000382474|S YKXtCujnuwbdX6A,8E +Supplier#000382501|uYGPKHRu4Q,cK2H3iZU26rSi +Supplier#000382567|ju75fPMCI8SzcE4md +Supplier#000382579|v8kSoUS08BgGot26,7WN8EbJ4S0v +Supplier#000382590|unCLyUh7NcgIIlXR3amFNLTGwxtj7AzkK7xAV, +Supplier#000382653|rId,rbamEQLXaVXxxrh +Supplier#000382669|3lyQt246amZpfZPMoL,4 +Supplier#000382716|d96ifAntbpdErdgbRxmSgPqiYNmj0Lga7r +Supplier#000382749|3TsPwav3bJPpH0pj +Supplier#000382783|4wzGfBqUSR2AV6hCml1Ky,Ce7RbvDhoUx +Supplier#000382818|7bM5JPUtPHXAXo6Z,gg1FTgwmLbfN +Supplier#000382832|krN37FKyKO3 +Supplier#000382863|7ma8TqWQkCQX6uic +Supplier#000382931|9jpJrFsPQPj9lwxC +Supplier#000382970|DqjUxe7Tpf8dLukct9 +Supplier#000383084|dgh 4BiTJgvrr07hTez1yWpobnTy1Rai2 +Supplier#000383107|RDaMp4QJwZ,LPE5i,Iv +Supplier#000383112|WpUybDH6hUaQPQV7 +Supplier#000383150|YD06XtB4iehFgRGCOehRqUm7C5G +Supplier#000383211|4xQzzpFZVnkXJt1cG +Supplier#000383267|c wv,Tg3xGpW5wPghOPnDMS3GJnaH5IX +Supplier#000383425|heE,8P xy1Rmavh +Supplier#000383499|NDnNNFaot9jNoQ1E +Supplier#000383575|CDC08cFpDqgKoFC7 x6H38loA +Supplier#000383607|0cQRRy4 9UhQAvZ 39 +Supplier#000383629|P8K1hWQQ1vCo ysk W0VdSZqaBflNOIMQDBHKg2K +Supplier#000383655|pXGK,kf4Y3Boj pVqyucfiax +Supplier#000383679|iyJNXHxJqI,6iL5wpFzaaTejr62Z +Supplier#000383874|ZbN1JxDDymmwDsxlU8hBj88SucTYSu +Supplier#000383919|5 c1NF3oaou,FOczU1vlI5NG7v,UJV +Supplier#000383928|MrkTMc79ZXpt0bzHr +Supplier#000383941|x3Dc8WvOFGyo5 +Supplier#000383975|KAfX2GvZxqDbLygCq,qm4E +Supplier#000384002|h9zUnH3pX9xKpoiPD +Supplier#000384127|1p26bnHStuPdAcRb5i1yOkfOZWtwY1ZPhp,R7Ko7 +Supplier#000384128|DZ3A3I1OSUta8UGJvNeCxUDJs34pRrYDRKD42 +Supplier#000384170|jMJfv,Sm3sXV8HQIgKqqWi +Supplier#000384205|t5B060fyh6SlhQBvM6tKgAJt4V +Supplier#000384220|gdCakrhbZJPEd2aAJxfbCdfyqdO +Supplier#000384222|GqIvxeqVfe4OYOPNbJEVOKpvyQ0o +Supplier#000384299|rmi7cjAZzdI,R7zu +Supplier#000384354|QqybiBUOWj3jqV,YW1g4UoCHdQXUr +Supplier#000384457|bbRvsaLLbKcRUKU6390jE3c8aLo +Supplier#000384505|Y3jx4shOk4fsF NUeu5VUhq6OTWjvo +Supplier#000384557|l62DsQNe,kmC66E1q9O1B3 +Supplier#000384643|fGU9tYG99js7Re8gutANyzP +Supplier#000384690|LU98nHrtwuI1lhuxeODoYMG 2LidAKSs +Supplier#000384693|3oiNoZMGSY1j +Supplier#000384790|lH iik Qxb9rlVy7wbg52ptXrRoray +Supplier#000384792|POQOXLsYShVA9FZcB5YJXXN8H +Supplier#000384822|9XM9QycFprWH1oKtu,BeEKmCxXXU5B12QQo +Supplier#000384828|9MPURrBogbRmkHWnUXlOFOZF9 +Supplier#000384867|VyV9l3sCIuQmSftBSeiM 4IZFqAcJTx6S +Supplier#000384876|ovzqVMi8uj7IVjd stEj29VO4RWqEJHQpwwBO +Supplier#000384888|Xzfu7ULB8ncTMWk 5tCuLKw7b3YrDx8C +Supplier#000384890|NVOneg1k3fWNmZJD7qkUZeanu4Vx0kNsp8ne1 +Supplier#000384990|UCPvfQcqPIjgwcuxGoFAGSe +Supplier#000385127|kpFqqHcwOffn cu5yixRd2S9wTA jYdmqJuYJY8 +Supplier#000385150|B8Lc0SRyPkyjSINMIGmFLQ +Supplier#000385193|vyoR0DX7B9n34MVA5gvFIeFUPgWZ0i1fXc01g +Supplier#000385225|pM1tsVpkXa6DxiBdeEXaGhjIW0M9xQO +Supplier#000385249|RWNP80P1HwnN1gamei5Sq +Supplier#000385282|E1Pi6c6tsRkH7tFif +Supplier#000385419|I,s3Z25xOXYcNOXfCG43sqcp2hSPaBZyw +Supplier#000385430|ECJRI3uIc,NFMTym +Supplier#000385436|8wussyi9eVamzEoZhi18f1IC9Ttvvprhv0tY +Supplier#000385573|Clwvi0udAfhQ3PPIKqqjzYCAZKNl +Supplier#000385638|A VUfbhs4Nr6zrHBSHuRef,oTxsU +Supplier#000385665|eeprVpRBXKV4p +Supplier#000385804|ULIAnrX4lMYZq5mNQcMEaO0z +Supplier#000385837|JM8NQGoXu1zaQ3AnU +Supplier#000385891|e0PPXkpC4hxUF5jhLB4R +Supplier#000385913|OPBhbwnQFXhkN kTEFp8n2rgca,8 +Supplier#000385962|qntaiqlLATXi7T2 +Supplier#000385970|j6HJRarIZuYxUaBuD4aTO +Supplier#000385984|ec4u8d5CufZW9EKQWBLw +Supplier#000385993|KavOekuZYNLZbxMRkdh2zQs2QsFQ +Supplier#000385999|nRV GJJsqH9dNJlnBr2MW9VtQEi5j1Xi i +Supplier#000386089|E,nBwSFaCYVf,y +Supplier#000386121|2hqI4bMLcM +Supplier#000386182|sju74PE4C6f 0SZqzKQva2XqqB9tbo4f5kD9RSF +Supplier#000386213|4h3PqsDR5rXb +Supplier#000386240|E3CRq4WIaW8kQxW0WUSMkzRbgHYQy +Supplier#000386291|SKgKvWobnPGs1LNDbkcxuUU7 +Supplier#000386420|PPn6,95Lqy65n8v +Supplier#000386545|0fVJBMrXZDXPwLEfeKX2cb3 +Supplier#000386553|hu0km8Lc8w6aQc9y0Jr81NdfC7QaH +Supplier#000386565|x801MFRY9ZqiwiGY55t8PFw cNqd, +Supplier#000386610|Ydx0juTpjIeGYM2 +Supplier#000386746|YLdGiv9OGiei05HYPMdm3LboXHv +Supplier#000386756|gpX4X0PcgRjrIkoNfuABDy3F +Supplier#000386762|oG1pUnxC7rYpHrIo, +Supplier#000386797|JwZUFnG5fv6 +Supplier#000386823|XVOjoKnYCVVKAAjQjasPTJunfYmF7v1IN4l +Supplier#000386880|nEMbjG1CqU,TE +Supplier#000387005|jtTK6rRlj8vY6ff9SXH8EMR +Supplier#000387044|Y3js6olOhM1VQ,UUmqAHwMPHkhTQm7Ladv,w54 +Supplier#000387109|ifRojKCCby4MRhpB8h5wiTFm73eymiNupPry +Supplier#000387110|vG4RGROT65oPRLjuR +Supplier#000387257|lR0fqCVWCsNlvCW5Wkn,3wDS6 +Supplier#000387313|jxNcwD67CZ8RwVgTkD7RaI3 +Supplier#000387339|rImjOIROLvA z1buat 5InDBDJYEOTAKgh5 +Supplier#000387427|qfEjSCEgO74kxpBxTuWSRkdGAw1wTQ3EGx8k +Supplier#000387465|nv83ZkgAFDC7wt6kzLtIMUcUxpTmGPjpP5B2uy2 +Supplier#000387488|W2zg7RykzazDaD1Z5w +Supplier#000387502|cYYH50Bf2 fn7d91SB8jaiXkU0U7zFB +Supplier#000387610|gEMjjFjaiJRsO +Supplier#000387635|t,HnEzIcDfpydy5Au2hrN +Supplier#000387732|hmqggIGdS5L5iFB fAPEKcrwK +Supplier#000387828|f5fKjDeDxp3yrbeV +Supplier#000387880|7gtTwJxN9aafSOgTLKJzKef199GB6 zicm2sIsQh +Supplier#000388019|4 CyfkRK3ceqya +Supplier#000388036|pgdlHvOecQ +Supplier#000388250|OE8WBfzrtOIx3JQXxbwhuSYOpf +Supplier#000388290|v5Nm35q0WjV,0DHd +Supplier#000388306|0OfNua4ritbqx +Supplier#000388383|wbCabIq,Rfg +Supplier#000388396|0v6GhgtSOdoP DKFKUs +Supplier#000388431|qjpxxClTW8paQ7AHVZpGalEpPUzRPVJ9f daJ37C +Supplier#000388447|62uGoiDTr,7hsPOAKiGgL,c7p4dXANy0eA9GSK1 +Supplier#000388513|4bqOrN3iupJO +Supplier#000388516|SXhfODT6OMRU3l sucPmSUdT u +Supplier#000388602|JoO1tUmzt4TrgLHfJbHPykuVZ6MALIyX0eO +Supplier#000388723|VmIMiS,qZW +Supplier#000388915|IWpFKwbh0EWnBv5xlmmItIK38dG9BfV2MRGCFQ9 +Supplier#000388925|tnb0ENkYDIqSv0vtcgLWge +Supplier#000388987|zq KxzyT3jK,VPw,iTLE4P2gz4iUiazIR0 +Supplier#000389065|46WWoBSQrwHurvKzprEBC5jq9orD +Supplier#000389114|YGNPXhwTFbjDxsFFHu3EPtyNgsD +Supplier#000389122|YjhHpTHfRTLqjlIgg +Supplier#000389213|Fn3 wppVLrwL S9KSXlxmvj bsAeVF6PacxLnSG +Supplier#000389230|OSK7lqtBHAb QCz5hMzN5z,u +Supplier#000389362|nFCtkjGCqJOEsEgyQBzPyvQGN05KH +Supplier#000389366|G Fs2xw6LQ +Supplier#000389557|MvUdH n6RQIw +Supplier#000389629|dIS0WjI3AxutILam7mNYu +Supplier#000389746|dUwXww8fyO +Supplier#000389793|dS7FAv7QRoTg1SB9QUHVeaR6BILRTfkt +Supplier#000389829|8pG3D3mkTtrJHBLurmG25H9f6 +Supplier#000390036|t8JldmmL53KMWr +Supplier#000390048|kot4lJqu,5kNVcwzCQxwnuC7m +Supplier#000390069| GwOSJLjbT +Supplier#000390088|RLAZljA0KC6N32FU +Supplier#000390115|mhzeH93xgxIP0n +Supplier#000390134|3gnjBqiTZBP +Supplier#000390190|kV d5bDfoLg72LJZt1W72lA +Supplier#000390195|v5zoC,zTAvwUPDlcNFrkyq 0J7QPqnkMCC5 +Supplier#000390297|VfDS1ufGFSN4K1DUWjMvVRlFeJq8ihNczwLi +Supplier#000390337|wyg3209mHADKoFwHS58rtW +Supplier#000390352|qEm,bK6mkFMV5 +Supplier#000390441|bcT13Vy4byL +Supplier#000390541|2Itwy0KtoW8BADl J1EllsG49I uHGn2 +Supplier#000390586|FkwrO6bi5XejzCfT eCrMBR qH71041X +Supplier#000390704|b,xnyxGnuhYaAsZipxA3DgT N8wnNN +Supplier#000390734|mnq73OoDsfMo8NCu +Supplier#000390755| e6uMKTtQmvIuWNogXYxkkMqhWOddd3BZA +Supplier#000390776|XIKuL1ba5qrHlN04D4v +Supplier#000390814|Jzw8P,K5uBkoYSC,YXno +Supplier#000390935|EMfidfxQHNaiHq +Supplier#000390984|sGIgcxyHbUrYttJMsJBXc46L +Supplier#000390986|ZWaaWtjeZGTZnux6H3HKO0PXqn8ZZn +Supplier#000391074|lpIC2uyo2abc6VSp +Supplier#000391266|gfMu9w9ukKAjiUDsIkRrwgGTmsNVCYNon,YYPLm +Supplier#000391322|ltS4T9HV,56,vdk7FNaAPzjYPEsArfEN47liofWP +Supplier#000391328|DITbZYynqzP9ttxDZZiZvYOoGVLoQ0 +Supplier#000391441|7Tv8ddh8GNTkv8s9WAqUhJftRoA2cVj +Supplier#000391473|6vC2H0WnfzB8ajqqHpatZuvxmit0jQCidtiW +Supplier#000391644|pXIwGOAh1tVNvNUdnQWWTh +Supplier#000391684|3yBBU0TTg8gsX7bT7xhjFFrhtYVxTcB31 +Supplier#000391693|JrzRdsE4jMwwxE7v6wuEifa09KlQ09 +Supplier#000391696|cgLj0g3I 35BLNr4 wSJARv8OLqU XxKxyYF49b +Supplier#000391715|YwY2h9mpDw +Supplier#000391889|zarYekfMD FrKqebg8ugvqf9oJSRJyAr +Supplier#000391903|o4cSWsQi2qu1gwgsiPf585oHXpPGC +Supplier#000392091|gxycqvBaYi513GX +Supplier#000392095|ePV 7orEhLFulmFN1Eyfmhj4iM +Supplier#000392139|xulvb,631i +Supplier#000392226|MAWj0OFX5NRtc,SM2OyPFYs +Supplier#000392352|VmevfrXzOgWTg ksWmf,7Wmeq4x +Supplier#000392497|C2edmD0iyEAtzCEfTKhiDgpPNXzwltKtZ +Supplier#000392578|R1m9u3d1TCXzc4DLONZA +Supplier#000392585|IUhSh4Y8Zbj1uxGSYCiyb0EY85rHqO +Supplier#000392596|,T0aPpjRKMjLvtc9C4Zlzp3IvGVHnLslAkwn +Supplier#000392631|WBiOiQUIrrA5JObMfWb +Supplier#000392700|KffftWZKHcjlSHWnJYR2bz +Supplier#000392703|LWSTOI IDsbw2o7QSeUU4RDL azgRwvq1 +Supplier#000392714|LcqgV4cegGua5ZL3P3ZZ11rr +Supplier#000392854|Livbxk,Q6gy18cQRPbf3znyF +Supplier#000392911|iDR1TV1eMJB9qr,isfLRjGdCR +Supplier#000392917|W4,r09BChQ5RkQAZG8QmCljXrpMiVT,gFnkvY +Supplier#000392974|cilajCPrrZ9 +Supplier#000393130|sc5sMvN6o5eUQuYF9 +Supplier#000393143|rc2pZt6efwOG10YyuoVhtnVM +Supplier#000393327|TBxNLxzGn 2YZJ62Bdmsoh,bdGgHk7yug +Supplier#000393398|yh7vZVSeKsBuZFSG2oYRYqCPKiGosyDafkcXF +Supplier#000393433|4hMuK9mWrUDeSYkplyN1UrvmZYo +Supplier#000393452|wsGoUedbU,Vt0J,oLMXa55nJuoBUJw5K +Supplier#000393504|D nbplWlrT WgrkRkaW3YTCkAKCuSaf +Supplier#000393521|vZpPNtFGhwU +Supplier#000393539|TDGmYjb,tfCdNUbvomMO +Supplier#000393542|9nkot4XbbtiVaH zriAb5s0bI15hwARp, XvOv +Supplier#000393583|ocSqgjkjkZKcWs5Pld +Supplier#000393668|O8ZBR7UU7Pd86 +Supplier#000393673|oZQi6QwhsZI18 +Supplier#000393728|7tfanN8Bw2C7c,YXh 7tjvz8JelMv8h YjfMb, +Supplier#000393736|lEKxkVOeCEIpyyYZUfTTM04pW01EHNki9 +Supplier#000393880|2A9ImOusJFKVs +Supplier#000393913|vFvJ5DZdYPkFXxTuxf +Supplier#000394026|9 LzeFoABgFvJ +Supplier#000394033|5BeXbR6PsQ XNSxrn,z3 +Supplier#000394072|jHo8UNBqc9DF0vr4FXCH,rbFJ7tz +Supplier#000394102|20n6nCX927cPb273 +Supplier#000394112|uLQErkie 84nIzwfu4t17Tv1UzJbqTnwLY +Supplier#000394201|knw IGybKdHE00xxA4G9Ygo1eXvcbcyun,fQml +Supplier#000394216|Yy3,NMEhXcIwM,DQw6z3T8p3S4 +Supplier#000394289|Ey1duXVLfJK49TI4PYmNLIP2IFPrx +Supplier#000394344|W0ZhgmC PuX4rW, +Supplier#000394353|2Lf9SFhi7tkDrg TEV7n wbXvtflNP +Supplier#000394365|5TRyxSI1U8 +Supplier#000394424|vITEq uMGIZwke2lZtIZL0vq +Supplier#000394545|GFRaHPs1qmYcT +Supplier#000394546|Co6hoRuGzNWxPKSD2XbKbSm4Dd,Qfg +Supplier#000394632|CDdXeJWAwB2XB9UuBwg +Supplier#000394729|8ciyQIRKmZmz8M7EUWXSMLvmzHv2KDoKgToZYb +Supplier#000394816|yS5CsJ,XQtg62A3puU9N8utk56lk70UqKG1 +Supplier#000394821|OkFehr0Xcx RjycY +Supplier#000394828|zbRdmV1jfez3qej47ssHW96qwsCo +Supplier#000394885|pqwc6fGPjZiO9J7ObVfE0mOTgX +Supplier#000394921|d2ICVcsvzghQzloBTWP57fbqgW +Supplier#000395034|GiFpWonhMfZ,h7kmvT74amM3N6 +Supplier#000395130|yi1mv1vFHf7zU8qcXQ0nQAjlux +Supplier#000395236|YBfvCbJ,WY5dVqm2a1GPA2QXcqwVcVz6oolv0yxP +Supplier#000395332|22qGkX8e1jTJfDAD4yWGwZILuC4UUb +Supplier#000395337|5bmjvheTzhoRF1AUCLrpVtXY830ki3 +Supplier#000395433|PqOi6Bq6YO +Supplier#000395470|z2ofEX96N4 +Supplier#000395490|YcRf8pW5zUjoM +Supplier#000395593|BVxixLoA89iW8iI +Supplier#000395640|wqJ3qh2Ph8lf,SY2mm0V +Supplier#000395657|jX4Fh79US03f7,lfd3 +Supplier#000395659|w0wA,gpCTgHuqM3R,NwAbevL7CV2neyTKZ5,PBgx +Supplier#000395688|dtu0Igt8Zne9XuYZXs48Ehhf9XTK +Supplier#000395699|,3pRxQqBKi +Supplier#000395787|jN8Lb,Rije2WCYHtB0,FaAQR8 +Supplier#000395793|vRm6geG0rQ8 +Supplier#000395807|aIH44LD8TInO6 LY3 +Supplier#000396006|G3dVD8A0WcHQnlsXKkCLjpVUBpsamNxgCgqi3AQ0 +Supplier#000396072|2K6kn3BEPwax7 +Supplier#000396161|X5j00TiZlezdf +Supplier#000396225|NTqf24nQtv,rXCjYDrLuhFwF01rYBrzv4ck3dWKI +Supplier#000396245|z61mM RvWct2NEsLbAjwQKO9RpRmP9GRCskt39BD +Supplier#000396437|2ix74Fj6Qix mbR 8jkvcBJ +Supplier#000396461|IJBXDr,Ou3UlmCg8hhsdsCDVVfBg0X +Supplier#000396529|R 4HYuvEA0v07O +Supplier#000396551|92dzHcDLOgO9aC8K +Supplier#000396592|GTOA8QQCs1hPDy3CzQcYDnu4RjTf3h +Supplier#000396725|EMt4EztqCj V5mjWJoGenE +Supplier#000396727|bNlkWIzJ qXPyZyk0YGm2RvxLMFC +Supplier#000396749|UuCALJM zB8RYe843jjiiTbK9gmGo6RgwvVVcEh +Supplier#000396832|k7wN9hEwfIbcR54pD +Supplier#000396913|9CY IjdQK5n4SYjiw +Supplier#000397023|,tAi0ifCIgzAwrVw5DaeSRZ 8qVVRCWm3E7DKTL +Supplier#000397026|5wyO zcnEqjQya Mqr1dTnk7NXpbSvWs9kjTPcZ +Supplier#000397032|LeW0VApy295mGnU3PRSTwPvrkJHm118BUKaWkbZ +Supplier#000397107|9p1S2mgMe,83YD, +Supplier#000397172|6ujqpNI4KaOZk,fT +Supplier#000397205|Q lu7WHXOK +Supplier#000397380|Mv5IRpLsZUbHEMZvYgWwKu5zGiAdPatOWqlWO7fk +Supplier#000397396|Lv,OFohJCWfOoDXQCV8iPSOqzm17HldDPCNMlG +Supplier#000397472|pRy58PKU2D9mZai4ZFV, fiF80cSsou9Ow3v +Supplier#000397528|WTrOJZI2x5p3TgD9L5LC2 +Supplier#000397888|LZ57kPr Oihr4A qolI2ppX9fDmNjX6ulcL +Supplier#000397987|u3H6ECf4rr13wSw +Supplier#000398013|zQ2Cb9iXpVjM1BNGvXqw1r 44hKPTbKMDx +Supplier#000398053|mXzX9O9X2,JPP2tWq3ZgMujPn +Supplier#000398072|GAaXYA1K031A9YQCrrudqVKQM6DkUpNPInsGL03 +Supplier#000398080|SrNAoYVNvGI +Supplier#000398089|U,hXr3byqOCI64Y3qQZ0QbbWPbWiRvmaP +Supplier#000398100|uF vaO1dlEbgmg,uVN3ugtrKR35 +Supplier#000398146|3qB8ySf3u0uQUBjP4budkftJJmLz0FUVKIT53k3 +Supplier#000398219|7cWtg3 EyyHmVgUjNtc8pH3y1osZ +Supplier#000398282|G0bgLc,uWBvWB6fTDfpgLGSpltU4JXzJf8D +Supplier#000398338|hnfpj9pCh9Pw +Supplier#000398387|vzZBHqYpQKZ +Supplier#000398418|BUD93WOJjoPX5FAgcD0hEwEVWVE +Supplier#000398470|B6DmwyCsYlMZhBW8LWW19ct8yPoy +Supplier#000398486|srU8Pl4oxcN3rSgoA0zagnnJKY +Supplier#000398577|hV TMIH2A0BuEC,,iAY4 Dsd85qyq3m +Supplier#000398609|MDT1TOer0SfCeKguRxBy aF3P2y,QHx +Supplier#000398710|5NsUjSCzQjx8Wtl9ZUj +Supplier#000398791|l1PneAibufAlZBYgEoX5XPTGPE +Supplier#000398865|HmpRhrxlXzv6,SUWL3stElCwOYJ +Supplier#000398947|Yxj enWW4wPmylLaooMCHWLToSibVysP8HrSt3 +Supplier#000398998|NCCY3B30LFS7Muzj58R ufF42Qm6MlgDn +Supplier#000399013|dwsYDY9e8w5PoYe2Km,qULrGOLN5 +Supplier#000399030|FIh4cEcK7Son Wgn2SabWXcWgZfl6 +Supplier#000399157|jC0DH8ahUZVWW8MaxNOxte +Supplier#000399168|dbCoyMcNnIXPS,0VYLt5SojBbjGAI +Supplier#000399182|RJ,7N3hFMhjfzi8An6 ,YSr4x1 +Supplier#000399196|H2U7aA5MkuLQLBvpkRzXuIBd +Supplier#000399214|kkORARtsuqx9 5M7x2oHCj8Y +Supplier#000399259|NkCQhnZ4FmOWm04BpO6Vn +Supplier#000399265|5aZXRNnaC5iqIkK3eixCdaF +Supplier#000399293|ayUT5u,VcxIBPn +Supplier#000399338|hRsGDPYK F2ViLo0m6QNi2YkmMNyDoHn49,FD +Supplier#000399361|xeBmxQ3MgQT3D36zOhdywNTZcsfoOmRLZyeLidg +Supplier#000399478|TN6VJFOtetSpGQ1iZjpSCqac +Supplier#000399506|930u,0RXuvAV9XTF2VfYz jjsHwAThOFI2zh25Ct +Supplier#000399608|CghQlzux7o7JvDvaM6y3E3pvMxEcIFJLGk3 +Supplier#000399653|pMYGq,iRFfyZOo +Supplier#000399701|3jqpHVj195cNkS3yT9OQpqwDc +Supplier#000399823|FHWCnnYeJS +Supplier#000399838|l,fn2XG1DCaJXi008,7 +Supplier#000399848|E3B5u159dfOD4b4XPSJ +Supplier#000399962|YIEM6o, 2p,F,,OoPPEF8yCIdk2QD6Ov +Supplier#000399986|Ya irtkWoDQxW1FQZOSwKjUOwYuJes5v3hvvtpF +Supplier#000400028|rvb9k5oGDR8U1nPBi4 +Supplier#000400041|0VAfUsb GIN3UEbong7BPIGqWAHd +Supplier#000400278|JCTHMjaa92hbobOF9VULWo,lSvvGUKu +Supplier#000400296|OM2K5Rjz25fkL6xnRkVP ZgU04Avp +Supplier#000400343|W8cFcWnWprb,7SQdgw +Supplier#000400371|hruTc6GcZ2LV8NrgcY3cvmsVyPMnGx5ntM49Kp +Supplier#000400407|QnuuVhn5Vot xmYyUI9BjxyP1k8ml +Supplier#000400408|xBNpHw2 SDETfpniaBqCQdnrU7fNI02XvzSczfo +Supplier#000400544|aFcsQ2pm00yv9 +Supplier#000400591|T5FLaweKYKUnaYY9XbK8IPwDvDpO38VCeKuqKiE4 +Supplier#000400727|D CItl14OReyV r63M7WgpCxPw pLCn 3bnS64m +Supplier#000400728|1EM9cRxcbrFzc7p7uDNLn Xx0qo +Supplier#000400754|OkNmQyaQUNti TLYxG1nIc eVcT747 +Supplier#000400772|XnqHMPR726nxdtnsiR9ThFAfyCs,FGn +Supplier#000400815|02fmgQNo5,11gNv8NYb5xtRd91o1pksoaTRE +Supplier#000400851|gsIQQwvpLG EyRN ok5hiX0HbgRoGj7c +Supplier#000400862|qS4P noOECGk5PiOeT +Supplier#000400916|1aPqkwRNRdWE6 LADHfpE3niEHoZ k1Q5W +Supplier#000400951|jeTATGjPfzPctMejdiGttQyVhJV5iAPl2gN +Supplier#000401099|oUMP1GkkrbE,0RNj +Supplier#000401100|52w47zY1TJvibbXE9 +Supplier#000401206|oET,mOcVPyQKUvP0O0RAE +Supplier#000401233| Nark9UBJF92ECQvSN8YkGaBgyRRY +Supplier#000401250|q51Yk8tQCzgHR6NR7y +Supplier#000401267|AN5uOs,D2zgtJqarI5uLULsIIwBHsVJoR46v l +Supplier#000401283|OA4y 1,yzKu4mTv,B +Supplier#000401317| hiYXj56a2j8r3E7dz92GI7XpqHGdWDsud +Supplier#000401355|SBRYD 9ofb, +Supplier#000401396|GL9N,4Kexb4rE 3424Vce6XTzag6 +Supplier#000401549|kZTg1MTOxVf7415K1avqZje2HrsxXWsMLNiCm7Bg +Supplier#000401628|qP3yKnUTop6Wv5nknq2Aukz +Supplier#000401735|pudpxKWDxzQ, +Supplier#000401764|M5Cvr 2uiamkQeTMgOj,KQUVDU +Supplier#000401774|kJdDSkTZGxjh +Supplier#000401775|JsRGyvZNCEAnVWhEt8 +Supplier#000401927|f0qkL 9STZh +Supplier#000401964|16Yy6m1Up5v3gdizF5O +Supplier#000401981|PAMcT,I2OyN2WeatInOkE8 nZfa +Supplier#000401998|En1ehCRE9U1M5emcGbceJXXdxvrL0n6 +Supplier#000402022|ks1DqPZNi4vida ooPC +Supplier#000402073|ENNMF38khVo3fXo +Supplier#000402172|9Df0Pu1V7H7brmgOX2VLJsKsrmHvLocTRi +Supplier#000402200|e3tTpD6UkTWAXvR4 +Supplier#000402227|8N3TkIYwEdrgHfhQ5dKKf3SmlY3OiBKmkvi Ruqu +Supplier#000402304|f ahb UOI8PJhoRg9uoxfdgkxvy4Hdh +Supplier#000402340|0TnVXZ4Qj5G0HnqjiAB2e4F9yBZV5muqc3I0sZ +Supplier#000402427|u81KVNRoihWCqYOS Iq5DNFREfXlvjrN,VbdHk5N +Supplier#000402433|p1e QrYiuVJT35FneA,m +Supplier#000402533|wxfermiCeUP44KHtfdnWM5pmb9uUmA8 +Supplier#000402590|tY6OXIaTDhVm5R5D +Supplier#000402634|4JLGwvvh74DhA2iH7Va 1ZU H4keOfR6SOk +Supplier#000402667|Haj0T1vvEm4JabF +Supplier#000402747|AxM3q0ME2luA5BGJ2P4vNYRZDzErkjYdX +Supplier#000402843|CkRH8CvuIUaM0zlBDKutXigKPLR +Supplier#000402901|zRy 1z yXz4IHq +Supplier#000402990|O1xRLjswrXzYD rc +Supplier#000402995|qxOn1YTbrih4sfxSjCjtEchT9gSeHnmWfOw0lHrN +Supplier#000403003|kqMkOvzRWjNaxOaXEobvxbJSBaql0OKw9RsP +Supplier#000403015|ngFdKTDKjH1Ao3QLp GbxCD u +Supplier#000403053|fcu MQswPwWDQQX5uhpupMNVZDw +Supplier#000403083|f19vV82AU7omjHx31sdUcLoTSglqHTnk6S +Supplier#000403142|gxONDs4ySQA3YjaHZR6ZyncgWirUvp +Supplier#000403184|KxUdTiPdZ9rSsuMYTvJOi5CTSWKvvOBozak +Supplier#000403243|lLN3S4fQ55TI6vZkdW +Supplier#000403269|8pJbh8C84uzzrMf,vmWYsoGhIXYvnYMo6c +Supplier#000403310|ca5kjf0UmZ4zJjIHfY nvvAfFzs +Supplier#000403334|RWuEvQyRV6OtR99RebZU91GSR +Supplier#000403398|N8,rs70uxUi Ld4CW7dU8PTtAKI1Ob9 +Supplier#000403426|01H5c63YEErQVu8RmzHK4 7UsIhgMrHXrEzgjx +Supplier#000403681|TJSO8c6SLIwqYkVa1XbmV +Supplier#000403736|awEtfP1XYNgC1vCLGG +Supplier#000403747|u1UTIrbN6Swgnzm4 +Supplier#000403828|6uAHKPu5 ALR +Supplier#000403922|Y,1mLmf3CE5OQ3eU2U iRHB0m36bOTFQ +Supplier#000404040|uQKipbd3gaJoTUXioC64 +Supplier#000404044|eP,VN0MGczd,hUngzKy316iQozzFyg xvl,T +Supplier#000404106|Swv61MdJYfVyzOpAABWMi +Supplier#000404172|1snXRlW,JBhnRl03NnSE1br6cKfH9G +Supplier#000404244|sNapNL17wKI5ulppw +Supplier#000404316|QROZe2S3 gcgEMIywt88phaYAqdwkw9ExmD gZsO +Supplier#000404343|t,0z40ynp7bYxNmt2 +Supplier#000404344|jwSrSjf4dS9Wgk8z9rD1G9DMulV4CVmsQ +Supplier#000404354|LyPMh1jktNrmhYLc +Supplier#000404370|3cItmVlS5jPss8E4LjCD +Supplier#000404380|VuPlpl5x9MDN,eV +Supplier#000404382|gTZiOiuEZYrb +Supplier#000404400|5D6RthR76G56,RkQQl +Supplier#000404403|OI7umuteX,MSwUwmDlCv IoxjiPCw bMl +Supplier#000404425|SEmlKDbcLgKn1fv1W +Supplier#000404476|dXYFGxjeLwj2DXn00RQMzEYSN0iIu6Bek5F +Supplier#000404535|KT2pGYq45Z +Supplier#000404554|rdNSQZr ycPjK +Supplier#000404611|C3wehqtm4SP76Bn +Supplier#000404633|3K8twJ2Zw3f5X47Y +Supplier#000404674|sUTpcw1PHy,4UhBeef RcypD6fu 9i4e09K +Supplier#000404725| n4aFr591VvHLT1L4NWw7w0rO4WOwUrdt +Supplier#000404755|uXvXT7v2EnMnTbqAVE0Bxon,QbPFljGv +Supplier#000404867|KIysJWLpw9LH0essJFpz,6 +Supplier#000405053|guJazU3bNlJtIRFgRqt5gNu +Supplier#000405140|bGO1YdmiEAt08h +Supplier#000405315|yjmOwkcBBcmQISGqZkAPJ9iCR +Supplier#000405344|m1mYpYLYxXFy6zWL +Supplier#000405375|Bu4hwmf,JyZ +Supplier#000405444|lXLeickOmz9CYYTF QZn66LBRG1iwVyZTt +Supplier#000405486|hKHJ44zLB3QR7nST9hgpW4 +Supplier#000405500|O6enFiluUSYvFcmIUIHnmcfa +Supplier#000405540|s,DEd4JGbNp3f6qMf4rrr +Supplier#000405617|k6aOyTT2xDzgEYYtmVt7,Du60UWuoAK55 0OV +Supplier#000405626|R92NyhbDj12wBr9S3DrK85hQ,QVqoYe +Supplier#000405636|K2tbHhvVSO5nHww3DzxE11GiGr6puP78Chp7q3V +Supplier#000405648|CvYgBh9U4L,MMVkC50CndQ183lK +Supplier#000405707|uLwyBEDr8M5fhhtpEh5ytIft +Supplier#000405759|NtPWMVrVeka9UjoZik3 +Supplier#000405762|aJelnhSYc8cyX95T7RSR0ShB3GG4sUmyH +Supplier#000405844|20Tt2AlitO7hyVfeEYXkx6kw +Supplier#000405897|zC8s5vz9rvny6FiiHEqJw +Supplier#000405905|pCd,UddAg7PvJqjxT Dfv5TIDrzEzCComQ2AKo98 +Supplier#000405936|ZvmYMhUBvBDMbvRtNod +Supplier#000406040|4ZC OzUuXmp5rmAaTCyzkmfmpciIovId4s +Supplier#000406164|Lw0FAwFpHVVME7yE,OH75Wfa99PAry7JwCWTIL +Supplier#000406363|LToZPWMwUGk +Supplier#000406450|czlC rKccmicXAtG7ZxmJuj0 +Supplier#000406458|hPao jFB07YMIDKUGqeIPA, +Supplier#000406462|xNPKiTx0gdj +Supplier#000406508|UPYErutdGEN6Sriiqm inm +Supplier#000406514|eJDVLc65sR0EtZ7nfVp IGodgGnYcGQQk8o6B6 +Supplier#000406621|uRj0TvR8tp7Ws,NTjD4Q04YQiY5DRmn8RqzGo +Supplier#000406629|vXuEitqwYbde3b5Q59Wo +Supplier#000406656|U2 QI5DRcd8kntF,nCl5lHbnKhzE,LTEITqiDg +Supplier#000406669|xbRHa4ta873kmML +Supplier#000406706|1FZawCJcczYbAyoPQ +Supplier#000406748|AKeDSGfNSAUNN +Supplier#000406825|LZZJdJejtIBN1AE +Supplier#000406857|EOVmmR1gIs6ancKNhvlnmhS8 +Supplier#000406891|KeAb, t4uVUgMAJk8cH0V0tAk EpBSkyQp5hY5V +Supplier#000406928|OHL3kyM6FC5EVoyBBVfYP2 +Supplier#000407006| AIIZVkCumtUzE1nQ6i93ZB0NJKOUYlrX3otsKM +Supplier#000407015|Po01dpqPc3OxZnrfguAQ51WG3Cfon3FhGvLpj +Supplier#000407034|swfhNw3j,dcAX EV +Supplier#000407050|uTn0wXfK,1Ys4h9vIhDxTH03oLq +Supplier#000407102|tEEOAyf8Zu HEBdRYQfx7P4A77Iijp +Supplier#000407137|7Ud6blSiFd8b20urvTVqGy49ti9L7UtepPyqHAc +Supplier#000407151|rxGrGSlp2Nb5Ycj6OpX +Supplier#000407270|ANB2VWcLo29yjqNdkJ,pzqZrIRYLz +Supplier#000407271|8wEcXogQBtnbwG0I99fwSdmHD0ViZl53Zm +Supplier#000407322|AKyaJgXYEilSr9bF2vPqWtQ3 +Supplier#000407352|YYLLVJmvbs97 +Supplier#000407509|4v8BeoMlZ,Tor7cZN +Supplier#000407531|Z0zsadKjKetwjDEoTNqnZpQCYdCTUCNo02iMq +Supplier#000407551|KfbuhNBjrbdKKUKw oCAGsq +Supplier#000407559|lg4lmVGugRFWtFxFnuqnD6ntEr +Supplier#000407623|Ju57VgU7LqDfcEjZXt +Supplier#000407710|Sl,Q2EC7dLcBZb5YzuzcW1P +Supplier#000407760|895gBFAyR8LafQF8rhy24nFdR +Supplier#000408044|78Gvx,FvR4mghS2i7rk0C8lsOCBbNk +Supplier#000408071|L4gTEuNi5O5d59OZ4KQlAy2uiKb9Ie75G +Supplier#000408188|PcFleqcdYp6QQjoyHat2LpPzUl2omI9Ue2fl9 +Supplier#000408244|Q5CYLL5I 3A71YrUZILPZmwWAU4OJISQcCsdU +Supplier#000408263|ZDtg u,PnvEv8tF5vJx8RJARgu9MJ +Supplier#000408325|mMW1a,srS1eDoa31W +Supplier#000408372|kB qEaza11bpmUo5eKCXq,rxCepGYYYIKegMif +Supplier#000408391|dM2rjMP7PyiSNNAwA +Supplier#000408428|40w5kE3MmLcCPHFVnwHwJ6EE72IAE +Supplier#000408478|pUCbkX0jqTj0tS1q1Ux9pBw5zdS2PWXPNrw6WH +Supplier#000408655|iZvlFP,t,OFu uweFKYWzYUJj7 +Supplier#000408723|Vwhpkb9p6U9wWPYDtUQmyAl5 3hRCQQoTrO8O3Q +Supplier#000408764|1arWZ1hCoCqJBKLRhByAW8pNwe +Supplier#000408765|g3PETim5 HpHvTSTb4 +Supplier#000408857|dEYGemRh9W38qJ1 +Supplier#000409083|3m99fcg,PFvqSe1q5c +Supplier#000409095|K2s9NQJlzc3VXvkTjLOi11Rjllp5e +Supplier#000409097|TWN nNycX,YZ52pxTnMPG +Supplier#000409115|Qs3BTIpbkh +Supplier#000409182|rZ1rDoSLzi0EwQI2tLe,XUpmXoS,HvF0DS +Supplier#000409428|0FaWQDktG4hx +Supplier#000409528|kadsv,di4DULpcYi6T14fEUN8bPW,J +Supplier#000409575|Dwz7cf1dZj7O +Supplier#000409618|hcfNPELvOPCeyp,9EJGapgRAxttdb +Supplier#000409641|5Sh8CDlqaK8sBanIGBPwLUvqm +Supplier#000409646|NBJiJKRddTgC MmMc26P26FGs +Supplier#000409711|44,yAM67v6uZ33kqxa9LClcFRV 0e2U,rUH +Supplier#000409713|Ahid7lq6VMcCIEguye9V G,8dcpb +Supplier#000409793|JAklayG,hAdV1Fowusr5XOfjFmDht dPV04aazld +Supplier#000409921|UNWt13tO1slThKtOfw0G +Supplier#000409936|4hcOrMInqwF R9IeJlqRthwZZbrbdggaf +Supplier#000409992|CHqpFKcVMTr2FFV7XA5o,6fJ JlP1F XRn +Supplier#000410021|9,emMJUDU5sJf z24It +Supplier#000410093|msC9xJs7l Z7nAAH,KrN m0pMUl +Supplier#000410129|Enw2sw9x2m1z8fKxX dKZuhxmZps +Supplier#000410212|zfuDizm5u2H9BfFN +Supplier#000410244|N3EpCBjzIZ7 NiHs8HsVZDt94B +Supplier#000410315|r7nKlnOwv8sJfvbDiHqVeZgAS 05crJAnS0Ok +Supplier#000410349|n8hVEjEID4p9VFvd5 +Supplier#000410392|ECCrQBIs1D Gcrk9D6vN4Wo56VzZjMPXaiQ +Supplier#000410426| 5jBM0qtu0ZRmXZVk,msQ8egp6aMLN6plY N5 +Supplier#000410433|iAGXxCvcp6c +Supplier#000410490|qNFCzWisl6XgIUDNjZtaX4Yl5QRtq8zEEmuVC +Supplier#000410523|ReBDFou5gbI7HdIbnsYATqczFJ2Ei0W1bo +Supplier#000410551|zacXHQcEuNSpEldT +Supplier#000410558|TvFJJ,aqqwcHYeSDPwFVJHthNueee8t +Supplier#000410678|ZEJxuIqizG4XAU,Q44qILqj nUBoCZw +Supplier#000410728|0PDgOuoOdmSrvL +Supplier#000410736|QqYFCHAhC2bb0XnPBRheZZ +Supplier#000410745|0sUXts1EfzGGWtwPGa kTeTM +Supplier#000410768|pJ49bp1QSW472520OeISiSP87VEzN +Supplier#000410890|,AxjIlw,qyJP5rusqomsxH9AUz7dl +Supplier#000410910|IkC76h5LCUTHV3R2lwHZR0Qtp9p +Supplier#000410911|SL9QTqO1neChAq1FrONGKfCwFa +Supplier#000410948|IscTmFv8d,hgOM +Supplier#000411020|qxxmUwDdY9e39 +Supplier#000411060|P1Xhzna3GWKrpbBhA54Wyc,lJOjQ6g7nyp +Supplier#000411144|H3hKSudzDt5ZBR3XqTOUuXIACwWz4ypmvSrIWO +Supplier#000411233|fQ4IyE0WfGICBhy2 7QX +Supplier#000411251|Ah0RoP1b2eNubusTm +Supplier#000411280|0uhlVZcxuD84oxBVv R6p6SF MtNG +Supplier#000411430|RbZf3 oojn39tDyTUOXIp, yXsV4wsy9fFGi +Supplier#000411501|GRhJ4UvHilqtGzwXsVEUR67QIWHntmlGoWVHgsd1 +Supplier#000411513|ZsFxVapxjuhfmBoPG3qZ1DFYH +Supplier#000411532|z0xpV9voG2ZUpGecF8wDIb22f ThbvUQt5bN +Supplier#000411571|iDDzrOaI2GHNMzjXDRDo7nU ghh j9LtP +Supplier#000411718|E1JlDK8NEvTNmIlY,cYU +Supplier#000411727|HjbCvF8waEm +Supplier#000411779|exv7SVngBgHATlJcDP,P2kCl 4C07D2xlM8dBl9k +Supplier#000411796|sDUUZrlJdn5lX2le,3MSXCgeQLF +Supplier#000411808|,K,bEcxlidTP0habOYKUv7dez9B +Supplier#000411866|WqAWU7R4we16uo9R3Z +Supplier#000411899|xUtcsg6J,dMOIyodWQG4QvgulE6pZXoUyN qscFl +Supplier#000411914|sa,uXtZhtIW +Supplier#000411955|oU67KhJ6 Otvzxeump +Supplier#000411994|HdjbZGwOy95jb5jvL1qPIbC3vspQBID +Supplier#000412168|LXCqila5MdmLt2kxa3 +Supplier#000412230|FI6Gv M0LLgcr +Supplier#000412334|JEfKAL,nSpCeEZsxyZX6 +Supplier#000412343|Q1naQnNyAORvoi8dNkvjdveb7XwB9lgrmxcKz +Supplier#000412359|gfSJ6z06HX9CYtv2INuQfpjlEfabop +Supplier#000412491|tJP9Ys2nQuk62QeVfaV +Supplier#000412543|ioH9e0XsAjbchigq1mwIwOeS8,ITgwA +Supplier#000412565|GY7Rg4dnAQn +Supplier#000412604|00cAZH3oNnVbObJpe,Jsv5vtSG1rewk5lrG +Supplier#000412710|wJrk2 tiY33xhWj070QNAXMKXbltACVc U +Supplier#000412837|OMgGra483ZptYVB5 +Supplier#000412909|dcf73jLdBxOl9BVB,ZuS,5LLE4UP +Supplier#000412931|JeZUtHie5zNDeHLn6USJbyROnR +Supplier#000412973|ZNpAhRropQLNWvs1pff +Supplier#000413028|wflmGrQq QFR63K7LXXoLP0RICawi3we2Y +Supplier#000413115|W5Lw5 nAQr3DfDk9muvkQ2bqleo +Supplier#000413121|HYXygLfHSaRvu4CnM, +Supplier#000413237|XXDXAJ1uBns7mnSYZZL +Supplier#000413245|LHam7D3LjeJq8M MPzpyrRReBc +Supplier#000413251|lZw5lnGimr7tU2WIlfZQ9beJGv5jcS7 +Supplier#000413278|BxDfjXHgrJOva,Tj2 +Supplier#000413297|bAyLcb9i9vUFEWZ9z2Xyurt15AIon2 +Supplier#000413470|gRpYB,RTe7eEKQmHdPNWvoTItRMBMWRpKZvxQH +Supplier#000413499|AciC FjBr8cfRD +Supplier#000413503|4oJFG1sNTwohu5xOXCg M2iG91Emf5n +Supplier#000413522|XJmxt8b1pyrDh3o6,gb4xcGpFp8CuXCsgRakvb +Supplier#000413524|E4hwz8SszJoQhLv4Rqr,SpKBU0POFHE7ucuWtEUs +Supplier#000413563|1tWb5fX0F,2detN2O3Y +Supplier#000413580|cXtNGtgHkigllNSwi3 +Supplier#000413754|RNWPXH,B2MJzye FillBfynaHKGwFms +Supplier#000413774|AvDEHtc09E4D7iWnKIgjQGNra04mr8BL +Supplier#000413800|F4M1L8k,Yvt2,YfKMvQuUHZGN1o2vWYGP +Supplier#000413824|m1yBzs1gLrjsH,rkZYKOmwTWU GU +Supplier#000413844|69ZsjSM83tqxwRyEYCm +Supplier#000413962|rw3SnI6VUVhcT9YP1v3Iruo9J8zuVxtfr +Supplier#000413963|6pTfX Q9yJqwi5bAyXZpRntcxkIzQeDYgPi +Supplier#000413978|wX7HBT6yqdESWNNcoi8u +Supplier#000414001|hI4ZQ5Vc60zVECs2 +Supplier#000414006|,5YKDjVMk9IB4,KSlhisRr682 9Xhtkc +Supplier#000414057|KP6NFqV3ucJuxlFcsdb +Supplier#000414100|3P73BchTTYiAG0 RzcQJ,pqQj5ou +Supplier#000414122|ctnhyC0OBZw5EtZYpCgq3ohs1NZ1nCedf9hIV +Supplier#000414124|V8HZoUIpURn4 gs,IQK1h214VNTYGP Zb96yHqD +Supplier#000414205|m3JAiRKNwKoKOJc3AwloLDxuT79mjor2Qr +Supplier#000414346|PL08Lrak08T8YJa90BULOvLF CoM +Supplier#000414498|tFkg,LFsynyjvmnWT4SiXS2AYdKOlbcmM5c7 +Supplier#000414530|1kVV7RyuC,Jok6oMcFjzBz1K,ViH1mQIrn +Supplier#000414543|3OTweVUCzu2Io4tR +Supplier#000414597|Req5laNLG,Ky5oYSADn0 iL ZCKu5Bd +Supplier#000414647|cCKbK7xt4Q9yzzBATr83h6EisInKBzu +Supplier#000414691|sZiRppzdM1a1buy7OvvxiWEnm +Supplier#000414795|QpIQJpdrBqOmqOwGMrettikwUYRYKlNUFtC +Supplier#000414810|JK4Akg3g1kP76 +Supplier#000414990|bRjgKEzTb xMq +Supplier#000415127|KHJZc 8DpIo6 +Supplier#000415139|Lqpf2RS,rp6Vyy7 +Supplier#000415149|Cimt87hM8jQK62 ehW +Supplier#000415198|sl8wJtbSHSgy eB +Supplier#000415290|CJMC6Ek9PSOgfXuz05ctxBlSeB2R9BKqBezVPSaf +Supplier#000415379|rONSTsKxZ3eFLepiRvcO +Supplier#000415460|9hfz2InuZOnoBpr +Supplier#000415609|hhtR3 iz0iTgwOeO +Supplier#000415649|kGgjG1Fv0fIelUaM +Supplier#000415730|Vy9hTNwKxv9Ga4m3U9 +Supplier#000415801|GkXJzPPrzXV,bwYQp,Jf docYNE +Supplier#000415805|7aQUuZRPR pvgOUPkAK3G +Supplier#000415824|GRcJcBOGMTXSYB, +Supplier#000415854|iix8uNN8tfubiLHpi +Supplier#000415880|WfxS5iuuXR0YAB3piR +Supplier#000416011|lAj85DWMe8gmxqxBbtGWUA +Supplier#000416032|gW2GShspd9zagktMH4xMLwbp VC6u +Supplier#000416084|XgT8GnoGKDVmdE0ZtXN5GgyA5Fn884nyZdO6KNxr +Supplier#000416154|t24fi5OwIM2c70CfMEveTS0 +Supplier#000416180|9MLK9N9WKtwB6nkh7E6,P2QmEQ +Supplier#000416211|utzhvKPiSVIuqLe0tSUbr3xh9 +Supplier#000416326|iPuYCgTRC2rVKXLbLqax2wzSR5 +Supplier#000416404|WaMjwfeHlCRlfgMYXNHvdTATH0Vbz1usJb, +Supplier#000416405|iVrADewC4,f12ylkRi0sESQlhzjCQZzg2AM2Y8PP +Supplier#000416412|m3vaI4zDwsWEgTYV3Ot1mS +Supplier#000416493|oLbYSrxeq 94HrzuzRgXeqwBI5L69r2H +Supplier#000416519|NkzFmh8Ey0MHWu9C +Supplier#000416525|pCpeb LUDNQA1oj3EQ9aF +Supplier#000416541|BYXfux7miK7chJV3Z6 cBvgyu6RrpR ku +Supplier#000416558|RVs,llGz3arH7eHb1 6LpiMsbJVkjL8E9qzxXf +Supplier#000416643|iXENHaVo FJNj9VD8LHy 7FkmKHD0be1X,jSKBF +Supplier#000416656|dD,QQosooRvl7WXc0v38QvF2bgMe +Supplier#000416731|WxowFtCS9uQMsHMzZ UfgYCtp,D6DNgwRC1og +Supplier#000416766|xDdBhdmb6aX7Rds +Supplier#000416778|oeIpP8HrOam2zH8fMX FOPDidmo1vpHIw +Supplier#000416808| ,QzO1PaT9ba vY +Supplier#000416863|XqFIvD39vgcvn3yuh2dyLBXfd +Supplier#000416916|IPgXYOn4Bs3g86 +Supplier#000416917|13vMHtnigSlQg7mueCld +Supplier#000416978|QrAvQ2ELvUv5Gu31nI4HlAVz8F2zIf8 +Supplier#000417176|KEsATJEl7N9p27AWpr5rxcQvJwdGaEYyCpN +Supplier#000417178|9g23gqct4dFqAedJBW3M,xTp,uEBcBEjlU +Supplier#000417198|hxr2J7p090R046YzAY +Supplier#000417210|YYnDZZxiJsIrn40S9JAVJ2xW7jehyueu2pUh +Supplier#000417243|iE5GqHHsnEGGsMcI6jzdxN7JLnvB,vYlTkS +Supplier#000417260|LIHRXqoBo0Dkj7XIffzxgSATH +Supplier#000417341|Iy3iP,5iwMY8zKkJQ4QiYHU9LhIfgTMZUc +Supplier#000417389|lQn1sAqTpHY8fJ0EcT9JZ43 +Supplier#000417437|0USFe6dqWs0uAuQI,F1OqJ +Supplier#000417471|Rwx16 kV7VbMK OPHtXRqX r02kQ2aPIvZIkk +Supplier#000417552|9oxeDkUdvYlM7VgNCIef1uHJw +Supplier#000417741|2YPhyRxaES4u, +Supplier#000417780|pj7Y4InS8do5N4jL8yXc7jF +Supplier#000417883|dSvcjjuq3Sx0ctx3yuXSB +Supplier#000417903|YeXGVTLZmEZmmXhUrHj,CniVczwTIuE9JizHUDl9 +Supplier#000417914|UqLcgZfB,55KGl0KaogZnXHVZ6YwLEl8 +Supplier#000417916|Vv5lBZ6,mG2w2nxYPHhEan9jCJjx,k602 +Supplier#000417919|teyvVZs5lKc2ZaabNLD6CS9zVcuJPAVJVnU3SQ0 +Supplier#000417977|GwoSR4LK5as2UZFfvLPEgQ +Supplier#000418113|HqjyCWE6pxt9Hy7sMDSB73iPsouKKAn1lssG +Supplier#000418130|zxXpfWdeAB +Supplier#000418157|BXdzSrkCz1X4BFKFduQqE7lhgF4c1S +Supplier#000418173|ZLpXgycbiB 6bVJbTEUJWLv B5AEhVBW9ZLWv4yi +Supplier#000418210|uv ZAwg7xivEZTQtV1c6nyt +Supplier#000418243|9VANc1K91VXEtz4doN +Supplier#000418464|ORlx7wqEN4DmLpgl +Supplier#000418509|j8ecPEwBiQCv9,C6gfmT ef, +Supplier#000418534|2A7BycSeg8z +Supplier#000418570|cgWOD2jpdspKnJ14lwsTz4,I53f3eK01DOiT +Supplier#000418588|l7ymTqfPoAz1WZny,jZclkh +Supplier#000418685|GiBQbvNMqDPY19gO +Supplier#000418711|yOiI6uOqAwsh5y2glBm4,DoHaleOVdm9 +Supplier#000418810|qP NWPl2zun9KW22Y2ql84F +Supplier#000418917|mtrM120Sxr09HNoShLACKjzEGcQkSHmZ +Supplier#000418962|ZUF9W82vyDmpF3TqjCN9fDrKabhz0 +Supplier#000419009|j1OFeZ5sX8rNAQ +Supplier#000419136|n5nuzNz10VMpvps7d +Supplier#000419149|tyfEHh9yK2,kKKgKeLQDJKLcXQn7lWks6 +Supplier#000419203|zHTskA8YHICdrFT1MkgdOokYU,KYP +Supplier#000419242|4hB84VUaUI +Supplier#000419247|7rn3Sx,jXk4udBF87lroiW45MYrKgHieppwrrRJ +Supplier#000419286|cALjE47SV3uOvumHX7Nyuhl5p3kxl7TJnv ,Z +Supplier#000419317|dUybLMCtTCG6SFsk4XHWZtkimOQcY dO6S3QyLq +Supplier#000419377|4Jju8PIAcfal 4ObxOwPsWdUiPsPTKf1Zl +Supplier#000419391|3jdG1gX4MU 7J87Tg67 +Supplier#000419404|0InOYNpHlY +Supplier#000419425|1hSc9NOn5hPQxKpOyYvg +Supplier#000419450|3 ZhYzdJ4X tE3Xtnm +Supplier#000419499|MEoCWu04WzZfopG7,cKlaSjWuRAX +Supplier#000419581|kvVxp MQ6psoGjjZbxAkkPgJ8o5s2I +Supplier#000419627|goLoiuSL8znKSoi3FTl1AXEhqte uiA7gWoGTR5 +Supplier#000419798|mme4Jedhknn7C +Supplier#000419826|ux6gyzj0xNYOe +Supplier#000419846|uhZytUpufb6yzUcrOgyu6RL +Supplier#000419899|B7TOBNrjm1fF 98SpfV9Re +Supplier#000419968|G9YgI4oTF,45UVlq +Supplier#000420055|UyeSa1YHcIlJcMyrnt4BS4QWsT2gKzs9 ud1 +Supplier#000420071|koDsMDhaLl +Supplier#000420114|u8UCfluvcQW9nt +Supplier#000420115|ViqGOnCs6dcCB4o0Q,SwsmTqh6Ve4FgnYBYtH +Supplier#000420265|ZmcxcMgBPwcSYGk3uF2BbSWu5gTnVZPNR +Supplier#000420277|9hzCDPAGuFQho9vwTP6oYcyED VTkO +Supplier#000420325|tgLK3FVNEMthbVmZ8nB7G R6GELpAkd9Qf +Supplier#000420332|1YBJRU1zS9Z +Supplier#000420370|Tx5xzj56O5ucp2IGRqBfwUdmN6IVrDClplW +Supplier#000420415|kW87hi gUEecGIW2GnEn2 +Supplier#000420496|ypMpDC2EW72wHm,cKh0xl,1Nfb4uDrp +Supplier#000420788|1e4GLMf0xY4bJ7BElsJQdLTjSpnXs7QT L1U +Supplier#000421000|592B2n5uXh83k0vNH3hbToCyHOT +Supplier#000421063|o64rkQQDhfDggXwg,0 +Supplier#000421194|nPkHvl85fM7GhcK5sh +Supplier#000421197|ufWsKDLs9l47Dv jRnuIboS83s +Supplier#000421239|qN0AbU SM v3XUzSeV942 +Supplier#000421297|ORUWjZOAmo3kQzk0a 5edB +Supplier#000421308|xsxKY5wbTaFqnkC vshlAiAhom NnMHNCwu +Supplier#000421324|uuoVfeXGMHHvmaHJUupiM482y, +Supplier#000421341|XVHft uFt6cd0ZnNZ9DrtT8le4 +Supplier#000421356|,4da,ZYpLga7xOnW3vXpvO11rk9T0Gr +Supplier#000421421|afXS1fiNG9 +Supplier#000421492|ta0nrOYUGQeal3t8uKElBRiM4f21eIdhQMWSFXrr +Supplier#000421502|NSHnZrGJ8297fq2rhsRS2X +Supplier#000421566|L0aHW1WeU8RlHYIwUv7 UfT9IGxoiYXw +Supplier#000421627|SgAx33BL0DVKopv4HfN3cmXQ,BKF +Supplier#000421677|kA3LVJvYXxHJlUfr5oUqDHTz +Supplier#000421737|E,SR7qWGFrBxZQB9 +Supplier#000421750|I fmj7dLjRGo +Supplier#000421763|aQ X3ct3HoYHB,oLYEcCFoowH +Supplier#000421797|Uim 6d4WqOqredzok28BRTQo87ZyKOraB8bifWt +Supplier#000421895|TY0LpgQWdgkxvrWq8ENLgbyf3ptTn au +Supplier#000422018|rZ4S3nH WPVW0x87hRXlBQ9fuvf +Supplier#000422053|oK9m0DbVnUoJ6LQdi0RGSII4OBNE1rVjD +Supplier#000422089|2vKn,e80SOe2N2MtiDxhDx6r +Supplier#000422114|FxizVJk6m9dfGmaaPAP8v3BRF7tw3 +Supplier#000422187|yTlhz5MM9vYngH0Uo40BHJA0sAxaPuMV +Supplier#000422278|FOE7tEp,O4R +Supplier#000422282|UlXNLRfq4i +Supplier#000422385|f237fsj2J3,D0vJ4rexho +Supplier#000422388|gxt f,j94LjGyEg2Lqh +Supplier#000422451|XcEALf46CI1w5FQHksa +Supplier#000422456|24GpIn6MWLqBZqvjRoIAf8uoNO58gTNaJXiEVj08 +Supplier#000422496|QZZgeSLCbeVriSd5XwaNhK4gCTEpcJcj7AVOK +Supplier#000422541|MA3twKHQpJ9dV 38 +Supplier#000422551|FpC9YmA6aD6aX6QCq0wMktddcybf9xJh +Supplier#000422558|Qgmz,,jxGrbZ7U1U1qs0EwBSz +Supplier#000422565|DhS0AkGRO56tDrPy1Ps4RgZxFaHV +Supplier#000422636|onSFTcnvM0dl4z4gis6l2jYIeJjjX6hzvN5ykD +Supplier#000422659|oOft4MHXwsnN +Supplier#000422794|qQszzN7eENn3vWBcwJnfRe7 +Supplier#000422807|IFcukrUyg6iJlX +Supplier#000422977|oRdwabJ2lijLGYjQ +Supplier#000423026|ckYWYoq2zc +Supplier#000423080|6BSYJ0iRiURRPH4RGL +Supplier#000423233|7l7DY0zXsMtVcwDMDbvwwu,Ds zAQguAupDt,4 +Supplier#000423297|HLotcncqhUP CQaeIR +Supplier#000423347|DXnjJGeQQxD +Supplier#000423387|duIR98XmvZosb1ttxb wNc1eY4s5tHEUd,9uis +Supplier#000423441|D,Y7mMegE6vOlAW8c51bNyQU +Supplier#000423447|N1DRWhHI96ZL3ZwJLOe +Supplier#000423608|RhoDhozT,25Yjsm5qdX 8BZ ,C4iN72MV +Supplier#000424050|1fcf gtZlhDWQ4yAe0KAhCS +Supplier#000424066|gKzsJmQgIdx0EvEyN +Supplier#000424073|5e6dkOKtsW2PP7LXrdZ +Supplier#000424137|GOvng56YxaYz9O +Supplier#000424202|1dOeVoXyD4rfvLOXDes2THy83zHRgTLeJ +Supplier#000424494|,i,C0Zykv5mmIc GQ7p5hVvp8AnZawR +Supplier#000424502|MzACHpPkTf7Qcz +Supplier#000424528|art0Q9faKbSvgEdP3xGdLDLRuzkuuZ +Supplier#000424589|mZWAcywODZy4DJdToZsf8YT32q7Zx +Supplier#000424657|w0Vgl8,pMa +Supplier#000424738|oJ0edKWiwqkI7cn4ifXKNVhhP0fCTA1qn7RXJP +Supplier#000424744|lAU5iViVkbTnY +Supplier#000424840|WCfwZcSZB5PWe60co +Supplier#000424911|ACKf2tI4yPs6Z2w +Supplier#000424950|Gr10O9AdTaOPk +Supplier#000424964|MEU63f97e93laRo6YviS +Supplier#000425007|VJEAL1AuNKYeeXLApVYmF +Supplier#000425019|qYu8uFPgV51hRn72LLG7iLnfQcP9C +Supplier#000425029|9YdRhpJQaQCnIyMIGmThquMcBdcEk KS6dEuKp +Supplier#000425279|gOV5xXQGkpPm 57y3Ae7z 2A5MJb62tdDNAwbDt +Supplier#000425330|jU7pUkypDPux5at69pL3FhAqp2 2Oj9Q6B0If +Supplier#000425350|khrTk16w1JlifjclAojgziQsibbqJhntJr +Supplier#000425359|WQqyuBn7SwT28LENlHgtwUcHarogKtMq0S +Supplier#000425481|3Oe,0Rq,6tWpATmd7YBA5PKVoa +Supplier#000425501|e7,Lqs 1eRj 9Zs1Qr25Xz,p2OET2T +Supplier#000425525|fDf,X Wix4xSpN3T2 +Supplier#000425567|kweXUnub5S1rj8Mp8t WLqauyZU +Supplier#000425625|t3CpN4sYuzyFnon,U J0ckUt7DF RWaESmT +Supplier#000425652|PFATlAFeH,dth,S6Sf19ard +Supplier#000425722|4,MSrCHDClrAtLrpefEjQNetN7C9oqGo04XK2j1 +Supplier#000425777|s27i8nrjRbkdRCxu7AcCHCdCoC9PExOA8ZGBh1 +Supplier#000425830|cfDb72CHOZo228VTz,ejAJBl6R6kI +Supplier#000425877|UbqDigfGPMhsQ60TSjX2tsT +Supplier#000425903|5kAaqJyXchD44Kurz +Supplier#000425965| 5Qfb088ZEqhL7V5VHla fa49 +Supplier#000425969|r6E,lTco2Xj1vxkGeepAeeNC2d7RQtsCwlC +Supplier#000425972|awoYQ6kDIaXcSQkkbCOcMeeQ5PM7H +Supplier#000426026|464gAaknzt1eM,Mvirmxkfko8o +Supplier#000426041|M8y,mlJJt6ntapEX +Supplier#000426056|X8h ZW44hBtLE5bJEQoUM wME +Supplier#000426063|vfuxoc8QcZ +Supplier#000426245|rArkgWR0oAXfq957wfcF8DXVPsU +Supplier#000426260|zr2Sk8Kgv1Ww7 T0qo +Supplier#000426292|0vZpKgq0De31L3H +Supplier#000426369|bNEce87ULsc41 +Supplier#000426421|GBxQg3cQbospKXaQx33lugEjljABSpEld +Supplier#000426462|3ipvi4WkDNj,zeXsl7dkPoh1023dY +Supplier#000426486|I3mgNx5DgyHB3fXHGDWl +Supplier#000426515|PoCIioEC29uO Ue9IaLMS,nbw +Supplier#000426547|8VIcmJWYGA +Supplier#000426563|4tMGqbX78tMGdt0 +Supplier#000426723|smgVq dSrT1we0tqAXvB8x +Supplier#000427101|z8T8snsfdv2sxieQMabyIuBW +Supplier#000427107|Qofe Cg2GnlyouBJ7wYP,LeZ2NUzn o7ulCD3BnS +Supplier#000427190|0Zgr8A6c5Lv4nIyp +Supplier#000427200|WkGb7Hw3vboqYi8EApYF7aIayFYXoEPTBMntgir +Supplier#000427257|K5P3cGlg YPgKZWK2FIoEVRWY3 ziN0SgUB +Supplier#000427263|eGd9B5WjBYJv3Vnot +Supplier#000427307|jKU7T1tSbz6YCf1wTu5Jm +Supplier#000427347|PDl,MzpkbLap2qHwKvFEZhPQmXytPehs4WNQ +Supplier#000427351|4z4wAoXka9qlW1S3jR4roL4fmfsXEgCct,RA6sc +Supplier#000427386|20YCumfm4e VpHnRS 9efB7NPrpbElaM +Supplier#000427389|o1GR4TiTrMRoDs +Supplier#000427425|zSyHzSkHT6X8s0iOHM +Supplier#000427429|ndN9Wockw6Z,YmglkFO,0t4JnZuuj +Supplier#000427442|AG nynbOxsy,H6LIvzhLM8u0 +Supplier#000427560|UdxzU7IaDuqbfj +Supplier#000427676|kWgqWoZbjJCKFILIeZOD9v8rDJaIhIWirH4A +Supplier#000427751|6MImaUOScjrDukpI1cTg3OjujM03xXk3 +Supplier#000427761|VArfJd11nm6 +Supplier#000427765|nKywHls43m2XG30lMx78LlzQLskBj,X6 +Supplier#000427792|K2HYGQu3Uktun1j0X0XbvXcqYTJxYGkeuAFzY1 +Supplier#000427813|9W8pL4vBRpNbFPh2sXMrd +Supplier#000427820|wTJ3JjYVcm8RSerKBC +Supplier#000427827|i0cAGogvONRR6lKk3LWfTpR7kq +Supplier#000427939|O82R3hkmGyw3AMA,lWUZLnefuiX,6LFYL1 +Supplier#000427983|Zzs9QPrGG3z,mr3n7 +Supplier#000428023|IFRDPJZbHkuc4ZvbvE,zzbV +Supplier#000428051|OAPcvpSP6w68, wOAEYgTm5QI9FWhf84V9J +Supplier#000428106|yfuJc87380s96E1rrodfYMba3YjIrC49kot1Uq +Supplier#000428133|60PuRKq8Fl4pA8Gf5sjrauzO +Supplier#000428163|5480HDqF5lEER52hiMif2hRcasXPZO0bK1T +Supplier#000428302|ffFP7v,80mlmqUZQ +Supplier#000428323|,JJqXExTBfjUc6 +Supplier#000428360|vsaBV6901X55ocGY,w7,ZLZFeT7J8UmTn8xote +Supplier#000428611|bN1qTJtyaWJnJwcHanMACUVV5VXJ1P5e +Supplier#000428646|9yiVx3K4piSAxFRFZurp4,q 0VSDFsarNj1Mx +Supplier#000428654|bwa Va a2KAuu xJeO,MBTvBEOra,XwJdd +Supplier#000428673|TqCr8rU2dcvVQOQihjj1XjxEOxrXFsfQ +Supplier#000428725|S1ZM,nlsorv6LTKssVvwK,2I +Supplier#000428768|koRdIY8H3g7HzXT +Supplier#000428937|bWb9Ckpzqtyfd5DXW +Supplier#000429278|IKMUp 7CRjFCOqFWwREAdO0Ghb,6 +Supplier#000429571|GUdfdnB bn hmTvE9xx6GZH8c +Supplier#000429572|yrJkZAY1IPGGjutGAN22p33 +Supplier#000429676|bFo2ZZIHp M2vJoA4gqnT3ANJ77uy ydwhox +Supplier#000429708|Y7Z,W yujsjp9UZ +Supplier#000429751|KUKYa8XyJtapupFoGzX7 +Supplier#000429843|rX7M9OIet3aOs3M2K101 WC7JSce7kMDj +Supplier#000429853|4qh7nR,jHRqMBSJj6 +Supplier#000429870|snveDUf7fQYJvT +Supplier#000429905|omd44h4MdI7EogV5DnS ,7xt8K2TA, +Supplier#000429976|I4sHe zn0TQQYED086K G6yM +Supplier#000430008|HeU 39c0Md1KRD,uQTY1Cwzoz +Supplier#000430011|jx9Nzjhay6 +Supplier#000430078|Y5nSMuXth1cLPei18t,NeC +Supplier#000430179|IwzrcWyxaoxAqKO FQJDwCYe QehnlrKfJ +Supplier#000430210|klXhmdD3W1SMNQWit5FGyWd, +Supplier#000430373|mzUNKt8NCvR +Supplier#000430388|zphwza,cUKF0x1nQ4P3fcpwwNW5TqRVW +Supplier#000430419|tjFOoSqtFB9PWjonpV +Supplier#000430500|t3lUULJ18ZIZtZIKUZNK0bK QVqOv2 +Supplier#000430511|pZBIuzpdmrrJLoAt4Nz9ANMMjrZraQxhCT7A +Supplier#000430518|eIlGuMUoh755HyCbQFA6eEMie +Supplier#000430579|bn5XX2ac 6HwuP9YmqTOCn3 +Supplier#000430657|pVf9GLjLM9jRi +Supplier#000430689|xzHykzsAyz +Supplier#000430693|SLvLj3 oA TqzlldnE8fZQcBC1ZMRw1XlXh +Supplier#000430712|XN1R2pLChVNHmvEUmd2EWBS13ameNvBwvlZm +Supplier#000430799|dUtB1wbrPsWZGdbgirpSIs +Supplier#000430838|migEQM05P ofdgDwY3 +Supplier#000430866|MrPSjD9DFCLTTlGbu0e1dtO +Supplier#000431038|224ApHfN5kloTdWiHZ +Supplier#000431047|13HKWbRdoDRogsKfJIjAGM9cslgmrW1TtMa +Supplier#000431192|Oc8xwNCpLrJSwo3Zn8w +Supplier#000431303| 0dBv4NhyEEdOGDLw6m6 +Supplier#000431316|EoXPhzrGtBymiTWSTurVHJEc7TRAyb67L3Ecgq +Supplier#000431387|bHkD9tgshXlGBj8QDXhkdz8bQ0omNZ7 +Supplier#000431431|N0J oTXfKiS,Y5RORgsph,BedOCNwSZONd +Supplier#000431535|1sBa8nr7PnSAyaS,282MimbfAFwbIP2ALE4LUck +Supplier#000431624|ZbN4l1NAnrLsN2guAuecn222Jt4W n2cfkxT +Supplier#000431690|lzGJYsucKI +Supplier#000431712|JSHPZelwO1ymBKXlSD0T0ytGK7jfoZz +Supplier#000431750|Qxz6ULtcsDeWpd4ayejstIJdYgo AwVnvPE9 +Supplier#000431776|bZaHHpmeQ367qbeKlYQlLpp,cdFWCs +Supplier#000431787|uzqPPXasELGU, ikM29N3yAR KgjVVwvh +Supplier#000431842|ynrT1TD2r9LwZhs +Supplier#000431945|,zVU4t,,15,yLbgUNQU,Qp9 +Supplier#000432008|88snVWCtrxyWv0On6c1 +Supplier#000432129|FEtIk5,B5KEq01FvunkJVY7xBGslO +Supplier#000432234|GBRODfYD89T0EWW5IBfGMk9YeyJHrrjuNZ +Supplier#000432268|f9ksy6c8JUoQzD0eRnqr4iyHFlOTu +Supplier#000432342|jrmCXXmsN1eFbQAsj,8Mb6dDKJnj7Ch1WKJ VcPF +Supplier#000432363|XdV1WF0 vNv0HEZrdQzQlrpFkvlqW9 n2 +Supplier#000432444|HWr1XYqpet85RQK1qYcAfcZhJ5m0zM0 E +Supplier#000432454|qB6JBA8j7larPMKr4bZ3BmRcXFgElixJn6NU2V0C +Supplier#000432486|UNEbsRjRcTw0paRW5mIyagJ4NPome +Supplier#000432502|LrZECVJHa0,4kEUFNFngbltBSMI wkfcM +Supplier#000432560|bMNIlzKhKHqKwsOH15q4a +Supplier#000432605|VfnMrk1jg0 +Supplier#000432713|4J60WvlH ojNZRbdScyjjySvV +Supplier#000432801|8NcNsWd0W2gaaRkxqaBqG6VT +Supplier#000432972| 1fooY6 h4X5uxwiiFAQVyD3QcqDcdHzS7Ly +Supplier#000433046|Nv,8xMaRq0Ja57aMa2u9AwrbJAR +Supplier#000433066|GyIV6poHd ynV18cNU6JVbHLm2rGzci7awIkA,,n +Supplier#000433184|J5Ow4iXy81Bw6gGUOqthzxMG4fWyq3sFO9La5hu +Supplier#000433197|pjysFkxjPG5AiNPmL8I2YBfmrhl,sJY5IWZAqVZ +Supplier#000433220|tOFRZD5Ly6Ool2gZpzZk7nW3SyzQpDC +Supplier#000433239|ZFHe0z3aQjk8HzHBnXpg7xqXc8jKndjQ76la,, +Supplier#000433249|Qcm7Bv04njVSttdg +Supplier#000433285|JD4A4Jkz zk8pTjZ mfZul8NMqv,Fzl +Supplier#000433349|uwGupStuO7xBO5vcCaNIzxX0hfhemfDpgYk +Supplier#000433409|VBrwFzw7NF6vQhfj3WPkCwx, +Supplier#000433472|NzjP jJsXzDc5rnrc +Supplier#000433476|endZdcVcCbs07Kzo25pDv,OUhWdC4A0dVmuAXJei +Supplier#000433562|wzLNB5TWHrbA6 +Supplier#000433590|TSPB98F,6O27jSMx4tWLvqefdmxfi +Supplier#000433596|,AgDPFNFtTKFw +Supplier#000433634|pGGRz6,i8IftTMtye8xmeP +Supplier#000433670|P7aHYzFdmny0zu +Supplier#000433676|KWzFV,Gt2,1Nd2wDEcMAaoaM +Supplier#000433754|mJP2LZQSzQ +Supplier#000433836|NnBbMnLL9t8CJy +Supplier#000433876|R,VgO5ClQwqlaZmZdXbuIiUN +Supplier#000433897|rEbqqXFIDhKmCMqTa6mreLiJ7G,RZdcldsR0NT +Supplier#000433931|AC6YmXn6l8YxVXs lGJ0KAIRx6vhZ +Supplier#000433945|4ULT1CgrKx,RCvIJSpsbPGUd +Supplier#000434036|KfrLsDV13Mj6eHiehqFqyIyoSm +Supplier#000434058|H4ReSrOcqr,NmoYkXDa7cVT5 +Supplier#000434070|7DBDRFUNSw284osr,pzOxTxZmzk3PZcPaknsJ +Supplier#000434151|fxlwsC bOK8zZzEsyYZBmVxiwEEx7yin1mBD6a0x +Supplier#000434194|LptySv1pnVXJoHk1U +Supplier#000434300|TLTQjQFGdH0vY6YnRpXJDQlDTzfS +Supplier#000434338|WHSPuwXTfeJkoOJmvHTRkZuGylYZi9bHtjo +Supplier#000434359|51SJhJKZMD0LDktacmpm24jiqsyacWO +Supplier#000434439|t5WfJzxmAn1y6ZhupfAbm +Supplier#000434597|4l6xduH75KSqLCEdVws7wZm6hADSWsV72 +Supplier#000434624|jW3JOH a95nEDSEVH6jh8qY4LPgrqB +Supplier#000434634|lkBJbRJ gVKxdumKGmNnKSUyD8JubBd +Supplier#000434637|N8f55UcbayP +Supplier#000434674|s0X 7B8naQxzl1P9tA3baY7xqO6gLL6vF +Supplier#000434685|Ik9vUFJv9yYwoGGNcSN +Supplier#000434793|ZmusNhrzDjXTfKZhlOQEwXoWKQpUjl1pJ7sjf +Supplier#000434799|QjWzjJJmH,0Ta5pLZVFsoISBbshIKcdFZp4h +Supplier#000434818|In6XJJaXHDy9 HMGA49JS +Supplier#000434823|,lMgcRK6e84y0eL +Supplier#000434830|tPK61XISSiie19eZQd +Supplier#000434893|FCaPWC4Tg0Cx4QffEmSURoDrS +Supplier#000434992|bnyxnYUO6DLnWDkUGs,7rpc6CZkGxb +Supplier#000435027|kA3eVDuYe1d +Supplier#000435061|oyRE11gYLlgzU Gtrr5CS +Supplier#000435073|0PX9uSEX07dXmT9vhugK985Zew +Supplier#000435095|wOs8t nr4mxvbK uu2OxWwifycH47tl2OwHrSGV +Supplier#000435149|nPhETeTe6wHEgI4uGOK9hCsHEdVee +Supplier#000435270|GeL0aKitUbmgAWt72FP9JjiazatUdyBRqGKZ +Supplier#000435285|3HhDuZ99Yyv0qKBGvTmGaJ6e6Rg37ycu,EEMR +Supplier#000435302|yTNI9EXrdp0FkBnJp VgKxuI4j7IG2onpkzpGch +Supplier#000435383|9NH8fQWADQDc62SAgxE7ySatD1o0h4FV Udq +Supplier#000435410|MO1OUK25w7lnjcU81lMdrWs +Supplier#000435595|J6IPSSf3MM +Supplier#000435613|Pu8,tdCkcJHA4UAzj6 JSGTO9Ec +Supplier#000435615|tYcEMxLvaWvz,p15D11hYr4i +Supplier#000435629|HAes14cdWr2Gt4pEdgczvlMQB f2KNly8Rt1RKWN +Supplier#000435644|vQ0ZE,Quds LQuouOBSaAxmK +Supplier#000435869|sPwBba0IPJtA7miCb,xJee3nvb2efuKktJJwyM +Supplier#000436072|JNJC5 p9M4J6or6dCcn,ecfM YWicZ4 +Supplier#000436075|oYJ6bq0TllDnOBzri2X +Supplier#000436152|Jt95bLMrTP3 E6gSL +Supplier#000436171|yrAxqsSzHEBKPZPak2du3 +Supplier#000436216|A2zVhBFX7BGNocM8v 2He8GWmT6ZVg922cJf +Supplier#000436228|eCK7aiy DSqqFi,HzZ,Y0Sf5HKZS7mlp +Supplier#000436284|yN1DofMYIStceT7QzDn +Supplier#000436303|8JJOWTPmNdIYp8zO,tqPCluWiBrYr0msrxJ +Supplier#000436387|Bx 07QjPSBmm6a +Supplier#000436448|FZHfKxDWH43,ewOOpi,lcdQUuI9r3AKnk +Supplier#000436485|729Dcbm9s1FAtq6L5cgfyvVm C +Supplier#000436500|Gl6jbHECA4eGPfO +Supplier#000436522|S4J9 Gh,yPkyYmgKj +Supplier#000436555|NuooGMTZ4g9LK +Supplier#000436567|03tKoLC,PlluyKfp0d6d +Supplier#000436668|1d4WNoIUcQ5FZ6f +Supplier#000436670|wfCDj58qpeTU1sNVb9TuHGmPEB +Supplier#000436698|tshz4kg9Va a +Supplier#000436727|WUbWn2BoOSI9I,mBSfFO96iIrlubGg0,9iWDi1X +Supplier#000436755|8QnJJ2G3Pjb6sLbPapytAtE,NubqxDq6Wxt +Supplier#000436787|KCYfO5kh, fXNrzQfEuoPsZxnhf +Supplier#000436817|E4wwGf4 6 wcnE +Supplier#000436878|V6x173WutvGkCzSbqCG +Supplier#000436898|44aUa5gO1DuB6VLCPxr +Supplier#000436932|C8jrSuGWYxhsn3fym21YdWJgr +Supplier#000436959|E4xsXjFdM 0KvVS1vOzyw6nAD4kKlGm,ZW +Supplier#000436982|s03Q8bbDDyLXeerpsRSR7ttV4EB9dkK55l95gCGZ +Supplier#000437045|6wFn75qkqn57dA0fOYlF0,qoJtWpmfuveO489F +Supplier#000437081|Ld1v4L44TInS +Supplier#000437187|aj7diKfVSMhEYw +Supplier#000437197|z0iWfjbgRoSw9ifSF +Supplier#000437283|Jvoqh3gPmCTnAOo1BxriqR6jVLwYGK5, B1 +Supplier#000437381|rbwLcDUnil3zu2cx +Supplier#000437409|0EuWAPcyGB2WjyNdQRtgIaeFgBhtJ, +Supplier#000437430|1NXVlTkQKGbr0tuvCyqjJAKTu +Supplier#000437627|YAXisxOlBOhcfDpfXwIl,RHAzqz +Supplier#000437632|EG1YMM5K4hcIlFNgifFcJ12kDKEiw y0 +Supplier#000437669|3R7d7Cs277mkCj9OOhV +Supplier#000437685|0lzMgqlwP42HnnTSPId10qkYTRFUUJ +Supplier#000437846|Z42wXVMD10pR9XIvYGZfGTvanJjsW5 +Supplier#000437851|bEu4wOchbTloUhnzy OsJjK0GALB7f zvjmHLP3 +Supplier#000438028|VodX3JN9wTg5FG3BSa +Supplier#000438063|hIgZ dnwlqggLA5xDYyYoLsCDY1ALfwq +Supplier#000438071|oNJ,nRIKnxG7OOyC +Supplier#000438103|iPB25jIGvKkY7fE6CUN2pu9S4d1cpJ +Supplier#000438104|AVRgjnQj5LZgAr2MebnpUpj6l1OPhFmy20KQvaqO +Supplier#000438131|Hj7rWJ15sdVQ8H8a 46,R +Supplier#000438150|xS2CMc 4y4VnYsfmzj +Supplier#000438160|RQTdK5s7aDrSvCTVanxcly +Supplier#000438183|H0nF2AGS02G5luNL66PVVvoK6u9Aa5bO +Supplier#000438253|HoujfdFAg3V5LhURSwH vkHHAyEVFW9qNf39TJZB +Supplier#000438449|It4CiBVk5izUESP66bs3 +Supplier#000438577|yhDeXARnNAo, +Supplier#000438631|qRPkxxIZ2 4,zya396oV +Supplier#000438636|R70Yg,reG3f8pscFP1bP +Supplier#000438658|6qJt MG96V386pAyoHnxvgx8lfDLlLCxply +Supplier#000438659|63rTTmhb7E30WwrAfcByx4gprCMkb4D +Supplier#000438771|Nbm1lByLDkvjdzrI +Supplier#000438772|d7e 3yM7RsdmzO8,1s7qZXdinzI6eMjC 4K +Supplier#000438805|sLOMiUNSemm4 +Supplier#000438839|fHFj65 6LmJb +Supplier#000438906|6ThxcEc tSMk +Supplier#000438960|EFVMJgonAR25AueeMe +Supplier#000438966|CFlkP6jF59B +Supplier#000439059|xhN7J2jpzZzNm81XaRoUBbRUGy5y3 HIrH +Supplier#000439128|dQZzO0m99JZWOPziwaO1FqzbzMjJ1Kl9aDIIar0 +Supplier#000439171|PN1xr8J7uZmVAYn oYJKSSZUkIV1J6wgxU +Supplier#000439189|B,IIWFep9z03r0TUCNZRQtdwzslnLvdI,,lnxVNo +Supplier#000439209|3QUY9hWptvdMt3zQkAZynQ3 +Supplier#000439307|8otJDrLG 0W6 +Supplier#000439413|IN87J1BXlkEYArfXXwenxzAK vViKc +Supplier#000439480|NZNoy136PtMT2wrA7cmX +Supplier#000439719|otjhFmw8dBN,BP2 HUH5DIAziLc +Supplier#000439902|2cY,jzdAt0ABanoxLpxGI6nOgUQxT +Supplier#000439927|4hZyeifOd2w4NaRXx,y99CEp4PTCZGVUUsa57 +Supplier#000439938|xonFzhbDyaiRD b1c9z2QvN1r3i7PN5Vl +Supplier#000439958|8iskG3fvf5TFFjB1F FRLsn0Bxi2 +Supplier#000440081|go2cP80N45i,ZBFoCtCz0siigqASCNIR1R3jG +Supplier#000440145|uztc,WsfAx9iSXVKQ0q5JkviNwBY +Supplier#000440153|xhl,6L2IGxmg +Supplier#000440225|XoOlJXmtFvxC +Supplier#000440620|zg4CdgOlfeYb6Buf2LyBx3uPKdM +Supplier#000440632|uZLSi,uAuN +Supplier#000440646|Cf103ekH6VKvOvOipkcAAlZ,5ROkbzoQY5O +Supplier#000440718|CgiTXFJ93xIuZK241M05Jbe8cVQC +Supplier#000440775|Rl3LP84vYRD1R +Supplier#000440825|8JcEh4rAbqtLDgos1d +Supplier#000440876|mHE0DvnY43wn fb +Supplier#000440880|w7xI PKUjIEtXx5D8edlcKYV2 +Supplier#000440895|XSmOwaPZWe2gQHE4m8kXvOtraiCWKN5gag +Supplier#000440926|algx6M5B77 +Supplier#000441003|5FmcXy26igrj5L,fqM0HKRzKZnMXLW +Supplier#000441088|2D 5XOzglr9uEK +Supplier#000441104|NpTitToYp9rIf80IdxlQ9lp5BW,1,iU5VA +Supplier#000441114|QScACwgqnqAUzLUmtEz,OZqsFaq +Supplier#000441117| sR9f1h7UzzF8zG +Supplier#000441205|1yEdKulAlE5eF,y9eqD +Supplier#000441555|zUadiGWeE0Qtqgc +Supplier#000441645|QpsRpDA5tDG1vBJOyMtXrZHYJ780Jdq2izGcjSlZ +Supplier#000441735|Yn9NOqZNWQvc 7FBVdND8Dp rK8W5PwpPH +Supplier#000441799|9Jg81O,4vwJHep1cF3z89aZlJSzsRb8s +Supplier#000441816|RQ3G4O4OY7qYLKQqDhyibIc4CROG ,lHYHV +Supplier#000441850|Jg0vD5OCYAfSpuppTTp,CN DCoPElgsKWo +Supplier#000441931|rKXiKvXadpB iQh3v +Supplier#000441993|T,rX4hlzsrFrB2C,5HVrZ +Supplier#000442040|hu61tc1UacAiE30YQfgY9CALQMqbAF +Supplier#000442263|TfxthXug6vFxKi mFNZQtEhFX8Wu02,QTTc8hG +Supplier#000442278|SysBeMV8iiG23 pEuOq9CSQ4 +Supplier#000442566|KcDnHZDGYLfmlfmMF2KkpkIAdqg8wEiPfoPKhJ +Supplier#000442612|kAthfP9PKN6y0EFsLXaSgVlps0VP83KvIY21U +Supplier#000442657|Y8q0YDbEgR0DKJc7NMs7Ruwlm2D65FzWW +Supplier#000442829|2LSy cDCu1E +Supplier#000442889|qBHckAyskirb,iSdkkdrKp6i6QlifWQa +Supplier#000442993|VE,zexvoxedPZBwP40VsjNNE34zRnkysPQ3UKNv +Supplier#000443057|avaz9,hZmMFsBY7WEKW1ecHvL1kZdiiWXBj +Supplier#000443182|NP7oS5DSJv9VZhd2LovIzVJsdVoh Pvm +Supplier#000443234|AKwmYJuNLym9yoVcD5K +Supplier#000443245|XZ,YcapEIIbNghJW8GeS NSyJrG0E7 +Supplier#000443248|q9Ko49nh5XLSlictSzI ,GTATvxD9A +Supplier#000443283|ijsfxuzehuop55Z,HccEUDVr22p +Supplier#000443617|roUKtNq,5dDukhwTv +Supplier#000443680|wshuQw8nSw +Supplier#000443729|KivKmBBO2hrGuYSgNu3NKMx9 +Supplier#000443778|bbRB6 6Ns30vpEWGRvzP12 +Supplier#000443783|c0OHES S5OlgN5aOiwgQmXEg1,SARXfZi +Supplier#000443835|lHgMDsiFmwsUgWuwC +Supplier#000443877|PALoLgxt0RRya8O6,7 +Supplier#000443887|zL1GxqXPqFSB 5Gehsg4gXIKUx7I9yuPjCyBX +Supplier#000443941|7n6BmWwxgKV6ehslzTfJ,19cdsyD +Supplier#000444019|Ty3zRlj,SKklLgohHK4oLli86PXd8Frlw7kJ +Supplier#000444043|5HwHcpNpXXh02oquB +Supplier#000444092|rMfO2cKWNvRXCAT0YsuwDdo5t2,y +Supplier#000444184|02yJ1yhWFy92XORfYpq1lP +Supplier#000444294|080YXmTTGSYeoBBn40BDj7VrjtRiV5O5qHfh +Supplier#000444325|v7ktWbrYdfe8IYqafcm2VfwChvHM5t XpYnp6NDZ +Supplier#000444340|OBGTCVHq3mAw7pr3g,2xD7gLn7a3p04Qj +Supplier#000444343|cwdL6aY,EuifoqC8ko +Supplier#000444357|jqMEVdKPJK9 rrMcwOzq6EcFL +Supplier#000444488|LplXHtDuooH9 +Supplier#000444506|uk4KajDrnemRQoGJClA8XQOg5FIru1WRP,uz,3i +Supplier#000444606|bimSgBH0YRdz22gPbGG7skGpuK67,D +Supplier#000444611|QcCaatasXDGpZ7o +Supplier#000444617|uxfvu8fxAuW,d +Supplier#000444715|1CJ9Y4Q9K5wXfZxw0sdyG +Supplier#000444847|LoUTC5SjBejzCEJiNChOaZ6Co +Supplier#000444849|6msO6ViLoKSxTNd7i6rILc1fC3AZ3pfFOBz +Supplier#000444894|Go70Cxnzjf +Supplier#000445019|84uKYyff0YbFWy9A52xPBBaG +Supplier#000445073|Zevqczom00EiaRr76B8HPNfc5l0E7jkQnxW +Supplier#000445167|BwXCEzLk3UoHq0oT3Xxljjuz3SEtFoqwuh +Supplier#000445204|ULcGDbsX DgzdXYQYAafq8gTB +Supplier#000445239| Z6OGNUoIVeQMBAGXfDFYq9PK J8mCY3, +Supplier#000445400|V1WqWgwO3rh1ra4Uv +Supplier#000445456|Nzb3kVb gfEbOe77eTy,Xl5qw325Mx6C +Supplier#000445472|v8w8yValJB6oBUglN1d6xQ7g7i,T +Supplier#000445482|U4MR8UBWhB kAXJ +Supplier#000445496|2l8Q0W1bu0V +Supplier#000445689|Hc3UPkzVRMN2ja +Supplier#000445771|9HG7l7unykI +Supplier#000445840|mBlGdMVaQK,Wf6Ph8j3lRmy +Supplier#000445854|Mmxx35AxZnyTi 2SZqS +Supplier#000445898|0sCsFpuIT03U7 +Supplier#000445945|a,BZmfakLjFhcZP sP9TsDXGq7by,a7QlCN +Supplier#000445956|yVneb3heFGp4w8tj0 tzD9dqD +Supplier#000446038|x41AIWmcXjS8oh WI,pfS +Supplier#000446146|CfiX2Og1rA +Supplier#000446156|6j0Zrl9p0T0w +Supplier#000446195|ENfAqxzXlG28khgBB9XN +Supplier#000446234|aFvasbAV,7q,ULxqdYcN +Supplier#000446295|W9qJgh7 mbEoLAirwp5U 7jIThODS,HWNWG +Supplier#000446316|Yfadd VAZVXXSmbS7 ,zn6dC9Kl1xmQ +Supplier#000446331|ZwfoyC3uicij8j6UD,D9w +Supplier#000446349|zjAuJGGMmxXL6h ZBu78rPbSzlGR0MmX +Supplier#000446437| CggmUf8X7kl7q,AXMWyewsU0nZ +Supplier#000446459|yIRk4B4KG0zo +Supplier#000446470|jREbBd9QqZiT7VSG +Supplier#000446588|BJgjiIyXd0SnYlefd7DDNPCXYSTpZV +Supplier#000446595|K5VU407V53Eq6v4vh0e3OIMEimiNZoF2 +Supplier#000446700|o5SWn2mCZDiWbejIu,tNYyp9yyaIjihcEU +Supplier#000446743|AerVS cl4gUymqxAJCmfmp +Supplier#000446815|XXbsb28L6nCPd8JIfRAK3kn8XvulyTcmXQ02GB +Supplier#000446817|5GncycPNsu5YE rVCE5SF NQHULWOx6eAj +Supplier#000446854|mUgJus,3n7ax8pUQZXbSP4rWzI0g3a2ZDxr,V +Supplier#000446883|pMCQiT2sv,o2UYo9zxdA8wmA2utgTuXOIF7 +Supplier#000446969|6EqYF62xvBD4Jru +Supplier#000446987|bAkMpTzLjCMnuQQjOPVI5 e0O,8 +Supplier#000447097|M31CFAj77H3PCf0l0lw69 +Supplier#000447107|oXTvdCxUyMJMHL3KJPZE4i +Supplier#000447222|k9paxeCthL LCSUFP3FY50 +Supplier#000447249|bBpJWygW3mi1QZwDx ljmVXF5mR,xirMo +Supplier#000447250|ju7LU46CVaQqELAMx5d +Supplier#000447294|QbJKH6CA9D1GZOIUPlfIR4THnQP2V9Wx1XE, +Supplier#000447305|K9CFGeKJf3vf +Supplier#000447320|FYrR2sBsEAjgOlCiZY6ee9MX7QbHdC3v +Supplier#000447367|3pSb8WRk,zN9 +Supplier#000447379|1XCKTly5xyC +Supplier#000447386|vP ZAO6kSj8C71z1MRQVlR31lVKLp9XZR +Supplier#000447466|h6GnrwiWRAuyVbWIIOUQ +Supplier#000447506|LoUAwrGl10 +Supplier#000447544|zpO4xbVVlPpd6xDnO +Supplier#000447695|EwkVpsCawy9PY3If7buHofqTCsUXN +Supplier#000447745|zLCnLSt1abILa7QoBYqI79HB3YneiA +Supplier#000447769|q truhB4NY7UulD1LDzxtrqylS8wa0RzR +Supplier#000447797|z0u5a1XxbyKLoY1FaBMvNs +Supplier#000447815|k6,b0 JiCb4b4CWK1STffZDVstgLtG9cP +Supplier#000447937|qHBlFIRo fn36W +Supplier#000448041|0gAxSVxeYjANHNO70qg79YisABmUQEjJv +Supplier#000448042|PCWijhLkCgLAhW6t +Supplier#000448102|veeQK1h,F1m fc0OdhcffGZXuXNeK +Supplier#000448109|idv0mryr3qUlIPVJCjKCzN 9TQWpsqzhKupB +Supplier#000448217|JpGgHQpLQf6h +Supplier#000448265|JAZRo26 JdojH8,a5mF3Bc cAMu +Supplier#000448312|CZq,vpQL588cnrxLgPBo2 +Supplier#000448333|3NSd2GUUO8AwqFRH4znXFVAWbo7hye +Supplier#000448411|PEZfnH9peAbe0KBuYcz1Mn w33ctKt9D9q +Supplier#000448475|WBXMt3dizCZvx1 +Supplier#000448499|XSV1hOjVbfyoCY0,d +Supplier#000448505|QQgc3RSCq9epVsJQaRFFQWmSpFjXCo +Supplier#000448548|jodEE1WDT4Ddy +Supplier#000448638|HEBgOZafmduZbFa9e2Kc +Supplier#000448671|T407,Bf2A70nfLe yz +Supplier#000448711|EzXRzzIPoNIEBVkljiXER5jFmpm WYiZQ +Supplier#000448728|COoKejDrrZYoSPlgGXYI3l39Crqf +Supplier#000448749|uIs9s1rEiQfkUWO,sP8RMmG66oFC +Supplier#000448752| MLcr2wFsP8s5tjNwt,Vvzd +Supplier#000449042|VyC60zI,V9,pk +Supplier#000449070|LjWxRrl3u75TLY TPnJ +Supplier#000449079|MQ83UUbx6CgU +Supplier#000449152|C2TBbACQ6ev2IFAaDDpML2dX2ih +Supplier#000449205|udU9E1p3fA0yv3k9nqdxC0P59Jnetl3tSDIt +Supplier#000449238|qDIa8BkelQ P3 oDfz +Supplier#000449283|IPPMnw9,BtzNqhE0qhit5N3pEYjlLOFAJH +Supplier#000449307|I2ZbH4iUhWnlVpo5Y,AXn +Supplier#000449355|QSYfcrog1Qe7,PsZG3 +Supplier#000449483|lMYpFOoBH8VaVkTdX9T +Supplier#000449607|gzlsudYsvzKEdIolDbs9a +Supplier#000449613|2t5GyF2eAwsBsae7wNspN5hinfY56ZyIl +Supplier#000449657|dchwWjCv2n9xbXfvBJP45 ZUNN8TsnTQcqwW +Supplier#000449672|doxBWwWu716mtbk3Gl7d2,tc21Jlm +Supplier#000449710|cfnVS1bnH,iRfUq9DTLKuQRBezVlaZSX31ehHz +Supplier#000449728|vQnaS4hwU4vWw +Supplier#000449870|fhalmYCPWeOyDT,s5evMU UGYiO8tjcClN8 +Supplier#000449898|GZ8QliZ49Rmr3U9 +Supplier#000449954|NI,,I97jQ0vhV +Supplier#000449996|kHmCH1niTiE +Supplier#000450030|uXd9HR44ID +Supplier#000450131|oT6PqXw1WE 2Nab9m1rXLkx +Supplier#000450198|zi3JfT8Zx6QVe53CVVgjB2Tv0baMQN0SC06DLuzd +Supplier#000450236|fbsiGgHdASNfxJdDKSsOWq +Supplier#000450321|rkk1ZHY0,bI9a +Supplier#000450335|Z689pnSuLGNitU +Supplier#000450566|hOM05X2gmfmYQfsFp3z4eM8i +Supplier#000450594|XrsPkhkInoFMCYU +Supplier#000450607|2LccJi,sD5QuLk24QK7pZwox +Supplier#000450625|Fy1bf1BR1od5XCeeVXiqNGvUBhCzK4pJuM GNEW +Supplier#000450698|tzP94vwc8KTgFchI8TJjddTn +Supplier#000450732|LIkL2UtVfwcE23OmVhGzBLMH +Supplier#000450860|eTsBJ84MEO9ZQjtWHk26l +Supplier#000450898|toyltaC6T2jXmgrvpQT +Supplier#000451028|B6Sm2,E w1NAfVgtjdkK39OMze +Supplier#000451076|pI5UXt0naP,IWvcloGWl6z4YFNktQbLJXC3 +Supplier#000451119|maSAL6WZTBsPhkZV zj,eYNzDK +Supplier#000451160|s3UUBTYRQH7pPQOWFMhVxz +Supplier#000451178|5P,khUO72xO4fhPCrTdqRntuOPi O3Owa0r +Supplier#000451186|Z0wxB7HxuC R9x1 +Supplier#000451251| uXyqIU0TeXRMPnsSihAxBtMwE +Supplier#000451369|xwj1Hrk1Fakkq0xUjd,N +Supplier#000451382|DIaaofom3mH +Supplier#000451412|9YplCvqajBthNjNc19SEccoxft6Gn62 +Supplier#000451436|mnSCBExkXJiRfNyDWVvUE +Supplier#000451501|SwZqaUwCmN20LyhwPqGXi,kgJbNUS1yFB +Supplier#000451524|Q0Mm TDhxmDW7vXu1Yrh3 +Supplier#000451535|9,kN5mwhAzIY7ohorvjmoEeyohjmP4fvtcfCZ +Supplier#000451627|H1z7dJ g,TXwspHYahfeoRjBbJOJBUdGh +Supplier#000451653|h,3jATlsXLy9RRgBA36Oia9oWNRHd1gaD +Supplier#000451692|1nFUz k5zW6PsaVieTkeFU +Supplier#000451723|pP8G1FkRoCIQIxJTrOcoM0un +Supplier#000451795|ttuSnDr9wE +Supplier#000451842|6Ae4k8SMgyas4m +Supplier#000451853|yBUoF,4UZLTwd,jrZRQXA +Supplier#000452044|85ETcCl3HJzkxwNXqse +Supplier#000452155|g49o0Q9YP395wC7qhDpm6PQu Ox66vbr +Supplier#000452214|gXkSWSbusZWr0WB7RCKhFcO8 +Supplier#000452433|Lyr Njm6YXDkbeh0W +Supplier#000452578|8FkRY4t6G4liXGi8KM hf5h1h39RHz +Supplier#000452606|ple, rCmdn4jbJO +Supplier#000452666|vZ4PTLRT6P9yOXXQEe14RDcKuYWVvXBfqJypb +Supplier#000452686|K4S46qyZqBFDZsRCwF4PBcrSPCW977Fg71D +Supplier#000452832| TXyCoaIybjX,17jOQZtp3Qyx3veq1 +Supplier#000452857|BHkUcVcdFxIrW +Supplier#000452884|1k9tctKETUKyLpc5ZMq0dnCTTDb0Er5JIJ +Supplier#000452956|p7l3UiG9upeT5,XExLwsNjlCuhJZcG +Supplier#000452985|1oiz3UQwJCftENCMvY Agd hdi3mW,7KUrUqg6n +Supplier#000452990|FuSKcK1kiJV,m9bdKDR6ig64RTlv6J07IgF0GcR +Supplier#000453036|PQpa1oL48jSlXoIDWheMFI4 +Supplier#000453079|Zf,RG40ZrQ484S +Supplier#000453130|WD01vAtWe2rCmxuoAdV8Uji5KD1Ebl8uH2 7ku +Supplier#000453187|0Sletgwxexehv0ISf jrQK3kKFG8 X9 +Supplier#000453254|nFf1Drj0TuOmIn56RY7l,c92vnSOZ +Supplier#000453270|GDL,5w09YFDGz8ucjmipvGbuxSxbdY5LFe +Supplier#000453290|vLww7iHsVFk +Supplier#000453345|QY0q9BXHOeyYswGZ4 lnYDnQvNK6jTZBKg +Supplier#000453363|l7b6KJ,PgZM8b +Supplier#000453384|tnz3uD1CXRqzvHBegciJNJVfGwD +Supplier#000453411|VitACzehLtG96XJwrnOCa2T +Supplier#000453546|Mcf3rmfycKyZJO4TvEQIucQ zh +Supplier#000453560|AhCtdaCUPrvKs5xMUVZtnLouR5r7SAJ +Supplier#000453700|MizaliIlV56uBqrUMEHBr2Lf +Supplier#000453783|CdzBncIbEcg481jMHk +Supplier#000453801|3FIz,eXZFWYVURkYjE ucVUsEFYy +Supplier#000453836|DIF00HBQgK5h6IJSnL85mVbn +Supplier#000453847|0cLstJjyNEMFEfmvnu7DwzHS2oJulL67DSoGG +Supplier#000453861|Zm,n2YWF,ElBC fKP2rp6qE2dIW58N g5eG +Supplier#000454077|,bPQb,DUrx +Supplier#000454149| f5r9 dXYBcXgfkQsJEPke +Supplier#000454188|jPGLO4nR2RCdBhBBe3anFcJlgqe0nTM +Supplier#000454225|W,73l8a ECxfymkagrVEobOaJEIO5mCqpf +Supplier#000454227|Vnb dbsOBn8YG +Supplier#000454239|hl0 OsgkjPFnHHXrmXSXm9B974,v0ETaIf2JX2vF +Supplier#000454241|EBqyVoktTzySkr,9775xFjCe5k5rP0bciP6HFV +Supplier#000454264|RMwL51G3L6L nkR,GSVu8L2 +Supplier#000454301|DYNlcHHlVK7Ubo15w2rR0PUIRgs8E +Supplier#000454374|5XQFybcQVw +Supplier#000454609|bagy0Ofv1zW +Supplier#000454659|x9hU1,Xp6BSlx9 +Supplier#000454916|DofFYTJdJvdQhoxpIGNJyzwP,ETkhR +Supplier#000455034|aEgcf zFBsCYxMI +Supplier#000455057|AA1qYxlQmYieEgSEdEUOtPZQBFZ34FcxZLg0X +Supplier#000455070|7yK17,IDEq4N44HQiT3yuArPDl0 +Supplier#000455316|zuuxDMfGaKDIVysXt D +Supplier#000455390|flYRfZUl EnxIP6kLlu +Supplier#000455491|obDW Hq6PBKGd1X52sLymRBhuPccMxhPWVXmps +Supplier#000455529|Ty0Wndh7c9M,R8c4UAyFIwIcyTiF3TsB6o9j +Supplier#000455580|W7x5yTsDYmyDU9jk +Supplier#000455625|NQkKtuqT9SKLNY3 +Supplier#000455645|mh6SxTIQfcgByzjSrGiq +Supplier#000455646|jj7KbFVsB1TJKO +Supplier#000455686|mM4ERwTWzsppQ2xlWxkKTD pTQYG 3WOWln9Z +Supplier#000455744|ydttm6dfyhW +Supplier#000455827|N4lKAcSt7LlmbOTlpmE +Supplier#000455944|t7ZXemKnsIDnjuQoV LDzbxIH3Lw +Supplier#000455945|rgKetJx4s9HdQDFBTwJ83lJY +Supplier#000456022|S3y8NGaCDu3x 5W3k TOhae8cziHZ2sGVwt +Supplier#000456040|HYIIbR5z1jWekBWyAubbEqidOmMlvBnni +Supplier#000456159|7mp5LVFZ2p2sTntudaBFZrq3bLgEjIwdMT1Gli +Supplier#000456191| 2hSqmRVrCCvoWk0EntRJJhGq4H6YqK5uC +Supplier#000456243|Z3a019kqigUDvXiVVIocLJ83KMvJEw9 +Supplier#000456320|ginIHu3WYXnTdvE8QcR47llzQsiuRhGr +Supplier#000456358|7XUh1coq65558Um0jJTOL +Supplier#000456469|loAAOXvrWipHwNPy5GCX5wWz +Supplier#000456526|5h43qvIxlrZvL7NCUshjjotXbo1q7N +Supplier#000456587|UPDNyqKs,vNpDkfUTaZ +Supplier#000456668|8LbQa6rbxkLJTZ +Supplier#000456712|ehN3yIXa6gLMdA4EY +Supplier#000456715|GoxFLmGpAJZY6VvzEZWk +Supplier#000456835|AiQ 9v9 BCs0Vu0mYajP0bSymzuH6tmT +Supplier#000456840|qsINseJ1X8SLgDbGmhaVx +Supplier#000456930|B78fjWR4tE0lPBibpSSfhTOOndEYXBQ +Supplier#000456954|gO6t5fYZ ubL5h2FwKYlF +Supplier#000457133|fUNe0CiknIQs h6uNgWKB6SQOPiDp +Supplier#000457225|SwiW2xhOVvBNY +Supplier#000457321|ZMaNBFzbI02H +Supplier#000457366|tiqklqE 3zLNRc,ewd99if8UhZCCyMJ +Supplier#000457405|lNsRnJpA1sQW75 kAMBY +Supplier#000457461|uO65UH3VYG1Nvpe928E9 +Supplier#000457598|menTR0 Uqbrjt256Apt80ssDwga04toG46 +Supplier#000457669|S838cpXbLlSQwgxK2xwSPUo5Xg5VeGL8XRnc +Supplier#000457747|MrC98AMHilengHxYA4YHpic1qVrP1K80gM6 +Supplier#000457753|huZgIev,55izx +Supplier#000457803|VgW4VvBmCzgznwOJGI8Ug +Supplier#000457906|BcFm1WhhzAjIXehWWrDHPxo0Kr2 +Supplier#000457950|9N32SoaBKYBBNeuu6TaZ8OJiq7OR,H +Supplier#000458007|D8 BkEFlrrgIMmDynznQwi +Supplier#000458010|AFdvVRlHYqeft7,1C9f +Supplier#000458135|tDOrQB88kppFb P5SFN98m +Supplier#000458146|76Eg YA6oeZmrGr HItE0 +Supplier#000458166|SBJ KrqybmYl9VKtDAGe6U Coa9e9 +Supplier#000458233|7fEG0FTZp5,GihF74u2z9iaAtuU +Supplier#000458274|BZgEIOaCEKQT5IoishAEhgr7WXsg6rtbya +Supplier#000458304|jAp67sNjDxnvA wQjfMCcozGOlxBnNs +Supplier#000458311|oLNZ4RTY26jUqaQYs0t3guOxRCGekC +Supplier#000458477|hv,,oEsHUcLLn73Xm5M4EOcRQt2ftHTDeoMrKh +Supplier#000458497|YUBbSoOZl96VC +Supplier#000458655|A3QuGL20,HyCj ke,PraXa6ThfSysyOao7Rq9,rb +Supplier#000458674|wZl9vp5hFeC9xHYlv +Supplier#000458703|4czbXUER5YoTRjcT,eMNiOEpvpXqL9gtEOaWF0c +Supplier#000458891|hdzgh4iOdh3,em,6 +Supplier#000458980|,,6tSaGepY3dEsH1Fy8m1q85thTDyJ +Supplier#000459001|yrlAotOOuPmLeR6tKUsba0t,inHmp +Supplier#000459037|zcY9HepIAFV2WOk2TTmf2T4N3Zsm +Supplier#000459053|p70yL6tocMT +Supplier#000459103|BCkc4LPEV,oHtY33uN02gIN5tK3c7skAEK +Supplier#000459168|0DhX,vuzTI1YrHuTjS +Supplier#000459259|lWwWFSvY3OAgYalZfd +Supplier#000459420|Ra99sXC17A0dyWn6H4jjf3oPQS9Ynd +Supplier#000459665|ZqHuLfOvzcc5aPYsks3cNtW1shNcCZ7i +Supplier#000459682|ikPs8CnXJ7Dis +Supplier#000459833|bLcqgGY0bgo84FX4jQya +Supplier#000459865|lCbKLNv6jRSN5fieN +Supplier#000459880|8PehbjWs9qeL +Supplier#000459927|9h7UoR8EzZzwl +Supplier#000459989|IVOupHOYjFW1kcx3M5wDWtka3s +Supplier#000460006|QbABCRv8K4WF wQJp5ZXr,DXjoPCLpu,GDK +Supplier#000460012|Ig3lJMWqbqSU7eIBVJYnk2uGkV,Oszo mrzjzG3 +Supplier#000460078|IWf5gJaariQr5bq,Lf0lNubHOx62Wm8OY Drg +Supplier#000460080|8Oe2obGkXMu,opolh4NO2c ,wV k +Supplier#000460124|n4TFEOc4FVJw0QXQcip4kWBVbDpy +Supplier#000460149|nO8Ch91DTX +Supplier#000460305|7q7ItdxqPN +Supplier#000460326|aapMavxX5MVW0pghxR4p +Supplier#000460341|Q8hB9iICuwVnCd9fjSum +Supplier#000460376|Qv0qdONBTDY2CjEVQUNsJgZOW +Supplier#000460423|ssmcebq6qdxt591s7aU +Supplier#000460501|GGC0nqoZPzmtXEH1o,3WNCYS +Supplier#000460508|pt43ELC58Aq +Supplier#000460520|Z3nnEXBmEQW7fLZHnGjI44tyanfoZt +Supplier#000460565|HRdkebVk2vGxW0sZvagTv9lQsmFL4UwH +Supplier#000460592|HMg3bvLDF5wDkQ,MMrYb +Supplier#000460604|S5sqcib97OQcOVoqAJrUZ7ABwZLivOqjWTux +Supplier#000460677|cyY0G luv9qPLnDFFjlTuNF +Supplier#000460735|rQmK38dCl923DFa +Supplier#000460804|A49psOaiteKPheHnYLFpZq4vIpL92 +Supplier#000460830|LnHRofMhZ2yzqHLWsHMv9bwgOEhfMN9ezy +Supplier#000460846|guUGpsLS1nCWjpHRpc1Gacow6KByLw97IfGw +Supplier#000460875|eW9,t3nv7PL,uXq +Supplier#000461000|gjKUceEDPeXUwtwaZfHBu3dmJnqbZ8J +Supplier#000461010|EQuAN4ds5hNWH +Supplier#000461211|pytREpHQ6tgovZJ8 +Supplier#000461231|shXfurhatHF BPtMeAY +Supplier#000461430|Hs0faOWIZFzEQgXhAQTEjEe,cen,uL01H +Supplier#000461524|hu NcBs88P6Fey3doiShTAkWdHMB +Supplier#000461569|dwWvbwd63JhL6kKK LU8U4,2T1bx2oeDmlYF +Supplier#000461606|FO,8jS1nHvyj +Supplier#000461613|th5Ex,uICGcfCp9BG5fA +Supplier#000461645|nzvGfvg1GBechnGOczzGsZRL4QP6QV +Supplier#000461695|NPJa0PRBe2gm4Z9wrMCaB9KAii011P, PJR +Supplier#000461769|x97wtDQkQrNnhOgXIXm8IT3z +Supplier#000461859|AGkuc8r09KUQmeBaqzg4Q0F2n d0CVbxG +Supplier#000461873|LriaccOQJxPsoNjA7UNjtMS +Supplier#000461874|m6w,q5R 6q +Supplier#000461881|7AqRJoM8ZjU1xMyoFVoUnVflZUID5Z7jI7VwaS8Z +Supplier#000461948|6DhyPsGU2lfMZTHfRPGCzJf3BHVbnuqVzV +Supplier#000462005|PAP,hCvRbfVpCjMOR7hm4 +Supplier#000462098|wu87q4r237c9jMJ hlqk7NU8fDJoZFyy +Supplier#000462131|gExN ySqxgCzImToa lkEhzbGT1 +Supplier#000462137|KoqMxWzm8S3cQsNDiNjMRJXW2WHM +Supplier#000462139|Ep8R3SA5oXHdt phiROPIqTPrwoIbsD +Supplier#000462234|H6jIz4m2Pc1iNjQiQsUun9I219UPtI4bdIO +Supplier#000462257|ptCNyVqqoqMJi21ibU41uE33H +Supplier#000462292|OJG7zruhIR,Sf8GbtV03cY4 +Supplier#000462382|wQYwWVzLeeyMAN5UBPt +Supplier#000462384|5SCqqfTMp5xUDUPXTrzcCM7MIYp +Supplier#000462438|773myJ51bcjf7bxXd5qIJ ggs,ArLMMHnuA38L +Supplier#000462656|43Hr6XvqchQDU2jGwjJufWE5ig53 +Supplier#000462677|BltoT8Al0vNqbzhMCDbISkBoaPcLT1SN +Supplier#000462682|76U4gzXQIPu +Supplier#000462709|4uv9k5piC8J1Te5Mxbr5,lgL NuZjXwr9Yxu +Supplier#000462747|QC69xij6Ft7sPsqQG4f6 +Supplier#000462792|ddhc6CtyV,cOhLA4AsiEslcfG48lLy3tWW1O29Vw +Supplier#000462860|pRsheP,hK8V5fvTyUrPiDUza8rbPpdgZAlRe +Supplier#000462941|9GuEPvPkRTQLBl25OwRSXr9vcb38C7C +Supplier#000463039|aPGjtxIgnsBNzAwkvZpC2eiEmGtzKOnM +Supplier#000463097|nLUrAPPbs2,bsASK2j +Supplier#000463167|WOQTjLOmWONHMyDEhDE4 +Supplier#000463178|cTRerbfuIqObAvrNU,t2Q1xTjpMEEu7rF +Supplier#000463234|DxzyBKxmvX3YTkdaVCTDhKsTIO +Supplier#000463316|POJuI,UEmx8nYm +Supplier#000463321|Qr7x8MctCLBW4A97f0NCT +Supplier#000463358|5xoDsNynZLXsLoabE1sGPw OcglCUVUo18 +Supplier#000463371|4Nwa18ZXBKz8wlu tAEwWrSH8OP5i +Supplier#000463568|0ATpqbpYo3Futyfu7uGyru +Supplier#000463770|juybGuG5azqrrpJ2DWMn0mexU0gQY3s +Supplier#000463817|kND2KH2R tNLZGRZd0Knu5lyThYgf,6Ya +Supplier#000463837|JIshRoVGbwERKTsz7UuVkLJ +Supplier#000463873|Q2nbfrbDgLM5jCuF5g6yRx0GnMvVnvy0K21R +Supplier#000463908|aa4do3Y9,eT01fG +Supplier#000463933|39rgoB A71sUHrKGczGjTrn +Supplier#000463938|caup,on7,UAmdCIrKCzjT +Supplier#000463954|AVl0ITBbWPIDfAxk6bIWGDDYjtw +Supplier#000464026|01ZT9BZVAf9d +Supplier#000464042| bFPn7f5M5p65msHck +Supplier#000464046|,SG90H1WwKBJWHJZsaUpUiZCNUxmovq3x4P +Supplier#000464086|YozPTKKKULh7 EcCuNaSX46eNUiZtjZxli yJe +Supplier#000464199|Ys6zs3lwO5KiSJooCpVVv8Q +Supplier#000464341|,,5LkhCDSxR +Supplier#000464461|,0,JkeeuBZh2HaEPi8NQ146w,cDco5EQfslhh +Supplier#000464555|Bx0NlQJRC,8B7mWDTJ ITIpk9fwuIcxwAAV +Supplier#000464573|WfdZPWZj9XERPuMOMX9m +Supplier#000464592|MkkFi9Rp,Bu5qskxRk6L6VWddMolK6,XspT6Tk2 +Supplier#000464659|chy5kxfgFUqpsf7H9kFDyo,h0Bc5sPKVKoVr4G +Supplier#000464679|iSpQjF05rINNL0yfJDdRFn91S +Supplier#000464754|RRFCja7ECmw1nt4E3b9VhWFRZkJO27Dk7tNc,XIW +Supplier#000464803|zh5hOPF60bgkln8daWuCeLS1F46roh6Dl +Supplier#000464815|61tJtXed6i,mgYr3S6jO4uzJuNJJ jDP,GiIql5 +Supplier#000464959|oFH64mgJVViV79jfPqX0okdBVRyzO7V +Supplier#000465009|z7,ZLPsoMHRVUbsJPcnV4nHDyOAvpHaf0Sqw5f +Supplier#000465121|RjliDzsfqB +Supplier#000465124|SZeu1QzvLFkeYK +Supplier#000465208|FVf6fSdSYMlgsKHAm5AuAgKwsmyIqpzOmHQvqXoj +Supplier#000465229|HR4giz5TFW3DXJTewVNLEw xa 4TVQ +Supplier#000465313|G tmf0WbLjxAOajKC3MVdwUIDt9UnILWywt6 +Supplier#000465432|YnZePE28u8nJIhvbqFZ Td2 +Supplier#000465466|vFLXQT DfCDZHDVZQQWm8vNTX6JfiA9 +Supplier#000465554| oVeBGCb6mQYxlMPhSad +Supplier#000465559|lg9UfprvIC0nloruXdhj7l5A +Supplier#000465616|iIVMqV8aLF3fFRcwVndBU +Supplier#000465627|eu6EJeeGyGSn 4vgHRGDxPxCkIODyo4 aLz +Supplier#000465799|H4xYwr2nTVzX0FBXtvuzm +Supplier#000465800|tloITkFIhl9p5Ju +Supplier#000465808|fOTUHh4oOl5 +Supplier#000465838|2A92cV8sx8Q8C 5Jx,xhjuNMQVYOYAfo7qby +Supplier#000465856|WJds44htqdYcHWuDBZkd1Mj4031KyGakYDJ +Supplier#000465923|rHvNIH7exCc8835ZkwbT2p mllbHJpAHjjPRj +Supplier#000465963|n4wjQoxqak,eOVVhWA CyZKzVaei +Supplier#000466242|b1GNpWC3,9sbEgek3W +Supplier#000466286|bMk2CNfZrjEZ SmdO0gtWm72o knqjLxp +Supplier#000466432|1czZZPrFasuJJdPqOJ +Supplier#000466464|9TwXb,rSt0E1o9zp1q4O0Q dag +Supplier#000466546|2gcFY1,9SiC96viH668 Wm7W9CSm93 +Supplier#000466599|ULhlTC,1Hr jD,7EBGMmI7MMg9wwqYupqdX7kqfB +Supplier#000466605|gXg11QfZ7OvjNGNTpsC8OifkJ6JiX +Supplier#000466665|nfZzfX0PIKtJzRCrjYvDRIVrwt2 +Supplier#000466687|6lz8uNrWQnooYajgMeYyMGF +Supplier#000466727|J PC2IPovCKEWKzi2gq0799EIVF +Supplier#000466814|t709D1zBYjS7TlmFIq5bl7cFWc +Supplier#000466823|Zcj7eKaO3vnX8NubWza1588wXuo5Roz +Supplier#000466847|7ocmUefjcOze3gzYk ,bMSVsyRJdDorp9JDj +Supplier#000466927| mi4e6DAK7Ri62yJD,2lxRwl53vcBkoVKoVI +Supplier#000466945|cPUKAL8US6E6GY,x,w +Supplier#000466989|Hz6SGOh7rjWfjkQlXWaBq0z32nO1 +Supplier#000467054|Q6RCqe2ZMldn +Supplier#000467133|zk1 BK5ZmYQVnbr3HqR7f +Supplier#000467183|yA,FwK6qwVZryCko x4 +Supplier#000467214|41Iph8ANXPP7S68kU Q1gV +Supplier#000467252|Ky7UZGAPG94jh,iHECnANMSI +Supplier#000467345|OCYwhkEwmCWj2n86XYvph3O2q6ux +Supplier#000467401|wbrg9vjEhTmAYQxQUq,xlmbNlNkn2H7PlWw +Supplier#000467404|T5EP07V7j0b8K1uC1e,p5u9XD27Wqb +Supplier#000467405|kKrLLdhC4,DMq k EuOCU1TQ,1BXct +Supplier#000467415|,j3qgmFSrEJfkRlRAHZFoz9 +Supplier#000467442|7e3qd4KL3PzMqO7lJ9 +Supplier#000467446|8M7f,CIS0sfmGBDsgt15GR9F1BpP1Arp +Supplier#000467482|pIPsAng,lPIR mV8rrDZGlPUFeCDvQiWky6o1sA +Supplier#000467533|0JtdBpgsSpjaltJUy4wo0pC9e1Hm7,p,4n +Supplier#000467575|jm5Kla4zA,RzsrtAUbEi6d0PYuxLxzamBdR +Supplier#000467733|DkOyI7QLje +Supplier#000467860|2R4AythcrRD9,OuU +Supplier#000467868| H4hWyrkD00,9dsbm2U2DD +Supplier#000467995|0t4NPBqvK8531zKUViDknXE0yN1G6qlFz +Supplier#000468107|hQcVeXxT,l,3rmWtiSsYKWgWBO6VrlnFhTjO +Supplier#000468171|3 v1mk0R7ycadSU1cLwgN,Ae +Supplier#000468242|2ZXkwy17nuk9BQ6dMnP LrYdQKa60Az8Jj +Supplier#000468263|k6asj4m0w787 VAFjcxRsF,B6WKzoFV5,jnbND +Supplier#000468357|9KfxiuaAGoe2zHspAs RvWyeta9RRm, +Supplier#000468372|Es3zTjaquYH18DXw9SjdOdw +Supplier#000468446|stDEx6Eb0XLxmMj7LWi5 +Supplier#000468486|Xumnr0qphhKsYBK +Supplier#000468758|QtbC2Yh8PZ2G FG6Sz4U +Supplier#000468833|8MmK0pIZ3kpE29xeD +Supplier#000468860|B02Ewr1IeSLaihRUQ8VPiT1Df1vz5po +Supplier#000468937|im56GoEvBaGRH03Gv +Supplier#000468968|5l,kbAJV2QGBxchNcQcLm1MBUUMrjO,oc PfPR +Supplier#000469033|m8uUpR1 n3P +Supplier#000469082|hFSoP9501KXu7XKV0fhkeHUYULafUJLBjZTs, +Supplier#000469090|PunuUVywDlJpKV0e4dR1kXex1BJ2rZx0uEKa, +Supplier#000469109|o pTggYv2bHegmYZ550v +Supplier#000469169|wczkO6kGBpbDFTWSuv2usZzpwQL RoA +Supplier#000469264|raydqyMx6oa9nfqeqD6TX +Supplier#000469308|p4GvxY5fC4Dv HrwYKzlJa08vcU1 J +Supplier#000469400|I,zSWfYKdXZHYHZJhL,hgK,uYUgjPmznUJ0QEmrr +Supplier#000469472|0v,X4t6D3Iq +Supplier#000469509|UAKWlJ88fXVBIxDNv7gICzJwzCvayCbfRMXpecq +Supplier#000469586|AiXk,MSR koiM5rdkhi8VNg1RufHx5Wtk +Supplier#000469607|p9EvKZD Ju8P5ooTiXuuZM3HfYLSkWcws0B +Supplier#000469615|YDbUQKpMvWI,uBkHHGl6Pz 6DYZUFlWP5xR6Ag1 +Supplier#000469670|sB5NFQqNs7TBAXoCN6TeiZk,KrbM +Supplier#000469759|tmkHrNlnkjqDrY8emgzXL +Supplier#000469841|7UWIiF3jbtL9DU1tzqv4TtkRlgdPTGN +Supplier#000469867|gNn0H2yeBlxCbNE8 U8UqE15 +Supplier#000470006|dYF2DoRMulH4,P54eFvtgXl8AWp2VMmWBd0Q +Supplier#000470018|L57z6GdSqJKUFp +Supplier#000470045|FYXn2tAzawYC37PoNP8ElksucpLuueWi +Supplier#000470098|a4hogH,qEkuEdL9Bs7gkIDBjk5Gb7Dl0vaReYikW +Supplier#000470108|IAH8yLl Qp Deq2TaZTQHBre4uQcOEmNLK49U +Supplier#000470156|V94452H7vJAwYrJ7SUQLMRVIr1V6WSEiM +Supplier#000470310|WoJhJcgmILzBTJkSrji YiVI2 +Supplier#000470321|,ncz6QJJ64JDbq31fNAgXP7GNQzykqjEK +Supplier#000470368|yqunffR9PtCt46Gb5YY6jtrOS4rHK +Supplier#000470429| spaFs8twgWi +Supplier#000470467|2MXwWD1PQ9 3nMis9EtwZtLw8fmeoi9BOvn,TC +Supplier#000470491|g8KX3aIxX28zpS +Supplier#000470501|KSGcy6xXkManqwOMHTF4s1PfqVlBBJY +Supplier#000470510|hH4tK198WWzwUm VhjoU +Supplier#000470620|ZGBayTHAQe 4H,qk1zebx5LepbkWQLVTKGxscaI +Supplier#000470645|F1GFChh39SNWJUEKwokTbaZLL3R jcoFKLDgoyPo +Supplier#000470665|8y xFrY01mCF2z +Supplier#000470797|ZSzSs0R,I2T20pY4ZPqL5OpclxhQaH2feHgtT +Supplier#000470921|wjCWq3OPet6ocbw +Supplier#000470946|TflQBNaYu,1muhqwmDSylT +Supplier#000470974|pxop4zTFRA +Supplier#000470985|Mmch0IxL3zEWAXKFMk +Supplier#000471039|ZXRj1u0546JiZZoixBo174L +Supplier#000471065|89bNUJddcCKZgyRxocp +Supplier#000471112|Nuupa6QCjDEgG0UgSywwsdsz2BX +Supplier#000471135|624om z2b9Ll9cNenLDjP5yPO05B DfmH +Supplier#000471188|zbdDY4mnt99bAtZDDida +Supplier#000471233|zWMVGK1gepohTiIRluSTTfZ0LDtX +Supplier#000471348|mANC5X,HkkgfbQ8b8kq +Supplier#000471501|wTkbh224pQ4cQM8 +Supplier#000471554|lVnk4FEmj2kp +Supplier#000471578|XoaXsfOtcWAxWA6ocMNibpEkiB0k2HwlEkj9JdOi +Supplier#000471592|pvCySvjDLzgWlDS +Supplier#000471619|uJODgqFLCc2KistWQ,WLmYFVr,omCchyWDMc +Supplier#000471646|mQGQTks9aqa1IQunDb1 +Supplier#000471689|97fptN8tfe,yKHXWae +Supplier#000471775|3Y4RkUcZe5MqILuhXiC +Supplier#000471973|uu9ouBmxwnH8Smt2nbEu +Supplier#000471985|gWJh, DbV9 tb5e8U25NCaEVatxzgJTDEwYk8Km +Supplier#000472021|YIHcpbAqOlroo9 +Supplier#000472050|QBk5gi9xBAqBfaBs7N6cUy,i +Supplier#000472061|iq7x5iT6xW4UClO4RYuO4Z139,uhVVzJz +Supplier#000472120|EUNFhey,sYVbSL8D1qHn +Supplier#000472126|fNvi4X91plsnpZsPTsS5JGb3A297MB3,naGG +Supplier#000472166|AHhFMKhldl9U +Supplier#000472243|hhEjWl4UVzNOywZ +Supplier#000472368|2wvHKoio4drS16UUb5kuWzRtG8PkzHhX5K +Supplier#000472610|DuaIHpUOq8ODB +Supplier#000472621|TaWXpnIAmeMjI8eS5yNgYgMm6xjtz +Supplier#000472633|V ugS1LMd8tCT3qsE39NWuTsDfJ3QT2tB Q8Bj +Supplier#000472752|RjSdmNVZSiva1HGPKGAPTKs3k 7zNlXJp dIIS +Supplier#000472771|ZKtmAIizuJ5a86pyqf +Supplier#000472795|cajlMxVpqg5lob61 9ym9PjYx9IyuG,N,Gxw3 +Supplier#000472931|MWum5QbxljhRGYSbtU5DY5tO Gx7t +Supplier#000473108| 8qL0vCZuDXgPdvV,eoA1AMa,wJOxBRCWmTy +Supplier#000473120|eLP9ooxAXWVzzxzywI11P +Supplier#000473221|qeGpVF5mBH6PDN9KC8XgHdYWvDyo +Supplier#000473225|lsvTAxs99mybwfXk9R +Supplier#000473226|U1Qanhf4HsdP5dTyTjNQ4n +Supplier#000473388|7A3Hrod9weoSnirBSfUQ2e +Supplier#000473427|zR62O1awlJ +Supplier#000473446|OWIMRtZOlVnEn4 +Supplier#000473466| nR1X6FCH9zxvy iUz4uY +Supplier#000473490|JPgkPFa8eQ5cF2hkrclhK4pNkA0ImYJQR5l +Supplier#000473582|h7ZojsHDv2vQKS1Jz6Om +Supplier#000473597|DcRG3fCKAKMQEVwHtE1bKCQKt +Supplier#000473616|tgt4mXscvH +Supplier#000473621|TuxdfDBQjDoDQxMfs +Supplier#000473636|wvuAACpzFkaWqRNqCBoMt5V4PPL +Supplier#000473669|C5KabZuHjLciX642pe1WB +Supplier#000473709|9Ek24462WYu38zp0O9o +Supplier#000473755|TUurdZ,NgHU +Supplier#000473932|BMIIizoWfzEnHOGSEQ8kQ +Supplier#000474012|hAIjS88pCpJ CSSYxvUJoVe7XgO7tf +Supplier#000474072|ajoVGb1g3LAlCzAUSmKGMRNvxT +Supplier#000474092|BCfaZ,JFbPsdq3 l1 +Supplier#000474103|iJ4J508oq6t8vQThHB2BIQQZQbGGH9BEm +Supplier#000474146|rK2rWnlQHVs3ZEjH +Supplier#000474233|XeEcHf9jwHstv3mCkJVJ1JCq,IaCPC +Supplier#000474381|nz87NPj,mK9xKbZn +Supplier#000474437|F gjQXZbAk5H,IMmZjLAaksdNqTP6 +Supplier#000474459|fZRf7kCjIlJxUUHaj7NoXpTqggYzi3vWEw,vf8zo +Supplier#000474492|hcJ0UDXqyHL7 +Supplier#000474508|YMkaxdebnudR,3oB4RO1SqLXlRhwf61 +Supplier#000474592|t8s0ZcVOrA7NRsFm +Supplier#000474684|GBpguACYO 4MAV +Supplier#000474694|IUdEvmpI11wyqTCDmt1gf3x3K,Wrs4wBAH7BL +Supplier#000474797|vibKUm1AYjnx45g00lBz29PkBRVL8 25JBUI9K +Supplier#000474826|dNhC,rRoKz5UZBMPQ0eP8pSZbtsC4F,pyiyKQm9N +Supplier#000474841|oyrIfRHwqzS z17eUBAEa ,8 +Supplier#000474859|oJTtX,vurcUNxB37uWPVgXzIxemB +Supplier#000474996|kZmcSrC7Aen12OQoIPnHYnWi XxiBBL +Supplier#000475160|3Kce,yZoNEsDeYKLRwdT FbK Cypw +Supplier#000475319|QGQE83Y8hzbCo6FojqENyGnVoQwEw8LfHQQIPtRB +Supplier#000475334|h qTCbZF8g7vKclLija599zgk34RX52Xw +Supplier#000475365|62vMJWoyc5CTZ +Supplier#000475460|vWk0Wg6lTivVsH6DL2t3tvK,,YWJgX7f6meHkF +Supplier#000475471|dBID oJeu,9BTHrC +Supplier#000475554|7bkMRXeQDgHgBOiHXF4Hy FFZitxhR +Supplier#000475645|VeFWpRpOf2PW944lwXcvPFeA0TZcKL +Supplier#000475693|3LHXRzk,bZdRLxZwjJykXA5JFwa +Supplier#000475709|ViOkd,rHFhDxEWymq0muF576AH vKCEOu +Supplier#000475767|vDX5UltKQ8W7,1pCdXCoiKqQwlzS0H6VvX +Supplier#000475839|OD44MKdSt tXTeuHxcco +Supplier#000475843|1F0KHo8rlIXRS7lUMXt6j0k4 +Supplier#000475940|urs9slwP8PLlnkT6CkYGQNCKPPGoW5RLpf +Supplier#000475948|KpC7sD2qXjB2Fq +Supplier#000475951|o6jjb7zMXT6TXSvmPMjuUZG,ra +Supplier#000476046|oTs2TBpqJbd +Supplier#000476082|pJnUVnzr5LZiB6yKt0ONad +Supplier#000476119|VQFU8B NxwcYFC9mMH1hEJkklJX fc9 +Supplier#000476151| ctmYO,fdkQmYzzz +Supplier#000476208|Az3aH9 QG46 +Supplier#000476287|4o9 qXTeqaVEaXJ +Supplier#000476348|LOtKSVS4Yhu8TaZ81Xqqol +Supplier#000476576|rUU0BsKn S4kHmLE9afnFtFNdTsi +Supplier#000476683|ufIv ttXx2aOscwsc1v +Supplier#000476736|1XOrn,to 8h +Supplier#000476867|2trwS6FB9ASpU6YcWUcuhaC,ero +Supplier#000476975|tvsgeepaF0 +Supplier#000477075|c81VTn,gZbTcMvc4zJMFc7WRDsSvtK +Supplier#000477123|YAq K4rD3443tHlXWf0dyC7pXWgyvD19bvMseLBM +Supplier#000477126|c,nKuGFl4GStXl0xq7V2op6M +Supplier#000477130|Cr3vNl69ZT,Hw7 +Supplier#000477146|vad37F ZQqF8d3l5XuJXD1QZiCp0nMlU8Fghv96 +Supplier#000477244|Dql3tiY5Im +Supplier#000477250|urjcwkAj2,PG +Supplier#000477270|FWX20Himf7FK5CfWxDlypjA6vmdaJUQ +Supplier#000477271|NayeNxSZJ6W8A,roSaNl +Supplier#000477286|325uVNpuWLRY5IiApRU,E6UXLJw2 +Supplier#000477344|OzHNpjuKjg2MYnLtCotAQ0 G73JlZ08rMU +Supplier#000477354|EAN3Rc ZptXakYgFT6Xl +Supplier#000477433|,QxAQlxEqiASKdk1,HlBhJpodPd5b3c +Supplier#000477503|X,0g4AMoR93 +Supplier#000477510| fUP5U2B 5ai13dau96kD0hx +Supplier#000477516|vI4OHO36qo +Supplier#000477607| gEy4zFZ0B +Supplier#000477657|rDynT6ZB7JhTYagQs50L5 +Supplier#000477684|FwwwcgfwUHSe61M5NEbnBJu9QwIx ci8Pgcrb +Supplier#000477866|IVl4OvGJnUUixz6v7FXp8jko84GFVErYjsI +Supplier#000477893|Vz4LQW5QYyHgC1rgagI4IXQJ7Awqpudm 0 6Y +Supplier#000477991|,tnJzGk4lA5Tjy,IJKhbz2id +Supplier#000478042|IE3Rioi,TMi6ROHUXH3zYCIhxKbq NHe +Supplier#000478194|F1Oqo,MVdA3Cv7Ffr8ZldIDmKolVrxem4 +Supplier#000478219|MUgJNWqOojJzzCmKRWFIle cBtZMXIfjbDPqSGK +Supplier#000478259|gHj,Kw3dcqy1 +Supplier#000478268|a3jJTuGzc6,vHIb +Supplier#000478310|XCqndisLg0OZkxLWEVc0F8p,, +Supplier#000478314|gVGpV SfqKdL9YlYiicJfONosGAK4OiGhIyue0Y +Supplier#000478515|cgdLG5pnD0l +Supplier#000478547|KorGMS70A3a7i3FnEm94Py9qP +Supplier#000478578|nVmuGwaWiMX16KwJRCoKfbkaG,GlTx +Supplier#000478757|eAbMppPro2rptMuA00ve lqWJd1m1PYFpYc +Supplier#000478790|WOBtpc,dWIy6emqM0mh1M +Supplier#000478820|jMSX1TWPpov qsB4rB5L6qeI +Supplier#000478828|e7Zv6aZrLQHAz131cZDdBR5z2oV3mdjjptshwtvG +Supplier#000478850|4wf8rpQKuhpvLzxoB6 +Supplier#000478967|dYyFwfCU15LxL0RnRN71CnzVARjguOPR +Supplier#000478979|BlTWJLhN7KWPk A +Supplier#000478991|4vZrgtThRyui3isjZCt8f4rHrgWSSJe +Supplier#000479000|JhTfb6uQ3SWIQegg2K +Supplier#000479028|EpzjLp4BQuw0cwc9InMoCci8dHLIyVe +Supplier#000479051|EkF6dbUkkgbpNV +Supplier#000479083|FdCE7iwOT06s t5SRdco9n2bLkvc +Supplier#000479124|R55IK5d5kCIHJya3OtlBuC94fv +Supplier#000479174|ra2x6891,cwJ35UVdHlvDVTeU6nK4Q +Supplier#000479184|ciqOQ0,xWfGUCpqF4tYZ4RQtXvgaC0s1M +Supplier#000479257|KaZ7fFrQmRqAQEBsxQRPOKzxHJo +Supplier#000479425|1r2CEZT5Ia3WQA7pwAOyXfwZo7cX66OegD +Supplier#000479467|mK7c9 g 4eOVUdhId2AqXqtDOOKg66A6TnmLfaeo +Supplier#000479513|rvE3eBbY4wYELuQc3tWwb +Supplier#000479529|bzG2votyVTH1kKkFS9P +Supplier#000479556|gr6fGtvvwaeeYIqETzDqWgNChqtX0CTBf +Supplier#000479682|R8mAzVAIo ,HZHle4q6nWCaCj +Supplier#000479702|pkYuJVjUT3kHqii0xIvy4hTEQPycS8brc, +Supplier#000479707|npalHh5dtEq8zmPgfRzd evT0 +Supplier#000479740|0mGQSzcw9Mtz2BRZ7LD,EL0R +Supplier#000479832|L0NQhRxzw2mPeiOWEnMTrU3WHCYtX9u wwBiha9 +Supplier#000479864|Z,AYtzO46qaA,nMHdVUjY9zBc1cbqvm +Supplier#000479874|AiAKFfaOEQdn6VOJ4WsuwaltYA +Supplier#000479906|fsP9v3CzFb4wAIkW 7jfE OFAhosd +Supplier#000479928|fH2GbpNLfkMH1lSnEkMNu2Y Rz7npyc2 +Supplier#000480029|CEMfdfvDSEmQAEg 6seqKd0R5 +Supplier#000480030|4DKBGUb3AbN0FCJqIR9LXHhZGMq +Supplier#000480087|neXBHylwhBfyS2,vi16aBvtXNGslAzdEtzxLpLY +Supplier#000480157|nf8P26FWv72tGGiRxnwcS8W28kSlTS8rPQHbM2qE +Supplier#000480200|hH01 zMGs5OHyGKdFAAj6 +Supplier#000480216|tCiEjisUn0KWMI3gWYjGV2m +Supplier#000480377|MwwmId40PM7ohYegTkuXPI1Y,UQCdOOPVpZ +Supplier#000480396|00AdReK KC4nIoZrr5LaPDBxp3 +Supplier#000480527|DVCPW6pmuTPIraFvcvPpapaHBMzntnicPlxGi8Y +Supplier#000480628|T gwMHj5xeBAQThR2 0A82FURPRndvIhXOLSCgqo +Supplier#000480630|HfBqwkJyMDQpMlFt7UwW4eoSV +Supplier#000480633|ZydqPjOrrfyAZxI8xOVQvF1K +Supplier#000480690|ozXHZhPKhdBS6 KKY +Supplier#000480728|yYL,NmkLi7nHJeewH58Zga +Supplier#000480753|K1fIfa1j5L2fo5,Xqn +Supplier#000480796|TJZ1qxE81ZEri6sWDriSHiro93 +Supplier#000480830|0DN1mv8ElL +Supplier#000480928|xvPHkAY0d6h +Supplier#000480930|H9bOBqhuQ8hoKwiE1gVjQ +Supplier#000481040|C5,EgXBqR1mqC5UQ,VLMpthl +Supplier#000481053|DMCNCkksGu8frpys +Supplier#000481056|YivUC1zG9FpQWakCx2C3uja81UL0a6F +Supplier#000481161|t5UWkWL9cXshgore +Supplier#000481218|rhPHA6qejs1rEHX8wSMLgXoBSP,Sv27Uo +Supplier#000481257|nb19RpShkVTYFvzX5wcicTU,gvYk +Supplier#000481376|7wkm8HyZxtIga +Supplier#000481396|nwXpXgSpw1Q +Supplier#000481430|NsxDLzQgDxk,utkua7QawyeH1Z4 +Supplier#000481490|MSapgv6WQ1ZYAO +Supplier#000481512|4sRx2Dz3v7JH0vHB2zL3bk022S +Supplier#000481524|uP9ieAfNg1s3rVuvI m0CD 2DVGAyWv6Km +Supplier#000481528|FpSjzlLQUQHcFjDw9GJ2pWd5K86 +Supplier#000481534|xeTpF6jIXMrRPrYO +Supplier#000481615|JfF0PKz7mpD +Supplier#000481620|wmPb2ZM0xItM5kTwI1TzqWm9eS5b WJDM +Supplier#000481696|36mau0,gLJeXjX4Zd +Supplier#000481723|w iWOlYN9nB8aAdkip8p3UqDGmsXI32tSrmfBE,K +Supplier#000481798|UKf4yDCF39YbcIxk5ory8huh3Aizzx +Supplier#000481843|etx4MwK3JqCRMoQBH,bZKJp405X114Aga Fb,a +Supplier#000481870|L8eHTzEtP b +Supplier#000482004|fDsSeEpa,27 j4pHtLIU +Supplier#000482030|DYV6m24gBO5jk42iauJWwSvNDb +Supplier#000482072|FriYFJauO4c3jSD9oGGh4bjcAKj,Z0Y +Supplier#000482128|RmypxJ6wdUIi8F8vXECK +Supplier#000482135|ii0IiEu3BDhP rx +Supplier#000482215|Upn8m8QgVJrGNp6AcEbvPbEKFHvwD +Supplier#000482309|iwwD2nsYKrg +Supplier#000482311|8J4z2q,JH8HmdDrv +Supplier#000482323|S9pSe0EHJPvJ6djiRp +Supplier#000482409|G9egAD7fP6FFtJ,lZJL2M5P,buvm8zm7zaB0Pw +Supplier#000482454|CH7TxhWkIo3woiCr49wcqGFIcWiIyHl +Supplier#000482480|RA 0,b9g9Kr8qJBUUqgAuSr9WDw5QFf0XUqEt +Supplier#000482493|Bpp Yu8iaxk2Kvj +Supplier#000482564|PWLUBw Hxb9C +Supplier#000482612|7lMlHfXvd92q3,S +Supplier#000482621|0XgT5nOZCVilztp +Supplier#000482624|iYm3KwyT1rYTHBbZNwmwtYGZSxYoaKS54 +Supplier#000482681|Lu2y3OprUvxxkbyeCJVa +Supplier#000482751|kJ85bVsVQMVH095UYgn1y6I +Supplier#000482791|8eIDxcvrW8DqrKJhuJ8EL +Supplier#000482811|GyvoZvde3ieLU8cK8DRQ8tfBsyqF +Supplier#000482847|aemhPlfxySK527aGhNQXlO2BgQMQ +Supplier#000482904|r5c4JYjA1e +Supplier#000482959|3NqAvWQfsrzks4nYAqEfApC651eJkcU1zQl +Supplier#000483083|WSycJJ5dqwQTrz1vEDL0sdB2 j1m0B +Supplier#000483207|J9Is6gsjls +Supplier#000483214|4rzgJlmp6YtAVF +Supplier#000483281|kMXeVFNWTGDdQtPkNg16QMevQl +Supplier#000483292|FIbpQsx6jDKiTlLPn1N +Supplier#000483399|oS7q Ddy781kDENQY +Supplier#000483402|KEAy7q8Qdc +Supplier#000483472|TEoSCe6wG1Z91V6gaz5JjeqkOS8yNPPf6z2eE Ye +Supplier#000483539|F6PBF0n1YRKM0Liq +Supplier#000483547|IrK,JQBl1Az +Supplier#000483741|d26tZ3 JrayDZwSCF7wQyl8Y5WveoTWQ +Supplier#000483827|c0BKQT0, Ae,,vjytOsTy,hek +Supplier#000483884|CFvNCHXMpY58XbYTpMqaOp4 +Supplier#000484081|I5,j,CMRspiLwPDIqD5RHh0U0XZBSUiQruVX +Supplier#000484083|nIETDcaahQU5Y +Supplier#000484099|eyDHPERO8Q0RjEsMPaq zVC +Supplier#000484155|HwbYvG7TpW5CDw8wzJ8N +Supplier#000484178|Y2ynOzaSIDa4RMzOF0IRjCDaBb0GK +Supplier#000484238|3xMprmmwqdeaeAGf,wEWPU1mjGMSdZRinNHNZm +Supplier#000484251|MHs8yc1ODoSDYI127Q +Supplier#000484355|XXKCQTxKxpvIE8HK5G1k2BMq3euVlHOcpJJf8 +Supplier#000484393|PJpVXFmmWc7aoGQpy8li +Supplier#000484488|Si1D3YL,G2GDgRKGpHaiugaiREAH3rO +Supplier#000484567|pieFBzN0eq7Wq +Supplier#000484580|DyLxBJ8oiG +Supplier#000484594|FPLSvi6nRHZX +Supplier#000484601|CKuGd8aGml,ENvQ9dMKKsoOyE +Supplier#000484632|netHUoLCJ9T5jaNlvKrJnBfkSwj cAP4Zh7D2 +Supplier#000484650|SsFklgr1oAKmuu +Supplier#000484743|4bf1wrcAS pl +Supplier#000484761|85JALSu7D1a4W4eZV0OJNf,RmG +Supplier#000484819|Xplj2AzgqzwlNM4jgHpJMcIPsjmR9lZ2qvdL64MN +Supplier#000484859|wMcc2jitJhXvL +Supplier#000485065|KI7LNLUXUVqDAD8zlmNqAkS7szY,glYtXczp6vrs +Supplier#000485078|mGkQUno69y46DF3Ybg7KQwPGp,NpG2c7u3kt9No +Supplier#000485253|Grm8 D60WccgeoqrQY6fLCqoJqdZRdh +Supplier#000485345|Kfr9vy,1i t7m9W1a1fj4PITcb 572lcw6ji98L +Supplier#000485374|uDzhdwUo Y74D6vodi35iC +Supplier#000485377|9PuXOnli0gRGCeWqGHnX0TZlOlMANhBE,sXbR +Supplier#000485384|ZP3SVyZcehmUWMDonj +Supplier#000485474|MT8drZ6Ron4SyEYVUG1EP5SLUchpjeY6Og7ofEt +Supplier#000485563|eCJaapyYm7lyiVudTQptztYjI +Supplier#000485589|LCLyQpvqeW3rI +Supplier#000485693|zbO5fiOt3XbS77Nwg +Supplier#000485775|kVlccwR6eY6bkE3svKLmLwE7q9mqBesOHg94h +Supplier#000485879|AmbCxOmpmSXvQsqQWmAa0MUEoTHQ0 kOum +Supplier#000485895|eprD,5JYMhx7g7oTvDpovwdqOnmfhDD4 +Supplier#000485905|jwpVbkUN,k xGeYzNX7qeZ0ItMemqofr24K0 +Supplier#000486096|VJuE25aN5rDuQRbHNYlI9xdmz0bWS +Supplier#000486194|mAvB8368LP3FItaBi,01yZIHFDI3u5BJ2 +Supplier#000486424|,Og6DFS4E470PYZsKazqQrNp9UhHbj5SepzYd +Supplier#000486431|YA86nzACVb5BSM +Supplier#000486461|vGJ,A9GwW2Ohz1qutnndHc +Supplier#000486494|vvt59QrU3UnLX +Supplier#000486506|sJBkMgwJ5qh,nSlxUEX0me1vTBFxVpkmU +Supplier#000486533|W2YjOeYb4YP Wvm +Supplier#000486534|Cax GaxF13jfE4FUsMEEcirUop06Hgu7ht +Supplier#000486545|LrSSpDirZtb7WLPY5qO +Supplier#000486603|6L7VnIDC9wo3O7Z4jYKM +Supplier#000486642|y8OANP39n in9cUj +Supplier#000486667|FUJqnDPCiIBkLnQEPMiMqzVpVZ +Supplier#000486721|97X2rZ3TSweirzMc0fieWKXxmbtdoIOgEQLhA +Supplier#000486743|llgA4c7h jL +Supplier#000486819|TxSU,eXyAQMMSVmbILdZEBFMfEXbGW +Supplier#000486890|ZUCofEGFnbCRH9PLBVxvfbpA3OqnRgEEZ +Supplier#000486958|SXdmfjNGEjc7DECYPV xdGkradGvil +Supplier#000487050|7CWvnufsv2Hn Mer5b6WHJ +Supplier#000487122|DyU4qSGPyX2TIUswgmZTHWa7Yct28By +Supplier#000487124|YWNDVMbyoKol3UjrVyqGQ v68VF0exOH6i +Supplier#000487178|cTG6RC9PHlAgaOGI1bb8v JXItFN +Supplier#000487197|aRg 77,3KPvAN,zj7lYtdyMOU XeljwX58b +Supplier#000487209|w1tKBZ9RJSrJSfKol1OL +Supplier#000487218|N9aSqTzhbbmxBLY +Supplier#000487272|iG2qakpPPXZfAG +Supplier#000487347|FNffA,,0X6WaAFVk4p74DDW7Ma5GYp +Supplier#000487622|18S6DUgrRxbJMMr,6nTHMEJX4kgs +Supplier#000487680|B7UgdnCU7fmGhG +Supplier#000487763|jYY8Z48J6A u +Supplier#000487910|8j15Wom9ozw4m,p8DVX9ix,7sZV,URrwo1Us7Ha +Supplier#000487955|NqH3GOoJ5nLGPowHceOmUDDlAltb +Supplier#000487961|,pczTqzYey5 +Supplier#000487978|2JqE7VuJCdiIRvW2cKnF9T1E,360HKF +Supplier#000487981|8Gjq,Z3 l2WeVPMRM D6hBw +Supplier#000488106|AnvBnYAESXmRMbV56VfGMzjxuMqonX0Uw +Supplier#000488112|5ZXCCl jXHjBHRgtI,UbpRW9G4W +Supplier#000488150|2SqFs1EFO7WoW2hekgVnUsLi3v3OMN4Fp +Supplier#000488160|Dg7 567xJeSmeUpXYnE2iwcl,dsQ6nl +Supplier#000488277|9L9SjeP1yTP,WaL +Supplier#000488308|dIw jos19pdm3qgAhX ERwIg jfdwwg9IPE +Supplier#000488310|uXv02IM25ht3b +Supplier#000488361|8mUfnT1 sfPTDUlC +Supplier#000488389|VuNX twlInkgZF2 +Supplier#000488403|R1bmX1blFyJV0uqlXX20cN8i7z +Supplier#000488410|YJPuCuEpFfJDrQ76oyHw2mDSf5bP3qw3aV +Supplier#000488453|rQgPmgPYLRq9DUPoS +Supplier#000488477|ZJTLjD7U2blO3 +Supplier#000488681|uV9mJnWq5XigsyOIgUEp3eiX8ubEkf1m5aRJfq1 +Supplier#000488856|sPa8R7kihrdNvwowEWVYyh +Supplier#000488934|2oEn2oYCNfkdErSdPFyXr1SpPh8q0O0hNdLVUf +Supplier#000488966|3qpUgOK9,gWsCoTDYtw88D s6ptCmUd9rkylWe +Supplier#000488967|zgm1FRLmX7c5QYVBeEZ2hz +Supplier#000488977|O4Ckk4qvxLiSTZFtO07E0p9 LXQ7u +Supplier#000489004|srmyIvO0LnC2hz1gm6gkjIYNf +Supplier#000489096|BINK2NrzJkjlnrd8cq +Supplier#000489114|Oe6krqJqLVHEkV0,Bh5kAjl +Supplier#000489128|treG6nFbq1d4zH2LVBH0,ngw2xBaH HN +Supplier#000489142|xTkB83S7R8haba +Supplier#000489205|Rix,PWiv0lmN +Supplier#000489231|S7AfMyxPtNzilcQLlYFUTEui0I +Supplier#000489315|,7QFV4I7A5T0banX liLDGowv0 +Supplier#000489325|LoStz0J5XS4TR153LZMFUZZlGY6UeqiRjSX9MnY +Supplier#000489350|D17iS6 ,NPZfxiWqsFpX4KdpS5 +Supplier#000489355|MrFZKi3zUL +Supplier#000489391|ZgaoCStMKUigsCL1eWH5j +Supplier#000489580|JEHf3HQ,mfklHmwSXjkCvz +Supplier#000489811|9yfZ2TNgxCw z +Supplier#000489826|IEdk,DI6dlTeTt +Supplier#000489933|ILlrS8GFKHZwBKpUMuGzfX +Supplier#000489961|gh8Sxe6GskuLJUQb8Z +Supplier#000490137|6M2OdYVFrnzsy zjPShgie9p52 55e6BUSp2F5R +Supplier#000490291|GDdHHcjSLeVlia2MRRmriUFvf49GU5y5pLH +Supplier#000490397| fGGQ4A5EwI3bT5NIWvyfHPVKLX +Supplier#000490498|zynsLITNEEbacNuah6neSU5Kj03uSOqvCOGJZE7 +Supplier#000490511|cpiQkmcnMQ1nJ1RLUxQZa +Supplier#000490545|TyX1rAnG2s5KYa3zgmqPR2lbOdvx3 Uoafp +Supplier#000490547|855PqcN7yyaPdFJPdYhgpSTy +Supplier#000490548|SQvuoJLUWLKCHY +Supplier#000490627|ktyJPnr1rE,9UjS +Supplier#000490633|UhyJS42aHtmA ZRcAcUE bYmGUODspX +Supplier#000490644|LTD8Z28jEegzy +Supplier#000490648|,ubXP0vSGCqaKSLqpp2Y4Twr0CB mUK4rBm01 +Supplier#000490650|2u043wAenh7qqSFw,1TYLJej57an1YLPzDLl +Supplier#000490811|Op3,IrZHm9ESXXD04Ukueqal0dj +Supplier#000490849|1tvPEIa0LnszYWZviExPERR +Supplier#000490870|uXQMXiFud5FCMJmeQADlevYBm +Supplier#000490930| EWbGR8ztanNCRl9BsaWa2DrPZZ +Supplier#000491146|oNAeO1EjAXd +Supplier#000491198|2HvPiQC InX,nH0iFpi57GLgzV6cu6WUGYxDVTke +Supplier#000491256|HRZQF1Ted6lroYXaDPprCl +Supplier#000491351|cI1Vecc4mDo +Supplier#000491367|N4tQYDDmBwzB92TACICXeATXw83SJkInoVt +Supplier#000491560|SvT4MwcVgU,sF +Supplier#000491564|1fJ 3fqGEwrvU6xGNIzq +Supplier#000491621|FTRhj95p RsJmRexpY9 ARVqOmrm +Supplier#000491678|,7D vuQbAb2M67iGHT18ZztgCD2k3kw +Supplier#000491912|N8H4MtFUy66OWkSauDzqTdap3pS3a4Le7 +Supplier#000491945|lGNRWBiiRMrviYBoWV2EQK,0Zx6G +Supplier#000491959|3vPVu f8IDsaLfzGa8MYW +Supplier#000492014|hF hXklrNFhiYCwBPaft8zVyVi5yYBdd +Supplier#000492090|F31wcyCEQGYJf4mK5R,PGEvlF3NUFN5t +Supplier#000492105|cEcY2okk3lP +Supplier#000492168|ynUgkibj9xhGVahUzVR9YxCcPg57xtCH +Supplier#000492230|DO4izLliHv Pg4CpIutg0yyGIJbgU4 +Supplier#000492254|XgX zR87eVFnCPf +Supplier#000492275|LToC6PivThGY7y94ZmpwUe5vzQBcnSbtHKH +Supplier#000492289|FQ2dOXks B,F1bHk 2 3OaguInP +Supplier#000492325|bLukXLn0oBigw9FsYkQAGhjjnkB8G +Supplier#000492388|0xuv6CnJ6PZLYVhze7NjVMY7d k,LBMcP4 +Supplier#000492435|NamGyVqHaAU4hnrbgu5WWMFbqFNsfJMlZhrQJ6ad +Supplier#000492498|HvdqSvdZd4Rj9cMPJWwHkT5BXw +Supplier#000492635|nR7kfKPmpIM,OTtutM +Supplier#000492644|d8KjkUVlYadAs7O6AMyDQt5 +Supplier#000492714|X6AeUhK4Oz6BrxU +Supplier#000492719|6qwDW0oBmafYDSPBqF ,TRMZP8s5niyutlH +Supplier#000492826|eAnEdxrKKF7iBgvpHuQ,cstfQR3pX +Supplier#000492932|KeSLis21Ttm4DoxdQf2 +Supplier#000493003|utmSD75mGvzQqOKIvCcDUPSn9YSy5s6Mm9PE9 +Supplier#000493060|YKYaPdCYtG6w3v9quzgVGT9khJ72L31c +Supplier#000493306|Z6tzWYYiMrsqeHJai4YvE1YKtkRX2s2WtUa +Supplier#000493319|JuhoNpErm4aIiRuoshF3sIPailU8o +Supplier#000493398|QY5mZdEMTr8eXPqeh +Supplier#000493402|fUptgdS7WpqKPdQ12fl1 +Supplier#000493458|i9sAT3ab2LG,Z,a4f5TDB +Supplier#000493470|iTywPHFGCe7FpXml32RfBzVkRV2 +Supplier#000493610|7ECVcL7t0Rm0yvMgVbrfpvJkHaURXR8AvOCRH +Supplier#000493612|DCUB212nAQR5m3BZQpuTEwIkTyy +Supplier#000493615|58RfITQ4fs3,w0WUAe +Supplier#000493734|boP7F77UbGbrY20OAFg +Supplier#000493735|tfm6fECPVbKrog4Gvt0FoGE1vAJ0DF,d +Supplier#000493760|BAjvJyYRgvSGph4h1dLQX8bG5wjqV +Supplier#000493886|f3qA83I9sneynTx2gsHpfQTJAz3AeXUn8AoaH +Supplier#000494098|OFIouqQ21Ht +Supplier#000494105|i j23cUswiACL38oUGkj TFjtnQJ +Supplier#000494114|vfuwMMZSA6o34g4EvkomdU3Jc1vz0kFDBBtlF,G +Supplier#000494121|Btx8fd5zb7ECGEEKoVY +Supplier#000494213|C2J8cZGMN5FNhmpUFgqE,RNfKDZ8QsxQR873,xTB +Supplier#000494415|DI9BPifJ0fMuKJ6FzTRs6EuZgNcXw7 +Supplier#000494436|sWmDAh3kt9LTAXLZHt1TJ0ev8s1voZ3wPVfv +Supplier#000494450|wNm4iSpFXQwHLzdkzR8FDKPIV9IaRnq7lQhrx +Supplier#000494462|qGLQG5mq2O3CvkZ,7bUS4 vo7AAS8Mn +Supplier#000494473|43H,O7Vp8qTUGblAcHRKJ +Supplier#000494701|eanjGGZ,BE z G0D7UcNG35HnO18 T8 +Supplier#000494790|VfzLR,WET7SL9dKFv1 +Supplier#000494829|atTdVQCP jLV9SFvJBdVk6WPaI7UbgDrm5zmIM5 +Supplier#000494956|U9,O2wtZdyI4Rd44edOfawFkgA3zAywL1pNT +Supplier#000495111|1MwqoHKDiq356akv3q2CZha8Et8 +Supplier#000495215|1DkqN26quuKQBm3PjGMAvdz oBYH +Supplier#000495252|oDcbLtp0ycGGumR1syj9HtGTE +Supplier#000495316|47DcOMnqUTUXqXHXTI9KjQ4NwQj9jZ +Supplier#000495344|FzZ2zvN6VyPQRc9 YIlfqo2pguQ +Supplier#000495418|qiPxnqtgFM20u8gkJqZvN7Ur0FvHQs4dLSo +Supplier#000495419|3uBDjqhvebbtmR9db93wZ7wupmyf6pcR6qRf +Supplier#000495421|NjvFKgh54,82S39MohEkdm +Supplier#000495542|,ctoEBc0tl +Supplier#000495544|ohrY8jbN4W5CTkADuvuf8VzsgCHQpXHMn +Supplier#000495838|7c0zTAUK6Lf6W +Supplier#000495988|OcebLeb6ZisLH7M9MCVsOIqxBqZOJhx5c +Supplier#000496090|ylkL4Mw HHS2sDH5lPsKpQcNTKHq87hUprOS8f +Supplier#000496102|qZkVr6nhqNojb5 +Supplier#000496212|DlAhsHTk dE6ODZvUm4cYnkpcBIu +Supplier#000496213|NcgvgB3fn,9NVNJN +Supplier#000496237|f5 Gsi tgPbu 4fWXM5U5vS0t l3Gem2mUbPS +Supplier#000496262|ayiF8S18Ep77xWZG +Supplier#000496265|39R7YyO5rnMlwhbihR3y9nSwwv2xFmHcm +Supplier#000496347|ZvzyT5a oVQuk,8K2H +Supplier#000496360|BSydvvvT,tK6ncOF9G +Supplier#000496365|OrtYX9GLXKR +Supplier#000496399|n r r cF3Xt0dZ xbO9bi +Supplier#000496523|KFIFJH,PZiLy1 +Supplier#000496613|ah51V7gueNC8sFRVEq23T7QAKL DxSuJeBxdd +Supplier#000496657|Dq0a86fgOWEJKHgzR +Supplier#000496692|HsAX64QgegJevAh7RiHbg009tyA2w +Supplier#000496827|ZK18,B7w3lmSFCavbJESnKduICxjFpqYvIP,yTzo +Supplier#000496876|QrwfZ,VIeqwKvYevuQqSUjshDmLHxXTwfLQI36Vf +Supplier#000496948|7YWdwnWIWG9K0qf +Supplier#000497145|0Q61bBE8DfxtASP MGeMfdD977LItMKzRpNm +Supplier#000497219|zP1rqy9fWK2yh7I5r3dhlxXYV5e +Supplier#000497307|eQBUpZC 4CXq +Supplier#000497328|rfmOtUWJlnWDPocnSBCa6 +Supplier#000497386|ey0M hpt32 3msqvs4 +Supplier#000497393|GKdkm,NyAmJHWktwzv9 FN YTtDP8NyZHQFBFqR +Supplier#000497450|c,MmlrnbxhHqRKvgtt +Supplier#000497487|XxqghhV8CIXz +Supplier#000497651|LE8vderepGzifrIQ5jccj +Supplier#000497673|BRN4z7Yv60 +Supplier#000497754|hZ7wbgYNdxcXQ0J1lklvUUrdnm +Supplier#000497792|W5 j1WehGTyvEVFMMoBfSqQPEkSxTMQ +Supplier#000497796|LPzBq8zP94HlR6KLUXCK +Supplier#000497869|hxr7smP,bzB5c z77iyPmJc2nZ5xr2MxBf8MrI +Supplier#000497877|ZOnZlafjvJMIPPtmvx +Supplier#000497960|s8uK,9SYhbDOrcra5jquN6N8cGglumjVdxS +Supplier#000498077|gD5fCzlgfG2ObbOdW7 +Supplier#000498229|IYgTBv7,J1L 81qDJGNvB +Supplier#000498318|dPE,0Y3cZb2 hT +Supplier#000498385|RGYMTpB6Z8X4eSHB4PhpkeA1lDkkmi1VPNy,z +Supplier#000498395|RUqe5DucWdXRZ9P MeqEUUVtCITUnyX +Supplier#000498532|H4X9inCQZKtGPMu +Supplier#000498538|gB,kuZMm9ru8tYQ,HsItmhFcalYLL2trU +Supplier#000498555|LbkGat3s1Qtxg +Supplier#000498604|yJ9lhh6rI9AMc +Supplier#000498650|VQJqliZe3vGD +Supplier#000498677|pGBjuIOfiJGgmQUa6TDDu,pz6JHFZW5v7,5DEP +Supplier#000498720|HtiaeSFNRKHOmPtiDyhwvk3tunnUivxsDmry +Supplier#000498721|scb90mdKqEG sz +Supplier#000498767|36jG2k3pzTdI +Supplier#000498780|oXTxug1TLlI0j7mNmuhmulOV6u7b,Wmio0bi +Supplier#000498827|axH6ZPbWkgbBr2C6B8tK1jdXb64Y7LHE1QTpm +Supplier#000498844|b0VR51o5VlSuDp8L +Supplier#000498947|0iaKJTtZPyTCq06LNvfnWa +Supplier#000498961|rjN1Vwec1GLdQM5q7Ldx,0FmySBEOGHivO8 +Supplier#000499033|o,gPK2tRp6m52GJtScL +Supplier#000499034|rhbCbhxc1tcRRZ vojQRoA4QCEmR6y +Supplier#000499143|JN8E0Ei14O3U9K ceAeruHOgi3zASWFzoA2UKWj +Supplier#000499169|vao73AsGq619w78g +Supplier#000499194|PIGIebkeOZyllPYRldfVofATKadHWOXFRl0 R78 +Supplier#000499213|b261nW5AnwnbSdgiB8lD +Supplier#000499281|lagpqgabztoHM70SiXaVa 0wfcx +Supplier#000499356|bw4nKS9uvjOQMCIZ +Supplier#000499390|o,cOjzzpoGll7v +Supplier#000499393|mXUgXmPpwWvS2 +Supplier#000499417|UQkGJvGlJOk7i +Supplier#000499429|Uat WgXqDyOk5W QDp +Supplier#000499450|tw18l0bN3JOeFHzkXk6AjPGAwsHOl8bZqVmIE +Supplier#000499561|ulhQ7EcvrRYl +Supplier#000499574|Rl1hHJNgSE +Supplier#000499902|vFhaEl7I 9KNx +Supplier#000499920|,uWyvqR8Odt5a +Supplier#000499974|e38olH08FNKaJtkWE779Xqk +Supplier#000499981|6Ff,AUuVD3wl8mIy +Supplier#000499992|QpZNY5HNxld1m6tWWo0Iivx +Supplier#000500037|XngohxP0PTFVw3zPReUKXOtHuQjQ8KjCICT +Supplier#000500057|no5sdAr09aFEcg3hrfFiEO1UiKVw9Z9cyzPjWzC +Supplier#000500083|yclmAE4hobD5sG +Supplier#000500122| B2RabetAQXrTs, +Supplier#000500143|7EjKPtpifO6WtDOAeba8AFzaDgL5sHW +Supplier#000500169|xRaJ33vPzhRL5HlI wtIH28lw9OVNb +Supplier#000500342|UPaGzWI8DtKtk9n8hdtgDIc7BSP r +Supplier#000500389|d45DxVRja y3U fGQe3x0OMInYT +Supplier#000500454|elgdVgaTWJ2gdpJIvLBtavm9IInhLNRl +Supplier#000500478|bN0UoMpTXz +Supplier#000500618|w0AjbHFBr26hm7vO1BD2uYxqN +Supplier#000500641|ipJEbStMmVyh +Supplier#000500671|sQbmOqQ,Y69dy63RXD0E2t32CBb +Supplier#000500700|yxP1TZtl8B0jNYmqnuzWlFoWwmPk9b n0V +Supplier#000500751|HYllirjWVy6vFGwIzcyFGlQfV0ai0km +Supplier#000500875|gvtzNMdYkZJZGnMDaCu3wln,re3i9tD +Supplier#000500894|WWJS2Q8V6VPgDdHp +Supplier#000500939|ptI9jxS11rQQshGod,HOH3jbGHOLUzMPo0m +Supplier#000501027|sW3I,4XMyiu k +Supplier#000501071|paSdtuFchzXSCkUazkO +Supplier#000501114|6s5vyqNldh9IDk6LB +Supplier#000501211|AOGjM0yUkD24jg8tY9ZK5IFEGVoCdbmZYy +Supplier#000501274|v9TLgAh5Ej9SdD9yOdgwcGqp2y 5HwNvYFp8 +Supplier#000501280|bokojMrqfnygNBg5RloU4kLgC +Supplier#000501289|ImXKOULMiOZMva8xxWvXywy +Supplier#000501316|vfAAgVS5nYyxw7W0x7 +Supplier#000501343|itNItfyFtzUp5d3Chk6xGst +Supplier#000501357|LBXl3qhBuTIRBkGB,FCLdWAb2H +Supplier#000501414|L2S6QdTPwsqo +Supplier#000501434|Fdg7wNlQNgWvGllJFci +Supplier#000501455|F8 iv6hwf4n7Ey3hLbrZK3PGk4m1PYzRcdD7 +Supplier#000501650|6WhKLYbUbgoxNmzaJrIQi +Supplier#000501651|D aG049qA7,82PLQ,8uL2uQcWZrAICz +Supplier#000501658|JbSaP48Dxgl +Supplier#000501706|H22gAfYg8lvp1tI9UcqwZHNK0Ci1H6Ng0 +Supplier#000501749|JqnnQxjG6bUlim6LTNF6fmnpgM +Supplier#000501786|eW4BMi,sn61tJYTNE9NpnZW41xfS +Supplier#000501799|cIUWNPibKg1TUZkYXCgj,xVGNofPnFzZNnkr +Supplier#000501982|Su0N07,Csc6 L8M +Supplier#000502014|BJj DogNTmT0IlqtG3wUX5cBhZRIM3 +Supplier#000502052|LiXDb8jwMHJQ,oXf2T 8K2jSbZ +Supplier#000502057|8rJbJWOoc97xI7kRxk2QIo5tP +Supplier#000502107|NXyzM8k9KI0y7SSVzQqGr +Supplier#000502109|KQC1ql2j5wWtbaf3 +Supplier#000502140|qReAqGvPuCwEHGeWO8qQxTX,yeIwd8o8 +Supplier#000502199|W3pBuJUl,O,cHg,uU98TKGmvAz +Supplier#000502348|tX5Z0YD8bNqlZ9a,REg1ZsBwXW +Supplier#000502401|pDH1Hzn KMHhCS2H,lGqRQatH7j3awflgDKRSUoP +Supplier#000502412|ENItnrwg XIePFlbW3V +Supplier#000502418|CPB3urG285hdrS2 +Supplier#000502454|JtOMzr 22H6cJ +Supplier#000502548|DGmAiOZsCfrBMG1V,wJ +Supplier#000502602|04cMiw2KmOSaWqn +Supplier#000502613|irTpwLp7MH6DXemhI5jKpH +Supplier#000502728|2wgTwGLcQl,o2F5jnMpya5uNtd2tULf8KS, +Supplier#000502794|mlnqAtkEAJ +Supplier#000502805|4NE3xgXqh6Wt6V8e3sThxUjeXF4CbicqV1C +Supplier#000502833|yBdnLXd3QvS82w pJAholsX9O3WRvTK4egRX1,v +Supplier#000502841|a6n7YNHl2oNKzgeJgprutuR6HaHTb +Supplier#000502874|4MxiEtEux0K,nSnV3AZe4jARjuGOXy,qtCeoP +Supplier#000502948|YMc5EtujvkIWyOD8VIqTW1,dLTfjzDkeKjeR6q +Supplier#000503080|2hzQD0Te07n +Supplier#000503166|LQUp8O k aLybn +Supplier#000503192|tw1OM99QgeKSOOAxDPV8q4XjfgCE3Y1 +Supplier#000503294|L0DK8vivPiOPM4mGIyT01U +Supplier#000503295|PXDn2z0V2e94BftujalFr525rkLwB6Jx +Supplier#000503308|FN4jGJfmfuoVXqgkm6NlTae +Supplier#000503366|izQbihM4sykMDDVvOKF5xtUKs50SqBbOTxnZY6b +Supplier#000503407|kiomh5EO3c5XFJ +Supplier#000503463|5D,Gb1hRhedZL1MwHwz6go8vnW1phLijb4C +Supplier#000503492|NU,56h9xgh4RaL8HEY +Supplier#000503598|JUcFadTbygR,kt1U0aQXyQMoGJcy +Supplier#000503689|bbI puIjjRHgbt8a bTAOb5A4MavPA +Supplier#000503737|Q6bQf5HLSkS,7j,o6lpShVZOsM4VdnOiXd5 +Supplier#000503823|5Y1fKggiakq6H,orc9mYk4v82 Am2LJ UF +Supplier#000503847|1Oq4drBbp3q3 +Supplier#000503852|tymBqf NDdrZbSi9bREq +Supplier#000503886|gdtTiNe5ZCM1LfwkLyd8lD +Supplier#000503943|tH8Qy8WiZKjkBrgiGsG,C6HSFJ3Yu6lNrPFE0, +Supplier#000503960|yH15KCTo0hEHV6YF3Awzsj z0wyJiXcYCWpPiTUT +Supplier#000503972|z0z8u9AAxm0g, +Supplier#000503991|hgmZTzod6YGcG Ev5ecu8h +Supplier#000504089|uy1gAI044jygl +Supplier#000504101|ghpvTXS4AX9I1zHbQTkyrAmorWg0jo6Gu +Supplier#000504211|72VS4g60EQ65Ioy +Supplier#000504255|kWz,vP2JOHW4D024B sNffb +Supplier#000504295|QGbeywMzuVu2u4KR +Supplier#000504311|cpI b3RMclDXFQePanxLf +Supplier#000504464|F1 qb0kKFHXF +Supplier#000504484|tLjLeXIpkLHaLIYrC84VAqFNj9jFwtlwb +Supplier#000504516|IGDeaIeKt99y0uw6H6uDGJBJUXnJXY +Supplier#000504648|pXWU9SwNHdCCj5I iazcG5h +Supplier#000504654|C7icM,VfFgTrdW6ltj5CZ5XTxCA6IKD60tIWif6r +Supplier#000504658|84SWlTYsUqjPYAA0VOclO47jnTsYBrMJFjkxK +Supplier#000504681|T,jKOATJHdEoccueTt8k8hpuW +Supplier#000504728|NRMXuh7H8GRpETRPC51mRQq +Supplier#000504733|D5BTvNcgq7ZLek,GGvMpox8SkJjSuqFeuevYVt +Supplier#000504815|UyPVtrCUX1t +Supplier#000504835|hH9iJk39KwmX5NW3LGRvvDprhE8nDNSJvj +Supplier#000504909|JhrRvGbdQdTDRof0I +Supplier#000504982|iyUNbu0szzef0gKu6uJjL +Supplier#000505073|b,CSWQv2BcsPRppbp5bls6oQhYa5coOa +Supplier#000505080|hWwtoRyJMJTN1R44qnh8qxYp854gG +Supplier#000505108|tdvZY8Y9R ubkL9i7g3KOGGXZevXO +Supplier#000505188|jSbyHXUCp5X9yZbs7yWiULfX +Supplier#000505358|jM1dQ2AXbL5jyhhvE06k7QekRHLu2WfK7s8Lw +Supplier#000505361|kO,HBAoYBN +Supplier#000505370| JioROy5uAgfT107RJnIm55fOxY,,XgyQQa +Supplier#000505398|WA8WNKkyd7rhOLOYRCDkwSgWSfCwaHKJw +Supplier#000505705|LWZLIsr0vqIfDE4YWO7gzP7oOKXUI +Supplier#000505775|0bXmk4qKjkqYC6cGfKCv4BYCX7 +Supplier#000505845|ASU9tFkQWjOd6L5TnhLpYClyjzKM +Supplier#000505863|15mRHWD2wOC +Supplier#000505882|LKUA DPIvtTLnVO +Supplier#000505963|UAhle8UQZPTjLVyLuP On +Supplier#000505991|8Jwwkg OLAeOQQOUbv30RAGNjwLvlyfIX6 +Supplier#000506037|3VKtrbyQfxVVxO5z RgvMBVF2Ems4kaiZMq +Supplier#000506085|uUvXA83JsNoh +Supplier#000506115|OVs2hldnTqg0Lm7QThoCpVA1p J9bM8oBCC +Supplier#000506164|Lb1iQSqTPef3ocxfsV,T5secoGm +Supplier#000506242|NZe2XDSaHJu +Supplier#000506324|xexdnJGGgvu0E, +Supplier#000506353|B3MTidqEqUJ1yL4NwMS qUqGN76t DOJNkYUgx +Supplier#000506477|8YEpssYQolfOr2KXbKiDyfGAgLbXZlmnNJ3ntiHO +Supplier#000506599|nAwsAQ7PLxSS +Supplier#000506642|mdJ4mHUN2NuTc5XRc5VUIK +Supplier#000506680|ss8pLEzCTnio3slgewW +Supplier#000506748|jZL6nZuTBMSkgWpIHmXnyeRHFDtAk +Supplier#000506798|FDwcJGfoenRkX01iR7yuVN2Wiu79rfW +Supplier#000506876|fofsNWQDamK9GG3ct9h2 +Supplier#000506936|FixIRQ3H1HWL pKcSH5AI,j8XNY,VFxIV +Supplier#000507171|0mGSewTun,wt9KKswzt6 +Supplier#000507284|OBAvvHrLcwS1T2RH4P7IH +Supplier#000507331|PAD1JqsAaKVjaK4nMOXX4cE,4GT +Supplier#000507356|AXHoYNps3yDyUnReES7ZiuIA4HlI8bFHqVrS26U9 +Supplier#000507390|QEQtI VXPRJSVDbd +Supplier#000507425|BhrUAVvFEbfgxnFnIMt6A31EQBnkkBMa1M +Supplier#000507437|f956QoN,LfZs6,bnRxSC7CdqC7LqHk1HiAszT +Supplier#000507474|bQiOLP,amJ5j,x087GQtp6vcVD69W 8ZGjC +Supplier#000507742|0mru3r LuGYaL q,i +Supplier#000507859|XEJMWw9bj0qRIkG22JkdzRn4X sSjwePJ514el98 +Supplier#000508046|dAeTZWUdYvxRBe5QuRXZsMr7u9MmeNQs6YnsjYD +Supplier#000508058|gdSNRuoX,BiZZ9ymNoTGr9eQ kwf +Supplier#000508260|ycUiFOedF7N2ETs2 +Supplier#000508309|fNIbhp z rOpFTslr +Supplier#000508403|m8m,zfjFcgGHzTHiHEBT6 +Supplier#000508415|LkGD1Vfo9xmcVZAlO0 +Supplier#000508495|Y4cJn9zGAysnqflXD3l2EHQJCvkvn +Supplier#000508498|APGBulvYY059Luf7zyPkZINsMy +Supplier#000508509|Hu090pTXsYCJ0TYI2i70YV5jTGsZStvtsLmTE +Supplier#000508562|xOFuSfk2WmaugtEtHyg2jT776qljBThmuvijLEq +Supplier#000508675|76BMbJOgbdnj0G87i +Supplier#000508725|F2WR,BBTaLiGymVGWlHQFaIOfl,bqjCb 22gRBG +Supplier#000508741|XCHatpUHc Oxmy3Dy7aNAwp2,TlX +Supplier#000508777|CVuGDxJP3Oa8CbMjyig +Supplier#000508917|JNidvnh82sxD7aOnu qB8XzwbNO4ZjKWXwiW +Supplier#000509058|XbndY9S140CsS4yGbW +Supplier#000509071|tmJlaTJa,ebmurJY1iZLEu0 +Supplier#000509150|kVxASyfsHwNHOHR,MTXL8,hz5gpo8P0C +Supplier#000509193|k,wz4yBiHaE059 +Supplier#000509230|Gl7Px kdOXZUmK +Supplier#000509299|cQUzYCw0Dv +Supplier#000509382|llPSgqwdgNXNVa,aHomcKiRIaDaNce +Supplier#000509404|c5XILgRSXKr9bJqAbqMj7an +Supplier#000509405|pZ8PwzqUws8rI53xrLrgPoabEtnYkNeG +Supplier#000509476|7U8Qf31gNb0j3cUlqPQb5pJ +Supplier#000509543| tboQs62FwnEGdZEm +Supplier#000509586|rWIEwKQisG4BwnjufJL2goy,8c etA +Supplier#000509753|bge,5,4UStGUcJ0,f,Y +Supplier#000509803|u,s0pUlyY5YSy5zt +Supplier#000509893|ubxdI2gc4UiN7IWMiEn6We,sG61Ex9wAwqx +Supplier#000509901|1mGIc,Y hKGfl3M9da0yfX1T +Supplier#000509917|4x6I0Tyka4YGkpNSaB7o +Supplier#000510213|6oqgeUHIZSTy +Supplier#000510222|N39qCkg112 +Supplier#000510260|hFXcgBS,dTvfy,z2zjU1qEmXKddlviRRZUxMCS +Supplier#000510312|tI2igo,L5Npuk48N7UsBmF +Supplier#000510373|l2u7PJ3SwlahN +Supplier#000510393|Q6iNPBP0M0JDOe7bqcq +Supplier#000510523|33Ajb1w3B2fKexnpXmAnC +Supplier#000510539|2 wxs27pJzPF84H5o 0NXNN +Supplier#000510547|UVfTSo1PskAKlxqYj2lEYc7ij2itxUf1H +Supplier#000510591|qm02wSa,EJfhZbkzzwdk6EpwCISSI +Supplier#000510612|pGFyWHKHQctExUEDkeO1nrcRNDwDUQ +Supplier#000510707|oIV1piL w6kk3kkaYdOtydVlQa9UEc +Supplier#000510710|jU,sZIHxfMs2 q 4l,IWgbThFNL +Supplier#000510821|R1xqsw9JnS6 2o +Supplier#000510865|TVNH0z93LOOO3bfwTplxcz70XqvG +Supplier#000510924|KUeBzGJsjdvU tJxuS4pzvK4dtZ7koz +Supplier#000510979|JOGU 24uvDB +Supplier#000511009|mlu0pISStbgA7WhxM74Xlculul +Supplier#000511019|Pf5L5NKYMltzhePP,RzgFiL,Tx8Q +Supplier#000511034|GgF9oLY0UgUFoHHJYF +Supplier#000511048|6rais,1kKAPkmQGCYPU6eux3 +Supplier#000511089|uThOOzT5tvaO7PgUHdHCaZ82c5gY16JwbXGbF +Supplier#000511112|i,f8WAcSuOaN9 +Supplier#000511206|zoRvIZKG27yk4Kh6hHnvk20F69zxK +Supplier#000511258|tE5ojJEbOqkEWTROOvSwwps2eB +Supplier#000511409|OqvlLfFSIrj5SOFIrj +Supplier#000511438|cxh19PDyvI1dd1RrLmNRaR9Rxy1JjkoMkr +Supplier#000511462|jA8kuMuWpUDbej8I9hMKrFcfO 1q +Supplier#000511522|9D12v9jlUcfZn8 yrfjI6k9UYbLZX +Supplier#000511597|fMZtniaPe2R4Vz0n5gDlo7LnYQL sDA4mVC +Supplier#000511726|2GSyAzF8aDIvuEYd +Supplier#000511767|f7PysHJozVfwgOyR +Supplier#000511866|IzTZ63gFRGOtt +Supplier#000511896|tw SjKb9kBfNESOSJaZrUBoPyu +Supplier#000511899|Tg hl4heaTYCBD4,g8S2gm +Supplier#000511924|iA5f7PD13bm65z7c +Supplier#000511977|fAFS 5lrfmZ4,hI,lQbe +Supplier#000512012|kPyhU,DreJyqGXfsS4I7SEVoelb9jM +Supplier#000512052|RMYF3szH58FueSf88lWKwicE5o +Supplier#000512170|0,,rIeRV,jz,PRRbPvmTkD,XrylP +Supplier#000512194|n piiyUrTt1dy +Supplier#000512231|F10lPXCPURwMCFaGzVNZlQMKHUXJ7S8hXVfyHQD, +Supplier#000512354|E2rfZGsk64VGSzn,,IPcHjZrD5uC7a +Supplier#000512366|pLBVzVZJnO2udOtFvcmOXSeG +Supplier#000512369|nvA,DrDheiQ +Supplier#000512378|Ru BsAMwRkDp +Supplier#000512394|t2SGmdXA2ozJCUg +Supplier#000512397|,c Zckigl2haWCrlN7xh2gP3hxzwe1WPg7 +Supplier#000512462|97Jfm7VlmVi,ij1DiDvNhMR +Supplier#000512529|dqE4ijPym2IMlhJm,L +Supplier#000512568|,GvOaz3o6p8jenpVd1Hxt,GOJITAA7,0e0x6 A +Supplier#000512618|1espybKA17q39tNFbxP2GbZQIzFJs +Supplier#000512688|6we6cuweaSsnNCucXGryYUbLkKHw6V +Supplier#000512702|biKHeS dQ6yQa00 +Supplier#000512705|A1QlWBoQnxCCe4VcI7rH +Supplier#000512714|pNNdXMZgka +Supplier#000512718|42pmzhPK7dhS6uIXMusYW4gn26F +Supplier#000512725|LctjVS81pbcZ,UmjL epE4am2OK8K8 +Supplier#000512787|OwTDSezJghfo +Supplier#000512810|EaL42fpV4JGgV2cV Lhg2wJGC +Supplier#000512873|la74pe4FP6x6ViJpB8 +Supplier#000512874|QdgOR2dzCda Od +Supplier#000512881|ZwbhaRe,BA4kkCxpGx7seKctX 16Xn36 +Supplier#000512987|ESGs 4Zz4E +Supplier#000513015|QnnT2dAN1wDV8aR +Supplier#000513060|QYIrWez94Hff3DQaqnFDxbnEd6zh6 +Supplier#000513083|Lkg1jhLUAJXvOxzLhbr2xs JJi10A7xIg +Supplier#000513213|gGDJt3STW1OT,gmL6tU9SZpafCXaIQgn +Supplier#000513270|Rg58Wdecu7zaDr9Z3HgR +Supplier#000513315|2hevElUrr6iaJVeTugLue3tTi +Supplier#000513316|ds9rXTlfcYZ +Supplier#000513390|QzMAjvrTU BQVhsubjNA64HaXp2G +Supplier#000513391|T,z,EA u6Oopp6Fj7qSQ5YOFEQ4LMEkj788S +Supplier#000513418|i jlPluu57DJL5KiJC +Supplier#000513478|iNTJyyvv27aDhsvBq9pVYDD +Supplier#000513543|LNxmIBWp4S8ENQAP +Supplier#000513643|mk56arQzu3AcykeeEnwNt6dxiF +Supplier#000513716|zM4edsUK7GQ3oO,cmnOcT66T4rEUbC9 +Supplier#000513730|QqSIYemFPnqCMs64FzEJ +Supplier#000513773|AGTnZP40BNvrMtp8uEvpvZD36kbMYA4,iY,YUN4V +Supplier#000513783|G peUBdKtP6A +Supplier#000513859|4g26O RbUQwmCnXmE7vtdgY +Supplier#000513895|QkO,kGoA,Zs5PNGVl1cI3fxPKXZS399hMyo98f +Supplier#000513941|qzP3uP11uYOX4wlcxVOqkdycSrLnGXXZJGx +Supplier#000513953|pNLRSQQ26ede6klYBZIgu,Ckqildiu6D +Supplier#000513978|vWxNM2LdHczV2fKyxw6ous87lBQH +Supplier#000514003|wOxdm46sDVJXYEh +Supplier#000514069|zi1mohnJHZ,Mx3jN +Supplier#000514196|2IbN55PuvYdb0lmJLZwAjgK1Txwywgivb6 +Supplier#000514197|cIvvdj9m,94MzgqCaHwNpKnJBGtvsrP2HandlnPS +Supplier#000514289|BYMYsA1Cb MAgQ JQLnu +Supplier#000514312|3KnJK2y7rVoRYmCGHlc0Uj +Supplier#000514490|o2PbGx8veG6 +Supplier#000514532|71BkuMmLbN78J7I96ny6UNdvERGLv4r +Supplier#000514642|1YPOPYY4nm3cFp6YP1mXZVVUXKHlwep8ny +Supplier#000514645|KUytm1nFTDNu5 +Supplier#000514669|dylQZ88dFDB3ktzUT +Supplier#000514682|beYMiehl4Y7PwIX8qo4k3kQAaz +Supplier#000514706|0bDW0VJwNF8p,MRhPwZ1qw +Supplier#000514791|qpmPEDgGANuzu34BzPc +Supplier#000514793|YYLONq6v0TL8dC7S4Q +Supplier#000514811|99ySZtrgCEmQsb4iLZ0rpZUvuOlLMcBx +Supplier#000514850|FnTHSS8e7Gh,WhQFR wUT8hJpdyPm5Ve2ZGzWp +Supplier#000514893|,FQ00J9IesX8kOpOXUIN8tedQ2d4f ziWoLVb7V +Supplier#000515016|d3pGQmXr,lQA636IdTSosnnbVJPfA +Supplier#000515139|JVFBowTygjk6BTtvG4tU4jWS1A6dQ5PIX3 +Supplier#000515185|mnJMTcaT6amIY5kWo +Supplier#000515266|LGE4PoTzuMsfIwgWzM8YHrkfbSmOZzE +Supplier#000515287|JTxJVPOU4h13oEuNY2F3hwLLmn2Hhu8 +Supplier#000515318|QI8SQOCXhyq8T6ngjDZeuIn9xA +Supplier#000515321|7Wks2hLJVs,Z7c3fsK4AdOw60 +Supplier#000515589|dHCeuX7aphf1GMAXqkonQQLqONq9gUWQ +Supplier#000515633|vAo5IoctWwvUvKtVTM +Supplier#000515648|gAZVjWTF8A9qbS7C1ZkGF1qHfNsEBm +Supplier#000515695|GHovJAKXePI8PM1oD +Supplier#000515699|v1b6xNSOTr,C0Zzbr5mMfeBFun7Cr4 +Supplier#000515718|rJgQKUpiWbcwduZNN3HKjaeor3,PJQ +Supplier#000515963|DEgXqEZzT6qipLK +Supplier#000516100|pvaCQxfYO,lEUnAumlzCrM0XKObPJTuN7ael1n +Supplier#000516149|gvczB9QA xp +Supplier#000516200|K13cLw0ZJGeIRtWyMu9txjyL xaP06 +Supplier#000516235|TOx3pxFZzIUwit3QvWD0BozwXByjH8iZz,Fu4 +Supplier#000516251|1jOADTZ72v6 +Supplier#000516346|YdePaFCP1ocWs +Supplier#000516437|UcGHvMd75dHpLEU6DGA449Jz324 +Supplier#000516445|2Ss7ydPTGi +Supplier#000516466|tmnxJqXcWW5ef4ToUYTw6hC6g,yXMT +Supplier#000516563|o6hyoYVxTe0b3kvzL0d +Supplier#000516576|jFASaTU63cRU8a4sseD2t2eEhSMBAvDBNFcnHYeU +Supplier#000516586|esyVUEq FWH2k1De6hR +Supplier#000516589|pS9yAfjNcHPyqIhkIJlIw,0tAEX +Supplier#000516651|z5iWeX8KaNNJn +Supplier#000516869|J P45KUoaQ0mAhWVmT +Supplier#000516922|0iINubYihmp1,8oLY6uv7c5SrJZMO +Supplier#000516944|bsI1tg824H9X5bnliS4yIeKiGf ,L5hJ65 +Supplier#000517014|MN20WVqzt8I6 +Supplier#000517040|Uae3 0chZ9tDBj,zpb6Qgz +Supplier#000517057|alg3no QnQefmQK +Supplier#000517081|aco32jqw55k1s2E +Supplier#000517087|LyM5uiHvlZRFCQZ8fD4OFBty4UDicR +Supplier#000517189|YE22px5o7CFLj62d +Supplier#000517268|DXWOuAGJ3pgTTny WZpKwff +Supplier#000517275|v0CO6RqL8rTlszo +Supplier#000517314|,6BLuOcSCG Z2hM +Supplier#000517331|Ab7S6WNOZNzc3kcAkkjAog +Supplier#000517459|gyeD3cv41UiYr18JlXkMybK +Supplier#000517502|tmmbMS1Bqr4eQT 781w80WV7goxu2gQ9htVe +Supplier#000517529|VqEsUdGq1iU784NsLh +Supplier#000517631|g2CcWwP3vHMqh gRrcqAF +Supplier#000517646|nGGr5tO9GDrrFrsN98z tP1N4uQQW +Supplier#000517650|EbgsNuzytpxfhtsvt2raAgfz2MEaX +Supplier#000517712|7k64LTscm42,NvwcH96ZI2Qq1DYqvHYML +Supplier#000517740|yS9knRPoGIWMw4tBTmXbFrDtnJyS BuL1Rr +Supplier#000517956| lZT6oNiVr +Supplier#000517958|oh5nxnYoEPlitpxkdUp T9oZbHE9UELSz +Supplier#000517978|nc4wP2rdIgvcRvg26bhr +Supplier#000517986|yLsmQbueqqTgmetoxHTywLOOmii6t,t +Supplier#000518019|NW2psI1yhQ11MZeEf4V4mAELHyjhTre2z8mXnsDu +Supplier#000518137|Bzqu7OyWf4N7KtOn8D16osGhlheECl12 VtZh +Supplier#000518146|s0pXiez4bMJp0oiJ yhusIr +Supplier#000518169|ZGysk2kbpj01VETfru25ua24doFdku86Rfe6X2 +Supplier#000518194|hWuIbH8wklz6a3Wua,hVR3oy9M +Supplier#000518249|gpIBViP5rbIYBk +Supplier#000518250|BTW5AgfcMUhEV4ArWG4JZd3HgkVb1wbv1vncQz,j +Supplier#000518366|7f8TeNlTVQ5HxxUne2 +Supplier#000518607|m84gR0XJHPrjiqf4SFX,DZzrlEEl5U63HTDyL +Supplier#000518613|jGGnenGUeIP1Gc X8FSWH2lrl4wSNWqT8dG +Supplier#000518628|wokjWaQKdezQNbX6UfjYJnuN9q8E5BiQxP +Supplier#000518639|b t5MIH9nhm4YOmds0FAbCKp +Supplier#000518671|lOWJfoOBqJR2,3d0h6xhf +Supplier#000518799|obX2mRTf9u3JrGefSrXKOE9UCeA2mhq +Supplier#000518849|PQABiRgnrk72bVtWXpCnItggIhMEj8pT8ZwbPj +Supplier#000518881|shaeYFdGGhbThx DrStvWAT7 +Supplier#000518906|kdzx3q6Y vWpwExitVXq syrNppXN +Supplier#000518934|X8iW kgFocUg 0wIIiOPLLxS9vx93lo2WUIO +Supplier#000519081|TpiLjEE9MIcKpt6 5Shjvomp +Supplier#000519161|zwF2lvN9EJTdH9UGAOVv,3I1cnM +Supplier#000519222|Pw6c3y1l2v +Supplier#000519290|p,1tb2pLQPD8,RgYyNYnEQW +Supplier#000519321|KGFxjHG3gJ0i9SVLRnBCObJ2 +Supplier#000519414|meoFRRBy,NQq +Supplier#000519479|cr,tXnDZVCe5slMK4w1QJ2,dtiYAB3n90Vbs +Supplier#000519524|v98ottGQ3GkDE5YxprSm1oaXQhtF8atOI5E +Supplier#000519546|lwJW5hVIM7CpyfhsSQi7lHO, Ha,vLCfj5wUfG +Supplier#000519570|IcAtTgMHjwlBXhlL3T0s1Kz1F89jf,Cl +Supplier#000519610|d6 ThC pftLUt4SetF8RUU +Supplier#000519686|gA,vse7gNleqoA,ZkfIM4ffkvGzYHW,JBpsYv,a +Supplier#000519808|o2h bF79RwZEVkFWNBSq5r7I0v,n +Supplier#000519815|dJfok25M8GJDxgb8vcMw6M26nlhI0P +Supplier#000519820|9e4AvhuuSZl3wzqAUcRwWBAQUV9kCCW +Supplier#000519918|VvioO3AXxKErDGWrBP +Supplier#000519969|KEcEQHzAUl3D1R5PSW Jfo,BAB +Supplier#000520024|EzvssExbzZkmMC8TKq +Supplier#000520123|EUwg,435L9KBEY +Supplier#000520148|xGYdTLtN0rFvz4HkHh5w0VcE95IlXy27PCjM9 +Supplier#000520156|pCoVKyThmd64lNlFODUjr3mb54NscB +Supplier#000520204|,6Fh6hng9710eDfG +Supplier#000520217|C5qqeDAUTTpzbrB49XRGqjMGDCCywZ +Supplier#000520256|SZyLqqkFN2T0n76FZBHR7WjLXVC90OZogvHnwg +Supplier#000520266|nx2FzuG9XPU,ShwYjH8RfCIH r +Supplier#000520284|JmT1BmrpRSi vfJ9lPFBPYskR8iJ2QH +Supplier#000520352|uuUbjX2Oyphibb14PG0uk7TM52x87I4 +Supplier#000520447|gcEhg9vgo9J7yh1X6rnzr2ZfsqVJHAcfIj6g +Supplier#000520476|LvdEM6senYzEQguq NT +Supplier#000520594|pGMSWnLYmPKmFOV +Supplier#000520604|SoAVufmBLFbosB0WMfBKVx2V 4inJ5b 8 i +Supplier#000520721|qEDhnUtk9o oTtS2bZ18,d +Supplier#000520811|apJBOYVhxZKHkElmqNVmJUBcDOP2X6CeU92 +Supplier#000520834|pPQIOlWigbcysq 18nWsYUVQDYla0Dzres2l9 +Supplier#000520836|NbCPyVZ7uBh0q2MYkYVJK2d,XL1 +Supplier#000520860|PQoh6zSri0 +Supplier#000520874|kd7neYvWAn X4HEMF,6RSo +Supplier#000520962|UFSxtCuzyEiHZiM +Supplier#000520999|KW272ZSkj8PbRebJroSC8yqM0t SJLEv73 fl9AJ +Supplier#000521084|fn zL4blycaxcBbTwnxrUdYAn8 bKLao,5R +Supplier#000521086|fcwOhZuKaHp6KW +Supplier#000521105|56aMgsI2itsjI5I VcXQB +Supplier#000521169|ZsG S6j8f1vigcHSDE968gE +Supplier#000521170|6sx7g1gruCUae6CgihOikeg0mDmx siw +Supplier#000521206|t7VSETEZZoHCES2HpQi A,K5etFxZ72 +Supplier#000521276|siyO,hYrMRJGS L,zYqyk +Supplier#000521308|GfN27YROoHfDAqC0cFfSl5S +Supplier#000521352|QqdSdKL0Atk3,FyD32k6ka +Supplier#000521357|P3yF5Crpm lEyLQpWmquDw7WrFx9M1xzC +Supplier#000521373|yvxZ01vxdz9brkP8ne +Supplier#000521483|zogqxbnx4RDTdltRfkMJahgXo fc +Supplier#000521500|3lzrk3PJqftvBWPhAfUfZO3G1dy4R +Supplier#000521564|GZSuJSLJZI9t FPQl bna4zPuktp UBD p5yxyzZ +Supplier#000521590|40ZFlU6307pP8LtAh +Supplier#000521622|stOmA0PVz7PZKEE9vpSi +Supplier#000521625|jHW8GodMORodO,kH4ZwZo25d4gQ +Supplier#000521771|tuvfHsHSioVuSv3xolzA9fq4yGd16Po5MDounYMU +Supplier#000521804|tDbC9pGHvg4kSdPSkUT w6ompwMjj3Ak +Supplier#000521833|nKn995noUWWsmHpZ18XdotYwDKsJGCnf,Nb +Supplier#000521849|z AxOlg hUBO,7PpJ95wmHTXDJs8cdpiLZ +Supplier#000521862|f1agchzaSBp +Supplier#000521959|i7qBpN,LjQ9k1Dp3XgMsaRbndwnWC3fvqnF3O +Supplier#000521995|kUnFRDBfEMyWG063FuguUSPyU6j5GD6wq +Supplier#000522018|ajOAJG6I293sQiAECrfQd +Supplier#000522145|bcavMy56IIv1optcLJONRaPVJuefqnjoxk +Supplier#000522376|jdfoOiAL1y5zhYW3MkboK,uV5MrOx1jC2a +Supplier#000522463|uvlo3x9YOG,if,oYk5a7aM3Y +Supplier#000522506|Owv8AgYubpIGEJmmDm4Q +Supplier#000522581|ituZBfQuLwmUJLrnUlGqKYa3HkvtPP +Supplier#000522622|MDnwaqMivVQqJVKVUaPBZYIreH5 +Supplier#000522632|iEe1YaOXHdd +Supplier#000522691|MZQNrcNTY4wS3bo6B 0QNf64I4It4A +Supplier#000522702|KiK1q2FxFZ +Supplier#000522722|TfeU6h9GctgbfmG,NmGseUCKYdaAlAxDrh6i2KKb +Supplier#000522765|EoeVrfLEnnpBXl49 +Supplier#000522791|axweZL8AYjwxvzgM,oGovfiMFDIxIPPioLv9qSW +Supplier#000522949|lD2j1LDJnKKUio0JEUbHG9Xg +Supplier#000523005|TNVX9RC8Ps +Supplier#000523007|bRJJdbymgGsfEdjNHn9 D8N +Supplier#000523079|FndyBYD2Ax4Lho6xS thfyMXIqKmPN6YX,iX +Supplier#000523140|Nm Xx7FrKDRCg80up +Supplier#000523178|pgOnBgColPr9KN +Supplier#000523343|Xh4xD,U5G3eq0 +Supplier#000523380|LsMgbmoQExL1f +Supplier#000523406|hlETU7qhJa YxtY2SK1mqrt, Kk99l +Supplier#000523409|LfwB66nauEKYSNKHzR6pDJoxmATX p1MJLRYIb9S +Supplier#000523439|g5ihVBC zgrhsAIZB z3oJSyNk8Qnz48t17RwL7 +Supplier#000523460|E9ee50X7BpwouJFtmSHim3HW3ueyI +Supplier#000523501|TwyVZcjEYZNTMD +Supplier#000523581|ja0w5aiianVNw7eCYqQmCWE +Supplier#000523637|TCz5r0u,dghOvmaUdiUpaH0vikveJdEs3vBXxn +Supplier#000523724|IWitUBv0nXiOH2ZzZi3SAdGH25QV7y +Supplier#000523770|MoBgzcPNgsBTEgZU2fC7 +Supplier#000523840|mNxIn3wH3QGwlrtTWUIQlts9F +Supplier#000523939|Z81Ap 9te8PtV8cArGMTl9r4Z8ELPWVM3isG +Supplier#000524078|TEV71KRcX5QXUj49bln7ASwU,XrCB +Supplier#000524276|Te689RBHsI9ce6bzEoT +Supplier#000524290|1fNC3mq7U4shn9O,TAZvjIqgJuSJlp uG6 +Supplier#000524292|,hF9oXDpZgo7e,NyrRjT +Supplier#000524305|SOkv6811icoTg9fH55L97Yq8MnxEuq +Supplier#000524369| 3FkBSPgLV3gGioZT5sgw3Pe1le58pmwRjplA +Supplier#000524373|ycagHwfyA7nKm3 +Supplier#000524435|HUq,bIIAMWn29CrFubR3NNx09gZwFEeMXTr3g +Supplier#000524448|Hmc2zH4rVkIEHrVBz,F,5mwoOMC9mDD7GTgk,x3 +Supplier#000524453|jVZjBvA2J9Q32E +Supplier#000524490|joX4CLQhc3OmVwdO6UXYbVET1TA +Supplier#000524705|2RInlnRa87XzbpNX8cGNQK21HBxvT5xhMuRc Nta +Supplier#000524718|nSa8cUhgtQqYbu +Supplier#000524741|q8hNYByTLrrA7g24qPSmF2Gzsvx9Xr +Supplier#000524756|yIcDS9McytoN,60908pIVrw4xvz3yBf +Supplier#000524783|uv8zLcB3bq0fytdW +Supplier#000524938|4rZZxaYQVwDggKX +Supplier#000525054|3a5FKVZkLjSpkm +Supplier#000525213|rV5H1VbM4yzQLgi6z0 +Supplier#000525286|WZUjm2EYv5wnyPcOJ9ITq7y +Supplier#000525307|frh5LNy8zTvHCoiBBjw,Ka0X +Supplier#000525358|wSuAwmS1dj7tK 2yu5FZ Ro4uWD +Supplier#000525393|Yp,wNO9VFQvx +Supplier#000525446|A0U6pnG9AwRCqgXQk +Supplier#000525471|6DA9,x48TJimrflzXTm6no 4AofXIi1 +Supplier#000525601|XAv,EI5A1xuO,NA8sDhO4yOirK3UqCx +Supplier#000525643|3oVH4u51mJnD4SnY +Supplier#000525650|cSCKmZuedPTmDmYjdj02,,aPsPSGP8NaeI3or +Supplier#000525720|ZjkSTLRbS6l5na6sqTOaf5CzZuBhHUX9h2qi +Supplier#000525734|5JTzGqXd4tMeQEZIEXprEwH6WfDM +Supplier#000525954|hsG5dxiejesQwdq95PEiL +Supplier#000526003|jGz5drA,rJJPYmUI +Supplier#000526014|7Uy5zzD6e5ld4LVD1cx BY1t7Lo +Supplier#000526016|0,5T4jBAGBfqKu0rt +Supplier#000526041|6yuua9Gb 9q +Supplier#000526075|uv51WnTc9qElAlBXjp0JXf4SEKJTXWXRXlNRI +Supplier#000526089|iLirFkx8qAWnAOMsLLrxFd1x1IjE56VqQyP9 +Supplier#000526125|JrS4 mqjUUbZH +Supplier#000526177|OJvD yxY 6xTNokWboqW9LB5cACJ3k0 +Supplier#000526199|wfiNQ9eDkDxOse1CxsJUw225kHavqQpmMJZW,LxH +Supplier#000526323|knackCJLQ5KfwfEzn7tBxVWUCi +Supplier#000526341|,TvOtQDLWZIVQx,45fmgZZ +Supplier#000526485|C0IQoJPWZZgtjg1knBAwm +Supplier#000526555|2kiN,oveCJzVke,m2vmbHRwLYxrW3f0mS +Supplier#000526559|v1NrDR6AInz,DG289aqiXX tjNr1jXuBFtCz vu +Supplier#000526689|W63ms6Ffay2nVlLIPUgauF,0t7GHe +Supplier#000526758|JEqpbq62B,koyMseCvWkuTPFjDRpAjSIqD3Yd1 +Supplier#000526830|sWfe4JZ1UUOo,RKhra0iiNZMDXG9vt3mN +Supplier#000526951|8bbag13nXvs0s8 v6VNzD30Td9tVmIy3X +Supplier#000527005|jpsywlfTeQ013jm3oZXzA5uwxB,dYlc1TA,5X3 +Supplier#000527016|rswUM8wbSPl1zI6 ,M7z,eHpgmClKasofllP +Supplier#000527055| dSQMvieRSM0sy0h8fFjHg4GT57X +Supplier#000527066|4TQClOemQhFn8xgNWZsHFy6j +Supplier#000527090| SxyfPJ6HPN5MrFx BTxWu2pnfb9r +Supplier#000527141|T5pOB28p22Icek2b2FscfLwyUcEs7mGW4O +Supplier#000527150|eAbmCzjuWM4RyjU0aAzWb0CNXJ8ywe +Supplier#000527152|ztcxdnMAf8ez78RTzQ +Supplier#000527177|ThM7Z 8fuFo0loF QmPqgWepG53IuKt +Supplier#000527319|YlcoIhzqhHcw jhPi1nFBH +Supplier#000527552|Nwxr6YVEYAnVW +Supplier#000527730|9BwTCjn1TDKlgJfcdZ4XS8YGYoAA4yx7WEywQQzK +Supplier#000527759|bRXW,T5TCoECfWfFwO2ftk5AEZw,n9kgIDWyJo4 +Supplier#000527821|XfOP8FCuZxBf3ruT5SLh +Supplier#000527909|Yllat02UF4AnXBrcJkSfSMIy95R0 Wz +Supplier#000527922|JdS1HF8SatKc5lfpIl8ECk4YcEG2 +Supplier#000527948|eXRa8ih0yrL9YPZ9tdC4gOxZkNpquLWXEC2 +Supplier#000528206|61hWJWJSMdxC5zzmnfojaVWF2T +Supplier#000528273|IDahNzD80VkRhrUjShHFuUj7isqpVY5JKCNUaK z +Supplier#000528284|,r3rmHJHzqB +Supplier#000528329|ujDzYTHkInLmln,zsdE8n06aZynaKc9,GbQU4mc +Supplier#000528345|1PuvgskJkWMZVf,CSV9JL4A2K4Y5meS2CQb6l +Supplier#000528382|BDwsTY66Z6MeeRsm ajzPlfXY4d +Supplier#000528562|8tfa4qDEwto0OkEIRFukKg682jJm svYqb +Supplier#000528596|MpSCQS0h6TVxXtQ2PI2bbjYc +Supplier#000528660|CwFU2ICpaQNadeZrje 48 gD4nVZlD54jX +Supplier#000528754|fQfGp7JCaHbe15ptxO3Q +Supplier#000528880|8S,j,MnCCs ,ikCVqQ73KWHtZ6SZ2FVuS9QH +Supplier#000528892|eGY0hKfz4k7HW3Sym0LEnguHYU9uYEPITUdxi +Supplier#000528903|Q2AISBubry +Supplier#000528920|FmR4YdLWt45KKRgWKRMo6AAwck LH1Z6i6haFBY8 +Supplier#000528961|txA,74nPmb2Rmgl8R9vVSBBib,fEo2iJ Tl +Supplier#000529128|UNlNf7SCUHHJXigf69awri7r7G,R +Supplier#000529140|v70Agd3L1ATmqMJoKL0NyMH,AF +Supplier#000529165|9su0iJCNUV +Supplier#000529196|6W6RUDuckLO02p7y +Supplier#000529263|wI71hqhZfYw0fFIbMdbJsuIc3Ch +Supplier#000529271|1XjzyOPT8Cod +Supplier#000529277|PW1VdxP4i26 +Supplier#000529386|,66Mqj1lWiIeadqv4uUQ +Supplier#000529436|UOxkLb 5Wu94vNJuSUWb43opwdlfV +Supplier#000529471|9sFI2m86 AMpX5FxHlUZ9fvL3vf3rNE0rLt +Supplier#000529540|iTMxIGvRM1asUta rhnMdLu +Supplier#000529578|BojbDTTyfLqw9j2zgtANq2DBaUiisAR6y +Supplier#000529635|iLN0FatBgRqsPy1kRhVuBYeAq,,jXCEebDf2h +Supplier#000529711|CtPMnztc8s2c 0HwWkv8eAnMqtRKC +Supplier#000529729|9NKtMYZpKV,0CgSLhQQFsKbVuN px +Supplier#000529762|HxUiJN8,0AIhu4BQhZFwkTX8QxXGG1z1 +Supplier#000529915|e93cZrZIdeC1 PCk LIXJziINJZA ynLXMwbS +Supplier#000530013|EPyBUtPM2U0 9E82hfeJ333 +Supplier#000530051|GDpCxaU8YMTqtFJab0kgSjPUP3Y +Supplier#000530149|1ndB3iipZBf8jybONndsgH +Supplier#000530159|J7lce9uuZ79x,OC +Supplier#000530162|6, mgdyQapzS +Supplier#000530279|tngm3Ra1 9xZ6KhOOdhFOH +Supplier#000530291|jW1KEwjZyY +Supplier#000530302|1BigVrb13cuWwFHVuyIgWR VB6jmAwwfM2L4,uhC +Supplier#000530456|lBjLvgpUF6r6m6GbTOlfuOBFD1ypPcVePskjbSor +Supplier#000530475|gDP2TJPSaI0XT92JGm7OUAPlg 0dBi5kfyJPf +Supplier#000530562| cH1SQNoYsIScVXo7V9ov EXhIIH8eJ o +Supplier#000530580|QEpi6cFSeaCdFV6Yaszms71WPDR9yR Q +Supplier#000530659|MNYfpFlvHKsFMpcPW1 +Supplier#000530732|RJBPlGjoCEAmnw +Supplier#000530752|07eljFTgHE8Of6C5aXupDuY7 +Supplier#000530830|p2xNupNW1 tgMWSryp4M75weV1Hx +Supplier#000530842|rAnFG2KAn38YxRCDhXexSBWRqCHqvfRo +Supplier#000530858|dMNsF0 ooKwwpqHWhEw8qJxTPlq +Supplier#000530895|Zqtr6Zslble9GJjk +Supplier#000530992|ZaCCkodPvJkXC7AESiaQ3tj +Supplier#000531002|lSnhdla5id3Hr97vmc6ZiBBlcAthbY3tLmrgVue +Supplier#000531025|Va1RlaNnIs,qQ0fvT +Supplier#000531027|pjon,fceKkGxKSXpzSxifwK3XF1ZKV8Q +Supplier#000531066|wEzhx4qFD9wC olGO3TC0 +Supplier#000531159|gRJFWuxHPiUO9ocrqsTqVyxIsf +Supplier#000531291|NTQV3wqithCLKeyjr9 +Supplier#000531295|DBN5x p0HScKVs5v3Z4IGx84P1e4rEBYYL2Q +Supplier#000531430|UK41Hm,,5ek7kC9dHejOuRYRZf1IHkV +Supplier#000531561|L3Fa7X0,F,vij +Supplier#000531598|6Sldd3CUCFAv0akUmA7g6SwzSXYCafGRV5KPRHyW +Supplier#000531749|UY0VK1BZjHxGNqNze +Supplier#000531825|ji2shmvjspV1f +Supplier#000531875|PAiBX0S9sGrYdxJUsZolCDlThL1uUxNEuXV +Supplier#000531897|xiZyaKILjByzYtfLo0g5kOAlJzG9 +Supplier#000532176|nNAga4bcOaBtI19GTR9waBtHXWbjg0uOvuT9,6N +Supplier#000532344|wSi r3IImo6 jXPhgIQ8OQc,fT445uQbtM3lmfCL +Supplier#000532345|YLgMXRvEEHwUFgIFyAMPSKMU98HhS +Supplier#000532429|mBl4xfv94V mInn +Supplier#000532517|VxXXieIHW2R0ppbA,JSTx5ZlPObuzQXGIb +Supplier#000532536|kRN9n,Ln8dDe3phnhTu9u2nbcgI9 +Supplier#000532647|oIcIuWWy Kz CiBTMKlzWPlRzOZ,tjkJ6dG +Supplier#000532648|prXwfnA,skiD +Supplier#000532696|7uov7Dfbj2ppRIU +Supplier#000532729|Qy,m,Ahn9KAKc,3JAyG9cF +Supplier#000532763|4igQv3tV6qpPywdXHHnt70gsVuEgJgACVl q +Supplier#000532773|02zqqc4zAM2h +Supplier#000532804|pv4TCmOizQh4 +Supplier#000532806|4jUyivAYP934,oOgp1pBPa +Supplier#000532938|nMpr6dsMc6EBAb4zx60,TNnMOEYPvFbMDdc +Supplier#000533112|bbrJ6w3jy94sXUdYVIJGc6otU +Supplier#000533191|UM8kaU4BdJyOfaP2kEXJyUc5TM2 +Supplier#000533203|6lm6 I Zh,zFs7aoAG +Supplier#000533338|MCcmF2fycG9NsN +Supplier#000533400|p5itDfW6TxEAJyl +Supplier#000533406|JfhPTULVsBWq +Supplier#000533411|VuhkODVcWg61TXFMBDqog3vtVHmg5l4DR9 +Supplier#000533420|xXV0leEFS bCKvmRCogFUKaNPlhF y +Supplier#000533479|Zht7ndwqqCN60B998QAqmIKy4JQHu0k7hhZXk +Supplier#000533525|9U7bU5zN5oMFstomvAjty6bq2FfwpC +Supplier#000533526|F0UrpM9soGa,b9vi +Supplier#000533538|czKqqPt4Y weNvxeVZZxgTGVyoU1pxrl51Puj +Supplier#000533655|ubBCNruhrXJ3gaudB3,llgD9y +Supplier#000533789|Kw oCKFjsALHZLHpgtxNTXX9LeXpA5ifn,x09MK +Supplier#000533863|pGDEu7MrU7 +Supplier#000533919|sLG,aCvYWpiOVhhqvMDTmsNsrJdN2A1SM +Supplier#000533956|NaH1a2A3R1jSOAqro1n,KvTGR +Supplier#000534037|Mm7KdmYIPfSX8h +Supplier#000534084|ex28iI8ydYjyv,Hcb +Supplier#000534137|FIBQynWy9GRLlOnKAeoGDNovCHVpCz +Supplier#000534242|C8jIyZ0WWACCX6roF6pYA2 biqxPJ1dZMyhc +Supplier#000534251|7S fmd07pkL,6ZddRhvMLTP7duzAh2gz7toW +Supplier#000534279|,mlDJnta1yO8 +Supplier#000534283|cBz5o2e47rQB1AseBZ8,oGF +Supplier#000534347|QgBvx0jeULCczp32w6FF289hmdRuOK,MIE +Supplier#000534360|XnDcJlHCZRUNIERS6hU4zvw +Supplier#000534361|NK0qjAu6VjHNaWZV17f GL6,W +Supplier#000534392|Q1sQpBYBjwKbXsYIxK0WOH,0075 +Supplier#000534449|YL78g 7bK4F8Kg0 +Supplier#000534482|HK1JbRzic t +Supplier#000534511|RiUnGc,67gFcZWVPAMarrN1A +Supplier#000534513|n3G5a1A1InfqwULtYaJd8Fi0o7cQzPpM2AI +Supplier#000534555|7KGiQU7 rY4 +Supplier#000534816|UJ T8YcmR0eHA00z +Supplier#000534877|enQ3vzwCNCh +Supplier#000534950|eDnAgzm3w5Vfog 2mXf9cVYKUNrYFzYOdGBxC +Supplier#000534961|Fe1aPByM8O +Supplier#000534969|2B, 61DuTsSpvNOM 1lgnxu +Supplier#000535065|WNB0Kp48c8llWqD1kxjS +Supplier#000535075|PL3UW y9b5zBjRNEpMljY87wVw64O +Supplier#000535081|i rYZsSoiRs980ng7Cryp1yX0be +Supplier#000535303|OwGcv5MNRVOgTdb5o3NE4 +Supplier#000535345|ddbUa FVIH,N29eprrYD pUIr6UFXMr +Supplier#000535391|J GvYwIWGar4F +Supplier#000535407|Ywrh0JOFgx XRpwJntH +Supplier#000535462|K3Snp0zTW8lCKZAJ92a0mf6Wa7 +Supplier#000535487|qg4zsqmMNX 2QYTOLQOPJgAGp1oc64kVTrRS9 +Supplier#000535506|0 AKL0wiMweziMKQmyZTvLsLJ704gQPuXad +Supplier#000535523|Yr1yb8bmCjrd6L12MJJYa6iWViDid +Supplier#000535525|vT9wOzZh31Nu2B4cE +Supplier#000535604|O3ms39d, 858kiELImz8NE8y +Supplier#000535618|wiymljYD6hZJWIBdG +Supplier#000535642|aJhKrj0Oms3WlHBxz8M6,XBYgvFr0z1 +Supplier#000535868|d1lbt5XMX9Ls +Supplier#000535892|i3l1 SQh,o5QpBht +Supplier#000535911|dZtL,2eZeh +Supplier#000535924|wZBZVwZDIfKAQzq8g9eUhqGvMUb01RSn +Supplier#000536044|7yWJaAQXjFFxtdt +Supplier#000536131|wCKe,x9NVTcM 7lDMM8TRQy79VdHes SVYl0XlJ +Supplier#000536146|FynKppTefB,ZYcFZDDEO +Supplier#000536191|Un5Pwn08KdcPm +Supplier#000536197|xD2uRaAx5b9,BQno5gh,KBSmbXnt yv +Supplier#000536199|XnF4qm6SjZzZBFh YOxcXlJk3G95mS3 +Supplier#000536203|RwCde4yy3qUYvxn,ORhuPBghz3 +Supplier#000536255|NNsbootuRBlpQTGQOfeqpsRpjmksDE +Supplier#000536341|kYF8tYac9gBYirtx2Jg +Supplier#000536381|aYcPXS9iRLJJsp,pSP7PuP1cOjr +Supplier#000536414|umxOyHCkW74 2 G7Oft5M1Uv32NZTGh56 +Supplier#000536436|x5fRFkTPO8 xN3yPVc9hS +Supplier#000536453| 3lyaRWs7YByG,KCbb3XhIp +Supplier#000536492|NdMYJ8Et7vI +Supplier#000536509|93lz8l5JHQYWVUN +Supplier#000536549|VeCPEsVZFSA4DKTY4c4zqVG,wQ8V Pu5Dv8IqPn +Supplier#000536608|VuVWKHObWugCOp8iKa1MQ7aGE68hK4GHBVoD6w8 +Supplier#000536719|qOx bA83EAMU2 +Supplier#000536872|OrF5AuYHaNdT3AomgttHCs +Supplier#000536881|cgTwbfqAkCPE +Supplier#000536900|OyiDx44Mtr5N , +Supplier#000536923|ae4vi1aydsv6Q4B05WkZS2wBD7 +Supplier#000536940|Zv81MEV6vwXFkh9A5ob +Supplier#000536962|qB6kG0ijhH8svuOvykic6kHfvLOhZhrFKRU9fKun +Supplier#000536996|uN85hDa07s28CXN3MM6bCx7Swb +Supplier#000537035|Evw77UpnB4ahgcSDdd4O9HRE +Supplier#000537167|RI0oI,s8 XXzSCPQg2LhINhyt +Supplier#000537169|YjNNJbonVqVCdhlivIg +Supplier#000537172|zKEy63x70R +Supplier#000537254|NG856XzxGJl1BVCH3DmcaMw +Supplier#000537305|oaIZem306QDRMSVtZ35eSh8nj +Supplier#000537353|xrUCQ8AFq0JoWzqQhr0hcoCW6y51yhG7k +Supplier#000537421|NoBmKCjSVn9r1izSw +Supplier#000537439|,yZQnj,lXvqr NvndsXov9WjDU1Wh81P +Supplier#000537506|MJDtQyOiOUCvufdWl,grcPoFavkOq16var +Supplier#000537539|xe0lo1J JOKNMHbEH28sHXpX3Ueg +Supplier#000537557|WL9dacJg,3Osj0q +Supplier#000537627|xVWH IZ6Fk69,eZE9MCh8irsyRXS0n +Supplier#000537635|DPcvwlViwxyAk +Supplier#000537654|crDM,aKYJ2HLFmWTKrSYmtYnDyi +Supplier#000537699|cku5Skc9sZBr4NgAVFEcOC,4jxHJv4DqJvDLkl +Supplier#000537723|lOEn7VuBykNZ0Da lEpi,9wRc3tw +Supplier#000537970|0e8YVguoUaqlN9zYBk1v7w4bkYVebCyUsWRI3 +Supplier#000538025|wVWnxhM2SktlqT2TWUb +Supplier#000538058|XV0091QQMyh TJeAaX8VQM,K1ToRlz +Supplier#000538099|T9AWj1V4q3BzvZPR +Supplier#000538174|K2kVZ19uA3YHheARmSa8FfgftTt2OgU2RcbItM4q +Supplier#000538214|tVJi7D Tt83psOv4 R +Supplier#000538365|SChN7NKXMzb0G7ibMXIsWYnMBvw7dL6jCJ4mm +Supplier#000538375|HC2yos97ujk32C8R +Supplier#000538378|i1sNcdTkshI1PJA +Supplier#000538397|VCRuzsXHqWYmQgxJPxHb1PrBqvHWhzh9w +Supplier#000538434|HVGbPbC4VDDdchF6 +Supplier#000538452|g20TEYgihMzGAjNQuicRNyx9lRzQ7TmLr2iI9S6Y +Supplier#000538522|W2ikY3l1fpUY0BS6U08w oiyoh8M9k0l +Supplier#000538532|QmfPC,9QH7cfhWdTPGG7cMc2x +Supplier#000538578|vBWhAGBVV7LU3P0eMPHCZ Fl +Supplier#000538617|nTriZ7zMnrrWWk07LM5V +Supplier#000538706|BMwKPFx38Eh +Supplier#000538734|nrOyN1wpKh0bChRmsW5buK +Supplier#000538823|1BJAmg24KdfnIc2EDLsnpq3D1Sx9 +Supplier#000539070|eMgoS95Kr4TaMDfwrx8ruG,2rMaMwK +Supplier#000539116|pK76lPXLqVyOOHaZZzoY +Supplier#000539187|VIMC6WCeMSnEnS +Supplier#000539202|SCjFm0b970yLEUjzp859 +Supplier#000539236|AwKGVXcm9QBdxAEubVPW1Jrq3VijAiMBcJ1HkqL +Supplier#000539263|49g,QwG,CQxeV3q MVKTFsMOK +Supplier#000539280|lWak0s8y1MElnF9OlPmk9MabPxtLTw +Supplier#000539302|zVVQ7JgC2xPzokQ4qBYWLeaMIt0GQ8Oh +Supplier#000539319|pqRIrpnfHASRaS4NNe4PBmY83BrTCAmAn +Supplier#000539516|gTHAy1XFHqoxS,8oWvdXtqAWXG +Supplier#000539517|lYntUGbHZglKK4, +Supplier#000539586|Pp,MKI8l1Mj9 lkj +Supplier#000539695|D8VPijFMe4 K +Supplier#000539790|XOgtCwyTEQTNKZ9UCrUXZEc5e +Supplier#000539809|N6Nq v2msQy8DvBHCp W1e74k5lP3 +Supplier#000539837|44ZjgdrvfHHdy5oefUrlPk +Supplier#000539929|6ytrvspCD eja2B fZu1ZUDGHLCi3T +Supplier#000540121|UY0MPiO0QOBEuABCc0 +Supplier#000540204|f,DRHurU51xAsHOa +Supplier#000540230|b4SQfd5Ef9 +Supplier#000540233|D,GWBgMiu4WE3jK,AS QjMp3A +Supplier#000540288|k5PtT2Wwotw6KIgNvkHqyYDVHS7Tq +Supplier#000540441|Xxp8fBNvDBJGy +Supplier#000540474|BIOP5qAcTJ1KP +Supplier#000540542|6peQ71aymFOBSz3HAKv0 +Supplier#000540678|HrbTn6Pm2yNsdQo +Supplier#000540692|nR6FGAGJHZb2TmkM35l3,2yz +Supplier#000540722|aOAbtY2uOeR2snJ2iL5 +Supplier#000540797|uJBDkVQShORZLvq gaTbC +Supplier#000540864|bFWeu2L2lzHAk5GwxTx2,yC2 +Supplier#000540907|yoMbd4Czle9HEVZSOaqs6JWcsPB8n89R +Supplier#000541013|2Ek0JBF Hm1j +Supplier#000541019|87EG,x8gUtKiKWAM5 0G6v +Supplier#000541129|teOPWqsqTB +Supplier#000541173|6DE0LtAzOVkr26UkmkCwp NgQPhRfcP70 +Supplier#000541241|6 uP6XPq6,kY7KJoNUipxLs5OVi +Supplier#000541288|XQRT,DygaHhkTYUARlgEv6Oq2a,IxbKN O3 +Supplier#000541325|umo,TwoTjc3 +Supplier#000541332|XeC,ekd4oz4b7U4MkHaN5V4ZlrCNVw,Bf2KTa +Supplier#000541512|wGGRChNI896xGKfgi2dN3iajYAfbMN0EG,f7zu +Supplier#000541553|Bqf,NLpiEY +Supplier#000541573|g,lxo3Qllsg wnDSWiEQTpEGK +Supplier#000541647|Q2OHPqoIgwlpCY3eAJPEEoOPlLzcyt9i3 +Supplier#000541747|K5gi o7l,PEv72zSf7Z0wRlxS +Supplier#000541751|5JkA6zLg O7xZHSRF +Supplier#000541759|aukcqQ9XjpeMUp3PtJh7 +Supplier#000541800|7kKxcYjagLu +Supplier#000541854|opKfSZuNC6nU +Supplier#000541889|4F2UPXHQDKBAKJdDYWiJmNQ0Kaj +Supplier#000541943|9DRv1SpE2kDz6733CSaZG7OhokyB7FB8ZoNy +Supplier#000542067|nALTquQAuK, +Supplier#000542123|aMMiZUTAbQQI0bSNI6E +Supplier#000542125|PUBver oxefc5Ww,YigWY +Supplier#000542131|2Qy 60MmRBI6vkcHHpPn,aE82MF3PGK3 +Supplier#000542174|r904WWdJ2oAQcSNUKbcZk +Supplier#000542225|Yq1z4Olfa9bqC2ws0b +Supplier#000542238|1VbeTYfNol38XOv6dBN0h TeC90,DQQH1UtWi +Supplier#000542265|fcNFTpGHyGSeV2APsnavWuikr,fS +Supplier#000542321|wEzvzkrDaPdcuZj +Supplier#000542456|hCIbsvuAS72KDimXzn7T,nyXmMjbCO +Supplier#000542474|WI7cbVSHZrKpeV +Supplier#000542635|07beQcZs7t3Yf9gX,DXH55NNDKSkYK2VUOhL7SGl +Supplier#000542672|A5 0TLIT4salU97M3zJScGOTwNvja +Supplier#000542795|tgZ 1ZlpEydioZHrx +Supplier#000542818|patD,NIl2pQoFkQHOv75CQ0NO +Supplier#000542843|,KbnB6oCei3QD6X8y4cOcfxVBtGuJh2MAV4BhMjR +Supplier#000542849|4fHbxxCDd5OlxA,y6AmmATmE314 TxrGt6dDt +Supplier#000542973|m7stNfdg2h514JBNqVwamph +Supplier#000543101|Ytr3JFsoy60Cd2KvhZ3JH5AmlWk +Supplier#000543122|23UVgfDdrpjK1oUisILkSDwI3recm kyy +Supplier#000543154|,rhgG8mdjZHeKlBujWAmD +Supplier#000543181| 6PQEMID5OZae7d,Y +Supplier#000543247|gi8Ow2GM4jF4ugbH8p9i2 +Supplier#000543262|NxBBHZHNfdgH1cJP, +Supplier#000543265|t5O,XP,u0mQt8cpi0k3 +Supplier#000543284|4sF0GGRL8WxfClV6uvP1H0qP,KAHqrclHO +Supplier#000543288|NFcpvTLSdivC4KTBQwAhfNqiiFBZSy9Cqpq +Supplier#000543295|RC3AZBpoqQKSFYynvj5M1Uj1DI7zeLFw,DXjQsZL +Supplier#000543332|fUKHmI0wl1tKq9Q0pCdXQdqz +Supplier#000543522|yrOSbop5zGZ6cuagpVYYcW0N +Supplier#000543541|LQD,HzHXYWFpq +Supplier#000543577|58Q2Qb9wdV8vaPKZfQIGuXQVg,crHcKhMr +Supplier#000543683|XCJdFunYeWO0wlla0P91t4lSSie6ZyIwhkx5h +Supplier#000543719|6qcXAvGpuyWzIE +Supplier#000543815|gWgVK29UNIudRWfhAdpIN +Supplier#000543873|yqThsKg0RrMvGZ2Z2zgqEtxzKRuNDpOJ4 +Supplier#000543902|tjJJ2hFR1XxhnUat7Ueu +Supplier#000543950|5HccxsseoaFlgUv1a +Supplier#000544069|jmnEHbOxNy5l6a3x +Supplier#000544218|HHHryttcSnDrbEviB4URUP +Supplier#000544281|BQcFMmShh10QsFwkpATGeIr oXE0D7 +Supplier#000544283|xv8EpJ7dQ0K2B8kX +Supplier#000544359|oWmo3SA4IMvPO +Supplier#000544471|uhB9SreSxUuaJIGhE2ROJp LPhGv +Supplier#000544474|3rW1MqlYrM 748AqexMDvxfc sxA0bYpNY6tLY,b +Supplier#000544486|hUPKEkTIGejFvtVPuw +Supplier#000544489|KzNuyHl9K3utuYhrpfaC6lw +Supplier#000544518|LTDw,RajhkOn71bGDVRh9 +Supplier#000544585|41wyzEdV5Uq2oVZeZzZjxSDoiQwbk497qrfsKbBB +Supplier#000544647|o5RjM6a1wiCj2gmqkHddgmAM6YkT67LI6 +Supplier#000544679|lFpp1YRXxQjZ6QBf +Supplier#000544683|JV8oKeCQdHzGhVA6 +Supplier#000544753|uDT31LzddzNtFzynXO 3E6N4 +Supplier#000544801| DBiGLuCvy1mYTsTrxQMnQwvuTHvCAjO2 +Supplier#000544820|A2pDdwuP7Fe,TAGYezoGuhKcX5soiQ +Supplier#000544987|thUGZAqqdUVvWjMPwWID +Supplier#000545044|8aD2e,qY,jr,Uq1neZN0YZ +Supplier#000545098|0IS2NG1cNfAzbP4JmJ6zmljSVu0 +Supplier#000545118|GW9Rje5oFNu74qmg56KmprdBE nlgMi +Supplier#000545148|i1W9KIZeFmddS3IGLKmhOfnoH +Supplier#000545239|PfShxhDs3qOYij,gxBp +Supplier#000545302|T,Ht3eiVjIOV9K7XRKlL2I7bvuG5kxWqtvy16c +Supplier#000545321|wR2WPoYUEY7DBO7ApM 018RDT7RRtJB7YI +Supplier#000545341|p6BmPXYrKpGfEpTVokumLorXOPf2X1YC8NXb4 +Supplier#000545481|82YxJlyVymmFfVFKiXBA65vzlbqQRp3SJ3f1n +Supplier#000545487|EQ23hg8nuRPkWbvFzn8QUqoyDd51WsgkZoeAm +Supplier#000545540|bELEhVGcAIaIxB3NCrtVqOI07e,mXcojRTZY7uX2 +Supplier#000545682|62bF3aYiSSI,WiqnTm9zrGInJAuCslRQh3 +Supplier#000545715|BGXtzWgtFd,h7G +Supplier#000545820|jx7HMxFVFToPPjeZCBjT +Supplier#000545825|NcCkILZg20DNgUi8dvDWxIOq5y3T13WrCC +Supplier#000545863|83kuh1h3zKt2IJtZdyQjuY2IfOPu ZsYXqu +Supplier#000546036|gGzwk8 QTMenzV4VFDsHQ3vXjx,D0MFn1dvCmHyk +Supplier#000546067|uHzmY9TPSJYB6v6uFv0i +Supplier#000546134|baAMYKgmlCEV7 +Supplier#000546229|xh4jPIvn7WIr8Gbnu +Supplier#000546322|R3qDrUlFjgvgtkrfTmfpeyc1gHJL2FnZSaWI6tM +Supplier#000546334|SKBOHKOA4 X8T MAIRibJBWt4c3Q +Supplier#000546396|owQFY9Ya9XT10s +Supplier#000546426|jS1vJXYxym79j66MpYcweoXgGBw +Supplier#000546468|z3yagvYhQYKmG,N X +Supplier#000546494|kR23CBh8xgmS64HOcMBFN,q2G4, +Supplier#000546554|qcI4z6boTDQGckIh8bfjPfDOQoike9RNCMe +Supplier#000546604|rNNprZbqDijL,PM7SCikUTUxBNfcEhFS4f +Supplier#000546622|MdyHj FfdkH0QcyiHaQmOp +Supplier#000546660|GJvzUikrxohQGcN +Supplier#000546757|Nis5QoQ99DZ3xQWRctYyD0p,TjYP0foCdjy,lw +Supplier#000546759|EZY0Iltekp2IVwej +Supplier#000546779|uPOcRN rXtU3pIDz4ggDeptH +Supplier#000546804|9UC0BtTfHII +Supplier#000547011|QTgb8oVY,5W0I +Supplier#000547053|bj9XdjaaJIoxnJPNh,yX +Supplier#000547209|2XBSSQzwiHth LDYBMiUU1 +Supplier#000547241|F8cHtwaRB,,r1qN7DvKf Buq1QVwqghpWVyjaG +Supplier#000547487|Ujb,YVsmOphT1dXbSyD +Supplier#000547579|iItQLtUxcDs4VpNuX wMRf56y +Supplier#000547587|3zeE4FQnGBXSc18k1TrO +Supplier#000547600|whJOaG0RXkb7GbRacHBOh3LuQ5jGsuw4wJ +Supplier#000547712|m0p6J,KFggLFva93R +Supplier#000547766| hj2f5CGjAUxBxjNCedtHVOV +Supplier#000547787|,Y6qmnp0syFI4HDo7Q9 +Supplier#000547871|ToThzwydKHitwcy8DF +Supplier#000547874|LquSYuQ6lOU57RGHlt0fBPFo1j +Supplier#000547978|ThCWC3r88ok +Supplier#000548001|0Ldb5WtV74qU7bVci +Supplier#000548003|WYJnclF7KHAcZ4aetpEvt89sL3 +Supplier#000548031|PB9SRzlOWcS +Supplier#000548056|xA96mKIt,D2EokNLR2j7x9Vi +Supplier#000548093|EULAECmPcXhnv8as9p WAl18iJc +Supplier#000548145|WID6GoUPJrP9a5B78qIk3kaDw4Bp +Supplier#000548218|CytT6c1Jll5yVCVDafX7FuKNrVzuiF +Supplier#000548276|jCZgm v4G4xLXDaf3 +Supplier#000548314|qX30tEeKbWqFKv7exEtxbDj2MC8uLkm C +Supplier#000548336|ZGQfWlwKrXNBkopy8lb2vwQqI4aCpykF6VOGkjGv +Supplier#000548357|bx5v0Hgayz1vCPvU03INLwwNj99WSPhaxcahbfot +Supplier#000548363|iK7lxm izM4O7xFFRO6wMkprsbatnujgtF +Supplier#000548401|5FALOfMeMsal +Supplier#000548413|43vDmb1wMx +Supplier#000548444|wJ611Antd9KbtrI94Tc5tA9nT +Supplier#000548468|c4T6wvLmIIFVnOxfPKdVT928LSOLIdEc +Supplier#000548483|Utrzg09928uKqJFfaGL3aPemz +Supplier#000548573|eKbvlCMt3Lmrg0uhK,plh5mMtKO3u9ni9V +Supplier#000548613|PXgbsvQigiE8u2QOOL +Supplier#000548633|JU7Ag317Z415 +Supplier#000548648|2FtK7q6bl1 o,lvzpeT7v6n +Supplier#000548672|AtcumEdHqj8QPg6JkGxHonfT,Gy5ba +Supplier#000548697|U26iy4dyMYbkmdrxccve8fI +Supplier#000548741|sBPS 0itm,h3B +Supplier#000548787|HGZL2vQ2tcs +Supplier#000548934|pJuj8 WFEOdo394J9bmAErBayoQCNdehPVD +Supplier#000549040|UTU31V2bnD +Supplier#000549041|39BYW9MlGHshvxEzDvrpORjg33l +Supplier#000549066|obQkPiV1paiyL4OLdXABr70DQuMuRrrRhb0 +Supplier#000549070|R2TL3WYPdoX5Pgni,3w0jkxSzajqe9kYusCqz +Supplier#000549102|2nxBMiSF2W6ht6VRQQKQuEi BInbt4SR,k +Supplier#000549200|RP Mp59PYEsp,7DHtPpaazww2fsL3ChS7BbtH4 +Supplier#000549276|Y7foZtCQGeOecdqQD27Z1UO5Gkh5Z2A 7qYy +Supplier#000549283|uDCNKD3T5m0J24xQ5,AHNXkrG 7Cq +Supplier#000549353|l0hj5GlIm6fsmsQNki +Supplier#000549462|T1MxsEj iC +Supplier#000549521|P1SB356YXhbO9gu4fwYzxLmsHi5wsa +Supplier#000549576|0VhC9JEmfFH5C5BYO7sbEKs +Supplier#000549580|j5EbAScKhk7Eq2ZyHzyHpO6cCXY es +Supplier#000549640|H1GzY68aTyxFmG9YjSco8Ir +Supplier#000549673| MLIugCFz3mAGbbEeuyDt7qLPVXsqked,DJeSEJd +Supplier#000549752|mkC9I2VgPSJlU3ZFAV6MmtT +Supplier#000549785|us, Uq0fhx6LPWPg 3qaqZBu0PuedBoW0mrJj +Supplier#000549803|jBm8zEf BBvFaTpZCrTHaFwun +Supplier#000549809|DECv2vc AYfvc4kC8xGpsJ +Supplier#000549917|KmV0JmNGsMRkOJz +Supplier#000549934|,QgkM oij0SpN090dAPI0pVlb EYoC31MAcYn +Supplier#000550031|JcWlM HcIP4ecx9hj3gG6JUi4tNSO +Supplier#000550116|E,bWn4pRaTGsMhETPxgVYo8zaPghLf0Dm5d9 +Supplier#000550216|0Z0N1EQpsQWip5R +Supplier#000550326|LH,iRXz4mRnkY7uPxJ +Supplier#000550384|sJwoSHH4V5WyOClCzqh82G,klh90tXHe5h e +Supplier#000550471|Bx1tQPKuWo8Sw7HHOK6E9XKPFmSrp2kSy A QJ +Supplier#000550504|C30GoHHRr4VvhUJzojy2QnlgZ1vBsOaEsZrvVXj +Supplier#000550529|nWPjY6mkLxdaUJnVfE rd4jc +Supplier#000550721|t6uGJs9NIpPcdc6HWxuK +Supplier#000550755|jPeZY1HbAxO2nwGDWy3,2 +Supplier#000550824|As5OnGHmrD9z +Supplier#000550836|YWseNdS5hMjvCq,GTdTBhSw6QjZi +Supplier#000550899|s6ZFDwRdqHCD GopcAxqYNrJ +Supplier#000550910|uXD4mSqyssbvZ +Supplier#000550918|RG6MFYcCi51N +Supplier#000550928|NCfu,HYpovcJna23p rMf8KMZWrtfSAnj +Supplier#000550963|shLpWfdSjDQLQ6TI Ig +Supplier#000550972|Vr46JVVYRW9gVZvqLCO1z,odr9Toup3W1nWCaWUs +Supplier#000551005|yGr5m1r5DHu2YCivVjeVmqAf47gEEoQ +Supplier#000551031|v0lZrA9QZcvMDS72krPzIyFLsri0PKziCS1aESJ +Supplier#000551032|RweSdmxj4yjuqyoV1bmQ6nAFhUckU58 +Supplier#000551097|EuY36qIU5Vl17RzlWJIm +Supplier#000551118|RgXrJbPHJG +Supplier#000551120|W4kLrUqpDHjaBG QerNPBHkdByYbRPsrf,1s +Supplier#000551207|4jELssVdIFGBJw8 +Supplier#000551248|dNQw7E6lc1r +Supplier#000551316|wyE1N8D 3f4KC7OkHUjmYA j +Supplier#000551341|mxwV5RCmN7TAUiTC8biGSl5FMH7OwyWYFgjtTG +Supplier#000551360|sxeZQNJLnDBygZS,rJE +Supplier#000551363|joyT3RLscP,vwlMCZL97s2atl5O6Srdvgq CpOvG +Supplier#000551470|MozFZJK0Ood +Supplier#000551479|3XR qFMln5 +Supplier#000551611|pNvW,p6HoxJj3AqSeN7 +Supplier#000551626|U0EpdekEx8kYZDW +Supplier#000551682|K28QCFp9jLG7N9Pwr09QxtSfgKEFIRcEUrisSM +Supplier#000551833|jryEIyWMfS4fa +Supplier#000551862|imFnKtQ4NJENNjw Nj,IBI6Bc,KKHFj AKcJjvN +Supplier#000551877|NJV9rv7mu9lM720S1G6I +Supplier#000551913|Jr69HUFsT9kR5M64cVR5LYSFm4VWel0sdm5Ze +Supplier#000552118|jgBSr3F4vA2a10 +Supplier#000552195|9QGJ1lliTarnxm3lVdkfe0hh6pE +Supplier#000552221|RcGTEQeWoy9aR +Supplier#000552224|UDOtX5gWzSl6,sW4NqZTDLkGfQWKoVomckUx +Supplier#000552251|GLRYl sFSB,4RGzB5 +Supplier#000552324|vrXPTNxpEnZ1SJTuTEQpB6K9pLoILbG +Supplier#000552363|2KR9PexV486PEz2dsMUwrtBBzvBUYIwTHxqWhFh8 +Supplier#000552415|Bs5mxS6rLJKTEuJjxQ9PAKX53UzNif7IKrfW +Supplier#000552418|1W52KqCgxeDVsi0hyECIYWBc7Xua5 +Supplier#000552459|qfHfBC65GyUNb9vWp T Wzmw3sAQ4ArGY +Supplier#000552476|riFX1sPb5xfHVyov9SyUgAv0NmOLAvdnXN +Supplier#000552486|HOgLOjlUd7o,7bidwmvCfaBeqgyc7KqTSHaO9Z6e +Supplier#000552516|htz AsDrryHnpQhIbuptKik5crd4k8P1ztdjq +Supplier#000552526|uGa41tltgIPiL7Yomwr,4ZncgFIGFxFQz +Supplier#000552563|Cv6nSmHoFj +Supplier#000552602|dvZNYIdRSlih9ZXnetPzw3CB Bj9qnbgU1j3z8y +Supplier#000552677|a2vyxdoN3C3eOyjexLTnQnBdV2q,n9smdc +Supplier#000552699| gNupHPtw9vTTS9CWUVlAAl3XSK0qe +Supplier#000552718|5Y00Dq1GVrrf1TcSlUdbQ +Supplier#000552751|sKWnQSiF9wNJ129,u kO,u8UuMM +Supplier#000552768|KuhOBfovOyRloQ,Sqibr seiMmqNfElvC,LkD +Supplier#000552902|tPGHXcDtCVTyDlhH3va8SG3yUzJPQuBD +Supplier#000552928|jUi,elb5Wftoyc fQ6pobD +Supplier#000552993|7eMjbtCLyPMvcdkCEHclzKAxUE9IZ +Supplier#000553055|WdAPpWQGp,1rv8NMdOOjwC +Supplier#000553063|ioq0lndxfvqm +Supplier#000553135|bBI0r7a46o0EYIw82rm6UfblFTrY +Supplier#000553161|bUzDozIYE3Q94d1M,LYdwUUdnsQIv4ilHY O +Supplier#000553210|ChfgPZ3rrkHTKvI98hoHQ +Supplier#000553233|zYmJJvl0ggy c8ro +Supplier#000553242|9gN3jUlK179VtSpR9ifQsPqD0 +Supplier#000553264|oI bxHY8lBL,2 +Supplier#000553289|fDfOlbGhd4luwsVIkZ +Supplier#000553340|4a2Su3zzn6cUaTjpFNP3oms syRVgBxH9f +Supplier#000553356|9eY0 GFfdStOgdSfUWSWZcQhudKzFsJU1 +Supplier#000553427|Epq0aPQ5lNXhTL0rDLb ,nagcQYykD1XrFGc4 +Supplier#000553474|zL5GgypgQzeUxARPZXCUd3n,FrBdZ j8BAdLkf0 +Supplier#000553491|mKFX2t0SW93koF6OLVmzCEAxnlPkBQL +Supplier#000553668|u9DZWlwgxWV rQqpNUs5J +Supplier#000553686|v7htZlx8VSw4Fj3iR3dv,L IupKXhi2S3BCL2 +Supplier#000553715|Z sUkY3O,Ua,kVwC +Supplier#000553745|JRl8mKqnzDQ,Jqv3WZGAtx7p1 +Supplier#000553763|4XVIAPbPgZr4cTMNPuEq9IS +Supplier#000553794|zNp4FDrFgFo,,RYyRtuRuatMVa8HxhmxkbB2F3V +Supplier#000553840|tVDGVnhi5qQCf1y5lA +Supplier#000553895|zg4sUadnyUsR3XJnj +Supplier#000553938|AhSVlxTE9lwdUlqy49zGnp8zpKuZMou +Supplier#000553981|EWQWKDM4gcPr +Supplier#000553995|iJAraGhvfjGqqu8UBkGFiqNL +Supplier#000554016|lLFVk09XMVUqzDgakII9l +Supplier#000554152|Hp4Dol Rr26f0nw2OXZTra1grFOqxbyQQ6QG +Supplier#000554204|PJQoN41q6pWPdqxOU7A +Supplier#000554243|fQVVMzsOKCb0hKVd1 +Supplier#000554265|,mKcFYgZDSDTpSDd BJI2OLhEdFHASZ +Supplier#000554277|kv5K1K0yaPY NEUL8axdik2IZC3uW x +Supplier#000554283|7JJiHseiGFCNe,cIYe5MrsMsltyvXRpuiZ +Supplier#000554299|br5i8HRye5QF9zJ6Ch0hRZ +Supplier#000554354|NjxKm8uikpPVAZufITn7 gMHhz5SW3IQj,sUSX +Supplier#000554401|Gc6cQktGKW4IyY +Supplier#000554487|ctaeUIKTrR62Ui +Supplier#000554635|siDeFHd3RCSN26zxhW78M1Qupsy +Supplier#000554671|tqkA581Kjb4OgwG,WkrAu +Supplier#000554681|rwqCGWGUxWp +Supplier#000554703|RTdct6HdjOU4TKV ggKN26Km +Supplier#000554729|Dzd3yez7tUIFQEdKJzcB077WG7G08L +Supplier#000554752|iaumI0qvaDIbDYqKdq3J8 +Supplier#000554793|lg6UCXfIp3RvRUjK6AmYwudFPQk8U +Supplier#000554884|ysrkYPAAO,U0Mk4V4zjE5Luw +Supplier#000554888|9zS9NGVLqYwO3 ,dud +Supplier#000554941|juJP0 koomaG2rsq9kr1MdN7HopZjLKgWBdS5 +Supplier#000555044|U Z8stJaEUfWL,EjRk9DX902EK,NRckI1aa +Supplier#000555189|Q WpHIT7HdwdXaZ3e,9Gne3UbI +Supplier#000555318|yK74,qendjgQ8eqyNoMRpN1AzecpTgumqv9LO2 +Supplier#000555437|3jG3,cVovubCr65a4cYrLqqGxmT +Supplier#000555548|rfY8cFnva4sy,OuhBINCjfv +Supplier#000555578| 1UVbpI9lm3JKDcLKAbwhDvA31j9lGw4yXYAJdnz +Supplier#000555613|F6nIP2KoePnxD1Js +Supplier#000555731|aX KHc5Qd2aqCJYKR7Ks +Supplier#000555875|v7oM,1 pP,R85ApohmDotG +Supplier#000555907|5Pf14BoSvz,Gs95XSycPYrjqay5iB1,BFnHJ8C +Supplier#000555918|QQnQsLKW740NV +Supplier#000555937|LiO1Q2D25HY2yPvtyRosVCiq2BTKg60g +Supplier#000555945|T1aeylvOGOQIEuPY 3 +Supplier#000556050|qg1vV8n,2DlbldE +Supplier#000556118|Bj1QS0m4F4zzIq3E6kMrYMsmOxO3wc3Xf +Supplier#000556147|k9799fUwOSW7q3Ujfq1JjDFhPQ0ZhbsQb +Supplier#000556172|mRIGakxqluJcAC94rMpUdIW1vALsBPtLqatOeIT +Supplier#000556244|FPyBYZ,O2l +Supplier#000556251|0V2DdYMdjfzEU7,8GhP +Supplier#000556277|lR9,j6MsOIW,z7ygDFZKb MHMZIlcA +Supplier#000556299|a51pAOhNFcn5yUS0hMAA7 DHxI +Supplier#000556348|SyaB29yarP2ldG9nngUMG2FTNUlCDXsGEOdoye +Supplier#000556482|l9duTFtee4g9eTObOwaMS +Supplier#000556504|,KEf2jhVssXelaHuc +Supplier#000556536|3dt4jXQdhSgkjaaUdImnYB +Supplier#000556539|vj0eEL90Ns +Supplier#000556573|3rZ08 4O8Tq0SreLc +Supplier#000556614|yqX1BK sw8 +Supplier#000556645|W6caj qLMoMmgxNw5ceW0 +Supplier#000556764|vHjH5 c7DR0NQUvLywqe8c8ojDLDeAL VMBO8 +Supplier#000556854|9oM5OjcXELpQ2Zl +Supplier#000556919|TeDpov9tkN8jCNpNegJVX rD8 +Supplier#000556970|m3leuJ7 V47bCzK +Supplier#000557007|85,AMCtsoJefCqlMkgR,Ri,T02DK +Supplier#000557060|SSTPisRn3,rPqHeBXXRNv7e,XkujkZ2m,5 +Supplier#000557080|mspU3Iw 8mQR8H zS93IcuskGFsZ0d4aqfyhm9 +Supplier#000557115|1iaJL D2eFzsGld,9o4TJQEz5Khs0 +Supplier#000557119|YIkv5KXMU mB5H1byqN +Supplier#000557187|nTV7QjgFSNfpxUR4BILWmyFlQQHylcVJHb +Supplier#000557248|IeC aq 8Vk2mjwJW92T VOZYR7QNUe9 +Supplier#000557296|taNLdVxn56Pi9BGrNJiJJNZXTb6YdmAzyCFi +Supplier#000557322|6tOQ0oktrM2gjLxu2of +Supplier#000557402|nS8qtET4eWNjV IZcycT4xYEzU +Supplier#000557442|wAc36V2cuMQNgIJrvnlLCeZbW +Supplier#000557529|7L2ianjDg8YdP +Supplier#000557593|VghnGCbNRGK88P, MK4i1a1us17J1fsRPOcld4X +Supplier#000557713|mV5GmWltteCmD4qzkc1R +Supplier#000557922|q4lKzahU5ylyb +Supplier#000557979|wAWfYaPRDyaQWinT45u +Supplier#000557991|PC3YWH3e2vunGU,Hd G3 +Supplier#000558043|MWc1lZGzGJR9ODL,FxhFrwyxwblMH7OeMeZLNBy +Supplier#000558062|7chcmNK3RKWoXht +Supplier#000558140|HxyZxPN,sJjoXP0hCgsfm4 +Supplier#000558277| p2nL9w8SM55Pp5rNzWYPiiOz8vb9M +Supplier#000558380|gzYIoMPRZdycrKQhB +Supplier#000558546|5IWP2R1WFqC2yOYShvLConeBJx2w6TwuT7OHh +Supplier#000558549|DB9eOMZ1X8c +Supplier#000558657|VYH72,hSMPZBnHisdYG1xSjnZ +Supplier#000558712|Ehjvg7b0,baSC6e106eIHBM9gXdC1SLW0y83 +Supplier#000558738|ZmFwcsdRjl5z51fao1oBPTKhJW1PRROwDp +Supplier#000558835|QN3UldEpjWAelOzjzFbY6gtj2HvKB +Supplier#000558877|j58D5rfEyHQmiXYoSFTyc7Q0gu4QW9F +Supplier#000558958|YGGNyzC JG2Neij5mSCoSL9Scdp0AC7RraC +Supplier#000558983|lcAZrco9pfcqMIk7Oma0U +Supplier#000559001|Z8,IkiXcwTUeHBgOXVEw4TPSwbEMu RlRZdUS L +Supplier#000559037|yhxabCe3DScpQC +Supplier#000559093|cPBGugVjudHuDZi3vlTY +Supplier#000559111|3WFIzptWyJ2OBH +Supplier#000559126|T,U1CcrRAAKXwSRdbKIHFuD +Supplier#000559197|8cy4Ya6wJMqlPJFPU +Supplier#000559210|VqgEdEkcndpR0A5ZId2WdMBw24i3A0WsZ0 +Supplier#000559256|1275blGyUF7Oz1I +Supplier#000559345|,7R,jJtIuzPzoQlNsC4R +Supplier#000559349|IcC3gnuUF +Supplier#000559385|LdACM3u,thF9H6rwKuPU8 +Supplier#000559439|ABdzUCPf9e5e3quK4E3bkEqnEnrqm4XY6RpAc +Supplier#000559458|0DgKrVgURniw7T +Supplier#000559469|RFaNL,JVf6wNa9ZjPnLpquCZI +Supplier#000559618|IdB2xdDp1Mvie +Supplier#000559709|M68LSyzHw,kWFkzYc +Supplier#000559712|Xxb22KnYxafd WrKqi +Supplier#000559717|A bp0mMNIkd +Supplier#000559726|yOc,16INWWCYx0j4SXmLEux8rYrTfr4DQICe7 +Supplier#000559992|enTt66JrXgJfDjJ2oUI z0nRg +Supplier#000560101|tSBJa,UJwl +Supplier#000560108|TJ52ZpOqKmToJCZUta7NRdOdS +Supplier#000560287|5mqLt6TsmkqpfUjFzpV +Supplier#000560298|N9uur9At0v6 +Supplier#000560398|srBUMK,NqduJ16 +Supplier#000560449|,ENyDTQN 8ImyzRERWiJ +Supplier#000560510|tYs7LHLh6QLvay3wYnN07wnNH9FNUuc +Supplier#000560588|66LeuGfhTODfHTYEj,FN +Supplier#000560627|CUx2lWrwkbuY6iRY3XxdWzNzbZQU +Supplier#000560770|7C XlBftNlRLFtQUA492rzXksT4YE0ufb +Supplier#000560813|x5WSOy7CYysUGGxuLWkn86RoVZp6BiW +Supplier#000560920|CEr8IFwfl1DWasM +Supplier#000560990|pg3AjI08VBfUMdF3HLE8Ts1MeJn8PG +Supplier#000561125|qasIvUNMZl87J6pGXjSOVIAn2wyXM0p6ahXbeo +Supplier#000561167|UL,Owmf3JRZdRkSi6gF3 +Supplier#000561191|,Z,nkv,SzFw045OB,yvRY3HumiR25lxv,J +Supplier#000561345|qyJpAABec7jdQesvNSRVXBJPv +Supplier#000561419|xb25Gvvv,RIR6Crnv +Supplier#000561429|rpWErvYjIvfsVkPOlg,vI5dss +Supplier#000561447|JU4oJbZiKPUB6vLwEi0TI8kxkxbVJTwWCLB1wW5 +Supplier#000561454|NvRUxlcnmv7vC E +Supplier#000561566|9RdpaOa53 l p2A5mm8pV +Supplier#000561616|IB9hLLpmMCRt5NglNwUg +Supplier#000561678|8m36IHJFogJ9dYYshS +Supplier#000561703|dZXTj2PQjhJsOoMFsZJDaIoh8 +Supplier#000561780|4Upg4aio,KRAb2IBC2NngwJdmkS +Supplier#000561879|uG6gRA23a,74s CLuZ5inPYqvN74wygyoqixYaxe +Supplier#000561932|RbS6KRQa6O2 59p60XjxjK,MV +Supplier#000562049|Rw7IheE2gvXupBIq,eJZQ8Myv0n6mzPc +Supplier#000562069|r01BY8PpiaZQ7UBT,LV +Supplier#000562097|e7Q3vgIWLBhkEfXgWcGLVdvfx +Supplier#000562194|v3vRGavflMjw0m1DzzuVEo bJ2p60 +Supplier#000562362|M BMBqf29HpftGTPATbs +Supplier#000562452|ObSGOrGZD3V6YzZ0I 4kb4B2YWxjqPNWPZCvp0, +Supplier#000562477|z4,7kVK54YWD +Supplier#000562497|WOmPO TwiVxICUjfx G0QJl3Nia00bQ +Supplier#000562516|iU9bHB0zjAH7NeLLm2cVWhDZJE0Z31a +Supplier#000562614|vmKgjIhX2hHBfzrEDW +Supplier#000562675|G97 hfvYhyuymFqZFR4DjlhMi +Supplier#000562682|N9vvUqv3JWFyLmWG0x +Supplier#000562714|TcncefzRwgktxlz,Vr5E +Supplier#000562726|VuFXVAduTgvl26uD +Supplier#000562742|IM8o4pEPDupB pNDmvqpPpMvWLw +Supplier#000562819|6kABWXI1hh,a7qeX3mhGEtCTn,Fp3 +Supplier#000562957|BIOHpced06DY8gwylLxJuREsygayNiBpPDkOS +Supplier#000563005|hRqnLAdybmmwu5 +Supplier#000563081|owGpghw3L7 zgDsGYGjgF8hZxijU +Supplier#000563095|5OFSfV9e8 tDcYF +Supplier#000563108|5ko LHg2IxYnIHUzaK,bX5WV +Supplier#000563178|9o4LfO3wdoLS5u1hxOn5o2 +Supplier#000563267|JEMRG094EYt +Supplier#000563314|Oeuw2eT,yt9x5 +Supplier#000563393|V9j4EBNf2DiGL0BglUJhr4ZhNVTZ2dqAkha +Supplier#000563430|L,6ZehThvoBFfgZTwX1sDbuV2FZ0c9sq +Supplier#000563497|IpJ7fKqyFQ2uuPQXg IC2eteK6ghrY,otf45hcK +Supplier#000563548|A0fIS9F 08VMRqeenJCJv0n0 +Supplier#000563658|12j I6NS1nUP4wHl3xjr7 +Supplier#000563674|K Ge8Q6Zk7lnO1kTPOnA6J5Gf7deGXKAmvVXkjA, +Supplier#000563925|Bc1Ni,Tkod973mKCI9b7N +Supplier#000564016|sR9MVDGTh2m +Supplier#000564043|5gBy2 paGbTk,SORG6nPDwCsvcHGbk1Lz +Supplier#000564109|ksb2eZ TauZm +Supplier#000564145|PRvNkE,QbpErsgQzsyqMIgTbLhXG +Supplier#000564159|PqGsSs,fecsJ +Supplier#000564190|fHDmsjhUnXKjM0CZJTkWOo +Supplier#000564259|92Xd Njng8I3ep1A LV5,,nE9 +Supplier#000564280|4KN9SAPBFHv,XTDNU4 +Supplier#000564365|IqLIB9NS5VZjkXr6T8VXWK6M7T +Supplier#000564422|OSAuyPTwGfR,C9HNrNBj,iw6Kl2tbl +Supplier#000564443|2kGq,Dut RlanUwikqM +Supplier#000564460|ft7XO0XhaLO6AHrdSu4ojDO41 +Supplier#000564491|SpSs4E3DpTHSlBheGlU +Supplier#000564531|t HyUJMqB6 +Supplier#000564576|TGWYcJp,4sXWYAyyg +Supplier#000564707|jDoMd8Q0WzTk2nuqXTzODU0,lu +Supplier#000564754|czEQlqkqNWOQDtOYgbgHhxkZbWfHZqj6am5RQ +Supplier#000564807|2MNY,s7HuXs9p +Supplier#000564896|HmkX B8j5s4LT +Supplier#000564936|GV52VgEPvW7B0 +Supplier#000564955|dtHf2x5EzC MFV07F,RJISe7HW 7iv82N3 +Supplier#000564979|wGU8nhjhzyzvtksrq8d1eJksvmyT57Yd32qA36 +Supplier#000564985|xhzW8r3dHeU80oVvDwcQllGdDjgKJv +Supplier#000565113|NnmNrN72h3ay94JVhHz3E +Supplier#000565134|D qN4ce8wjDs8fqc2mOWjrsvDY +Supplier#000565137|SdUK29HBqK4klBOjg9Cn1unK +Supplier#000565164|AqM6xtJWqUNVCVf71Z8H8OomCBaraDSmZz +Supplier#000565197|C32D16V1PSaL0x0tmDct lxTvEADVOO +Supplier#000565203|eVRBgBkOtc2 CgBInD5m2rGH +Supplier#000565211|YESTFaFGvXd +Supplier#000565225|Y,9s7KZW5OthpasLjUNId0OCg1TV2 +Supplier#000565271|0kB4feJgE0azrBjj,IchaYb1zf +Supplier#000565302|FXtoO0zAwuUmd ,9lTK +Supplier#000565358|5tgOssa7BoxM6z +Supplier#000565360|Cde6xZ3rZDRyLPwfmfTZs1s6 +Supplier#000565383|4POKux5Jft7pGfblkfc2BuAa +Supplier#000565502|nXssYoYNPVjylNZH +Supplier#000565555|rCtlGF,ukhrlxnqRu3OmZDrnUMF +Supplier#000565588|1rvJ3zJMYAxVUd2YSSzhwr9Bzx +Supplier#000565627|9Ap4Z8xHpQrELUJ, +Supplier#000565639|wFVXsdTMh1ywu1 WdPN,Q3RJ +Supplier#000565645|GElmZruRfsqZKF6xGIs4yO0wgTavO656xZV2 +Supplier#000565651|uAB5NmjYntFNzzZfSfcHOuOp4qKuuka2Rqg +Supplier#000565657|AMQkTqyNQDDIFF5jNQR70KIBiafiPPLVdx +Supplier#000565694|bI20iD8A69mmZ1 +Supplier#000565914|IXNUWk8AN6rdHPcL +Supplier#000565947|zwJ2K9GD3QlQqJdgYH8pC +Supplier#000566003|rdQvtZEoeiaZQH,5VphpcJAFE6F7 +Supplier#000566155|3Xxg6F4w0vwPEBX9,tLa +Supplier#000566218|2i4 hgKrwmW0mkvd6dxnbL +Supplier#000566268|cnCv1GmXplrADTf2RWEx fIybWhkn7 +Supplier#000566324|jN9M2z U0VFtLe2a5XoMJIM9chCvurJp10Afe +Supplier#000566565|SmfOB7lY5q6qQHik7qYWwjVkWdNorL +Supplier#000566613|18x7psQ2c50qxXtKRQD0gQVmA +Supplier#000566626|I65W8JAzUi7Y8 +Supplier#000566643|YJ9oaMIb cDTv0NhViQw1d6Ubjt6c,xIWO2bZ +Supplier#000566726|tEwKU8QCBGD +Supplier#000566806|5KxZ0mfkd ,CcZ zwrA9,q0r4 +Supplier#000566841|s3EpKCi9HRZKSW2O8mITrYxgcBm969 +Supplier#000566847|6PYx03oYKnzHRuOX4JIGz5 +Supplier#000566862|90h0ToJYLda0wxQdOcrLhZrZR +Supplier#000566898|q JhyuMtstHUFeuQfk u0B91 +Supplier#000567058|CN,guSt4w1BpYPcu cDCAjZXHMQ8e0CqxO0JXkcq +Supplier#000567107|YYq0xcA6FQpwhB3Vfj, +Supplier#000567109|J3Etuxzg9VIEyqlmkR1I6Yrv0FO8B,4tS +Supplier#000567113|coyGgypZgp +Supplier#000567186|Uqh6h7lK86aMi5xYXG3Q +Supplier#000567193|2oFQxEVdbjkczOB6GU +Supplier#000567280|nVTfhphBFzI8 D7oPGEIAGaNtY1Yi +Supplier#000567312|M8FZuqW GoNuKJrnlY +Supplier#000567335|poOzoC,aay9 9dtIRPaD +Supplier#000567346|3GO9gh5Lw,FQTNMLekHFQRJPrGk3YP9oIOc41x +Supplier#000567383|PqNoBKvywSQ ,22vuw5w1 Dj6Ric1eZ2G3rivptx +Supplier#000567444|zhkIZi2gCJB 8 5T547kouz3bCa0pivIyVzTPpMy +Supplier#000567481|SQcocdrmkCU65dh26lT14WyGK +Supplier#000567499|4DFc43WZdqC657e1cddAXBf2K3SWgRtCTnp2D3 +Supplier#000567520|aA3GZGAkUsvVMdhd6RJU +Supplier#000567712|PMlEe2LemaLQEWj9UyDmVoczMjg ah6kRRIKhoMu +Supplier#000567771|ZMz VX8pLmzRXpZnxqWgK +Supplier#000567794|w6HgTePyIBgr2i2Ke4WegSUjUl0u0q90E7M z +Supplier#000567958| dj1odqfsYidJi3JTx EkdSZS2NaktFFrrrb +Supplier#000567972|WCU5qvHzv338SmkUT B,e3qx +Supplier#000567996|jJyOMLAIzmQhnpXdMcLDyweE9wk1xEGPKxuQ +Supplier#000568067|8gepjFcII4 RoTZXDy6aAXJNWxm +Supplier#000568079|wu motn65fVyWa4dU +Supplier#000568134|1xFrkQV6VHrg4Kf26S +Supplier#000568242|RPgEc9JC1DVi9B1C04j86 +Supplier#000568321|wxGhGARIXKekrIMxeswgZtDkSiRnfb18L,Mv +Supplier#000568467|YGQc5QFEBJdCM8D sMsopC6YGIOlkWrG0GqbRb, +Supplier#000568504|FDdTbh9N4nHZvcEDHa +Supplier#000568516|S,Zz5ejRPHOwPvFh8inaCYTpDYyZYBrkgPtDWz +Supplier#000568523|1pMhd9Py1RDpJtf6Sb47tqO6s +Supplier#000568646|J4UHI6I90D +Supplier#000568678|6qIbLP3z1jIOZtWJG,oZl0R +Supplier#000568749|Ud9hFLdybXIOa6USBj03,Z3t5Ath1j 6KgO61B1L +Supplier#000568851|mUfPHFvvVc5EN k d4K9VX5WBcOZnD +Supplier#000568869|j6BeXsB3Ss 1BiZ2oD,4M214yKnZIc2ldmY5Zf +Supplier#000568972|KsZw87cHKb +Supplier#000568975|w X OCXouGg2oEUkMVBwp1KjcvAmxiTleNPJkmk +Supplier#000569065|H2WQjPs1 QT +Supplier#000569078|2Jebxijr6cNP G +Supplier#000569148|Ey6pOrBP45S +Supplier#000569175|Wf28rV9B6rX +Supplier#000569262|VUszEB3HWswG JZv vyTc0FgF0Bo6 +Supplier#000569264|Dhpg46DztIew +Supplier#000569294|eVRHvSRQ7YeBtgmckwcYSonVuWi2kMrH +Supplier#000569349|3JvM2PuS0k3m +Supplier#000569377|gM4OHFXyEoaHCo6v6,uGqj3dmpZtuYnlIhcc 4oZ +Supplier#000569592|Qmu8zG30s6Ix6jz9X,mIy +Supplier#000569666|IdE2CxPelCOm2CTevNr +Supplier#000569865|Ao4Em,ajZVGyIsZDdLWAchbNJB9iIVBi +Supplier#000569912|qJYTwDPDpfZjk +Supplier#000569955|cM6OnsVxRI8IV3bSEyIMOjyCJ1p0z +Supplier#000569984|BvEuWbJEyIsGvVBU +Supplier#000570006|lNIitU XQtYMXR1ih j5asTpl0NFP,XwNewHJDOb +Supplier#000570083|g0p2cs2hP7pqpBJ9Z rAhVW9IjB5kc9 +Supplier#000570086|PKF0C1kQpwpou,vSeo3m4Z +Supplier#000570107|DLazxdtDuqfSdiyNdCRtI2lPLTuX1Zo3iNL1WSy +Supplier#000570160|HfKIGv52iTF6Nx7liPHTr0Ym1yTWJN7kZK3Y1jlG +Supplier#000570240|8BJoOjDvPy1tgu7X0PNqy3zUlE2Q WdnaA4Cz +Supplier#000570254|cvDusK2nqLYCgpqDYJsvUjVLNT5,wa +Supplier#000570260|pT MfBdlc q0BmykNQmrCtN6bR60Jzvr +Supplier#000570264| GcZKmt5PRaLw5DDC9s,QZ8yUl6I PFwq,i +Supplier#000570266|mtZQj7AcA3VrCatvrkVeu8ZaQGJA2kk742P +Supplier#000570308|EqCpp6U5ZlJ3lY aP6AAcW +Supplier#000570330|wQ,KNCeX qBtz4rHtMX +Supplier#000570413|Re,9bNtjXGWiQrEYoY8conBM4JH6iYLxb +Supplier#000570485|TWYVbA7SuFI +Supplier#000570499|uiLccCw4tEPRgbhWPFS BYLf +Supplier#000570518|4zuFtiHaXYmIRr3LR,W7 +Supplier#000570606|GEXY7RJA2tNAO2jR +Supplier#000570628|XThMVsg3hzqMiJizcK3WOSbvi0oFBWiy +Supplier#000570699|nD4mFU64qa5TIH2TMz3 +Supplier#000570791|Zxh4Nw7Mn0gADzxUkhRkON70ThA +Supplier#000570801|eYIBDQVDJfSnOWwoO1LTnruEcYe +Supplier#000570827|W,FiQicVpVN2M +Supplier#000570975|qFOd6Ux7VjTGnf3495lUnNiUe kCPC +Supplier#000571113|XZgcsIW20pIpd2rcOrdx +Supplier#000571327|1bdTUFIbbn8w3MUHeIe1DaJ7Y4fHHRYmGki4mr +Supplier#000571376|SweZrU4olNj,KAbFMpt +Supplier#000571428|doLjx 5C5bG7BrJMfHSguKw4hjiiNS1J4wRJWjS +Supplier#000571569|D9Q0VHxR5LNfcNgUQ4JHN +Supplier#000571604|FG6J fMQs7rEk +Supplier#000571610|2Ef MVMx7Av2VSronAFRMfvVD6 Dzni +Supplier#000571621|GfC0h6852TCiigFtmmOqFg +Supplier#000571659|LOGI d bpUvDiH +Supplier#000571682|ZieW6iEpCFIgG,giX +Supplier#000571690|O,gD4 Ox7FEcKZuRAzsI9AD +Supplier#000571709|f1ZiZgdVsCHQJUoUDlW +Supplier#000571729|JvXVf0dL 0bXAJOQmuIgAqYZl +Supplier#000571909|FnKkdWMIz1t3jbaz9LTsA1sHWkpBOi4Y3DHj4sBc +Supplier#000571911| 2gp507h3FhC620J OmD82O1Y5 +Supplier#000571919|7sflat7v9g6QwaGxmqOlQwfdLw U AAsxaYlU +Supplier#000571991|QwsbF8oPHzrEJJeGf0shZ8k4h6T154lW +Supplier#000572003|wgrjh0Car44V7,UIF QK MbLtZx5 oumuDH9 +Supplier#000572049|Z4Xp u0ZKn +Supplier#000572085|7K9XU8ePwz2zHMZ0zAEH +Supplier#000572113|bIFyEWTYXeWKMwHAdzDjPn3SYVqBm4hZz3bm +Supplier#000572173|bqXmqMPYh,,PK2 +Supplier#000572274|JHpl28HLf2uIjWTopdQuTH3hCGRZyL6YaD +Supplier#000572294|1l8xepn7iun gcCr Yi4hSCBfnMyJCPzjIKSh +Supplier#000572405|yhlWs4OKfxEzbhJV2ZMxEiJs9Gzz0 +Supplier#000572412|kZj8UpGiQQGw2XYhWjSx9ROh4gZe6xYy0 +Supplier#000572415|1A25LzfaDWFFVpK +Supplier#000572420|40Jz7XEi5QuT4B0wf9cfFW +Supplier#000572433|cS6oV5D8NgurlStRzzsJwst +Supplier#000572524|VNumPK8cMW HdFNS9ONGFCAnEMuko +Supplier#000572527|FQyPvbIWDvVCmnRbzd +Supplier#000572560|I120lwWdkWca6mV1d +Supplier#000572600|vd2PSpV L192 IW,3LhVYcD b +Supplier#000572629|sClRYgHGB8INOrBhm9ZguLT8LmX3MIjjt2K +Supplier#000572645|ylSV47xUpZjQCf3e +Supplier#000572728|xtFiyMeLcjfdRdVTo +Supplier#000572899|wDld7AY0H,w5KL,Cshtn +Supplier#000572954|j6IJuCBh5Wi8RhBwYUtoH +Supplier#000572982|rQ6p7CkShi R7nhSecffMHilupUHxErEklhkocxR +Supplier#000573023|tVub8LEaz,DZr2HJks1 +Supplier#000573150|NdZMNYLo9xbCw6DZbgu5klUHbcf +Supplier#000573184|8MAcdgaaiAfXaF3XhivSIoDUTa6MsBZV8xcMc +Supplier#000573189|D8Zm0q4dngIH2EYcvI3Alkq +Supplier#000573311|TJ7BUBIFT9sFGo0RvlNhH5 +Supplier#000573462|tW0 kaF,KYNBpR6xynZSXVF +Supplier#000573495|HP88Q7,75HHxfPQxrrpFphqNWURehOVrNk +Supplier#000573507|oqhxcCMCzQEBmytAlZt +Supplier#000573574|obBcvWeTY 6SpVQgSktX5 +Supplier#000573641|G6iV9QtoDDYv4M4gp +Supplier#000573669|CG4lILGp0Uw2PooQm,9snQ6t3qQDIg8xx +Supplier#000573676|rFuyu6nnyLy +Supplier#000573754|Xr7qMfiYm1Wz,SOo5PkQ1fMUH2 +Supplier#000573782|DyL9ufPlFkxU87WH5XMfc6V +Supplier#000573806|ScmzGbserfmH8IREQR57yL04jQn9z2x +Supplier#000573847|ZscyfY0ePsietclL7keVI5165SR08Kw9 +Supplier#000573892|qWrCA1RennyLbWl0xTcExrzdRDEij +Supplier#000573911|JBsG3T4Z 6WuPEmr6Al0swW1zf 6Nfx,lqJlis58 +Supplier#000574028|uIjgxwAaD19Y +Supplier#000574033|vdSASfYU5Tx 3Smk8Iak Ayh7Sv +Supplier#000574144|I6PejbZelnTIGe93wsVJonCiR0fIvigN +Supplier#000574180|tT EyLeBkkfcJ3ITminHsFTlngi +Supplier#000574188|P8ccFzEx7CARBlEm38eEhuE XW1f7XAG5XfzA +Supplier#000574278|aY2Fq57dJn1B0QBhw0KF2DqIue +Supplier#000574286|xk7vppqtWU5i +Supplier#000574356|pg8bzHwbA,z8UMXlvSiilE4Foo +Supplier#000574360|qZ5xMr39DEa0AxHstdXAUM +Supplier#000574464|m6G,8Sdff9uU0A0tROeTlL iUDjjNXo +Supplier#000574484|9V2t1tkNBNORs +Supplier#000574648|VHKUMJpWtOC +Supplier#000574821|aIEyCxMkRXXdp9uI8uYPoh3 +Supplier#000574942|No8hV0FAMDYXWnRJB518NdYBlOMJlEU +Supplier#000575000|Re6yuz5Aicy3k9z8xJMye3ZJLwQ0EZkFA +Supplier#000575013|PYMId82ysMkDtIW +Supplier#000575032|n0PtzMwb4FtYcGKNKxoVfGc6,UPMFPNgV2eAqf +Supplier#000575080|Tobyi90Nsdoq5f1tqjmwmWa +Supplier#000575103|I3Lr1nxsEu +Supplier#000575203|oJKexO XmC +Supplier#000575261|skCnalqDm,M2segsRsB,RTvya +Supplier#000575354|FooT4B7ObNqRitTZsh1ldche1KKt4ajPyvqWvkLh +Supplier#000575407|sjIjJ4YcuUmrUrFu5Y5 +Supplier#000575473|WxudNYOvcMq08R8,YyLY6F5KnmZMRecAIYj +Supplier#000575477|JGO0y76x42PvdfL +Supplier#000575482|yIGd3C54iZy4vKUvRy8A4jjTBwiR +Supplier#000575492|U0g1TFGrkgo7DMA8YEtbpnOPoap4t +Supplier#000575534|hoF7iyYaaqoxA4A,Pyp +Supplier#000575555|CXJJkBjMFXDsiV3pkr20CP9k +Supplier#000575633|zvdQlrgqF8eP +Supplier#000575729|CYidZHfQJlHrIwYk16Wo +Supplier#000575821|TaYfXKOP8210Zzrt2UJ2AmQ4DMwYm +Supplier#000575823|,97lyP5gamtbE7utF,eE YDLwt,1l5B +Supplier#000575840|KvC0cAb14Rtg9ipRB2YG59DSF,nEeRYjt +Supplier#000575850|7mK4uh9qIJcKTHmTBLCACcPdHuLs6wsr,EYzk0 +Supplier#000575857|pURGJkSst,oC37fWMr66MclE3EydZqkP4m7z28 +Supplier#000575908|87iA WgeSVIJ,2XVE +Supplier#000576001|Meefw,C8yYXi07fz +Supplier#000576055|xAFZ7udyxpXT1vQB5jEC +Supplier#000576074|OLJHlUgjHlyoWR EnF k +Supplier#000576088|9tz6QrjW8cFOGdX8mcGIAH7SErZc +Supplier#000576090|PIY2rbFatCE,9qs +Supplier#000576098|m6XM3a3BtKuo8O48ThufCsFDoCW1zus +Supplier#000576102|FmDDjbroYiUfapQANmiyUoYu2QAjbg +Supplier#000576156|UjBrRIgQE9yLSx8d2 +Supplier#000576173|aX5yLF9V59 +Supplier#000576209|sHR,uYKiPi5BMCy4N7hWlQKidnXvfRBJCdwz +Supplier#000576233|Oq,OFVunjW0bSWq CHlubtaTjNvQ12WaK7 +Supplier#000576341|0drdS KRyBkE7mbMtPMtYGQ8 +Supplier#000576353|YZQYnlRCGM1JKIRaX +Supplier#000576358|s9d5GsLF,zdmpQ OZo +Supplier#000576361|yLDtodBzVeP18qOtGnNhuPmD2GSH0PVC +Supplier#000576386|CZ9LHTiscqaEzqUcVg6IQ1y286pgRge +Supplier#000576387|gGC73t0h467ceeayqgLs1lFB433QQ44mQ +Supplier#000576414|DZG4KgueUSrJG7lNvHGkUIeNucm +Supplier#000576430|IRZxH52j1gej9I4bbmAGrijys,FbSO6P8q +Supplier#000576582|D5NCiAMzid +Supplier#000576626|LVrGfqOxLnU 5Y867r3yP1C4MFBgAMC8rGKTu +Supplier#000576796|cNT1I0d7CaM +Supplier#000576840|pcpvdVk5hKkHRdK +Supplier#000576888|0n7qmZJE2 JAJtPFZPQFNyQGtGT3VyPGo +Supplier#000576921|Lyb0dW5jnFSvUmcb1wlhhjk +Supplier#000576937|L9tuXkoIUx2QeXUp +Supplier#000577004|lJXmCRwI W8,dHAcrYc,iMN +Supplier#000577282| Nvn,XdptO8Ms9HL9HxAfEQhNi9xuFqLfiPqFPC +Supplier#000577377|kOXehyH71IoP2c +Supplier#000577387|,rh1inycacYujy92XCFfFk8u2YEFr +Supplier#000577490|q5h Myk 2G +Supplier#000577502|enGwxiyvrcuZz +Supplier#000577608|YiYUYbgZf,tV +Supplier#000577616|NKNpLMmzt5nHMKjQSVyCrgsi3wHu +Supplier#000577695|PpfbKu75VLCWIl Dc4h34zfARJy4mJ7YV2B +Supplier#000577734|6SZr8htToHrReiV2 SU +Supplier#000577750|BSuX9SOreF97hEPvTGc1Eq0oFevnl6QA9blKHI +Supplier#000577777|tLMpvpjJpFy Ee9EKT6Bu9FvqD +Supplier#000577795|nuSeu2D6aiMdYhr8VHy8Ivm,gh5wHHniatqi +Supplier#000577815|ECPEJ0zpUDUDSzU8an +Supplier#000577875|Z0LAVili fddla2Fo07CQdcRwGs42Sqk +Supplier#000577897|CT4B,fcLcDC9 +Supplier#000577949|gLkvLetc3NxMgX UsXodwr9Gh4onUp SL +Supplier#000578017|hF34exRitbCGF1VP5 KbMNNJ +Supplier#000578112|5K8wGjz4m4vrh50 +Supplier#000578198|42aLpht qQX83skOMyXhUH3 +Supplier#000578293|THkhTTsojdq +Supplier#000578295|7M3LwtDmIHpOqiVPxKXVDnqAAvmOK +Supplier#000578313|xD6YMUrYoAKAFIYzrvb +Supplier#000578335|dh0szWTDafnLZSNHjh1bJxbDVkK5Gdf9cLJ3y +Supplier#000578396|pekNgZHhtdHHVj3VwKr +Supplier#000578434|itXYMv8Kf2v9tyNTmEkR WSTC50ZC8KN6bTT7S +Supplier#000578465|H 8wgF0rGBgDc2lUHu2POqycSkTHyYsaVSzYbe +Supplier#000578741|xVUBTf SNLz6guZvhEmVVu +Supplier#000578851|XGIk4ryIErvsIQB wkMyAoR06TDL99dw04yO +Supplier#000578862|cp Er2njk1ek7DVOwgpXiLo,cW MYpeSnBI5rC +Supplier#000578888|bwWyshzZSopTvbkDmixnWlRqB5bVPkMTOoiTP2 +Supplier#000578897|mfOyVPl6Z8pwcOG6vfphl4KMWK t,12VrK0K +Supplier#000578938|4gCND8uHx37erA5JrmfCyta +Supplier#000579019|plF2NUZoWobxJtk,XbzaltZnuqSajFWBvagqPDNO +Supplier#000579062|iyBPOAiTOVwJq3eDQGvzwCiMla +Supplier#000579210|9,bL4fuNrazayz7QX,w4zb,UQe6QZe DREl +Supplier#000579313|JN9G2PmDoiIq1e2 +Supplier#000579325|V9GO2qCT9g,YPNj0 +Supplier#000579395|lvsg vhFEq qmsNrb +Supplier#000579435|yXpeJSBF,8Z73 +Supplier#000579463|gm 0yx9g93S2QKNDx +Supplier#000579598|ct3r2i,ADe,Idg6xbE2c7zhcaurtktKyrXC +Supplier#000579601|4anOsQum6PbrWUKibw lxjQY gerUEIxXrCl1T +Supplier#000579627|o0r cIW1LLKdEblpwoP 4kAfT8t +Supplier#000579702|D80aTAOqEaHixZ2eFPoL +Supplier#000579749|ctPp4m3tuoCTpvA,p 6qX +Supplier#000579849|Qfuo1sIgK1DncdyzfhGRwwbYsVJ +Supplier#000579899|PmvYGbfzQwooDTeaApPUIrJE +Supplier#000579995|NOK UA597x +Supplier#000580020|KvVlchcBPeMyvpmPvzF03iS +Supplier#000580038|vp5e83LEGFHZbxIwQZgB0QkAQW0H0 +Supplier#000580071|Su0IOUFGpL22erDaJT14ncxmbj3Q +Supplier#000580097|ZPtev994Wft +Supplier#000580104|xOsq8GOu2qDmkD1JA1U2YoogdGp3Q8kYag pHIi +Supplier#000580164|Wo3mlKp6kixJitsvmRwg4cdxyzTteZjNL9 +Supplier#000580186|ZX49IpqDOF3OGUs +Supplier#000580243|B97xzlBGscl +Supplier#000580390|p,zf1N0sPtE7 +Supplier#000580454|l6IOPs s8R7 B6 ESnU1 +Supplier#000580556|,3iRj7Zk1kl93FDw0awVQed io +Supplier#000580570|14VcsMvSz1n3U2NHOyklzjP06Z +Supplier#000580612|8YL9GIr7nhmIZwd88ROfCgibT1A9DriyoGci2 +Supplier#000580617|PneJFlLg0h,06L +Supplier#000580646|X beR7Wk26ESJ4d7eoLlUXxDjk80HTvL8mG +Supplier#000580678|cYQbdnQn6xWJZsgIEkuF ,k11290L3VO3QNDHQW +Supplier#000580720|Ocjv6pN5G5SePXRz1JTsUcrZNkQnpC +Supplier#000580727|Die88mq,wCNryH8jUI6Da2AZW9brKJo8c9D +Supplier#000580734|I3ea,0wLMkDa SmiYyVpsVdNtacJzJVTYRBn +Supplier#000580737|EwmCa48o8 sJ +Supplier#000580771|0rgJLh4Bq3njF2YgV3O5EbR7 +Supplier#000580804|Ie5mYh9qSMZTVNd5Z67S74qSGg Jtz +Supplier#000580820|E12rB780M4 +Supplier#000580828|BxW3f3xO4ha1JP4iROwLOnSf +Supplier#000580843|KYWRIJviYQJn94N3 +Supplier#000580887|NHq2XEUCMu7Y +Supplier#000581002|ov3BHqRCuYh +Supplier#000581018|CoFsaw2CZHMY2ZIuLIX0yrlk8 +Supplier#000581028|YIW7Mgm jq1YhJ8OBLHMm4wgxDMllP3Ju9gYR +Supplier#000581037|pwyOfYDFFCR,GzQ5KeSJvILZ +Supplier#000581077|0tr,02Is2hbbR,p2GLGdBURVuAEfCNHu +Supplier#000581099|G3cJMdSpwowHNCAGk5N +Supplier#000581198|oB96qux,25DnJSkvS0NQyvJ1xutroc,dqj +Supplier#000581200|iAQXHvUkrsxU6dc9yFe6 UI3QN9EazVPaY,SMfB +Supplier#000581221|BnoAIGptyOXk2nuRm9 OHDflp5N8YpBSpd6 +Supplier#000581232|ZX3WNgB1bPNuAgW3mTy0XJAV76ybbG +Supplier#000581246|hBZeOuzPoyQxfh IKY4HRHWNbqP,rH0OskHezomJ +Supplier#000581275|9YrhYv7p4JI,,v3VcPu8K EukYvLSX39p +Supplier#000581279|8 ih2yQcyal9Z +Supplier#000581330|vfci,JnTc2RTuC4GUzws,81PFyOxn2 FzJL +Supplier#000581331|TdQFI8eiYamIWWzsU3 +Supplier#000581340|0BG8OdRbLH2 +Supplier#000581388|AfA3yq3vEqPqVp41qpXLl 2P4FgieZz8otpSmKHM +Supplier#000581418|GOFdLr7G lIKFRhmVnjGz3uHH1TR8i8SN2k +Supplier#000581455|Mjs8sTAd2Ix +Supplier#000581521|AoRYHOTMkBICWTqA +Supplier#000581527|celTlwx3dX1mko8OMx6Ftutgos3EHa046hhJ27fw +Supplier#000581719|Mkug0ogvbBgw8YiXO +Supplier#000581721|tHyOr1LasXCi9b9AiRPd +Supplier#000581920|p6SR auN,2fqdvYinBVeSpJLZAZcFIe47RAb6B +Supplier#000581934|PdYLnK6UrUN +Supplier#000581964|uotPgNg5g0iZWl,WFyT +Supplier#000581970|1,Z0K40osG +Supplier#000582361|ZHQcv6hSF T9GnPS,M5QKPXc1qDZT +Supplier#000582392|pk LmezEhHGfzRe +Supplier#000582459|pB,CTqzXJe4vRvahHp +Supplier#000582486|UuZq4Ojye8ga,jxpSvK7rpdpaMmfdymCB +Supplier#000582582|Wp8lgLUhitDGnrGMM4Dw +Supplier#000582601|wu73zILtw78czCuH76a ,YddnjujfgcPW2zx69F +Supplier#000582613|ZAECX9UOrgwfAoS8ebso1 +Supplier#000582652|fCEVayFZ5LoEkbNS71rWJUV3P9dfxM5s5wfR4hP +Supplier#000582654|F PuNaU70XcHPo4Cf2QiHPjwA4vPQ7xz +Supplier#000582671|i6m1cWXdiQAqYd39MeW6,3dzH6PkWgo +Supplier#000582676|N6TVG eZzNZVAF +Supplier#000582772|h KGMiiuomcBlUPQ5xmYav3c E +Supplier#000582779|dEfFrZggNNZMpdG +Supplier#000582851|,K6tXJ8Cn,2F BhDqs DVknyVs3Q +Supplier#000582882|KRSudBf9uBomxdR9GZ +Supplier#000583005|oXt5k8KsVC4OugBWIP7NN +Supplier#000583031|HCBP,3q4afeHmb +Supplier#000583236|9Dh6AUy7,i,gumYge0Bow1x4 O7 +Supplier#000583348|nouBVfTgPdNayXnU40MpUc7b +Supplier#000583386|WVaQJ2XT6d7cticurnK2dHLM olE +Supplier#000583489|VtsQd2aP6eaLRFv4jxgKpwmorqYkZn1 +Supplier#000583598|aTPYc0D990ioCZy2Fs +Supplier#000583765|cZUHxL9YGn9ge8 +Supplier#000583849|IqHxUKosn,XzCvANMheiaFFuzTLAkaBq8 +Supplier#000583856|y GvItRgGvLQemwa +Supplier#000583915|bWwxJtDmdzVvqN7k8Mc8kg0V +Supplier#000583928|,lArsJdMGfd +Supplier#000583983|hxeXj z49IRyqbEHFSCPMPHbitonDZuGqkqh9eFC +Supplier#000584018|xnJWxJwydblF0yg1mJrju8oClWIqNn3lk6 +Supplier#000584045|nFwjaajkB9NVNsIIYG, D +Supplier#000584094|pY66AE,BdCrTjWBCd9yxS4oxdzBBUSkCo8 +Supplier#000584102|IusIE,g4itMfb +Supplier#000584257|UdIbAk3ufAU8Ws11S +Supplier#000584262|y0cWkEbwe3V5jAlCJPTQDQ,utS +Supplier#000584316|pCI5H,O6egZ90vDQbWxABryYKzV +Supplier#000584342|ES6hKgk1zQVBLJ,6cWugutA9EI +Supplier#000584380|bzX8OC6VkNkmxBgz3I,O070hu6fKO2qR UwEH +Supplier#000584393|wPP6OFGap5FIe4kLpTOyZmQwBN2 +Supplier#000584402|iLlVyBeWB6IFQbom4 VcU7Ml +Supplier#000584465|mWcWVj7R,gsMRrJDiPclbQ +Supplier#000584523| qFNZ4DEwFE9pj MWQMw74za1E +Supplier#000584535|IA3cvIfA2n, 13COKqj +Supplier#000584642|wuqiUlu3Cii6k1eJYY4WySuHlyMbukJ +Supplier#000584648|NTAw1So YlT3,urwvj2BQtTcC1t 0D, +Supplier#000584653|lck3m2cNG0 +Supplier#000584693|SwqIk0RGdyc0OPSR1TY9mwH4o6B 3UIBh, +Supplier#000584803|wlqtP8N5Kn 3KnfM5 +Supplier#000584833|9iNbiNuV1lVa +Supplier#000584854|lMkaRVLCkhbRumZW5DZ1kg +Supplier#000584923|JbDj6hIvtceDFMlw FMAjwq +Supplier#000584945|9dytvlVG15qJ NYCHoaHng +Supplier#000584991| bwevju, pn7Lo1SGs3bcf2yRc8 UzYgzZ +Supplier#000585174|YMD88SqmdkZaDVYOuqbKb7hnu,nOeLE7zl,WxIUO +Supplier#000585318|Oa484yvKZxKy4FzNIZeYpBHSD +Supplier#000585332|iclDy1idldYvRiXS73BV2T8ZtIiOcEXWQMw7gi +Supplier#000585451|MMcgThJybBH0AbxTBo CCgcV3NUtEBL8NGjX +Supplier#000585485|S hgCmWESygpyz594ltSg9P6S7YHCu5T +Supplier#000585589|ifbMxf5rZTl +Supplier#000585678|,LMtKMhTSPl73sZUrWQSj8rbO ux1Ys0AZqq +Supplier#000585685|yZBhbREKiYFxnw5TC72SlnXvdNFkA +Supplier#000585742|DhEeFkUmUGfdBGzEFwZdYkwPqwpxli78 +Supplier#000585798|SrHvsZ29e7UUHEijhpf +Supplier#000585838|r1otK8ZwfbXYqrnD707ymvjLsI8 +Supplier#000585849|R6ThrS6eAOE2KrOw6w +Supplier#000585850|rJjPquG4Du7iP IM91uvrzH04GfaPi +Supplier#000585858|jpQgT008RcFtVJpoQ2WJcliAjN +Supplier#000585875|Cj2KUdtI6KS jbbL1S16CLHpiPVjUqbD +Supplier#000585992|HM8fXplN9GMLg1n53SocMNbwkWb +Supplier#000586199|KyIsb8XXWwssi0w12IG +Supplier#000586234|vdME7AncVEQe76M1A8lXoAN,hRESX6u +Supplier#000586335|1ZEsPd uhhFTSM4IF1b52 +Supplier#000586379|gIo i9Jlkhk akPxG7zrDvQQzVa5OeIzOi +Supplier#000586542|F9l,6W2rbxk +Supplier#000586550|KQxMwbgEIJRrpHknHvbn WVK +Supplier#000586616|E5jw7G LPNM3N,XjUZNhpkWyzaVD7EtH18l0v1 +Supplier#000586645|cjGOSOBYKzJCqr8DQRGn +Supplier#000586663|Z4JE2xZs3qS4DJ +Supplier#000586671|SN2TM9OYAPoH28uKjmWhq0pvT2zYvW +Supplier#000586741|duZoQtlKYMbpHpcsP8pKB96rNB13 +Supplier#000586794|7S2575xoNY7Fq4VpbFPtJioLK0gtW9G7nZsEDwEX +Supplier#000587050|zUjqJyQJv,iUK4BoSJYDZmjuGZcRIy0Q8QQs +Supplier#000587079|VHTSHqfqb8C54oH7zwpzTbA +Supplier#000587083|vN7FlDqtzD hX1TcWGW5Nr6cY0AGIP9 +Supplier#000587118|GK7HbvwVAKyeFC +Supplier#000587374|u6aYkAuGC8eoGaHs +Supplier#000587496|drtNnJzjd4Zgbb2felW4zif2UlqhYV3YsCLT +Supplier#000587499|m7Ny3ZHDmzCp +Supplier#000587521|ILDwG,lhL7BBBqlpPzfYTel +Supplier#000587609|pV3i414r1ztFXEaQZNUd8LjW4Ze30OJCjhiw6 S +Supplier#000587613|aLNJM7T5iS,Fl5L2EcZ9ZzIEHHd4XYTsDRDfd +Supplier#000587617|VjcreX10Z6S1YU3xqO9DNAWsBF,1AS +Supplier#000587632|KaPH4i6KSkNbrM +Supplier#000587673|aj7MATSVO4jwEEutsxib8uUcI +Supplier#000587705|TX2hvhm1uQ +Supplier#000587726|Kls8QXpjaXiq4JQvul8lfaU,,sHLWzNRBLyN +Supplier#000587821|L24RlnWLvDpGSEI +Supplier#000587841|WJ4Std5,WEhN +Supplier#000587884|KrizdKNOYIgRjH2hEbg2iS3yC4EG xCxK0DauB0r +Supplier#000587914|yJOpdx13vPNH4j5EceSjKbqMaK +Supplier#000587996|F rIWpfWznTx9qrmMvXK4JqW +Supplier#000588024|esft2TDY1dR UxZv ZmTP,y9qEEB51dg1EB +Supplier#000588095|9vZ10zPz07IxXZzfVS8CKcxib6ApcHD +Supplier#000588160|ehJDctdHeqvL1X7bIzM 9KHniudiAdswhhVV +Supplier#000588277|6BCCVeI8fV0KsSsxCYqAcrnGbh4AkE8x4ir9Spw +Supplier#000588286|GAzsk9EV5naIcGiI6Ele +Supplier#000588305|wDMWaW13CnH +Supplier#000588342|cUY5O8CR0 4Ov5s3prxCdShwWjPWNpOx +Supplier#000588368|qMt89TTr2eeqSExTq9mUMtN3Cj2FUjq +Supplier#000588502|,td61Xg,V51cWW5NBgPW +Supplier#000588547|vsGxHfH6o0drc5VoI,1FajD1NJd0Z9N2lFU +Supplier#000588566|deHb8I86aRygphlnX40bAi7i1uTxT +Supplier#000588592|dxRU XGcskv3C7UoV7xYQNP 52 +Supplier#000588643|4T1RHK1IBw +Supplier#000588672|s3 ec973u4Yoa3KHrwtC4kaLQ1 +Supplier#000588718|ZgCb1wfrPgj26uSH0930V +Supplier#000588821|PaCxNm5aQom72G +Supplier#000588823|kheDCNKCWOkxT2JEEQ8Sq2e1Ntwrdu +Supplier#000588952|rYWIbvl,scKsAXgIwvemkV7QS2gBLv +Supplier#000589064|84YpRO3aOp0W +Supplier#000589072|30U5ayDWWgtrhEFtS3wX6wrn74q +Supplier#000589098|dITJI3iFIOWWFVreXuxcxtq4IT 01 +Supplier#000589121|5Z6IhGVq1tKIB3wImSGi3IIlYZK +Supplier#000589152|aimsssVVvoD +Supplier#000589198|keJWKx8NCHYLtu3BI qQ375vlVgZR +Supplier#000589216|cRgO23f6d qFswG6G57mkAV +Supplier#000589233|Y6pyTuPPKfAi,noSCFI38 9kd +Supplier#000589424|B9T1b5Px0qI5RK0gMlAkieWSp3e xIejB +Supplier#000589448|BTQ2dVtxkAdV +Supplier#000589467|MUQuXXJmt7ax2YIGFkwT8RjjLZhH0vpLzHJloX +Supplier#000589494|SM1C5lMe4czq +Supplier#000589531|8PCHEJUHb5ZHGX3TlJTPDhPhspp1SawaOf +Supplier#000589567|7WDJdr7WXiDIs8Y6 lHQPhWie1c3dc +Supplier#000589570|OIykH07FD6VxmavA9Ay +Supplier#000589604|1a2l 9nlEfAsLDKhqyaTUszi +Supplier#000589642|zeBFSQZUsjwW Zb +Supplier#000589649|8zOqkMOdnbawlGYWz +Supplier#000589677|Ll0c963gIKyZthkjXgnStme +Supplier#000589683|OVVPyQMEsS37uv5pOesb05sOyIdDiNBbDZU6vZEI +Supplier#000589824|69J1wFbpXzEf7U8eFstew +Supplier#000589843|ceMCwfP5KGSDpwrg, +Supplier#000589994|6OrY2JN6fjOTO0 Yy9VgaCXwmA h +Supplier#000590028|JNFIduIK0klaeMftPX +Supplier#000590140|iDHBmE09icvG9XKfXWhtx +Supplier#000590167|hBFtx0,CtQ,9lKRHKNs7pubiqtLs3syc +Supplier#000590204|cQEFm7khfrtQVb7qxG7 +Supplier#000590241|0FCx8vS6QPhqmuBBTefHVtMdk7nCUHH +Supplier#000590276| UeGnwdKlqR75x24We8YRkV6Yh +Supplier#000590290|L8mWdPhkNr,FkGV52D17tYUSWw5Wlm +Supplier#000590344|gIFeXC3lMK5sFg3KGOTc5uycqND9LifcSNy +Supplier#000590383|9z7P0tlvFRPyXagaFsxFD26IQS7vdl2D9D +Supplier#000590458|VznX9KDmfc3GA1 +Supplier#000590544|cpbP0iz5s6usRQUg4NHHtxWf 2hfojif4h2C49L +Supplier#000590554|yOQoBNSNp5zRmZTdmgz,CQVp3LrkFbbN3s +Supplier#000590584|lZvysmSEVCj468sijjMhr0I3FK8bwNgm cvL3gt +Supplier#000590607|79OYcaGv1Uo72ASY yeubdnqXX284 +Supplier#000590647|F8g,QmXiBQGBD +Supplier#000590671|jFKe3dFc6ldCvBeT LSutI Q4UCuWgMf0COKR +Supplier#000590839|Kg aBXPCTw1X,yQMrI4V0ooSFX,7yQpjEyk +Supplier#000590842| gWH0GyXYl VSAZF +Supplier#000590844|iPUB0xCipD,t8D99vV7ag9 +Supplier#000590893|hR7hutDXzyAu 7ewzqXAEUzxsOWTqMMRytc +Supplier#000591047|sAEf1VxDMPWQzamr +Supplier#000591079|cSC3q4EgpITUix4pFsG3 +Supplier#000591166|24ENzYQ Y7w +Supplier#000591195|1D9 Ip,JrLBxah3acZygmWHUf1K +Supplier#000591240|byeJu2UNFYKVwqM1N +Supplier#000591242|GxmTBZNAzoaFHqF7,O59et4nlmOljt +Supplier#000591255|1zn1n9eKeD1LGiR,5gv +Supplier#000591297|GZOUa f1kkmdwi94vh8LGVPCgvVuU,rDhAS9e +Supplier#000591337|bI2GIq1Bj2 +Supplier#000591376|1kdbCZy4lLfJZsIp +Supplier#000591406|ugQfcqfTFh6pmnjouoUo0Cja5UZD +Supplier#000591456|uJh8GMw3CaDUhbmS P +Supplier#000591573|S aC6oTnanspo5Asn3aDLf3VC7ouFY +Supplier#000591596|iWjiOctRJdvmGuaoXtaZt5uYJkBICgAOFSHVo +Supplier#000591626|GhAM7934PINhoj3fDAcm,GGI30QGGhAVI2 +Supplier#000591653|TNX4IVKnUJz8CbsssTh +Supplier#000591673|RxG4k5l53pKaAHTYLCk3iIFm +Supplier#000591690|ix6E3K8gKu0MDRa g +Supplier#000591691|AiQYyiVyQr56TyaGw4UcYpyfvhyekE7O9QZuS +Supplier#000591753|E5F6Pc0Om0 +Supplier#000591831|meoer JxWsiGbmk1MlkdWoWvoxzgADn2 +Supplier#000591840|58gL2HuUqdEjHHiEtsCm +Supplier#000591886|owheIIugn,qYLDP8BhhYT,Rz3Jl20ZyApBW,Y +Supplier#000591912|y8zfi9ZljMDiOJeUCy +Supplier#000591980|1RdryyaCgpRt1tp8 +Supplier#000592054|36L7w237CjtFIG3eIC cDkmS 0w373GEaDMk +Supplier#000592126|dxP6wNuX9vHvVEHrSo0O6X32GXzroFwTWIQ0dR +Supplier#000592177|8VcuLkJQfb +Supplier#000592203|Hi7OahVZ,P6OTxetaNaAelqWNkWY, +Supplier#000592255|KkKdLSDM6DOlylblraI4LPgdL9ce +Supplier#000592265|tWG,GfqdExauA0d5NkLkWHIxuTWNDCL3doay7kd +Supplier#000592314|kf,yIDFfd, +Supplier#000592319|TLPpOAGgK2u +Supplier#000592352|l1EpWZJvzarMCyKieCVHrTqik4 nhMQZ238Ow14o +Supplier#000592375|j0zaVdTBJCKNPz0NlSX,G0WD8WIIwNA8T5I39moy +Supplier#000592408|4fy5pUmyxXdiI5bZI9S7d89p Urc +Supplier#000592464| E,ZCh2,XfpyJdo +Supplier#000592519|d2UQLrbQkoFkdp61NIU5 +Supplier#000592565|yPWeR,Wx,b,QfEogEH,SD +Supplier#000592591|om8IpFLJGqEvJ4i4ISdn +Supplier#000592647|S1qF6vzwpFTT7PgCsE3DgrrUlGOhhscrprYEIRM +Supplier#000592661|dpOTGYZw0irIRl5q +Supplier#000592674|DB8sbREnn97S +Supplier#000592706|WSNcpYtZ3KJuI9Yv,v61tGqWhtM9ra3cqzwVIkN +Supplier#000592744|s6t5t2y8t3C5zGnmQmbI61kp1xhGnuq +Supplier#000592769| k0dkHBqfz7QBjAOd6V,cfjRMAZVQFsZ8 +Supplier#000592779|2n6PKkLbNq8bYHL +Supplier#000592860|PP7EklM06WlZtPCO +Supplier#000592893|nZcG3Skes6J48Rt ci2MyByTezcS6yB439TEd +Supplier#000592905| i2V FSpK4k0CNX +Supplier#000593158|ecmK1pS HTSYh52NVbMTWkWLXWhSGkp742b +Supplier#000593238|YglS0g8pM2rC5ZTDrSPThtW83O +Supplier#000593255|u4D 6LKImXoAq7MpBemiTk4kbll6X28 +Supplier#000593389|v2tbib0TRYVaUHlbQxp0xsi3LH00xKj4 +Supplier#000593391|,OLFOpfATyOQIWTToc3a3NqF +Supplier#000593565|N 82xydRpSHgvG 4uouoEu,GiDaaGuj +Supplier#000593596|i Tymx 2QySw6RmHYxDppyf +Supplier#000593678|VUPjf3hlFv5KNRA1rH5o1 +Supplier#000593697|vB3jumoNmu,Vp8NftifYMbYSU +Supplier#000593700|h84W7CTmUCCrID7 +Supplier#000593855|clgpj6FHfd8H ol3o2bDfeVsFyvOYdGUvtx +Supplier#000593869|qiYiQvqLs5ohYI2cWtQNVSA5SnhZst +Supplier#000593871| 4RwjhQFnmzP +Supplier#000594151|LabiJwASNBp9szTgTCPyvXCkEZ806C,xPepar95 +Supplier#000594202|ePphk7NwiB +Supplier#000594292| k0AOLzpSV1bYoF apD,NUDD8vewdDo1 +Supplier#000594448| oX4tUkpdYk2,Q8l TXo, +Supplier#000594497|UHtLPhsW7zJ,ZaSeVgAAD,EWs2 +Supplier#000594698|1,OwNzaIO6iWH +Supplier#000594703|hyix AHCayXMJZiOIZJn4wKnN5AgWTQTVZhve +Supplier#000594704|tTVdYh51yiopeazLQFaiP +Supplier#000594735|cw6IhXmM6rbu,bfSUc9mX7KrahRf +Supplier#000594828|bFO2vHMacqRi1yMx8Y1tZgatH, KNtwp +Supplier#000594849|kZkRZ8SUYH8NXAPMZgYpqJlRCU2h3K FhM +Supplier#000594886|DuyMwVwrlMS7yHNx ,PcJOgyLVr1HQva9IWody +Supplier#000594909|owIAC9jkhw,AMEzQfMuK0cSmUZcPRyB +Supplier#000594929|nzCtY7GTYHxn2JK0YJKyAlojAoSds42cbYd91 +Supplier#000594960|AFYBqskWbJPzQ6Z6HhrQ cm2e2y,iaEj4F1 +Supplier#000594982|neLSAI7cpk CYYyGBx0ZqAPTW +Supplier#000595028|iXK3HFT2zcEVJa7HOEBj2g5IbelQYG2 +Supplier#000595068|C,K9D9IFqoA8Q4 +Supplier#000595129|3BoKR8eMzlq6Si jwP3l5cghutRmN4v3Re4Tdflm +Supplier#000595334|oTKKJx6,6YN4cAQpkY5UnBSEbeYX7wKHO +Supplier#000595371|l7F3NO5JDuWiQvntSZ DeSnU72hDEGMYhd1EkQD +Supplier#000595386|PeMKjcyEEASdkqsOw4O27V2BMkII5Z +Supplier#000595443|7nN6pMyjj520hMgWNxCUaq5sW2Npg +Supplier#000595454|7WS0lom4uoQFg80z4vhU8XBRuurVGm8l6YAKQ +Supplier#000595481|yGx aI6M8ZUipnLhtOOfNWaeI +Supplier#000595519|PeTQhiuV1sM5EyVh2IkvCZJZ +Supplier#000595590|y14klsOJH7ah8SOv3js +Supplier#000595608|zg53YTn0qPEu,np2l8vGKse4X +Supplier#000595631|p548rczBDynG +Supplier#000595675|Xn84h L6OjSEYOh3fX3AaHm,ILnE +Supplier#000595709|ntLhus4Mc9WC4FSsHj 9,3Y +Supplier#000595832|17yxuypz4TLy7HO +Supplier#000596045|sZx,syBkOK6gmCeDQs4,4waMErjIXI1UatxzY5nO +Supplier#000596136|mg jk4G0muHAIaB7k5a7g +Supplier#000596384|yz6QjIxvcunJcGyt AqZJW90TWvz +Supplier#000596448|NTySiuXKFTRxPkylN J9LXsZAaKm OU +Supplier#000596632|yDUiCEc6tkXcy6A +Supplier#000596636|uNSBOthF4A2BgUFeKPPyZct +Supplier#000596728|77z1ErjxGlf7RRn5ABX3sflSvK6cGW +Supplier#000596739|97PFzZo2r0E2Gg +Supplier#000596769|2gdnFrnLoPfyq5hcPkW 47mnnGurKOmolpHNnKY +Supplier#000596857|,WNyZ0xFJzBj3vO5ditvUvGn3ET3w,gphsX3T1s +Supplier#000596867|7,pY1AeeO mApt707wEUAaiK17Zn +Supplier#000596901|Bn1tfavtieIrzY +Supplier#000596911|wswS4N uEcJzfswA7JUoXWa +Supplier#000596992|8dSOmZxqBd,,g1zf1knxAehaMIZeN,iuR +Supplier#000597003|Ah0WZDca5UNkYTUfduLs +Supplier#000597029|NwEdSKrxgxb +Supplier#000597147|X9vvjzjGJMmNrJosA +Supplier#000597182|GPE Fyv8z,pvkbzIE2 +Supplier#000597309|WbrnLbmp nnmgXm5xwEEvYfqj13uli +Supplier#000597319|6G2zjLs3jnmPQJcQq7SwInnYE +Supplier#000597337|,0cJNLbql,cH5ff ynv3pBSu +Supplier#000597347|igw3w2HmbT +Supplier#000597440|VMriLqpgYTHK1tuBdlQo +Supplier#000597512|rQ,PXg2DC14WB2dvQyWC7QeU5Fg +Supplier#000597655|kLo9MkXV3oRsSGIX9WJqqyK +Supplier#000597866|yOaOWpw qVo0VDnriWoS5y UNMVPDHKTSw +Supplier#000597873|B dJqiM7JtXFvVVrG6jnzNSZpXYYHd +Supplier#000598045|a2wfaqDoAHkvsCd7pzFMtBqPt9aGQKWBSoT +Supplier#000598049|DqA2Lf RKRtfCy +Supplier#000598130|PkK5QVj6fRCjn2 +Supplier#000598162|P8ZzLkOYiRATKzJ4sPOIrXRf37tQAU +Supplier#000598304|a951qumDIhC4A +Supplier#000598458|0aFbKOBEGu1qcWo3O6Swfs8qCiW +Supplier#000598487|bV6M5yFmdzYeXV7r5Wv7Q4dlg6vMsLn7w7ki +Supplier#000598521|jQygv0ktGMeQNubpaTR39OLm0x48E +Supplier#000598537|r OsDs1zF iGfj +Supplier#000598592|ofIwcB4z8x8rcNbmIEs +Supplier#000598598|8zLbXm5qVOVZNnKyiCdi54P8Q4Fs +Supplier#000598631|bF3mclbVqPmzRz6SOWaMplMwJFSEWv6 +Supplier#000598676|dBRxUgpJ8E9dFfN tykJZS2Bj +Supplier#000598681|39ADrPJIMYKr wacEK,J2NHT +Supplier#000598756|d1Vi6Q9i2fsvlI +Supplier#000598828|Tv4TIf9gAvf6HNKcKqqDebvzM +Supplier#000598889|zstyUG Sy82I1LXR qfDMR4cDjgbfWq +Supplier#000598898|ycunfznKVsFzhI5jRFtPdzqvrDBlQ +Supplier#000598919|90HzobMrT3F7e4pkt,nz4WIpMNXNFoo VE +Supplier#000598995|IB31lRxGp89Y4Rf,Bk +Supplier#000599000|P8X4mZXJcGIpgZsaSg5x +Supplier#000599004|Qzn9tpN4a7elfKB0vez,oW +Supplier#000599083|19WPDnUYmyOgAoYk2yx2FqfMO7U +Supplier#000599100|ucaTXbniY,Vc5xSz84tg51x +Supplier#000599171|ePgzcAA3l0xr3xpLJMbSMOKLQaS4rk,c +Supplier#000599216|dKkNlWJVzi2JTkm1Y0W67zpSOGIkmpd +Supplier#000599259|sh7ZiZRPCQ65jFIl8wTZO3IYCnr34YB +Supplier#000599284|v3emvw5T44ayJ s1JeTLTHnxZHEdnIb +Supplier#000599300| DVwoyWP5HbTZeJzKiywom7DdTn7yxeWhZ55E +Supplier#000599386|H,5zNPBrWtpyLey +Supplier#000599598|wh tvmJNwdrNFDu +Supplier#000599711|85Likwxig8KJtLIxmtf +Supplier#000599718|j p WNOcRjv +Supplier#000599734|Bejxq ju0vzi mQNi4kU3ZxO4, +Supplier#000599846|sbXBNUdx5gKk7mpDRmtZP5CsfGYEtydM5 +Supplier#000599954|MdpKc,oJ6NvNB04qRlaWxy6 +Supplier#000600064|jQw3wElfzV6VYgXBXBMbCVPFghYdJuoVkjWBMM +Supplier#000600070|wKD,4K6i zVHEedN +Supplier#000600202|krTAEPUf5rz1qj,dgen1I81wUHqoa7O +Supplier#000600277|Dxkgz0rdZie7LRekfVkcuBba7hyA +Supplier#000600303|omYgGoh0vN +Supplier#000600318|E8iVRESsL3H +Supplier#000600328|0pxxbXEJ7gXK9ItwNcrXuIzWaISUuuY8kK5gqYh +Supplier#000600505|Pxk4DULXF6qmb +Supplier#000600506|AVK92Ye06eplpCa0J0JKdCOZr +Supplier#000600530|reL1G2Luvp +Supplier#000600663|X A4bAy9DxyCoxR 1S7Urd,2,6NxAEhuIaZd5 +Supplier#000600724|WWgcw,4EOP2HvDAreApIBMKZoqA9P5MqZ +Supplier#000600736|I7GVH mQh GlWh78uTQ +Supplier#000600807|O7i4CyQ0OlswFw7uDHVi55TuP1j1 +Supplier#000600919|Pq9sdgEwIqRyOnATy6xed1OYmlK3 +Supplier#000600974|ijsbSugfQtNRLU7,n4diK6SSAlJaDLSOfo +Supplier#000601003|EkuvMx00k03u9e4NMOova +Supplier#000601032|VY6dahvGwTBwzXd4W6hpAe3MrwfF6JpZf, +Supplier#000601063|hhuqyYd93mIZMEj37c410C +Supplier#000601134|kiF0XC0OwhHAAOWw0ekDxEDFlz5KoKRe +Supplier#000601140|EOLxYdiboIkPsWCq5McI b4JOm8X +Supplier#000601145|cG0vOf9hFkQKiXCfpfvaYaJ3ix11ifMzSa +Supplier#000601162|UEID7IamIkVplogXK6tBL7q +Supplier#000601175|M 34D3iI61pnwt8 +Supplier#000601211|R08xk0fm,6l +Supplier#000601217|quZxnrMAtrNxmFSZ652jQFEb72j +Supplier#000601269|TCt jhbjvciVQ K +Supplier#000601392|WVubfpZ5AgzX54YB8xQYkQrgMz,gYieCwUmwXrz +Supplier#000601402|uwgW2iHZGn rvsup902cew PxV1auPjlZrrS +Supplier#000601428|vdcI6YoGx5w6B9fTvSP +Supplier#000601497|a2qdLjRKKgftuZFjBgLXx7YmA3W3cK +Supplier#000601606|ZYjtzxISBBC7lLEKG4VirFUzgKYQW3I9Coo +Supplier#000601643|NzVxTLmepi, +Supplier#000601685|KIQBU8b1 6ENiLsZCMmey +Supplier#000601696|HSgNtV0hHV3W8 +Supplier#000601717|TIr1EixIlSwK0ABEbWA1z2Loe9 +Supplier#000601724|pwINU6,ocP2K QxXZY1XJUsXD2OV9rW9LK9gX,er +Supplier#000601748|B7VSTQ0y,xlCaYNECxJsVVMZYOnDCMbW4 +Supplier#000601762|X8stCPoN8 8 +Supplier#000601837|DOtrlEXyLv9PzE54OhX yJW +Supplier#000601870|pVErc2oCrN,vr1N10Jsl +Supplier#000601889|u2hrzYswndUQlboE0Zkab qD8qmhoIX +Supplier#000601920|ESv7otxd2plYeIjy1eObWvPCS4MHbVO8 +Supplier#000602036|Jt5pzEz0Fga6gT7gX0b5Frg fQl +Supplier#000602175|et23eEC9V,p6dP,tldsBQ40NU9PSM +Supplier#000602204|MG7ZNKXUjntaYmH,z7o0aRVEYAVAsbl +Supplier#000602227|NF64K1heOu6wpCtJ7Zp +Supplier#000602391|6g44k74xTSe02Oqwj8jfcrWEDJ,xPq30AbpN +Supplier#000602529|Kqx5wuJPaa9tnsw2EBj +Supplier#000602569|BEyTBfdsjahOnkSaFrR69Rrp0 +Supplier#000602632|8Os0pbIRa5C +Supplier#000602651|dy7btM,CCin6tT +Supplier#000602721|nwauf3rVoVWGom xtSHNrLGo qgXaeVTTlr +Supplier#000602727|DogbeLgQWINe5wWRELYANMYOYA +Supplier#000602810|aql3zk3bG0 Viz9QqjXjx0If1FsyP2Gyl +Supplier#000602860|nqD8FMCAH0iRIbYvJbQfGNuqnfFdcGLxfn +Supplier#000602906|O3GqJCDQxupoXb8lxGtTD5,fVb6y +Supplier#000602922|S0V vjHTZkDsUpeW +Supplier#000602973|3Ez9Tl9PJlomZ,T ICeDurKuntjnU9ZTQmS +Supplier#000602984|zQkfJvsYDV +Supplier#000603094|4IAuGDeu,I2cmrSWiOvJEBMn +Supplier#000603140|lx9FwOkgFsTn6AsLIDHiV19T7OUlbDOl +Supplier#000603188|cimGDMw3EfX3ipBDjbmUlBiOJPPgpv64u +Supplier#000603218|2Q9yIDY63 Dw +Supplier#000603401|qix R6tHxLxUfxwPbamWK1D +Supplier#000603446|cGuc5hFxbgSV P2j7tbY6cEab iC6ootX +Supplier#000603452|KKu5LB5ddK0vUCPY YDp57R2karYfSLjFb0CyD +Supplier#000603629|UQsSv7ddSqowJHnfKTDywm,bvNLLE5nEs4qOfP +Supplier#000604054|ZuOPO6mbXKkCq7 i,aun +Supplier#000604055|cxt4Tm9TzrXDuIFv,j9d +Supplier#000604150|1 RPa7sJ YUOrvSAKp0wdvuD9,Amu eei,u6Zk +Supplier#000604287|fy64CA bgBl2Rez5xugfm71ZKP +Supplier#000604388|qEK9WwCB,WA,gRWl8FDC7kNfBJ80BWBAQI +Supplier#000604404|XIzXAqQQ72w +Supplier#000604601|7SMEZOf1AdfUtFP +Supplier#000604636|MbqC5G,9dLqrOWeuC +Supplier#000604661|J2vBOUC4y,5H9Hc5Km uL8BetxP +Supplier#000604674|sd4sk,tAlmxXCyZqZ6DRehN,u8O8F0eWEH +Supplier#000604682|nLkTi3iFi5,vGtCmFtazR2uOgGo,mXl3HvU3Ux +Supplier#000604695|QlXTPOY9JlXb +Supplier#000604745|8xRvpbLQAWhm17ejCZNlBu4pZad0CEti0C1 +Supplier#000604796|ezAr4CV3yDeJnN8SOHOzZUCXtx9Gj +Supplier#000604797|OVUJId83HTe2xESHsfyS3sV61pttsZEjlXz1 +Supplier#000604864|O6cACiceenCVWLnx8t6P0YDcbZxG +Supplier#000604896|5YgnulFoAKJlnK2YGaq SF +Supplier#000604904|Ldr9L1rU9WhwE6 KtrYdh +Supplier#000605198|nUoSpo,1GwYYHn4sF3yHrVZKzOhxN +Supplier#000605201|NALy2GNh6RvHlFFJr +Supplier#000605215|6TJf3kRcvorLbCEPnq0M +Supplier#000605221|O,AExqNnUMxOUlhH28,e +Supplier#000605234|BkHnyFdlTWLeUa6VGgWm +Supplier#000605315|9HZpa88XtHqbYoFOK,E,Z, zIzju9qZ1wQ +Supplier#000605362|GbYgLxK7OPKNiR +Supplier#000605388|GVXdUUFnTZKv2g5IYt,Rz +Supplier#000605504|DEWCASnOxpc 1VWe68M2dcp5OJilqdRcEd +Supplier#000605612|EBwKJTT4rZcVQwTgp5IT5IGz7RedFGNzTT +Supplier#000605622|k99ihX9KvOxouojTETi +Supplier#000605709|5s7lD6Wxk1nCAoRAT4ZNrDEP +Supplier#000605711|Dusz9ZIJbWdJGp50zNDrHd6NPqdTYfB79P2flG6 +Supplier#000605901|lQAyrjmoYoNa85veg8 W2a +Supplier#000605958|dTUWS,jqsklKR1 +Supplier#000605962|MZUJuVPiXKId5P2cFh5WxJvwB +Supplier#000606007|6qACeEWCgYF9xBonFMbGV +Supplier#000606098|u254lO2e7y4A1UlmFHdNruAbG2tpuKWsq +Supplier#000606210|cQWVee4fRmIFvJX0c9Zlo4MuNcyQCI +Supplier#000606247|UMXaTiBlv388TwqhzuOKrC0sSvoPAsR +Supplier#000606260|YYVcIdZBhsf5shkJfzAKYtTaJcw5OGucb +Supplier#000606266| x6ZhOpozb5WwtTThXLeJFXAmo4Su7 +Supplier#000606558|pdDzbfWmkU2pxghW2SL9iGy7Zq3 +Supplier#000606586|IJ3v2POvcFzRyQScnB +Supplier#000606672|OFVyJ mZsj9OpVta18dkziDP27Gu0b9ldSFJ9Jd +Supplier#000606746|D, pHM,32Mt1wCkZgua +Supplier#000606801|KchwlLRC4dnltZTd3o +Supplier#000606807|4rfhD3adE7PHbZlLTANXh5uW92bWowF +Supplier#000606827|tyknZWLCiu6kx8HceA MkqPFYITGES +Supplier#000606896|0aoTtC6If0hHydsfunhDL76GD0Awk +Supplier#000607033|6LlGOGxatV8riS0Xmj7SXqLHuy1OvW5 +Supplier#000607042|fctx0xWUThOWXPRS1,IbSI3 +Supplier#000607045|rmYLXrcf,sW18KyeP +Supplier#000607086|m1XQQSB6AC1aaF0gheh,S5oV3yRF +Supplier#000607111|gF3oWScgEFjq tSFDU4RRvCW0Pvr1DOy0s +Supplier#000607135|eauTucAgT,nQnafrd0UHz96BISzRoK2A6wC 4Fvv +Supplier#000607153|w Qkqw550mX6FSJJm5jq,,hz9,cVbgBlD +Supplier#000607196|YpTrUkrGU8 +Supplier#000607315|7ViKNnHreyeivaXhpItBhe7X3KtQcvY mH +Supplier#000607348|Xy9rNkAUCSjpS2fK +Supplier#000607476|b0AT4JigYAUW 1U2JKadfFxU0,aqR2fHViuilS +Supplier#000607505|,dtjTdi7uY2i,aK,GpLJCgMEDu847 +Supplier#000607517|spZDaUtaqei1LNTNl wn0M +Supplier#000607584|tO751T6p4DDMvtpVRz3hDvFYY +Supplier#000607655|0rpAjb52S1Piu3rvgx8INsOloI3eV5RIL1X3W +Supplier#000607673|ouk0GR8R0xXzf9AMICl +Supplier#000607805|UmlwYVgL8RIxGVPiwzXtInQf9H0B8tTx1 +Supplier#000607860|b0T3aEwSC,w +Supplier#000607938|szMmvHhkKlIEOQXzDgfmYH8p11alXKhNXn +Supplier#000608006|4r2,coljlZwhk8cH624s +Supplier#000608030|oPQtRGYgwmnlP +Supplier#000608172|xjO5u90d 5dayiBuFB8dya +Supplier#000608182|Huj8gdpyOPgh +Supplier#000608183|hgbCD,RvX7HFwiw3bG0tE, 9s2A7inizg4nBZz +Supplier#000608212|cId8toEo7o6fqpW +Supplier#000608220|uT79LmP1QGDqsLNw +Supplier#000608234|us ZLLJMk,u4LfEURBoCQ6s4K +Supplier#000608236|vNtAe7cSMg,Cfkmu2gju +Supplier#000608276|xtXVqE,IrIc5AbawFSR +Supplier#000608350|zHj1P36pr3a85re,qzvExG4ft5z0 +Supplier#000608384|AO,Piuz4wr0n1c3Ra1U9c,6ysaBZo1X +Supplier#000608387|PUhTG1 DA8eka,iNi6J8FtLR1I7ZLiVwp9VXpk +Supplier#000608392|8pP9puSNtxfK7pns,7,5mu b4ZGsnVQxyJ +Supplier#000608404|2O9oHgIUPVK0uuqgLlrSMJQIHBxdUUWTNevlh5 +Supplier#000608416|3a2Alp9vpLQFu2Q7M24uXyKNS1I1 Js4 +Supplier#000608444|t6BQaV,DD0E +Supplier#000608475|w7XnK,8pHSYdaZFlBnIEnFjg9jkrr +Supplier#000608492|U cf7A3HKC5WwqsErYWR +Supplier#000608522|MXlYyTNbfrjbwyLthV +Supplier#000608529|CI Fs n6fLdlphd9 fjjoyusyBmon LvmX +Supplier#000608580|BVeDH1L0AUKc3DBTp6w +Supplier#000608716|NU61y 2OWgGuBo7F03xdkMxtx93wfhRjpEY +Supplier#000608916|9rjBhAXXRxkxb,A7pqFNwDWTveLbPv +Supplier#000608926|8yTTufya6HVJCT6Miha,s3p3yWOmDDjuu +Supplier#000608946|uZFTaVhYtDGHH7jrS7GaFHIu2GeFNfVxQK +Supplier#000608947|oMDqM0W,8a7lxa1EzJ +Supplier#000608986|hVc1hAHrAiGe +Supplier#000609007|,UpCWH9c4Enp7jbw1nW8Pcbrs0Bi +Supplier#000609033|7ssBbndsRswhWEsBDOc6TvEbda6N +Supplier#000609108|n5TWtKra5n,2VRc4cD5CW1WX +Supplier#000609228|59PxHIu,3 q5pjkvorwLIr +Supplier#000609241|u,VxoVkPaPoRvO4uy0MKApv +Supplier#000609260|GZl80Mh,3f4Ykuw3DLgXMFDhlwlSea +Supplier#000609308|JHRo9BVr4uReUZuu6FCmHu9x +Supplier#000609496|ZrHbIujB2q0 5p +Supplier#000609556|EaCOnP5sNNc6ZJrdNbQbvfKEWAjfQdWQu6opa +Supplier#000609664|hzpTU7XYY9IB +Supplier#000609681|VSxcYUtyjAhLo0JKuH C8tZslcf +Supplier#000609737|pR8u4qD3B6nhD3P7tF4ADD5EGVUL6O +Supplier#000609920|QtWjHd nAA1vA +Supplier#000609974|4X2OIpsH8TpslfOFlm +Supplier#000610041|ccuC0TCkEYBxQBJMxaNo01HFtaCYcQzzU7v +Supplier#000610052|n9j7 610QTz6znB2wd3NdnqeEwG4I7jLW +Supplier#000610072|WvuB5KdjjWCJ,q96nElgbaLw Cp07l4X5Vyn9zI5 +Supplier#000610087|SYhrAj3dbvyNtgS5L2,4A +Supplier#000610106|XtDqqLIeU7LGi76NmvW yOqC2oJkLYDyyi +Supplier#000610120|YJwSLKXdQ1pu8yZxSBvQaH0o,7T +Supplier#000610157|9Y5OqM0Zwvx4XXaAc6397rhgcq Bf5BNyp4v +Supplier#000610168|rPnDfxZ77OZPO,jOJr3qQbxCWC5GW6,ieLwAxsVn +Supplier#000610189|34tIu8NkGN9ZVufzgng1dtXbLNzqMgT1GQw +Supplier#000610492|tu0fd8L,5wJ6TD6ECHAoKQwDjVM,7PA eZvs +Supplier#000610614|9i26GUhG1Z,eEcFYovwu4YkjB1PLztgK +Supplier#000610662|GThJGVYVq6 +Supplier#000611056|VrYSXysKBbQ,KQFcf f +Supplier#000611173|AJ4eLupAW, +Supplier#000611286|E2o,3aAt2TnrcBehmC9gvG8XcKSlb4wzxsZ +Supplier#000611363|Fqp4gzHCJNI6CVLMSiOKfaRw7zTUJ2fTNyGu4f +Supplier#000611401|wpe4WGrcxiwyU7bkojn7BZnyT9xT +Supplier#000611467|QCBKJcKB7n3GPde, +Supplier#000611684|ozcVDz7vRaUh +Supplier#000611731|ei,0XYodGCTfn94D3aTR +Supplier#000611747|CD789vHUcOXEi31Jd3o7aV7PXSkW8sfMzjHm +Supplier#000612188|xlFk18jVUoZ +Supplier#000612457|CQCNpG9LWXdT +Supplier#000612495|db7lSKSif9U +Supplier#000612508|C5c6,d6ngNlFxxBQ,OeJ9m0UOX,S9,8 +Supplier#000612569|OPw 8Fe9DH9jEfy2F BVLJt CrgxWoUoyqR +Supplier#000612610|qzN7DtmOHlv9gxDk2JnPX0AV0sepenIav254YQ6 +Supplier#000612614|lDDgkFfUtsjs1 J6xKRQswvTVbl3q90fIwoiW +Supplier#000612641|9l8NRbyGEBj9uCbISttFQ ifwKv8nfti8T3W8 +Supplier#000612773|rX45m37qlfA7OWZZ +Supplier#000613011|aDzA,RvaKvkyOIqjHVTN,p8 +Supplier#000613147|,hAOkoAo3RxL0IN8i6yaNb4w0OWOF jp +Supplier#000613161|qi7mJecRjM0p6XiRQfN G68u7QoiyTi +Supplier#000613183|Rl,Cg0V1GQq7F1S2M2rkrM +Supplier#000613221|zKg8PAZU ADOxQZBh01rA9dK VufBDXC0HiUzTnz +Supplier#000613381|pQoGTxHJ6aQyHgItHMxWOIi1zW +Supplier#000613435|sshCFNn6mKVKizkwiz +Supplier#000613449|jMadDnar7qUm0JjvZYvmmLBcA1M lhu 6FTPU +Supplier#000613601|8sUKc1j9lRou XFK8Be8x,,0MFn2A +Supplier#000613646|BlfoCXZLzeKvykielXJf7OFALXmlaPTk +Supplier#000613683|h8NN8pVoagHvgko0hPSKdU +Supplier#000613703|jaaThzGoPNUvnYq2E +Supplier#000613743|b6hV7W2Hvmq5RCrwC6HXk4OYxSANIGwGS069 +Supplier#000613783|dCpVolY8sg +Supplier#000613786|jEt4iEx85ioZX126oyOe2JA80vfrEfjU1M7wXIDs +Supplier#000613852|ZV36Ep7RKRzBgHeMiYW8vndtU47mxAJ +Supplier#000613859|3TAY,nyAA7Aly vkDhQOx6ODGXwS3C +Supplier#000613908|qZIefp0ybynGlf2CEI5atlanyuXarLDdfn +Supplier#000613955|KjuQJ2,jFs1xeBG3C1J3LfSDG5 +Supplier#000614023|RnZhOqiGiQuqNAWRU8q0KkeogzCEp9CGg0KcKIsI +Supplier#000614027|wL6W9SSFG0Vd +Supplier#000614090|j4e1jB0blAK7aZqh2TjUfSuwiqIY8g +Supplier#000614099|5JBG BMh5SuBVZaPBcfg03AS653SxILRc +Supplier#000614116|oaGbfM3NO2W1 +Supplier#000614197|TElZN0tGDgrgfGFkY O0Qgx +Supplier#000614199|kYwy1mi5Ye5JkSaEXiy6p0OtornHYTkDXdhP21I +Supplier#000614300|mmfvYzERSmzorLA6weCgKEehIxiOu7 +Supplier#000614361|Y4njW9HphplznMDsO,vXbVuHRei2Erfj,mQCQ +Supplier#000614392|wmw4pWwQbJ08siB +Supplier#000614419|REYixdDTXVbF9Wa75 +Supplier#000614557|3kdNVKrf6n13YZCXgBh5HaHngpaGfYTDSfvydi +Supplier#000614797|6tfvl22 j,pwlrFAvLHLthRN +Supplier#000614816|Qnp6IPW1MFJK5OMw2VEvsyC8R8m67hZMsjvjk +Supplier#000614864|NwhLuSHV6neitxpciuhxTkYCO2DRp2tIcojr +Supplier#000614915|cPiDWEQ8Aiqb1PmE7rxRRfQo +Supplier#000615028|B5,b7Ucm sEam2d2O6bzoq4BUNa +Supplier#000615131|hACZrLcHcpg8bGj7a SJrks +Supplier#000615150|PayWdhV5admx8mlw7KnC +Supplier#000615252|LZIcW0HYZ8K +Supplier#000615283|8vMSRsuB L1N6PrGtUwg5Ev +Supplier#000615300|7M7i30HMQbicqbnPYhbQ5j3rA8ma,yEm +Supplier#000615360|LRRN5s6BzJA2BF5aeKGPvjNY9l6rA0jUsKzVQ +Supplier#000615672|1Ry1k,HpAxBsS0A6bSw61y2Uv2RO7X 2P,BXbeW +Supplier#000615746|8zw 4gjDvfyJngW +Supplier#000615819|eAD5u 09 poyOUxvlbdjiCSrEi0LElpzqY6w +Supplier#000615822|SXciV67472,Xy8dlvYi,F5LhcNM +Supplier#000615892|mJPmjrZTKeI2hr2I,uo +Supplier#000615930|AwTv8ZAOLHWrW +Supplier#000616032|I9oRAopv0GS52QdTahTxW02A,Hb4 +Supplier#000616093|cLvTgg5Fq tS9xk4e4BeGtbuJREwkSplebG +Supplier#000616192|Ts0pA96y5abVVXNf74isaJ8RbHvjHQhdFO5AV3h1 +Supplier#000616193|n7gylwo,QlkDWnl28oH +Supplier#000616208|e5Bh2wCBCq7WfemRoHSSQ2PE2 +Supplier#000616211|aAk GN1Iof2hKowFBy 04 nWWoh1Ez3 +Supplier#000616258|tGjSywnWgFdGpm36IyLKD MEPIOcp6y +Supplier#000616344|9gc68p, WhkB5KPGYjCUIwHG2ei2 +Supplier#000616388|YABF6R3UXtmnxHxQqXINE,Hl,fI0rssTCmU2Vp3 +Supplier#000616436|in0eJ6qA1wnvD6 +Supplier#000616451|rfGosHQv3kYucuyUGlwCNmVutYwQ +Supplier#000616458|wUx4SvO4y6ivHruIMd0WupUx +Supplier#000616503|rq,vO7iQ5mApCGllOLSL4PTL3aeLnrfsm +Supplier#000616519|4lN9 VqX,5Y +Supplier#000616653|W5mBGIALOyQjZs6QjbKyS +Supplier#000616702|7fJsmkA2NgWcn45 +Supplier#000616724|YHm1xeeVLFhmI9iBKNzOWdNyXu0FMiOHxeJVzXOD +Supplier#000616756|8vcWqqD4cKYCikbHuXBYdOwkZMqDMXRU +Supplier#000616813|AJ3pUiHZxzaSxmLB9vmH9Qhe +Supplier#000616815|RlvFUxhAc5MWqgGBp6hAVpJCIfKobrd7vdbWYs +Supplier#000616865|,Hk,FAHNlrXzrPS5kXMEL2ZlVg68o +Supplier#000616907|m5,6J0OlwHjw5Xwt C93s +Supplier#000616981|PfDA9FSiHTUFnfT +Supplier#000617065|BjoNxuA2dQrm,xOuUs3zw0WpvWj1n +Supplier#000617079|0kUwNDOPFsvb hNl 7PyxhoK N,yfmqku +Supplier#000617210|XHrVnCMR0NGyxLZYaqTTSdPwAN +Supplier#000617302|Q5szO4b0Bvg8qSPdeJJ2P0mHW +Supplier#000617399|lZtYOIFuajKRwW qX6M8QxxmognWZ2bPonrRHI +Supplier#000617448|vfek3,v6DOC6 +Supplier#000617547|w8yRITHEYbFZ7iGHzqI r6lpiv5cPUO9ThTRBoM +Supplier#000617580|09nR03 ZR3KnHC +Supplier#000617644|nQpNkZoeu0L +Supplier#000617682|hoMEGeQuBBJZFF3RHZXValRQzDZJeiMv0 +Supplier#000617768|OePYbWesvmpplKqpJ1s4EO,8sIdj +Supplier#000617827|Ncgu8RKcL0LiFzMWwzSbjZqfFf6vPSF,vi +Supplier#000617848|SA,R,yhMQ2yYNuROu0phL6odZT +Supplier#000617885|Ga7FDCQ40bEJsR0JisNqiDVzP7ZGU3hD3ayre4 +Supplier#000617917|35RCbZMEFc4J32lUaTufvuPLQvgQ Coh,tUQ +Supplier#000617964|,aNwgh8znh,bga,ZeYwtlTBLUj9kNbLP +Supplier#000617987|AO6sQbCk,C3fZYAJFyyQT32Z +Supplier#000618008|Zv95S57J1Ex98P2c2Y77WG9IUm9Ka0LLZy3xkP +Supplier#000618057|kffILqP1YSXdIDWV1EVZrCQHpbo4P +Supplier#000618189|ScN9DUhguxqkb5gQosv,z8ZnqKoUYczXgEiA +Supplier#000618303|7qnUZCDdNaUKzq8,NQxR MzRLa9JH7cPD9M +Supplier#000618375|IRmdNraUHh4wyn m +Supplier#000618394|hMgZgbaVAeXK7c5 +Supplier#000618513|7WB9gIfKcbp95bZN3CPffzkY06VLvC, +Supplier#000618525|ZqJK3MqJ7Fhg +Supplier#000618545|6kVBhNnOr1qeFfHCDJp +Supplier#000618678|q3fV61K77CR,c0,a,jleOW +Supplier#000618680|nqfhM6OkBBRWRvqhouj +Supplier#000618782|mkhM25zQVouHh43T3S2oto +Supplier#000618799|qILYuG9C2ICnuS8Yka8w5x5g,PEOopMaF +Supplier#000618826|G0XHcgRk3Iv3Rn4SadPh4mvJ N,rEH4,bSQXxvHK +Supplier#000618839|TL4IUwT0ZG0UTpFj +Supplier#000618847|sZD1pIxCKY6K5QzaqjQaChXWOD6Th23 +Supplier#000618870|j3LPvbSPRlym5PLayzEYTMyNGY2pb +Supplier#000618873|AzFNsC4B5Y6r6h +Supplier#000618984|Hu4dtJLnjj +Supplier#000619026|xLapw HboMf7 +Supplier#000619219|f2ky3pTmWC9,OQky2dC,yPnh +Supplier#000619235|0aTy0rac97675pZYWddHbJ +Supplier#000619269|LAHpJs,Jcuk +Supplier#000619409|p8vWCtNnHRT +Supplier#000619515|9cqatkbGzo zDv0g7ljO0 dpJKFXVZ +Supplier#000619557|k75pLMW6ea8pWZZ555 +Supplier#000619638|BDrvFlF2i eWVTYOrpVJDhmIEXPKP3 +Supplier#000619732| o1P1Ysrn4rziF ZlnJtL9bPVeoMsrRXfGwXbPEY +Supplier#000619748|ABh7BKcGv0Yev9ZGPhEIRAw7OMLO,T6cfNX +Supplier#000619868|mp7D86NgJu,7mU +Supplier#000619912|icGK,3hFS0VK Xo +Supplier#000619976|IxK874,WT8G5Jgwp +Supplier#000620042|6Cdzk76obG9PK TRuE8VuMB5QwIc9jMl1Ekw +Supplier#000620115|C27,hFPZhkwJT8Z,kYDfuci1djTah +Supplier#000620125|T2RrTdSLdoVGOq6wpfWEPW +Supplier#000620167|IIlGdNznjL 2SfJ +Supplier#000620211|hls RCmocsVosfSGoiDToTePr,yUKMLSl +Supplier#000620233|0rvYUVjI631J8AmWRHkNwFegqnKWVrjVi +Supplier#000620238|5lBCmL5H2UhQr8MtG45uHdNf6DFDbr9B +Supplier#000620274|V2m8m3ZnlEDqD9HYoEklVBo1xpgkAN0YtF +Supplier#000620298|cwIaEM3xOWzOAJld +Supplier#000620344|u3 O 6ae1xpMYH7lKShMdsM4cHNAjUoRzE7CGu +Supplier#000620415|uRPXEmmdr +Supplier#000620445|WSKoAYR946Vs0UHKyFAJx7b7AzVATZlZOH, +Supplier#000620562|q4O 5Amcv2Y +Supplier#000620569|PqdyOJV,Ms51m8e2AQdMclhMDYlkZ +Supplier#000620583|SxRAvlORid4GxQiohRtBR7gn +Supplier#000620650|VH6ho8AWROh2kouHXvQ2DcVoKBYarRPQRrp +Supplier#000620691|NciSJV1ucTXsayiARQB9z5i8SKuN5wuaBbg +Supplier#000620767| X99Cfy0jl80xMNmwGhE5 +Supplier#000620781|Aystl eYMCR Z5L +Supplier#000620798|j9yaljbVc1mLJ1AnIqtEob1hHsBjc +Supplier#000620843|69AmXN5WOdOEGyZpgKQ5dxUczsD1lgSQ v1T4 +Supplier#000620850|4agONF84oMUNZABVACd05BloTIu +Supplier#000621045| W JzySo sD,xZnSlehBlLhdQY7HMMiau +Supplier#000621079|zeB9i JRlm +Supplier#000621115|PU OenDcwaS8Ykda2 +Supplier#000621158|2,QD,5H,TZ4mitEOczX9uUQ,WGO +Supplier#000621309|p7ZsGHiaX4XFMNirs5ik4wGjp +Supplier#000621313|wdtOEh 5X7EXRpPvuLHNdapJ74K8hDmp2 +Supplier#000621440|byxfa1fnKNISEZO4Q Aaa3GFhlraft5ChWTQ6 +Supplier#000621487|NLBDq7hlrtD11JPQulfwKQli +Supplier#000621510|zWHzFXZcH5ydB5rBm +Supplier#000621533|EggXS3Q5iLcdMTuG9,1eir7KG0Mg7y,XP3x +Supplier#000621541|NzwV7IKkXls,WGkwXgnuNQ0zKk2KMj4ZaSEkyMxn +Supplier#000621579|BLL7ytkHl xpNEXRDeN1S3ayIf1,, 3muZuoIL +Supplier#000621790|JeZXln2eVZoFhXF1wi2W2zp8mCf,HSm0 +Supplier#000621849|6ZzYxDyaMIAne7aiaieKaxd +Supplier#000621906|TzdszQf9I5jRtni wwvgMK7i2RPiL ksPv6xlS4e +Supplier#000621929|wdMR4togQac1 +Supplier#000621972|TEt8Dt3xz6 +Supplier#000621983|EfFL8gIOAy1fOIRS,IEQANuJuU +Supplier#000622139|sOufKiypyaUYWvfyzVXbfe +Supplier#000622141|i4YF5VxMajFI,kN9rNCC5ITF1u, +Supplier#000622180|8rhUayGHe6vVrSY7Av3E +Supplier#000622277|TEeuIqeoqtvdNfVp,Pa7XcOx +Supplier#000622445|77kYAsgqH8d +Supplier#000622475|59cc1v2 8DeI9Lw2Z455D9Z +Supplier#000622554|iBq1OXHZKT +Supplier#000622556|g9g20P8ItfJN +Supplier#000622601|NoZcvvNuj8WWrVOtImZRtbXYL8hA6qJ4S +Supplier#000622904|HsQIej83KBm8WudnDeVOPtco0M6GMhliZJb +Supplier#000623010|JEJzqPDgLs,I +Supplier#000623202|MyZZvNRuqjjH4tfihdWrg7Rppb +Supplier#000623258|Sah,k sWQNztdeLgQbMzs9gq9nGu6dc3f +Supplier#000623617|R3HSxHyDjCL LWkwC5hplT8qm443iFv +Supplier#000623618|dkPIik8B5Z WiwKpcpbaqh75R6QKTTnKxoZ01 +Supplier#000623783|, Ga29 ,U2sYGzb5vlI8VGkAUu2orTmbP +Supplier#000623873|SIvjHI 7JOQiW6kR8gYB8L5pvA8 QQ0ra 5qDT +Supplier#000624013|5fHGiogHIfSJ01DC,iC +Supplier#000624186|,ScicAq2O,KLl,OjMNGZbQMxuDt5ATLFFYitd3 +Supplier#000624299|O3yKFMtkpDK1mdhX0yj7RuB9qSKLo +Supplier#000624312|rvaUkkm2NKd0O6YBmZW3etv +Supplier#000624353|Z8SGIPNntpVExjLL 7GnPE4iXni24JxP PAIj +Supplier#000624521|1WVNiuIyfVMok 7HZQAiYVx2g5a1q8iTYADzla +Supplier#000624575|IMuuBnKf eUuuxgXK4c7j49OO97biWq94 +Supplier#000624580|AEpNopBRIrpGutBs4oz7SCS5r6k5iy,Uw +Supplier#000624636|ltfqRJDyhAOnRux +Supplier#000624749|2HQ65HbZX6oxMIQQjQC7WiFwID i3sWYg2 +Supplier#000624757|z2ckY8ONA05W +Supplier#000624821|qhxualoyOkNwA9FX05qWs6WqY4xpmE UX +Supplier#000624853|FeAEoaFHKfHbQTRJ3km6 +Supplier#000624856|Co,Lfqdqlam,TlXdB4E +Supplier#000624972|XJcVd6GVAJfkcjC43p7xGmR2s2OZfLwTePP +Supplier#000625029|ITLuOmuZSjbcjSgB2 gFazDDzdwEL3DY7zsghb +Supplier#000625034|t7xjpA4ItkQYfC44RShvCkn +Supplier#000625256|t2yhA9qO1v9Mmzizo3 +Supplier#000625312|2pSf5,Ber9JYvpdPpbpzBNF1EDLfcQw5 +Supplier#000625344|3XntEcgtUwO27MgN4NLgR86JVGo0ev +Supplier#000625353|7L67NoD7ZCD8Y5FKmAU1ykQ0UHx +Supplier#000625365|PQwsJZ9lP1P,JvlNsTJ0hjg +Supplier#000625396|u naK2zGObKYZLL,D9CfJrHkNhP woXh +Supplier#000625521|r54g5x3JwYCgxur8FhLGXSgIi +Supplier#000625552|PfFbIoYv3hVfMYIXEb +Supplier#000625649|AJlCsgMWVucw3B6QXUxOkKoUcXaOfNYX0 +Supplier#000625679|Qw6TgVwnRXvv6pEOqSSZobyV0wdpAbhBD,8O +Supplier#000625695|bhJ,AYLyf11ECNoMW68lwKWk4G +Supplier#000625754|,S80h CDqW9s +Supplier#000625829|LgF,nNxnOeQKDCj +Supplier#000625838|kkiKzPsnOmuagjbtzIUH6PXEC0AlxUksGExedpf +Supplier#000625841|ZErjI2UI3aRgs8mC5eR2VdAIH4 +Supplier#000625943|1TRJMXSOc8H1EasB3WrJrfJMB0blBb +Supplier#000626049|5rvkMez18XcL +Supplier#000626104|1GI3KtSZeT2kmvBv +Supplier#000626181|mYSPLT3ijdJ5VG2yTOzoqu5e 98Q,JdnLoXPiv49 +Supplier#000626207|FxAjPV7Gz3EnEhdeG,6lQkKWv7K991VsP +Supplier#000626214|RVF4MAv4z11P2Mw8UHpKr8hs6ZVXmED4zoa +Supplier#000626219|EVb LC8mQJ9tN7 +Supplier#000626245|QrfgGlno5R3Zp1,raU +Supplier#000626266| hRVrx113WgVR1lUFWVqYlYbF1wjqFW00Sxq +Supplier#000626302|gL rOhzXgeDy +Supplier#000626306|H433Dhk7sTtOu5v +Supplier#000626473|s0gTkUzzO,DgD,WMREA2a3IiJnpr +Supplier#000626570|bCurxiZ14SXpcy3PyKC8nnv +Supplier#000626679|6DjT1P68FE9nRRQiJVYm5Dg8uaVf +Supplier#000626734|BfLWZh5hVYoN,rgmu6cDSQbT1n2II9gY8 +Supplier#000626751|05m9IWyZ4MEo65i4s +Supplier#000626759|MhGce,S6UyZ8pX +Supplier#000626820|FvoJFzE yVrus6dDyWvnUE4d2gXk1SDZryY +Supplier#000626932|JEwIYXLKpVokue,lHVWMzDiNIgtnW +Supplier#000627044|2Kw82BVuc91 IaIhve3o0uShSq3 +Supplier#000627116|kp5KLuVYMsDq8V5OdaT KnJ2oYDrvO7ozj3mwiK3 +Supplier#000627132|gTO4n5xUjLtexAU7ruTGBD YWbeyv +Supplier#000627175|nOcVXit7TnYirJhyQe2S +Supplier#000627292|8gsPeh3fCIf6BxqS +Supplier#000627320|wEEMpo7iLYkJgAiCKPaSX +Supplier#000627346|n Rxpp8719KKHS2xAG7McAc7oNzVT9 +Supplier#000627361|QcoRjkujdIfR0Q09y MxMJ2M +Supplier#000627387|1Yj qqb,OQza +Supplier#000627444|mfiW3tyWN5SXmM1tma29dHeHmuTV5Uq35F1z +Supplier#000627517|F041cfJ84GO0Eeb7DgPMuHmVi5xTt +Supplier#000627523|uWtw9NmHjIr1kAen +Supplier#000627622|c,ulofq XMC,BYoZdbbrQf +Supplier#000627625|YmvZ7Q07tGLVIsEiDwuPDVOaT +Supplier#000627784|joNMHL4eA6LB1j +Supplier#000627791|jYniyWezh7TRzWhVgw5L,hUrQk +Supplier#000627865|7ld2ypFAVMEMwTgCDcCDpL, +Supplier#000627868|TafPyz,MW3IbE581 +Supplier#000627899|oj2otc3M4jLJZH8 +Supplier#000628002|6TxGpl idRkU57sSHetaZPB,1S9wIBft +Supplier#000628021|wnxf0,ky3H5aTG +Supplier#000628102|rwTSFIIdoUsYwU5ujDZ2pMgadfSqV148v kDX +Supplier#000628115|cUi1oUNF8X7isu8EYnlNz4 +Supplier#000628162|aHX7P2xMijOWp9CpuCUmdBuIPnf6ZifbJoM +Supplier#000628173|2Hl8O7FvSihZIqGKZY +Supplier#000628232|dReuP WYcK5fDrRJphzh2zUJ5iMwa +Supplier#000628292|mfGkU0gcC qZ02LH38exZr1B4 +Supplier#000628326|qFx2RI09mhkgqodEfNm5ZyE yI +Supplier#000628337|Tj9hWJg4 ja83r 78miWd +Supplier#000628343|FovCEim7z19kH +Supplier#000628346|syp64uKysHtaxCWi34R6kYWxvTfz89S +Supplier#000628352|EqcQnTQDfizFsJ +Supplier#000628541|dEmYVchy56ONfF +Supplier#000628679|7H8vu7 Vy2NNy1vrG8oeXs3f duCjIS4JyVW22NO +Supplier#000628707|qgQ9d8VE0h5MxY27uvJGhtva +Supplier#000628773|hm2dZidEzh,lvqCg 7ttby1J9XdSklCRKLpWO +Supplier#000628792|uwn1GR1j4PJRaxkrnFEi1tKPViFJpL 3AHPm +Supplier#000628855|z6 wQq2SDV9Nqd0etCP3nfFAJU3GSzDVddMl +Supplier#000629090|7,9Il6Sup52noSBYt9uprNp8XPbaH2wdBBqo8B +Supplier#000629172|nmv5rAEEGZ9 +Supplier#000629190|oBeqipe0LA +Supplier#000629197|s8qKM7nvSoiyJckqeIgqJ3zkpZoB2zZcFK,z +Supplier#000629298|gyEJcaQztJJSvHkvWxAMCKd +Supplier#000629305|eABgkpHV3kH5yFgjb6uhJh3DR6Sz +Supplier#000629395|DTdXpU8kykauIm,ope, wUF +Supplier#000629509|6TV2ah4xO4d +Supplier#000629537|PwgS517rhNK +Supplier#000629551|FRcaXkeEQqzwLsYp +Supplier#000629672|23ig63fqOtZpBJCiVJCZsddg +Supplier#000629804|98LxBx2GAEK0A9 O0AmfTORhNhuNg +Supplier#000629809|BTmzKI EeJ 7E79Xk3,QD +Supplier#000629865|q,osj2LQB4ZEqIOS25OrRQPM +Supplier#000629880|iXGD1DxAGzAoybbvO N2CncvKc dEDH +Supplier#000629933|XtmnLNqhd4pcipUiNSTuEnT1Ea 9VHeqSA +Supplier#000629936|whB334P,SAsn4nk8CE +Supplier#000629954|U8HW23Vk49K,p +Supplier#000629963|o8VhxduLTAEQc +Supplier#000630025|S9kalWQEN7fHha78EUGrZKxJAvj,wtsJmg2, +Supplier#000630035|gmn2SFPl1eFxU92k +Supplier#000630060|56hay8hkfR9WujLUu0uck LgsaVg2Qd8sBA +Supplier#000630089|NkSG4ozPdrMJTza +Supplier#000630114|lFwuI6edjCiqMP x +Supplier#000630136|5BjbK9fT62O8gqsF6U3NBE6 +Supplier#000630150|dlyXuq8KrGYX9R0VTAKdyz37 +Supplier#000630304|7CTQXpvFAFCQqU81CPRuVRNMe +Supplier#000630306|4kr9AENNzeaejKpUoGwk7eoyhzSz6rW,gQn9j53 +Supplier#000630339|1ygTp0InY4uDHrgj3VAp5CT +Supplier#000630349|,zr Bx482EiarlIitHflzdZzcp,pBVLUpOWfF +Supplier#000630378|xAkm8fe8Ttr2jSZJ4ADGRDYvIztP +Supplier#000630393|FR9rVt7NTLZP4Mf8BNFwU1Wc5IIKx4 +Supplier#000630420|,cBiuQQuJA02dAh4N811QYkEhvdU0Xk6 +Supplier#000630425|PvXTF,G9ngYeZLKanaCA jaifiNn +Supplier#000630433|FoF3lNDMKP,hg +Supplier#000630462|ZHPIdVEdGX +Supplier#000630534|6jwSggKR2wOnQPdsJXG +Supplier#000630814|Y1CmS2KQziBvkP1cWRMiQ +Supplier#000630858|gZ8sQHcnTL6r6kx09RyA1 +Supplier#000630906|XVs6aiSUk vyACINr6ORUnGuAD6ggriF +Supplier#000630941|6IJEtN27DU0iKhkBCwnZ7H,RfO2pfOd8KUe +Supplier#000630994|b3ZbtTXQjNE09YTQ3990UmeFwKluwLadv,vJ +Supplier#000631004|tGSQXOcTLBBPERIy8RwG,MWCZSn54E440vK +Supplier#000631049|VJ7EodSMImxAo1gixBvroRJX7WD9Otp +Supplier#000631077|md6TKDJrBPi +Supplier#000631134|cv8AZ0cVn9yFCMAekjC9gXy1L +Supplier#000631136|flk8clNmjsSyW4 +Supplier#000631360|sSpkGWNJkWZw2d1gXvf7Bs7dSJOEul6xdQ +Supplier#000631399|UWRLR5BGFoYwvuLDm8BnNiJruV67q2iJB0nbD +Supplier#000631431|eIWcGujzjhNeesAiUctm2knAes +Supplier#000631710|SVgbIcui8E,TTF,kJ02oNV4cT3nHvG4JpVf5YfTM +Supplier#000631723|FrAz5,Y1W3KRZ13aVpxYkmUqf +Supplier#000631780|Mn1DqNZa04,7K39Z3qcPSU9gB,DVosXQzfj27 +Supplier#000631783|wizLhfUh3Aau +Supplier#000631888|CUA4JAi,XSEDGgM3c,NjsgQKNbhMaKu0mgQyOm3n +Supplier#000631961|8PLdIX0ceUY1cQXZRmFOMYZoTz2g,Dq9 +Supplier#000632044|xCmQ07gA6WPqIwYcfwSolbQNnCDNFA3C7n8Z +Supplier#000632075|jBKM6NoPaMmnp +Supplier#000632083|dqHeIIDmLIByu8Qamgc53FHolIAmS8Cu7 +Supplier#000632086|K4Zhzlug448Ac2Vfi +Supplier#000632120|rL9U2HbdMJLKUXWz JwRaj1Bcf4gvkbE8P +Supplier#000632148|4h2ZlPxh5m,b7Z2Nmuh5 +Supplier#000632387|F,98QArITL9UDyXHBSwH88iFGL +Supplier#000632429| juSfvOzSL9RBrepmmROCEjC5ic +Supplier#000632494|DroNoeo,ImsROu7I5v2H5amN +Supplier#000632498|qa31VbHAAE1iPce +Supplier#000632705|6FOSQv,RuiObqWAcf +Supplier#000632737|4pi1EU0S4h4vdbj5Zq2A +Supplier#000632855|sCZYiZgC6ieNrM6Jbz +Supplier#000632869|iYF0Ftr6hmFdmK +Supplier#000632898|NKPyJYiM9WyaFL2oHOgT36cS +Supplier#000632977|cpXVM28Z9JVzLpXhgCvgc2xYt5u8J552lN +Supplier#000632995|iOAKkxBZKts Swyb,4xAGJF hg27hPZyxeUv0Fbl +Supplier#000633103|YEmIPC1CoN8 +Supplier#000633149|mKqR4F79DJg6WNKOQCYAhQzEpZSU0MEysu +Supplier#000633178|K 1aF89nzJoOui8WS7nIk7Nkj80 +Supplier#000633258|Gyz wlgEMv,W,8BE +Supplier#000633323|V,mSGEQGTmXgk00 XG9jyXKOkqK1P +Supplier#000633334|HxS5Ik6MTvVNOAPf9,4Q2KjyLOpAH1zzpiz1 +Supplier#000633441|a8Pg1,,bEBG8heabEXQDvrx8KUdX +Supplier#000633536|R6Wfd5F2GgzHV6n2ebwpRBkygQgAhAMqCgHFkCv, +Supplier#000633550|hFtgjSY6t8a +Supplier#000633623|Aw2L4iuUyzcl2zxsad +Supplier#000633660|6lQZLt2VB48nqj5L0 +Supplier#000633675|JN9WjdVD8jvmfK1tFpDsqwsGQZU3b ,iIJkecnU +Supplier#000633920|jfaAFfxVz4ORKsODPwr2 +Supplier#000633963|6kLc4hXHzM2V7KmShp5MdCyM,4dETFrIBc +Supplier#000634025|ARUGE44IA8nb8tAShwe4bbNZX7R +Supplier#000634063|vfyug0WiN2I247BV8AR8Oc8jQJlseNodfP +Supplier#000634130|jaQV2ScAuCPjnWfntkBJCyG6hamgkMh1HgZ6n2 +Supplier#000634317|JaKBfmpFH5pKCMj7VgWbJsclTVFdT5pMZdIjXvvN +Supplier#000634370|AO09EghHNYx,C7bedrn,ypJEwIN +Supplier#000634399|I329TBhsWbWIiZ +Supplier#000634401|C1gvgUdpEZgPgtD3HcGsY56hk3 +Supplier#000634491|MWg4X6X0W3HjAOZZbpasz0nsIS +Supplier#000634542|AS28 FviEX0bUSZjMW68d5fV +Supplier#000634573|Qs9wZQAQhH9syg000c4ShPnGHkW +Supplier#000634646|Fvt2E6BCf5qX4C8P l3exLRme 7,5kaDr2 +Supplier#000634673|2zCG8lSyuR rMlfqFYCuG +Supplier#000634715|vTxTfNTV966vl7n +Supplier#000634870|CUPeL1n8B5pmmtwP1joWPW4IEfFTFXV8v5 +Supplier#000634949|naTDaQODPPZi69GiL +Supplier#000634954|CedhkEgVDNbFGrlZtiBoz +Supplier#000634987|Mo4bM3k7Ih94y +Supplier#000635019|orrAT1OQ5I7DENorXBhtPl8aW34qkxvSv8R +Supplier#000635044|epI,45UWERb0cKZq93Uph3uE +Supplier#000635151|Egl9PhI8JZ2cEL5lLogEKNZkelQ,Q +Supplier#000635153|1hu6alN6REEZbL,N3Mp7Eeoy,ERL8tL4ulDj +Supplier#000635226|MeSetQx7aFNW5 +Supplier#000635318| JrYjToxXEvOe k +Supplier#000635521|MmLlkUaIdtFV7hVsB0RBLiK +Supplier#000635794|R6jcZOhJIfCb6kL +Supplier#000635819|buyCNz2zdI5i +Supplier#000635833|x 5NUFcVkg5bi,y8puYooVqT +Supplier#000635917|RDHVcIqswaiTF6eUryBUdfetS0kZ5rA3 +Supplier#000636006|HB8rl4sFL8IOMo +Supplier#000636012|AX9E1Vr3OuQuobMcl9a vcso QJlkeZ0, +Supplier#000636032|ooJcC2n4DZ0i0hcuqUw5B7 +Supplier#000636053|iJjGbekx8qsx7AOcIxqops +Supplier#000636105|MdBRAxcFI rUYziQaQjz2LMKHkX,MRTr +Supplier#000636145|YeXY,IWZkzdNO +Supplier#000636247|NXwlRXtW,bvjQp1MPfYB +Supplier#000636262|5k2n2TMBwKUdSCrIKzl1uo6u +Supplier#000636375|zxVGiZn2ma0L 9x0kVhpa3tD +Supplier#000636398|b2rKIzPo 0vkfNjN4flJx5NEahR8w +Supplier#000636501|g4,WciwQJselO fvK9 9w9lV +Supplier#000636512|IO6Rh2jPQn8zNT +Supplier#000636526|n8I2pp3Kpl96 jppp9HwBVInElEUqjXPmoYvRE +Supplier#000636539|v5uAP5,Q,rvO8Vq699upVVONVYdPwQg,,LXJ2,OC +Supplier#000636541|ByIABkToqUi5LW0TWVfbw94Z1RUsOhrTqGuHX +Supplier#000636563|nbpcRcPSCLnyINRJUtk, +Supplier#000636627|b T6LpC LvHqCvcLQj +Supplier#000636671|8ug8zXeotdudY6 +Supplier#000636747|UmG5eDK8YPkxm3 +Supplier#000636823|P3wUBvsai65x0QbC3MqdBlI8LVg3VZpLeKZg +Supplier#000636890|6XMRjHSuPmWQPmLt,,eVsjP6Uxmwh +Supplier#000636919|Quje64Y4umyj0CPEMa1KLE +Supplier#000636987|eDwS,SVApaaq6Q666,AyWrssA5O +Supplier#000636992|vFoYF1bZnueQ18Ed72pW +Supplier#000637029|Vup997 333xL, +Supplier#000637033|XlqsseYU9EYWXiD9BC09hrju1Gjv,XE1G +Supplier#000637038|0J7gI9y4r dPy31p7YG +Supplier#000637040|X7LuOb7RKgn,nG4VY1Eqj4G3dFSSy,hXX +Supplier#000637099|s33t0,JWccJZMqorngWwjVU6EeG +Supplier#000637237|nb9dN1H7Ap5KT5zmlmRuH30zia1b AtU +Supplier#000637258|bcNVSrfsiJqqnRHa1rZT,teEgy +Supplier#000637296|S54d9I4xI58hq8P8VaFc9D +Supplier#000637324|WZM7Bu96n5hLwfPR +Supplier#000637351|j,f91esU5 TI K8nydj5ckX +Supplier#000637357|JRv2eQ6rWMJJvbHZfEUZQzy,j +Supplier#000637424|he WqVcxAgGT6NH50eJqSnSuvqLtvyB2k, +Supplier#000637544|3ZfaT3ULCbFqloSx0fwnlah5 +Supplier#000637646|sRT6kkswWsy3H4fXSldoyynGni,INY +Supplier#000637688|TJchkItFBL8TvpUXQf2nPeuefes6AxJD +Supplier#000637831|pbzu ow7DiQ 7bASErNa +Supplier#000637972|hoIX3Lz1MWbgng7 +Supplier#000638075|90knFpiN5gz7ZovJTLwmxE16R +Supplier#000638083|IX7u1KjoUdtWDun +Supplier#000638099|ek9A,hJwMOTvp8fud4wBhgJMJl0OE3iirhl +Supplier#000638134|bwQ WfBnu6rVU6hzGtiHcf +Supplier#000638245|5AnTdxwaTdTpzfoaRy +Supplier#000638282|R4S4c,srrg66p6jQTfDOxjo ejwKFOA7cxt +Supplier#000638290|z7OO7m83QOKO59L +Supplier#000638291|DssaSzYyPnczh9DZUNvrv4oMVM 5DXfXWf37h +Supplier#000638310|l8r17dhDW69 +Supplier#000638461|gTsflltTDcJfu24C4PkAE +Supplier#000638491|s7posB7OG91wfYcv +Supplier#000638528|FUHilhLpdyR9lBItxdYHUydFZAF9b,tvgn9bfRG +Supplier#000638554|DYq jxWI 1EtFphGteuFExlDCiCRHhAf8Vp0 +Supplier#000638765|QDLDzq,NX EgFNpd +Supplier#000638904|7x2ZxYV57G +Supplier#000638959|qZAamkbDVSVzPc50v1,EsiSuAY3c9cp +Supplier#000638982|gss4n5t,8gaIIfEIMJGtDw1971S +Supplier#000639028|pTJZHx9s9e8m7,g1Q5yJoXDDVWV8o62EEeI0En +Supplier#000639072|Pwme j56VPrLsj4AeN fOUk25Ido,AFQUK +Supplier#000639074|GdFefLUJKiIi06QmkMRWdonhH +Supplier#000639086|mBXPppgVlvylCQN1X8It +Supplier#000639110|fJO39JSN37Py8 QAOK,zp3jzUjgxw NW1YnCTV +Supplier#000639255|TBgsAX8idwE6Fm0IUQaZZn6hhdZ0xxGcg6 +Supplier#000639278|aUDjdHfXnwyMZdKBT2w0b4slviDeY +Supplier#000639385|AXTIbUOJ50VYX7xBhDrKMRCI0D2xYcYLTK +Supplier#000639389|tlxELumaMCbQllv,r,ntFU +Supplier#000639561|AP0r4WHMPhxucDVp z hi5FTmVDhOTbfht +Supplier#000639565|YxhWB2FHTne inFsKBcaiVQhP +Supplier#000639580|3O1e8,H6VrXgiRSsNxR +Supplier#000639658|M8BSUTQb0ShUPAhL +Supplier#000639659|VjFxRdkjJ1LDwiB7CLT6pIJAzg9jd9E +Supplier#000639714|SoWF8jAYh1wBf3kX9aRvU +Supplier#000639848|DnYHrd28DWguXlBqaIWcG +Supplier#000640216|7AT9u8fqEQXGW +Supplier#000640239|8QwyvTbyrwY vJuxh B3wTO,4LAVhhH3gMS +Supplier#000640261|FYQ0w AlrYhi,1mzrmi 5iv +Supplier#000640347|W,nC6QKlfew +Supplier#000640356|wvXtjKSRTs +Supplier#000640377|ssqWAbeAtl2qKpbVt +Supplier#000640567|RKYkVT8zznsqLwTjBN9yXgF6U1Q9 +Supplier#000640599|Xy,S0F,MgLCh +Supplier#000640688|gg2fBvGXoRN +Supplier#000640734|yCaNAyym2po59IThpBHmWIQmq1nKP +Supplier#000640884|z5CGlOmyAK0gkxFyaUcjqh,Su +Supplier#000640905|rLtgavnnRE3CrN3U +Supplier#000640918|qcR5JIxSq1 +Supplier#000640934|92Qub2x5UcZMCnzmpPfgK1H8F5 +Supplier#000640958|lgCB6m8Me6cm68gpaIVZkH +Supplier#000640961| 0pPiRnAjXDxq +Supplier#000640983|PRNGlbZoTv7XKAhmRigg3L,5Cl +Supplier#000641005|7pSQBYc AbXZ56RyIkdVsR4 +Supplier#000641013|MxW cYCycRFRIon +Supplier#000641035|jLanVC8l9qINad8zrbdV3,NPqSzbUuU,RaV4 +Supplier#000641166|4jaU7Wim,OWM6T0LZvXdSboNaEJiIO4WnhW2h +Supplier#000641180|4YREV5xxu6lQQOUpk9ZsZKc14lebW +Supplier#000641202|rqxQCvY poX9fU zVYVN6EtpraylSWeJ0T0kwE +Supplier#000641653|oSfiU9Qo4CXxJkMLTj7VuXtSlsqQopt +Supplier#000641791|0K2NQln6HDAyrWkvdm +Supplier#000641804|wl1Lw,cTJyYZsE4IeoVx,gZLEoExKWcoVHY +Supplier#000641818|ROcGhae3MC,TY42EH,oB +Supplier#000641819|GNCnn9FHiXbtLdios, +Supplier#000641825|g9KqWE2DiF3Sgh +Supplier#000641982|QHsgLBT3xKXC63jXC 0kVE +Supplier#000642140|4llN2tmg,K8XUuc +Supplier#000642224|Awear fgDqTLE +Supplier#000642255|eaFmnsiyp,8UpWaBYFcRmQ +Supplier#000642331|NmmBRvkVTgyWprhM4zROydXPUFl +Supplier#000642373|ywU 9nkeVTMo662tOjSfxDKM5 +Supplier#000642447|zFefcrB7kO2EZnD3va3M +Supplier#000642494|kSRPdR4VOOwJho +Supplier#000642516|OiGlDQxmskyigwxLBQl +Supplier#000642548|0achtm5pfdTNc45 +Supplier#000642866|ryBl1wBrWfbZrd0sZAH8 +Supplier#000642901|VwnIQQg6Vs +Supplier#000642928|6JdMeY74au2y51AuaKj0VcB6,Ok9qtIsS +Supplier#000643093|6VJMAabrlCN,fjGC,UdcQOKTnjkkjS2WvXMHL8z +Supplier#000643104|H69oxihXZaOCw5nKPQUCP +Supplier#000643142|6SeqgDIDPojmBKB4CF,tZ8UeVg9 +Supplier#000643148|vhS0OzciOC,cuKcye 6cg AH5uqjY +Supplier#000643210|yp P611K2nT +Supplier#000643268|FtUB1c7tXde0d1,PtRYk0MhFZzSsvgtI1m +Supplier#000643337|wHNUzah5Lt8mtSYOdvWJnHx28ws8ufyVRWMu +Supplier#000643433|d01Ey,st61YEDw7 +Supplier#000643439|RUPcK3T5phw,1mkypdAA80KxeGiaZXinK0Dnde +Supplier#000643607|eG7uCwVCMmyrRD151TIefBzhMeifrUEjYawiUO +Supplier#000643637|y0cFmwiySwfoGdoPXE +Supplier#000643710|I9iy55nPcJQ0qaDHLgQ410 +Supplier#000643727|2CNk9EkFRNC6m LIiADohtlp9DJThsH7v8tT +Supplier#000643830|j9jISbiNZoYU27gez1cF589GWujFEZPGw Je4j3 +Supplier#000643856|hKCtfoXKJGEvrL1Uek4lY5jtwLo1 +Supplier#000643893|NA2VrJBgZB,9EVCihZdp +Supplier#000643985|8XN1bwKbD4,5CzkSgnKjk7f6WrebGyUu +Supplier#000644120|dqdZaKAuOmr88BDKYsxPpIpYXjYwFwAb2Q +Supplier#000644135|iqv9KHdLnANItR0xF +Supplier#000644217|G0csGkQ5mS2cSlaKUVfONehQptx10PFPW +Supplier#000644328|30QhK8TyQN +Supplier#000644339|BsK7rORZXdICDu9SIiYbmybZcktF7 +Supplier#000644365|2vPgbDw37JZ6JFZm4FN4yVs5jbxhHXecwHeGeEU +Supplier#000644424|no6NyGaFEiMbr0VSCLy5cGQeG0QxM59 +Supplier#000644433|1uAhdROI65oP9DBSpqFVbR0XnPOi2hD, +Supplier#000644445|MxJ NWQDRaeKDviuG83NYUgsltMAr +Supplier#000644552|0skBHwv613HiVfmte2lHCXyW7lUsmBNbmZhmsLO +Supplier#000644557|UM4VjTrcYSW1JcCnYWbYRzNJ9bhAvugu1PSzMNJZ +Supplier#000644602|MPxgr5GFyhllpP +Supplier#000644757|K5BbuSVJ,RmN VqDBxicAGBRkDK0 +Supplier#000644837|h,55OtQHCZ9jbKGdVg0NPlDozijU9p fSBQeDr +Supplier#000644910|GNKXd8qBFbO2ncwr ySddednPm +Supplier#000645044|uSl4EQZsaO XV0ZahTSz,A p +Supplier#000645053|UjmzOw73T7FPBVffyeECMA3DWv R6ksQE jxS +Supplier#000645079|HOmrxHKy2noZrNs,esg1h +Supplier#000645104|rh5eIeBzadR4 +Supplier#000645107|OFbfwdUk1OULYlxsgQefCb +Supplier#000645148|47LkgeghBU06ZXLrermrSfG7uCQkJMMVby +Supplier#000645153|6jBrZKcyB1 +Supplier#000645251|2s7m7iwiW0 +Supplier#000645325|XNM4nUpTLCCsqHlAQhl2lcd,xx xxt,l,ReTM +Supplier#000645344|sjk4VclZK3jdLpGWkS +Supplier#000645458|oqS mf6NjGj +Supplier#000645510|balihaNyN TJ clC +Supplier#000645579|BDIqQK016V8MGO1TNOFG1IT7SHiSWSTmgQ9 +Supplier#000645583|qBueNTsU5TwHhNksQ,4v8fInpW +Supplier#000645627|A02P9ZbDWZcbzRsOVh +Supplier#000645638|JYASU3QRiRxpDXhfh7l9id,C7C1U7m9mmg +Supplier#000645646|auPgXJft3Am8eQJNHPhqGSuBZX0NPGuB +Supplier#000645754|3Ars2QWteTYhenvxFdCbWnoQ +Supplier#000645814|A73ib,vYLLK0uB9EdljlHQMC7s5 +Supplier#000645850|UgPj yR22gCWZV84ho UzCFw0opSn +Supplier#000645933|2c9sVqsVLPpvY3pYk19v3 +Supplier#000646040|WYAzgeRF7Oq,55zPcfDeH9JKDIoQ +Supplier#000646103|if0lK4xJMPIdJJJB7kFKXIn9hKaxOOWBb +Supplier#000646107|shkyA4tLUmJSyzpM8pq5Y6d,lAIv +Supplier#000646124|gbSufPUIGMCHFz +Supplier#000646233|5Ehni19YpuiCd7N5ia84PFj4WSRh9DbWwLs +Supplier#000646283|7YNITDIfw2wDmZxwPDEY,YPu1rJ1D6m +Supplier#000646301|GaxmLI8YvE RUK6NQC1efVs5cfl +Supplier#000646346|b81Y5egbOqw3hgQ4UMJ22f0LaAKId4cBEC +Supplier#000646350|PIvvTUEW1nZBRoXZySHyhi3KPRtQ +Supplier#000646435|5Y5LAOXIGTnEVKwwt6i7KgKuyGLmdRJub +Supplier#000646452|qei2S3290U5qX3kd0AHny6pEW554,NYfl8f +Supplier#000646454|VR0a6h9lCKmPSx1R3l9BaDAUrDmn8Lr8VH LQ +Supplier#000646566|koRGgJhIlGXv9AhW +Supplier#000646602|sRDOSzAMHpm2ZhYrwtVU +Supplier#000646658|5EgSiK6kOIV1T ZJBZQ5k9HbyCH4RG1jyb5y +Supplier#000646854|xRCpfIOtLhRiQz +Supplier#000646871|UpS9rK2OPWG2n8 +Supplier#000646904|5fwA1jInPvR +Supplier#000646932|a7QtTfaJBxoM4 ,lr +Supplier#000646947| 24jjxzY9OnrY3YiNtTqrf2myV1xB8iWYGVG +Supplier#000646953|kn4dPBO9Qj +Supplier#000646960|NCXBkKAOU,3wZqAB0jjfRt3AkrYkMe3vgSW +Supplier#000646972|xFoW3a85awn,z8SrAnzE0 +Supplier#000647226|TczKpfZc5mK5 +Supplier#000647261|2onR10UCPGdcIn8pZxs9VI9uzrBU93W2pQs7ff49 +Supplier#000647263|OPKo0SYhSym1ffzH0GMQsk +Supplier#000647281|wyYPR,MLcexPmuU1XVViJkEbK +Supplier#000647398|DTA3hGRWh65ziYf5qXhD,HCe0aoos, +Supplier#000647419|ccQAPwinOVsd,D6,4 KQEFqGtbQR +Supplier#000647445|9iVgW4OOUlGfEh04EkBpghJRum3SLP +Supplier#000647488|97kfLLNyF5bF,mCt,sC7 +Supplier#000647563|agWEc3cg7mwoeHarh4QzhmZP4gk9xOLyDl5cRY9 +Supplier#000647577|TCo3q ogSJoUAKLWP19yjWOZL4vqRZ +Supplier#000647587|y8PhR58Jh0CpbDIoJO9iS5oJdZdITd +Supplier#000647597|QK56iJKlfYGmD +Supplier#000647615|L2zupx,C4Aa,pyxdzr +Supplier#000647718|dhgMwtOoCBUj +Supplier#000647722|Emfb70W4Io,N CA baLWx +Supplier#000647748|ZZx4E2wwT cXZuOXsMydmHBDBFk89MJ9HDknUHy +Supplier#000647897|mbVJElnXKtQ8jlphaPkD59QdNoFBZdjx2 +Supplier#000647970|Hnq2OPf6rZ3 B5Zwi8iMV +Supplier#000648020|wj56ssQ6r1iiYvQJydnru +Supplier#000648022|n60oolS827eVUA29WEaLBuI7 +Supplier#000648067|flZX3zxXk1mPfyzC9ZCRQgfNVU6e6vQARyq3 +Supplier#000648099|AEMR4wYtDc +Supplier#000648289|w33zm4VeSdTcNGzlfkc,sl7 +Supplier#000648433|eNFeofHF5P028eXz97vx1bteM +Supplier#000648453|MQ24UWbS5lxx +Supplier#000648465|lR3y8BpNwD wyjVS8p +Supplier#000648471|AlQHhafTFkOTmm8wIvkCu2EjSL59Z6z +Supplier#000648517|Aq8mChWXW 8ULX +Supplier#000648525|VV2ioa7XXF +Supplier#000648574|ZWO1le5cJe21M +Supplier#000648704|ogDuyFoCtp8QZhLfJPa2AEprDN9UHORmWkiw HK +Supplier#000648757|6jBM7Bsw0N3ET8zeuBiNI +Supplier#000648781|4AdWL7A3GdCL8UAOy +Supplier#000648793|UKNyeT21Yi0CqtllwVRv +Supplier#000648821|ZlY37 umyw,5SXs5y7DNeV9 +Supplier#000648862|02177AsPv313,5ppNOKNmGS8EONoloj 6yo +Supplier#000648865|ctHcgRuCJQ8Am2AaCNScOgbcfzzFx6I +Supplier#000648875|5yzfoN0bXsQ5WKYizW6PTR +Supplier#000648899|,Z6AkCX6dtGxnrtTye,Yjv +Supplier#000648951|bIdEmtlkex8VgZRYZjap6X +Supplier#000649014|7wCEQE, 44lL4fe +Supplier#000649017|BA8h4dFaBKTwkUfKN5VlA1f7aBOEVM BITxtY +Supplier#000649100|9e,,b6RqOgr7R +Supplier#000649153|J5Zmp3Cgbv681S5GGP8O7 +Supplier#000649234|g8OznolZ7Vbcz24iDjCUu8Wj1h4Kdni,b3oC4q1 +Supplier#000649335|o0e9BTH5YZiCd s y7OE,P81 +Supplier#000649355|tNIM,xwuKoSHIPrUr +Supplier#000649407|9du4zrZdoGL07Z 69nzN +Supplier#000649409| SG1ro6dCnnX7xThO,H2dZMBRYS7d2HTRe4OR +Supplier#000649429|U0T9eMlNk3,0PK7iLJ4tC2ai5Vt +Supplier#000649485|IsFZKRfpYLFljMaHusdp +Supplier#000649540|H5zihi9GXtqjj +Supplier#000649578|g7pAFrl2B1JD7KGLxnZyjfzkDBs9NHlu +Supplier#000649606|8KKfHET11rIh4mGEs8 +Supplier#000649651|4DwpZLQX6thfajcUlMA +Supplier#000649652|FT0d00uuzpJ9rmOHWo +Supplier#000649659|3,kb0cITOuxEzLbyPIxXU808V,CwsbSD WGX +Supplier#000649733|yDicwLViMWbh6v +Supplier#000649743|yCdnETEbUe,i za3PQ +Supplier#000649796|Ks7SMf e51F fP3JsAAcahrdyh +Supplier#000649821|s0ZRAK6Bl6EIN9hbdL yDakKxUmQogFSg ESb9 +Supplier#000649851|zQ2y9chZmbCYj +Supplier#000649981|8wu8tXj92trLlrub4yJt, TOBkKWe38S7F6yztRv +Supplier#000650100|n7F67UVPtABrmPWTiFJL6k4AIah +Supplier#000650174|PVk3G06yFRt +Supplier#000650200|2XoLQwvZ RuX3nD5YY +Supplier#000650260|QXhLanoYUcvq8B8QnAGlMblzDn78gmFm53 +Supplier#000650297|,vPfGrQZz7Yk,9VNprlly8ifJT +Supplier#000650298|oWJGUhlJLbNZknDAiR66o2brLZfuKKJ4QLri8I1P +Supplier#000650303|dYObQ2efULyjKb7tkNOrJ4q +Supplier#000650305|F4EqnX 8olqPsPPw7aXUGuW4AhVPvMVG +Supplier#000650391|wxyJ12ubH OIZSdy8IRCNIu6fL7bHJ2JxsinT +Supplier#000650467|PTUz9BRTRORyccjAYkNCbhTuh 3Ba4NJOfVZ3 +Supplier#000650495|8gJAEwYflMI +Supplier#000650634|3mu,REuMUmhjDLtJluCdYZpg +Supplier#000650691|zb5hapErCb4Xidwx0sD3zxbj +Supplier#000650725|HRM6gRYge xYz9uhBN2x9 +Supplier#000650731|CyatnTv7WGy87JM22lj42 8TKKJMgZGWGOCb +Supplier#000650741|3b B5DfjAiwSHw1BSyBNZ3SeDkxPtmAXqbM +Supplier#000650751|CcCt,hr wUm3RYn SDYMKTqSMgDHQgj Zq5H4J +Supplier#000650757|,Mr8byMASju0OwGR +Supplier#000650849|SW89Qylx9OY,wh9w2YLmdgsIhgFzmPaWIJfnv +Supplier#000650856|bmi9Kr3ZLKs9RS 1CGH5j3jLonA7rOx +Supplier#000650868|rqy7NhfaupVLMi,wkBasipil +Supplier#000650880|qGf6G kj,PEBZ +Supplier#000650882|o8hMzkzM9v6pMO, URKPa +Supplier#000650891|t3OxpmHiBVDYXRtDgs3ajgkNdad6AoPN +Supplier#000651085|iW1gpMCSE0wUIdO G +Supplier#000651106|ozYUv5QljJ2jC9p7EUJGiauzExlx5ymmsQnjsLCj +Supplier#000651160|eizMvJr6Ed1Epo ggzQ3Cx0Yz +Supplier#000651271|U1EdsWsNh2De9 +Supplier#000651337|3kttD9RZXfdmXrnjzI4GgJjmyeNn +Supplier#000651351|8I8LVIb6ZRwaK9I8 +Supplier#000651438|c,DG7oWGolw7RS5zLG c7hqvQkR6Gb8mxjAIuXp +Supplier#000651476|Aig3Mbn0Gd3E7HoN8KaFZoHwEgqkE8vMUJq +Supplier#000651708|N0fuGYBpTg737dbgV1Rv51EKAvlrX +Supplier#000651798|,2ZctBI4VTdeAGqYMSWF AyQguO +Supplier#000651838|rPpTfl2o4A9De4w oit +Supplier#000652084|F7xKMEczyQQge94OmA0i1g6inGE +Supplier#000652096|F36f1rgH,yzIf,3Pd4Sly,7 +Supplier#000652185|NzslvLvUZTaG2IddGjpKa4TYuDtcebpaT +Supplier#000652201|jps4PIVVXVnTfkk0dsmhBuq +Supplier#000652229|MCcqKrpyD8um4xd0XD +Supplier#000652232|18HgFklJO431vcGs +Supplier#000652386|4Gaq,xEPDLc06qLWQuukh6AQ +Supplier#000652422|fhtYY XshmD, 810C2GO0rhVGpVcQjVzVhT +Supplier#000652450|v5wOxzo3Kre8 +Supplier#000652481|bVYm,,zWrDEbFRZf0r,3DJsc4imqcx4lir2J +Supplier#000652484|yxSdc549Ld sgstlJYyCfxk, +Supplier#000652496|0EI9ZwZGLDrsIH9Ed +Supplier#000652501|9iolye37ss +Supplier#000652642|WfzeKRKGamoWxBfX +Supplier#000652673|TrqKPlWf7fOBACTffM4 9RouwqWPecf5vI9nYpY7 +Supplier#000652677|9ACUZyvc9dGPHKE +Supplier#000652764|4ZPQ7xsmE89Os5zMbYd +Supplier#000652772|9OKPptQvPFQIh +Supplier#000652782|3p0gaaWOmMm Qttaduu6GdjeHfQJnvwRubhKLV +Supplier#000652793|7PT5I5V,aAj3JkGMeC9eT2ntZ 3Tegy7NyNJsrn +Supplier#000652842|9lXD5nYlW21E 3J6 gbHiZSF0EI6hWAzY +Supplier#000652860|UVGqfFMT3E8 WNWRJfT +Supplier#000652884|wCdqjkH0J8odSSFAMq3PlmjHIR5gdd03KXiT +Supplier#000652993|1DSnWqoKgUDcRar7kJuYpT kfZf +Supplier#000653021|lnqOmAV gnhVje2VaFeXd4q I +Supplier#000653091|hYvq1gZhZl8cQxmpV5ne0sGhi +Supplier#000653250|pyprnB6pfspyl9ezOXRQ8u8qMfHwB5XA2j4 +Supplier#000653259|OYnCgu1D6kxmqTnqDhgvY3b6GUzZ +Supplier#000653418|huNwDulGBVxMkZ2dn +Supplier#000653443|XbnzMxy3uYx9xOvFYc6i +Supplier#000653570|Kgq5tCAzOSgnG64uRDAQeJUaKj,pXn0b0dTjw +Supplier#000653577|K5v5T0LuCDDBiXnO6wUpdL +Supplier#000653705|TKid2YysRLpAw +Supplier#000653717|K,YmpZ6KNuY2gMtfuTHLnsfyqtix5m +Supplier#000653779|IY5PKxmgapJC9ckLdwN2h1YEstlqn +Supplier#000653811|1QwD20v25tYStfm6AjJSi0RnxrW4CX6Kk,UWa +Supplier#000653871|CNY5 7ITAq83hejkhcv7zFmfgEJ +Supplier#000653882|1CiS f35TO 2mRbznYlHj3 +Supplier#000653969|xJhDgy1h710aE7rDY19PE1yyK +Supplier#000654033|lcvjMX3w PJLIvtyXlFO0NeEPjdLDS1J +Supplier#000654081|axmRHqDwjQdMkum1W5wQGPgOZ39V +Supplier#000654222|HdNbpNkGKAVzvqbLGemqC36F3hZ +Supplier#000654231|FOJqku40VSiop +Supplier#000654235|etMzMdIMgE 5nIPo +Supplier#000654236|5sGrNxcsH2DOqw rJvYqccqmPIeTSlAy +Supplier#000654245|M625zPQ,GZBJgakPEZJir0 +Supplier#000654559|zgI5lB2lLdoAsAezvrQbBTU6XM11bUtzVVW +Supplier#000654595|RNSf3 995YgaLAhQjkahOEAr +Supplier#000654608|euMmYqHTpCGLmSZuLbVVsiEA5Q +Supplier#000654630|1ejpaf186Vl1ZzuvLfPSIi9mU4tgyBOn3fJWLvZ +Supplier#000654688|ncVS1aO5j13d,nX,d,m,GwQOIvtqE7TaSzc +Supplier#000654726|xaYwsCqluiFt, +Supplier#000654730|rL9vuj4eW65GcGER68dfqM,b0ez7oeliPBvE +Supplier#000654753|AYQlvR,Zdx32MqvAA +Supplier#000654794|nTzjdCZCObifI7yh9bUlA,LtpN +Supplier#000654897|Y4nhQtsn3yQcP1yqWnOaj2PgUn4bhJXiCMvLbv6u +Supplier#000654915|7d9562UjPLGzEjUMBo6nz0KCd 6WEYKpXvciva +Supplier#000655198|iaHQiCz0whZY9NHF0NnCnBbemVi98B b51 +Supplier#000655226|8ziDb2A8v1 RR5nCqQ73u1xsZpIa NZCn +Supplier#000655247|FxNGRNcBxAtGCRpI15Jml25Fu,qEgXk +Supplier#000655327|9bKEHp7qz4T2dvJwvKq4 lUIaWRdHqIRiGh, +Supplier#000655548|jpXo8NtnsepmgmWjXGvhu +Supplier#000655552|P0QI3CyFXSzyD7 +Supplier#000655601|SPGTWGlaYyeq4BGZG2gqDs +Supplier#000655634|q9kuqa1OXeL7Q +Supplier#000655656|gNynGJwWKOcVeQKLam +Supplier#000655722|qjQmhtPW735NbJoMMco83cx3bwZy09i +Supplier#000655725|5afiNxhzajrodQS,cadRUBrNUBX5LFSRH +Supplier#000655803|99ihYcowO5e3LWoG4u7Oo wFJnV +Supplier#000655831|el503Hl7Ta8HgfmwmPC1PL0A,r +Supplier#000655834|VU9rGKa96DUezhAwFuWzx6JMoXRM1EKqjci +Supplier#000655836|diOnSx5OsbUSKGSif2E1l3Wa, +Supplier#000655894|RCTgFVKF5TJuetodPA5zV9MdhF1xCREHWh31dak +Supplier#000655941|2Nf0FH4vLBD +Supplier#000655968|Z1qOfw YT4QsZLaHW6w3,B X vUXMumZuK +Supplier#000655992|aCAh844eH2g,exFit7CYn +Supplier#000655993|ebEgMBJ2I94hqCjGpSyizkU22QV4r6u1Q +Supplier#000656040|XntSpD2V2O6,8o0K4Ov3PpwtjCerDEbUq6S +Supplier#000656111|FO5RAfD1KvfXIkRUUDHVawXEw5Ax +Supplier#000656113|YF2BEPhx75bUcP +Supplier#000656237|i7wiuq9rKciD52V16nkVzGLXTuH,jsnPSW6zl +Supplier#000656313|yK5ExKe6zI5R8Ur nP1ViErvOVyUk3uS,jAQ +Supplier#000656348|,QkANuuL4DvFimUR +Supplier#000656410|fbrntoc xNA +Supplier#000656466|ddrBWweHNC87lXLAI5cOSW7LGA5 +Supplier#000656467|cwycQLvRTKvodKVIL +Supplier#000656535|xjeqLryDyRmgE31T657 dBhe,Dx9KY2evJDM +Supplier#000656672|QJ1SwIzMCiW +Supplier#000656733|S,38D9qVhtzIC1bgsHzm1sK +Supplier#000656744|ovUNQ,5wn9VU5IVNBGEn,4mV2F5UWCQI,cxqYsL +Supplier#000656763|2Uy75J6Kr0V +Supplier#000656877|ZJT40fvTe34BkkU +Supplier#000656902|1vSnMdDQGNVligm0wS0fOZPJHRuorY +Supplier#000656917|cbw,YvWrqKuJAs7zneS gScuyMk44EqCH +Supplier#000657017|wyluCNlqFfVwgGafQMYAl7mE2 +Supplier#000657028|oR3j0ysZndt3U +Supplier#000657034|xm4TxCUQZa +Supplier#000657075|GkZkXZzDVCG0,MmXaaqw3l, +Supplier#000657119|VflO4ci4h4np6XtKC +Supplier#000657130|CThirK1FmtatLRDe4XJ +Supplier#000657138|ns5x fFtsH +Supplier#000657204|AKzQHyU Y zr1ABujFq4ESwrQBtQkcK2MzO +Supplier#000657317|YdeKQJ,QZ3wkNlHuVBhdxS42bKhfce +Supplier#000657615|tnBB,t6tAMIi +Supplier#000657618|5CxFgfPtwfYJ0Rm2 +Supplier#000657631|HByQNqoxiagHiX5fI gsrWAn4qTnEf +Supplier#000657658|2bLWKzsyCPAqV6WPzrmksmqveNLV0rclz7eA +Supplier#000657660|dveVlSW NIL9C +Supplier#000657718|yQ8SLYnzMvFoF0eEtOVfEqIwrrYKRFolHHfQ +Supplier#000657746|A0ldQIxc8,XMDh1b6iH +Supplier#000657795|2N 3UAziLpoZYooZ5aW4TBAnbLm6lvxn1Tt +Supplier#000657970|c0rgCazhz9HFCleeBWzfL9PS cGK +Supplier#000658092|yFGPPpRMRRMf4tGkEb6uW0fsEhuZFQMO1XD9 +Supplier#000658156|fNuUoePq3vf88SVUjHSyADulf0H +Supplier#000658196|Dw,8UBtiuDvXs2Fsa +Supplier#000658321|hKeEHXPvt,4Zahro4Mn +Supplier#000658333|pMgAYTtun4 +Supplier#000658409|KQYm6GmF9U +Supplier#000658512|mbwxBsd49Dq6B +Supplier#000658599|SzcpqZUvMe5CLMD0EEkzMah34ul hRDD3t,zyz +Supplier#000658766|vJySF9Fw0w9zr0BLxH2WH +Supplier#000658777|p,iD,M07jKdDtm3NPDZ,2Y0jqaesvSfp +Supplier#000658801|uS30GO2vSsBtqUJG9lkCSbwZbpP +Supplier#000658812|wQL1o6rP,RvQTvMs5C6IBo62z1GAq +Supplier#000658872|w9zki5okqi7N1tYEdi,hcNZ72ZPKTYL41 +Supplier#000658935|i5eKhFxfr78Kha3FCLS,D90 +Supplier#000658939|q3J0BQJ1Z6BJLTavjs +Supplier#000658981|HgOkVMdCxHwtj1Kh +Supplier#000659031|joDT gM5Pjp99nkkM3z9MebOlTllaNlfCFSj9JB +Supplier#000659040| WoZJkb352sQf5XDau162uVoHiVAy +Supplier#000659084|7Ap4MfUzpVY9dxeYfM5NX2m89 +Supplier#000659093|vpeaQgcabgfypxyYnJ +Supplier#000659133|wVuIMNiohvWbK2d1hBQ9NMZjqLV5bQl09,OLTTla +Supplier#000659166|cNECByXWdSjUoUH,bNTisSG3Z +Supplier#000659167|MP9oQGw3XpqMU +Supplier#000659246|zc41dlpYPiJ39ChtcNWY2 +Supplier#000659254|UDrjBCyi,T,C2uP2Yj3Y +Supplier#000659267|190O0fC,EhFWq0G8JGwWZ +Supplier#000659339|DFVmUmCj8MwF4nXlQR9fc0M +Supplier#000659359|QDKe1PTa07mMfG +Supplier#000659427|mRSmEzzz QyIfQiF +Supplier#000659445|ppXWeTiLMvkMI13H4OqSPOnqu5rDyvL +Supplier#000659463|DvuUR0N4SKc0D8DExa1MRYbODV6xbqnyvz6tj +Supplier#000659585|g28bWtPaGB1WlBiMEY6j4FzD9ckWGUYkRAZUyXt +Supplier#000659634|nNPmcFin0Z7mD hkH6vFmfwme9WvHS3JCO +Supplier#000659762|rFUykB2Pkpq0oJDH2myFobvaxZ +Supplier#000659775|5Z,J4Ls7xiyFhGRcVWGu CL1 +Supplier#000659817|GtqZjvODnGSFEscmJT2TH9mZYY +Supplier#000659972|wRmOKTN5Rn +Supplier#000660111|eBivUNvRc8ikkWB8mtkzEqwBh +Supplier#000660144|qX93 6tpDT +Supplier#000660153|Byny0 I,j1Dbm0Fzb811Jpi +Supplier#000660172|LVTJxtodAwxFhtbCnP9QPKAnAmdLUlEX2zM +Supplier#000660183|aNK,MZ9wtr7 +Supplier#000660360|FQdm81Y7c2ppFXYDRQx51hu5VM +Supplier#000660379|2s z3woYQM4ALah +Supplier#000660430|gZGDzaDGOhW116rRCyT88DdcTa0B +Supplier#000660480|5OMDMTbuIbtV2 +Supplier#000660571|P92sWWOyUZjfQ UHX5pS +Supplier#000660639|FZjaeE G4RWU e7N3CY4E9isfZg ycwz x9m,D +Supplier#000660692| uvvGapk3rUbtw +Supplier#000660705| CscBjIqKePRIe6M +Supplier#000660781|Z5GDRScJcOSGRThdtTwEpp0aVzGdJp6ECaSQnq +Supplier#000660847|3CODgYBj9cpUsXvMl 8XeNh,I +Supplier#000660880|EYITFZMnJkjW3CtkS9TXoAwBZn5WRN +Supplier#000660882|IdLuvkDx75GBxgW5zRDLQpScTBwxE +Supplier#000660923|PLD9lomIKlyDhJzk5JodEy +Supplier#000660948|lZjrVZSoqqZLiV +Supplier#000660952|eTornBkkypzWH63HF91 +Supplier#000661012|eDE2l0z32GiItMDCAvLlIkgSMJrJvAYpNqJ +Supplier#000661255|tAyfj9aq3m2NvapRu +Supplier#000661272|Em4h0yEle2i dn3SU +Supplier#000661353|CmebDcJkBrW9JbIY4O5x3OqDUn +Supplier#000661433|NJpzE1AfVfzd4h8AR3EU7DQ +Supplier#000661436|MYXkUM74mIcQmk +Supplier#000661499|Z0rv1QsrKyT +Supplier#000661542|mWhTh5OSGiG +Supplier#000661572|Yts,RjN1dfMV,fBlDyqOhceXZN8WN +Supplier#000661600|vbce3O3uw3AgUQ3rHLfZaBzXsu7VCyCx2fu6abw, +Supplier#000661624|9XLE1Sy1OZFtIq9Vj7p5INZe6xnSb8U +Supplier#000661778|VUN2b0556bLp vEG +Supplier#000661780|VedJi3b8l FeglDEdX +Supplier#000661798|f8P5fpYwX,JRtOHg9gA,cbKNf1w +Supplier#000661822|Oqx,vI85xyyGObtUHKL7Y,SZh +Supplier#000661825|HcZkkxwRpfIplUdfojzbQy1Rz9p f0Za6 +Supplier#000661836|OTP WjjMX3,I4SbJ +Supplier#000661941|1hurgk,6Eu3stFYlmN +Supplier#000661942|fwGx4rcuCDNphFlV5a0gbzl +Supplier#000661980|VDnvDJIVT57nX2BkY +Supplier#000661983|2eQhYfLWJl2zVdoUj6aJK,k,tadJy +Supplier#000662026|uiD6VNZdZyx7A91MLqNVucZheASXzh U +Supplier#000662070|,L,rYKMs63 +Supplier#000662250|I9V7iVLcTqv60wsnMCVn50kyzYEx +Supplier#000662255|WBfPczITJG3s2KAfAkEz i1sT2zQm6 +Supplier#000662326|,4kBxD4HykxeOzxY0Fx0znyw6 +Supplier#000662459| 9YN0 eqo5iuDfd9 Dd480Gno +Supplier#000662495|tXXTda0DcCPl4t ulYudf +Supplier#000662664|mvldlVQq6xzp5OsIPVeGrMEUqEwN8qB q8V +Supplier#000662703|b7LbO16K7jQnl +Supplier#000662743|,ub ZLNS3f9VLL1poRWHJH26pPqLJ1ykjItZ +Supplier#000662817|y1ZJVe06y4QAzm +Supplier#000662835|vSUmcf7qRi7u +Supplier#000662853|0Z8nzRYkPhMn,I4yeVs9qp0,6uci1cfRahA +Supplier#000663011|SdJEVRuWCyXYxQz5xhGZDD75mZg0 +Supplier#000663157|32g phmaJZmexvc2dZdENshakQ +Supplier#000663161|Lxy2qZXfUgKzmcFwA5ThuuY2wltfuETaw +Supplier#000663166|mG3xFXTJcfKOFIo +Supplier#000663282|oJ048uPkqlduvhPajRvtVBzHmdW0WeQ +Supplier#000663284|g56c6LXehiJ6PHG,RjC5dEe +Supplier#000663380|ywGZk4KJjojQ9mAwweLsvJUMXAbwJkof350NC +Supplier#000663410|rwAuTD9EbDPUvz9iq7f9e39zwjkItH6DLCIz +Supplier#000663497|zOOgn3sBk,KphVV +Supplier#000663567|KOLWn3L ef436l +Supplier#000663592|GqMH9qElAcF4I +Supplier#000663867|zmo,jlF9kE +Supplier#000663873|DeSAvvJ agnOIN83KaqZSXaU97CRF49HqGh +Supplier#000663912|tAFF5jJhl7Celx +Supplier#000663924|foXuGFC32betz49stgWaNY +Supplier#000663975|YgUxrYZl5y6b8gEiEqiaoehjFqnngFy35D +Supplier#000664023|tQm21OkKVhQ1,xoWVWJ4ZDLU1GQmkC +Supplier#000664224|NftzM8Uslm0lwmr7GG3O1 72cjr3g05rQOSR +Supplier#000664386|hJcSJOldJx cqMIRvqma9Ow84Y8mtnBZbxrVDAgD +Supplier#000664558|rz613Xg2wm1JLNRl +Supplier#000664588|eO2hO1esR0mF HooIJfxQYeOE3,f +Supplier#000664627|nlskBDpJs2Ivd +Supplier#000664629|Zobug za1Aci4WkfT4yz2PcK9wgRdatoCzVOv8W +Supplier#000664657|Lcyt,sj40AhIfFPIVW22C3Q4h6t99bPHUhfl +Supplier#000664736|aiMxd9vplv4T3oHN0WxyjhbgVpfK,IBcPeYM +Supplier#000664772|5XEjro0zF6jH +Supplier#000664794|riuPRWwUYdB2Q +Supplier#000664797|Av f7I,yT90q9J +Supplier#000664876|ijtrn2cOGGQVtfW9M7VqH +Supplier#000664917|njr8EphVUzc9LQ +Supplier#000664955|2Qfdc XMSFUEotueRxQ +Supplier#000664960|zwhS8PsXmGEPOsm2E5ICZwt MN +Supplier#000665122|sNhcxtunjvcl1VmCPAOuYHrhZfaZ1kf +Supplier#000665143|5U0rA8wg7pp8AZ0yy09 +Supplier#000665167|aLbLWGcluFEaRg3ZuB0YgH +Supplier#000665182|nJSSOs4Malv05sZ,c4C,URK +Supplier#000665187|M8cY4l9kZwsIuscULL4bL +Supplier#000665356|CAdHJS7j s8SQp0Imvf2183O +Supplier#000665391|zt1ZcWHRMOvCikEFi0AfzOzKZ3ISzW1E +Supplier#000665392|AYp0KizYxjlSZFWxESyk 6V3hXVh +Supplier#000665456|2V,0f12xef9Sq4IgX9FzVmJoj712R1m +Supplier#000665517|uHcxHWoQc2tNzoTEkquUdkBixeB4crjuhb,vk +Supplier#000665656|bnrebJwyOUW92Hdl4ZEBqUAF +Supplier#000665704|kGXnn91j,hp7 +Supplier#000665724|j6Jvcd1T2uSY655f4xD0K3x3g +Supplier#000665751|kaD3z7iICdd8K RTYkkEcl8 +Supplier#000665859|Lo1C40Nctz3Fx +Supplier#000665901|OBRFZEr8FCE +Supplier#000665921|hCtroNmQYjrdN6jYnAGqVaRzGIuGB +Supplier#000665951|yMofL,YVNo xJr G,LmIzl +Supplier#000666013|6X4vKoL4aaM6ZBrwBz,mGckuc +Supplier#000666131|Y5VpGxNPBwjZ0MO5tGRcJEzdGG7ydQGtg +Supplier#000666136|1KLiZINeXL8KDgp0lNUvtPEf0bHdKeXqbPg3A +Supplier#000666312|3tpfYM,uAmweZJdGhinF7 +Supplier#000666552|gm3kkJLaWtJ037t3KPCA +Supplier#000666604|mKGCAA7vfoAV1Qa4 0aH1M,p +Supplier#000666616|QdWwL80LumjBOfA,jfSpLYbmUUY6wMBHF5Cm, +Supplier#000666703|vcYdqGmq17V7VK3lrP8qJwS,1rnOaGkf +Supplier#000666725|0UDxYeIiUcilzvp xHSHjkAdm9SQ29mNAe9l28Am +Supplier#000666760|51RGLfKoR9mwsqEn6OOvA6eLrvny7 +Supplier#000666780|1LacwEo8rrzN1SMCG2SEXCdxQFJR0AQ +Supplier#000666859|mZt4up4yrCrl +Supplier#000666947|kneUOEKdGT KtBsChRcU7ec1t6f +Supplier#000666955|FivukV0vGiFACtp8Lk7M +Supplier#000667032|tARNbbZCsnOFT4u5TMYknn0QGWNSN +Supplier#000667105|B4yy4MzBx8EIXkLsgUjdn4 +Supplier#000667265|0QobXte8Ai6bej +Supplier#000667489|g 3p3IH SDhMo6qVsNi36a5,VG +Supplier#000667495|K6Ldgd5Wjbr +Supplier#000667510|uDYy gEfCpBwsYgg1R9TY +Supplier#000667561|g,LrfJAPt4csttOTXmuYzn +Supplier#000667615|fgwCDuB87u3eKzz52l5ZqJmmEZ5TEILYF9go +Supplier#000667638|xliNesGgISmT0SecWe8hLNr79gMJj,Dy9vmPC +Supplier#000667641|7EpVUoCZznh3pgE0VEyfTQZFlUPTsabV +Supplier#000667664|ur05ESVLOxT6NOwrvHGZnKOL4NaqzIWI6II +Supplier#000667670|FnwUGFLAzagWch8 +Supplier#000667729|R3B7le5XrYTw2,OMX8IK2dh9Sm +Supplier#000667770|LQNOAPt2H4CfAW85tBMm4ZwEW7ae +Supplier#000667786|FeqjJAm0dG +Supplier#000667881|O,FeMoirY33DT8T0vueAn5wCXGqzq +Supplier#000667937|IE6gobqN2I7rT3SeXoms,YLKWhEE XDGlPX9i +Supplier#000667943|,JfNvBzX14JrE5rV +Supplier#000667958|rTFOC7c82NeHCPcQFdzet +Supplier#000667980|Jx7gxgWDDfP6wjUzVwkLMzNfrLgfBfzgVM2lwhV +Supplier#000668126|ZRlPqOanoCSC +Supplier#000668132|sNN1uFks0E1U +Supplier#000668149|xU4ME6yvYm48QzJY +Supplier#000668159|iqabIYc,qe +Supplier#000668186|5VyKhsr2TsCkR50XduX,3eyzxZYpKV +Supplier#000668236|UOz7 8bjdYLyiBKUc +Supplier#000668394|kDpkH7SFmxHjKh86stuFO2Z4A9Gh1XC3q8OZ +Supplier#000668438|WfX21pkWrGEdGRNCQeePd3 q5lp7M2MyedL4 +Supplier#000668466|tsSlT VkjRmOwpdUMbQBp,rDo4PBez1iQNg4Ce6l +Supplier#000668490|MimBBmktDwFzcGwDIDJK +Supplier#000668625|iD7k95yzv2akaHHNEP81Ob8WOBDjyHQMciANxN +Supplier#000668649|NbeXWLQWL3ZnwNCqHSj0N +Supplier#000668671|ghAV0W5nho3Zm7SUR1xIqjUJXKg +Supplier#000668727|xBfFETXeCkJ3n7bQWhTU2 +Supplier#000668747|uBPjR03BqfWn +Supplier#000668887|RsADqzvV2oFhO +Supplier#000668991|9qaZDy5ovsux +Supplier#000669034|623qEBasiSUQAybqzG,DXkw6GiPtjUQrg +Supplier#000669075|r9o5lIXi8SxZ4Dzwo0OMF +Supplier#000669115|hn5aYQJy6zk +Supplier#000669126|Blxco6zL60b0iSJRDHoSyJr +Supplier#000669134|9KMW2wFi2weWn +Supplier#000669154|w1MIv W1AGm42u9Q03MIcXfeG,b8XFvA4akf +Supplier#000669155|vAyA9S6 txaq6QqsN1BJFRAv4PoPd4l8w +Supplier#000669338|axSx2ie VbqMyZ +Supplier#000669350|uKcfz S6rH +Supplier#000669504|vI7vXiCYxgcdpW6xomonoQ2uWDGgVehSNN +Supplier#000669576|HyJIe0KnpalZSCcHmhsWLRuhYgT,YU, +Supplier#000669620|3ARKFQhZAXCMY5ocFKx606NF +Supplier#000669689|ulnBEDe8Vpx +Supplier#000669745|XCXP2F6usun1EA6yc S6O2n2 +Supplier#000669754|v9vGcU5P0LyxV +Supplier#000669786|OUdLKmA8jvWS9OpTr +Supplier#000669926|yH0ZxItMDzQwNlDnke4NJa6cOmyHCI +Supplier#000669928| 5nxNUrUQmB4cZzYwbkw +Supplier#000670010|4CpGxQj icPvlYvgimo oNj4RRJlDA +Supplier#000670047|sALQqrmVErv8pqrr06ZKbosrrZDgU +Supplier#000670120|4pbTXlB S45yfHthf1zd9lgqCE2zRvlu +Supplier#000670126|GONl5tKxhu5FSOcD dt95rf +Supplier#000670218|WzDVtloNMgeljA2QkEShYet5HCf30dKDVj8 +Supplier#000670364|Gf69CPT076eH7VrN9JUWn c7OTXxQB +Supplier#000670365|efW,XGyrtS,WKGhF1NUSANk +Supplier#000670384|GudGejcNwQF2,sPwimKCl +Supplier#000670455|BMiifxhu0dNba +Supplier#000670616|n5CNPDaPQmfYimeAbfc1,zEBPkx +Supplier#000670683|FF1m,R0IfMfdX +Supplier#000670704|9n KCkhXQXkrFBUnnHfo4eIb1SZ7g +Supplier#000670705|5H1Tvsmv3NLUZtNNjMMvZO4c7xIG3Pd +Supplier#000670938|WN9uotpuum50M0tSve4PEikW1XgGd00YH +Supplier#000670993|aqeZ,lWTUIhECkYuL9SMAXozac +Supplier#000671021|eLvB3VOKsN9KGf +Supplier#000671081| N7N5OnKrIiKj +Supplier#000671265|uBK9 LtyOVUwPvPs4GngERqKT +Supplier#000671450|dbLKw66fks3fc86IH55ht0vrfDyNGVM +Supplier#000671503|VLmzCNz8KQ1hLLHsU5jSwpLMRcmXs4 +Supplier#000671509|kGsDO7WO23PPEhnsOHZsxUTCluQ8fuknippiUD +Supplier#000671534| HTbFNW1mnFV +Supplier#000671582|AOok0wYiZECPlABWXG5onrcpYhRDezXQ59p9j +Supplier#000671590|YEdWhgV6,kOFGK8kcRPxTwu3YHif2slqQYf +Supplier#000671708|T6 zYJtdv6lDS8JL439rfkn6AgW3lFBYYU008 +Supplier#000671740|hRlEUDwvDnSoMFapESfB0RpuhaxRk77oYTP56 +Supplier#000671808|qkaMcmlSc2W86n0HZgdMMU,Ai0 +Supplier#000671863|PUXw3UdNp2ZWvi1 +Supplier#000671902|XWcp2MhikDTLVbCxiVPFZK +Supplier#000671904|ObEP175rGCZ5ukXyoOFzUhLrYMdHz3 +Supplier#000671913|zVmWZrZFZlRkM7YjJqF3paRfTD +Supplier#000671914|Wn,V0R8zo3RzCOzn3Sp8 +Supplier#000671975|Hnwo8kTJsrw47 +Supplier#000671983|f72vbIbVz2Grn4 c3AA +Supplier#000671993|JTW8x1XHBMog6zFVAS,BFQ6wem6Qzhr +Supplier#000672027|3lM75lheGWesFLjocrpghk +Supplier#000672334|M410fX1dqd4fTjsPwZkDJduHsdECNyj +Supplier#000672404|t5K2k6K3rqS65NSY7er0 +Supplier#000672434|NZZMIHtsixqlWLN,6PIeT +Supplier#000672477|k4xzt8wR0qfaKDlQoGTXd37 +Supplier#000672490|PRa3L S3ogQO +Supplier#000672550|x pFevS6xwVOnim4N0GNpws +Supplier#000672577|dpi14uLq5JQPKQgRH +Supplier#000672588|3xFoKm,f5Rnp5FsO +Supplier#000672656|rNPkuFeBNJUqml +Supplier#000672662|6mVlHWv3dJ3xShB +Supplier#000672733|y18n64ocXyrd6mIvaLT5YuhLV1x +Supplier#000672751|7qLVvKApZZ9u8NPMU epWE0Y20b1SzTUN +Supplier#000673037|IQ1GJbs,KA9q0YtfNjR,84K5f8O +Supplier#000673083|4 lz6bCOOENiSRz +Supplier#000673128|,9YUlDKbGB14bpmRjeDHMD06 +Supplier#000673135|lkapLoYz vHIdvV7Usar,kqEl6s,0JndJj6gzTbA +Supplier#000673256|XrFwRppgDW +Supplier#000673259|vS1HSszlubVDfJbpK,c +Supplier#000673283|RKyTesH2IygP uyNvomb3u4WyNLMi6oC +Supplier#000673536|QGU4w6IA8CgmDA0 +Supplier#000673592|BUtZ3kN,t9CQQp svi9 +Supplier#000673608|Csz99yoJWGR +Supplier#000673663|jW3SbdmbDDA6SWecYw3aXJ +Supplier#000673689|fGoBBl,2qFOV57uR kzoAm +Supplier#000673885|zaMeexa9h8 +Supplier#000673944|ztzqtGeAmD,gMa29oAfqkpC +Supplier#000673975|Cdq7UXMIP8ZonybspuHI7EIyV +Supplier#000674009|7zA6zibDJmBiGTJmpxLASI7iExuvD +Supplier#000674058|FlBuHRz2Bn +Supplier#000674061|td,Vwx1EIyk8eL,i2Ieg EPk5aWgev +Supplier#000674085|diKXZoopA0P7gHsR +Supplier#000674208|TdjA6DVwpIxW4j75BEO +Supplier#000674300|2yIDWTT7d0yVDiRqE +Supplier#000674309|5lBTIbNFpF,0xNV +Supplier#000674343|NrbLzPLIa1 +Supplier#000674562|qd tA0S,fSmi6baACYvDDTAJxToXui20E4X +Supplier#000674583|XkquUNhPjxOAF5rYJJOH6M +Supplier#000674602|xYdZxOFm4qSK3tIMMe3F8hLtRCWyJ,w1mnoNKBo +Supplier#000674622|dUBvy,eWuq1XulK1fBKN1WPxM +Supplier#000674655|CMp7BY6P1yi +Supplier#000674826|PVbGn x47eThaQyTjvuRcawL0 +Supplier#000675007|Eb3 C9dC,G3kKge5YUTdRbpWq99RizcBt8F3 +Supplier#000675067|jX0JTXlsUWsV62FBDvAfrRvm,JMg6I +Supplier#000675102|HhvLs7TwA1PXLsyF5QVKdZzb2H +Supplier#000675135|tTQfIOC,ergYJ +Supplier#000675161|ms7XPk5D6nUUd8dF2uWDSVeep T5LDy9 +Supplier#000675501|ekuUhgdg8cDY7ob1JajHv +Supplier#000675525|tywp mTTKBUDl2FiFD0cBQSQVbavqp96GHVVt +Supplier#000675528|OkF94BAW95JDd,NXO3mR31Z2rCQ7HDzGiZqFGFrs +Supplier#000675624|Ia DcEcUML37DzZuDmVYjtvdC1 +Supplier#000675719|5rAy 09GhRFhcorL M +Supplier#000675722|CVcwWRhQv5b7xwFePAn1lbPbqPLdOkFl +Supplier#000675742|gC67Q1bMpsTI40OLQHmox5qpMt2wh +Supplier#000675747|x5I7JJW4hE05yB3oaf,W0z +Supplier#000675818|RQGdZRVcPWDQNH9hKwqis2vbLVEV3oIKjwH +Supplier#000675826|lIjA12E qH +Supplier#000675836|AKMUBnI6ReuhNryWzaKJQVwZzq1XRQl1n +Supplier#000675864|SDnQEEsJiZNiAzCCpDmMkUw +Supplier#000675879|lr6BKs9PxZmos5yl,Yv3iJ3 +Supplier#000675957|Pjvo1x,b66W2nS2Qp05 +Supplier#000676123|Vv2HRyDa4Cact4S +Supplier#000676126|mlObBKiGlAz48svQ3zbjEV2 YizSU4lp +Supplier#000676137|H,tq3P20WrZuz8zSOqurT +Supplier#000676155|hWr5RksFDdtCOxMAp1V iC51uMYgEXhbeBZMkP +Supplier#000676190|eQvLEc5iSZAmkIC +Supplier#000676314|hJA1LTkqpMMBzg86 +Supplier#000676330|l2AsD5K92EeuGa +Supplier#000676493|qMboHUYsW2K91Pa8KAqyu WGPGMED +Supplier#000676575|QanOQ,lw93RpIcQ3 +Supplier#000676579|qz7hwm6BmKzs +Supplier#000676626|qn48uEFvNo9GUpP,OM +Supplier#000676630|Gbj1JWFxknOrfmf ddKp +Supplier#000676669|zWggcuY5e3Tnh,E coGBBkev9Cq2FBoatwENUga +Supplier#000676709|9k0VFPyHDBYkG99XM +Supplier#000676762|iVkh4JllayrHYE7aRs8tSSifm9VbA +Supplier#000676770|krvFUvn,y5 +Supplier#000676914|bizcMDGV5n38pQiMQip38xCyC,cI +Supplier#000676916|kLrTX6hJ085fbRQPrD0BZ5zVK5,QlTDI9kLO9L2X +Supplier#000676960|kGByS83VqwH +Supplier#000676973|4kqiigfdXwDUyTyf2elKzlLoIsSGY,i +Supplier#000677044|oDYmVFMUi 3nw2wSp70N6x +Supplier#000677046|wqG2zphYmk0ByPoWXEDdW5ZwKrF6iWolN +Supplier#000677058|D0PagRHiw7BG0fMuLWWsEhR9,zCkcOm1v +Supplier#000677126|zQL7yD31F TbyWlrfve5b6bJvNO2 mL +Supplier#000677188|MINZIw0kT4wtfewV3fZWoKcAk9QKPPaZKX +Supplier#000677190|B7ANnh0LMzLUmQtLHqhC85xVeum95E PHq66CvL +Supplier#000677232|NUYCrsQjMspaUfp2voHs51ZhbvyfQriSG +Supplier#000677253|NlMcrhQfMRJOJPZWQhL9YHCtAln +Supplier#000677372|aRery16Ontb +Supplier#000677467|pY,LQRxmHmtqigpNHzj4Ba74HSuNQGtn7sV Txi +Supplier#000677522|QrKQqFQSWmYqJ45AjDVrPiJJ1ys +Supplier#000677523|K2qSO3K5or,P6aj0S6 +Supplier#000677615|ck5xjm3UVkDPvsQ1 +Supplier#000677625|jKBwbcZetvR1J +Supplier#000677645|k9aOLj7lIaRCM36EAos9m +Supplier#000677705|AAUxr1gXpzz2ltMOqh0dLxku2DcIwDvK +Supplier#000677753|9Wna,4VIgY7JH7Mmo4MsrPlQptjVP6GNaWLAu2f +Supplier#000677855|Y6VcnMHTKZBTQihDBx4G2JEkMISV +Supplier#000677862|smzp3ltriGVhRDP +Supplier#000677878|e qlnIbwOTY +Supplier#000677881|4mYN f3Lb2CsxSrf2zLhToy0 0 O69 +Supplier#000677924|Ndq2yBesNB2L, +Supplier#000677945|WpXc1JqYaJL4 +Supplier#000677947|ZwuqrlQB36eFZatoZ1dJqK 1wR +Supplier#000677997|tyLYch8DlJr7ktMWDFd9RLwTzQ1Zzd7x +Supplier#000678018|gmsF,F9rVyx,7LspMW2yoAFuLpD0 +Supplier#000678153|siInjOu5RRBjspQIdvo +Supplier#000678167|3zUUBETzSJ9SLL03uwK5BMNS +Supplier#000678213|gGY,yS1Htb2FslxCSyo7VMUHZ,RyU1iulMJ +Supplier#000678217|5topuId, rjwFkehZ9BkCc,4LpT9LIqeWN0u +Supplier#000678254|OReiJ2FpWQSxJe25SY +Supplier#000678331|SSLd,devtSIEcNwGGs +Supplier#000678334|mcUWbUYoDtx0BPppikE2FDEeLygQnnZ3bzOy +Supplier#000678393|NrdKg7dYLtlBZozpt4vPe,5cbvctTkJbVVQY +Supplier#000678458|QbizLdNzX1eWmp6EBpjIfUQD1w +Supplier#000678468|PuViS8rOW7tAqY +Supplier#000678475|RYbOEF5vb1ku8 +Supplier#000678522|58j016rJuQGQgM +Supplier#000678529|IDXAfI CmRforNI5EVOlNc +Supplier#000678532|5AghcxwWo8DeqOay0 +Supplier#000678596|R3aJik0Tjn0 +Supplier#000678612|8MrmL4f3mjreGG3kvq 2t2lDD1xTHR91FI49 +Supplier#000678624|oiT,GcV mkniKRPL52XiqFR8j6UVaVjh +Supplier#000678685|cU2EMa URhJy67DDO +Supplier#000678802|dYQDML6tMsAAqi,op44YdJCuSK9o +Supplier#000678819|hIKJU65sNylQ0HGrSQeOzXJzZZeyYpm +Supplier#000678885|aM,Q2WZ5YMsugJyjiF +Supplier#000678945|VKWzMlhAvjN9FPaZ2MEaX05fuBaVI95lP5S +Supplier#000679048|pNHjJyADmSATrXo1O +Supplier#000679067| Q4M6PeeI1v0mPa +Supplier#000679206|3eRjkOyA3Dgh +Supplier#000679213|OqZ1xRaLJd47LGLC +Supplier#000679217|nepkhztaH2RnlKrPuElGB2s02AgK31IBF +Supplier#000679271|ODdtm9nlDhYzN1S4p15SsquL7ZZL2b +Supplier#000679312|HoXyfIFSvx9kLjT0WVPb out +Supplier#000679364|gUfDUii7BT5Ej3xRz +Supplier#000679402|HJUKoAnkxbvgZGq +Supplier#000679510|B0GNi0AGXT9 +Supplier#000679652|fs7kp4r8JMLwZA9WLa3kp2T,bRbXk +Supplier#000679655|KKPvBWMBkK2u1kcNWSdut5Qrdyx +Supplier#000679668|XbVxHVkmSXxbg8GBv1h4VXfvih94m +Supplier#000679675|tSeN3KG6uX +Supplier#000679681|QwASA,bhsDnw +Supplier#000679720|Q7A2gwjIyl0DuCdWOqrV86 +Supplier#000679748|uAOyw3HQokFM2W6NqZlWxYJV7FTu2hz0MXy2K7F +Supplier#000679758|Ti9PRAwYPS57T4QXucGjW6hrPwrN +Supplier#000679785|Xf,Fh7YP7LjvvznUB +Supplier#000679875|D0Ejj,KzRa +Supplier#000679959|AIpCFZBhhhxajCf90KppBKe6Q +Supplier#000679963|K2H1yLd5lE2dvcvxbqm8yr8QPqIUTHXy4Wio +Supplier#000679977|Ovz9ZA9Q8,5lDYC2BTEEGHcdRq,D14qgAOa0 +Supplier#000680005|gJ5QzgQQMaam +Supplier#000680023|u7Z5hmVrWR6oTuNeS0CbEoCjNv +Supplier#000680045|c SIyyi1rWDoGKPAshFk +Supplier#000680064|Psza8sHzzbM4GNBsKMd54Ly1ApR +Supplier#000680201|GcGPd cdX31auISVZpa6,YmImZpLFxaM +Supplier#000680205|CZI7ZxRoWstflWK0Ge76ypZtk1tAIbD9C6Lndkjo +Supplier#000680235|Mm5gkq7uJbUkGBox +Supplier#000680300|aGlhMvSWi0vJCCHKIzMot40qZ0vl8u7V22vf7 +Supplier#000680447|AEwJ9Oa90lu5QCoOWKA3sl0fJVa,wBFncI +Supplier#000680459|LdmDYHRRxJhXkcYUhwfL0RYASnKOjjDDqT +Supplier#000680490|Eg49cUnJYwnY4tMu8f1bcoWHMitetd YG, +Supplier#000680544|mhK0uiERYjWujpojdwbtKS6SSzdqIDRQ +Supplier#000680589|foDbYYbToUdUeb +Supplier#000680750|eWEZhqZZOsgsUunexHZNrfbtJLq0 +Supplier#000680800|trCUfB0txz2489BuSr BqR4 +Supplier#000680864|LOiwp RkGK3d8Mq39 +Supplier#000680946|5tvY5hodfnlby2r NftRYZF +Supplier#000680992|J2Yul6FlLO9W 7r7LCMyV8eZkGA7Ovs0SdECd +Supplier#000681111|kMmMthTLicAh8yjCO0GCtrPwgR1oDqR +Supplier#000681281|jj4ZHQZDrv5keCjAoYvxA 4MfUgyCv +Supplier#000681348|vSr8u0KaeUHx0AS9viIn7ALhRW3AHMVwF +Supplier#000681461|nGdAWgvSFEfTLhTBu1W0mib1cnG0W8DVX +Supplier#000681538|GT00CdPzDPdMAl7hvuMR2tDYVcMxa +Supplier#000681563|SrEqf9DjSuOij3edKK, +Supplier#000681643|cvqdwpaQByfNXi3 +Supplier#000681718|vDiLyvK8ISuGMiJ +Supplier#000681721|SizU xTLz5PLb +Supplier#000681847|IVbzRlKBeivspvU9abj YblnCWgS +Supplier#000681857|rcPfE4rGjTgJjLSsxqbKR +Supplier#000681893|sMqrFqaLj652,cI5fZXH 9IW,qjJdox2GV +Supplier#000681898|pPVLFhHnBkWhHnDMKnIAxY3S +Supplier#000681928|Fj3JAibyBw +Supplier#000681971|DXHeaF4CYqdHVvEnyMI +Supplier#000681983|3veQQhWXJH89M1uNkmgyKsHmOjCMNc8c93F9v +Supplier#000682013|Z3ST1EiO3Wt9Diz4C +Supplier#000682047|Fop3RvHr,Q +Supplier#000682054|FeloIHkYJgsk6Fr71 xcYJvU1nsAXx +Supplier#000682071|2f9lke3dHXmhcnXf wnJ 1fEvapBD5 +Supplier#000682098|Yx9HSJfSVFpk428I17XmN2jp +Supplier#000682164|dkmKp2qmdxm7fST4njyM41 +Supplier#000682312|zndwuVBzmsw3,wCTs +Supplier#000682315|zMu77WHAyYdTUq6pJol3oM0gA +Supplier#000682359|X266p3eJtfzlGk6BFE0w8BO +Supplier#000682446|FMWv7ivKajin0 +Supplier#000682449|xtCuikJVcBSnrhaU4 +Supplier#000682456|SUUK8tH9fsVLWVeYID musX0K2Jr1xhmo +Supplier#000682483|3CCOR T2CIPmnBDZ4E,NIxrXBk +Supplier#000682526|465xLhGZ0,X1obq HCjx E +Supplier#000682534|WbqWTKCNpUIw XzumboSUhWcJxJoz4LDxNDW +Supplier#000682543|t7xb,iiJAEBd6uMErtMm0u8 +Supplier#000682642|ztm2sRbFoI1K +Supplier#000682707|FJRT4CxmHJSGnf1nZ0lGVyUNrnBZAjxdeqqi +Supplier#000682833|MXEJ8MUkakeseSz6F +Supplier#000682862|eVTWd7f1uFHhFmMnyeTQSS M06e9 +Supplier#000682912|LUP9vaHFzddlPvh7LJCVQUvBn11e4,,JJXHV +Supplier#000682991|9FDOKS6mVwlsB3Vd9t +Supplier#000683075|C6 zG855u8g958j +Supplier#000683291|FOJhi500rJA3otPuonoe5ft wbLAU5O dEm +Supplier#000683352|87PXT1ZZoFAfh07VbiLnowSS88kph76 +Supplier#000683444|fFzqKJIGaCorPtBRd +Supplier#000683467|7DoxhdFdamHH89k80gbGLgknn +Supplier#000683478|DZyy8UbHfDjTCsLZDNHHvdBBB5nwXx,FfmoE +Supplier#000683609|CKVA QQIAxwUlESZSNQ9Ze83eBojCnVmyjiUZ +Supplier#000683610|Cdtobrnzv3CVr0j4 +Supplier#000683810|mwRD0INC1D +Supplier#000683834|hHI5 IM6yoLiCx b6JlSyCqXD1 +Supplier#000683879| PXDCgGgXN yh,JlXcnF09V7OcblQxJ1JbXwi7 +Supplier#000683891|p3IkDYHm3lFQUZzJQX +Supplier#000683916|eGmKGh3MGwqDhu5oicDhN0JNhhNhhuMfFlb7 +Supplier#000683924|AVElpQ1pN5ukMa +Supplier#000684008|pQOfoZEaQvptm13rm0Mnx03j6 +Supplier#000684033|S5OXZFK9dg9z4VIFJE0IfSue6ekYa59O8 +Supplier#000684073|7eq p18NxD3lqN,0 +Supplier#000684096|,vCW2pv02RpgSe9bDMguNuIo7WJLfFDuO6huYKT +Supplier#000684151|ipjjX,4oaMgx6UrZE6vLgXTcT3 +Supplier#000684179|lqnPqPS3LIzmS8DGj30LGz +Supplier#000684266|1z6 UIhnOSVNGAhr16g,erxtr +Supplier#000684350|bnri4Ol f32eq +Supplier#000684374|05Jo YgBHnN +Supplier#000684486|gDUwAIeVYytmJ6LF,dRQnwblMxwy0MYxcB4VBF +Supplier#000684492|8gNapwoEiv0,zMpTdRwB8XRYWdnGBMHXr5 Rgv +Supplier#000684549|G5n2uPsjYY6uSZIjr3poCcRir4 +Supplier#000684871|EqOxNYKs5bViQ04T8VGRkqNL4g7u6D +Supplier#000684876|kFQ7uiGYssE1P8VgIsmwraNcCT8g9e97bI +Supplier#000684990|AV0nUy3rMaPGXSTnpnx +Supplier#000685044|dBhwkidaICK6Ej4uECf2cdYPj +Supplier#000685059|S220zD40pt +Supplier#000685077|GhP3 v0glByrLumQG +Supplier#000685205|cqABlXP2F7 +Supplier#000685330|FOb ,0tHoSDsQ1ReWMVrOiScEVBHcM +Supplier#000685373|0ByP,WcGDZLtiEG656L +Supplier#000685484|KaoNTsPJDQqmgvrfZHZH +Supplier#000685540|8PtUGfZB40A +Supplier#000685558|RoDIyrnn9YUL9nBKq95aD4eHdt0xznjO0MK +Supplier#000685566|3R1iRcYpyTjelejka +Supplier#000685640|YG8raSTg6saI4YLx1LuRcPxl5g6gzor9so +Supplier#000685660|YOPP,7rUo9Qx0gEWUPVF0d +Supplier#000685678|qcNdmJLqTY,ZMWFuF +Supplier#000685735|iRlNdgdy7vA 6DOMtOlDC1fZQOqOrF8 +Supplier#000685843|hP2VTqkKUiWxqUTG14BI3 mGBbvlN2JaK +Supplier#000685861|vmkqwHHvmv8nhucMi +Supplier#000685932|jpYtyij,AEBPziSUrcYFSIMcHcx3kf2U2DrUPf +Supplier#000685959|lxeyml3ljRdKuYd rZica T8 +Supplier#000686112|SYZka0fEzc4B x nK8 +Supplier#000686262|s0Fww4,rSvPPemnA +Supplier#000686327|KPJNy1FrBTJwTDPl,rgsMtkBwKMl8KleUeS7uzlD +Supplier#000686363|mRkeDWtc5aX88d +Supplier#000686377|rP8hklb1zwT +Supplier#000686386|gO151YLUrf96EuDyTcV6UR +Supplier#000686405|Ec4cP3elycRiuNbpZDMOt1 +Supplier#000686605|KVVWfELoI0swd1fTS127zxTUA6X +Supplier#000686611|WfCjslc9DyQA56sfZjB2 +Supplier#000686726|iNOu,wqtMO1St +Supplier#000686735|7fBcW1PddE97oBdHGY5pizs9IUGTDbVwgZt9wP +Supplier#000686752|REz7BqQ4 aPnCM7XGwqRc9PYGPbs8RKOzxyM5F +Supplier#000686760|XpSc7lFXE3BWhU +Supplier#000686794|mOiQlc3Fsu56JBS8Y,ipMOdpcAAnUMe1hxgrAn +Supplier#000686797|Rlpo0,rUB6geBQgiJD8GMklZDWz1i9, +Supplier#000686830|ONvrQHsmV7mV9tHC2VlsV9 +Supplier#000686861|HAmQQgP4,dKQS9KHI3C9xhj0LUmw5vPluPuV9O +Supplier#000686898|umLXnJkvYjZ VHTqd6brUxIb,n1xxsyUHBASsUo +Supplier#000686949|7diSWoCPdO0XjPNgcOv7rgoXK7846p3tLA7Ihun +Supplier#000687018|66qmRa1TuRSo +Supplier#000687020|XKtiu0Sq23yFzrL5FSNkIMbRV9pGeGuB +Supplier#000687086|DFgaiXmHu4LKWio6oU7kX +Supplier#000687155|AigXb2b,pXtUIscd8bp9v pUM N,EoxZSJX +Supplier#000687213|TIecshaPHf mPQ11fj7si9dc1Ir2gH +Supplier#000687413|twxkmMgkGCg50mwqNAKMUKp +Supplier#000687455|bJhEUZ0RH6xCTsFwAko7X8664hgn +Supplier#000687484|cz0ZR5lq2m 4ogjsMm +Supplier#000687537|DzAoBrKMJ2n u8aODujTBsIi3V5L +Supplier#000687547|rfxlw61scOHS h7 +Supplier#000687568|WgoRncF6u9K8MB0cOJM47u4U +Supplier#000687605|f3BAYOpvGrSoL3 +Supplier#000687606|jDvWYDkhKi7Z1JW5ux7QlzABazQwfreN +Supplier#000687624|0KyvgQaAqb1,0nM +Supplier#000687651|3TW5ClKZJ7Z61u2R8dQoRfedXr +Supplier#000687681|GwJoJGu9uvMJmbBbkkZKrV09mbULe +Supplier#000687816|cSZzWwFghBkbcKZUMLBqCE0 +Supplier#000687818|Kwfdl92u 8nu6bxoMhhFmHZhvA5L +Supplier#000687841|KWeNjesEKHD,PGk7fOE1Y +Supplier#000687955|ej9fNBDnjCNzBzfH21zeFeEBdwj8 +Supplier#000687976|4vOuc2IyyIY8z7aWv4t4pbt8JTL +Supplier#000688061|tUzuLrl8AE4ZPKl3Um,2hcxkcDt +Supplier#000688113|TxRlXeTYyeG5UC0Nz21HMU375E0Uh1Vkp +Supplier#000688127|vgPAqLRnZ0fUFFW +Supplier#000688188|ZrRWUEIHkkGj6F7ekqu0wEOgNCUoGr +Supplier#000688242|YurqClUwCd2pMK3dCBjRlR21mhQbjHfui8ytZ4GJ +Supplier#000688265|HW5zz3H0GkfNK1GqpNGnKJL,GUi2mQuCNPIB +Supplier#000688465|jfJfQPOPSO77kd9a +Supplier#000688490|2N6qbC2YFP8,W3X690ZIY lnQY,u +Supplier#000688506|mBTqEHOw5jZeBFc +Supplier#000688617|awCY7rNIg6BwmD +Supplier#000688697|,x3YYvBjFHPQy1qoz bFe8WLhv4JSGrLszW1PNk +Supplier#000688742|d8,QHeI6llBBfkp6Uwdj4 +Supplier#000688786|CCKumc dGzwkrSDlOACO0Y +Supplier#000688827|CUspjSrvP0wdfGo81z +Supplier#000688830|bGpvNB0sfkG w4yqx16eLfHUfbFuiS8wmMlR +Supplier#000689147|gMAwRAgFuDBSDGb7PvULU1Mhb +Supplier#000689183|rzdrvW7i4zUuvO +Supplier#000689197|c9UixWQusDWGzCfjRActuOmClWVDliT4cIL +Supplier#000689211|q6oqbzLXJWbQPlBFIV IphKRUf +Supplier#000689236|FSG gUrCXhSYfo5z1Z8zrm9o8Dtv,XPOwv5YC +Supplier#000689360|VhZxMYWhFgFQpcfM7ql2EpIZ3tEF +Supplier#000689543|zbE2CJCqcCKPSyI +Supplier#000689694|x2ZWiYe7x2EYEN5 +Supplier#000689818|khmbZLqu5mzw3SSfY +Supplier#000689853|xp tiiiG1jj +Supplier#000689877|JoD xdwREqVK5D vODYrgbEBnuac7AJrkb3R +Supplier#000689895|gIAe2k9eg5hMMNBXR1HwWc5saGN6qk4 AIjb2 +Supplier#000689901|2PfLo0HE8Bf2zWEa7xIkT0xiYbOLr93xeHp +Supplier#000690024|TCYWLQaROiTammIuo5o7qYsI5S54gzQRvyfuW +Supplier#000690064|ckXsGLSszYQvTNDjJMiaHkQ,8 +Supplier#000690319|TmqSPUWLF3gY, +Supplier#000690394| evtz,rHOkoGGqjMme44cBXlMR +Supplier#000690479|4NLRdaoI4DC,ADHlR hoUUUz +Supplier#000690492|c AGKsL5mvn9P1 +Supplier#000690504|dRzOdzKMavhgZc7sNzLve +Supplier#000690671| cSp9yo6JBaolekAjWf0ntkvm9MFQVwJiNzVuNj +Supplier#000690769|I7JSglwGLoUwULnNcKfFsT8Pazqv820ARM3 +Supplier#000690856|zFGPX7aPRJpkcWXeJ0wsjsHtqbWY1H2w +Supplier#000690917|NBpZ3WvpRSyMfyJcSpsz1UHbTbHPU8h +Supplier#000690954|b3QgmGJmrtTtYIVAlNDWd +Supplier#000690971|y0OGktejwU +Supplier#000691048|MnZPcuylCG4hi9CK10sSGibbqdj +Supplier#000691069|T1jpRJ8jkI05oIIMwa +Supplier#000691119|OSB9v,M7,jp0okAOMfH9Yruz2IT0eNLrJaZNp +Supplier#000691121|xemVeHqZyXlomQ410h8m0PrDkD +Supplier#000691140|uRDwwi6W7rCo +Supplier#000691160|j j0lZCzi3Qkn9ZOEwcd9G0jgeI3mL +Supplier#000691198|4adD15CfnAHuw4WjMuIsNNBGG52zo8z3UnB3Gj8c +Supplier#000691242|t YbNXAOlz4 +Supplier#000691410|iS3rle7IjQUq4H9V5PXjAJYj7z5jS +Supplier#000691452|ee1grKU,Lb51ltLtG +Supplier#000691551|EdE3 gn0XTSyt3m4aL3C LzraEmDbbW,hirWm +Supplier#000691559|cAKB44,gpqAExW +Supplier#000691586|IU8QQS6GPli2n Wb,pt9qTuj9fa +Supplier#000691597|hs6lvDPEeuHQY8qKJwCDhfk4wtZSudldNYBKlbcG +Supplier#000691740|GYm2Gv,usT0tQe0uGi +Supplier#000691774|ngLV8CtqmYDFn,874YvUy36tRs5bxi3y1B5Cgms4 +Supplier#000691792|KrUWITMzCck61ADs1y3h33DrRwTUMgWY nx +Supplier#000691803|sLHbBIqCmaFPl9U +Supplier#000691854|528UWWErHmwOuiJMVEnStb91ACTvhfp +Supplier#000691873|tmKcYyqQBsqhblqST83K2kdjx +Supplier#000692005|,,fzwbXHZ88,IbaMyspbf9 +Supplier#000692035|GF1Nh,EKjD5NW7pUQu NvOrvaqCIZ4 +Supplier#000692081|aQw4nJ7F9ypakkmksSVLRKKQ +Supplier#000692118|whw8VMxljfgFmVuafNkJsII +Supplier#000692140|V6vq,LJiv4t8OKQXANsrTC9FAo +Supplier#000692234|GiZ3vWpqrcLMfONusjPK +Supplier#000692515|3mGeoQyIoRb,owj1dT1v 4AeBFrkEZrRJPkbn +Supplier#000692520|r91JS47lKl +Supplier#000692557|vXGZfZkr6nuoyNos az,sSDHGIOSvnWx +Supplier#000692569|dLs0dB0SZLYy0wbMorK2uM41QmIucI +Supplier#000692730|1Jt0dizvXPUWI1VNHc6pYM4MFVxruYu4Cf2 +Supplier#000692740|myBsZx,6c9h9k0bWAdF, +Supplier#000692865|QApRZy5xV,9FS6wFBu2HXUVNZpX6 +Supplier#000692867|BaZzXqYhqacclyWL +Supplier#000693047|jX9KgV3VrfknqHEJqx,d26Nw r5h3tnPEW48e +Supplier#000693224|fpn, 1Z oXOStkq4DDLP,xPX +Supplier#000693233|FkGhFDW088mpHHLk4QZDhP0y +Supplier#000693314|ghh2jOC95UbSOxSWuxVfVW1 +Supplier#000693458|L6q9go8zBm,4IjAfcWypzGaByjWN +Supplier#000693548|Hsyldb2s9j,YZwjrj8TVfgBcF1 +Supplier#000693624|CTVxJyHGJdTLWk +Supplier#000693664|eWj5dnP OIjAQ933Cl +Supplier#000693666|D8kfm0JALflyj1xyXsMt65vDA +Supplier#000693667|H5hgs5zKSOtwBCOTcoM huaz5dnkjG3Hp +Supplier#000693678|62Fdj4tcpC pCl +Supplier#000693771|dW4r4,rnFyO7U +Supplier#000693828|BQqdEIyM23FtgwdBvu +Supplier#000693997|39sXqqIe2RIQS 3L3T3856zRMDPkVGte9NxiFQk +Supplier#000694103|yFa4Xg5GcFk3M5BDa +Supplier#000694111|Z4gr6h6bruMor,MJl8M7hR15S +Supplier#000694129|qardu8OconQE69kW9lNykHxh +Supplier#000694296|zhNR2c4uc1LItGMu1t8dxbKYBmqXLu +Supplier#000694326|4e56qZML4O UjBCbJNOYw9YcHvgdeZzXAW +Supplier#000694392|0x4tiSHRcgL0,LvqZuOTHlqboq7RMscWlVA5qG +Supplier#000694435|n3Akm7ZneRwfUTTxkp0A2NrUa 1LJ +Supplier#000694462|aGAdo44Gwo1HVcHBo08 +Supplier#000694469|7553BD24GNlZeNaemkVdompQd0l3k +Supplier#000694488|wFPf9uc5fq6 +Supplier#000694502|iJBCZsU5FileKNGX9vfpEyI +Supplier#000694597|FvdADRxQV3gSc,fzG1bueNjBxM2HljyUax EqbQ2 +Supplier#000694719|zdYBpbqOk5D9u8q,sNAB +Supplier#000694770|Lgc Umz4gf09wr58FrlUOjniGcijCzomeU +Supplier#000694899|6B,4FibLo5kN jC8 +Supplier#000694999|4E1rbbP8cB33ZuYZ6kTfn NDd,KF +Supplier#000695004|pIKV7NjW6kJo81C5Dk1qrJ +Supplier#000695174|CM A9KfysFJmjAGszPY +Supplier#000695220|AyWid81ThBqFLdwWjhBYDHacdK +Supplier#000695378| gOwC0K3QmQnHC7fNCQ8hjUyUqbPQVSk +Supplier#000695473|cXOg,6Q4TnXJlX67wrKfz +Supplier#000695488|H7lp480oUndEbesPeNjgsuiHWQ8WCGOKcr10YrL +Supplier#000695501|pAsggUHx2fAbkwwyC +Supplier#000695521|cYhOjW2sL,4q7l9Azdc8mqVWZx8uDCJ +Supplier#000695652|dWvyC2 QIk1Sb +Supplier#000695681|bmNQfc3tTQaROkXRSkWXd6pB, +Supplier#000695765|u0sgdN 1Gn2SyFzoSyDUbU,r6V4 +Supplier#000695809|0RYW4r7NIvP7Z3LBeUJyq DR8 +Supplier#000695834|7Lwawg0WuDOX,og0qU1ls taAC4frucs4j21o6O +Supplier#000695881|O9o4El4RyX0zH yfvuJiz2t8G7hb2UAYYsFEm +Supplier#000695905|P7XGzdQFUCNVVupLkz27H +Supplier#000695910|,IVAu9V2vSC6RPUIA5H +Supplier#000695934|Gg0TV,4sc9zizxxqIuVM +Supplier#000695992|bs81QMXxfXLBwsipLyR +Supplier#000696004|p3XAFWPxYgLkhZdVAwSrPu +Supplier#000696092|4 k8ACybgHza +Supplier#000696122|mwCrEI9yzjRO to5 +Supplier#000696211|VBZEjZPtTPhN2xoY3xydgCn +Supplier#000696247|jToryxfGy6xLS9X +Supplier#000696285|gb7ZxssseZJXMf3,t26AOqjNkJMy9 +Supplier#000696382|NBksAixlCLIxo4FJ6X4ApEb4Pmi +Supplier#000696420|QD315U3pyo4wdzKjvyJ7 +Supplier#000696446|qs2glsrNMBCA4Ns7zOixTacvh0sXP +Supplier#000696482|mRemGEC lr4TB3Z +Supplier#000696570|65 oUHzUFxUXbM8JJzUH9e3m,svT +Supplier#000696579|ZrU7JIozXr3eKLVHMl0lV4HmcHPXgqH4Mkp4 +Supplier#000696598|SQEBMAC2Rt5BFEqJxRLOexi,x +Supplier#000696612|B0Q x20LseaJq1w69igkdLic0C +Supplier#000696654|b5mYhzLDM481A67sFazgk4h53PE55sigDfXSAfk +Supplier#000696747|Kgu6F1YYP9MAyUPoj +Supplier#000696883|WH0HcinnHUlJ GMJN3UEZzYi731O 4x7qhr3 +Supplier#000696907|,0EkEuT4vGvCaWIqvaxcQ10ap +Supplier#000696927|ibwsapUN53Tt,TBVH,y0MSG6B2O2GAwv +Supplier#000696966|LskyEMpdDONXFn4rS,f 8xRcAc8R0i Ky +Supplier#000697005|dJXBVujdkas0P +Supplier#000697034|i5 IFUkFuzQgnY8Gw4DFFjxT0pXLNVa57jEPpsD +Supplier#000697081|BxY2aMm1Gf0Z1MF2d4XMZMYOkNZfAq0OL7Hxvy +Supplier#000697350|98Lhj2rFQqixxn2P2GzK aOX0TQqwu1 +Supplier#000697359|t1jYZ9GBej +Supplier#000697373|uTz3w3g347kiGMTFRnuY1hm +Supplier#000697392|aZ4,oFFxNsFR9Co52 +Supplier#000697402|,TmVmHqhhSw +Supplier#000697447|bICgbOV7GUptzHGcIZj10IcTAIDZf9In +Supplier#000697523|85KOpPHGgxej +Supplier#000697532|SmwoQlRmpRHSo,Xf4csFxpK g7bmrwNt0sI,lg +Supplier#000697726|cqqjvy5kXyqGUZcujR +Supplier#000697757|GauMhF65EmmMpWYt7K +Supplier#000697778|Utgl75Rrnvprnh3 +Supplier#000697794|,gALW,ahaj0huzItP3xZWG5NrgfkOZBON7myI +Supplier#000697830|KM MLIh2MFaoTcO8 +Supplier#000697855|IQt zH85oY2sLHZRhj rMSQ2qiq8hwuN +Supplier#000697953|,RrehJY4RAZbKhs64OZQpNUjZ +Supplier#000697954|OYOXIEYHNX0qO +Supplier#000697959| 3kuKE7S 1dzS6Si +Supplier#000697984|Mrzj2AAgZsim,QxIpSeE0d +Supplier#000698039|1WGgyU9oZbBOfUEqpUA +Supplier#000698136|SJpd3pSywPhQ3 efxpFv6GCjS8B +Supplier#000698156|e4PO7Rb2JSx7T,pLz0FlGZHTaQC0HLvRunQ +Supplier#000698189|jbGe,jHAHBZ0lu77EMwIDa cV49BIU9O +Supplier#000698345|BLfvJyFzzfDBRF2arrE3 B +Supplier#000698369|OZyXrI,r6UT +Supplier#000698389|qy7gZzpuGV1NaXJV4m +Supplier#000698421|Ij1Xx3kuWoZizlFEJbD1kk5wv7 +Supplier#000698423|Ba7PfU M5ZrSiuuZhpHA7ZZyI +Supplier#000698504|C2xh8KwPWK,T1r6 Qrd ebg +Supplier#000698507|JpJX1l6BYMjr9wB Ewb4PT4GFfS gmOMA0rN2W0 +Supplier#000698537|,84WNS0lXP8omNexZri87tZLxyufx4i, +Supplier#000698557|nAvUTLKdl22GRchwYuE6sKF1T +Supplier#000698585|G6UZ4Jj96wbqsRI4wwuPpE7ESHpanfDkyHbGKoEs +Supplier#000698799|f8T6HDQWY1Iy1IKBX3LoWhusQVdTj8pbcgscc4Jv +Supplier#000698810|wWI5UD5Bwc2AfN3iW +Supplier#000698875|BgHDvnKXZRPMV0dHHMbHtMfD8Gb661LeA1DnM +Supplier#000698887|vjKHr1JDV1Rferds9zVCgI6 0d9nt9DbPDYQOqv +Supplier#000698929|7mLth6HZ2tfnJsUjtrjBtVI +Supplier#000698956|uyDt6R4R0gLxNTd2 ,sXz8jTxQ +Supplier#000698969|ellT9OzSEDvUqYaoiJy76HrEKqYpBEcceG +Supplier#000699014|6QIuOh jl7IZq5HSQ9L3x +Supplier#000699062|9P9zdi3sBaI1yg +Supplier#000699079|M47NXSvTvbq,TIx1akhqw2 +Supplier#000699104|7j55d6JtNMOfQqW,j9l3ecv0BwZ +Supplier#000699117|Lyv3ZSIyg7IoWc9BCm,xcQVc4fJCIs3wvqgwlp +Supplier#000699172|RbIbBfw27civxyc,cw8ZaSQ0GEZF +Supplier#000699177|VpOdHnHrRs +Supplier#000699193|KhFsSp,oy70hMgoM8DU +Supplier#000699238|Kj2w24 eZFUMzyWcI6yLTd6fc +Supplier#000699257|hmhlzRiKZBTNZQAMtzY2WPtHNgtTcWwhdZ +Supplier#000699271|lLlDe7X8E32tzF +Supplier#000699291|o0UHuVwkJuGxgdm4kY +Supplier#000699333| WWDa44pi4y2XOUkAZrRbqXfIy +Supplier#000699421|ZG6cIO68L5T6MwxTw50 ,rYCiBz0SWYa5OFiP +Supplier#000699450|s9DqHcO7A4ItjzL2Tuc7Zzc0vHMXyHdQt6eR5,34 +Supplier#000699517|43dBDJywH8bO,lw3goALOFx3DzcMZQoIpERKEsuN +Supplier#000699614|GiFGURjhKTkZOF5P1MRIMsk59vqeYj +Supplier#000699644|xVb2g0hP6JBQt70peAH +Supplier#000699647|oMk5VNcPhcYVazqXy29aGiCWbGNobkUBAr +Supplier#000699702|lfA,GnMvc6JrrGWu +Supplier#000699834|joIkFqX8p wqLW5Zo1Cf7A6u +Supplier#000699903|oJMVgl3aoWCUMS44Zhhk1 +Supplier#000699964|QIu5Kdto58whtpYtDwmDL +Supplier#000699978|UlQfxXK815a3CwItkKJecIBck3nC8V6cnoHImFMM +Supplier#000699982|2SQPORraHUgTnDXsMTmePg1nsb5EcxOfeTZouqAu +Supplier#000699990|Ptxgyhcv4xwbhrx +Supplier#000700025|FXWF7DcT sjqZxodEJc2Ks8IsyQN5gJk8Exm +Supplier#000700076|2B2u1eqhWS +Supplier#000700079|jd7kMLtRLo3r,J4RYphgih0VaECX +Supplier#000700142|YSbvptDjCcRPBkBQy2wIEE9XT +Supplier#000700300|t4NOypBNxcW80 +Supplier#000700331|itSSGi,I4s 969rC4VIM47kIeVcdXt4kW +Supplier#000700345|nlmnSV,6FkJ2UjZSY +Supplier#000700439|J9lJjOVIPG,0I6xj unCEdhs6wqnHE +Supplier#000700476|QRLVEBMhP6s3UCaa7TSMqUwL87L +Supplier#000700503|VPXIaD4H0EPW +Supplier#000700532|yrDY7nho4aG3S14upAx4 +Supplier#000700550|DO,iuybfNe3HtLFzvr4tYrVfRMy6WcGf +Supplier#000700580|Y3TmOyMnsXJjiCZvlVTZV0yvj +Supplier#000700708|xuSb66XLlmNXSBIlfZJWEh +Supplier#000700762|QryqPQBW8AvPitcLlnUwKOhw +Supplier#000700924|0uYidhIhcJ +Supplier#000700981|tQXCKGSXo ab3pkesEgZ zQN58ig +Supplier#000701151|n1uVz0cVxfSOAShblm +Supplier#000701178|DQa4Pc6aVNLxwM6sl1lOGoDhlRKC49Pz7y +Supplier#000701271|zb,dfRROaykDaT4cBwKU +Supplier#000701284|rdfLhblgFiiAFBmEbCT3g7 +Supplier#000701352|CoZREE,MTzCM0hkly +Supplier#000701473|nzg4nlsRmvricOEx9Yv2fZdOlS1jq +Supplier#000701495|A5HP0fUHAcZGFL0lD0qHd1yryz3G2H, +Supplier#000701504|c,NPlpoNUru6 t pZxOf +Supplier#000701599|whZPVczCdI41bdj9H68DO1OkD +Supplier#000701835|6Ufl,Aos0AMGYtnj4OMYDrMpwRCe4gbV3s6VGx +Supplier#000701877|naStE5O21x5IR5pQNVwgbuVKPW6b +Supplier#000702005|i1KNM84Wp2OlTAAwkCJZcwVn3yUs4Y0da1sNS +Supplier#000702310|Omk1gXbK8aFhFvXID4nuI,t2YE,5j +Supplier#000702352|G4tfSQHUrWyfK +Supplier#000702418|eVlFwyQHvfPmw +Supplier#000702446|Rq7xrnjrzlfEUmapSWW3jefBLA6SC9BQyS22 +Supplier#000702676|Ty E0L 4X l8ilrbZbcN +Supplier#000702688| EUgH3bljahpat +Supplier#000702723|4Qlv6LVxtg1QbRVlihsGeAC,cvtxOmZE8 +Supplier#000702775|QzGKkRteoQJ03,HkcOK +Supplier#000702786|JJbHWvHrXfV 1d77a3pIHkncdbdX0FdtF2t +Supplier#000702870|kKw5LQfFoSesBZH700xGy7u7Ch5fRqKIN +Supplier#000702889|viAveWGrU7tBIlWq3fV27F97bnJjU2gzQFnCN +Supplier#000702899|dKwH8Lgc9xzP5OPE,GYkjmoHjZ,7JGNf +Supplier#000702946|8kESjDE 2VL1OBUrqiyWUAshEIOAG +Supplier#000703118|Ykc2aLOiO5 +Supplier#000703138|W4ov,d RG82Cv6PqH6n +Supplier#000703431|H1PQvseFMHWRR7A7cinNBE +Supplier#000703467|yuAaUjGTSac P4qO0c8DIBDaZYNdIqh +Supplier#000703507|WoRpkPnbqgmVqwah0iW7C04 +Supplier#000703564|rBb4fFup2jYh4Mq5x +Supplier#000703673|SALpKMKCCldpMRnapkAL4TteosnL7, WsJd67u +Supplier#000703775|mKXoZIYTR9XbmEIxq +Supplier#000703872|n8zqfXNF,47TD,GxgD7lKTbt6cfysq e3zW6aC M +Supplier#000703899|a2JDO2VUgahT +Supplier#000703942|WvU5i4 JZahL2RuE,hd +Supplier#000703968|JMrsE3Xu2FohJaNz +Supplier#000703985|j1d,VBthPG30PlHOJUaktXL +Supplier#000703991|eKgBD8szQnMEKIL6F4YX1eeiaIY +Supplier#000704009|hDi6Aukd6nF1Wjv80OMDQb +Supplier#000704029|dp68 mN77bc6RdW6R +Supplier#000704042|uR5a,R1A6O3TaB4 +Supplier#000704072|i0Di9ld 7V2YEQobbrsNctk 65b,SGnGU +Supplier#000704088|EEoW,skz64N +Supplier#000704138|WSxwjiiCv38XM5 +Supplier#000704148|l1VvNppPYoLFVaiQbOPLtKDIUoy9B,6f i +Supplier#000704149|D7PP6oCZynW,mEylEKmre5 +Supplier#000704278|6oLQiCU9OyaTTHCyr +Supplier#000704310|AdcKJrf3LFtmazLA0iOxUUmZxrIYLZxhC +Supplier#000704415|h88yb10O4KcCaIkNFUYwqSkOv5ezHvo79lH a +Supplier#000704479|,Cdfor6233I +Supplier#000704483|CjzrmNkOktDinN +Supplier#000704553|jWc6q7LDHiWCP18JayymACKV6KO2KHqnxaRhvd05 +Supplier#000704562|Jbd20qw2k3Eicu36 +Supplier#000704644|04KrrAn6 gQqs4Tl7b3n5bNr2mmYk +Supplier#000704781|TDcWigP4PSg8SscB +Supplier#000704806|VvtFYRRCDpOmRV +Supplier#000704816|ijR0Q2c5PMq7sZzY9w9yeTmrI25 +Supplier#000704834|IVpS2B89Sz20O,AbreFk5g2NspffInbylYDKa +Supplier#000704868|Jg99uSt6vOs3frHwcje 7QViCclknpmR8sVj3U +Supplier#000704904|d1BcJHr7kI5wWGYB,BmrAf9qe6rqMObN4iQ +Supplier#000704911|df9fhi2T2wI6w9j0Z2e C, +Supplier#000704987|WERPVX0,XdvHh8aZoWu3ecsZJdkgtfX4HCbp05 +Supplier#000705049|7M,RcE,UzZlDUi74QfsP1pU0BU +Supplier#000705119|GhVI11VTy,iyfezeIPhMWviD,O41iIZ9kom0F8l +Supplier#000705331|sCnyu1HTCjSyKnfmXI6 N25bwuqupY +Supplier#000705453|oeimkGI,bDE9 +Supplier#000705488|GmQCkPznHDb0,ur517OAUoK +Supplier#000705497|L9zl9INn2Vv +Supplier#000705520|GLAcBSYjgP1A +Supplier#000705541|XHzOPUHK f,fTFVLxKpijIag +Supplier#000705572|xXNcEDiOmv0azSsx4qM,gXr +Supplier#000705627|TcUPH5yApRY1sfUCK6a5mQ0MwDCUhCY9mNdLh +Supplier#000705662|O0DYYwjIm2D0ujpB,TI7,z4i +Supplier#000705677|hMYgmmond1TWURsDItDm7lWisk +Supplier#000705749|la1sdnH,PTB0s2Asaz9zuadMwPiW +Supplier#000705801|biq9yLcrllk0PpIE 1DlmSYP1tUiyXSFKgiiVymG +Supplier#000705807|jTniw7b4YTqj5jH2KJl7h51 rdKgofMxujH3ETQ +Supplier#000705826|JkQFSfJlph8cznl1T7qrQ68aE2wXmy0S2 +Supplier#000705882|z9GH3VdoS8QfJT6JT0Upt +Supplier#000705989|S 0VmPpiIryvUWhxZ7 +Supplier#000706045|LVa18HzaqGbkA +Supplier#000706069|lyE0dvjRrAHZShP40M32Yx9UFuQRQ5 +Supplier#000706086|b4HxsyyZViy +Supplier#000706110|nFAQ3T5nQItmb3okeTpFbYSWM +Supplier#000706125|7pUpC7eNJ1Pjn6AO8ljFSvVjV9s6C3caachT +Supplier#000706136|meCQQSxEfiXnWybzDdm1p5 +Supplier#000706161|Hnj0B5QPupDGx3JSO82 +Supplier#000706163|DrDSEhWKqgmiSvw5iOKfm,g4iMiI9u13ul7Y +Supplier#000706185|mSv23ETZY4bxcdMFPsi0b28fI +Supplier#000706223|myxcnjN4WpLgQADQ356CwzMqIG5zbiO7E +Supplier#000706228|VdUjwDXOm8P0TzuHpwavLMV2 +Supplier#000706271|Y2HYkvfZUjJZk8t6xAYQn +Supplier#000706334|1zB4AFCRBry2GhTbyCYDKa0pdqr5W +Supplier#000706365|mlT jSKK5V,e5ZVG +Supplier#000706383|qLAOyz6e0qZ9sSKiu138NsUSh8OQfJ4s8U1ky1n +Supplier#000706389|vMTF5Qidz1uvbT4AcS +Supplier#000706436|WRVAGHsL3O f,CvPSghZsTNACii4lRr uomGvM3 +Supplier#000706467|HxtdzmQX4 JMv3ghbXd6qIPQRFV3ALgfyCkmw +Supplier#000706475|wq20G1A0VmVrWIrdlujV +Supplier#000706504|uXD9X,Dzv74by8LcF86hoo,by4 +Supplier#000706514|qqXyJl1XBqHG3sC +Supplier#000706556|c1oe3WXv5PPkU9gQ49ImTDjFDytkbZAerFeW +Supplier#000706569|d1dZ,u3WcDLd +Supplier#000706739|8FhHBgFehQ2YVw,xqOpuNhWcaIUXy8YEl +Supplier#000706844|3umYcJ3Kn3XGU6eOU3nRVN22yaz7H67DzNGqzYEE +Supplier#000706893|NvA4QmLZi7GOb +Supplier#000706972|fIPLHZpkx9C,MQcqTUr,,QdY +Supplier#000707071|Bh6IDZDUarxERBbePip83th +Supplier#000707142|WeEl7kVf,4q qGYHEiekjb24 +Supplier#000707272|jSAib2Uul,t1n +Supplier#000707324|jLP1bd S4cHF4siXMDdaP +Supplier#000707419|MudUs8hb3PYU14JZz +Supplier#000707447|IXpc6rtmNzbFbDW2EMdQpUfC +Supplier#000707561|lpjA,fsy8tdBCc +Supplier#000707597|bPDfDh7uCyo87lGx +Supplier#000707644|op3Qt8J,enyBF,yPQKcYfD +Supplier#000707736|jEWWXBUrHu8ENiC +Supplier#000707737|4ud8uzIk9ZQ17u2n +Supplier#000707738|OADpkfxwNnXqTUgzDHfgFwciaHakjLVb4lwF +Supplier#000707769|fEJIKl7iPhE351UhX2naCE +Supplier#000707775|tQYRlx,wDl +Supplier#000707846|zjJH4YlfPXf6iEVL8C +Supplier#000707980|Muo2iaZUFKcpQtHRXHLecCuHnWL5rxx +Supplier#000708086|imjFWnb2,x2eTkLFlLSVG4bS7DbVXEKe6jVzjb +Supplier#000708096|30QBrMfyDMHNrUbepsMnjsznUhStso +Supplier#000708140|r2eduJ1xxx7vdDDCVAInJb +Supplier#000708200|yQtbGCfo8gSGGm8E9bFXKIkmCnySpnlUy +Supplier#000708207|xZ6WiWNbAw6FHX4 +Supplier#000708312|CIpvBKGpp0t4HCeFU5BomVFnWx 365zwFjUd0d0 +Supplier#000708352|iXCIggY7kY +Supplier#000708387|cnD5FFByFHeWmAnedsCjM,jwqymhzrz +Supplier#000708401|vYFzSS9VBTY1SMMjwzFsooShGJyABwV +Supplier#000708470|Y,pvZoHG EVCje +Supplier#000708482|tsEMpRWMVXcyufLiwArL +Supplier#000708526|Ic1Kn7JKzXwHS8fSE9qy7Mgt1gDguGXqW +Supplier#000708587|CP9 USzof5 eOVaEESyni +Supplier#000708640|SilBYcGfytdsp2cWQ,B9FH +Supplier#000708675|LvmKpnJJXxFvhijtUiLzlWLNv19Iec02tLE +Supplier#000708679|GMHsZDmHNyLEFtJ rWG +Supplier#000708692|HbcexZjixlWFVfo0 +Supplier#000708773|vptChl3iphNBFj6I LpmH +Supplier#000708785|c2ymnedI3uc +Supplier#000708800|XTKCbIKjhOCWlo6Rb +Supplier#000708810|su,eLkMl,L0zc +Supplier#000708840|efuoqFrKHgRk8slcwseeOfbvOI3z20Oxz4t1 +Supplier#000708882|oFCQgaCE2M0rIYJF0hzfv +Supplier#000708898|3paW4fLUAcZcFxQBrQhq4 +Supplier#000708976|1WL70a7s0SX3tmkCJSEksMOE,ENYqXgH1pd +Supplier#000709007|kL7MW7i GwkKg5 +Supplier#000709024|D 20I0 zzA394gsNH +Supplier#000709186|zKRy2Ro2mfHKcd 6m0e6qeFX7txKPaTsVGwb +Supplier#000709546|4o2Ue,wYu fbyHZMgR2xESISNFrNJ5mZXY1K +Supplier#000709642|Xs k4JsILQDAkKaI4C7hRG6BA2 +Supplier#000709643|YSrZLYr6asXEnwwge7 kXQK +Supplier#000709755|vcUsKz51Lcv4oIlrl2c,5C9UMIWTangp9I +Supplier#000709756|6u9p,IW,5AQQqoaB6JLiEb6rTKKsPjBbZDNmjq +Supplier#000709828|ryuy3ICx1jL44 +Supplier#000709872|Ts8R7x9pAoRJkK3TMrI0TI8qrF8aCH7EDmvUL6b +Supplier#000710026|hPrqt0sYZ8Kp6Td7ygp7rGI +Supplier#000710080|KTeEbQpn4Uoy1u +Supplier#000710102|38sqepE5g16FVVCSy72xitk +Supplier#000710158|R3x3ClIWucI2,h +Supplier#000710190|OCLBd,tzFYU9p8NT1T5V +Supplier#000710304|,Jsrb9YTmljN07 +Supplier#000710327|Qc7V0tSWTsfvyM +Supplier#000710358|PCKRbk 2klVGeJ1bjJijAo +Supplier#000710561|Oa70i0X qrzvbqwPya0WKZYgDgWB40U +Supplier#000710626|spwCQ4RUHpa9Aavl aw +Supplier#000710646|Pr5plTzdyJBB9nqfWRqQKd,dwKOLjUdMzRPFXhGz +Supplier#000710650|YeCDp4IanT4E1XbfQ8j0LRjPxDXfaLbfWxj4YfbN +Supplier#000710750|MLThLVRfhE0etrLF8bmVj5g6lSGvEsiOS,kmF +Supplier#000710815|ZsEuI5WSnbGTYu +Supplier#000710818|hF2mpFdHkGuE +Supplier#000710834|3TYKOj9dyUCi6F5 +Supplier#000710840|H70omIxz7UVDG2KRS4iEVtDY9NZ5eoa +Supplier#000710857|X 6n0Bcg0O6Wut7hSNzfiMf215LmWP +Supplier#000710871|693ynfVbCJMoG +Supplier#000711052|BZAE53XqPIQlgextllABQ1R5mCNqKoQlz c5GUX +Supplier#000711103|xcuIQjsFkT8QJlV ,2Ywya3t,dH6FAbn33 +Supplier#000711149|9wYQBbG4F VwBM NFcUt6MUInCietncOWjW,d1YK +Supplier#000711239|WxQVA3uy,Y0A2QTUq6TL0j1usIyCBfKVcqBsr +Supplier#000711266|jfS,GRwj3gQAmUjqIFrV +Supplier#000711349|UEkNDqb6eS8avTm8Iu +Supplier#000711356|EABt8E6E0msEhF2P0r0HhQQQy9eVbEZMoBR64J +Supplier#000711357|rv1fVWy g,KQgIolXfxm,sHxQwlOw +Supplier#000711416|T21d56esdtT8XI +Supplier#000711429|Y49cFJ5QzqPHOaSb01fS1Vlg8RLTDWgK iJ1 +Supplier#000711648|jZcVBI2, ZOSwCypXvERFXK3cliy Hf +Supplier#000711691|sZMB3tN3eYhrT4SmZ1Zyte +Supplier#000711712|UBz l,JV2O7bae3bAIhWkAZoD3VU +Supplier#000711757|zmNVt022YT96vwzDM86DX +Supplier#000711801|kvnGPgExADk,q +Supplier#000711804|ADMS4RppbjgriXlMONabMvT ,i,vLJdOBw24wgI0 +Supplier#000711898|dE5SeIR9G ZM,D06ir5ez2I,NXtUcS7HD7sgvq +Supplier#000712025|Z5yN9SLdnQ,Drvzw4GjjqqIjjLcPVsTf +Supplier#000712083|GESo4d wZuuh4qME29oPs8 +Supplier#000712191|5fCf9k0G8zhcwlV2XRT d0izfPQOcVpAX1Vi +Supplier#000712252|mX3i R,s93n +Supplier#000712290|GCUzdlHzLe4t +Supplier#000712325|d5Gd4 xzHy +Supplier#000712385|nDER2bUCJtHPnJZwffN3g K0ZhDsb +Supplier#000712424|UlxM4QTYFDKUnyGYZWNfTDjB97xlKF +Supplier#000712425|amUmkS5FI8p0E8ee2B8,nKkX +Supplier#000712579|9N9XsaohITruwJT8XoiYV +Supplier#000712638|oMSmciN9ga0FOUn2nr +Supplier#000712639|OM3bjqKadYqiE,cO7zOtyynccKCIU3EKtWDYbb0 +Supplier#000712697|GmAV2v,BCB7QFLG +Supplier#000712729|vc9ecYUIgm9Og7014DcOEbTHTkLVlhMSATiBbo +Supplier#000712769|3JrjMZVqkBH1SEXz9wMkgPIMjkZ +Supplier#000712773|SF3SQ10J dty6HA,V2Ew +Supplier#000712829|e4hcLprHlA9ig6 y3duBYCtR5bgCtxmY8KCfMD +Supplier#000712840|v8Yy6ki,z5Ug 0JrajOmyFoIU7 +Supplier#000712989|O61V221wThdsMvcSRCLG +Supplier#000713009|YFBc2Z0s,Wao6mgWeP rQzYgxyScmI +Supplier#000713073|OR5WXobYZ1HfROWxBjFHK,D1q25V +Supplier#000713088|i 8O1FRKert7WTYEf +Supplier#000713092|HYAZ3hUHzFZUQy5tncV0Q5A5NnbxfnHPJhH +Supplier#000713126|uhOI9dMLOqe7cc +Supplier#000713206|JZfGteyyM8ys8 9lTXAKKSKmn +Supplier#000713291|NKZJjgvTvmdkpGel3b5BehqpoTDy1 +Supplier#000713317|UCygT9trP,JH +Supplier#000713469|m,w6DGXr17VhsiaLJ 0 +Supplier#000713584|qGBg5D3htbbohFNXrBUV +Supplier#000713598|4rNdo7ExPcSaQJQ3zVct2DczFP,C81kRD,,u1h +Supplier#000713684|Ar9dnt4HCY6q7B +Supplier#000713698| KaEAuCj4uYPyWXu,3STfn +Supplier#000713716|mmt3N6iogFmXToOQuLhdQeNi +Supplier#000713783|HQlKQnC9gzEk2 +Supplier#000713792|sc4jT 0wNmHsPO +Supplier#000713794|ueo6FEZ04MXD5tlTj4P9 J1o871G +Supplier#000713821|5pbI FZEakYL5mVbuZ3,5sCaII10WZwh14 +Supplier#000713850|G2oiOrjCCuhmu2QbSFKsG ,wFrKTmZ +Supplier#000713899|YbfniRAclkCMBtayhLM b3dX5U9X65dy9v +Supplier#000713935|3OtYsznbsh6clIZC,unN62kcQNyO +Supplier#000713984| ZFtNu7l1e2Psg,jZCZTu qO5vhx61 +Supplier#000714118|CvoDojIlTkq3GcnKjeZ0XwyvkBmTwBuCTJ4i4 +Supplier#000714153|LgYE0BJUmaqiWh4CNuD,CA0Jv9EnsGCjR4CWR +Supplier#000714173|TlEMEQVLvHAfFC +Supplier#000714450|TjxTkZ1GO6KeiEGvQuNBuKL,igm2pBwiySTu +Supplier#000714621|wIcpaP31pvpgjAybsRzMGQzIY7MCu7VSjtVho0e +Supplier#000714636|Tll80HDAscEnyv +Supplier#000714760|nQ,xeQ8m22uqD3RbG0FO,2dntDFbzTpyDcvfjwEJ +Supplier#000714988|PXJvzP7CyyzKQfKgMqFDuSZrrTyrqhR3 SOk4K +Supplier#000715050|p6Kxx1kTny8ph5Inwuq3k26 +Supplier#000715067|e5ks9UNBtFaM1S443kMeKIL7TM4X9Z +Supplier#000715118|W49xC1OHmL7Ncepk3ZZvOVoph4eWuyv6IhCu +Supplier#000715194|Br5NujniLN0FCBBwT9TCkIlGb9SJhyOyjEug +Supplier#000715232|C1op2GIePlhCZ37RKU +Supplier#000715256|FEIrLgWpMYNDqfUUnds,c,0 +Supplier#000715301|LZnWeTdwman2sBrEuLcbYSZe37Z +Supplier#000715312|P0NhflVQ 6AMF9Q +Supplier#000715314|8fEH6Cb31RAtvFdTZ +Supplier#000715341|6JQpvoIuFViQxBEkvL +Supplier#000715345|VC 2Dv2IvWYkEH2I Yoq rNhh +Supplier#000715675|PELhC FS,DmGdOsOsPcdaLRxxTmxM14j0KO EfSX +Supplier#000715736|Byqc4LMNdofEEher,bfY59ZlvF35 +Supplier#000715755|6Id6xz6ZTBq +Supplier#000715881| ZhWo4j5JS3QkMBGUUkzGjpM6pi,Hl4jUv +Supplier#000715961|I6llxOnkpDgDTPg Ck3LP4ArT +Supplier#000716028|1AjcqEywElIHGw7QHDOn83l5U +Supplier#000716040|WV5rrxnSKCFH1QaOvRgG9BrnmnOYf +Supplier#000716048|Cc4814ob6IgyvlMh0vc3eV0y3MUTspoFczMi +Supplier#000716114|DN6LY4Aq7 y7Xkn xuSW4O3M +Supplier#000716121|VlwkOXusUd4W0CD3JpztLleSW +Supplier#000716131|dCuaeiCbIx7IU4woeTdC5h8DIFl +Supplier#000716148|HPEaQUWcI0bS3wuAGgm +Supplier#000716187|rF33fDVWRGm +Supplier#000716247|Dl2ynYJ,jG2J46gfLk1Gpb8MDbEFqYI5 PA1V +Supplier#000716280|,fxDh dIOCBV5BWJeyrg2S9VJLhmOEkIiv +Supplier#000716355|d7Wf6KOwH,kZ +Supplier#000716380|xaB1FlRkd9Hn7uaiUtxFw0MMVpfZXyXQXXUtmV +Supplier#000716399|tvv2hWu,rA4DkXpFCAcLuEiGU +Supplier#000716438|Zr42A46gr2q9Dv2gj0D,Ak3CyR +Supplier#000716487|wSf7ZWOUnxJiQecra9dbKiixD +Supplier#000716524|145Bnkm Wge4y6bC +Supplier#000716555|NsGC,,gl3duJx5BqmOrQMR4ao +Supplier#000716613|DP3IQSAP6cmC2tjCIHpKk11I5cV1C +Supplier#000716677|55 0d22P2foY3JGD6 +Supplier#000716689|1iyjSoUHfGmBgnDdJ68Pa6jtXrGU1NpEYhh, +Supplier#000716727|EzZYHf03S7 RPQ8oYBaKpa1YaI1gXtRd +Supplier#000716780|rpysOjJ5dbSp3qq,OZOKNa9 +Supplier#000716796|e74Wq4D6Qc4g5vd6BYrtm +Supplier#000716840|iNi6pMblK3yT4 +Supplier#000716997|Wr9WlWf4GvfjPDBqnDZDV0 +Supplier#000717094|XUne b9OCVhzMCE3uC5cW160nsvAKpbFA +Supplier#000717106|xLFzYIGJMxJWnqap243kn +Supplier#000717369|MP7W0LMM3Bl215F8Kbjb3Q4Kq,w9t0k1QIBW +Supplier#000717373|xPbjRPTf5DVMhfV8 +Supplier#000717495|tovBm2mfWlwnAVSd70GUzwCFbgvkI nMtvUY4f +Supplier#000717534|zKmHJ8Lx82g9Andb wrGOt +Supplier#000717546|mxcalP39uDJv9t37LDDrhVPAccwME +Supplier#000717556|hCV7s3ruMyuWjH +Supplier#000717587|P2r4LCb3qpUyuU7XRs474lvRxTiltHEej3bF7FJf +Supplier#000717871|QNz0S9IVSOd4Dp +Supplier#000718116|o7dN6yYbiFM5f3e,BQKOzkiC +Supplier#000718141|DNbAEGWsWzeBYFhNa0mEiAg6 +Supplier#000718206|JX5WHwOfnibZtSmCENv055fJshy1VM38hEXf8qg +Supplier#000718313|k87ZSkNr2oOmXeCT +Supplier#000718350|Bp74FLzlOuKkyyW60SzFZZV0KfHK1rA +Supplier#000718408|AzL54flhi4fyx5qF6BEwA2vlbOpuaSg +Supplier#000718432|qi,fsOzWPFXYR4NjZ4 +Supplier#000718484|IdhmQblE2G0kTO37ne9Icfqqh2XawJD +Supplier#000718530|UnwL0iWx52zWogVRr,2BYfFw +Supplier#000718543|kSIh1OCozjvIYmMtgSC5wZ3wCRplP +Supplier#000718645|M6ilyBSM53OA0Gyd +Supplier#000718719|ZRJ7nx6DyKEA8hJVg +Supplier#000718742|2Bk3veqilxeqBltJeLpjQUE8gIMjPgW2y +Supplier#000718786|6pMujCuQXQL5Y,ViUN +Supplier#000718787|BgRZCv03rESxQNYBPi7 +Supplier#000718790|7V0mwW9v8QYhDI7jY4IvC9ZLRrkhhRNIbrMb +Supplier#000718861|lJYMCqui8NH LGuLtOwQlpdG +Supplier#000718874|Lssb6eh4sCK79AWb +Supplier#000718908|AFYh6KFVonDcImgWYeSVI9EW +Supplier#000718945|Va,4KWAaE6TUJs +Supplier#000719043|CM3lHIjqie2KJV4C337roJEOnMkkiYBdrnl,xfGV +Supplier#000719044|jz81vdiJHyquMJenvF2tUf +Supplier#000719103|VtV4AIU6mILTuJ8tq +Supplier#000719140|,wuGk7JFqAl0R8Ziaiu496aOHp1kwJEGVEClIr +Supplier#000719228|P,kGLSn5n2mMX3XW66cMbo7ov4MtUQk33T5 +Supplier#000719255|mZPmi4EwMD5I0OxH41Zq9RRbkUu4L +Supplier#000719270|VYIxsS4tJqE1FltuQnfyQytXNPPBNz7d +Supplier#000719273|uRnvsJVxLNuM +Supplier#000719301|9CorHXaisb2FR +Supplier#000719302|GXoqmbJAdHID3I 1gUlPjAwIxKAz7RF8cjVw8Un5 +Supplier#000719335|BDq9d8JqMzh08w6HYYlunKl3rPWa2aAH +Supplier#000719354|qBPuuGSk7LezG +Supplier#000719374|trW4RCbDi8533RjLZtqmywcS0N5 +Supplier#000719420|159dAfp7bumOR2UsbC5tKxIOH p +Supplier#000719716|R3vFz4zG2F,88VAuENK3YcDtWu ADxi7dyEbtPxl +Supplier#000719723|GXrOwO6tLzK7 +Supplier#000719853|YkzOj7bm27HE,cUuqwv3L69U6pQb68R8Ndgb +Supplier#000719892|F2PaiS8BDldjzSnTG8nYk0ZE69l6qSawr +Supplier#000719916|r8KDrtBfMBdpXSdH41lu2YRcxls +Supplier#000719921|pEuOmkmaQDgQHLwh3nd +Supplier#000719925|sbfjbfY4SDh5LRnBCUcG68gK8AMYOLHfDzuwF +Supplier#000719941|ABfZ5OasOsbioF8uocfMjjKXc9YPEy +Supplier#000719969|XZbRICsZ4MLIeGhP,iAKjiQvG7oryPm5s3YZk34i +Supplier#000719973|kns8pKTJgTnQT8Nbl85XhVOeCRmbyyL5tkY +Supplier#000720007|CMK3eBldSUbDAfh54pykbCZzj9Azf +Supplier#000720054|9dDAnbFlxq +Supplier#000720094|j49dtvl88Bqh55x0axGYR7dgKR +Supplier#000720139|r7lbBMhhmE,NjjnwMPOfWFOCN7ngNOwpB +Supplier#000720176|1JT8Z68ZBfG,,43PZG1m +Supplier#000720180|lpmAPG5nsXdrkOWCIQTxiytxlrkoj6H +Supplier#000720186|ou7 05QWBcehNE44Y7gUcuToUmq3mQ9 +Supplier#000720189|JUpzu1x7CzF +Supplier#000720198|Dkv5IbP XZL20EUYamahs5q4pY1busMzKyl +Supplier#000720199|B8TP30Wo1OG +Supplier#000720215|4gQ4QlSeX75XzzqQZTNLqPXh4Dw +Supplier#000720230|xTEuyRDU8wRZlo1KpFPvW6dGZyL +Supplier#000720272|NhM8OHdT44bBi6tpeCYu4a +Supplier#000720437|dKXTOoEhmLP +Supplier#000720453|dByaQ,cw3zC,PY +Supplier#000720462|9JIGwy0MOSdj4bWDSim +Supplier#000720514|zs8XWjB2eHjyocrnzn,gbj92MjiboFxiOWN +Supplier#000720551|wSS NgshbMXllh7NhRWoDkTF +Supplier#000720564|OrKWqlAIAZdJCAxQsnyu +Supplier#000720663|qZD,BRItxiVAN2in71Pq1wPgiof6b,eEMjWx +Supplier#000720852|gsPVhwiCxIdNJkmJx2au +Supplier#000720908|I3LOLz2uhB97NCQOYPoyDy +Supplier#000720921|YURLrrZKyWVxQ yAguASAmlIhbRu +Supplier#000720943|o3VSO3ZdJuR4ymWZYEeqUtjKZs gxTkHk6BF94 +Supplier#000720951|bPCm1uSQMr zXT +Supplier#000721030|tlnNxiW5eMg +Supplier#000721063|Cy8XOkqVBPrEnQmjw,kpyhWLnMGW +Supplier#000721066|1lMG4x68C2McE0MqXo3wBhw +Supplier#000721107|QZobBCusdUscJMUB36qLujrHkKlmRuWDB in77v +Supplier#000721216|9wo88aHwqh8tJZ8jNypgeY6ZzlMSkb2pW1m +Supplier#000721222|yRPGKR,v4uUZUJKZfRX62MralXNG1C +Supplier#000721256|bEbLrE0F1azze,TfM +Supplier#000721259|9HwHeXgFXa1j6,,TJIejTuObYE1OXBc9SWCz3hep +Supplier#000721392|lQXpvyxrRnEo3RmaEZ +Supplier#000721409|psIrwMGWVcGJ f87KsRMyYoPhA +Supplier#000721469|RxpXLkg8k5p2R3Eu7KzLUVjFTi6i +Supplier#000721521|EqihmZQkWl4tGuesBvAqVXEdH3ZV3RKPYN,xAA +Supplier#000721657|nTh,8tNCLxWyOwCk8r0oKLBknNUaf 77f +Supplier#000721660|pCXuOa3g04C2KRt1dnWgl ralxQzdBwWWY +Supplier#000721662|ir1ZbQKADcdxOgSBho9ujjS +Supplier#000721706|Z3,a7vtGRl2DefaeVN9ALZnoKtgx1FT5E4Q +Supplier#000721714|BhreE2FHsb0ekjtqxGyWjLljglN0R6QRw8i +Supplier#000721717|mYhcdMV60kc6QoDufKvgrP9KZavCWg8xEZnoL +Supplier#000721735|I8iAX1xKYyml894UctGUo6 +Supplier#000721770|GF6nqiTLnERjdAvHana jRV9tHRbYn +Supplier#000721859|fOIeWY ItlwZ +Supplier#000721925|2P8uIPprs5RMnwHxVA +Supplier#000721950|I9xmmhRWrOcnG1IHHnyjUZoYBFVHG3tRxw9b +Supplier#000721982|p,LNUOPov2v5jL0Kk7 bFto,TPTnMccYaTU3hc5 +Supplier#000722033|ZIdF9B8zTHffCiRxrjZhivxw0kPvVsw +Supplier#000722094|isg5CteRwlOde0AjrcltLmlNDWFa6V +Supplier#000722128|KpJy2aeF7IF0IwRr59c +Supplier#000722148|O4z89733Oz0LDAN5WoLURn6xiUbwgNRckPb +Supplier#000722161|WZ uBU692DSPMAazLN,6G5GFqdpxpX9 AgiXsR +Supplier#000722165|j09Z r9JJVX9Jo3PQQ0hAd7WOot2zDP +Supplier#000722212|PPNG1sadLjUFNgowguFxSb2LoBeW +Supplier#000722226|AoKsWPpzvTAqhaB9XtzjB7tb7cuSbh +Supplier#000722321|gBsK 8,1,C +Supplier#000722358|C4a1,3v2X8 +Supplier#000722367|gv5CpiniiCSbzk +Supplier#000722380|YvjQxAhIjQVT maT +Supplier#000722398|Zfc8l8eR8qwcTm9HVq,miGHQDLnr +Supplier#000722436|,pLZSzAWp1dd1K0JlPAWBwSj8dHgmpWY8 +Supplier#000722632|pV6dOi hiSp g3w,y5PSU0DsfJr +Supplier#000722680|IedUovZg1nrMb +Supplier#000722694|,FzU5OlK6e1x5Vb2BxZ2DwcDMced +Supplier#000722714|GABh4hbMHFhT +Supplier#000722803|sYA egAGHGIE6EyvKNho0Gm DewSYy 7 +Supplier#000722860|GH8 nz0cDiyd E +Supplier#000722869|,Ed0Ni9g2mb3Rt +Supplier#000722941|y9NH6tdAAqxPNe32g,3yq6en5RwPSkJKt,e5Wws +Supplier#000723028|Lwh4q2mNio3pT +Supplier#000723030|wF4eyI,QFti,H9u8hx56Frqzj0unNTO9bMNyrYCf +Supplier#000723116|j jxGam pS +Supplier#000723206|qV3ZQSOyQXDL 8hQZvIywnIEqueU8,7IaHTT0 +Supplier#000723224|lWw2dRAZkfFF61emoHY3Q4KhZnY +Supplier#000723227|Hi4GsXuaPML44IUXi,8EYu7BS +Supplier#000723246|eEF3Ny5NOw1CbBZlWRNsb6pRKSkATPkC +Supplier#000723310|kvTPzH6DukPRPQRw5FbM +Supplier#000723398|8hGIs5axYuSEweIBakxYG +Supplier#000723419|DhTN aJvoIw lNWaaBZvH9RmKhBIBo9Luguz +Supplier#000723427|U39fXkEukH7uPWQV +Supplier#000723502|j0ImPiHH4Rdt PbusOhqv3XsU4WVuuZlI +Supplier#000723557|rhUE8dre,MupbAiIZfkxMvsLclqsb6Mg8iCL7J +Supplier#000723576|9aCV,C4q1ULiNAw7ZqVyUCI0scz7d +Supplier#000723597|,D24YFQqhLWe4v +Supplier#000723725|tCZtRqwHBVo7 +Supplier#000723769|e7XvM5jdzVaZeUOS +Supplier#000723938|BT0KJ2zfhXStV9k +Supplier#000723972|RAJkPgOlnKWf7uqg5C1qs +Supplier#000724031|B1LNTGmPxnuBJWMJRUaXuAivj kL9ZsUELOzl +Supplier#000724174|uIYU4mGKXhe3w +Supplier#000724185|9ekCiG3eKiESBkJ1fvGA +Supplier#000724259|K81jBdYtfclYQ3NO,,efDcd8HdVM1vTJJp +Supplier#000724294|xAXLk1GyR1qnebqyyAEUj8j1oRBD6Y KPhp +Supplier#000724311|q0c5j,i,jSSfkjycZjFZS1Nypea90YGvsALb +Supplier#000724428|qM4GpwnbNZCoc7G +Supplier#000724625|49sFppMi4oCdEtfvsQMM1Scam4l4SglOU +Supplier#000724641|y908,e19vez xUj +Supplier#000724681|Ax1IYsYsGVsXb2EzPK +Supplier#000724818|aDKUPW9uaDFV2QlooVgtF2oj4JKzeXBkad +Supplier#000724849|,,r2H2n37PrXo3DWGBbizWqsAtPe am1MKLq +Supplier#000724909|tYF1,ZbNTfGFC395oUAlET Zi +Supplier#000724938|3CQEh3ExY1Rmyd4RavUZXGqDF +Supplier#000725008|syYCen8xhwy +Supplier#000725024|BvimWeMFiqu9 tsGvO,nr63HPRb +Supplier#000725042|aoLdb61or9jA90Phbzkj,4 xUIQs9txWt +Supplier#000725105|pCBSKsTOYNDEG36Oj0XLuqgQtNXpEcJbGtdETiSG +Supplier#000725112|agQBMbrEFcH,u jYzC7iEglBefw7pPDJz1LUHFdE +Supplier#000725156|KU6b4dJz111qVb0i +Supplier#000725172|Y4v OhshtNbvpfAqhcJJHyLo +Supplier#000725196| qwDZKCzo,GEpN9ANgJigXkWN +Supplier#000725261|IJMaVLyx9 JTK71lVnLpDlnnJO +Supplier#000725295|U11t24DpUhtqFTToFa +Supplier#000725473|BK,vaHUGsoh7YclaL15YpfffOFqmGBX +Supplier#000725501|weNSLMp,B9 B7kurUyoQiipP0 +Supplier#000725523|cLCuMP4xpwtUUXczcx8ekoB5vhKYxSib9sT +Supplier#000725537|YrxdE18S7uI,styrcwE Ehv +Supplier#000725608|7sSiWeKVsnEQ65GnVM6a36ntVL +Supplier#000725667|UZ6xAISJLph,B ctBNVxgfhZl8zZwjdQX9U +Supplier#000725717|xOqQ7vNgitZBVRBwOgpvVo5czyKgrVA1P9dQUcYb +Supplier#000725777|w,YvlVrMgZ5spBBfPtyI H14RRgvprr +Supplier#000725787|4nzTWBp1e0VdFhyF0GAbGLW1ichGPUXsLeTW31 +Supplier#000725819|HPOgCnvipKgNF +Supplier#000725820|3KYgijye4ACSh5UbrBnp3tHG4Kb2CJh3pJct +Supplier#000725880| DB2ROPCKAPdt3YXfoImt74WBxw2RwO0Hcfg +Supplier#000725913|G4pyZwTrBUGhk sPII85eYptO6htbKLySNE,0 +Supplier#000726003|hOo9D1b2gUnHuFxo +Supplier#000726009|ZMdav0k0EO +Supplier#000726051|JrllugbzKPg6zZNE,1O7ZSK +Supplier#000726069|TLHX4AfpfwH,aJFtj +Supplier#000726108|WUGwrHLVE k1b6XuB7TTh8bkpBvFR0dUghjLK +Supplier#000726121|wy53IWtDz5mX9ogjq +Supplier#000726147|NJaQDyz6lyt,vHj +Supplier#000726153|7urSU,R1fbs +Supplier#000726154|Hzbbg,o98D1u3qO4215,9I8iZ paHchq1 +Supplier#000726266|kcZJQK9ne2dqYx9uvH5QcHYBF2uyiuntYpmZLEq +Supplier#000726378|GCnS5fpOrfOhDleO8s4i9JaUbcptJhG22E,MHdnL +Supplier#000726598|ESBMa56umEczhUbIXK +Supplier#000726641|cY8mjj5,9rBW +Supplier#000726695| 9yPcyF,OSxXYjSUNyLsKhz1gxJ6n7 +Supplier#000726769|ilwOizgQKjQ,cbRKEh2TVGFEtb9M8E6XwxYT97 +Supplier#000726854|Ei2uI ILGFPzg5an1I,Fxq38,WkHTrabG05GX +Supplier#000726890|2EQVHGGIsfccF +Supplier#000726948|ce3Kbo93SLbA +Supplier#000727059|64Htl,NEuCHifNybDQdS,haZi +Supplier#000727162|kb8IEL6kZ9 +Supplier#000727291|PTnM0 aTAYVaw +Supplier#000727446|oQCSO2sOYjvY8fbXJaVP7WIonfrZ3s1Y ZnO +Supplier#000727460|42IER oVL1zp8PjiyK9vT kyS +Supplier#000727504|MYBX8dxBs 0Gs7jePwV8Pq +Supplier#000727626|L2Zz9by6V4M0T9RYNikrxH5kJ +Supplier#000727642|bJcRKSHN629C H5aTy2XA8dl0eI7H0g +Supplier#000727666|ZPCAR5UaZhVPjut7GID2Z3mNh R +Supplier#000727758|VzURc1N66A1PWuB 1qI5Ew +Supplier#000727759|WYC4ksYTra +Supplier#000727894|fbUrzQoR3NjLQ,gLOwYHvuSNdvZD6E +Supplier#000727938|BxS,z0coep3bVMetyIzkR +Supplier#000727951|Fci1DHWVhEOSjbxsU fx KFy1ptN6SB48InN7Kyb +Supplier#000727958|WfrESr4RNvG +Supplier#000727959|vldXRBL6iYcc7ItgwiWM +Supplier#000728001|RwQCM1J7mkmN55YJHEN3OGu FJT2R +Supplier#000728006|WCP3MVuzLyE +Supplier#000728083|BE1SxC,iiU +Supplier#000728182|EKdP4a5s5H +Supplier#000728204|S47GWX1ffRQy7PqC6eEHm7G +Supplier#000728228|Cy0QXSK4x45xRA91,FfO3cexo8qZ +Supplier#000728289|2aYA5,xnvNiixsbsc8EJ3LYBNYeoymIB1auBPt +Supplier#000728424|WhIQF9T06ZT2pgt9 +Supplier#000728452|EBL v4tRnJ btU7 +Supplier#000728498|AMb5m9sbnGLreYjc3qpOLIX7lU6lpqTo5RM +Supplier#000728645|ENuRhBh5gVZcjplGpO1ChWrxag6GHi7VREhvDm +Supplier#000728677|iES57x4Vnm0 Tiwz1U3,0j9Pm7nvQnawJZv0 +Supplier#000728695|LAK4K84BI6Xx7CKzT F9a3ZWbAfKzMez +Supplier#000728719|d70,E3Y RvuzuyQrcT5MaG7D +Supplier#000728741|3AtyIgkI5QFyy, +Supplier#000728745|6tBlq,bAAusfM8vf5gWSbsiXD0 CeLXuwSen0vOi +Supplier#000728790|,T0dWaAT mqjB6LyOOPksgygTusckZrdcgEp +Supplier#000728890|9nhCMhyl00GxrnoclDYLMBlF8DvSfBRf +Supplier#000728979|6lCgeVSk8IWXBxAfVbX +Supplier#000729041|NEhMCnuRiYMC +Supplier#000729047|EB6pVNgflmiD0rzEnj2a AHyrPCZFDRTazy +Supplier#000729160|RcuD0dVZi4KPB6lWdzYUbWwGi1Hj +Supplier#000729166|lSEvmgt3Gi3WRoD,Bf,nVu9sxXlkZBPiggS +Supplier#000729182|bAOJosuCGGG GbbsNIvDsIrMwBqXzlHwJei +Supplier#000729326|P7rolSnzV0pJevg39UjUIGV2n0EI0,h0Hhkg +Supplier#000729346|u7EAkx1EgELle5hBmPTNzYqXBy5sc5oJLz51HygN +Supplier#000729371| g97INYvgKJU +Supplier#000729409|7F7dRu35mKqsj9f +Supplier#000729450|X9,8gGcb1Dj2Jzc +Supplier#000729689|sBv2mAOETDrdEFQzr5Hh +Supplier#000729820|KqcgEA44Iro9f8noLE1PnpwX +Supplier#000729868|HXMJFNxWZy +Supplier#000729869|rLGYLdFXImQIMkX3QWbPclGcFcsc7Czz,jid +Supplier#000729873|OPCNq2PqTz86p9QdfrtQVfUr2ld +Supplier#000729930|QdIbsrmdf6gpWV3N0 3DXvcB, +Supplier#000729940|mDz1WOAWOl8 5BT, j,pIhmJ +Supplier#000729996|7 G1veIqnNSuqBzz6vPX6 +Supplier#000730047|3ZDcMLF,qJN5S5OBUi68MVidIBR7zZNTlzUy8 +Supplier#000730050|A24NvL323ko +Supplier#000730087|Ofhl04ud hugidXOM Q4jljdhbn0gXC89ffl +Supplier#000730138|8TLiwr2Bxv +Supplier#000730208|o4uoP6Bg06ZY36Jm38XUhYCBsmUc7zs +Supplier#000730237|TZ13wbEEYWJ2Y2WbSmH4lONCsxa6emHdPPfA1 +Supplier#000730289|AuORHTAB8HGKAe72kaq8uFi +Supplier#000730400| ICT03eL4ln +Supplier#000730416|hdT7EJ, UjaQryQW2BVA2ActZFOkiA5CamKvRv +Supplier#000730559|Md6AEunc3d3yC 1m8w9SRYNkwxQhkQOt0ow +Supplier#000730675|bzo0XPoZJ8BhB1D CpFWEsDIWvdWocC kAASar +Supplier#000730676|rH1ZKS8VJ9NVJAYQug40rLf4us3T5 +Supplier#000730693|IqmoxdC1C1xdwoKDU0ObAftM1 +Supplier#000730751|UL0zUOZDtpkS3QRGlP9DAx +Supplier#000730787|vYDCEALIQDloM3NvpIsXdr3mn +Supplier#000730808|19JIIp33L18xMMLXvO2 +Supplier#000730874|FkiYG5,MmG,iIwGYVnnq yYaLMZ0CeQjzNCWkI +Supplier#000730883|ytDAOzQ vpZH5ZW +Supplier#000730951|RleCvLobCQzmkv3v8Ip +Supplier#000731017|rq0wCOXtc6N19dP +Supplier#000731029|U0Ml,GVyVHFhxC2YMzjol,lpTOqIt7Hp +Supplier#000731121|W biamqfuHXAixUTDHpl2Ryp +Supplier#000731127|SPCx7gFHxe +Supplier#000731142|MyW6j4pCZ0sGBqWY,qz7ZZi7C1sna +Supplier#000731229|isDQODDuf9lOZQ,Mi +Supplier#000731247|her96Zu,blgnuc +Supplier#000731271|8GFeXK0CDKGrQsh0tRjGR3W0FqOMlo +Supplier#000731279|nJHx2cv2DvwcfAbg,rUvv72A fHZeU ckMc +Supplier#000731311|Sjlx8,xizEX, +Supplier#000731381|QsdPttveTUJNEAsG872 rxUvBKbWV2 +Supplier#000731391|4l3 QlWhBeK +Supplier#000731474|FsoqxsxganTN,T6 xbUxuVr +Supplier#000731529|jQvX41uCbGwPZESGMeLMAXpTLQXPAH +Supplier#000731537|p bo7GO36v,wShLKBV9 7elYCzAKfre2Jp3PPa +Supplier#000731635|Z2M1ez43SMWHy7KCq4FAl8GIaMoopw +Supplier#000731697|90g5ucUlIPLIwgKdUf,ocTSB91G4s,L +Supplier#000731848|3TxXU1m9 64JPhZwvLGVc8 bUW,AXbMVSulW5FJ +Supplier#000731871|ksFIF7zP YU4Pzg0VN0IEQwTGk,ES5yH +Supplier#000731899|iPe6h264tWwPfud9r c2,s +Supplier#000731937|cj23xqW,g zRc4HKW9b39VAtBHza +Supplier#000731968|IXuOQ7,q4zdf +Supplier#000731992|GvFYHsM yQdxRBa,QbSwORe7XI9se +Supplier#000731996|wZVdobSOVKk +Supplier#000732010|rF4Yil,wj AMpX0NLHkRV90S +Supplier#000732032|ifQzoFQ2NEkZp7lwxWQb6 +Supplier#000732252|UEGQOpA9rmfRVMOn7VkV,zBE887PdAylZKeZM8ro +Supplier#000732320|SE9zwiIgXJAQB7jMJ0DNJIVnEVvYW +Supplier#000732369|kA1PrzzLbWLQ8XcOFrQ4,04QGCYxM +Supplier#000732533|EcVP72OdvnI5nw64YsfsGyFXtXaV7B5 hYBZHqfA +Supplier#000732556|vgYbqVQR3VMcaSa9JunrDQC4Oa4QU23 +Supplier#000732639|wQ2clZhLXdpd +Supplier#000732640|A,ht4,phwAD,1WYJ +Supplier#000732686|BgZWDs2WqtJ6069,KB57fr53h7zO +Supplier#000732739|p W 2PEjnLdYcFTuowLiMkV707gz +Supplier#000732823|Uc42tj8mt9Z8t +Supplier#000732870|Xep3zuRyngaAg1nDngEbgxH9, +Supplier#000732993|T4Z0pL4QIdoQNcZyPyUhKPjCuL 07Ao5P +Supplier#000733006|F,HMcO81vgdJKz17re +Supplier#000733013|Z7,Gz,O6ePQj1v 9e,ge3 +Supplier#000733034|ukMAJbQUV0AtVDHrZLgH 2sIBmbBuBEgLWHuu +Supplier#000733093|HaYZGm65Mx,38NvBmfz +Supplier#000733163|GXPlwS5H34QRRK , +Supplier#000733329|b3nUmZK4kMgGkGeaoH2jtkZjDGxLilcit5M1 +Supplier#000733391|BoFDIN0yihXIWxpXr +Supplier#000733417|3Q3vB5UyBBzyZkk2,yOgH8nDgf0IjnYipfS +Supplier#000733490|7Hu4WLulnloZ0az3s,5rJixm2 +Supplier#000733497|qf7iJOjwGmB KMV3O +Supplier#000733527|JV 881qVm4R884tQrdQ +Supplier#000733557|vbTmt7RgWyeOP4UDmT5ykDZhRzbemGgIWAowVFy +Supplier#000733822|92viQPRHj9 +Supplier#000733835|2k9GyFzJqLWdnTVLUapC4Y4Z2QJ17XCrNnp7mO +Supplier#000733874|VfY3LgJv9vEGGERqfleXp +Supplier#000733880|ryvHwQBbe4gP3aDsGhLEJrCN4aq +Supplier#000733888|izjcvhfpyoHGThLamsXDpO1To wx +Supplier#000733923|P,1gmExvXbvJWVVM7JqayIW5KlsO3,agmV,xTLE +Supplier#000734022|pAs3qGYv7,0H0r +Supplier#000734084|,KV35MjfU7nXhz8zd2YDEURfPuHu +Supplier#000734099|ntUUo7RdwcV1YjwXG20oOax1OL,rIj,15j1mde +Supplier#000734135|5Ib2N0BJfrU1Zk,F +Supplier#000734171|Scw6qnTjNxDDT2zAGSBajnlDA5fs23AOY4 +Supplier#000734178|Q8o2wlrUgga9To5tKJ,7 +Supplier#000734182|z6oQUZ7xcLYgSeCYm8jL j7TKaQz6 +Supplier#000734213|Kti6leg1rBFudB1bJKtpXZ6viNCXyCVfRtaP +Supplier#000734261|oHRbNUX287mG4,hC6lAau1W8hKj14ZhuEOhcF +Supplier#000734296|ETVxIpPMJBHwRs6mj4K2k,Qimee +Supplier#000734379|McRR2JtijhxZVlwMhVNsWlgBYDVLd9APQD +Supplier#000734386|r3xdCUSazeTVtXQ6Vjlq,R,uik01kampUje +Supplier#000734406|eixG7iFSMQjb2gW8 BGK0msszJy +Supplier#000734461|Y7hjDRR0Rrl +Supplier#000734588|uXsjWgCfmM,,du84ewJS4Ngflk +Supplier#000734590|rW5fkhsVt7,6nu0nbG6A8hQPWV9DgKB25 +Supplier#000734657|ypKqgIksluFO1 +Supplier#000734719|TmMSot2M2ujbXrDR0Zn1JCfuY9v9o +Supplier#000734807|zeZQJKHxDvyGGEbW8SdKPu9bx3MYBRS +Supplier#000734829|kyr0ZpMh,ykC4knkDN7oZgW0B4rDbYgTu +Supplier#000734838|NhK6WJqDEBDT3QZhhdfwOcPAUereK +Supplier#000734859|8A1kN6,YFD6k5XGO +Supplier#000734918|OmR20uJugH5zZ +Supplier#000734977|ciraNeP63gLHYNvNQ +Supplier#000734979|CjROAlPoViU +Supplier#000735024|2hIi,oEnI9yMNsE4LLp8GWthAGAybeisj +Supplier#000735059|RGtfwmSCXXLNV8k 4B7NLL +Supplier#000735155|4WpyPe3C5S +Supplier#000735178|aOFsQKPxGWowz,zMbe +Supplier#000735185|1oITiFo0kFpkcMGle2q35S2ZEtrhx BC1DtWD5 +Supplier#000735213|lxItujgctc87cY5plAS7GGmIl2pEvU +Supplier#000735246|mdCpGLD 7juX9 +Supplier#000735266|jQny2NlIwglvOyYn5H,ZgsQh7,,fEsaPHDkro +Supplier#000735296|rA8Q1wstxDXIFWFE,6frSvOQsGv +Supplier#000735338|PjojwYZWk1cbjkxZ3ySpR31i66 +Supplier#000735454|FQTtb70jUlvu4IUhlzNFtZDs1EPDc8OboPJ8u3 +Supplier#000735484|gOgm7815mCBHG,mlucHIyVM,Lfr3dYIYBZ +Supplier#000735546|6wWIh0HE PSvz,4LJ33eovH85ayzrJ +Supplier#000735610|DN,nw6HaMYoq +Supplier#000735733|MUhwKkkqY5Jvea2 +Supplier#000735765|ReRGjBNRJvgqxR9hSR,c1HGwl2FRLU +Supplier#000735781|hq2tHz11 YWf19YHf0C +Supplier#000735801|IDEH57d0FgsbOr6gO0tJnhmY4cUDzaZj +Supplier#000735830|Z04rhQ0tWpvj50cPd2MEoDVXb9f19FXqL +Supplier#000735942|BpbOLAMMRf4cj9V2E8ewkeg,v7GxYr +Supplier#000735965|9ugHxVlupIufcKXcfRSc1Rg4uB1 +Supplier#000736061|3xwyuup79TMbQQxiRAx,jOjqe9w46 +Supplier#000736141|35sFQe8QOrUg458j +Supplier#000736184|FwiUlwyZGS3SpPYFO +Supplier#000736235|jZZGcVcsBNaW2TcwpY7i,aRcDST,A5i2KHYR6 +Supplier#000736245|kHbVZzXAkx,i2UBvMaacQs9j2kFOmNwhJo3sM +Supplier#000736356|ir5Hs8i25YbLCqQB9vYxQvh,pC +Supplier#000736376|sB7IG2w2ClzpF1,DSsAdz8m0B +Supplier#000736408|hCfFE8VjFk T7iO9voksTMsFH38MG,NhXMZ +Supplier#000736512|eRGK5kyGzIEf1ZPY7RT +Supplier#000736713|uZAITDHUfdSqTTaRSlDv6a,7rCDRq +Supplier#000736722|7GXSLQywuPgWtPS sRuOS +Supplier#000736849|LhvrOLYKNS1Z4iLFrWmr1Juhyei9qs7oiXlA6 +Supplier#000736986|cFYeU2Jly82 IQMuKig +Supplier#000737014|n7SvuUFL21 +Supplier#000737117|sED1pIJspXlCJ7,jYry6,lZrYrh1hYt +Supplier#000737177|8Tngvj0nJ4 +Supplier#000737186|nLeHktiZmGWpz,tNlKF +Supplier#000737204|mrC8UWB1F5SumcvwY2 PHC5REVFXYo +Supplier#000737215|oUZbC1ueNWhjJQ +Supplier#000737254|JKVm CzatZdqh,sp7UPG9g53fFdkoNYSf f6k +Supplier#000737255|3MQaoqXzI6VweVBuNB +Supplier#000737289|pYG5GXbaryc0 +Supplier#000737388|nW3kUBarj3fbY2y,lifRF2dqDOUSmULQHNA +Supplier#000737409|dNQD4sYi41g64ff0O5YX32mYeP3R +Supplier#000737449|eHbK02i9CBKtxR +Supplier#000737491|1AGSOln9lzikee6KfLh1g2PkteSY +Supplier#000737509|OnvjvjizjS2IrnKHciHN7y5vb8S2B +Supplier#000737522|tEHFfPuVNlpmNrILvp3sOKxs0 +Supplier#000737665|QYBlroxSG7HTv1h2hysw5FEFA +Supplier#000737672|f8pXGBT4G0Q7HfLAl,bD,UXA MtytFZ5 +Supplier#000737676|GEwowXwyB4jUUM l +Supplier#000737686|W0L P7Q5Yu4416Y5Sl1SWNPj1XEFdY99I +Supplier#000737692|NObO4CsdytF5nU2Qxgu +Supplier#000737793|52,UwSQYnrGRbMNnZ3wiZKIOx98hOj6sMmXNF +Supplier#000737859|Vhy3qObdvmdHl,sH8epY +Supplier#000737917| IPpPLSHxEsOAehI EEeN6D r2IdwKG9JJPoCKpp +Supplier#000737976|c9RVPcuFw9PPtMwearfuTzrA biGDx1 +Supplier#000738071|yQmbrNJ6q3tjCtX +Supplier#000738121|d0p9EEI75xRIzH70jun63NflZ0 +Supplier#000738211|aeftpkof8draXZJRomEiaOmRDUql +Supplier#000738257|wwr4ZQNQjYo +Supplier#000738301|07haDpz6jwvXTtT2DnlMKdlKyVTaHWO1Dvc1lN +Supplier#000738312|q wk FQWP5RS9egvFF2 +Supplier#000738653|5YmyydR4VH3HSe7Zpi2iNdyKm8Ph2tssgk143 +Supplier#000738654|to5Qkqipo0DFLo +Supplier#000738660|CHveb6gZAbKNRZwCr8Cqnlbnq61nxXPayzs r +Supplier#000738797|cGhW,tvBuCZch +Supplier#000738879|Ggb1 ppaPLHrlmitAqmCpOyvKZeEH4J8s0D7VRsb +Supplier#000738930|u8,nU,Oa4amYrOcGRaOn17 +Supplier#000738935|RfQDzkVmSS6 +Supplier#000739050|L10oTdrfKBH5PW,iH +Supplier#000739101|W7mj45zXmPtxxRQtTr +Supplier#000739149| oyzXbiyqoNTix +Supplier#000739159|aa5Wk1OJ7CSroiv0c,ekP0GOG Mz eQ2IJ +Supplier#000739246|CWEDw15DrkQR,UyVv +Supplier#000739342|iDSMSq1Q79zA4QBitz7 +Supplier#000739399|zvfRJs0CuB08AlLarp8Oj +Supplier#000739502|MckJtQkAVIOb4wOKCSFE8Y PTsPMkSSp5CMBzd +Supplier#000739577|i1UrT3l3r Rkf7XyKJ9h +Supplier#000739589|tULNEJ737ibBw +Supplier#000739636|eBEFE0XPh,8EX yPVkMkjoxHAVNPMeYZBv +Supplier#000739766|nHETkSR0dE3V7soZrtw1SUri +Supplier#000739798| J2LDR6lswthUFKMWpBEwpx QLNZNUm +Supplier#000739845|iFGIoZiK 4u w0cVq9EpgIWD +Supplier#000739900|oCLgyVlQevJQeqLmBZJTOf9UTOelGBr2ykYgZGRq +Supplier#000740026|gMX4XjvINSmHU7BCjI, ZQWimxqqx6 +Supplier#000740030|7uMOw 3r4Xu +Supplier#000740185|Cu6irKbhzJ93yQKDiD0 +Supplier#000740227|EV4vcU164QVfub61lzPJFpAEFp,Sse +Supplier#000740274|2MvtFlr61DUUOZTDs +Supplier#000740311|OzxFtfB2ja 59fesh +Supplier#000740330|vBDxntalI1ucJgC8Jfjo2Hs5BmfLLwWwgcz9JR4D +Supplier#000740369| rMP6fs,wc74iPGtCTOJ0 +Supplier#000740527|rBXhu Ve1Wl0UO0tc5,VHcbI +Supplier#000740548|TwMWpl7M7wHtXNnX1r 3TVpRh3LRgBl +Supplier#000740582|9T8DQwMgO,pdUUJt0IuASflYxvYV +Supplier#000740620|PYlOo lsdjEbAcK7wnTgdPOz +Supplier#000740654|siwNdmjaY98ewssy +Supplier#000740684|fUNcRl1m9qKFUQ +Supplier#000740696|aF6iI,4FiICs6DZg65QkuZHd,hYcuCEfLsHbOs1 +Supplier#000740796|Oc3M0YEn,g1QatMo2H6zEP mMfwYvvM3tg2vY7,J +Supplier#000740853|Rl1F7CCf6HfdHKr4n82 +Supplier#000740862|xe2rEpkQAVsE,kAE4smHZ58BTUgpn lOzGWy +Supplier#000740882|FizOz3tUTRsKXSn2j +Supplier#000740931|XUgyTzKw5JTJCpE498h7m84MyKgHO2p +Supplier#000741154|pVqnR5Jvs0YzYdWFxJxfL,a1y2sHJxJpTnI7sG +Supplier#000741167|MEbkp6V70377Gsl JqYs +Supplier#000741209|2,3E8XStlnK +Supplier#000741218|KtjuvxAD9fcsk1G +Supplier#000741263|0n2SpnUDc4DfK7jBTL7lNMwREDqPpFG +Supplier#000741390|9nUBCKdIxndAPDk Bo8HuiTPdXzXEU9 +Supplier#000741435| lFTmcj7RU,F1SMGH0oEpDmvw +Supplier#000741453|A,3629lK26bZqrUQO08go4GcD6db2oYjsczG3, +Supplier#000741733|cJPrWzehN7Bs5ayy8rs +Supplier#000741971|oY0jTrwUw9hEOtuaMsAAw9PAdHhIx5950U +Supplier#000742033|8Z7KNhifmQOr78zsUnoD +Supplier#000742111|9odWO1e0R1pHwOcwOEeGcMk4l +Supplier#000742155| am HnfMTXfxXa +Supplier#000742264|AEcepiCWrvMGb4wEijoFWz5NjR6vi6 +Supplier#000742308|qA3JuSdlKgacIHYGklfCI +Supplier#000742456|ogMZ96z3U2U5S +Supplier#000742477|kywpnvAlKGWcFds9nF571bzSviT QPGJWCxbzu +Supplier#000742484|4POQqwYIUDqNNkdvDlAfS4WjmiQUZ +Supplier#000742609| bgSGeTfVVHwT +Supplier#000742613|OjhSXXNCym7sP0uQK2bE4vxZiGYBbxhGeAK +Supplier#000742648|6nxCXkDWEJd,qF5R +Supplier#000742685|GcAWDu7BARAaSXa0hWVPT6MxuLq5CQfxQ, +Supplier#000742705|EB6daVId1SxemUvR01XcL27J Am W8b C +Supplier#000742721|YE5e0WleKO +Supplier#000742753|NvSRPVKXCPjka2CYsrzDGIjZKDp0GjK,9R2u +Supplier#000742761|uYAdzxpNG68Vc0lYQPYCuW70 +Supplier#000742890|Wd,5prPxsOjbhQ800LMs2WgPcPC08MuI +Supplier#000742896|rhsnZIcC1ZGXVspqPjXU1iGTcmya +Supplier#000742919|XcGJ3dDijmZuZ0 ZTUoXGtxaL1FTprQ y +Supplier#000742927|1Uw2J4kubmXjC5vlMAmWSZ0pEKQZgDgsiB38QTP +Supplier#000742944|Xaly,eoKAg B1YBR7SKzz2LPIljJOSBAp4LM0x +Supplier#000743016|dVkizkP1MxtQhkizWJnbYZpA5 +Supplier#000743056|2jNQGtfCGUk2feHVHEeeQjiEE2so7p38HyxEgRM +Supplier#000743097|Op2EVoo6RJ2FJ51LTxv7Wn0 +Supplier#000743103|1cjeuVrWgYltx +Supplier#000743161|U8sC3tW eFjjV3qmr 3Ut +Supplier#000743187|lahDme,KNDe94oCkciDw8rw1 +Supplier#000743226|ds,oyNzaXge2WT +Supplier#000743327|HGwac4cOcsBGCmANkFenr9 +Supplier#000743378|vhXqnfnma DMNRpJS8g43ty9FBoY +Supplier#000743393|6Gq,wEWIQI1FaMQeuzA29Sm6kJ5 +Supplier#000743402|1GiY45xwNWIygUcbQbCg51WjyKhrKtYdh +Supplier#000743478|XO7JX8eq5P25SDTq4coNwNs9JbgjCOBy +Supplier#000743530|NBGeIgMmtFaWy63L8vYGKiRWvt +Supplier#000743743|YTDgHZQ5y5rWxHWeI,1G7j,0pU9RJi +Supplier#000743943|lJbvXccS,wkF RyHM lECJQHwaaBhvg8RW5eM +Supplier#000743964|5zYoopG9b3K +Supplier#000743997|kJqAjGMVc7ZxavhY7x6ft +Supplier#000744020|iaeqeyqJX71CU0 +Supplier#000744162|ls,lTp2F7nFyqLrR,5a7Ac1IGwAhlWyOiYft +Supplier#000744177|fC1Ag9RBaGmhn +Supplier#000744184|vTT,R29YN30PemVIzWb F8u5UI2QHbJi +Supplier#000744227|f j6FwQhXtf +Supplier#000744273|3r8gWHIVj9ek +Supplier#000744303|HOAP2BIDP09rvKZdpiAEeVp1,8SbW9y +Supplier#000744326|YjeK R6tnIZGMsFb1lXFO7DO8sSpII9W +Supplier#000744337|VKctmqmUZdQAI60P4GJyXVYMeT01Xza,fJAvDjDk +Supplier#000744383|65sUyzQ0YpTNLBAht1oBpIKBJRvVV06z2oKRtf5 +Supplier#000744442|Bk7t8woMIl3Dp3CXW ZIcGWlcXT +Supplier#000744631|sxGI8Xhq0kB +Supplier#000744809|7saveijuJp3ksnWDpmc9fFzea7 +Supplier#000744962|BYVYIMC87wKR3EMvmsOlCjlqTOtkhbw +Supplier#000745057|176PIVTvLbtvp6IwomgGfkYAi +Supplier#000745226|qPgresQNtpj0Lgv11xJC7,iwDnqXpUN3L7c +Supplier#000745233|jRoij9vrW1KWgKtYOU +Supplier#000745251|ahh4lk4MikP9 jcfjfWAXl5KCok7 YfHW +Supplier#000745270|Y2KT26CLa13rFzLskBpA6l4uAxC03Wz7d +Supplier#000745275|GWNcK2Vlj9BUXtRdtXzOIFq +Supplier#000745296|,hyohnuzi2IJUxmXsq,wznDWHw41BvCO7zT +Supplier#000745318|fTCcCSZzXzgChdQdbucMaGj82tjFBjcgt +Supplier#000745416|PWyBdBL9w5smTyZojeXUvV3gRvlSOOvIJ8U7tHyz +Supplier#000745450|cdNFoe0DBbESjjce9U6zz3A8CVK9WYHF +Supplier#000745454|myDRN2GmfE8N1b,ukk1EKEe,odHP +Supplier#000745457|AOaaTLHLrRe WhP67DMg4rvsoUHZ, +Supplier#000745533|grCE3feALABiZZTnM8oxOmtC9OZde +Supplier#000745579|BRBHvbRbfWy,2LgovXxUYgn +Supplier#000745610|HqtR9kLdCXRjeduT7ZDyca7iQD26mC6Cscrsg +Supplier#000745613|691o0JaYjzN1d djdfpuWRID +Supplier#000745653|p8bbnMc9oSMcWnAQCoWIQL6,5 V0 +Supplier#000745710|NtZzr1J,D48idQEH8kOjK6 +Supplier#000745713|yfh2cq26ZCRbzzzRqXHc +Supplier#000745740|,HtvO2ZhMbnnUAVehCWQbys5VSIj8Hm OMUg +Supplier#000745790|,GhlgdiTn3QqPYOd2QgKc8pn +Supplier#000745875|Wp5dgwUs6s9X0fy1EP,k,O1p4IMXF8dNwZ6y5yj +Supplier#000745915|rJMqPjzpTzcs5ZKJQJ6pQUvRR81fPxz Oj +Supplier#000745964|AqO0FK0aZTxG8SaH0u8 +Supplier#000746062|LPeCwaH,AuSPATbUKslVqpB +Supplier#000746113|lYW8i0WBUDdkjsLC8ykoFG3gT0 +Supplier#000746135|vUgV3V3DGUGFrAK8CB4 +Supplier#000746213|8Nmxqi96BIwOLnK,XCh9Jq2jOhfTvcjmOE7AFBG +Supplier#000746397|Z7K3VUxncGmo6SXhR HEU,C0U0a,7jf +Supplier#000746427|8m0sYWcPu5cAIuvcR3kVg4fZESrBBmTRuSN +Supplier#000746463|cJdGZdlww6hmwa26iUPkHj1Ke2Bp0u5ol1W8 +Supplier#000746565|otNpghG0i 6bAKQV2 +Supplier#000746670|eIGdIikMg +Supplier#000746673|AZgsWOzAJWCwt97KOw 547NzSrtuXlua1zXw8B6g +Supplier#000746688|pIYy,B2tWR9Yn7SS +Supplier#000746817|RngM8USA2,4rVC14Zqvo,1zzzlgv4cSm +Supplier#000746862| FiR4cxEvd,MagNN1g,Orv7aC6,fQhfA2U +Supplier#000746881|CH,yX,Mt5a5HMfxgpK1RBCh53uN +Supplier#000746943|z5H5fAcCXulbrp,aY,KIg +Supplier#000747146|D0ucQwQSsteB +Supplier#000747209|VMue Z37QmCYzhlIWaWR +Supplier#000747309|DT1WmI20HCR87,jV5 Gyv9cjunIhr1XQu7yzACPq +Supplier#000747341|UTIk4VcUusMdI,PUJYV5T6AE,IuN +Supplier#000747360|81Y0TOePn2XSplXmENYoD38,aVjLs7WRY +Supplier#000747448|eYh,vtHB4zWZBdeqooTn98Pan1z6,oSemgz9prZp +Supplier#000747568|PpTQ4WO4Kxagwoh3pQYU3t8gt9Z6sSevFFRG5 +Supplier#000747660|dZ7kb8vwUhUlg2lcqCh3lfg47BAG4JGX +Supplier#000747664|A6VydlVl8aTTaNk4Dw93cXVmR8BngYR,w +Supplier#000747739|o GpZEqv0aPsfV6aIpKDZO 7T +Supplier#000747770|7sCsh3m7UMvnNSdE +Supplier#000747848|0tbbJJ9JHUI8ZbfT3 +Supplier#000747851|1XJxtcCjI51coUXynYZ,iDNAJSMOi6rKFrQ49d +Supplier#000747852|DSSc8wYNzHVUQrHPcYD39OKvT +Supplier#000747869|vqki4,eUJBRhfT SaqPHMgt4SQ +Supplier#000747992|f7rbYYPcY2y8DOlL8rLDbcqB49BNC2SaZnvT +Supplier#000747994|mYgVNa8xWyL1BTW7v +Supplier#000748027|O1pD4T4E4b9D1 +Supplier#000748049|9swU4Qc0RpCFGJPgn6dfX942U +Supplier#000748063|m8A4uqaQN4GW, +Supplier#000748065|pQ6sPPzL61gNeVl0TL0KsD3zM1VOeIqU9xcxP2J +Supplier#000748112|AlQAW7AUpcIF0wAFvhfU14iWp6 +Supplier#000748283|k,mbGMQd2PC1 0Nnf +Supplier#000748473|Upwvp2XKRwDPZB958JWrFleewHaqnSItLo 4 +Supplier#000748582|kl182RZ5m8lG +Supplier#000748584|rYwK8ofyTQupSChKX35XUl4glDqj JdxTB,Jyr4 +Supplier#000748795|ezjr9S46GxUfE8Xq0g82xOsz4sDsxUoa +Supplier#000748814|koqj1SJBPg1gsCB89QG,QpOgfVf6 +Supplier#000748898|qX76x3nbgf7Phnx +Supplier#000748908|GwJ8ulY8J5Q zNnqevstga +Supplier#000748919|X1zMnECkBkfFRLrp5 +Supplier#000748930|oHPkR52Opm0tC +Supplier#000748966|KK5k1lyVL2M1fsWO +Supplier#000749042|86y2IAZU7Pvhya8EPtJ6N8GpkkHff +Supplier#000749078|Nne,Wy69no00lnA +Supplier#000749216|n,ZuqEFOKZ1U6EX1NDgfe7E5q3zCK,BGBVMSM54l +Supplier#000749241|zv6xRujaLJwe2yEIaKRDf3AsZgoR53prsbQlK +Supplier#000749245|pXlf01dDbYr2RFT1TUkWk8CFJevW9T2c7ASzmH2 +Supplier#000749250|JTBsvzTUChvjMh6MZOF 51E +Supplier#000749311|Wfb 5Gt46v,6dZNhRD IR74zLPsGf8BHrrd0eu +Supplier#000749314|GInJdFmtlcdcGfnCpinlBX3 +Supplier#000749402|tJBdGlqNP1 +Supplier#000749485|9cOsPpZX6Sj8BR2rWcnfhib4mWuHK +Supplier#000749535|OF5dkxwFbUJN48BzvByiF9EFXnPFsyHatLmw +Supplier#000749544|RcN5bYid2s,dKM7EJ3CmG2g4Gz2KgEid9M +Supplier#000749577|v01jMlQEIT9iQ4tsT +Supplier#000749631|Xh X9ZSyr0FWnz15pQxLCj +Supplier#000749639|s,U9vil5syCLoXX6i9amrmMb +Supplier#000749700|7 6uu5HSdO7Zpr,HA91RXSbYCy,fUPfBRmBQWOr +Supplier#000749760|kRFrkqGvhJMn1mPzOb23RQfFN9z8BPpX +Supplier#000749848|oarbD3S2aghp8QYx1CKbd +Supplier#000750001|lHuHjdCbL5Ji UKjgMERItL5j +Supplier#000750097|wAkdlkA6ptvzMfGCVuuWNhO82 +Supplier#000750102|b3p yW7jJ2Rv7wczSWg6voVp9b +Supplier#000750117|KBkYKlBbJgqV0DfUxF7lnJHM +Supplier#000750172|CjN73uLYGMeX4CgC +Supplier#000750204|kBeejCQKrY7mG +Supplier#000750222|jphgmfVa8bZf3EeP0nkZynoCkkfeLMg +Supplier#000750364|Y3vuXf49KE4oVQqPX7Q3y3OVOy3DQlP5VEQ4c +Supplier#000750409|gNKyjRKQN90 +Supplier#000750456|1fZx13mru06NXuRKTaHU,P +Supplier#000750470|XkJIZepZwpbz +Supplier#000750479|wR CgBK Z8 RezDrZt +Supplier#000750511|gZid lEsMvieHpNn0sHTDfBJ +Supplier#000750561|rHEp sPjkclZKwEYhqmnotzfZk9UDBLQ,R +Supplier#000750568|EBHViN,nnPdiNuBSybCuD +Supplier#000750711|4niYsRmCwy +Supplier#000750762|yQ16Fodkclq87flqfM +Supplier#000750781|bNthPXh mb +Supplier#000750801|UbK,H32t0mZe58heywmxYeWUtxN +Supplier#000750847|PCZbAZkaFHI4cZO3 +Supplier#000750896|xy4UwUe7nGHOoH2ELKBmndf8p 6Zh2VvKb +Supplier#000750970|qkHhlOBAdp +Supplier#000750973|Nn2LwFePZB 7R +Supplier#000751082|wAd5AT5RNWOK2rAR6nJwml9RJ +Supplier#000751131|L3raHagU7AgZ2cXenGw,8zyr +Supplier#000751196|oxU8kfiJUH 0VEFs5G0zc7 N +Supplier#000751223| f oGgjRl0sfUBEJq82AkQzLiGY5iew47sM +Supplier#000751356|LCe,dgeGonJWGZgaji3Z +Supplier#000751378|D8xXMRBxxbz6w0hePnJqn,iL7W0Yas +Supplier#000751424|JXg5xUnVAI qr4,DDwWzpIfSwF3qZbazR +Supplier#000751455|pI6MwL6Yo,BHWmNMp,m +Supplier#000751513|tv93AG4 MtBT9T239IGDB9BrInSy, +Supplier#000751749|V46HmU9OKlm +Supplier#000751753|aDG7FPO1i7DGdpfYPWnBUdgwngCN2nld Ut +Supplier#000751834|Hw9xU7XF8LkTi4Qn +Supplier#000751934|4,agOAsTPrXPrjsDNGLO gYWQBcakkQTM1Vmt4kE +Supplier#000752048|WbutZpRgyIY,ZR +Supplier#000752057|TNyyiaRuvIrpxtBngsIipJcnrGyI +Supplier#000752147|WCftaIf,M5A1Sna8P1O, +Supplier#000752186|SVhjonOT6KY0WJUWcWbhdYZCisa +Supplier#000752220|pPWd0GhWnbQdwfT,f +Supplier#000752288|p32Ve7XaMEgGNKK0s, KVDlfry +Supplier#000752524|1m1,eF2,U7POiqc9R 1dwj8OoGJW9repw +Supplier#000752607|,8JTc8RWs3gU4Dz9AptMY3FDv49QYI3rye8I +Supplier#000752672|yIRkSeILG5v +Supplier#000752740|aHDTcQjB5IOvyfpSYcH,bUa1M vKjF21dtB +Supplier#000752840|wnpxnL4Gc37 +Supplier#000752935|EoiP0FT48zFAWVt +Supplier#000752942|gwLn9ZsA2Z4tsUoxTkvlce6AlUwV41XqjyMcD +Supplier#000752988|xITY7t5USc5t7LEIxBQquCt +Supplier#000753012|Waon5YmscZMHhGQZA4QSDNi9i +Supplier#000753019|O4l5wdNxxnb 7K +Supplier#000753080|fU9Xk6Yla1mTw +Supplier#000753153|Zy2lfyFKfuM4bJTekiuAITZrPjwwvwyz +Supplier#000753233|CHE 36Y12esfjfSpOX5jphsy,U1vJIzYFma 7 +Supplier#000753353|QI3ShfxVLhUhLn4HoF7Vm5YbNGZ9mxCiFm +Supplier#000753364|inZOgtqkZ0ZVLyIedft4Gwo4qGMH0 +Supplier#000753377|ug8y9Q9tBxy53NUhqz86XN6bLpdHAP8cNXlVQ +Supplier#000753430|vEN4dIBHgAb3GM3s5ewExkUicl, +Supplier#000753439|VB9hqy2bNdje8MNK7 B32 +Supplier#000753450|Mv,15vaM9e +Supplier#000753456|oYyJ7NXAugh +Supplier#000753458|rvYz tR7EvUYKcDdmC8HuaU +Supplier#000753473|qrJhkKQxSVJ5Fncqc4JozNmfEftSE,KgwybkZa6 +Supplier#000753517|8vgvpayuyv6Pu0na65s,fJlZBpT +Supplier#000753552|sZm7NblFyFimxqPwXzGwzVAHfyt +Supplier#000753565|0g4ZTbD9eO6do29cQmyfv5Hp7 +Supplier#000753640|JcEhZ67fqbnjiRmcKs0a9gJVWqBi8V6IAcnzQC1G +Supplier#000753693|85n0bte3IbGU8FzFn 7fVT2wci LmO +Supplier#000753819|uvOQS9QgAiVSQBSriJdUQAER +Supplier#000753905|hlmeNIdJamUhhJpP7PW +Supplier#000753961|,DsFD7fi7zC216eGHkWd5LxT +Supplier#000753963|E2GsBSG3GOxyPkLzJnMGr +Supplier#000753995|i,J81BlJGsj +Supplier#000754034|iZiPn8t yBgNvj0o8500Dmq3l dHYN +Supplier#000754091|ovzkVhf6PGzmmiZ +Supplier#000754107|Y0vuLDRPyl JQAHJe +Supplier#000754108|4CxRWe6rPGKz1TjqPfxtIne164VP G9d,1k +Supplier#000754141|hlzVR1kCka5GWvGBaMKeqvloy +Supplier#000754148|8YXUJqzrRPhILY1 +Supplier#000754165|n4uJ0wQaqGz, +Supplier#000754253|EjtgWzIi0vf5VM5jQRbQHYCHXlFV +Supplier#000754254|z,kKvs1YM5eK6g1pbspHDLRRcLNrBpMfIcXn89ZH +Supplier#000754271|qUqy7jFp5wIDQlFiolTcHXtRtn7KNaa,QNhB,s +Supplier#000754354|z sCBSQ401 0sSVIBpsP1v48 +Supplier#000754458|xp894BM XUmHvtihGRI +Supplier#000754478|h3GS 0MCaoADQgdLCOP0fOdwGH4d8pFQcxUUx +Supplier#000754508|,tXvO3QC0anWrrE0F23 gO +Supplier#000754607|Pz0po2y,xf5r2OCHfm1cM7PTQJ6C, +Supplier#000754647|A,BW9Wx2Y47nqzUmAHv2xU2 +Supplier#000754737|9QWrkqT0YOr +Supplier#000754759|Oz45a3ZmLUD,3waVRUTE +Supplier#000754840|5tEqiQMjXjdZ2 +Supplier#000754869|gqLVMt91,X6vt69k +Supplier#000755231|Bx2qUfW7dAuHlspuJh5xtf5NLLHuZKGj +Supplier#000755268|ys7MvcEoqrR9GYIwAEfvV +Supplier#000755393|m370xqd2XzTOhDFAeftSk8,9vq,yxSLRVGau +Supplier#000755425|kmoi3fDdTfIr13OtNlIuGsQPkWaY,Zd +Supplier#000755445|dWAmpfax1Xi 8GNW +Supplier#000755477|a6AawoMRjVzg kPZ5UY4hFgspSderc00qN0V4T +Supplier#000755543|jROaLItWQB7 Risk 5SqiS3nTUeJS +Supplier#000755585|lZ AXpXKgLzKvuZwg1yVAWlTWpHi79fK9Zp +Supplier#000755610|qlEc7VLRV9,BC3,4KNmfX +Supplier#000755672|7CT9Na6DM12OFof5Q1fn1 +Supplier#000755730|nI SRTB79XPVQHZkJE3NcL42tTqbJbb0,Tb +Supplier#000755776|GLgksjBuYcayr +Supplier#000755814|XvSpVoYAYutHrW0 Q +Supplier#000755878|r97CK8OX58NdoxitGbuW,94dOsDrZGiGp +Supplier#000755902|n6ORraWbAj FuuaKHY6ao,J +Supplier#000755934|xf8ORyj UHQx6I +Supplier#000756064|FoUKoGOX6aXQAaCVK +Supplier#000756067|ekAe7nSwE6E6FQ,g,U3 2gkMYXW,X +Supplier#000756114|xn8OZgvrqAwKHD,3,KYomzo40REGb +Supplier#000756222|abQgpWy5XiOqmkxKeqbC1EklAdiwv22 +Supplier#000756230|cvYKmiVbXcPFTrhL QZM6z9CHbowXspKJql +Supplier#000756269|324Nq5sT0hX7mAZhx +Supplier#000756358|66XNixWB3,uop cnbG5FFuSdTfun +Supplier#000756438|lZIkLfzeQgZt90aBsvRHuuhXpOgrhzK +Supplier#000756441|ryKiPKbV1BFMwm, eiULgPKxjPY2k +Supplier#000756462|CDIy32x3Zg2SndoTvQPvJK8dHJOHOI +Supplier#000756471|uAN6w9Geen +Supplier#000756619|R9MXEZphglokWa +Supplier#000756645|GME8EUFRivfyXig +Supplier#000756653|e0EVfbYTALHVbgJ0r Es5rMrD0h,flB2aKpYYKQJ +Supplier#000756781|ckJGUFhUf9 ,baIAzyjecFKnIHlO R +Supplier#000756860|RcyjgmqrVUx1CPuE32P9qr +Supplier#000757054|9oGOtXzj4J404IHtUKQIIcqQYA,1Okx +Supplier#000757066| uUXeVxbqqQ,S9hvqrgTjR9fy71lzUEeq +Supplier#000757083|0DeDpTfIojcBBiYnqVlwngxuq +Supplier#000757318|XveOhoIC zV50TA3ggwlXKBb9IbUH6a LsSaOFlx +Supplier#000757345|GVg5HEcxtqhp,T +Supplier#000757348|R2yQK3lq,iNIdraaZOJL4o9ilqMgsg 4vTIoGF +Supplier#000757360|HuUtEcdIxFzxzBUOC2WWk0AIdCzSg +Supplier#000757417|YKiMjJ KNQHtnGwakT +Supplier#000757566|T0XamCvamipwOtVv031E2xQXhmXS9,ZR9 +Supplier#000757625|q alWS yaONj1ZkNtP9GjhX +Supplier#000757669|harslmyAwr9WwxaohddC36foY3,0 Cj1 +Supplier#000757716|CPPGpty X34UlvnWX +Supplier#000757790|dlX9HPBC2CNM2KwD4w2ydFvPZOX5Bbbgz 0 +Supplier#000757823|YNxNkPrc9x,WuwQa +Supplier#000757868|EojSeNoJ3t5JJ +Supplier#000757899|Kt 2Lc4ZQNWm1ZVWoHm +Supplier#000757916|fd3bUKmcS4VtDdV5A9ZhVDD5o4chOKwgTB038S,x +Supplier#000757946|7XgEPA1tv0zs9,3ORE9XN9UebP3V2PtS0tCVP +Supplier#000758007|ZWKFxRrJixw9lwXXMQ +Supplier#000758026|fEv6xmE8wLeS Z6R +Supplier#000758210|sdRaQ9x4yOdHsgTlYtuC5FndNnMJ,k5V j +Supplier#000758313|FYFieVYAg9EwBy XU6KVnSsZDogheDs BlW6NJ +Supplier#000758319|u9zQR5pfxDu6 +Supplier#000758336|ujE6JS9U8j5Qep4n0n5Zonxs +Supplier#000758357|OVBIyBMt7Sfzcs9wbUzbx +Supplier#000758390|PXvTw9,rell3An2Y +Supplier#000758426|zVbj364Xtzrco8bitB95QKlisD46dk8hGQVA4wQ +Supplier#000758485|vVJbdf13d44mWjZhPw5z +Supplier#000758527|zvDqS1iR,NfIR7tTUxKUUqELLMimdS8Or +Supplier#000758553|bmY6snsaoC6LwuVWN +Supplier#000758557|iZ7oiFeQlYKTvdLR K +Supplier#000758562|lmurkIeVZVr4IIuMgCmPhv +Supplier#000758588|xZCG9ZvifvSia3D,Zx4mF,zT,YPAP +Supplier#000758628|cus5YDuYSw8xTM7Qb3MXY7pWP4kW2pPpiBf,9WFf +Supplier#000758676|iACAiq3NYk +Supplier#000758701|k56GDXtwad +Supplier#000758713|l274RI7RjMUy +Supplier#000758796|NXCvfzhdPUfTZ9YVGAv84xKxvrAm5mL2Z +Supplier#000758934|PLbKjbg0VbrkpoISu5xxh2HBSKOaRg +Supplier#000758975|WUYKmWBTEekMSgpkNUAtdy +Supplier#000759096|WZ0hQfAdp7jlIYIbiSbDts8z3 +Supplier#000759258|V2aorw52R pAQtEjtK +Supplier#000759267|kEAemNL40hE0 +Supplier#000759274|dt3vKmyG44L785EQAJn +Supplier#000759343|vQSXrfp,FefgXIWFddFtsdZORx X +Supplier#000759362|M1J0 KPiSTjnoL0r3gex +Supplier#000759406|3lVDBqpLI1nZv0neUMc49kE2TtVEKZp +Supplier#000759413|5FHBPZNvpu9R2IUSGp6 T5g +Supplier#000759507|c3mhx 8wQhQdG9UzeZOro2vqI6dHc +Supplier#000759573|O kfZMcd E8I +Supplier#000759593|hLyx4XcOI4yIcxnhKbhf,WGxEANmpdlMZKYv0ed +Supplier#000759621|uEIPEpuD,h9s5utg,zB7miSPvHgOyOS,B3TxS +Supplier#000759675|bjqpYFGy9sEvUNdACBoMae +Supplier#000759720|rdgOpHASAyNcbE66H9XByGrkZTL8M +Supplier#000759852|RuXoNiu9OPiQLXz1nWWEXwsxTQzh7nIyokSec +Supplier#000759869|4kbNl8j2UGWOIaf4Fu47fi +Supplier#000760117|qakkEV9XVlCegbEz +Supplier#000760210|nEoD6WCnwnb +Supplier#000760265|h5rlMTr7WLvOFtP +Supplier#000760327|4kTyL2auNn14td7IPbbuljZd +Supplier#000760439|5jIZi,HIEhBT0xxebhK Ukq7UeYCi9AVYVUG4 +Supplier#000760473|0u JjMY4GFIEW m2q7IX439P +Supplier#000760566|NJojMCMB3qxMLWDpDu5Bnb2KDUr +Supplier#000760592|QPNDFMxgWZYblMWOVSNnUnNV +Supplier#000760645|mfehuOryNX6JQLWh tGmTqvxKWce24yAAv +Supplier#000760658|0LlUOuVMZmrbNA0Zzns2NOBKCk GT6ked +Supplier#000760725|EiPtR20ffgyJhHgY4jzr0GXBibO07NwP,yfHyRA +Supplier#000760729|NlUQR,I8A3K2 kdZva5jWUh8MKp3mQoRu +Supplier#000760755|RQ mpeKV SzS7Y,ybetcAFTR +Supplier#000760821|VR6bssR,QDaaPiXN3p,LiCOdnB +Supplier#000760839|ZMnQKeR6TDpF9eBEpsbeoZjfvIgy6JjWjfRaIXUJ +Supplier#000760876|B6SSrExCCFrIPX9Sx4R3IYpvHHfsrGd8vmOAV +Supplier#000760897|mEMg,ciyteiJomJ3ozRTMO34Zc8h4sU0ZI 44tT +Supplier#000760911|gzm7pAQ5OpuXU1TetTnXH65Gzjpy96vszC +Supplier#000760983|x2Zw,JIa4GozIpjKuC95djTuw YWi +Supplier#000761160|mEiMJnLDniHdPfYMuVo +Supplier#000761195|JXhKfDSyi9rXY2ALA9pJK2sAe yiC9FKNQ +Supplier#000761200|2G6Rsplfi4l XThwGDE1TzSUsJ5M +Supplier#000761267|2kpXGGRur1ssE3oqJGTATZFy8EQA5 +Supplier#000761463|tDm1q3dqupp6rO0ckIh0TrgjFVA91CpN2ZuM2 +Supplier#000761646|MvYsYXVyp0o +Supplier#000761707|ptLJZfkVSD,2pONWpyRlN165 +Supplier#000761708|m8rSRZUIQkyOiFB2Q +Supplier#000761737|drMBINjyYwpRWX,sya9rLu +Supplier#000761791|G4 4MTs8tAZ2om5LNO4SfcmYfbrE +Supplier#000761832|HmIs0JYwaOjCOmelfnc7RAXF,QdVdC +Supplier#000761900|Yg,oavoYdDp7FNEhf +Supplier#000761914|RYsusDIS811ELu0B6zSdB1pzRolQ08nA2RiZ +Supplier#000761926|Zm8IJVmbJdvQHDp +Supplier#000761944|YuXSS7rDH4UkCG ijy Uo +Supplier#000761949|yeng,v4G3y4NEzNawrMLa6rI4LQIBPbX,fz1Qj +Supplier#000762022|,mmGJ9qKXUGGY5ZBDp9giP +Supplier#000762064|OmMtHB9tcZ3t6WTVRUrDBf5SS4V52ygRjtjZ +Supplier#000762156|1T8ii7PJopEhUII57bsKojMEfKzniy,hFD5X2p +Supplier#000762172|nSYtodGlxAdO73ma8oQdum +Supplier#000762179|TcTpzLeZQwWAmEYJF4HRy9 +Supplier#000762202|fOp3KZbxHBuph,P,1UMjh +Supplier#000762225|cBUQxKusDh7Ld +Supplier#000762227|R,6ozv6ElgqoBsz skzGibqe89 +Supplier#000762268|n65DtOZ9j86kayuBQA2t2dwujuO0rKTKf +Supplier#000762318|GdhgWMgvoI +Supplier#000762390|6CCZdDTdkSa5lauh60BF3QLzx +Supplier#000762392|EzL3B4Nw4Av4XX +Supplier#000762670|dPAviSCL3BBFPlAMIuU5YF +Supplier#000762744| beu8kHZtT2HDV8Pm5juRKFzAYqWJUC, R +Supplier#000762753|TGIfFOluB4xdJEjrYvBMdzXiQ r4r2dj Dit Mk +Supplier#000762815|6eDh2Dhfpz,CuVTa6o05nRTSAIvcNS +Supplier#000763094|OVh45uMCYBedMn0io6WxSCl8C6Lp +Supplier#000763136|liFXa yQ405s78Rpny +Supplier#000763139| VQUH4wCY9TelgkGYQScV4pXs1qqtSH +Supplier#000763174|Wu8p0LoL283UQLbhuqo7wh2gst 25SGHPAc2F,M +Supplier#000763241|si98jju9,,RiQgwp +Supplier#000763284|RMPBRXbfJdIl8mEzPZCNcWqyx7hJcm7RhaC +Supplier#000763422|qXxmAMv1H,Q21Y1jLdtZId87F7Z9ZQjipH +Supplier#000763436|tj5Ma4ZUCvkdqDDzivVbMY,JHDFRvFS8S +Supplier#000763445|UqqNKMgdTv TLyxLVmjLmRvCGU +Supplier#000763557|A C3JliVcTq,Bu68ilhgzndHSTtBFVNoOr989Oj +Supplier#000763579|kQFxPg6qSQg2xBEqgpI1m +Supplier#000763624|,zOr5y0K19yRRvB0IIYS +Supplier#000763676|Mxi1liUzD5QPp +Supplier#000763834|PlY3FZwHxQUF9MzrGxy0z0 +Supplier#000763965|EU50dYrBdjUqUDoix5,roSC2k +Supplier#000763973|Qrk1EtfptpUXEfRlfUh9QBDeVLvJ9paImh97LH +Supplier#000763979|gyPgnu7fk2lvPdgnDhjtrK0W +Supplier#000764086|ulGHWLOkDhJE LPhr9E +Supplier#000764087|4rjRjtzFBpwc7MTYrAoEo8jfSY7ZDiqari5,,brE +Supplier#000764131|9eDF2YypD8TiFcEE44SWNAweUbBA +Supplier#000764176| tbU0Mq0MC +Supplier#000764233|Xj9s,IOkhTbApKdU7MBqk0gJVFX +Supplier#000764305|qJ1xaq32cCzPfK8gALz +Supplier#000764416|xv,ZWbeKjrJyOlsurAiyWHjzZAYYaFn +Supplier#000764478|HqFsKaV77g9UUIZaGeZ8w +Supplier#000764542|fOFvLDbRwcmiEP5Fui640LL +Supplier#000764545|s1PMZa EkbDooKri +Supplier#000764551|dCrCOPLl4T +Supplier#000764606|oV7vemiOmfVJm +Supplier#000764649|3u6jcn2,7Hy06 +Supplier#000764687|7G6xy52 vzSSuKQMVw +Supplier#000764699|h1II8yHE9qGdL sPhnMSq ao48P +Supplier#000764762|LShpEbO8 IbGS2Ir +Supplier#000764764|d4DT U0Gxi3yUB8vjse +Supplier#000764800|7UEZ7XLmGm5beCjAU1WwpFVKI6Ejm2uGc +Supplier#000764880|WKfAQTsOa8caBddqLYvIvsRiAIwQ +Supplier#000764929|OQGh7jRZfQ8DD1TP,2kQ4u5vzfQqlTJEjU0SLL +Supplier#000765016| LqLG0ra3TjjXA66LKZl3D1JgrhZHB +Supplier#000765048|YgkINwJO qkfWbTM3 +Supplier#000765124|7HmPGaXqN14I +Supplier#000765155|Js2Hagd6SNpg5,ykwmYzYI0x4KVA3UH1Aqu +Supplier#000765257|oclNKFkBrajVXHl60NKfhbUOcESYGfagv4zmYeG +Supplier#000765420|XzfAahSBpVb9YHqvuPHjj7N +Supplier#000765425|RY9yrHGiCBl2irode t 26hjgFo7JOICtlj52B +Supplier#000765449|y31TArz7tpGW +Supplier#000765458|X1hL07Qj83G7wfW3F2Xzz3MtHR +Supplier#000765493|KD sJWI6phX78OnoetqOqIILD +Supplier#000765570|pNYkeDwXIzEMsI +Supplier#000765669|VY0wlLU3ua25QishaYLkYwjd47,P, +Supplier#000765695|OuzHmXkKpeqUAr9vM8YHrzZaG1 +Supplier#000765697|i3gRm9ugM0nits7B +Supplier#000765726|etqfnxVMHgniZCvcqamVk0C7iFH5kcaBk KGIMs +Supplier#000765882|ebwic3B ,eAX3zodesxvUWoV6e7qFfFduK9T +Supplier#000765885|yQLTSoBWwr4xr3ALLaKC5ybOjFSyp +Supplier#000765964|VQKXGPKTStZYkn,NB +Supplier#000765969|c6NxkJBUFOmCFY6Hg22H9IIvakKGre +Supplier#000766084|J9i94ynRYxpCugU0fZnmdVnoMehSJSbEePO0N +Supplier#000766117|AlTl0fDFYMX K5U,0hhje +Supplier#000766154|CaSJOdQ6pnVoZg2iK0LSEl4ix 9iMfBLfln +Supplier#000766159|0OsU2fenUXo5v1XMsZ9FmuQJxCDPsi +Supplier#000766164|ki1i2baNfaJzdYRNQwO4kCbQOQy4YibOmPzvqr +Supplier#000766195|vw9iX DOZ1jdzEkfBWsGA9UBV +Supplier#000766305|AROVAE,47S3pBLzcHXMKlAUTAQZX +Supplier#000766446|Prp1zR,pZ336dtU0SNp ,JcWMP88dMDP3kJ +Supplier#000766457|cbXmtyTukOkljV7q +Supplier#000766512|SltFUPkp,XPwFjHAig1wyS +Supplier#000766523|NBjgvAkJcOUHxoisikVBc +Supplier#000766699|rOCtgepM,iOlo4ED +Supplier#000766724|tnLtD,my8uxW4Sj +Supplier#000766776|aGUqc DPvHy bSoJ +Supplier#000766781|e5jLSel3zHWFV,D40v8EPJa5ON5f +Supplier#000766805|AePajSYwpYNSowSmtyzqTN8J +Supplier#000766880|fZyhnc88S0ocwSclgkC3d2cT9vWo +Supplier#000767023|aeBkahUf1CqK8QTs9raaV +Supplier#000767052|Zv5vrbbft0DRZWYL4,RiX,TIAXNvjRZpW2VS +Supplier#000767082|C5pe oiju,9y2rJ1cnRZR +Supplier#000767212|dN2W9h8eoLVewBDXSIqnVw,4ECOr3uJ7hW +Supplier#000767272|XZ4wUyPIXmOWZ y1labuxSl55y5BMYty +Supplier#000767354|6rocXt3SxnX H0YK +Supplier#000767541|kMba2W25p0Lk2XU +Supplier#000767552|RzchgAurUj +Supplier#000767573|npZ6pxqRGRB3MuQb +Supplier#000767575|SUYaZntE6N7IwMKhGC3O +Supplier#000767618|va52GbG5qKY +Supplier#000767665|4MXnqRaWm7jYuclnSQl1 +Supplier#000767739|GVZISPCAAcPAXVyl2KYAG +Supplier#000767750|ZI9AbRf9r9f1wpSOWAC9OxVqXmn +Supplier#000767923| G3tdymAM94i28X6np +Supplier#000767928|GfGNBNPxV5V5J8dith0IB1 DyxHxc +Supplier#000767975|IBHQFjbEkWACp9Fk,GBafR1FQxedbLgyy +Supplier#000768083|Z4Lo452GU,9NLj2xx1LjWcb +Supplier#000768291|eDEehbr3mugCntMx38 nL2 +Supplier#000768347|XNh95rTpw7R +Supplier#000768496|xNRZMYxfBMW +Supplier#000768497|5uS,YzQ,,e6p7l83bh8xO4Il2TM6Lhydk4LD1MnY +Supplier#000768559|lTBe6 vi4BlTxkLfUidvaiQssMYQHnv,Kf1s +Supplier#000768645|4IEvTmEV00rg, +Supplier#000768695|dzj8nGt4660neZz6eYHExy31 +Supplier#000768794|Wfe h,NSp,u0Lbzt +Supplier#000768874|mDW8X6DzzdtrRwPIbCQu, +Supplier#000769083|V6MdXT er3tTSgz1gb3 0s,Y7IpkuMaoF, +Supplier#000769148|hQNRjpK4vqT7X +Supplier#000769190|1H25PtAR4o4kBqy2Iv3SusJVRXVSVSBoqO +Supplier#000769322|zTnEHWa4, Qn +Supplier#000769323|ien1IlQDU0Xyeiw60XEifh,b3G07k1 +Supplier#000769369|UqMAdVdflVkQgfvAqzdxGJpfJo0 +Supplier#000769529|EIHXRIq72Z,xUEtyCe3BNvLOpqTF +Supplier#000769598|xn0tTWexb95Zn4LZTNNc1XeiKWeRgt,z9iOBu +Supplier#000769681|mMhfxBcR3OVSBdSC +Supplier#000769687|590ikYHiz3Lht4EPGz hK87nn u7jRlKHgm +Supplier#000769693|dXfcK2ueJUXoPpq2J3dNeRJb +Supplier#000769762|agvc8V2cz7Q +Supplier#000769847|wqv8o0WDMtpYwMmYuq6AiMSkSuvL1aanqA +Supplier#000769883|1Zvqbljp1siEzrNrtKIyZCqaqL3UlAa2bWnu4Be +Supplier#000769888|frzblBG54dYyWKHZspZ +Supplier#000770008|s4NPGhNJ8NxTlR +Supplier#000770168|XlJUSgN4UnMTDndiCjNV wNXLFQ8PGN56Y89zq +Supplier#000770183|QKam13amw 1DGqFXTsR4wuHsS q1 gV5CKzZe3 +Supplier#000770184|YU1gFRor n 0skv +Supplier#000770202|YFH3nNG68c +Supplier#000770318|ON0XOXsvPkhWDK 3XB qmJzI31rv +Supplier#000770321|ku09I6Rrro5ntIc7XnUQ94JYINQ2cG4 +Supplier#000770377|p3O8Lj03nmsG3mZh98wiCTWVNyQi4j9uFJcB +Supplier#000770396|V974M03XNJ0lUR2a +Supplier#000770422|7hW9OdJbGOf5mjhXcWbKn14D td4TkODGp +Supplier#000770432|IjB3upf313 +Supplier#000770530|FMYzo,ZWOcGHpdr18zns7Xg9HQHq +Supplier#000770585|eQhMfcjM1mwxBUFwNDO +Supplier#000770600|UX0tdDWT Z49Ry91d6TtUZ4AR1uz,2Kuv +Supplier#000770665|eA7q4Tb1YB2Km2ym,rwo, +Supplier#000770680|S3PZ1TCzpmok,phEh2305BBatTBqt +Supplier#000770756|5OYa60RNFEN +Supplier#000770809|N6ptoEB4HerV1In5UlhNbS1cDt,2YJ0UBsxCO3E +Supplier#000770842|m J2pN0bjru2WL7xC7w08cqLNkPEI6YYD0,s +Supplier#000770896|HhSO,JX7UcNMs +Supplier#000770898|9wZ84ZzFlhFlesgkFpUz8SU1S5a,1lciLLXZ9V +Supplier#000771039|AMIs51VTTS ifDXDGn7GQI2ssEOhd8P g,m96Rp +Supplier#000771055|hVfuVD1i t2HEUyP8GNhvSpui6nXqJU7 +Supplier#000771164|oFaAjOHZi5XfBfW6fA5YiMyQ4cWYY81y4h9C71Y +Supplier#000771167|bbJSEVeWZCnO8QYbvGqdet7ipI +Supplier#000771253|y zZLc1gKWbPGnQcyjOuO,UeOvm wf0afFM +Supplier#000771470|nsnvwZxr5dWZS0dYlKIw +Supplier#000771488|mS53lAt9Uuey +Supplier#000771490|1MLtDWjrMvsKfWHeZOyVX9sZbr7T +Supplier#000771494|fManaIN9dansy64r 5,gBkyfCZqhZwrj2h1mtXO +Supplier#000771704|TN2xVub2AWPLlvVGv7 +Supplier#000771709|ZnYRqcl KmZLTIAaS +Supplier#000771722|qxGoRryjdbsSP5jy4dZugXxqxBlo7ZULi84w +Supplier#000771733|ykJl3SRjSYKCK,7 +Supplier#000771772|uURBsZKJqwi5TFbdlQIDLvmgsxOJ3a3SsT +Supplier#000771788|HCJS5azVOI5QCks9J CGh +Supplier#000771910|k8NVd3sC28kDR +Supplier#000771936|F0f6H4LRfpfu8OiIrXQMGHghdJJ5TKznODNxj +Supplier#000771982|Z9,QZ1YmsjvUMfXOVNTjTfK3DjdOHI +Supplier#000772117|ioikD,PEBCEtqNnNFu3TuzRFpXfts4,x65de +Supplier#000772146|SEOslxmR00sSk1vIpGelZzGC +Supplier#000772170|dSR6zXZrMtXZKGxZ6X5D2mb +Supplier#000772175|t7lrN8Tp6C +Supplier#000772310|hcLJT3XDMY RNQRsooYDpTXdfLf,J +Supplier#000772347|utFyZUP X0ZE,FzhAEN +Supplier#000772361|6Ri187NWWbL gDR +Supplier#000772395|EnT14go8V95BoJ0yHSXkH,f6YtXxiPgi +Supplier#000772424|Ik7zfkleoe,n1sWlr3IWiy,uPEg +Supplier#000772467|JYZA0z,3VRZLBJ92186J6m +Supplier#000772476|zYUPl6vixTVnCYIXxVJf9SDcE0MEZQK +Supplier#000772487|OHRL96pJHXvR3 +Supplier#000772499|zOW50xHtsmaXlVcA0E +Supplier#000772586|itIY9IUBHHrSZrR83eqJpcqvCgaI +Supplier#000772703|Qqr9yFtA,pWQf79EGphe X +Supplier#000772744|FO7jJTXhCviqcr4mUbo1y62sRpV2HW,TSLGu5 +Supplier#000772772|,jmya0rqh2Y FMFfFh oyWFpupvVoC2KaD,4X8r +Supplier#000772798|QEGvIDVR0r6 +Supplier#000772820|qdNyUdwyKtXN +Supplier#000772836|S2ssI3qR87MrP7AkLFqDqFThO3W9St5eNe,58 +Supplier#000772872|sz,fHRDPVrbRilPoMj846ub0yq,c4tM3yKVG +Supplier#000772903|SCMmdeWs1oPa +Supplier#000772948|Kxt SEK768 +Supplier#000773014|,04Su0zx,d0QL2AjyM TEvCc1KdDnoXBM1 +Supplier#000773023|Wo75 ZSynWAPp7 EF,dk +Supplier#000773055|A,63kZU xXg8Sylg +Supplier#000773116|hDFmhhKRknd9SNAM5lKf9Ctbmitkds9voSIA +Supplier#000773117|vKxmbvg,R84f2uw3B2tKb,mkOieGwClIRRQikW +Supplier#000773292|99YPi71H ghSnzi +Supplier#000773401|FHgEeXF1wQ +Supplier#000773403|NiBKuy7fMAw26U +Supplier#000773463|o8hJwLpKkmmYlHwNyzVsNO3clfZlX +Supplier#000773474|eJ3iv0yxf,3OGJ5TCHKBVQuKS08ycmQDAlQ1C8fT +Supplier#000773528|v30NfhyjHjL6cZnKr3 +Supplier#000773587|0KbJBKWBbFvdkte +Supplier#000773595|37mjRynoji ae v0TV3xQb9qcL 1yAg6rbaDD6U +Supplier#000773618|IiynpMuwJOZ,LjVIINDsu23us,h0LmnEQpooc3n +Supplier#000773817|8sgi4Z4crmNzI0ZHuhXH1hji8BJp1Z +Supplier#000773866|9l2AZSJ,6Lxj +Supplier#000773877|Pk8pt,vipNN0f9fyEm5 +Supplier#000773893|J6Kb7MDd,qejdmehyPZEvPjmL5sYJN8dq8aY7 +Supplier#000773944|bdhD7mjqZvjWgIZyZ +Supplier#000773955|T7p3xfaBV1oLbW2DPcc4ZX +Supplier#000774030|9sHU2K8k5YYG3GZLwdltrpkfIh +Supplier#000774078|si54LGpJ80uGnhOM,rxmne9,Bjdtfg +Supplier#000774090|VEyhqfPGzPhZA77 +Supplier#000774098|Ereq5oVZ3FeenZW Uo4RafTBVD6oV +Supplier#000774099|C,Dah,Yoj14JY1 +Supplier#000774163|yJpErKudzlaT4EhiJS,UYKs +Supplier#000774314|zrsruL277Uq0AaV +Supplier#000774324|J8te40Pu5LEeGuKHllFw8 +Supplier#000774405|lr4NgydCDcDQihY +Supplier#000774473|ff0W4yUyWyHqQ93ivOFbV7s +Supplier#000774552|MhGdICS7wyRHvNxyxXy +Supplier#000774555|AeYULTV0Z3 jCzi +Supplier#000774565|bIKC7lO,wmi +Supplier#000774594|UHtgFK6WC9oPAijwQv9SEns7vPf +Supplier#000774622|S5LtUICm0Pr8oP8yXbIN3L8sTCn3Z VhL +Supplier#000774630|KQEW30lwDB 5J1n +Supplier#000774636|kYKKkLUer7vWvB +Supplier#000774677|BiWEfAsihbFff3E7R +Supplier#000774710|2WWyzsmeBG +Supplier#000774756|4iwZXRoGf2wh9bzZQlL3 +Supplier#000774780|eZ7yNwUCrvi6Lafp34tg,Wmj0kx Hr04EFlL +Supplier#000774878|aqfm4k4wDHLWdY,tY7mABqu +Supplier#000774923|5WaFoXjzqFA8aKyPOjeeSUbPfhZ9yhl +Supplier#000774955|XvB6V40hDrrmF8GX CEKDIooqvpR1VfmyPWbW +Supplier#000774978|VbzfOuldxTfI2Qo5MQphLWGRofIo +Supplier#000774992| wkpZghSoGMpkqerLVzxj73rv +Supplier#000775055|Lqc,xiX7mq1hD,CFKdCRDJv +Supplier#000775062|IOFl7N0NsbYxGhOn3zZClya +Supplier#000775067|i5RNgrsAoouDbhwNzO50YyWB +Supplier#000775113|KTHV6QcCxx5SqY146RoDjnOAkPDGj +Supplier#000775119|0IXh0 rdsEgz4bKQy8o4Ao +Supplier#000775127|ZhVceeh7tw7RWvYsB0tdFuJ8Y1ARAZ1FPv6fY7Y +Supplier#000775162|JUCahf2CPXeM +Supplier#000775243|6fo9LKmCWJWL4sEZFc +Supplier#000775279|LPXfBJS1JBuwgI1NEZ9kPNe 8 a4Ey0WN4ebtBo +Supplier#000775309|sYn6bQq7ZR45oeNN7tltEnCiI +Supplier#000775311|O3rGkwL2fnajftKLbOsC +Supplier#000775440|hLMowO2WMavTt8X jwvj +Supplier#000775452|LgoNfXgp1SsILhfIRJe1gEx +Supplier#000775506|gpzvswRZ7yPmtau Kizc,Oaf8BUrw7zUMZ +Supplier#000775517|RAP2l5OZ0okn +Supplier#000775537|WLphO9,,4vfkv,pMCYT +Supplier#000775595|gYqvl9 dwJUmfadJI47XF96CAL1j0Ztz +Supplier#000775603|nAl0dHl6 jg1HXHYH +Supplier#000775672|VPmUqxywpcR aLZExjEq +Supplier#000775749|MvakBMevgUlrwUoTqE +Supplier#000775792|xdBgX2kGyFOOssTT9DhSx2W7Rtqlxq5HmZC3Ci +Supplier#000775799|C9,7pkkQo0ZgEpUR2GzYcMUXykhCBCKKRideZOB +Supplier#000775902|xKKSfZBEqTxnV u9tTrKO7 +Supplier#000775933|0ZGd500Eldnr,1JtjGSc4,1dMHrr4 +Supplier#000775994|I,JILFEugVqfhxYnRDRG,GsxpLx +Supplier#000776109|eplfD5ZiWibYJNhwW49yRpDIYxNsdqTIm3 +Supplier#000776143|J5aioR n8oQ9 +Supplier#000776166|2XDLKdjJee7oQwXqigxi9jkXqLnKRlpJ8 +Supplier#000776182|0gYEbV7QjSP1MzTJNkwTY1lPLkuQZYF +Supplier#000776396|5Za7cUGPhKJBOyMZy0uGh y +Supplier#000776434|aJEVxG9pyMQwXVZo,iEEn +Supplier#000776464|vynfmxDxJt6Kn2 +Supplier#000776506|,puz42XW50IPj,mU7TJbOxwk3cydF +Supplier#000776528|wbTpuTZkLtaxcmZjcrMRg5ZrIZ9mccNhkeZr +Supplier#000776545|NEqhJpDjJvC1nAUdyG12obAf7NtgHcOi,nV +Supplier#000776551|d1nOG5q0yXym4p68bW5x4EERqQjxM5siw +Supplier#000776650|qasBFzcPIkQAbBb5pWIn0 U7u +Supplier#000776692|QuOqEh5B5ZKNNjKHQF,RXEXaaKzGZ0EdQwcYB +Supplier#000776702|YsQ7Sg88BFsXMw2x +Supplier#000776762|2yW7ffqByGMQR +Supplier#000776850|TElWk3sDOFYNw0tGHA M +Supplier#000776981|u5v45,mn,sSQlf4xaQLoVitp,q,hsRyP +Supplier#000777053|GjYoIDxXbQvXz3kltzkOpyJGqZ9aa +Supplier#000777069|3v LGVEoYvV,Al +Supplier#000777272|WwifOoi77Py7HaTX K7,ndhvaQGdwpWy +Supplier#000777376|VDu04SyaJpAhbjFDATQhijzvtuotK +Supplier#000777396|Z4kCZfRB964IJT4t,WLddTmqJs +Supplier#000777462|yptjoAxsduxURYsQ7YrToBmgQcp +Supplier#000777570|1t9,obDAbKw1q6ckj0sBmWij4yqw +Supplier#000777578|kEhJBDiUr2GecyGxnyUvzseLZ4HHxF,DFuS +Supplier#000777685| ZFccYTjFjP6kdcJq9rXj +Supplier#000777902|rJRKqDJrcdKDO5XediWoZdgFT1969wR +Supplier#000778017|MncjBrjRlVsiFC,UXji8KIrQ0mj7 +Supplier#000778039|0hukiAX2oZxoPIs1Yin4StnN1vt LhksW +Supplier#000778054|sRIr4aXNAaPWj bJK2KH +Supplier#000778129|SSFDpq4Ri77q1QATML47DSUAOxm20Cr7FEVNW +Supplier#000778140|NVhFh08B7R2C0I4S7aW75gov03iBpL8Qek +Supplier#000778243|afnv0pfffHjcmGl3ZS +Supplier#000778291|HzqibhikXgrkbOfS +Supplier#000778302|8Mu Fd3TbiyOjHHq1 +Supplier#000778324|UZgEeM8PFRkKIxAuYBNT69slNWIphs +Supplier#000778473|fMTK,WsbAT2ZpyGy +Supplier#000778480|QY6eAFQn7shyc5kSaYuwaP +Supplier#000778515|k1,sO3oQE0u000FssX1BpejD8XoDgfSjIuo26YcD +Supplier#000778609|0oUcBGUgK4eor,n3USJhwFDnHQnPSN +Supplier#000778636|lzPPsWqFkOzD +Supplier#000778736|Ji3WF56FtUf4BprFV ru1FDWreEPM +Supplier#000778814|KK3A7vNJVk7pelbwk RN8b7XnimY,FvHE7 +Supplier#000778826|Y132qTNTEfzOV11sJRUutVtiGNM IZ82flN8FTu +Supplier#000778861|gQ9zA5d2GNk7Xf3Rr OeAzeA8tuzhD +Supplier#000778980|cnRAG3I6CwJMwhY3D R1DKgcyxSb12z2yj5x3 +Supplier#000779156|2vEMmXPk58scswJNK9c9k6zj +Supplier#000779179|TVisf7GAHfursp6qLMT3P3viOV +Supplier#000779194|oPcyJ6FfknvYSr5mBQ4rYiEnjVTLtBgmMhizHcR +Supplier#000779223|VhrOBgEZ0bE253JLZWwFM +Supplier#000779286|R3utXgp71voTTX +Supplier#000779416|2,rPd 26x5zadUQdvgL1xiNUC +Supplier#000779420|pTgWsTGbefFxMulF8Zv48qlRCD +Supplier#000779464|EqgJ9fs6piScxFYl1 +Supplier#000779489|DkfRVqgQMUoiEodpWq23 +Supplier#000779630|uWSG73jyHibvTyIsy5wzcOpe,lp +Supplier#000779646|IO2Le,fqMF91t lKen0oU9vk7LBu1 +Supplier#000779665|aN39sQpE0f5cZTNLwpjfX,EgKP9p5,qWzgxoL8b4 +Supplier#000779743|4iA6rmjIDtdOOgINSc +Supplier#000779779|450P6qGM02h00RpGD8WO2yPoJ +Supplier#000779799|K,K2r77baK +Supplier#000779812|fP9YPNWQsCqo +Supplier#000779813|z5d48TVG88PoN5x 3jORGmghp3FNt +Supplier#000779822|pQlGa8eTNWRk9aJVi4nFgk2EfQlkv +Supplier#000779866|oMPxACyjEluvDaiRCyfBFCgdWn3y7 +Supplier#000779961| Cm V6nMKwQGDbxGNgERkFHTdG6so R +Supplier#000779976|bIttuwA4 beekLIpszeGe5TYVwo ifbuwglk6k,x +Supplier#000780006|OvbcOqRev3,HMPZAowD +Supplier#000780313|U9GqXHjPV0H9uZldN4w8n5s8vTq47xnKLp7c +Supplier#000780314|NlBAueXySz7aQTfaoPf +Supplier#000780326|ryaeG8UmMkvePNIQc9MWeLbCBKW ,W1N6X +Supplier#000780497|3GOHpSoLQ5v +Supplier#000780623|Ctok2PP9 RXRfggVC PqnC +Supplier#000780706|Up7QOoQzG14Qlfmnu +Supplier#000780770|JTmt3r2bAiTEGQvsN2raLKdU3f +Supplier#000780779|iGsnTVVIGl8 +Supplier#000780907|iYe59Un1rY3WH53u +Supplier#000780927|cLolDnQpn8u,d1VCpq1mg1ZWciGVroqUZdbSMl +Supplier#000780975|2XdGEJ6hpkS3XqSxlti3a +Supplier#000781005|72B5,HYQ6muut5v3oI,i6B8A +Supplier#000781031|QXiSMBDAhLcR8Nq 3hM oJ,Q5CHGMBk5ha1S +Supplier#000781063|pkCcQoutE36TjWXYKOwWhRSQ XQct, +Supplier#000781101|y3bbng5d4S1xx7MGQDNJwiF2PhXxKBRz +Supplier#000781290| wzM0xfXzlEihxhePT3TRZsY4o Y5 +Supplier#000781301|us d3SgLtwrxuIAP6sF9Po3WCBhFR47sNnJphQZ +Supplier#000781319|tlj8peBCdjghDpt4YauQ9jG +Supplier#000781378|4h9fpxDyaoGzZcTPCd +Supplier#000781393|4tgLE6r1M,u7PHyMxoFBvtef4A0xuVxHwJz +Supplier#000781454|SyMnRncYjttGWF +Supplier#000781481|lrWym3m6 Jnd9Z9uCj +Supplier#000781513|7fU43 YJiVQOHFdE2xt8lJXf,ShJjQTKlue8Xh +Supplier#000781519|KNCAQT50QFjgaG4aSY +Supplier#000781536|1 q3VcLSRe7hjGn60Og +Supplier#000781579|7lbUmyjne1ybcazR +Supplier#000781597|cTTk4cwG 9 +Supplier#000781630|vXHeMUl1Ybg4sG5I +Supplier#000781654|EOWmQt1TOp +Supplier#000781722|4aQQ5JKCqWWiBWbKvQ5gEgxzHHtsOz qWSqou, +Supplier#000781739|8ojRQmbBq7WgKvpgF5Qtggtxwusn9NaM +Supplier#000781784|KpZ7Y23qkU7Wl4ugHop6bJezPxR0KfpPH83FnNM +Supplier#000781790|37mRY1CoDaJgLmOp9Trs ZFQsqumEi6 bdEcTP +Supplier#000781835|pdk,WjrakL01aZZcDeTPOjt9qJGVKEGiLrBn +Supplier#000781848|OrHSeAcTQ3JjMTU6fQsGO9gw +Supplier#000781929|dYV4eOYumJbWStiAGk9zYc3mANO,y1XlUyd +Supplier#000781974|bkEvhBTLqdGuurKPicxo,7xzPdtUfr8XBU +Supplier#000781991|43hX85AYwaWsmbmsS5QZhuAn +Supplier#000782090|BX T8oM J1us +Supplier#000782100|G1KCFXtzJDree pU8JjS +Supplier#000782297|,p NbA7 RcVv27dymbxOJC +Supplier#000782403|LmoB ly,5rHOiL2tI3ro5goGEzBCIZ,MYVYrm +Supplier#000782543|U8r4lYrXNXUHitBXZdq +Supplier#000782582|N7ttv0sCaL7FIVO52hH,JMVH1xFm +Supplier#000782593|lT1a3 sMOZ6R7ZdC1hZPLo1Eb8YaG1C6X +Supplier#000782606|GdcKgyUqLoP5YCjX22sxuykt8D5DXb +Supplier#000782618|zY9CHah5EuYntBRc4,GI29BZUuBhiAMsecyjhCBT +Supplier#000782698|sllnC80PzwGSdIs6TnlBjZcMR +Supplier#000783037|ml7wkMMTAYeUmxDFud3gPbL8Wk1NASftTNyxl +Supplier#000783070|Lws8YZtwSPfMvKsqoY,X,gmg0 +Supplier#000783168|du 52wKUH4s9GKG7QZGPnIJ0az7aF5f7672MWn +Supplier#000783236|SUW2ceOn1n4kehE +Supplier#000783252|xVInptC qzDXS5n3vkC7Lv +Supplier#000783303|jo8LXeyBD3,h vrNK +Supplier#000783421|ZOi6y2DgRy +Supplier#000783426|T1Svmi7eH8O +Supplier#000783452|B4zLclMbaxP58pUKjNrQh9uTj9 +Supplier#000783486|oysRnzY70r1I +Supplier#000783581|vYHvAP 7oDxB +Supplier#000783588|l,ibrzrQCOfJm +Supplier#000783750|nlzaDJw15GqDTfP2KXwS7D +Supplier#000783807|,74RHpdeQE3RvBnz1IPZefOr2 +Supplier#000783826|oW1pLUZg9YvGSacRNXzVm +Supplier#000783861|qhcZ7wmM8thEc +Supplier#000784138|BYDE0Na94SK4N3xMpXiDyAjP6IhA3itAcNFLY27 +Supplier#000784166|90PDMD kLkYJuFt1iYH +Supplier#000784256|vEN7u,cK5gIoYJiRS +Supplier#000784306|wwf8KckxwtRnYc7,S29s8WXhb19bmn +Supplier#000784337|R2szNWtNpTF +Supplier#000784448|,tV3alzqK95SQA2FalzvDv bSANJ +Supplier#000784459|bB9oFEE80HgDLvngQsr +Supplier#000784462|gzZB8qgrPOa6OxcN5mM,BjcwSllM,BOdp +Supplier#000784513|3s0HqAe6Cq9dvkh1qPeruPs gA +Supplier#000784654|jYlSnyUkC6Bwix1huI3dtwEq9,N +Supplier#000784759|H0aWE8XY1JkSUL64OHGkS9m1 +Supplier#000784776|JO109OaSqBUA +Supplier#000784831|h3Y95fOB,T4t +Supplier#000784841|XlrmRnNxBW +Supplier#000784853|5u6AqTH765TOrgaufmSxLkUMdPDV4F +Supplier#000784868|NYzujJ0TRZiP8KXTytPZ0xOV2igxJwq +Supplier#000784901|qsxVQtuH rfaNr1oKvhCwrlBzyUE5 +Supplier#000784918|8jlwiQ,hUDwekAq2HHyYu +Supplier#000784958|hemx2QqZi3nuU5Hu4l +Supplier#000784970|Hbwz23ltoUzX3Z5Tq +Supplier#000785024|4i6cn08N5FFhmJk7n +Supplier#000785057|f0o,yWFBTLfgjOwKpf5079Mf +Supplier#000785081|SbRyPC7D3Gq +Supplier#000785203|Ul5wRRuWqzT2 VPGHL +Supplier#000785292|1oavbb6Et wYkj iHAAfXagdoy7Gh0iN6 +Supplier#000785295|zcQ CPfQdUopfqv4Jh1 lBokbkKW7mTt +Supplier#000785358|szSzf,IWhk, EpM35OQ6S +Supplier#000785387|t9vAmkgJmeDhZcMD7aR5nA +Supplier#000785389|AxlIBheDKbtFVG8vSyV4hWqqFG75l0bMzOv +Supplier#000785461|AEHYEE9so9e1D8MEGr5g, +Supplier#000785476|GXgVuW2LTmV2ghhMLGc92FlTxJTh,hf +Supplier#000785542|Ez2Mbr,vmWe5aGhN3x soYFAU5zvP +Supplier#000785628|61eQqI52PdL8DgruLksGIN7frB2n7wmeIOHlfjE +Supplier#000785749| Cwbz1OSySlsTFOUOqczpfPkl 0TyE +Supplier#000785842|7oJo2tu,VF2IpOEZY1zU9uX +Supplier#000785986|Mjfd93,hKOZ +Supplier#000786061|IWfrQlnbQ67ttWRY99PTKBmg +Supplier#000786302|XBsqtdmTeckchKnc +Supplier#000786379|TTtqF9h4vc6HMpN43P7ftJgQcjvpWRhC +Supplier#000786384|zL6cCJ7T2sSYQvSG +Supplier#000786385|RsGnCGU jWT4C,h2OMJnd +Supplier#000786432|MtQsOJrvspf1E29Hs3yk +Supplier#000786464|tHp6SI F5NvfgKIJOjikYxQfkI3DNaSSBQP +Supplier#000786583|81tjAqDjEnm +Supplier#000786680|s0v sZRJaMYWDnUS5q,JeiXsdrUmrGRY4qtyKfeG +Supplier#000786748|4xq8lNcxGkccBrLZ9eav0XubQqkyEqxJ +Supplier#000786872|KZJz3fOu6t9Cz2hKiZlRsCIp45OfqXi +Supplier#000787019|adKYB2dESuz7u +Supplier#000787126|2YtRpgd7PJN4FgS9rhpS8aL +Supplier#000787139|G7sK3TPy1vMtHweWf,XGrHM5 +Supplier#000787150|fIrgXLU5s, +Supplier#000787170|cI MuLHpuHvcTJzwIpCGZ7YgTxx +Supplier#000787189|2nv3PkXsw0yH gaMEFk6QfZctdzKJ +Supplier#000787194|nnXwZ sucYNNyfntr8VN75zW,rPkU +Supplier#000787219|MYiXMkQroh9 +Supplier#000787236|rrnldOFyWAc8odS +Supplier#000787454|g9A3KiExflR ycwgBXbYAP mccYIvXrmxtIJE +Supplier#000787538|Npt3DXJwu Is9B83,gW +Supplier#000787542|CTHZ4in8YIgmrvgAAL6I5Pt1aV pX6UcIwvo +Supplier#000787581|KRFD 6,eeP6Ku16kwzJJ34XI3LVcTko1r8OQM9 +Supplier#000787617|EZJJQeK5O3kd +Supplier#000787629|0HVOSOEXTyYq70pM,UsI7Vp22s8 +Supplier#000787649|EBSILf08AtQvRo05owfZ3cn,p9 +Supplier#000787700|GELH vBgsB4EIb7bDVZkLbcm +Supplier#000787808|EgRV5ree,wrrLLVkbQYptBJnXx5ReW +Supplier#000787875|Fo9Ew 0Gvl2qxnLsBX5M +Supplier#000787937|yoeMMPJdTQxb4uYx8Lry3sfYA0EhxQOHCvQQNBN2 +Supplier#000788039| EbgKTdhz2FQkZWDzoiHyWRJfj1erqN +Supplier#000788064|5KCSyAhYzXO +Supplier#000788114|Ma Du0caNJiSohRk7vogO +Supplier#000788122|XPj08icQm9uxJFaaznvqKg +Supplier#000788275|8fR2rFT0M8TNwv,oiitH8WqIZQQw +Supplier#000788287|T8Av4ER,h1Ve +Supplier#000788350|iAvzfbYUVMrYN9 D7xA8,FpsP,MDpeWP +Supplier#000788394|6db5xxBs1mBk9Z +Supplier#000788611|Bc8aFYDBJ98,cAIpGmQ49XsmnHiT99 +Supplier#000788670|4AJaNn 8ev4k5HTKqpC0dMY3Fdz5iSEvz +Supplier#000788675|vPRdenpjSo1qE6zW7NzBnE10,homLvwp,4 +Supplier#000788722|wyYYw85LGK0tlv +Supplier#000788905|FN1Aj4vwUwWmZ1uSwTu +Supplier#000789027|pyko5 xlUQPB 3 FG +Supplier#000789236|uvGHwn2mhQjj7Nt,yvrjgRsUo +Supplier#000789268|lSwI8Z0 hDqHW8s pbPIfuEtx +Supplier#000789308|MqCanHHDQ pyLi1Tln +Supplier#000789374|QTvAjNh7psJrf67 +Supplier#000789383|CyUU9p7NQ37ZNWwQzl6Sl Q7x3eq4h9sx1tlZCPV +Supplier#000789432|WrTx02 HG1ZfH3VUpnpv9 +Supplier#000789485|S9,p9PtRn7Phfw880fca5dHSi46xUu +Supplier#000789550|tkYSM,M78uwo +Supplier#000789583|HCWUjEXOniZrXaGFi +Supplier#000789584|OWnkhBMopYrO +Supplier#000789602|KOPPGzl,nYfoQUBguNLt7XDmSQ33pqs9zNCHE +Supplier#000789629|zCqCzI a,3BIHM03rWkWyFY0QNRK1gEDt +Supplier#000789635|mXCPx6ZqA2gyFdM10ctWA0qVI3mh4 +Supplier#000789691|qPEsI5Q2F,ER2dVp0 +Supplier#000789750|,QRJPTyu4YqtqM +Supplier#000789781|mYf6foWR8Nv2 gP66aDEnF +Supplier#000789800|OkSqR2gVR8pf8WbH62MkJVHvo +Supplier#000789804|l0twlVR1xYRVYJH,pG6ynQQL7XVf9G5W,O9bNOn +Supplier#000789812|gJgM4QTzu sPzylghwHB8gjeMadOxyf77 +Supplier#000789826|KjJPcXQ0IErTnTGuk +Supplier#000789861|e3eAma3Nc8 +Supplier#000789892|WzVFbcRMTN1QgFsqkjEuIRkgLJ9 +Supplier#000789909|CziX3Ru5IdkmEVVnqB0,ifmCR1L81 +Supplier#000789929|QHwPIBOvST8TE1RIGjsHUkYPYT6YkuEtrWg1w7EB +Supplier#000789961|9UvQFG5qa7UI79ZejB9dPv3E +Supplier#000789993|fyrskoZY2R +Supplier#000790059|5u30xLRgflPyqjr01Kv7G +Supplier#000790142|bgf9wEVw4qMtawnoyhs,Nes1qRxJsLCi +Supplier#000790151|Qj FMvHmAx69,FohUIG04 rx +Supplier#000790197|v R0xCcDVBVDaiJjRYC I2,yWUPy +Supplier#000790356|,Ou89rWCjikoDqvEH9yaBoFweW0xqzCeVj +Supplier#000790397|LkP1Wm2SjqHobqlKR0 dtcBsHaNjN9uSqEVBvue +Supplier#000790428|Hg r5YtqfabjLKlCtYPKciJTXeaH2kYeNqeL +Supplier#000790454|34JhtUGEnoJS54GGHJx,QlpJNFXR0RIGR +Supplier#000790500|pbSdk1,il4vDyHP +Supplier#000790501|htiNrFn6dOX2N3QJaAbP5xzddt66FyML +Supplier#000790601|vw4,Ce2NTztSCrkUdm2y UqomRa30CeZn0ZKdmnk +Supplier#000790608|y0skT nj7,rLiKm6MFBtHu5Elx 0uoj8RCLDs +Supplier#000790611|MTMdnNZPCzR8maL13LWHNnE6,fgDqFaF01SY +Supplier#000790653|TtO8SzhJ3E i3Igde0WBM7jSgLVuZEGHpEnI0z +Supplier#000790676|NCKySJLW75RdUuBRJz3WnzBsz2Uig +Supplier#000790685|gbJ EmKfqFqhrriYGVmwzyIdyPueNZOI1USKuzM +Supplier#000790725|YfnnNw3wqlrPSnyh +Supplier#000790761|O,ZQLieANL4YadOveGS7l2GTIfVOIY +Supplier#000790817|4BP3Y0AWDRpmQQR3OedOT11EnWcmdkI6u1YW +Supplier#000790875|QEoG39DinR13Isu5VOU33,oJ2JQmz 1e +Supplier#000791009|OmXOJ7b8KaBPvbu4AIhtOXyo +Supplier#000791041|zJBfzXPc3nRCyt9CHfKHRkf3GycJIvNQtZv4v +Supplier#000791118|Sfd38l82c2 +Supplier#000791203|QbjljgR9xZ +Supplier#000791207|MQdkgDW ZHY EkAKrDNhsWdo7 +Supplier#000791228|eJ47Lf17EhlJlN2PlWBMtLuEAdw9cL6sGj6BTuP +Supplier#000791264|SoyJUgdN8Hj,RTRc7FLdyX53A +Supplier#000791271|sBHqS4TAR3lFAkQvxiJMdYq2OD90Q0oHxVu3i +Supplier#000791353|EIIeLfgL6DrATE5 +Supplier#000791384|N5gIq 7xsxz3aY7Y +Supplier#000791394|FBO8,r LCxKRK3gAhfc8Fvj,5TquoOyhAsw +Supplier#000791501|uSvlttzwzT0c2VPy0vkP +Supplier#000791631|Ku6ELrHN UTvOXHm7USjbbTSVvJ,0 +Supplier#000791715|sLueBvn3K gpdt0,XzDRuPAUlx +Supplier#000791757|9sF,OtI7yj36PmAuaxaa8x4bgnwpfb4f1OThru +Supplier#000791802|MepHqDsQl04dL6BVBUsSqZrs6nJzR +Supplier#000791810|OW6vKwK2mi8y8FqSsXBJsi2dQd +Supplier#000791844|mHdOdJxTg4M,uHIVYZ,Xv7QL64K2d1d9n98X8P +Supplier#000791853|6UjAtEmUaMahHr 9Cg6 yRnPCIKPzF2IuLA +Supplier#000791883|r2yrIFtG7p8PUBKz +Supplier#000791931|pe9m5wl gV1ZbRkGBd1yjKErHK15Jh,1bFr +Supplier#000791992|58iPhBY74U +Supplier#000792071|7oR2VFgUl2pa +Supplier#000792144|wrTDJbg,VMryOTUdnmBP96GV2tGpbZyfB +Supplier#000792156|c3rua6t hW foX2h0x2ZXNgE6vWNUYccCIk7hPem +Supplier#000792190|u F0dhwhGEaEO1zgc0xKyykU31qV02K0 +Supplier#000792228|AIf8rwadmis23r5vlS +Supplier#000792269|8zfwXj9ljSlh0mQy +Supplier#000792289|wvzj iqDdbh7gKDfoCLgQLfQeJcwZ0l +Supplier#000792306|YoJ5chntpO7ucJyw7TchN7V c TjrL +Supplier#000792441|YOnSIhRdeDTXBmIbOYecOB97JGUHGn6,vslEHN +Supplier#000792455|MJk6D8o6Jko7FcmuwU7mFjZeP4Evc8 +Supplier#000792461|SLflECjGua ,HZY66Fp +Supplier#000792502|rfvjfaudM6ZxF8AhL1p6MgHrmc +Supplier#000792530|,BhZfabl2Go7B6MFn +Supplier#000792581|vEbRStZXHQ9zT0LiRn2TfCO4S856ef +Supplier#000792586|FE0wsniZaq0f +Supplier#000792630|,NMGTGN5yL5x1v8tUl7bu5z7QgRNehqa7b4q +Supplier#000792676|86YHYttlwD51Iz3mfR2lA5TMu +Supplier#000792817|BGcEUJ1g1NEYP +Supplier#000792824|HAhSkVO2H,kahm7gpGPDOfSKxCyolwqQGvfDumL9 +Supplier#000792941|NiEhihM5OnbodLEF9a9O +Supplier#000792946|IMaNTVk4HZgfi Bb5BM2Hkq7JJgNhsmt7B2 +Supplier#000793021|diRgc5IBvswR8IKnKxKRDPv5WBIRCw5p0h2,S +Supplier#000793027|U2WMNVJQ8kYIOmtIIGCgxBK8AjL +Supplier#000793176|ur36xbCzJXiR5aBz2Q5 +Supplier#000793189|NRxdVUWVQRgB78ax8 +Supplier#000793227|M6xOCx,TV9MaNc8GqEalW0u2vX87o1o7XVy +Supplier#000793295|34dDAl0AZwt +Supplier#000793332|P7CLjykSM2qNLRPAU86plqbbrRWM +Supplier#000793362|YY2YMF4tmmsvNHyzXw,vhg, wcz9 +Supplier#000793375|AFmb 4DaIxUVx1se8MNlz4D37Oh2g9nZh +Supplier#000793465|JpvABvhup,gE5tVZznQH4eFZN1Ak1AST73ZP +Supplier#000793495|AUpk9FRvtdwJcoYJmbRt +Supplier#000793503|60lh4qLbyy,5oYZSCf2DEJIk +Supplier#000793580|XgmNfgwXPJPEVXhPZXekwRl +Supplier#000793592|kDkGqemERBf6b oR2lu32VtD +Supplier#000793599|m6izoMI0BpGmQ5d3hlZRVuO2G +Supplier#000793618|t8I6VTJ8RRE fK2Vjxy4FINp5GWOkTLcYhxQ +Supplier#000793695|k1y2Eo,7PnNGm +Supplier#000793714|cEoIRS1Hy82 sodZCXPewHBsN,JMQQ9kInYH88 +Supplier#000793803|xU M5goZgu9jlIWZqnPYVhKN2ov +Supplier#000793821|nLxSvpEz1KI4cT1AcEFaruBD4 +Supplier#000793882|gGOdECeBYDOS728S5gxAvWO8,rbcYyaCc9Okv2 +Supplier#000793905|1Gn9o95yC4gbRBEqK7tokaQr7KsEAtEVW +Supplier#000793957|vmp qIwyYbYxVMd +Supplier#000793982|Y qMDPyvV8hrMMT +Supplier#000793997|vFMyV0Gdw28inBpHFr +Supplier#000794043|evX zPxI8WkreHHTXC0 +Supplier#000794140|stKPESUsrp,hx3TpFWo UlVrfpbbRFs +Supplier#000794190|Tdm 934o6Dp5ipy6N8stn5u68DG +Supplier#000794237|p3npBkHZPdzkCWjxv7jcEKCkL7rhhSY,ERo +Supplier#000794262|ejoXTmRwhTa2z9,Ehdf DOmCl1Yhmi +Supplier#000794354|tHvi9J6j1oCec0 +Supplier#000794394|8Xu6fRS,BKTFAfF6N +Supplier#000794432|gH2rBAHOv7WS,0N d +Supplier#000794485|CeEXdo0XJLB28gRMW K4AabcFqka8zV, +Supplier#000794577|Ti41mitUeNlcXiBnIaYSPAf7w Xjf +Supplier#000794629|Hw1N3 aKF5S218qqNoaKVIwOg +Supplier#000794656|uE5QpAYfu4J8PM +Supplier#000794822|kihYfeBy6zRMACa,P6Ny3n7vka2T5S710 +Supplier#000794903|IF4BwBlIjJad3CUiOQVY0W +Supplier#000794917|eMC jGWJ7RybXQDP WeIvL1, +Supplier#000794940|26RPrjLFEi9SOqXsonE +Supplier#000795013|J0UiDH2IUTRDwzUi +Supplier#000795041|O86OzPlOg,NfEqlq,K58slPYtyEFVkWd3mVYW0C +Supplier#000795131|AUloAfL4vrxGnpYoDDphkq3Yyd5Raf2Tg0 +Supplier#000795202|A8XxkZpORsZzEQWRH +Supplier#000795213|efhaDWSPPwjFaEgJ5FJFHa5K2JMWQpm +Supplier#000795296|dRmGhvSRXgZjCHtIWI7K67rKjax Tarv,Yd78lH +Supplier#000795331|7PtI,hwzLXkgNWNGsraNraaJgLqSJ9xakrN 7 +Supplier#000795334|MzpxPV73,J2PkdKotKkkkO +Supplier#000795401|6u7KEAiOikvvmrlRMBK1NyIL +Supplier#000795459|4m2GWaNOPyRFWaqB0MWHmnk33FoZos9W,By +Supplier#000795501|PeGBTPI0zPvu0hmTf8kcok12V, hDDKK8wD2RNo +Supplier#000795702|tvea7n7BzeT6nJAxE +Supplier#000795711|8Om5sOReB2qgo76oDXNW +Supplier#000795724|SKlyNw,eYnEt6HhAxklkgAZ0 +Supplier#000795830|3Y6efn1c42g3ULpBj5mRYiwb +Supplier#000795853|xNn14F3le4 mQWeABTS2s4rMxmqGWUgZk5C +Supplier#000795894|3BVExTyuq6iIobjkUr +Supplier#000795936|8IKWJuORHbiz6HLSKsHdCLsMjlVxSu8wtF8EBvE6 +Supplier#000795953|WMf80x01DQ88Lwv +Supplier#000796011|8r3HtNe9SrDA9pJzaU e +Supplier#000796099|1vQxqlUB GvmsyqEwn3bF5Y +Supplier#000796206|,MhWoxauVR4kv +Supplier#000796281|RyjNo49BF2VZl60zMVR18yE4Yuz4Sf8,0d7Es1ZF +Supplier#000796299|RBJCO7su06U1FUByKncKRI6KpIPMcxyp8Ly1SEI +Supplier#000796368|xLS0qNyDNqrK6QBrJiY3 Xs0ll0C +Supplier#000796389|stt2kugw6iJu71Ffoljblyfj2xY,kbmXOD +Supplier#000796624|PQ6G6GWvhyPyNoxvdn1QFPn +Supplier#000796694|sbVXm9liilttLbQNn8zymiuGSD1A +Supplier#000796762|GGfwDjXmRGyW +Supplier#000796764|vsyVKvREGQlTBWq3ajvreiPvTseurGaPy +Supplier#000796878|NUSBRwEDyqX8GwY46Xwfh s5jwjT +Supplier#000796910|bNhhbPYelBDPddi2tUDc9iS78td, +Supplier#000796946|GAe8xa38KSKHTFTdyKf62k1cgKYQH4ibC +Supplier#000796969|MYLHXHeLJfoDzWZ2W3aany +Supplier#000797238|UBPsiADhWeuJUj +Supplier#000797244|c3OhfFzaQaP0qCfJSbwQOZm +Supplier#000797346|mA2UjxwvlDScl5 +Supplier#000797347|DA4WMOhRMfs8X GMdfGMM EDhmCTY9R +Supplier#000797363|8fV1Bcft ,2u3VZhw5A,6mw8 5fdBQkrRt4mFZ,V +Supplier#000797523|eVgHKokFchVdd +Supplier#000797544|1eLHTWsNFL6McCPUdP9y6YJK,KTM +Supplier#000797593|FeM79ja0hnCRi1Noy4ZMsRypz,Z +Supplier#000797652|MVr5EtMDBiQsjtwcDVuKJ8hRvGHbe xq1y8Cxq +Supplier#000797845|GKfZg1DLoaeSu9H6oT7JAM +Supplier#000797890|Dsf1zxnE,qOlx80m4zGYXGb6SUd3 +Supplier#000797913|pe0UEuw6FTPtXiTvUX4STHtkQPmS3h,naZdm1 +Supplier#000797940|GkdoX4 MiUifU +Supplier#000797997|444wmB 7bZIRsMpBr g9tJcfuI,WmEhnnA6a2x +Supplier#000798119|Qa2mozpHj24WDL13rJacN91Ak,mNh +Supplier#000798180|Jtqf7cIPJwtI7jDELPdQuflq1bih0FTsXVH +Supplier#000798249|WPUyhgpW, F4A6gDiFMKpD2pqoOY1 +Supplier#000798263|NvWITQSozAlcJoLn5GaHWTfTB1xLkYr +Supplier#000798460|esfZlCdX8cFlqX +Supplier#000798546|UpMOGV 9ODmiZngjP5B7tXF1 TLHPN +Supplier#000798695|YwMssyI5f8VfV NqOFXVNEzciOJMBvWjUd0pGu5 +Supplier#000798719|WWpu2187IZz2eFTTH2dnJl +Supplier#000798867|j9j,pUhKXYQe5 pKPUpiIbawghT7iI ocjN8Y +Supplier#000798894|ChALZxpQc8fY1ryLPTuDC,Cs72FMaJfloRf +Supplier#000798951|uukPki6gIS mAucyx +Supplier#000799009|YwD2oOCDtrrVGm3lfWAV0cTCYripkOKpRX +Supplier#000799096|EACaAfZey7B U +Supplier#000799168|DbJ0I1lNvobKKp3GTc7ui +Supplier#000799222|3fn10bwNXAzRvNZsAMa,YwyzB 5 +Supplier#000799385|hpxLpwSPhltztiXngbfkyMQktTjz +Supplier#000799489|CYTg0CgYujKplEBWk +Supplier#000799513|9D6QDgCovhDZGT8VfdAu57dVX0K +Supplier#000799866|fXCUf4GYCADPTPxMU4R7g6w1aCGbkg +Supplier#000799879|nucMX,EX2rbqT6z +Supplier#000799899|laPQFHD5lqQL0Wnovn5akHLr7s75gb9x KG +Supplier#000799984|NoU9SDzsY7I +Supplier#000800007|4E39maanr 8mKudQItz3U3 +Supplier#000800011|1s6Y31mEAyTFncc9MXr4AWcO7R4P8nGOBz +Supplier#000800069|6niT1PKLt wbtH358SyfXTFV +Supplier#000800180|bcy5kV5GlUZStCFxlomyAjWgz +Supplier#000800208|cNdgkaqUjJqq79GmVDUBxV +Supplier#000800257|y17p4Jgz3u,wZwRyOb1 +Supplier#000800296|BeEHfF0VZkX35PjxIfthW +Supplier#000800377|0vTCAv9oycV8AOnvG +Supplier#000800519|3VHtD903XfvvsTxpbh2J,O9IlWhOG4 BC +Supplier#000800521|Oyd5 qcLCk9FaxjQc3RFcav2oW +Supplier#000800606|sIHyjt,ibYbmnDx0G2bKMIGFXDu3ZHD +Supplier#000800613|anx0ZC5cUVBYml0Q691ELvzZFreDrhd +Supplier#000800643|E9H0ofvoat +Supplier#000800747|OrDjIlevvZ0I +Supplier#000800771|,3u,lP5GKeXT3t9YCtD +Supplier#000800819|y8kacFMcIDq +Supplier#000800907|O1h5moAKV0P62B207bOhPTtFlsf +Supplier#000800986|7fcrDwdnFXYasQo7c1UUlXmCH +Supplier#000801005|xn6i0Hr96hTy6nA5LOSlVt +Supplier#000801026|W5o j6MWNQ1dr +Supplier#000801079|dBSwiU5iDQ4IcCAB2fUoy, +Supplier#000801321|D,5tpBl8hCJZv 3mEfaB0yQice7PC +Supplier#000801365|NetCetalIrxZHgt98mjd +Supplier#000801419|6Hcz5mFhpuLQ7I +Supplier#000801557|OJKBaQDF05T3aYMCd1tOl +Supplier#000801580|08BoSDE04sX0P6xNjA54aWK8mwHoxjRNgs Zgr +Supplier#000801630|4NmjJKqT3tgDQkBGjwfFbrhIdP1SVG6s09Jkaji, +Supplier#000801657|YtAsuX,vO 4MgogmR6rjgO +Supplier#000801755|KoNfaFOYTSgdaKgpawxg8d9 +Supplier#000801805|JOoEGThUM15g7UlY +Supplier#000801813|DcufOO893 lmDkQvl3LXQ, +Supplier#000801874|Yac nx9hTw Xqvob4nt +Supplier#000801990|U18F3fCDyGuIonk4bdq9KqkU +Supplier#000802150|5wM9Zz0xBTLuqBajD3PI OcA1vUV5gV +Supplier#000802176|bgO6PVBvYAenzSS +Supplier#000802215|TC46rIq4Dncj3wr2LB2 +Supplier#000802232|GQ,yGy8EFO163 +Supplier#000802262|b92z3ZJR7AfGGRMJpF7f +Supplier#000802275|DOWErq9QoxEiXH,Gf5dOgeosL8K7tHoXG +Supplier#000802284| d7Qr2yWToiJB +Supplier#000802358| 6DaR47lEwqJNB5EXVieCjdRak0rwxfcNj9faG +Supplier#000802519|Maiy6 qbhlTiKcitl6ofxlJC1Kj +Supplier#000802585|LSKTEbPqzQTAZmDWCdfFCdL21UZ53V8Aao23 +Supplier#000802597|lmsPVutI0y3SmyDjblxmNo +Supplier#000802598|P6c F1piC58xCegatHGJb +Supplier#000802610| iZCVd Zmn95o8j2ELGXJ8EN71TLg4 +Supplier#000802657|LXdGQGigsDbIoVjzc,I9 iVJbk7zdc +Supplier#000802665|k6xk8g,004ge 3wPgtt8msHKK +Supplier#000802677|AYHhHHtyRs09zkRseio +Supplier#000802740|PgpqkSPgwvtrH +Supplier#000802741|9jFyo8mbiRz1zxv0fHPysgoc +Supplier#000802867|vs,HhdQh9ZqDHERhSF70Vk +Supplier#000802901|XI9KhXb,wQF +Supplier#000802908|ulKsXjQLivMgYlTLF1beD34z +Supplier#000803009|sYJY8tm8Sb0N0NVBmcGzmu2Uz2IKT +Supplier#000803102|BF3QmjjEl7DMah5vdL vF8BLHJHJJdw3 E +Supplier#000803145|QUOG4dqpbdgFNYGgIT2LkCPU5B42Dj +Supplier#000803156|A19bLoZZJYhfL +Supplier#000803171|fjD92RflRJkhS5ZTtCQQAbofj199nG Zv +Supplier#000803274|dQK5NHfZj3BN9,M039 ,IVR3H7tQaE2MNrszZFL +Supplier#000803285|CN7tD4RZDSA6EfG V1 +Supplier#000803421|1RZtjRGtyBh4Dx BqWwVdE6j +Supplier#000803571|mGeaqonrkPYapuw +Supplier#000803576|lJtYTY4Q8lRtFF1kj3RFp48toq +Supplier#000803590|W28NzntTu0j7DXI9LnacKCAz +Supplier#000803607|9eBazDAcWOUlJBZ +Supplier#000803655|8 cEp5cm ONs, +Supplier#000803738|zB6xK7mTcuy9Uw8bhR,QNhr4iR9 +Supplier#000803745|QRpmIETgwm95bNNZERWl59aep6So9l2PHvk +Supplier#000803795|rBExhIzGOrMVKOwuwPHQtkXgdTBvgspUssKTT +Supplier#000803908|wLC 98SM4LOW62Si25GaausSRY7Slq +Supplier#000803931|2gG54B5,wJUwpnoJadIDy9WsSNP7McY +Supplier#000803993|McMui51iae6Ap1J4Et Ms2e uM5zyUVX0Ivo +Supplier#000804051|58iC uCa98,733v5MBEpZfA3Y2w6GSK +Supplier#000804098|MmCk2WAdGOZizZo1b +Supplier#000804115|KSEVIRQH96 +Supplier#000804135|Mzotf TosIumMaVCn5By2dZb,adkXwG0cu,r +Supplier#000804179|s,8wHFLepHZ3fOlPZtT1z +Supplier#000804208|8zsQeCGesQqXvj8 +Supplier#000804220|ocIn8O3dt9upwgk923HVU1Eg5xFK6lIJ +Supplier#000804275|gOrf6RZMd,UrN0XakZXNDRwg +Supplier#000804277|gsclP7pgRE7jOaCWByA5Jutz5rdJizSQ7A9 +Supplier#000804290|maeA6V ZEoWIeLSlj,DqLEK72U +Supplier#000804291|j2Rqb0zl RY4sm0UKoC4dG8k3JE9Ns5F +Supplier#000804318|7P56tgpVwFhj07E0I6wJpVk0M5zQOclgfO0sX8G +Supplier#000804329|Y29S 6LEDcTknH7dhIxjio3S +Supplier#000804339|ItIyJVOkhtp0cLLg9XwZ09ziXH +Supplier#000804424|nkQEBCRTLOhEgyGG861NPVgNYsH6UqyC2 +Supplier#000804445|ekk9qbuaR4E USG, 6L 6GtfkbuwUDVM +Supplier#000804601|AZEKx5KOTE,vhq5v BER0 +Supplier#000804774|xLBjUGvgCblLKsNj2Z0r03ezrxIRYYfPHFZIfb +Supplier#000804827|6u7NrYQN762RTTD6r +Supplier#000804849|VZ4DvyQBPlvwP2F930GaG9Wpy6 +Supplier#000804864|ruOt iYTeN +Supplier#000804961|B2RwmEVAfbm,cJG +Supplier#000804998|TzbFCNrY1RCpeHXAgGU1LGgfhCIhBZct +Supplier#000805008|6mp7 LbVgiJf vmbCsCW0PPaPlq7 +Supplier#000805031|lUWes1SejmFokzk +Supplier#000805220|wu,DT0tBQk3pc5 +Supplier#000805238|JS28haPREnWxYULiMod5YWSzZxgz +Supplier#000805263|KLEOB p0s69aUH Ncnm9EMtBfiEplZa +Supplier#000805322|gh0vfPzP,mbvG3iLB +Supplier#000805433|NJxHLnL5eYVDy9,dsDCyXw7IlpstgW +Supplier#000805473|y51FCoTm3bB0MIuuYlx4St3 +Supplier#000805476|Iz0Yzb8xtF7rHBI8H6scH5LwDe +Supplier#000805495|uagMwPiLbB1 tSoWTvPczGvyJ7n +Supplier#000805578|yJslEPV2G,DOBb1Of,WeJTduGehGgcGcS +Supplier#000805609|ClcbRdC2lQDS8xDO,awmzrVCqXVoxCXRwnM9KZQl +Supplier#000805775|RZCbAvBGLfxV9aUGDEMp +Supplier#000805835|su4vvFbmgomPfMHzsZLT6zZu5V7NW9J VCNUj27 +Supplier#000805838|SQcZqRQku4o4aOSqL6pr2PiYt,UwnbIBr2cr +Supplier#000805845|mpLdmZdgwRV783ghMkaABOmkVOS8MSv Rg9 +Supplier#000805982|Lz 5w5kE3nmsomZklYH +Supplier#000806094|MRqQBQgCvmL,R,7FBv3jG6xwVy1zlMfLFwhnqz +Supplier#000806179|049JN34WdOdsChdtTxcd3BNllC9BpdgXAMXs +Supplier#000806236|lFyElxwsdgnr +Supplier#000806256|VOpPuT6hBjl4AmBuQkwOg6E,I7NE1 bmC3Jc1M +Supplier#000806262|D4viE5UTtQKYm7XZXKvLhxQ +Supplier#000806275|Op7mH3W8Nzztd54Hqai +Supplier#000806307|chXSomp6PaAREWSB ,GiOwA3vNL8LBhI5dGjCQl +Supplier#000806398|oypntbclOG RL1QJka4 +Supplier#000806453|YEMg87z0wIVz7LLFWEh +Supplier#000806478|VX8XEoUOiL0PzV +Supplier#000806585|WzraOV3TbTVFdKRXo2KDsbBsodo6JYR,1d +Supplier#000806590|S0u2gqcPnTOREbRf +Supplier#000806627|LD1tqPeSoXTTmg +Supplier#000806657|zTCTqNEQMbX M0dgzrr6ff8wd9brj +Supplier#000806684|aV76KITV6Mup4ig,UZ0Un4 +Supplier#000806808|W496HJ,JU0bex U7 kgA0Vp8xZpf +Supplier#000806865|Klr57uWFeyOc +Supplier#000806953|uAw7FH,gZp6M5xJ5ZwMO 0i9g +Supplier#000806978|5mogBQchEn7B2 mzBBAiMqnXgCsR +Supplier#000807042|vrTgGY5Yiu +Supplier#000807071|C1tzaqZhr TGudT +Supplier#000807076|fFcRh3MERKjLiiUq6dWNkZeIpeJgSQmgt83 +Supplier#000807167|WogJER64iNnU PAVnm5 +Supplier#000807188|R6drnYZ0fE4tnbB4nkXNX3R6Zi48vSO +Supplier#000807272|ijoMQAdO V1GR4md4tMkysW77DR3c +Supplier#000807327|KPNtYKwTdrN +Supplier#000807339|1zTe18uOzGzzKx7MbwfJJfOcESgDAw +Supplier#000807343|NVYQ,LBrnQKPui +Supplier#000807356|zyTY0jnTaWhWMnBo,5T +Supplier#000807394|crXksrB88010 aobT0PYPiziBzC NhPX +Supplier#000807509|VyolB,WSwUojG1D3pLi +Supplier#000807609|woLoy32O9j79vTMVRkVDhdwWH +Supplier#000807621|QqP,Pl4QuzAK42QEdJGOkS3QuKCQ90gG +Supplier#000807632|uVJdl7b,q9BJZ3e0qZdSi +Supplier#000807726|tTyThFKpgoFOPoWrkGjP4I3lrOLM,Rdl9ABoryQ +Supplier#000807746|w J4E4CRxo41fcyA7xWVsZeRzVSMmSVhi3,HnuQ +Supplier#000807938|SjDoOfYV19Z3Exn3,hB3d +Supplier#000807997|Ru1gq4LdQA3T9 +Supplier#000808025|t6KxcG6aoKpCv5MfZ Mpkdm +Supplier#000808030|UMcmTEB5RdoQBUR Ae5i2RFUqqZjyuvsFG4O +Supplier#000808226|bMk75caYu6VA0fGmZA +Supplier#000808235|sKkU9FUSQHUz9GSY,Mr VRiCWYRk9c5B +Supplier#000808342|oujFVZDfwWSGhGgJqlMkXjuKCp691 rsLXCJb +Supplier#000808367|ncKtMOkqkTCgddToD8lkDzAdV7oN16Dypk,iTl, +Supplier#000808375|GbFy6WpxOSs7w9Wq33hXvsQTwnkcrId1T,,e06 +Supplier#000808447|3cmXkNiRBOEQ1XuL L6BJa6ZT +Supplier#000808455|cRHzM,Jbmmf +Supplier#000808485|EaCnUGatJC0SwIo +Supplier#000808528|fg4MJpR6kn4fRixK +Supplier#000808547|7nf0TuA127ISmJ Ml,S97bIqe9X +Supplier#000808564|1cORP37qXyxHMHAtryJh21ojkbxU7HeFShe8zN +Supplier#000808630|gq2xH5WX,nif,nr8T6wTNLZIS5g0YbTH0d1AD8 +Supplier#000808679|zXmtpz,RPHBvIlIbh5u +Supplier#000808685|l0V1HrDKCD6xzdtAF8Fi84D9S12lT +Supplier#000808694|E5K8IAJO5hVsfjcTvNZghhj,o +Supplier#000808769|AyjN kMwEmYHTsKxDBJarbszkC9XX +Supplier#000808813|ox9gnDouPhf +Supplier#000808835|Kc,yRzVF2uYVQjfTbfQzXGVBMl,EYyQJTtIAYit +Supplier#000808841|lSQy34OkKNy7KZER7 7qvG8vTMdl +Supplier#000809022|zicNEmZtUWB1zJL86UKfb, +Supplier#000809093|LEvfyw2e1jx8OdAt +Supplier#000809094|xSsM6jcUj ovfg 0yUjAzVgEchn,oDe4TC +Supplier#000809120|Ee788Y4oya68,w +Supplier#000809131|JqoI,2HkCBK +Supplier#000809137|oZUFPGXHuKV PIC8gbaN +Supplier#000809365|qFRilyYVgaM0QGxhcvJXX0g1k +Supplier#000809387|lnOxIdEPS74ALxkRFnsIsGSbQb +Supplier#000809654| SwFzqrytMkJcX3 hoMQzRKtVAsx1qXIoR5 O7l +Supplier#000809673| 8nNxgGapL2qA2x07oIIMJnmCUpYMz9hrPkcYN +Supplier#000809856|Z2QJTbswHh0M6WZ6TKIj6oPSiGUAr0pfeZdUaHd +Supplier#000809976|WpCze7Ra1GQ +Supplier#000810001|slu6Pgqj8g94lxPf3PysHiZiVJ +Supplier#000810003|skmqgJBhrS3KiHrEQ1Hc0XImZeCGU,XjcH4 +Supplier#000810041|A73 j,LYJvvMbuB8mOA05g +Supplier#000810051|KcTGNWQrOwzvLkz6HKawYwCMAG000 +Supplier#000810086|Nzwr1IAm3v8c8xE3 +Supplier#000810114|P3saJHJLeSrpTu +Supplier#000810222|ErVpULxN,3Lf,I A +Supplier#000810377|o 9u1XwMyk0q3USZG ICgT +Supplier#000810576|7S2lI KpyM Xqm10ooZBhW9O7nYFOac +Supplier#000810644|nkfQeK5J9,wZCBhVHgcRQA4RdHtFK +Supplier#000810653|ZPyPwrc7B6,jfG2Ta92Ejc8RM9WoxYIRkobMVEcx +Supplier#000810722|yuPWm4A0iSaN8mq9mHsGCJG1Xe2x2uaDeM +Supplier#000810736|MEMn0C3fLzr302gl83sY944VguYt10DkWy1RqC +Supplier#000810783|OHpWQ1S6q2RKr,llZOf5z7QpWwQkcX,x +Supplier#000810797|XpR vmsmb65yINepIgjCSg19Os4 +Supplier#000810858|UUF,ZZDas25VeJNqyUcb8PXpDMOtMReU6bT52w +Supplier#000810860|RhCOoOJ,fqW8rEu807mgIpP8uzUcUt +Supplier#000810865|RZ2Rsol89QY1EGL3u1 k0 +Supplier#000810874|5pmQYVJlb5YbhT 8ftEPcINX +Supplier#000810947|QOjrwPAgKzk7YIfrQbcIuAYSqqw +Supplier#000810957|yTbXW,BJkVmA3spUG6MmKSNiUvgeIR8IcWthdv5 +Supplier#000811080|KO8fP7FdiOuYJ0Pi +Supplier#000811114|RUtx0io3PkF9uzM tY2qnevq,r,SY4ElLVkU +Supplier#000811146|4Q9b7aXd22hFLqkf0Hw,KDQ3xMlvVRxC +Supplier#000811185|bNfDgP819UV4O9Ko,g4RRER9qSsEKhen +Supplier#000811206|BypSsGCekop2nbDF +Supplier#000811321|MYdKHXIqXzCPocfWcwaZNsAe +Supplier#000811390|KawzeOtAkdIqRVoRlxD6P +Supplier#000811398|g,U75 gjdvYtzXtVZh69k7xsgWR7XLm +Supplier#000811474|,Pf3To, MsYQ1EvpF2 +Supplier#000811591|anzvMDDn,kKeLndoSKVoKNSKGHM +Supplier#000811598|6zVPmNJoWxolDrN5U6YQ32Ws2RBmiUKCR +Supplier#000811622|zDP4UrP5qx,y +Supplier#000811663|Jg8Zd,,wGRTH6CtTyOg84MbgQ,152I5CfSXVex +Supplier#000811719|JdQP4WPA2e4iKraQILtVzPm t,f2ARnpQMSs +Supplier#000811787|a3a5XmN4iJFh4CcM9WjCwO2jx7wA5 +Supplier#000811907|Jl,KDXUzyiBx43NQDjp4C29PhCSeNj +Supplier#000811952|tS2UAqJMvCTZiW9vTYQNcYYdV3lj9FBw,N +Supplier#000811964|2ommBU32eS1vd,5cfeJqsiUswEUp84t6L9 +Supplier#000811988|Yr4QANY9wjuY,ox5pF4HMdzoXKVQ7jb +Supplier#000811995|LMYCW JlgXSJVUBlYDJOW,26tEqxYu +Supplier#000812065|Re3ke CMsOObgF9U +Supplier#000812084|TC7E9VRTgdzkr3etjOWAOQXtW5ulkRvyfimCD +Supplier#000812087|6o,WIdMj0A +Supplier#000812150|uuGMIwUhghUAj +Supplier#000812175|l nge2 5tHJCXvaTU Db,TqOcY +Supplier#000812198|AM6gqI 8zWBvww7z39QEtQ5t2InoCABS +Supplier#000812200|GhGVdLfJVGmwG6as9Yaw4qV,sWbj3kpvyzJKYy +Supplier#000812332|xAh aNij6XM3GPqTKFnZou6rUKEm1XNLGz7ZEn +Supplier#000812335|Uak3XXUUAaihu9DEzf +Supplier#000812371|z6vc5,rLWhby5Izg +Supplier#000812460|WGemBW OFnPQC +Supplier#000812518|eynjCars9fu1y7UtyMSDQ4iNeDoNDRuwy7hp9YR +Supplier#000812529|GeJ6ADdim8On +Supplier#000812535|9LG5WI4M hNHcjeOr4HjMpy0qxbva3Ugb2SXs4ss +Supplier#000812586|e1ZppYVPINehC wmRr4KhKvIQRaUE +Supplier#000812612|JVuTqbYe,B, +Supplier#000812636|lqwE5Hf ZmYqkw8CqNivhWHQZiJ1E8Hax3eX8 +Supplier#000812656|c1fdp1F1zyNR38su1FH8r2 +Supplier#000812747|nCBaFxvGy6Qzzb +Supplier#000812790|AVe765nUtlphu2uSUErrNiqpWD5Z7eFGU1fr1T +Supplier#000812868|HDSObmmwnyVMcLaIf8HSG lEAsAiwaCMALA +Supplier#000812896|I3ZhIDZ10aUeA7eHSE2Ekry1T8kPSr +Supplier#000812947|IRF75eM57xMq3Xc +Supplier#000812975|oDd2gxnB9Q98GV +Supplier#000813055|s7XIPeR66cmK +Supplier#000813056|AXGkosaNww45ml1uzdpc0Tv +Supplier#000813082|b7GK,NvHy0T7gjnfR6K0EucKiJa5RC5b57Gv +Supplier#000813105|Efey8vEIajxRGp +Supplier#000813147|GJOQPCaCzut6k2q5v +Supplier#000813148|RbLvhOQRBEsUFbrQviJlS3AWJO0q1wMi8mhLDV +Supplier#000813153|1ilVQdOKFEIONJot FwD5iebq3o +Supplier#000813185|NANUfphykh4z7PCr4cFCPvu7TP3RpO9R 38k981 +Supplier#000813201|7Pt2bVLvzPaWAFlRJkd cMq, +Supplier#000813204|2EHUUk6fVuBI3jfRTXOlEpPVYkw +Supplier#000813267|kkUjaED7MJW6 +Supplier#000813328|F7lP8,WfmB4HiOsx9NL +Supplier#000813359|QBUGI165AzVX +Supplier#000813564|8nR8psEOWy23aT7 +Supplier#000813609|jRlod1jBhO7ofwieX4BgTA r, +Supplier#000813610|w4liuDIhrv9CC8PLqrq3gVdmhlzXu +Supplier#000813618|k7MyFMKVfgwhoc46OrVeze9qjsPdIRBo98sawsov +Supplier#000813716|o9PhrUTclze9 +Supplier#000813734|UIsibUFnOpGj1d1G3li2UlSnrUzm6ob,Ge +Supplier#000813899|pwmdmONkhcg8DGpsm +Supplier#000813988|SUzIuxpLKeFa,evZuaJoOxd33ExDl +Supplier#000814082|yaseg08i60wWP1N8SRNYYnaAR94q7pkeTdDHTSC +Supplier#000814118|zkaXh8oqVdJXS Bb +Supplier#000814133|2WvwT9Z8vulKUH3HZYJ4Qx +Supplier#000814193|HFQjlQSvNcQs0gxPEl +Supplier#000814245|digTI3NtXfyi +Supplier#000814346|ujdXM2lS9VQVSwP2wW +Supplier#000814413|M9O7mfgaaq7cLayn8YPQsZvxAmW8k0 +Supplier#000814450|,6GmTk1Wiaj0m9KBxGMZg67tDKBWNPgL +Supplier#000814454|oQVxgyjnxWQ,b +Supplier#000814508|GLUSx0QvxvGjoIlKIma0hl6 +Supplier#000814615|dWf,Q,48KPA +Supplier#000814634|GXkOHrvc2rVygut7I1bQm +Supplier#000814647|FnEuUPf72vFzcYznPDHrQX +Supplier#000814649|xmXu4C0,VpXRUTg +Supplier#000814653|NzX231EqIV3Za +Supplier#000814746|yy2miFSXPpAGXsw84p3iVQaGTC6kH +Supplier#000814780|zeV0DJu5W6yj8s6fm3 +Supplier#000814862|Yr7zDn3,Qtfac1c65mwcC7m62oqFqgjRPS98fx +Supplier#000814895|Mrx,5tL4AH8Gh4X7YlY6y7zgnK hRVo +Supplier#000814971|FIZLptA8AdyZzMifUVuldZcXFkzBNC8 +Supplier#000814984|XiyjoJ,tjNyObFmwnc2wxpNYv,IdZq2RE48MnH +Supplier#000815051|jle7tjHW4k4uLnrUCEUWD Hxw6770MvwrbkBpN +Supplier#000815368|qrhTenCPDr15fhYj7LeUj7gYg +Supplier#000815396|uWP2SxSLp7ia3LZ015eXRAd7lxRf2pMaTgtc9m +Supplier#000815409|GW I11wPYCBT4Br4,HcHqhDU +Supplier#000815486|Uc4wMiNmKrbhM8MP7o2RznIcFUZ3 +Supplier#000815534|364cFokh76uV, +Supplier#000815662|4 JEwrp13JWvXzrvSz +Supplier#000815675|QnIz4EDcwYaA6mi2eaqFe6HMWa1nOQNqPx +Supplier#000815693|Rb7JNYUTwGL +Supplier#000815792|D6GiF99qQdSR +Supplier#000815808|3q,Jd0BhdK +Supplier#000815811|sgBR9A0ETw0TnpV73 +Supplier#000815871|lQK4eGVtI0FOqb P +Supplier#000815883| qhzdK,mNEnAXPC2gVh1R,7o6,a +Supplier#000815931|MoT8sUDNfwUihWi tTValKr1IujIrj9jkmho7 +Supplier#000815967|EPZsBbdQQ4XgoCkRB8lMqnk7AiXhQ QELVziFWZr +Supplier#000816090|IvvAyGH1NzVsYrBwlQBTDVy0ufvkh +Supplier#000816136|38lD6rpP39mn2Q9 B007B9 +Supplier#000816174|0CMeNnrX56x1Q,2g7xY7oeU +Supplier#000816348|VHq0eoj9 fSB17tfM4Svw +Supplier#000816349|M HVM EJfI4dDzYJj0jn88YQ,RKy7 +Supplier#000816513| AMAdPH,0WM4jo2K 8UVtGDVMoRJgtYnc,ky2Ea +Supplier#000816516|5lK9EuD9HXNq lJQyTeyQl5 +Supplier#000816529|Y7,ktlw2dN6lWcZ +Supplier#000816617|EXlMH9iGVhfuEX7L85K775YIsvKb3D38 0sB +Supplier#000816871|NDLc,8 CTK7j1u +Supplier#000816918|BRtmqeGHU1rI93n20VFX,cyACV83U +Supplier#000816944|kMFDa0hXSYXlmOIytsL7D +Supplier#000816999|6UjrwvsU4 VqD92LUMlKodRz0MqNL5,8l8 +Supplier#000817003|O9tdVOFWyzj3CzFcdm IOCy3 3c2Ut +Supplier#000817013|uJjlAbojKZqMN9TmpgPjncNY +Supplier#000817017|bw4e1wJu0mY585o 7kg +Supplier#000817075|ZNusBY9ur1q +Supplier#000817078|IVTyrWS0hCPVwX vUQDfZrbyJgmv +Supplier#000817248|O9LKKllweAud4d4ddKc3NqR067 +Supplier#000817257|Dd8fiNDNQ2BGQ4Xq3dIqDnVZkJSkil00SB, +Supplier#000817296|CfZEZkbSo0,MW11 +Supplier#000817315|ebwZALqAO0UPjCF +Supplier#000817380|ATJTzu9fw7ZS1Fyc5kibtEunRxM +Supplier#000817392|GeliYXW15p0Yz,Sb1HVkVtFY,TLnrqmT Y9RI8w9 +Supplier#000817509|n,0Jt,I,5vbW5wvD9UO cRhASEZLMur3lQ +Supplier#000817545|9cMCB1yJBlf E +Supplier#000817572|V14FKrbk8fvZ3Ggp gxs3v76yMiGnPB +Supplier#000817751|4m,CNjsXGzNaHdElD6aaDS8jz6QaZRsGZd0w6 +Supplier#000817781|,9JjXrZ3Zu,zZ5XGLtL5kWqnVWTfwsKbLHokmq +Supplier#000817803|Lyuxd,6TrixOPGmEd5TeOG3xEzRAeDaSqRfV6d8s +Supplier#000817810|32Bmu6w t,R9FsJwB22DDKdUKDjn8qiBAwaQ +Supplier#000817913|csWexOqFrn9Szwxy DEIoVitg +Supplier#000817927|4M3a WuczdLOczltJFTexzfs3a +Supplier#000818052|waWHczO2AEW4N3,DBJjV0 +Supplier#000818151|Gype37kylVgQiBIjqvrzhXOl8uAnWnnqMJCQ +Supplier#000818162|MEmvnmRPQFBBJ9th4sIAJpAA,v171CX3 +Supplier#000818170|Jag4LXrNMHK8aP6CXWhGS1I +Supplier#000818199|M5Z83BguEDR1r9z +Supplier#000818247|zp PP0BP2poYC1PnkD mkiWnIAy9iB5Mo7D +Supplier#000818314|JdV4QWnFjs11MsKgi5cGF3,,MbMq8qkQCIoT9 +Supplier#000818370|raN74d4h6oFBEGlofEVUs +Supplier#000818488|8uz3BXkYnK3Y8FXAurluN4Xydg2cei +Supplier#000818508|zjHRmxZ3IPfTnKA TMCWgLZsbzkOzC +Supplier#000818526|9qj816SSwGfADI5ShaXinEoKPx6pM7mn0S +Supplier#000818528|nasqMH6Dpm4ZRNzbpC117t5gfzTv89 +Supplier#000818556|4j7qIUvyN x0D1kc3wMRHPBn1ChmkuhqIAM6ceT +Supplier#000818923|IfO0mAvxhHo8INI POEu8sOCQTBwQCah +Supplier#000818932|OA59bWa9r,ohn5MkqlySrKP pejkmlD +Supplier#000818964|kHBMbEj1DfmnfKm31XGfkuUtrye8w8tnygIQw0M +Supplier#000819175|2CVfZf1 D5Hl0bv4p2635O5uBh +Supplier#000819189|KCmOqDutUz1 mH6Ejep +Supplier#000819335|6p4iZrRr,VNDPFDVQ2A5Ntqd3m,4xSCvqAfKqz +Supplier#000819456|bPbLf1lNJRUEJyTKGX9D1m2vcxYAwFD,0hl0d +Supplier#000819474|v4dpPokmS6 +Supplier#000819487|rQTQGIyowkv12d4P,le +Supplier#000819539|SWLmdV3Tcl9zcmDgzxUsmYNp6yEblwmAaBqh +Supplier#000819571|GeiTj,BbWx, +Supplier#000819773|IbUR5syLyi6d TAGOIGE1Vvansf,06pe +Supplier#000819959|IMesmMhxHf3W0nPz,lO7DjAkXsH8h1FKd2WISvC2 +Supplier#000820081| D7i1 8IiYG +Supplier#000820258|s4qamy2447dYP0X2sRiYhi,lx4R +Supplier#000820285|yyhybHE5Hlje70Id,ZDT8z9Q +Supplier#000820539|AibQC 7,CYnYsLfE6T4Yi +Supplier#000820561|oJdtxgAe,Zihsee9GZxNtORhUcV3f0NAAbOMpD +Supplier#000820654|RSMK0s70i3NgxsHY +Supplier#000820813|,Glvx6NiTHJxycOn +Supplier#000820824|uzMqV8jrbddTYIOlbRkHK +Supplier#000820846|Wrd3zSFwYv5 +Supplier#000820960|qCwgP38eArJ7BwbEoQVskNqpuzwj9 +Supplier#000820974|bVMQafTA5M9jmuOpd0NB +Supplier#000820996|POMRvmxwiF +Supplier#000821009|YTsbQh8Nfi6hrQJKuCbg9IVHqhdAH9g, +Supplier#000821068|9N3mu2rCWN1mKI5l +Supplier#000821176|oAFIsQ,,9snPl56OjG 71tEr,df3zjzyhC9z 8K +Supplier#000821265|lcnr5WEBCkzNdoHGzodbwb2HCWhrLsXn0cMN +Supplier#000821277|MGXSk,ZbxL +Supplier#000821320|18UF9siD,uYU4InONfzZqKB +Supplier#000821326|kbVg5i,NtrCbbUIegpC19jPogq5heAdWzD5Nx +Supplier#000821345|VFQjX4xoOYyzmG0qV +Supplier#000821414|OatnUMc0IZwoqfssQopjROU +Supplier#000821480|5NdvP2JtsMFP 0FMn16Yw5ciTZ +Supplier#000821501|UkjXATlmSZ6BccU,BE,MYgZ72QaoLWU +Supplier#000821559|0iDCzoai3XQv m27syaQEy7qy 3rNTLq8v1j +Supplier#000821568|t9VJxTz9DAkkIBiFUO6OsIGC1Hq +Supplier#000821577|uWo,OgMHGbJTUU0TUtgBVNc +Supplier#000821598|K9hjsIfkY7K2DfSiUEsDXT2ZXYkVD9XNkImtsfL +Supplier#000821617|vmFqCLSSCamSj1IMeH7O +Supplier#000821620|JiQ03dP6GfoAUa1l78ol +Supplier#000821652|SL1, p77Dzk,B +Supplier#000821663|,4fynGHBAv0hulcCO4,q8Zd7FhY +Supplier#000821684|ScuHjeG5K3wPqW2w5h02VtY6kUmWSK +Supplier#000821745|dn,lkF0CNqzcuywo1PCXj5 +Supplier#000821778|M,VoZaw3I2XFON5L1jv +Supplier#000821803|XTOXNp0Mu,uCv +Supplier#000821846|x7JbewbVWCKlAGAXRKqoYW6eoa5I,w +Supplier#000821906|QfCcfu6JmUXAB YcMTin6RYUwuDbwms +Supplier#000822003|szB6sJ7AR9fleesmjIlrv +Supplier#000822017|vx4Vq6bRU7S r1DWXKLfB +Supplier#000822019|bhvx1Qymq1cfkmKtUxsdgaS9,kMBPR +Supplier#000822028|CtGK2HQJZRVEoZjDFCXz8TGk4 +Supplier#000822134|CrTOGYWtD5JrGd65tZ +Supplier#000822193|88CJhzk9ACy4PNbVki8dAEN +Supplier#000822379|UypL sQs4ygloLZ +Supplier#000822425|1RaygxyKdY09l,zQDK8cwidmcQFQWrBY2b,4b +Supplier#000822444|8u0C088CH3tP +Supplier#000822447|,sgJ45JGyfW2i7t,i0kzQB +Supplier#000822457|tuBsF3HaXXa8U +Supplier#000822463|NMSUcXrNBMlf871opO4SCueleuPadDM4qkqRlqbA +Supplier#000822486|M8zKmPIlPwkUPNgXoUwjUv6,zSZz3gL1junInOml +Supplier#000822592| I9 krRuNx5Q +Supplier#000822635|OCe CzmTWqUWGbzVYYZhyNe3KzyWw +Supplier#000822695|5CbBpz64OUdbnVgWD1se WxNx O +Supplier#000822715|jnc9eBrVdgrU GQAfAB6pewZYo6A +Supplier#000822746|iM9VWbHLr LazfRyNtsIYr2jewdW EOznU +Supplier#000822752|HI6elEHa5GGukXprz3BK6EcKN +Supplier#000822771|tLS,l60obTdu4c +Supplier#000822814|YFrmDgfLXqmISv8QY uEH1HYsy8NPbi +Supplier#000822827|DmAYIZ3ss7mxodYipwy5 +Supplier#000822877|nH7LPzWlP8qR8GEEZax,j3aawzPDlbUI1 +Supplier#000822882|dSY2yMXH3UVsb +Supplier#000822883|6vQylRcUbK1tv +Supplier#000822894|IP1DI1OTRFQBwYOdmTYt +Supplier#000822970|NmHNTismu8FfvnqHk9ee, +Supplier#000823005|JGF QXF05LcldOOUKVMcYWRV8uyVLo5CNsl +Supplier#000823021|zJ Iew7X7yPIoXizpCZKLoCs lOnGmkZDSntF6 +Supplier#000823031|eU83jCNFktWrhMu5yXptob +Supplier#000823100|fEmCQ8gDGM6eBnTB03RXiWkglTyuCNZ7 +Supplier#000823105|gcRgg7vb7ToqopAE UpHpE +Supplier#000823129|CwlHl hE4JMB6O5LpJbK3II6LxhicO8qSivoJLk +Supplier#000823147|OZ jWLXDkiQ6FdFdyFH +Supplier#000823173|reZCI3NZ5sMJbFBblCJfZrEqqZH +Supplier#000823202|e63OYC8qNDLgeIdn9hXuOUOV PbgkgtEg +Supplier#000823205|hLea126CDAK7 NbQvGGbgKOG +Supplier#000823228|m6EQcKl1Xqd Q38LATCCRP +Supplier#000823237|fxX6rLxXZXn159R6JE5amZ7fi8H7S1HHk4Ny +Supplier#000823257|zIHZAzjLfPxSumlVB543WiJsB +Supplier#000823280|szEhLqPsSFNK7 +Supplier#000823296|mD8Ws3DtnIU81AHvf9eIZQ4ttdEUyZflQf,Un +Supplier#000823377|uvY6PvImZfYb5Z,J6 +Supplier#000823397|Phj5DW0H98GmB5Ds8drmoyAl2q +Supplier#000823667|Y XuZFigRL7WmLSEtZjX1UtTxrZFMOGeL +Supplier#000823683|8GrP3I9qfZ78Hs0vF78JxhCkmdyGl,S5 +Supplier#000823711|OkClthp7anSJXrxqQ +Supplier#000823806|4Fio9Gj bappHGz +Supplier#000823918|51kllPOCWfnYnjNxdRTY5kp rBADONH9H +Supplier#000823984|aL0gG8JEQUyIhv +Supplier#000824078|Gr0IZRU ctOfjKhM1sCsSDmMTiW7LDTa M +Supplier#000824081|9xDlu24q33uKoMOOstoJfPRtpo3gBKATE1Bzaa +Supplier#000824141|2IJ80OGQwPP92NrGKvjLCGzQfgKhIU99hdxC +Supplier#000824160|zgRWVfgQAVmb +Supplier#000824177|kKRkj9o5O9AS696tAKF15BkR,mMvqi +Supplier#000824204|mPjkYwZqwwvbmcym3AkojThe4zhpU1e2fs7OUfL7 +Supplier#000824276|Bze2ot1BXL +Supplier#000824284|9d3LUYHMpUf0obwtDDcbXMp2zLec0cTSQb6P +Supplier#000824446|peyWIMDPoIZTZBhd9AdkHxmlVvxFeYwh11mZqtQ +Supplier#000824479|NgNDiIwlCkIO,1BL,Armh49nDav0e +Supplier#000824541|89CUiEVdmncoAwbWeOSp2tkKcmik urhwbjOL +Supplier#000824568|pHr3J1WEt7embHX2OUnQ13cbowL +Supplier#000824590|g0d7PZn0DfQVmVipuQorJN2 +Supplier#000824629|87n,iQHgeYUfJ3HrviB5fVW1a1 +Supplier#000824650|TYyltkUCh50ZW3nC pUarnvFCQ41j7h9r,ikR +Supplier#000824740|nrsX,dTmdqHj2OE t1zpmdWkXb8K8roTbgj7e +Supplier#000824824|QOaDIV0NJf +Supplier#000824870|T4yM14lLGRD +Supplier#000824916|SBaaB67BCS4Jk9 +Supplier#000824953|OgStR8PvrscrN,Tz 5jSMk +Supplier#000825024|zdMoybHvzmiJbn3S,B +Supplier#000825045|RCvHPk5s gvHUah7 hQ5y +Supplier#000825065|eRH,VSimqJ2cRk9FSjy1KUXfpKsw2Hjotn +Supplier#000825160|RprE90byrurGSFg +Supplier#000825179|IA,dkUQ6RBKuQZ +Supplier#000825214|ktgjq9A27SzfERpnA +Supplier#000825235|XoWKePiilciNcSEaJGZuE3Cbvg7LYxK33BvtH +Supplier#000825270|4fWAeG4OB9dfiJGWW +Supplier#000825308|3j,ycSlAsTDljiqjMk +Supplier#000825339|N3rDKv 1qwGenii1Cgiky T77lG1p +Supplier#000825386|9aqu3VbvCBTZNJbcXteJ9iFopSL48ruRYq +Supplier#000825424|o3dUXSjQii3RNIf4Jf330Bbl99tDn +Supplier#000825499|7h8IwFb8mGPuLZ,gLKIUaLE +Supplier#000825502|AJHD2g,YUdAyK5Nk9z7 +Supplier#000825537|BW29ujUNwpVwAlOZbDJEpsw +Supplier#000825604|BR6hGehJup7GJ8jxyWop +Supplier#000825635|7XGgrcaS2WsemzHM +Supplier#000825639|oqzqJ9SB9,mxuXOZ28Oes +Supplier#000825678|Y0dHQD4UdG2YJ6dqRvkzjJ9Tr4Xv1 +Supplier#000825797|bC5g1 ,OMC +Supplier#000825832|a6MiWKA9rYFnmO 6yvSDwEOU4zsnFD +Supplier#000825852|OuZwkadaTvO180lazgXj +Supplier#000825876|EhPPRMp8cDkACN +Supplier#000825900|V3HaLanST6xk i,gGb0AZ5eVi 32bSrnU8 +Supplier#000825991|GVmxlFxc9G6QrTWPTnkx2 9dIhEoaoWwYdfu8jlr +Supplier#000826040|ekD00zDlrA7cceJ6x1zgBgq +Supplier#000826043|HoZS34m7ww7SODhLRfbPiyPLQ mqPCWsuPPD +Supplier#000826054|,88DHXOLMtYhq9S +Supplier#000826055|Mwk2gL4Eohe0xauqq1xrBt0 +Supplier#000826056|uvE5J9xajdMt5KzbTc4yAmPhY fpb +Supplier#000826148|vJQ26ir2GjD,cab Wqq XTimmI5EVTv sXKzJPNF +Supplier#000826185|hTFiRKCvVwuJZ5xbcurEHMflI +Supplier#000826427|RTJI3QSjPuxZFeWD59 +Supplier#000826433|0aDEVlZrL9Pgd +Supplier#000826466|xhpraw67awu,Xe, +Supplier#000826506|qbWyIiRMyJtgCgKDgjQOIy +Supplier#000826515|ntsYQ1QAXq +Supplier#000826523|CkdHaHzvuvHWnM0H Y3BdLLuqg +Supplier#000826633|as,TkgPYr23uB6ZfAuwS1T5,Ma +Supplier#000826808|IFY4slcsuranFYmwQE,qcxz32xqw OdYm +Supplier#000827096|5iDt0,vzY xDCQwN +Supplier#000827114|qpBmu7UqY0yydx18lEFTsvJb7O02uoh3wyR +Supplier#000827318|ZVV6rpCkrRU5R21b17biio7wz7GX +Supplier#000827369|Sbv30WrANjSea599w42FJMl +Supplier#000827422|RfT2BYW91ZqfxoxlUl1Jdo3ty +Supplier#000827501|S4ev3FeuEWhQu187nT7 +Supplier#000827540|1bfCQV p1jnyGzkvOeZA6zQxUGNkQ 49aC +Supplier#000827657|AHyf dRGwIiID +Supplier#000827688|M3Z1bNihgNTNuIejJ2N9XmeEPSlIUQqgbN5 +Supplier#000827703|Szn,QANd4k1,v1v +Supplier#000827787|GTqSl4hpQcM +Supplier#000827807|mwKc,4OofG9TaUlIO +Supplier#000827870|NWmApYWIExdlsui8N6yTS6nz4Rua9yg0I +Supplier#000828069|rxNhP0DFFGUPMvhD +Supplier#000828096|9wM3Oy7OXzMZ1kOsydkhAafKii ASNDuuFzRB,E +Supplier#000828193|kQScbuMjqxQ1AZ3 +Supplier#000828249|YbKx8FhHJjoojIaAsBXZ,XuksO1 +Supplier#000828279|s7D5a4yWEbmwJ +Supplier#000828343|mrqvAkW3lsC +Supplier#000828508|2WCO8Av1UHXcfSNeciU7J07ok9tgp7EQkL +Supplier#000828533|MKzI0CMm6XnS17EFgPVPaN3N +Supplier#000828743|k3QGAw6VTo L1y8sfTWvA3vJAXRAtiKK01ph +Supplier#000828827|1mks,MyzyATZ,zlngpSwsbo9O,eAHzWe5BgjdkD0 +Supplier#000828849|eNINxa3yldLlIwhunIy +Supplier#000828860|DdYCvg46XQqP7tTFb +Supplier#000828906|9smIARcUvD,btBfHLTVW3MYfAgnsA36Nt +Supplier#000828977|cKRVWzRAXsIsoTGLatszZbOK5 icGbc7xDW +Supplier#000829138|slUMq0zI7Aax3a +Supplier#000829142|g 5Ufm6O o8M9CC9Y4RqzYkfK +Supplier#000829174|b0W8,ydJZ,iyCpLh8ttnvoBcTbDEOPmgTT +Supplier#000829196|liyRiuKWAKWgLGiisHfw7YSvUyNkv +Supplier#000829332|qwtH5QqGTuFjjiRZEgc0bpYEj10uUKbHpQs +Supplier#000829393|7hGM0R6qpQL,Zmz6yqUDzELBY1DNMdbZHA +Supplier#000829498|tehMM5bJy1xkxb5KLir +Supplier#000829508|H89bEiK9cIGXwhi,DvzQ E +Supplier#000829530|,JgYvgCAQgB0EDDxesE89hFOVse,wk95E +Supplier#000829583|wVV8zAMpCWaEJxDfkWvMHk0iSewVi +Supplier#000829613|hNw4G1FOYIeey82V24jfJHnbnTm +Supplier#000829660|GdI7DPH N,zeR3VL3Fl8m3,n +Supplier#000829662|TqRRrA edxGPDIoUV +Supplier#000829679|3589pIdDDGf1FoVe5J2xDBvjhTQogmNNHGE +Supplier#000829736|K0XYjBvAqJHmfH7AcfP +Supplier#000829775|KfGmBleNRcb7h,62D +Supplier#000829849|4wBqcdnLPtqnw89T2AGo4Rod +Supplier#000829855|XRihKRFsKBoqThRi +Supplier#000829962|Jsi4QUwQ8Ughkt,f62RGpFRwVi3TN940BtfaVq +Supplier#000830076|wOJZYFnoQ ayIiZUKBOzcG +Supplier#000830093|cbAGgQxvK ZOK0PNcXbLD44JfW7tK9fJd +Supplier#000830112|TRlaWwA,MolEhMLaM,gs5O6qOxfhKcfY1ph8 +Supplier#000830211|FjFBDdhjL0uJakczxMc4XRwx +Supplier#000830314|CDko90IPiiQ3 +Supplier#000830409|7150WChFAh +Supplier#000830546|SQeCOqDzF3nb8Os60wDRKnVG5C6MIeY9, +Supplier#000830598|9vEeQHxNLpFuI ruzgz5FBigJN1E5T +Supplier#000830739|TPZDI4,NaAH,fjRdGvdUBreU6BENXt +Supplier#000830757|wAUsVJMFmWOwDWY8LZbSpUjcG +Supplier#000830805|cul4TlkHyVd +Supplier#000830878|wMUlTp1VR,ff5,GH9CT2J7xMw 7QLG1sod +Supplier#000830932|vvywCgqY1iK4UA0an +Supplier#000830936| mVGR8TXD5LbUa5RPXJK9RsCiGre8RgD6 +Supplier#000830959|CcqZi00Dh3J6ov +Supplier#000830985|4CMy6asbim7ShV,oixDxW zYnq +Supplier#000831049|5p dKdkUfk +Supplier#000831070|Yp3bqSnlGcQ9KU7wdZdbPDdc2vSqh +Supplier#000831082|ycLUurSIvgiQQ5Up2,W +Supplier#000831114|SNEW4DjGsdhcMLAQhd6FFb694pexRLtGbf +Supplier#000831167|e4Qhd5nE65xHGnkUSSjnScUQz39x0upL +Supplier#000831182|ok, Fi53LnHFwU +Supplier#000831245|JlHmW7w,l4bn9nGFyArbmuNvU +Supplier#000831283|wDJpsMAeAD7 +Supplier#000831319|KlQkXIDy33,aMXmMoZkLkitbkAGPScgvyGnDm,I +Supplier#000831472|LdH,UyNiP4VbmN0YIgwA7Wk6 +Supplier#000831569|lc6dXCtjljJn7F,XREQcUwq3uHpR +Supplier#000831575|JI 3IMFAu5pT +Supplier#000831583|xYlT9oUdfGlBnaEfEjWx3 +Supplier#000831593|PtDMGvsJURQ4ZjMtvCiO +Supplier#000831612|gwCcRXT7qGCIVdpOjyQlbB,4uIj4pM3Sl +Supplier#000831743|c07deLK4FkWj +Supplier#000831889|ePVwY2aGQf1SpooDp,JLnWzb4AtU7T,la3yzsm +Supplier#000831959|LDh7Rh4BDL +Supplier#000832018|9sKAWKU8dPKgOsBQTNpldiF2E7DjJU,,d Kiux +Supplier#000832064|nhM0,iL7bzrirxYZM65ll,JSK06Vk +Supplier#000832215|7Y4ZFJkf7kBDc9Up8VkutrNI4mB7mk95CAXNVTUT +Supplier#000832315|j2Xhc4D1IVb +Supplier#000832375|R7c1R2DzmNxcCA1FP9oXM0CWFXrW1cf2Bv +Supplier#000832400|hzYJh3IVA3cRbrqQ264pJvhf2 +Supplier#000832505|u7GL1UqRalaqgpkfA7 P +Supplier#000832581|x509bYODQDgKBLt7j5d72ytFXZVnMNgr21 +Supplier#000832599|tZKbAg1YzLGSmIMvBUgZDm +Supplier#000832603|8HJLZDE7QJLF7H,VAIhrCt0s84Z +Supplier#000832653|O6 r6 bSBLY11AI,qGMjYZW1rW,jKp4nVHn +Supplier#000832716|GnxVd3Yhh3QDT1K5qI0oCbukybQW1J +Supplier#000832729|xXHbBsc98bcCzB7djaiumXWeOPx +Supplier#000832748|KLOm9Qp3O4sVQ2Wc87sCyrVj7IcklZ +Supplier#000832803|tQeeO4,VpuPM7hEmzGhf39h4HfdwMkL8P0 +Supplier#000832991|bxKJGrEM00uM +Supplier#000833079|2auWSh9wHy +Supplier#000833100|vhp oBp1EYC8FJvaZYV +Supplier#000833109|AkbRgqBbn320lCXTc,WW61gi6zrfHywbc8 +Supplier#000833118|PsOx4Z je90HjSbEfajE +Supplier#000833142|esfoTwn,ZAryQN0oA 9BcjmBrfLbF +Supplier#000833151| RONG551fH62w rxM8oeVM5D v1R5sxI0J +Supplier#000833253|chE1LQ8yX, +Supplier#000833297|4f6gXmyxlC +Supplier#000833393|te4v0FyKeuV4UBMr4WmsD87N7EjHKTpDr +Supplier#000833529|PTML,wy0Yyd9Ao3a +Supplier#000833645|TlGXwJDZpuq6TfT +Supplier#000833757|7gbdssrR58FBvoThjyjD3DNkygNOV1G +Supplier#000833797|fYubD 0 JvlNiNXwAwzWGLp2FL50WsAWBka +Supplier#000833802|A5FAqpMxfnefPIJo5aM1 +Supplier#000833878|mA6A6U1UzU8pzl0S7t1skUY62wSlDOJxA6 +Supplier#000833928|iznAGoAOby4b +Supplier#000833963|DuNVK,,buScGhxoWhCDaMNjz +Supplier#000834035|q3WbHvWX0KEI +Supplier#000834174|eprK9x,W26w, +Supplier#000834247|x3tXXsfaNC,mvv +Supplier#000834259|NyDbRDC74ECdTHTpP1u +Supplier#000834291|iHwxf7efgEdD5dC +Supplier#000834526|5Zlo2WnxM69ojORenHAq5k6AwTK3tJK +Supplier#000834582|tLYcSe43JIDpcCn7bwEQDc90BEIlKKWb6KTmC +Supplier#000834607|xtlBcYuVdCDQnUR0c5z +Supplier#000834627|IKxJKlPSvzW2iW6tA,,UZs8jkr7LgHguJbzf7d +Supplier#000834686|,FZEERrb9fh ,pO8pg4Ks SH6O22QLz +Supplier#000834737|djtOrhSwjBXviretB3nwnf +Supplier#000834743|5jRn2eeeP4q8T2Jj2 +Supplier#000834888|vgtkGMllf9P97IprGyMl8 +Supplier#000834922|pQo9F0iLo7tg9KQVt1DKmfopS +Supplier#000834955|4xfij09PDrHn +Supplier#000835047|84DBlw0mzizUtD,bs +Supplier#000835092|Cvb7Q2GtrL YgdXLSqx,TzFnxAbPEdS0 +Supplier#000835097|caQ7KiU9pMCeAQ4HIv3jU nYV0MsV9lb +Supplier#000835200|4B7Ut4AvU2H60k8StsCXTiC qEBeb5 +Supplier#000835287|Tqrxb43MCS +Supplier#000835300|ovCdpFezY6T5uJdihpwBZsac5 +Supplier#000835367|JjuS8eCcTvWegT +Supplier#000835384|uwAPuxANA3u4q7Utndf +Supplier#000835393|F0Y8DgGVd7z5PGneuvWN1nV5AIjOwO6TX1GfbN +Supplier#000835446|QFcidzv3YAcJiw4RtxkXYeDwM3u +Supplier#000835567|UkymrRXsgWu2LytckrQg91loZMAySBBRHs3y,R6 +Supplier#000835615|1qxeltGUBot25QfsM9ZWp +Supplier#000835637|P9RKkgxbRw8P9 +Supplier#000835655|tNW6Nu40,VirnGRs71lR +Supplier#000835664| P,,SQc6h7d1jOqVOx7lFK60HbsgGfSHmFDXNvK +Supplier#000835679| sVjDE4 p53RZfXKcC09rw3R,slUici5Ie +Supplier#000835696|noNPl6LtqpNG1WPm7kST4nm +Supplier#000835750|YGEAK75pB8V2d4qP2 +Supplier#000835784|K8Na8I2mP7t7w83pq7FIdXB0f1 +Supplier#000835849|n hPGVI MHdRkxeIIBE +Supplier#000835945|zKtHPsXNR8eKtXI6CuAx +Supplier#000835975|U6lgIA,5nrG5XBdrZSI +Supplier#000835982|XN0 oYs1dpTar +Supplier#000835983|cMkbK6C2W6aF +Supplier#000835998|mjFTu4U0IMINc5 LkqyheI,Jz94,racLqeW8sDj +Supplier#000836070|2xqizVvrMT7LrHX5ZVGTEa +Supplier#000836111|Hz2h,VXIRjofot6bTK8dYJalPy0NQycDFvp +Supplier#000836168|HTCWcE8qCYp5l0T8rXw +Supplier#000836203|UkXfyjelG8GPviGk 4z6Wgu +Supplier#000836288|Yf er2kqhevR2 +Supplier#000836369|vfYIdlQKIvaywHBN2IjNG,RpknydUi5LXh +Supplier#000836405|La8GpWS,Ic31Sw3 +Supplier#000836457|ovfWqSeUwWC7KlWwcU89zY3 ZGNpcL +Supplier#000836536|viemgrHo2XDxWy +Supplier#000836662|Z8m5,djfUkNAXw3,SC71 +Supplier#000836705|XqPBTHRfgqZlAOwpjKjaovdG5 BHzmxE5mTIcrAL +Supplier#000836980|SuWxZ71Eb0Dly0MezwU3QX2jOyGQGe9fYtq5Zl +Supplier#000837069|vDG YdzmZGs8Vj3aW,6x139YPgDTi +Supplier#000837111|flzEUqcvYeQxQaQ +Supplier#000837138|8,dnM9OYp82l3PqeS8 +Supplier#000837180|haSwaWbEQWJIWi4Rjz,7jqLh2zWb05UM4YO +Supplier#000837269|ankPfRBffP5qzbfcRl,y6ha2DNggm +Supplier#000837289|RYUEEF8zQWFbVtGMrcqWKqhSr7E +Supplier#000837479|qb,Q4MycyYqO1cvQLzIfyeHa5kds Vm +Supplier#000837540|UJoSyg230,jX7tAJ +Supplier#000837589|T6SZU5jLUF4uzV bTHTc8G +Supplier#000837601|5iGnJv1sCb +Supplier#000837619|l,rYEcYm15C uOCrfxx, +Supplier#000837715|C9PJCAQa1SrTY4kEzH +Supplier#000837745|VNd4zADR2D0ytp5o +Supplier#000837752|w9SsXxJxm,5u0OPnvs0,iiMUdvhTYY1zU4 +Supplier#000837806|08u2eOk7QFXPCmym22QySBREkTvn3 +Supplier#000837933|gXfEeNGnpNa2Jq 7uWJ Dbx3w8SPZWfkXGKZgCH +Supplier#000838086|RrlPvb34EDokwBS0waMwezqXevjpwrDIeloilLa +Supplier#000838100|xBjo6wPE3pVNqreXVJp2NFULOZtlTJY NdcyG8t +Supplier#000838156|EmGJrbA9WZOH2hve53sP7bhIMf1ZTBetUB +Supplier#000838406|JozkC0HOo6q4FIsL2H2qG07X +Supplier#000838452|KJ8jvRTEpqoBh77eSPu7TchcL +Supplier#000838493|mdgegHIw2fFsZsshnqjY8KlLP7acs2hUN +Supplier#000838507|Ta88zc0xpGmDU +Supplier#000838609|QRddayLWMkFu845,MFe0SnH4ci5Jw T +Supplier#000838639|kPdPTL BoohGYU o +Supplier#000838648|pOKpQNnyoXF +Supplier#000838779|Uw31yxuO13DQkQeOUeOl7LJe1 +Supplier#000838808|UV3PhhOuMZsUHfPzmzn7KjT4V6mavnQM +Supplier#000838982|aS 0WtvkgkyAiQ9Un +Supplier#000838983|I7Wb F4AiS1zG5L 1XJzzx1lW3Di3eF8jg +Supplier#000839121|UH7JJUfxDhVAkOC0PK mkq18c +Supplier#000839144|OAxXhUodpISY4bSICi5 +Supplier#000839197|hdU3l mb MDIjxjr +Supplier#000839206|ecGsvmPoiz69tOM8L2F,MaLTUW3 +Supplier#000839277|HEzn8iRqjymSAKpeCE0xghWK +Supplier#000839425|PipQI1Su5xNJ4GB7vsCUutKEAxZ JP +Supplier#000839436|gPZVwBse6x33TWEayGWF +Supplier#000839447|toFq8fXYKhSJnObJ5jtvTR507vVd2E +Supplier#000839718|txd658hc9yWhBPr2mILhFbQjeXv8OUs,ZX +Supplier#000839874|mh0rsIyb SJcajZR3krp4eZLjiDxzx7nskTPyV +Supplier#000839974| GYEoPLY4PQlxS3ysIkEvUwFYIYrACD +Supplier#000839978|l9,WyuMG3SfJdsD7TEn9v9eRyoOtYcx1xtxL5mbe +Supplier#000839999|xFhz 6bQOGyJQgT9mgdeWQD,VilHZtMFbHV A +Supplier#000840004|8,wPivPx2tuPu,2qT RHajsfLndJgCSBUmoNFeN +Supplier#000840039|IioC0GDnsAk4Y2YKw +Supplier#000840166|gcXaaVlS4,3StxmlBADJMSSE +Supplier#000840174|VPTOiWhegT +Supplier#000840193|6hSauzXFSRU +Supplier#000840301|CXCou6 uyk6hr8F6lCLaJLkD ve9 plz +Supplier#000840317|3E1hCHB56D4,O +Supplier#000840387|YUQHkXK80cvhCUS myTV34 +Supplier#000840454|5G32jpoDi1cjvF3QWC +Supplier#000840530|viQGpU2cS5LibXv50HUOxbaiN MpKZYDFpiek +Supplier#000840545|I HjzaMtu9Qfqrv5GQ9nzt4Jo25HlFoFwF +Supplier#000840590|OXbKZ6UeGplbPjD +Supplier#000840696|zmSqDgk3ZBH5XoMseYbcnSsWnqIgp +Supplier#000840832|Mtsqr6CdEY8nnQhtqV9lo Wauxoex8Uma8dFI1oq +Supplier#000840946|ZNZGi7uWSrLXyyXtt18kYjuS6 9cUhEM +Supplier#000840958|Og6ku 2DTK +Supplier#000840994|DfTeqc7gkUUlhjQpsfKnW +Supplier#000841001|G W8lT6uksemwJ3u +Supplier#000841061|f9aZUoX2qN2FZVlvzisOKeDcazIQoVrYf1h +Supplier#000841164|t9bs5QEvOE4OyYhi4gYTP7m6tHCwrI +Supplier#000841414|kgaxYIQ5cfArqhLAP1PHvXna +Supplier#000841456|Y1NPo6IvZcAwYSKMRSUgywfWdBwFA0nslZy +Supplier#000841465|kIZTy4FLrxl8U61n8X +Supplier#000841594|AjAc9qHTo7jNngoEgsmOlDnnanWxZZemI +Supplier#000841688|swC0EwLV6xrCnLvB N9nYEF,b5JMqX0v +Supplier#000841700|PN1 EYa8jPu4R6b4UfxN5Mjk +Supplier#000841763|ndp25Ew5FS +Supplier#000841910|3RzqAUt9WxlE9O +Supplier#000841917|3OqxRH8l423vsa,qe +Supplier#000841931|blwJuKVoH6GtF3OYKn4 +Supplier#000841953|lFAoZ5PiaGUDIis5egfRkNy +Supplier#000841980|Lt6vjyjMqccv0aatw06aoPaK +Supplier#000841999|mzWX8MTZVTE0Ko9fyhxZqhS3 +Supplier#000842011|,tigbuy0yyr +Supplier#000842034|KafnABcfgUC4R6nugSx6Z68RBNmxbgF5B +Supplier#000842035|YJqR21rwBwvBncwfsZ9gAbGHGwZL,wc9Jm9O4MKI +Supplier#000842097|tf8XIWBjo9czi5ew4pafVhKYMRX +Supplier#000842111|ycOfc9hyd9HD5y1YY,QustCMRKnCMv8Xcqu q +Supplier#000842120|hS8vYwfGgX8oQb,wuk +Supplier#000842206|a6XLNfkRQh3nZakdZmZdUCG2OtiVd5o8468eCO +Supplier#000842291|zY0aCF2 2SxkS62rFHEoleWfJGbM9o3ZNiI3 +Supplier#000842369|Kd4KpKEQWm,CA6X0gG +Supplier#000842406|joxqDOWROcnDhv6kYYe,ekPLOJiGVot 3,oWJq +Supplier#000842447|pCPfoibn2zRGkk1VS740MzH +Supplier#000842544|2 pD8Wq5hECgyB5 0 +Supplier#000842630|oc2DSK 1oNjt +Supplier#000842772|PiGvdGPryUgZBT1CvA2UNKh4m2 tgY +Supplier#000842797|NP7KeHkRKTyBRytDF3MGubNUvJPy +Supplier#000842809|g1o0oj5OzaypRWZ9PJan1n,b39eQG1f +Supplier#000842850|2ARIE79Vn8suJ +Supplier#000842882|epzl4rPO1TphdfzQ7lBJUeXPjI6IQO51,ns +Supplier#000842964|vWLTROYoUPB8eb +Supplier#000843005|FInXLjoqSYOCBLyHcwJ94eB9j1CUj +Supplier#000843032|creHX8H902iL +Supplier#000843194|JX0ABvBcs2UreMVje06 +Supplier#000843201|LJE6CufQT3 qOA1cC4xJ3zi2Kl9Ok2 Jm3 UUu5I +Supplier#000843286|uLTSj3,0qUByJTuQG163EMs zYeM0U8 +Supplier#000843293|ZJD0EeO99BNKFHIehG +Supplier#000843378|PA6vDKdQW,7TIjUQGGP +Supplier#000843399|AdnoAy,MSwt0 +Supplier#000843439|,M d3Zt2Rxxdf2RZ3DD5lqFLK5BG +Supplier#000843456|7cnJo,PIbSBYRKAUmHaW +Supplier#000843467|OUOYV3Ug9Zk2SNNIY3jaz91Rj2KNCexnvXOG5qh +Supplier#000843485|ThEXoC,nXtco21q,Kw +Supplier#000843532|I, 8h AlGzstZM98 +Supplier#000843643|66C0q17NqmB5htjoEmNFqQcpdkqtUkn +Supplier#000843644|mV5mpprtFTN +Supplier#000843821|E0RbR9Zzkw6O +Supplier#000843862|fMVwke4oEg,tZ +Supplier#000844007|6OevttHeCP +Supplier#000844040|iV87eeI3QPVzpwpZbCobsxVqHcr Zfpg +Supplier#000844055|4prjP3omZp7M5B4,M +Supplier#000844059|puQ4BE83S,jdmohyv0Lgo,qh +Supplier#000844080|a6BEdpbtjB7 tj,sKUTfY5r3DEGW,qGm4 +Supplier#000844230|0uj2vZkJ6mrm7L,zilq +Supplier#000844299|dLUi HO XvmE2BsoeV0 +Supplier#000844307|lD0K tMxeQbC57VWLOirXdQn +Supplier#000844337|qY5NAn42W5a07shbEXNH +Supplier#000844363|r7YvAogEFFtEeT DdGeFktaROzppPkm 6VbQ +Supplier#000844465|iulqjNL3YDNM2CV1YyazLp6xBh +Supplier#000844533|3nKLkJ2gAb6pXnze,yP o4bgzX2GaHuT +Supplier#000844565|vJ17NHQnmjPwmeooE3Vws E +Supplier#000844612|VeTUwR ju,8zNBKy +Supplier#000844803|kplzSa5H7w,6,838k5QH9wG6D4M8aN +Supplier#000844913|2RNCrc3epKzADT7w +Supplier#000844951|W6BgMkoC7YA +Supplier#000844957|Bpg23ogMw5ft5Cw2h1aTKqz +Supplier#000845111|GHlY5rs6dKjnjnpCNbu +Supplier#000845134|RQHZMsuMM8o +Supplier#000845152|ZxO5sqquvTKlFGhehP +Supplier#000845171|6FphefJ,DWwv8Ra +Supplier#000845173|SBonWCN8,UJm tOVRdRpGMgMH3 +Supplier#000845185|9dEG8i8VhY,KoTECy GmBx,8cnu +Supplier#000845246|YdEwCyyiDIlHGsK9w7 +Supplier#000845259|8MUAzcTmARBa1rcXt7 +Supplier#000845298|aNgAjh8 quLBS5iGKzd3NbXAtvSXvm3sfEwOqflJ +Supplier#000845310|rJM1a19mEoursQhbbPXE +Supplier#000845320|CS3RQfh2N76aXM qX1IRo3ypGFHAYY +Supplier#000845327|tssUc8uPs19dl +Supplier#000845342|c7OELr7DIL +Supplier#000845346|8uUBQaTpZU21HYNMs4NAGoxJ,X6o1iQu8yCI4rxP +Supplier#000845402|tWeaHhnwmOIq,cryq0yLiVTqNqPinOe12fFbq +Supplier#000845464| IbJc2zF5P5dnDWomIA ,6iDF9AGGT5mF +Supplier#000845507|ZB3JivdMQXI4eecOxShFPJd +Supplier#000845623|PwcbsOP,20bY17jVV +Supplier#000845738|yoyLjzPqlKKSwRxpwfN +Supplier#000845841|zMOPdHVo8C69t7 +Supplier#000845954|vpq5hXZqn b97K2kIUXxR Gm0Dxod4krDzm +Supplier#000845989|fLKSkgxBtW3JEJqFcXdhe +Supplier#000846130|CB,tvkcQEYZpTfPhnKARF aULUQ +Supplier#000846159|sZAuwHIL62r5L +Supplier#000846161|arKdo5k7x06JE7T6wbtxi +Supplier#000846202|pvdOfEZJrh3D6ea641JYh2sp,J3rhM +Supplier#000846279|lMtr6,e5CmMLyfMcX +Supplier#000846306|xQ2dYZISzHwjcY,IWmFu +Supplier#000846307|EP97nIIx nMPEh +Supplier#000846314|w12MIHrraCtj7Fz8M8 8L0vV9AhZAt +Supplier#000846428|eNK2WFOJieeW12 +Supplier#000846438|VUhY9M2ZDWec +Supplier#000846557|XJgE2,jmExqaryMNqdb7cfPLgIV +Supplier#000846564|ijNqprjDf9qF4xCeBvfu JNRFt7 3V7Yz +Supplier#000846572|snAkLctKwI,qteMoWqgc4 +Supplier#000846606|3Pf,1V3Ih8k5tgxJex5Dh xp1yNXYlNGVB,Zp1Y4 +Supplier#000846614|bOoTAqrCTVY4i +Supplier#000846689|X0YGow24 ZaALwLC8KQFYk1I5bJCS +Supplier#000846739|4iMlB6C,0vioP0ZcumW8WRjaqWTZ 9V o,e6q4f +Supplier#000846838|t7tORq4kz2ogjG7GxOdXKuhmdlCw8k6ATH +Supplier#000846939|9W4GnmH9qM5JvCaQTYV9EVmisky40pNDh +Supplier#000847034|DTfWgpRx8SEjmMwxV2p,aNmcajTfO +Supplier#000847137|P8Iv5huC692lYCD jvqlSZaj +Supplier#000847227|Ws4zYe89B4gxfCXqLDsAG81j3YqcfSO +Supplier#000847231|I7fHh1yNRSdC4glxN +Supplier#000847270|W1FDJWfyQR +Supplier#000847306|3Jru1Rop1vRfeNCQ2BWQXqN3QqK1 +Supplier#000847369|UvImDQ7l6 mUWkVoWjYfn +Supplier#000847381|Q6cz9Trl0Tl5fYvnf14aFQDxAAQzG Oi +Supplier#000847403|bBA7F7EcyJKc1Bm,TS4qcxoMQD4QtW +Supplier#000847440|WdvcGTs4qsqLW62a0ARFktfKy +Supplier#000847450|rrHd Lpme87t4tLZ +Supplier#000847493|qpDlv8WDzEsa2gejs3DkUGXvywcGUO +Supplier#000847540|o887p9agDuk0oGsl2YH2luJgGRTxsQStq7nX5oSr +Supplier#000847567|hEa6EG3sliPR8WW +Supplier#000847577|aPYvvJJcy3iU0Y +Supplier#000847597|AtkP4KHAE7lV6GVbp1 eAQUElZOAjKQ,OJ +Supplier#000847598|tkUvgPLH5DfY9JL6i +Supplier#000847758|ZAHaJvrD4WoBdlYLEsBdtrqJGoRwuE +Supplier#000847877|9gHBbi33Kth +Supplier#000847958|VHjP6l1RxiOnnMQH3JLRtbefP9rAk9VJ +Supplier#000847966|tZz4G2aC3WocYvMboZZ +Supplier#000848016|9CBfHg7N QFDf eNe06gvdFBonVWmgTitfStx9m +Supplier#000848017|1iEBn2QVyAfIY6QpJQRS8tImyFEZVUrb +Supplier#000848096|5,wYcXnnxJ0 +Supplier#000848102|rCLeq s31qCF4La81kpmP9PnhDt, +Supplier#000848196|fQDpntERMdXq06v +Supplier#000848197|k279rS9MmQiWn6JziiQbBY4mmjSdM,qxRKltv,m9 +Supplier#000848253|ZAEi,DZODVGN +Supplier#000848318|V4RXtNo3tlNxz 0XlZI,i2Qe2RcH94J4zRc +Supplier#000848320|Vk3bZdeGm839vLVGJ42jz8,C5bJvP7 +Supplier#000848399|wqujaEu1o0LxlH +Supplier#000848465|aYhg3MjjrDOWHGpM2cA +Supplier#000848525|uZIJAH5MGf,5dDJ33w60lc2aGEVR5oqmyoFO +Supplier#000848601|dXdulZAYuNm ,0xsk QbEwQkwBPhL,gIeo +Supplier#000848686|bBa,nV3KSc3iIC0pmw WLXrGK43LTS62R +Supplier#000848734|rlvIqzvQ,vhANTPa3sGI +Supplier#000848906|AdAtQetinGOzVKL5agWR2rag29N2xyjw +Supplier#000848931|AOg0HPjqYTRPc87QybwVk4ESowmJ1X +Supplier#000848944|uKzp YU7UODH5buAYc5NiB0fPsK8Bha +Supplier#000848945|pjPcc BiWUNJei16fvqq9FS0y FuoiYXYsqsI +Supplier#000848959|moI19WbkPveP7xzIkAbf kwRFRhUxf4v,8e +Supplier#000849013|kQzJGdP84gTy5CJ +Supplier#000849057|RcU8t,SuAaqq2fUhn +Supplier#000849168|egPLol,fFWcu1dk4exYCreQuc3JuGPd5ig63 +Supplier#000849169|WXpIN,hfVMNtY2 +Supplier#000849215|,4suIHpyvkRr83Bhjbs0 pNrCQdogNI3r7GT +Supplier#000849235|kzjN53AuHt3SlibifIFYvZ9eqG +Supplier#000849305|IH11mUd5ACW44YVduHUUIuMduIXTXNg +Supplier#000849394|PZPelfQrWDqdX9gibCyy8J6 +Supplier#000849449|2Os1bQDtME,beuXLcMv rveMiglwkYStL +Supplier#000849514|no8zHIuTIYmYabsdmPFUfBPorlAAsj +Supplier#000849546|dEKWA3BLsH1UotPfxBOh +Supplier#000849573|EnCTB4zPFtjH dozBKukEuRBlCgGHdbhpkf8,HSP +Supplier#000849595| SPqRT1KMZetpQR2 +Supplier#000849620|VDMb88DIocAE6RIVkkcr83,I,B +Supplier#000849656|Y3bUOXQZ7G2T78YDidcwq8nRAOPzPBJc,GP8LB +Supplier#000849664|ZSpQ7RaUtptyhgU8zLIwjgrDgH +Supplier#000849711|EhCDtNyaykByPZnmqEnN3N8XvmOfBE +Supplier#000849857|weX8I7i507DVmGBJIZ +Supplier#000849877|gAhSxxlgFV +Supplier#000849909|6yj6H8LvOGKuonwmeNtsOI +Supplier#000850032|xDQ0b0cA49VEP1iDBGFsvgKwcSpkq +Supplier#000850048|N JM048YY2xog,rQZoC0SkthD9aiH0U2AkI1 +Supplier#000850132|DHcx2y1rdsU4NO87F +Supplier#000850140|8gMy0iE3PF7hhEcdv QEL ,0OVxdS9Tt522B +Supplier#000850328|V9hCHSU1aXfp5VIkgCuLXqLmSrSQ5U +Supplier#000850330|40Nz8,GJvH,b t0le7aktp6KGpD7UtS +Supplier#000850480|2sHuR,0SCRtgAwtdH4onbYRSNo,Y0GTf +Supplier#000850528|aJUiofUaPbGIZoMQvfYmH9NLHXwh2 +Supplier#000850590|G8trqJdj0w,KVQJOHin +Supplier#000850611|w7qsO2eEeE77CF4Q8X4iHZPcf,OVHMFeI8 +Supplier#000850646|aqXssMQWWPt3BvC09o2qq +Supplier#000850648|nLREUBxpFun48l +Supplier#000850661|bjmG05K4ISD,FRtWxIk0 +Supplier#000850722|qb5gXtkT,yuj4vQ0pmzMY +Supplier#000850797|f thnTenGF,J6yxcCtm3b7uV,8wMUj01JRD7 +Supplier#000850879|aMp6RpG,obB9sVga0uRyB9X0eVRWOofHgHJfV +Supplier#000850892|7w01rH5MFA6Od12OL eddXaoJosbxdnZ844miLg +Supplier#000850912|Be1DFBPwqOXjnxSuzRLqcit6jwPjP4o9015e +Supplier#000850920|vd6AKOH22SiU5jUxr7M4c4d +Supplier#000850955|xRLSi8ZZYMpdJzc,UZWTw7M4gN8GZjt +Supplier#000851009|olEa1knJHiRJJ3vWEiAc4y16l +Supplier#000851309|v03vQWYSeHHGCbRhy +Supplier#000851385|YGyuDxR7CHDKZZlNxffeGJLR4uGNR8sAQ +Supplier#000851395|z3GlwZxOtrrsw7Lusbp +Supplier#000851407|z019n7qUC0yASkI1 h3k9 +Supplier#000851502|IDhSxU6pTVyry9KsuILMtPnRJNb +Supplier#000851558|NSFF69UuwKXbMgWsRU L1qakGMoUT +Supplier#000851667|T4eysZbAuuj5GSL9 +Supplier#000851673|JhOS6roPVCFKXh7xd7CVFgNmQ3OQDN14P73kHcU +Supplier#000851745|rVC7SyUw2OrTAdpvM6n0D4I +Supplier#000851748|k5WT27dLzN,g48bxFaoOxE ofFTi0Z6wwv,edg +Supplier#000851803|M4B9,qxKIL5qMqXj +Supplier#000851827|hsrs,xRtF2Tsp5uROJuriyMmzwIyFMp +Supplier#000851882|X361pcTRuJGRutEgGDhYMSUgyaG d5Np1qKJ +Supplier#000851964|,VOyc8g7M9VTrC0V +Supplier#000851978|9lyRDB5xM9wl6DFgxWn8f5r +Supplier#000852197|H80Ijf3FZeSRSkDzWFo1uFYMQCqtTjSzUPf,wTS +Supplier#000852318|RQJH9ObZ02x5ead6TaURAzknvU9cnAo VTH1VE +Supplier#000852319|Lin1QlG0cU8dP517NygumamuaUHRdCcY7oC6GmhL +Supplier#000852336|33EiaXtvpAi4Lm9tERDQ1L3CWVgT9eocwm4RZjw +Supplier#000852518|ntxYeIxAtZ LSEb9 +Supplier#000852539|jmudYtoQstpCG6,HnSCO1hMYE0SJksq +Supplier#000852612|F3VLAorpuekp C +Supplier#000852643|QEbzLU0n9CmcJVa7, +Supplier#000852680|4QVklcp5AD MqGy5He4T48 +Supplier#000852684|8KAd1nwVLnMD8kJTVaDExtH +Supplier#000852852|,0YvWtqfg4I1J,4Fq1 +Supplier#000852880|KIYAYjjUMXAyZZiv9GpogxaiZy +Supplier#000853024|ecK5VICOGTIe1 +Supplier#000853093|w89UcgEpdNLfx9tm5NUJXSsf8uZACh +Supplier#000853124|LpacPkSM,AsRS,fcnWzebJ6VXYabWZ tINAMEM0 +Supplier#000853363|78ZRV1v5QUgRlOzcIqJ,mLkCRLkCWgi +Supplier#000853430|xGwrEq,6zSORR0AkqO54T +Supplier#000853464|iCxSAYTlsoCgyTVTIWHkBS +Supplier#000853673|PmxhibnJeS0W8MWWV1uAPDpaMRnLiy +Supplier#000853726|,5HT2CHp3QCyjhg9hByL4RwK +Supplier#000853785|l44PsVxdoHpx49a21t2kDwXhg5duEoCeYVNfc +Supplier#000853807|q02Ncn9WHBJ9qwvFfKOSpkXWONrg +Supplier#000853891|8 TZz0ZpTmXwEGRLsa +Supplier#000853909|Vn,BZ64zcMAD9cmoY1RgbctXsprFl8lj,T +Supplier#000853998|ykz0W5EDWdW,YICKOwPoSMPj6MNj90ay +Supplier#000854019|0CgzEf6OuFBCIXYgGVK +Supplier#000854066|SP3WGDMKEyu6i11nNwTSZGcF +Supplier#000854109|ygp3T178u32yHzsOQt3yfIthX6Ylg +Supplier#000854150|Xm9yOigD7c +Supplier#000854154|1rfnR9j1jhZ3a +Supplier#000854266|QfYOJEabpewNn3QExis8B +Supplier#000854274|HpFG0dO,ba8OxvkVzU +Supplier#000854288|l8VzJkyyRnrBzCOmB0RoGhon +Supplier#000854451|GZVy82zyJayWvN3vAav2jTWk6 +Supplier#000854654|Lj0ymMj5,WeCdbOQUUz5Io1Wnw2,DcrWE2 +Supplier#000854659|DnGMZaabPC5truROWNWL +Supplier#000854744|Jj,6oO9mrjWnCmN MZ +Supplier#000854945|RJik0zCb3hCZ0wq8FVwdU +Supplier#000854948|i8n2ZzM38u8s9nm3FWKoVKxrj +Supplier#000854993|JNJOzvna5BkvwAlMH1SHcnmvBAy +Supplier#000855037|BMNecgbZS0yoXDFwzh9BLR2xdimVPwkkN6CqwQ +Supplier#000855062|jw0BcqSxehvOvvZ6ibp1PGZ +Supplier#000855135|bBq5MIVxb5md1TmEZp5h2 hEyjge +Supplier#000855214|SRFh1sGJd7SkhtB +Supplier#000855278|q2ie4w2Ry21Fctcu9LB7TP6JhN5F2znllWeDEsv, +Supplier#000855334|ueBYdW4y1GeVWrv1ORhxcjidoZAI +Supplier#000855366|5bR0Aitqi1VC1yag9poI +Supplier#000855383|GFJ,XE2cT3fDbyoMLQrTX +Supplier#000855406|lipqn8XuBks6276UNFTwwt +Supplier#000855413|PyNkxndnAqz9RM9Ht731hj7t +Supplier#000855447|gh5ZB0kTpUM1ejWx O8P41XuPqLZyD +Supplier#000855449|dqdszXnv55,n7N aLJJ stESGn1 +Supplier#000855463|,kUfA7XTnMzSNETS,sI +Supplier#000855470|zCjqCvHUlIVt +Supplier#000855482|PQPB9H1yZNIQ +Supplier#000855620|5rzhIWqtIsaVb9BmBmmRVaM8DHnDDmgiA18 +Supplier#000855661|fXoL9arNA2q UshEb8iXFSFyXON,CP2rRxO +Supplier#000855754|KrXKgjUpCuHJo1Z3 e5uRgvOJWP1n +Supplier#000855788|lOgVD2CqisgT0aD84QHt7 +Supplier#000855793|AwEA,jqJSSwE, +Supplier#000855811|kDO7UGkz7MhgddRTiJj6 +Supplier#000855858|n5l4DxLQX8M,p9xa W9I2unUaTTh2vO +Supplier#000855992|3wLA3vZMzLPAjp407M +Supplier#000856015|9Cya1SJk7SUxxl iacog uwx0k4Xnvzwhv7,pXJ +Supplier#000856099|neFAJBpyOzCjLeOSfKKCn9MwEbciasNpY +Supplier#000856125|tYA8AaqLDO2yB0kh O6FK2V +Supplier#000856175|zD2d8agBJoP t,PI3NK5xIH27z3AGl7c9gCO +Supplier#000856197|tkH1azzMt2o1J0pfXIQbKyCO7FPi +Supplier#000856201|LG1kvOdb64ukkGMwWeABEvHOW,5IE4f +Supplier#000856213|ccond22GhR a WqvJkmgKOYs +Supplier#000856234|0QBCJXQG5zRF XEh N1ybNi647K +Supplier#000856284|ch7engpQmWxNWvEzgie19tUse84kP6ay91ktsGJ +Supplier#000856312|T3aB8LT,rsU2j +Supplier#000856398|Lt00KG86VFeHgxZ6kgBg0pf6JTLMODRlr +Supplier#000856413|bSBOudHAy2siYn9iaQvNTCy +Supplier#000856476|4IAAeFmvgMYnVpxIoEL +Supplier#000856528|wgrrHYxdjmW7 +Supplier#000856548|ZXZh3P7,FC5VtB9K +Supplier#000856549|vtyjF,hLZLTr4UKoMQWOb0WACWpG +Supplier#000856657|,tI7s55uQH209JdnECYf4WwRZooT,tu +Supplier#000856659|NAK,jOpIF8SMhU7INXGi4MEEjLUjnvBHzGyj +Supplier#000856700|MyoLqLDiYn +Supplier#000856753|k0nmJABmOMJ JP ASINi6XuG4z +Supplier#000856774|Tts x,xFKEl06a io3KmCduwumW8uxo +Supplier#000856836|Etpdya0TpHvwP1,wM24SuWmP +Supplier#000856883|9iW0rdPrggABHTbWm79mGgnGOyUu +Supplier#000856911|4xvOaBSzpoxhvqwCOMacJvDty2O QjeZ +Supplier#000856960|0zOu9sDHNTT +Supplier#000856996|l19hnQ ZnmwbXMN +Supplier#000857015|mUO5AOfr,oEgkcT QxsF +Supplier#000857050|4kT8X7AwX,LnQfGiqO8bP3WPP4UC1RhTW +Supplier#000857064|4cHuwoPmBrf3lNQN98RO9n4nbNjpV +Supplier#000857176|GR708CBBeoM0DWyQe 8oOMNyM1MR4D +Supplier#000857266|4MF1I7MY5hDbJvQrBNot3XagpDGvDATAXnI +Supplier#000857300|IIhE7qnWFDi01cx3WMrqnacjQnbRu2qdzANDe +Supplier#000857308|xPI3KEBWQTVg SqtBkkRqX +Supplier#000857334|29bMiJiM KDfHcxNoZRb +Supplier#000857346|GYVk JMq8NchV +Supplier#000857388|g0,4ljotYfk6oJk0s VuJ6TRB3IK7l +Supplier#000857428|tuhGGAJnVLUqaILFitb PtfUXC,vcsV +Supplier#000857492|AMb3CYZb9QwQ4F,6E,r +Supplier#000857506|,m8ImhHeJA3Qdkfz +Supplier#000857554|cJ8Dt6eqanbUGGJunPji9L1 +Supplier#000857580|NEFcBQn3l8HODDgX9uPv +Supplier#000857595|QCxWEDDAVeZZfMWq6zs2SqC5nTg,N3eIF33OY +Supplier#000857639|p,u 3z5p6yAO2BXaUVFFXbWfIpm +Supplier#000857663|m,P5X,DFuue +Supplier#000857667|eK1kLEDokrlyrh6Z8mmb4Edgpf +Supplier#000857677|kp9LRx3oOtgc4NuUXIFIJ +Supplier#000857791|4e1VkDFmmgejmquW,hmpYiFgFSCojYA +Supplier#000857882|uPxdQLytHOjli2xFSpsv6SCdsQ5TuYKy +Supplier#000857892|ua,i6cpm9 MGOnjVWH5hpvDrLU +Supplier#000857904|gDxkiEFjbcYdzpICJD +Supplier#000857960|jayXb5sZJ57P1f +Supplier#000858258|xUifixJZGJc,HAvrH89BIPa +Supplier#000858264|S6fTIXRl7bFwgYPzAOV2kg91xWSr +Supplier#000858288|cmdYlFp0XX +Supplier#000858290|202YlgVmoezwtDuu9htjwgg2GNruWs8BkQ6UcDO +Supplier#000858379|tO4z6qlB2A +Supplier#000858384|nykKLkIeVqpmuHMcAbmmawjWq +Supplier#000858392|OKP6jA R5AEX0 +Supplier#000858434|eqEsGFGAZKl8Kpt7,PChJJGbN +Supplier#000858446|4HIH,rkiiSTKN8zdzW6qNzs0iI7Wb +Supplier#000858451|dC XgHEONin89qsBdQjlbA7Waq +Supplier#000858672|x9QY5m5mgLqSmnkD +Supplier#000858696|4pPmFl0zoeCGIgg8L +Supplier#000858785|9zCGE,AZuYQ4I7iMyheAy +Supplier#000858837|kPDeZRK31R2 +Supplier#000858850|vevInyvlzF1McxAAat +Supplier#000858854|9k2HJhCTjJn +Supplier#000859021|CCIacJbYhhN3j +Supplier#000859417|ogtI6psStbL0 +Supplier#000859470|xvajPI1uDk3ZjA +Supplier#000859483|OdP 1CilcGoobGOELKUfC,eI5uByXE +Supplier#000859639|f6FijJPbI8UI1XhyTVBF80lMiHum2o8 +Supplier#000859795|bmG8lnheKp8COc0iBC5zY8SxovYgn OA5CpCD9IC +Supplier#000859808|WQWC6yBdkxoN403N29E8cFU5H5jUD1q9 +Supplier#000859863|fAyux8ezbrDejeRWsErAKmGy,jmzCGnPSOvA8q +Supplier#000859950|sJsiSOKFQdu +Supplier#000859987|eGZN,qH9E kJKL +Supplier#000860012|R69cL5QCG4EYzDrZljXTV4NWz4ACrDogSRHYIL +Supplier#000860041|IV9ED7mqGfrD jhgMQTF2XrLPLw +Supplier#000860070|Q93HvjZaLDv6Mh2SZvQ7ULRxNpLyPotGkjek +Supplier#000860085|F0PjsGfp,mnkzZx1IVHMTa7HanhWe6O +Supplier#000860235|FooUlPIQNfpmkTKtx5DJDEn2xt +Supplier#000860266|52BAmHwJBFeqb0wckjPeIUqX8 +Supplier#000860340|O1YxyWZzx28YwLWuVlu +Supplier#000860392|HvY6xKvd,FQ7aMY1Jfp +Supplier#000860478|qXEGKFMSjM4QkspDxWxtgfZmUJG +Supplier#000860616|NaXR pvRNn3fJ3GaQNyu4nDi3cy0Ahoxi +Supplier#000860631|qBnT9qdEYME +Supplier#000860638|bGs1HkOghLxK +Supplier#000860712|A8McF735WZFCSFc +Supplier#000860738|FDL,n8y7YDURj5aJaRxT0FVn04FIH8 +Supplier#000860773|FiHhLXUq6RzFB3g MMuy,Jhx0tz9TyesZk7SNB +Supplier#000860866|g9tNuebG3kGNf,gnw6chirs012m0ErWvqpI5sRYH +Supplier#000860869|S7dCxu1cCZKIn6ALtHYGs2VCmNToV9OBCt4 +Supplier#000860953|WGNkm34KaJRhjd5U9Q1DRE +Supplier#000861192|VK76gFcTsSFu7 +Supplier#000861222|wx7UP17LB30v2 QUBs8b pEgnYKVCkNE9QZnaYUS +Supplier#000861408|,cPmN0v1C5P7RRaYZYZ8Vq +Supplier#000861481|IGEQgYoklU6PDtdANa9yBoELlOfV3qyfbQTCxvr +Supplier#000861505|6C7aX5kIk5ZSO715YJ7F +Supplier#000861729|nCN4QUQ,7YscA +Supplier#000861781|dgIoQLRYjG7gRo8uK0fQvsObUx91OagfF +Supplier#000861782|mS4Tjvu 5GiS2J3Uy5NL7eheMzTjc +Supplier#000861819|iVvKOrV5AZ +Supplier#000861846|GIiLOoxp2fM7eX +Supplier#000861862|A4a,urjWIrkgFLUHFzDppYvJE99RaNq1 +Supplier#000861879|W,sVreonljcHpJf +Supplier#000861949|qwlE4GoOe38e +Supplier#000861952|hULPNWaikZ7fRK0OTUbly4OeE +Supplier#000861980|dsM5rOkDV8GNKOsjQ b +Supplier#000861995|doYTSALwZeABSc243Pt1s +Supplier#000862074|vNS0USvHVjodzWqTgercCWMZ +Supplier#000862089|nM3Gw3ioGbNEGQHtA +Supplier#000862193|8KpVVKmDXZNhH9 DGNa +Supplier#000862219|j O5Ffj4EqOZnDmw +Supplier#000862266|,0vUitaZ,QLSJtN59R +Supplier#000862269|KmthxUkZOK8FzPU +Supplier#000862403|,INb6obcP2Ik1FnYA 1sFKGLw75OKgC +Supplier#000862410|bOQTBNwkToPwKiJFmjWWyF niIKvtHDIEWQllg74 +Supplier#000862516|mgHI6bfT09wCqL5jgWtIaeTOdJ3gMNvg +Supplier#000862528|7mdQW13G3iFwAt2EVyACcR +Supplier#000862692|QY6DpStnYOq4BtT,ZiTz0sr +Supplier#000862875|DTCVBxza0IsbRj60OQT5okBShAiOKv,Rm62Hu +Supplier#000862957|xhlS6v2IOH7VFTYy66cIrCum3D +Supplier#000863038|GzbFZLM61S8APq3Tu1BTyWmf9ZOIewd IwTS50u +Supplier#000863099|S25fofGNQvtMTeCta6vRLTBbwAa4h8wbRs +Supplier#000863101|SoUPwaqNazz3RW +Supplier#000863126|vNHHzrS0BKpTtIC0 +Supplier#000863183|fzUFtkTmKHZCvx8 vWSj1jwD47QxUDbl3zrePI,h +Supplier#000863194|Vp4j0YeKEfil0OpUulsxmf +Supplier#000863272|NmgbT1riPj +Supplier#000863295|4ETkh,XCB3Nb06kHwmqPlJzdPeWuwkB3ipuP +Supplier#000863308|RuFikQzciM +Supplier#000863311|rBkx2W4TDXnumuiVf,vwkeIqLPcdqQ sz0Q +Supplier#000863482|hBeAEFf sKf3fNRy8se2Aw6ZtllovvI1c +Supplier#000863702|zrwZkFN RFPeRSxb,H2hZ74PsU +Supplier#000863752|pfNJW5HGbWte6ZTRp1l +Supplier#000863753|mvLAZ7eWwIXLUvxB A +Supplier#000863902|bs7V JrVSpq58iFU87 +Supplier#000864013|zDtDSMP6ZyBSbNzTDSagjG +Supplier#000864040|bVSrPAdhS3MV69CuIQS8uOSU,HhMIR4FtCI1u +Supplier#000864138|,CjW0ijEumpd9L9fPr22DmPmdMYxezrqBUX +Supplier#000864175|otREgNGssufpL +Supplier#000864192|wQDmFH0YYuEA2xvXQIJtSv +Supplier#000864363|Ir0upGVG3nwxY19lLF3yFwVgMZ +Supplier#000864366|yXeoBtjWXAyNNUyk6Q8SCygLKKhN7F3 +Supplier#000864498|d1govB0Kmp +Supplier#000864650|4Bg8W3x,YQz9 +Supplier#000864709|GuVYg0hd8Oc3KjLJFMDenSbbRaDToO +Supplier#000864802|SuN,0z,5yK9ARj +Supplier#000864934|jUMjJAb,jc7ZWPk,aPL +Supplier#000864968|H4tW5ieXf0upagqseEqaKOg0r2 +Supplier#000864994|9MdYmT BFAIZwTmnaOs +Supplier#000865006|VLZ3Vt6vnGX +Supplier#000865017|fv,EnGc vkfqXqIDUgJZ3Teo +Supplier#000865066|qFFYIsOEetlY54OzZITSif8NfEzChQAk4GA9 +Supplier#000865119|R06TytH8OTcDjLXgCy +Supplier#000865128|yzrrIVihxZV005jNEL66jpJipu0Rl4cf +Supplier#000865146|38QP1 fkGoSH5hnz +Supplier#000865205|acwPW8ksMoHOE2wRH7M +Supplier#000865227|Y4iM2RPi2sJdRtuQHf8LmT8j5h 41AB +Supplier#000865322|e7H0HP7t0E70NvRoxZ3kNeKnwTJjPUKFX +Supplier#000865354|CMEmsfRAP08y7,N +Supplier#000865401|77WErjWayuxXszv92 +Supplier#000865406|u2xQ9tDfS4Y aF7TuJ,hmHL7RsPe4L +Supplier#000865475|,3if7f kgZSuU8LhwoKLFS4 +Supplier#000865492|sPF6EHXOmm,S8 0z2BmiZqCvGkHuEW N8W9jwm19 +Supplier#000865494|eOb6ERQT4ngC4G4l v8bXw,pzcQzRZ +Supplier#000865626|nyeOxnbyJjvIlhx9Hssg +Supplier#000865641|O7dj39HXqDI5 +Supplier#000865678|dWcgFVHiN4t0hdO +Supplier#000866077|0ztgv8lj,rj +Supplier#000866175|yVvC12V3JGVXY3ds +Supplier#000866224|bgxFCodx2fNW1vu06WPBYXCakRzV1 +Supplier#000866235|N3DSVzWXTA4NV8fvnM4KMMh0eU +Supplier#000866243|yFRVpUWrEJsleC3uOvAM0M63JMoMAMUkycRe +Supplier#000866295|pa4sPPm69RMwi +Supplier#000866314|,C2ky5rlYXqZY4f50iKx +Supplier#000866526|iO3vf2vivArmmKWkaumf,HDamS1Z63c +Supplier#000866583|X8ZRwibwT3 +Supplier#000866652|dLJoV0xTtPXQA j1bVdJri C6l1 F0tRqpEVhlqi +Supplier#000866707|wIMzRKxCjIAqdMVrB2Vg8v +Supplier#000866767|w1vllhB36YISSq1ld56TTTL15K7Fdik +Supplier#000866938|eL4Shukl1m +Supplier#000866940|0UumYSHcaryqrdjr1nqGP +Supplier#000866967|gQMPKbyqadIh4ZExm6 +Supplier#000867017|JG,xqtONqlVODjKIDq2e +Supplier#000867033|010ZNSiaRSpv +Supplier#000867058|9T7VxmcGFB2TUPg2WGaQBVuk9ACK2yoG3CZoKS +Supplier#000867068|ghPIfj wU8QbsnRQVCF5e3cpXrdzG +Supplier#000867097|,o25Y09ORQvd2L9cvAkAco 01oUbhXh9ab5 +Supplier#000867323|I5t8I196f7tPEld27epMz +Supplier#000867357|lldvniMuB4IVxqlFJ11FNI4IORimM1RELl6VLXr +Supplier#000867418|7,411m9p42YSBCfdkLhFYWc +Supplier#000867461|ueNRohrR,q +Supplier#000867490|bm8OWHwVkLYAvh4f2F,dahOS7fE +Supplier#000867495|FOu6 YCi4yndYRk7 +Supplier#000867661|qt9LDLIc4Xuj4CNqmorMzJCnd +Supplier#000867722|752tFn8ddJPJfOd0ReDcVj7ipdoYY +Supplier#000867822|7JDPk,qAMavHhqzRcXs9jch5fxLPALO +Supplier#000867925|UCi79K,GGpl4KJvUCqaFf0zllVejrdc +Supplier#000867986|lgr0bohtQsNLZpqEgYLs, +Supplier#000868054|OmY ZtGKHrO8,s3tjx8MMc,xPX6Qr9V9MnGDVz +Supplier#000868104|6mq6BPfxLt2x +Supplier#000868190|4ddTZKpAjqVZb3dqfS,,sWN3sWNpO +Supplier#000868220|pOw3gueqraZ0g4 5CM9oB3e3KGgjwRl,2ysl +Supplier#000868232|RgiRCYE8RwSo4rDsBttsL0s8YFVaPN9 +Supplier#000868255|scrJVR8zCQVaEX 9hLvM2TB +Supplier#000868341|9 NKpCKO7l6m +Supplier#000868348|cc41K57wO0HOyQkSlR7UIjDfX1ag +Supplier#000868409|n35zFj R3yL2UJxLj46xtEx +Supplier#000868439|rSQV cvJnoCY2MZyd312azoNxqsUcR2vk1QjR F +Supplier#000868462| bMTIxNlWaFN7nQ +Supplier#000868489|QDdx6F3t4X89KFQ +Supplier#000868491|yIHsRJJHxFA +Supplier#000868554|PB2P dIvouzNqJNHLj +Supplier#000868580|YpdvA5KrUBRpEyPHv3CRafV6aQvy +Supplier#000868587|0kxWX09dENU6TUyEIsYcT7o,sB +Supplier#000868627|KXg70bu,OO05ex +Supplier#000868640|rF5KBWC8TnXCHwmKGHB 2ikwJWIeJDOS0 +Supplier#000868778|K6rQfr48xmY,3elIngXvYG1K85NYzQfLIQ +Supplier#000868805|WIil vGqBjq5kDdOaoNl57ZDw0QQeCN +Supplier#000869113|S2UQGtjvnlPjLtbdkzUNmagECKDdj2F +Supplier#000869135|5B39KLb6fOGm +Supplier#000869152|SQuNNIBj1CN6s38,4U9,Y +Supplier#000869210|xjaLauodyIHbmDN,Vqp1zXUH +Supplier#000869301|NEd36TlnRQ +Supplier#000869419|xlCsdHD3ulaFPc8eXHo +Supplier#000869478|wdWl,LjqLmfkWc30U0ISA +Supplier#000869540|8x66LRxDpiYkiy92R +Supplier#000869565|bRye7Qk2xXtBIE7npd6rVx1DWG0 +Supplier#000869591|jpnaF5zQ58E6fMPf +Supplier#000869596|RS1xOUNONBDEX,DvrogMXer,46XM8HwEvNQ +Supplier#000869825|g MyJy8F6JCVEym06 +Supplier#000869854|3kgFMI52yfAfFiN2D j2XEcSxlkssBZD +Supplier#000869866|,xnTO8lxGnLrQYAsGdrh7I +Supplier#000869905|vXJ,Bc4h1GT6BD +Supplier#000869927|xVs4MNkc58 +Supplier#000869932|V0a62E3PKu43Efuvd tz4ixI1 Gg,p41wQ,J +Supplier#000870034|Eqf2y7ewuVf8rvwOtgdsX +Supplier#000870066|sEa5otE8KPbJ186 +Supplier#000870088|a7zCUj9JQ0BxdErbZOuzv3d +Supplier#000870136|DuwVFJQdCFtqnzwtT pCwoB I,oIrByq,HRga +Supplier#000870192|7L0meHrqvRBKumOPgDzkSMnyoRkCiFZaml +Supplier#000870251|nwQ4ZGV8,Cf4EZQTIoil6XUofyJmnlz +Supplier#000870262|bEMfdTyOQEYQcOLBdLMlQy2HXO8aghMKem +Supplier#000870316|cPYwPmFn9YaTP Cir8 +Supplier#000870456|0Eq8wW06c2sas,QQIVXBd9qv7B7Ea9Yu9P9CXxBt +Supplier#000870499|5JyDWptPQjX +Supplier#000870557| EEX,sOAtgQvCNa +Supplier#000870601|89vCFCJozCVkU +Supplier#000870614|qLZiscUsuXHYMQwcM,jbxtefL4DFuJ6l2cSTbOS +Supplier#000870646|JCwKsjvxv0UVzj +Supplier#000870717|tVpYIhS8woD3FSvL +Supplier#000870766|zGZyzgYuVRqADnTv2Uy6CGYLPkZamBa8Qr8Ie +Supplier#000870852|pYz 8P1fvUDPBz +Supplier#000870875|39sfYuLdCxfrPd1X5u2kGTEHkFeyGqDMUE +Supplier#000871042|5BEA2FOgeInSJvXr +Supplier#000871197|DxzUpP7mwp0tuhY0Hlk +Supplier#000871274|PJXetZoHJ0h3hbB,ROFo0dIoiJ +Supplier#000871309|Z48q5b4j,fO8KCSvZNb rcVSlDRmjdZwAmmECQ +Supplier#000871324|oKCeeP aBxCoazId76XHr6hEp4hJ9 BW +Supplier#000871380|lOM7Ea vCUjPhiNK +Supplier#000871554|Azh,hLMor,oRN7MpYBVQ9 +Supplier#000871625|Yzjjo1q7RQoJ4jmGhMYFmbpn +Supplier#000871653|FkS fR4kXprU6XI +Supplier#000871698|aeX5rZuH9Q8sX05t6 +Supplier#000871718|692L2Bf 2k LYWIvv +Supplier#000871758|LxwRofS,niQE24 +Supplier#000871780|P,,r32Wg3J0H1hr +Supplier#000871790|7,Ssi7IuNsD7rtcfRMX2vBr6CqFqV9vETKb,zm5c +Supplier#000871978|AMghuYHec7Wl,DsIOmig9jBz4QEHuwWvtwtN +Supplier#000871997|Y0Q7iFWfO5vuWslde57wOUlHzj9ZGha4ZcNp +Supplier#000872012|eQrNps QFb0dPpuoU2sdcEEX,w +Supplier#000872046|,L,jnxzre45WdBEoOmiO9ghypbzDwRydJTOa6 +Supplier#000872073|vx0SmN2qF7vGith01skzMNd9cMVe58 +Supplier#000872189|dP,sOvGCV3WxcantXwwROmCGkPomH +Supplier#000872256|Vy2FD34w2T6BaNoOCs +Supplier#000872276|na5sNO8CfHRzTJSfHe7UCf6zpv2LXfCWsGqwQFV +Supplier#000872362|4A0XNfE8XHE182 V,C9FPJ0C5wD7M7rWsbP +Supplier#000872382|Fd8Jmw2YJGxZuvSg1S,HnLH9 +Supplier#000872510|nxMBAuKNmE84hC +Supplier#000872626|bO8dQSVS1dfs24CAV7tlSUF9j753ygbj +Supplier#000872675|sgAB4OQ12LW9qM pL bG +Supplier#000872695| VWKCNojvth +Supplier#000872701|WU2Ef2lUUzbd5ZTTW99S zeg5IdtuDMVX +Supplier#000872771|j5ibuvZIU BaQoMuBN +Supplier#000872812|9N0OAlFNiSfybRCUycf5uMuCp9Qj2flIDAC1SoAc +Supplier#000872893|mzUa1ODLflZn +Supplier#000872920|KnyFFbf8D8pz8by +Supplier#000872927|V S8vyZ,VhvSZRs6EtSFBZj9bk7ttVrgK8dI04NM +Supplier#000872930|NUWiP4D6MogA +Supplier#000872943|AoGwWXp7x22 Jv6ym +Supplier#000872944|g3,FUooNj7ClvjtcPBaEMfknwgfU5b +Supplier#000872997|SNgS93xurfNYVFTK9TyfyQ +Supplier#000873012|D0fyM0JJjlIINhLMF3tgVem +Supplier#000873092|yHYpyCuXogpQaN696bWwlHXuj4Fvk gey52l +Supplier#000873205|D cwyteE5QUhmdtFbQlsKX81ENJ +Supplier#000873210|mpGyYFueNt0DnTLiXa4 +Supplier#000873243|lAkav2Mpzf8 r3qkB +Supplier#000873302|c9ZNUcDytT9rELlr8peqzz +Supplier#000873391|O7hYtRypr4,rdhSNJMv8UtPXgP9 +Supplier#000873402|NGnHKkUG,Hwfpw8XIQ4OEjRRW6NzK0b7Tt9rLAV +Supplier#000873476|WCzp,lXcqgtgSXgLl4jvtLHo8b FhejA3 +Supplier#000873551|vtvntsSV64NARcQWt,j2HQa0gXprusip +Supplier#000873594|HJQo0BAS5WHqQ82wwQ3ubMFo1y2n7Q, +Supplier#000873595|w1hn 65ySp2zFm6gKl,E +Supplier#000873600|g0h1oluroPg8WmWQuS11IQ2hh9zC0jNV,h7 +Supplier#000873615|LHTFCX5OfKvLtNtjtF KvdS95tiR1xK4GnHFIEL +Supplier#000873690|hoWa6kDzKvCwNQ1RDjzk4 +Supplier#000873897|B4IHoQ9iL3,4jKXjX5WDQ +Supplier#000873919|7rFfKcHRdVLVflczHd7wdtJt6vhUi +Supplier#000873929|Tfj8ys4MRMEZ7gAIgmvI3V,e3MOBLnBU vtZE +Supplier#000874051|KFJt sCpaWKB7dDrmg8dHFNYNoME4 +Supplier#000874057|ahzetnoMfoLMP +Supplier#000874066|jxULXf1phdGDl1ibpHot,j +Supplier#000874150|hs4vCn5s7go,5whQu853V +Supplier#000874155|6GHrtmPGLk, +Supplier#000874189|QywU0shshZPfEnmThVgrn4KTQ yzg65HbA +Supplier#000874195|sGWnnkUeUd,iKRLW5BZRKUu5LBbfRKka +Supplier#000874215|fTnJ35RN07KHpDxDKOPTgEz0PLmEgZ,mns5z +Supplier#000874272|QkNJzVRZxjqx521hT9TaGenFwd1fVk8G7Z +Supplier#000874347|1TrJEd kqxMpNe7, emXwrmeMvlh K +Supplier#000874378|E aBPURtyiMoVepDvZ6r,Tz558RbkSn +Supplier#000874384|TAwk,2nXVySl51AtFLx,0DuNVCgs8uAKeQVfmN +Supplier#000874518|Ciq5xX6gWjKyg3In4lINmvKSt,ajopLtHiX +Supplier#000874599|EmVGDtXgEzOH +Supplier#000874704|ZMmzHbHtOTzPZUi7VpwTcTHO5yBpecO3m +Supplier#000874790|6zfoGYocrGgkJiNfwb1jaFZOq6vMb8 +Supplier#000874797|JGnhd rsycF aoEvBx09nE1TDbJnTgELwt35B5 +Supplier#000874821|Z6JWncTF94Qv9r7xB5 +Supplier#000874826|qj1I7EwfM,PM6wsa94kOna2cq3nMbeWMr +Supplier#000874903|HWpyRIfb85XX81BzZWlQ4 +Supplier#000874910|Ar6YSE7Tzea1xBKLaTDGMsgRWX5RpABvkcBP5Tp +Supplier#000874927|BuwjB3v5Rc +Supplier#000874973|caU7skiAOsiYH4JvwiVk6rjinrPLF7 +Supplier#000874998|We0EvSDfX8 +Supplier#000875035|OU3vRaO2VmpUaQ +Supplier#000875099|fodwIvDopAVPNjIBbC8ER,oEk GD +Supplier#000875153|dsH AkFAi79 +Supplier#000875182|9HbgssEQItl +Supplier#000875197|MoptrwCUQ4rePIBcCVI9fk9W +Supplier#000875256|qhP fOy7rdCq3qcxk3SdR539PTiQaPar +Supplier#000875265|OiATjbWI9LvDf +Supplier#000875270|wmFap8xWSZSXUJhcSvPP,vpr6ABu55Z8ACx3qp +Supplier#000875302|8TL35g7zov8W5ICD6IJNLtF678VHUBGql0 +Supplier#000875358|CBqvth8i3AoPU +Supplier#000875360|VAs2uhzEykONJdn0ywWmmw3sAdZzsFjyCF +Supplier#000875424|43Uuybmknuj dwYLSTam2fWs5I F7K66eY5Tty0g +Supplier#000875507|ENxwgaiX9e8t4RkXd,b3qhC6165cOK1ghEGtj +Supplier#000875546|3LlCJM601toEM2NB7HWRRX,ZPVT6ccEzcA,KEC +Supplier#000875699|YcV953QxjIM3OozM4A85pF60g4HBlbH +Supplier#000875721|ifeOPBKiwS2m +Supplier#000875786|m,c5hLghmIia7fO5Bux5GU +Supplier#000875894|Fl mnwTOwC HWop1mP yRF4JNYNgcx +Supplier#000875914|Gy4zTeZJY1z +Supplier#000875948|yHt1qqdstR m6rIrDixCQuTznXzF5g 24H, +Supplier#000875956|wCyEbIvQ1a,Ro7D,KihHxCViMfLwvu0Qt +Supplier#000876030|3w qwDUuCxE,Mz7OV1 +Supplier#000876051|3M3HYHc9hYwP 6xJ6qK5OAqL +Supplier#000876103|BrkBpGcr,tJIt, +Supplier#000876106|2gO8zC8VaszOGDPCrM7DoPc6h0MggO9wQy +Supplier#000876174|UnLTLlxlC8MBA4ifREKNg5zm0 +Supplier#000876183|4bVk4CjMTeC8n +Supplier#000876199|9DlxSp5yRjYgRLl8OwVeuoiWCc0p +Supplier#000876303|wqPN3Aktym5N92O3G1nVzohTP7,8tAqn +Supplier#000876327|JYI0YwWJB7qz +Supplier#000876354|iB98gnABgcakt4s,arJm +Supplier#000876362|HaIs0JEhpNJpBFbhq +Supplier#000876505|hBhYhcvooNZNE6x0,aaqFeCaA97Y36 +Supplier#000876530|jDouxzt1mNVX +Supplier#000876642|GzncOytsZPp +Supplier#000876732|XzHFHdYis0Qx6R6lOtHEEDl6sDw +Supplier#000876761|FAJE0fY 9eabd8QpvLWY +Supplier#000876819|di58RZ2Mz48M2Ac,8QUje1bNSZ +Supplier#000876832|EDUUlenyeoyi2yh,5j71ZDaCz9Zfr2MQ9,1 +Supplier#000876904|qkXxDjemCEYP5YrxTl58,QJQN,uBwXQMmql +Supplier#000876907|O57HKeU6VDtvtDOByLo6 UeOfmYJdnlfNBny +Supplier#000876934|ff2j4YPJLyv6l +Supplier#000876991|z5dQOFkI,ob +Supplier#000877067|fnmaQdhMRL +Supplier#000877187|cOzKDUCoyxRMmLc4RWIJASQZwxs +Supplier#000877223|9e73TMjmtU3y daMmEPMo7toTjz +Supplier#000877252|NVWI9ISbiZd +Supplier#000877309|d5WoBGCk3r081s5t6uG0nJNI +Supplier#000877325|rwpYd5KhQRRYA4xLOkeYR,zVXbZm3S +Supplier#000877405|0ygjVVDkqnGa5y1EDSVsC +Supplier#000877436|Sn2xlFo8RmtH3kxkWhmqzVMYg8w6 +Supplier#000877663|eqNcD0A4aR +Supplier#000877723|AB5JHiqn1WnEVFzcw4fr +Supplier#000877725|xFfM5XbB87wbb yq7VO9hk +Supplier#000877749|,vKoGpNUxJ0Bze9WsgAd7Et3Okpqti3 +Supplier#000877765|BEIWMUz9hTu4PAvpB4d37U,NtpqKDWA +Supplier#000877797|L2BtR,VtMl3zIDMYhihV1AHnhzgKWA9AzSFKUMw +Supplier#000877972|TBmNplPYeR4BVbkRdy85KIz +Supplier#000878009|r7I,pNTTwDAA8WkM57cQiSZ +Supplier#000878063|L4,TaUNVWVEfcddoRxa3ryg,1y ,fbOOi,k81x +Supplier#000878120|pTMJ89,fIPC0g1 +Supplier#000878128|NZVZApaZNJfbsyb7 +Supplier#000878214|4jBh0j3qwdAhq +Supplier#000878239|ZUxjWt20I5np4AHM5zAVn23yqssxbzy8RWBUGY4J +Supplier#000878303|86lNmCdX1WbUtGV5LiSHpgjtHsL +Supplier#000878336|dHCNTrZalQbl +Supplier#000878446|Svuhsxu1wMFh +Supplier#000878522|iohuVfq3Bzayv9ugM5Teh,8OGezvY2BSpDyw +Supplier#000878561|dxnUblQgf6BF d +Supplier#000878605|ilqSMhgc ez16e2Ti +Supplier#000878655|AytBDRQ nci +Supplier#000878696|M6x0CTYTQT3Q43gL77EnLZ4dI,bXm5H +Supplier#000878730|5lFqZqn9ybw4y9PvqdiO6HC0OC7LRCy +Supplier#000878828|BK2FXBwyR4qDvweV JiSNHv5nQI +Supplier#000878852|uec7bo2JrdvbPmFNgQwdvpc3EqOWH5R, +Supplier#000878853|vLjsB4K 8kKH3CnourXhKo8jkAbq +Supplier#000878875|8kdasXYyJXtnWwzy9d6 +Supplier#000878913|HmF,o5LHbRwz9lVuzd080KvCK +Supplier#000878985|CqvYhVv75G +Supplier#000879024|N1IeW,FLiiVGD +Supplier#000879145|pKznawzNFLmca2QdiM2aQGAstI +Supplier#000879202|L2xrILGs2lITCVQlzv0RU +Supplier#000879208|l2GBuTqOKY7FqDkBZDL1MLdpciI1IMXSr +Supplier#000879221|zN0ponSqug7u2x vePfw3M8s +Supplier#000879222|oHXNh8SEwq fehQe qOYlnv59suCK0A +Supplier#000879318|Sk3i2cXqCiOsRjJpS70 +Supplier#000879397|O8G2Brqme8DXR +Supplier#000879417|ss8 HvoAA4 +Supplier#000879449|Tx92,LYykdAz6FeCCEvi0szFQpQh0VyN +Supplier#000879503|HCiagYPPvZH22FnE iZuQdn,Sa +Supplier#000879596|0G68bPz6gYFIFFfKgXRd +Supplier#000879598|VgXldIaX4Y2LyksknPMmeSoJ +Supplier#000879615|Y5,54 uPW,638iRlfD,hIThws +Supplier#000879653|qwBh9Su8nITtzPlcdYdsw7l4l1jC5 X +Supplier#000879721|uHrEPBEZCHIluQRWcnNkB43GQh5IOW4J347WFQH +Supplier#000879727|0lLRq6FrdxNhcqel2k +Supplier#000879735|NUuY,HXpZFZuhgFM5vvnnVAtdD9 +Supplier#000879758|,jubvm5j5Z5n mx +Supplier#000879815|ehz5742,L2qMTTdE2U4mhaAvueTInS8m8 +Supplier#000879824|NN3DQvmeXF,ZO +Supplier#000879879|bWM27tnH4G2p4vt1scV9Xuh +Supplier#000879947|vYcbrXiETq15K hZLg76kRG3t +Supplier#000879956|NUaTjzAeS3zlDnsQnQx1KA67 +Supplier#000879981|6ojLz0ptLxznjRXuDgoojgPSaT3 W7HVS +Supplier#000879984|F2BTAkM4eMawO6CDQ4,GCQvf1CqUMcilYs +Supplier#000880107|v9IFxhPoRlb96KYFEmRqZeoRSFM6mEJ tdH +Supplier#000880158|7ow1UgbttVHeSo +Supplier#000880175|Ew6XWgIEh +Supplier#000880281|ewlxbak0mvIhLHbroU +Supplier#000880317|YH2zXp3Iqme8mIZblaeRgJ1W0EIo1dH4V0 +Supplier#000880328|2cHVw3DeFkxpUBtRAsG +Supplier#000880332|0ABbhf6,,YEf2jJZRqN8OApGLg +Supplier#000880346|hw76,7lJsvNxFaLiPeB0vC5YS,O7e +Supplier#000880355|12spERHognC8E6g7ums0b1Ygl +Supplier#000880401|YXhYT1HvQ v9zks,AgqoMTEWng0 +Supplier#000880428|ceNp1cPGjqiMmnCJZDsBdPMdGTt7 +Supplier#000880460|iOP84L79yEMBl95qoS8nC6I7pByAlRXrzQuQDZ +Supplier#000880469|HayHca6C03 Q3rlcLE +Supplier#000880620|tbW8UUxZHmCMToYIRIAi +Supplier#000880758|zGFky3Zkkx +Supplier#000880850|kRFVe6wvah +Supplier#000880882|goYDpF9Jej2sFUZ lGSohnJl5 +Supplier#000880977| M,Q98ULZ2iIGpL T3 +Supplier#000880993| OI7yXT0eog6Eb8y DlE +Supplier#000881003|p4YfnfPeJuaeTPZiDhoLxQHYRbxt95 tPBS1b1 +Supplier#000881052|GGwmKFdLw0EhilpYpnN EIxwB +Supplier#000881062|E,vrBPR2K,LncnroRMMCyI1q1V1uSpq +Supplier#000881063|LKV2bVXhhG7Xi17ZzEkAmWAJh5R5 +Supplier#000881115|iRSqV8Hj0CUTEN1I7tmtXUkUO +Supplier#000881219|S12VaUDRFdMHHNLhvzTh3eDKqHH1Ghn +Supplier#000881220|Eq05b1vmLfW +Supplier#000881294|H2JpAzY4a5VXZsp nInad47boPBzHd51DVKF +Supplier#000881400|tTvTrb4AXhPcIEWoE3t5PDBDhSjDVYyfUKK +Supplier#000881427|fn,4lofKrhHeMibivaZIieuPvgq +Supplier#000881445|oi5mGzQt6PeAq5ers 7LbpAOj +Supplier#000881584|IdK0mTkVJrkV2nXlpzY78Fg +Supplier#000881616|UycmmTnxTuNQ74d WZ +Supplier#000881657|Fhmk8Y0UAnT6HvvKs2TVrO9bi +Supplier#000881658|I9IuXO7jzzkJCNaDvQtOYF5b +Supplier#000881686|Fu9weE8kps +Supplier#000881771|F90hDd7EZ8lUyuV4Q0uGW9NGmv +Supplier#000881788|ntpuH xLKyeXZKGiqUU5oX +Supplier#000881799|DJlqhpM90s,oc6HSyRvegS +Supplier#000881819|l1kn6RZDakA3igRRoGQIgJclGE470cV6m1MVd +Supplier#000881839|FjYn7J9Q 4qc241si8sk4Xx4 +Supplier#000881987|JETx4kTj udeHwhRr6Yvt3W +Supplier#000882170|MD9ZqcjMkSPACuK6sXJh2gR1,xZIdZ3f0 +Supplier#000882299|vpwu2h 6epqzwu68eNRQn5tZ5 +Supplier#000882374|k1GphciDLH9E1zmKDr48 +Supplier#000882389|aAXnkci4Bsib7Kgj6 54hOO +Supplier#000882607|XSRyMwmvTTwAhMV4Kg1yycVhUf +Supplier#000882633|kA6exlGMyZqrIzuQaWJOKhsPClvRIX +Supplier#000882721|0VcXML,mxTxd3u04mitjFvyXKYLD63RHhW3 +Supplier#000882834|unjgC7rWdFbAfLKZgJbBrrIygpMX7b3OeDkt +Supplier#000882888|2qwzvg7njAAaPq,FX7UqMLamfmOc 6Tz, +Supplier#000882951|2dCh3fihe6dMdtdQGRaOhkMuCFg4E1hc +Supplier#000882973| kk6K qA2 TIzKypkAcSN +Supplier#000882995|186zagkzt603rAVcINxUlwVapK +Supplier#000883019|xctgbd52zeMR ShxyFKpWXe +Supplier#000883169|9pYJoeYlXjLj2FbaVg4c9 +Supplier#000883194|4BmDq4rB5rkNfIr2rBc7ZT4ZYe gRTadpTLox +Supplier#000883245|qqMInviebQiWrlm +Supplier#000883249|6989JDDfUuLvRTaUfeKnrNK6Nz +Supplier#000883264|chhqtEyUHteYVVU +Supplier#000883298|eqcyZQiWD5SCdGZ6tw66uyVPmqBPTxGZ +Supplier#000883306|21WG826cn6 76EOcHK +Supplier#000883398|jK3GvzCVy CBFf +Supplier#000883480|R1giMkPnKKslJn1SJ,8YgJJo56VQlx +Supplier#000883488|x5HU4aCsD9aaMMs +Supplier#000883540|1wfl4ONypBRYa0ZqNV,uKceCz0nQ1hf +Supplier#000883609| Qp1N C2DeXXz7Qytp +Supplier#000883644|mz5x kM5UHBqsq4dVbsXWCzWdyj98jY +Supplier#000883789|RJb7yUHWpcb6adJOkum19zEQPc0fNPBW +Supplier#000883817|SuB573cNXfRbXvz2udRowlcb44fyknijyFh +Supplier#000883829|GWw5bXKmblk 93pAO +Supplier#000883940|2dOtCcp M20 icCqcIucsplJjQOdQHh,BYa9 +Supplier#000883973|QfiKmXlWwrkW0 +Supplier#000883999|QrYrxU,nyQ ,ccmMSaDuH +Supplier#000884010|9G7VAgmjQ1PaVGk88JTmQrop9 +Supplier#000884053|Deoa74UDwRhUyiQHcJ9pqF638FA +Supplier#000884068|FpwgoFpPHmum0QjY +Supplier#000884093|BEfl3,0P00JzLrl0MPHHIiMkKw8D +Supplier#000884100|ZKjlLXArQGv99xsIEsE +Supplier#000884112|w5MtUpct5TjHyQwXPv +Supplier#000884144|dzcZNvjNhG,duMbyOFRH356z8nDnhTtzEkp +Supplier#000884262|q2NBc0nousJZ2fJT0BnM +Supplier#000884278|CZpC9OabnboJ0RNfcmT5w6Ebg0yH +Supplier#000884351|w8c5W18gQf5vEtEqNzUD3xd +Supplier#000884465|b7LNjC5JTPhM4frfv +Supplier#000884511|dSHgMivoQoeB1 +Supplier#000884527|dvTwGcDbi8CWDGuIYZ9mbA0RnWv iDChXJ 8 +Supplier#000884631|f6hacpEZfscuDcDN +Supplier#000884649|4J52I8X6H,yr +Supplier#000884719|cPOnFzlhDiz0Nw +Supplier#000884850|Ts0EbjhxQYKm9PM9VP4Qo +Supplier#000884915|H G,qwpNb9lQ6wRV +Supplier#000884921|oi57dxSsYZhXTCW,huqDja66057XW0YOBBXOn +Supplier#000884925|OgLbCthcK,Ks,,132lKbVUcXUdAXwLLvh +Supplier#000884992|gFqfmoYdyFT0N,,JT7C6U828cVcKEhSV +Supplier#000885024|57FYHieFYOT6gr5zF,ySB22Y6rnSy5QZCU6t +Supplier#000885042|xBjivj Dp0pVjHbxmdxxb +Supplier#000885084|2,IkZoE7TNj96 +Supplier#000885111|Xt8QdfnL2XkvCFSHNjDoE +Supplier#000885130|Zj7jlNIfAeo302nb6Ure +Supplier#000885153|wyqnaMmqVafPgvMZS8U8l +Supplier#000885316|AN9BOpX2lDhv4TJQcNy6139IoBMUyR4ygN7qo +Supplier#000885319|Ux5subZ7Lxg3rY FOaZNmN5 +Supplier#000885343|RiZKb0W6gzD8O9r5TujF +Supplier#000885640|UfqZZW25vS696B2ZbZmy gX +Supplier#000885653|r x5uuKBNXjK,rds5w,N,CS22AlAt,KE7TMhv +Supplier#000885671|F8EeP3XzkM1tKE +Supplier#000885681|53D5iaW0o316KqnEwl5JQgN +Supplier#000885683|ku3gHZLe0H34vALPmz04VUW4IPaA +Supplier#000885736|dzrvkYkVW9S +Supplier#000885759|JcVqmlQ EPP9N7iSr +Supplier#000885790|fo0GXC7uL1GpyQvxH4t +Supplier#000885822|ypVC6C09prYU +Supplier#000885831|CM5WbykEEa 2fy +Supplier#000885915|4NPIHbk80Rv3G7sTZyW +Supplier#000886009|8hxnBAqpxF55mpDeViQnJBUTHrpFviHFXRTM +Supplier#000886068| FGVqabSwDd2kUdK3hX5QSGzl +Supplier#000886227|Cc,EoEbbjV +Supplier#000886277|goZREDCjSzY2c1h +Supplier#000886287|IkzKF7djAIN6pmuKN4ra1FC7cM8d, 3bXii +Supplier#000886302|8cKmdh p2etc58ou8ccNg +Supplier#000886359|bl0Kh5wT,e7zNeFdtAXh2EqgYcdh4yw +Supplier#000886418|IzsjxK2ALUsZPf45SVwolPm1 +Supplier#000886569|pxgy4RTNw0YIIj FT,aQGaUerot 6 Hj +Supplier#000886576|qRUn47N0px4kFsK5b +Supplier#000886602|,m6jrpNZFP +Supplier#000886650|SVYrlOLJxzYEh,JTQzQF0tqnnfuTz5R3 +Supplier#000886653|KXGFsLotWd85hyU +Supplier#000886664|z0JWv9HkKW3Fly8lblAMQw +Supplier#000886682|3M7qr33yIDFvh8dxEgF +Supplier#000886715|7jd4DMDo0E,K +Supplier#000886913|oG9WtkHwFo6JnK3lM9ZcqsUSlJ +Supplier#000886915|CC3oYGLouTnzpTOLqoZv9TrZRASSa6dy lh +Supplier#000886930|d18x,y2T0k5rzXMx tVk11xG4dShG,zUUvZR +Supplier#000886984|ENTFzuUYCjyt,K qqC2S4mbXfsoh74OHFA +Supplier#000886989|K0IoMhvvkeK6cpCtMYU7ca8d7pC +Supplier#000887069|OrzsTTxqtijyTxFQ2T5DzZK0v +Supplier#000887090|ks9X1ufHjqg5j7E619 +Supplier#000887150|Z SqmM3eUE7i2rMFhzPNSkOr +Supplier#000887179|fMwmdyQxSirqMmPS +Supplier#000887202|1U5rhmp0DxHD20h,wdPx49k9mbFq8D +Supplier#000887270|03x6a1dtgQ +Supplier#000887277|zdEA1AA E4p a71 +Supplier#000887497|x6UNhCDuMbeQXzJ3fYWyOCYdKgBxM +Supplier#000887507|FnceC4Cpi01cx3wGvt0XkgF1tKKy,uev +Supplier#000887550|yx20yMLRmTNa47V +Supplier#000887589|Xk t GBUJgy8rpc9 +Supplier#000887665|3aoe0AtTE,sAzF +Supplier#000887699|29dtlyr1BDjkD1pe0I2WFlmT2OhjNro E +Supplier#000887769|ZSW2apfCU8v0WKhBPZL,iIE1og3OKpTm +Supplier#000887774|ifDtxC46NGUVCoL0NrriO3Dsy3g0s +Supplier#000887785|MPbwwyNe1 VbWi,wMSP +Supplier#000887796|otHISWWnR008W77C6 +Supplier#000887801|iJzFbUgfblunvlVh2gwx63 +Supplier#000887877|4u rcX5j6sd9Y,UVGYhaK nuOfsM0HK4MSZDjk +Supplier#000887894|f5aca2W GZ7eeIAWwuM69Sp +Supplier#000887905|JtmlFcQpZcWXuMn2ujS39C +Supplier#000887917|VyyMkhr,Bt6aiqFZ7smsX MO8XttwkDx +Supplier#000887936|eJXnceWfbAOA9 +Supplier#000887972|hWhjidmA85LYG7hGJCFUwkjCC5 +Supplier#000888065|XkSYxzxucYTGYzntKdsANTGs +Supplier#000888161|CaYlv48JMZej98OJIp2w4gTJ +Supplier#000888202|deR9rWNeZR2oyvgnqnX9qybDb0QVI luQOmBbL +Supplier#000888335|KaIDWiVxIZWgk Bo8G5bGLB1,wIUEZ2KtNItn +Supplier#000888393|NOB1FHAERb8uD +Supplier#000888403|ERHVPzQ2pzX2YS5CBe0ETvZVVkCDNlUxH7 Q9 +Supplier#000888426|k7v2IAMVTCH0Qiksc8v +Supplier#000888449|uz20id0Mu8DF +Supplier#000888509|EGs026w8H3 +Supplier#000888534|tCx5DV21,2Mm GNQ5oofa4 +Supplier#000888552|iCogAISRKMvLvNeeWQMJOXl8zt0kXzq9 +Supplier#000888567|I3jnJR0QdDqSMs7rvfGmht7MQZcqt +Supplier#000888632|Cag Cfslhx +Supplier#000888825|bJyYTS2fEEgiWIb63TG9xLPbxvMOb +Supplier#000888844|m,V7XLAik4qHUtH4WYpwet +Supplier#000888988| P3hUrfy2KYr1J23UlW3ceVMkXr LZkFBL4gSOT +Supplier#000889004|lVGoJh3BOk2g d +Supplier#000889015| C4fFUTP5snV84Z +Supplier#000889055|IzVzZ52VB9L2Th8yvske +Supplier#000889086|z6CImW,DSzyDGK +Supplier#000889138|2HQVYz32EBVJPqxV5bebnpX2SXnE2 +Supplier#000889150|qjFtuEihg,LeTH +Supplier#000889180|EB89AvDuN1SGraKhpsHsyYMkrMzmcJWVdTIoYKf6 +Supplier#000889213|uENtzmhGv +Supplier#000889234|bS Ih2elGn6zqhPUCSi960f +Supplier#000889359|0Z,RfyiOoPc +Supplier#000889394| jmk0UmIIvOjnysDLgn4kxhNT,27nqMCzWFfgz +Supplier#000889424|ZQzXrqEPDXzFEp4FpBcHh,sTwPcG4 +Supplier#000889439|i0qx29X,Oi56bsl2SEApIyOjKNWx4VBZrGWUFm0c +Supplier#000889450|OHmsbzsed3d +Supplier#000889501|QNR6fBuwvh2M2aEYrtsc0dqR5jaerjKJPzhFs +Supplier#000889573|lDkkscwIQsNIy +Supplier#000889612|rVbwYD6toffl +Supplier#000889667|CWmslLF0aapWsQ +Supplier#000889678|qFkkbnHeZ5 rA4pG1H13IcIgLKzBd +Supplier#000889684|4,BN17SVrh2Ou +Supplier#000889751|VcO62Zq4L7Gv6pwYqFTvUdfcpqC9Ls8reI +Supplier#000889757|w580dbMsbsxUQK2KejOxix5,Bgh +Supplier#000889802|uL38LkXLik8lMNb40zT +Supplier#000889846|6oxUirRZG,7K76Sj8B +Supplier#000889886|bIcjUgpHIwa,tA,RwTA8QpW +Supplier#000889890|FrHIPKukKb1 lGS9TDGlYKK +Supplier#000889941|uW3fJ8ySgQtjBCwAC,W +Supplier#000890027|myNcEfnsGt1xqAWabomunIqB6z0ZKi6h45 +Supplier#000890038|Rw3YkUKBAIg,GyJyANdnERwvBgrLHt,67xkv +Supplier#000890049|iNQe ByFeQFpB5uDAuCgtdGhK +Supplier#000890077|4mWYzy1yGrw01P4GwHPSJJUkKr +Supplier#000890116|f3ohRNaY2dyJsd3CH1O0pSE2oSVj0xe5 +Supplier#000890216|6r,4aDsBG WqFYQZI7fkjuUOeYI +Supplier#000890221|ZcAgStyPpzjR4Phr +Supplier#000890342|V0h q9U7LEs3NDs7HCLpqqO6K +Supplier#000890449|HHzF7yBH4UPvXs0Ch6 +Supplier#000890717|QhWCTtE80Y8,1vJfIE2nILDmUpNhFCBk9AfrF1 +Supplier#000890766|d9Zb a,zH3ZAwuGipm1pjU9wM8 +Supplier#000890846|I0RpYIFRRdRG8e0FQOa0fHhOme9VFOyAcb9Rpmmr +Supplier#000890868|ABlkdbt8QnB A +Supplier#000890876|uIxYZLAKvfm3Aap2Vh8EBSvmY1q2 +Supplier#000890902|CKLuTXxFimB4Uu,pp +Supplier#000890970|OeVmj6u6mAh6aYemXQBucPV +Supplier#000891000|uhfmE7NQ4fcGV70SvA1vuCkupyG9TE +Supplier#000891040|bgnz0QUnK6rulJ2mdF9mRUmG2IsNb8dZfIfs +Supplier#000891086|LI1nsrim3zGW2i4,x4 +Supplier#000891094|QjZDwg6a3DeENgl97CzHcG7PWlq +Supplier#000891114|ilNdwnKQs4sdF M4t +Supplier#000891149|ESni rVlVkFRzgA2sCSvB +Supplier#000891227|NTM2gHRTV9aMxD73c +Supplier#000891276|gPnUVAestLZUUv3YfBvKCYDQiqObo48YF3Gdo +Supplier#000891375|uTOY,xhP31i +Supplier#000891390|REjLioaiUbl0AgLOIVAhujjuXmCvvUmTm +Supplier#000891433|h,y2MhMnNjg +Supplier#000891480| Fjg2 oes8gCk5HcQgDEJS0scz +Supplier#000891490|a vZfbyij b1dD5zZLN0guWrjWB7vbPF07pwPI0 +Supplier#000891513|CXX5f28j8 lfzm,4p +Supplier#000891604|5gwPq48v1iJV0l4VeXzFFTKu45F9MBTpc +Supplier#000891697|DyRDtvR1bjeJbjQTboG0Pzos, +Supplier#000891699|ShixWDXh7ynN8VAN3yp6 +Supplier#000891800|PBzivTxB42G0cy6VH60XsJXv,lY84vQo +Supplier#000891802|Ybz0VbSpoBLWFKiIwMO Xk4foianUsgTdMrJFKO +Supplier#000891847|7PfI2PvYjTe4KV1tXXtCXSFKF 8b cI,QCKrCK +Supplier#000891851|I4cdLDGFtnw5COKTWotqIDm, +Supplier#000891955|aAAV11E0z02alYEjEZZDFggQNTI71,qeyh,FfS +Supplier#000891970|xOCSh47cRAoXlBU6XAc4 na,6 0PWPRt3n70v +Supplier#000891971|Bh0mtmedyYYPQ +Supplier#000892117|J8,Bg6abeJNfbkc2 +Supplier#000892126|9R7GIvmupncqAMyYf3 +Supplier#000892145|ZBCmpOnGW26oRV5OrMtxKNWwh T8RvAV0n2of +Supplier#000892222|eAlxJhy FPIdBwnYn +Supplier#000892279|K5 gDfcvQlXz6ih158UDwtuTMQ m7BOG UkY8F +Supplier#000892323|oHuYo89q7Uncmy8xY7NO +Supplier#000892367|mzGX6YSghE9cpBPpW4xek3blg,tl9D3xT +Supplier#000892368|K oNDk6oj7u0 tMLGTqaWyGrqvIy8rz +Supplier#000892389|4pq3HP3I7PCS5ajndhb +Supplier#000892433|1MSZ3M5EBO2PHLDRcl8dRjwS6,nW5 +Supplier#000892540|4lyCZdhdD0wM +Supplier#000892640|KlUYVWAZskVipU5KcRxzQmdwdjnDj5Mc0dBfBpK +Supplier#000892695|aIiXk38hkAHrrtI5t5fb6znxBHb2K4xpbB +Supplier#000892764|ibXMvaASMODi2WHyyFm3UokYPHgoQisU +Supplier#000893004|7Sz09Kxt9NQC9EiyQVtPFy36tA25c +Supplier#000893105|4,fSistX6GwXnKHijiUcJU7Qne +Supplier#000893135|7gTLookh4co3ZvQo1Fw +Supplier#000893136|Yttm9mhAkEv0M7sA6S +Supplier#000893204|XY2ZREbrYvzYeIWPH6PzuoAb84,X5q +Supplier#000893304|HBIZwMOdVPITo0 BZl7y9OEsRcLR u2uEBw +Supplier#000893310|a7RF DxkDK6MbB58F +Supplier#000893328|EoUnwpURuzlw +Supplier#000893448|,A3DT SI7vNeruzgQ71bmjMKjeyhXAnoNwSdQue +Supplier#000893488|TEdsqGFN5CpiAXxbH3 Hrr85MsSsDVFlBPkkO1 +Supplier#000893507|VcnBwxp1nV9 +Supplier#000893515|ANooIYNdmvvM0134a3NZz br9FRFW0OkUN +Supplier#000893559|NbsBugRqO0p +Supplier#000893568|jSXRMS4vElfSSv1d7a7p +Supplier#000893593|dAcxBX7,Jnzh03PqH3Y0 +Supplier#000893718|YOXjy uL6A4cG hviI9R,UikKt +Supplier#000893907|fK42zknjFQhOg3TFGaMwPAfHfbulN +Supplier#000894008|I9cqXn4aI1wSZJ +Supplier#000894041|3V4eWDBGFI4LIwziOEe B9t34MA4sC4W +Supplier#000894050|Q06zbiU50IB59cObCtBUTKrFzi VssELgoI5X +Supplier#000894077|aTNsMRNXP0V7e9hxOZrcDTaa87x +Supplier#000894229|Ukis6XhHgJM5usxMe,xWjz2 q49 +Supplier#000894291|HR4BEtQT4ezKtEA tN +Supplier#000894311|PvDB6yxXkbg2cyEhgB +Supplier#000894397|3SUpZaTFE4Xm3Wq +Supplier#000894400|mpivvk 0ohQz0YS5B2uR6uxWaojDi +Supplier#000894478|NVSYGGVJC5KYMh5ucbo03rS +Supplier#000894501|KkLHdKul6 0 +Supplier#000894583|PSfSJ8sdEJTro88Ov0 +Supplier#000894635|KidX7W4O6kwekf5z3J8 +Supplier#000894680|lmHMck2uQd JMykotYLTp1Mr1bf ByHodR +Supplier#000894711|ljz5mqwGUb Cd +Supplier#000894732|3n,fz9tZ7XQxoyiDeun3APk39rRYg8qYuyvzSgL +Supplier#000894810|F02aKEUYlOkCI +Supplier#000894906|euBYgDkc2xtr,M6AF28No +Supplier#000894912|zyXXTbamZckE9I8mo +Supplier#000894960|jOpg2d7JCxUGBZ5jlixWHFolygf +Supplier#000894964|JkmyReKukRZP +Supplier#000895012|S,aFh3HaJpBXQTF9SXu +Supplier#000895056|IWWUzpOZE3KMEG5jU3Da +Supplier#000895107|hicJMGnkspphlErgTch3LW9dqkOHGPhQo20K6 +Supplier#000895203|5cnqfFkA,jVdmyujXwTd3ZVi +Supplier#000895269|mTxm,orlrQfE9otquHcMMyBOXVMSej6xlq +Supplier#000895302|CkoIJBIdefoQ0Ot3N3w,qSf1XZ7xIGL7S +Supplier#000895324|BccIRp,0ulhF7mYxnLQWTlMLxpFDIeqEkhNi +Supplier#000895332|6zeDPWGA4LTTP45Q76tRkyQNi3s89 ZxZ6qEpdfu +Supplier#000895370|mhxLTawlMdmZK5nMNtUBYP1,XB,XTbzHwppr +Supplier#000895458|MUeaT5BAf7VUNpeUb57ocnRyGYH6Ncpx7ZUazj +Supplier#000895481|zCPChuXYFLshmMzspZfP R +Supplier#000895647|toazvIGuWaRc +Supplier#000895679|PQQspdy9, OfRw3A L5C34 +Supplier#000895721|dKPvpyRqiP,5D9hT9Z,RY1lrpEMRKnIRBpoul +Supplier#000895785|JGeaLQvXle1T +Supplier#000895795|Ay69G3WzkzBsFAHDqXImiLRkWG03SxZ D +Supplier#000895800|MOBq4elB5CJvflK8akoOACNlR +Supplier#000895878|z28 Z,ToW0BIu5HBLo4jA +Supplier#000895924| 8o0ZtDP1lP2 +Supplier#000895945|afzFRfWybwt +Supplier#000895984|ZhKofmgoDEPmIUFI93RopWEQpfnHlprrcQ +Supplier#000895993|bLmnp3g7o4O +Supplier#000896057|LSl4EOQBbOogY4IqJq +Supplier#000896088|Bm1epU8l5MrljNJK8yOr,FB9VHYzaLDguFAE5xLP +Supplier#000896123|1Bdr9XzVe9OSQPGjfjK19amA +Supplier#000896150|gjdFKxLWaQwq5jaDuNNp +Supplier#000896178|qIv8Boog,0YbOBze +Supplier#000896303|nxWOVZqUjr7bsc6hGGVHPsNzBOFIl0MS1c +Supplier#000896354|HdcNLU1wAcSXiZb5 +Supplier#000896424|nKPUbKs39Z8VLDWe5N3eG +Supplier#000896439|jyZpQss QTZPGQWz0 +Supplier#000896577|jA2ZRmhiou2FbBWvIc,CWUYy5D3TJ +Supplier#000896615|JUV8 bEc yCehPfx7moCUW +Supplier#000896619|rCp3Mpb3XONXABuzL,SDveE89W4t2YvyWxfLqtq +Supplier#000896758|TEUqD34AqLajbWjZfkkpJ +Supplier#000896781|cwzgALWqruG +Supplier#000896895|zPG,VncRcFB2EGjyMDBE4I +Supplier#000896988|6liPYNsAUIDHFpIPsLrK +Supplier#000897048|Lv9QrmKMgyH09RzFKmTuXYYsxvvnlZ59hctXWCE +Supplier#000897081|v,cUCKSP2vlnpav +Supplier#000897174|6Y95qaDbU,btws1ZUefAblqj3N5LCuic,5pL1QlO +Supplier#000897181|VJiieEusQAVMQ9RsA6aiC4k7rHo9DtUaQT +Supplier#000897213|2T 5YRlVm36y0OQ14WgBqPu6BkEn7LUAzivfvR0 +Supplier#000897273|xsjTyFABVKduJG6DQY +Supplier#000897304|y6uf,tc7FSa9r7kFd +Supplier#000897389| IS3JrCvrVDuIba N7k9myM9 +Supplier#000897477|qGq8JvnZl toaI6rQr1ZH4HPFZp6yNtgf0pZ +Supplier#000897566|VhGJ6tCICbw8kXER +Supplier#000897583|1os2ZcMFEOiLsu36e +Supplier#000897622|jYWqQbRvSPaKccq8 R U, +Supplier#000897648|jf1qFTwrWmu4pRgR4AMWyWs,oiko6,J +Supplier#000897759|e2uXKUcqOLSLLAcmlKDgyBeBVXyF4dolY04atVF +Supplier#000897798|E06pj4VkUylWuxXY3L0YE8ydgzGd,hepCxKl +Supplier#000897826|G3,n2opvLDf125mKVk +Supplier#000897840|zCXAupqTh,3tsQLkBj3zpp +Supplier#000897885|iDYW9FBvQx0AxZBhRZzIQ7ud4fWrxIyYxHC +Supplier#000897926|m1hni5uTRrcHzCE0sHdjqGIgMdx +Supplier#000897927|LGCtmDWkwXP4 +Supplier#000897928|3M18JLHV7Z0P18hsi1kjGuhuJRg +Supplier#000897945|wSenrXKj1NbsjEQ +Supplier#000897949|I7KJjUygomXnYwX1dtlOWF6D7UZOKPgqcXSxi3vw +Supplier#000897960|kcjTtvl7TGVpsetjao5XRZUbDmECCeI +Supplier#000898236|jWqR5T9cpmn2T6M4eSA4a9g8O,9m7XJVpbIJ +Supplier#000898259|KhwahRLhytOPPB +Supplier#000898293|Bp hvCd0JZK0VUyz1qMkfXeEVL2LiyVkA6FJ +Supplier#000898297|,3E00qllvDVMErXlNNT +Supplier#000898316|6sAutsGSUarsLczZ1W5Gcp3hwwwciuWPIiXYLD0 +Supplier#000898361|F52TVHkvHg4hNlj7pv3ZAX +Supplier#000898425|zW4ENecOd1lRfZewz4PX DaoeKB g +Supplier#000898437|S DoTwuG7dq0nFrUCJ,gV +Supplier#000898485|vPnoIjprnrJ4hrAPoKwr8TtXNpA,9AtkQoz +Supplier#000898694|kzQG0AqcXSCwrwwLCjo +Supplier#000898738|WP6g4ZYQLxmICHxRPSKc3GmIK +Supplier#000898824|kNLf60KHklKkGKJRAlqFV +Supplier#000898875|mU8x5JbbC1EzPEmtiXD0i2kL,M7AtDSCr,K +Supplier#000898888|eUdj09cIARu,gZCBPewg19 +Supplier#000898920|DnIiXo8r8lZ1QcnGOqVEvVVlHa1oyL +Supplier#000899005|,UZJUQ5K9xCDBI3G PXXzoei8Dzi,ExOayGrTv +Supplier#000899027|513sIhAhswVlidxMUUbDC8Pie5n +Supplier#000899042|qfFFoLFRVFjWlF5v99 NW +Supplier#000899075|3rBAD64adFfqVdAOD2BDnXDZtxU3NH, Rte4V +Supplier#000899090|PHpgBbq8dtCVhrzLzUYg3QrmKhbbBHaXZ0tCxDg +Supplier#000899115|Xy6hBoc4elaueKwgni1i1jqYfFfV48aKAr1lM +Supplier#000899154|gzfawJ0OUxUT43hIzTTZs,EccpJkCf +Supplier#000899266|,K5EYab0AMOk +Supplier#000899302|1b2N3nWqo8xEs75Bzq +Supplier#000899347|N8rPfWyv2gRkcFZLPUaVUzfn52ssSqEb8 +Supplier#000899439|EK6PcAlbn7E +Supplier#000899491|yayhEpWXyWpsiJndtwIXuYm +Supplier#000899498|sj2Ql9e1LqFnGgTkdlIzLbuslfmwVCliN4Q +Supplier#000899512|vW8YkcT,O38vXbcbakUkTXYs +Supplier#000899600|r1QhayJ8WfH6RLNYPngUD +Supplier#000899613|J6aVkW4GOPierQIjV60E0GVmr85O9v +Supplier#000899761|GQFAwnQSk4cSvi5tZnIXx +Supplier#000899762|XoXs1RVVRnRGOFnMA1GFqZAJ8LKCR39JH,XWYc +Supplier#000899772|37y57FRF0Z7iWQx0Qjzon54 +Supplier#000899783|efUrmSmekS0Sm6wRy6tA3zGxY3C2OnYTu +Supplier#000899806|LhTTqJe03fULpMt79U o,2aq0yNn4lXEn3K6 +Supplier#000899870|TnA67H1x0i4N4x5L3SJLemW +Supplier#000899951|BRrX2wZvRcSvm7XR +Supplier#000899955|k25Xb,I eeAoDcl28f1Dkn7Gsk +Supplier#000899998|VUoritnhEm8KBfLR0z5ikdQIJ2vX +Supplier#000900083|3CU7Bmm0F C +Supplier#000900174|8ZAzEs,w82smOfa5D9R +Supplier#000900197|gh2MAyh3bLzqN8B GqKdrqD7vBGQ5dkBdkTJ +Supplier#000900286|dwS58P9HNXIR8EzRKok8hyZJxSBrDSYFYEqSKr +Supplier#000900309|2TG3DpC8SvVq +Supplier#000900417|Za3mbnVSqbs5 +Supplier#000900482|qd7dxYFiwVwP +Supplier#000900502|pImFn5PHMOhS +Supplier#000900529|AY2LqrRUp,yJ4CGcXoayp +Supplier#000900530|1kJ26jycgQ8s6cL2v7KUZ, +Supplier#000900569|CXkaVpwX2JIzvv7Ndp +Supplier#000900583|8q73rnyuefzDjQy6a0SsSDraLlB +Supplier#000900598|XcNNSlmCtUHqq8gVUmhhMh +Supplier#000900639|xN,1pMJImrZYk3FnZwSf FoPWFejUUnJKDRqdWc +Supplier#000900653|QcPbT AmUBKwzqv5nFzRilm9f29K7 +Supplier#000900668|beeL4tPGBjUjsYjG6H +Supplier#000900685|tdVFnfGzs5kWJseQuqCrYDm +Supplier#000900761|YIi7YSJA46ZUPgvV8 QWqQyAKu +Supplier#000900891|jWAfQPCTLh8IvAXbc5Eqnj0iqWNsdJ46 +Supplier#000900924|VuCUVbaCKL0RzkCZdYg82 +Supplier#000900936|RPpKv1i5CptX0sByN4X6YcNda8XCV +Supplier#000900955|xRik64xFyWBribc8MclDW1Xbnxst1 +Supplier#000900956|XHgKThTcb3b2 +Supplier#000901005|xHPDDuxnBTI4qGzCeacsUw5i +Supplier#000901075|XvwiebBAkudketL +Supplier#000901132|iQ4PX2a8xfnR +Supplier#000901351|dqpggALN02G8 +Supplier#000901371|7wfnGeCVC ZrkhJIlZd6uHSI,j0 +Supplier#000901415|jVyzW4h, Ogrry +Supplier#000901473|tny6LFB0G4uHEGVZQwitbH,JDhg +Supplier#000901518|xOtYEcQ4ucc,I6JdaLm +Supplier#000901558|orZ4Nny8BT8VTbBdpEdXLztMzXuq9i67Q9B +Supplier#000901668|8l9mwyIdHnDKN4sZFUEJvv4DYD7HOA +Supplier#000901676|wowUr2T4Cq7fpMbJihqo7wbOqf5uhRNoPNA +Supplier#000901695|OACRfBkSmg1H3q j5tZR +Supplier#000901833|d3wJWL8IyL9soWEwl7 +Supplier#000901841|NoiOmfxFxR +Supplier#000901859|aFJ0aX,2t5LL ZeZGZCij +Supplier#000901903|wVQugCeowj5f +Supplier#000901906|1pvM6wzyFJf8qoAQCEQHiGr5Yi15Ct1u +Supplier#000901962|K9WlpD9Vwcm4T6m4u,ICWYLR +Supplier#000902098|Snhqgbeh8z5RzygZXeOzyaLrzqKu5d,N +Supplier#000902280|b6NUKZkPiK7aNGRt Z0 z5oKXfFsuY +Supplier#000902370|lO1orhbh13zzA52V3s99qa8Dd6hCS +Supplier#000902441|MIjY7vNp4QMnqgn PnYmmcKVe04j,y5C2C +Supplier#000902463|hxWGgBptr02bH5 +Supplier#000902469|J9DIa0AgbkHfCJoRxb4U +Supplier#000902501|JfxP9ugE6,3WCXETB4o +Supplier#000902611|2wt1YJIaFaUwHz7yGOZ +Supplier#000902692|0uLBWAfq2,b2QUhKZfmEuY ZhaRas8Igm +Supplier#000902733|nzVkgPhus tUojMP +Supplier#000902765|hpHklqJxmITazNRQG0NkfpThp0B +Supplier#000902819|iM8jwfL6 1mR ELdKXbRpMjWWbnh5kdRuiPcWI +Supplier#000902847|GqNdi SVNyDpo +Supplier#000903159|AYUl6SfsDy W9 +Supplier#000903175|5nXVhP6h1esukOJoJ86C8PdtXdwSmspOH9U +Supplier#000903176|BaRbJdzrYDg2YdsXPsnkEA +Supplier#000903201|UJJs,VXtPhU7BAEnyAZfNByOXxkV43JK +Supplier#000903284|fq5hN 3Lz fMVwD LqEsIT7N0lRYPF +Supplier#000903289|NUmqCkaxPVa6vLQHtdRfkJK9A +Supplier#000903396|4tpzdfxvMaz3jcbiO8waPklCY6yeh 4ws,Cvc +Supplier#000903475|HKlWoYZub7UjBQo,jPvzxhKy +Supplier#000903479|4JQmxb mQP6MRTBsJnRsg +Supplier#000903544|nZCgTsYFMlKLH8CWmOyt +Supplier#000903569|g4OXlNNx6hzbvk9LFj8zkG0Aq1bMkIBg5YDb,9L0 +Supplier#000903584|IIx2p6WGzBLOHzACidc2g4iRjMMs2khC +Supplier#000903612|mgBT3Gcg64V +Supplier#000903625|QP,sIRFdYpt3MgqRI42EpnB v0C9n4gYy +Supplier#000903630|FTaJPL9BH8pMcnSPd0rITKHleyTgq JRL7IB6OJ +Supplier#000903707|v0nFM5R30GhOKMspL00cahB6nv8 G5RjNtOv +Supplier#000903711|7ENws4GcjC4T1AyoEFfFiPo8TrpdIy +Supplier#000903907|hpkerxVUddebRzZT +Supplier#000903913|ez3BOornJe8toaN6acs4MRJX67cLPRKNYqn,7pp +Supplier#000903935|2uEO1WydfycVeJ8wVkdA9UhKeJ8Q3yVI5 +Supplier#000903977|l3M4wV4 I3 +Supplier#000904050|UoverUr4lVpdV,NacmfIdRlcpV6gYS9s +Supplier#000904104|CaEI9HrxlM2A +Supplier#000904142|9e1R8DKDVxYROxIAFAU9RJgiNoh +Supplier#000904189|mL5GolntPrS4qbIwCQH +Supplier#000904265|zivjfJ40Z6Dtp543,Px +Supplier#000904269|RH5alk44vcOU8AMOA35g4lWMvDe +Supplier#000904406|zzT1I1s2G9tubd5msF089EW9BL8NdV,KrEU +Supplier#000904468|cZA,Q5LKcfyjYfsG,kHyoX +Supplier#000904487|OXuj00UM XhGMEuz,rPHhsezZ,S Ak +Supplier#000904506|htuhPB6plpsslO0IZu4EGKAzoTVcdF1yXWL0pa +Supplier#000904509|HDNVjGzr7P8sRlb9gkbn2r +Supplier#000904544|EpqtHwX60w9UVvXVESyyd5v5O25jAAktf +Supplier#000904559|a,1LdjSLp0IybKIgQ7 +Supplier#000904586|,Z3IQT3lMck1IhJrd +Supplier#000904620|VzL937uCKSDNlBU +Supplier#000904627|1eoKyTK918TJYBBl3yt298qp +Supplier#000904720|KalLh4xR6GTUAmkTa2XTXHStt1YVefSLIrnAGVe +Supplier#000904782|ccZcLw9RvunPW4YD4STqyrw +Supplier#000904941|hD5aacthcvCYaXfuIU +Supplier#000904948|zmErYn,x8Cj17 +Supplier#000904967|2RFjNrJkob6 +Supplier#000904975|WlhPFOglR41 +Supplier#000905041|DB5XXIiBz7WRUslYG6upJn3JLiodSdIZ +Supplier#000905091|Pww8wCU9iqHB +Supplier#000905112|kewNRUpiH8SsflBt1CckqjMrWMaxLUF3m +Supplier#000905115|KDr3q54CeWSUzPU9hM0qR7da0 +Supplier#000905216|xwXuN, 2 s,m,wXyRJuW3oRx3n6CeJa VY +Supplier#000905416|oZ8C6vxRAgfUlh4U +Supplier#000905541|WKsirXBIW9XF +Supplier#000905585|HbucwaliaGXgQjqRQQ8eVkfOOCQX +Supplier#000905612|AqmJSSsv0Iafn3sE4ebSbsBszJoONGbQzkFQQzdY +Supplier#000905700|ad3G8ciRmxKhz9S +Supplier#000905713|0BbtOSRGfP0kn63Fl7 +Supplier#000905763|O13k4W0dCHuxJaG9Eq,dvqHI84oxFniRTyv,P +Supplier#000905772|ISx0CLtJZWj +Supplier#000905890|m4v2HL7KH0,iua A +Supplier#000905928|oGVymTplvGmq,IMqIwC ZhQZ3XT +Supplier#000905936|XXkEpuDhYO +Supplier#000905994|SE0dUbzPB7CL2Nzb +Supplier#000906043|Hyd9 Yqh3K0I0k49CG4zKSRoyvxEMI7Qrf9ek +Supplier#000906135|XS5Ni6kA wuR03 +Supplier#000906188|Ka c5Ba1JBUj8PZBuxNGjFHQwXBozQK7tjvS +Supplier#000906219|304mQh1FPPJ3P6L2b0hd +Supplier#000906400|xeYGI9tNrNYd4vv +Supplier#000906432|31N2sFSOsunTvUvL czPnDaW6x1K r,XUTb +Supplier#000906513|SjdQ4rqqVLOciJWBvwISLEcLfSvFaVavou +Supplier#000906515|u3Bo,D0tMjXLfUv,tYqN9Rg46W1Vz9S +Supplier#000906571|9c BxJnOEmOysMW0YUZQ3Y5AqFoA +Supplier#000906625|pk9eI0ebMtoycUsU7obL +Supplier#000906690|iaFbOZAOHVdQUwcU55OkIEgZMXeU6l +Supplier#000906773|vE8v 3q9oHS oeUewW +Supplier#000906791|rpCKX4Z6jXsbobZWDCVtDuJ,clTJ6OXZ +Supplier#000906793| OFKBJ5eiLpp3N09U2qozsHIvHK,No,172TmVr4N +Supplier#000906860|fvzOnZcwHzkVL +Supplier#000906873|XZ5 4W7jvyIt6n9WF yhfj6cezDCabypbJho +Supplier#000906904|nNWogEnBX35oa0vE8V zhj +Supplier#000906964|6fj1dnbxyggFLRoK2D k9NDfuQqavs2ieEWU +Supplier#000907045|yAz67iilGabeRyULw5dJm,uyJ +Supplier#000907063|62q5XePvSK2Jd4nR1R +Supplier#000907184|A7PEUQWOQj04A +Supplier#000907216|,63C,UcxxCPt1mjGIZqXaOdbhDISkoAoMNgj +Supplier#000907289|ATV2D0izQmaLe49H 8ZQydsYfM,CWfyY +Supplier#000907324|SPl9SE8J2RaUyx4GYhi5mQsG +Supplier#000907550|z15P8qwpj kmefyKC81ci0WZYsUaUm1nNs +Supplier#000907565|NdCJiUGkXep is3iDigVN9kccN5n0RhXLKo87zt +Supplier#000907653|NHs8sbTPDJHOemz +Supplier#000907745|7RTGW1Bdt2YoXs5m6YRO6EgC +Supplier#000907758|3Bb1 JCQbN,7jJ2iVnwcDB +Supplier#000907778|jWZt5698T4Yj +Supplier#000907783|uxEhT24oKyOO +Supplier#000907789| kVsOvzKnIh2j9RLLWA3Ck,Lucg +Supplier#000907805|XO9UUEbF,fOsnumc3cw0m5pX4 +Supplier#000907867|4gBB38l67d56of3Hh 0WTNyRhLPuGaa,JGw9uc0Y +Supplier#000907871|07 gmZ1IVnRMw7 +Supplier#000907947|soxTuJzr6ddz3KjImk +Supplier#000907992|Ywcvu1Q fil2xgTxfJjUGoJkFlukxDf +Supplier#000907996|e6bbriZefjsg6A5wP6eh8B7xf1yKh2iU +Supplier#000908119|LLuSqn4lKvsTJ56zdC +Supplier#000908172|Ioa,50xv0e2ClkzZ90SMoyY9zLkf,cUzihO +Supplier#000908190|QcB80 NNChpOZ +Supplier#000908194|TS1L5eyVW77uN87di3Zkf2 gOCta +Supplier#000908240|hEWwlvrifWJBOLG7n00 +Supplier#000908431|VMw6dehiaEZ7E3cP6J +Supplier#000908480|SEyl6xSu,2f153 +Supplier#000908505|GC4V4 qgjJf6OW2ajFCAhPdlih5rv1JU51 +Supplier#000908762|SxAJy4Yx1TooHWpQWQ3b,MN8uelAfnd,CkY +Supplier#000908825|sB6RlTKo,NK36XznQ,qVbBpM7XAUTYQMtsEDI +Supplier#000908833|jN100Tu1l7tmlTxvyZJ +Supplier#000908920|PhTPy8ReCHIdGGNpctxGQl +Supplier#000908975|n 7hJfRwqh +Supplier#000908997|HdbnLl4W1mjnLZi +Supplier#000909295|Ty9w09xAFV9ZAy59Xzx,7AaA64ypY9bw +Supplier#000909416|a4gNI1XPoCJZ,QDPQLPXN +Supplier#000909465|OEHUeYMmYh1KoE7j,y +Supplier#000909510|mpe fl0y0NHP7yEkCwP, +Supplier#000909688|HFjL7JoKXuxn50x7yA1t7rzCbqBB705RKEcjT +Supplier#000909696|igTXG91Yo0izR,og,GeDilL1E9ZAWbY5yLeL +Supplier#000909825|KckNOcTvmyNttd2jYUPs17jw9qJpV01 +Supplier#000909894|W7n3VnhAI8T0NmV9I7DPL5z,j HYnl6h +Supplier#000909916|U4vxNoXZCS3T 2APCW +Supplier#000909922|bXzI,qKgUl45krLN0,Qky +Supplier#000909930|hfx32 YKdFRijJ0HCWc,ulQXsZSrqG9naeGto63k +Supplier#000909966|Ft4HGytb825gTUMrS7zm15JBxzeDe,3b +Supplier#000909989|MUU0kVrMAUOlrpJhzVqnqQ36tyVZoyhYYM +Supplier#000909992|BJA9VLSNiHrXhIWXgk3LsyKZRa +Supplier#000910035|VyS09Q,KV2A0AiiotYPcXzISCnOUtna +Supplier#000910050|dc 1Fs3471EO UAK +Supplier#000910078|6U8TTEedCu6O23ah1TjAVzls6zx8yWMGA +Supplier#000910113|v1R XaL1CK4SgYM +Supplier#000910114|3jHAR8H1k oOG7 +Supplier#000910170|DxuwXPekLPVA,gXix +Supplier#000910214|Cw30q7nEp4iTOXFpq4s7vFJas,K +Supplier#000910287|t4Vjms9DR5oC8E +Supplier#000910288|,4B6M8xDUVIPk,Ps5wQxu1QXDB4o8ZDm +Supplier#000910347|wruTelia,gXJlBV5atlFd15sDTf0FAGbcCUI2 +Supplier#000910383|MWUQSJR11IH9ceE +Supplier#000910452|ZT3qoanDOzzcqHbCmnjWKoRpqOk +Supplier#000910454|9E1ssQPrO36iegT4pOmHs4XhoT6NQe VG +Supplier#000910546|94Div,qqnkb0Ar +Supplier#000910692|38OUmPV6x BT, +Supplier#000910709|ciauYJeNuWnfWoh,71IDd8 +Supplier#000910764|rgj0ev201Ms,dMY6kih8C4rwOKarA7wfy1Qi9 +Supplier#000910812|dyBbu95zPT3OsDKRY yCl4LpEKW1uEJ8Kdd93 +Supplier#000910873|w7sDDSSRKj1Q7OXEpS +Supplier#000910918|AlLbbN1Q2XYKFOaElpv6Bi4SuMWM7fcz8a +Supplier#000910939|p2FgraGqfOeTXAlQggmxIiP8rpyusDxEsneA +Supplier#000910945|Bf0i8so1ZKN6Xs8O5pHC +Supplier#000911000|p0crhZ8WIVzdP5N69jilkNUwTspfC +Supplier#000911006|EA,pNppS98h8KNm7n RAe0 +Supplier#000911015|wRVT1ohZBapb5G0CjNsMdcYuZqIjnOxOXTI 00D +Supplier#000911031|Y7xv,KEOOIDjm10 +Supplier#000911172|WCYYFqi22RHoMBgbLcOQoa2qo0qQ +Supplier#000911215|EuNbs7ufQrnUHMVB,c5izXin +Supplier#000911346|90HXRdHq7Ww6iNoEOGKXVjapeb5PyMmMWq +Supplier#000911370|CoDQaj3p0aqaONHKdOpgBmuoCYA0bc9fK8vn4N +Supplier#000911372|UK h,RBw9waPWhxGQ0OH7bg +Supplier#000911374|xu13nprQTqpUHm3qulDZE1DviWr78KD3SoX X +Supplier#000911411|gGnXxoXvIP4NGvo,IFyDShl0DUn8kKOqWyfh +Supplier#000911465|1tB566ZdQDrIJCK9KrrFQZWgaFDNSAiWjiuqQ +Supplier#000911553|ViriX2U3ZaJiRKK,fKqZsEgJvsXPl +Supplier#000911668|jYO2GTwCqKIRIZRekVWfe9kfZeW +Supplier#000911710|j3,KxPSWm0JX,47RA QMtMhsGO +Supplier#000911735|KviGSbAf69nZFA6 +Supplier#000911824|xskIWBoekV6uw +Supplier#000912087|EdUTboyIT9VwuZbVSj,3QG0XBb +Supplier#000912089|e4u,ITmCLRM,GKoWiUajAJq +Supplier#000912181|zxQ80VMZvgvrBvZqI, su1JmSRu5 +Supplier#000912196|PBzHIK2EVfBDfLLbSJpdw8txwee EMp jCqQ +Supplier#000912217|vjWlUQFY8I +Supplier#000912228|sU91dM2beFuD4RKK3zVwuNHcK75W5LWjXtz1Sm9 +Supplier#000912247|yFmpUM,ZeMb5v1mTT79wn,GRW7Kfqmz8 +Supplier#000912314|gw8oEXxgx0Wn2XtG7rj1bOYRjLUbv7CW +Supplier#000912337|nvzMM8S1vcNNQxDWZIQepmCZXlXFfvdNbmcgdILl +Supplier#000912418|3QU82xJraLWZlS3T,ZIVB3VV1 +Supplier#000912482|fnFpIi1Y3JuXsdgybcHXeaFNTmqAt, +Supplier#000912557|sEE,SXF2iHqdrWQvlvB8yh3KOSxN4985q +Supplier#000912576|Kw1VFFJXyGfP3VB +Supplier#000912579|g5Kj8NYbMR89hYJxSRwrzO +Supplier#000912710|J6WdbmPzsQ3G82vOzzOERWe,xDC6G V7jn +Supplier#000912792|GkQoNAf9rnBIqopydZerAjkOTohApH +Supplier#000912831|dIDmq,BSrJF9wDo8C8jPbhsVccVxl7FSUWBM9a +Supplier#000912842|9bQZBtT1ZYO6iwHHpVNhkmL6hA4R25c +Supplier#000912880|fV1Kenn uwXuQvWWrjmATNca4Yr6BiDpp +Supplier#000912900|fZfTPD1yFvlLpdqSjABQ +Supplier#000912931|daRWdPWObvFkxOmGjVOOOJ7l5kxkxIAD +Supplier#000913016|W0Y3bXv,bWj2wgaCwWcO7ePv80ACarKq +Supplier#000913174|PUKYXL3UJW +Supplier#000913187|VHVoMGoDv6xhCBs6KGjwXit +Supplier#000913225|NA49,0KvkCZXNpSsKFjnbliYIitUo +Supplier#000913298|dMgdnyXEJrBYn9UIZOOcHQnnVS +Supplier#000913326|Zr1oH8lrxobq9gN6EWm +Supplier#000913345|2yetc5odjfrDJtYSbY0a4IQ +Supplier#000913523|KRz5tkHWav8TN +Supplier#000913583|pwS6QcNsquIG0YO0xmZqE1SaHBg +Supplier#000913634|KczilCUCpVTGdYuX10lt +Supplier#000913715|Oy713h53 qREsALTaP7VGNnlqeLX +Supplier#000913763|gwGj ynA5Hu,9oJrZWC9wW7Smp,q +Supplier#000913782|1eTddJ3EBS7nhD4LTbCG1yCy,hVpWrY2nhdI,a +Supplier#000913797|oRlWNq4ZBYf6U +Supplier#000913805|8Rs1Y4HbZ76yyKqxcDlVOALJ5Q,lqV8KJ6sQqs +Supplier#000913958|slU3FF5L5AH un91NP +Supplier#000913964|gTscJxgUO7sty1dNZw0fgr7lgzG7hpuG,Su +Supplier#000914011|NRudkWI4yw0CV4kcqoWmmP57499S8yxw295Y7 +Supplier#000914059|Jc4MTOWG5tL9Ak0dwADsZO +Supplier#000914094|xL3R09KWkPQfqjA8SQh +Supplier#000914130|odSF6jCp8yVSxZbVTwMh7K2PxDsyVEG +Supplier#000914150|LZCBFF6hd5haG6vuUnLh +Supplier#000914153| 9xh,3iqohNTWtxrq,pXHCSrdoKnGhU +Supplier#000914253|fw,ab3qFFO8SxB8PFl6Zp0y N,cmunz HoyTE +Supplier#000914391|2N69dv9,jithkHZinQ,C +Supplier#000914420|6hYgglzm9lbbo1bCfwOmRXA +Supplier#000914454|a7VwydtLXKiz6 +Supplier#000914493|E0mtQY,5,HMbx0Icdqaz +Supplier#000914496|fSySasqn 0eLv0e cNi If4X0mPSZtVVjPEsJlr +Supplier#000914510|9H23TMApSBUUfxuEEJnInJXr +Supplier#000914733|TqRexCKeQ2 LTNDXksnbTKZfUAggCjNcNu +Supplier#000914752|kBHlMqO2OTn +Supplier#000914795|R9Pq9yq7Rw6q9lzsEBp6v8ePIcBpGH +Supplier#000914891|cWkNuMe6lNrgjn2jCY1QorsrmEE +Supplier#000914959|tcQfcOHpqhOD3j +Supplier#000914961|ijLXPB8pLZVOxomhN6n3g +Supplier#000915067|VepG02BrK3cyySsQW2eYcsM O +Supplier#000915079|lPiz22XGy2rRx0 +Supplier#000915107|8UH7VquhuXdYb,MNaUs8OxZDr5kwXAcZ +Supplier#000915160|P8cmCqwvdPYRTc32nECI7Kyu6RC +Supplier#000915242|ihlES80Kg747cCW +Supplier#000915260|NtJO i4iKbmJ +Supplier#000915320|KPd7vuyk,v +Supplier#000915498|,lW16Lva7 E3rll +Supplier#000915803|SGeKuTVyU4ull1 v6 +Supplier#000915885|1zRhOP4Cbl9vx2s0JUCqWWxB 3e0q2LVDKV4f +Supplier#000915920|Y,43Eo0TlCENIBxWMe3ZgXpu28mvJZ +Supplier#000915951|gBzQvnTknEbTvHHIKrCpZ6d +Supplier#000916045|hof37PBIWzIJJ5m2sINV9dwVqHIrv +Supplier#000916070|TLgBJJxkX1kZ +Supplier#000916074|9,,SOVZv4Sky2GZ4R4CoeakEYj bIHBoHTcU0 +Supplier#000916143|k,xV3xDWO,1QeMu2s7IiUVkX5euSpA ZzRGdY5y5 +Supplier#000916178|Q98KvI1g6hORMq0ffKqTTvbGQz +Supplier#000916208|KCrT3BKvtoEpeWE0PL205HCwlu4GmErVA +Supplier#000916213|yJ O,DAUM0ZH7aLALOHMwFrcJ +Supplier#000916266|k,NddBWi9yw1zaSZJyONk7wBY jyW9CF1 +Supplier#000916275|29Y0g4dfTFILNwmVFmNY6 vvNze3qHr +Supplier#000916282|SQv9wM3X8u,U3kYvgPdvWXlmATUPue92dn1hcIvP +Supplier#000916286|yV 8ZvUamZ6,1 +Supplier#000916534|JpRAjxFuMTUSNG9BIOXbZMcL +Supplier#000916559|UlLsRKu8rU +Supplier#000916564|14eaDjT3OjwMS,5Om +Supplier#000916638|SV7kEApQGzLchkcPIILu6QsQackYAqSh19B +Supplier#000916704|kgnnpeDYr625 +Supplier#000916742|inRMpaLuWMxTU8WKuHovlcZ8 +Supplier#000916745|JHwwEvX2GoPBsig63lms7qyMGo1V2uh3 +Supplier#000916847|vJENG2HMG21a 5RTZ5qKo54pI32z +Supplier#000917385|4vo2glP5Hxe,OG1,TuxoIq7S0cxQX9J +Supplier#000917452|dbx5poR5bTbfeIDdAOQW,RNXJ1Z8gvJTm +Supplier#000917463|kPEXShBH9phMSu1pFF7iIO krME8 +Supplier#000917563|laZXSU6eDHiZPgRBrj7YylQ,8uEGfOJMqfr +Supplier#000917568|uW1,jiHDjdh65zv5rMfQiG,W0c +Supplier#000917724|Hw,zY71zWRY5VDfzUOK,qshB eZ +Supplier#000917769|raVsbXf7Jko3IMpw8iJbRBT +Supplier#000917792|9QCgXqdTbM3fcmB +Supplier#000917807|zSKoBoqC2IlP2X9veZ7S,vfBelSoLs +Supplier#000917825|EVFuwWFgomSpT1YJSg3U56q38 rNURAWAF1 +Supplier#000917843|dbU9a3rK5HAeGDnl +Supplier#000917882|AEqcLrmuFcrBi8B,dGcbnNAEIGjd +Supplier#000917883|081U7c8smeL +Supplier#000917885|6XGMBdrO92EVJvssvFph4pDAFP0fi0 +Supplier#000918021|KPtjZty5YE37uUDKTdicR +Supplier#000918089|i6vIzyII1ZZVhbPPqm +Supplier#000918135|lZex5rbkzqWl48LHrqHmnJthE,MXkEuKIAXU +Supplier#000918197|LW7wlFEu3C1DgB2fCZndTNOWjkXSu,K +Supplier#000918204|LtHStQDWYcdkxTr8r +Supplier#000918290|GVKXLDmqbxsBHQWQYzjiRe2afjEagkr +Supplier#000918303|gjVLvVfmuAyoJ 46iHg8VU5tntuF +Supplier#000918311|lc,v5oI0cji eeS CtjUwk27BHImN1u +Supplier#000918339|GbZZ4JmIWPWUH3HEiy50tg +Supplier#000918345|YauSX3mgkb25egPJZexfb5W wyecn0M6ZbaL2z +Supplier#000918368| rPvuOcQ1RenSUq2oQUhXpVKF RPict4C +Supplier#000918401|g3OZAZKtgelzyP52KItDyctljHv +Supplier#000918428|IZ2Ykq6xpGTJq3VeGdxn5tjejNRW +Supplier#000918503|qWWHOemMItvO2VuBkxRsE5FDM7 +Supplier#000918595|Gx,v,uAAzFU3mzCTZoRNscEqElA4TjTp +Supplier#000918600|vcCoBEK0t9obvJxPgAYR +Supplier#000918679|66HV,6oThdUF,Gio8rtvanQ,CtonmHF2omA +Supplier#000918774| rYianzj2U2yHscLktN3k +Supplier#000918834|,diluWspzC6rWL0x9a5M7xcH1JTabYRTTn +Supplier#000918907|ttUgIy7CxLhlHCasX6GYU +Supplier#000918952|XEP7V76Qks +Supplier#000919047|ULajHCzJKt6ncGwH +Supplier#000919054|w8GNktU7t7h135M3X2s A2D7198,zUAEPmp +Supplier#000919078|v5reeoL,FIkcVcRHaW5TUrQPr +Supplier#000919100|roHTlFa4frujbfhEeBxD84gZeAKGHYrvv +Supplier#000919103|FHmifgHG6t +Supplier#000919124|rnTDraHfFc4glZEzwJZKMEBC1b6yn7755WP9x +Supplier#000919149|QPcwmMW78yT6xr3azkjK8TtUV1 +Supplier#000919199|t8BbHClUapIGsnXhNqIMmP7leOq3 +Supplier#000919209|KjSo1Nxx D0DMwf8W18Dc4fMkepnGdU +Supplier#000919367|SQjmeYrAP44VfjdJbpRUIjmfWgbkGWvk +Supplier#000919369|zb9NtrhT8rr4FMTf6OuT11HXv9K,aV8vTCt +Supplier#000919458|7SMHerI,phaMME1N,Ac2hGieU4Rzao +Supplier#000919482|L7dlOSVMD5ogqdoB35FEC5PlE +Supplier#000919519|npy7bPYMpDTTygaui8VZm5Hmj7XKiG5Gj +Supplier#000919520|vb64ogGNNr4OZpSqkn +Supplier#000919637|QcvPf3m IwfPszu8hs KuImWaHS +Supplier#000919641|xeTJarlJKsJzZLTOXpX5h +Supplier#000919780|bwaReta90N Kr +Supplier#000919810|AE3uQfxtgD206TV06PK +Supplier#000919910|Mj69j8gMnVDs37Tv,jq4fN6TpyUPYs9b +Supplier#000919938|F37yBYskG7WB,71gi +Supplier#000920078|yWW8CkMhNrvSKoLtkn2OGS +Supplier#000920092|ZvDOzzvBgcuUBHrqM0rvjzKCJyQxT6Q1 +Supplier#000920214|JQESBMircxh9wj6isxuGundwsL1fme,4n +Supplier#000920258|0V Kp7eZ4tefJ +Supplier#000920264|6tbOixX75ZM0EEO8MbhXxCjE +Supplier#000920359|JR1fDAX9L2cu34P8cJGkjONJAij0vz4Da +Supplier#000920374|rx5PKzrdmnePYw +Supplier#000920451|u9PgRVnBJUMRhvXgY8aVnKgRXa19Bd,4f +Supplier#000920539|AQo5E9vxY5I0U vwIFSgqklMa +Supplier#000920551|j5jqTkPl92APs0zGGRgbj078SZ +Supplier#000920572|24hLwqHVgzvGBAKPZDgXC8bVQG +Supplier#000920583|fUU5oS6DBRR8AJpHhRqnSEvzbe2Fdm6oIpsedlr +Supplier#000920618|WiGgKeDUp4 YLHIHmTI6UdgFV5HM8JIOKL25PNqf +Supplier#000920685|RwA6rP,mAurKgV vFo20Y +Supplier#000920753|BVEPTK5sGbBhBtXdeoJ0qUUqjG2jqZzIBZ +Supplier#000920765|jwCpRcdkl13djI +Supplier#000920783|9hpeQ,2Ddn0uDfWReyc6WmFM5OGEFP8aJ +Supplier#000920848|nRSVKDSCwdp836N04iwih5rCr1H4Ud7n3Z6 +Supplier#000920852|NmUUNdgh52v +Supplier#000920858|jRd3mP JEB,y66o +Supplier#000921034|FFgrsdUPQVX +Supplier#000921043| c3QkFHoqSAZVbNwd9Iov4W +Supplier#000921061|ZqT3YngRl61l2rj +Supplier#000921319|CGVnOaTjOdIE2EtyDoS406ZAHv5 +Supplier#000921353|xUR6NVKWVBcTywZznjCkWlfftXP66drjTFZ1oRCJ +Supplier#000921510|3e7ssbLVGqtf1i3pf14McmPxmQqMUaZ +Supplier#000921549|FyybyJ9Xr48osh +Supplier#000921743|lZn69tfM1E9wkFfVZ6JNIsQGF,46xtgX +Supplier#000921821|mbVcYh,X19cvcSvG9jLnfKjQcMEri3V +Supplier#000921874| xooPIzpgKnvLCWEe,J5KXtuRIdXaWPtPaRPM2 +Supplier#000921886|lNG8KOcMyhocqB1VQCDdkJYRBVlebHZcszSLvj3X +Supplier#000921919|6YxeFi9PRdHQOSQECrejrC7SNOb +Supplier#000921970|96,iV5tCSfVK7qmkmRDAqGuo +Supplier#000922192|TfHjdrmY8J7GcCN +Supplier#000922255|F6FU2R8XvO 6TE8HE3cIx +Supplier#000922258|bykQEQftzMYc +Supplier#000922293|ebryFOwweRl +Supplier#000922319|kNgZ1fBcF5LTcicsubR,mhF,H18P +Supplier#000922320|SF8kCuANLoovgPPi7zm7m +Supplier#000922366|zEWbMyevtPEM OGazGZ +Supplier#000922438|D83 OtIhO,SwWKNXRQQ8HoJi +Supplier#000922444|nFbaBBf XWs2,huv8s15viV2Ysbgp7eQGCT,BD +Supplier#000922549|zVb0kFEZTXPk +Supplier#000922625|VW5nbYmUntrEWnJUjZLel,rWugz +Supplier#000922640|JrAUSI,jlO2K +Supplier#000922698|ac2,1aq6og,s1WDEWAVzZo +Supplier#000922711|SwJxZObUYaAk9P3n8WWNP +Supplier#000922714|bztuNg51ytE +Supplier#000922815|eOyXpLmUmFtM8LyZYOff44no1hUGg LEcSpj +Supplier#000923017|Fs5EFoPGlbcA9BGLb6uKEbU +Supplier#000923045|nfWMuaw,W8KSnx2PsI3 +Supplier#000923151|mSqhIAi,AU0HGfCP7Op7bWa08rp +Supplier#000923245|c4h43BMytlvxgn1,pbP2uTmvk +Supplier#000923250|z1cOVY6Hqo No +Supplier#000923334|TtVIF4TZk,n Rbv +Supplier#000923529|wspTL5,eyFCkqd4IpsWtPQyv +Supplier#000923714|1sxU3Bi4XRbINaoilQ9 +Supplier#000923880|vLbiI6YHd2wVxosJzaNIhB +Supplier#000924000|k vQR,OXPpGtVdwBc9PA2wdrw +Supplier#000924062|jAhk0y rlc1RmWfA 5 +Supplier#000924067|M83EvMXORkYlt46CiLQXU,Fs84z +Supplier#000924101|BD61N4YhQ,IGZY0qT6okEt7S6nbW8P,KAHjO +Supplier#000924119|90ag00XFNizaOETzxoWD +Supplier#000924150|Jl8qkdg24qpWI +Supplier#000924180|Du9huMrcgEOTiMr3i +Supplier#000924195|o98JFhlntS9ljq0kKkaWSEockgnru0JGRzRZ +Supplier#000924235|zfMZOhuIQDspFTLFK16LgxbPZW +Supplier#000924257|3X2I,QYFue07jAor3kYFU2itbfuQIRpAo +Supplier#000924293|q9JoGRzEZDih7ks38c1B8ton22D +Supplier#000924328|z8 SB4K1N9O +Supplier#000924342|pxmh,2JsMA1w,HsvxMnGbLjeLDWgAY17u +Supplier#000924377|OyThXKVWnXOb1TMIC4,IMTnmejEXqlx +Supplier#000924399|6AhKv4fCMSbpDR5IzFEdJt8CTuiTvHTyY +Supplier#000924419|4Bu9r8su1mnEJwt +Supplier#000924424|B98Q,qwjKoU1BGJO2Zf +Supplier#000924485|d7Eep,tAekUPAh2pE p0sPjjCGAKUf5xg0F +Supplier#000924501|Ykl6SdgOawebCpP2 +Supplier#000924505|ubHwR7zUM2 +Supplier#000924506|AQiLSfYSyGu7Okje2MWVKB1 +Supplier#000924520|Xols7Q38QxIoBn6vuxxv vdusmxsE15 +Supplier#000924548|C,32dwQQBo,oQ30w8PUJ2KCEgooL1yrci8W4 +Supplier#000924693|PWKDieZ64byD,2 G2JkeA7 +Supplier#000924703|tgK1X8JdxHdidq6o EmcZOfZfz,oFzv9p9hnicG +Supplier#000924870|cnOQrr9f3eAMQZOcmLrWfzkQQUEPC5h3APsv +Supplier#000924922|rlUQ6NRFzOzMrbs8oMFZLwVciA2KpYP3i +Supplier#000924998|73EDpRnLO,7H9 Ld9yHAg2wVhOvMNp +Supplier#000925033|6tjmtSeZecVENTKUzu +Supplier#000925149|p83csnqjawjjNKMD8G2XSZEdyIzWbLixu5dPo +Supplier#000925167|hkCKLFzZYCU,8S40v4sHunHt,v99Je5aq Smsg +Supplier#000925207|hdpod7aI31KUW7PA +Supplier#000925288|WQmrFjOIbRKMWDZ9 +Supplier#000925377|r1,Z0Mugoso +Supplier#000925391|vEwYqd3K8fZENWZUpIO73rHosnJQUoqg +Supplier#000925403|eAL,2G5ZJQsd5O13 +Supplier#000925443|RlgAOJ1qBXFmYX9k7bkCR +Supplier#000925456|t6490hIXjcC jGaZmQwNqr scGAryyn95W,aVu +Supplier#000925464|pjQBkwPSSxj8,znVAsnGCZElq6IW2Ioy2dty8 +Supplier#000925494|QBNBjxgOOKcHSpc4wSKtuS5o5jNEHUglrhYtqGw +Supplier#000925572|NgvZhEyN3MX FdqlZa +Supplier#000925585|heELIfLyp1kUFQqgFMj4AoemAuHr +Supplier#000925666|,zNroxC8WE7x2kDh +Supplier#000925686|aScIeh1Ec0LnbDSGOd2oPl,SIODVqaL1N +Supplier#000925900|MiivWd,1Ykdt,kCVkh Us1b2 i +Supplier#000925924|TPIud5YqkYREvNYGyCmn7V2FPjLGxdlEoE8yrd7 +Supplier#000925940| H9ZKm4n F28UANkLKXXehVwP y3BJQZHGb GEM1 +Supplier#000925943|0VQc61Bkwm52e0 +Supplier#000926000|6E5Zen5GWia5fKPiMkxw,Oslfa8q1aEekPSOBkHb +Supplier#000926149|u4owaQSYgXXVhDbqVcVZd62lBShJptQZk +Supplier#000926198|HKsguT9LHMpVPpvFWimS94N50ZqvuJ8K d9 +Supplier#000926228|NxfaJbLMO3xwxeiwvy1 qm,8gYBlPDVLEm8NzHMP +Supplier#000926295|47BwZ,JcTxUC7oIQ6ZUopWO +Supplier#000926333|7Y9eQLEioo MkajzfBlX7HZ +Supplier#000926354|h1v6vuq8XvOYv5DCMwd +Supplier#000926428|wykgl6IL1M +Supplier#000926547|tIzxKbXRDl6pPOsLMF3HXhNmS8l6J0FHn0a7ugf +Supplier#000926612|SssxK0hwRSUckjaSx5u +Supplier#000926673|2JqGRp,KQ3q9NdoQ,6Hbhf xH0 +Supplier#000926761|qQv0tFY4DIcZsK +Supplier#000926787|ii2Cdckh96eGeyHU4UWgNVQ9wrywJT8oOy +Supplier#000926908|Rb8 2anuxt +Supplier#000926928|uK4L6r0gIVdJy61bqj8 +Supplier#000926934|4YcgcT1VUN 14R +Supplier#000926964|r40VNcVcDtpA7mDkuKx8G +Supplier#000926972|XlzQTaPnkSUy5V6VPd60yG0pwuOF183vPfJIG6wX +Supplier#000927039|u9JQZwEXEdPMTQ2PnzhlD75wPp8pwkj7GC6t +Supplier#000927044|yAJWczx47p9A8Qf +Supplier#000927045|G5cFC LBcTeMsmRm6 +Supplier#000927249|pG4ZwbUxZcDlKRT1Lp9KlSh9e7crNB9lc244V5P +Supplier#000927441|BX8VR7j 3uWgnMVxJukU0ldhMor9 +Supplier#000927462|YFjtuYVSoy1Ot5NFQ3kUvx3X2Vpe +Supplier#000927467|xsc7qGjllnoPzezU +Supplier#000927530|k3 4jkwynjWbkBaH87,j77YFyH +Supplier#000927647|5O6,sxxgi0HxhMVoyCM +Supplier#000927687|AazDwO0NFTl5MOFWDMu0fyOYhjUADY1 +Supplier#000927829|kCVlvNTHjP51SL +Supplier#000927863|JgOjPEeKVWdKM8ZI1CYNZTMjhB8 +Supplier#000927910|hfsCa8fIDWxWy,ZEr,IxtPR +Supplier#000928089|E3qbaSoNCUJ9wx,Fks2SwiRrysrSd,4rani7t +Supplier#000928097|Pvd0nT,toTOZNIxg8aC13AXkiJvCLVT Z +Supplier#000928207|YfWLM 5unC05au4ufEDbtFvBut 65fCqf +Supplier#000928428|Hlaj89F70w8zcr,jfwXZJ7jR2T6gn1WuY61e +Supplier#000928568|AoW7umqPWOY +Supplier#000928593|g7cS68c6e7,qsW6VCP oWsS +Supplier#000928623|jJqP91nRl ulpRAW6mSKtlSeK j +Supplier#000928664|noSzmjJu Bah0DymTruaUAGGIa6 +Supplier#000928812|jinujyz6QaWbtc,VSE4w9ypgBZSlxsiQtSSU,m +Supplier#000928837|KsyT1wZCuBskfkPpL13KLlc24QWARr +Supplier#000928850|dOZaKHWUMH,ZH A +Supplier#000928914|HN,5bTqqOjLg8vy0PCNs4C9QM +Supplier#000928995|M76Yrdeyi9ie2pyxvQmsAgFULb +Supplier#000929006|8Xc1vwo2IPWFOcvhKflsvj6ofshCv18 +Supplier#000929083|aZFKsnNGYFthUQHZQpjYzFICNbQ19rHmQ +Supplier#000929087|7eoYq 7yzHEtOkCZdLm8WA gfg8zU8kSdT0, +Supplier#000929119|YTUC77Jtj0cPUxSfIUlDVgnAfkfp0tH85 id4K0 +Supplier#000929139|MWEDsBWesTgK7lZD +Supplier#000929264|kwxkU5tLFXPbDq0R8TJgf, +Supplier#000929267|MlB,1XVtI b +Supplier#000929269|sIAUkXZ,tv7,Ed,gc0drSTjIOBt +Supplier#000929271|,PUdfVJbdcHtd +Supplier#000929371|5TTL9o0hD5uIW9hN7 v7QFS6NpJ +Supplier#000929417|n2VH4FK1YHPqblepJLErY +Supplier#000929475|W6moQutQlcBaeaVuT1eiYRmgyLmXyQ +Supplier#000929479|DV5XZwvDQmmWDsubgW,NlxlxMpS +Supplier#000929491|eXNYfix cIHqxa0t +Supplier#000929532|16r5R vaea +Supplier#000929572|p8 qaVQp66RurHWGP4Agx +Supplier#000929626|mWRP0pjs4UC2H YphAEIUpWV2Jdc61ALDM0s9 +Supplier#000929634|6OALGK9gmAgy +Supplier#000929685|3oA5AV7fqt,fD +Supplier#000929795|H27kydSj5fap8zW eaM68xTPnLH3B0MQulanKWlf +Supplier#000929834|fOBCksipZHljVyQEtGXy,4 +Supplier#000929846|otw08mt4cYfYUBHYc3ZsVA1WFpVavN7BKFn8H3Up +Supplier#000929861|OamRZ1oKSMWkdV GtN1NQIfG +Supplier#000929895|Wn1ZQGQNqN +Supplier#000929982|KoDhaJOS4sDJKr3Jk, +Supplier#000930034|HrK,zF9h1TxC0, +Supplier#000930137|5i0FHZYeLaRVOF0hXxDF8KsEU9ktUOYM +Supplier#000930157|,rd8xm1M0On r9emPGBenr +Supplier#000930181|VAEBUQrAPk0BKiY3bDg5WeKAh2cTmdW,xY +Supplier#000930183|85YgEQfgozbOKiRp0G6QbiQ7Gu +Supplier#000930219|XQRrhD6hvFRcB4U,ITbB2dSr +Supplier#000930222|hDSEb zMfwp8QuegZLi2tw +Supplier#000930258|D97ZueFO79fl +Supplier#000930317|rP4bWarBup +Supplier#000930493|Msm0Z47u7eIbjPbFJBpjH2E +Supplier#000930545|AZXhT0qn N3xLZG3QSRId8f, 7tRt +Supplier#000930594|MselnJS 57TyBl9iOgY7icb7ECy9crRFytj8 +Supplier#000930746|G3CLoj7Tw5ct6LXXRsKWr4z3F2DxJ9uX +Supplier#000930800|9h5kfUMoOysVoL uqruvRX4MKdJ9b1D +Supplier#000930801|zrocj0KHzoHuIT6X2mKmd9u6GEg6mLuA,5WxyaY +Supplier#000931057|5zG18P9bjMQ +Supplier#000931060|zpO8GQeWMkWFOU2 +Supplier#000931102|1EU2hAD2KgTJJsM ppPKmybVDl +Supplier#000931107|3HfS1YeVTiWrI4 +Supplier#000931123|GD,ezN,kERTmY +Supplier#000931274|VqX9Mcq,pFksSqfPCHloWYdUEUB +Supplier#000931313|1jU5COWM9YReiojFJTrewTBeYrs357Z4tb +Supplier#000931473|LehvbPRTA0dm4Rt9IzKx1vB9gKw +Supplier#000931579|5LSrCg5Rd8V +Supplier#000931628|t3DUCQ9B5ewtxB +Supplier#000931660|gqdHgj5GQ9LkX4J5GLYjjq3U,YUNJv 6kVU3i +Supplier#000931675|JNui95xpkk2l +Supplier#000931676|khzh BAo5Y +Supplier#000931725|GbNqSUVoLqW8kwpAQQ +Supplier#000931757|6RI5gF2padU1bRz +Supplier#000931790|I,jLTaV1jncbiq6McVqwnqKEVE9SxCo +Supplier#000931806|KUM3PLjPAc5XJbv15 +Supplier#000931879|F14g2d1fh8ch7,AfPOdxAmty +Supplier#000931885|ey0,UO4uAhahZX6m +Supplier#000931950|NecgGd5,WDVHLNwCRxjNhBfvBDcdUmmbKT8 +Supplier#000931976|fwQ4ymcCZzxNtBfqr,oZ9cVTkE +Supplier#000931997|A2ZyiUGpit85onbcfFPC0FW,Q5ombDMugxXl +Supplier#000932054|hn7CqYCKZlhMAcgA8IiqNAFaB4,F +Supplier#000932243|dOikDXL7lEmM5FEbx +Supplier#000932312|jrdnEKNZ6e +Supplier#000932333|d,7RPlrDGM1h 5U2mPR Q +Supplier#000932386|eq6v3,shcseujWq5E +Supplier#000932484|z4vKSHQ 8nhAf2dqM5a8AOMMh1uweC5 +Supplier#000932632|d1fUXaY8nqb3QLNRAlWPvP +Supplier#000932634|ihqZTa6P dfb,HZ5kz2oGxL76LKqovXE +Supplier#000932768|syv8igcdiPkHf6pZJ03S1 +Supplier#000932789|aV97xlvaWtc1F,rK +Supplier#000932841|8uCmwg9pnjuLcc QzfF,UQbsJkJTEGLvbK4Z +Supplier#000932927|rKDGwwuZnz4JXnIQXCaHVs +Supplier#000932949|ThtcArl2tFR,agK9y7T,QKq2FRw9Zwz8h +Supplier#000932951|V3JF5h36BlZk6,67PHm R Ei54Kc tescuC +Supplier#000933067|VTo6n2VaNeR4gepYSFvIwhdPn +Supplier#000933089|WSp7xUFIrve +Supplier#000933109|sD9x4lqqDtAYTKv,3Rnps9hR4kA7h76Rnuwi ,7 +Supplier#000933191|6TgVn1 YA55eY9P3JYGy,s8t7,RQmO +Supplier#000933206|cK5pHojHML0GnE9Nwt7fNcenLH +Supplier#000933234|8byFFIXqP7MwYgnAjD9CbILShn +Supplier#000933323|qCarkK6O0F8VLHSt0P +Supplier#000933335|AgIz6jQu2bxF0 +Supplier#000933392|rHyO06D,rvt3YxLfonD i +Supplier#000933399|kVKL8tKXQUEyly6HdZ6z9 +Supplier#000933422|1tyegUiNUpbK17mnydpfUDXMAzxpGvkKUWYgHUSY +Supplier#000933432|vhxCBrRUik5m3mLyxu8Kq8 +Supplier#000933435|1ZkTnVHHa9965xo5ri1nAL7djXGBLqM +Supplier#000933436|tltIBp5LNG52pMs4FM JizwHWK9l +Supplier#000933516|Sc, 9ajahgMbKCaY9Yn9p51YM1iNCeVAr5 +Supplier#000933565|kx4wt1bb3hAmVFot422I +Supplier#000933566| Vy6A3g2WpkX6cu7B9OYnVVs36QONvTWX8oYz +Supplier#000933644|VzbqvNk3ik +Supplier#000933657|13s0XJRt5nppdzsOJ7jyLsljbsoMA +Supplier#000933693|DTtzQfZ2YP55EnbGZR IIG5yFGdp +Supplier#000933861|,,DUJVsZYypesr1aa7hdCBZJ8 +Supplier#000933886|jCnT fVh1fgrm6pzYgGiEoj +Supplier#000933935|AEqskvttqNkvGJ256JuLPM1rjyR0LuOpMKiQ +Supplier#000933987|HfZ Gd5bmVWj7Tk5p38s3IMN640Kq0BuWHH +Supplier#000934002|o4,gAoapyfO7RYgc8XfxxbbSwQd0pU +Supplier#000934155|QHNsFoEr6K +Supplier#000934220|wg79j4J0hZvv4kAsiECUhIFbqo4oXIToBkaBNgIC +Supplier#000934234|8A2rLeW 2d +Supplier#000934387|xuJ6Q3phnUPrcoevluEOREttgZ +Supplier#000934558|5Yr3INb8yxhX +Supplier#000934566|s,o7mK2ZOJG 1FhJ,73O4QMDU +Supplier#000934624|vAhQa76btHuONcxpfGMB +Supplier#000934643|kPTgesdNTPSzF9HpuN7ulTdofEQ5Aw8DcwH +Supplier#000934663|CAnAsqvmlpPoi5REJ +Supplier#000934670|zc4jI rZNEHwUD9AmSmj UcypkhxE GEcwj +Supplier#000934754| RynuyEE1U1otw +Supplier#000934811|aIzFRzgG6yjt7a7gSuHM0P2touxDdOmRJc1ah3z +Supplier#000934848|DpgddMQWdkE +Supplier#000934880|kgivrAHVNPSkik +Supplier#000934941|vbQV8vftzhdYfk +Supplier#000934949|vxlVVLceFIWJSRFTv4BK +Supplier#000935075|vQcO1TBOKHerEpZSXJd10iL YkX83,RHqxhRXRFu +Supplier#000935333|EMkas43Wlry7 +Supplier#000935382|hVt3YW6Pzp +Supplier#000935405|A4FzuyirYAUKy9BjOh4k3KTuK +Supplier#000935568|Q7dtR1v4xK6xJwlNqQn5NeedR,ufkaz7 +Supplier#000935616|e8xinC7TU,Slo0T +Supplier#000935743|,TJBr1xSzoj328OurMi2,C N +Supplier#000935805| 4t7,rbrzZNvmR +Supplier#000935828|fbJh87x8QAb6Nf n0RHH1 +Supplier#000935984|nY8tBdQHrJvb +Supplier#000936078|LmGUW9iADCOa0niKXjImycQhl +Supplier#000936121|sQU6Uy44Z3S42vv78bqeP3,vW4a6EcnVXfXWH551 +Supplier#000936132|ZHRUXJatcYTRI,hmkDzOb7T +Supplier#000936155|qKNcnK72xwFd0P2nm2 B81, 1qy +Supplier#000936177|ukwXefPxbOs +Supplier#000936258|QiqI3Vz6kawE,6ADuHPf9Zwcn +Supplier#000936340|8zhWH3BwY1Rx +Supplier#000936369|H9g44tdyIT1KXNY +Supplier#000936455|gF5DuAerBM +Supplier#000936498|QqpeLfSlQk +Supplier#000936629|jJxbNQE85M,1yzW 1UYKEVcaBARZ51NLJX9bNes +Supplier#000936690|Uf7cMYEx3 9shW +Supplier#000936709|OyelZYZluT +Supplier#000936773| bUnwFweEyFXyxTSLFwM5x6ZUiysxzRIK +Supplier#000936786|iDEtF5Bivgbggc9Se90M3NuT +Supplier#000936855|fjsF0Oc1J9kX9Yjrk0Z +Supplier#000936904|zcF,hzz7y h79JWc,mri7eH +Supplier#000936906|iY qLjAqvj 8UYuuATBfj9TlH +Supplier#000936992|g6vdl 2Ax8Jg66FHUjmCRAl4k4M52,3m +Supplier#000937004|MemRvcC08UPTRoBsJ2R9 +Supplier#000937063|mEDrixU3fn5XS8P1L3q6LzReADuCpv +Supplier#000937224|tHaqjvrwJXuBj6p57u57A0lBI6icnHF0AqZX +Supplier#000937225|JUkx3gB1T p, GPCI6,vHxRWPqma +Supplier#000937259|PJxAjb5fYzulo3Bm7KG1aEOx4Hd,0anNzo9h +Supplier#000937492|H6ZXZhhipYk5 +Supplier#000937581|mI9M38PyHwgCEFhj25mn +Supplier#000937588|Uiz9STCSjI50aPXPtsJ 2eq +Supplier#000937607|DO0TXhaSrpyFENztjzra4V9k9R6MQbwFZNk +Supplier#000937626|IzbXtRWd,BUMv zITCl5G,ttMGqYKMhTDE +Supplier#000937654|t2e59jwBEURjIZrC6UHLGfT7tg u30aE3ghNCK +Supplier#000937662|aWuLYOY297JFNEoVbOT6MYY9JRLFKWN +Supplier#000937717|EOGiBRA9JP4PNo3Hg88 WsnMiMOJ5 +Supplier#000937785|CB2Fb,BGhdD5bju +Supplier#000937809|gtz 3ovorPc3pX2mak +Supplier#000937826|tWHPGAmN2t8a8Q6cc +Supplier#000937989|gXlUrZ62MK5 +Supplier#000938027|GtCgohXzGOH1GGP +Supplier#000938155|tdryokLHnTQ75Fn8zdCGFB6n6EHh7tIZyTxf +Supplier#000938261|oXxuPAMUzY9IepvcqO q8, TRN1 +Supplier#000938286|YXGepWFkTvFLmX,ND5Y +Supplier#000938307|bJzKyilQdSg +Supplier#000938360|eAEHy1aLrWy6o3QSVuJ9 +Supplier#000938475|qzE1Y2Zi7XRYz6w4Q8frCDEn GCFRZth +Supplier#000938663|0rXT3Z m3vNo9uERa +Supplier#000938826|RLJIQqBwjX +Supplier#000938860|ONpjGebJqP4Q5klusP6fhEwR7M2SRWFcUL3CP +Supplier#000938880|n5dfDSLYPL,yI7ARt1ac9H67st +Supplier#000939158|U6OAn8jng74Hxmqw4WDhHjrLhfHfj4hzG +Supplier#000939161|Ao6N4FEyF0gpGMzt5SVa4pUnCxYCwPQgduzo +Supplier#000939204|ATdPkgC5Fsyl7DLNVFuRfgPoLqRk25uO +Supplier#000939205|A0tI S,3tsUZS4kWjA9cT3 +Supplier#000939504|nxawhe61Glj +Supplier#000939521|h9dSFBF,s7LOcjfDxF8W0c +Supplier#000939526|NgrZOqDnEeUxPXhz L6WUvhYGVbfZCF1369g +Supplier#000939576|Y2XBUFqKywFh4i +Supplier#000939592|wMhSp ,us30e +Supplier#000939629|JQIkAViUhzJ5ltLsm +Supplier#000939634|lKeC6n1KfDAhf5XP6 +Supplier#000939637|YtpXTjRc4YSP8aqbdN +Supplier#000939687|YtE0b4oW9nXMH7LiBK0R +Supplier#000939690|ok wxnKzxKPAILlDFCk +Supplier#000939757|ztyA42v,XtZ6M3X0,ul1KrNWL2TiU VwUb28CNH +Supplier#000939812|dM2 GjB8j6 +Supplier#000939836|ZI6DuVRkXQkGy9QeZt +Supplier#000939839|UtjTdd0f0Y5 +Supplier#000939847|OzxyVvx3r0LkeV +Supplier#000939927|8mRV6owJl8KfTC1Z2Hzf +Supplier#000939933|KNaSO2,iOsC +Supplier#000939950|CrgnJTY3stPXLlPnFQE,V3 +Supplier#000940044|sxuRZk4z9kx9 +Supplier#000940055|Gr22pzHMcB0I +Supplier#000940066|TKfzvRrBXw +Supplier#000940093|TMO5jBjMwqzmhPj,ETT3nCpBfkHMgImoKE +Supplier#000940208|,OgjgQ64 N2LuNsiooEcVTg173piVs9 +Supplier#000940212|NmCqMR9hl46gNbImPxUM5CXvV4aXAr3 +Supplier#000940380|IgkVSrfNuOo +Supplier#000940408|Yrfj3XRQVMZHKljL +Supplier#000940465|XD aVcvZrJTFORPS74W bKSiY487GC7eqsmg +Supplier#000940536|etJKEuwZgPP +Supplier#000940603|01Lz5pNmmKGCeVnz1nlXqdrh +Supplier#000940666|TA qLtTn,hAHFopDsxPsw7AW h +Supplier#000940751|XRL7PvMHKyueVmsMALk4JKd CwIMlnHxBMnAqp +Supplier#000940756|q9uiH0EWFBEhf +Supplier#000940795|AAmIRN7D60,ulicBbX7 +Supplier#000940799|ojz8AOfRJDXLMCB6KIYn85IQfnothwy5GV80RU8D +Supplier#000940822|M5RoHeAC LvBym +Supplier#000940825|Ag7 27IkJp2 +Supplier#000940942|6y79T9cepy3m +Supplier#000940994|1O4y2OgMp2j9PnYNtUZTGI, d +Supplier#000941165|xi2dmY8fkU44XjMBrg2GLO1Et4,Yp1kRW acn +Supplier#000941253|TBx,uIWDiX7yoW2 ACCTp8YcHeWE9 +Supplier#000941383|trxpf ,NpSBTjunCRQSo6NqvL9E +Supplier#000941527|4W6c2ev2JUgfofEn7eB5vPJ4TfKszy2 +Supplier#000941547|ZSAscCnfuD6p4mtaRsre0tkPac1c +Supplier#000941569|CS0J,vAdBc2dMU6GpnDH4aqps0ub kcXO,Dr74xd +Supplier#000941600|xWlptqj1eFMF +Supplier#000941755|Wars2YghzRpRZaDEMZZrH2xn +Supplier#000941786|dFM1 995oeZSzJlFF1fRSFF +Supplier#000941793|b09b2tgeEWmI6v6IUIqi +Supplier#000941804|r8ao 5QFc4Y,q3rZBjCvXCxebUn1wj2AG +Supplier#000941808|MUCwVdJRed4Ov4Tu +Supplier#000941917|qi3jWOBq48WJ4C,Ld2cJkqHpqmLNth +Supplier#000942005|rFLU1mskqC EyJLVgidevcmS2 +Supplier#000942043|1Ty0qZ3A65gpQJ2mZU7pg +Supplier#000942123|1d27FjrGjt0 +Supplier#000942154|2 8X joMHGy2 +Supplier#000942235|r4UnWg8Vb,HBgeg6 +Supplier#000942324|kUw9hGpItpsvMY8L7U +Supplier#000942554|iexb czJ1dm2tC0FwiVTFI1jjbo +Supplier#000942628|ic02P1Us0VCH2zcP +Supplier#000942741|Kyjxrqw9j7PqtAQDWIg0V +Supplier#000942750|yJXR6NLv58nJ5or +Supplier#000942794|czatgo9xYqXPAbhOrMVVgFZb +Supplier#000942798|qcl0HrtLYagS01wrcJ9 +Supplier#000942924|TJJFoJBomYdWzn1Jlgri8cVvOQQ9F0XQoZY1y0J +Supplier#000942982|V808rjNAsir1X6iBZpXrNE7ak8RKvIdcLdHX +Supplier#000943003|,WbQBnLThpTr fDHxlEgYb2knjOjaeWy6mQH +Supplier#000943054|4Pi2AJlEqY2x8uwQmre9x +Supplier#000943092|H1Huq80LWL sPVquHWyc1krFE5DBF4 +Supplier#000943132|4gC NcNH,HD9M +Supplier#000943165|7afdxpTD7rS M0Ouj +Supplier#000943259|mXyEoiGnn61hCaz3EDdTt9SG4AG +Supplier#000943350|NsuvrS6pQBvDrkfC7C Zsm +Supplier#000943395|LRr7fgm7 ElsC5byA0UKhE39 P +Supplier#000943420|3ndYMDZy,0qXGVK9N5FsAnQkMKq4bmrtbQP9dvk +Supplier#000943457| Fzxkm11tTeH9SbbHYh0hYqvI,riwmS +Supplier#000943557|imsJp39ymObsSvyNmaouNyA7rqOj +Supplier#000943657|,1S4RDUIfRZEWup4db4a5FjqeVChwue +Supplier#000943717|dXuZY4UlKz4m,tAj1XAB3SWPPw Tj +Supplier#000943728|wJ6UdjQvlfmOCqmp4taEGlInTa6q3 +Supplier#000943990|gqv3aoPBIqr15IZ6qV1Lc0sh6 +Supplier#000944009|81OPGNQI1Rjc8IXrhp2KYEKVtzfOTIueUo +Supplier#000944063|OT6rDkKLIBCXpqWFvYjjdR4VuDiUeA4mdC +Supplier#000944103|MbpDYjKyIV2vPYdSy1yA +Supplier#000944317|bUFnraOe1A2jtlBb4P0dp +Supplier#000944335|DzK znBQ46uJHnw,dyyKe0a8med2WS d +Supplier#000944496|hSCvCoyztxAkrvoNNU, GS9y94kYdD +Supplier#000944515|PVxDC0,sz4 +Supplier#000944629|9q86PFvcaR01hnKubxQ6C +Supplier#000944645|lt4L w4Qybb7MuC0Jl +Supplier#000944658|KZQuwAJLM3B1qO06CqSWNmkIl0hGXKnUZ5 +Supplier#000944679|fvOClObi28ShqQfjBa8j +Supplier#000944697|PP p FhHlTvzku +Supplier#000944779|TKCHRlbfV,eZGCmXXwcgNhzx6a +Supplier#000944796|nEZ6,voxI1 +Supplier#000944822|fsvCdo6NMYn7FrsEBQgz +Supplier#000944849|J2oVkWDN,ID,rbbjTx D7saYgmou0J6reFZd5 +Supplier#000944926|rle2ArMs2G35VhgyW5GePWkyme6FCgWG9wuQ +Supplier#000944969|iSnzzd UfuijlmxowWOK1 RfJvxI15wxR +Supplier#000945010|51pvQ6UIy65 H17tGRteFIf22MPuH +Supplier#000945152|tnqqH6v82cmUt24H8Z +Supplier#000945171|o4GaWkSdPKi7 +Supplier#000945216|2NlRTaz9i6,zK9876jERo8G +Supplier#000945253|Nk7hWnjBqbKnD0RsBNEvj7fCnl28N0pqrsGF +Supplier#000945296|DdNeVRVp 04 +Supplier#000945427|dS13cXiauKYGPxpzk3j1,Q8dNpqqdo +Supplier#000945461|rWRxYHILv68bJMZZAKkO5BtucE4W +Supplier#000945514|EfoISAdSUIJdgiRpq4wOc8NBF1y7RJ1oU +Supplier#000945704|qgNrj17QFAU 6xiJq26OR +Supplier#000945880|wM4wv8b 5wIzBulvF +Supplier#000945986|r9vn6xuzP1RKygggK2lDND92Jd4TLR +Supplier#000945991|6o6CZqjAWdJLd1q +Supplier#000945993|G2Yade59 SxhWcPwvTxJhKrV3oxpaBeSePPUE8G +Supplier#000946020|wCwyWY1Ezz731H +Supplier#000946049|wh4wc94g2UvcM8ZGz9KLclTRIpw53CmlZqrFXnC8 +Supplier#000946064|EYXN6WCvCJBmJx5vwKjreDZwt5MPu,iq6 +Supplier#000946070|tBo1oYVqzjihLNVA6cyBVLmos 9620jg +Supplier#000946151|KC7BIv8nrQw +Supplier#000946152|DhCB,aA9kQMl0wZpVnU6o9CR4 +Supplier#000946406|ud7kWZVzMuVJjgEip6JUoXqh +Supplier#000946459|qK0eYKlA Fi4N9IBK3WzaMakFVfPnmfR +Supplier#000946602|R9hZiQFLauc20Orlm,dJW64 +Supplier#000946611|NvdOJNBotaeINDFji4sZZZ EXxboKa9tTRvRCIz +Supplier#000946687| 6AjH9RxP9D9h 1UITjrMbsj3DSleB6W5h0wDz +Supplier#000946786|z1QIvHiH,Wdvz8jbRnvGWrkKWxtNv7vkAXH6 +Supplier#000946887|JihGVIEeaU,wIdItwPGGjUSE0VIClP19cMpNtm +Supplier#000946942|YLFHmKhuiHwD4dCWWDWptW +Supplier#000946958|mM7088sMTnTEh,YjLdQOVS7K +Supplier#000947020|Sl5Vq1pNgb1L9xAAzx7AHl7YqqgjiCKKXZRLjv +Supplier#000947037|LXtAmAfYr9dk8Lco +Supplier#000947132|Lp,0OVP4a9r1 UPi9QyTZ9qN2O1NN3a3TKcz +Supplier#000947193|QqqSng5XVobz9Tt +Supplier#000947201| U9hjt4HZY8u9CpJZ8DSakgeehGtu1H3 +Supplier#000947221|vS,bR4t5M8rnjfiSoH +Supplier#000947233|t3xpI7llS7IPs2kyZkvfvNMYGp84uHuT +Supplier#000947270|5okEVn11BT8O +Supplier#000947319|ge15cQC74Vr6JIfHXoAKsDFV36pxhz1,5 +Supplier#000947372|C KlnEIS,e3cQ,B9WMD4,1yeMHKVa +Supplier#000947414|PK5aqFUhGfL XEJZoo +Supplier#000947463|mDZA6WRkyvY3BjKeEpL2v puPzPYcr8bO +Supplier#000947500|ajGJOehQHBW2Zo7qBOdJYnJEG2Mnhq7VdT7Jn +Supplier#000947543|i,mq67t4bPC7XZ65xNtVjzgY p +Supplier#000947683|kkOjQzYs9zKYEk7Zjlo1C1K4tq +Supplier#000947851|sxwR,43Km3kmdt7 +Supplier#000947855|GcFe983BGDE02lgvLR238zRUyNk5 6fCmNI +Supplier#000947871|hmuxN0NFDPidPVzYZ +Supplier#000947900|HE WbBY1m9kpmtTkal ztmaMpQhhlY +Supplier#000948084|inzleGoUUYw62dKExXy7MDD4Fb +Supplier#000948158|CQMaMXXTA5l,cfxiGdsvM7 bF +Supplier#000948187|b51ADgyTZgUY +Supplier#000948189|BBPRgKC3LHt3U60UPULhb9M +Supplier#000948394|UaZ2shTukg9tcUNUeVQ9eNufHBopt +Supplier#000948492|ni hTMclgdmRdKWh9ZtHAFPFNO5 +Supplier#000948511|3hNj6MSqQQjjHzvDB27mK,IXixRXi75zgF1tUGv +Supplier#000948530|l5C9Vp8HRMP6j,gR +Supplier#000948572|Y6RO7wgu60I3,OzUCBPDvY +Supplier#000948579|a5pkUHVq6qnJF6cRNPYF3 +Supplier#000948651|N7DwF,Qm8udMW +Supplier#000948663|mb4u2M61rAXYq,pT +Supplier#000948807|jvMXlVBkDatyS +Supplier#000948836|U102j5aOlNketIVXxtlS55YY cO +Supplier#000948964|jcQB,onPqJ +Supplier#000948975|wAU0oMCCikvuXyAVGFSWuaPFn90HDH3nqWLxX +Supplier#000949019|2HDTxK645wty5U +Supplier#000949044|MDK2l27WG3 +Supplier#000949078|N9jTfmdLI9Ez2fec1uDfomazcGlXNAKsw3AY +Supplier#000949112|XVltwtDGCUTdeO +Supplier#000949168|R4uc2q5aJo xi +Supplier#000949180|r3VGWdAsq7rbL7NA9bYhHW2WnUg9,iHfOp4RPs +Supplier#000949183|SuonK,xjuA S4 +Supplier#000949188|QhPwYvOS0QY1QZS1I +Supplier#000949244|fDsLD4idJarJ2yH7jLUv1oI +Supplier#000949287|tFarDVWldRzGDWEFd7TGCFkJsHy2Q8eBA +Supplier#000949365|AmanFtALvDLQXfH2G8NgEXs3u +Supplier#000949457|8FlU27 GBvqJqVBGYh0S3osIFtjLR3AH47w +Supplier#000949475|T8p4cT2FAlJKr4kd2hioKlqS AT4BjK +Supplier#000949490|a,hm67Dwd5gk7OufTp61 +Supplier#000949604| erRLaPeD fUza +Supplier#000949641|jBngaCsaAg5GxqfZgV0,4b0580opLp9wLnPW +Supplier#000949726|QiKV8AJUpUDKV61EOLH +Supplier#000949728|vwsZxBNnLl +Supplier#000949759|bqSHaYnXacsLTPdJDV +Supplier#000949787|JepmNDXGWm +Supplier#000949848|H,LHDkfBR35l,ORO7XWe +Supplier#000949992|XKNYsiPdqC8Svyl426tmwm8rNXkeJNW +Supplier#000949996|yWTEVnptAeX4KafG7V +Supplier#000950220|FVZUywRwUDI byn0pmdhCQ1O8PBACg +Supplier#000950284|nsVkufqJ,5sAGPx +Supplier#000950286|yeGRWxYRhjFclTRcqL63GbIizVknn5EpQJVNp 9x +Supplier#000950287|xABEDPj9k5A7NoIZACh7Ib PzVvZ911 +Supplier#000950396|,PfvxpkBQkivSx7J2VNeoswDq +Supplier#000950399|7ccjqxW2BAyCu +Supplier#000950403|Ds Yq,6sJuJcMnQQP6UP +Supplier#000950435|6StGoAZMJZzFH6KZIqW735uA4fw,YbHrFK4 +Supplier#000950449|wN36xpQ3dZRSWEnKU8F5zPO7YJ +Supplier#000950579|DGf3KUQabYzcic0JWsZpky7wv +Supplier#000950617|LSaz1J TWV +Supplier#000950708|euHLfaiRJX,,tMNS hYsWyCiv9P4ficgrUP9KWz +Supplier#000950748|KEFHEveUPgIkdwNlwWaDx0FgenSI7T +Supplier#000950753|LOjKH2uXVW9qPtPrw0J2lr470l +Supplier#000950802|boyC9K7XPIFAkoEvdJ6NHJo +Supplier#000950927|,MSj5iyCtAQMsU4mvxPaBwJ6CHJPvn1lhgB +Supplier#000951066|qcpYI8uazlpRKi +Supplier#000951094|5GA Gs7lxldRkLzAsENCbahyA1v98 +Supplier#000951106|HwRHITz5vtC3hIefodqhaNpKUzm4 +Supplier#000951163|1NeXRllNd3p4,spt +Supplier#000951311|6Kf,K7OpY9H7Y1sDLLp +Supplier#000951335|gOdI7zZd3On5DbiC3qbGFiIC0SkZBWOMpUS +Supplier#000951450|KjPO81MHIvGZX6qM3KS +Supplier#000951461|C4WCInWT9fqSJ +Supplier#000951478|iAyRI2TIOdRP +Supplier#000951545|ZSDrpYJ2bEEEUViOPBUE2jP2nO PO BoHO G +Supplier#000951562|YJdmja0DLJlA4pzqRC2dB01KGTk +Supplier#000951572|TMf9zyPQeh4LRnglfaGDfC0eusl23M +Supplier#000951579| s078 2d6DwhvaQ nJqlbuL6tJp6zpsOcB +Supplier#000951623|zG1EuvRlTC0sqNX14OXqUp 5kgPd +Supplier#000951637|ppAxB 6NzYyptV,RNtZgK +Supplier#000951682|,gxqVf8Qla +Supplier#000951690|iAkoyOzd5xgIRGvL5BGQoJMvbxWbW5gzVUURT2,n +Supplier#000951726|blc,B,ef,sa1GUy0P, +Supplier#000951730|Yn4W7r JUDn2wPfM9e +Supplier#000951742|cvJbE7w3t6wr +Supplier#000951781|J5k,8u5FPF8x +Supplier#000951810|HO6ROvlOQ5Sbf +Supplier#000951839|3oAkCOfhzefWd6 +Supplier#000951878|BjwRl,cVtsNJDvNnSo1iixPDFLo +Supplier#000951897|0bPY38QPfuf9JVdHuWGS3CU +Supplier#000951920|jn8hQaKxGAIWED9cVYrjcdXuloRGkL4,n78p7P +Supplier#000951978|dKR,X4XC, lafh0Ekz JQY4T0pJa +Supplier#000952041|pPYnyLnaG359A +Supplier#000952242|XBb,Ph3w1XwwW7J8il +Supplier#000952364|dbwePoMxzcoKIU52nRqSV,rUGIQJC +Supplier#000952365|kBifC,xetwiI +Supplier#000952415|zo5G9bzMihb1c +Supplier#000952459|bCkyomKYitwRsjv1hKYH +Supplier#000952486|nepKamjc9 S3KYECRvhjjzZ3of +Supplier#000952558|FEbBDTCEY2wHDYbm +Supplier#000952633|u839iwzAl6wQdUe35twj92r +Supplier#000952659|mdHfsm6AysgUCXX6 +Supplier#000952777|4l55vcdvVKVK3pDxZsCc,AAFcGwsR3q7 +Supplier#000952847|cznkcT0sPT0FIDi +Supplier#000952881|kdcr,C40zY2sXCN +Supplier#000952941|iHkdJ4dXPHIPdJ2 +Supplier#000952983|Dp0CyGxcqMTbyfmLctq9SC1F2hAcgF3Ffo3L0G +Supplier#000953013|j,pRaQHYylO1aUg2u +Supplier#000953051|WGVSSA5BkYmQ4uGU0 +Supplier#000953156|TS4ZszeJMMLNM +Supplier#000953204|uXhQvAGvWwq8LXCOQL33FI1fh +Supplier#000953243|vsUHgtRExZXUsQSqMRUQKkHuHUtV +Supplier#000953424|yJ86CeRRtXUlsJ4rQTk0r9n +Supplier#000953533|CFQ2sB brIEnVWXjg +Supplier#000953699|JShuifV1Cd +Supplier#000953763|jWzOwTYEv4E9V5l sXE2oSL0l +Supplier#000953973|da9a6zDmGhUBP4g1CjjyZYG2Xh +Supplier#000954026|quJda6mQCqAW,EiPnSjjC3hN5D2btjB1xZh2 +Supplier#000954045|,AA6NbFrVvuOyQEq Y6HE5CioP3Wm,GeD +Supplier#000954055|gU4UxiunPjDMh0tTV,WOGN,ehSwmiU31hm +Supplier#000954082|hw7dwKlIIk8 +Supplier#000954179|IsMT,OOH1mh3nuo nrScDcbPKM1 DJQdfdu +Supplier#000954180|LZIhunIV1,lPv +Supplier#000954219|IwHBzui1O6eipn0Au1M,n97Wy +Supplier#000954272|ltH2E0abE2rbKLayQwQ4EY9216sq6tFFa +Supplier#000954296|Tlb78MQtOky1jxnhWUaE85ZM +Supplier#000954348|VobO2pLWOd hxh1RadUvEKtMCA9bVJNO +Supplier#000954360|QAjpT,PPCY7eayA w2FIVJTTVaVCVLsX +Supplier#000954468|oqY53hur2iFFGX +Supplier#000954560|J9bGI2LDY mHwoRiTwMu6Z +Supplier#000954564|d6FiSFP6I4zeLq +Supplier#000954614|J4KhVU64x7tQKYWHd0tk5bdzcNCooM +Supplier#000954635|MA9gVGxw6CrOG +Supplier#000954750|r,Jsac jT,ne6qrzQCoyS0w5L +Supplier#000954866|YxXt3A V2IhgvzoKiE fAkSnwh601rNhJ0 m +Supplier#000954967|Vww0NX5zqzeoIQg5COv8uzrFobh2FJ +Supplier#000954973|KAqh3FzItiugKBTqFf45yvbItZp8A38Lr2c tW5j +Supplier#000954982|W0od5DgqtWFQ7rDQZu +Supplier#000954995|,iDak4bksOZ +Supplier#000955060|Jh5F1raLficx3MBRA1jsY1V687e +Supplier#000955111|6 0TzgI7s9qr +Supplier#000955114|stB6qCpYtWMaiCT0ZakkZuycYD +Supplier#000955221|NOnYILIwSf6XgL +Supplier#000955307|oEVZrlqarC,kbbeu9PbpXozGIAlIq87X,St +Supplier#000955397|4koqkkgYBrQH7wjj +Supplier#000955444|fxrdJgcTQ8TfpSXjW +Supplier#000955480|oXYmw05W KVCxm9Q6UnV3 +Supplier#000955533|ONpZO1tJC8 +Supplier#000955537|bHB8rnPqDL6GKq6P1utpe +Supplier#000955668|,dTF9eKwhrN0jHjbRPPluKZxzuWBzLdFe4nfGI +Supplier#000955678|THYpz4NmqS7FRkFqJKtak34w9Gc283VUfUN4 +Supplier#000955693|2VX2EKVJ86ep2 +Supplier#000955716|uqClZu,rxudxWYuts +Supplier#000955760|jzE9EjFSZ LN7bVBiyGZLU2Vqtzcg1f +Supplier#000955835|pCW4sQfB3jHh9MlME6Wsw15gAW6en +Supplier#000955883|cOiNIfN1CNhHN5CSS9 +Supplier#000955890|zrAux09BSB3N81iNmfEDaWF,A2dmxOeQWdVZBmr +Supplier#000955978|ei0ZtkrOX5HLbAy4YxOi1cGpqM +Supplier#000955986|MXRovgDg6UURWTqUEcKt3Tf l4885yFr0pL +Supplier#000956037|CBP6JFIaw1 +Supplier#000956051|aCOAOfwOkdNxoxitSfLXCwKmyzG +Supplier#000956140|eFSjHstMYl8hF7h +Supplier#000956155|IO8XzaT2I5NlEeT8Pqaef1M7ikKWpQ +Supplier#000956205|bIlmQ9hbuYUj6x,mz +Supplier#000956216|XLRQu9vL0hon2YtowbT75iAlND9NM11GYDTP7I +Supplier#000956221|,TMfMJgKRB3OiQL0YsrWe8rgBkBe4zrpNlGGtQ +Supplier#000956251|D8UPxM5989TsbbUJJfHB +Supplier#000956254|pX9ZOaSlA7YQ9gviBT8b8rf7aCBs +Supplier#000956548|prMotxZgskmUjJaIpVF7tbRemAtXQkCdZoyk3 +Supplier#000956578|QqA2 fuELytX3rlCfUDQ7XQg6 +Supplier#000956607|P,UbQ7xDG989ftxxoBO4ZbL ausnFUA0SN +Supplier#000956673|Q TRwItg3IRLEo +Supplier#000956743|60PjBzU7Ys2l +Supplier#000956810|uSbehCake 5iKhGQSQn,k1q4e38fdChsb,4AZG +Supplier#000956843|,2P7pfAZPiMH +Supplier#000956892|agQiiDnBuf8E6JHCfri,Vf L,9bf, +Supplier#000956910|JRUgOdji9sFPM aBqYn0WMi1k1BPFvTk +Supplier#000957082|r2s3dyu2T1SU +Supplier#000957304|Ya4npwgr8TFRbJHmG,FkP8gTBsvWlZhQ0VLHC +Supplier#000957384|cs3RvEkw1HjQdf,kiEUPJJ99e3fcq5WC3 +Supplier#000957438|g0w9SUqzOv,KGqrD17nXxJ,Qo5fhN +Supplier#000957704|e9k0H7p4F6eewChZATZszWY,5DLwwx +Supplier#000957755|mvoz4KjfPCDLaw74GEEgUcJZEa +Supplier#000957760|4NuAucSIR4hVS5YH3Dt +Supplier#000957769|zv5qnFjyo3y1opwbaWOC +Supplier#000957771|JGGngVxDgWe3 3dCKbLynQ6srCBE6N +Supplier#000957784|pUQMj70Q06VY +Supplier#000957796|S9jULQJ3lnag, +Supplier#000957826|zk53HHdoFtZtQXzyeiYX +Supplier#000957835|qwuXdtDgK4px +Supplier#000957871|ABteHAs10angVWbOzw,x7Kr,HTROc6RT +Supplier#000957884|hXN9dmKLw7P9xvHZhpW8 +Supplier#000957919|onnyWMpYAYehWvWBID5Yvjv6j5pR6dXaPQ1lm n +Supplier#000957963|pyez4SvGZZ1E,gZF8LTw4 +Supplier#000958056|mOVVt6n4DrlxdhSc3IQ8smw9fsQBe9jytTqJy +Supplier#000958063|knR2,y6Bi5 lYjm +Supplier#000958354|lXh0H49WCYaWcs,z4767clYFlMJ7g4T +Supplier#000958362|SHx2eC,dwU2k +Supplier#000958431|mq CW156bkjRhEIelbeOCTN1gYINp7nY1m +Supplier#000958441|f388gyXbV5Qg5 +Supplier#000958571|Fb4hzXaixm44UFZ0SrK +Supplier#000958575|hvqlzRM9vcQT219NTptMfWhUwWBtiyBp +Supplier#000958605|5hCgdgjRS5OqUkdqyH +Supplier#000958621|IvA CVRGNTSIxr6IjiOB1uQcB +Supplier#000958778|EXA0aPaqIx9BgOrP1jbNWD4 +Supplier#000958849|P WoBLA35tVrKMqhjawXNkdMx3vfy1ij g7SF +Supplier#000958871|TVzNI4BWRT5pasxYS2IFNbQdrjKE9 +Supplier#000959130|owwMyY5nfSOawUyZxR +Supplier#000959137|pBrYEk50r3whQNCs,94mD2Qrt4m76SuAPNB +Supplier#000959265|0z8VqwfyqoUhnmw6isWgHbm0F,Ao11N8xxiMGb5w +Supplier#000959287|qsvN1PRuvN +Supplier#000959309|bPR AN10SM4rnDyvZ4vm1IQjWir +Supplier#000959323|8LicxZ8tgz7qvkRIj3 +Supplier#000959448|aPvowyLVa17OucqkH2H3L,2SyMtPOArXQm +Supplier#000959484|gUuWyqwdJNVOVs5xfloIx3xNgzMy62X +Supplier#000959526|JXVoaEHxwmtPkMSpxuiVPzkdaW4biLk8YqPKCjGi +Supplier#000959539|k525 dh2BA +Supplier#000959589|o1y6reYnggbc +Supplier#000959683|hueealnJVtb9MADZVwcmCw +Supplier#000959741|DPYYkHy9Rsj +Supplier#000959829|p6lkMJS4MhuQ4RJH +Supplier#000959850|jaJp5FeiEAP48NXHOGBf8blVSAkueSRMKXUNic +Supplier#000959963|VWXS7OfqzR0aH1dJwRNRs0c9 x6aLDInR +Supplier#000960018|XWWhfdHWiKgJoUkWpsbFvGsgzeywrP6RWXzqGW7n +Supplier#000960052|f5,rlrlViD7TglZtU232SNYIICFVZ18KdwMK6m +Supplier#000960143|JEPk60XSe65PK3HKFo1cBT0 +Supplier#000960150|2tkbgqpkDcLks4LSGeFuJVyRzAfGb9Hja9ppWT +Supplier#000960226|ix7dluEQMCUm +Supplier#000960312|kN5zy4Ew4IUQ0oWR8c5vZvERbpJccX +Supplier#000960331|DJV1MYJGAJ3TV,EjQnZgp +Supplier#000960334|ptGvLJOPdfznXBSqqdSjUdkz7y6eibSxlQt1OMDx +Supplier#000960358| wExGyFErhNIyqP0hBiBzAWZt9b4iU0ub6S +Supplier#000960470|KnNXvvXUfkKtYUsXscXTo55F +Supplier#000960691|pIULszZ13JOShXtwKkU0E18RdpiCQ0X ew,9ea +Supplier#000960717|o5Hry GVll1F8AJufl4q48kBC +Supplier#000960738|KaYLA7affrsKFlZgAjbHHFu3dB +Supplier#000960762|v4UZyYObYMY1XDVNQ +Supplier#000960860|alqdgmmFYMVhjXS795 +Supplier#000960910|PxjJ6NKmaFZ9vr5V +Supplier#000960941|0KG pMw6pL978YfdIbtYjNfIVlnAc0cchDDZ +Supplier#000961101|hAbF,hpG7u9YTkN2M3UbVv3cQMDOFLI +Supplier#000961111|ZbA3PAMGqoEtEt7i9COVWhVH7LHTXyYTLd +Supplier#000961128|PSjdDbbCt,USDqUQiM +Supplier#000961333|dYRomai58qHQzz0gVEoVyS +Supplier#000961354| vDYS3tXkq9TNfN FRUhZWA2LlUDTTOMF +Supplier#000961495| tMR2NuaSYHutxxAUB4qlst3LHPYDs 9o3 +Supplier#000961503|3x68U1giCZnVKEZSMaA5YIGMzTVOfcgxFbcK9 +Supplier#000961556|6U1EpgbUKAwCXf4ddESSR6eBQSXD28kz8 +Supplier#000961611|gySmBsB4i,U4cRy +Supplier#000961817|6bcb5hvQEYRCCtQA3igQ7qIQ6jNzC2X +Supplier#000961980|t,aN0hqt SGrwC7Q83Rnd74NNqi3mUvvoUdI +Supplier#000962101|d7EY8jUySOiqTH,YN1izSXJljcSLsLIjJ +Supplier#000962128|G,jDirrRqoz1sbOlSrH0eIu9lVyQuHVbA,ltpq +Supplier#000962302|rso0blgijhBx0vvL2S +Supplier#000962351|y2yoPvtajmXD7w20IhR0Ks +Supplier#000962431|qCnyE4NJC0IUsJ1hvS +Supplier#000962479|kc08lQ6 FDJrZK1WjzPt +Supplier#000962581|Dvgb1N3xoOTDEhGdBLdDJQ3l +Supplier#000962611| GccDHg7mreeNccznPoMYgnwHuuB +Supplier#000962692|TBbcRjGfXTp,PTkpHQzn 9tE4MpXA +Supplier#000962726|9Y9Z,J9pDr1baAcJgliNc7rdHk +Supplier#000962821|TnoYw3VDbnop zMBm7 +Supplier#000962873|AhOvAuoei2hRYZ,DISzL07LWrja,m +Supplier#000962891|QyWQ5ArUCld1XqwK2z72icA3 +Supplier#000962913|YcmTqku e37wmcCGubEsZD 524R2p +Supplier#000962997|ZfRGsDtsOZePESS9Wh6TTJ5dUvEqss +Supplier#000963005|qwzdQkXmCVswVUQE7uOW,tHF9evR3GTI1q0YdR +Supplier#000963074|WREGNWCnYA88T6nA +Supplier#000963201|882kL,fAVs1DbcssoV03zF +Supplier#000963267|YC4K12bqCLYt8aYEWOQK8JPosqP, +Supplier#000963365|XCMSpENK86 UrZy,CHgVecXRR5xJTlX +Supplier#000963539|ZU17xIcv5YKV24HmFhqqAI7kFFE +Supplier#000963543|1Pb7XXIaK2bIACLs7WuHDDxR +Supplier#000963708|TkZ4CBhvbbpH72R5 +Supplier#000963763|waOU3wxaG,8tAowCA +Supplier#000963787|mAogTPCTCmqVx64gaMOerhYNXv9JTEP1ZuJnxh +Supplier#000963871|,4tt3N6a,G1iZRmwOItZEoMCITn1qCh +Supplier#000963924|KaydmwIO7X9IQsBG +Supplier#000963942|mnfIKASZthHXSDonUyXl2P5LeNqA6SxMtcygnSuS +Supplier#000964010|kDiUEsQrb4XnL +Supplier#000964011|EuICVgpboitukob1E9Evx6OyKY +Supplier#000964056|Y8nh0JbLjfK,nic9H rI,f70 zRUKptp +Supplier#000964081|n24sIf39D izMwE8x +Supplier#000964121|lgLTZ7,j8F0xATH5 +Supplier#000964185|47Wwv5HX2,Hp +Supplier#000964186|yQIzn3 5q xqZFZHgCH7ByfVknn87bO +Supplier#000964200|jTvvUxWVHZ3rCC6I1NxduKvoy8UISeo +Supplier#000964207|ZOzjjo6AxQKULl5UObtm7K +Supplier#000964430|kldiJ9mpGKjS6dIkW 5dlvm OUL0 +Supplier#000964436|DJXEj0RVaIGmXye2kBnVhk +Supplier#000964486|CGaDQNX3d7z0h8SroDFrxmDioXAMy4cXz +Supplier#000964501|ioxN4NDKrK572WuN +Supplier#000964510|8VpWKdILgpL K +Supplier#000964521|eGDUxoNLDBcf0 q7inV ,SlTqRWzT1MAT Hk279a +Supplier#000964523|jlC5I5dbstsoo2 +Supplier#000964526|IOAx7SYHf6l3EE5obEr +Supplier#000964539|P,VJfhke7GOkI0R +Supplier#000964561|NyIB9bc92lR7sWA17jms4lqPzeqkJoz8PMGs +Supplier#000964616|jwIqOna0 GHVzBW6Oaybk4L1VfnZQx E8cAyXtO +Supplier#000964674|02Bp1SgniDuMf +Supplier#000964679|ZeQ2U7PMEm2cJ +Supplier#000964715|DSl8spB5CiqlAKmOgrQEdqradeF0 IkziEb5MS +Supplier#000964730|DYDSKTTiBXLUpFHT7eTOzIS4MkFt2R3pkW02D,C +Supplier#000964755|LtU4mylPew9p5ijmQf6Ncb3D6U9Kp,7tiJ,0s +Supplier#000964766|rWk 34V2PTjD +Supplier#000964770|AczeqmZXXy +Supplier#000964792|VMV9AT5bGfilP +Supplier#000964914|wJQjzXt72K3o8SkWEATpnYBDrIrXe5tkhwn +Supplier#000965024|dfnWCQLqjmn +Supplier#000965039|J9jAZJix8Qmu +Supplier#000965060|N,Kr5VMopVtM +Supplier#000965113|WdT2azlgUUqkeMFAfiC ZbXC8uoGJLgiD2Nqeixg +Supplier#000965116|lN6ESgueQblnHG6wpyfX6uoikhz7oCsp1CJ,F2 +Supplier#000965132|iZCvwDGlVg +Supplier#000965157|3TUqK7YJk2l1PRiNrbnT6rJWeBBfsB1kx53f +Supplier#000965191|dRfmbcCzr,L5cAtXXV9hLjpo4yJjuyL +Supplier#000965193|k10bLkhsNomh9uBlSFkRfrE4JZxNq6XIRbAaSs +Supplier#000965311|TetAs4iLvLf,q0zY3lK39j +Supplier#000965339|aIjyygCV vyrqs +Supplier#000965417|DlCm4j4wPeiWahYFMncDn +Supplier#000965452|obyzwJhs jbKMY6j3tg9 +Supplier#000965515|8,61Z7dIhlVkeRsQ9nHzx6nPmeR +Supplier#000965586|YGQQNNbIAoVEMXlGJ +Supplier#000965592|iMwXLHlM1zGt +Supplier#000965610|oM,b27q,nsuuycwDtNMXnO5 +Supplier#000965650|QNdVLEwwX7i,rYyHn81Pye6YkIIiJTOTxP4 +Supplier#000965675|mGD17PHexZYbsr +Supplier#000965686|F,h z S Mc9EW8KcrNBiNl448khRf zAY +Supplier#000965720|wIAVT Bj5ya1Suv,Hj2xaob4A +Supplier#000965722|VLrcX9ecfATE +Supplier#000965746|igZY0YDACinhBdq6DrYDHj,xsm2c +Supplier#000965766|GeKC7QdRzkN6HNhZoEsmQKsUXf +Supplier#000965785|mUNk3e7M1aq5x8mgsjDmb +Supplier#000965865|Ad7iLBi0 u7m8GMK4DsACsRvcFwlj +Supplier#000965945|iqD bI4eL0haS,RcCFJXVXqT2gEL +Supplier#000966045|9qnw42Zjzf8v7h2xNZ4t4S657hdDcev8PimDNwT +Supplier#000966111|7Zx6bmV,2w9EOtOoCX o +Supplier#000966114|6llB KAnGe3WT,uJjtYrHhDrD4g0J +Supplier#000966226|dInhO7qxDmHigtGhYuxfwuI +Supplier#000966548|8SZygPSZEihyQYe4YUQg,7j6XHHn8qrcp7c +Supplier#000966590|k6528FZX8qx0I5 +Supplier#000966693|MYMY 0umcsQbxwK4LHF4kS +Supplier#000966706|vDc56nMrTZ1g15mdCnb0AaVAEbjOdydSNqm +Supplier#000966728|O3TqeFzISO0lLsGs +Supplier#000966747|dI3xSPylkaauGAy3r +Supplier#000966888|Eqq CamblbEREmBGnd97SG3m3o +Supplier#000966979|iEifwqWpEfgc2o2C2vCQ41F8k3J,hI +Supplier#000967053|1xDa5wrTlGJc1m, +Supplier#000967150|RZ pkL0PZ8ZiOcCwGYNinaIz5JH +Supplier#000967276|pBmwpzzXe,n1v0Jqtvi1vpz3vB +Supplier#000967449|TcVNQvPcicplI ,FqeY0SgXkeVTKttN3a +Supplier#000967509|fNkjVLTlSD5pGktwK9fx,3s7iSYsqvYRUHr +Supplier#000967535|wHyncb moVuXRdhVg4oeQcP7iNqnt2w5VL +Supplier#000967630|ORpC7Hq5SXZoCKAxihhWI +Supplier#000967673|yyy5jTQqMjHIV,m,HPjGzLkQyNZpuxs4UTS1b0j +Supplier#000967804|E5RIfyQ5ngilIYvzGLb601Xs +Supplier#000967866|8gw4IE4JMUxx6VKp3d73Wz +Supplier#000967887|VHiWy0WfH0qZe9 jGEWPbSFYs8A,27 +Supplier#000967899|qpijVLQh4vijYDs2qlV7sjCbDOO Z1s +Supplier#000967957|fwHODSm6Hvx6u +Supplier#000968047|8J1dzp2WZM5tP13 l2RiB7IvHsCB +Supplier#000968137|xC91d7EF4EQ4lq8ReEkVS1 +Supplier#000968146|7OjyXMNmYlVeJHzAFdxQm8FbAHlR +Supplier#000968158|l81NAjgO6NGn0ZnGhbjs LgRK6w2GihMXt bN +Supplier#000968240|wF5CB1cv0zrydZkNedltEDA5Hr1luKaZGy +Supplier#000968241|WtM8rDDERs rHKjLRXXh5seht6xLBm2t3f +Supplier#000968266|GA6D3E6fqo4GpPh,bX1o,1N ANn +Supplier#000968273|nZrVlZRl8AYvn MSM9n +Supplier#000968351|0d8kSvHfR6XeGjfYdwZSk4PZ +Supplier#000968386|Yc1 Q4lNS5upU1YNlj8YcZ0ff wb8LGLl6P5nyXH +Supplier#000968390|SLZ,M6yiWoN8T,ULXd +Supplier#000968528|pGnkeCf4m7Qpv +Supplier#000968558|oPaaLJL3vZy3Oke6O GScyEck3FjK5V89ja +Supplier#000968574|48TXEwDeSMOhKzuMBGkW 7j7PREDIDKV7fDcvi +Supplier#000968604|hTDMW,NhBD,kCbs +Supplier#000968653|TSLUcBIxhlO1d +Supplier#000968677|E0queGHu0jwVCYy +Supplier#000968866|QWILGoTYJ6KSxXn4cRyo6 s4CPObE00ujs,akIX +Supplier#000968889|HQMZ ,4diyJ2 +Supplier#000968895|ou6L3DWkPcGvR 1roSyP +Supplier#000968911|r9S9OIYeMyLWJgKdreljTtc,FCTXyU83Vy9L0 +Supplier#000968998|1EbCvM93yF7VVE +Supplier#000969009|JKEYGeOOtbnXhe1xZ1ad +Supplier#000969014|jur9B9xPdRIMHqC +Supplier#000969024|60pErGzF iCq0 qgJc +Supplier#000969038|L,FO0Vnbw1r3OaEVW8AiMAJdnvm06m +Supplier#000969072|dshdgbW5vdnxRcwo Q1fLXAqG +Supplier#000969076|xSOhWJPUb2Pz5Z38T1BAjdYRAz9N33 +Supplier#000969093|Ihyxhn nLY1mhYDDPIlNYuqP ILSm0tYodR +Supplier#000969114|WHc9NQwFBddqjB 0n +Supplier#000969138|bxtXypnOGOhg5ZOZ +Supplier#000969255|CW8i0m,tCr4zBPpq 2S47QD3 +Supplier#000969423|hen9hQTAMM +Supplier#000969446|hxoDFPe9,iXzjh4DI4Ds6uFIv1Z7 +Supplier#000969447|L8x98Y51tWtj6a13CuY2UawM +Supplier#000969514|NW2Yp10 dJqA1EG +Supplier#000969735|LtC7ApPRcOAYWfQNHEbHq +Supplier#000969790|HH9w3jxTiLFCMTJNBBJ,dnk +Supplier#000969824|rmGLMRQg8B86IZ3mF +Supplier#000969829|MfnJ doJqbmlm9nUO,7oeKk6sv +Supplier#000969880|bQlacYS0GKZl +Supplier#000969911|UZZY7oZSBB8zwQF4A +Supplier#000969951|hivPLPlU3Dbwi7nrr1cWT8a +Supplier#000969982|uOCylMV,2S6eAvPm +Supplier#000970040|27CTpkjDBxrMFxCRYrCVaDfx +Supplier#000970081|GH8IQoZc7wPljw3Th5S +Supplier#000970084|pwzCy fit1WUPxM qocF +Supplier#000970217|drAPY3QegXLAgBa,QEe5 +Supplier#000970236|FcdWDzYS6kTu6ipjWo wpYXd +Supplier#000970251|DrL8wCFEBrpwQ73XefPZsKtc8TNkm1 +Supplier#000970262|BTpi50etb eH8BXRcmP2,19N0jcFx +Supplier#000970307|sdDMBV6 RNZkl4nqoTXNoXiVhnCI4 lmZBhW +Supplier#000970355|DnhfRYWmq TqrY5mPJG6reRj6 +Supplier#000970553|Xrco4RQZEI lKQGbZayIrrgKD +Supplier#000970597|PEwWn5b7XcUGL,YW4oaOVaRTEAuIpfsEWQDaf23G +Supplier#000970646|Tne4qBDwqbTI6LudcVOF35uRANC2l3B +Supplier#000970652|BX83WjoyyQrjsN04pLBZTE7JOfr7sk4 +Supplier#000970707|3ikNhCUhHPbwOgouq6 +Supplier#000970788|P1kApbODJliVmsapyz4tTetgnQ3JHyNtNOd6lI9r +Supplier#000970962|qow,CcEHgmi,RW +Supplier#000971022|voIfEPcXmsSA9rcjG +Supplier#000971158|A0, D6bPu8nEfnkN0Sd 4oMEO +Supplier#000971232|Qh6vgrqREmWmlg8cPToU3MiLRaWfg +Supplier#000971239|126ZY3n,xY4j,5EKjDMzlDpgZQ +Supplier#000971258|GLrQPUredXzk2a +Supplier#000971348|HO3O8aYXHo53zW4a +Supplier#000971358|ysTXMwegbG5ehioSP8DA1DPAf +Supplier#000971415|1AHoVH LyGsWQ1QaBfURIXJJNOTaGevVbT +Supplier#000971469|3zYAQNm064SHu75kIof +Supplier#000971716|Jb9aeoYBM9,02J2ZAgj6I9zFG0yaQNimDwC1yP3F +Supplier#000971745|EF989I7tyW PjdlL8jgq7GvhJcqOkPZOA83dAN +Supplier#000971759|hg,1im59a8sDsnvJk2w6n9f27L8AnssKtp +Supplier#000971770|jQVdSa56lD8rSKWLfT3nSTNCWQIO fzsa9bv5 +Supplier#000971856|gWNbYACEF MLpnXIfnJAP,t +Supplier#000971952|g8uYbAYaOWyYP3WT c9FU7G5 +Supplier#000971953|FW9EJiNiKUrbkJNx75QwtJUij HoQ +Supplier#000972011|SjaYCvyBuJfqGqBgGUYC3cg +Supplier#000972036|RkIaCg1Z4IyLYVO +Supplier#000972063|9liwCy,JIfYp +Supplier#000972108|RhEvKEwghvsNJ6IBO0E2T8Ki +Supplier#000972126|JhJ2SgWN6Hy4ECH rDiu59vSJcwajIzfeG3b +Supplier#000972155|oP7Ftu7cGwkqZVIp +Supplier#000972178|2oM5LTnvEWwITIcA8Q7B4ZyiiYMot4DmDm19A +Supplier#000972192|8c49GoxdGpBtVGyCLP5VgcdyfCtcRvqMR2hP5EY +Supplier#000972214|qD fGSvNs63QehNYdedbtDPgYFoKIcZqRR,6mDd +Supplier#000972227|iGsw1naHaLQ0mj7ALQUDtoEkIY7o,8VUioWuGDcE +Supplier#000972234|0SlS8bOudYAekjv4q3A9pCOxx1rJUP9gVdzKO +Supplier#000972249|aMSoBabhtd +Supplier#000972369|iDFGSw4X7Hld +Supplier#000972408|fq7VzOyWKNwFN +Supplier#000972472|rdYiZgIh8 bi5yUKXDpA +Supplier#000972570|EpgATnl1R,jhko3PucOBiULieB6lBx5FSKo +Supplier#000972642|eNzeJnpqnMBfYkWSYbvXVQA, +Supplier#000972723|9I2qStbwXn +Supplier#000972754|SxACjMqvL0qWIaZoDdzLytEgKGHbTX6d286xNZVC +Supplier#000973081|x197UiRJi2GQLc5SUuI +Supplier#000973096|b8X72n88,NCTcL +Supplier#000973147|R3DFR3abZOL7,z +Supplier#000973240|TCc4hs9ZeAs xyZGTG +Supplier#000973366|8J,zEsfINGdvP6hkQL +Supplier#000973399|t80fkv JGKJFLi4QuyFqjFg5plqmqPDKvOOFr +Supplier#000973648|TRQBYPIx9z6Z8 +Supplier#000973674|WA1AUoyh5FhBt0f9pHs2Oi0eYZfcKD +Supplier#000973741| ZWmjsRHwF42 +Supplier#000973979|2wMQf1hlqN25E6x8kEdnOOBs0 +Supplier#000973989|hh80xneMWDjhQWCwBiyhN4,24MJ02HcwVd4 +Supplier#000973996|CFiS pOP6P8lAkH +Supplier#000974021|pwfK8an3hJ1yS90W +Supplier#000974064|rBvJdVrAHHmW6rLLMbTuBORsPMGDX53t +Supplier#000974072|6ArDjWNFyuVAAky4H8scYCGIL7DarHqxH3iUnU +Supplier#000974142|4WcOxNsG6dmEjXkGZgbEGyWndXDgl7VRL4w +Supplier#000974230|TZrAlqgtnqXh0460LBA5tr7zmfeYOvq6Bi5Hws +Supplier#000974284|m0,XdlMQ5aO +Supplier#000974285|OWtLIYG35jk7cblD0lqIyAo3tD2 +Supplier#000974289|AM,ZXFDRt3 +Supplier#000974635|gRZ1Ky7svMzq1hS +Supplier#000974656|S29nYqSf88xtv +Supplier#000974687|nXKaAh8lPE9ZJoIUd4nVMJvk,M7Pov +Supplier#000974771|6LSH19WR J2oBjh1sO2NAP5iZl +Supplier#000974776|SAPjZme4o7R5lY0SEMIEp3GaP 8bLu1A +Supplier#000974818|vngyKqK8Tc Nr,E5 +Supplier#000974902|r,n,R ,jQX3 +Supplier#000974904|rwENwJl2NkZ +Supplier#000975007|iocUzVG,x0KgArv8Cem4NJ4nED +Supplier#000975095|G2qT00HOZsLNFSMS4U +Supplier#000975121|ngVM0C9uUNc9Ksiakmw +Supplier#000975134|rk2OpGR3BERJdZ9nW8 +Supplier#000975162|P69nBpgto7o WFC0He1WoL8T,ZPr3KCER0Kx +Supplier#000975184|BGVniRIeO6ahGtS +Supplier#000975198|1QEsVPkAHVqv0Zh0dVNNxBKinU +Supplier#000975207|nJPMYLoXcCZTa6TboVlsRFylZOaz3bLID8hIZ +Supplier#000975237|jSC,ZPvHYQp,nLsyXaH +Supplier#000975316|ZYOEShqqe55MCU +Supplier#000975327|z 8YR4kSlLVcULY +Supplier#000975365|xlPY8Oy0WxZ7Qbffd2HGMSySTyp B23QH +Supplier#000975367|oxg5Iq5LQ,7QvBXU0TLxj1Q5FfZFBw2oZ +Supplier#000975386|rwZKcCHP7bAcKvOcNhzjJoljl2 +Supplier#000975486|yxkUEZ0QXbBQj6jETx3uEkySL +Supplier#000975496|xfdRIa1CfRGr fYaVyD3zv +Supplier#000975538|oeOQVEX7v6B +Supplier#000975611|h9cvFQEoJ EDhchga8GJwfYG,avOvLAuX +Supplier#000975832|tz1g2ip58Zr5P0YDNYIwwEVY6N +Supplier#000975906|zp1HdqiszzNNBpLM +Supplier#000975939|lHq4FqoNYI9NDUXrm95 +Supplier#000975943|Xu5tWyo1bjmOjoO73kTP3j0pLqvd +Supplier#000975953|Y46BFz606VPbW4Z24ti,nJhe78HCgRwrTB63ZY +Supplier#000976063|gjCaMWROmq1RscsLYKF9ov3qUIgDaETI +Supplier#000976071|7ghzxpBw7Qxv527yxnLPYjDM9ecgh8O +Supplier#000976097|yVrN c2E0Uhi,nnCxoHsX6Asb2e1l +Supplier#000976108|aUeZC635U79LMsugdsdnGn +Supplier#000976131|RkZh4HUj6cDFik +Supplier#000976159|Z8oABXwsBxvMeaSnTDI +Supplier#000976415|hOQta8eHryPwPUlWCnd3Q0SRGAWY +Supplier#000976433|EuThjy8S6Y5 +Supplier#000976548|2bgRUdP4hmBKE7ug +Supplier#000976567|z0fQYbBqTBMAxgEOZ7AN9J,iO2FMr1aRkdA +Supplier#000976580|r1PpvTpyHObGVZPI5zyRksLHFNvsAfKBwuNwGv +Supplier#000976587|V VQhgzPEA0cmC9JCEOWJr,RT, +Supplier#000976649|ixXNWXWbO,LfI3r416vFBo2 +Supplier#000976751|6c2YzJ8U9MTcyWsu1 +Supplier#000976852|hZkzoJkHoA2cTvS5jxsk,K +Supplier#000976876|7alP,wVlw7UTQqZN0MYVK68i +Supplier#000976881|qqNMYUzTItHaqwXgDL +Supplier#000976889|cWscROZZ,,o6vPWm35jkmOOjuUnO8 T38G3FJM +Supplier#000976924|FgpTerCCMW5uzqz0,No +Supplier#000977108|7 k6ukGp2eiM, oHzE +Supplier#000977139|Ifakijr eHk +Supplier#000977185|NTmXuXhquXXyw7mXCSOdUppkLSFvrXvdNpogY +Supplier#000977274|Ru6Y6b5eMntXLDZvCnd3u42QGcX NOSwY2 +Supplier#000977348|nLEggGct55XYHRrIgZqVihmk1 +Supplier#000977363|YD,R5cSr2IIcWyqcS7D944 +Supplier#000977371|LCE0e,a6NcV3MNS7FXMPz0oLDXVTLSZ +Supplier#000977426|wS0CES9Lk4HmKMAkaLaEEuAI63NjdITh,52Jg +Supplier#000977580|YzfvhmfIKz3Crh5EfGE bzprXGpAi,3IVrEQ3dl +Supplier#000977881|RO7HP0m1SJ8VU +Supplier#000977893|Wd5zA,dcKvwsIMxOsol51wN7NsdSurs +Supplier#000977948|gFMtNiSfsE, +Supplier#000977975|ypFcx8Spi4Zxt +Supplier#000978044|0nrNn6QSJWwTr7iZ3lGuJd6D4xPXSY3555LuUMT5 +Supplier#000978148|Pzh6AOTkIit,f8Y5myv1q1mP0Pnd3N +Supplier#000978183|V1Q6SIqbgyHAiB6EmE +Supplier#000978194|9I4smP7InBIVxartV1 +Supplier#000978224|RdPHIFYw4k4dyHIvRnaa2vCYECv9cPQAdhyV +Supplier#000978338|O,jhcg3nqmJcnr 4igEdKSUNcUMrW +Supplier#000978350|DmWlNF9PlsKJkN 74ZxrK2FM +Supplier#000978445|ODgFXxAbSYl,H3BTMGrm9nS5 +Supplier#000978507|h65BkV7O4sfd dLm4jvVIDt8MeBIuArOgo 52 +Supplier#000978522|YXdKk1A4UWv mx8nq7JJbMusgsx3kCJg3 +Supplier#000978555|RwFrnZPnUxDeqwx7KS768CR +Supplier#000978607|QcpEl0yVoEe6V +Supplier#000978630|WEIzGkutFK +Supplier#000978683|oDZyYUPuIHt0lVrfXHyNQJ,7Sph +Supplier#000978795|xFg5CigermiooX6dIgBqNFhIQ +Supplier#000978864|vP1ZBQ8,fGlNFdOSh8valrcSPgkuwajbo +Supplier#000978911|6 UuPDiUuue8dn3rr +Supplier#000978956|sTbZC4jjyWAUPUHG,YN561sR +Supplier#000978983|CIv4KE06 5pqiB9eNiIAcb5wpWO +Supplier#000978986|xyeGEVwdSmzh,YXq +Supplier#000979029|bjDT3ZT4vcHZeYPL4PDXYof32G2 +Supplier#000979031|Nj27ZUJqKEnghlzOjyBBA80Xhmhd7 vN6JwkMR +Supplier#000979037|Ar91apEGjOOg6GQcKBU8TdPGfjdDtW NYExikH +Supplier#000979039|uz0Cu5qz2mg4mwTZXU2 +Supplier#000979237|Mb1OlAtUW8TM6KELZkth4jGLHhrs +Supplier#000979270|PEUjRq9n9 +Supplier#000979312|RGmAx7VmDo +Supplier#000979314|r0e,QdxiSHhXgwGCI31BLF,QvTCRys,w R4 +Supplier#000979411|awPvU3oFkjMBj4nv0HTGWBPHO +Supplier#000979472|l2fBfOTHR1TsS54P12AwQ4ISsxQfuDs3Ngvw +Supplier#000979516|yj0zn1R9AEepbXrR cko6my +Supplier#000979566|SQO,Auc67oKbQGKM8wrvE,wkK49F PjAOR6EJ7 y +Supplier#000979716|TyaQ HGd 5eWb +Supplier#000979775|z44MVUW7 F3d2wPRYOy8r1 +Supplier#000979851|jVBn2KrpG5By4 7GTo hf8b3GMRyve +Supplier#000979918|VHsmLRpobntzG +Supplier#000980013|,ZiICaCtkDP5nHlc7 +Supplier#000980049|JdOTtEGqhKh0ZQ6I1VI6dulx12GJdpghEr +Supplier#000980057|IUjV1lsm0T05I5 +Supplier#000980169|caacUEaW,C3CDa4odBJ4kz2PDeLaaVRzZd4S5U +Supplier#000980178|Yqr,2Ci5Vub,q3CPM4 O +Supplier#000980349|lSTcwSIaEo4UhYytkz +Supplier#000980467|PuyN6CS9Y15FHFyaev +Supplier#000980562|ojw7gH 0PyfBz28DYdins6QgMrbMDV3 +Supplier#000980608|ijM7u4t1 aquUUUEPx j8z7Jt9as0VOWJy9F +Supplier#000980613|8kq3nuOtO0fgUnbuFmXKEeHzi3nU +Supplier#000980684|RBGdVlBCRupn5ppDt4gaIb242YthpMwziVzuQGu +Supplier#000980700|A2W236c uPkCAM6p6 +Supplier#000980719|SnzBD73ij 3MMD3ii7 +Supplier#000980778|9ylxGM2Vt,4k +Supplier#000980832|p3aVrOm3B5zRnWb6YSPk +Supplier#000980932|Wv9yNDBvHAIvpv76Qmw60 +Supplier#000980947|YsyJtakypDZ +Supplier#000981055|RDO89EfGLCSHrHvywyudGvfTeJO6I +Supplier#000981156|aiR7qHQq03ZW88z9y,yJicyqCQr89EIf +Supplier#000981179|i1bOOf8,i3dA +Supplier#000981223| lhoLc4SLQCpJcNLS8IGV +Supplier#000981243|ULr6E3t5AozPhWN7,15ILzAc4Sqfr5EHmJP9K +Supplier#000981393|,SBkplQTHN7901FMBrcIAFyAr9jsNv +Supplier#000981447|gMnODMS9CaDVjhLq1a5iXSSa8kZ2nvQU +Supplier#000981488|u0tXKXGEAHmTkBjC1pQQdnSZnrbMXYzuLmxLYBk +Supplier#000981496|llIeTtP,yuEIFAT5uUOGWcbU9zMLH5kIA +Supplier#000981556|gdyIise8NOj59eMzAfOTa2h2pL6g7yyLv +Supplier#000981605|WfqPJkNep5gIZU tgu2 +Supplier#000981617|JokmagIC3GpwvL3XcOxOhacdMCuvPZEkxRaz +Supplier#000981642|kuQWA1 Hn4 bBSFcREbJ3DmqRMuNG2nr +Supplier#000981649|LaPpFfqPixLwo1lo81cuzk,XA +Supplier#000981650|fiG8oFi2vejMMiT +Supplier#000981737| 9Ka0AgVz3aKpobs2KeQhPFyLX,4qwmGQmw6 cF +Supplier#000981766|0Ivt OAzLYNNsiqpus7zA2P6TFQic5f +Supplier#000981812|RbmMnZ53UvwxnrZTtyZ4EFld3 WLPzrP +Supplier#000981822|D9wHRUq3KwUMbG ZVry8B4tibCMzgr, +Supplier#000981842|B1EPh1a 1n9,4Zrbh fbMRpY G9ZgU,O +Supplier#000981865|t,wlUChWa1ardksvsph,Hi9M +Supplier#000981982|J3j4SkpUD9YBBTie72zeobR,hz +Supplier#000982017|Sf7lkeumyPkqrWDa +Supplier#000982020|XZoGEonWI19zS041sKW,MdDBx67VaCkcwyxj +Supplier#000982077| sCaHRf1YnmyFipBRzwPTwnCiCW +Supplier#000982150|HhHo344rj9x98DbhkYOmaGlGBsuU8,Bc +Supplier#000982260|7vql0gGxuS DBtMqGCclDCV7AR8,N +Supplier#000982273|UXLCErQ9D9w +Supplier#000982470|9aiuAneBNOh 6kHh7v8 +Supplier#000982491|pNP5r7ZvEm2iNaHQAuq4Fdyn5BrLpCjHxYs,H +Supplier#000982589|SapFGpeRS9Nu,0EWOKu35iHt,z +Supplier#000982662|Q XCbsQIkC2wKgMAl8Fz0PtOc 95qvGg +Supplier#000982694|MxpgCIuQv3B2iltl5DP,Kg +Supplier#000982710|060Cu6HF9kj8 ERHA0ft +Supplier#000982754|ECu5CbgYGfToyywcwQPdGboeJ2DyL18H0lN8g5 +Supplier#000982959|rsoxkzwgqa,vlAQk74MvFpvKd54dvNWCIvwWX +Supplier#000982997|DkZVnL8t40HTB,h2jOXmjxb3U +Supplier#000983083|AM,V1NNR1H66lsrgdRCHB3lckTs +Supplier#000983099|EI5ZgOclexfEkxVdqqP4Oln3w99wBjH213 4Z +Supplier#000983154|7,xSXs78ZqH4 +Supplier#000983156|ZvWFUpccKTXLdGLr0LG IY,btBOCaVNVx +Supplier#000983165|I4nxCOpnNE7 +Supplier#000983167|jhfHFaH8u7J86XVXwtKWrFTKH Sf +Supplier#000983170|No0TrFGHIgT4YLgPOdSCMM blCEbCigFu KmMFK +Supplier#000983262|VFwZAgO Q2TSgj3U +Supplier#000983293|SupMNGATqaTnK2qSGE +Supplier#000983306|ch bABNux0eqTso08Lx8v95An v0Ga80ze w +Supplier#000983331|RkiTiDnwkWo6w06goHIIyK +Supplier#000983367|uPGnvXQyP4LH4F20V5 +Supplier#000983414|uHxlF8hB3Wl8v +Supplier#000983447|3r9gEM8xqfur5PXmzPYh eLO1Xm2ZY0Ept +Supplier#000983454|33Ov1UbAm51Pn,HVeu6RlguIt3W +Supplier#000983489|2P g2a1uOet72gJSNRrP5QCi,cUCpO4GuWdk71 +Supplier#000983498|7MfONNgIMKN +Supplier#000983540|OxHZHnPwv4edmzKp +Supplier#000983561|jeNQloc9ovjRjmYsQpRI8FxVES +Supplier#000983600|6ZchXCoaA9qY4aZGU +Supplier#000983615|Vf2jJDFyO8K3FknNuYLMS5yx +Supplier#000983701|NKOMy8Zbc6 OCrFidpNWWKNUJviaZ +Supplier#000983753|BtgGUvsdLeaKOqm5pA8q +Supplier#000983774|dNHwY7NQgmfYXrw,OS cv2SXB6JLpTGws9QfE9u3 +Supplier#000983911|nyaYD2q6qmvPw8w7ZUy +Supplier#000983916|LCTwVBEiQh3yGP1 5 +Supplier#000984052|26m38K7avBBmRq0kpESaNHTnrWUVFt8Q3 +Supplier#000984177|7cRNslYBPH3QRyGu3DHerpCaEdp8LyxK +Supplier#000984185|glOgUylloGJHab3yFABEov7Ik621akkyfl +Supplier#000984331|TTJ3Bd8reuWb8 +Supplier#000984536|guiHffv8CSyh6B5w6DUnyJ3iuRwMgoGRDV +Supplier#000984551|Io4oqQaRCBQRo2FRMEdpDfxmgeRgP9ZIgPWw +Supplier#000984569|hW6h8kZQM4i31l +Supplier#000984616|uxRrXh9hbRwZp39orJqtZSnmlTEInB93jmt +Supplier#000984651|YNbBoDzNzjO8HMr +Supplier#000984669|u7oB nyi7qUZ,kLTduJqgCg1yRzRMTpJ0KG +Supplier#000984688|IxX7BX1VCLknkT,f8TGuptYwkDYOGr +Supplier#000984716|ofr8RGm EuoT0aR2poI,W +Supplier#000984782|YRexN7T45QuBJ38PwT2bmeM6yoUJDvyeuO1q6V6P +Supplier#000984807|wJWckg2Oognpk2w3 +Supplier#000984959|CZ0dDf6WWMURAsK4kOpYJCtN2LBE0icH +Supplier#000985006|L3NDrXFSMN3 +Supplier#000985055|MB8WQN,,gXqyamkU6kE8uPtvpABZfmcH51Zz +Supplier#000985057|xISOJsolGSBm8Xk70 +Supplier#000985058|nsgjmM983rmqYhidLjmF70rt8C,UtB,HNDSy65rU +Supplier#000985110|rNpecyE8mqMljUFSeV5J5 +Supplier#000985159|eqs6bjEEe9PiuqBv v9N5OE1rvtA7f +Supplier#000985252|3YO2S4jDp3q6BA,j +Supplier#000985287|POhBdTW,e,aP8TWXDVij9clAcBHEvv4O0,Lf7 +Supplier#000985348|N3tBadlcpT +Supplier#000985387|noaSFXn47XccJd CI3tfuXZUn +Supplier#000985388|jY5cUVYALm2U 2OW ZAEAq +Supplier#000985412|DgQrdfnz,7RSHv21bY0jWtq0wCNDBcWX4yRQps +Supplier#000985424|dvnmtse6Ns7mV0Dnq5q7dtd3jjGN2LsLba +Supplier#000985452|uN5SMTdchVF hvTN8Q,sg1orZ +Supplier#000985468|OndsCjBCWw9bWr8NUFgtOTJN4dB7SBYN4HkCr +Supplier#000985498|tz8 RC4o2bIS ,sd9zGWnK7qEZlCBayyVAyHl3Li +Supplier#000985502|ruCkoFUDaeFxYVb3QhODyV2fNNtq6dmg3gfHwU6 +Supplier#000985541|lmgFgZ6oG8Tog8SyeT7pgRLZzSLUdS6 +Supplier#000985619|PZs,RPYRjhc6z7 +Supplier#000985623|wy6HgKzeEIiEbJ +Supplier#000985713|YeV11AVJzss8sQG,aIJuKDyoWu8UKEWjw +Supplier#000985720|Pj7mSyMCpgFX2sTHLaadOdTfE0 NO8ohezo +Supplier#000985774|KTozMj ss4062ia6,Q +Supplier#000985831|hw7w9aCHih mv15zlwganKVrPUKJufO4A6f4 +Supplier#000985846|vzhyKq3,Kh 8qngw7,fOXge8Gmo +Supplier#000985884|DqU0RvL2BA +Supplier#000985905|v3JdcgunUBzba3zfsvBijdLaVVK +Supplier#000985927| 9q,cUF7HvKvhiW HDLWRvifx +Supplier#000985941|s0s5WAQVYgFI +Supplier#000985954|xdx4JDOAI Hop +Supplier#000985979|Rbq3jjXuh ,GIkGA9YEcwIuUt9K1LxJE3obG9 +Supplier#000985995|bsmmXPb4vhSGX3QoAzQ +Supplier#000986042|mLqVS7kf8ezqHIlbdNFijIzBxPwfGkq +Supplier#000986068|K9uFhTUekDQO1mpBqkQCT2l4z48CN5CxT0JuF5X +Supplier#000986069|UslplDDmgLo38Dm32Kq3QD2Qx0,N7LJW, +Supplier#000986093|bC6sgrrpc4 +Supplier#000986102|HMoft6pzOOf mjC +Supplier#000986154|,R7kfOUTrIBwlXR +Supplier#000986242|EfD8znzB0KMgjc +Supplier#000986291|by0iCi7faF +Supplier#000986303|vc,o8qQEWp3P8C051sWASlwVrNnd3xhfxHhZwNc +Supplier#000986337|463gD1nJsegAuipD09t3Mi5EptR3IO3CkeZv4s6z +Supplier#000986360|tctHpo8NBEiKTR7pOaJugEZmJab6tknsu +Supplier#000986400|UOLv509bboUjGq +Supplier#000986441|cwcx1JQqqPSMkZ54N +Supplier#000986595|sHrcw7KOXwSqpR0 Budd2j +Supplier#000986692|4FJcfCvDLnPJ7q o n 7tIjEvBr6SoabUU +Supplier#000986725|J59Sp5DYOvCYFX6kurRBcETDvxibOEaMJpZrXN +Supplier#000986940|lnPKlJWsw04J6ea +Supplier#000986941|NQXjwLvgencE4 +Supplier#000987014|qtaJSa9NXW5s4knboHpn1 2l +Supplier#000987055|BM8dQCyrWcBdwYaEcimtcvR478qV0bM4AFsZ +Supplier#000987061|NK1qWmIH0LVeUs7DLUUPV4iKh239PnoRYO +Supplier#000987090|lLocAqFZTnR2OfPpxOAwpN8YCwoHeDlhpEFBXoGs +Supplier#000987108|99JiEwNAjOLqNDt +Supplier#000987316|NvgnIQzdIRQB,3r +Supplier#000987355|RRdIqHlZhoWaP9oO0zzUt +Supplier#000987402|taJ6dSzY4wk2l2Sq6my49vHp +Supplier#000987424|qyQD8 Gu3svP2J +Supplier#000987568|8FELYTsUbOsyhsUVsH1LTAs0dOKukLxwt +Supplier#000987572|QIOCTtI9Zttr2 +Supplier#000987578|,JSyFZXmqG9qD1n1 GqI5z2BUwKdCPKGT9Bel +Supplier#000987613|8WQrbDcXIXgsrr4QRn3,Fp1JeN2UMnzcc +Supplier#000987664|aleMPmxnFFfO +Supplier#000987692|KHC7G63mauQt9 J8HWMmVq +Supplier#000987810|nJmYrojEqd9vvkghpIoQTH7UGu +Supplier#000987830|ed6Pa1MW9SMJ6JhdFzEyk6zjfAdfBmdxU jo +Supplier#000987856|n2IFzcK7pzW0VZpgW8QmUo2Ws4snLjha +Supplier#000987952|WfXEy3mVcPWoQIFA5AvF2iv4bW +Supplier#000987998|3DRInNvh assOJWVVP70Uo +Supplier#000988038|0DjGgxYKJs3w4QTqDYLTCW192a3dqhOqT +Supplier#000988114|cARstKJw14U0hVDFc2atIDc7RKOo7sDTX3o +Supplier#000988323|5LgEFQb5JU15EjPWPA8ianI5 +Supplier#000988326|Sv HZ9AH FQQeSaA7qqJM +Supplier#000988376|FWUIc,Kz8GTxf kCBbFUn5cdP76l +Supplier#000988382|rHhVcX0EXrU5RRhGz7Spg +Supplier#000988394|OqHMq0ZM7L2okjbpcObZ7XZLcLKtwj hEzNYK +Supplier#000988427|B,1sTgbCf9IEWTyjO7UkKLNK llvW277sxknEf +Supplier#000988535|m218l3eh8Hng +Supplier#000988549|v8GR83n1UdDPdkUYETUGz +Supplier#000988576|wisTTw92dJiheKwskv +Supplier#000988578|dyemD0qW2A02FZzPnPfrAgq2n7 +Supplier#000988670|JyEppslvHulJUoQDYTuuel212 +Supplier#000988751|w1LDZjZtr,1Qms6QBXJ0OETIDCzETEHH7ErQiG b +Supplier#000988877| jvvvRmdm6efHdN +Supplier#000988929|C1iiab1CW6WY 3gUM1xrbDlqZ3 +Supplier#000988971|n LhnM3tET5I9eeeptmBdVa1kioYn,i SS +Supplier#000988985|412K8FmCVRgwLP +Supplier#000989099|2P3TpCMnMgbrA +Supplier#000989222|BYzDwqc7XWPVc5CSYE37j8R1hwoYIWkULiyRXt +Supplier#000989248|GQphkNouoBx41kAF2aAG0Y0LFIykaCMCBo704l6e +Supplier#000989281|o,mYym,twv3GBz7lLN0n +Supplier#000989310|YhIWIq87LqJqMwgdbyh +Supplier#000989318|,2KDck8UqtzTRg1VMWXM8wNRTx9k8 +Supplier#000989339|z7PrFofGjJW9m0MOcb +Supplier#000989377|kf8q,hfKEBYblPqvVTC lM9j +Supplier#000989386|0Uv1uBHNtrwCtHHcwMlg9kZV5Djr22SP +Supplier#000989424|Cn4Rc7tkQaNNFeT8v18kuqnZ6AaDRzq7QIuS +Supplier#000989451|61y0IjJgABKeKa38v6UTUA +Supplier#000989505|7b5I14yFEAGlowwclBn +Supplier#000989600|Gg Mo2,mE0yC2jIYMukzDihvnS +Supplier#000989627| 8YH4TNlFUJ9C1uWfHgUK7dke0AF1sOv +Supplier#000989663|1LtdV2eJ,AbYC21QlMaob6uzPQxFPeI +Supplier#000989694|w6qfqlOxf4OrLQ9 +Supplier#000989747|ZukzMKkkoNjIk1gLX5Ab0UkYUVA6UnnjdNkFCn3 +Supplier#000989803|yCi3dvHber2XhxEI9K +Supplier#000989908|xrUmupQE3f8n4v8i7lNmIRG6W,vJBoSbiYxvxGN +Supplier#000990003|czf7XXyA4iXyXvNayXkzTWL hb +Supplier#000990006|UycTYGAwBLeB8Tga9Ip5bH,txn +Supplier#000990051|Dj5ImYrAcpSzgWS +Supplier#000990116|zer5PvScMX F0 +Supplier#000990255|rddpdW80smiKEDjzb2EobaEW,blNQ7NbmPYi +Supplier#000990409|pvaiboQU0fJjNjRL7s06TtUotqplrQLG +Supplier#000990457|VLESeRIFTTCPJpEI2 +Supplier#000990466|klf6mx B 0Aq1dcT6IJKm1H7iTwnUwVoYdU2wrP0 +Supplier#000990468|NGyOc2QppOZcUdkgnYDc,7CaoZyyD +Supplier#000990501|YHCO Gif,KY,O88b0yf2jdrFX2Q2fEPPQ +Supplier#000990659|LoVKtAAXdhbZNxAH7BgenkKaDJUegsjsqUFApZe +Supplier#000990687|vyeIjkz25aaM9xM, +Supplier#000990723|p8C3EMPfpOjpGaG9A1a1Rw0AKPEPE +Supplier#000990833|0pROlKWvgzi,2 +Supplier#000990856|uI,1ih6Z1afNxqbSrhuzihHPyIoMlWueisi7emR +Supplier#000990874|lrCvzCLVF3BsQHWDUE7W +Supplier#000990944|j0yw5T8X1yXK,nGz +Supplier#000990945|nqcJHMEvYmYMh3K0J +Supplier#000990965|TrH,NKSdJP77GXkfFot9RvYR38ESfmxxh +Supplier#000991106|3iGM1Moits +Supplier#000991176|a,RhHXQ4,5QGLgSZv9xi4XH5, +Supplier#000991187|Ij1MEqCwe81Me +Supplier#000991202|qWVTOjj8WDyR41 +Supplier#000991206|EoUuKpoSKqq7ETfKwqQzawb5wVzF +Supplier#000991343|AVau Gow4KM Lk8fk9w3DUyJJfncf1Z +Supplier#000991486|l2,Pp5h,lEbgxpdckuGDMJ8BLz +Supplier#000991549|i1YZoxkuaXR xwyICjhbyMvSI8UbU87R6yxnLJ +Supplier#000991560|WHJblqAnlW 8y DuXU,hwiU9A2xH +Supplier#000991588|rvdlRVqT9X4PA,6NkbzAwz,NT1t5gnC 981o3K9 +Supplier#000991629|WsxWYkcRdqZdsiFyGpLgpjUCmYWlU6ku +Supplier#000991710|50xtlogu5VN5wcOOUh,nBPzRF4,9Ut4PiIc +Supplier#000991730|xAvIzG9T10 ZQ0IiX1vTRe,Rsq5mn +Supplier#000991839|nwLxFhf39708uMpbL9ueHUbjgzRsqu1zWeP4aH +Supplier#000991921|NLmR2kw jgE5yn3UoSToNjFpYKLPQta7INxJrQ +Supplier#000992030|kOA,5ul6wZPXOvvjXC3rpseJkKj2jSpgg3DpC1y +Supplier#000992049|T KGN6mZqYZ2wFRWnI5jrMCe0VEzJ,p +Supplier#000992070|2Suxjhm6KY193Hrqu +Supplier#000992101|G2Iv2DNqIjOeAm +Supplier#000992158|pY,jrhDj1x6cP9uPXm +Supplier#000992300|MYSkqb80Qv02zPnSZyrDMOH,pcZegCRhJboxI +Supplier#000992301|hXHSzXt7WTEKaBHNmDfrnsSJA +Supplier#000992423|sqAa4VV3CSr7 RN5Ks6nKXh uFsCA9gImqQD +Supplier#000992452|1owNNOm4kImb24M4z +Supplier#000992576|EiXCvah6aNj3 +Supplier#000992688|sxJ9HEqgoJ8 5,z0ZkecoeD 6qhp,XZ +Supplier#000992697|DCA3QeBac1hHXNx0IfwazLNWpyHG +Supplier#000992795|VrvgskmqKJ5ZqL tuAVC zx7aHn2Y +Supplier#000992808|T,1cisLIwlcQbg2fFZiDPr65gGlNsGm +Supplier#000992821|kOokU52fYozAI +Supplier#000992845|YIAY8z07XAuTzkczC2rGJPycaXL2d +Supplier#000992867|bEKfCeoBDn1QyRBkEhPY02V5GIEBasw +Supplier#000992906|IUKTxfxtGY,G6lwJK9f6PAi8Q,F +Supplier#000992919|bjKN,ALlzAAh9CzVnFPX8 +Supplier#000992977|jo,lf356Sn5bqt5zsl4JQ9Yr +Supplier#000993015|QCSR6ntX8OWG3YMKX6jp +Supplier#000993090|KRI4NGq4BP6ZU +Supplier#000993106|f6oDWNahgD3zCc8XXBAEc9goj4m +Supplier#000993126|8ZI6B3QmiJN56E +Supplier#000993127|tKe3wJIikLtMCZwDYJZs8iXuuJPZDf7X6ajTXl 3 +Supplier#000993136|kJDgEQqrRf7T quZSdalcBA1JKS +Supplier#000993163|ANhYdvNWanrq7rTds +Supplier#000993211|PyiVeh PrITcz9AlibW +Supplier#000993212|pVVuqSPZ0JeUJN3CmRT,QuI9F5aZ6sIw9IF +Supplier#000993213|gFH72pndxOfjYXlbQ66WXkSG0htte,4tNpJXC +Supplier#000993244|,dKQC8I23hRNoWQyMhHZErFKt0E1LfCyTZcI +Supplier#000993249|LncBYW,PVTJj0PwE +Supplier#000993325|vKgucufBZu9iGH8lbEqchhuOD4r9iAf7AD0sQe +Supplier#000993336|4JpttTogdkA3QaAOQ,NZV ar2C3 RG2k +Supplier#000993351|Vtyw9RYrW,4OfIhM3Gf1qWEPVxxMJp +Supplier#000993366|g2MlTlG70szk6wzaXZr2pJEI26LnDy02qQ +Supplier#000993401|lIUXtzBMm VW2XoPN4C0XRWrlyNo4rzU +Supplier#000993475|XJ RrI7zDoYHXu0tb3n,YMT3ZOcaPJ85Dy3 +Supplier#000993490|owIuURSk0LHGoEAm0Xgns41ZwHoQaZFdF9fZNF +Supplier#000993554|LqSg792i9uDaOunR1JepZ2EpDF +Supplier#000993555|g2osnRCSGsLg1s4FUnfqrVBdWW1VAN3oiF +Supplier#000993631|ncBK,6NWmHFwxIV3J8W88DPJxoloZeEOnDv +Supplier#000993642|tWQ 9CjieFH0vEd72Le9wiXC05 +Supplier#000993647|rJZuc4ehFrbQ4g +Supplier#000993685|dw3EeYjZm,aVG5 +Supplier#000993711|zd5JnjmGq6K HI7M5AkM3HeojAKhU +Supplier#000993961|OMJpLGJqbQCeqo90SNfEWTcQNfRUbM32j +Supplier#000993969|kXkvYlBHPI7R8HE +Supplier#000994014|enXiCtMTEvCS3XLa72sH MDJQajMlF +Supplier#000994083|nOBvJpXV6J8GcxrDYj7G8KvbdeXiW5Hc4Gm +Supplier#000994186|Pkz 1dFLTAYcuNs +Supplier#000994192|iomzF U5aEGPijpq,8P +Supplier#000994222|Bc15kmTiYMU,bEnz5Vd1PH6h +Supplier#000994245|JiZd7QXAxBDkcQ,Dq0SEzn +Supplier#000994412|NZn bwnFlYmi3E3Tm6uh +Supplier#000994452|oqybS890VRP7wWUQyCLT34KwCU0hC5g41Aasr3W +Supplier#000994465|cndQkmZ68xGaxvoskVZXu5h5I5ER92t tHE +Supplier#000994495|5XGArY0MQ59vMqFP +Supplier#000994521|wzM5aw0 oNSV0ogqBzpiUuYjQ7TXRcEgO +Supplier#000994547|4XEbfTwuNYc +Supplier#000994599|9V PKBOx8o +Supplier#000994661|Inx n5uqSSF +Supplier#000994681|Tfp62r,ngtMajcSpZOYZqo7sqpdtmdDWCg4 +Supplier#000994778|Jf1xYyVaeFEgkkK +Supplier#000994797|WX7AQbrjbDrW7qL4m9osYM3Z8TvQixrK6vp2 +Supplier#000994809|6Fqabz us3x +Supplier#000994946|efq,s0xj3gfG1VjZo1eGLt7fKa +Supplier#000994991|q0CUFR3tNZ1uwIO06JEOZjG7hUx9,RROB +Supplier#000994992|K5CIaWilPfp s4T nsFnNyN,alie +Supplier#000995008|mrRcB50aETgls1 +Supplier#000995077|zuuSExiG CBHe gskzfqdZe4 +Supplier#000995095|0,PgyivdaM8olsLg0PMwjLLfU13tcqEP5wX +Supplier#000995118|Tnixc7gZvUekVkWzAnuL +Supplier#000995193|gZ3senUgnGizamFRy +Supplier#000995217|6,MXX01PFYxAP1R +Supplier#000995290|K8suqY VJK6M,o9eQSh3 +Supplier#000995301|FT5WZHuz6gRlgfEwHpcA7n +Supplier#000995627|XrRVah3AI GLYsYiFVu10wQ +Supplier#000995726|3QL1Ha1XY2bKjsn6Ab3bD XlLzCSlj +Supplier#000995740|4z2EuBM8sGAer4FRHiaL1,1QuRuc +Supplier#000995889|oEChIPYA2J91d0GIVCq2G7GDtjIJj +Supplier#000995989|mGfZ87P17iJ2uIO7DtHE7vjorsvfA +Supplier#000995997|5UrM0DhFjRNeX2AMWgnCWk2weHK43, +Supplier#000996001|WIhhho4O3gTu4olZK81 ZfLwB6QPuzs +Supplier#000996053|peAPWY1DrIGqsIMvWz1ll +Supplier#000996062|2wOI2NNwKaP1 +Supplier#000996073|fo8kDRtl Zhgi1TijK +Supplier#000996240|8MkAOIlNLeIVxOIpt0gSA1DDcMTT +Supplier#000996257|OglajHGLlZI +Supplier#000996362|bXIlRcsmj1,l4F0KkEqCwj5q6X86CGlxoYC5 +Supplier#000996381|IPNblc4Mfcs4 +Supplier#000996417|jkX1ELtS6YCACfm +Supplier#000996444|muI8dF1ZtFJjBb +Supplier#000996474|r5BlUpJt4mwk2qJ02pnSU2wJv +Supplier#000996491|ou343dVvHt9HLKg9lqrJKd +Supplier#000996500|QvJatsmGTG6Ii0McC1L3jbsSTzy +Supplier#000996510|wOW2zpwiCn,TVHez6btR31Be +Supplier#000996540|JA no15J9mnVEzi5ktjhRj6ScBC7qp +Supplier#000996580|cSX4Rgv2be +Supplier#000996613|mSgYwkUTnT +Supplier#000996673|WHTyJspuobJyHm8bK +Supplier#000996752|4yaXgcGSMCWIKjpTk5ogJvIu SOAYX +Supplier#000996886|uPtATnB,URYl +Supplier#000996905|ZnOikJ7uMlHIYsNDDHik0ax7VfYakcq7n95p7qlt +Supplier#000997107|9ohC4XHq4AVfi +Supplier#000997140|vuauG4TchZvAqcnMyHpY8Ox0CddXGWob +Supplier#000997174|jA8CuovWZRr8JT7XYCq0qoV +Supplier#000997184|C0hlkNJUAs87 +Supplier#000997226|Uw3U3IwN9X88JKJ5grVQF,sa22Og47Iw9nLXK +Supplier#000997251|Awxre9NNXtfqgX7rEpUwgTfZ1OQXW13DjBB +Supplier#000997295|rvaFxPO4E7nH2JO8Rg502KQaBQ7 +Supplier#000997322|dWFcU bAsJyY2DjZjIxU +Supplier#000997406|5KCbmSVZK5jdjPWBRcwzj1o +Supplier#000997679|PioJT4aRIrjpdE LnKX1z58XQ,oFK +Supplier#000997708|6RRsZNxU6cjFmICmT0qS5betgOK,PEcj g +Supplier#000997750|3Rr1F2 fSuQb2oYxcPANUl4JDA2kRpASM868yV +Supplier#000997838|KdxgN3sx2g2Xer6I1UKpf5KDKbbb Nst +Supplier#000997925| P Aj72DDLmz5EXPy6M91tyIYx +Supplier#000998007|RrqL64j8JjcG85SCg9EAj2HZ +Supplier#000998032|RTxjDB,nDw6nZPab2A tnjuULE M45pldRD2HICO +Supplier#000998078|Bww46VFhQ9PXsO5 +Supplier#000998195|URYoJdltsuHaJq3PKThu72ndGVkHr1A +Supplier#000998219|c4VH4YPx4IEr +Supplier#000998255|ZTTIrEqURKaC4 +Supplier#000998275|naPzZnuenKbb8qX +Supplier#000998289|RcjOww,kS,xKME +Supplier#000998312|hw4,iCVSSL2X1YwPPX7Wi0lR S506SRy629KD +Supplier#000998363|4c9A35U0gfDNfqRjpWDBavO56A7W +Supplier#000998385|pb06 isLo C5kpxAcgFZ69p3aAuA,0Tb +Supplier#000998481|,ZmOf7RToTYrbTfKgq3Fe0 AAEERhGMBNB +Supplier#000998531|3cEqr4wrRM1 4LcMseZzFhA4FV21ppr1 +Supplier#000998538|r7bWFxrb pzGCQ +Supplier#000998594|MkGbaL qu0eVDk +Supplier#000998612|zHpZXJr5eCOwQPzAVTg8wrvibF7KW nN4j3507 +Supplier#000998641|JjyYb IDXcOBnC70JfDOWGVSdqK kn,7wXr1JjoI +Supplier#000998649|rd2G ,WlhxY ZnhPNq +Supplier#000998806|Lclu8XA9hlcraJaC5HOw48R +Supplier#000999018| FvQK5Rze9ZIeCe4mcawqR +Supplier#000999053|qcYOLiC8bs4A63LkzNPZ5qp7p agxAd49s,oSNg +Supplier#000999060|wo63zq3d132CUaM6zVuAz9nxp,Ye68j,U4tylwoO +Supplier#000999102|1sHEzLjNkqgoxC8KBEJ2f6WKDKw +Supplier#000999326|,,zr9KcTaAUmpHb1JcSSxZ +Supplier#000999337|VnGUdSsjIATX0fs3gO2G8sXwHwn1w,Mm47NZ7 +Supplier#000999483|XU6WZY,sik6pxYU I6cbcz +Supplier#000999500|2m7lg1cIWo4hMnC +Supplier#000999508|PLmOK4dLunC5S4dAvyuSFy +Supplier#000999655|fv39kM82OlADcRcUBPKHRxkw22M3KQMQ46pma4x +Supplier#000999661|GlE2haNVQdO,bw +Supplier#000999675|E4qONdjV3qHOb3URsPhOql +Supplier#000999771|CXBlz MUB,sC8e1 H +Supplier#000999776|h2qm04,8fXkNH0HN,jMGhYjVyZ2,e,PHDeT +Supplier#000999808| 25e,X0DdaP g70en +Supplier#000999859|94DZw9robupm0WZk0VoUeYGDWb diff --git a/extension/tpch/dbgen/answers/sf100/q21.csv b/extension/tpch/dbgen/answers/sf100/q21.csv new file mode 100644 index 000000000000..7d69a52a8288 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q21.csv @@ -0,0 +1,101 @@ +s_name|numwait +Supplier#000747754|26 +Supplier#000458746|25 +Supplier#000571158|25 +Supplier#000107007|24 +Supplier#000410726|24 +Supplier#000084585|23 +Supplier#000112694|23 +Supplier#000142113|23 +Supplier#000152064|23 +Supplier#000209763|23 +Supplier#000388227|23 +Supplier#000407925|23 +Supplier#000560459|23 +Supplier#000694752|23 +Supplier#000703020|23 +Supplier#000729149|23 +Supplier#000891339|23 +Supplier#000975089|23 +Supplier#000000380|22 +Supplier#000035755|22 +Supplier#000164253|22 +Supplier#000297749|22 +Supplier#000345040|22 +Supplier#000377932|22 +Supplier#000408542|22 +Supplier#000418032|22 +Supplier#000442372|22 +Supplier#000511122|22 +Supplier#000625330|22 +Supplier#000632192|22 +Supplier#000818929|22 +Supplier#000854905|22 +Supplier#000904387|22 +Supplier#000026807|21 +Supplier#000040020|21 +Supplier#000045516|21 +Supplier#000107055|21 +Supplier#000114816|21 +Supplier#000115320|21 +Supplier#000138108|21 +Supplier#000217006|21 +Supplier#000218071|21 +Supplier#000218308|21 +Supplier#000230746|21 +Supplier#000248169|21 +Supplier#000296769|21 +Supplier#000321127|21 +Supplier#000381528|21 +Supplier#000429550|21 +Supplier#000464989|21 +Supplier#000523861|21 +Supplier#000735189|21 +Supplier#000749856|21 +Supplier#000797502|21 +Supplier#000846710|21 +Supplier#000852316|21 +Supplier#000876643|21 +Supplier#000940195|21 +Supplier#000977626|21 +Supplier#000004009|20 +Supplier#000075957|20 +Supplier#000100362|20 +Supplier#000114819|20 +Supplier#000149956|20 +Supplier#000162442|20 +Supplier#000168720|20 +Supplier#000187595|20 +Supplier#000194735|20 +Supplier#000218315|20 +Supplier#000218879|20 +Supplier#000227225|20 +Supplier#000231968|20 +Supplier#000250950|20 +Supplier#000258760|20 +Supplier#000274376|20 +Supplier#000286235|20 +Supplier#000318315|20 +Supplier#000323593|20 +Supplier#000326453|20 +Supplier#000343051|20 +Supplier#000349163|20 +Supplier#000372217|20 +Supplier#000379187|20 +Supplier#000392259|20 +Supplier#000398512|20 +Supplier#000414004|20 +Supplier#000423101|20 +Supplier#000435864|20 +Supplier#000444400|20 +Supplier#000444741|20 +Supplier#000478679|20 +Supplier#000484714|20 +Supplier#000516332|20 +Supplier#000520712|20 +Supplier#000523584|20 +Supplier#000523677|20 +Supplier#000547932|20 +Supplier#000559301|20 +Supplier#000559552|20 +Supplier#000599009|20 diff --git a/extension/tpch/dbgen/answers/sf100/q22.csv b/extension/tpch/dbgen/answers/sf100/q22.csv new file mode 100644 index 000000000000..eba13ecc2407 --- /dev/null +++ b/extension/tpch/dbgen/answers/sf100/q22.csv @@ -0,0 +1,8 @@ +cntrycode|numcust|totacctbal +13|90748|679530260.80 +17|91314|685030261.91 +18|91293|684593250.42 +23|90359|677680422.77 +29|91124|683683023.65 +30|91358|685118386.83 +31|90553|678671645.35 diff --git a/scripts/amalgamation.py b/scripts/amalgamation.py index 3d1634399007..eb24006dfe72 100644 --- a/scripts/amalgamation.py +++ b/scripts/amalgamation.py @@ -298,7 +298,13 @@ def generate_duckdb_hpp(header_file): if extended_amalgamation: hfile.write("#define DUCKDB_AMALGAMATION_EXTENDED 1\n") hfile.write("#define DUCKDB_SOURCE_ID \"%s\"\n" % git_commit_hash()) - hfile.write("#define DUCKDB_VERSION \"%s\"\n" % git_dev_version()) + + dev_version = git_dev_version() + dev_v_parts = dev_version.lstrip('v').split('.') + hfile.write("#define DUCKDB_VERSION \"%s\"\n" % dev_version) + hfile.write("#define DUCKDB_MAJOR_VERSION %d\n" % int(dev_v_parts[0])) + hfile.write("#define DUCKDB_MINOR_VERSION %d\n" % int(dev_v_parts[1])) + hfile.write("#define DUCKDB_PATCH_VERSION \"%s\"\n" % dev_v_parts[2]) for fpath in main_header_files: hfile.write(write_file(fpath)) diff --git a/scripts/extension-upload-single.sh b/scripts/extension-upload-single.sh index 306fce6e3320..a7d3e0db8725 100755 --- a/scripts/extension-upload-single.sh +++ b/scripts/extension-upload-single.sh @@ -99,7 +99,7 @@ if [[ $7 = 'true' ]]; then fi if [[ $4 == wasm* ]]; then - aws s3 cp $ext.compressed s3://$5/duckdb-wasm/$1/$2/duckdb-wasm/$3/$4/$1.duckdb_extension.wasm $DRY_RUN_PARAM --acl public-read --content-encoding br --content-type="application/wasm" + aws s3 cp $ext.compressed s3://$5/$1/$2/$3/$4/$1.duckdb_extension.wasm $DRY_RUN_PARAM --acl public-read --content-encoding br --content-type="application/wasm" else aws s3 cp $ext.compressed s3://$5/$1/$2/$3/$4/$1.duckdb_extension.gz $DRY_RUN_PARAM --acl public-read fi @@ -108,7 +108,7 @@ fi # upload to latest version if [[ $6 = 'true' ]]; then if [[ $4 == wasm* ]]; then - aws s3 cp $ext.compressed s3://$5/duckdb-wasm/$3/$4/$1.duckdb_extension.wasm $DRY_RUN_PARAM --acl public-read --content-encoding br --content-type="application/wasm" + aws s3 cp $ext.compressed s3://$5/$3/$4/$1.duckdb_extension.wasm $DRY_RUN_PARAM --acl public-read --content-encoding br --content-type="application/wasm" else aws s3 cp $ext.compressed s3://$5/$3/$4/$1.duckdb_extension.gz $DRY_RUN_PARAM --acl public-read fi diff --git a/scripts/extension-upload-wasm.sh b/scripts/extension-upload-wasm.sh index 9d3df22a3ab8..4311cd0cced8 100644 --- a/scripts/extension-upload-wasm.sh +++ b/scripts/extension-upload-wasm.sh @@ -2,17 +2,23 @@ # Usage: ./extension-upload-wasm.sh -# The directory that the script lives in, thanks @Tishj -script_dir="$(dirname "$(readlink -f "$0")")" - set -e # Ensure we do nothing on failed globs shopt -s nullglob -echo "$DUCKDB_EXTENSION_SIGNING_PK" > private.pem - -FILES="build/$1/built_extensions/*.duckdb_extension.wasm" +if [[ -z "${DUCKDB_EXTENSION_SIGNING_PK}" ]]; then + # no private key provided, use the test private key (NOT SAFE) + # this is made so private.pem at the end of the block will be in + # a valid state, and the rest of the signing process can be tested + # even without providing the key + cp test/mbedtls/private.pem private.pem +else + # actual private key provided + echo "$DUCKDB_EXTENSION_SIGNING_PK" > private.pem +fi + +FILES="build/to_be_deployed/$2/$1/*.duckdb_extension.wasm" for f in $FILES do ext=`basename $f .duckdb_extension.wasm` @@ -33,7 +39,7 @@ do # for a grand total of 2 bytes echo -n -e '\x80\x02' >> $f.append # the actual payload, 256 bytes, to be added later - $script_dir/compute-extension-hash.sh $f.append > $f.hash + scripts/compute-extension-hash.sh $f.append > $f.hash # encrypt hash with extension signing private key to create signature openssl pkeyutl -sign -in $f.hash -inkey private.pem -pkeyopt digest:sha256 -out $f.sign # append signature to extension binary @@ -41,8 +47,13 @@ do # compress extension binary brotli < $f.append > "$f.brotli" # upload compressed extension binary to S3 - aws s3 cp $f.brotli s3://duckdb-extensions/duckdb-wasm/$2/$1/$ext.duckdb_extension.wasm --acl public-read --content-encoding br --content-type="application/wasm" + if [[ -z "${AWS_SECRET_ACCESS_KEY}" ]]; then + #AWS_SECRET_ACCESS_KEY is empty -> dry run + aws s3 cp $f.brotli s3://duckdb-extensions/$2/$1/$ext.duckdb_extension.wasm --acl public-read --content-encoding br --content-type="application/wasm" --dryrun + else + aws s3 cp $f.brotli s3://duckdb-extensions/$2/$1/$ext.duckdb_extension.wasm --acl public-read --content-encoding br --content-type="application/wasm" + fi done +# remove private key rm private.pem - diff --git a/scripts/format.py b/scripts/format.py index 03846caf5565..40cfbb95903b 100644 --- a/scripts/format.py +++ b/scripts/format.py @@ -9,6 +9,7 @@ import subprocess import difflib import re +import concurrent.futures from python_helpers import open_utf8 try: @@ -387,17 +388,24 @@ def format_file(f, full_path, directory, ext): def format_directory(directory): files = os.listdir(directory) files.sort() - for f in files: + + def process_file(f): full_path = os.path.join(directory, f) if os.path.isdir(full_path): if f in ignored_directories or full_path in ignored_directories: - continue + return if not silent: print(full_path) format_directory(full_path) elif can_format_file(full_path): format_file(f, full_path, directory, '.' + f.split('.')[-1]) + # Create thread for each file + with concurrent.futures.ThreadPoolExecutor() as executor: + threads = [executor.submit(process_file, f) for f in files] + # Wait for all tasks to complete + concurrent.futures.wait(threads) + if format_all: try: diff --git a/scripts/generate_extensions_function.py b/scripts/generate_extensions_function.py index 9069878ae9e1..5e58a2e0cf55 100644 --- a/scripts/generate_extensions_function.py +++ b/scripts/generate_extensions_function.py @@ -3,6 +3,10 @@ import re import argparse import glob +from typing import Set, Tuple, cast +import pathlib +from typing import NamedTuple +from typing import List, Dict os.chdir(os.path.dirname(__file__)) @@ -11,104 +15,295 @@ parser.add_argument( '--validate', action=argparse.BooleanOptionalAction, - help='If set will validate that extension_entries.hpp is up to date, otherwise it generates the extension_functions.hpp file.', + help='If set will validate that extension_entries.hpp is up to date, otherwise it generates the extension_functions.hpp file.', +) +parser.add_argument( + '--extension_dir', + action='store', + help="The root directory to look for the '/.duckdb_extension' files, relative to the location of this script", + default='../build/release/repository', ) - args = parser.parse_args() -stored_functions = { - 'substrait': ["from_substrait", "get_substrait", "get_substrait_json", "from_substrait_json"], - 'arrow': ["scan_arrow_ipc", "to_arrow_ipc"], - 'spatial': [], -} -stored_settings = {'substrait': [], 'arrow': [], 'spatial': []} +EXTENSIONS_PATH = os.path.join("..", "build", "extension_configuration", "extensions.txt") +DUCKDB_PATH = os.path.join("..", 'build', 'release', 'duckdb') +HEADER_PATH = os.path.join("..", "src", "include", "duckdb", "main", "extension_entries.hpp") -functions = {} +from enum import Enum -# Parses the extension config files for which extension names there are to be expected -def parse_extension_txt(): - extensions_file = os.path.join("..", "build", "extension_configuration", "extensions.txt") - if not os.path.isfile(extensions_file): - print( - "please run `make extension_configuration` with the desired extension configuration before running the script" - ) - exit(1) - with open(extensions_file) as f: - return [line.rstrip() for line in f] +class CatalogType(str, Enum): + SCALAR = "CatalogType::SCALAR_FUNCTION_ENTRY" + TABLE = "CatalogType::TABLE_FUNCTION_ENTRY" + AGGREGATE = "CatalogType::AGGREGATE_FUNCTION_ENTRY" + PRAGMA = "CatalogType::PRAGMA_FUNCTION_ENTRY" + MACRO = "CatalogType::MACRO_ENTRY" + TABLE_MACRO = "CatalogType::TABLE_MACRO_ENTRY" + +def catalog_type_from_type(catalog_type: str) -> CatalogType: + TYPE_MAP = { + CatalogType.SCALAR.value: CatalogType.SCALAR, + CatalogType.TABLE.value: CatalogType.TABLE, + CatalogType.AGGREGATE.value: CatalogType.AGGREGATE, + CatalogType.PRAGMA.value: CatalogType.PRAGMA, + CatalogType.MACRO.value: CatalogType.MACRO, + CatalogType.TABLE_MACRO.value: CatalogType.TABLE_MACRO, + } + if catalog_type not in TYPE_MAP: + raise Exception(f"Unrecognized function type: '{catalog_type}'") + return TYPE_MAP[catalog_type] + + +def catalog_type_from_string(catalog_type: str) -> CatalogType: + TYPE_MAP = { + CatalogType.SCALAR.name.lower(): CatalogType.SCALAR, + CatalogType.TABLE.name.lower(): CatalogType.TABLE, + CatalogType.AGGREGATE.name.lower(): CatalogType.AGGREGATE, + CatalogType.PRAGMA.name.lower(): CatalogType.PRAGMA, + CatalogType.MACRO.name.lower(): CatalogType.MACRO, + CatalogType.TABLE_MACRO.name.lower(): CatalogType.TABLE_MACRO, + } + if catalog_type not in TYPE_MAP: + raise Exception(f"Unrecognized function type: '{catalog_type}'") + return TYPE_MAP[catalog_type] -extension_names = parse_extension_txt() -# Add exception for jemalloc as it doesn't produce a loadable extension but is in the config -if "jemalloc" in extension_names: - extension_names.remove("jemalloc") +class Function(NamedTuple): + name: str + type: CatalogType -ext_hpp = os.path.join("..", "src", "include", "duckdb", "main", "extension_entries.hpp") -get_functions_query = "select distinct function_name from duckdb_functions();" -get_settings_query = "select distinct name from duckdb_settings();" -duckdb_path = os.path.join("..", 'build', 'release', 'duckdb') +class ExtensionFunction(NamedTuple): + extension: str + name: str + type: CatalogType -def get_query(sql_query, load_query): - return os.popen(f'{duckdb_path} -csv -unsigned -c "{load_query}{sql_query}" ').read().split("\n")[1:-1] + def create_map(input: List[Tuple[str, str, str]]) -> Dict[Function, "ExtensionFunction"]: + output: Dict[str, "ExtensionFunction"] = {} + for x in input: + key = Function(x[0], catalog_type_from_type(x[2])) + output[key] = ExtensionFunction(x[1], key.name, key.type) + return output -def get_functions(load=""): - return set(get_query(get_functions_query, load)) +class ExtensionSetting(NamedTuple): + extension: str + name: str + def create_map(input: List[Tuple[str, str]]) -> Dict[str, "ExtensionSetting"]: + output: Dict[str, "ExtensionSetting"] = {} + for x in input: + output[x[0]] = ExtensionSetting(x[1], x[0]) + return output -def get_settings(load=""): - return set(get_query(get_settings_query, load)) +class ExtensionCopyFunction(NamedTuple): + extension: str + name: str -base_functions = get_functions() -base_settings = get_settings() + def create_map(input: List[Tuple[str, str]]) -> Dict[str, "ExtensionCopyFunction"]: + output: Dict[str, "ExtensionCopyFunction"] = {} + for x in input: + output[x[0]] = ExtensionCopyFunction(x[1], x[0]) + return output -function_map = {} -settings_map = {} -# root_dir needs a trailing slash (i.e. /root/dir/) -extension_path = {} -for filename in glob.iglob('/tmp/' + '**/*.duckdb_extension', recursive=True): - extension_path[os.path.splitext(os.path.basename(filename))[0]] = filename +class ExtensionType(NamedTuple): + extension: str + name: str + def create_map(input: List[Tuple[str, str]]) -> Dict[str, "ExtensionType"]: + output: Dict[str, "ExtensionType"] = {} + for x in input: + output[x[0]] = ExtensionType(x[1], x[0]) + return output -# Update global maps with settings/functions from `extension_name` -def update_extensions(extension_name, function_list, settings_list): - global function_map, settings_map - function_map.update( - { - extension_function.lower(): extension_name.lower() - for extension_function in (set(function_list) - base_functions) - } - ) - settings_map.update( - { - extension_setting.lower(): extension_name.lower() - for extension_setting in (set(settings_list) - base_settings) + +def check_prerequisites(): + if not os.path.isfile(EXTENSIONS_PATH) or not os.path.isfile(DUCKDB_PATH): + print( + "please run 'DISABLE_BUILTIN_EXTENSIONS=1 BUILD_ALL_EXT=1 make release', you might have to manually add DONT_LINK to all extension_configs" + ) + exit(1) + if not os.path.isdir(args.extension_dir): + print(f"provided --extension_dir '{args.extension_dir}' is not a valid directory") + exit(1) + + +# Parses the extension config files for which extension names there are to be expected +def get_extension_names() -> List[str]: + extension_names = [] + with open(EXTENSIONS_PATH) as f: + for line in f: + extension_name = line.rstrip() + if "jemalloc" in extension_name: + # We skip jemalloc as it doesn't produce a loadable extension but is in the config + continue + extension_names.append(extension_name) + return extension_names + + +def get_query(sql_query, load_query): + # Optionally perform a LOAD of an extension + # Then perform a SQL query, fetch the output + query = f'{DUCKDB_PATH} -csv -unsigned -c "{load_query}{sql_query}" ' + query_result = os.popen(query).read() + result = query_result.split("\n")[1:-1] + return result + + +def get_functions(load="") -> Set[Function]: + GET_FUNCTIONS_QUERY = """ + select distinct + function_name, + function_type + from duckdb_functions(); + """ + # ['name_1,type_1', ..., 'name_n,type_n'] + results = set(get_query(GET_FUNCTIONS_QUERY, load)) + + functions = set() + for x in results: + function_name, function_type = [y.lower() for y in x.split(',')] + functions.add(Function(function_name, catalog_type_from_string(function_type))) + return functions + + +def get_settings(load=""): + GET_SETTINGS_QUERY = """ + select distinct + name + from duckdb_settings(); + """ + return set(get_query(GET_SETTINGS_QUERY, load)) + + +class ExtensionData: + def __init__(self): + # Map of extension -> ExtensionFunction + self.function_map: Dict[Function, ExtensionFunction] = {} + # Map of extension -> ExtensionSetting + self.settings_map: Dict[str, ExtensionSetting] = {} + + # Map of extension -> extension_path + self.extensions: Dict[str, str] = get_extension_path_map() + + self.stored_functions: Dict[str, List[Function]] = { + 'substrait': [ + Function("from_substrait", "table"), + Function("get_substrait", "table"), + Function("get_substrait_json", "table"), + Function("from_substrait_json", "table"), + ], + 'arrow': [Function("scan_arrow_ipc", "table"), Function("to_arrow_ipc", "table")], + 'spatial': [], } - ) + self.stored_settings: Dict[str, List[str]] = {'substrait': [], 'arrow': [], 'spatial': []} + + def set_base(self): + self.base_functions: Set[Function] = get_functions() + self.base_settings: Set[str] = get_settings() + + def add_extension(self, extension_name: str): + if extension_name in self.extensions: + # Perform a LOAD and add the added settings/functions + extension_path = self.extensions[extension_name] + + print(f"Load {extension_name} at {extension_path}") + load = f"LOAD '{extension_path}';" + + extension_functions = get_functions(load) + extension_settings = get_settings(load) + + self.add_settings(extension_name, extension_settings) + self.add_functions(extension_name, extension_functions) + elif extension_name in self.stored_functions or extension_name in self.stored_settings: + # Retrieve the list of settings/functions from our hardcoded list + extension_functions = self.stored_functions[extension_name] + extension_settings = self.stored_settings[extension_name] + + print(f"Loading {extension_name} from stored functions: {extension_functions}") + self.add_settings(extension_name, extension_settings) + self.add_functions(extension_name, extension_functions) + else: + error = f"""Missing extension {extension_name} and not found in stored_functions/stored_settings +Please double check if '{args.extension_dir}' is the right location to look for ./**/*.duckdb_extension files""" + print(error) + exit(1) + + def add_settings(self, extension_name: str, settings_list: List[str]): + extension_name = extension_name.lower() + + added_settings: Set[str] = set(settings_list) - self.base_settings + settings_to_add: Dict[str, str] = {} + for setting in added_settings: + setting_name = setting.lower() + settings_to_add[setting_name] = ExtensionSetting(extension_name, setting_name) + + self.settings_map.update(settings_to_add) + def add_functions(self, extension_name: str, function_list: List[Function]): + extension_name = extension_name.lower() -# Get all extension entries from DuckDB's catalog -for extension_name in extension_names: - if extension_name not in extension_path: - if extension_name not in stored_functions or extension_name not in stored_settings: - print(f"Missing extension {extension_name} and not found in stored_functions/stored_settings") + added_functions: Set[Function] = set(function_list) - self.base_functions + functions_to_add: Dict[Function, ExtensionFunction] = {} + for function in added_functions: + functions_to_add[function] = ExtensionFunction(extension_name, function.name, function.type) + + self.function_map.update(functions_to_add) + + def validate(self): + parsed_entries = parse_extension_entries(HEADER_PATH) + if self.function_map != parsed_entries['functions']: + print("Function map mismatches:") + print_map_diff(self.function_map, parsed_entries['functions']) + exit(1) + if self.settings_map != parsed_entries['settings']: + print("Settings map mismatches:") + print_map_diff(self.settings_map, parsed_entries['settings']) + exit(1) + + print("All entries found: ") + print(" > functions: " + str(len(parsed_entries['functions']))) + print(" > settings: " + str(len(parsed_entries['settings']))) + + def verify_export(self): + if len(self.function_map) == 0 or len(self.settings_map) == 0: + print( + """ +The provided configuration produced an empty function map or empty settings map +This is likely caused by building DuckDB with extensions linked in +""" + ) exit(1) - extension_functions = stored_functions[extension_name] - extension_settings = stored_settings[extension_name] - print(f"Loading {extension_name} from stored functions: {extension_functions}") - update_extensions(extension_name, extension_functions, extension_settings) - continue - print(f"Load {extension_name} at {extension_path[extension_name]}") - load = f"LOAD '{extension_path[extension_name]}';" - extension_functions = get_functions(load) - extension_settings = get_settings(load) - update_extensions(extension_name, extension_functions, extension_settings) + def export_functions(self) -> str: + result = """ + static constexpr ExtensionFunctionEntry EXTENSION_FUNCTIONS[] = {\n""" + sorted_function = sorted(self.function_map) + + for func in sorted_function: + function: ExtensionFunction = self.function_map[func] + result += "\t{" + result += f'"{function.name}", "{function.extension}", {function.type.value}' + result += "},\n" + result += "}; // END_OF_EXTENSION_FUNCTIONS\n" + return result + + def export_settings(self) -> str: + result = """ + static constexpr ExtensionEntry EXTENSION_SETTINGS[] = {\n""" + sorted_settings = sorted(self.settings_map) + + for settings_name in sorted_settings: + setting: ExtensionSetting = self.settings_map[settings_name] + result += "\t{" + result += f'"{settings_name.lower()}", "{setting.extension}"' + result += "},\n" + result += "}; // END_OF_EXTENSION_SETTINGS\n" + return result # Get the slice of the file containing the var (assumes // END_OF_ comment after var) @@ -120,25 +315,40 @@ def get_slice_of_file(var_name, file_str): # Parses the extension_entries.hpp file def parse_extension_entries(file_path): + def parse_contents(input) -> tuple: + # Split the string by comma and remove any leading or trailing spaces + elements = input.split(",") + # Strip any leading or trailing spaces and surrounding double quotes from each element + elements = [element.strip().strip('"') for element in elements] + return elements + file = open(file_path, 'r') - pattern = re.compile("{\"(.*?)\", \"(.*?)\"}[,}\n]") + pattern = re.compile("{(.*(?:, )?)}[,}\n]") file_blob = file.read() # Get the extension functions ext_functions_file_blob = get_slice_of_file("EXTENSION_FUNCTIONS", file_blob) - cur_function_map = dict(pattern.findall(ext_functions_file_blob)) + res = pattern.findall(ext_functions_file_blob) + res = [parse_contents(x) for x in res] + cur_function_map = ExtensionFunction.create_map(res) # Get the extension settings ext_settings_file_blob = get_slice_of_file("EXTENSION_SETTINGS", file_blob) - cur_settings_map = dict(pattern.findall(ext_settings_file_blob)) + res = pattern.findall(ext_settings_file_blob) + res = [parse_contents(x) for x in res] + cur_settings_map = ExtensionSetting.create_map(res) # Get the extension types ext_copy_functions_blob = get_slice_of_file("EXTENSION_COPY_FUNCTIONS", file_blob) - cur_copy_functions_map = dict(pattern.findall(ext_copy_functions_blob)) + res = pattern.findall(ext_copy_functions_blob) + res = [parse_contents(x) for x in res] + cur_copy_functions_map = ExtensionCopyFunction.create_map(res) # Get the extension types ext_types_file_blob = get_slice_of_file("EXTENSION_TYPES", file_blob) - cur_types_map = dict(pattern.findall(ext_types_file_blob)) + res = pattern.findall(ext_types_file_blob) + res = [parse_contents(x) for x in res] + cur_types_map = ExtensionType.create_map(res) return { 'functions': cur_function_map, @@ -149,193 +359,207 @@ def parse_extension_entries(file_path): def print_map_diff(d1, d2): - s1 = set(d1.items()) - s2 = set(d2.items()) - diff = str(s1 ^ s2) - print("Diff between maps: " + diff + "\n") - - -if args.validate: - parsed_entries = parse_extension_entries(ext_hpp) - if function_map != parsed_entries['functions']: - print("Function map mismatches:") - print("Found in " + str(duckdb_path) + ": " + str(sorted(function_map)) + "\n") - print("Parsed from extension_entries.hpp: " + str(parsed_entries['functions']) + "\n") - print_map_diff(function_map, parsed_entries['functions']) - exit(1) - if settings_map != parsed_entries['settings']: - print("Settings map mismatches:") - print("Found: " + str(settings_map) + "\n") - print("Parsed from extension_entries.hpp: " + str(parsed_entries['settings']) + "\n") - print_map_diff(settings_map, parsed_entries['settings']) - exit(1) - - print("All entries found: ") - print(" > functions: " + str(len(parsed_entries['functions']))) - print(" > settings: " + str(len(parsed_entries['settings']))) -else: - # extension_functions - file = open(ext_hpp, 'w') - header = """//===----------------------------------------------------------------------===// -// DuckDB -// -// duckdb/main/extension_entries.hpp -// -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include \"duckdb/common/unordered_map.hpp\" - -// NOTE: this file is generated by scripts/generate_extensions_function.py. Check out the check-load-install-extensions -// job in .github/workflows/LinuxRelease.yml on how to use it - -namespace duckdb { - -struct ExtensionEntry { - char name[48]; - char extension[48]; -}; - -static constexpr ExtensionEntry EXTENSION_FUNCTIONS[] = { -""" - file.write(header) - # functions - sorted_function = sorted(function_map) - - for function_name in sorted_function: - file.write(" {") - file.write(f'"{function_name}", "{function_map[function_name]}"') - file.write("}, \n") - file.write("}; // END_OF_EXTENSION_FUNCTIONS\n") - - # settings - header = """ -static constexpr ExtensionEntry EXTENSION_SETTINGS[] = { -""" - file.write(header) - # Sort Function Map - sorted_settings = sorted(settings_map) - - for settings_name in sorted_settings: - file.write(" {") - file.write(f'"{settings_name.lower()}", "{settings_map[settings_name]}"') - file.write("}, \n") - footer = """}; // END_OF_EXTENSION_SETTINGS - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_COPY_FUNCTIONS[] = { - {"parquet", "parquet"}, - {"json", "json"} -}; // END_OF_EXTENSION_COPY_FUNCTIONS - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_TYPES[] = { - {"json", "json"}, - {"inet", "inet"}, - {"geometry", "spatial"} -}; // END_OF_EXTENSION_TYPES - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_COLLATIONS[] = { - {"af", "icu"}, {"am", "icu"}, {"ar", "icu"}, {"ar_sa", "icu"}, {"as", "icu"}, {"az", "icu"}, - {"be", "icu"}, {"bg", "icu"}, {"bn", "icu"}, {"bo", "icu"}, {"br", "icu"}, {"bs", "icu"}, - {"ca", "icu"}, {"ceb", "icu"}, {"chr", "icu"}, {"cs", "icu"}, {"cy", "icu"}, {"da", "icu"}, - {"de", "icu"}, {"de_at", "icu"}, {"dsb", "icu"}, {"dz", "icu"}, {"ee", "icu"}, {"el", "icu"}, - {"en", "icu"}, {"en_us", "icu"}, {"eo", "icu"}, {"es", "icu"}, {"et", "icu"}, {"fa", "icu"}, - {"fa_af", "icu"}, {"ff", "icu"}, {"fi", "icu"}, {"fil", "icu"}, {"fo", "icu"}, {"fr", "icu"}, - {"fr_ca", "icu"}, {"fy", "icu"}, {"ga", "icu"}, {"gl", "icu"}, {"gu", "icu"}, {"ha", "icu"}, - {"haw", "icu"}, {"he", "icu"}, {"he_il", "icu"}, {"hi", "icu"}, {"hr", "icu"}, {"hsb", "icu"}, - {"hu", "icu"}, {"hy", "icu"}, {"id", "icu"}, {"id_id", "icu"}, {"ig", "icu"}, {"is", "icu"}, - {"it", "icu"}, {"ja", "icu"}, {"ka", "icu"}, {"kk", "icu"}, {"kl", "icu"}, {"km", "icu"}, - {"kn", "icu"}, {"ko", "icu"}, {"kok", "icu"}, {"ku", "icu"}, {"ky", "icu"}, {"lb", "icu"}, - {"lkt", "icu"}, {"ln", "icu"}, {"lo", "icu"}, {"lt", "icu"}, {"lv", "icu"}, {"mk", "icu"}, - {"ml", "icu"}, {"mn", "icu"}, {"mr", "icu"}, {"ms", "icu"}, {"mt", "icu"}, {"my", "icu"}, - {"nb", "icu"}, {"nb_no", "icu"}, {"ne", "icu"}, {"nl", "icu"}, {"nn", "icu"}, {"om", "icu"}, - {"or", "icu"}, {"pa", "icu"}, {"pa_in", "icu"}, {"pl", "icu"}, {"ps", "icu"}, {"pt", "icu"}, - {"ro", "icu"}, {"ru", "icu"}, {"sa", "icu"}, {"se", "icu"}, {"si", "icu"}, {"sk", "icu"}, - {"sl", "icu"}, {"smn", "icu"}, {"sq", "icu"}, {"sr", "icu"}, {"sr_ba", "icu"}, {"sr_me", "icu"}, - {"sr_rs", "icu"}, {"sv", "icu"}, {"sw", "icu"}, {"ta", "icu"}, {"te", "icu"}, {"th", "icu"}, - {"tk", "icu"}, {"to", "icu"}, {"tr", "icu"}, {"ug", "icu"}, {"uk", "icu"}, {"ur", "icu"}, - {"uz", "icu"}, {"vi", "icu"}, {"wae", "icu"}, {"wo", "icu"}, {"xh", "icu"}, {"yi", "icu"}, - {"yo", "icu"}, {"yue", "icu"}, {"yue_cn", "icu"}, {"zh", "icu"}, {"zh_cn", "icu"}, {"zh_hk", "icu"}, - {"zh_mo", "icu"}, {"zh_sg", "icu"}, {"zh_tw", "icu"}, {"zu", "icu"}}; // END_OF_EXTENSION_COLLATIONS - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_FILE_PREFIXES[] = { - {"http://", "httpfs"}, - {"https://", "httpfs"}, - {"s3://", "httpfs"}, - {"s3a://", "httpfs"}, - {"s3n://", "httpfs"}, - {"gcs://", "httpfs"}, - {"gs://", "httpfs"}, - {"r2://", "httpfs"} -// {"azure://", "azure"} -}; // END_OF_EXTENSION_FILE_PREFIXES - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_FILE_POSTFIXES[] = { - {".parquet", "parquet"}, - {".json", "json"}, - {".jsonl", "json"}, - {".ndjson", "json"}, - {".shp", "spatial"}, - {".gpkg", "spatial"}, - {".fgb", "spatial"} -}; // END_OF_EXTENSION_FILE_POSTFIXES - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_FILE_CONTAINS[] = { - {".parquet?", "parquet"}, - {".json?", "json"}, - {".ndjson?", ".jsonl?"}, - {".jsonl?", ".ndjson?"} -}; // EXTENSION_FILE_CONTAINS - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_SECRET_TYPES[] = {{"s3", "httpfs"}, - {"r2", "httpfs"}, - {"gcs", "httpfs"}, - {"azure", "azure"}}; // EXTENSION_SECRET_TYPES - - -// Note: these are currently hardcoded in scripts/generate_extensions_function.py -// TODO: automate by passing though to script via duckdb -static constexpr ExtensionEntry EXTENSION_SECRET_PROVIDERS[] = {{"s3/config", "httpfs"}, - {"gcs/config", "httpfs"}, - {"r2/config", "httpfs"}, - {"s3/credential_chain", "aws"}, - {"gcs/credential_chain", "aws"}, - {"r2/credential_chain", "aws"}, - {"azure/config", "azure"}, - {"azure/credential_chain", "azure"}}; // EXTENSION_SECRET_PROVIDERS - -static constexpr const char *AUTOLOADABLE_EXTENSIONS[] = { -// "azure", + s1 = sorted(set(d1.items())) + s2 = sorted(set(d2.items())) + + diff1 = str(set(s1) - set(s2)) + diff2 = str(set(s2) - set(s1)) + print("Diff between maps: " + diff1 + "\n") + print("Diff between maps: " + diff2 + "\n") + + +def get_extension_path_map() -> Dict[str, str]: + extension_paths: Dict[str, str] = {} + # extension_dir = pathlib.Path('../build/release/extension') + extension_dir = args.extension_dir + for location in glob.iglob(extension_dir + '/**/*.duckdb_extension', recursive=True): + name, _ = os.path.splitext(os.path.basename(location)) + print(f"Located extension: {name} in path: '{location}'") + extension_paths[name] = location + return extension_paths + + +def write_header(data: ExtensionData): + INCLUDE_HEADER = """//===----------------------------------------------------------------------===// + // DuckDB + // + // duckdb/main/extension_entries.hpp + // + // + //===----------------------------------------------------------------------===// + + #pragma once + + #include \"duckdb/common/unordered_map.hpp\" + #include \"duckdb/common/enums/catalog_type.hpp\" + + // NOTE: this file is generated by scripts/generate_extensions_function.py. Check out the check-load-install-extensions + // job in .github/workflows/LinuxRelease.yml on how to use it + + namespace duckdb { + + struct ExtensionEntry { + char name[48]; + char extension[48]; + }; + + struct ExtensionFunctionEntry { + char name[48]; + char extension[48]; + CatalogType type; + }; + """ + + INCLUDE_FOOTER = """ + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_COPY_FUNCTIONS[] = { + {"parquet", "parquet"}, + {"json", "json"} + }; // END_OF_EXTENSION_COPY_FUNCTIONS + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_TYPES[] = { + {"json", "json"}, + {"inet", "inet"}, + {"geometry", "spatial"} + }; // END_OF_EXTENSION_TYPES + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_COLLATIONS[] = { + {"af", "icu"}, {"am", "icu"}, {"ar", "icu"}, {"ar_sa", "icu"}, {"as", "icu"}, {"az", "icu"}, + {"be", "icu"}, {"bg", "icu"}, {"bn", "icu"}, {"bo", "icu"}, {"br", "icu"}, {"bs", "icu"}, + {"ca", "icu"}, {"ceb", "icu"}, {"chr", "icu"}, {"cs", "icu"}, {"cy", "icu"}, {"da", "icu"}, + {"de", "icu"}, {"de_at", "icu"}, {"dsb", "icu"}, {"dz", "icu"}, {"ee", "icu"}, {"el", "icu"}, + {"en", "icu"}, {"en_us", "icu"}, {"eo", "icu"}, {"es", "icu"}, {"et", "icu"}, {"fa", "icu"}, + {"fa_af", "icu"}, {"ff", "icu"}, {"fi", "icu"}, {"fil", "icu"}, {"fo", "icu"}, {"fr", "icu"}, + {"fr_ca", "icu"}, {"fy", "icu"}, {"ga", "icu"}, {"gl", "icu"}, {"gu", "icu"}, {"ha", "icu"}, + {"haw", "icu"}, {"he", "icu"}, {"he_il", "icu"}, {"hi", "icu"}, {"hr", "icu"}, {"hsb", "icu"}, + {"hu", "icu"}, {"hy", "icu"}, {"id", "icu"}, {"id_id", "icu"}, {"ig", "icu"}, {"is", "icu"}, + {"it", "icu"}, {"ja", "icu"}, {"ka", "icu"}, {"kk", "icu"}, {"kl", "icu"}, {"km", "icu"}, + {"kn", "icu"}, {"ko", "icu"}, {"kok", "icu"}, {"ku", "icu"}, {"ky", "icu"}, {"lb", "icu"}, + {"lkt", "icu"}, {"ln", "icu"}, {"lo", "icu"}, {"lt", "icu"}, {"lv", "icu"}, {"mk", "icu"}, + {"ml", "icu"}, {"mn", "icu"}, {"mr", "icu"}, {"ms", "icu"}, {"mt", "icu"}, {"my", "icu"}, + {"nb", "icu"}, {"nb_no", "icu"}, {"ne", "icu"}, {"nl", "icu"}, {"nn", "icu"}, {"om", "icu"}, + {"or", "icu"}, {"pa", "icu"}, {"pa_in", "icu"}, {"pl", "icu"}, {"ps", "icu"}, {"pt", "icu"}, + {"ro", "icu"}, {"ru", "icu"}, {"sa", "icu"}, {"se", "icu"}, {"si", "icu"}, {"sk", "icu"}, + {"sl", "icu"}, {"smn", "icu"}, {"sq", "icu"}, {"sr", "icu"}, {"sr_ba", "icu"}, {"sr_me", "icu"}, + {"sr_rs", "icu"}, {"sv", "icu"}, {"sw", "icu"}, {"ta", "icu"}, {"te", "icu"}, {"th", "icu"}, + {"tk", "icu"}, {"to", "icu"}, {"tr", "icu"}, {"ug", "icu"}, {"uk", "icu"}, {"ur", "icu"}, + {"uz", "icu"}, {"vi", "icu"}, {"wae", "icu"}, {"wo", "icu"}, {"xh", "icu"}, {"yi", "icu"}, + {"yo", "icu"}, {"yue", "icu"}, {"yue_cn", "icu"}, {"zh", "icu"}, {"zh_cn", "icu"}, {"zh_hk", "icu"}, + {"zh_mo", "icu"}, {"zh_sg", "icu"}, {"zh_tw", "icu"}, {"zu", "icu"}}; // END_OF_EXTENSION_COLLATIONS + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_FILE_PREFIXES[] = { + {"http://", "httpfs"}, + {"https://", "httpfs"}, + {"s3://", "httpfs"}, + {"s3a://", "httpfs"}, + {"s3n://", "httpfs"}, + {"gcs://", "httpfs"}, + {"gs://", "httpfs"}, + {"r2://", "httpfs"} + // {"azure://", "azure"} + }; // END_OF_EXTENSION_FILE_PREFIXES + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_FILE_POSTFIXES[] = { + {".parquet", "parquet"}, + {".json", "json"}, + {".jsonl", "json"}, + {".ndjson", "json"}, + {".shp", "spatial"}, + {".gpkg", "spatial"}, + {".fgb", "spatial"} + }; // END_OF_EXTENSION_FILE_POSTFIXES + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_FILE_CONTAINS[] = { + {".parquet?", "parquet"}, + {".json?", "json"}, + {".ndjson?", ".jsonl?"}, + {".jsonl?", ".ndjson?"} + }; // EXTENSION_FILE_CONTAINS + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_SECRET_TYPES[] = {{"s3", "httpfs"}, + {"r2", "httpfs"}, + {"gcs", "httpfs"}, + {"azure", "azure"}}; // EXTENSION_SECRET_TYPES + + + // Note: these are currently hardcoded in scripts/generate_extensions_function.py + // TODO: automate by passing though to script via duckdb + static constexpr ExtensionEntry EXTENSION_SECRET_PROVIDERS[] = {{"s3/config", "httpfs"}, + {"gcs/config", "httpfs"}, + {"r2/config", "httpfs"}, + {"s3/credential_chain", "aws"}, + {"gcs/credential_chain", "aws"}, + {"r2/credential_chain", "aws"}, + {"azure/config", "azure"}, + {"azure/credential_chain", "azure"}}; // EXTENSION_SECRET_PROVIDERS + + static constexpr const char *AUTOLOADABLE_EXTENSIONS[] = { + "aws", + "azure", "autocomplete", "excel", "fts", "httpfs", - // "inet", - // "icu", + "inet", + "icu", "json", "parquet", + "sqlite_scanner", "sqlsmith", + "postgres_scanner", "tpcds", - "tpch", - "visualizer" -}; // END_OF_AUTOLOADABLE_EXTENSIONS + "tpch" + }; // END_OF_AUTOLOADABLE_EXTENSIONS + + } // namespace duckdb""" -} // namespace duckdb""" - file.write(footer) + data.verify_export() + file = open(HEADER_PATH, 'w') + file.write(INCLUDE_HEADER) + + exported_functions = data.export_functions() + file.write(exported_functions) + + exported_settings = data.export_settings() + file.write(exported_settings) + file.write(INCLUDE_FOOTER) file.close() + + +def main(): + check_prerequisites() + + extension_names: List[str] = get_extension_names() + + extension_data = ExtensionData() + # Collect the list of functions/settings without any extensions loaded + extension_data.set_base() + + for extension_name in extension_names: + print(extension_name) + # For every extension, add the functions/settings added by the extension + extension_data.add_extension(extension_name) + + if args.validate: + extension_data.validate() + return + + write_header(extension_data) + + +if __name__ == '__main__': + main() diff --git a/scripts/generate_serialization.py b/scripts/generate_serialization.py index 8d5a0fc60e6a..b876182a0d9f 100644 --- a/scripts/generate_serialization.py +++ b/scripts/generate_serialization.py @@ -103,6 +103,7 @@ 'LogicalType', 'ColumnDefinition', 'BaseStatistics', + 'BoundLimitNode', ] reference_list = ['ClientContext', 'bound_parameter_map_t'] diff --git a/scripts/jdbc_maven_deploy.py b/scripts/jdbc_maven_deploy.py index 18cd914e7d57..2f5e4e3b0644 100644 --- a/scripts/jdbc_maven_deploy.py +++ b/scripts/jdbc_maven_deploy.py @@ -154,9 +154,6 @@ def exec(cmd): ): raise ValueError('could not create all required files') -# run basic tests, it should now work on whatever platform this is -exec("java -cp %s org.duckdb.test.TestDuckDBJDBC" % binary_jar) - # now sign and upload everything # for this to work, you must have entry in ~/.m2/settings.xml: diff --git a/scripts/merge_vcpkg_deps.py b/scripts/merge_vcpkg_deps.py index 5a471ab26836..68682ad82c2f 100644 --- a/scripts/merge_vcpkg_deps.py +++ b/scripts/merge_vcpkg_deps.py @@ -26,13 +26,14 @@ def prefix_overlay_port(overlay_port): f = open(file) data = json.load(f) - for dep in data['dependencies']: - if type(dep) is str: - dependencies_str.append(dep) - elif type(dep) is dict: - dependencies_dict.append(dep) - else: - raise Exception(f"Unknown entry type found in dependencies: '{dep}'") + if 'dependencies' in data: + for dep in data['dependencies']: + if type(dep) is str: + dependencies_str.append(dep) + elif type(dep) is dict: + dependencies_dict.append(dep) + else: + raise Exception(f"Unknown entry type found in dependencies: '{dep}'") if 'vcpkg-configuration' in data: if 'overlay-ports' in data['vcpkg-configuration']: diff --git a/scripts/package_build.py b/scripts/package_build.py index a60a5d2d5f89..2f3611d74dea 100644 --- a/scripts/package_build.py +++ b/scripts/package_build.py @@ -181,7 +181,7 @@ def include_package(pkg_name, pkg_dir, include_files, include_list, source_list) sys.path = original_path -def build_package(target_dir, extensions, linenumbers=False, unity_count=32, folder_name='duckdb'): +def build_package(target_dir, extensions, linenumbers=False, unity_count=32, folder_name='duckdb', short_paths=False): if not os.path.isdir(target_dir): os.mkdir(target_dir) @@ -227,6 +227,7 @@ def copy_file(src, target_dir): os.chdir(os.path.join(scripts_dir, '..')) githash = git_commit_hash() dev_version = git_dev_version() + dev_v_parts = dev_version.lstrip('v').split('.') os.chdir(curdir) # open the file and read the current contents fpath = os.path.join(target_dir, 'src', 'function', 'table', 'version', 'pragma_version.cpp') @@ -235,20 +236,48 @@ def copy_file(src, target_dir): # now add the DUCKDB_SOURCE_ID define, if it is not there already found_hash = False found_dev = False + found_major = False + found_minor = False + found_patch = False lines = text.split('\n') for i in range(len(lines)): if '#define DUCKDB_SOURCE_ID ' in lines[i]: lines[i] = '#define DUCKDB_SOURCE_ID "{}"'.format(githash) found_hash = True - break if '#define DUCKDB_VERSION ' in lines[i]: lines[i] = '#define DUCKDB_VERSION "{}"'.format(dev_version) found_dev = True - break + if '#define DUCKDB_MAJOR_VERSION ' in lines[i]: + lines[i] = '#define DUCKDB_MAJOR_VERSION {}'.format(int(dev_v_parts[0])) + found_major = True + if '#define DUCKDB_MINOR_VERSION ' in lines[i]: + lines[i] = '#define DUCKDB_MINOR_VERSION {}'.format(int(dev_v_parts[1])) + found_minor = True + if '#define DUCKDB_PATCH_VERSION ' in lines[i]: + lines[i] = '#define DUCKDB_PATCH_VERSION "{}"'.format(dev_v_parts[2]) + found_patch = True if not found_hash: lines = ['#ifndef DUCKDB_SOURCE_ID', '#define DUCKDB_SOURCE_ID "{}"'.format(githash), '#endif'] + lines if not found_dev: lines = ['#ifndef DUCKDB_VERSION', '#define DUCKDB_VERSION "{}"'.format(dev_version), '#endif'] + lines + if not found_major: + lines = [ + '#ifndef DUCKDB_MAJOR_VERSION', + '#define DUCKDB_MAJOR_VERSION {}'.format(int(dev_v_parts[0])), + '#endif', + ] + lines + if not found_minor: + lines = [ + '#ifndef DUCKDB_MINOR_VERSION', + '#define DUCKDB_MINOR_VERSION {}'.format(int(dev_v_parts[1])), + '#endif', + ] + lines + if not found_patch: + lines = [ + '#ifndef DUCKDB_PATCH_VERSION', + '#define DUCKDB_PATCH_VERSION "{}"'.format(dev_v_parts[2]), + '#endif', + ] + lines text = '\n'.join(lines) with open_utf8(fpath, 'w+') as f: f.write(text) @@ -260,7 +289,7 @@ def file_is_excluded(fname): return False def generate_unity_build(entries, unity_name, linenumbers): - ub_file = os.path.join(target_dir, f'ub_{unity_name}.cpp') + ub_file = os.path.join(target_dir, unity_name) with open_utf8(ub_file, 'w+') as f: for entry in entries: if linenumbers: @@ -297,11 +326,18 @@ def generate_unity_builds(source_list, nsplits, linenumbers): key=lambda x: scores[os.path.basename(x)] if os.path.basename(x) in scores else 99999 ) if not unity_build: - new_source_files += [os.path.join(folder_name, file) for file in current_files] + if short_paths: + # replace source files with "__" + for file in current_files: + unity_filename = os.path.basename(file) + new_source_files.append(generate_unity_build([file], unity_filename, linenumbers)) + else: + # directly use the source files + new_source_files += [os.path.join(folder_name, file) for file in current_files] else: - new_source_files.append( - generate_unity_build(current_files, dirname.replace(os.path.sep, '_'), linenumbers) - ) + unity_base = dirname.replace(os.path.sep, '_') + unity_name = f'ub_{unity_base}.cpp' + new_source_files.append(generate_unity_build(current_files, unity_name, linenumbers)) return new_source_files original_sources = source_list diff --git a/scripts/plan_cost_runner.py b/scripts/plan_cost_runner.py index 7f573816c60f..93eddfca091c 100644 --- a/scripts/plan_cost_runner.py +++ b/scripts/plan_cost_runner.py @@ -50,14 +50,40 @@ def init_db(cli, dbname, benchmark_dir): print("INITIALIZATION DONE") +class PlanCost: + def __init__(self): + self.total = 0 + self.build_side = 0 + self.probe_side = 0 + self.time = 0 + + def __add__(self, other): + self.total += other.total + self.build_side += other.build_side + self.probe_side += other.probe_side + return self + + def op_inspect(op): - cost = 0 + cost = PlanCost() + if op['name'] == "Query": + cost.time = op['timing'] if op['name'] == 'HASH_JOIN' and not op['extra_info'].startswith('MARK'): - cost = op['cardinality'] - if 'children' not in op: + cost.total = op['cardinality'] + if 'cardinality' in op['children'][0]: + cost.probe_side += op['children'][0]['cardinality'] + if 'cardinality' in op['children'][1]: + cost.build_side += op['children'][1]['cardinality'] + left_cost = op_inspect(op['children'][0]) + right_cost = op_inspect(op['children'][1]) + cost.probe_side += left_cost.probe_side + right_cost.probe_side + cost.build_side += left_cost.build_side + right_cost.build_side + cost.total += left_cost.total + right_cost.total return cost + for child_op in op['children']: cost += op_inspect(child_op) + return cost @@ -101,14 +127,31 @@ def print_diffs(diffs): for query_name, old_cost, new_cost in diffs: print("") print("Query:", query_name) - print("Old cost:", old_cost) - print("New cost:", new_cost) + print("Old total cost:", old_cost.total) + print("Old build cost:", old_cost.build_side) + print("Old probe cost:", old_cost.probe_side) + print("New total cost:", new_cost.total) + print("New build cost:", new_cost.build_side) + print("New probe cost:", new_cost.probe_side) + + +def cardinality_is_higher(old_cost, new_cost): + new_cardinality_higher = ( + old_cost.total < new_cost.total + or old_cost.build_side < new_cost.build_side + or old_cost.probe_side < new_cost.probe_side + ) + new_timing_higher = old_cost.time < new_cost.time + # if the cardinalities have changed, its possible build side probe sides + # have changed, but this may still lead to better execution. So return + # result of timing + if new_cardinality_higher: + return new_timing_higher -def cardinality_is_higher(card_a, card_b): - # card_a > card_b? - # add 20% threshold before we start caring - return card_a > card_b + # if new_cardinality_higher is False, we either have the same plan, or + # an even better plan with less cardinalities. + return False def main(): diff --git a/scripts/regression_test_python.py b/scripts/regression_test_python.py index 3dc6e9f5723a..c2de01027db4 100644 --- a/scripts/regression_test_python.py +++ b/scripts/regression_test_python.py @@ -4,154 +4,311 @@ import pandas as pd import pyarrow as pa import time +import argparse +from typing import Dict, List, Any -threads = None -verbose = False -out_file = None -nruns = 10 TPCH_NQUERIES = 22 +TPCH_QUERIES = [] +for i in range(1, TPCH_NQUERIES + 1): + TPCH_QUERIES.append(f'PRAGMA tpch({i})') -for arg in sys.argv[1:]: - if arg == "--verbose": - verbose = True - elif arg.startswith("--threads="): - threads = int(arg.replace("--threads=", "")) - elif arg.startswith("--nruns="): - nruns = int(arg.replace("--nruns=", "")) - elif arg.startswith("--out-file="): - out_file = arg.replace("--out-file=", "") - else: - print(f"Unrecognized parameter '{arg}'") - exit(1) -# generate data -if verbose: - print("Generating TPC-H data") +parser = argparse.ArgumentParser() +parser.add_argument("--verbose", action="store_true", help="Enable verbose mode", default=False) +parser.add_argument("--threads", type=int, help="Number of threads", default=None) +parser.add_argument("--nruns", type=int, help="Number of runs", default=10) +parser.add_argument("--out-file", type=str, help="Output file path", default=None) +parser.add_argument("--scale-factor", type=float, help="Set the scale factor TPCH is generated at", default=1.0) +args, unknown_args = parser.parse_known_args() -main_con = duckdb.connect() -main_con.execute('CALL dbgen(sf=1)') +verbose = args.verbose +threads = args.threads +nruns = args.nruns +out_file = args.out_file +scale_factor = args.scale_factor -tables = [ - "customer", - "lineitem", - "nation", - "orders", - "part", - "partsupp", - "region", - "supplier", -] +if unknown_args: + parser.error(f"Unrecognized parameter(s): {', '.join(unknown_args)}") -def open_connection(): - con = duckdb.connect() - if threads is not None: - if verbose: - print(f'Limiting threads to {threads}') - con.execute(f"SET threads={threads}") - return con +def print_msg(message: str): + if not verbose: + return + print(message) def write_result(benchmark_name, nrun, t): bench_result = f"{benchmark_name}\t{nrun}\t{t}" - if out_file is not None: - f.write(bench_result) - f.write('\n') + if not hasattr(write_result, 'file'): + write_result.file = open(out_file, 'w+') + write_result.file.write(bench_result) + write_result.file.write('\n') else: - print(bench_result) + print_msg(bench_result) + + +def close_result(): + if not hasattr(write_result, 'file'): + return + write_result.file.close() + + +class BenchmarkResult: + def __init__(self, duration, run_number): + self.duration = duration + self.run_number = run_number -def benchmark_queries(benchmark_name, con, queries): - if verbose: - print(benchmark_name) - print(queries) - for nrun in range(nruns): - t = 0.0 - for i, q in enumerate(queries): +class TPCHData: + TABLES = ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"] + + def __init__(self, scale_factor): + self.conn = duckdb.connect() + self.conn.execute(f'CALL dbgen(sf={scale_factor})') + + def get_tables(self, convertor) -> Dict[str, Any]: + res = {} + for table in self.TABLES: + res[table] = convertor(self.conn, table) + return res + + def load_lineitem(self, collector) -> List[BenchmarkResult]: + query = 'SELECT * FROM lineitem' + results = [] + for nrun in range(nruns): + duration = 0.0 start = time.time() - rel = con.sql(q) - if rel: - if benchmark_name.startswith('pandas'): - if verbose: - print(f"Fetching '{q}' as a DataFrame") - df_result = rel.df() - elif benchmark_name.startswith('arrow'): - if verbose: - print(f"Fetching '{q}' as an Arrow table") - df_result = rel.arrow() - else: - if verbose: - print(f"Fetching '{q}' as native Python lists/tuples") - df_result = rel.fetchall() - else: - if verbose: - print(f"Query '{q}' did not produce output") + rel = self.conn.sql(query) + res = collector(rel) end = time.time() - query_time = float(end - start) - if verbose: - print(f"Q{str(i).ljust(len(str(nruns)), ' ')}: {query_time}") - t += float(end - start) - if verbose: + duration = float(end - start) + del res + padding = " " * len(str(nruns)) + print_msg(f"T{padding}: {duration}s") + results.append(BenchmarkResult(duration, nrun)) + return results + + +class TPCHBenchmarker: + def __init__(self, name: str): + self.initialize_connection() + self.name = name + + def initialize_connection(self): + self.con = duckdb.connect() + if not threads: + return + print_msg(f'Limiting threads to {threads}') + self.con.execute(f"SET threads={threads}") + + def register_tables(self, tables: Dict[str, Any]): + for name, table in tables.items(): + self.con.register(name, table) + + def run_tpch(self, collector) -> List[BenchmarkResult]: + print_msg("") + print_msg(TPCH_QUERIES) + results = [] + for nrun in range(nruns): + duration = 0.0 + # Execute all queries + for i, query in enumerate(TPCH_QUERIES): + start = time.time() + rel = self.con.sql(query) + if rel: + res = collector(rel) + del res + else: + print_msg(f"Query '{query}' did not produce output") + end = time.time() + query_time = float(end - start) + print_msg(f"Q{str(i).ljust(len(str(nruns)), ' ')}: {query_time}") + duration += float(end - start) padding = " " * len(str(nruns)) - print(f"T{padding}: {t}s") - write_result(benchmark_name, nrun, t) - - -def run_dataload(con, type): - benchmark_name = type + "_load_lineitem" - if verbose: - print(benchmark_name) - print(type) - q = 'SELECT * FROM lineitem' - for nrun in range(nruns): - t = 0.0 - start = time.time() - rel = con.sql(q) - if type == 'pandas': - res = rel.df() - elif type == 'arrow': - res = rel.arrow() - end = time.time() - t = float(end - start) - del res - if verbose: + print_msg(f"T{padding}: {duration}s") + results.append(BenchmarkResult(duration, nrun)) + return results + + +def test_tpch(): + print_msg(f"Generating TPCH (sf={scale_factor})") + tpch = TPCHData(scale_factor) + + ## -------- Benchmark converting LineItem to different formats --------- + + def fetch_native(rel: duckdb.DuckDBPyRelation): + return rel.fetchall() + + def fetch_pandas(rel: duckdb.DuckDBPyRelation): + return rel.df() + + def fetch_arrow(rel: duckdb.DuckDBPyRelation): + return rel.arrow() + + COLLECTORS = {'native': fetch_native, 'pandas': fetch_pandas, 'arrow': fetch_arrow} + # For every collector, load lineitem 'nrun' times + for collector in COLLECTORS: + results: List[BenchmarkResult] = tpch.load_lineitem(COLLECTORS[collector]) + benchmark_name = collector + "_load_lineitem" + print_msg(benchmark_name) + print_msg(collector) + for res in results: + run_number = res.run_number + duration = res.duration + write_result(benchmark_name, run_number, duration) + + ## ------- Benchmark running TPCH queries on top of different formats -------- + + def convert_pandas(conn: duckdb.DuckDBPyConnection, table_name: str): + return conn.execute(f"SELECT * FROM {table_name}").df() + + def convert_arrow(conn: duckdb.DuckDBPyConnection, table_name: str): + df = convert_pandas(conn, table_name) + return pa.Table.from_pandas(df) + + CONVERTORS = {'pandas': convert_pandas, 'arrow': convert_arrow} + # Convert TPCH data to the right format, then run TPCH queries on that data + for convertor in CONVERTORS: + tables = tpch.get_tables(CONVERTORS[convertor]) + tester = TPCHBenchmarker(convertor) + tester.register_tables(tables) + collector = COLLECTORS[convertor] + results: List[BenchmarkResult] = tester.run_tpch(collector) + benchmark_name = f"{convertor}tpch" + for res in results: + run_number = res.run_number + duration = res.duration + write_result(benchmark_name, run_number, duration) + + +def generate_string(seed: int): + output = '' + for _ in range(10): + output += chr(ord('A') + int(seed % 26)) + seed /= 26 + return output + + +class ArrowDictionary: + def __init__(self, unique_values): + self.size = unique_values + self.dict = [generate_string(x) for x in range(unique_values)] + + +class ArrowDictionaryBenchmark: + def __init__(self, unique_values, values, arrow_dict: ArrowDictionary): + assert unique_values <= arrow_dict.size + self.initialize_connection() + self.generate(unique_values, values, arrow_dict) + + def initialize_connection(self): + self.con = duckdb.connect() + if not threads: + return + print_msg(f'Limiting threads to {threads}') + self.con.execute(f"SET threads={threads}") + + def generate(self, unique_values, values, arrow_dict: ArrowDictionary): + self.input = [] + self.expected = [] + for x in range(values): + value = arrow_dict.dict[x % unique_values] + self.input.append(value) + self.expected.append((value,)) + + array = pa.array( + self.input, + type=pa.dictionary(pa.int64(), pa.string()), + ) + self.table = pa.table([array], names=["x"]) + + def benchmark(self) -> List[BenchmarkResult]: + self.con.register('arrow_table', self.table) + results = [] + for nrun in range(nruns): + duration = 0.0 + start = time.time() + res = self.con.execute( + """ + select * from arrow_table + """ + ).fetchall() + end = time.time() + duration = float(end - start) + assert self.expected == res + del res padding = " " * len(str(nruns)) - print(f"T{padding}: {t}s") - write_result(benchmark_name, nrun, t) + print_msg(f"T{padding}: {duration}s") + results.append(BenchmarkResult(duration, nrun)) + return results + +class PandasDFLoadBenchmark: + def __init__(self): + self.initialize_connection() + self.generate() + + def initialize_connection(self): + self.con = duckdb.connect() + if not threads: + return + print_msg(f'Limiting threads to {threads}') + self.con.execute(f"SET threads={threads}") + + def generate(self): + self.con.execute("call dbgen(sf=0.1)") + new_table = "*, " + ", ".join(["l_shipdate"] * 300) + self.con.execute(f"create table wide as select {new_table} from lineitem limit 500") + self.con.execute(f"copy wide to 'wide_table.csv' (FORMAT CSV)") + + def benchmark(self) -> List[BenchmarkResult]: + results = [] + for nrun in range(nruns): + duration = 0.0 + pandas_df = pd.read_csv('wide_table.csv') + start = time.time() + for amplification in range(30): + res = self.con.execute("""select * from pandas_df""").df() + end = time.time() + duration = float(end - start) + del res + results.append(BenchmarkResult(duration, nrun)) + return results -def run_tpch(con, prefix): - benchmark_name = f"{prefix}tpch" - queries = [] - for i in range(1, TPCH_NQUERIES + 1): - queries.append(f'PRAGMA tpch({i})') - benchmark_queries(benchmark_name, con, queries) +def test_arrow_dictionaries_scan(): + DICT_SIZE = 26 * 1000 + print_msg(f"Generating a unique dictionary of size {DICT_SIZE}") + arrow_dict = ArrowDictionary(DICT_SIZE) + DATASET_SIZE = 10000000 + for unique_values in [2, 1000, DICT_SIZE]: + test = ArrowDictionaryBenchmark(unique_values, DATASET_SIZE, arrow_dict) + results = test.benchmark() + benchmark_name = f"arrow_dict_unique_{unique_values}_total_{DATASET_SIZE}" + for res in results: + run_number = res.run_number + duration = res.duration + write_result(benchmark_name, run_number, duration) -if out_file is not None: - f = open(out_file, 'w+') -# pandas scans -data_frames = {} -for table in tables: - data_frames[table] = main_con.execute(f"SELECT * FROM {table}").df() +def test_loading_pandas_df_many_times(): + test = PandasDFLoadBenchmark() + results = test.benchmark() + benchmark_name = f"load_pandas_df_many_times" + for res in results: + run_number = res.run_number + duration = res.duration + write_result(benchmark_name, run_number, duration) -df_con = open_connection() -for table in tables: - df_con.register(table, data_frames[table]) -run_dataload(main_con, "pandas") -run_tpch(df_con, "pandas_") +def main(): + test_tpch() + test_arrow_dictionaries_scan() + test_loading_pandas_df_many_times() -# arrow scans -arrow_tables = {} -for table in tables: - arrow_tables[table] = pa.Table.from_pandas(data_frames[table]) + close_result() -arrow_con = open_connection() -for table in tables: - arrow_con.register(table, arrow_tables[table]) -run_dataload(main_con, "arrow") -run_tpch(arrow_con, "arrow_") +if __name__ == '__main__': + main() diff --git a/scripts/regression_test_runner.py b/scripts/regression_test_runner.py index e573401eb07e..9e69d13c01f7 100644 --- a/scripts/regression_test_runner.py +++ b/scripts/regression_test_runner.py @@ -5,10 +5,19 @@ import csv import statistics import math +import functools +import shutil + +print = functools.partial(print, flush=True) # Geometric mean of an array of numbers def geomean(xs): + if len(xs) == 0: + return 'EMPTY' + for entry in xs: + if isinstance(entry, str): + return entry return math.exp(math.fsum(math.log(float(x)) for x in xs) / len(xs)) @@ -60,11 +69,17 @@ def run_benchmark(runner, benchmark): benchmark_args = [runner, benchmark] if threads is not None: benchmark_args += ["--threads=%d" % (threads,)] - proc = subprocess.Popen(benchmark_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out = proc.stdout.read().decode('utf8') - err = proc.stderr.read().decode('utf8') - proc.wait() - if proc.returncode != 0: + timeout_seconds = 600 + try: + proc = subprocess.run(benchmark_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=timeout_seconds) + out = proc.stdout.decode('utf8') + err = proc.stderr.decode('utf8') + returncode = proc.returncode + except subprocess.TimeoutExpired: + print("Failed to run benchmark " + benchmark) + print(f"Aborted due to exceeding the limit of {timeout_seconds} seconds") + return 'Failed to run benchmark ' + benchmark + if returncode != 0: print("Failed to run benchmark " + benchmark) print( '''==================================================== @@ -186,8 +201,12 @@ def run_benchmarks(runner, benchmark_list): time_a = geomean(complete_timings[old_runner]) time_b = geomean(complete_timings[new_runner]) + print("") -if time_a > time_b * 1.01: +if isinstance(time_a, str) or isinstance(time_b, str): + print(f"Old: {time_a}") + print(f"New: {time_b}") +elif time_a > time_b * 1.01: print(f"Old timing geometric mean: {time_a}") print(f"New timing geometric mean: {time_b}, roughly {int((time_a - time_b) * 100.0 / time_a)}% faster") elif time_b > time_a * 1.01: @@ -197,4 +216,7 @@ def run_benchmarks(runner, benchmark_list): print(f"Old timing geometric mean: {time_a}") print(f"New timing geometric mean: {time_b}") +# nuke cached benchmark data between runs +if os.path.isdir("duckdb_benchmark_data"): + shutil.rmtree('duckdb_benchmark_data') exit(exit_code) diff --git a/scripts/run_tests_one_by_one.py b/scripts/run_tests_one_by_one.py index 6267733c1f3a..834780f904c3 100644 --- a/scripts/run_tests_one_by_one.py +++ b/scripts/run_tests_one_by_one.py @@ -4,6 +4,17 @@ import argparse + +def valid_timeout(value): + try: + timeout_float = float(value) + if timeout_float <= 0: + raise argparse.ArgumentTypeError("Timeout value must be a positive float") + return timeout_float + except ValueError: + raise argparse.ArgumentTypeError("Timeout value must be a float") + + parser = argparse.ArgumentParser(description='Run tests one by one with optional flags.') parser.add_argument('unittest_program', help='Path to the unittest program') parser.add_argument('--no-exit', action='store_true', help='Do not exit after running tests') @@ -11,6 +22,13 @@ parser.add_argument('--no-assertions', action='store_false', help='Disable assertions') parser.add_argument('--time_execution', action='store_true', help='Measure and print the execution time of each test') parser.add_argument('--list', action='store_true', help='Print the list of tests to run') +parser.add_argument( + '--timeout', + action='store', + help='Add an optional timeout for each test (in seconds)', + default=None, + type=valid_timeout, +) args, extra_args = parser.parse_known_args() @@ -23,6 +41,7 @@ profile = args.profile assertions = args.no_assertions time_execution = args.time_execution +timeout = args.timeout # Use the '-l' parameter to output the list of tests to run proc = subprocess.Popen([unittest_program, '-l'] + extra_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -52,11 +71,21 @@ if args.list: for test_number, test_case in enumerate(test_cases): print(print(f"[{test_number}/{test_count}]: {test_case}")) -return_code = 0 + +all_passed = True + + +def fail(): + global all_passed + all_passed = False + if not no_exit: + exit(1) def parse_assertions(stdout): for line in stdout.splitlines(): + if 'All tests were skipped' in line: + return "SKIPPED" if line == 'assertions: - none -': return "0 assertions" @@ -73,7 +102,15 @@ def parse_assertions(stdout): if not profile: print(f"[{test_number}/{test_count}]: {test_case}", end="") start = time.time() - res = subprocess.run([unittest_program, test_case], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + res = subprocess.run( + [unittest_program, test_case], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=timeout + ) + except subprocess.TimeoutExpired as e: + print(" (TIMED OUT)", flush=True) + fail() + continue + stdout = res.stdout.decode('utf8') stderr = res.stderr.decode('utf8') end = time.time() @@ -87,32 +124,33 @@ def parse_assertions(stdout): print(additional_data, flush=True) if profile: print(f'{test_case} {end - start}') - if res.returncode is not None and res.returncode != 0: - print("FAILURE IN RUNNING TEST") - print( - """-------------------- + if res.returncode is None or res.returncode == 0: + continue + + print("FAILURE IN RUNNING TEST") + print( + """-------------------- RETURNCODE -------------------- """ - ) - print(res.returncode) - print( - """-------------------- + ) + print(res.returncode) + print( + """-------------------- STDOUT -------------------- """ - ) - print(stdout) - print( - """-------------------- + ) + print(stdout) + print( + """-------------------- STDERR -------------------- """ - ) - print(stderr) - return_code = 1 - if not no_exit: - break - + ) + print(stderr) + fail() -exit(return_code) +if all_passed: + exit(0) +exit(1) diff --git a/scripts/test_block_sizes.py b/scripts/test_block_sizes.py index de97695cbe69..6f4dbc2fcc43 100644 --- a/scripts/test_block_sizes.py +++ b/scripts/test_block_sizes.py @@ -52,6 +52,5 @@ def replace_in_file(fname, regex, replace): ) execute_system_command('rm -rf build') -execute_system_command('make relassert') -execute_system_command('build/relassert/test/unittest') -execute_system_command('build/relassert/test/unittest "test/sql/storage/*"') +execute_system_command('make release') +execute_system_command('build/release/test/unittest') diff --git a/scripts/test_vector_sizes.py b/scripts/test_vector_sizes.py index 8a7f24a1d10a..49e044298aae 100644 --- a/scripts/test_vector_sizes.py +++ b/scripts/test_vector_sizes.py @@ -32,4 +32,4 @@ def replace_in_file(fname, regex, replace): ) execute_system_command('rm -rf build') execute_system_command('make relassert') - execute_system_command('python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest') + execute_system_command('python3 scripts/run_tests_one_by_one.py build/relassert/test/unittest --no-exit') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca94e6da211a..d45ae7fb65fd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,9 +20,12 @@ if(NOT MSVC) endif() endif() set(EXIT_TIME_DESTRUCTORS_WARNING FALSE) -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" + STREQUAL "AppleClang") set(EXIT_TIME_DESTRUCTORS_WARNING TRUE) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wexit-time-destructors") + set(CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG} -Wexit-time-destructors -Wimplicit-int-conversion -Wshorten-64-to-32 -Wnarrowing" + ) endif() set(DUCKDB_SYSTEM_LIBS ${CMAKE_DL_LIBS}) @@ -30,11 +33,15 @@ set(DUCKDB_SYSTEM_LIBS ${CMAKE_DL_LIBS}) if(MSVC OR MINGW) set(DUCKDB_SYSTEM_LIBS ${DUCKDB_SYSTEM_LIBS} ws2_32 rstrtmgr) endif() +if(MSVC) + set(DUCKDB_SYSTEM_LIBS ${DUCKDB_SYSTEM_LIBS} bcrypt) +endif() + +if(MSVC) + add_definitions(/bigobj) +endif() if(AMALGAMATION_BUILD) - if(WIN32) - add_definitions(/bigobj) - endif() add_library(duckdb SHARED "${PROJECT_SOURCE_DIR}/src/amalgamation/duckdb.cpp") target_link_libraries(duckdb ${DUCKDB_SYSTEM_LIBS}) diff --git a/src/catalog/catalog.cpp b/src/catalog/catalog.cpp index 55ee7a25f4f4..7294427a2942 100644 --- a/src/catalog/catalog.cpp +++ b/src/catalog/catalog.cpp @@ -469,14 +469,52 @@ void Catalog::AutoloadExtensionByConfigName(ClientContext &context, const string throw Catalog::UnrecognizedConfigurationError(context, configuration_name); } +static bool IsAutoloadableFunction(CatalogType type) { + return (type == CatalogType::TABLE_FUNCTION_ENTRY || type == CatalogType::SCALAR_FUNCTION_ENTRY || + type == CatalogType::AGGREGATE_FUNCTION_ENTRY || type == CatalogType::PRAGMA_FUNCTION_ENTRY); +} + +static bool CompareCatalogTypes(CatalogType type_a, CatalogType type_b) { + if (type_a == type_b) { + // Types are same + return true; + } + if (!IsAutoloadableFunction(type_a)) { + D_ASSERT(IsAutoloadableFunction(type_b)); + // Make sure that `type_a` is an autoloadable function + return CompareCatalogTypes(type_b, type_a); + } + if (type_a == CatalogType::TABLE_FUNCTION_ENTRY) { + // These are all table functions + return type_b == CatalogType::TABLE_MACRO_ENTRY || type_b == CatalogType::PRAGMA_FUNCTION_ENTRY; + } else if (type_a == CatalogType::SCALAR_FUNCTION_ENTRY) { + // These are all scalar functions + return type_b == CatalogType::MACRO_ENTRY; + } else if (type_a == CatalogType::PRAGMA_FUNCTION_ENTRY) { + // These are all table functions + return type_b == CatalogType::TABLE_MACRO_ENTRY || type_b == CatalogType::TABLE_FUNCTION_ENTRY; + } + return false; +} + bool Catalog::AutoLoadExtensionByCatalogEntry(DatabaseInstance &db, CatalogType type, const string &entry_name) { #ifndef DUCKDB_DISABLE_EXTENSION_LOAD auto &dbconfig = DBConfig::GetConfig(db); if (dbconfig.options.autoload_known_extensions) { string extension_name; - if (type == CatalogType::TABLE_FUNCTION_ENTRY || type == CatalogType::SCALAR_FUNCTION_ENTRY || - type == CatalogType::AGGREGATE_FUNCTION_ENTRY || type == CatalogType::PRAGMA_FUNCTION_ENTRY) { - extension_name = ExtensionHelper::FindExtensionInEntries(entry_name, EXTENSION_FUNCTIONS); + if (IsAutoloadableFunction(type)) { + auto lookup_result = ExtensionHelper::FindExtensionInFunctionEntries(entry_name, EXTENSION_FUNCTIONS); + if (lookup_result.empty()) { + return false; + } + for (auto &function : lookup_result) { + auto function_type = function.second; + // FIXME: what if there are two functions with the same name, from different extensions? + if (CompareCatalogTypes(type, function_type)) { + extension_name = function.first; + break; + } + } } else if (type == CatalogType::COPY_FUNCTION_ENTRY) { extension_name = ExtensionHelper::FindExtensionInEntries(entry_name, EXTENSION_COPY_FUNCTIONS); } else if (type == CatalogType::TYPE_ENTRY) { @@ -533,7 +571,42 @@ CatalogException Catalog::CreateMissingEntryException(ClientContext &context, co string extension_name; if (type == CatalogType::TABLE_FUNCTION_ENTRY || type == CatalogType::SCALAR_FUNCTION_ENTRY || type == CatalogType::AGGREGATE_FUNCTION_ENTRY || type == CatalogType::PRAGMA_FUNCTION_ENTRY) { - extension_name = ExtensionHelper::FindExtensionInEntries(entry_name, EXTENSION_FUNCTIONS); + auto lookup_result = ExtensionHelper::FindExtensionInFunctionEntries(entry_name, EXTENSION_FUNCTIONS); + do { + if (lookup_result.empty()) { + break; + } + vector other_types; + string extension_for_error; + for (auto &function : lookup_result) { + auto function_type = function.second; + if (CompareCatalogTypes(type, function_type)) { + extension_name = function.first; + break; + } + extension_for_error = function.first; + other_types.push_back(CatalogTypeToString(function_type)); + } + if (!extension_name.empty()) { + break; + } + if (other_types.size() == 1) { + auto &function_type = other_types[0]; + auto error = + CatalogException("%s with name \"%s\" is not in the catalog, a function by this name exists " + "in the %s extension, but it's of a different type, namely %s", + CatalogTypeToString(type), entry_name, extension_for_error, function_type); + return error; + } else { + D_ASSERT(!other_types.empty()); + auto list_of_types = StringUtil::Join(other_types, ", "); + auto error = + CatalogException("%s with name \"%s\" is not in the catalog, functions with this name exist " + "in the %s extension, but they are of different types, namely %s", + CatalogTypeToString(type), entry_name, extension_for_error, list_of_types); + return error; + } + } while (false); } else if (type == CatalogType::TYPE_ENTRY) { extension_name = ExtensionHelper::FindExtensionInEntries(entry_name, EXTENSION_TYPES); } else if (type == CatalogType::COPY_FUNCTION_ENTRY) { diff --git a/src/catalog/catalog_entry/duck_table_entry.cpp b/src/catalog/catalog_entry/duck_table_entry.cpp index c55d0a10e806..7c93ece48f4a 100644 --- a/src/catalog/catalog_entry/duck_table_entry.cpp +++ b/src/catalog/catalog_entry/duck_table_entry.cpp @@ -22,6 +22,7 @@ #include "duckdb/storage/storage_manager.hpp" #include "duckdb/storage/table_storage_info.hpp" #include "duckdb/common/exception/transaction_exception.hpp" +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" namespace duckdb { @@ -160,6 +161,13 @@ unique_ptr DuckTableEntry::GetStatistics(ClientContext &context, unique_ptr DuckTableEntry::AlterEntry(ClientContext &context, AlterInfo &info) { D_ASSERT(!internal); + + // Column comments have a special alter type + if (info.type == AlterType::SET_COLUMN_COMMENT) { + auto &comment_on_column_info = info.Cast(); + return SetColumnComment(context, comment_on_column_info); + } + if (info.type != AlterType::ALTER_TABLE) { throw CatalogException("Can only modify table with ALTER TABLE statement"); } @@ -208,10 +216,6 @@ unique_ptr DuckTableEntry::AlterEntry(ClientContext &context, Alte auto &drop_not_null_info = table_info.Cast(); return DropNotNull(context, drop_not_null_info); } - case AlterTableType::SET_COLUMN_COMMENT: { - auto &column_comment_info = table_info.Cast(); - return SetColumnComment(context, column_comment_info); - } default: throw InternalException("Unrecognized alter table type!"); } @@ -673,7 +677,7 @@ unique_ptr DuckTableEntry::SetColumnComment(ClientContext &context for (auto &col : columns.Logical()) { auto copy = col.Copy(); if (default_idx == col.Logical()) { - copy.SetComment(info.comment); + copy.SetComment(info.comment_value); } create_info->columns.AddColumn(std::move(copy)); } diff --git a/src/catalog/catalog_entry/table_catalog_entry.cpp b/src/catalog/catalog_entry/table_catalog_entry.cpp index e328fc9a4abf..c4332497321c 100644 --- a/src/catalog/catalog_entry/table_catalog_entry.cpp +++ b/src/catalog/catalog_entry/table_catalog_entry.cpp @@ -217,6 +217,7 @@ static void BindExtraColumns(TableCatalogEntry &table, LogicalGet &get, LogicalP static bool TypeSupportsRegularUpdate(const LogicalType &type) { switch (type.id()) { case LogicalTypeId::LIST: + case LogicalTypeId::ARRAY: case LogicalTypeId::MAP: case LogicalTypeId::UNION: // lists and maps and unions don't support updates directly diff --git a/src/catalog/catalog_entry/view_catalog_entry.cpp b/src/catalog/catalog_entry/view_catalog_entry.cpp index 1670eee90faf..8d3a0debb8ad 100644 --- a/src/catalog/catalog_entry/view_catalog_entry.cpp +++ b/src/catalog/catalog_entry/view_catalog_entry.cpp @@ -2,8 +2,10 @@ #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp" #include "duckdb/common/exception.hpp" +#include "duckdb/common/exception/binder_exception.hpp" #include "duckdb/parser/parsed_data/alter_table_info.hpp" #include "duckdb/parser/parsed_data/create_view_info.hpp" +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" #include "duckdb/common/limits.hpp" #include @@ -19,6 +21,7 @@ void ViewCatalogEntry::Initialize(CreateViewInfo &info) { this->sql = info.sql; this->internal = info.internal; this->comment = info.comment; + this->column_comments = info.column_comments; } ViewCatalogEntry::ViewCatalogEntry(Catalog &catalog, SchemaCatalogEntry &schema, CreateViewInfo &info) @@ -37,11 +40,36 @@ unique_ptr ViewCatalogEntry::GetInfo() const { result->types = types; result->temporary = temporary; result->comment = comment; + result->column_comments = column_comments; return std::move(result); } unique_ptr ViewCatalogEntry::AlterEntry(ClientContext &context, AlterInfo &info) { D_ASSERT(!internal); + + // Column comments have a special alter type + if (info.type == AlterType::SET_COLUMN_COMMENT) { + auto &comment_on_column_info = info.Cast(); + auto copied_view = Copy(context); + + for (idx_t i = 0; i < names.size(); i++) { + const auto &col_name = names[i]; + if (col_name == comment_on_column_info.column_name) { + auto &copied_view_entry = copied_view->Cast(); + + // If vector is empty, we need to initialize it on setting here + if (copied_view_entry.column_comments.empty()) { + copied_view_entry.column_comments = vector(copied_view_entry.types.size()); + } + + copied_view_entry.column_comments[i] = comment_on_column_info.comment_value; + return copied_view; + } + } + throw BinderException("View \"%s\" does not have a column with name \"%s\"", name, + comment_on_column_info.column_name); + } + if (info.type != AlterType::ALTER_VIEW) { throw CatalogException("Can only modify view with ALTER VIEW statement"); } diff --git a/src/catalog/default/default_functions.cpp b/src/catalog/default/default_functions.cpp index 503cdbc46bba..63c049b252ac 100644 --- a/src/catalog/default/default_functions.cpp +++ b/src/catalog/default/default_functions.cpp @@ -162,6 +162,9 @@ static DefaultMacro internal_macros[] = { // date functions {DEFAULT_SCHEMA, "date_add", {"date", "interval", nullptr}, "date + interval"}, + // regexp functions + {DEFAULT_SCHEMA, "regexp_split_to_table", {"text", "pattern", nullptr}, "unnest(string_split_regex(text, pattern))"}, + // storage helper functions {DEFAULT_SCHEMA, "get_block_size", {"db_name"}, "(SELECT block_size FROM pragma_database_size() WHERE database_name = db_name)"}, diff --git a/src/catalog/default/default_views.cpp b/src/catalog/default/default_views.cpp index a106d87b0f80..57c913c0e84e 100644 --- a/src/catalog/default/default_views.cpp +++ b/src/catalog/default/default_views.cpp @@ -46,11 +46,11 @@ static DefaultView internal_views[] = { {"pg_catalog", "pg_tablespace", "SELECT 0 oid, 'pg_default' spcname, 0 spcowner, NULL spcacl, NULL spcoptions"}, {"pg_catalog", "pg_type", "SELECT type_oid oid, format_pg_type(type_name) typname, schema_oid typnamespace, 0 typowner, type_size typlen, false typbyval, CASE WHEN logical_type='ENUM' THEN 'e' else 'b' end typtype, CASE WHEN type_category='NUMERIC' THEN 'N' WHEN type_category='STRING' THEN 'S' WHEN type_category='DATETIME' THEN 'D' WHEN type_category='BOOLEAN' THEN 'B' WHEN type_category='COMPOSITE' THEN 'C' WHEN type_category='USER' THEN 'U' ELSE 'X' END typcategory, false typispreferred, true typisdefined, NULL typdelim, NULL typrelid, NULL typsubscript, NULL typelem, NULL typarray, NULL typinput, NULL typoutput, NULL typreceive, NULL typsend, NULL typmodin, NULL typmodout, NULL typanalyze, 'd' typalign, 'p' typstorage, NULL typnotnull, NULL typbasetype, NULL typtypmod, NULL typndims, NULL typcollation, NULL typdefaultbin, NULL typdefault, NULL typacl FROM duckdb_types() WHERE type_size IS NOT NULL;"}, {"pg_catalog", "pg_views", "SELECT schema_name schemaname, view_name viewname, 'duckdb' viewowner, sql definition FROM duckdb_views()"}, - {"information_schema", "columns", "SELECT database_name table_catalog, schema_name table_schema, table_name, column_name, column_index ordinal_position, column_default, CASE WHEN is_nullable THEN 'YES' ELSE 'NO' END is_nullable, data_type, character_maximum_length, NULL character_octet_length, numeric_precision, numeric_precision_radix, numeric_scale, NULL datetime_precision, NULL interval_type, NULL interval_precision, NULL character_set_catalog, NULL character_set_schema, NULL character_set_name, NULL collation_catalog, NULL collation_schema, NULL collation_name, NULL domain_catalog, NULL domain_schema, NULL domain_name, NULL udt_catalog, NULL udt_schema, NULL udt_name, NULL scope_catalog, NULL scope_schema, NULL scope_name, NULL maximum_cardinality, NULL dtd_identifier, NULL is_self_referencing, NULL is_identity, NULL identity_generation, NULL identity_start, NULL identity_increment, NULL identity_maximum, NULL identity_minimum, NULL identity_cycle, NULL is_generated, NULL generation_expression, NULL is_updatable FROM duckdb_columns;"}, + {"information_schema", "columns", "SELECT database_name table_catalog, schema_name table_schema, table_name, column_name, column_index ordinal_position, column_default, CASE WHEN is_nullable THEN 'YES' ELSE 'NO' END is_nullable, data_type, character_maximum_length, NULL character_octet_length, numeric_precision, numeric_precision_radix, numeric_scale, NULL datetime_precision, NULL interval_type, NULL interval_precision, NULL character_set_catalog, NULL character_set_schema, NULL character_set_name, NULL collation_catalog, NULL collation_schema, NULL collation_name, NULL domain_catalog, NULL domain_schema, NULL domain_name, NULL udt_catalog, NULL udt_schema, NULL udt_name, NULL scope_catalog, NULL scope_schema, NULL scope_name, NULL maximum_cardinality, NULL dtd_identifier, NULL is_self_referencing, NULL is_identity, NULL identity_generation, NULL identity_start, NULL identity_increment, NULL identity_maximum, NULL identity_minimum, NULL identity_cycle, NULL is_generated, NULL generation_expression, NULL is_updatable, comment AS COLUMN_COMMENT FROM duckdb_columns;"}, {"information_schema", "schemata", "SELECT database_name catalog_name, schema_name, 'duckdb' schema_owner, NULL default_character_set_catalog, NULL default_character_set_schema, NULL default_character_set_name, sql sql_path FROM duckdb_schemas()"}, - {"information_schema", "tables", "SELECT database_name table_catalog, schema_name table_schema, table_name, CASE WHEN temporary THEN 'LOCAL TEMPORARY' ELSE 'BASE TABLE' END table_type, NULL self_referencing_column_name, NULL reference_generation, NULL user_defined_type_catalog, NULL user_defined_type_schema, NULL user_defined_type_name, 'YES' is_insertable_into, 'NO' is_typed, CASE WHEN temporary THEN 'PRESERVE' ELSE NULL END commit_action FROM duckdb_tables() UNION ALL SELECT database_name table_catalog, schema_name table_schema, view_name table_name, 'VIEW' table_type, NULL self_referencing_column_name, NULL reference_generation, NULL user_defined_type_catalog, NULL user_defined_type_schema, NULL user_defined_type_name, 'NO' is_insertable_into, 'NO' is_typed, NULL commit_action FROM duckdb_views;"}, + {"information_schema", "tables", "SELECT database_name table_catalog, schema_name table_schema, table_name, CASE WHEN temporary THEN 'LOCAL TEMPORARY' ELSE 'BASE TABLE' END table_type, NULL self_referencing_column_name, NULL reference_generation, NULL user_defined_type_catalog, NULL user_defined_type_schema, NULL user_defined_type_name, 'YES' is_insertable_into, 'NO' is_typed, CASE WHEN temporary THEN 'PRESERVE' ELSE NULL END commit_action, comment AS TABLE_COMMENT FROM duckdb_tables() UNION ALL SELECT database_name table_catalog, schema_name table_schema, view_name table_name, 'VIEW' table_type, NULL self_referencing_column_name, NULL reference_generation, NULL user_defined_type_catalog, NULL user_defined_type_schema, NULL user_defined_type_name, 'NO' is_insertable_into, 'NO' is_typed, NULL commit_action, comment AS TABLE_COMMENT FROM duckdb_views;"}, {"information_schema", "character_sets", "SELECT NULL character_set_catalog, NULL character_set_schema, 'UTF8' character_set_name, 'UCS' character_repertoire, 'UTF8' form_of_use, current_database() default_collate_catalog, 'pg_catalog' default_collate_schema, 'ucs_basic' default_collate_name;"}, - {"information_schema", "referential_constraints", "SELECT f.database_name constraint_catalog, f.schema_name constraint_schema, concat(f.source, '_', f.target, '_', f.target_column, '_fkey') constraint_name, current_database() unique_constraint_catalog, c.schema_name unique_constraint_schema, concat(c.table_name, '_', f.target_column, '_', CASE WHEN c.constraint_type == 'UNIQUE' THEN 'key' ELSE 'pkey' END) unique_constraint_name, 'NONE' match_option, 'NO ACTION' update_rule, 'NO ACTION' delete_rule FROM duckdb_constraints() c JOIN (SELECT *, name_extract['source'] source, name_extract['target'] target, name_extract['target_column'] target_column FROM (SELECT *, regexp_extract(constraint_text, 'FOREIGN KEY \\(([a-zA-Z_0-9]+)\\) REFERENCES ([a-zA-Z_0-9]+)\\(([a-zA-Z_0-9]+)\\)', ['source', 'target', 'target_column']) name_extract FROM duckdb_constraints() WHERE constraint_type = 'FOREIGN KEY')) f ON name_extract['target'] = c.table_name AND (c.constraint_type = 'UNIQUE' OR c.constraint_type = 'PRIMARY KEY')"}, + {"information_schema", "referential_constraints", "SELECT f.database_name constraint_catalog, f.schema_name constraint_schema, concat(f.source, '_', f.target, '_', f.target_column, '_fkey') constraint_name, current_database() unique_constraint_catalog, c.schema_name unique_constraint_schema, concat(c.table_name, '_', f.target_column, '_', CASE WHEN c.constraint_type == 'UNIQUE' THEN 'key' ELSE 'pkey' END) unique_constraint_name, 'NONE' match_option, 'NO ACTION' update_rule, 'NO ACTION' delete_rule FROM duckdb_constraints() c JOIN (SELECT *, name_extract['source'] as source, name_extract['target'] as target, name_extract['target_column'] as target_column FROM (SELECT *, regexp_extract(constraint_text, 'FOREIGN KEY \\(([a-zA-Z_0-9]+)\\) REFERENCES ([a-zA-Z_0-9]+)\\(([a-zA-Z_0-9]+)\\)', ['source', 'target', 'target_column']) name_extract FROM duckdb_constraints() WHERE constraint_type = 'FOREIGN KEY')) f ON name_extract['target'] = c.table_name AND (c.constraint_type = 'UNIQUE' OR c.constraint_type = 'PRIMARY KEY')"}, {"information_schema", "key_column_usage", "SELECT current_database() constraint_catalog, schema_name constraint_schema, concat(table_name, '_', constraint_column_names[1], CASE constraint_type WHEN 'FOREIGN KEY' THEN '_fkey' WHEN 'PRIMARY KEY' THEN '_pkey' ELSE '_key' END) constraint_name, current_database() table_catalog, schema_name table_schema, table_name, constraint_column_names[1] column_name, 1 ordinal_position, CASE constraint_type WHEN 'FOREIGN KEY' THEN 1 ELSE NULL END position_in_unique_constraint FROM duckdb_constraints() WHERE constraint_type = 'FOREIGN KEY' OR constraint_type = 'PRIMARY KEY' OR constraint_type = 'UNIQUE';"}, {"information_schema", "table_constraints", "SELECT current_database() constraint_catalog, schema_name constraint_schema, concat(table_name, '_', CASE WHEN length(constraint_column_names) > 1 THEN NULL ELSE constraint_column_names[1] || '_' END, CASE constraint_type WHEN 'FOREIGN KEY' THEN 'fkey' WHEN 'PRIMARY KEY' THEN 'pkey' WHEN 'UNIQUE' THEN 'key' WHEN 'CHECK' THEN 'check' WHEN 'NOT NULL' THEN 'not_null' END) constraint_name, current_database() table_catalog, schema_name table_schema, table_name, CASE constraint_type WHEN 'NOT NULL' THEN 'CHECK' ELSE constraint_type END constraint_type, 'NO' is_deferrable, 'NO' initially_deferred, 'YES' enforced, 'YES' nulls_distinct FROM duckdb_constraints() WHERE constraint_type = 'PRIMARY KEY' OR constraint_type = 'FOREIGN KEY' OR constraint_type = 'UNIQUE' OR constraint_type = 'CHECK' OR constraint_type = 'NOT NULL';"}, {nullptr, nullptr, nullptr}}; diff --git a/src/catalog/dependency_catalog_set.cpp b/src/catalog/dependency_catalog_set.cpp index e58dfdf240a2..dacf7cf59727 100644 --- a/src/catalog/dependency_catalog_set.cpp +++ b/src/catalog/dependency_catalog_set.cpp @@ -11,9 +11,7 @@ MangledDependencyName DependencyCatalogSet::ApplyPrefix(const MangledEntryName & bool DependencyCatalogSet::CreateEntry(CatalogTransaction transaction, const MangledEntryName &name, unique_ptr value) { auto new_name = ApplyPrefix(name); - - static const DependencyList EMPTY_DEPENDENCIES; - return set.CreateEntry(transaction, new_name.name, std::move(value), EMPTY_DEPENDENCIES); + return set.CreateEntry(transaction, new_name.name, std::move(value), DependencyList()); } CatalogSet::EntryLookup DependencyCatalogSet::GetEntryDetailed(CatalogTransaction transaction, diff --git a/src/catalog/dependency_manager.cpp b/src/catalog/dependency_manager.cpp index 0a5ad435ea68..918bd3b276b7 100644 --- a/src/catalog/dependency_manager.cpp +++ b/src/catalog/dependency_manager.cpp @@ -27,19 +27,16 @@ static void AssertMangledName(const string &mangled_name, idx_t expected_null_by } MangledEntryName::MangledEntryName(const CatalogEntryInfo &info) { - static const auto NULL_BYTE = string(1, '\0'); - auto &type = info.type; auto &schema = info.schema; auto &name = info.name; - this->name = CatalogTypeToString(type) + NULL_BYTE + schema + NULL_BYTE + name; + this->name = CatalogTypeToString(type) + '\0' + schema + '\0' + name; AssertMangledName(this->name, 2); } MangledDependencyName::MangledDependencyName(const MangledEntryName &from, const MangledEntryName &to) { - static const auto NULL_BYTE = string(1, '\0'); - this->name = from.name + NULL_BYTE + to.name; + this->name = from.name + '\0' + to.name; AssertMangledName(this->name, 5); } diff --git a/src/common/adbc/adbc.cpp b/src/common/adbc/adbc.cpp index 18d384c87621..47d2ff88e9e0 100644 --- a/src/common/adbc/adbc.cpp +++ b/src/common/adbc/adbc.cpp @@ -437,7 +437,7 @@ AdbcStatusCode ConnectionGetInfo(struct AdbcConnection *connection, const uint32 duckdb::string results = ""; for (size_t i = 0; i < length; i++) { - uint32_t code = info_codes ? info_codes[i] : i; + auto code = duckdb::NumericCast(info_codes ? info_codes[i] : i); auto info_code = ConvertToInfoCode(code); switch (info_code) { case AdbcInfoCode::VENDOR_NAME: { diff --git a/src/common/adbc/driver_manager.cpp b/src/common/adbc/driver_manager.cpp index 463a4fc1adba..1d2bc1f233c3 100644 --- a/src/common/adbc/driver_manager.cpp +++ b/src/common/adbc/driver_manager.cpp @@ -21,6 +21,7 @@ // specific language governing permissions and limitations // under the License. +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/adbc/driver_manager.h" #include "duckdb/common/adbc/adbc.h" #include "duckdb/common/adbc/adbc.hpp" @@ -513,7 +514,7 @@ std::string AdbcDriverManagerDefaultEntrypoint(const std::string &driver) { // if pos == npos this is the entire filename std::string token = filename.substr(prev, pos - prev); // capitalize first letter - token[0] = std::toupper(static_cast(token[0])); + token[0] = duckdb::NumericCast(std::toupper(static_cast(token[0]))); entrypoint += token; diff --git a/src/common/arrow/appender/CMakeLists.txt b/src/common/arrow/appender/CMakeLists.txt index f7d91fa84e33..a342652e23a3 100644 --- a/src/common/arrow/appender/CMakeLists.txt +++ b/src/common/arrow/appender/CMakeLists.txt @@ -1,5 +1,5 @@ add_library_unity(duckdb_common_arrow_appender OBJECT bool_data.cpp - struct_data.cpp union_data.cpp) + struct_data.cpp union_data.cpp fixed_size_list_data.cpp) set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} $ PARENT_SCOPE) diff --git a/src/common/arrow/appender/fixed_size_list_data.cpp b/src/common/arrow/appender/fixed_size_list_data.cpp new file mode 100644 index 000000000000..d546e16db11c --- /dev/null +++ b/src/common/arrow/appender/fixed_size_list_data.cpp @@ -0,0 +1,39 @@ +#include "duckdb/common/arrow/arrow_appender.hpp" +#include "duckdb/common/arrow/appender/fixed_size_list_data.hpp" + +namespace duckdb { + +//===--------------------------------------------------------------------===// +// Arrays +//===--------------------------------------------------------------------===// +void ArrowFixedSizeListData::Initialize(ArrowAppendData &result, const LogicalType &type, idx_t capacity) { + auto &child_type = ArrayType::GetChildType(type); + auto array_size = ArrayType::GetSize(type); + auto child_buffer = ArrowAppender::InitializeChild(child_type, capacity * array_size, result.options); + result.child_data.push_back(std::move(child_buffer)); +} + +void ArrowFixedSizeListData::Append(ArrowAppendData &append_data, Vector &input, idx_t from, idx_t to, + idx_t input_size) { + UnifiedVectorFormat format; + input.ToUnifiedFormat(input_size, format); + idx_t size = to - from; + AppendValidity(append_data, format, from, to); + + auto array_size = ArrayType::GetSize(input.GetType()); + auto &child_vector = ArrayVector::GetEntry(input); + auto &child_data = *append_data.child_data[0]; + child_data.append_vector(child_data, child_vector, from * array_size, to * array_size, size * array_size); + append_data.row_count += size; +} + +void ArrowFixedSizeListData::Finalize(ArrowAppendData &append_data, const LogicalType &type, ArrowArray *result) { + result->n_buffers = 1; + auto &child_type = ArrayType::GetChildType(type); + ArrowAppender::AddChildren(append_data, 1); + result->children = append_data.child_pointers.data(); + result->n_children = 1; + append_data.child_arrays[0] = *ArrowAppender::FinalizeChild(child_type, std::move(append_data.child_data[0])); +} + +} // namespace duckdb diff --git a/src/common/arrow/appender/union_data.cpp b/src/common/arrow/appender/union_data.cpp index 3adb8d05da54..d65997ba1b09 100644 --- a/src/common/arrow/appender/union_data.cpp +++ b/src/common/arrow/appender/union_data.cpp @@ -1,3 +1,4 @@ +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/arrow/arrow_appender.hpp" #include "duckdb/common/arrow/appender/union_data.hpp" @@ -42,7 +43,7 @@ void ArrowUnionData::Append(ArrowAppendData &append_data, Vector &input, idx_t f child_vectors[child_idx].SetValue(input_idx, child_idx == tag ? resolved_value : Value(nullptr)); } - types_buffer.data()[input_idx] = tag; + types_buffer.data()[input_idx] = NumericCast(tag); } for (idx_t child_idx = 0; child_idx < child_vectors.size(); child_idx++) { diff --git a/src/common/arrow/arrow_appender.cpp b/src/common/arrow/arrow_appender.cpp index bbca77756832..6dc0c14b3d24 100644 --- a/src/common/arrow/arrow_appender.cpp +++ b/src/common/arrow/arrow_appender.cpp @@ -227,6 +227,9 @@ static void InitializeFunctionPointers(ArrowAppendData &append_data, const Logic case LogicalTypeId::STRUCT: InitializeAppenderForType(append_data); break; + case LogicalTypeId::ARRAY: + InitializeAppenderForType(append_data); + break; case LogicalTypeId::LIST: { if (append_data.options.arrow_offset_size == ArrowOffsetSize::LARGE) { InitializeAppenderForType>(append_data); @@ -236,11 +239,8 @@ static void InitializeFunctionPointers(ArrowAppendData &append_data, const Logic break; } case LogicalTypeId::MAP: - if (append_data.options.arrow_offset_size == ArrowOffsetSize::LARGE) { - InitializeAppenderForType>(append_data); - } else { - InitializeAppenderForType>(append_data); - } + // Arrow MapArray only supports 32-bit offsets. There is no LargeMapArray type in Arrow. + InitializeAppenderForType>(append_data); break; default: throw NotImplementedException("Unsupported type in DuckDB -> Arrow Conversion: %s\n", type.ToString()); diff --git a/src/common/arrow/arrow_converter.cpp b/src/common/arrow/arrow_converter.cpp index d57bcc471bcb..62be691b484f 100644 --- a/src/common/arrow/arrow_converter.cpp +++ b/src/common/arrow/arrow_converter.cpp @@ -226,6 +226,23 @@ void SetArrowFormat(DuckDBArrowSchemaHolder &root_holder, ArrowSchema &child, co } break; } + case LogicalTypeId::ARRAY: { + auto array_size = ArrayType::GetSize(type); + auto &child_type = ArrayType::GetChildType(type); + auto format = "+w:" + to_string(array_size); + root_holder.owned_type_names.push_back(AddName(format)); + child.format = root_holder.owned_type_names.back().get(); + + child.n_children = 1; + root_holder.nested_children.emplace_back(); + root_holder.nested_children.back().resize(1); + root_holder.nested_children_ptr.emplace_back(); + root_holder.nested_children_ptr.back().push_back(&root_holder.nested_children.back()[0]); + InitializeChild(root_holder.nested_children.back()[0], root_holder); + child.children = &root_holder.nested_children_ptr.back()[0]; + SetArrowFormat(root_holder, **child.children, child_type, options); + break; + } case LogicalTypeId::MAP: { SetArrowMapFormat(root_holder, child, type, options); break; diff --git a/src/common/compressed_file_system.cpp b/src/common/compressed_file_system.cpp index dab274b27c28..725393904127 100644 --- a/src/common/compressed_file_system.cpp +++ b/src/common/compressed_file_system.cpp @@ -113,6 +113,7 @@ void CompressedFile::Close() { stream_data.in_buff_end = nullptr; stream_data.in_buf_size = 0; stream_data.out_buf_size = 0; + stream_data.refresh = false; } int64_t CompressedFileSystem::Read(FileHandle &handle, void *buffer, int64_t nr_bytes) { diff --git a/src/common/enum_util.cpp b/src/common/enum_util.cpp index e2cdc1fcc578..9f28e17da3d8 100644 --- a/src/common/enum_util.cpp +++ b/src/common/enum_util.cpp @@ -70,9 +70,9 @@ #include "duckdb/core_functions/aggregate/quantile_enum.hpp" #include "duckdb/execution/index/art/art.hpp" #include "duckdb/execution/index/art/node.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_option.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_option.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state.hpp" +#include "duckdb/execution/operator/csv_scanner/quote_rules.hpp" #include "duckdb/function/aggregate_state.hpp" #include "duckdb/function/function.hpp" #include "duckdb/function/macro_function.hpp" @@ -408,6 +408,8 @@ const char* EnumUtil::ToChars(AlterType value) { return "ALTER_TABLE_FUNCTION"; case AlterType::SET_COMMENT: return "SET_COMMENT"; + case AlterType::SET_COLUMN_COMMENT: + return "SET_COLUMN_COMMENT"; default: throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value)); } @@ -439,6 +441,9 @@ AlterType EnumUtil::FromString(const char *value) { if (StringUtil::Equals(value, "SET_COMMENT")) { return AlterType::SET_COMMENT; } + if (StringUtil::Equals(value, "SET_COLUMN_COMMENT")) { + return AlterType::SET_COLUMN_COMMENT; + } throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value)); } @@ -2805,6 +2810,44 @@ KeywordCategory EnumUtil::FromString(const char *value) { throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value)); } +template<> +const char* EnumUtil::ToChars(LimitNodeType value) { + switch(value) { + case LimitNodeType::UNSET: + return "UNSET"; + case LimitNodeType::CONSTANT_VALUE: + return "CONSTANT_VALUE"; + case LimitNodeType::CONSTANT_PERCENTAGE: + return "CONSTANT_PERCENTAGE"; + case LimitNodeType::EXPRESSION_VALUE: + return "EXPRESSION_VALUE"; + case LimitNodeType::EXPRESSION_PERCENTAGE: + return "EXPRESSION_PERCENTAGE"; + default: + throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value)); + } +} + +template<> +LimitNodeType EnumUtil::FromString(const char *value) { + if (StringUtil::Equals(value, "UNSET")) { + return LimitNodeType::UNSET; + } + if (StringUtil::Equals(value, "CONSTANT_VALUE")) { + return LimitNodeType::CONSTANT_VALUE; + } + if (StringUtil::Equals(value, "CONSTANT_PERCENTAGE")) { + return LimitNodeType::CONSTANT_PERCENTAGE; + } + if (StringUtil::Equals(value, "EXPRESSION_VALUE")) { + return LimitNodeType::EXPRESSION_VALUE; + } + if (StringUtil::Equals(value, "EXPRESSION_PERCENTAGE")) { + return LimitNodeType::EXPRESSION_PERCENTAGE; + } + throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value)); +} + template<> const char* EnumUtil::ToChars(LoadType value) { switch(value) { @@ -2860,8 +2903,6 @@ const char* EnumUtil::ToChars(LogicalOperatorType value) { return "LOGICAL_DISTINCT"; case LogicalOperatorType::LOGICAL_SAMPLE: return "LOGICAL_SAMPLE"; - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: - return "LOGICAL_LIMIT_PERCENT"; case LogicalOperatorType::LOGICAL_PIVOT: return "LOGICAL_PIVOT"; case LogicalOperatorType::LOGICAL_COPY_DATABASE: @@ -3001,9 +3042,6 @@ LogicalOperatorType EnumUtil::FromString(const char *value) if (StringUtil::Equals(value, "LOGICAL_SAMPLE")) { return LogicalOperatorType::LOGICAL_SAMPLE; } - if (StringUtil::Equals(value, "LOGICAL_LIMIT_PERCENT")) { - return LogicalOperatorType::LOGICAL_LIMIT_PERCENT; - } if (StringUtil::Equals(value, "LOGICAL_PIVOT")) { return LogicalOperatorType::LOGICAL_PIVOT; } @@ -3461,6 +3499,12 @@ const char* EnumUtil::ToChars(MapInvalidReason value) { return "NULL_KEY"; case MapInvalidReason::DUPLICATE_KEY: return "DUPLICATE_KEY"; + case MapInvalidReason::NULL_VALUE_LIST: + return "NULL_VALUE_LIST"; + case MapInvalidReason::NOT_ALIGNED: + return "NOT_ALIGNED"; + case MapInvalidReason::INVALID_PARAMS: + return "INVALID_PARAMS"; default: throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value)); } @@ -3480,6 +3524,15 @@ MapInvalidReason EnumUtil::FromString(const char *value) { if (StringUtil::Equals(value, "DUPLICATE_KEY")) { return MapInvalidReason::DUPLICATE_KEY; } + if (StringUtil::Equals(value, "NULL_VALUE_LIST")) { + return MapInvalidReason::NULL_VALUE_LIST; + } + if (StringUtil::Equals(value, "NOT_ALIGNED")) { + return MapInvalidReason::NOT_ALIGNED; + } + if (StringUtil::Equals(value, "INVALID_PARAMS")) { + return MapInvalidReason::INVALID_PARAMS; + } throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value)); } @@ -4033,6 +4086,8 @@ const char* EnumUtil::ToChars(ParseInfoType value) { return "VACUUM_INFO"; case ParseInfoType::COMMENT_ON_INFO: return "COMMENT_ON_INFO"; + case ParseInfoType::COMMENT_ON_COLUMN_INFO: + return "COMMENT_ON_COLUMN_INFO"; default: throw NotImplementedException(StringUtil::Format("Enum value: '%d' not implemented", value)); } @@ -4082,6 +4137,9 @@ ParseInfoType EnumUtil::FromString(const char *value) { if (StringUtil::Equals(value, "COMMENT_ON_INFO")) { return ParseInfoType::COMMENT_ON_INFO; } + if (StringUtil::Equals(value, "COMMENT_ON_COLUMN_INFO")) { + return ParseInfoType::COMMENT_ON_COLUMN_INFO; + } throw NotImplementedException(StringUtil::Format("Enum value: '%s' not implemented", value)); } diff --git a/src/common/enums/logical_operator_type.cpp b/src/common/enums/logical_operator_type.cpp index 495bf59d516e..c2beaae96403 100644 --- a/src/common/enums/logical_operator_type.cpp +++ b/src/common/enums/logical_operator_type.cpp @@ -46,8 +46,6 @@ string LogicalOperatorToString(LogicalOperatorType type) { return "TOP_N"; case LogicalOperatorType::LOGICAL_SAMPLE: return "SAMPLE"; - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: - return "LIMIT_PERCENT"; case LogicalOperatorType::LOGICAL_COPY_TO_FILE: return "COPY_TO_FILE"; case LogicalOperatorType::LOGICAL_COPY_DATABASE: diff --git a/src/common/exception.cpp b/src/common/exception.cpp index 8de09b8472ed..1ad9c751d631 100644 --- a/src/common/exception.cpp +++ b/src/common/exception.cpp @@ -215,19 +215,6 @@ void Exception::SetQueryLocation(optional_idx error_location, unordered_map PARENT_SCOPE) diff --git a/src/common/exception/conversion_exception.cpp b/src/common/exception/conversion_exception.cpp new file mode 100644 index 000000000000..013dbdb9e5df --- /dev/null +++ b/src/common/exception/conversion_exception.cpp @@ -0,0 +1,23 @@ +#include "duckdb/common/exception/conversion_exception.hpp" +#include "duckdb/common/types.hpp" + +namespace duckdb { + +ConversionException::ConversionException(const PhysicalType orig_type, const PhysicalType new_type) + : Exception(ExceptionType::CONVERSION, + "Type " + TypeIdToString(orig_type) + " can't be cast as " + TypeIdToString(new_type)) { +} + +ConversionException::ConversionException(const LogicalType &orig_type, const LogicalType &new_type) + : Exception(ExceptionType::CONVERSION, + "Type " + orig_type.ToString() + " can't be cast as " + new_type.ToString()) { +} + +ConversionException::ConversionException(const string &msg) : Exception(ExceptionType::CONVERSION, msg) { +} + +ConversionException::ConversionException(optional_idx error_location, const string &msg) + : Exception(ExceptionType::CONVERSION, msg, Exception::InitializeExtraInfo(error_location)) { +} + +} // namespace duckdb diff --git a/src/common/extra_type_info.cpp b/src/common/extra_type_info.cpp index 1dee1cae0eb7..f8d27d86e8f0 100644 --- a/src/common/extra_type_info.cpp +++ b/src/common/extra_type_info.cpp @@ -1,6 +1,7 @@ #include "duckdb/common/extra_type_info.hpp" #include "duckdb/common/serializer/deserializer.hpp" #include "duckdb/common/enum_util.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/serializer/serializer.hpp" #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp" #include "duckdb/common/string_map_set.hpp" @@ -178,7 +179,7 @@ struct EnumTypeInfoTemplated : public EnumTypeInfo { throw InvalidInputException("Attempted to create ENUM type with duplicate value %s", data[idx].GetString()); } - values[data[idx]] = i; + values[data[idx]] = UnsafeNumericCast(i); } } @@ -274,11 +275,11 @@ shared_ptr EnumTypeInfo::Deserialize(Deserializer &deserializer) auto enum_internal_type = EnumTypeInfo::DictType(values_count); switch (enum_internal_type) { case PhysicalType::UINT8: - return EnumTypeInfoTemplated::Deserialize(deserializer, values_count); + return EnumTypeInfoTemplated::Deserialize(deserializer, NumericCast(values_count)); case PhysicalType::UINT16: - return EnumTypeInfoTemplated::Deserialize(deserializer, values_count); + return EnumTypeInfoTemplated::Deserialize(deserializer, NumericCast(values_count)); case PhysicalType::UINT32: - return EnumTypeInfoTemplated::Deserialize(deserializer, values_count); + return EnumTypeInfoTemplated::Deserialize(deserializer, NumericCast(values_count)); default: throw InternalException("Invalid Physical Type for ENUMs"); } @@ -321,7 +322,7 @@ void EnumTypeInfo::Serialize(Serializer &serializer) const { // ArrayTypeInfo //===--------------------------------------------------------------------===// -ArrayTypeInfo::ArrayTypeInfo(LogicalType child_type_p, idx_t size_p) +ArrayTypeInfo::ArrayTypeInfo(LogicalType child_type_p, uint32_t size_p) : ExtraTypeInfo(ExtraTypeInfoType::ARRAY_TYPE_INFO), child_type(std::move(child_type_p)), size(size_p) { } diff --git a/src/common/gzip_file_system.cpp b/src/common/gzip_file_system.cpp index 414bcbfda2c4..a5497bfe0bd8 100644 --- a/src/common/gzip_file_system.cpp +++ b/src/common/gzip_file_system.cpp @@ -1,6 +1,7 @@ #include "duckdb/common/gzip_file_system.hpp" #include "duckdb/common/exception.hpp" #include "duckdb/common/file_system.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "miniz.hpp" #include "miniz_wrapper.hpp" @@ -224,9 +225,9 @@ void MiniZStreamWrapper::Write(CompressedFile &file, StreamData &sd, data_ptr_t idx_t output_remaining = (sd.out_buff.get() + sd.out_buf_size) - sd.out_buff_start; mz_stream_ptr->next_in = reinterpret_cast(uncompressed_data); - mz_stream_ptr->avail_in = remaining; + mz_stream_ptr->avail_in = NumericCast(remaining); mz_stream_ptr->next_out = sd.out_buff_start; - mz_stream_ptr->avail_out = output_remaining; + mz_stream_ptr->avail_out = NumericCast(output_remaining); auto res = mz_deflate(mz_stream_ptr.get(), duckdb_miniz::MZ_NO_FLUSH); if (res != duckdb_miniz::MZ_OK) { @@ -252,7 +253,7 @@ void MiniZStreamWrapper::FlushStream() { while (true) { auto output_remaining = (sd.out_buff.get() + sd.out_buf_size) - sd.out_buff_start; mz_stream_ptr->next_out = sd.out_buff_start; - mz_stream_ptr->avail_out = output_remaining; + mz_stream_ptr->avail_out = NumericCast(output_remaining); auto res = mz_deflate(mz_stream_ptr.get(), duckdb_miniz::MZ_FINISH); sd.out_buff_start += (output_remaining - mz_stream_ptr->avail_out); @@ -355,7 +356,7 @@ string GZipFileSystem::UncompressGZIPString(const string &in) { auto bytes_remaining = in.size() - (body_ptr - in.data()); mz_stream_ptr->next_in = const_uchar_ptr_cast(body_ptr); - mz_stream_ptr->avail_in = bytes_remaining; + mz_stream_ptr->avail_in = NumericCast(bytes_remaining); unsigned char decompress_buffer[BUFSIZ]; string decompressed; diff --git a/src/common/local_file_system.cpp b/src/common/local_file_system.cpp index 533e425c3248..f61d396fce2d 100644 --- a/src/common/local_file_system.cpp +++ b/src/common/local_file_system.cpp @@ -49,7 +49,7 @@ extern "C" WINBASEAPI BOOL WINAPI GetPhysicallyInstalledSystemMemory(PULONGLONG) #include // NOLINT #endif // NOLINT #elif defined(_WIN32) -#include +#include #endif namespace duckdb { @@ -188,6 +188,8 @@ static string AdditionalProcessInfo(FileSystem &fs, pid_t pid) { } string process_name, process_owner; +// macOS >= 10.7 has PROC_PIDT_SHORTBSDINFO +#ifdef PROC_PIDT_SHORTBSDINFO // try to find out more about the process holding the lock struct proc_bsdshortinfo proc; if (proc_pidinfo(pid, PROC_PIDT_SHORTBSDINFO, 0, &proc, PROC_PIDT_SHORTBSDINFO_SIZE) == @@ -199,6 +201,9 @@ static string AdditionalProcessInfo(FileSystem &fs, pid_t pid) { process_owner = pw->pw_name; } } +#else + return string(); +#endif // try to get a better process name (full path) char full_exec_path[PROC_PIDPATHINFO_MAXSIZE]; if (proc_pidpath(pid, full_exec_path, PROC_PIDPATHINFO_MAXSIZE) > 0) { @@ -354,7 +359,7 @@ unique_ptr LocalFileSystem::OpenFile(const string &path_p, uint8_t f "using the -readonly parameter in the CLI"; } } - message += ". See also https://duckdb.org/faq#how-does-duckdb-handle-concurrency"; + message += ". See also https://duckdb.org/docs/connect/concurrency"; throw IOException("Could not set lock on file \"%s\": %s", {{"errno", std::to_string(retained_errno)}}, path, message); } @@ -420,7 +425,10 @@ void LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes, throw IOException("Could not write file \"%s\": %s", {{"errno", std::to_string(errno)}}, handle.path, strerror(errno)); } - D_ASSERT(bytes_written >= 0 && bytes_written); + if (bytes_written == 0) { + throw IOException("Could not write to file \"%s\" - attempted to write 0 bytes: %s", + {{"errno", std::to_string(errno)}}, handle.path, strerror(errno)); + } write_buffer += bytes_written; nr_bytes -= bytes_written; } @@ -428,10 +436,17 @@ void LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes, int64_t LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes) { int fd = handle.Cast().fd; - int64_t bytes_written = write(fd, buffer, nr_bytes); - if (bytes_written == -1) { - throw IOException("Could not write file \"%s\": %s", {{"errno", std::to_string(errno)}}, handle.path, - strerror(errno)); + int64_t bytes_written = 0; + while (nr_bytes > 0) { + auto bytes_to_write = MinValue(idx_t(NumericLimits::Maximum()), idx_t(nr_bytes)); + int64_t current_bytes_written = write(fd, buffer, bytes_to_write); + if (current_bytes_written <= 0) { + throw IOException("Could not write file \"%s\": %s", {{"errno", std::to_string(errno)}}, handle.path, + strerror(errno)); + } + bytes_written += current_bytes_written; + buffer = (void *)(data_ptr_cast(buffer) + current_bytes_written); + nr_bytes -= current_bytes_written; } return bytes_written; } @@ -827,9 +842,26 @@ static DWORD FSInternalWrite(FileHandle &handle, HANDLE hFile, void *buffer, int return bytes_written; } +static int64_t FSWrite(FileHandle &handle, HANDLE hFile, void *buffer, int64_t nr_bytes, idx_t location) { + int64_t bytes_written = 0; + while (nr_bytes > 0) { + auto bytes_to_write = MinValue(idx_t(NumericLimits::Maximum()), idx_t(nr_bytes)); + DWORD current_bytes_written = FSInternalWrite(handle, hFile, buffer, bytes_to_write, location); + if (current_bytes_written <= 0) { + throw IOException("Could not write file \"%s\": %s", {{"errno", std::to_string(errno)}}, handle.path, + strerror(errno)); + } + bytes_written += current_bytes_written; + buffer = (void *)(data_ptr_cast(buffer) + current_bytes_written); + location += current_bytes_written; + nr_bytes -= current_bytes_written; + } + return bytes_written; +} + void LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes, idx_t location) { HANDLE hFile = handle.Cast().fd; - auto bytes_written = FSInternalWrite(handle, hFile, buffer, nr_bytes, location); + auto bytes_written = FSWrite(handle, hFile, buffer, nr_bytes, location); if (bytes_written != nr_bytes) { throw IOException("Could not write all bytes from file \"%s\": wanted=%lld wrote=%lld", handle.path, nr_bytes, bytes_written); @@ -839,7 +871,7 @@ void LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes, int64_t LocalFileSystem::Write(FileHandle &handle, void *buffer, int64_t nr_bytes) { HANDLE hFile = handle.Cast().fd; auto &pos = handle.Cast().position; - auto bytes_written = FSInternalWrite(handle, hFile, buffer, nr_bytes, pos); + auto bytes_written = FSWrite(handle, hFile, buffer, nr_bytes, pos); pos += bytes_written; return bytes_written; } diff --git a/src/common/operator/cast_operators.cpp b/src/common/operator/cast_operators.cpp index 69ed385b0fa6..c63adefcab7f 100644 --- a/src/common/operator/cast_operators.cpp +++ b/src/common/operator/cast_operators.cpp @@ -927,7 +927,7 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) { switch (input_size) { case 1: { - char c = std::tolower(*input_data); + char c = UnsafeNumericCast(std::tolower(*input_data)); if (c == 't' || (!strict && c == '1')) { result = true; return true; @@ -938,10 +938,10 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) { return false; } case 4: { - char t = std::tolower(input_data[0]); - char r = std::tolower(input_data[1]); - char u = std::tolower(input_data[2]); - char e = std::tolower(input_data[3]); + char t = UnsafeNumericCast(std::tolower(input_data[0])); + char r = UnsafeNumericCast(std::tolower(input_data[1])); + char u = UnsafeNumericCast(std::tolower(input_data[2])); + char e = UnsafeNumericCast(std::tolower(input_data[3])); if (t == 't' && r == 'r' && u == 'u' && e == 'e') { result = true; return true; @@ -949,11 +949,11 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) { return false; } case 5: { - char f = std::tolower(input_data[0]); - char a = std::tolower(input_data[1]); - char l = std::tolower(input_data[2]); - char s = std::tolower(input_data[3]); - char e = std::tolower(input_data[4]); + char f = UnsafeNumericCast(std::tolower(input_data[0])); + char a = UnsafeNumericCast(std::tolower(input_data[1])); + char l = UnsafeNumericCast(std::tolower(input_data[2])); + char s = UnsafeNumericCast(std::tolower(input_data[3])); + char e = UnsafeNumericCast(std::tolower(input_data[4])); if (f == 'f' && a == 'a' && l == 'l' && s == 's' && e == 'e') { result = false; return true; @@ -1009,20 +1009,20 @@ bool TryCast::Operation(string_t input, double &result, bool strict) { } template <> -bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, string *error_message, bool strict) { - if (!TryDoubleCast(input.GetData(), input.GetSize(), result, strict, ',')) { +bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, CastParameters ¶meters) { + if (!TryDoubleCast(input.GetData(), input.GetSize(), result, parameters.strict, ',')) { HandleCastError::AssignError(StringUtil::Format("Could not cast string to float: \"%s\"", input.GetString()), - error_message); + parameters); return false; } return true; } template <> -bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, string *error_message, bool strict) { - if (!TryDoubleCast(input.GetData(), input.GetSize(), result, strict, ',')) { +bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, CastParameters ¶meters) { + if (!TryDoubleCast(input.GetData(), input.GetSize(), result, parameters.strict, ',')) { HandleCastError::AssignError(StringUtil::Format("Could not cast string to double: \"%s\"", input.GetString()), - error_message); + parameters); return false; } return true; @@ -1126,37 +1126,49 @@ bool TryCast::Operation(interval_t input, interval_t &result, bool strict) { //===--------------------------------------------------------------------===// template <> duckdb::string_t CastFromTimestampNS::Operation(duckdb::timestamp_t input, Vector &result) { - return StringCast::Operation(Timestamp::FromEpochNanoSeconds(input.value), result); + return StringCast::Operation(CastTimestampNsToUs::Operation(input), result); } template <> duckdb::string_t CastFromTimestampMS::Operation(duckdb::timestamp_t input, Vector &result) { - return StringCast::Operation(Timestamp::FromEpochMs(input.value), result); + return StringCast::Operation(CastTimestampMsToUs::Operation(input), result); } template <> duckdb::string_t CastFromTimestampSec::Operation(duckdb::timestamp_t input, Vector &result) { - return StringCast::Operation(Timestamp::FromEpochSeconds(input.value), result); + return StringCast::Operation(CastTimestampSecToUs::Operation(input), result); } template <> timestamp_t CastTimestampUsToMs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } timestamp_t cast_timestamp(Timestamp::GetEpochMs(input)); return cast_timestamp; } template <> timestamp_t CastTimestampUsToNs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } timestamp_t cast_timestamp(Timestamp::GetEpochNanoSeconds(input)); return cast_timestamp; } template <> timestamp_t CastTimestampUsToSec::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } timestamp_t cast_timestamp(Timestamp::GetEpochSeconds(input)); return cast_timestamp; } template <> timestamp_t CastTimestampMsToUs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochMs(input.value); } @@ -1172,17 +1184,36 @@ dtime_t CastTimestampMsToTime::Operation(timestamp_t input) { template <> timestamp_t CastTimestampMsToNs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } auto us = CastTimestampMsToUs::Operation(input); return CastTimestampUsToNs::Operation(us); } template <> timestamp_t CastTimestampNsToUs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochNanoSeconds(input.value); } +template <> +timestamp_t CastTimestampSecToUs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } + return Timestamp::FromEpochSeconds(input.value); +} + template <> date_t CastTimestampNsToDate::Operation(timestamp_t input) { + if (input == timestamp_t::infinity()) { + return date_t::infinity(); + } else if (input == timestamp_t::ninfinity()) { + return date_t::ninfinity(); + } const auto us = CastTimestampNsToUs::Operation(input); return Timestamp::GetDate(us); } @@ -1195,17 +1226,18 @@ dtime_t CastTimestampNsToTime::Operation(timestamp_t input) { template <> timestamp_t CastTimestampSecToMs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } auto us = CastTimestampSecToUs::Operation(input); return CastTimestampUsToMs::Operation(us); } -template <> -timestamp_t CastTimestampSecToUs::Operation(timestamp_t input) { - return Timestamp::FromEpochSeconds(input.value); -} - template <> timestamp_t CastTimestampSecToNs::Operation(timestamp_t input) { + if (!Timestamp::IsFinite(input)) { + return input; + } auto us = CastTimestampSecToUs::Operation(input); return CastTimestampUsToNs::Operation(us); } @@ -1230,7 +1262,15 @@ bool TryCastToTimestampNS::Operation(string_t input, timestamp_t &result, bool s if (!TryCast::Operation(input, result, strict)) { return false; } - result = Timestamp::GetEpochNanoSeconds(result); + if (!Timestamp::IsFinite(result)) { + return true; + } + + int64_t nanoseconds; + if (!Timestamp::TryGetEpochNanoSeconds(result, nanoseconds)) { + throw ConversionException("Could not convert VARCHAR value '%s' to Timestamp(NS)", input.GetString()); + } + result = nanoseconds; return true; } @@ -1239,6 +1279,9 @@ bool TryCastToTimestampMS::Operation(string_t input, timestamp_t &result, bool s if (!TryCast::Operation(input, result, strict)) { return false; } + if (!Timestamp::IsFinite(result)) { + return true; + } result = Timestamp::GetEpochMs(result); return true; } @@ -1248,6 +1291,9 @@ bool TryCastToTimestampSec::Operation(string_t input, timestamp_t &result, bool if (!TryCast::Operation(input, result, strict)) { return false; } + if (!Timestamp::IsFinite(result)) { + return true; + } result = Timestamp::GetEpochSeconds(result); return true; } @@ -1257,6 +1303,9 @@ bool TryCastToTimestampNS::Operation(date_t input, timestamp_t &result, bool str if (!TryCast::Operation(input, result, strict)) { return false; } + if (!Timestamp::IsFinite(result)) { + return true; + } if (!TryMultiplyOperator::Operation(result.value, Interval::NANOS_PER_MICRO, result.value)) { return false; } @@ -1268,6 +1317,9 @@ bool TryCastToTimestampMS::Operation(date_t input, timestamp_t &result, bool str if (!TryCast::Operation(input, result, strict)) { return false; } + if (!Timestamp::IsFinite(result)) { + return true; + } result.value /= Interval::MICROS_PER_MSEC; return true; } @@ -1277,6 +1329,9 @@ bool TryCastToTimestampSec::Operation(date_t input, timestamp_t &result, bool st if (!TryCast::Operation(input, result, strict)) { return false; } + if (!Timestamp::IsFinite(result)) { + return true; + } result.value /= Interval::MICROS_PER_MSEC * Interval::MSECS_PER_SEC; return true; } @@ -1331,10 +1386,9 @@ string_t CastFromPointer::Operation(uintptr_t input, Vector &vector) { // Cast To Blob //===--------------------------------------------------------------------===// template <> -bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, string *error_message, - bool strict) { +bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters) { idx_t result_size; - if (!Blob::TryGetBlobSize(input, result_size, error_message)) { + if (!Blob::TryGetBlobSize(input, result_size, parameters)) { return false; } @@ -1348,10 +1402,9 @@ bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_v // Cast To Bit //===--------------------------------------------------------------------===// template <> -bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector, string *error_message, - bool strict) { +bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters) { idx_t result_size; - if (!Bit::TryGetBitStringSize(input, result_size, error_message)) { + if (!Bit::TryGetBitStringSize(input, result_size, parameters.error_message)) { return false; } @@ -1362,32 +1415,34 @@ bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_ve } template <> -bool CastFromBitToNumeric::Operation(string_t input, bool &result, bool strict) { +bool CastFromBitToNumeric::Operation(string_t input, bool &result, CastParameters ¶meters) { D_ASSERT(input.GetSize() > 1); uint8_t value; - bool success = CastFromBitToNumeric::Operation(input, value, strict); + bool success = CastFromBitToNumeric::Operation(input, value, parameters); result = (value > 0); return (success); } template <> -bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, bool strict) { +bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, CastParameters ¶meters) { D_ASSERT(input.GetSize() > 1); if (input.GetSize() - 1 > sizeof(hugeint_t)) { - throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId()); + throw ConversionException(parameters.query_location, "Bitstring doesn't fit inside of %s", + GetTypeId()); } Bit::BitToNumeric(input, result); return (true); } template <> -bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, bool strict) { +bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, CastParameters ¶meters) { D_ASSERT(input.GetSize() > 1); if (input.GetSize() - 1 > sizeof(uhugeint_t)) { - throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId()); + throw ConversionException(parameters.query_location, "Bitstring doesn't fit inside of %s", + GetTypeId()); } Bit::BitToNumeric(input, result); return (true); @@ -1408,8 +1463,7 @@ string_t CastFromUUID::Operation(hugeint_t input, Vector &vector) { // Cast To UUID //===--------------------------------------------------------------------===// template <> -bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_vector, string *error_message, - bool strict) { +bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_vector, CastParameters ¶meters) { return UUID::FromString(input.GetString(), result); } @@ -1417,9 +1471,9 @@ bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_ // Cast To Date //===--------------------------------------------------------------------===// template <> -bool TryCastErrorMessage::Operation(string_t input, date_t &result, string *error_message, bool strict) { - if (!TryCast::Operation(input, result, strict)) { - HandleCastError::AssignError(Date::ConversionError(input), error_message); +bool TryCastErrorMessage::Operation(string_t input, date_t &result, CastParameters ¶meters) { + if (!TryCast::Operation(input, result, parameters.strict)) { + HandleCastError::AssignError(Date::ConversionError(input), parameters); return false; } return true; @@ -1441,9 +1495,9 @@ date_t Cast::Operation(string_t input) { // Cast To Time //===--------------------------------------------------------------------===// template <> -bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, string *error_message, bool strict) { - if (!TryCast::Operation(input, result, strict)) { - HandleCastError::AssignError(Time::ConversionError(input), error_message); +bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, CastParameters ¶meters) { + if (!TryCast::Operation(input, result, parameters.strict)) { + HandleCastError::AssignError(Time::ConversionError(input), parameters); return false; } return true; @@ -1464,9 +1518,9 @@ dtime_t Cast::Operation(string_t input) { // Cast To TimeTZ //===--------------------------------------------------------------------===// template <> -bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, string *error_message, bool strict) { - if (!TryCast::Operation(input, result, strict)) { - HandleCastError::AssignError(Time::ConversionError(input), error_message); +bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, CastParameters ¶meters) { + if (!TryCast::Operation(input, result, parameters.strict)) { + HandleCastError::AssignError(Time::ConversionError(input), parameters); return false; } return true; @@ -1475,7 +1529,8 @@ bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, string * template <> bool TryCast::Operation(string_t input, dtime_tz_t &result, bool strict) { idx_t pos; - return Time::TryConvertTimeTZ(input.GetData(), input.GetSize(), pos, result, strict); + bool has_offset; + return Time::TryConvertTimeTZ(input.GetData(), input.GetSize(), pos, result, has_offset, strict); } template <> @@ -1491,15 +1546,15 @@ dtime_tz_t Cast::Operation(string_t input) { // Cast To Timestamp //===--------------------------------------------------------------------===// template <> -bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, string *error_message, bool strict) { +bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, CastParameters ¶meters) { auto cast_result = Timestamp::TryConvertTimestamp(input.GetData(), input.GetSize(), result); if (cast_result == TimestampCastResult::SUCCESS) { return true; } if (cast_result == TimestampCastResult::ERROR_INCORRECT_FORMAT) { - HandleCastError::AssignError(Timestamp::ConversionError(input), error_message); + HandleCastError::AssignError(Timestamp::ConversionError(input), parameters); } else { - HandleCastError::AssignError(Timestamp::UnsupportedTimezoneError(input), error_message); + HandleCastError::AssignError(Timestamp::UnsupportedTimezoneError(input), parameters); } return false; } @@ -1518,8 +1573,8 @@ timestamp_t Cast::Operation(string_t input) { // Cast From Interval //===--------------------------------------------------------------------===// template <> -bool TryCastErrorMessage::Operation(string_t input, interval_t &result, string *error_message, bool strict) { - return Interval::FromCString(input.GetData(), input.GetSize(), result, error_message, strict); +bool TryCastErrorMessage::Operation(string_t input, interval_t &result, CastParameters ¶meters) { + return Interval::FromCString(input.GetData(), input.GetSize(), result, parameters.error_message, parameters.strict); } //===--------------------------------------------------------------------===// @@ -1642,7 +1697,7 @@ struct HugeIntegerCastOperation { remainder *= -1; } state.decimal = remainder; - state.decimal_total_digits = -e; + state.decimal_total_digits = UnsafeNumericCast(-e); state.decimal_intermediate = 0; state.decimal_intermediate_digits = 0; return Finalize(state); @@ -1826,7 +1881,7 @@ struct DecimalCastOperation { // Everything beyond that amount needs to be truncated if (decimal_excess > exponent) { // We've allowed too many decimals - state.excessive_decimals = decimal_excess - exponent; + state.excessive_decimals = UnsafeNumericCast(decimal_excess - exponent); exponent = 0; } else { exponent -= decimal_excess; @@ -1931,7 +1986,7 @@ struct DecimalCastOperation { }; template -bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryDecimalStringCast(string_t input, T &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { DecimalCastData state; state.result = 0; state.width = width; @@ -1946,7 +2001,7 @@ bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint input.GetData(), input.GetSize(), state, false)) { string error = StringUtil::Format("Could not convert string \"%s\" to DECIMAL(%d,%d)", input.GetString(), (int)width, (int)scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } result = state.result; @@ -1954,48 +2009,51 @@ bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint } template <> -bool TryCastToDecimal::Operation(string_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(string_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(string_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(string_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(string_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(string_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(string_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(string_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result, string *error_message, uint8_t width, - uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result, string *error_message, uint8_t width, - uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result, string *error_message, uint8_t width, - uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale) { - return TryDecimalStringCast(input, result, error_message, width, scale); +bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale) { + return TryDecimalStringCast(input, result, parameters, width, scale); } template <> @@ -2024,9 +2082,9 @@ string_t StringCastFromDecimal::Operation(hugeint_t input, uint8_t width, uint8_ // Decimal <-> Bool //===--------------------------------------------------------------------===// template -bool TryCastBoolToDecimal(bool input, T &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastBoolToDecimal(bool input, T &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { if (width > scale) { - result = input ? OP::POWERS_OF_TEN[scale] : 0; + result = UnsafeNumericCast(input ? OP::POWERS_OF_TEN[scale] : 0); return true; } else { return TryCast::Operation(input, result); @@ -2034,42 +2092,50 @@ bool TryCastBoolToDecimal(bool input, T &result, string *error_message, uint8_t } template <> -bool TryCastToDecimal::Operation(bool input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastBoolToDecimal(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(bool input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastBoolToDecimal(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(bool input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastBoolToDecimal(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(bool input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastBoolToDecimal(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(bool input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastBoolToDecimal(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(bool input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastBoolToDecimal(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(bool input, hugeint_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastBoolToDecimal(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(bool input, hugeint_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastBoolToDecimal(input, result, parameters, width, scale); } template <> -bool TryCastFromDecimal::Operation(int16_t input, bool &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int16_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCast::Operation(input, result); } template <> -bool TryCastFromDecimal::Operation(int32_t input, bool &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int32_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCast::Operation(input, result); } template <> -bool TryCastFromDecimal::Operation(int64_t input, bool &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int64_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCast::Operation(input, result); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, bool &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(hugeint_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCast::Operation(input, result); } @@ -2091,26 +2157,26 @@ struct UnsignedToDecimalOperator { }; template -bool StandardNumericToDecimalCast(SRC input, DST &result, string *error_message, uint8_t width, uint8_t scale) { +bool StandardNumericToDecimalCast(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { // check for overflow - DST max_width = NumericHelper::POWERS_OF_TEN[width - scale]; + DST max_width = UnsafeNumericCast(NumericHelper::POWERS_OF_TEN[width - scale]); if (OP::template Operation(input, max_width)) { string error = StringUtil::Format("Could not cast value %d to DECIMAL(%d,%d)", input, width, scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } - result = DST(input) * NumericHelper::POWERS_OF_TEN[scale]; + result = UnsafeNumericCast(DST(input) * NumericHelper::POWERS_OF_TEN[scale]); return true; } template -bool NumericToHugeDecimalCast(SRC input, hugeint_t &result, string *error_message, uint8_t width, uint8_t scale) { +bool NumericToHugeDecimalCast(SRC input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { // check for overflow hugeint_t max_width = Hugeint::POWERS_OF_TEN[width - scale]; hugeint_t hinput = Hugeint::Convert(input); if (hinput >= max_width || hinput <= -max_width) { string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", hinput.ToString(), width, scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } result = hinput * Hugeint::POWERS_OF_TEN[scale]; @@ -2121,191 +2187,216 @@ bool NumericToHugeDecimalCast(SRC input, hugeint_t &result, string *error_messag // Cast int8_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(int8_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int8_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int8_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int8_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int8_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int8_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result, string *error_message, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast int16_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(int16_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int16_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int16_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast int32_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(int32_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int32_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int32_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast int64_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(int64_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int64_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int64_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast uint8_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(uint8_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint8_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint8_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint8_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint8_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint8_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast uint16_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(uint16_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint16_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint16_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast uint32_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(uint32_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint32_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint32_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Cast uint64_t -> Decimal //===--------------------------------------------------------------------===// template <> -bool TryCastToDecimal::Operation(uint64_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint64_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint64_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return StandardNumericToDecimalCast(input, result, error_message, - width, scale); +bool TryCastToDecimal::Operation(uint64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return StandardNumericToDecimalCast(input, result, parameters, width, + scale); } template <> -bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return NumericToHugeDecimalCast(input, result, error_message, width, scale); + return NumericToHugeDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Hugeint -> Decimal Cast //===--------------------------------------------------------------------===// template -bool HugeintToDecimalCast(hugeint_t input, DST &result, string *error_message, uint8_t width, uint8_t scale) { +bool HugeintToDecimalCast(hugeint_t input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { // check for overflow hugeint_t max_width = Hugeint::POWERS_OF_TEN[width - scale]; if (input >= max_width || input <= -max_width) { string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", input.ToString(), width, scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } result = Hugeint::Cast(input * Hugeint::POWERS_OF_TEN[scale]); @@ -2313,39 +2404,39 @@ bool HugeintToDecimalCast(hugeint_t input, DST &result, string *error_message, u } template <> -bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return HugeintToDecimalCast(input, result, error_message, width, scale); + return HugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return HugeintToDecimalCast(input, result, error_message, width, scale); + return HugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return HugeintToDecimalCast(input, result, error_message, width, scale); + return HugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return HugeintToDecimalCast(input, result, error_message, width, scale); + return HugeintToDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Uhugeint -> Decimal Cast //===--------------------------------------------------------------------===// template -bool UhugeintToDecimalCast(uhugeint_t input, DST &result, string *error_message, uint8_t width, uint8_t scale) { +bool UhugeintToDecimalCast(uhugeint_t input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { // check for overflow uhugeint_t max_width = Uhugeint::POWERS_OF_TEN[width - scale]; if (input >= max_width) { string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", input.ToString(), width, scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } result = Uhugeint::Cast(input * Uhugeint::POWERS_OF_TEN[scale]); @@ -2353,41 +2444,41 @@ bool UhugeintToDecimalCast(uhugeint_t input, DST &result, string *error_message, } template <> -bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return UhugeintToDecimalCast(input, result, error_message, width, scale); + return UhugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return UhugeintToDecimalCast(input, result, error_message, width, scale); + return UhugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return UhugeintToDecimalCast(input, result, error_message, width, scale); + return UhugeintToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return UhugeintToDecimalCast(input, result, error_message, width, scale); + return UhugeintToDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Float/Double -> Decimal Cast //===--------------------------------------------------------------------===// template -bool DoubleToDecimalCast(SRC input, DST &result, string *error_message, uint8_t width, uint8_t scale) { +bool DoubleToDecimalCast(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { double value = input * NumericHelper::DOUBLE_POWERS_OF_TEN[scale]; // Add the sign (-1, 0, 1) times a tiny value to fix floating point issues (issue 3091) double sign = (double(0) < value) - (value < double(0)); value += 1e-9 * sign; if (value <= -NumericHelper::DOUBLE_POWERS_OF_TEN[width] || value >= NumericHelper::DOUBLE_POWERS_OF_TEN[width]) { string error = StringUtil::Format("Could not cast value %f to DECIMAL(%d,%d)", value, width, scale); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } result = Cast::Operation(value); @@ -2395,73 +2486,81 @@ bool DoubleToDecimalCast(SRC input, DST &result, string *error_message, uint8_t } template <> -bool TryCastToDecimal::Operation(float input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(float input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(float input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(float input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(float input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(float input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(float input, hugeint_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(float input, hugeint_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(double input, int16_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(double input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(double input, int32_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(double input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(double input, int64_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(double input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } template <> -bool TryCastToDecimal::Operation(double input, hugeint_t &result, string *error_message, uint8_t width, uint8_t scale) { - return DoubleToDecimalCast(input, result, error_message, width, scale); +bool TryCastToDecimal::Operation(double input, hugeint_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return DoubleToDecimalCast(input, result, parameters, width, scale); } //===--------------------------------------------------------------------===// // Decimal -> Numeric Cast //===--------------------------------------------------------------------===// template -bool TryCastDecimalToNumeric(SRC input, DST &result, string *error_message, uint8_t scale) { +bool TryCastDecimalToNumeric(SRC input, DST &result, CastParameters ¶meters, uint8_t scale) { // Round away from 0. const auto power = NumericHelper::POWERS_OF_TEN[scale]; // https://graphics.stanford.edu/~seander/bithacks.html#ConditionalNegate const auto fNegate = int64_t(input < 0); const auto rounding = ((power ^ -fNegate) + fNegate) / 2; const auto scaled_value = (input + rounding) / power; - if (!TryCast::Operation(scaled_value, result)) { + if (!TryCast::Operation(UnsafeNumericCast(scaled_value), result)) { string error = StringUtil::Format("Failed to cast decimal value %d to type %s", scaled_value, GetTypeId()); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } return true; } template -bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result, string *error_message, uint8_t scale) { +bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result, CastParameters ¶meters, uint8_t scale) { const auto power = Hugeint::POWERS_OF_TEN[scale]; const auto rounding = ((input < 0) ? -power : power) / 2; auto scaled_value = (input + rounding) / power; if (!TryCast::Operation(scaled_value, result)) { string error = StringUtil::Format("Failed to cast decimal value %s to type %s", ConvertToString::Operation(scaled_value), GetTypeId()); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } return true; @@ -2471,237 +2570,240 @@ bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result, string *error_mes // Cast Decimal -> int8_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); +bool TryCastFromDecimal::Operation(int16_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); +bool TryCastFromDecimal::Operation(int32_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); +bool TryCastFromDecimal::Operation(int64_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> int16_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> int32_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> int64_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> uint8_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> uint16_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> uint32_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> uint64_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> hugeint_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// // Cast Decimal -> uhugeint_t //===--------------------------------------------------------------------===// template <> -bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastDecimalToNumeric(input, result, error_message, scale); + return TryCastDecimalToNumeric(input, result, parameters, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { - return TryCastHugeDecimalToNumeric(input, result, error_message, scale); + return TryCastHugeDecimalToNumeric(input, result, parameters, scale); } //===--------------------------------------------------------------------===// @@ -2715,44 +2817,50 @@ bool TryCastDecimalToFloatingPoint(SRC input, DST &result, uint8_t scale) { // DECIMAL -> FLOAT template <> -bool TryCastFromDecimal::Operation(int16_t input, float &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int16_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, float &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int32_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, float &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int64_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, float &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, float &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } // DECIMAL -> DOUBLE template <> -bool TryCastFromDecimal::Operation(int16_t input, double &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int16_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(int32_t input, double &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int32_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(int64_t input, double &result, string *error_message, uint8_t width, uint8_t scale) { +bool TryCastFromDecimal::Operation(int64_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } template <> -bool TryCastFromDecimal::Operation(hugeint_t input, double &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, double &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { return TryCastDecimalToFloatingPoint(input, result, scale); } diff --git a/src/common/re2_regex.cpp b/src/common/re2_regex.cpp index c1f7dffa64af..f22b681acfe6 100644 --- a/src/common/re2_regex.cpp +++ b/src/common/re2_regex.cpp @@ -1,3 +1,4 @@ +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/vector.hpp" #include @@ -25,7 +26,7 @@ bool RegexSearchInternal(const char *input, Match &match, const Regex &r, RE2::A for (auto &group : target_groups) { GroupMatch group_match; group_match.text = group.ToString(); - group_match.position = group.data() - input; + group_match.position = group.data() != nullptr ? duckdb::NumericCast(group.data() - input) : 0; match.groups.emplace_back(group_match); } return true; diff --git a/src/common/row_operations/row_heap_scatter.cpp b/src/common/row_operations/row_heap_scatter.cpp index 135361d1b075..3c7f9d41e929 100644 --- a/src/common/row_operations/row_heap_scatter.cpp +++ b/src/common/row_operations/row_heap_scatter.cpp @@ -245,7 +245,7 @@ static void HeapScatterStringVector(Vector &v, idx_t vcount, const SelectionVect if (vdata.validity.RowIsValid(source_idx)) { auto &string_entry = strings[source_idx]; // store string size - Store(string_entry.GetSize(), key_locations[i]); + Store(NumericCast(string_entry.GetSize()), key_locations[i]); key_locations[i] += sizeof(uint32_t); // store the string memcpy(key_locations[i], string_entry.GetData(), string_entry.GetSize()); @@ -259,7 +259,7 @@ static void HeapScatterStringVector(Vector &v, idx_t vcount, const SelectionVect if (vdata.validity.RowIsValid(source_idx)) { auto &string_entry = strings[source_idx]; // store string size - Store(string_entry.GetSize(), key_locations[i]); + Store(NumericCast(string_entry.GetSize()), key_locations[i]); key_locations[i] += sizeof(uint32_t); // store the string memcpy(key_locations[i], string_entry.GetData(), string_entry.GetSize()); diff --git a/src/common/row_operations/row_scatter.cpp b/src/common/row_operations/row_scatter.cpp index 5cf44bc48657..6195df237490 100644 --- a/src/common/row_operations/row_scatter.cpp +++ b/src/common/row_operations/row_scatter.cpp @@ -82,7 +82,7 @@ static void ScatterStringVector(UnifiedVectorFormat &col, Vector &rows, data_ptr Store(string_data[col_idx], row + col_offset); } else { const auto &str = string_data[col_idx]; - string_t inserted(const_char_ptr_cast(str_locations[i]), str.GetSize()); + string_t inserted(const_char_ptr_cast(str_locations[i]), UnsafeNumericCast(str.GetSize())); memcpy(inserted.GetDataWriteable(), str.GetData(), str.GetSize()); str_locations[i] += str.GetSize(); inserted.Finalize(); @@ -167,7 +167,7 @@ void RowOperations::Scatter(DataChunk &columns, UnifiedVectorFormat col_data[], // Pointer to this row in the heap block Store(data_locations[i], row + heap_pointer_offset); // Row size is stored in the heap in front of each row - Store(entry_sizes[i], data_locations[i]); + Store(NumericCast(entry_sizes[i]), data_locations[i]); data_locations[i] += sizeof(uint32_t); } } diff --git a/src/common/serializer/binary_serializer.cpp b/src/common/serializer/binary_serializer.cpp index cf2b26969111..8ec78c905b18 100644 --- a/src/common/serializer/binary_serializer.cpp +++ b/src/common/serializer/binary_serializer.cpp @@ -150,19 +150,19 @@ void BinarySerializer::WriteValue(double value) { } void BinarySerializer::WriteValue(const string &value) { - uint32_t len = value.length(); + auto len = NumericCast(value.length()); VarIntEncode(len); WriteData(value.c_str(), len); } void BinarySerializer::WriteValue(const string_t value) { - uint32_t len = value.GetSize(); + auto len = NumericCast(value.GetSize()); VarIntEncode(len); WriteData(value.GetDataUnsafe(), len); } void BinarySerializer::WriteValue(const char *value) { - uint32_t len = strlen(value); + auto len = NumericCast(strlen(value)); VarIntEncode(len); WriteData(value, len); } diff --git a/src/common/sort/partition_state.cpp b/src/common/sort/partition_state.cpp index a531fea0f2f6..c123f275556f 100644 --- a/src/common/sort/partition_state.cpp +++ b/src/common/sort/partition_state.cpp @@ -3,7 +3,7 @@ #include "duckdb/common/types/column/column_data_consumer.hpp" #include "duckdb/common/row_operations/row_operations.hpp" #include "duckdb/main/config.hpp" -#include "duckdb/parallel/event.hpp" +#include "duckdb/parallel/executor_task.hpp" #include @@ -565,7 +565,7 @@ class PartitionMergeTask : public ExecutorTask { public: PartitionMergeTask(shared_ptr event_p, ClientContext &context_p, PartitionGlobalMergeStates &hash_groups_p, PartitionGlobalSinkState &gstate) - : ExecutorTask(context_p), event(std::move(event_p)), local_state(gstate), hash_groups(hash_groups_p) { + : ExecutorTask(context_p, std::move(event_p)), local_state(gstate), hash_groups(hash_groups_p) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override; @@ -582,7 +582,6 @@ class PartitionMergeTask : public ExecutorTask { Executor &executor; }; - shared_ptr event; PartitionLocalMergeState local_state; PartitionGlobalMergeStates &hash_groups; }; diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index 4df16fc13476..20931aa833a9 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -44,13 +44,13 @@ void StringUtil::LTrim(string &str) { // Remove trailing ' ', '\f', '\n', '\r', '\t', '\v' void StringUtil::RTrim(string &str) { - str.erase(find_if(str.rbegin(), str.rend(), [](int ch) { return ch > 0 && !CharacterIsSpace(ch); }).base(), + str.erase(find_if(str.rbegin(), str.rend(), [](char ch) { return ch > 0 && !CharacterIsSpace(ch); }).base(), str.end()); } void StringUtil::RTrim(string &str, const string &chars_to_trim) { str.erase(find_if(str.rbegin(), str.rend(), - [&chars_to_trim](int ch) { return ch > 0 && chars_to_trim.find(ch) == string::npos; }) + [&chars_to_trim](char ch) { return ch > 0 && chars_to_trim.find(ch) == string::npos; }) .base(), str.end()); } @@ -355,7 +355,7 @@ idx_t StringUtil::LevenshteinDistance(const string &s1_p, const string &s2_p, id // d[i][j] = std::min({ d[i - 1][j] + 1, // d[i][j - 1] + 1, // d[i - 1][j - 1] + (s1[i - 1] == s2[j - 1] ? 0 : 1) }); - int equal = s1[i - 1] == s2[j - 1] ? 0 : not_equal_penalty; + auto equal = s1[i - 1] == s2[j - 1] ? 0 : not_equal_penalty; idx_t adjacent_score1 = array.Score(i - 1, j) + 1; idx_t adjacent_score2 = array.Score(i, j - 1) + 1; idx_t adjacent_score3 = array.Score(i - 1, j - 1) + equal; diff --git a/src/common/types.cpp b/src/common/types.cpp index c7c4d5cfaf84..dc5c2d6d4ed3 100644 --- a/src/common/types.cpp +++ b/src/common/types.cpp @@ -8,6 +8,7 @@ #include "duckdb/common/exception.hpp" #include "duckdb/common/extra_type_info.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/operator/comparison_operators.hpp" #include "duckdb/common/serializer/deserializer.hpp" #include "duckdb/common/serializer/serializer.hpp" @@ -672,7 +673,7 @@ static LogicalType DecimalSizeCheck(const LogicalType &left, const LogicalType & D_ASSERT(other_scale == 0); const auto effective_width = width - scale; if (other_width > effective_width) { - auto new_width = other_width + scale; + auto new_width = NumericCast(other_width + scale); //! Cap the width at max, if an actual value exceeds this, an exception will be thrown later if (new_width > DecimalType::MaxWidth()) { new_width = DecimalType::MaxWidth(); @@ -824,13 +825,14 @@ static bool CombineEqualTypes(const LogicalType &left, const LogicalType &right, // using the max of these of the two types gives us the new decimal size auto extra_width_left = DecimalType::GetWidth(left) - DecimalType::GetScale(left); auto extra_width_right = DecimalType::GetWidth(right) - DecimalType::GetScale(right); - auto extra_width = MaxValue(extra_width_left, extra_width_right); + auto extra_width = + MaxValue(NumericCast(extra_width_left), NumericCast(extra_width_right)); auto scale = MaxValue(DecimalType::GetScale(left), DecimalType::GetScale(right)); - auto width = extra_width + scale; + auto width = NumericCast(extra_width + scale); if (width > DecimalType::MaxWidth()) { // if the resulting decimal does not fit, we truncate the scale width = DecimalType::MaxWidth(); - scale = width - extra_width; + scale = NumericCast(width - extra_width); } result = LogicalType::DECIMAL(width, scale); return true; @@ -1168,7 +1170,7 @@ uint8_t DecimalType::MaxWidth() { return DecimalWidth::max; } -LogicalType LogicalType::DECIMAL(int width, int scale) { +LogicalType LogicalType::DECIMAL(uint8_t width, uint8_t scale) { D_ASSERT(width >= scale); auto type_info = make_shared(width, scale); return LogicalType(LogicalTypeId::DECIMAL, std::move(type_info)); diff --git a/src/common/types/bit.cpp b/src/common/types/bit.cpp index 761ac95354dc..97db477451c4 100644 --- a/src/common/types/bit.cpp +++ b/src/common/types/bit.cpp @@ -1,4 +1,5 @@ #include "duckdb/common/assert.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/operator/cast_operators.hpp" #include "duckdb/common/typedefs.hpp" #include "duckdb/common/types/bit.hpp" @@ -129,7 +130,7 @@ void Bit::ToBit(string_t str, string_t &output_str) { } } if (padded_byte != 0) { - *(output++) = (8 - padded_byte); // the first byte contains the number of padded zeroes + *(output++) = UnsafeNumericCast((8 - padded_byte)); // the first byte contains the number of padded zeroes } *(output++) = byte; @@ -150,7 +151,7 @@ void Bit::ToBit(string_t str, string_t &output_str) { string Bit::ToBit(string_t str) { auto bit_len = GetBitSize(str); auto buffer = make_unsafe_uniq_array(bit_len); - string_t output_str(buffer.get(), bit_len); + string_t output_str(buffer.get(), UnsafeNumericCast(bit_len)); Bit::ToBit(str, output_str); return output_str.GetString(); } @@ -166,7 +167,7 @@ void Bit::BlobToBit(string_t blob, string_t &output_str) { string Bit::BlobToBit(string_t blob) { auto buffer = make_unsafe_uniq_array(blob.GetSize() + 1); - string_t output_str(buffer.get(), blob.GetSize() + 1); + string_t output_str(buffer.get(), UnsafeNumericCast(blob.GetSize() + 1)); Bit::BlobToBit(blob, output_str); return output_str.GetString(); } @@ -192,7 +193,7 @@ string Bit::BitToBlob(string_t bit) { D_ASSERT(bit.GetSize() > 1); auto buffer = make_unsafe_uniq_array(bit.GetSize() - 1); - string_t output_str(buffer.get(), bit.GetSize() - 1); + string_t output_str(buffer.get(), UnsafeNumericCast(bit.GetSize() - 1)); Bit::BitToBlob(bit, output_str); return output_str.GetString(); } @@ -289,11 +290,11 @@ void Bit::SetBit(string_t &bit_string, idx_t n, idx_t new_value) { } void Bit::SetBitInternal(string_t &bit_string, idx_t n, idx_t new_value) { - char *buf = bit_string.GetDataWriteable(); + auto buf = bit_string.GetDataWriteable(); auto idx = Bit::GetBitIndex(n); D_ASSERT(idx < bit_string.GetSize()); - char shift_byte = 1 << (7 - (n % 8)); + auto shift_byte = UnsafeNumericCast(1 << (7 - (n % 8))); if (new_value == 0) { shift_byte = ~shift_byte; buf[idx] &= shift_byte; diff --git a/src/common/types/blob.cpp b/src/common/types/blob.cpp index 8e5720d12ad9..5cb8e5df606b 100644 --- a/src/common/types/blob.cpp +++ b/src/common/types/blob.cpp @@ -2,6 +2,7 @@ #include "duckdb/common/types/blob.hpp" #include "duckdb/common/assert.hpp" #include "duckdb/common/exception.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/string_util.hpp" #include "duckdb/common/operator/cast_operators.hpp" @@ -69,7 +70,7 @@ string Blob::ToString(string_t blob) { return string(buffer.get(), str_len); } -bool Blob::TryGetBlobSize(string_t str, idx_t &str_len, string *error_message) { +bool Blob::TryGetBlobSize(string_t str, idx_t &str_len, CastParameters ¶meters) { auto data = const_data_ptr_cast(str.GetData()); auto len = str.GetSize(); str_len = 0; @@ -78,14 +79,14 @@ bool Blob::TryGetBlobSize(string_t str, idx_t &str_len, string *error_message) { if (i + 3 >= len) { string error = "Invalid hex escape code encountered in string -> blob conversion: " "unterminated escape code at end of blob"; - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } if (data[i + 1] != 'x' || Blob::HEX_MAP[data[i + 2]] < 0 || Blob::HEX_MAP[data[i + 3]] < 0) { string error = StringUtil::Format("Invalid hex escape code encountered in string -> blob conversion: %s", string(const_char_ptr_cast(data) + i, 4)); - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } str_len++; @@ -95,7 +96,7 @@ bool Blob::TryGetBlobSize(string_t str, idx_t &str_len, string *error_message) { } else { string error = "Invalid byte encountered in STRING -> BLOB conversion. All non-ascii characters " "must be escaped with hex codes (e.g. \\xAA)"; - HandleCastError::AssignError(error, error_message); + HandleCastError::AssignError(error, parameters); return false; } } @@ -103,10 +104,15 @@ bool Blob::TryGetBlobSize(string_t str, idx_t &str_len, string *error_message) { } idx_t Blob::GetBlobSize(string_t str) { - string error_message; + CastParameters parameters; + return GetBlobSize(str, parameters); +} + +idx_t Blob::GetBlobSize(string_t str, CastParameters ¶meters) { idx_t str_len; - if (!Blob::TryGetBlobSize(str, str_len, &error_message)) { - throw ConversionException(error_message); + auto result = Blob::TryGetBlobSize(str, str_len, parameters); + if (!result) { + throw InternalException("Blob::TryGetBlobSize failed but no exception was thrown!?"); } return str_len; } @@ -122,7 +128,7 @@ void Blob::ToBlob(string_t str, data_ptr_t output) { D_ASSERT(i + 3 < len); D_ASSERT(byte_a >= 0 && byte_b >= 0); D_ASSERT(data[i + 1] == 'x'); - output[blob_idx++] = (byte_a << 4) + byte_b; + output[blob_idx++] = UnsafeNumericCast((byte_a << 4) + byte_b); i += 3; } else if (data[i] <= 127) { output[blob_idx++] = data_t(data[i]); @@ -135,7 +141,12 @@ void Blob::ToBlob(string_t str, data_ptr_t output) { } string Blob::ToBlob(string_t str) { - auto blob_len = GetBlobSize(str); + CastParameters parameters; + return Blob::ToBlob(str, parameters); +} + +string Blob::ToBlob(string_t str, CastParameters ¶meters) { + auto blob_len = GetBlobSize(str, parameters); auto buffer = make_unsafe_uniq_array(blob_len); Blob::ToBlob(str, data_ptr_cast(buffer.get())); return string(buffer.get(), blob_len); diff --git a/src/common/types/column/column_data_allocator.cpp b/src/common/types/column/column_data_allocator.cpp index 690595f0a8a2..d766545a6fdf 100644 --- a/src/common/types/column/column_data_allocator.cpp +++ b/src/common/types/column/column_data_allocator.cpp @@ -64,9 +64,10 @@ BufferHandle ColumnDataAllocator::AllocateBlock(idx_t size) { auto block_size = MaxValue(size, Storage::BLOCK_SIZE); BlockMetaData data; data.size = 0; - data.capacity = block_size; + data.capacity = NumericCast(block_size); auto pin = alloc.buffer_manager->Allocate(MemoryTag::COLUMN_DATA, block_size, false, &data.handle); blocks.push_back(std::move(data)); + allocated_size += block_size; return pin; } @@ -80,9 +81,10 @@ void ColumnDataAllocator::AllocateEmptyBlock(idx_t size) { D_ASSERT(type == ColumnDataAllocatorType::IN_MEMORY_ALLOCATOR); BlockMetaData data; data.size = 0; - data.capacity = allocation_amount; + data.capacity = NumericCast(allocation_amount); data.handle = nullptr; blocks.push_back(std::move(data)); + allocated_size += allocation_amount; } void ColumnDataAllocator::AssignPointer(uint32_t &block_id, uint32_t &offset, data_ptr_t pointer) { @@ -110,7 +112,7 @@ void ColumnDataAllocator::AllocateBuffer(idx_t size, uint32_t &block_id, uint32_ } auto &block = blocks.back(); D_ASSERT(size <= block.capacity - block.size); - block_id = blocks.size() - 1; + block_id = NumericCast(blocks.size() - 1); if (chunk_state && chunk_state->handles.find(block_id) == chunk_state->handles.end()) { // not guaranteed to be pinned already by this thread (if shared allocator) chunk_state->handles[block_id] = alloc.buffer_manager->Pin(blocks[block_id].handle); @@ -186,8 +188,8 @@ void ColumnDataAllocator::UnswizzlePointers(ChunkManagementState &state, Vector auto strings = FlatVector::GetData(result); // find first non-inlined string - uint32_t i = v_offset; - const uint32_t end = v_offset + count; + auto i = NumericCast(v_offset); + const uint32_t end = NumericCast(v_offset + count); for (; i < end; i++) { if (!validity.RowIsValid(i)) { continue; @@ -237,7 +239,7 @@ void ColumnDataAllocator::InitializeChunkState(ChunkManagementState &state, Chun do { found_handle = false; for (auto it = state.handles.begin(); it != state.handles.end(); it++) { - if (chunk.block_ids.find(it->first) != chunk.block_ids.end()) { + if (chunk.block_ids.find(NumericCast(it->first)) != chunk.block_ids.end()) { // still required: do not release continue; } diff --git a/src/common/types/column/column_data_collection.cpp b/src/common/types/column/column_data_collection.cpp index 9305c68f2dd8..8552332c2dc8 100644 --- a/src/common/types/column/column_data_collection.cpp +++ b/src/common/types/column/column_data_collection.cpp @@ -111,6 +111,14 @@ idx_t ColumnDataCollection::SizeInBytes() const { return total_size; } +idx_t ColumnDataCollection::AllocationSize() const { + idx_t total_size = 0; + for (const auto &segment : segments) { + total_size += segment->AllocationSize(); + } + return total_size; +} + //===--------------------------------------------------------------------===// // ColumnDataRow //===--------------------------------------------------------------------===// @@ -289,6 +297,7 @@ const ColumnDataRow &ColumnDataRowIterationHelper::ColumnDataRowIterator::operat //===--------------------------------------------------------------------===// void ColumnDataCollection::InitializeAppend(ColumnDataAppendState &state) { D_ASSERT(!finished_append); + state.current_chunk_state.handles.clear(); state.vector_data.resize(types.size()); if (segments.empty()) { CreateSegment(); @@ -532,7 +541,8 @@ void ColumnDataCopy(ColumnDataMetaData &meta_data, const UnifiedVector } else { D_ASSERT(heap_ptr != nullptr); memcpy(heap_ptr, source_entry.GetData(), source_entry.GetSize()); - target_entry = string_t(const_char_ptr_cast(heap_ptr), source_entry.GetSize()); + target_entry = + string_t(const_char_ptr_cast(heap_ptr), UnsafeNumericCast(source_entry.GetSize())); heap_ptr += source_entry.GetSize(); } } diff --git a/src/common/types/column/column_data_collection_segment.cpp b/src/common/types/column/column_data_collection_segment.cpp index f1f3d4af1fa5..9713b66af09e 100644 --- a/src/common/types/column/column_data_collection_segment.cpp +++ b/src/common/types/column/column_data_collection_segment.cpp @@ -255,6 +255,11 @@ idx_t ColumnDataCollectionSegment::SizeInBytes() const { return allocator->SizeInBytes() + heap->SizeInBytes(); } +idx_t ColumnDataCollectionSegment::AllocationSize() const { + D_ASSERT(!allocator->IsShared()); + return allocator->AllocationSize() + heap->AllocationSize(); +} + void ColumnDataCollectionSegment::FetchChunk(idx_t chunk_idx, DataChunk &result) { vector column_ids; column_ids.reserve(types.size()); diff --git a/src/common/types/column/partitioned_column_data.cpp b/src/common/types/column/partitioned_column_data.cpp index 0843931ce02d..c785f346e869 100644 --- a/src/common/types/column/partitioned_column_data.cpp +++ b/src/common/types/column/partitioned_column_data.cpp @@ -92,7 +92,7 @@ void PartitionedColumnData::Append(PartitionedColumnDataAppendState &state, Data for (idx_t i = 0; i < count; i++) { const auto &partition_index = partition_indices[i]; auto &partition_offset = partition_entries[partition_index].offset; - all_partitions_sel[partition_offset++] = i; + all_partitions_sel[partition_offset++] = NumericCast(i); } // Loop through the partitions to append the new data to the partition buffers, and flush the buffers if necessary diff --git a/src/common/types/data_chunk.cpp b/src/common/types/data_chunk.cpp index aa1e1deb8cab..6e1b5ed89ef5 100644 --- a/src/common/types/data_chunk.cpp +++ b/src/common/types/data_chunk.cpp @@ -238,7 +238,7 @@ void DataChunk::Serialize(Serializer &serializer) const { // write the count auto row_count = size(); - serializer.WriteProperty(100, "rows", row_count); + serializer.WriteProperty(100, "rows", NumericCast(row_count)); // we should never try to serialize empty data chunks auto column_count = ColumnCount(); diff --git a/src/common/types/date.cpp b/src/common/types/date.cpp index 39110c9febdf..1f06b884dd27 100644 --- a/src/common/types/date.cpp +++ b/src/common/types/date.cpp @@ -417,7 +417,7 @@ int32_t Date::EpochDays(date_t date) { } date_t Date::EpochToDate(int64_t epoch) { - return date_t(epoch / Interval::SECS_PER_DAY); + return date_t(UnsafeNumericCast(epoch / Interval::SECS_PER_DAY)); } int64_t Date::Epoch(date_t date) { diff --git a/src/common/types/hugeint.cpp b/src/common/types/hugeint.cpp index 0ef7e0fc5fce..d5343fc6860d 100644 --- a/src/common/types/hugeint.cpp +++ b/src/common/types/hugeint.cpp @@ -4,6 +4,7 @@ #include "duckdb/common/algorithm.hpp" #include "duckdb/common/hugeint.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/windows_undefs.hpp" #include "duckdb/common/types/value.hpp" #include "duckdb/common/operator/cast_operators.hpp" @@ -165,7 +166,7 @@ string Hugeint::ToString(hugeint_t input) { break; } input = Hugeint::DivModPositive(input, 10, remainder); - result = string(1, '0' + remainder) + result; // NOLINT + result = string(1, UnsafeNumericCast('0' + remainder)) + result; // NOLINT } if (result.empty()) { // value is zero @@ -677,7 +678,7 @@ bool Hugeint::TryConvert(int8_t value, hugeint_t &result) { template <> bool Hugeint::TryConvert(const char *value, hugeint_t &result) { auto len = strlen(value); - string_t string_val(value, len); + string_t string_val(value, UnsafeNumericCast(len)); return TryCast::Operation(string_val, result, true); } diff --git a/src/common/types/interval.cpp b/src/common/types/interval.cpp index 569f89c061fa..7a31cbfec1ad 100644 --- a/src/common/types/interval.cpp +++ b/src/common/types/interval.cpp @@ -111,7 +111,7 @@ bool Interval::FromCString(const char *str, idx_t len, interval_t &result, strin return false; } // finished the number, parse it from the string - string_t nr_string(str + start_pos, pos - start_pos); + string_t nr_string(str + start_pos, UnsafeNumericCast(pos - start_pos)); number = Cast::Operation(nr_string); fraction = 0; if (c == '.') { diff --git a/src/common/types/list_segment.cpp b/src/common/types/list_segment.cpp index f0308268b3c3..3b2cfb7a4e70 100644 --- a/src/common/types/list_segment.cpp +++ b/src/common/types/list_segment.cpp @@ -1,4 +1,5 @@ #include "duckdb/common/types/list_segment.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/uhugeint.hpp" namespace duckdb { @@ -190,7 +191,7 @@ static ListSegment *GetSegment(const ListSegmentFunctions &functions, ArenaAlloc if (!linked_list.last_segment) { // empty linked list, create the first (and last) segment auto capacity = ListSegment::INITIAL_CAPACITY; - segment = functions.create_segment(functions, allocator, capacity); + segment = functions.create_segment(functions, allocator, UnsafeNumericCast(capacity)); linked_list.first_segment = segment; linked_list.last_segment = segment; diff --git a/src/common/types/row/partitioned_tuple_data.cpp b/src/common/types/row/partitioned_tuple_data.cpp index e4ba93797fd0..979b292294e7 100644 --- a/src/common/types/row/partitioned_tuple_data.cpp +++ b/src/common/types/row/partitioned_tuple_data.cpp @@ -32,12 +32,6 @@ void PartitionedTupleData::InitializeAppendState(PartitionedTupleDataAppendState state.partition_sel.Initialize(); state.reverse_partition_sel.Initialize(); - vector column_ids; - column_ids.reserve(layout.ColumnCount()); - for (idx_t col_idx = 0; col_idx < layout.ColumnCount(); col_idx++) { - column_ids.emplace_back(col_idx); - } - InitializeAppendStateInternal(state, properties); } @@ -223,7 +217,7 @@ void PartitionedTupleData::BuildPartitionSel(PartitionedTupleDataAppendState &st // This needs to be initialized, even if we go the short path here for (idx_t i = 0; i < append_count; i++) { const auto index = append_sel.get_index(i); - state.reverse_partition_sel[index] = i; + state.reverse_partition_sel[index] = NumericCast(i); } return; } @@ -243,8 +237,8 @@ void PartitionedTupleData::BuildPartitionSel(PartitionedTupleDataAppendState &st const auto index = append_sel.get_index(i); const auto &partition_index = partition_indices[index]; auto &partition_offset = partition_entries[partition_index].offset; - reverse_partition_sel[index] = partition_offset; - partition_sel[partition_offset++] = index; + reverse_partition_sel[index] = UnsafeNumericCast(partition_offset); + partition_sel[partition_offset++] = UnsafeNumericCast(index); } } diff --git a/src/common/types/row/tuple_data_allocator.cpp b/src/common/types/row/tuple_data_allocator.cpp index 6c92c7b22eb4..5702aac517b6 100644 --- a/src/common/types/row/tuple_data_allocator.cpp +++ b/src/common/types/row/tuple_data_allocator.cpp @@ -110,12 +110,12 @@ TupleDataChunkPart TupleDataAllocator::BuildChunkPart(TupleDataPinState &pin_sta if (row_blocks.empty() || row_blocks.back().RemainingCapacity() < layout.GetRowWidth()) { row_blocks.emplace_back(buffer_manager, (idx_t)Storage::BLOCK_SIZE); } - result.row_block_index = row_blocks.size() - 1; + result.row_block_index = NumericCast(row_blocks.size() - 1); auto &row_block = row_blocks[result.row_block_index]; - result.row_block_offset = row_block.size; + result.row_block_offset = NumericCast(row_block.size); // Set count (might be reduced later when checking heap space) - result.count = MinValue(row_block.RemainingCapacity(layout.GetRowWidth()), append_count); + result.count = NumericCast(MinValue(row_block.RemainingCapacity(layout.GetRowWidth()), append_count)); if (!layout.AllConstant()) { const auto heap_sizes = FlatVector::GetData(chunk_state.heap_sizes); @@ -138,21 +138,21 @@ TupleDataChunkPart TupleDataAllocator::BuildChunkPart(TupleDataPinState &pin_sta const auto size = MaxValue((idx_t)Storage::BLOCK_SIZE, heap_sizes[append_offset]); heap_blocks.emplace_back(buffer_manager, size); } - result.heap_block_index = heap_blocks.size() - 1; + result.heap_block_index = NumericCast(heap_blocks.size() - 1); auto &heap_block = heap_blocks[result.heap_block_index]; - result.heap_block_offset = heap_block.size; + result.heap_block_offset = NumericCast(heap_block.size); const auto heap_remaining = heap_block.RemainingCapacity(); if (total_heap_size <= heap_remaining) { // Everything fits - result.total_heap_size = total_heap_size; + result.total_heap_size = NumericCast(total_heap_size); } else { // Not everything fits - determine how many we can read next result.total_heap_size = 0; for (idx_t i = 0; i < result.count; i++) { const auto &heap_size = heap_sizes[append_offset + i]; if (result.total_heap_size + heap_size > heap_remaining) { - result.count = i; + result.count = NumericCast(i); break; } result.total_heap_size += heap_size; diff --git a/src/common/types/row/tuple_data_collection.cpp b/src/common/types/row/tuple_data_collection.cpp index 745d2f820c7e..a15a5b93a2e0 100644 --- a/src/common/types/row/tuple_data_collection.cpp +++ b/src/common/types/row/tuple_data_collection.cpp @@ -261,20 +261,24 @@ static inline void ToUnifiedFormatInternal(TupleDataVectorFormat &format, Vector // For arrays, we cheat a bit and pretend that they are lists by creating and assigning list_entry_t's to the // vector This allows us to reuse all the list serialization functions for array types too. + auto array_size = ArrayType::GetSize(vector.GetType()); - // This is kind of hacky, but we need to create a list_entry_t for each array entry - idx_t array_count = ArrayVector::GetTotalSize(vector) / ArrayType::GetSize(vector.GetType()); - format.array_list_entries = make_uniq_array(array_count); + // Get the max offset from the sel vector + idx_t max_offset = count; + for (idx_t i = 0; i < count; i++) { + max_offset = MaxValue(max_offset, format.unified.sel->get_index(i)); + } + max_offset++; - auto array_size = ArrayType::GetSize(vector.GetType()); // create list entries - for (idx_t i = 0; i < array_count; i++) { + format.array_list_entries = make_uniq_array(max_offset); + for (idx_t i = 0; i < max_offset; i++) { format.array_list_entries[i].length = array_size; format.array_list_entries[i].offset = i * array_size; } format.unified.data = reinterpret_cast(format.array_list_entries.get()); - ToUnifiedFormatInternal(format.children[0], ArrayVector::GetEntry(vector), ArrayVector::GetTotalSize(vector)); + ToUnifiedFormatInternal(format.children[0], ArrayVector::GetEntry(vector), count * array_size); } break; default: break; diff --git a/src/common/types/row/tuple_data_scatter_gather.cpp b/src/common/types/row/tuple_data_scatter_gather.cpp index 998a552e8e92..53e44ccd235e 100644 --- a/src/common/types/row/tuple_data_scatter_gather.cpp +++ b/src/common/types/row/tuple_data_scatter_gather.cpp @@ -31,7 +31,8 @@ inline void TupleDataValueStore(const string_t &source, const data_ptr_t &row_lo Store(source, row_location + offset_in_row); } else { memcpy(heap_location, source.GetData(), source.GetSize()); - Store(string_t(const_char_ptr_cast(heap_location), source.GetSize()), row_location + offset_in_row); + Store(string_t(const_char_ptr_cast(heap_location), UnsafeNumericCast(source.GetSize())), + row_location + offset_in_row); heap_location += source.GetSize(); } } @@ -45,7 +46,7 @@ static inline void TupleDataWithinListValueStore(const T &source, const data_ptr template <> inline void TupleDataWithinListValueStore(const string_t &source, const data_ptr_t &location, data_ptr_t &heap_location) { - Store(source.GetSize(), location); + Store(NumericCast(source.GetSize()), location); memcpy(heap_location, source.GetData(), source.GetSize()); heap_location += source.GetSize(); } @@ -483,7 +484,7 @@ void TupleDataCollection::Scatter(TupleDataChunkState &chunk_state, const DataCh const auto heap_size_offset = layout.GetHeapSizeOffset(); const auto heap_sizes = FlatVector::GetData(chunk_state.heap_sizes); for (idx_t i = 0; i < append_count; i++) { - Store(heap_sizes[i], row_locations[i] + heap_size_offset); + Store(NumericCast(heap_sizes[i]), row_locations[i] + heap_size_offset); } } diff --git a/src/common/types/selection_vector.cpp b/src/common/types/selection_vector.cpp index 463cc76dbd88..8458d4c651b8 100644 --- a/src/common/types/selection_vector.cpp +++ b/src/common/types/selection_vector.cpp @@ -38,7 +38,7 @@ buffer_ptr SelectionVector::Slice(const SelectionVector &sel, idx for (idx_t i = 0; i < count; i++) { auto new_idx = sel.get_index(i); auto idx = this->get_index(new_idx); - result_ptr[i] = idx; + result_ptr[i] = UnsafeNumericCast(idx); } return data; } diff --git a/src/common/types/string_heap.cpp b/src/common/types/string_heap.cpp index d1b7b6611812..eac0f59e7f5c 100644 --- a/src/common/types/string_heap.cpp +++ b/src/common/types/string_heap.cpp @@ -52,11 +52,15 @@ string_t StringHeap::AddBlob(const string_t &data) { string_t StringHeap::EmptyString(idx_t len) { D_ASSERT(len > string_t::INLINE_LENGTH); auto insert_pos = const_char_ptr_cast(allocator.Allocate(len)); - return string_t(insert_pos, len); + return string_t(insert_pos, UnsafeNumericCast(len)); } idx_t StringHeap::SizeInBytes() const { return allocator.SizeInBytes(); } +idx_t StringHeap::AllocationSize() const { + return allocator.AllocationSize(); +} + } // namespace duckdb diff --git a/src/common/types/string_type.cpp b/src/common/types/string_type.cpp index e8e98718b367..ddf615129506 100644 --- a/src/common/types/string_type.cpp +++ b/src/common/types/string_type.cpp @@ -17,7 +17,7 @@ void string_t::Verify() const { #endif // verify that the prefix contains the first four characters of the string - for (idx_t i = 0; i < MinValue(PREFIX_LENGTH, GetSize()); i++) { + for (idx_t i = 0; i < MinValue(PREFIX_LENGTH, GetSize()); i++) { D_ASSERT(GetPrefix()[i] == dataptr[i]); } // verify that for strings with length <= INLINE_LENGTH, the rest of the string is zero diff --git a/src/common/types/time.cpp b/src/common/types/time.cpp index 7e37ab2a55c8..8d2ba7fc3f7d 100644 --- a/src/common/types/time.cpp +++ b/src/common/types/time.cpp @@ -137,8 +137,9 @@ bool Time::TryConvertTime(const char *buf, idx_t len, idx_t &pos, dtime_t &resul return result.micros <= Interval::MICROS_PER_DAY; } -bool Time::TryConvertTimeTZ(const char *buf, idx_t len, idx_t &pos, dtime_tz_t &result, bool strict) { +bool Time::TryConvertTimeTZ(const char *buf, idx_t len, idx_t &pos, dtime_tz_t &result, bool &has_offset, bool strict) { dtime_t time_part; + has_offset = false; if (!Time::TryConvertInternal(buf, len, pos, time_part, false)) { if (!strict) { // last chance, check if we can parse as timestamp @@ -162,7 +163,8 @@ bool Time::TryConvertTimeTZ(const char *buf, idx_t len, idx_t &pos, dtime_tz_t & // Get the ±HH[:MM] part int hh = 0; int mm = 0; - if (pos < len && !Timestamp::TryParseUTCOffset(buf, pos, len, hh, mm)) { + has_offset = (pos < len); + if (has_offset && !Timestamp::TryParseUTCOffset(buf, pos, len, hh, mm)) { return false; } diff --git a/src/common/types/timestamp.cpp b/src/common/types/timestamp.cpp index aeb8ef53a177..3ae9e46237ce 100644 --- a/src/common/types/timestamp.cpp +++ b/src/common/types/timestamp.cpp @@ -109,7 +109,7 @@ bool Timestamp::TryConvertTimestampTZ(const char *str, idx_t len, timestamp_t &r } auto tz_len = str + pos - tz_name; if (tz_len) { - tz = string_t(tz_name, tz_len); + tz = string_t(tz_name, UnsafeNumericCast(tz_len)); } // Note that the caller must reinterpret the instant we return to the given time zone } @@ -309,7 +309,7 @@ timestamp_t Timestamp::GetCurrentTimestamp() { return Timestamp::FromEpochMs(epoch_ms); } -timestamp_t Timestamp::FromEpochSeconds(int64_t sec) { +timestamp_t Timestamp::FromEpochSecondsPossiblyInfinite(int64_t sec) { int64_t result; if (!TryMultiplyOperator::Operation(sec, Interval::MICROS_PER_SEC, result)) { throw ConversionException("Could not convert Timestamp(S) to Timestamp(US)"); @@ -317,7 +317,12 @@ timestamp_t Timestamp::FromEpochSeconds(int64_t sec) { return timestamp_t(result); } -timestamp_t Timestamp::FromEpochMs(int64_t ms) { +timestamp_t Timestamp::FromEpochSeconds(int64_t sec) { + D_ASSERT(Timestamp::IsFinite(timestamp_t(sec))); + return FromEpochSecondsPossiblyInfinite(sec); +} + +timestamp_t Timestamp::FromEpochMsPossiblyInfinite(int64_t ms) { int64_t result; if (!TryMultiplyOperator::Operation(ms, Interval::MICROS_PER_MSEC, result)) { throw ConversionException("Could not convert Timestamp(MS) to Timestamp(US)"); @@ -325,19 +330,31 @@ timestamp_t Timestamp::FromEpochMs(int64_t ms) { return timestamp_t(result); } +timestamp_t Timestamp::FromEpochMs(int64_t ms) { + D_ASSERT(Timestamp::IsFinite(timestamp_t(ms))); + return FromEpochMsPossiblyInfinite(ms); +} + timestamp_t Timestamp::FromEpochMicroSeconds(int64_t micros) { return timestamp_t(micros); } -timestamp_t Timestamp::FromEpochNanoSeconds(int64_t ns) { +timestamp_t Timestamp::FromEpochNanoSecondsPossiblyInfinite(int64_t ns) { return timestamp_t(ns / 1000); } +timestamp_t Timestamp::FromEpochNanoSeconds(int64_t ns) { + D_ASSERT(Timestamp::IsFinite(timestamp_t(ns))); + return FromEpochNanoSecondsPossiblyInfinite(ns); +} + int64_t Timestamp::GetEpochSeconds(timestamp_t timestamp) { + D_ASSERT(Timestamp::IsFinite(timestamp)); return timestamp.value / Interval::MICROS_PER_SEC; } int64_t Timestamp::GetEpochMs(timestamp_t timestamp) { + D_ASSERT(Timestamp::IsFinite(timestamp)); return timestamp.value / Interval::MICROS_PER_MSEC; } @@ -345,10 +362,19 @@ int64_t Timestamp::GetEpochMicroSeconds(timestamp_t timestamp) { return timestamp.value; } +bool Timestamp::TryGetEpochNanoSeconds(timestamp_t timestamp, int64_t &result) { + constexpr static const int64_t NANOSECONDS_IN_MICROSECOND = 1000; + D_ASSERT(Timestamp::IsFinite(timestamp)); + if (!TryMultiplyOperator::Operation(timestamp.value, NANOSECONDS_IN_MICROSECOND, result)) { + return false; + } + return true; +} + int64_t Timestamp::GetEpochNanoSeconds(timestamp_t timestamp) { int64_t result; - int64_t ns_in_us = 1000; - if (!TryMultiplyOperator::Operation(timestamp.value, ns_in_us, result)) { + D_ASSERT(Timestamp::IsFinite(timestamp)); + if (!TryGetEpochNanoSeconds(timestamp, result)) { throw ConversionException("Could not convert Timestamp(US) to Timestamp(NS)"); } return result; diff --git a/src/common/types/uhugeint.cpp b/src/common/types/uhugeint.cpp index 3d33d8cc7d66..479f756d4300 100644 --- a/src/common/types/uhugeint.cpp +++ b/src/common/types/uhugeint.cpp @@ -3,6 +3,7 @@ #include "duckdb/common/exception.hpp" #include "duckdb/common/algorithm.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/windows_undefs.hpp" #include "duckdb/common/types/value.hpp" #include "duckdb/common/operator/cast_operators.hpp" @@ -64,7 +65,7 @@ string Uhugeint::ToString(uhugeint_t input) { break; } input = Uhugeint::DivMod(input, 10, remainder); - result = string(1, '0' + remainder.lower) + result; // NOLINT + result = string(1, UnsafeNumericCast('0' + remainder.lower)) + result; // NOLINT } if (result.empty()) { // value is zero @@ -432,7 +433,7 @@ uhugeint_t UhugeintConvertInteger(DST input) { template <> bool Uhugeint::TryConvert(const char *value, uhugeint_t &result) { auto len = strlen(value); - string_t string_val(value, len); + string_t string_val(value, UnsafeNumericCast(len)); return TryCast::Operation(string_val, result, true); } diff --git a/src/common/types/uuid.cpp b/src/common/types/uuid.cpp index 7ab19f9d466e..d6fe6dff4d30 100644 --- a/src/common/types/uuid.cpp +++ b/src/common/types/uuid.cpp @@ -85,6 +85,17 @@ void UUID::ToString(hugeint_t input, char *buf) { byte_to_hex(input.lower & 0xFF, buf, pos); } +hugeint_t UUID::FromUHugeint(uhugeint_t input) { + hugeint_t result; + result.lower = input.lower; + if (input.upper > uint64_t(NumericLimits::Maximum())) { + result.upper = int64_t(input.upper - uint64_t(NumericLimits::Maximum()) - 1); + } else { + result.upper = int64_t(input.upper) - NumericLimits::Maximum() - 1; + } + return result; +} + hugeint_t UUID::GenerateRandomUUID(RandomEngine &engine) { uint8_t bytes[16]; for (int i = 0; i < 16; i += 4) { diff --git a/src/common/types/validity_mask.cpp b/src/common/types/validity_mask.cpp index 3faa811e44c5..d91c7a7373ef 100644 --- a/src/common/types/validity_mask.cpp +++ b/src/common/types/validity_mask.cpp @@ -1,5 +1,6 @@ #include "duckdb/common/types/validity_mask.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/serializer/write_stream.hpp" #include "duckdb/common/serializer/read_stream.hpp" @@ -195,13 +196,13 @@ void ValidityMask::Write(WriteStream &writer, idx_t count) { // serialize (in)valid value indexes as [COUNT][V0][V1][...][VN] auto flag = serialize_valid ? ValiditySerialization::VALID_VALUES : ValiditySerialization::INVALID_VALUES; writer.Write(flag); - writer.Write(MinValue(valid_values, invalid_values)); + writer.Write(NumericCast(MinValue(valid_values, invalid_values))); for (idx_t i = 0; i < count; i++) { if (RowIsValid(i) == serialize_valid) { if (need_u32) { - writer.Write(i); + writer.Write(UnsafeNumericCast(i)); } else { - writer.Write(i); + writer.Write(UnsafeNumericCast(i)); } } } diff --git a/src/common/types/value.cpp b/src/common/types/value.cpp index 377cfc93cb5c..498244b8a91d 100644 --- a/src/common/types/value.cpp +++ b/src/common/types/value.cpp @@ -530,10 +530,10 @@ Value Value::DECIMAL(int64_t value, uint8_t width, uint8_t scale) { Value result(decimal_type); switch (decimal_type.InternalType()) { case PhysicalType::INT16: - result.value_.smallint = value; + result.value_.smallint = NumericCast(value); break; case PhysicalType::INT32: - result.value_.integer = value; + result.value_.integer = NumericCast(value); break; case PhysicalType::INT64: result.value_.bigint = value; @@ -839,13 +839,13 @@ Value Value::ENUM(uint64_t value, const LogicalType &original_type) { Value result(original_type); switch (original_type.InternalType()) { case PhysicalType::UINT8: - result.value_.utinyint = value; + result.value_.utinyint = NumericCast(value); break; case PhysicalType::UINT16: - result.value_.usmallint = value; + result.value_.usmallint = NumericCast(value); break; case PhysicalType::UINT32: - result.value_.uinteger = value; + result.value_.uinteger = NumericCast(value); break; default: throw InternalException("Incorrect Physical Type for ENUM"); @@ -1213,7 +1213,7 @@ Value Value::Numeric(const LogicalType &type, int64_t value) { return Value::POINTER(value); case LogicalTypeId::DATE: D_ASSERT(value >= NumericLimits::Minimum() && value <= NumericLimits::Maximum()); - return Value::DATE(date_t(value)); + return Value::DATE(date_t(NumericCast(value))); case LogicalTypeId::TIME: return Value::TIME(dtime_t(value)); case LogicalTypeId::TIMESTAMP: diff --git a/src/common/types/vector.cpp b/src/common/types/vector.cpp index ec3139c697ea..0c1b413699b1 100644 --- a/src/common/types/vector.cpp +++ b/src/common/types/vector.cpp @@ -831,7 +831,7 @@ void Vector::Flatten(idx_t count) { } data = buffer->GetData(); vector_type = VectorType::FLAT_VECTOR; - if (is_null) { + if (is_null && GetType().InternalType() != PhysicalType::ARRAY) { // constant NULL, set nullmask validity.EnsureWritable(); validity.SetAllInvalid(count); @@ -889,15 +889,20 @@ void Vector::Flatten(idx_t count) { break; } case PhysicalType::ARRAY: { - auto &child = ArrayVector::GetEntry(*this); + auto &original_child = ArrayVector::GetEntry(*this); auto array_size = ArrayType::GetSize(GetType()); - auto flattened_buffer = make_uniq(GetType(), count); auto &new_child = flattened_buffer->GetChild(); - // Make sure to initialize a validity mask for the new child vector with the correct size - if (!child.validity.AllValid()) { - new_child.validity.Initialize(array_size * count); + // Fast path: The array is a constant null + if (is_null) { + // Invalidate the parent array + validity.SetAllInvalid(count); + // Also invalidate the new child array + new_child.validity.SetAllInvalid(count * array_size); + // Attach the flattened buffer and return + auxiliary = shared_ptr(flattened_buffer.release()); + return; } // Now we need to "unpack" the child vector. @@ -909,7 +914,8 @@ void Vector::Flatten(idx_t count) { // | 2 | // ... - child.Flatten(count * array_size); + auto child_vec = make_uniq(original_child); + child_vec->Flatten(count * array_size); // Create a selection vector SelectionVector sel(count * array_size); @@ -917,7 +923,7 @@ void Vector::Flatten(idx_t count) { for (idx_t elem_idx = 0; elem_idx < array_size; elem_idx++) { auto position = array_idx * array_size + elem_idx; // Broadcast the validity - if (FlatVector::IsNull(child, elem_idx)) { + if (FlatVector::IsNull(*child_vec, elem_idx)) { FlatVector::SetNull(new_child, position, true); } sel.set_index(position, elem_idx); @@ -925,7 +931,7 @@ void Vector::Flatten(idx_t count) { } // Copy over the data to the new buffer - VectorOperations::Copy(child, new_child, sel, count * array_size, 0, 0); + VectorOperations::Copy(*child_vec, new_child, sel, count * array_size, 0, 0); auxiliary = shared_ptr(flattened_buffer.release()); } break; @@ -1067,6 +1073,7 @@ void Vector::Sequence(int64_t start, int64_t increment, idx_t count) { auxiliary.reset(); } +// FIXME: This should ideally be const void Vector::Serialize(Serializer &serializer, idx_t count) { auto &logical_type = GetType(); @@ -1137,9 +1144,11 @@ void Vector::Serialize(Serializer &serializer, idx_t count) { break; } case PhysicalType::ARRAY: { - Flatten(count); - auto &child = ArrayVector::GetEntry(*this); - auto array_size = ArrayType::GetSize(type); + Vector serialized_vector(*this); + serialized_vector.Flatten(count); + + auto &child = ArrayVector::GetEntry(serialized_vector); + auto array_size = ArrayType::GetSize(serialized_vector.GetType()); auto child_size = array_size * count; serializer.WriteProperty(103, "array_size", array_size); serializer.WriteObject(104, "child", [&](Serializer &object) { child.Serialize(object, child_size); }); @@ -1691,19 +1700,19 @@ void ConstantVector::Reference(Vector &vector, Vector &source, idx_t position, i // StringVector //===--------------------------------------------------------------------===// string_t StringVector::AddString(Vector &vector, const char *data, idx_t len) { - return StringVector::AddString(vector, string_t(data, len)); + return StringVector::AddString(vector, string_t(data, UnsafeNumericCast(len))); } string_t StringVector::AddStringOrBlob(Vector &vector, const char *data, idx_t len) { - return StringVector::AddStringOrBlob(vector, string_t(data, len)); + return StringVector::AddStringOrBlob(vector, string_t(data, UnsafeNumericCast(len))); } string_t StringVector::AddString(Vector &vector, const char *data) { - return StringVector::AddString(vector, string_t(data, strlen(data))); + return StringVector::AddString(vector, string_t(data, UnsafeNumericCast(strlen(data)))); } string_t StringVector::AddString(Vector &vector, const string &data) { - return StringVector::AddString(vector, string_t(data.c_str(), data.size())); + return StringVector::AddString(vector, string_t(data.c_str(), UnsafeNumericCast(data.size()))); } string_t StringVector::AddString(Vector &vector, string_t data) { @@ -1737,7 +1746,7 @@ string_t StringVector::AddStringOrBlob(Vector &vector, string_t data) { string_t StringVector::EmptyString(Vector &vector, idx_t len) { D_ASSERT(vector.GetType().InternalType() == PhysicalType::VARCHAR); if (len <= string_t::INLINE_LENGTH) { - return string_t(len); + return string_t(UnsafeNumericCast(len)); } if (!vector.auxiliary) { vector.auxiliary = make_buffer(); @@ -1784,7 +1793,7 @@ void StringVector::AddHeapReference(Vector &vector, Vector &other) { // FSSTVector //===--------------------------------------------------------------------===// string_t FSSTVector::AddCompressedString(Vector &vector, const char *data, idx_t len) { - return FSSTVector::AddCompressedString(vector, string_t(data, len)); + return FSSTVector::AddCompressedString(vector, string_t(data, UnsafeNumericCast(len))); } string_t FSSTVector::AddCompressedString(Vector &vector, string_t data) { @@ -1889,60 +1898,76 @@ const Vector &MapVector::GetValues(const Vector &vector) { } MapInvalidReason MapVector::CheckMapValidity(Vector &map, idx_t count, const SelectionVector &sel) { + D_ASSERT(map.GetType().id() == LogicalTypeId::MAP); - UnifiedVectorFormat map_vdata; - map.ToUnifiedFormat(count, map_vdata); - auto &map_validity = map_vdata.validity; + // unify the MAP vector, which is a physical LIST vector + UnifiedVectorFormat map_data; + map.ToUnifiedFormat(count, map_data); + auto map_entries = UnifiedVectorFormat::GetDataNoConst(map_data); + auto maps_length = ListVector::GetListSize(map); - auto list_data = ListVector::GetData(map); + // unify the child vector containing the keys auto &keys = MapVector::GetKeys(map); - UnifiedVectorFormat key_vdata; - keys.ToUnifiedFormat(count, key_vdata); - auto &key_validity = key_vdata.validity; - - for (idx_t row = 0; row < count; row++) { - auto mapped_row = sel.get_index(row); - auto map_idx = map_vdata.sel->get_index(mapped_row); - // map is allowed to be NULL - if (!map_validity.RowIsValid(map_idx)) { + UnifiedVectorFormat key_data; + keys.ToUnifiedFormat(maps_length, key_data); + + for (idx_t row_idx = 0; row_idx < count; row_idx++) { + + auto mapped_row = sel.get_index(row_idx); + auto map_idx = map_data.sel->get_index(mapped_row); + + if (!map_data.validity.RowIsValid(map_idx)) { continue; } + value_set_t unique_keys; - for (idx_t i = 0; i < list_data[map_idx].length; i++) { - auto index = list_data[map_idx].offset + i; - index = key_vdata.sel->get_index(index); - if (!key_validity.RowIsValid(index)) { + auto length = map_entries[map_idx].length; + auto offset = map_entries[map_idx].offset; + + for (idx_t child_idx = 0; child_idx < length; child_idx++) { + auto key_idx = key_data.sel->get_index(offset + child_idx); + + if (!key_data.validity.RowIsValid(key_idx)) { return MapInvalidReason::NULL_KEY; } - auto value = keys.GetValue(index); - auto result = unique_keys.insert(value); - if (!result.second) { + + auto value = keys.GetValue(key_idx); + auto unique = unique_keys.insert(value).second; + if (!unique) { return MapInvalidReason::DUPLICATE_KEY; } } } + return MapInvalidReason::VALID; } void MapVector::MapConversionVerify(Vector &vector, idx_t count) { - auto valid_check = MapVector::CheckMapValidity(vector, count); - switch (valid_check) { + auto reason = MapVector::CheckMapValidity(vector, count); + EvalMapInvalidReason(reason); +} + +void MapVector::EvalMapInvalidReason(MapInvalidReason reason) { + switch (reason) { case MapInvalidReason::VALID: - break; - case MapInvalidReason::DUPLICATE_KEY: { - throw InvalidInputException("Map keys have to be unique"); - } - case MapInvalidReason::NULL_KEY: { - throw InvalidInputException("Map keys can not be NULL"); - } - case MapInvalidReason::NULL_KEY_LIST: { - throw InvalidInputException("The list of map keys is not allowed to be NULL"); - } - default: { + return; + case MapInvalidReason::DUPLICATE_KEY: + throw InvalidInputException("Map keys must be unique."); + case MapInvalidReason::NULL_KEY: + throw InvalidInputException("Map keys can not be NULL."); + case MapInvalidReason::NULL_KEY_LIST: + throw InvalidInputException("The list of map keys must not be NULL."); + case MapInvalidReason::NULL_VALUE_LIST: + throw InvalidInputException("The list of map values must not be NULL."); + case MapInvalidReason::NOT_ALIGNED: + throw InvalidInputException("The map key list does not align with the map value list."); + case MapInvalidReason::INVALID_PARAMS: + throw InvalidInputException("Invalid map argument(s). Valid map arguments are a list of key-value pairs (MAP " + "{'key1': 'val1', ...}), two lists (MAP ([1, 2], [10, 11])), or no arguments."); + default: throw InternalException("MapInvalidReason not implemented"); } - } } //===--------------------------------------------------------------------===// diff --git a/src/common/vector_operations/generators.cpp b/src/common/vector_operations/generators.cpp index 0b5e8f56a522..18c5886ddd0f 100644 --- a/src/common/vector_operations/generators.cpp +++ b/src/common/vector_operations/generators.cpp @@ -6,6 +6,7 @@ #include "duckdb/common/exception.hpp" #include "duckdb/common/vector_operations/vector_operations.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -66,7 +67,7 @@ void TemplatedGenerateSequence(Vector &result, idx_t count, const SelectionVecto auto value = (T)start; for (idx_t i = 0; i < count; i++) { auto idx = sel.get_index(i); - result_data[idx] = value + increment * idx; + result_data[idx] = UnsafeNumericCast(value + increment * idx); } } diff --git a/src/common/vector_operations/vector_cast.cpp b/src/common/vector_operations/vector_cast.cpp index 3893f74a458c..e49e513618e8 100644 --- a/src/common/vector_operations/vector_cast.cpp +++ b/src/common/vector_operations/vector_cast.cpp @@ -7,14 +7,14 @@ namespace duckdb { bool VectorOperations::TryCast(CastFunctionSet &set, GetCastFunctionInput &input, Vector &source, Vector &result, - idx_t count, string *error_message, bool strict) { + idx_t count, string *error_message, bool strict, const bool nullify_parent) { auto cast_function = set.GetCastFunction(source.GetType(), result.GetType(), input); unique_ptr local_state; if (cast_function.init_local_state) { CastLocalStateParameters lparameters(input.context, cast_function.cast_data); local_state = cast_function.init_local_state(lparameters); } - CastParameters parameters(cast_function.cast_data.get(), strict, error_message, local_state.get()); + CastParameters parameters(cast_function.cast_data.get(), strict, error_message, local_state.get(), nullify_parent); return cast_function.function(source, result, count, parameters); } @@ -29,11 +29,11 @@ void VectorOperations::DefaultCast(Vector &source, Vector &result, idx_t count, } bool VectorOperations::TryCast(ClientContext &context, Vector &source, Vector &result, idx_t count, - string *error_message, bool strict) { + string *error_message, bool strict, const bool nullify_parent) { auto &config = DBConfig::GetConfig(context); auto &set = config.GetCastFunctions(); GetCastFunctionInput get_input(context); - return VectorOperations::TryCast(set, get_input, source, result, count, error_message, strict); + return VectorOperations::TryCast(set, get_input, source, result, count, error_message, strict, nullify_parent); } void VectorOperations::Cast(ClientContext &context, Vector &source, Vector &result, idx_t count, bool strict) { diff --git a/src/common/vector_operations/vector_copy.cpp b/src/common/vector_operations/vector_copy.cpp index 7921743aecda..3823cd39e302 100644 --- a/src/common/vector_operations/vector_copy.cpp +++ b/src/common/vector_operations/vector_copy.cpp @@ -203,11 +203,11 @@ void VectorOperations::Copy(const Vector &source_p, Vector &target, const Select auto array_size = ArrayType::GetSize(source->GetType()); // Create a selection vector for the child elements - SelectionVector child_sel(copy_count * array_size); + SelectionVector child_sel(source_count * array_size); for (idx_t i = 0; i < copy_count; i++) { auto source_idx = sel->get_index(source_offset + i); for (idx_t j = 0; j < array_size; j++) { - child_sel.set_index(i * array_size + j, source_idx * array_size + j); + child_sel.set_index((source_offset * array_size) + (i * array_size + j), source_idx * array_size + j); } } VectorOperations::Copy(source_child, target_child, child_sel, source_count * array_size, diff --git a/src/common/vector_operations/vector_hash.cpp b/src/common/vector_operations/vector_hash.cpp index 84d6c1783b67..46a9bcdaaee2 100644 --- a/src/common/vector_operations/vector_hash.cpp +++ b/src/common/vector_operations/vector_hash.cpp @@ -182,13 +182,18 @@ template static inline void ArrayLoopHash(Vector &input, Vector &hashes, const SelectionVector *rsel, idx_t count) { auto hdata = FlatVector::GetData(hashes); + if (input.GetVectorType() != VectorType::CONSTANT_VECTOR || input.GetVectorType() != VectorType::FLAT_VECTOR) { + input.Flatten(count); + } + UnifiedVectorFormat idata; input.ToUnifiedFormat(count, idata); // Hash the children into a temporary auto &child = ArrayVector::GetEntry(input); auto array_size = ArrayType::GetSize(input.GetType()); - auto child_count = array_size * count; + auto is_constant = input.GetVectorType() == VectorType::CONSTANT_VECTOR; + auto child_count = array_size * (is_constant ? 1 : count); Vector child_hashes(LogicalType::HASH, child_count); if (child_count > 0) { @@ -197,12 +202,18 @@ static inline void ArrayLoopHash(Vector &input, Vector &hashes, const SelectionV } auto chdata = FlatVector::GetData(child_hashes); - // Combine hashes for every array - // TODO: Branch on FIRST_HASH and HAS_RSEL - for (idx_t i = 0; i < count; i++) { - for (idx_t j = i * array_size; j < (i + 1) * array_size; j++) { - hdata[i] = CombineHashScalar(hdata[i], chdata[j]); + for (idx_t i = 0; i < count; ++i) { + const auto ridx = HAS_RSEL ? rsel->get_index(i) : i; + const auto lidx = idata.sel->get_index(ridx); + const auto offset = lidx * array_size; + if (idata.validity.RowIsValid(lidx)) { + for (idx_t j = 0; j < array_size; j++) { + hdata[ridx] = CombineHashScalar(hdata[ridx], chdata[offset + j]); + } + } else if (FIRST_HASH) { + hdata[ridx] = HashOp::NULL_HASH; } + // Empty or NULL non-first elements have no effect. } } diff --git a/src/core_functions/aggregate/distributive/arg_min_max.cpp b/src/core_functions/aggregate/distributive/arg_min_max.cpp index b6d69457a608..01f677e9bfac 100644 --- a/src/core_functions/aggregate/distributive/arg_min_max.cpp +++ b/src/core_functions/aggregate/distributive/arg_min_max.cpp @@ -1,6 +1,7 @@ #include "duckdb/core_functions/aggregate/distributive_functions.hpp" #include "duckdb/common/exception.hpp" #include "duckdb/common/vector_operations/vector_operations.hpp" +#include "duckdb/function/cast/cast_function_set.hpp" #include "duckdb/function/function_set.hpp" #include "duckdb/planner/expression/bound_aggregate_expression.hpp" #include "duckdb/planner/expression/bound_comparison_expression.hpp" @@ -70,7 +71,7 @@ void ArgMinMaxStateBase::AssignValue(string_t &target, string_t new_value) { auto ptr = new char[len]; memcpy(ptr, new_value.GetData(), len); - target = string_t(ptr, len); + target = string_t(ptr, UnsafeNumericCast(len)); } } @@ -190,7 +191,7 @@ struct VectorArgMinMaxBase : ArgMinMaxBase { } state.arg_null = arg_null; if (!arg_null) { - sel_t selv = idx; + sel_t selv = UnsafeNumericCast(idx); SelectionVector sel(&selv); VectorOperations::Copy(arg, *state.arg, sel, 1, 0, 0); } @@ -284,6 +285,8 @@ AggregateFunction GetVectorArgMinMaxFunctionBy(const LogicalType &by_type, const return GetVectorArgMinMaxFunctionInternal(by_type, type); case PhysicalType::INT64: return GetVectorArgMinMaxFunctionInternal(by_type, type); + case PhysicalType::INT128: + return GetVectorArgMinMaxFunctionInternal(by_type, type); case PhysicalType::DOUBLE: return GetVectorArgMinMaxFunctionInternal(by_type, type); case PhysicalType::VARCHAR: @@ -294,9 +297,9 @@ AggregateFunction GetVectorArgMinMaxFunctionBy(const LogicalType &by_type, const } static const vector ArgMaxByTypes() { - vector types = {LogicalType::INTEGER, LogicalType::BIGINT, LogicalType::DOUBLE, - LogicalType::VARCHAR, LogicalType::DATE, LogicalType::TIMESTAMP, - LogicalType::TIMESTAMP_TZ, LogicalType::BLOB}; + vector types = {LogicalType::INTEGER, LogicalType::BIGINT, LogicalType::HUGEINT, + LogicalType::DOUBLE, LogicalType::VARCHAR, LogicalType::DATE, + LogicalType::TIMESTAMP, LogicalType::TIMESTAMP_TZ, LogicalType::BLOB}; return types; } @@ -328,12 +331,14 @@ AggregateFunction GetArgMinMaxFunctionBy(const LogicalType &by_type, const Logic return GetArgMinMaxFunctionInternal(by_type, type); case PhysicalType::INT64: return GetArgMinMaxFunctionInternal(by_type, type); + case PhysicalType::INT128: + return GetArgMinMaxFunctionInternal(by_type, type); case PhysicalType::DOUBLE: return GetArgMinMaxFunctionInternal(by_type, type); case PhysicalType::VARCHAR: return GetArgMinMaxFunctionInternal(by_type, type); default: - throw InternalException("Unimplemented arg_min/arg_max aggregate"); + throw InternalException("Unimplemented arg_min/arg_max by aggregate"); } } @@ -365,6 +370,25 @@ static unique_ptr BindDecimalArgMinMax(ClientContext &context, Agg vector> &arguments) { auto decimal_type = arguments[0]->return_type; auto by_type = arguments[1]->return_type; + + // To avoid a combinatorial explosion, cast the ordering argument to one from the list + auto by_types = ArgMaxByTypes(); + idx_t best_target = DConstants::INVALID_INDEX; + int64_t lowest_cost = NumericLimits::Maximum(); + for (idx_t i = 0; i < by_types.size(); ++i) { + auto cast_cost = CastFunctionSet::Get(context).ImplicitCastCost(by_type, by_types[i]); + if (cast_cost < 0) { + continue; + } + if (cast_cost < lowest_cost) { + best_target = i; + } + } + + if (best_target != DConstants::INVALID_INDEX) { + by_type = by_types[best_target]; + } + auto name = std::move(function.name); function = GetDecimalArgMinMaxFunction(by_type, decimal_type); function.name = std::move(name); diff --git a/src/core_functions/aggregate/distributive/bitagg.cpp b/src/core_functions/aggregate/distributive/bitagg.cpp index 18d7a7255a19..3943707fd8db 100644 --- a/src/core_functions/aggregate/distributive/bitagg.cpp +++ b/src/core_functions/aggregate/distributive/bitagg.cpp @@ -146,7 +146,7 @@ struct BitStringBitwiseOperation : public BitwiseOperation { auto ptr = new char[len]; memcpy(ptr, input.GetData(), len); - state.value = string_t(ptr, len); + state.value = string_t(ptr, UnsafeNumericCast(len)); } } diff --git a/src/core_functions/aggregate/distributive/bitstring_agg.cpp b/src/core_functions/aggregate/distributive/bitstring_agg.cpp index e78b228f2ac5..700b0cce28f8 100644 --- a/src/core_functions/aggregate/distributive/bitstring_agg.cpp +++ b/src/core_functions/aggregate/distributive/bitstring_agg.cpp @@ -64,6 +64,10 @@ struct BitStringAggOperation { } state.min = bind_agg_data.min.GetValue(); state.max = bind_agg_data.max.GetValue(); + if (state.min > state.max) { + throw InvalidInputException("Invalid explicit bitstring range: Minimum (%s) > maximum (%s)", + NumericHelper::ToString(state.min), NumericHelper::ToString(state.max)); + } idx_t bit_range = GetRange(bind_agg_data.min.GetValue(), bind_agg_data.max.GetValue()); if (bit_range > MAX_BIT_RANGE) { @@ -72,7 +76,8 @@ struct BitStringAggOperation { NumericHelper::ToString(state.min), NumericHelper::ToString(state.max)); } idx_t len = Bit::ComputeBitstringLen(bit_range); - auto target = len > string_t::INLINE_LENGTH ? string_t(new char[len], len) : string_t(len); + auto target = len > string_t::INLINE_LENGTH ? string_t(new char[len], UnsafeNumericCast(len)) + : string_t(UnsafeNumericCast(len)); Bit::SetEmptyBitString(target, bit_range); state.value = target; @@ -95,7 +100,9 @@ struct BitStringAggOperation { template static idx_t GetRange(INPUT_TYPE min, INPUT_TYPE max) { - D_ASSERT(max >= min); + if (min > max) { + throw InvalidInputException("Invalid explicit bitstring range: Minimum (%d) > maximum (%d)", min, max); + } INPUT_TYPE result; if (!TrySubtractOperator::Operation(max, min, result)) { return NumericLimits::Maximum(); @@ -136,7 +143,7 @@ struct BitStringAggOperation { auto len = input.GetSize(); auto ptr = new char[len]; memcpy(ptr, input.GetData(), len); - state.value = string_t(ptr, len); + state.value = string_t(ptr, UnsafeNumericCast(len)); } } @@ -178,7 +185,7 @@ idx_t BitStringAggOperation::GetRange(hugeint_t min, hugeint_t max) { return NumericLimits::Maximum(); } idx_t range; - if (!Hugeint::TryCast(result + 1, range)) { + if (!Hugeint::TryCast(result + 1, range) || result == NumericLimits::Maximum()) { return NumericLimits::Maximum(); } return range; @@ -201,7 +208,7 @@ idx_t BitStringAggOperation::GetRange(uhugeint_t min, uhugeint_t max) { return NumericLimits::Maximum(); } idx_t range; - if (!Uhugeint::TryCast(result + 1, range)) { + if (!Uhugeint::TryCast(result + 1, range) || result == NumericLimits::Maximum()) { return NumericLimits::Maximum(); } return range; diff --git a/src/core_functions/aggregate/distributive/minmax.cpp b/src/core_functions/aggregate/distributive/minmax.cpp index f3ef05885973..aa324b23f310 100644 --- a/src/core_functions/aggregate/distributive/minmax.cpp +++ b/src/core_functions/aggregate/distributive/minmax.cpp @@ -166,7 +166,7 @@ struct StringMinMaxBase : public MinMaxBase { auto ptr = new char[len]; memcpy(ptr, input.GetData(), len); - state.value = string_t(ptr, len); + state.value = string_t(ptr, UnsafeNumericCast(len)); } } @@ -457,7 +457,7 @@ struct VectorMinMaxBase { state.value = new Vector(input.GetType()); state.value->SetVectorType(VectorType::CONSTANT_VECTOR); } - sel_t selv = idx; + sel_t selv = UnsafeNumericCast(idx); SelectionVector sel(&selv); VectorOperations::Copy(input, *state.value, sel, 1, 0, 0); } diff --git a/src/core_functions/aggregate/distributive/string_agg.cpp b/src/core_functions/aggregate/distributive/string_agg.cpp index bd3e95fb6fcd..f2caa8901466 100644 --- a/src/core_functions/aggregate/distributive/string_agg.cpp +++ b/src/core_functions/aggregate/distributive/string_agg.cpp @@ -113,7 +113,8 @@ struct StringAggFunction { // source is not set: skip combining return; } - PerformOperation(target, string_t(source.dataptr, source.size), aggr_input_data.bind_data); + PerformOperation(target, string_t(source.dataptr, UnsafeNumericCast(source.size)), + aggr_input_data.bind_data); } }; diff --git a/src/core_functions/aggregate/holistic/mode.cpp b/src/core_functions/aggregate/holistic/mode.cpp index ab6a76bce8d8..029b10c31fb7 100644 --- a/src/core_functions/aggregate/holistic/mode.cpp +++ b/src/core_functions/aggregate/holistic/mode.cpp @@ -19,7 +19,8 @@ struct hash { inline size_t operator()(const duckdb::interval_t &val) const { int64_t months, days, micros; val.Normalize(months, days, micros); - return hash {}(days) ^ hash {}(months) ^ hash {}(micros); + return hash {}(duckdb::UnsafeNumericCast(days)) ^ + hash {}(duckdb::UnsafeNumericCast(months)) ^ hash {}(micros); } }; diff --git a/src/core_functions/aggregate/holistic/quantile.cpp b/src/core_functions/aggregate/holistic/quantile.cpp index a9af11250f44..7a7693a6aa27 100644 --- a/src/core_functions/aggregate/holistic/quantile.cpp +++ b/src/core_functions/aggregate/holistic/quantile.cpp @@ -21,12 +21,6 @@ namespace duckdb { -// Hugeint arithmetic -static hugeint_t MultiplyByDouble(const hugeint_t &h, const double &d) { - D_ASSERT(d >= 0 && d <= 1); - return Hugeint::Convert(Hugeint::Cast(h) * d); -} - // Interval arithmetic static interval_t MultiplyByDouble(const interval_t &i, const double &d) { // NOLINT D_ASSERT(d >= 0 && d <= 1); @@ -189,8 +183,7 @@ timestamp_t CastInterpolation::Interpolate(const timestamp_t &lo, const double d template <> hugeint_t CastInterpolation::Interpolate(const hugeint_t &lo, const double d, const hugeint_t &hi) { - const hugeint_t delta = hi - lo; - return lo + MultiplyByDouble(delta, d); + return Hugeint::Convert(Interpolate(Hugeint::Cast(lo), d, Hugeint::Cast(hi))); } template <> @@ -1263,7 +1256,7 @@ struct MadAccessor { } inline RESULT_TYPE operator()(const INPUT_TYPE &input) const { - const auto delta = input - median; + const RESULT_TYPE delta = input - UnsafeNumericCast(median); return TryAbsOperator::Operation(delta); } }; diff --git a/src/core_functions/function_list.cpp b/src/core_functions/function_list.cpp index 5fad616132ad..0652abbe061d 100644 --- a/src/core_functions/function_list.cpp +++ b/src/core_functions/function_list.cpp @@ -375,6 +375,7 @@ static StaticFunctionDefinition internal_functions[] = { DUCKDB_SCALAR_FUNCTION(UnionExtractFun), DUCKDB_SCALAR_FUNCTION(UnionTagFun), DUCKDB_SCALAR_FUNCTION(UnionValueFun), + DUCKDB_SCALAR_FUNCTION(UnpivotListFun), DUCKDB_SCALAR_FUNCTION(UUIDFun), DUCKDB_AGGREGATE_FUNCTION(VarPopFun), DUCKDB_AGGREGATE_FUNCTION(VarSampFun), diff --git a/src/core_functions/scalar/bit/bitstring.cpp b/src/core_functions/scalar/bit/bitstring.cpp index ee806c95494c..babfadfe01e7 100644 --- a/src/core_functions/scalar/bit/bitstring.cpp +++ b/src/core_functions/scalar/bit/bitstring.cpp @@ -41,7 +41,7 @@ struct GetBitOperator { throw OutOfRangeException("bit index %s out of valid range (0..%s)", NumericHelper::ToString(n), NumericHelper::ToString(Bit::BitLength(input) - 1)); } - return Bit::GetBit(input, n); + return UnsafeNumericCast(Bit::GetBit(input, n)); } }; @@ -85,7 +85,7 @@ struct BitPositionOperator { if (substring.GetSize() > input.GetSize()) { return 0; } - return Bit::BitPosition(substring, input); + return UnsafeNumericCast(Bit::BitPosition(substring, input)); } }; diff --git a/src/core_functions/scalar/date/date_diff.cpp b/src/core_functions/scalar/date/date_diff.cpp index 8fdd808d32ee..d4514b90ef63 100644 --- a/src/core_functions/scalar/date/date_diff.cpp +++ b/src/core_functions/scalar/date/date_diff.cpp @@ -202,22 +202,30 @@ int64_t DateDiff::MicrosecondsOperator::Operation(timestamp_t startdate, timesta template <> int64_t DateDiff::MillisecondsOperator::Operation(timestamp_t startdate, timestamp_t enddate) { + D_ASSERT(Timestamp::IsFinite(startdate)); + D_ASSERT(Timestamp::IsFinite(enddate)); return Timestamp::GetEpochMs(enddate) - Timestamp::GetEpochMs(startdate); } template <> int64_t DateDiff::SecondsOperator::Operation(timestamp_t startdate, timestamp_t enddate) { + D_ASSERT(Timestamp::IsFinite(startdate)); + D_ASSERT(Timestamp::IsFinite(enddate)); return Timestamp::GetEpochSeconds(enddate) - Timestamp::GetEpochSeconds(startdate); } template <> int64_t DateDiff::MinutesOperator::Operation(timestamp_t startdate, timestamp_t enddate) { + D_ASSERT(Timestamp::IsFinite(startdate)); + D_ASSERT(Timestamp::IsFinite(enddate)); return Timestamp::GetEpochSeconds(enddate) / Interval::SECS_PER_MINUTE - Timestamp::GetEpochSeconds(startdate) / Interval::SECS_PER_MINUTE; } template <> int64_t DateDiff::HoursOperator::Operation(timestamp_t startdate, timestamp_t enddate) { + D_ASSERT(Timestamp::IsFinite(startdate)); + D_ASSERT(Timestamp::IsFinite(enddate)); return Timestamp::GetEpochSeconds(enddate) / Interval::SECS_PER_HOUR - Timestamp::GetEpochSeconds(startdate) / Interval::SECS_PER_HOUR; } diff --git a/src/core_functions/scalar/date/date_part.cpp b/src/core_functions/scalar/date/date_part.cpp index 4ffde4e7353a..1c3e16448e23 100644 --- a/src/core_functions/scalar/date/date_part.cpp +++ b/src/core_functions/scalar/date/date_part.cpp @@ -395,8 +395,11 @@ struct DatePart { static void Inverse(DataChunk &input, ExpressionState &state, Vector &result) { D_ASSERT(input.ColumnCount() == 1); - UnaryExecutor::Execute(input.data[0], result, input.size(), - [&](int64_t input) { return Timestamp::FromEpochMs(input); }); + UnaryExecutor::Execute(input.data[0], result, input.size(), [&](int64_t input) { + // milisecond amounts provided to epoch_ms should never be considered infinite + // instead such values will just throw when converted to microseconds + return Timestamp::FromEpochMsPossiblyInfinite(input); + }); } }; @@ -501,7 +504,7 @@ struct DatePart { auto time = Time::NormalizeTimeTZ(timetz); date_t date(0); time = Interval::Add(time, interval, date); - auto offset = interval.micros / Interval::MICROS_PER_SEC; + auto offset = UnsafeNumericCast(interval.micros / Interval::MICROS_PER_SEC); return TR(time, offset); } @@ -999,11 +1002,13 @@ int64_t DatePart::YearWeekOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::EpochNanosecondsOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return Timestamp::GetEpochNanoSeconds(input); } template <> int64_t DatePart::EpochNanosecondsOperator::Operation(date_t input) { + D_ASSERT(Date::IsFinite(input)); return Date::EpochNanoseconds(input); } @@ -1032,6 +1037,12 @@ int64_t DatePart::EpochMicrosecondsOperator::Operation(interval_t input) { return Interval::GetMicro(input); } +template <> +int64_t DatePart::EpochMillisOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); + return Timestamp::GetEpochMs(input); +} + template <> int64_t DatePart::EpochMicrosecondsOperator::Operation(dtime_t input) { return input.micros; @@ -1064,6 +1075,7 @@ int64_t DatePart::EpochMillisOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::MicrosecondsOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); auto time = Timestamp::GetTime(input); // remove everything but the second & microsecond part return time.micros % Interval::MICROS_PER_MINUTE; @@ -1088,6 +1100,7 @@ int64_t DatePart::MicrosecondsOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::MillisecondsOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return MicrosecondsOperator::Operation(input) / Interval::MICROS_PER_MSEC; } @@ -1108,6 +1121,7 @@ int64_t DatePart::MillisecondsOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::SecondsOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return MicrosecondsOperator::Operation(input) / Interval::MICROS_PER_SEC; } @@ -1128,6 +1142,7 @@ int64_t DatePart::SecondsOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::MinutesOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); auto time = Timestamp::GetTime(input); // remove the hour part, and truncate to minutes return (time.micros % Interval::MICROS_PER_HOUR) / Interval::MICROS_PER_MINUTE; @@ -1152,6 +1167,7 @@ int64_t DatePart::MinutesOperator::Operation(dtime_tz_t input) { template <> int64_t DatePart::HoursOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return Timestamp::GetTime(input).micros / Interval::MICROS_PER_HOUR; } @@ -1172,6 +1188,7 @@ int64_t DatePart::HoursOperator::Operation(dtime_tz_t input) { template <> double DatePart::EpochOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return Timestamp::GetEpochMicroSeconds(input) / double(Interval::MICROS_PER_SEC); } @@ -1218,6 +1235,7 @@ unique_ptr DatePart::EpochOperator::PropagateStatistics template <> int64_t DatePart::EraOperator::Operation(timestamp_t input) { + D_ASSERT(Timestamp::IsFinite(input)); return EraOperator::Operation(Timestamp::GetDate(input)); } @@ -1407,6 +1425,7 @@ void DatePart::StructOperator::Operation(bigint_vec &bigint_values, double_vec & template <> void DatePart::StructOperator::Operation(bigint_vec &bigint_values, double_vec &double_values, const timestamp_t &input, const idx_t idx, const part_mask_t mask) { + D_ASSERT(Timestamp::IsFinite(input)); date_t d; dtime_t t; Timestamp::Convert(input, d, t); diff --git a/src/core_functions/scalar/date/make_date.cpp b/src/core_functions/scalar/date/make_date.cpp index b3a6a8749db2..7b818438b4f2 100644 --- a/src/core_functions/scalar/date/make_date.cpp +++ b/src/core_functions/scalar/date/make_date.cpp @@ -1,4 +1,5 @@ #include "duckdb/core_functions/scalar/date_functions.hpp" +#include "duckdb/common/operator/cast_operators.hpp" #include "duckdb/common/types/date.hpp" #include "duckdb/common/types/time.hpp" #include "duckdb/common/types/timestamp.hpp" @@ -13,7 +14,8 @@ namespace duckdb { struct MakeDateOperator { template static RESULT_TYPE Operation(YYYY yyyy, MM mm, DD dd) { - return Date::FromDate(yyyy, mm, dd); + return Date::FromDate(Cast::Operation(yyyy), Cast::Operation(mm), + Cast::Operation(dd)); } }; @@ -28,6 +30,16 @@ static void ExecuteMakeDate(DataChunk &input, ExpressionState &state, Vector &re MakeDateOperator::Operation); } +template +static date_t FromDateCast(T year, T month, T day) { + date_t result; + if (!Date::TryFromDate(Cast::Operation(year), Cast::Operation(month), + Cast::Operation(day), result)) { + throw ConversionException("Date out of range: %d-%d-%d", year, month, day); + } + return result; +} + template static void ExecuteStructMakeDate(DataChunk &input, ExpressionState &state, Vector &result) { // this should be guaranteed by the binder @@ -40,18 +52,28 @@ static void ExecuteStructMakeDate(DataChunk &input, ExpressionState &state, Vect auto &mm = *children[1]; auto &dd = *children[2]; - TernaryExecutor::Execute(yyyy, mm, dd, result, input.size(), Date::FromDate); + TernaryExecutor::Execute(yyyy, mm, dd, result, input.size(), FromDateCast); } struct MakeTimeOperator { template static RESULT_TYPE Operation(HH hh, MM mm, SS ss) { - int64_t secs = ss; - int64_t micros = std::round((ss - secs) * Interval::MICROS_PER_SEC); - if (!Time::IsValidTime(hh, mm, secs, micros)) { - throw ConversionException("Time out of range: %d:%d:%d.%d", hh, mm, secs, micros); + + auto hh_32 = Cast::Operation(hh); + auto mm_32 = Cast::Operation(mm); + // Have to check this separately because safe casting of DOUBLE => INT32 can round. + int32_t ss_32 = 0; + if (ss < 0 || ss > Interval::SECS_PER_MINUTE) { + ss_32 = Cast::Operation(ss); + } else { + ss_32 = UnsafeNumericCast(ss); + } + auto micros = UnsafeNumericCast(std::round((ss - ss_32) * Interval::MICROS_PER_SEC)); + + if (!Time::IsValidTime(hh_32, mm_32, ss_32, micros)) { + throw ConversionException("Time out of range: %d:%d:%d.%d", hh_32, mm_32, ss_32, micros); } - return Time::FromTime(hh, mm, secs, micros); + return Time::FromTime(hh_32, mm_32, ss_32, micros); } }; diff --git a/src/core_functions/scalar/date/to_interval.cpp b/src/core_functions/scalar/date/to_interval.cpp index dcbf065e4483..6f283b15fe58 100644 --- a/src/core_functions/scalar/date/to_interval.cpp +++ b/src/core_functions/scalar/date/to_interval.cpp @@ -81,7 +81,9 @@ struct ToWeeksOperator { static inline TR Operation(TA input) { interval_t result; result.months = 0; - result.days = input * 7; + if (!TryMultiplyOperator::Operation(input, Interval::DAYS_PER_WEEK, result.days)) { + throw OutOfRangeException("Interval value %d weeks out of range", input); + } result.micros = 0; return result; } diff --git a/src/core_functions/scalar/list/array_slice.cpp b/src/core_functions/scalar/list/array_slice.cpp index 725846d17766..7651f410d023 100644 --- a/src/core_functions/scalar/list/array_slice.cpp +++ b/src/core_functions/scalar/list/array_slice.cpp @@ -40,7 +40,7 @@ unique_ptr ListSliceBindData::Copy() const { } template -static int CalculateSliceLength(idx_t begin, idx_t end, INDEX_TYPE step, bool svalid) { +static idx_t CalculateSliceLength(idx_t begin, idx_t end, INDEX_TYPE step, bool svalid) { if (step < 0) { step = abs(step); } @@ -48,7 +48,7 @@ static int CalculateSliceLength(idx_t begin, idx_t end, INDEX_TYPE step, bool sv throw InvalidInputException("Slice step cannot be zero"); } if (step == 1) { - return end - begin; + return NumericCast(end - begin); } else if (static_cast(step) >= (end - begin)) { return 1; } @@ -191,7 +191,7 @@ static void ExecuteConstantSlice(Vector &result, Vector &str_vector, Vector &beg clamp_result = ClampSlice(str, begin, end); } - auto sel_length = 0; + idx_t sel_length = 0; bool sel_valid = false; if (step_vector && step_valid && str_valid && begin_valid && end_valid && step != 1 && end - begin > 0) { sel_length = CalculateSliceLength(begin, end, step, step_valid); @@ -210,6 +210,7 @@ static void ExecuteConstantSlice(Vector &result, Vector &str_vector, Vector &beg if (sel_valid) { result_child_vector->Slice(sel, sel_length); + result_child_vector->Flatten(sel_length); ListVector::SetListSize(result, sel_length); } } @@ -265,7 +266,7 @@ static void ExecuteFlatSlice(Vector &result, Vector &list_vector, Vector &begin_ clamp_result = ClampSlice(sliced, begin, end); } - auto length = 0; + idx_t length = 0; if (end - begin > 0) { length = CalculateSliceLength(begin, end, step, step_valid); } @@ -286,6 +287,7 @@ static void ExecuteFlatSlice(Vector &result, Vector &list_vector, Vector &begin_ new_sel.set_index(i, sel.get_index(i)); } result_child_vector->Slice(new_sel, sel_length); + result_child_vector->Flatten(sel_length); ListVector::SetListSize(result, sel_length); } } @@ -318,10 +320,13 @@ static void ArraySliceFunction(DataChunk &args, ExpressionState &state, Vector & D_ASSERT(args.data.size() == 3 || args.data.size() == 4); auto count = args.size(); - Vector &list_or_str_vector = args.data[0]; + Vector &list_or_str_vector = result; + // this ensures that we do not change the input chunk + VectorOperations::Copy(args.data[0], list_or_str_vector, count, 0, 0); + if (list_or_str_vector.GetType().id() == LogicalTypeId::SQLNULL) { - auto &result_validity = FlatVector::Validity(result); - result_validity.SetInvalid(0); + result.SetVectorType(VectorType::CONSTANT_VECTOR); + ConstantVector::SetNull(result, true); return; } @@ -346,7 +351,6 @@ static void ArraySliceFunction(DataChunk &args, ExpressionState &state, Vector & list_or_str_vector.GetVectorType() != VectorType::CONSTANT_VECTOR) { list_or_str_vector.Flatten(count); } - ListVector::ReferenceEntry(result, list_or_str_vector); ExecuteSlice(result, list_or_str_vector, begin_vector, end_vector, step_vector, count, begin_is_empty, end_is_empty); break; diff --git a/src/core_functions/scalar/list/functions.json b/src/core_functions/scalar/list/functions.json index 08cb6fc76f6d..4a390c5f85d7 100644 --- a/src/core_functions/scalar/list/functions.json +++ b/src/core_functions/scalar/list/functions.json @@ -133,5 +133,12 @@ "example": "list_inner_product([1, 2, 3], [1, 2, 3])", "type": "scalar_function_set", "aliases": ["list_dot_product", "<#>"] + }, + { + "name": "unpivot_list", + "parameters": "any,...", + "description": "Identical to list_value, but generated as part of unpivot for better error messages", + "example": "unpivot_list(4, 5, 6)", + "type": "scalar_function" } ] diff --git a/src/core_functions/scalar/list/list_sort.cpp b/src/core_functions/scalar/list/list_sort.cpp index 85d3ceb55228..1226430c3721 100644 --- a/src/core_functions/scalar/list/list_sort.cpp +++ b/src/core_functions/scalar/list/list_sort.cpp @@ -1,6 +1,6 @@ #include "duckdb/core_functions/scalar/list_functions.hpp" #include "duckdb/common/enum_util.hpp" - +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/planner/expression/bound_function_expression.hpp" #include "duckdb/planner/expression/bound_cast_expression.hpp" #include "duckdb/execution/expression_executor.hpp" @@ -183,8 +183,8 @@ static void ListSortFunction(DataChunk &args, ExpressionState &state, Vector &re auto source_idx = list_entry.offset + child_idx; sel.set_index(offset_lists_indices, source_idx); - lists_indices_data[offset_lists_indices] = (uint32_t)i; - payload_vector_data[offset_lists_indices] = source_idx; + lists_indices_data[offset_lists_indices] = UnsafeNumericCast(i); + payload_vector_data[offset_lists_indices] = NumericCast(source_idx); offset_lists_indices++; incr_payload_count++; } @@ -305,6 +305,8 @@ static unique_ptr ListGradeUpBind(ClientContext &context, ScalarFu order = config.ResolveOrder(order); null_order = config.ResolveNullOrder(order, null_order); + arguments[0] = BoundCastExpression::AddArrayCastToList(context, std::move(arguments[0])); + bound_function.arguments[0] = arguments[0]->return_type; bound_function.return_type = LogicalType::LIST(LogicalTypeId::BIGINT); auto child_type = ListType::GetChildType(arguments[0]->return_type); diff --git a/src/core_functions/scalar/list/list_value.cpp b/src/core_functions/scalar/list/list_value.cpp index 9d9c21c65b94..9aae09e2c8a4 100644 --- a/src/core_functions/scalar/list/list_value.cpp +++ b/src/core_functions/scalar/list/list_value.cpp @@ -34,6 +34,7 @@ static void ListValueFunction(DataChunk &args, ExpressionState &state, Vector &r result.Verify(args.size()); } +template static unique_ptr ListValueBind(ClientContext &context, ScalarFunction &bound_function, vector> &arguments) { // collect names and deconflict, construct return type @@ -42,20 +43,28 @@ static unique_ptr ListValueBind(ClientContext &context, ScalarFunc for (idx_t i = 1; i < arguments.size(); i++) { auto arg_type = ExpressionBinder::GetExpressionReturnType(*arguments[i]); if (!LogicalType::TryGetMaxLogicalType(context, child_type, arg_type, child_type)) { - string list_arguments = "Full list: "; - idx_t error_index = list_arguments.size(); - for (idx_t k = 0; k < arguments.size(); k++) { - if (k > 0) { - list_arguments += ", "; + if (IS_UNPIVOT) { + string list_arguments = "Full list: "; + idx_t error_index = list_arguments.size(); + for (idx_t k = 0; k < arguments.size(); k++) { + if (k > 0) { + list_arguments += ", "; + } + if (k == i) { + error_index = list_arguments.size(); + } + list_arguments += arguments[k]->ToString() + " " + arguments[k]->return_type.ToString(); } - if (k == i) { - error_index = list_arguments.size(); - } - list_arguments += arguments[k]->ToString() + " " + arguments[k]->return_type.ToString(); + auto error = + StringUtil::Format("Cannot unpivot columns of types %s and %s - an explicit cast is required", + child_type.ToString(), arg_type.ToString()); + throw BinderException(arguments[i]->query_location, + QueryErrorContext::Format(list_arguments, error, int(error_index), false)); + } else { + throw BinderException(arguments[i]->query_location, + "Cannot create a list of types %s and %s - an explicit cast is required", + child_type.ToString(), arg_type.ToString()); } - auto error = StringUtil::Format("Cannot create a list of types %s and %s - an explicit cast is required", - child_type.ToString(), arg_type.ToString()); - throw BinderException(QueryErrorContext::Format(list_arguments, error, int(error_index), false)); } } child_type = LogicalType::NormalizeType(child_type); @@ -86,4 +95,11 @@ ScalarFunction ListValueFun::GetFunction() { return fun; } +ScalarFunction UnpivotListFun::GetFunction() { + auto fun = ListValueFun::GetFunction(); + fun.name = "unpivot_list"; + fun.bind = ListValueBind; + return fun; +} + } // namespace duckdb diff --git a/src/core_functions/scalar/map/map.cpp b/src/core_functions/scalar/map/map.cpp index c92483d4dbed..e27fe3fd6503 100644 --- a/src/core_functions/scalar/map/map.cpp +++ b/src/core_functions/scalar/map/map.cpp @@ -9,211 +9,180 @@ namespace duckdb { -// Example: -// source: [1,2,3], expansion_factor: 4 -// target (result): [1,2,3,1,2,3,1,2,3,1,2,3] -static void CreateExpandedVector(const Vector &source, Vector &target, idx_t expansion_factor) { - idx_t count = ListVector::GetListSize(source); - auto &entry = ListVector::GetEntry(source); - - idx_t target_idx = 0; - for (idx_t copy = 0; copy < expansion_factor; copy++) { - for (idx_t key_idx = 0; key_idx < count; key_idx++) { - target.SetValue(target_idx, entry.GetValue(key_idx)); - target_idx++; - } - } - D_ASSERT(target_idx == count * expansion_factor); -} +static void MapFunctionEmptyInput(Vector &result, const idx_t row_count) { -static void AlignVectorToReference(const Vector &original, const Vector &reference, idx_t tuple_count, Vector &result) { - auto original_length = ListVector::GetListSize(original); - auto new_length = ListVector::GetListSize(reference); - - Vector expanded_const(ListType::GetChildType(original.GetType()), new_length); - - if (new_length != tuple_count * original_length) { - throw InvalidInputException("Error in MAP creation: key list and value list do not align. i.e. different " - "size or incompatible structure"); - } - auto expansion_factor = original_length ? new_length / original_length : original_length; - CreateExpandedVector(original, expanded_const, expansion_factor); + // if no chunk is set in ExpressionExecutor::ExecuteExpression (args.data.empty(), e.g., + // in SELECT MAP()), then we always pass a row_count of 1 + result.SetVectorType(VectorType::CONSTANT_VECTOR); + ListVector::SetListSize(result, 0); - result.Reference(expanded_const); + auto result_data = ListVector::GetData(result); + result_data[0] = list_entry_t(); + result.Verify(row_count); } -static bool ListEntriesEqual(Vector &keys, Vector &values, idx_t count) { - auto key_count = ListVector::GetListSize(keys); - auto value_count = ListVector::GetListSize(values); - bool same_vector_type = keys.GetVectorType() == values.GetVectorType(); +static void MapFunction(DataChunk &args, ExpressionState &, Vector &result) { - D_ASSERT(keys.GetType().id() == LogicalTypeId::LIST); - D_ASSERT(values.GetType().id() == LogicalTypeId::LIST); + // internal MAP representation + // - LIST-vector that contains STRUCTs as child entries + // - STRUCTs have exactly two fields, a key-field, and a value-field + // - key names are unique - UnifiedVectorFormat keys_data; - UnifiedVectorFormat values_data; + D_ASSERT(result.GetType().id() == LogicalTypeId::MAP); + auto row_count = args.size(); - keys.ToUnifiedFormat(count, keys_data); - values.ToUnifiedFormat(count, values_data); + // early-out, if no data + if (args.data.empty()) { + return MapFunctionEmptyInput(result, row_count); + } + + auto &keys = args.data[0]; + auto &values = args.data[1]; + // a LIST vector, where each row contains a LIST of KEYS + UnifiedVectorFormat keys_data; + keys.ToUnifiedFormat(row_count, keys_data); auto keys_entries = UnifiedVectorFormat::GetData(keys_data); - auto values_entries = UnifiedVectorFormat::GetData(values_data); - if (same_vector_type) { - const auto key_data = keys_data.data; - const auto value_data = values_data.data; + // the KEYs child vector + auto keys_child_vector = ListVector::GetEntry(keys); + UnifiedVectorFormat keys_child_data; + keys_child_vector.ToUnifiedFormat(ListVector::GetListSize(keys), keys_child_data); - if (keys.GetVectorType() == VectorType::CONSTANT_VECTOR) { - D_ASSERT(values.GetVectorType() == VectorType::CONSTANT_VECTOR); - // Only need to compare one entry in this case - return memcmp(key_data, value_data, sizeof(list_entry_t)) == 0; - } + // a LIST vector, where each row contains a LIST of VALUES + UnifiedVectorFormat values_data; + values.ToUnifiedFormat(row_count, values_data); + auto values_entries = UnifiedVectorFormat::GetData(values_data); - // Fast path if the vector types are equal, can just check if the entries are the same - if (key_count != value_count) { - return false; + // the VALUEs child vector + auto values_child_vector = ListVector::GetEntry(values); + UnifiedVectorFormat values_child_data; + values_child_vector.ToUnifiedFormat(ListVector::GetListSize(values), values_child_data); + + // a LIST vector, where each row contains a MAP (LIST of STRUCTs) + UnifiedVectorFormat result_data; + result.ToUnifiedFormat(row_count, result_data); + auto result_entries = UnifiedVectorFormat::GetDataNoConst(result_data); + result_data.validity.SetAllValid(row_count); + + // get the resulting size of the key/value child lists + idx_t result_child_size = 0; + for (idx_t row_idx = 0; row_idx < row_count; row_idx++) { + auto keys_idx = keys_data.sel->get_index(row_idx); + if (!keys_data.validity.RowIsValid(keys_idx)) { + continue; } - return memcmp(key_data, value_data, count * sizeof(list_entry_t)) == 0; + auto keys_entry = keys_entries[keys_idx]; + result_child_size += keys_entry.length; } - // Compare the list_entries one by one - for (idx_t i = 0; i < count; i++) { - auto keys_idx = keys_data.sel->get_index(i); - auto values_idx = values_data.sel->get_index(i); + // we need to slice potential non-flat vectors + SelectionVector sel_keys(result_child_size); + SelectionVector sel_values(result_child_size); + idx_t offset = 0; - if (keys_entries[keys_idx] != values_entries[values_idx]) { - return false; - } - } - return true; -} + for (idx_t row_idx = 0; row_idx < row_count; row_idx++) { -static list_entry_t *GetBiggestList(Vector &key, Vector &value, idx_t &size) { - auto key_size = ListVector::GetListSize(key); - auto value_size = ListVector::GetListSize(value); - if (key_size > value_size) { - size = key_size; - return ListVector::GetData(key); - } - size = value_size; - return ListVector::GetData(value); -} + auto keys_idx = keys_data.sel->get_index(row_idx); + auto values_idx = values_data.sel->get_index(row_idx); + auto result_idx = result_data.sel->get_index(row_idx); -static void MapFunction(DataChunk &args, ExpressionState &state, Vector &result) { - D_ASSERT(result.GetType().id() == LogicalTypeId::MAP); + // empty map + if (!keys_data.validity.RowIsValid(keys_idx) && !values_data.validity.RowIsValid(values_idx)) { + result_entries[result_idx] = list_entry_t(); + continue; + } - auto count = args.size(); + auto keys_entry = keys_entries[keys_idx]; + auto values_entry = values_entries[values_idx]; - auto &map_key_vector = MapVector::GetKeys(result); - auto &map_value_vector = MapVector::GetValues(result); - auto result_data = ListVector::GetData(result); + // validity checks + if (!keys_data.validity.RowIsValid(keys_idx)) { + MapVector::EvalMapInvalidReason(MapInvalidReason::NULL_KEY_LIST); + } + if (!values_data.validity.RowIsValid(values_idx)) { + MapVector::EvalMapInvalidReason(MapInvalidReason::NULL_VALUE_LIST); + } + if (keys_entry.length != values_entry.length) { + MapVector::EvalMapInvalidReason(MapInvalidReason::NOT_ALIGNED); + } - result.SetVectorType(VectorType::CONSTANT_VECTOR); - if (args.data.empty()) { - ListVector::SetListSize(result, 0); - result_data->offset = 0; - result_data->length = 0; - result.Verify(count); - return; - } + // set the selection vectors and perform a duplicate key check + value_set_t unique_keys; + for (idx_t child_idx = 0; child_idx < keys_entry.length; child_idx++) { - D_ASSERT(args.ColumnCount() == 2); - auto &key_vector = args.data[0]; - auto &value_vector = args.data[1]; + auto key_idx = keys_child_data.sel->get_index(keys_entry.offset + child_idx); + auto value_idx = values_child_data.sel->get_index(values_entry.offset + child_idx); - if (args.AllConstant()) { - auto key_data = ListVector::GetData(key_vector); - auto value_data = ListVector::GetData(value_vector); - auto key_entry = key_data[0]; - auto value_entry = value_data[0]; - if (key_entry != value_entry) { - throw BinderException("Key and value list sizes don't match"); - } - result_data[0] = key_entry; - ListVector::SetListSize(result, ListVector::GetListSize(key_vector)); - map_key_vector.Reference(ListVector::GetEntry(key_vector)); - map_value_vector.Reference(ListVector::GetEntry(value_vector)); - MapVector::MapConversionVerify(result, count); - result.Verify(count); - return; - } + // NULL check + if (!keys_child_data.validity.RowIsValid(key_idx)) { + MapVector::EvalMapInvalidReason(MapInvalidReason::NULL_KEY); + } + + // unique check + auto value = keys_child_vector.GetValue(key_idx); + auto unique = unique_keys.insert(value).second; + if (!unique) { + MapVector::EvalMapInvalidReason(MapInvalidReason::DUPLICATE_KEY); + } - result.SetVectorType(VectorType::FLAT_VECTOR); - - if (key_vector.GetVectorType() == VectorType::CONSTANT_VECTOR) { - D_ASSERT(value_vector.GetVectorType() != VectorType::CONSTANT_VECTOR); - Vector expanded_const(ListType::GetChildType(key_vector.GetType()), count); - AlignVectorToReference(key_vector, value_vector, count, expanded_const); - map_key_vector.Reference(expanded_const); - - value_vector.Flatten(count); - map_value_vector.Reference(ListVector::GetEntry(value_vector)); - } else if (value_vector.GetVectorType() == VectorType::CONSTANT_VECTOR) { - D_ASSERT(key_vector.GetVectorType() != VectorType::CONSTANT_VECTOR); - Vector expanded_const(ListType::GetChildType(value_vector.GetType()), count); - AlignVectorToReference(value_vector, key_vector, count, expanded_const); - map_value_vector.Reference(expanded_const); - - key_vector.Flatten(count); - map_key_vector.Reference(ListVector::GetEntry(key_vector)); - } else { - key_vector.Flatten(count); - value_vector.Flatten(count); - - if (!ListEntriesEqual(key_vector, value_vector, count)) { - throw InvalidInputException("Error in MAP creation: key list and value list do not align. i.e. different " - "size or incompatible structure"); + // set selection vectors + sel_keys.set_index(offset + child_idx, key_idx); + sel_values.set_index(offset + child_idx, value_idx); } - map_value_vector.Reference(ListVector::GetEntry(value_vector)); - map_key_vector.Reference(ListVector::GetEntry(key_vector)); + // keys_entry and values_entry have the same length + result_entries[result_idx].length = keys_entry.length; + result_entries[result_idx].offset = offset; + offset += keys_entry.length; } + D_ASSERT(offset == result_child_size); - idx_t list_size; - auto src_data = GetBiggestList(key_vector, value_vector, list_size); - ListVector::SetListSize(result, list_size); + auto &result_key_vector = MapVector::GetKeys(result); + auto &result_value_vector = MapVector::GetValues(result); - result_data = ListVector::GetData(result); - for (idx_t i = 0; i < count; i++) { - result_data[i] = src_data[i]; - } + ListVector::SetListSize(result, offset); + result_key_vector.Slice(keys_child_vector, sel_keys, offset); + result_key_vector.Flatten(offset); + result_value_vector.Slice(values_child_vector, sel_values, offset); + result_value_vector.Flatten(offset); - MapVector::MapConversionVerify(result, count); - result.Verify(count); + if (args.AllConstant()) { + result.SetVectorType(VectorType::CONSTANT_VECTOR); + } + result.Verify(row_count); } -static unique_ptr MapBind(ClientContext &context, ScalarFunction &bound_function, +static unique_ptr MapBind(ClientContext &, ScalarFunction &bound_function, vector> &arguments) { - child_list_t child_types; if (arguments.size() != 2 && !arguments.empty()) { - throw InvalidInputException("We need exactly two lists for a map"); - } - if (arguments.size() == 2) { - if (arguments[0]->return_type.id() != LogicalTypeId::LIST) { - throw InvalidInputException("First argument is not a list"); - } - if (arguments[1]->return_type.id() != LogicalTypeId::LIST) { - throw InvalidInputException("Second argument is not a list"); - } - child_types.push_back(make_pair("key", arguments[0]->return_type)); - child_types.push_back(make_pair("value", arguments[1]->return_type)); + MapVector::EvalMapInvalidReason(MapInvalidReason::INVALID_PARAMS); } + // bind an empty MAP if (arguments.empty()) { - auto empty = LogicalType::LIST(LogicalTypeId::SQLNULL); - child_types.push_back(make_pair("key", empty)); - child_types.push_back(make_pair("value", empty)); + bound_function.return_type = LogicalType::MAP(LogicalTypeId::SQLNULL, LogicalTypeId::SQLNULL); + return make_uniq(bound_function.return_type); + } + + // bind a MAP with key-value pairs + D_ASSERT(arguments.size() == 2); + if (arguments[0]->return_type.id() != LogicalTypeId::LIST) { + MapVector::EvalMapInvalidReason(MapInvalidReason::INVALID_PARAMS); + } + if (arguments[1]->return_type.id() != LogicalTypeId::LIST) { + MapVector::EvalMapInvalidReason(MapInvalidReason::INVALID_PARAMS); } - bound_function.return_type = - LogicalType::MAP(ListType::GetChildType(child_types[0].second), ListType::GetChildType(child_types[1].second)); + auto key_type = ListType::GetChildType(arguments[0]->return_type); + auto value_type = ListType::GetChildType(arguments[1]->return_type); + bound_function.return_type = LogicalType::MAP(key_type, value_type); return make_uniq(bound_function.return_type); } ScalarFunction MapFun::GetFunction() { - //! the arguments and return types are actually set in the binder function ScalarFunction fun({}, LogicalTypeId::MAP, MapFunction, MapBind); fun.varargs = LogicalType::ANY; fun.null_handling = FunctionNullHandling::SPECIAL_HANDLING; diff --git a/src/core_functions/scalar/math/numeric.cpp b/src/core_functions/scalar/math/numeric.cpp index 22894b286c3b..d47887f93e6a 100644 --- a/src/core_functions/scalar/math/numeric.cpp +++ b/src/core_functions/scalar/math/numeric.cpp @@ -344,14 +344,14 @@ unique_ptr BindGenericRoundFunctionDecimal(ClientContext &context, struct CeilDecimalOperator { template static void Operation(DataChunk &input, uint8_t scale, Vector &result) { - T power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]; + T power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]); UnaryExecutor::Execute(input.data[0], result, input.size(), [&](T input) { if (input <= 0) { // below 0 we floor the number (e.g. -10.5 -> -10) - return input / power_of_ten; + return UnsafeNumericCast(input / power_of_ten); } else { // above 0 we ceil the number - return ((input - 1) / power_of_ten) + 1; + return UnsafeNumericCast(((input - 1) / power_of_ten) + 1); } }); } @@ -397,14 +397,14 @@ struct FloorOperator { struct FloorDecimalOperator { template static void Operation(DataChunk &input, uint8_t scale, Vector &result) { - T power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]; + T power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]); UnaryExecutor::Execute(input.data[0], result, input.size(), [&](T input) { if (input < 0) { // below 0 we ceil the number (e.g. -10.5 -> -11) - return ((input + 1) / power_of_ten) - 1; + return UnsafeNumericCast(((input + 1) / power_of_ten) - 1); } else { // above 0 we floor the number - return input / power_of_ten; + return UnsafeNumericCast(input / power_of_ten); } }); } @@ -451,10 +451,10 @@ struct TruncOperator { struct TruncDecimalOperator { template static void Operation(DataChunk &input, uint8_t scale, Vector &result) { - T power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]; + T power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]); UnaryExecutor::Execute(input.data[0], result, input.size(), [&](T input) { // Always floor - return (input / power_of_ten); + return UnsafeNumericCast((input / power_of_ten)); }); } }; @@ -533,7 +533,7 @@ struct RoundOperator { struct RoundDecimalOperator { template static void Operation(DataChunk &input, uint8_t scale, Vector &result) { - T power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]; + T power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[scale]); T addition = power_of_ten / 2; // regular round rounds towards the nearest number // in case of a tie we round away from zero @@ -548,7 +548,7 @@ struct RoundDecimalOperator { } else { input += addition; } - return input / power_of_ten; + return UnsafeNumericCast(input / power_of_ten); }); } }; @@ -581,8 +581,8 @@ static void DecimalRoundNegativePrecisionFunction(DataChunk &input, ExpressionSt result.SetValue(0, Value::INTEGER(0)); return; } - T divide_power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[-info.target_scale + source_scale]; - T multiply_power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[-info.target_scale]; + T divide_power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[-info.target_scale + source_scale]); + T multiply_power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[-info.target_scale]); T addition = divide_power_of_ten / 2; UnaryExecutor::Execute(input.data[0], result, input.size(), [&](T input) { @@ -591,7 +591,7 @@ static void DecimalRoundNegativePrecisionFunction(DataChunk &input, ExpressionSt } else { input += addition; } - return input / divide_power_of_ten * multiply_power_of_ten; + return UnsafeNumericCast(input / divide_power_of_ten * multiply_power_of_ten); }); } @@ -600,7 +600,7 @@ static void DecimalRoundPositivePrecisionFunction(DataChunk &input, ExpressionSt auto &func_expr = state.expr.Cast(); auto &info = func_expr.bind_info->Cast(); auto source_scale = DecimalType::GetScale(func_expr.children[0]->return_type); - T power_of_ten = POWERS_OF_TEN_CLASS::POWERS_OF_TEN[source_scale - info.target_scale]; + T power_of_ten = UnsafeNumericCast(POWERS_OF_TEN_CLASS::POWERS_OF_TEN[source_scale - info.target_scale]); T addition = power_of_ten / 2; UnaryExecutor::Execute(input.data[0], result, input.size(), [&](T input) { if (input < 0) { @@ -608,7 +608,7 @@ static void DecimalRoundPositivePrecisionFunction(DataChunk &input, ExpressionSt } else { input += addition; } - return input / power_of_ten; + return UnsafeNumericCast(input / power_of_ten); }); } @@ -656,7 +656,7 @@ unique_ptr BindDecimalRoundPrecision(ClientContext &context, Scala bound_function.function = ScalarFunction::NopFunction; target_scale = scale; } else { - target_scale = round_value; + target_scale = NumericCast(round_value); switch (decimal_type.InternalType()) { case PhysicalType::INT16: bound_function.function = DecimalRoundPositivePrecisionFunction; @@ -1115,6 +1115,9 @@ ScalarFunction Atan2Fun::GetFunction() { struct ACos { template static inline TR Operation(TA input) { + if (input < -1 || input > 1) { + throw InvalidInputException("ACOS is undefined outside [-1,1]"); + } return (double)std::acos(input); } }; diff --git a/src/core_functions/scalar/operators/bitwise.cpp b/src/core_functions/scalar/operators/bitwise.cpp index 65781f8d0bbe..73f968bb5377 100644 --- a/src/core_functions/scalar/operators/bitwise.cpp +++ b/src/core_functions/scalar/operators/bitwise.cpp @@ -226,19 +226,19 @@ struct BitwiseShiftLeftOperator { if (shift == 0) { return input; } - TA max_value = (TA(1) << (max_shift - shift - 1)); + TA max_value = UnsafeNumericCast((TA(1) << (max_shift - shift - 1))); if (input >= max_value) { throw OutOfRangeException("Overflow in left shift (%s << %s)", NumericHelper::ToString(input), NumericHelper::ToString(shift)); } - return input << shift; + return UnsafeNumericCast(input << shift); } }; static void BitwiseShiftLeftOperation(DataChunk &args, ExpressionState &state, Vector &result) { BinaryExecutor::Execute( args.data[0], args.data[1], result, args.size(), [&](string_t input, int32_t shift) { - int32_t max_shift = Bit::BitLength(input); + auto max_shift = UnsafeNumericCast(Bit::BitLength(input)); if (shift == 0) { return input; } @@ -285,7 +285,7 @@ struct BitwiseShiftRightOperator { static void BitwiseShiftRightOperation(DataChunk &args, ExpressionState &state, Vector &result) { BinaryExecutor::Execute( args.data[0], args.data[1], result, args.size(), [&](string_t input, int32_t shift) { - int32_t max_shift = Bit::BitLength(input); + auto max_shift = UnsafeNumericCast(Bit::BitLength(input)); if (shift == 0) { return input; } diff --git a/src/core_functions/scalar/string/hex.cpp b/src/core_functions/scalar/string/hex.cpp index eac44555bd7d..27548289e1ac 100644 --- a/src/core_functions/scalar/string/hex.cpp +++ b/src/core_functions/scalar/string/hex.cpp @@ -1,5 +1,6 @@ #include "duckdb/common/bit_utils.hpp" #include "duckdb/common/exception.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/string_util.hpp" #include "duckdb/common/types/blob.hpp" #include "duckdb/common/vector_operations/unary_executor.hpp" @@ -308,7 +309,7 @@ struct FromHexOperator { for (; i < size; i += 2) { uint8_t major = StringUtil::GetHexValue(data[i]); uint8_t minor = StringUtil::GetHexValue(data[i + 1]); - *output = (major << 4) | minor; + *output = UnsafeNumericCast((major << 4) | minor); output++; } diff --git a/src/core_functions/scalar/string/pad.cpp b/src/core_functions/scalar/string/pad.cpp index 8ad16f64ec2f..859142293153 100644 --- a/src/core_functions/scalar/string/pad.cpp +++ b/src/core_functions/scalar/string/pad.cpp @@ -77,7 +77,7 @@ static string_t LeftPadFunction(const string_t &str, const int32_t len, const st // Append as much of the original string as fits result.insert(result.end(), data_str, data_str + written.first); - return string_t(result.data(), result.size()); + return string_t(result.data(), UnsafeNumericCast(result.size())); } struct LeftPadOperator { @@ -106,7 +106,7 @@ static string_t RightPadFunction(const string_t &str, const int32_t len, const s throw InvalidInputException("Insufficient padding in RPAD."); }; - return string_t(result.data(), result.size()); + return string_t(result.data(), UnsafeNumericCast(result.size())); } struct RightPadOperator { diff --git a/src/core_functions/scalar/string/repeat.cpp b/src/core_functions/scalar/string/repeat.cpp index 4ff356e2f9cc..551095ea223c 100644 --- a/src/core_functions/scalar/string/repeat.cpp +++ b/src/core_functions/scalar/string/repeat.cpp @@ -18,7 +18,7 @@ static string_t RepeatScalarFunction(const string_t &str, const int64_t cnt, vec result.insert(result.end(), input_str, input_str + size_str); } - return string_t(result.data(), result.size()); + return string_t(result.data(), UnsafeNumericCast(result.size())); } static void RepeatFunction(DataChunk &args, ExpressionState &state, Vector &result) { diff --git a/src/core_functions/scalar/string/replace.cpp b/src/core_functions/scalar/string/replace.cpp index 73ae3fead885..a85d390f783e 100644 --- a/src/core_functions/scalar/string/replace.cpp +++ b/src/core_functions/scalar/string/replace.cpp @@ -59,7 +59,7 @@ static string_t ReplaceScalarFunction(const string_t &haystack, const string_t & size_haystack -= size_needle; } - return string_t(result.data(), result.size()); + return string_t(result.data(), UnsafeNumericCast(result.size())); } static void ReplaceFunction(DataChunk &args, ExpressionState &state, Vector &result) { diff --git a/src/core_functions/scalar/string/string_split.cpp b/src/core_functions/scalar/string/string_split.cpp index 7a777866d002..9d3ea23be52c 100644 --- a/src/core_functions/scalar/string/string_split.cpp +++ b/src/core_functions/scalar/string/string_split.cpp @@ -24,7 +24,8 @@ struct StringSplitInput { ListVector::SetListSize(result_list, offset + list_idx); ListVector::Reserve(result_list, ListVector::GetListCapacity(result_list) * 2); } - FlatVector::GetData(result_child)[list_entry] = string_t(split_data, split_size); + FlatVector::GetData(result_child)[list_entry] = + string_t(split_data, UnsafeNumericCast(split_size)); } }; diff --git a/src/core_functions/scalar/string/translate.cpp b/src/core_functions/scalar/string/translate.cpp index 44d8b4b13d30..192438697b74 100644 --- a/src/core_functions/scalar/string/translate.cpp +++ b/src/core_functions/scalar/string/translate.cpp @@ -71,7 +71,7 @@ static string_t TranslateScalarFunction(const string_t &haystack, const string_t input_haystack += sz; } - return string_t(result.data(), result.size()); + return string_t(result.data(), UnsafeNumericCast(result.size())); } static void TranslateFunction(DataChunk &args, ExpressionState &state, Vector &result) { diff --git a/src/execution/adaptive_filter.cpp b/src/execution/adaptive_filter.cpp index bbadeb639e50..37ffad99b240 100644 --- a/src/execution/adaptive_filter.cpp +++ b/src/execution/adaptive_filter.cpp @@ -57,7 +57,7 @@ void AdaptiveFilter::AdaptRuntimeStatistics(double duration) { prev_mean = runtime_sum / iteration_count; // get swap index and swap likeliness - std::uniform_int_distribution distribution(1, right_random_border); // a <= i <= b + std::uniform_int_distribution distribution(1, NumericCast(right_random_border)); // a <= i <= b idx_t random_number = distribution(generator) - 1; swap_idx = random_number / 100; // index to be swapped diff --git a/src/execution/aggregate_hashtable.cpp b/src/execution/aggregate_hashtable.cpp index bf7b7f9986b8..90029b0a4b6c 100644 --- a/src/execution/aggregate_hashtable.cpp +++ b/src/execution/aggregate_hashtable.cpp @@ -193,7 +193,7 @@ void GroupedAggregateHashTable::Resize(idx_t size) { // Find an empty entry auto entry_idx = ApplyBitMask(hash); D_ASSERT(entry_idx == hash % capacity); - while (entries[entry_idx].IsOccupied() > 0) { + while (entries[entry_idx].IsOccupied()) { entry_idx++; if (entry_idx >= capacity) { entry_idx = 0; diff --git a/src/execution/column_binding_resolver.cpp b/src/execution/column_binding_resolver.cpp index ea4b2dc7c80d..16266285ce24 100644 --- a/src/execution/column_binding_resolver.cpp +++ b/src/execution/column_binding_resolver.cpp @@ -12,7 +12,7 @@ namespace duckdb { -ColumnBindingResolver::ColumnBindingResolver() { +ColumnBindingResolver::ColumnBindingResolver(bool verify_only) : verify_only(verify_only) { } void ColumnBindingResolver::VisitOperator(LogicalOperator &op) { @@ -152,6 +152,10 @@ unique_ptr ColumnBindingResolver::VisitReplace(BoundColumnRefExpress // check the current set of column bindings to see which index corresponds to the column reference for (idx_t i = 0; i < bindings.size(); i++) { if (expr.binding == bindings[i]) { + if (verify_only) { + // in verification mode + return nullptr; + } return make_uniq(expr.alias, expr.return_type, i); } } @@ -197,6 +201,8 @@ unordered_set ColumnBindingResolver::VerifyInternal(LogicalOperator &op) void ColumnBindingResolver::Verify(LogicalOperator &op) { #ifdef DEBUG + ColumnBindingResolver resolver(true); + resolver.VisitOperator(op); VerifyInternal(op); #endif } diff --git a/src/execution/expression_executor.cpp b/src/execution/expression_executor.cpp index 25abf86f32fc..6b2b1ff743de 100644 --- a/src/execution/expression_executor.cpp +++ b/src/execution/expression_executor.cpp @@ -89,7 +89,7 @@ idx_t ExpressionExecutor::SelectExpression(DataChunk &input, SelectionVector &se SetChunk(&input); states[0]->profiler.BeginSample(); idx_t selected_tuples = Select(*expressions[0], states[0]->root_state.get(), nullptr, input.size(), &sel, nullptr); - states[0]->profiler.EndSample(chunk ? chunk->size() : 0); + states[0]->profiler.EndSample(NumericCast(chunk ? chunk->size() : 0)); return selected_tuples; } @@ -103,7 +103,7 @@ void ExpressionExecutor::ExecuteExpression(idx_t expr_idx, Vector &result) { D_ASSERT(result.GetType().id() == expressions[expr_idx]->return_type.id()); states[expr_idx]->profiler.BeginSample(); Execute(*expressions[expr_idx], states[expr_idx]->root_state.get(), nullptr, chunk ? chunk->size() : 1, result); - states[expr_idx]->profiler.EndSample(chunk ? chunk->size() : 0); + states[expr_idx]->profiler.EndSample(NumericCast(chunk ? chunk->size() : 0)); } Value ExpressionExecutor::EvaluateScalar(ClientContext &context, const Expression &expr, bool allow_unfoldable) { diff --git a/src/execution/expression_executor/execute_case.cpp b/src/execution/expression_executor/execute_case.cpp index 1b5bf1f4f29b..37d50af593c8 100644 --- a/src/execution/expression_executor/execute_case.cpp +++ b/src/execution/expression_executor/execute_case.cpp @@ -58,7 +58,7 @@ void ExpressionExecutor::Execute(const BoundCaseExpression &expr, ExpressionStat } else { // we need to execute and then fill in the desired tuples in the result Execute(*case_check.then_expr, then_state, current_true_sel, tcount, intermediate_result); - FillSwitch(intermediate_result, result, *current_true_sel, tcount); + FillSwitch(intermediate_result, result, *current_true_sel, NumericCast(tcount)); } // continue with the false tuples current_sel = current_false_sel; @@ -79,7 +79,7 @@ void ExpressionExecutor::Execute(const BoundCaseExpression &expr, ExpressionStat D_ASSERT(current_sel); Execute(*expr.else_expr, else_state, current_sel, current_count, intermediate_result); - FillSwitch(intermediate_result, result, *current_sel, current_count); + FillSwitch(intermediate_result, result, *current_sel, NumericCast(current_count)); } } if (sel) { diff --git a/src/execution/expression_executor/execute_cast.cpp b/src/execution/expression_executor/execute_cast.cpp index 399b2cab0be7..688ffbb90b14 100644 --- a/src/execution/expression_executor/execute_cast.cpp +++ b/src/execution/expression_executor/execute_cast.cpp @@ -31,11 +31,13 @@ void ExpressionExecutor::Execute(const BoundCastExpression &expr, ExpressionStat if (expr.try_cast) { string error_message; CastParameters parameters(expr.bound_cast.cast_data.get(), false, &error_message, lstate); + parameters.query_location = expr.query_location; expr.bound_cast.function(child, result, count, parameters); } else { // cast it to the type specified by the cast expression D_ASSERT(result.GetType() == expr.return_type); CastParameters parameters(expr.bound_cast.cast_data.get(), false, nullptr, lstate); + parameters.query_location = expr.query_location; expr.bound_cast.function(child, result, count, parameters); } } diff --git a/src/execution/expression_executor/execute_function.cpp b/src/execution/expression_executor/execute_function.cpp index 58207ed438b6..c079dbb8b721 100644 --- a/src/execution/expression_executor/execute_function.cpp +++ b/src/execution/expression_executor/execute_function.cpp @@ -70,14 +70,14 @@ void ExpressionExecutor::Execute(const BoundFunctionExpression &expr, Expression } #endif } - arguments.Verify(); } arguments.SetCardinality(count); + arguments.Verify(); state->profiler.BeginSample(); D_ASSERT(expr.function.function); expr.function.function(arguments, *state, result); - state->profiler.EndSample(count); + state->profiler.EndSample(NumericCast(count)); VerifyNullHandling(expr, arguments, result); D_ASSERT(result.GetType() == expr.return_type); diff --git a/src/execution/expression_executor/execute_operator.cpp b/src/execution/expression_executor/execute_operator.cpp index 1440b096274c..f357ff9cd343 100644 --- a/src/execution/expression_executor/execute_operator.cpp +++ b/src/execution/expression_executor/execute_operator.cpp @@ -90,7 +90,7 @@ void ExpressionExecutor::Execute(const BoundOperatorExpression &expr, Expression } if (result_count > 0) { vector_to_check.Slice(slice_sel, result_count); - FillSwitch(vector_to_check, result, result_sel, result_count); + FillSwitch(vector_to_check, result, result_sel, NumericCast(result_count)); } current_sel = next_sel; next_sel = next_sel == &sel_a ? &sel_b : &sel_a; diff --git a/src/execution/index/art/art.cpp b/src/execution/index/art/art.cpp index 61898a5b2f43..17fa823012c6 100644 --- a/src/execution/index/art/art.cpp +++ b/src/execution/index/art/art.cpp @@ -391,7 +391,8 @@ bool Construct(ART &art, vector &keys, row_t *row_ids, Node &node, KeySe // increment the depth until we reach a leaf or find a mismatching byte auto prefix_start = key_section.depth; - while (start_key.len != key_section.depth && start_key.ByteMatches(end_key, key_section.depth)) { + while (start_key.len != key_section.depth && + start_key.ByteMatches(end_key, UnsafeNumericCast(key_section.depth))) { key_section.depth++; } @@ -407,7 +408,8 @@ bool Construct(ART &art, vector &keys, row_t *row_ids, Node &node, KeySe } reference ref_node(node); - Prefix::New(art, ref_node, start_key, prefix_start, start_key.len - prefix_start); + Prefix::New(art, ref_node, start_key, UnsafeNumericCast(prefix_start), + UnsafeNumericCast(start_key.len - prefix_start)); if (single_row_id) { Leaf::New(ref_node, row_ids[key_section.start]); } else { @@ -425,7 +427,8 @@ bool Construct(ART &art, vector &keys, row_t *row_ids, Node &node, KeySe // set the prefix reference ref_node(node); auto prefix_length = key_section.depth - prefix_start; - Prefix::New(art, ref_node, start_key, prefix_start, prefix_length); + Prefix::New(art, ref_node, start_key, UnsafeNumericCast(prefix_start), + UnsafeNumericCast(prefix_length)); // set the node auto node_type = Node::GetARTNodeTypeByCount(child_sections.size()); @@ -566,7 +569,8 @@ bool ART::Insert(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id if (!node.HasMetadata()) { D_ASSERT(depth <= key.len); reference ref_node(node); - Prefix::New(*this, ref_node, key, depth, key.len - depth); + Prefix::New(*this, ref_node, key, UnsafeNumericCast(depth), + UnsafeNumericCast(key.len - depth)); Leaf::New(ref_node, row_id); return true; } @@ -593,7 +597,8 @@ bool ART::Insert(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id Node leaf_node; reference ref_node(leaf_node); if (depth + 1 < key.len) { - Prefix::New(*this, ref_node, key, depth + 1, key.len - depth - 1); + Prefix::New(*this, ref_node, key, UnsafeNumericCast(depth + 1), + UnsafeNumericCast(key.len - depth - 1)); } Leaf::New(ref_node, row_id); Node::InsertChild(*this, node, key[depth], leaf_node); @@ -623,7 +628,8 @@ bool ART::Insert(Node &node, const ARTKey &key, idx_t depth, const row_t &row_id Node leaf_node; reference ref_node(leaf_node); if (depth + 1 < key.len) { - Prefix::New(*this, ref_node, key, depth + 1, key.len - depth - 1); + Prefix::New(*this, ref_node, key, UnsafeNumericCast(depth + 1), + UnsafeNumericCast(key.len - depth - 1)); } Leaf::New(ref_node, row_id); Node4::InsertChild(*this, next_node, key[depth], leaf_node); diff --git a/src/execution/index/art/art_key.cpp b/src/execution/index/art/art_key.cpp index ace24037edd1..e9be0abb7354 100644 --- a/src/execution/index/art/art_key.cpp +++ b/src/execution/index/art/art_key.cpp @@ -36,12 +36,12 @@ ARTKey ARTKey::CreateARTKey(ArenaAllocator &allocator, const LogicalType &type, } // end with a null-terminator data[pos] = '\0'; - return ARTKey(data, len); + return ARTKey(data, UnsafeNumericCast(len)); } template <> ARTKey ARTKey::CreateARTKey(ArenaAllocator &allocator, const LogicalType &type, const char *value) { - return ARTKey::CreateARTKey(allocator, type, string_t(value, strlen(value))); + return ARTKey::CreateARTKey(allocator, type, string_t(value, UnsafeNumericCast(strlen(value)))); } template <> @@ -51,7 +51,7 @@ void ARTKey::CreateARTKey(ArenaAllocator &allocator, const LogicalType &type, AR template <> void ARTKey::CreateARTKey(ArenaAllocator &allocator, const LogicalType &type, ARTKey &key, const char *value) { - ARTKey::CreateARTKey(allocator, type, key, string_t(value, strlen(value))); + ARTKey::CreateARTKey(allocator, type, key, string_t(value, UnsafeNumericCast(strlen(value)))); } bool ARTKey::operator>(const ARTKey &k) const { diff --git a/src/execution/index/art/leaf.cpp b/src/execution/index/art/leaf.cpp index 1523dd999201..0fb8804e9241 100644 --- a/src/execution/index/art/leaf.cpp +++ b/src/execution/index/art/leaf.cpp @@ -1,7 +1,7 @@ #include "duckdb/execution/index/art/leaf.hpp" - #include "duckdb/execution/index/art/art.hpp" #include "duckdb/execution/index/art/node.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -25,7 +25,7 @@ void Leaf::New(ART &art, reference &node, const row_t *row_ids, idx_t coun auto &leaf = Node::RefMutable(art, node, NType::LEAF); - leaf.count = MinValue((idx_t)Node::LEAF_SIZE, count); + leaf.count = UnsafeNumericCast(MinValue((idx_t)Node::LEAF_SIZE, count)); for (idx_t i = 0; i < leaf.count; i++) { leaf.row_ids[i] = row_ids[copy_count + i]; diff --git a/src/execution/index/art/node16.cpp b/src/execution/index/art/node16.cpp index 4541c12449ac..9214a9b99f40 100644 --- a/src/execution/index/art/node16.cpp +++ b/src/execution/index/art/node16.cpp @@ -1,7 +1,7 @@ #include "duckdb/execution/index/art/node16.hpp" - #include "duckdb/execution/index/art/node4.hpp" #include "duckdb/execution/index/art/node48.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -51,7 +51,7 @@ Node16 &Node16::ShrinkNode48(ART &art, Node &node16, Node &node48) { for (idx_t i = 0; i < Node::NODE_256_CAPACITY; i++) { D_ASSERT(n16.count <= Node::NODE_16_CAPACITY); if (n48.child_index[i] != Node::EMPTY_MARKER) { - n16.key[n16.count] = i; + n16.key[n16.count] = UnsafeNumericCast(i); n16.children[n16.count] = n48.children[n48.child_index[i]]; n16.count++; } diff --git a/src/execution/index/art/node256.cpp b/src/execution/index/art/node256.cpp index b4d82fece133..301828589178 100644 --- a/src/execution/index/art/node256.cpp +++ b/src/execution/index/art/node256.cpp @@ -1,6 +1,6 @@ #include "duckdb/execution/index/art/node256.hpp" - #include "duckdb/execution/index/art/node48.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -109,7 +109,7 @@ optional_ptr Node256::GetChildMutable(const uint8_t byte) { optional_ptr Node256::GetNextChild(uint8_t &byte) const { for (idx_t i = byte; i < Node::NODE_256_CAPACITY; i++) { if (children[i].HasMetadata()) { - byte = i; + byte = UnsafeNumericCast(i); return &children[i]; } } @@ -119,7 +119,7 @@ optional_ptr Node256::GetNextChild(uint8_t &byte) const { optional_ptr Node256::GetNextChildMutable(uint8_t &byte) { for (idx_t i = byte; i < Node::NODE_256_CAPACITY; i++) { if (children[i].HasMetadata()) { - byte = i; + byte = UnsafeNumericCast(i); return &children[i]; } } diff --git a/src/execution/index/art/node48.cpp b/src/execution/index/art/node48.cpp index 8ba21122fb6b..2b1ba22b2a00 100644 --- a/src/execution/index/art/node48.cpp +++ b/src/execution/index/art/node48.cpp @@ -1,7 +1,7 @@ #include "duckdb/execution/index/art/node48.hpp" - #include "duckdb/execution/index/art/node16.hpp" #include "duckdb/execution/index/art/node256.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -50,7 +50,7 @@ Node48 &Node48::GrowNode16(ART &art, Node &node48, Node &node16) { } for (idx_t i = 0; i < n16.count; i++) { - n48.child_index[n16.key[i]] = i; + n48.child_index[n16.key[i]] = UnsafeNumericCast(i); n48.children[i] = n16.children[i]; } @@ -120,7 +120,7 @@ void Node48::InsertChild(ART &art, Node &node, const uint8_t byte, const Node ch } } n48.children[child_pos] = child; - n48.child_index[byte] = child_pos; + n48.child_index[byte] = UnsafeNumericCast(child_pos); n48.count++; } else { @@ -167,7 +167,7 @@ optional_ptr Node48::GetChildMutable(const uint8_t byte) { optional_ptr Node48::GetNextChild(uint8_t &byte) const { for (idx_t i = byte; i < Node::NODE_256_CAPACITY; i++) { if (child_index[i] != Node::EMPTY_MARKER) { - byte = i; + byte = UnsafeNumericCast(i); D_ASSERT(children[child_index[i]].HasMetadata()); return &children[child_index[i]]; } @@ -178,7 +178,7 @@ optional_ptr Node48::GetNextChild(uint8_t &byte) const { optional_ptr Node48::GetNextChildMutable(uint8_t &byte) { for (idx_t i = byte; i < Node::NODE_256_CAPACITY; i++) { if (child_index[i] != Node::EMPTY_MARKER) { - byte = i; + byte = UnsafeNumericCast(i); D_ASSERT(children[child_index[i]].HasMetadata()); return &children[child_index[i]]; } diff --git a/src/execution/index/art/prefix.cpp b/src/execution/index/art/prefix.cpp index a26ec85f6ac9..7a485fd997f7 100644 --- a/src/execution/index/art/prefix.cpp +++ b/src/execution/index/art/prefix.cpp @@ -273,7 +273,7 @@ void Prefix::Split(ART &art, reference &prefix_node, Node &child_node, idx } // set the new size of this node - prefix.data[Node::PREFIX_SIZE] = position; + prefix.data[Node::PREFIX_SIZE] = UnsafeNumericCast(position); // no bytes left before the split, free this node if (position == 0) { diff --git a/src/execution/index/fixed_size_buffer.cpp b/src/execution/index/fixed_size_buffer.cpp index 0dd86bd49e8c..ab5f4f1d43b0 100644 --- a/src/execution/index/fixed_size_buffer.cpp +++ b/src/execution/index/fixed_size_buffer.cpp @@ -88,7 +88,8 @@ void FixedSizeBuffer::Serialize(PartialBlockManager &partial_block_manager, cons D_ASSERT(InMemory() && !OnDisk()); // now we write the changes, first get a partial block allocation - PartialBlockAllocation allocation = partial_block_manager.GetBlockAllocation(allocation_size); + PartialBlockAllocation allocation = + partial_block_manager.GetBlockAllocation(NumericCast(allocation_size)); block_pointer.block_id = allocation.state.block_id; block_pointer.offset = allocation.state.offset; @@ -139,7 +140,7 @@ void FixedSizeBuffer::Pin() { Destroy(); buffer_handle = std::move(new_buffer_handle); - block_handle = new_block_handle; + block_handle = std::move(new_block_handle); block_pointer = BlockPointer(); } @@ -153,7 +154,7 @@ uint32_t FixedSizeBuffer::GetOffset(const idx_t bitmask_count) { // fills up a buffer sequentially before searching for free bits if (mask.RowIsValid(segment_count)) { mask.SetInvalid(segment_count); - return segment_count; + return UnsafeNumericCast(segment_count); } for (idx_t entry_idx = 0; entry_idx < bitmask_count; entry_idx++) { @@ -186,7 +187,7 @@ uint32_t FixedSizeBuffer::GetOffset(const idx_t bitmask_count) { auto prev_bits = entry_idx * sizeof(validity_t) * 8; D_ASSERT(mask.RowIsValid(prev_bits + first_valid_bit)); mask.SetInvalid(prev_bits + first_valid_bit); - return (prev_bits + first_valid_bit); + return UnsafeNumericCast(prev_bits + first_valid_bit); } throw InternalException("Invalid bitmask for FixedSizeAllocator"); @@ -213,7 +214,7 @@ uint32_t FixedSizeBuffer::GetMaxOffset(const idx_t available_segments) { if (available_segments % entry_size != 0) { bitmask_count++; } - uint32_t max_offset = bitmask_count * sizeof(validity_t) * 8; + auto max_offset = UnsafeNumericCast(bitmask_count * sizeof(validity_t) * 8); auto bits_in_last_entry = available_segments % (sizeof(validity_t) * 8); // get the bitmask data diff --git a/src/execution/operator/aggregate/aggregate_object.cpp b/src/execution/operator/aggregate/aggregate_object.cpp index 43c6dce93526..05af824d676f 100644 --- a/src/execution/operator/aggregate/aggregate_object.cpp +++ b/src/execution/operator/aggregate/aggregate_object.cpp @@ -29,7 +29,7 @@ AggregateObject::AggregateObject(BoundWindowExpression &window) vector AggregateObject::CreateAggregateObjects(const vector &bindings) { vector aggregates; - aggregates.reserve(aggregates.size()); + aggregates.reserve(bindings.size()); for (auto &binding : bindings) { aggregates.emplace_back(binding); } diff --git a/src/execution/operator/aggregate/physical_hash_aggregate.cpp b/src/execution/operator/aggregate/physical_hash_aggregate.cpp index f1cc27a01df4..5217c110bd26 100644 --- a/src/execution/operator/aggregate/physical_hash_aggregate.cpp +++ b/src/execution/operator/aggregate/physical_hash_aggregate.cpp @@ -12,6 +12,7 @@ #include "duckdb/parallel/pipeline.hpp" #include "duckdb/parallel/task_scheduler.hpp" #include "duckdb/parallel/thread_context.hpp" +#include "duckdb/parallel/executor_task.hpp" #include "duckdb/planner/expression/bound_aggregate_expression.hpp" #include "duckdb/planner/expression/bound_constant_expression.hpp" #include "duckdb/planner/expression/bound_reference_expression.hpp" @@ -478,7 +479,7 @@ class HashAggregateFinalizeTask : public ExecutorTask { public: HashAggregateFinalizeTask(ClientContext &context, Pipeline &pipeline, shared_ptr event_p, const PhysicalHashAggregate &op, HashAggregateGlobalSinkState &state_p) - : ExecutorTask(pipeline.executor), context(context), pipeline(pipeline), event(std::move(event_p)), op(op), + : ExecutorTask(pipeline.executor, std::move(event_p)), context(context), pipeline(pipeline), op(op), gstate(state_p) { } @@ -488,7 +489,6 @@ class HashAggregateFinalizeTask : public ExecutorTask { private: ClientContext &context; Pipeline &pipeline; - shared_ptr event; const PhysicalHashAggregate &op; HashAggregateGlobalSinkState &gstate; @@ -539,7 +539,7 @@ class HashAggregateDistinctFinalizeTask : public ExecutorTask { public: HashAggregateDistinctFinalizeTask(Pipeline &pipeline, shared_ptr event_p, const PhysicalHashAggregate &op, HashAggregateGlobalSinkState &state_p) - : ExecutorTask(pipeline.executor), pipeline(pipeline), event(std::move(event_p)), op(op), gstate(state_p) { + : ExecutorTask(pipeline.executor, std::move(event_p)), pipeline(pipeline), op(op), gstate(state_p) { } public: @@ -550,7 +550,6 @@ class HashAggregateDistinctFinalizeTask : public ExecutorTask { private: Pipeline &pipeline; - shared_ptr event; const PhysicalHashAggregate &op; HashAggregateGlobalSinkState &gstate; diff --git a/src/execution/operator/aggregate/physical_streaming_window.cpp b/src/execution/operator/aggregate/physical_streaming_window.cpp index 8b2b482c795e..7f4974681d67 100644 --- a/src/execution/operator/aggregate/physical_streaming_window.cpp +++ b/src/execution/operator/aggregate/physical_streaming_window.cpp @@ -113,7 +113,6 @@ OperatorResultType PhysicalStreamingWindow::Execute(ExecutionContext &context, D GlobalOperatorState &gstate_p, OperatorState &state_p) const { auto &gstate = gstate_p.Cast(); auto &state = state_p.Cast(); - state.allocator.Reset(); if (!state.initialized) { state.Initialize(context.client, input, select_list); diff --git a/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp b/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp index 2401e99c854f..f1ceeab4bc7c 100644 --- a/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +++ b/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp @@ -12,6 +12,7 @@ #include "duckdb/parallel/base_pipeline_event.hpp" #include "duckdb/parallel/interrupt.hpp" #include "duckdb/parallel/thread_context.hpp" +#include "duckdb/parallel/executor_task.hpp" #include "duckdb/planner/expression/bound_aggregate_expression.hpp" #include "duckdb/planner/expression/bound_reference_expression.hpp" @@ -402,8 +403,8 @@ class UngroupedDistinctAggregateFinalizeTask : public ExecutorTask { UngroupedDistinctAggregateFinalizeTask(Executor &executor, shared_ptr event_p, const PhysicalUngroupedAggregate &op, UngroupedAggregateGlobalSinkState &state_p) - : ExecutorTask(executor), event(std::move(event_p)), op(op), gstate(state_p), - allocator(gstate.CreateAllocator()), aggregate_state(op.aggregates) { + : ExecutorTask(executor, std::move(event_p)), op(op), gstate(state_p), allocator(gstate.CreateAllocator()), + aggregate_state(op.aggregates) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override; @@ -412,8 +413,6 @@ class UngroupedDistinctAggregateFinalizeTask : public ExecutorTask { TaskExecutionResult AggregateDistinct(); private: - shared_ptr event; - const PhysicalUngroupedAggregate &op; UngroupedAggregateGlobalSinkState &gstate; diff --git a/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp b/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp index 18e535b65393..8c29ae79fb43 100644 --- a/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +++ b/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer.hpp" #include "duckdb/common/string_util.hpp" namespace duckdb { @@ -65,7 +65,7 @@ void CSVBuffer::Reload(CSVFileHandle &file_handle) { file_handle.Read(handle.Ptr(), actual_buffer_size); } -unique_ptr CSVBuffer::Pin(CSVFileHandle &file_handle, bool &has_seeked) { +shared_ptr CSVBuffer::Pin(CSVFileHandle &file_handle, bool &has_seeked) { auto &buffer_manager = BufferManager::GetBufferManager(context); if (can_seek && block->IsUnloaded()) { // We have to reload it from disk @@ -73,8 +73,8 @@ unique_ptr CSVBuffer::Pin(CSVFileHandle &file_handle, bool &has Reload(file_handle); has_seeked = true; } - return make_uniq(buffer_manager.Pin(block), actual_buffer_size, last_buffer, file_number, - buffer_idx); + return make_shared(buffer_manager.Pin(block), actual_buffer_size, last_buffer, file_number, + buffer_idx); } void CSVBuffer::Unpin() { diff --git a/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp b/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp index 2ff91557eecd..2a13158b6081 100644 --- a/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +++ b/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp @@ -1,5 +1,5 @@ -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer.hpp" #include "duckdb/function/table/read_csv.hpp" namespace duckdb { @@ -61,7 +61,7 @@ bool CSVBufferManager::ReadNextAndCacheIt() { return false; } -unique_ptr CSVBufferManager::GetBuffer(const idx_t pos) { +shared_ptr CSVBufferManager::GetBuffer(const idx_t pos) { lock_guard parallel_lock(main_mutex); while (pos >= cached_buffers.size()) { if (done) { @@ -80,7 +80,12 @@ unique_ptr CSVBufferManager::GetBuffer(const idx_t pos) { } void CSVBufferManager::ResetBuffer(const idx_t buffer_idx) { - D_ASSERT(buffer_idx < cached_buffers.size() && cached_buffers[buffer_idx]); + lock_guard parallel_lock(main_mutex); + if (buffer_idx >= cached_buffers.size()) { + // Nothing to reset + return; + } + D_ASSERT(cached_buffers[buffer_idx]); if (buffer_idx == 0 && cached_buffers.size() > 1) { cached_buffers[buffer_idx].reset(); idx_t cur_buffer = buffer_idx + 1; diff --git a/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp b/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp index 733cc965a15b..cbb1c1cd86e7 100644 --- a/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +++ b/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" #include "duckdb/common/exception/binder_exception.hpp" namespace duckdb { diff --git a/src/execution/operator/csv_scanner/scanner/base_scanner.cpp b/src/execution/operator/csv_scanner/scanner/base_scanner.cpp index 9ba2e6d54177..23212e99e795 100644 --- a/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +++ b/src/execution/operator/csv_scanner/scanner/base_scanner.cpp @@ -1,5 +1,5 @@ -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/base_scanner.hpp" namespace duckdb { @@ -8,9 +8,9 @@ ScannerResult::ScannerResult(CSVStates &states_p, CSVStateMachine &state_machine } BaseScanner::BaseScanner(shared_ptr buffer_manager_p, shared_ptr state_machine_p, - shared_ptr error_handler_p, shared_ptr csv_file_scan_p, - CSVIterator iterator_p) - : csv_file_scan(std::move(csv_file_scan_p)), error_handler(std::move(error_handler_p)), + shared_ptr error_handler_p, bool sniffing_p, + shared_ptr csv_file_scan_p, CSVIterator iterator_p) + : csv_file_scan(std::move(csv_file_scan_p)), sniffing(sniffing_p), error_handler(std::move(error_handler_p)), state_machine(std::move(state_machine_p)), iterator(iterator_p), buffer_manager(std::move(buffer_manager_p)) { D_ASSERT(buffer_manager); D_ASSERT(state_machine); diff --git a/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp b/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp index d07087478580..8894cbcf4e76 100644 --- a/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +++ b/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/column_count_scanner.hpp" namespace duckdb { @@ -50,8 +50,7 @@ ColumnCountScanner::ColumnCountScanner(shared_ptr buffer_manag } unique_ptr ColumnCountScanner::UpgradeToStringValueScanner() { - auto scanner = make_uniq(0, buffer_manager, state_machine, error_handler, nullptr); - scanner->sniffing = true; + auto scanner = make_uniq(0, buffer_manager, state_machine, error_handler, nullptr, true); return scanner; } diff --git a/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp b/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp index e12a3c353a83..eab7125aa1ec 100644 --- a/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +++ b/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" namespace duckdb { @@ -30,17 +30,21 @@ CSVIterator::CSVIterator() : is_set(false) { } void CSVBoundary::Print() { +#ifndef DUCKDB_DISABLE_PRINT std::cout << "---Boundary: " << boundary_idx << " ---" << std::endl; std::cout << "File Index:: " << file_idx << std::endl; std::cout << "Buffer Index: " << buffer_idx << std::endl; std::cout << "Buffer Pos: " << buffer_pos << std::endl; std::cout << "End Pos: " << end_pos << std::endl; std::cout << "------------" << end_pos << std::endl; +#endif } void CSVIterator::Print() { +#ifndef DUCKDB_DISABLE_PRINT boundary.Print(); std::cout << "Is set: " << is_set << std::endl; +#endif } bool CSVIterator::Next(CSVBufferManager &buffer_manager) { diff --git a/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp b/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp index b3d526a91a0a..486c26b9f320 100644 --- a/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +++ b/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp @@ -1,5 +1,5 @@ -#include "duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/skip_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/column_count_scanner.hpp" namespace duckdb { diff --git a/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp b/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp index 165738e31b40..42737adc2339 100644 --- a/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +++ b/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp @@ -1,40 +1,44 @@ -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_casting.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_casting.hpp" +#include "duckdb/execution/operator/csv_scanner/skip_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp" #include "duckdb/main/client_data.hpp" #include "duckdb/common/operator/integer_cast_operator.hpp" #include "duckdb/common/operator/double_cast_operator.hpp" #include +#include "utf8proc_wrapper.hpp" namespace duckdb { -StringValueResult::StringValueResult(CSVStates &states, CSVStateMachine &state_machine, CSVBufferHandle &buffer_handle, - Allocator &buffer_allocator, idx_t result_size_p, idx_t buffer_position, - CSVErrorHandler &error_hander_p, CSVIterator &iterator_p, bool store_line_size_p, - shared_ptr csv_file_scan_p, idx_t &lines_read_p) - : ScannerResult(states, state_machine), number_of_columns(state_machine.dialect_options.num_cols), +StringValueResult::StringValueResult(CSVStates &states, CSVStateMachine &state_machine, + const shared_ptr &buffer_handle, Allocator &buffer_allocator, + idx_t result_size_p, idx_t buffer_position, CSVErrorHandler &error_hander_p, + CSVIterator &iterator_p, bool store_line_size_p, + shared_ptr csv_file_scan_p, idx_t &lines_read_p, bool sniffing_p) + : ScannerResult(states, state_machine), + number_of_columns(NumericCast(state_machine.dialect_options.num_cols)), null_padding(state_machine.options.null_padding), ignore_errors(state_machine.options.ignore_errors), null_str_ptr(state_machine.options.null_str.c_str()), null_str_size(state_machine.options.null_str.size()), result_size(result_size_p), error_handler(error_hander_p), iterator(iterator_p), - store_line_size(store_line_size_p), csv_file_scan(std::move(csv_file_scan_p)), lines_read(lines_read_p) { + store_line_size(store_line_size_p), csv_file_scan(std::move(csv_file_scan_p)), lines_read(lines_read_p), + sniffing(sniffing_p) { // Vector information D_ASSERT(number_of_columns > 0); - + buffer_handles.push_back(buffer_handle); // Buffer Information - buffer_ptr = buffer_handle.Ptr(); - buffer_size = buffer_handle.actual_size; + buffer_ptr = buffer_handle->Ptr(); + buffer_size = buffer_handle->actual_size; last_position = buffer_position; // Current Result information - previous_line_start = {iterator.pos.buffer_idx, iterator.pos.buffer_pos, buffer_handle.actual_size}; + previous_line_start = {iterator.pos.buffer_idx, iterator.pos.buffer_pos, buffer_handle->actual_size}; pre_previous_line_start = previous_line_start; // Fill out Parse Types vector logical_types; - parse_types = make_unsafe_uniq_array(number_of_columns); + parse_types = make_unsafe_uniq_array>(number_of_columns); if (!csv_file_scan) { for (idx_t i = 0; i < number_of_columns; i++) { - parse_types[i] = LogicalTypeId::VARCHAR; + parse_types[i] = {LogicalTypeId::VARCHAR, true}; logical_types.emplace_back(LogicalType::VARCHAR); string name = "Column_" + to_string(i); names.emplace_back(name); @@ -48,10 +52,10 @@ StringValueResult::StringValueResult(CSVStates &states, CSVStateMachine &state_m for (idx_t i = 0; i < csv_file_scan->file_types.size(); i++) { auto &type = csv_file_scan->file_types[i]; if (StringValueScanner::CanDirectlyCast(type, state_machine.options.dialect_options.date_format)) { - parse_types[i] = type.id(); + parse_types[i] = {type.id(), true}; logical_types.emplace_back(type); } else { - parse_types[i] = LogicalTypeId::VARCHAR; + parse_types[i] = {LogicalTypeId::VARCHAR, type.id() == LogicalTypeId::VARCHAR}; logical_types.emplace_back(LogicalType::VARCHAR); } } @@ -72,7 +76,7 @@ StringValueResult::StringValueResult(CSVStates &states, CSVStateMachine &state_m if (!projecting_columns) { for (idx_t j = logical_types.size(); j < number_of_columns; j++) { // This can happen if we have sneaky null columns at the end that we wish to ignore - parse_types[j] = LogicalTypeId::VARCHAR; + parse_types[j] = {LogicalTypeId::VARCHAR, true}; logical_types.emplace_back(LogicalType::VARCHAR); } } @@ -86,6 +90,16 @@ StringValueResult::StringValueResult(CSVStates &states, CSVStateMachine &state_m } } +StringValueResult::~StringValueResult() { + // We have to insert the lines read by this scanner + error_handler.Insert(iterator.GetBoundaryIdx(), lines_read); + if (!iterator.done) { + // Some operators, like Limit, might cause a future error to incorrectly report the wrong error line + // Better to print nothing to print something wrong + error_handler.DontPrintErrorLine(); + } +} + inline bool IsValueNull(const char *null_str_ptr, const char *value_ptr, const idx_t size) { for (idx_t i = 0; i < size; i++) { if (null_str_ptr[i] != value_ptr[i]) { @@ -123,7 +137,7 @@ void StringValueResult::AddValueToVector(const char *value_ptr, const idx_t size empty = state_machine.options.force_not_null[chunk_col_id]; } if (empty) { - if (parse_types[chunk_col_id] != LogicalTypeId::VARCHAR) { + if (parse_types[chunk_col_id].first != LogicalTypeId::VARCHAR) { // If it is not a varchar, empty values are not accepted, we must error. cast_errors[chunk_col_id] = std::string(""); } @@ -142,7 +156,7 @@ void StringValueResult::AddValueToVector(const char *value_ptr, const idx_t size } } bool success = true; - switch (parse_types[chunk_col_id]) { + switch (parse_types[chunk_col_id].first) { case LogicalTypeId::TINYINT: success = TrySimpleIntegerCast(value_ptr, size, static_cast(vector_ptr[chunk_col_id])[number_of_rows], false); @@ -197,15 +211,30 @@ void StringValueResult::AddValueToVector(const char *value_ptr, const idx_t size TimestampCastResult::SUCCESS; break; } - default: + default: { + // By default we add a string + // We only evaluate if a string is utf8 valid, if it's actually a varchar + if (parse_types[chunk_col_id].second && !Utf8Proc::IsValid(value_ptr, UnsafeNumericCast(size))) { + bool force_error = !state_machine.options.ignore_errors && sniffing; + // Invalid unicode, we must error + LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), lines_read); + auto csv_error = CSVError::InvalidUTF8(state_machine.options, lines_per_batch); + error_handler.Error(csv_error, force_error); + // If we got here, we are ingoring errors, hence we must ignore this line. + ignore_current_row = true; + break; + } if (allocate) { - static_cast(vector_ptr[chunk_col_id])[number_of_rows] = - StringVector::AddStringOrBlob(parse_chunk.data[chunk_col_id], string_t(value_ptr, size)); + // If it's a value produced over multiple buffers, we must allocate + static_cast(vector_ptr[chunk_col_id])[number_of_rows] = StringVector::AddStringOrBlob( + parse_chunk.data[chunk_col_id], string_t(value_ptr, UnsafeNumericCast(size))); } else { - static_cast(vector_ptr[chunk_col_id])[number_of_rows] = string_t(value_ptr, size); + static_cast(vector_ptr[chunk_col_id])[number_of_rows] = + string_t(value_ptr, UnsafeNumericCast(size)); } break; } + } if (!success) { // We had a casting error, we push it here because we can only error when finishing the line read. cast_errors[cur_col_id] = std::string(value_ptr, size); @@ -230,6 +259,20 @@ DataChunk &StringValueResult::ToChunk() { return parse_chunk; } +void StringValueResult::Reset() { + if (number_of_rows == 0) { + return; + } + number_of_rows = 0; + cur_col_id = 0; + chunk_col_id = 0; + for (auto &v : validity_mask) { + v->SetAllValid(result_size); + } + buffer_handles.clear(); + ignore_current_row = false; +} + void StringValueResult::AddQuotedValue(StringValueResult &result, const idx_t buffer_pos) { if (result.escaped) { if (result.projecting_columns) { @@ -273,10 +316,10 @@ void StringValueResult::AddValue(StringValueResult &result, const idx_t buffer_p } void StringValueResult::HandleOverLimitRows() { - auto csv_error = - CSVError::IncorrectColumnAmountError(state_machine.options, nullptr, number_of_columns, cur_col_id + 1); LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), number_of_rows + 1); - error_handler.Error(lines_per_batch, csv_error); + auto csv_error = CSVError::IncorrectColumnAmountError(state_machine.options, nullptr, number_of_columns, + cur_col_id + 1, lines_per_batch); + error_handler.Error(csv_error); // If we get here we need to remove the last line cur_col_id = 0; chunk_col_id = 0; @@ -292,14 +335,16 @@ void StringValueResult::NullPaddingQuotedNewlineCheck() { if (state_machine.options.null_padding && iterator.IsBoundarySet() && quoted_new_line && iterator.done) { // If we have null_padding set, we found a quoted new line, we are scanning the file in parallel and it's the // last row of this thread. - auto csv_error = CSVError::NullPaddingFail(state_machine.options); LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), number_of_rows + 1); - error_handler.Error(lines_per_batch, csv_error, true); + auto csv_error = CSVError::NullPaddingFail(state_machine.options, lines_per_batch); + error_handler.Error(csv_error); } } bool StringValueResult::AddRowInternal() { if (ignore_current_row) { + cur_col_id = 0; + chunk_col_id = 0; // An error occurred on this row, we are ignoring it and resetting our control flag ignore_current_row = false; return false; @@ -321,12 +366,13 @@ bool StringValueResult::AddRowInternal() { std::ostringstream error; // Casting Error Message error << "Could not convert string \"" << cast_error.second << "\" to \'" - << LogicalTypeIdToString(parse_types[cast_error.first]) << "\'"; + << LogicalTypeIdToString(parse_types[cast_error.first].first) << "\'"; auto error_string = error.str(); + LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), lines_read); + auto csv_error = CSVError::CastError(state_machine.options, names[cast_error.first], error_string, - cast_error.first, row); - LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), lines_read - 1); - error_handler.Error(lines_per_batch, csv_error); + cast_error.first, row, lines_per_batch); + error_handler.Error(csv_error); } // If we got here it means we are ignoring errors, hence we need to signify to our result scanner to ignore this // row @@ -364,10 +410,10 @@ bool StringValueResult::AddRowInternal() { } } else { // If we are not null-padding this is an error - auto csv_error = - CSVError::IncorrectColumnAmountError(state_machine.options, nullptr, number_of_columns, cur_col_id); LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), number_of_rows + 1); - error_handler.Error(lines_per_batch, csv_error); + auto csv_error = CSVError::IncorrectColumnAmountError(state_machine.options, nullptr, number_of_columns, + cur_col_id, lines_per_batch); + error_handler.Error(csv_error); // If we are here we ignore_errors, so we delete this line number_of_rows--; } @@ -391,9 +437,9 @@ bool StringValueResult::AddRow(StringValueResult &result, const idx_t buffer_pos result.error_handler.NewMaxLineSize(current_line_size); } if (current_line_size > result.state_machine.options.maximum_line_size) { - auto csv_error = CSVError::LineSizeError(result.state_machine.options, current_line_size); LinesPerBoundary lines_per_batch(result.iterator.GetBoundaryIdx(), result.number_of_rows); - result.error_handler.Error(lines_per_batch, csv_error, true); + auto csv_error = CSVError::LineSizeError(result.state_machine.options, current_line_size, lines_per_batch); + result.error_handler.Error(csv_error); } result.pre_previous_line_start = result.previous_line_start; result.previous_line_start = current_line_start; @@ -421,11 +467,11 @@ bool StringValueResult::AddRow(StringValueResult &result, const idx_t buffer_pos void StringValueResult::InvalidState(StringValueResult &result) { // FIXME: How do we recover from an invalid state? Can we restart the state machine and jump to the next row? + LinesPerBoundary lines_per_batch(result.iterator.GetBoundaryIdx(), result.number_of_rows); auto csv_error = CSVError::UnterminatedQuotesError(result.state_machine.options, static_cast(result.vector_ptr[result.chunk_col_id]), - result.number_of_rows, result.cur_col_id); - LinesPerBoundary lines_per_batch(result.iterator.GetBoundaryIdx(), result.number_of_rows); - result.error_handler.Error(lines_per_batch, csv_error); + result.number_of_rows, result.cur_col_id, lines_per_batch); + result.error_handler.Error(csv_error); } bool StringValueResult::EmptyLine(StringValueResult &result, const idx_t buffer_pos) { @@ -459,21 +505,22 @@ bool StringValueResult::EmptyLine(StringValueResult &result, const idx_t buffer_ StringValueScanner::StringValueScanner(idx_t scanner_idx_p, const shared_ptr &buffer_manager, const shared_ptr &state_machine, const shared_ptr &error_handler, - const shared_ptr &csv_file_scan, CSVIterator boundary, - idx_t result_size) - : BaseScanner(buffer_manager, state_machine, error_handler, csv_file_scan, boundary), scanner_idx(scanner_idx_p), - result(states, *state_machine, *cur_buffer_handle, BufferAllocator::Get(buffer_manager->context), result_size, + const shared_ptr &csv_file_scan, bool sniffing, + CSVIterator boundary, idx_t result_size) + : BaseScanner(buffer_manager, state_machine, error_handler, sniffing, csv_file_scan, boundary), + scanner_idx(scanner_idx_p), + result(states, *state_machine, cur_buffer_handle, BufferAllocator::Get(buffer_manager->context), result_size, iterator.pos.buffer_pos, *error_handler, iterator, - buffer_manager->context.client_data->debug_set_max_line_length, csv_file_scan, lines_read) { + buffer_manager->context.client_data->debug_set_max_line_length, csv_file_scan, lines_read, sniffing) { } StringValueScanner::StringValueScanner(const shared_ptr &buffer_manager, const shared_ptr &state_machine, const shared_ptr &error_handler) - : BaseScanner(buffer_manager, state_machine, error_handler, nullptr, {}), scanner_idx(0), - result(states, *state_machine, *cur_buffer_handle, Allocator::DefaultAllocator(), STANDARD_VECTOR_SIZE, + : BaseScanner(buffer_manager, state_machine, error_handler, false, nullptr, {}), scanner_idx(0), + result(states, *state_machine, cur_buffer_handle, Allocator::DefaultAllocator(), STANDARD_VECTOR_SIZE, iterator.pos.buffer_pos, *error_handler, iterator, - buffer_manager->context.client_data->debug_set_max_line_length, csv_file_scan, lines_read) { + buffer_manager->context.client_data->debug_set_max_line_length, csv_file_scan, lines_read, sniffing) { } unique_ptr StringValueScanner::GetCSVScanner(ClientContext &context, CSVReaderOptions &options) { @@ -494,12 +541,7 @@ bool StringValueScanner::FinishedIterator() { } StringValueResult &StringValueScanner::ParseChunk() { - result.number_of_rows = 0; - result.cur_col_id = 0; - result.chunk_col_id = 0; - for (auto &v : result.validity_mask) { - v->SetAllValid(result.result_size); - } + result.Reset(); ParseChunkInternal(result); return result; } @@ -508,6 +550,8 @@ void StringValueScanner::Flush(DataChunk &insert_chunk) { auto &process_result = ParseChunk(); // First Get Parsed Chunk auto &parse_chunk = process_result.ToChunk(); + // We have to check if we got to error + error_handler->ErrorIfNeeded(); if (parse_chunk.size() == 0) { return; @@ -539,6 +583,7 @@ void StringValueScanner::Flush(DataChunk &insert_chunk) { result_vector.Reinterpret(parse_vector); } else { string error_message; + CastParameters parameters(false, &error_message); bool success; idx_t line_error = 0; bool line_error_set = true; @@ -547,27 +592,26 @@ void StringValueScanner::Flush(DataChunk &insert_chunk) { type.id() == LogicalTypeId::DATE) { // use the date format to cast the chunk success = CSVCast::TryCastDateVector(state_machine->options.dialect_options.date_format, parse_vector, - result_vector, parse_chunk.size(), error_message, line_error); + result_vector, parse_chunk.size(), parameters, line_error); } else if (!state_machine->options.dialect_options.date_format.at(LogicalTypeId::TIMESTAMP) .GetValue() .Empty() && type.id() == LogicalTypeId::TIMESTAMP) { // use the date format to cast the chunk - success = - CSVCast::TryCastTimestampVector(state_machine->options.dialect_options.date_format, parse_vector, - result_vector, parse_chunk.size(), error_message); + success = CSVCast::TryCastTimestampVector(state_machine->options.dialect_options.date_format, + parse_vector, result_vector, parse_chunk.size(), parameters); } else if (state_machine->options.decimal_separator != "." && (type.id() == LogicalTypeId::FLOAT || type.id() == LogicalTypeId::DOUBLE)) { success = CSVCast::TryCastFloatingVectorCommaSeparated(state_machine->options, parse_vector, result_vector, - parse_chunk.size(), error_message, type, line_error); + parse_chunk.size(), parameters, type, line_error); } else if (state_machine->options.decimal_separator != "." && type.id() == LogicalTypeId::DECIMAL) { success = CSVCast::TryCastDecimalVectorCommaSeparated( - state_machine->options, parse_vector, result_vector, parse_chunk.size(), error_message, type); + state_machine->options, parse_vector, result_vector, parse_chunk.size(), parameters, type); } else { // target type is not varchar: perform a cast success = VectorOperations::TryCast(buffer_manager->context, parse_vector, result_vector, - parse_chunk.size(), &error_message); + parse_chunk.size(), &error_message, false, true); line_error_set = false; } if (success) { @@ -588,14 +632,18 @@ void StringValueScanner::Flush(DataChunk &insert_chunk) { } { vector row; - for (idx_t col = 0; col < parse_chunk.ColumnCount(); col++) { - row.push_back(parse_chunk.GetValue(col, line_error)); + + if (state_machine->options.ignore_errors) { + for (idx_t col = 0; col < parse_chunk.ColumnCount(); col++) { + row.push_back(parse_chunk.GetValue(col, line_error)); + } } - auto csv_error = CSVError::CastError(state_machine->options, csv_file_scan->names[col_idx], - error_message, col_idx, row); + LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), lines_read - parse_chunk.size() + line_error); - error_handler->Error(lines_per_batch, csv_error); + auto csv_error = CSVError::CastError(state_machine->options, csv_file_scan->names[col_idx], + error_message, col_idx, row, lines_per_batch); + error_handler->Error(csv_error); } borked_lines.insert(line_error++); D_ASSERT(state_machine->options.ignore_errors); @@ -608,11 +656,12 @@ void StringValueScanner::Flush(DataChunk &insert_chunk) { for (idx_t col = 0; col < parse_chunk.ColumnCount(); col++) { row.push_back(parse_chunk.GetValue(col, line_error)); } - auto csv_error = CSVError::CastError(state_machine->options, csv_file_scan->names[col_idx], - error_message, col_idx, row); LinesPerBoundary lines_per_batch(iterator.GetBoundaryIdx(), lines_read - parse_chunk.size() + line_error); - error_handler->Error(lines_per_batch, csv_error); + auto csv_error = CSVError::CastError(state_machine->options, csv_file_scan->names[col_idx], + error_message, col_idx, row, lines_per_batch); + + error_handler->Error(csv_error); } } } @@ -666,17 +715,19 @@ void StringValueScanner::ProcessExtraRow() { iterator.pos.buffer_pos++; return; } + lines_read++; iterator.pos.buffer_pos++; break; case CSVState::CARRIAGE_RETURN: - lines_read++; if (states.states[0] != CSVState::RECORD_SEPARATOR) { result.AddRow(result, iterator.pos.buffer_pos); iterator.pos.buffer_pos++; + lines_read++; return; } else { result.EmptyLine(result, iterator.pos.buffer_pos); iterator.pos.buffer_pos++; + lines_read++; return; } case CSVState::DELIMITER: @@ -807,25 +858,37 @@ void StringValueScanner::ProcessOverbufferValue() { } j++; } - string_t value; - if (result.quoted) { - value = string_t(overbuffer_string.c_str() + result.quoted_position, - overbuffer_string.size() - 1 - result.quoted_position); - if (result.escaped) { - const auto str_ptr = static_cast(overbuffer_string.c_str() + result.quoted_position); - value = - StringValueScanner::RemoveEscape(str_ptr, overbuffer_string.size() - 2, - state_machine->dialect_options.state_machine_options.escape.GetValue(), - result.parse_chunk.data[result.chunk_col_id]); + bool skip_value = false; + if (result.projecting_columns) { + if (!result.projected_columns[result.cur_col_id]) { + result.cur_col_id++; + skip_value = true; } - } else { - value = string_t(overbuffer_string.c_str(), overbuffer_string.size()); } - - if (states.EmptyLine() && state_machine->dialect_options.num_cols == 1) { - result.EmptyLine(result, iterator.pos.buffer_pos); - } else if (!states.IsNotSet()) { - result.AddValueToVector(value.GetData(), value.GetSize(), true); + if (!skip_value) { + string_t value; + if (result.quoted) { + value = string_t(overbuffer_string.c_str() + result.quoted_position, + UnsafeNumericCast(overbuffer_string.size() - 1 - result.quoted_position)); + if (result.escaped) { + const auto str_ptr = static_cast(overbuffer_string.c_str() + result.quoted_position); + value = StringValueScanner::RemoveEscape( + str_ptr, overbuffer_string.size() - 2, + state_machine->dialect_options.state_machine_options.escape.GetValue(), + result.parse_chunk.data[result.chunk_col_id]); + } + } else { + value = string_t(overbuffer_string.c_str(), UnsafeNumericCast(overbuffer_string.size())); + } + if (states.EmptyLine() && state_machine->dialect_options.num_cols == 1) { + result.EmptyLine(result, iterator.pos.buffer_pos); + } else if (!states.IsNotSet()) { + result.AddValueToVector(value.GetData(), value.GetSize(), true); + } + } else { + if (states.EmptyLine() && state_machine->dialect_options.num_cols == 1) { + result.EmptyLine(result, iterator.pos.buffer_pos); + } } if (states.NewRow() && !states.IsNotSet()) { @@ -849,8 +912,9 @@ void StringValueScanner::ProcessOverbufferValue() { bool StringValueScanner::MoveToNextBuffer() { if (iterator.pos.buffer_pos >= cur_buffer_handle->actual_size) { - previous_buffer_handle = std::move(cur_buffer_handle); + previous_buffer_handle = cur_buffer_handle; cur_buffer_handle = buffer_manager->GetBuffer(++iterator.pos.buffer_idx); + result.buffer_handles.push_back(cur_buffer_handle); if (!cur_buffer_handle) { iterator.pos.buffer_idx--; buffer_handle_ptr = nullptr; @@ -866,17 +930,17 @@ bool StringValueScanner::MoveToNextBuffer() { result.chunk_col_id = 0; return false; } else if (states.NewValue()) { - lines_read++; // we add the value result.AddValue(result, previous_buffer_handle->actual_size); // And an extra empty value to represent what comes after the delimiter result.AddRow(result, previous_buffer_handle->actual_size); + lines_read++; } else if (states.IsQuotedCurrent()) { // Unterminated quote result.InvalidState(result); } else { - lines_read++; result.AddRow(result, previous_buffer_handle->actual_size); + lines_read++; } return false; } @@ -923,12 +987,15 @@ void StringValueScanner::SkipUntilNewLine() { if (state_machine->options.dialect_options.state_machine_options.new_line.GetValue() == NewLineIdentifier::CARRY_ON) { bool carriage_return = false; + bool not_carriage_return = false; for (; iterator.pos.buffer_pos < cur_buffer_handle->actual_size; iterator.pos.buffer_pos++) { if (buffer_handle_ptr[iterator.pos.buffer_pos] == '\r') { carriage_return = true; + } else if (buffer_handle_ptr[iterator.pos.buffer_pos] != '\n') { + not_carriage_return = true; } if (buffer_handle_ptr[iterator.pos.buffer_pos] == '\n') { - if (carriage_return) { + if (carriage_return || not_carriage_return) { iterator.pos.buffer_pos++; return; } @@ -1000,8 +1067,9 @@ void StringValueScanner::SetStart() { // When Null Padding, we assume we start from the correct new-line return; } - scan_finder = make_uniq(0, buffer_manager, state_machine, - make_shared(true), csv_file_scan, iterator, 1); + + scan_finder = make_uniq( + 0, buffer_manager, state_machine, make_shared(true), csv_file_scan, false, iterator, 1); auto &tuples = scan_finder->ParseChunk(); line_found = true; if (tuples.number_of_rows != 1) { @@ -1018,6 +1086,14 @@ void StringValueScanner::SetStart() { return; } } + if (iterator.pos.buffer_pos == cur_buffer_handle->actual_size) { + // If things go terribly wrong, we never loop indefinetly. + iterator.pos.buffer_idx = scan_finder->iterator.pos.buffer_idx; + iterator.pos.buffer_pos = scan_finder->iterator.pos.buffer_pos; + result.last_position = iterator.pos.buffer_pos; + iterator.done = scan_finder->iterator.done; + return; + } } } while (!line_found); iterator.pos.buffer_idx = scan_finder->result.pre_previous_line_start.buffer_idx; @@ -1070,7 +1146,7 @@ void StringValueScanner::FinalizeChunkProcess() { } iterator.done = FinishedFile(); if (result.null_padding && result.number_of_rows < STANDARD_VECTOR_SIZE) { - while (result.cur_col_id < result.number_of_columns) { + while (result.chunk_col_id < result.parse_chunk.ColumnCount()) { result.validity_mask[result.chunk_col_id++]->SetInvalid(result.number_of_rows); result.cur_col_id++; } diff --git a/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp b/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp index 2778adfc8768..9009210359f1 100644 --- a/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +++ b/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" namespace duckdb { @@ -94,10 +94,12 @@ SnifferResult CSVSniffer::SniffCSV(bool force_match) { // 5. Type Replacement ReplaceTypes(); if (!best_candidate->error_handler->errors.empty() && !options.ignore_errors) { - for (auto &error : best_candidate->error_handler->errors) { - if (error.second.type == CSVErrorType::MAXIMUM_LINE_SIZE) { - // If it's a maximul line size error, we can do it now. - error_handler->Error(error.second); + for (auto &error_vector : best_candidate->error_handler->errors) { + for (auto &error : error_vector.second) { + if (error.type == CSVErrorType::MAXIMUM_LINE_SIZE) { + // If it's a maximum line size error, we can do it now. + error_handler->Error(error); + } } } auto error = CSVError::SniffingError(options.file_path); diff --git a/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp b/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp index d0ba53d9a411..7e23a6d1cc4b 100644 --- a/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +++ b/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/main/client_data.hpp" namespace duckdb { @@ -89,6 +89,10 @@ void CSVSniffer::AnalyzeDialectCandidate(unique_ptr scanner, idx_t &best_consistent_rows, idx_t &prev_padding_count) { // The sniffed_column_counts variable keeps track of the number of columns found for each row auto &sniffed_column_counts = scanner->ParseChunk(); + if (sniffed_column_counts.error) { + // This candidate has an error (i.e., over maximum line size or never unquoting quoted values) + return; + } idx_t start_row = options.dialect_options.skip_rows.GetValue(); idx_t consistent_rows = 0; idx_t num_cols = sniffed_column_counts.result_position == 0 ? 1 : sniffed_column_counts[start_row]; @@ -230,15 +234,14 @@ void CSVSniffer::RefineCandidates() { // Only one candidate nothing to refine or all candidates already checked return; } + vector> successful_candidates; for (auto &cur_candidate : candidates) { for (idx_t i = 1; i <= options.sample_size_chunks; i++) { bool finished_file = cur_candidate->FinishedFile(); if (finished_file || i == options.sample_size_chunks) { - // we finished the file or our chunk sample successfully: stop - auto successful_candidate = std::move(cur_candidate); - candidates.clear(); - candidates.emplace_back(std::move(successful_candidate)); - return; + // we finished the file or our chunk sample successfully + successful_candidates.push_back(std::move(cur_candidate)); + break; } if (!RefineCandidateNextChunk(*cur_candidate) || cur_candidate->GetResult().error) { // This candidate failed, move to the next one @@ -246,7 +249,25 @@ void CSVSniffer::RefineCandidates() { } } } + // If we have multiple candidates with quotes set, we will give the preference to ones + // that have actually quoted values, otherwise we will choose quotes = \0 candidates.clear(); + if (!successful_candidates.empty()) { + unique_ptr cc_best_candidate; + for (idx_t i = 0; i < successful_candidates.size(); i++) { + cc_best_candidate = std::move(successful_candidates[i]); + if (cc_best_candidate->state_machine->state_machine_options.quote != '\0' && + cc_best_candidate->ever_quoted) { + candidates.clear(); + candidates.push_back(std::move(cc_best_candidate)); + return; + } + if (cc_best_candidate->state_machine->state_machine_options.quote == '\0') { + candidates.push_back(std::move(cc_best_candidate)); + } + } + return; + } return; } diff --git a/src/execution/operator/csv_scanner/sniffer/header_detection.cpp b/src/execution/operator/csv_scanner/sniffer/header_detection.cpp index a20980876813..a52e2aeae884 100644 --- a/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +++ b/src/execution/operator/csv_scanner/sniffer/header_detection.cpp @@ -1,6 +1,6 @@ #include "duckdb/common/types/cast_helpers.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "utf8proc.hpp" namespace duckdb { @@ -93,9 +93,51 @@ static string NormalizeColumnName(const string &col_name) { } return col_name_cleaned; } + +// If our columns were set by the user, we verify if their names match with the first row +bool CSVSniffer::DetectHeaderWithSetColumn() { + bool has_header = true; + bool all_varchar = true; + bool first_row_consistent = true; + // User set the names, we must check if they match the first row + // We do a +1 to check for situations where the csv file has an extra all null column + if (set_columns.Size() != best_header_row.size() && set_columns.Size() + 1 != best_header_row.size()) { + return false; + } else { + // Let's do a match-aroo + for (idx_t i = 0; i < set_columns.Size(); i++) { + if (best_header_row[i].IsNull()) { + return false; + } + if (best_header_row[i] != (*set_columns.names)[i]) { + has_header = false; + break; + } + } + } + if (!has_header) { + // We verify if the types are consistent + for (idx_t col = 0; col < set_columns.Size(); col++) { + auto dummy_val = best_header_row[col]; + // try cast to sql_type of column + const auto &sql_type = (*set_columns.types)[col]; + if (sql_type != LogicalType::VARCHAR) { + all_varchar = false; + if (!TryCastValue(options.dialect_options, options.decimal_separator, dummy_val, sql_type)) { + first_row_consistent = false; + } + } + } + if (all_varchar) { + // Can't be the header + return false; + } + return !first_row_consistent; + } + return has_header; +} void CSVSniffer::DetectHeader() { auto &sniffer_state_machine = best_candidate->GetStateMachine(); - if (best_header_row.empty()) { sniffer_state_machine.dialect_options.header = false; for (idx_t col = 0; col < sniffer_state_machine.dialect_options.num_cols; col++) { @@ -119,25 +161,36 @@ void CSVSniffer::DetectHeader() { error_handler->Error(error); } bool all_varchar = true; - for (idx_t col = 0; col < best_header_row.size(); col++) { - auto dummy_val = best_header_row[col]; - if (!dummy_val.IsNull()) { - first_row_nulls = false; - } + bool has_header; - // try cast to sql_type of column - const auto &sql_type = best_sql_types_candidates_per_column_idx[col].back(); - if (sql_type != LogicalType::VARCHAR) { - all_varchar = false; - if (!TryCastValue(sniffer_state_machine, dummy_val, sql_type)) { - first_row_consistent = false; + if (set_columns.IsSet()) { + has_header = DetectHeaderWithSetColumn(); + } else { + for (idx_t col = 0; col < best_header_row.size(); col++) { + auto dummy_val = best_header_row[col]; + if (!dummy_val.IsNull()) { + first_row_nulls = false; } + // try cast to sql_type of column + const auto &sql_type = best_sql_types_candidates_per_column_idx[col].back(); + if (sql_type != LogicalType::VARCHAR) { + all_varchar = false; + if (!TryCastValue(sniffer_state_machine.dialect_options, + sniffer_state_machine.options.decimal_separator, dummy_val, sql_type)) { + first_row_consistent = false; + } + } + } + // Our header is only false if types are not all varchar, and rows are consistent + if (all_varchar || first_row_nulls) { + has_header = true; + } else { + has_header = !first_row_consistent; } } - bool has_header; - if (!sniffer_state_machine.options.dialect_options.header.IsSetByUser()) { - has_header = (!first_row_consistent || first_row_nulls) && !all_varchar; - } else { + + if (sniffer_state_machine.options.dialect_options.header.IsSetByUser()) { + // Header is defined by user, use that. has_header = sniffer_state_machine.options.dialect_options.header.GetValue(); } // update parser info, and read, generate & set col_names based on previous findings diff --git a/src/execution/operator/csv_scanner/sniffer/type_detection.cpp b/src/execution/operator/csv_scanner/sniffer/type_detection.cpp index d78c702e7227..da9f7ed6983f 100644 --- a/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +++ b/src/execution/operator/csv_scanner/sniffer/type_detection.cpp @@ -1,5 +1,5 @@ #include "duckdb/common/operator/decimal_cast_operators.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/common/algorithm.hpp" #include "duckdb/common/string.hpp" @@ -9,7 +9,8 @@ struct TryCastFloatingOperator { static bool Operation(string_t input) { T result; string error_message; - return OP::Operation(input, result, &error_message); + CastParameters parameters(false, &error_message); + return OP::Operation(input, result, parameters); } }; @@ -83,27 +84,28 @@ string GenerateDateFormat(const string &separator, const char *format_template) return result; } -bool CSVSniffer::TryCastValue(CSVStateMachine &candidate, const Value &value, const LogicalType &sql_type) { +bool CSVSniffer::TryCastValue(const DialectOptions &dialect_options, const string &decimal_separator, + const Value &value, const LogicalType &sql_type) { if (value.IsNull()) { return true; } - if (!candidate.dialect_options.date_format.find(LogicalTypeId::DATE)->second.GetValue().Empty() && + if (!dialect_options.date_format.find(LogicalTypeId::DATE)->second.GetValue().Empty() && sql_type.id() == LogicalTypeId::DATE) { date_t result; string error_message; - return candidate.dialect_options.date_format.find(LogicalTypeId::DATE) + return dialect_options.date_format.find(LogicalTypeId::DATE) ->second.GetValue() .TryParseDate(string_t(StringValue::Get(value)), result, error_message); } - if (!candidate.dialect_options.date_format.find(LogicalTypeId::TIMESTAMP)->second.GetValue().Empty() && + if (!dialect_options.date_format.find(LogicalTypeId::TIMESTAMP)->second.GetValue().Empty() && sql_type.id() == LogicalTypeId::TIMESTAMP) { timestamp_t result; string error_message; - return candidate.dialect_options.date_format.find(LogicalTypeId::TIMESTAMP) + return dialect_options.date_format.find(LogicalTypeId::TIMESTAMP) ->second.GetValue() .TryParseTimestamp(string_t(StringValue::Get(value)), result, error_message); } - if (candidate.options.decimal_separator != "." && (sql_type.id() == LogicalTypeId::DOUBLE)) { + if (decimal_separator != "." && (sql_type.id() == LogicalTypeId::DOUBLE)) { return TryCastFloatingOperator::Operation(StringValue::Get(value)); } Value new_value; @@ -123,6 +125,11 @@ void CSVSniffer::InitializeDateAndTimeStampDetection(CSVStateMachine &candidate, auto &format_candidate = format_candidates[sql_type.id()]; if (!format_candidate.initialized) { format_candidate.initialized = true; + // if user set a format, we add that as well + auto user_format = options.dialect_options.date_format.find(sql_type.id()); + if (user_format->second.IsSetByUser()) { + format_candidate.format.emplace_back(user_format->second.GetValue().format_specifier); + } // order by preference auto entry = format_template_candidates.find(sql_type.id()); if (entry != format_template_candidates.end()) { @@ -184,6 +191,7 @@ void CSVSniffer::DetectDateAndTimeStampFormats(CSVStateMachine &candidate, const void CSVSniffer::DetectTypes() { idx_t min_varchar_cols = max_columns_found + 1; + idx_t min_errors = NumericLimits::Maximum(); vector return_types; // check which info candidate leads to minimum amount of non-varchar columns... for (auto &candidate_cc : candidates) { @@ -238,7 +246,8 @@ void CSVSniffer::DetectTypes() { // Nothing to convert it to continue; } - if (TryCastValue(sniffing_state_machine, dummy_val, sql_type)) { + if (TryCastValue(sniffing_state_machine.dialect_options, + sniffing_state_machine.options.decimal_separator, dummy_val, sql_type)) { break; } else { if (row_idx != start_idx_detection && cur_top_candidate == LogicalType::BOOLEAN) { @@ -268,7 +277,9 @@ void CSVSniffer::DetectTypes() { // it's good if the dialect creates more non-varchar columns, but only if we sacrifice < 30% of // best_num_cols. - if (varchar_cols < min_varchar_cols && info_sql_types_candidates.size() > (max_columns_found * 0.7)) { + if (varchar_cols < min_varchar_cols && info_sql_types_candidates.size() > (max_columns_found * 0.7) && + (!options.ignore_errors || candidate->error_handler->errors.size() < min_errors)) { + min_errors = candidate->error_handler->errors.size(); best_header_row.clear(); // we have a new best_options candidate best_candidate = std::move(candidate); @@ -286,7 +297,7 @@ void CSVSniffer::DetectTypes() { } if (!best_candidate) { auto error = CSVError::SniffingError(options.file_path); - error_handler->Error(error); + error_handler->Error(error, true); } // Assert that it's all good at this point. D_ASSERT(best_candidate && !best_format_candidates.empty()); diff --git a/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp b/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp index 615fd5562a03..8d3fe4127f7d 100644 --- a/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +++ b/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp @@ -1,5 +1,5 @@ -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_casting.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_casting.hpp" namespace duckdb { @@ -11,16 +11,18 @@ bool CSVSniffer::TryCastVector(Vector &parse_chunk_col, idx_t size, const Logica sql_type == LogicalTypeId::DATE) { // use the date format to cast the chunk string error_message; + CastParameters parameters(false, &error_message); idx_t line_error; return CSVCast::TryCastDateVector(sniffing_state_machine.dialect_options.date_format, parse_chunk_col, - dummy_result, size, error_message, line_error); + dummy_result, size, parameters, line_error); } if (!sniffing_state_machine.dialect_options.date_format[LogicalTypeId::TIMESTAMP].GetValue().Empty() && sql_type == LogicalTypeId::TIMESTAMP) { // use the timestamp format to cast the chunk string error_message; + CastParameters parameters(false, &error_message); return CSVCast::TryCastTimestampVector(sniffing_state_machine.dialect_options.date_format, parse_chunk_col, - dummy_result, size, error_message); + dummy_result, size, parameters); } // target type is not varchar: perform a cast string error_message; diff --git a/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp b/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp index 904c412b344f..e3d586689887 100644 --- a/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +++ b/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" namespace duckdb { void CSVSniffer::ReplaceTypes() { @@ -23,8 +23,7 @@ void CSVSniffer::ReplaceTypes() { if (!sniffing_state_machine.options.file_options.union_by_name && found < sniffing_state_machine.options.sql_types_per_column.size()) { auto error_msg = CSVError::ColumnTypesError(options.sql_types_per_column, names); - auto error_line = LinesPerBoundary(0, 0); - error_handler->Error(error_line, error_msg); + error_handler->Error(error_msg); } return; } diff --git a/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp b/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp index c643b3348b03..665c5b392f2e 100644 --- a/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +++ b/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp @@ -1,8 +1,8 @@ -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "utf8proc_wrapper.hpp" #include "duckdb/main/error_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp" namespace duckdb { diff --git a/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp b/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp index 87b29c89628d..1f9768826edd 100644 --- a/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +++ b/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp @@ -1,10 +1,8 @@ -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp" namespace duckdb { -const string CSVStateMachineCache::STATE_KEY = "CSV_STATE_MACHINE_CACHE"; - void InitializeTransitionArray(StateMachine &transition_array, const CSVState cur_state, const CSVState state) { for (uint32_t i = 0; i < StateMachine::NUM_TRANSITIONS; i++) { transition_array[i][static_cast(cur_state)] = state; @@ -165,6 +163,33 @@ void CSVStateMachineCache::Insert(const CSVStateMachineOptions &state_machine_op transition_array.skip_quoted[escape] = false; transition_array.skip_quoted[static_cast('\n')] = false; transition_array.skip_quoted[static_cast('\r')] = false; + + transition_array.delimiter = delimiter; + transition_array.new_line = static_cast('\n'); + transition_array.carriage_return = static_cast('\r'); + transition_array.quote = quote; + transition_array.escape = escape; + + // Shift and OR to replicate across all bytes + transition_array.delimiter |= transition_array.delimiter << 8; + transition_array.delimiter |= transition_array.delimiter << 16; + transition_array.delimiter |= transition_array.delimiter << 32; + + transition_array.new_line |= transition_array.new_line << 8; + transition_array.new_line |= transition_array.new_line << 16; + transition_array.new_line |= transition_array.new_line << 32; + + transition_array.carriage_return |= transition_array.carriage_return << 8; + transition_array.carriage_return |= transition_array.carriage_return << 16; + transition_array.carriage_return |= transition_array.carriage_return << 32; + + transition_array.quote |= transition_array.quote << 8; + transition_array.quote |= transition_array.quote << 16; + transition_array.quote |= transition_array.quote << 32; + + transition_array.escape |= transition_array.escape << 8; + transition_array.escape |= transition_array.escape << 16; + transition_array.escape |= transition_array.escape << 32; } CSVStateMachineCache::CSVStateMachineCache() { @@ -195,7 +220,7 @@ const StateMachine &CSVStateMachineCache::Get(const CSVStateMachineOptions &stat CSVStateMachineCache &CSVStateMachineCache::Get(ClientContext &context) { auto &cache = ObjectCache::GetObjectCache(context); - return *cache.GetOrCreate(CSVStateMachineCache::STATE_KEY); + return *cache.GetOrCreate(CSVStateMachineCache::ObjectType()); } } // namespace duckdb diff --git a/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp b/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp index 940a7b0b7772..0532fc678a41 100644 --- a/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +++ b/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp @@ -1,6 +1,6 @@ -#include "duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp" #include "duckdb/function/table/read_csv.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" namespace duckdb { @@ -85,6 +85,10 @@ CSVFileScan::CSVFileScan(ClientContext &context, const string &file_path_p, cons names = bind_data.column_info[file_idx].names; types = bind_data.column_info[file_idx].types; options.dialect_options.num_cols = names.size(); + if (options.auto_detect) { + CSVSniffer sniffer(options, buffer_manager, state_machine_cache); + sniffer.SniffCSV(); + } state_machine = make_shared( state_machine_cache.Get(options.dialect_options.state_machine_options), options); diff --git a/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp b/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp index d5265b1c50a6..863b937f2186 100644 --- a/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +++ b/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp @@ -1,7 +1,7 @@ -#include "duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp" +#include "duckdb/execution/operator/csv_scanner/global_csv_state.hpp" #include "duckdb/main/client_data.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/execution/operator/persistent/csv_rejects_table.hpp" #include "duckdb/main/appender.hpp" @@ -40,7 +40,7 @@ CSVGlobalState::CSVGlobalState(ClientContext &context_p, const shared_ptr parallel_lock(main_mutex); idx_t total_files = bind_data.files.size(); // get the progress WITHIN the current file double progress; @@ -71,7 +71,7 @@ unique_ptr CSVGlobalState::Next() { } auto csv_scanner = make_uniq(scanner_idx++, current_file->buffer_manager, current_file->state_machine, - current_file->error_handler, current_file, current_boundary); + current_file->error_handler, current_file, false, current_boundary); return csv_scanner; } lock_guard parallel_lock(main_mutex); @@ -86,7 +86,7 @@ unique_ptr CSVGlobalState::Next() { auto ¤t_file = *file_scans.back(); auto csv_scanner = make_uniq(scanner_idx++, current_file.buffer_manager, current_file.state_machine, - current_file.error_handler, file_scans.back(), current_boundary); + current_file.error_handler, file_scans.back(), false, current_boundary); csv_scanner->buffer_tracker = current_buffer_in_use; @@ -151,51 +151,52 @@ void CSVGlobalState::FillRejectsTable() { for (auto &file : file_scans) { auto file_name = file->file_path; auto &errors = file->error_handler->errors; - for (auto &error_info : errors) { - if (error_info.second.type != CSVErrorType::CAST_ERROR) { - // For now we only will use it for casting errors - continue; - } - // short circuit if we already have too many rejects - if (limit == 0 || rejects->count < limit) { - if (limit != 0 && rejects->count >= limit) { - break; + for (auto &error_vector : errors) { + for (auto &error : error_vector.second) { + if (error.type != CSVErrorType::CAST_ERROR) { + // For now we only will use it for casting errors + continue; } - rejects->count++; - auto error = &error_info.second; - auto row_line = file->error_handler->GetLine(error_info.first); - auto col_idx = error->column_idx; - auto col_name = bind_data.return_names[col_idx]; - // Add the row to the rejects table - appender.BeginRow(); - appender.Append(string_t(file_name)); - appender.Append(row_line); - appender.Append(col_idx); - appender.Append(string_t("\"" + col_name + "\"")); - appender.Append(error->row[col_idx]); - - if (!options.rejects_recovery_columns.empty()) { - child_list_t recovery_key; - for (auto &key_idx : options.rejects_recovery_column_ids) { - // Figure out if the recovery key is valid. - // If not, error out for real. - auto &value = error->row[key_idx]; - if (value.IsNull()) { - throw InvalidInputException("%s at line %llu in column %s. Parser options:\n%s ", - "Could not parse recovery column", row_line, col_name, - options.ToString()); + // short circuit if we already have too many rejects + if (limit == 0 || rejects->count < limit) { + if (limit != 0 && rejects->count >= limit) { + break; + } + rejects->count++; + auto row_line = file->error_handler->GetLine(error.error_info); + auto col_idx = error.column_idx; + auto col_name = bind_data.return_names[col_idx]; + // Add the row to the rejects table + appender.BeginRow(); + appender.Append(string_t(file_name)); + appender.Append(row_line); + appender.Append(col_idx); + appender.Append(string_t("\"" + col_name + "\"")); + appender.Append(error.row[col_idx]); + + if (!options.rejects_recovery_columns.empty()) { + child_list_t recovery_key; + for (auto &key_idx : options.rejects_recovery_column_ids) { + // Figure out if the recovery key is valid. + // If not, error out for real. + auto &value = error.row[key_idx]; + if (value.IsNull()) { + throw InvalidInputException("%s at line %llu in column %s. Parser options:\n%s ", + "Could not parse recovery column", row_line, col_name, + options.ToString()); + } + recovery_key.emplace_back(bind_data.return_names[key_idx], value); } - recovery_key.emplace_back(bind_data.return_names[key_idx], value); + appender.Append(Value::STRUCT(recovery_key)); } - appender.Append(Value::STRUCT(recovery_key)); + auto row_error_msg = + StringUtil::Format("Could not convert string '%s' to '%s'", error.row[col_idx].ToString(), + file->types[col_idx].ToString()); + appender.Append(string_t(row_error_msg)); + appender.EndRow(); } - auto row_error_msg = - StringUtil::Format("Could not convert string '%s' to '%s'", error->row[col_idx].ToString(), - file->types[col_idx].ToString()); - appender.Append(string_t(row_error_msg)); - appender.EndRow(); + appender.Close(); } - appender.Close(); } } } diff --git a/src/execution/operator/csv_scanner/util/csv_error.cpp b/src/execution/operator/csv_scanner/util/csv_error.cpp index 091e441b243f..7c5a3bb2efc9 100644 --- a/src/execution/operator/csv_scanner/util/csv_error.cpp +++ b/src/execution/operator/csv_scanner/util/csv_error.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/util/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_error.hpp" #include "duckdb/common/exception/conversion_exception.hpp" #include @@ -13,25 +13,10 @@ LinesPerBoundary::LinesPerBoundary(idx_t boundary_idx_p, idx_t lines_in_batch_p) CSVErrorHandler::CSVErrorHandler(bool ignore_errors_p) : ignore_errors(ignore_errors_p) { } -void CSVErrorHandler::Error(CSVError &csv_error) { - LinesPerBoundary mock; - Error(mock, csv_error, true); -} -void CSVErrorHandler::Error(LinesPerBoundary &error_info, CSVError &csv_error, bool force_error) { - if (ignore_errors && !force_error) { - lock_guard parallel_lock(main_mutex); - // We store this error - errors.push_back({error_info, csv_error}); - return; - } - +void CSVErrorHandler::ThrowError(CSVError csv_error) { std::ostringstream error; if (PrintLineNumber(csv_error)) { - error << "CSV Error on Line: " << GetLine(error_info) << std::endl; - } - { - lock_guard parallel_lock(main_mutex); - got_borked = true; + error << "CSV Error on Line: " << GetLine(csv_error.error_info) << std::endl; } error << csv_error.error_message; switch (csv_error.type) { @@ -46,6 +31,33 @@ void CSVErrorHandler::Error(LinesPerBoundary &error_info, CSVError &csv_error, b } } +void CSVErrorHandler::Error(CSVError csv_error, bool force_error) { + if ((ignore_errors && !force_error) || (PrintLineNumber(csv_error) && !CanGetLine(csv_error.GetBoundaryIndex()))) { + lock_guard parallel_lock(main_mutex); + // We store this error, we can't throw it now, or we are ignoring it + errors[csv_error.error_info].push_back(std::move(csv_error)); + return; + } + // Otherwise we can throw directly + ThrowError(csv_error); +} + +void CSVErrorHandler::ErrorIfNeeded() { + CSVError first_error; + { + lock_guard parallel_lock(main_mutex); + if (ignore_errors || errors.empty()) { + // Nothing to error + return; + } + first_error = errors.begin()->second[0]; + } + + if (CanGetLine(first_error.error_info.boundary_idx)) { + ThrowError(first_error); + } +} + void CSVErrorHandler::Insert(idx_t boundary_idx, idx_t rows) { lock_guard parallel_lock(main_mutex); if (lines_per_batch_map.find(boundary_idx) == lines_per_batch_map.end()) { @@ -60,12 +72,14 @@ void CSVErrorHandler::NewMaxLineSize(idx_t scan_line_size) { max_line_length = std::max(scan_line_size, max_line_length); } -CSVError::CSVError(string error_message_p, CSVErrorType type_p) - : error_message(std::move(error_message_p)), type(type_p) { +CSVError::CSVError(string error_message_p, CSVErrorType type_p, LinesPerBoundary error_info_p) + : error_message(std::move(error_message_p)), type(type_p), error_info(error_info_p) { } -CSVError::CSVError(string error_message_p, CSVErrorType type_p, idx_t column_idx_p, vector row_p) - : error_message(std::move(error_message_p)), type(type_p), column_idx(column_idx_p), row(std::move(row_p)) { +CSVError::CSVError(string error_message_p, CSVErrorType type_p, idx_t column_idx_p, vector row_p, + LinesPerBoundary error_info_p) + : error_message(std::move(error_message_p)), type(type_p), column_idx(column_idx_p), row(std::move(row_p)), + error_info(error_info_p) { } CSVError CSVError::ColumnTypesError(case_insensitive_map_t sql_types_per_column, const vector &names) { @@ -77,7 +91,7 @@ CSVError CSVError::ColumnTypesError(case_insensitive_map_t sql_types_per_ } } if (sql_types_per_column.empty()) { - return CSVError("", CSVErrorType::COLUMN_NAME_TYPE_MISMATCH); + return CSVError("", CSVErrorType::COLUMN_NAME_TYPE_MISMATCH, {}); } string exception = "COLUMN_TYPES error: Columns with names: "; for (auto &col : sql_types_per_column) { @@ -85,11 +99,11 @@ CSVError CSVError::ColumnTypesError(case_insensitive_map_t sql_types_per_ } exception.pop_back(); exception += " do not exist in the CSV File"; - return CSVError(exception, CSVErrorType::COLUMN_NAME_TYPE_MISMATCH); + return CSVError(exception, CSVErrorType::COLUMN_NAME_TYPE_MISMATCH, {}); } CSVError CSVError::CastError(const CSVReaderOptions &options, string &column_name, string &cast_error, idx_t column_idx, - vector &row) { + vector &row, LinesPerBoundary error_info) { std::ostringstream error; // Which column error << "Error when converting column \"" << column_name << "\"." << std::endl; @@ -98,15 +112,15 @@ CSVError CSVError::CastError(const CSVReaderOptions &options, string &column_nam error << std::endl; // What were the options error << options.ToString(); - return CSVError(error.str(), CSVErrorType::CAST_ERROR, column_idx, row); + return CSVError(error.str(), CSVErrorType::CAST_ERROR, column_idx, row, error_info); } -CSVError CSVError::LineSizeError(const CSVReaderOptions &options, idx_t actual_size) { +CSVError CSVError::LineSizeError(const CSVReaderOptions &options, idx_t actual_size, LinesPerBoundary error_info) { std::ostringstream error; error << "Maximum line size of " << options.maximum_line_size << " bytes exceeded. "; error << "Actual Size:" << actual_size << " bytes." << std::endl; error << options.ToString(); - return CSVError(error.str(), CSVErrorType::MAXIMUM_LINE_SIZE); + return CSVError(error.str(), CSVErrorType::MAXIMUM_LINE_SIZE, error_info); } CSVError CSVError::SniffingError(string &file_path) { @@ -114,72 +128,83 @@ CSVError CSVError::SniffingError(string &file_path) { // Which column error << "Error when sniffing file \"" << file_path << "\"." << std::endl; error << "CSV options could not be auto-detected. Consider setting parser options manually." << std::endl; - return CSVError(error.str(), CSVErrorType::SNIFFING); + return CSVError(error.str(), CSVErrorType::SNIFFING, {}); } -CSVError CSVError::NullPaddingFail(const CSVReaderOptions &options) { +CSVError CSVError::NullPaddingFail(const CSVReaderOptions &options, LinesPerBoundary error_info) { std::ostringstream error; error << " The parallel scanner does not support null_padding in conjunction with quoted new lines. Please " "disable the parallel csv reader with parallel=false" << std::endl; // What were the options error << options.ToString(); - return CSVError(error.str(), CSVErrorType::NULLPADDED_QUOTED_NEW_VALUE); + return CSVError(error.str(), CSVErrorType::NULLPADDED_QUOTED_NEW_VALUE, error_info); } CSVError CSVError::UnterminatedQuotesError(const CSVReaderOptions &options, string_t *vector_ptr, - idx_t vector_line_start, idx_t current_column) { + idx_t vector_line_start, idx_t current_column, LinesPerBoundary error_info) { std::ostringstream error; error << "Value with unterminated quote found." << std::endl; error << std::endl; // What were the options error << options.ToString(); - return CSVError(error.str(), CSVErrorType::UNTERMINATED_QUOTES); + return CSVError(error.str(), CSVErrorType::UNTERMINATED_QUOTES, error_info); } CSVError CSVError::IncorrectColumnAmountError(const CSVReaderOptions &options, string_t *vector_ptr, - idx_t vector_line_start, idx_t actual_columns) { + idx_t vector_line_start, idx_t actual_columns, + LinesPerBoundary error_info) { std::ostringstream error; // How many columns were expected and how many were found error << "Expected Number of Columns: " << options.dialect_options.num_cols << " Found: " << actual_columns << std::endl; // What were the options error << options.ToString(); - return CSVError(error.str(), CSVErrorType::INCORRECT_COLUMN_AMOUNT); + return CSVError(error.str(), CSVErrorType::INCORRECT_COLUMN_AMOUNT, error_info); +} + +CSVError CSVError::InvalidUTF8(const CSVReaderOptions &options, LinesPerBoundary error_info) { + std::ostringstream error; + // How many columns were expected and how many were found + error << "Invalid unicode (byte sequence mismatch) detected." << std::endl; + // What were the options + error << options.ToString(); + return CSVError(error.str(), CSVErrorType::INVALID_UNICODE, error_info); } bool CSVErrorHandler::PrintLineNumber(CSVError &error) { + if (!print_line) { + return false; + } switch (error.type) { case CSVErrorType::CAST_ERROR: case CSVErrorType::UNTERMINATED_QUOTES: case CSVErrorType::INCORRECT_COLUMN_AMOUNT: case CSVErrorType::MAXIMUM_LINE_SIZE: case CSVErrorType::NULLPADDED_QUOTED_NEW_VALUE: + case CSVErrorType::INVALID_UNICODE: return true; default: return false; } } -idx_t CSVErrorHandler::GetLine(LinesPerBoundary &error_info) { - idx_t current_line = 1 + error_info.lines_in_batch; // We start from one, since the lines are 1-indexed - for (idx_t boundary_idx = 0; boundary_idx < error_info.boundary_idx; boundary_idx++) { - bool batch_done = false; - while (!batch_done) { - if (boundary_idx == 0) { - // if it's the first boundary, we just return - break; - } - lock_guard parallel_lock(main_mutex); - if (lines_per_batch_map.find(boundary_idx) != lines_per_batch_map.end()) { - batch_done = true; - current_line += lines_per_batch_map[boundary_idx].lines_in_batch; - } - if (got_borked) { - return current_line; - } +bool CSVErrorHandler::CanGetLine(idx_t boundary_index) { + for (idx_t i = 0; i < boundary_index; i++) { + if (lines_per_batch_map.find(i) == lines_per_batch_map.end()) { + return false; } } + return true; +} + +idx_t CSVErrorHandler::GetLine(const LinesPerBoundary &error_info) { + lock_guard parallel_lock(main_mutex); + // We start from one, since the lines are 1-indexed + idx_t current_line = 1 + error_info.lines_in_batch; + for (idx_t boundary_idx = 0; boundary_idx < error_info.boundary_idx; boundary_idx++) { + current_line += lines_per_batch_map[boundary_idx].lines_in_batch; + } return current_line; } diff --git a/src/execution/operator/csv_scanner/util/csv_reader_options.cpp b/src/execution/operator/csv_scanner/util/csv_reader_options.cpp index f59c35602ec6..d05db0bb8fb2 100644 --- a/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +++ b/src/execution/operator/csv_scanner/util/csv_reader_options.cpp @@ -1,4 +1,4 @@ -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/common/bind_helpers.hpp" #include "duckdb/common/vector_size.hpp" #include "duckdb/common/string_util.hpp" diff --git a/src/execution/operator/helper/physical_limit.cpp b/src/execution/operator/helper/physical_limit.cpp index 4fd75344b0a6..936cd311c69a 100644 --- a/src/execution/operator/helper/physical_limit.cpp +++ b/src/execution/operator/helper/physical_limit.cpp @@ -8,12 +8,10 @@ namespace duckdb { -PhysicalLimit::PhysicalLimit(vector types, idx_t limit, idx_t offset, - unique_ptr limit_expression, unique_ptr offset_expression, +PhysicalLimit::PhysicalLimit(vector types, BoundLimitNode limit_val_p, BoundLimitNode offset_val_p, idx_t estimated_cardinality) - : PhysicalOperator(PhysicalOperatorType::LIMIT, std::move(types), estimated_cardinality), limit_value(limit), - offset_value(offset), limit_expression(std::move(limit_expression)), - offset_expression(std::move(offset_expression)) { + : PhysicalOperator(PhysicalOperatorType::LIMIT, std::move(types), estimated_cardinality), + limit_val(std::move(limit_val_p)), offset_val(std::move(offset_val_p)) { } //===--------------------------------------------------------------------===// @@ -36,13 +34,12 @@ class LimitLocalState : public LocalSinkState { public: explicit LimitLocalState(ClientContext &context, const PhysicalLimit &op) : current_offset(0), data(context, op.types, true) { - this->limit = op.limit_expression ? DConstants::INVALID_INDEX : op.limit_value; - this->offset = op.offset_expression ? DConstants::INVALID_INDEX : op.offset_value; + PhysicalLimit::SetInitialLimits(op.limit_val, op.offset_val, limit, offset); } idx_t current_offset; - idx_t limit; - idx_t offset; + optional_idx limit; + optional_idx offset; BatchedDataCollection data; }; @@ -54,38 +51,56 @@ unique_ptr PhysicalLimit::GetLocalSinkState(ExecutionContext &co return make_uniq(context.client, *this); } -bool PhysicalLimit::ComputeOffset(ExecutionContext &context, DataChunk &input, idx_t &limit, idx_t &offset, - idx_t current_offset, idx_t &max_element, Expression *limit_expression, - Expression *offset_expression) { - if (limit != DConstants::INVALID_INDEX && offset != DConstants::INVALID_INDEX) { - max_element = limit + offset; - if ((limit == 0 || current_offset >= max_element) && !(limit_expression || offset_expression)) { - return false; - } +void PhysicalLimit::SetInitialLimits(const BoundLimitNode &limit_val, const BoundLimitNode &offset_val, + optional_idx &limit, optional_idx &offset) { + switch (limit_val.Type()) { + case LimitNodeType::CONSTANT_VALUE: + limit = limit_val.GetConstantValue(); + break; + case LimitNodeType::UNSET: + limit = MAX_LIMIT_VALUE; + break; + default: + break; } + switch (offset_val.Type()) { + case LimitNodeType::CONSTANT_VALUE: + offset = offset_val.GetConstantValue(); + break; + case LimitNodeType::UNSET: + offset = 0; + break; + default: + break; + } +} - // get the next chunk from the child - if (limit == DConstants::INVALID_INDEX) { - limit = 1ULL << 62ULL; - Value val = GetDelimiter(context, input, limit_expression); +bool PhysicalLimit::ComputeOffset(ExecutionContext &context, DataChunk &input, optional_idx &limit, + optional_idx &offset, idx_t current_offset, idx_t &max_element, + const BoundLimitNode &limit_val, const BoundLimitNode &offset_val) { + if (!limit.IsValid()) { + Value val = GetDelimiter(context, input, limit_val.GetValueExpression()); if (!val.IsNull()) { limit = val.GetValue(); + } else { + limit = MAX_LIMIT_VALUE; } - if (limit > 1ULL << 62ULL) { - throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", limit, 1ULL << 62ULL); + if (limit.GetIndex() > MAX_LIMIT_VALUE) { + throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", limit.GetIndex(), MAX_LIMIT_VALUE); } } - if (offset == DConstants::INVALID_INDEX) { - offset = 0; - Value val = GetDelimiter(context, input, offset_expression); + if (!offset.IsValid()) { + Value val = GetDelimiter(context, input, offset_val.GetValueExpression()); if (!val.IsNull()) { offset = val.GetValue(); + } else { + offset = 0; } - if (offset > 1ULL << 62ULL) { - throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", offset, 1ULL << 62ULL); + if (offset.GetIndex() > MAX_LIMIT_VALUE) { + throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", offset.GetIndex(), MAX_LIMIT_VALUE); } } - max_element = limit + offset; + max_element = limit.GetIndex() + offset.GetIndex(); if (limit == 0 || current_offset >= max_element) { return false; } @@ -100,8 +115,7 @@ SinkResultType PhysicalLimit::Sink(ExecutionContext &context, DataChunk &chunk, auto &offset = state.offset; idx_t max_element; - if (!ComputeOffset(context, chunk, limit, offset, state.current_offset, max_element, limit_expression.get(), - offset_expression.get())) { + if (!ComputeOffset(context, chunk, limit, offset, state.current_offset, max_element, limit_val, offset_val)) { return SinkResultType::FINISHED; } auto max_cardinality = max_element - state.current_offset; @@ -121,8 +135,12 @@ SinkCombineResultType PhysicalLimit::Combine(ExecutionContext &context, Operator auto &state = input.local_state.Cast(); lock_guard lock(gstate.glock); - gstate.limit = state.limit; - gstate.offset = state.offset; + if (state.limit.IsValid()) { + gstate.limit = state.limit.GetIndex(); + } + if (state.offset.IsValid()) { + gstate.offset = state.offset.GetIndex(); + } gstate.data.Merge(state.data); return SinkCombineResultType::FINISHED; @@ -209,12 +227,12 @@ bool PhysicalLimit::HandleOffset(DataChunk &input, idx_t ¤t_offset, idx_t return true; } -Value PhysicalLimit::GetDelimiter(ExecutionContext &context, DataChunk &input, Expression *expr) { +Value PhysicalLimit::GetDelimiter(ExecutionContext &context, DataChunk &input, const Expression &expr) { DataChunk limit_chunk; - vector types {expr->return_type}; + vector types {expr.return_type}; auto &allocator = Allocator::Get(context.client); limit_chunk.Initialize(allocator, types); - ExpressionExecutor limit_executor(context.client, expr); + ExpressionExecutor limit_executor(context.client, &expr); auto input_size = input.size(); input.SetCardinality(1); limit_executor.Execute(input, limit_chunk); diff --git a/src/execution/operator/helper/physical_limit_percent.cpp b/src/execution/operator/helper/physical_limit_percent.cpp index a65cc219c938..69794be0905c 100644 --- a/src/execution/operator/helper/physical_limit_percent.cpp +++ b/src/execution/operator/helper/physical_limit_percent.cpp @@ -7,6 +7,13 @@ namespace duckdb { +PhysicalLimitPercent::PhysicalLimitPercent(vector types, BoundLimitNode limit_val_p, + BoundLimitNode offset_val_p, idx_t estimated_cardinality) + : PhysicalOperator(PhysicalOperatorType::LIMIT_PERCENT, std::move(types), estimated_cardinality), + limit_val(std::move(limit_val_p)), offset_val(std::move(offset_val_p)) { + D_ASSERT(limit_val.Type() == LimitNodeType::CONSTANT_PERCENTAGE || + limit_val.Type() == LimitNodeType::EXPRESSION_PERCENTAGE); +} //===--------------------------------------------------------------------===// // Sink //===--------------------------------------------------------------------===// @@ -14,28 +21,37 @@ class LimitPercentGlobalState : public GlobalSinkState { public: explicit LimitPercentGlobalState(ClientContext &context, const PhysicalLimitPercent &op) : current_offset(0), data(context, op.GetTypes()) { - if (!op.limit_expression) { - this->limit_percent = op.limit_percent; - is_limit_percent_delimited = true; - } else { - this->limit_percent = 100.0; + switch (op.limit_val.Type()) { + case LimitNodeType::CONSTANT_PERCENTAGE: + this->limit_percent = op.limit_val.GetConstantPercentage(); + this->is_limit_set = true; + break; + case LimitNodeType::EXPRESSION_PERCENTAGE: + this->is_limit_set = false; + break; + default: + throw InternalException("Unsupported type for limit value in PhysicalLimitPercent"); } - - if (!op.offset_expression) { - this->offset = op.offset_value; - is_offset_delimited = true; - } else { + switch (op.offset_val.Type()) { + case LimitNodeType::CONSTANT_VALUE: + this->offset = op.offset_val.GetConstantValue(); + break; + case LimitNodeType::UNSET: this->offset = 0; + break; + case LimitNodeType::EXPRESSION_VALUE: + break; + default: + throw InternalException("Unsupported type for offset value in PhysicalLimitPercent"); } } idx_t current_offset; double limit_percent; - idx_t offset; + optional_idx offset; ColumnDataCollection data; - bool is_limit_percent_delimited = false; - bool is_offset_delimited = false; + bool is_limit_set = false; }; unique_ptr PhysicalLimitPercent::GetGlobalSinkState(ClientContext &context) const { @@ -49,28 +65,31 @@ SinkResultType PhysicalLimitPercent::Sink(ExecutionContext &context, DataChunk & auto &offset = state.offset; // get the next chunk from the child - if (!state.is_limit_percent_delimited) { - Value val = PhysicalLimit::GetDelimiter(context, chunk, limit_expression.get()); + if (!state.is_limit_set) { + Value val = PhysicalLimit::GetDelimiter(context, chunk, limit_val.GetPercentageExpression()); if (!val.IsNull()) { limit_percent = val.GetValue(); + } else { + limit_percent = 100.0; } if (limit_percent < 0.0) { throw BinderException("Percentage value(%f) can't be negative", limit_percent); } - state.is_limit_percent_delimited = true; + state.is_limit_set = true; } - if (!state.is_offset_delimited) { - Value val = PhysicalLimit::GetDelimiter(context, chunk, offset_expression.get()); + if (!state.offset.IsValid()) { + Value val = PhysicalLimit::GetDelimiter(context, chunk, offset_val.GetValueExpression()); if (!val.IsNull()) { offset = val.GetValue(); + } else { + offset = 0; } - if (offset > 1ULL << 62ULL) { - throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", offset, 1ULL << 62ULL); + if (offset.GetIndex() > 1ULL << 62ULL) { + throw BinderException("Max value %lld for LIMIT/OFFSET is %lld", offset.GetIndex(), 1ULL << 62ULL); } - state.is_offset_delimited = true; } - if (!PhysicalLimit::HandleOffset(chunk, state.current_offset, offset, DConstants::INVALID_INDEX)) { + if (!PhysicalLimit::HandleOffset(chunk, state.current_offset, offset.GetIndex(), NumericLimits::Maximum())) { return SinkResultType::NEED_MORE_INPUT; } @@ -83,15 +102,14 @@ SinkResultType PhysicalLimitPercent::Sink(ExecutionContext &context, DataChunk & //===--------------------------------------------------------------------===// class LimitPercentOperatorState : public GlobalSourceState { public: - explicit LimitPercentOperatorState(const PhysicalLimitPercent &op) - : limit(DConstants::INVALID_INDEX), current_offset(0) { + explicit LimitPercentOperatorState(const PhysicalLimitPercent &op) : current_offset(0) { D_ASSERT(op.sink_state); auto &gstate = op.sink_state->Cast(); gstate.data.InitializeScan(scan_state); } ColumnDataScanState scan_state; - idx_t limit; + optional_idx limit; idx_t current_offset; }; @@ -108,33 +126,39 @@ SourceResultType PhysicalLimitPercent::GetData(ExecutionContext &context, DataCh auto &limit = state.limit; auto ¤t_offset = state.current_offset; - if (gstate.is_limit_percent_delimited && limit == DConstants::INVALID_INDEX) { + if (!limit.IsValid()) { + if (!gstate.is_limit_set) { + // no limit value and we have not set limit_percent + // we are running LIMIT % with a subquery over an empty table + D_ASSERT(gstate.data.Count() == 0); + return SourceResultType::FINISHED; + } idx_t count = gstate.data.Count(); if (count > 0) { - count += offset; + count += offset.GetIndex(); } if (Value::IsNan(percent_limit) || percent_limit < 0 || percent_limit > 100) { throw OutOfRangeException("Limit percent out of range, should be between 0% and 100%"); } - double limit_dbl = percent_limit / 100 * count; - if (limit_dbl > count) { + auto limit_percentage = idx_t(percent_limit / 100.0 * double(count)); + if (limit_percentage > count) { limit = count; } else { - limit = idx_t(limit_dbl); + limit = idx_t(limit_percentage); } if (limit == 0) { return SourceResultType::FINISHED; } } - if (current_offset >= limit) { + if (current_offset >= limit.GetIndex()) { return SourceResultType::FINISHED; } if (!gstate.data.Scan(state.scan_state, chunk)) { return SourceResultType::FINISHED; } - PhysicalLimit::HandleOffset(chunk, current_offset, 0, limit); + PhysicalLimit::HandleOffset(chunk, current_offset, 0, limit.GetIndex()); return SourceResultType::HAVE_MORE_OUTPUT; } diff --git a/src/execution/operator/helper/physical_streaming_limit.cpp b/src/execution/operator/helper/physical_streaming_limit.cpp index 5fbd56a3aaa4..881375b95e71 100644 --- a/src/execution/operator/helper/physical_streaming_limit.cpp +++ b/src/execution/operator/helper/physical_streaming_limit.cpp @@ -3,13 +3,10 @@ namespace duckdb { -PhysicalStreamingLimit::PhysicalStreamingLimit(vector types, idx_t limit, idx_t offset, - unique_ptr limit_expression, - unique_ptr offset_expression, idx_t estimated_cardinality, - bool parallel) +PhysicalStreamingLimit::PhysicalStreamingLimit(vector types, BoundLimitNode limit_val_p, + BoundLimitNode offset_val_p, idx_t estimated_cardinality, bool parallel) : PhysicalOperator(PhysicalOperatorType::STREAMING_LIMIT, std::move(types), estimated_cardinality), - limit_value(limit), offset_value(offset), limit_expression(std::move(limit_expression)), - offset_expression(std::move(offset_expression)), parallel(parallel) { + limit_val(std::move(limit_val_p)), offset_val(std::move(offset_val_p)), parallel(parallel) { } //===--------------------------------------------------------------------===// @@ -18,12 +15,11 @@ PhysicalStreamingLimit::PhysicalStreamingLimit(vector types, idx_t class StreamingLimitOperatorState : public OperatorState { public: explicit StreamingLimitOperatorState(const PhysicalStreamingLimit &op) { - this->limit = op.limit_expression ? DConstants::INVALID_INDEX : op.limit_value; - this->offset = op.offset_expression ? DConstants::INVALID_INDEX : op.offset_value; + PhysicalLimit::SetInitialLimits(op.limit_val, op.offset_val, limit, offset); } - idx_t limit; - idx_t offset; + optional_idx limit; + optional_idx offset; }; class StreamingLimitGlobalState : public GlobalOperatorState { @@ -50,11 +46,11 @@ OperatorResultType PhysicalStreamingLimit::Execute(ExecutionContext &context, Da auto &offset = state.offset; idx_t current_offset = gstate.current_offset.fetch_add(input.size()); idx_t max_element; - if (!PhysicalLimit::ComputeOffset(context, input, limit, offset, current_offset, max_element, - limit_expression.get(), offset_expression.get())) { + if (!PhysicalLimit::ComputeOffset(context, input, limit, offset, current_offset, max_element, limit_val, + offset_val)) { return OperatorResultType::FINISHED; } - if (PhysicalLimit::HandleOffset(input, current_offset, offset, limit)) { + if (PhysicalLimit::HandleOffset(input, current_offset, offset.GetIndex(), limit.GetIndex())) { chunk.Reference(input); } return OperatorResultType::NEED_MORE_INPUT; diff --git a/src/execution/operator/helper/physical_transaction.cpp b/src/execution/operator/helper/physical_transaction.cpp index 08ad8c59909c..9361cbd54289 100644 --- a/src/execution/operator/helper/physical_transaction.cpp +++ b/src/execution/operator/helper/physical_transaction.cpp @@ -2,6 +2,10 @@ #include "duckdb/main/client_context.hpp" #include "duckdb/main/valid_checker.hpp" #include "duckdb/common/exception/transaction_exception.hpp" +#include "duckdb/transaction/meta_transaction.hpp" +#include "duckdb/transaction/transaction_manager.hpp" +#include "duckdb/main/config.hpp" +#include "duckdb/main/database_manager.hpp" namespace duckdb { @@ -23,6 +27,14 @@ SourceResultType PhysicalTransaction::GetData(ExecutionContext &context, DataChu // prevent it from being closed after this query, hence // preserving the transaction context for the next query client.transaction.SetAutoCommit(false); + auto &config = DBConfig::GetConfig(context.client); + if (config.options.immediate_transaction_mode) { + // if immediate transaction mode is enabled then start all transactions immediately + auto databases = DatabaseManager::Get(client).GetDatabases(client); + for (auto db : databases) { + context.client.transaction.ActiveTransaction().GetTransaction(db.get()); + } + } } else { throw TransactionException("cannot start a transaction within a transaction"); } diff --git a/src/execution/operator/join/physical_hash_join.cpp b/src/execution/operator/join/physical_hash_join.cpp index 8a4959035150..a52ccc38e3f5 100644 --- a/src/execution/operator/join/physical_hash_join.cpp +++ b/src/execution/operator/join/physical_hash_join.cpp @@ -10,6 +10,7 @@ #include "duckdb/parallel/interrupt.hpp" #include "duckdb/parallel/pipeline.hpp" #include "duckdb/parallel/thread_context.hpp" +#include "duckdb/parallel/executor_task.hpp" #include "duckdb/planner/expression/bound_aggregate_expression.hpp" #include "duckdb/planner/expression/bound_reference_expression.hpp" #include "duckdb/storage/buffer_manager.hpp" @@ -288,7 +289,7 @@ class HashJoinFinalizeTask : public ExecutorTask { public: HashJoinFinalizeTask(shared_ptr event_p, ClientContext &context, HashJoinGlobalSinkState &sink_p, idx_t chunk_idx_from_p, idx_t chunk_idx_to_p, bool parallel_p) - : ExecutorTask(context), event(std::move(event_p)), sink(sink_p), chunk_idx_from(chunk_idx_from_p), + : ExecutorTask(context, std::move(event_p)), sink(sink_p), chunk_idx_from(chunk_idx_from_p), chunk_idx_to(chunk_idx_to_p), parallel(parallel_p) { } @@ -299,7 +300,6 @@ class HashJoinFinalizeTask : public ExecutorTask { } private: - shared_ptr event; HashJoinGlobalSinkState &sink; idx_t chunk_idx_from; idx_t chunk_idx_to; @@ -374,7 +374,7 @@ class HashJoinRepartitionTask : public ExecutorTask { public: HashJoinRepartitionTask(shared_ptr event_p, ClientContext &context, JoinHashTable &global_ht, JoinHashTable &local_ht) - : ExecutorTask(context), event(std::move(event_p)), global_ht(global_ht), local_ht(local_ht) { + : ExecutorTask(context, std::move(event_p)), global_ht(global_ht), local_ht(local_ht) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { @@ -384,8 +384,6 @@ class HashJoinRepartitionTask : public ExecutorTask { } private: - shared_ptr event; - JoinHashTable &global_ht; JoinHashTable &local_ht; }; @@ -1086,4 +1084,21 @@ double PhysicalHashJoin::GetProgress(ClientContext &context, GlobalSourceState & return progress * 100.0; } +string PhysicalHashJoin::ParamsToString() const { + string result = EnumUtil::ToString(join_type) + "\n"; + for (auto &it : conditions) { + string op = ExpressionTypeToOperator(it.comparison); + result += it.left->GetName() + " " + op + " " + it.right->GetName() + "\n"; + } + result += "\n[INFOSEPARATOR]\n"; + if (perfect_join_statistics.is_build_small) { + // perfect hash join + result += "Build Min: " + perfect_join_statistics.build_min.ToString() + "\n"; + result += "Build Max: " + perfect_join_statistics.build_max.ToString() + "\n"; + result += "\n[INFOSEPARATOR]\n"; + } + result += StringUtil::Format("EC: %llu\n", estimated_cardinality); + return result; +} + } // namespace duckdb diff --git a/src/execution/operator/join/physical_range_join.cpp b/src/execution/operator/join/physical_range_join.cpp index a87ffd2ba1d6..4603afbdb429 100644 --- a/src/execution/operator/join/physical_range_join.cpp +++ b/src/execution/operator/join/physical_range_join.cpp @@ -12,6 +12,7 @@ #include "duckdb/main/client_context.hpp" #include "duckdb/parallel/base_pipeline_event.hpp" #include "duckdb/parallel/thread_context.hpp" +#include "duckdb/parallel/executor_task.hpp" #include @@ -90,7 +91,7 @@ class RangeJoinMergeTask : public ExecutorTask { public: RangeJoinMergeTask(shared_ptr event_p, ClientContext &context, GlobalSortedTable &table) - : ExecutorTask(context), event(std::move(event_p)), context(context), table(table) { + : ExecutorTask(context, std::move(event_p)), context(context), table(table) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { @@ -104,7 +105,6 @@ class RangeJoinMergeTask : public ExecutorTask { } private: - shared_ptr event; ClientContext &context; GlobalSortedTable &table; }; diff --git a/src/execution/operator/order/physical_order.cpp b/src/execution/operator/order/physical_order.cpp index 3806ae8afd6c..ac933f3fdc84 100644 --- a/src/execution/operator/order/physical_order.cpp +++ b/src/execution/operator/order/physical_order.cpp @@ -4,7 +4,7 @@ #include "duckdb/execution/expression_executor.hpp" #include "duckdb/main/client_context.hpp" #include "duckdb/parallel/base_pipeline_event.hpp" -#include "duckdb/parallel/event.hpp" +#include "duckdb/parallel/executor_task.hpp" #include "duckdb/storage/buffer_manager.hpp" namespace duckdb { @@ -112,7 +112,7 @@ SinkCombineResultType PhysicalOrder::Combine(ExecutionContext &context, Operator class PhysicalOrderMergeTask : public ExecutorTask { public: PhysicalOrderMergeTask(shared_ptr event_p, ClientContext &context, OrderGlobalSinkState &state) - : ExecutorTask(context), event(std::move(event_p)), context(context), state(state) { + : ExecutorTask(context, std::move(event_p)), context(context), state(state) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { @@ -125,7 +125,6 @@ class PhysicalOrderMergeTask : public ExecutorTask { } private: - shared_ptr event; ClientContext &context; OrderGlobalSinkState &state; }; diff --git a/src/execution/operator/order/physical_top_n.cpp b/src/execution/operator/order/physical_top_n.cpp index 7c8f62029adf..2d5e9b63af0f 100644 --- a/src/execution/operator/order/physical_top_n.cpp +++ b/src/execution/operator/order/physical_top_n.cpp @@ -370,17 +370,12 @@ bool TopNHeap::CheckBoundaryValues(DataChunk &sort_chunk, DataChunk &payload) { final_count += true_count; } idx_t false_count = remaining_count - true_count; - if (false_count > 0) { + if (!is_last && false_count > 0) { // check what we should continue to check compare_chunk.data[i].Slice(sort_chunk.data[i], false_sel, false_count); remaining_count = VectorOperations::NotDistinctFrom(compare_chunk.data[i], boundary_values.data[i], &false_sel, false_count, &new_remaining_sel, nullptr); - if (is_last) { - memcpy(final_sel.data() + final_count, new_remaining_sel.data(), remaining_count * sizeof(sel_t)); - final_count += remaining_count; - } else { - remaining_sel.Initialize(new_remaining_sel); - } + remaining_sel.Initialize(new_remaining_sel); } else { break; } diff --git a/src/execution/operator/persistent/physical_batch_copy_to_file.cpp b/src/execution/operator/persistent/physical_batch_copy_to_file.cpp index 52857768527c..52705e9b34a8 100644 --- a/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +++ b/src/execution/operator/persistent/physical_batch_copy_to_file.cpp @@ -69,7 +69,7 @@ class BatchCopyToLocalState : public LocalSinkState { optional_idx batch_index; void InitializeCollection(ClientContext &context, const PhysicalOperator &op) { - collection = make_uniq(BufferAllocator::Get(context), op.children[0]->types); + collection = make_uniq(context, op.children[0]->types, ColumnDataAllocatorType::HYBRID); collection->InitializeAppend(append_state); } }; @@ -93,6 +93,7 @@ SinkCombineResultType PhysicalBatchCopyToFile::Combine(ExecutionContext &context OperatorSinkCombineInput &input) const { auto &state = input.local_state.Cast(); auto &gstate = input.global_state.Cast(); + AddLocalBatch(context.client, gstate, state); gstate.rows_copied += state.rows_copied; return SinkCombineResultType::FINISHED; @@ -175,18 +176,26 @@ void PhysicalBatchCopyToFile::FlushBatchData(ClientContext &context, GlobalSinkS //===--------------------------------------------------------------------===// // Next Batch //===--------------------------------------------------------------------===// +void PhysicalBatchCopyToFile::AddLocalBatch(ClientContext &context, GlobalSinkState &gstate, + LocalSinkState &state_p) const { + auto &state = state_p.Cast(); + if (!state.collection || state.collection->Count() == 0) { + return; + } + // we finished processing this batch + // start flushing data + auto min_batch_index = state.partition_info.min_batch_index.GetIndex(); + PrepareBatchData(context, gstate, state.batch_index.GetIndex(), std::move(state.collection)); + FlushBatchData(context, gstate, min_batch_index); +} + SinkNextBatchType PhysicalBatchCopyToFile::NextBatch(ExecutionContext &context, OperatorSinkNextBatchInput &input) const { auto &lstate = input.local_state; auto &gstate_p = input.global_state; auto &state = lstate.Cast(); - if (state.collection && state.collection->Count() > 0) { - // we finished processing this batch - // start flushing data - auto min_batch_index = lstate.partition_info.min_batch_index.GetIndex(); - PrepareBatchData(context.client, gstate_p, state.batch_index.GetIndex(), std::move(state.collection)); - FlushBatchData(context.client, gstate_p, min_batch_index); - } + + AddLocalBatch(context.client, gstate_p, state); state.batch_index = lstate.partition_info.batch_index.GetIndex(); state.InitializeCollection(context.client, *this); diff --git a/src/execution/operator/persistent/physical_batch_insert.cpp b/src/execution/operator/persistent/physical_batch_insert.cpp index 39d06495dae3..d2b1450a897d 100644 --- a/src/execution/operator/persistent/physical_batch_insert.cpp +++ b/src/execution/operator/persistent/physical_batch_insert.cpp @@ -1,5 +1,6 @@ #include "duckdb/execution/operator/persistent/physical_batch_insert.hpp" - +#include "duckdb/execution/operator/persistent/batch_memory_manager.hpp" +#include "duckdb/execution/operator/persistent/batch_task_manager.hpp" #include "duckdb/parallel/thread_context.hpp" #include "duckdb/storage/data_table.hpp" #include "duckdb/storage/table/row_group_collection.hpp" @@ -28,9 +29,8 @@ PhysicalBatchInsert::PhysicalBatchInsert(LogicalOperator &op, SchemaCatalogEntry } //===--------------------------------------------------------------------===// -// Sink +// CollectionMerger //===--------------------------------------------------------------------===// - class CollectionMerger { public: explicit CollectionMerger(ClientContext &context) : context(context) { @@ -97,25 +97,40 @@ class CollectionMerger { enum class RowGroupBatchType : uint8_t { FLUSHED, NOT_FLUSHED }; struct RowGroupBatchEntry { RowGroupBatchEntry(idx_t batch_idx, unique_ptr collection_p, RowGroupBatchType type) - : batch_idx(batch_idx), total_rows(collection_p->GetTotalRows()), collection(std::move(collection_p)), - type(type) { + : batch_idx(batch_idx), total_rows(collection_p->GetTotalRows()), unflushed_memory(0), + collection(std::move(collection_p)), type(type) { + if (type == RowGroupBatchType::NOT_FLUSHED) { + unflushed_memory = collection->GetAllocationSize(); + } } idx_t batch_idx; idx_t total_rows; + idx_t unflushed_memory; unique_ptr collection; RowGroupBatchType type; }; -class BatchInsertGlobalState : public GlobalSinkState { +//===--------------------------------------------------------------------===// +// States +//===--------------------------------------------------------------------===// +class BatchInsertTask { public: - static constexpr const idx_t BATCH_FLUSH_THRESHOLD = LocalStorage::MERGE_THRESHOLD * 3; + virtual ~BatchInsertTask() { + } + virtual void Execute(const PhysicalBatchInsert &op, ClientContext &context, GlobalSinkState &gstate_p, + LocalSinkState &lstate_p) = 0; +}; + +class BatchInsertGlobalState : public GlobalSinkState { public: - explicit BatchInsertGlobalState(DuckTableEntry &table) - : table(table), insert_count(0), optimistically_written(false) { + explicit BatchInsertGlobalState(ClientContext &context, DuckTableEntry &table, idx_t initial_memory) + : memory_manager(context, initial_memory), table(table), insert_count(0), optimistically_written(false) { } + BatchMemoryManager memory_manager; + BatchTaskManager task_manager; mutex lock; DuckTableEntry &table; idx_t insert_count; @@ -123,140 +138,21 @@ class BatchInsertGlobalState : public GlobalSinkState { idx_t next_start = 0; atomic optimistically_written; - void FindMergeCollections(idx_t min_batch_index, optional_idx &merged_batch_index, - vector> &result) { - bool merge = false; - idx_t start_index = next_start; - idx_t current_idx; - idx_t total_count = 0; - for (current_idx = start_index; current_idx < collections.size(); current_idx++) { - auto &entry = collections[current_idx]; - if (entry.batch_idx >= min_batch_index) { - // this entry is AFTER the min_batch_index - // we might still find new entries! - break; - } - if (entry.type == RowGroupBatchType::FLUSHED) { - // already flushed: cannot flush anything here - if (total_count > 0) { - merge = true; - break; - } - start_index = current_idx + 1; - if (start_index > next_start) { - // avoid checking this segment again in the future - next_start = start_index; - } - total_count = 0; - continue; - } - // not flushed - add to set of indexes to flush - total_count += entry.total_rows; - if (total_count >= BATCH_FLUSH_THRESHOLD) { - merge = true; - break; - } - } - if (merge && total_count > 0) { - D_ASSERT(current_idx > start_index); - merged_batch_index = collections[start_index].batch_idx; - for (idx_t idx = start_index; idx < current_idx; idx++) { - auto &entry = collections[idx]; - if (!entry.collection || entry.type == RowGroupBatchType::FLUSHED) { - throw InternalException("Adding a row group collection that should not be flushed"); - } - result.push_back(std::move(entry.collection)); - entry.total_rows = total_count; - entry.type = RowGroupBatchType::FLUSHED; - } - if (start_index + 1 < current_idx) { - // erase all entries except the first one - collections.erase(collections.begin() + start_index + 1, collections.begin() + current_idx); - } - } - } - + static bool ReadyToMerge(idx_t count); + void ScheduleMergeTasks(idx_t min_batch_index); unique_ptr MergeCollections(ClientContext &context, - vector> merge_collections, - OptimisticDataWriter &writer) { - D_ASSERT(!merge_collections.empty()); - CollectionMerger merger(context); - for (auto &collection : merge_collections) { - merger.AddCollection(std::move(collection)); - } - optimistically_written = true; - return merger.Flush(writer); - } - + vector merge_collections, + OptimisticDataWriter &writer); void AddCollection(ClientContext &context, idx_t batch_index, idx_t min_batch_index, unique_ptr current_collection, - optional_ptr writer = nullptr, - optional_ptr written_to_disk = nullptr) { - if (batch_index < min_batch_index) { - throw InternalException( - "Batch index of the added collection (%llu) is smaller than the min batch index (%llu)", batch_index, - min_batch_index); - } - auto new_count = current_collection->GetTotalRows(); - auto batch_type = - new_count < Storage::ROW_GROUP_SIZE ? RowGroupBatchType::NOT_FLUSHED : RowGroupBatchType::FLUSHED; - if (batch_type == RowGroupBatchType::FLUSHED && writer) { - writer->WriteLastRowGroup(*current_collection); - } - optional_idx merged_batch_index; - vector> merge_collections; - { - lock_guard l(lock); - insert_count += new_count; - - // add the collection to the batch index - RowGroupBatchEntry new_entry(batch_index, std::move(current_collection), batch_type); - - auto it = std::lower_bound( - collections.begin(), collections.end(), new_entry, - [&](const RowGroupBatchEntry &a, const RowGroupBatchEntry &b) { return a.batch_idx < b.batch_idx; }); - if (it != collections.end() && it->batch_idx == new_entry.batch_idx) { - throw InternalException( - "PhysicalBatchInsert::AddCollection error: batch index %d is present in multiple " - "collections. This occurs when " - "batch indexes are not uniquely distributed over threads", - batch_index); - } - collections.insert(it, std::move(new_entry)); - if (writer) { - FindMergeCollections(min_batch_index, merged_batch_index, merge_collections); - } - } - if (!merge_collections.empty()) { - // merge together the collections - D_ASSERT(writer); - auto final_collection = MergeCollections(context, std::move(merge_collections), *writer); - if (written_to_disk) { - *written_to_disk = true; - } - // add the merged-together collection to the set of batch indexes - { - lock_guard l(lock); - RowGroupBatchEntry new_entry(merged_batch_index.GetIndex(), std::move(final_collection), - RowGroupBatchType::FLUSHED); - auto it = std::lower_bound(collections.begin(), collections.end(), new_entry, - [&](const RowGroupBatchEntry &a, const RowGroupBatchEntry &b) { - return a.batch_idx < b.batch_idx; - }); - if (it->batch_idx != merged_batch_index.GetIndex()) { - throw InternalException("Merged batch index was no longer present in collection"); - } - it->collection = std::move(new_entry.collection); - } - } - } + optional_ptr writer = nullptr); }; class BatchInsertLocalState : public LocalSinkState { public: BatchInsertLocalState(ClientContext &context, const vector &types, const vector> &bound_defaults) - : default_executor(context, bound_defaults), written_to_disk(false) { + : default_executor(context, bound_defaults) { insert_chunk.Initialize(Allocator::Get(context), types); } @@ -266,7 +162,6 @@ class BatchInsertLocalState : public LocalSinkState { TableAppendState current_append_state; unique_ptr current_collection; optional_ptr writer; - bool written_to_disk; void CreateNewCollection(DuckTableEntry &table, const vector &insert_types) { auto &table_info = table.GetStorage().info; @@ -274,10 +169,199 @@ class BatchInsertLocalState : public LocalSinkState { current_collection = make_uniq(table_info, block_manager, insert_types, MAX_ROW_ID); current_collection->InitializeEmpty(); current_collection->InitializeAppend(current_append_state); - written_to_disk = false; } }; +//===--------------------------------------------------------------------===// +// Merge Task +//===--------------------------------------------------------------------===// +class MergeCollectionTask : public BatchInsertTask { +public: + MergeCollectionTask(vector merge_collections_p, idx_t merged_batch_index) + : merge_collections(std::move(merge_collections_p)), merged_batch_index(merged_batch_index) { + } + + vector merge_collections; + idx_t merged_batch_index; + + void Execute(const PhysicalBatchInsert &op, ClientContext &context, GlobalSinkState &gstate_p, + LocalSinkState &lstate_p) override { + auto &gstate = gstate_p.Cast(); + auto &lstate = lstate_p.Cast(); + // merge together the collections + D_ASSERT(lstate.writer); + auto final_collection = gstate.MergeCollections(context, std::move(merge_collections), *lstate.writer); + // add the merged-together collection to the set of batch indexes + lock_guard l(gstate.lock); + RowGroupBatchEntry new_entry(merged_batch_index, std::move(final_collection), RowGroupBatchType::FLUSHED); + auto it = std::lower_bound( + gstate.collections.begin(), gstate.collections.end(), new_entry, + [&](const RowGroupBatchEntry &a, const RowGroupBatchEntry &b) { return a.batch_idx < b.batch_idx; }); + if (it->batch_idx != merged_batch_index) { + throw InternalException("Merged batch index was no longer present in collection"); + } + it->collection = std::move(new_entry.collection); + } +}; + +struct BatchMergeTask { + explicit BatchMergeTask(idx_t start_index) : start_index(start_index), end_index(0), total_count(0) { + } + + idx_t start_index; + idx_t end_index; + idx_t total_count; +}; + +bool BatchInsertGlobalState::ReadyToMerge(idx_t count) { + // we try to merge so the count fits nicely into row groups + if (count >= Storage::ROW_GROUP_SIZE / 10 * 9 && count <= Storage::ROW_GROUP_SIZE) { + // 90%-100% of row group size + return true; + } + if (count >= Storage::ROW_GROUP_SIZE / 10 * 18 && count <= Storage::ROW_GROUP_SIZE * 2) { + // 180%-200% of row group size + return true; + } + if (count >= Storage::ROW_GROUP_SIZE / 10 * 27 && count <= Storage::ROW_GROUP_SIZE * 3) { + // 270%-300% of row group size + return true; + } + if (count >= Storage::ROW_GROUP_SIZE / 10 * 36) { + // >360% of row group size + return true; + } + return false; +} + +void BatchInsertGlobalState::ScheduleMergeTasks(idx_t min_batch_index) { + idx_t current_idx; + + vector to_be_scheduled_tasks; + + BatchMergeTask current_task(next_start); + for (current_idx = current_task.start_index; current_idx < collections.size(); current_idx++) { + auto &entry = collections[current_idx]; + if (entry.batch_idx > min_batch_index) { + // this entry is AFTER the min_batch_index + // finished + if (ReadyToMerge(current_task.total_count)) { + current_task.end_index = current_idx; + to_be_scheduled_tasks.push_back(current_task); + } + break; + } + if (entry.type == RowGroupBatchType::FLUSHED) { + // already flushed: cannot flush anything here + if (current_task.total_count > 0) { + current_task.end_index = current_idx; + to_be_scheduled_tasks.push_back(current_task); + } + current_task.start_index = current_idx + 1; + if (current_task.start_index > next_start) { + // avoid checking this segment again in the future + next_start = current_task.start_index; + } + current_task.total_count = 0; + continue; + } + // not flushed - add to set of indexes to flush + current_task.total_count += entry.total_rows; + if (ReadyToMerge(current_task.total_count)) { + // create a task to merge these collections + current_task.end_index = current_idx + 1; + to_be_scheduled_tasks.push_back(current_task); + current_task.start_index = current_idx + 1; + current_task.total_count = 0; + } + } + + if (to_be_scheduled_tasks.empty()) { + return; + } + for (auto &scheduled_task : to_be_scheduled_tasks) { + D_ASSERT(scheduled_task.total_count > 0); + D_ASSERT(current_idx > scheduled_task.start_index); + idx_t merged_batch_index = collections[scheduled_task.start_index].batch_idx; + vector merge_collections; + for (idx_t idx = scheduled_task.start_index; idx < scheduled_task.end_index; idx++) { + auto &entry = collections[idx]; + if (!entry.collection || entry.type == RowGroupBatchType::FLUSHED) { + throw InternalException("Adding a row group collection that should not be flushed"); + } + RowGroupBatchEntry added_entry(collections[scheduled_task.start_index].batch_idx, + std::move(entry.collection), RowGroupBatchType::FLUSHED); + added_entry.unflushed_memory = entry.unflushed_memory; + merge_collections.push_back(std::move(added_entry)); + entry.total_rows = scheduled_task.total_count; + entry.type = RowGroupBatchType::FLUSHED; + } + task_manager.AddTask(make_uniq(std::move(merge_collections), merged_batch_index)); + } + // erase in reverse order + for (idx_t i = to_be_scheduled_tasks.size(); i > 0; i--) { + auto &scheduled_task = to_be_scheduled_tasks[i - 1]; + if (scheduled_task.start_index + 1 < scheduled_task.end_index) { + // erase all entries except the first one + collections.erase(collections.begin() + scheduled_task.start_index + 1, + collections.begin() + scheduled_task.end_index); + } + } +} + +unique_ptr BatchInsertGlobalState::MergeCollections(ClientContext &context, + vector merge_collections, + OptimisticDataWriter &writer) { + D_ASSERT(!merge_collections.empty()); + CollectionMerger merger(context); + idx_t written_data = 0; + for (auto &entry : merge_collections) { + merger.AddCollection(std::move(entry.collection)); + written_data += entry.unflushed_memory; + } + optimistically_written = true; + memory_manager.ReduceUnflushedMemory(written_data); + return merger.Flush(writer); +} + +void BatchInsertGlobalState::AddCollection(ClientContext &context, idx_t batch_index, idx_t min_batch_index, + unique_ptr current_collection, + optional_ptr writer) { + if (batch_index < min_batch_index) { + throw InternalException("Batch index of the added collection (%llu) is smaller than the min batch index (%llu)", + batch_index, min_batch_index); + } + auto new_count = current_collection->GetTotalRows(); + auto batch_type = new_count < Storage::ROW_GROUP_SIZE ? RowGroupBatchType::NOT_FLUSHED : RowGroupBatchType::FLUSHED; + if (batch_type == RowGroupBatchType::FLUSHED && writer) { + writer->WriteLastRowGroup(*current_collection); + } + lock_guard l(lock); + insert_count += new_count; + // add the collection to the batch index + RowGroupBatchEntry new_entry(batch_index, std::move(current_collection), batch_type); + if (batch_type == RowGroupBatchType::NOT_FLUSHED) { + memory_manager.IncreaseUnflushedMemory(new_entry.unflushed_memory); + } + + auto it = std::lower_bound( + collections.begin(), collections.end(), new_entry, + [&](const RowGroupBatchEntry &a, const RowGroupBatchEntry &b) { return a.batch_idx < b.batch_idx; }); + if (it != collections.end() && it->batch_idx == new_entry.batch_idx) { + throw InternalException("PhysicalBatchInsert::AddCollection error: batch index %d is present in multiple " + "collections. This occurs when " + "batch indexes are not uniquely distributed over threads", + batch_index); + } + collections.insert(it, std::move(new_entry)); + if (writer) { + ScheduleMergeTasks(min_batch_index); + } +} + +//===--------------------------------------------------------------------===// +// States +//===--------------------------------------------------------------------===// unique_ptr PhysicalBatchInsert::GetGlobalSinkState(ClientContext &context) const { optional_ptr table; if (info) { @@ -291,7 +375,10 @@ unique_ptr PhysicalBatchInsert::GetGlobalSinkState(ClientContex D_ASSERT(insert_table->IsDuckTable()); table = insert_table.get_mutable(); } - auto result = make_uniq(table->Cast()); + // heuristic - we start off by allocating 4MB of cache space per column + static constexpr const idx_t MINIMUM_MEMORY_PER_COLUMN = 4 * 1024 * 1024; + auto initial_memory = table->GetColumns().PhysicalColumnCount() * MINIMUM_MEMORY_PER_COLUMN; + auto result = make_uniq(context, table->Cast(), initial_memory); return std::move(result); } @@ -299,11 +386,34 @@ unique_ptr PhysicalBatchInsert::GetLocalSinkState(ExecutionConte return make_uniq(context.client, insert_types, bound_defaults); } +//===--------------------------------------------------------------------===// +// Tasks +//===--------------------------------------------------------------------===// +bool PhysicalBatchInsert::ExecuteTask(ClientContext &context, GlobalSinkState &gstate_p, + LocalSinkState &lstate_p) const { + auto &gstate = gstate_p.Cast(); + auto task = gstate.task_manager.GetTask(); + if (!task) { + return false; + } + task->Execute(*this, context, gstate_p, lstate_p); + return true; +} + +void PhysicalBatchInsert::ExecuteTasks(ClientContext &context, GlobalSinkState &gstate_p, + LocalSinkState &lstate_p) const { + while (ExecuteTask(context, gstate_p, lstate_p)) { + } +} + +//===--------------------------------------------------------------------===// +// NextBatch +//===--------------------------------------------------------------------===// SinkNextBatchType PhysicalBatchInsert::NextBatch(ExecutionContext &context, OperatorSinkNextBatchInput &input) const { auto &gstate = input.global_state.Cast(); auto &lstate = input.local_state.Cast(); + auto &memory_manager = gstate.memory_manager; - auto &table = gstate.table; auto batch_index = lstate.partition_info.batch_index.GetIndex(); if (lstate.current_collection) { if (lstate.current_index == batch_index) { @@ -313,26 +423,61 @@ SinkNextBatchType PhysicalBatchInsert::NextBatch(ExecutionContext &context, Oper TransactionData tdata(0, 0); lstate.current_collection->FinalizeAppend(tdata, lstate.current_append_state); gstate.AddCollection(context.client, lstate.current_index, lstate.partition_info.min_batch_index.GetIndex(), - std::move(lstate.current_collection), lstate.writer, &lstate.written_to_disk); - lstate.CreateNewCollection(table, insert_types); + std::move(lstate.current_collection), lstate.writer); + + auto any_unblocked = memory_manager.UnblockTasks(); + if (!any_unblocked) { + ExecuteTasks(context.client, gstate, lstate); + } + lstate.current_collection.reset(); } lstate.current_index = batch_index; + + // unblock any blocked tasks + memory_manager.UnblockTasks(); + return SinkNextBatchType::READY; } +//===--------------------------------------------------------------------===// +// Sink +//===--------------------------------------------------------------------===// SinkResultType PhysicalBatchInsert::Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const { auto &gstate = input.global_state.Cast(); auto &lstate = input.local_state.Cast(); + auto &memory_manager = gstate.memory_manager; auto &table = gstate.table; PhysicalInsert::ResolveDefaults(table, chunk, column_index_map, lstate.default_executor, lstate.insert_chunk); auto batch_index = lstate.partition_info.batch_index.GetIndex(); + // check if we should process this batch + if (!memory_manager.IsMinimumBatchIndex(batch_index)) { + memory_manager.UpdateMinBatchIndex(lstate.partition_info.min_batch_index.GetIndex()); + + // we are not processing the current min batch index + // check if we have exceeded the maximum number of unflushed rows + if (memory_manager.OutOfMemory(batch_index)) { + // out-of-memory + // execute tasks while we wait (if any are available) + ExecuteTasks(context.client, gstate, lstate); + + lock_guard l(memory_manager.GetBlockedTaskLock()); + if (!memory_manager.IsMinimumBatchIndex(batch_index)) { + // we are not the minimum batch index and we have no memory available to buffer - block the task for + // now + memory_manager.BlockTask(input.interrupt_state); + return SinkResultType::BLOCKED; + } + } + } if (!lstate.current_collection) { lock_guard l(gstate.lock); // no collection yet: create a new one lstate.CreateNewCollection(table, insert_types); - lstate.writer = &table.GetStorage().CreateOptimisticWriter(context.client); + if (!lstate.writer) { + lstate.writer = &table.GetStorage().CreateOptimisticWriter(context.client); + } } if (lstate.current_index != batch_index) { @@ -345,39 +490,49 @@ SinkResultType PhysicalBatchInsert::Sink(ExecutionContext &context, DataChunk &c if (new_row_group) { // we have already written to disk - flush the next row group as well lstate.writer->WriteNewRowGroup(*lstate.current_collection); - lstate.written_to_disk = true; } return SinkResultType::NEED_MORE_INPUT; } +//===--------------------------------------------------------------------===// +// Combine +//===--------------------------------------------------------------------===// SinkCombineResultType PhysicalBatchInsert::Combine(ExecutionContext &context, OperatorSinkCombineInput &input) const { auto &gstate = input.global_state.Cast(); auto &lstate = input.local_state.Cast(); + auto &memory_manager = gstate.memory_manager; auto &client_profiler = QueryProfiler::Get(context.client); context.thread.profiler.Flush(*this, lstate.default_executor, "default_executor", 1); client_profiler.Flush(context.thread.profiler); - if (!lstate.current_collection) { - return SinkCombineResultType::FINISHED; - } + memory_manager.UpdateMinBatchIndex(lstate.partition_info.min_batch_index.GetIndex()); - if (lstate.current_collection->GetTotalRows() > 0) { + if (lstate.current_collection) { TransactionData tdata(0, 0); lstate.current_collection->FinalizeAppend(tdata, lstate.current_append_state); - gstate.AddCollection(context.client, lstate.current_index, lstate.partition_info.min_batch_index.GetIndex(), - std::move(lstate.current_collection)); + if (lstate.current_collection->GetTotalRows() > 0) { + gstate.AddCollection(context.client, lstate.current_index, lstate.partition_info.min_batch_index.GetIndex(), + std::move(lstate.current_collection)); + } } - { + if (lstate.writer) { lock_guard l(gstate.lock); gstate.table.GetStorage().FinalizeOptimisticWriter(context.client, *lstate.writer); } + // unblock any blocked tasks + memory_manager.UnblockTasks(); + return SinkCombineResultType::FINISHED; } +//===--------------------------------------------------------------------===// +// Finalize +//===--------------------------------------------------------------------===// SinkFinalizeType PhysicalBatchInsert::Finalize(Pipeline &pipeline, Event &event, ClientContext &context, OperatorSinkFinalizeInput &input) const { auto &gstate = input.global_state.Cast(); + auto &memory_manager = gstate.memory_manager; if (gstate.optimistically_written || gstate.insert_count >= LocalStorage::MERGE_THRESHOLD) { // we have written data to disk optimistically or are inserting a large amount of data @@ -393,6 +548,7 @@ SinkFinalizeType PhysicalBatchInsert::Finalize(Pipeline &pipeline, Event &event, current_merger = make_uniq(context); } current_merger->AddCollection(std::move(entry.collection)); + memory_manager.ReduceUnflushedMemory(entry.unflushed_memory); } else { // this collection has been flushed: it does not need to be merged // create a separate collection merger only for this entry @@ -417,12 +573,12 @@ SinkFinalizeType PhysicalBatchInsert::Finalize(Pipeline &pipeline, Event &event, for (auto &merger : mergers) { final_collections.push_back(merger->Flush(writer)); } - storage.FinalizeOptimisticWriter(context, writer); // finally, merge the row groups into the local storage for (auto &collection : final_collections) { storage.LocalMerge(context, *collection); } + storage.FinalizeOptimisticWriter(context, writer); } else { // we are writing a small amount of data to disk // append directly to transaction local storage @@ -432,6 +588,11 @@ SinkFinalizeType PhysicalBatchInsert::Finalize(Pipeline &pipeline, Event &event, storage.InitializeLocalAppend(append_state, context); auto &transaction = DuckTransaction::Get(context, table.catalog); for (auto &entry : gstate.collections) { + if (entry.type != RowGroupBatchType::NOT_FLUSHED) { + throw InternalException("Encountered a flushed batch"); + } + + memory_manager.ReduceUnflushedMemory(entry.unflushed_memory); entry.collection->Scan(transaction, [&](DataChunk &insert_chunk) { storage.LocalAppend(append_state, table, context, insert_chunk); return true; @@ -439,6 +600,7 @@ SinkFinalizeType PhysicalBatchInsert::Finalize(Pipeline &pipeline, Event &event, } storage.FinalizeLocalAppend(append_state); } + memory_manager.FinalCheck(); return SinkFinalizeType::READY; } diff --git a/src/execution/operator/persistent/physical_delete.cpp b/src/execution/operator/persistent/physical_delete.cpp index a3e0a4c1418d..42085f0e6128 100644 --- a/src/execution/operator/persistent/physical_delete.cpp +++ b/src/execution/operator/persistent/physical_delete.cpp @@ -47,6 +47,7 @@ SinkResultType PhysicalDelete::Sink(ExecutionContext &context, DataChunk &chunk, lock_guard delete_guard(gstate.delete_lock); if (return_chunk) { + ustate.delete_chunk.Reset(); row_identifiers.Flatten(chunk.size()); table.Fetch(transaction, ustate.delete_chunk, column_ids, row_identifiers, chunk.size(), cfs); gstate.return_collection.Append(ustate.delete_chunk); diff --git a/src/execution/operator/persistent/physical_fixed_batch_copy.cpp b/src/execution/operator/persistent/physical_fixed_batch_copy.cpp index 983ce31d1ac0..6aeb5b98f86a 100644 --- a/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +++ b/src/execution/operator/persistent/physical_fixed_batch_copy.cpp @@ -6,7 +6,10 @@ #include "duckdb/common/allocator.hpp" #include "duckdb/common/queue.hpp" #include "duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp" - +#include "duckdb/storage/buffer_manager.hpp" +#include "duckdb/execution/operator/persistent/batch_memory_manager.hpp" +#include "duckdb/execution/operator/persistent/batch_task_manager.hpp" +#include "duckdb/parallel/executor_task.hpp" #include namespace duckdb { @@ -22,7 +25,7 @@ PhysicalFixedBatchCopy::PhysicalFixedBatchCopy(vector types, CopyFu } //===--------------------------------------------------------------------===// -// Sink +// States //===--------------------------------------------------------------------===// class BatchCopyTask { public: @@ -32,16 +35,35 @@ class BatchCopyTask { virtual void Execute(const PhysicalFixedBatchCopy &op, ClientContext &context, GlobalSinkState &gstate_p) = 0; }; -//===--------------------------------------------------------------------===// -// States -//===--------------------------------------------------------------------===// +struct FixedRawBatchData { + FixedRawBatchData(idx_t memory_usage_p, unique_ptr collection_p) + : memory_usage(memory_usage_p), collection(std::move(collection_p)) { + } + + idx_t memory_usage; + unique_ptr collection; +}; + +struct FixedPreparedBatchData { + idx_t memory_usage; + unique_ptr prepared_data; +}; + class FixedBatchCopyGlobalState : public GlobalSinkState { public: - explicit FixedBatchCopyGlobalState(unique_ptr global_state) - : rows_copied(0), global_state(std::move(global_state)), batch_size(0), scheduled_batch_index(0), - flushed_batch_index(0), any_flushing(false), any_finished(false) { + // heuristic - we need at least 4MB of cache space per column per thread we launch + static constexpr const idx_t MINIMUM_MEMORY_PER_COLUMN_PER_THREAD = 4 * 1024 * 1024; + +public: + explicit FixedBatchCopyGlobalState(ClientContext &context_p, unique_ptr global_state, + idx_t minimum_memory_per_thread) + : memory_manager(context_p, minimum_memory_per_thread), rows_copied(0), global_state(std::move(global_state)), + batch_size(0), scheduled_batch_index(0), flushed_batch_index(0), any_flushing(false), any_finished(false), + minimum_memory_per_thread(minimum_memory_per_thread) { } + BatchMemoryManager memory_manager; + BatchTaskManager task_manager; mutex lock; mutex flush_lock; //! The total number of rows copied to the file @@ -50,10 +72,10 @@ class FixedBatchCopyGlobalState : public GlobalSinkState { unique_ptr global_state; //! The desired batch size (if any) idx_t batch_size; - //! Unpartitioned batches - only used in case batch_size is required - map> raw_batches; + //! Unpartitioned batches + map> raw_batches; //! The prepared batch data by batch index - ready to flush - map> batch_data; + map> batch_data; //! The index of the latest batch index that has been scheduled atomic scheduled_batch_index; //! The index of the latest batch index that has been flushed @@ -62,46 +84,35 @@ class FixedBatchCopyGlobalState : public GlobalSinkState { atomic any_flushing; //! Whether or not any threads are finished atomic any_finished; + //! Minimum memory per thread + idx_t minimum_memory_per_thread; - void AddTask(unique_ptr task) { - lock_guard l(task_lock); - task_queue.push(std::move(task)); - } - - unique_ptr GetTask() { - lock_guard l(task_lock); - if (task_queue.empty()) { - return nullptr; - } - auto entry = std::move(task_queue.front()); - task_queue.pop(); - return entry; - } - - idx_t TaskCount() { - lock_guard l(task_lock); - return task_queue.size(); - } - - void AddBatchData(idx_t batch_index, unique_ptr new_batch) { + void AddBatchData(idx_t batch_index, unique_ptr new_batch, idx_t memory_usage) { // move the batch data to the set of prepared batch data lock_guard l(lock); - auto entry = batch_data.insert(make_pair(batch_index, std::move(new_batch))); + auto prepared_data = make_uniq(); + prepared_data->prepared_data = std::move(new_batch); + prepared_data->memory_usage = memory_usage; + auto entry = batch_data.insert(make_pair(batch_index, std::move(prepared_data))); if (!entry.second) { throw InternalException("Duplicate batch index %llu encountered in PhysicalFixedBatchCopy", batch_index); } } -private: - mutex task_lock; - //! The task queue for the batch copy to file - queue> task_queue; + idx_t MaxThreads(idx_t source_max_threads) override { + // try to request 4MB per column per thread + memory_manager.SetMemorySize(source_max_threads * minimum_memory_per_thread); + // cap the concurrent threads working on this task based on the amount of available memory + return MinValue(source_max_threads, memory_manager.AvailableMemory() / minimum_memory_per_thread + 1); + } }; +enum class FixedBatchCopyState { SINKING_DATA = 1, PROCESSING_TASKS = 2 }; + class FixedBatchCopyLocalState : public LocalSinkState { public: explicit FixedBatchCopyLocalState(unique_ptr local_state_p) - : local_state(std::move(local_state_p)), rows_copied(0) { + : local_state(std::move(local_state_p)), rows_copied(0), local_memory_usage(0) { } //! Local copy state @@ -112,12 +123,17 @@ class FixedBatchCopyLocalState : public LocalSinkState { ColumnDataAppendState append_state; //! How many rows have been copied in total idx_t rows_copied; + //! Memory usage of the thread-local collection + idx_t local_memory_usage; //! The current batch index optional_idx batch_index; + //! Current task + FixedBatchCopyState current_task = FixedBatchCopyState::SINKING_DATA; void InitializeCollection(ClientContext &context, const PhysicalOperator &op) { - collection = make_uniq(BufferAllocator::Get(context), op.children[0]->types); + collection = make_uniq(context, op.children[0]->types, ColumnDataAllocatorType::HYBRID); collection->InitializeAppend(append_state); + local_memory_usage = 0; } }; @@ -127,12 +143,49 @@ class FixedBatchCopyLocalState : public LocalSinkState { SinkResultType PhysicalFixedBatchCopy::Sink(ExecutionContext &context, DataChunk &chunk, OperatorSinkInput &input) const { auto &state = input.local_state.Cast(); + auto &gstate = input.global_state.Cast(); + auto &memory_manager = gstate.memory_manager; + auto batch_index = state.partition_info.batch_index.GetIndex(); + if (state.current_task == FixedBatchCopyState::PROCESSING_TASKS) { + ExecuteTasks(context.client, gstate); + FlushBatchData(context.client, gstate, memory_manager.GetMinimumBatchIndex()); + + if (!memory_manager.IsMinimumBatchIndex(batch_index) && memory_manager.OutOfMemory(batch_index)) { + lock_guard l(memory_manager.GetBlockedTaskLock()); + if (!memory_manager.IsMinimumBatchIndex(batch_index)) { + // no tasks to process, we are not the minimum batch index and we have no memory available to buffer + // block the task for now + memory_manager.BlockTask(input.interrupt_state); + return SinkResultType::BLOCKED; + } + } + state.current_task = FixedBatchCopyState::SINKING_DATA; + } + if (!memory_manager.IsMinimumBatchIndex(batch_index)) { + memory_manager.UpdateMinBatchIndex(state.partition_info.min_batch_index.GetIndex()); + + // we are not processing the current min batch index + // check if we have exceeded the maximum number of unflushed rows + if (memory_manager.OutOfMemory(batch_index)) { + // out-of-memory - stop sinking chunks and instead assist in processing tasks for the minimum batch index + state.current_task = FixedBatchCopyState::PROCESSING_TASKS; + return Sink(context, chunk, input); + } + } if (!state.collection) { state.InitializeCollection(context.client, *this); - state.batch_index = state.partition_info.batch_index.GetIndex(); + state.batch_index = batch_index; } state.rows_copied += chunk.size(); state.collection->Append(state.append_state, chunk); + auto new_memory_usage = state.collection->AllocationSize(); + if (new_memory_usage > state.local_memory_usage) { + // memory usage increased - add to global state + memory_manager.IncreaseUnflushedMemory(new_memory_usage - state.local_memory_usage); + state.local_memory_usage = new_memory_usage; + } else if (new_memory_usage < state.local_memory_usage) { + throw InternalException("PhysicalFixedBatchCopy - memory usage decreased somehow?"); + } return SinkResultType::NEED_MORE_INPUT; } @@ -140,12 +193,18 @@ SinkCombineResultType PhysicalFixedBatchCopy::Combine(ExecutionContext &context, OperatorSinkCombineInput &input) const { auto &state = input.local_state.Cast(); auto &gstate = input.global_state.Cast(); + auto &memory_manager = gstate.memory_manager; gstate.rows_copied += state.rows_copied; + + // add any final remaining local batches + AddLocalBatch(context.client, gstate, state); + if (!gstate.any_finished) { // signal that this thread is finished processing batches and that we should move on to Finalize lock_guard l(gstate.lock); gstate.any_finished = true; } + memory_manager.UpdateMinBatchIndex(state.partition_info.min_batch_index.GetIndex()); ExecuteTasks(context.client, gstate); return SinkCombineResultType::FINISHED; @@ -158,7 +217,7 @@ class ProcessRemainingBatchesTask : public ExecutorTask { public: ProcessRemainingBatchesTask(Executor &executor, shared_ptr event_p, FixedBatchCopyGlobalState &state_p, ClientContext &context, const PhysicalFixedBatchCopy &op) - : ExecutorTask(executor), event(std::move(event_p)), op(op), gstate(state_p), context(context) { + : ExecutorTask(executor, std::move(event_p)), op(op), gstate(state_p), context(context) { } TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { @@ -170,7 +229,6 @@ class ProcessRemainingBatchesTask : public ExecutorTask { } private: - shared_ptr event; const PhysicalFixedBatchCopy &op; FixedBatchCopyGlobalState &gstate; ClientContext &context; @@ -208,10 +266,10 @@ class ProcessRemainingBatchesEvent : public BasePipelineEvent { //===--------------------------------------------------------------------===// SinkFinalizeType PhysicalFixedBatchCopy::FinalFlush(ClientContext &context, GlobalSinkState &gstate_p) const { auto &gstate = gstate_p.Cast(); - if (gstate.TaskCount() != 0) { + if (gstate.task_manager.TaskCount() != 0) { throw InternalException("Unexecuted tasks are remaining in PhysicalFixedBatchCopy::FinalFlush!?"); } - idx_t min_batch_index = idx_t(NumericLimits::Maximum()); + auto min_batch_index = idx_t(NumericLimits::Maximum()); FlushBatchData(context, gstate_p, min_batch_index); if (gstate.scheduled_batch_index != gstate.flushed_batch_index) { throw InternalException("Not all batches were flushed to disk - incomplete file?"); @@ -223,25 +281,26 @@ SinkFinalizeType PhysicalFixedBatchCopy::FinalFlush(ClientContext &context, Glob PhysicalCopyToFile::MoveTmpFile(context, file_path); } } + gstate.memory_manager.FinalCheck(); return SinkFinalizeType::READY; } SinkFinalizeType PhysicalFixedBatchCopy::Finalize(Pipeline &pipeline, Event &event, ClientContext &context, OperatorSinkFinalizeInput &input) const { auto &gstate = input.global_state.Cast(); - idx_t min_batch_index = idx_t(NumericLimits::Maximum()); + auto min_batch_index = idx_t(NumericLimits::Maximum()); // repartition any remaining batches RepartitionBatches(context, input.global_state, min_batch_index, true); // check if we have multiple tasks to execute - if (gstate.TaskCount() <= 1) { + if (gstate.task_manager.TaskCount() <= 1) { // we don't - just execute the remaining task and finish flushing to disk ExecuteTasks(context, input.global_state); FinalFlush(context, input.global_state); - return SinkFinalizeType::READY; + } else { + // we have multiple tasks remaining - launch an event to execute the tasks in parallel + auto new_event = make_shared(*this, gstate, pipeline, context); + event.InsertEvent(std::move(new_event)); } - // we have multiple tasks remaining - launch an event to execute the tasks in parallel - auto new_event = make_shared(*this, gstate, pipeline, context); - event.InsertEvent(std::move(new_event)); return SinkFinalizeType::READY; } @@ -260,20 +319,21 @@ class RepartitionedFlushTask : public BatchCopyTask { class PrepareBatchTask : public BatchCopyTask { public: - PrepareBatchTask(idx_t batch_index, unique_ptr collection_p) - : batch_index(batch_index), collection(std::move(collection_p)) { + PrepareBatchTask(idx_t batch_index, unique_ptr batch_data_p) + : batch_index(batch_index), batch_data(std::move(batch_data_p)) { } idx_t batch_index; - unique_ptr collection; + unique_ptr batch_data; void Execute(const PhysicalFixedBatchCopy &op, ClientContext &context, GlobalSinkState &gstate_p) override { auto &gstate = gstate_p.Cast(); - auto batch_data = - op.function.prepare_batch(context, *op.bind_data, *gstate.global_state, std::move(collection)); - gstate.AddBatchData(batch_index, std::move(batch_data)); + auto memory_usage = batch_data->memory_usage; + auto prepared_batch = + op.function.prepare_batch(context, *op.bind_data, *gstate.global_state, std::move(batch_data->collection)); + gstate.AddBatchData(batch_index, std::move(prepared_batch), memory_usage); if (batch_index == gstate.flushed_batch_index) { - gstate.AddTask(make_uniq()); + gstate.task_manager.AddTask(make_uniq()); } } }; @@ -282,12 +342,12 @@ class PrepareBatchTask : public BatchCopyTask { // Batch Data Handling //===--------------------------------------------------------------------===// void PhysicalFixedBatchCopy::AddRawBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t batch_index, - unique_ptr collection) const { + unique_ptr raw_batch) const { auto &gstate = gstate_p.Cast(); // add the batch index to the set of raw batches lock_guard l(gstate.lock); - auto entry = gstate.raw_batches.insert(make_pair(batch_index, std::move(collection))); + auto entry = gstate.raw_batches.insert(make_pair(batch_index, std::move(raw_batch))); if (!entry.second) { throw InternalException("Duplicate batch index %llu encountered in PhysicalFixedBatchCopy", batch_index); } @@ -300,6 +360,7 @@ static bool CorrectSizeForBatch(idx_t collection_size, idx_t desired_size) { void PhysicalFixedBatchCopy::RepartitionBatches(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index, bool final) const { auto &gstate = gstate_p.Cast(); + auto &task_manager = gstate.task_manager; // repartition batches until the min index is reached lock_guard l(gstate.lock); @@ -320,7 +381,7 @@ void PhysicalFixedBatchCopy::RepartitionBatches(ClientContext &context, GlobalSi // we have exceeded the minimum batch break; } - candidate_rows += entry->second->Count(); + candidate_rows += entry->second->collection->Count(); } if (candidate_rows < gstate.batch_size) { // not enough rows - cancel! @@ -329,70 +390,80 @@ void PhysicalFixedBatchCopy::RepartitionBatches(ClientContext &context, GlobalSi } // gather all collections we can repartition idx_t max_batch_index = 0; - vector> collections; + vector> raw_batches; for (auto entry = gstate.raw_batches.begin(); entry != gstate.raw_batches.end();) { if (entry->first >= min_index) { break; } max_batch_index = entry->first; - collections.push_back(std::move(entry->second)); + raw_batches.push_back(std::move(entry->second)); entry = gstate.raw_batches.erase(entry); } - unique_ptr current_collection; + unique_ptr append_batch; ColumnDataAppendState append_state; // now perform the actual repartitioning - for (auto &collection : collections) { - if (!current_collection) { - if (CorrectSizeForBatch(collection->Count(), gstate.batch_size)) { + for (auto ¤t_batch : raw_batches) { + if (!append_batch) { + auto current_count = current_batch->collection->Count(); + if (CorrectSizeForBatch(current_count, gstate.batch_size)) { // the collection is ~approximately equal to the batch size (off by at most one vector) // use it directly - gstate.AddTask(make_uniq(gstate.scheduled_batch_index++, std::move(collection))); - collection.reset(); - } else if (collection->Count() < gstate.batch_size) { + task_manager.AddTask( + make_uniq(gstate.scheduled_batch_index++, std::move(current_batch))); + current_batch.reset(); + } else if (current_count < gstate.batch_size) { // the collection is smaller than the batch size - use it as a starting point - current_collection = std::move(collection); - collection.reset(); + append_batch = std::move(current_batch); + current_batch.reset(); } else { // the collection is too large for a batch - we need to repartition // create an empty collection - current_collection = make_uniq(BufferAllocator::Get(context), children[0]->types); + auto new_collection = + make_uniq(context, children[0]->types, ColumnDataAllocatorType::HYBRID); + append_batch = make_uniq(0, std::move(new_collection)); } - if (current_collection) { - current_collection->InitializeAppend(append_state); + if (append_batch) { + append_batch->collection->InitializeAppend(append_state); } } - if (!collection) { + if (!current_batch) { // we have consumed the collection already - no need to append continue; } + auto ¤t_collection = *current_batch->collection; + append_batch->memory_usage += current_batch->memory_usage; // iterate the collection while appending - for (auto &chunk : collection->Chunks()) { + for (auto &chunk : current_collection.Chunks()) { // append the chunk to the collection - current_collection->Append(append_state, chunk); - if (current_collection->Count() < gstate.batch_size) { + append_batch->collection->Append(append_state, chunk); + if (append_batch->collection->Count() < gstate.batch_size) { // the collection is still under the batch size - continue continue; } // the collection is full - move it to the result and create a new one - gstate.AddTask(make_uniq(gstate.scheduled_batch_index++, std::move(current_collection))); - current_collection = make_uniq(BufferAllocator::Get(context), children[0]->types); - current_collection->InitializeAppend(append_state); + task_manager.AddTask(make_uniq(gstate.scheduled_batch_index++, std::move(append_batch))); + + auto new_collection = + make_uniq(context, children[0]->types, ColumnDataAllocatorType::HYBRID); + append_batch = make_uniq(0, std::move(new_collection)); + append_batch->collection->InitializeAppend(append_state); } } - if (current_collection && current_collection->Count() > 0) { + if (append_batch && append_batch->collection->Count() > 0) { // if there are any remaining batches that are not filled up to the batch size // AND this is not the final collection // re-add it to the set of raw (to-be-merged) batches - if (final || CorrectSizeForBatch(current_collection->Count(), gstate.batch_size)) { - gstate.AddTask(make_uniq(gstate.scheduled_batch_index++, std::move(current_collection))); + if (final || CorrectSizeForBatch(append_batch->collection->Count(), gstate.batch_size)) { + task_manager.AddTask(make_uniq(gstate.scheduled_batch_index++, std::move(append_batch))); } else { - gstate.raw_batches[max_batch_index] = std::move(current_collection); + gstate.raw_batches[max_batch_index] = std::move(append_batch); } } } void PhysicalFixedBatchCopy::FlushBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index) const { auto &gstate = gstate_p.Cast(); + auto &memory_manager = gstate.memory_manager; // flush batch data to disk (if there are any to flush) // grab the flush lock - we can only call flush_batch with this lock @@ -406,7 +477,7 @@ void PhysicalFixedBatchCopy::FlushBatchData(ClientContext &context, GlobalSinkSt } ActiveFlushGuard active_flush(gstate.any_flushing); while (true) { - unique_ptr batch_data; + unique_ptr batch_data; { lock_guard l(gstate.lock); if (gstate.batch_data.empty()) { @@ -424,7 +495,9 @@ void PhysicalFixedBatchCopy::FlushBatchData(ClientContext &context, GlobalSinkSt batch_data = std::move(entry->second); gstate.batch_data.erase(entry); } - function.flush_batch(context, *bind_data, *gstate.global_state, *batch_data); + function.flush_batch(context, *bind_data, *gstate.global_state, *batch_data->prepared_data); + batch_data->prepared_data.reset(); + memory_manager.ReduceUnflushedMemory(batch_data->memory_usage); gstate.flushed_batch_index++; } } @@ -434,7 +507,7 @@ void PhysicalFixedBatchCopy::FlushBatchData(ClientContext &context, GlobalSinkSt //===--------------------------------------------------------------------===// bool PhysicalFixedBatchCopy::ExecuteTask(ClientContext &context, GlobalSinkState &gstate_p) const { auto &gstate = gstate_p.Cast(); - auto task = gstate.GetTask(); + auto task = gstate.task_manager.GetTask(); if (!task) { return false; } @@ -450,23 +523,46 @@ void PhysicalFixedBatchCopy::ExecuteTasks(ClientContext &context, GlobalSinkStat //===--------------------------------------------------------------------===// // Next Batch //===--------------------------------------------------------------------===// +void PhysicalFixedBatchCopy::AddLocalBatch(ClientContext &context, GlobalSinkState &gstate_p, + LocalSinkState &lstate) const { + auto &state = lstate.Cast(); + auto &gstate = gstate_p.Cast(); + auto &memory_manager = gstate.memory_manager; + if (!state.collection || state.collection->Count() == 0) { + return; + } + // we finished processing this batch + // start flushing data + auto min_batch_index = state.partition_info.min_batch_index.GetIndex(); + // push the raw batch data into the set of unprocessed batches + auto raw_batch = make_uniq(state.local_memory_usage, std::move(state.collection)); + AddRawBatchData(context, gstate, state.batch_index.GetIndex(), std::move(raw_batch)); + // attempt to repartition to our desired batch size + RepartitionBatches(context, gstate, min_batch_index); + // unblock tasks so they can help process batches (if any are blocked) + auto any_unblocked = memory_manager.UnblockTasks(); + // if any threads were unblocked they can pick up execution of the tasks + // otherwise we will execute a task and flush here + if (!any_unblocked) { + //! Execute a single repartition task + ExecuteTask(context, gstate); + //! Flush batch data to disk (if any is ready) + FlushBatchData(context, gstate, memory_manager.GetMinimumBatchIndex()); + } +} + SinkNextBatchType PhysicalFixedBatchCopy::NextBatch(ExecutionContext &context, OperatorSinkNextBatchInput &input) const { auto &lstate = input.local_state; - auto &gstate_p = input.global_state; auto &state = lstate.Cast(); - if (state.collection && state.collection->Count() > 0) { - // we finished processing this batch - // start flushing data - auto min_batch_index = lstate.partition_info.min_batch_index.GetIndex(); - // push the raw batch data into the set of unprocessed batches - AddRawBatchData(context.client, gstate_p, state.batch_index.GetIndex(), std::move(state.collection)); - // attempt to repartition to our desired batch size - RepartitionBatches(context.client, gstate_p, min_batch_index); - // execute a single batch task - ExecuteTask(context.client, gstate_p); - FlushBatchData(context.client, gstate_p, min_batch_index); - } + auto &gstate = input.global_state.Cast(); + auto &memory_manager = gstate.memory_manager; + + // add the previously finished batch (if any) to the state + AddLocalBatch(context.client, gstate, state); + + // update the minimum batch index + memory_manager.UpdateMinBatchIndex(state.partition_info.min_batch_index.GetIndex()); state.batch_index = lstate.partition_info.batch_index.GetIndex(); state.InitializeCollection(context.client, *this); @@ -478,8 +574,11 @@ unique_ptr PhysicalFixedBatchCopy::GetLocalSinkState(ExecutionCo } unique_ptr PhysicalFixedBatchCopy::GetGlobalSinkState(ClientContext &context) const { - auto result = - make_uniq(function.copy_to_initialize_global(context, *bind_data, file_path)); + // request memory based on the minimum amount of memory per column + auto minimum_memory_per_thread = + FixedBatchCopyGlobalState::MINIMUM_MEMORY_PER_COLUMN_PER_THREAD * children[0]->types.size(); + auto result = make_uniq( + context, function.copy_to_initialize_global(context, *bind_data, file_path), minimum_memory_per_thread); result->batch_size = function.desired_batch_size(context, *bind_data); return std::move(result); } diff --git a/src/execution/operator/persistent/physical_insert.cpp b/src/execution/operator/persistent/physical_insert.cpp index 1dd14127d232..f82bbf0a92b6 100644 --- a/src/execution/operator/persistent/physical_insert.cpp +++ b/src/execution/operator/persistent/physical_insert.cpp @@ -431,14 +431,13 @@ SinkResultType PhysicalInsert::Sink(ExecutionContext &context, DataChunk &chunk, gstate.initialized = true; } + if (return_chunk) { + gstate.return_collection.Append(lstate.insert_chunk); + } idx_t updated_tuples = OnConflictHandling(table, context, lstate); gstate.insert_count += lstate.insert_chunk.size(); gstate.insert_count += updated_tuples; storage.LocalAppend(gstate.append_state, table, context.client, lstate.insert_chunk, true); - - if (return_chunk) { - gstate.return_collection.Append(lstate.insert_chunk); - } } else { D_ASSERT(!return_chunk); // parallel append @@ -495,8 +494,8 @@ SinkCombineResultType PhysicalInsert::Combine(ExecutionContext &context, Operato storage.FinalizeLocalAppend(gstate.append_state); } else { // we have written rows to disk optimistically - merge directly into the transaction-local storage - gstate.table.GetStorage().FinalizeOptimisticWriter(context.client, *lstate.writer); gstate.table.GetStorage().LocalMerge(context.client, *lstate.local_collection); + gstate.table.GetStorage().FinalizeOptimisticWriter(context.client, *lstate.writer); } return SinkCombineResultType::FINISHED; diff --git a/src/execution/operator/set/physical_recursive_cte.cpp b/src/execution/operator/set/physical_recursive_cte.cpp index fba7d664d7e0..57a847dd0775 100644 --- a/src/execution/operator/set/physical_recursive_cte.cpp +++ b/src/execution/operator/set/physical_recursive_cte.cpp @@ -4,6 +4,7 @@ #include "duckdb/common/vector_operations/vector_operations.hpp" #include "duckdb/execution/aggregate_hashtable.hpp" #include "duckdb/execution/executor.hpp" +#include "duckdb/execution/operator/scan/physical_column_data_scan.hpp" #include "duckdb/parallel/event.hpp" #include "duckdb/parallel/meta_pipeline.hpp" #include "duckdb/parallel/pipeline.hpp" @@ -173,6 +174,16 @@ void PhysicalRecursiveCTE::ExecuteRecursivePipelines(ExecutionContext &context) //===--------------------------------------------------------------------===// // Pipeline Construction //===--------------------------------------------------------------------===// + +static void GatherColumnDataScans(const PhysicalOperator &op, vector> &delim_scans) { + if (op.type == PhysicalOperatorType::DELIM_SCAN || op.type == PhysicalOperatorType::CTE_SCAN) { + delim_scans.push_back(op); + } + for (auto &child : op.children) { + GatherColumnDataScans(*child, delim_scans); + } +} + void PhysicalRecursiveCTE::BuildPipelines(Pipeline ¤t, MetaPipeline &meta_pipeline) { op_state.reset(); sink_state.reset(); @@ -192,6 +203,20 @@ void PhysicalRecursiveCTE::BuildPipelines(Pipeline ¤t, MetaPipeline &meta_ recursive_meta_pipeline = make_shared(executor, state, this); recursive_meta_pipeline->SetRecursiveCTE(); recursive_meta_pipeline->Build(*children[1]); + + vector> ops; + GatherColumnDataScans(*children[1], ops); + + for (auto op : ops) { + auto entry = state.cte_dependencies.find(op); + if (entry == state.cte_dependencies.end()) { + continue; + } + // this chunk scan introduces a dependency to the current pipeline + // namely a dependency on the CTE pipeline to finish + auto cte_dependency = entry->second.get().shared_from_this(); + current.AddDependency(cte_dependency); + } } vector> PhysicalRecursiveCTE::GetSources() const { diff --git a/src/execution/perfect_aggregate_hashtable.cpp b/src/execution/perfect_aggregate_hashtable.cpp index a3a6bc9970a8..da7c20192452 100644 --- a/src/execution/perfect_aggregate_hashtable.cpp +++ b/src/execution/perfect_aggregate_hashtable.cpp @@ -1,5 +1,5 @@ #include "duckdb/execution/perfect_aggregate_hashtable.hpp" - +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/row_operations/row_operations.hpp" #include "duckdb/execution/expression_executor.hpp" @@ -199,13 +199,13 @@ static void ReconstructGroupVectorTemplated(uint32_t group_values[], Value &min, auto min_data = min.GetValueUnsafe(); for (idx_t i = 0; i < entry_count; i++) { // extract the value of this group from the total group index - auto group_index = (group_values[i] >> shift) & mask; + auto group_index = UnsafeNumericCast((group_values[i] >> shift) & mask); if (group_index == 0) { // if it is 0, the value is NULL validity_mask.SetInvalid(i); } else { // otherwise we add the value (minus 1) to the min value - data[i] = min_data + group_index - 1; + data[i] = UnsafeNumericCast(min_data + group_index - 1); } } } @@ -254,7 +254,7 @@ void PerfectAggregateHashTable::Scan(idx_t &scan_position, DataChunk &result) { if (group_is_set[scan_position]) { // this group is set: add it to the set of groups to extract data_pointers[entry_count] = data + tuple_size * scan_position; - group_values[entry_count] = scan_position; + group_values[entry_count] = NumericCast(scan_position); entry_count++; if (entry_count == STANDARD_VECTOR_SIZE) { scan_position++; diff --git a/src/execution/physical_plan/CMakeLists.txt b/src/execution/physical_plan/CMakeLists.txt index 07cf6fde4db0..f9124752f6d7 100644 --- a/src/execution/physical_plan/CMakeLists.txt +++ b/src/execution/physical_plan/CMakeLists.txt @@ -26,7 +26,6 @@ add_library_unity( plan_get.cpp plan_insert.cpp plan_limit.cpp - plan_limit_percent.cpp plan_order.cpp plan_pivot.cpp plan_positional_join.cpp diff --git a/src/execution/physical_plan/plan_aggregate.cpp b/src/execution/physical_plan/plan_aggregate.cpp index 4160783e2ad5..c069fd9c7276 100644 --- a/src/execution/physical_plan/plan_aggregate.cpp +++ b/src/execution/physical_plan/plan_aggregate.cpp @@ -20,7 +20,7 @@ static uint32_t RequiredBitsForValue(uint32_t n) { n >>= 1; required_bits++; } - return required_bits; + return UnsafeNumericCast(required_bits); } template @@ -130,7 +130,7 @@ static bool CanUsePerfectHashAggregate(ClientContext &context, LogicalAggregate range += 2; // figure out how many bits we need - idx_t required_bits = RequiredBitsForValue(range); + idx_t required_bits = RequiredBitsForValue(UnsafeNumericCast(range)); bits_per_group.push_back(required_bits); perfect_hash_bits += required_bits; // check if we have exceeded the bits for the hash diff --git a/src/execution/physical_plan/plan_comparison_join.cpp b/src/execution/physical_plan/plan_comparison_join.cpp index 166bc9449e59..3397a0604fa6 100644 --- a/src/execution/physical_plan/plan_comparison_join.cpp +++ b/src/execution/physical_plan/plan_comparison_join.cpp @@ -82,7 +82,7 @@ void CheckForPerfectJoinOpt(LogicalComparisonJoin &op, PerfectHashJoinStats &joi } // and when the build range is smaller than the threshold - auto &stats_build = *op.join_stats[0].get(); // lhs stats + auto &stats_build = *op.join_stats[1].get(); // rhs stats if (!NumericStats::HasMinMax(stats_build)) { return; } @@ -97,7 +97,7 @@ void CheckForPerfectJoinOpt(LogicalComparisonJoin &op, PerfectHashJoinStats &joi } // Fill join_stats for invisible join - auto &stats_probe = *op.join_stats[1].get(); // rhs stats + auto &stats_probe = *op.join_stats[0].get(); // lhs stats if (!NumericStats::HasMinMax(stats_probe)) { return; } diff --git a/src/execution/physical_plan/plan_distinct.cpp b/src/execution/physical_plan/plan_distinct.cpp index a2980e872b95..e0bb12d688c9 100644 --- a/src/execution/physical_plan/plan_distinct.cpp +++ b/src/execution/physical_plan/plan_distinct.cpp @@ -6,6 +6,7 @@ #include "duckdb/planner/expression/bound_reference_expression.hpp" #include "duckdb/planner/operator/logical_distinct.hpp" #include "duckdb/function/function_binder.hpp" +#include "duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp" namespace duckdb { @@ -61,6 +62,15 @@ unique_ptr PhysicalPlanGenerator::CreatePlan(LogicalDistinct & auto first_aggregate = function_binder.BindAggregateFunction( FirstFun::GetFunction(logical_type), std::move(first_children), nullptr, AggregateType::NON_DISTINCT); first_aggregate->order_bys = op.order_by ? op.order_by->Copy() : nullptr; + + if (ClientConfig::GetConfig(context).enable_optimizer) { + bool changes_made = false; + auto new_expr = OrderedAggregateOptimizer::Apply(context, *first_aggregate, groups, changes_made); + if (new_expr) { + D_ASSERT(new_expr->type == ExpressionType::BOUND_AGGREGATE); + first_aggregate = unique_ptr_cast(std::move(new_expr)); + } + } // add the projection projections.push_back(make_uniq(logical_type, group_count + aggregates.size())); // push it to the list of aggregates diff --git a/src/execution/physical_plan/plan_insert.cpp b/src/execution/physical_plan/plan_insert.cpp index b0e35341d522..3aa87d9abd7e 100644 --- a/src/execution/physical_plan/plan_insert.cpp +++ b/src/execution/physical_plan/plan_insert.cpp @@ -14,11 +14,18 @@ static OrderPreservationType OrderPreservationRecursive(PhysicalOperator &op) { if (op.IsSource()) { return op.SourceOrder(); } + + idx_t child_idx = 0; for (auto &child : op.children) { + // Do not take the materialization phase of physical CTEs into account + if (op.type == PhysicalOperatorType::CTE && child_idx == 0) { + continue; + } auto child_preservation = OrderPreservationRecursive(*child); if (child_preservation != OrderPreservationType::INSERTION_ORDER) { return child_preservation; } + child_idx++; } return OrderPreservationType::INSERTION_ORDER; } diff --git a/src/execution/physical_plan/plan_limit.cpp b/src/execution/physical_plan/plan_limit.cpp index b241b3892fb4..e10764cc336c 100644 --- a/src/execution/physical_plan/plan_limit.cpp +++ b/src/execution/physical_plan/plan_limit.cpp @@ -1,32 +1,64 @@ #include "duckdb/execution/operator/helper/physical_limit.hpp" #include "duckdb/execution/operator/helper/physical_streaming_limit.hpp" +#include "duckdb/execution/operator/helper/physical_limit_percent.hpp" #include "duckdb/execution/physical_plan_generator.hpp" #include "duckdb/main/config.hpp" #include "duckdb/planner/operator/logical_limit.hpp" namespace duckdb { +bool UseBatchLimit(BoundLimitNode &limit_val, BoundLimitNode &offset_val) { +#ifdef DUCKDB_ALTERNATIVE_VERIFY + return true; +#else + // we only use batch limit when we are computing a small amount of values + // as the batch limit materializes this many rows PER thread + static constexpr const idx_t BATCH_LIMIT_THRESHOLD = 10000; + + if (limit_val.Type() != LimitNodeType::CONSTANT_VALUE) { + return false; + } + if (offset_val.Type() == LimitNodeType::EXPRESSION_VALUE) { + return false; + } + idx_t total_offset = limit_val.GetConstantValue(); + if (offset_val.Type() == LimitNodeType::CONSTANT_VALUE) { + total_offset += offset_val.GetConstantValue(); + } + return total_offset <= BATCH_LIMIT_THRESHOLD; +#endif +} + unique_ptr PhysicalPlanGenerator::CreatePlan(LogicalLimit &op) { D_ASSERT(op.children.size() == 1); auto plan = CreatePlan(*op.children[0]); unique_ptr limit; - if (!PreserveInsertionOrder(*plan)) { - // use parallel streaming limit if insertion order is not important - limit = make_uniq(op.types, (idx_t)op.limit_val, op.offset_val, std::move(op.limit), - std::move(op.offset), op.estimated_cardinality, true); - } else { - // maintaining insertion order is important - if (UseBatchIndex(*plan)) { - // source supports batch index: use parallel batch limit - limit = make_uniq(op.types, (idx_t)op.limit_val, op.offset_val, std::move(op.limit), - std::move(op.offset), op.estimated_cardinality); + switch (op.limit_val.Type()) { + case LimitNodeType::EXPRESSION_PERCENTAGE: + case LimitNodeType::CONSTANT_PERCENTAGE: + limit = make_uniq(op.types, std::move(op.limit_val), std::move(op.offset_val), + op.estimated_cardinality); + break; + default: + if (!PreserveInsertionOrder(*plan)) { + // use parallel streaming limit if insertion order is not important + limit = make_uniq(op.types, std::move(op.limit_val), std::move(op.offset_val), + op.estimated_cardinality, true); } else { - // source does not support batch index: use a non-parallel streaming limit - limit = make_uniq(op.types, (idx_t)op.limit_val, op.offset_val, std::move(op.limit), - std::move(op.offset), op.estimated_cardinality, false); + // maintaining insertion order is important + if (UseBatchIndex(*plan) && UseBatchLimit(op.limit_val, op.offset_val)) { + // source supports batch index: use parallel batch limit + limit = make_uniq(op.types, std::move(op.limit_val), std::move(op.offset_val), + op.estimated_cardinality); + } else { + // source does not support batch index: use a non-parallel streaming limit + limit = make_uniq(op.types, std::move(op.limit_val), std::move(op.offset_val), + op.estimated_cardinality, false); + } } + break; } limit->children.push_back(std::move(plan)); diff --git a/src/execution/physical_plan/plan_limit_percent.cpp b/src/execution/physical_plan/plan_limit_percent.cpp deleted file mode 100644 index 7caa5b320d02..000000000000 --- a/src/execution/physical_plan/plan_limit_percent.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "duckdb/execution/operator/helper/physical_limit_percent.hpp" -#include "duckdb/execution/physical_plan_generator.hpp" -#include "duckdb/planner/operator/logical_limit_percent.hpp" - -namespace duckdb { - -unique_ptr PhysicalPlanGenerator::CreatePlan(LogicalLimitPercent &op) { - D_ASSERT(op.children.size() == 1); - - auto plan = CreatePlan(*op.children[0]); - - auto limit = make_uniq(op.types, op.limit_percent, op.offset_val, std::move(op.limit), - std::move(op.offset), op.estimated_cardinality); - limit->children.push_back(std::move(plan)); - return std::move(limit); -} - -} // namespace duckdb diff --git a/src/execution/physical_plan_generator.cpp b/src/execution/physical_plan_generator.cpp index 705d522aeffa..bd79b0db592a 100644 --- a/src/execution/physical_plan_generator.cpp +++ b/src/execution/physical_plan_generator.cpp @@ -92,9 +92,6 @@ unique_ptr PhysicalPlanGenerator::CreatePlan(LogicalOperator & case LogicalOperatorType::LOGICAL_LIMIT: plan = CreatePlan(op.Cast()); break; - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: - plan = CreatePlan(op.Cast()); - break; case LogicalOperatorType::LOGICAL_SAMPLE: plan = CreatePlan(op.Cast()); break; diff --git a/src/execution/radix_partitioned_hashtable.cpp b/src/execution/radix_partitioned_hashtable.cpp index 952fddb05175..640f29687c69 100644 --- a/src/execution/radix_partitioned_hashtable.cpp +++ b/src/execution/radix_partitioned_hashtable.cpp @@ -644,20 +644,17 @@ bool RadixHTGlobalSourceState::AssignTask(RadixHTGlobalSinkState &sink, RadixHTL // We first try to assign a Scan task, then a Finalize task if that didn't work bool scan_assigned = false; - { - lock_guard gstate_guard(lock); - if (scan_idx < n_partitions && sink.partitions[scan_idx]->finalized) { - lstate.task_idx = scan_idx++; - scan_assigned = true; - if (scan_idx == n_partitions) { - // We will never be able to assign another task, unblock blocked tasks - lock_guard sink_guard(sink.lock); - if (!sink.blocked_tasks.empty()) { - for (auto &state : sink.blocked_tasks) { - state.Callback(); - } - sink.blocked_tasks.clear(); + if (scan_idx < n_partitions && sink.partitions[scan_idx]->finalized) { + lstate.task_idx = scan_idx++; + scan_assigned = true; + if (scan_idx == n_partitions) { + // We will never be able to assign another task, unblock blocked tasks + lock_guard sink_guard(sink.lock); + if (!sink.blocked_tasks.empty()) { + for (auto &state : sink.blocked_tasks) { + state.Callback(); } + sink.blocked_tasks.clear(); } } } @@ -754,6 +751,7 @@ void RadixHTLocalSourceState::Finalize(RadixHTGlobalSinkState &sink, RadixHTGlob partition.data->Combine(*ht->GetPartitionedData()->GetPartitions()[0]); // Mark partition as ready to scan + lock_guard glock(gstate.lock); partition.finalized = true; if (++sink.finalize_done == sink.partitions.size()) { @@ -762,18 +760,15 @@ void RadixHTLocalSourceState::Finalize(RadixHTGlobalSinkState &sink, RadixHTGlob } // Unblock blocked tasks so they can scan this partition - { - lock_guard sink_guard(sink.lock); - if (!sink.blocked_tasks.empty()) { - for (auto &state : sink.blocked_tasks) { - state.Callback(); - } - sink.blocked_tasks.clear(); + lock_guard sink_guard(sink.lock); + if (!sink.blocked_tasks.empty()) { + for (auto &state : sink.blocked_tasks) { + state.Callback(); } + sink.blocked_tasks.clear(); } // Make sure this thread's aggregate allocator does not get lost - lock_guard guard(sink.lock); sink.stored_allocators.emplace_back(ht->GetAggregateAllocator()); } @@ -905,18 +900,19 @@ SourceResultType RadixPartitionedHashTable::GetData(ExecutionContext &context, D } while (!gstate.finished && chunk.size() == 0) { - if (!lstate.TaskFinished() || gstate.AssignTask(sink, lstate)) { - lstate.ExecuteTask(sink, gstate, chunk); - } else { + if (lstate.TaskFinished()) { lock_guard gstate_guard(gstate.lock); - if (gstate.scan_idx < sink.partitions.size()) { - lock_guard sink_guard(sink.lock); - sink.blocked_tasks.push_back(input.interrupt_state); - return SourceResultType::BLOCKED; - } else { - return SourceResultType::FINISHED; + if (!gstate.AssignTask(sink, lstate)) { + if (gstate.scan_idx < sink.partitions.size()) { + lock_guard sink_guard(sink.lock); + sink.blocked_tasks.push_back(input.interrupt_state); + return SourceResultType::BLOCKED; + } else { + return SourceResultType::FINISHED; + } } } + lstate.ExecuteTask(sink, gstate, chunk); } if (chunk.size() != 0) { diff --git a/src/execution/window_executor.cpp b/src/execution/window_executor.cpp index d18166d02798..5915f7d156da 100644 --- a/src/execution/window_executor.cpp +++ b/src/execution/window_executor.cpp @@ -207,19 +207,24 @@ static idx_t FindTypedRangeBound(const WindowInputColumn &over, const idx_t orde WindowColumnIterator begin(over, order_begin); WindowColumnIterator end(over, order_end); - if (order_begin < prev.start && prev.start < order_end) { - const auto first = over.GetCell(prev.start); - if (!comp(val, first)) { - // prev.first <= val, so we can start further forward - begin += (prev.start - order_begin); + // Try to reuse the previous bounds to restrict the search. + // This is only valid if the previous bounds were non-empty + // Only inject the comparisons if the previous bounds are a strict subset. + if (prev.start < prev.end) { + if (order_begin < prev.start && prev.start < order_end) { + const auto first = over.GetCell(prev.start); + if (!comp(val, first)) { + // prev.first <= val, so we can start further forward + begin += (prev.start - order_begin); + } } - } - if (order_begin <= prev.end && prev.end < order_end) { - const auto second = over.GetCell(prev.end); - if (!comp(second, val)) { - // val <= prev.second, so we can end further back - // (prev.second is the largest peer) - end -= (order_end - prev.end - 1); + if (order_begin < prev.end && prev.end < order_end) { + const auto second = over.GetCell(prev.end - 1); + if (!comp(second, val)) { + // val <= prev.second, so we can end further back + // (prev.second is the largest peer) + end -= (order_end - prev.end - 1); + } } } @@ -940,77 +945,81 @@ void WindowAggregateExecutor::Sink(DataChunk &input_chunk, const idx_t input_idx WindowExecutor::Sink(input_chunk, input_idx, total_count); } -void WindowAggregateExecutor::Finalize() { - D_ASSERT(aggregator); - - // Estimate the frame statistics - // Default to the entire partition if we don't know anything - FrameStats stats; - const int64_t count = aggregator->GetInputs().size(); +static void ApplyWindowStats(const WindowBoundary &boundary, FrameDelta &delta, BaseStatistics *base, bool is_start) { + // Avoid overflow by clamping to the frame bounds + auto base_stats = delta; - // First entry is the frame start - stats[0] = FrameDelta(-count, count); - auto base = wexpr.expr_stats.empty() ? nullptr : wexpr.expr_stats[0].get(); - switch (wexpr.start) { + switch (boundary) { case WindowBoundary::UNBOUNDED_PRECEDING: - stats[0].end = 0; + if (is_start) { + delta.end = 0; + return; + } break; - case WindowBoundary::CURRENT_ROW_ROWS: - stats[0].begin = stats[0].end = 0; + case WindowBoundary::UNBOUNDED_FOLLOWING: + if (!is_start) { + delta.begin = 0; + return; + } break; + case WindowBoundary::CURRENT_ROW_ROWS: + delta.begin = delta.end = 0; + return; case WindowBoundary::EXPR_PRECEDING_ROWS: if (base && base->GetStatsType() == StatisticsType::NUMERIC_STATS && NumericStats::HasMinMax(*base)) { // Preceding so negative offset from current row - stats[0].begin = -NumericStats::GetMax(*base); - stats[0].end = -NumericStats::GetMin(*base) + 1; + base_stats.begin = NumericStats::GetMin(*base); + base_stats.end = NumericStats::GetMax(*base); + if (delta.begin < base_stats.end && base_stats.end < delta.end) { + delta.begin = -base_stats.end; + } + if (delta.begin < base_stats.begin && base_stats.begin < delta.end) { + delta.end = -base_stats.begin + 1; + } } - break; + return; case WindowBoundary::EXPR_FOLLOWING_ROWS: if (base && base->GetStatsType() == StatisticsType::NUMERIC_STATS && NumericStats::HasMinMax(*base)) { - stats[0].begin = NumericStats::GetMin(*base); - stats[0].end = NumericStats::GetMax(*base) + 1; + base_stats.begin = NumericStats::GetMin(*base); + base_stats.end = NumericStats::GetMax(*base); + if (base_stats.end < delta.end) { + delta.end = base_stats.end + 1; + } } - break; + return; case WindowBoundary::CURRENT_ROW_RANGE: case WindowBoundary::EXPR_PRECEDING_RANGE: case WindowBoundary::EXPR_FOLLOWING_RANGE: - break; + return; default: + break; + } + + if (is_start) { throw InternalException("Unsupported window start boundary"); + } else { + throw InternalException("Unsupported window end boundary"); } +} + +void WindowAggregateExecutor::Finalize() { + D_ASSERT(aggregator); + + // Estimate the frame statistics + // Default to the entire partition if we don't know anything + FrameStats stats; + const int64_t count = aggregator->GetInputs().size(); + + // First entry is the frame start + stats[0] = FrameDelta(-count, count); + auto base = wexpr.expr_stats.empty() ? nullptr : wexpr.expr_stats[0].get(); + ApplyWindowStats(wexpr.start, stats[0], base, true); // Second entry is the frame end stats[1] = FrameDelta(-count, count); base = wexpr.expr_stats.empty() ? nullptr : wexpr.expr_stats[1].get(); - switch (wexpr.end) { - case WindowBoundary::UNBOUNDED_FOLLOWING: - stats[1].begin = 0; - break; - case WindowBoundary::CURRENT_ROW_ROWS: - stats[1].begin = stats[1].end = 0; - break; - case WindowBoundary::EXPR_PRECEDING_ROWS: - if (base && base->GetStatsType() == StatisticsType::NUMERIC_STATS && NumericStats::HasMinMax(*base)) { - // Preceding so negative offset from current row - stats[1].begin = -NumericStats::GetMax(*base); - stats[1].end = -NumericStats::GetMin(*base) + 1; - } - break; - case WindowBoundary::EXPR_FOLLOWING_ROWS: - if (base && base->GetStatsType() == StatisticsType::NUMERIC_STATS && NumericStats::HasMinMax(*base)) { - stats[1].begin = NumericStats::GetMin(*base); - stats[1].end = NumericStats::GetMax(*base) + 1; - } - break; - - case WindowBoundary::CURRENT_ROW_RANGE: - case WindowBoundary::EXPR_PRECEDING_RANGE: - case WindowBoundary::EXPR_FOLLOWING_RANGE: - break; - default: - throw InternalException("Unsupported window end boundary"); - } + ApplyWindowStats(wexpr.end, stats[1], base, false); aggregator->Finalize(stats); } diff --git a/src/execution/window_segment_tree.cpp b/src/execution/window_segment_tree.cpp index 95c0e5ab1b46..e41ffae510f1 100644 --- a/src/execution/window_segment_tree.cpp +++ b/src/execution/window_segment_tree.cpp @@ -509,7 +509,7 @@ size_t WindowNaiveState::Hash(idx_t rid) { auto &inputs = const_cast(gstate.GetInputs()); leaves.Reference(inputs); - sel_t s = rid; + auto s = UnsafeNumericCast(rid); SelectionVector sel(&s); leaves.Slice(sel, 1); leaves.Hash(hashes); @@ -520,10 +520,10 @@ size_t WindowNaiveState::Hash(idx_t rid) { bool WindowNaiveState::KeyEqual(const idx_t &lhs, const idx_t &rhs) { auto &inputs = const_cast(gstate.GetInputs()); - sel_t l = lhs; + auto l = UnsafeNumericCast(lhs); SelectionVector lsel(&l); - sel_t r = rhs; + auto r = UnsafeNumericCast(rhs); SelectionVector rsel(&r); sel_t f = 0; @@ -565,7 +565,7 @@ void WindowNaiveState::Evaluate(const DataChunk &bounds, Vector &result, idx_t c } pdata[flush_count] = agg_state; - update_sel[flush_count++] = f; + update_sel[flush_count++] = UnsafeNumericCast(f); if (flush_count >= STANDARD_VECTOR_SIZE) { FlushStates(); } @@ -616,7 +616,7 @@ void WindowSegmentTree::Finalize(const FrameStats &stats) { } WindowSegmentTree::~WindowSegmentTree() { - if (!aggr.function.destructor) { + if (!aggr.function.destructor || !gstate) { // nothing to destroy return; } @@ -1333,7 +1333,7 @@ WindowDistinctAggregator::DistinctSortTree::DistinctSortTree(ZippedElements &&pr if (prev_idx < i + 1) { updates[nupdate] = curr_state; // input_idx - sel[nupdate] = std::get<1>(zipped_level[j]); + sel[nupdate] = UnsafeNumericCast(std::get<1>(zipped_level[j])); ++nupdate; } diff --git a/src/function/aggregate/distributive/first.cpp b/src/function/aggregate/distributive/first.cpp index 65a50647ccc4..2d2aa0530395 100644 --- a/src/function/aggregate/distributive/first.cpp +++ b/src/function/aggregate/distributive/first.cpp @@ -88,7 +88,7 @@ struct FirstFunctionString : public FirstFunctionBase { auto ptr = LAST ? new char[len] : char_ptr_cast(input_data.allocator.Allocate(len)); memcpy(ptr, value.GetData(), len); - state.value = string_t(ptr, len); + state.value = string_t(ptr, UnsafeNumericCast(len)); } } } @@ -157,7 +157,7 @@ struct FirstVectorFunction { state.value = new Vector(input.GetType()); state.value->SetVectorType(VectorType::CONSTANT_VECTOR); } - sel_t selv = idx; + sel_t selv = UnsafeNumericCast(idx); SelectionVector sel(&selv); VectorOperations::Copy(input, *state.value, sel, 1, 0, 0); } diff --git a/src/function/aggregate/sorted_aggregate_function.cpp b/src/function/aggregate/sorted_aggregate_function.cpp index 1ba8ae453b8d..9011b4cf1002 100644 --- a/src/function/aggregate/sorted_aggregate_function.cpp +++ b/src/function/aggregate/sorted_aggregate_function.cpp @@ -1,3 +1,4 @@ +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/sort/sort.hpp" #include "duckdb/common/types/column/column_data_collection.hpp" #include "duckdb/common/types/list_segment.hpp" @@ -519,7 +520,7 @@ struct SortedAggregateFunction { order_state->sel.Initialize(sel_data.data() + order_state->offset); start += order_state->nsel; } - sel_data[order_state->offset++] = sidx; + sel_data[order_state->offset++] = UnsafeNumericCast(sidx); } // Append nonempty slices to the arguments @@ -603,7 +604,7 @@ struct SortedAggregateFunction { if (unsorted_count < order_bind.threshold) { auto state = sdata[finalized]; prefixed.Reset(); - prefixed.data[0].Reference(Value::USMALLINT(finalized)); + prefixed.data[0].Reference(Value::USMALLINT(UnsafeNumericCast(finalized))); state->Finalize(order_bind, prefixed, *local_sort); unsorted_count += state_unprocessed[finalized]; diff --git a/src/function/cast/array_casts.cpp b/src/function/cast/array_casts.cpp index 1f848d8c8635..2357a2c2ca4e 100644 --- a/src/function/cast/array_casts.cpp +++ b/src/function/cast/array_casts.cpp @@ -46,7 +46,7 @@ static bool ArrayToArrayCast(Vector &source, Vector &result, idx_t count, CastPa // Cant cast between arrays of different sizes auto msg = StringUtil::Format("Cannot cast array of size %u to array of size %u", source_array_size, target_array_size); - HandleCastError::AssignError(msg, parameters.error_message); + HandleCastError::AssignError(msg, parameters); if (!parameters.strict) { // if this was a TRY_CAST, we know every row will fail, so just return null result.SetVectorType(VectorType::CONSTANT_VECTOR); @@ -169,9 +169,7 @@ static bool ArrayToListCast(Vector &source, Vector &result, idx_t count, CastPar // FIXME: dont flatten source.Flatten(count); - if (count == 1) { - result.SetVectorType(VectorType::CONSTANT_VECTOR); - } + auto array_size = ArrayType::GetSize(source.GetType()); auto child_count = count * array_size; diff --git a/src/function/cast/bit_cast.cpp b/src/function/cast/bit_cast.cpp index 6f01047f3783..e542a142760b 100644 --- a/src/function/cast/bit_cast.cpp +++ b/src/function/cast/bit_cast.cpp @@ -11,31 +11,31 @@ BoundCastInfo DefaultCasts::BitCastSwitch(BindCastInput &input, const LogicalTyp switch (target.id()) { // Numerics case LogicalTypeId::BOOLEAN: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::TINYINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::SMALLINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::INTEGER: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::BIGINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::UTINYINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::USMALLINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::UINTEGER: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::UBIGINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::HUGEINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::UHUGEINT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::FLOAT: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::DOUBLE: - return BoundCastInfo(&VectorCastHelpers::TryCastLoop); + return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop); case LogicalTypeId::BLOB: return BoundCastInfo(&VectorCastHelpers::StringCast); diff --git a/src/function/cast/cast_function_set.cpp b/src/function/cast/cast_function_set.cpp index ce8c9943db3b..5e30e4c3ba1d 100644 --- a/src/function/cast/cast_function_set.cpp +++ b/src/function/cast/cast_function_set.cpp @@ -14,6 +14,7 @@ BindCastInput::BindCastInput(CastFunctionSet &function_set, optional_ptr 0; i--) { auto &bind_function = bind_functions[i - 1]; BindCastInput input(*this, bind_function.info.get(), get_input.context); + input.query_location = get_input.query_location; auto result = bind_function.function(input, source, target); if (result.function) { // found a cast function! return it diff --git a/src/function/cast/decimal_cast.cpp b/src/function/cast/decimal_cast.cpp index 6f16bb426e20..3af81e0f0b19 100644 --- a/src/function/cast/decimal_cast.cpp +++ b/src/function/cast/decimal_cast.cpp @@ -15,17 +15,17 @@ static bool FromDecimalCast(Vector &source, Vector &result, idx_t count, CastPar auto scale = DecimalType::GetScale(source_type); switch (source_type.InternalType()) { case PhysicalType::INT16: - return VectorCastHelpers::TemplatedDecimalCast( - source, result, count, parameters.error_message, width, scale); + return VectorCastHelpers::TemplatedDecimalCast(source, result, count, + parameters, width, scale); case PhysicalType::INT32: - return VectorCastHelpers::TemplatedDecimalCast( - source, result, count, parameters.error_message, width, scale); + return VectorCastHelpers::TemplatedDecimalCast(source, result, count, + parameters, width, scale); case PhysicalType::INT64: - return VectorCastHelpers::TemplatedDecimalCast( - source, result, count, parameters.error_message, width, scale); + return VectorCastHelpers::TemplatedDecimalCast(source, result, count, + parameters, width, scale); case PhysicalType::INT128: - return VectorCastHelpers::TemplatedDecimalCast( - source, result, count, parameters.error_message, width, scale); + return VectorCastHelpers::TemplatedDecimalCast(source, result, count, + parameters, width, scale); default: throw InternalException("Unimplemented internal type for decimal"); } @@ -33,19 +33,19 @@ static bool FromDecimalCast(Vector &source, Vector &result, idx_t count, CastPar template struct DecimalScaleInput { - DecimalScaleInput(Vector &result_p, FACTOR_TYPE factor_p) : result(result_p), factor(factor_p) { + DecimalScaleInput(Vector &result_p, FACTOR_TYPE factor_p, CastParameters ¶meters) + : result(result_p), vector_cast_data(result, parameters), factor(factor_p) { } - DecimalScaleInput(Vector &result_p, LIMIT_TYPE limit_p, FACTOR_TYPE factor_p, string *error_message_p, + DecimalScaleInput(Vector &result_p, LIMIT_TYPE limit_p, FACTOR_TYPE factor_p, CastParameters ¶meters, uint8_t source_width_p, uint8_t source_scale_p) - : result(result_p), limit(limit_p), factor(factor_p), error_message(error_message_p), + : result(result_p), vector_cast_data(result, parameters), limit(limit_p), factor(factor_p), source_width(source_width_p), source_scale(source_scale_p) { } Vector &result; + VectorTryCastData vector_cast_data; LIMIT_TYPE limit; FACTOR_TYPE factor; - bool all_converted = true; - string *error_message; uint8_t source_width; uint8_t source_scale; }; @@ -66,36 +66,34 @@ struct DecimalScaleUpCheckOperator { auto error = StringUtil::Format("Casting value \"%s\" to type %s failed: value is out of range!", Decimal::ToString(input, data->source_width, data->source_scale), data->result.GetType().ToString()); - return HandleVectorCastError::Operation(std::move(error), mask, idx, data->error_message, - data->all_converted); + return HandleVectorCastError::Operation(std::move(error), mask, idx, data->vector_cast_data); } return Cast::Operation(input) * data->factor; } }; template -bool TemplatedDecimalScaleUp(Vector &source, Vector &result, idx_t count, string *error_message) { +bool TemplatedDecimalScaleUp(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { auto source_scale = DecimalType::GetScale(source.GetType()); auto source_width = DecimalType::GetWidth(source.GetType()); auto result_scale = DecimalType::GetScale(result.GetType()); auto result_width = DecimalType::GetWidth(result.GetType()); D_ASSERT(result_scale >= source_scale); idx_t scale_difference = result_scale - source_scale; - DEST multiply_factor = POWERS_DEST::POWERS_OF_TEN[scale_difference]; + DEST multiply_factor = UnsafeNumericCast(POWERS_DEST::POWERS_OF_TEN[scale_difference]); idx_t target_width = result_width - scale_difference; if (source_width < target_width) { - DecimalScaleInput input(result, multiply_factor); + DecimalScaleInput input(result, multiply_factor, parameters); // type will always fit: no need to check limit UnaryExecutor::GenericExecute(source, result, count, &input); return true; } else { // type might not fit: check limit - auto limit = POWERS_SOURCE::POWERS_OF_TEN[target_width]; - DecimalScaleInput input(result, limit, multiply_factor, error_message, source_width, - source_scale); + auto limit = UnsafeNumericCast(POWERS_SOURCE::POWERS_OF_TEN[target_width]); + DecimalScaleInput input(result, limit, multiply_factor, parameters, source_width, source_scale); UnaryExecutor::GenericExecute(source, result, count, &input, - error_message); - return input.all_converted; + parameters.error_message); + return input.vector_cast_data.all_converted; } } @@ -115,15 +113,14 @@ struct DecimalScaleDownCheckOperator { auto error = StringUtil::Format("Casting value \"%s\" to type %s failed: value is out of range!", Decimal::ToString(input, data->source_width, data->source_scale), data->result.GetType().ToString()); - return HandleVectorCastError::Operation(std::move(error), mask, idx, data->error_message, - data->all_converted); + return HandleVectorCastError::Operation(std::move(error), mask, idx, data->vector_cast_data); } return Cast::Operation(input / data->factor); } }; template -bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count, string *error_message) { +bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { auto source_scale = DecimalType::GetScale(source.GetType()); auto source_width = DecimalType::GetWidth(source.GetType()); auto result_scale = DecimalType::GetScale(result.GetType()); @@ -131,19 +128,20 @@ bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count, stri D_ASSERT(result_scale < source_scale); idx_t scale_difference = source_scale - result_scale; idx_t target_width = result_width + scale_difference; - SOURCE divide_factor = POWERS_SOURCE::POWERS_OF_TEN[scale_difference]; + auto divide_factor = UnsafeNumericCast(POWERS_SOURCE::POWERS_OF_TEN[scale_difference]); if (source_width < target_width) { - DecimalScaleInput input(result, divide_factor); + DecimalScaleInput input(result, divide_factor, parameters); // type will always fit: no need to check limit UnaryExecutor::GenericExecute(source, result, count, &input); return true; } else { // type might not fit: check limit - auto limit = POWERS_SOURCE::POWERS_OF_TEN[target_width]; - DecimalScaleInput input(result, limit, divide_factor, error_message, source_width, source_scale); + + auto limit = UnsafeNumericCast(POWERS_SOURCE::POWERS_OF_TEN[target_width]); + DecimalScaleInput input(result, limit, divide_factor, parameters, source_width, source_scale); UnaryExecutor::GenericExecute(source, result, count, &input, - error_message); - return input.all_converted; + parameters.error_message); + return input.vector_cast_data.all_converted; } } @@ -160,16 +158,16 @@ static bool DecimalDecimalCastSwitch(Vector &source, Vector &result, idx_t count switch (result.GetType().InternalType()) { case PhysicalType::INT16: return TemplatedDecimalScaleUp(source, result, count, - parameters.error_message); + parameters); case PhysicalType::INT32: return TemplatedDecimalScaleUp(source, result, count, - parameters.error_message); + parameters); case PhysicalType::INT64: return TemplatedDecimalScaleUp(source, result, count, - parameters.error_message); + parameters); case PhysicalType::INT128: return TemplatedDecimalScaleUp(source, result, count, - parameters.error_message); + parameters); default: throw NotImplementedException("Unimplemented internal type for decimal"); } @@ -177,17 +175,13 @@ static bool DecimalDecimalCastSwitch(Vector &source, Vector &result, idx_t count // divide switch (result.GetType().InternalType()) { case PhysicalType::INT16: - return TemplatedDecimalScaleDown(source, result, count, - parameters.error_message); + return TemplatedDecimalScaleDown(source, result, count, parameters); case PhysicalType::INT32: - return TemplatedDecimalScaleDown(source, result, count, - parameters.error_message); + return TemplatedDecimalScaleDown(source, result, count, parameters); case PhysicalType::INT64: - return TemplatedDecimalScaleDown(source, result, count, - parameters.error_message); + return TemplatedDecimalScaleDown(source, result, count, parameters); case PhysicalType::INT128: - return TemplatedDecimalScaleDown(source, result, count, - parameters.error_message); + return TemplatedDecimalScaleDown(source, result, count, parameters); default: throw NotImplementedException("Unimplemented internal type for decimal"); } diff --git a/src/function/cast/default_casts.cpp b/src/function/cast/default_casts.cpp index 99b68045696a..7769e355d649 100644 --- a/src/function/cast/default_casts.cpp +++ b/src/function/cast/default_casts.cpp @@ -32,6 +32,10 @@ bool DefaultCasts::NopCast(Vector &source, Vector &result, idx_t count, CastPara return true; } +void HandleCastError::AssignError(const string &error_message, CastParameters ¶meters) { + AssignError(error_message, parameters.error_message, parameters.query_location); +} + static string UnimplementedCastMessage(const LogicalType &source_type, const LogicalType &target_type) { return StringUtil::Format("Unimplemented type for cast (%s -> %s)", source_type.ToString(), target_type.ToString()); } @@ -40,8 +44,7 @@ static string UnimplementedCastMessage(const LogicalType &source_type, const Log bool DefaultCasts::TryVectorNullCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { bool success = true; if (VectorOperations::HasNotNull(source, count)) { - HandleCastError::AssignError(UnimplementedCastMessage(source.GetType(), result.GetType()), - parameters.error_message); + HandleCastError::AssignError(UnimplementedCastMessage(source.GetType(), result.GetType()), parameters); success = false; } result.SetVectorType(VectorType::CONSTANT_VECTOR); diff --git a/src/function/cast/enum_casts.cpp b/src/function/cast/enum_casts.cpp index 062e83d7ab2d..fdc0c63658d6 100644 --- a/src/function/cast/enum_casts.cpp +++ b/src/function/cast/enum_casts.cpp @@ -1,3 +1,4 @@ +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/function/cast/default_casts.hpp" #include "duckdb/function/cast/vector_cast_helpers.hpp" #include "duckdb/function/cast/cast_function_set.hpp" @@ -6,7 +7,6 @@ namespace duckdb { template bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { - bool all_converted = true; result.SetVectorType(VectorType::FLAT_VECTOR); auto &str_vec = EnumType::GetValuesInsertOrder(source.GetType()); @@ -24,6 +24,7 @@ bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters &p auto result_data = FlatVector::GetData(result); auto &result_mask = FlatVector::Validity(result); + VectorTryCastData vector_cast_data(result, parameters); for (idx_t i = 0; i < count; i++) { auto src_idx = source_sel->get_index(i); if (!source_mask.RowIsValid(src_idx)) { @@ -35,16 +36,15 @@ bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters &p // key doesn't exist on result enum if (!parameters.error_message) { result_data[i] = HandleVectorCastError::Operation( - CastExceptionText(source_data[src_idx]), result_mask, i, - parameters.error_message, all_converted); + CastExceptionText(source_data[src_idx]), result_mask, i, vector_cast_data); } else { result_mask.SetInvalid(i); } continue; } - result_data[i] = key; + result_data[i] = UnsafeNumericCast(key); } - return all_converted; + return vector_cast_data.all_converted; } template diff --git a/src/function/cast/list_casts.cpp b/src/function/cast/list_casts.cpp index 9b2e562722f5..ae6052577e65 100644 --- a/src/function/cast/list_casts.cpp +++ b/src/function/cast/list_casts.cpp @@ -151,7 +151,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar // Cant cast to array, list size mismatch auto msg = StringUtil::Format("Cannot cast list with length %llu to array with length %u", ldata.length, array_size); - HandleCastError::AssignError(msg, parameters.error_message); + HandleCastError::AssignError(msg, parameters); ConstantVector::SetNull(result, true); return false; } @@ -189,7 +189,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar all_ok = false; auto msg = StringUtil::Format("Cannot cast list with length %llu to array with length %u", ldata[i].length, array_size); - HandleCastError::AssignError(msg, parameters.error_message); + HandleCastError::AssignError(msg, parameters); } FlatVector::SetNull(result, i, true); for (idx_t array_elem = 0; array_elem < array_size; array_elem++) { @@ -208,13 +208,13 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar // Fast path: No lists are null // We can just cast the child vector directly // Note: Its worth doing a CheckAllValid here, the slow path is significantly more expensive - if (FlatVector::Validity(source).CheckAllValid(count)) { + if (FlatVector::Validity(result).CheckAllValid(count)) { Vector payload_vector(result_cc.GetType(), child_count); bool ok = cast_data.child_cast_info.function(source_cc, payload_vector, child_count, child_parameters); if (all_ok && !ok) { all_ok = false; - HandleCastError::AssignError(*child_parameters.error_message, parameters.error_message); + HandleCastError::AssignError(*child_parameters.error_message, parameters); } // Now do the actual copy onto the result vector, making sure to slice properly in case the lists are out of // order @@ -228,12 +228,9 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar cast_chunk.Initialize(Allocator::DefaultAllocator(), {source_cc.GetType(), result_cc.GetType()}, array_size); for (idx_t i = 0; i < count; i++) { - if (FlatVector::IsNull(source, i)) { - FlatVector::SetNull(result, i, true); - // Also null the array children - for (idx_t array_elem = 0; array_elem < array_size; array_elem++) { - FlatVector::SetNull(result_cc, i * array_size + array_elem, true); - } + if (FlatVector::IsNull(result, i)) { + // We've already failed to cast this list above (e.g. length mismatch), so theres nothing to do here. + continue; } else { auto &list_cast_input = cast_chunk.data[0]; auto &list_cast_output = cast_chunk.data[1]; @@ -246,7 +243,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar cast_data.child_cast_info.function(list_cast_input, list_cast_output, array_size, child_parameters); if (all_ok && !ok) { all_ok = false; - HandleCastError::AssignError(*child_parameters.error_message, parameters.error_message); + HandleCastError::AssignError(*child_parameters.error_message, parameters); } VectorOperations::Copy(list_cast_output, result_cc, array_size, 0, i * array_size); diff --git a/src/function/cast/string_cast.cpp b/src/function/cast/string_cast.cpp index 7999e49e8f39..8aa2871ef737 100644 --- a/src/function/cast/string_cast.cpp +++ b/src/function/cast/string_cast.cpp @@ -1,6 +1,7 @@ #include "duckdb/function/cast/default_casts.hpp" #include "duckdb/function/cast/vector_cast_helpers.hpp" #include "duckdb/common/exception/conversion_exception.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/pair.hpp" #include "duckdb/common/vector.hpp" #include "duckdb/function/scalar/nested_functions.hpp" @@ -11,8 +12,7 @@ namespace duckdb { template bool StringEnumCastLoop(const string_t *source_data, ValidityMask &source_mask, const LogicalType &source_type, T *result_data, ValidityMask &result_mask, const LogicalType &result_type, idx_t count, - string *error_message, const SelectionVector *sel) { - bool all_converted = true; + VectorTryCastData &vector_cast_data, const SelectionVector *sel) { for (idx_t i = 0; i < count; i++) { idx_t source_idx = i; if (sel) { @@ -21,17 +21,16 @@ bool StringEnumCastLoop(const string_t *source_data, ValidityMask &source_mask, if (source_mask.RowIsValid(source_idx)) { auto pos = EnumType::GetPos(result_type, source_data[source_idx]); if (pos == -1) { - result_data[i] = - HandleVectorCastError::Operation(CastExceptionText(source_data[source_idx]), - result_mask, i, error_message, all_converted); + result_data[i] = HandleVectorCastError::Operation( + CastExceptionText(source_data[source_idx]), result_mask, i, vector_cast_data); } else { - result_data[i] = pos; + result_data[i] = UnsafeNumericCast(pos); } } else { result_mask.SetInvalid(i); } } - return all_converted; + return vector_cast_data.all_converted; } template @@ -46,8 +45,9 @@ bool StringEnumCast(Vector &source, Vector &result, idx_t count, CastParameters auto result_data = ConstantVector::GetData(result); auto &result_mask = ConstantVector::Validity(result); + VectorTryCastData vector_cast_data(result, parameters); return StringEnumCastLoop(source_data, source_mask, source.GetType(), result_data, result_mask, - result.GetType(), 1, parameters.error_message, nullptr); + result.GetType(), 1, vector_cast_data, nullptr); } default: { UnifiedVectorFormat vdata; @@ -61,8 +61,9 @@ bool StringEnumCast(Vector &source, Vector &result, idx_t count, CastParameters auto result_data = FlatVector::GetData(result); auto &result_mask = FlatVector::Validity(result); + VectorTryCastData vector_cast_data(result, parameters); return StringEnumCastLoop(source_data, source_mask, source.GetType(), result_data, result_mask, - result.GetType(), count, parameters.error_message, source_sel); + result.GetType(), count, vector_cast_data, source_sel); } } } @@ -144,7 +145,7 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data, auto list_data = ListVector::GetData(result); auto child_data = FlatVector::GetData(varchar_vector); - bool all_converted = true; + VectorTryCastData vector_cast_data(result, parameters); idx_t total = 0; for (idx_t i = 0; i < count; i++) { idx_t idx = i; @@ -160,7 +161,7 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data, if (!VectorStringToList::SplitStringList(source_data[idx], child_data, total, varchar_vector)) { string text = "Type VARCHAR with value '" + source_data[idx].GetString() + "' can't be cast to the destination type LIST"; - HandleVectorCastError::Operation(text, result_mask, idx, parameters.error_message, all_converted); + HandleVectorCastError::Operation(text, result_mask, idx, vector_cast_data); } list_data[i].length = total - list_data[i].offset; // length is the amount of parts coming from this string } @@ -169,8 +170,25 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data, auto &result_child = ListVector::GetEntry(result); auto &cast_data = parameters.cast_data->Cast(); CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state); - return cast_data.child_cast_info.function(varchar_vector, result_child, total_list_size, child_parameters) && - all_converted; + bool all_converted = + cast_data.child_cast_info.function(varchar_vector, result_child, total_list_size, child_parameters) && + vector_cast_data.all_converted; + if (!all_converted && parameters.nullify_parent) { + UnifiedVectorFormat inserted_column_data; + result_child.ToUnifiedFormat(total_list_size, inserted_column_data); + UnifiedVectorFormat parse_column_data; + varchar_vector.ToUnifiedFormat(total_list_size, parse_column_data); + // Something went wrong in the conversion, we need to nullify the parent + for (idx_t i = 0; i < count; i++) { + for (idx_t j = list_data[i].offset; j < list_data[i].offset + list_data[i].length; j++) { + if (!inserted_column_data.validity.RowIsValid(j) && parse_column_data.validity.RowIsValid(j)) { + result_mask.SetInvalid(i); + break; + } + } + } + } + return all_converted; } static LogicalType InitVarcharStructType(const LogicalType &target) { @@ -204,7 +222,7 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat child_masks[child_idx].get().SetAllInvalid(count); } - bool all_converted = true; + VectorTryCastData vector_cast_data(result, parameters); for (idx_t i = 0; i < count; i++) { idx_t idx = i; if (sel) { @@ -221,9 +239,9 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat string text = "Type VARCHAR with value '" + source_data[idx].GetString() + "' can't be cast to the destination type STRUCT"; for (auto &child_mask : child_masks) { - child_mask.get().SetInvalid(idx); // some values may have already been found and set valid + child_mask.get().SetInvalid(i); // some values may have already been found and set valid } - HandleVectorCastError::Operation(text, result_mask, idx, parameters.error_message, all_converted); + HandleVectorCastError::Operation(text, result_mask, i, vector_cast_data); } } @@ -237,10 +255,10 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat auto &child_cast_info = cast_data.child_cast_info[child_idx]; CastParameters child_parameters(parameters, child_cast_info.cast_data, lstate.local_states[child_idx]); if (!child_cast_info.function(child_varchar_vector, result_child_vector, count, child_parameters)) { - all_converted = false; + vector_cast_data.all_converted = false; } } - return all_converted; + return vector_cast_data.all_converted; } //===--------------------------------------------------------------------===// @@ -285,7 +303,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data, ListVector::SetListSize(result, total_elements); auto list_data = ListVector::GetData(result); - bool all_converted = true; + VectorTryCastData vector_cast_data(result, parameters); idx_t total = 0; for (idx_t i = 0; i < count; i++) { idx_t idx = i; @@ -303,7 +321,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data, string text = "Type VARCHAR with value '" + source_data[idx].GetString() + "' can't be cast to the destination type MAP"; FlatVector::SetNull(result, idx, true); - HandleVectorCastError::Operation(text, result_mask, idx, parameters.error_message, all_converted); + HandleVectorCastError::Operation(text, result_mask, idx, vector_cast_data); } list_data[i].length = total - list_data[i].offset; } @@ -316,15 +334,15 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data, CastParameters key_params(parameters, cast_data.key_cast.cast_data, lstate.key_state); if (!cast_data.key_cast.function(varchar_key_vector, result_key_child, total_elements, key_params)) { - all_converted = false; + vector_cast_data.all_converted = false; } CastParameters val_params(parameters, cast_data.value_cast.cast_data, lstate.value_state); if (!cast_data.value_cast.function(varchar_val_vector, result_val_child, total_elements, val_params)) { - all_converted = false; + vector_cast_data.all_converted = false; } auto &key_validity = FlatVector::Validity(result_key_child); - if (!all_converted) { + if (!vector_cast_data.all_converted) { for (idx_t row_idx = 0; row_idx < count; row_idx++) { if (!result_mask.RowIsValid(row_idx)) { continue; @@ -339,7 +357,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data, } } MapVector::MapConversionVerify(result, count); - return all_converted; + return vector_cast_data.all_converted; } //===--------------------------------------------------------------------===// @@ -370,7 +388,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data if (parameters.strict) { throw ConversionException(msg); } - HandleCastError::AssignError(msg, parameters.error_message); + HandleCastError::AssignError(msg, parameters); } result_mask.SetInvalid(i); } @@ -380,7 +398,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data Vector varchar_vector(LogicalType::VARCHAR, child_count); auto child_data = FlatVector::GetData(varchar_vector); - bool all_converted = true; + VectorTryCastData vector_cast_data(result, parameters); idx_t total = 0; for (idx_t i = 0; i < count; i++) { idx_t idx = i; @@ -404,7 +422,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data if (!VectorStringToList::SplitStringList(source_data[idx], child_data, total, varchar_vector)) { auto text = StringUtil::Format("Type VARCHAR with value '%s' can't be cast to the destination type ARRAY", source_data[idx].GetString()); - HandleVectorCastError::Operation(text, result_mask, idx, parameters.error_message, all_converted); + HandleVectorCastError::Operation(text, result_mask, idx, vector_cast_data); } } D_ASSERT(total == child_count); @@ -414,7 +432,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state); bool cast_result = cast_data.child_cast_info.function(varchar_vector, result_child, child_count, child_parameters); - return all_lengths_match && cast_result && all_converted; + return all_lengths_match && cast_result && vector_cast_data.all_converted; } template diff --git a/src/function/cast/struct_cast.cpp b/src/function/cast/struct_cast.cpp index 4aadeee393b2..94f494c1c7b9 100644 --- a/src/function/cast/struct_cast.cpp +++ b/src/function/cast/struct_cast.cpp @@ -14,7 +14,7 @@ unique_ptr StructBoundCastData::BindStructToStructCast(BindCastIn auto source_is_unnamed = StructType::IsUnnamed(source); if (source_child_types.size() != result_child_types.size()) { - throw TypeMismatchException(source, target, "Cannot cast STRUCTs of different size"); + throw TypeMismatchException(input.query_location, source, target, "Cannot cast STRUCTs of different size"); } bool named_struct_cast = !source_is_unnamed && !target_is_unnamed; case_insensitive_map_t target_members; @@ -36,7 +36,7 @@ unique_ptr StructBoundCastData::BindStructToStructCast(BindCastIn // named struct cast - find corresponding member in target auto entry = target_members.find(source_child.first); if (entry == target_members.end()) { - throw TypeMismatchException(source, target, + throw TypeMismatchException(input.query_location, source, target, "Cannot cast STRUCTs - element \"" + source_child.first + "\" in source struct was not found in target struct"); } diff --git a/src/function/cast/time_casts.cpp b/src/function/cast/time_casts.cpp index 2d920490841c..4ac38d121d71 100644 --- a/src/function/cast/time_casts.cpp +++ b/src/function/cast/time_casts.cpp @@ -125,6 +125,10 @@ BoundCastInfo DefaultCasts::TimestampNsCastSwitch(BindCastInput &input, const Lo // timestamp (ns) to timestamp (us) return BoundCastInfo( &VectorCastHelpers::TemplatedCastLoop); + case LogicalTypeId::TIMESTAMP_TZ: + // timestamp (ns) to timestamp with time zone (us) + return BoundCastInfo( + &VectorCastHelpers::TemplatedCastLoop); default: return TryVectorNullCast; } @@ -152,6 +156,10 @@ BoundCastInfo DefaultCasts::TimestampMsCastSwitch(BindCastInput &input, const Lo // timestamp (ms) to timestamp (ns) return BoundCastInfo( &VectorCastHelpers::TemplatedCastLoop); + case LogicalTypeId::TIMESTAMP_TZ: + // timestamp (ms) to timestamp with timezone (us) + return BoundCastInfo( + &VectorCastHelpers::TemplatedCastLoop); default: return TryVectorNullCast; } @@ -180,6 +188,10 @@ BoundCastInfo DefaultCasts::TimestampSecCastSwitch(BindCastInput &input, const L // timestamp (s) to timestamp (us) return BoundCastInfo( &VectorCastHelpers::TemplatedCastLoop); + case LogicalTypeId::TIMESTAMP_TZ: + // timestamp (s) to timestamp with timezone (us) + return BoundCastInfo( + &VectorCastHelpers::TemplatedCastLoop); case LogicalTypeId::TIMESTAMP_NS: // timestamp (s) to timestamp (ns) return BoundCastInfo( diff --git a/src/function/cast/union_casts.cpp b/src/function/cast/union_casts.cpp index 1041958f5d02..20cbb2267f05 100644 --- a/src/function/cast/union_casts.cpp +++ b/src/function/cast/union_casts.cpp @@ -1,7 +1,8 @@ +#include "duckdb/common/exception/conversion_exception.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/function/cast/cast_function_set.hpp" #include "duckdb/function/cast/default_casts.hpp" #include "duckdb/function/cast/bound_cast_data.hpp" -#include "duckdb/common/exception/conversion_exception.hpp" #include // for std::sort @@ -257,7 +258,7 @@ static bool UnionToUnionCast(Vector &source, Vector &result, idx_t count, CastPa // map the tag auto source_tag = ConstantVector::GetData(source_tag_vector)[0]; auto mapped_tag = cast_data.tag_map[source_tag]; - ConstantVector::GetData(result_tag_vector)[0] = mapped_tag; + ConstantVector::GetData(result_tag_vector)[0] = UnsafeNumericCast(mapped_tag); } } else { // Otherwise, use the unified vector format to access the source vector. @@ -279,7 +280,8 @@ static bool UnionToUnionCast(Vector &source, Vector &result, idx_t count, CastPa // map the tag auto source_tag = (UnifiedVectorFormat::GetData(source_tag_format))[source_row_idx]; auto target_tag = cast_data.tag_map[source_tag]; - FlatVector::GetData(result_tag_vector)[row_idx] = target_tag; + FlatVector::GetData(result_tag_vector)[row_idx] = + UnsafeNumericCast(target_tag); } else { // Issue: The members of the result is not always flatvectors diff --git a/src/function/cast/vector_cast_helpers.cpp b/src/function/cast/vector_cast_helpers.cpp index dde8f770171e..34b0e34df44c 100644 --- a/src/function/cast/vector_cast_helpers.cpp +++ b/src/function/cast/vector_cast_helpers.cpp @@ -336,7 +336,7 @@ bool VectorStringToStruct::SplitStruct(const string_t &input, vector(key_end - key_start)); auto it = child_names.find(found_key); if (it == child_names.end()) { diff --git a/src/function/cast_rules.cpp b/src/function/cast_rules.cpp index 84a4bd03b982..028d6d0dc285 100644 --- a/src/function/cast_rules.cpp +++ b/src/function/cast_rules.cpp @@ -1,4 +1,5 @@ #include "duckdb/function/cast_rules.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -410,7 +411,7 @@ int64_t CastRules::ImplicitCast(const LogicalType &from, const LogicalType &to) auto &from_member_type = UnionType::GetMemberType(from, from_member_idx); auto &to_member_type = UnionType::GetMemberType(to, to_member_idx); - int child_cost = ImplicitCast(from_member_type, to_member_type); + int child_cost = NumericCast(ImplicitCast(from_member_type, to_member_type)); if (child_cost > cost) { cost = child_cost; } diff --git a/src/function/scalar/compressed_materialization/compress_integral.cpp b/src/function/scalar/compressed_materialization/compress_integral.cpp index 9da8d10d584a..7805cd0359fc 100644 --- a/src/function/scalar/compressed_materialization/compress_integral.cpp +++ b/src/function/scalar/compressed_materialization/compress_integral.cpp @@ -1,7 +1,8 @@ -#include "duckdb/function/function_set.hpp" -#include "duckdb/function/scalar/compressed_materialization_functions.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/serializer/serializer.hpp" #include "duckdb/common/serializer/deserializer.hpp" +#include "duckdb/function/function_set.hpp" +#include "duckdb/function/scalar/compressed_materialization_functions.hpp" namespace duckdb { @@ -14,7 +15,7 @@ template struct TemplatedIntegralCompress { static inline RESULT_TYPE Operation(const INPUT_TYPE &input, const INPUT_TYPE &min_val) { D_ASSERT(min_val <= input); - return input - min_val; + return UnsafeNumericCast(input - min_val); } }; @@ -22,7 +23,7 @@ template struct TemplatedIntegralCompress { static inline RESULT_TYPE Operation(const hugeint_t &input, const hugeint_t &min_val) { D_ASSERT(min_val <= input); - return (input - min_val).lower; + return UnsafeNumericCast((input - min_val).lower); } }; @@ -30,7 +31,7 @@ template struct TemplatedIntegralCompress { static inline RESULT_TYPE Operation(const uhugeint_t &input, const uhugeint_t &min_val) { D_ASSERT(min_val <= input); - return (input - min_val).lower; + return UnsafeNumericCast((input - min_val).lower); } }; @@ -97,7 +98,7 @@ static string IntegralDecompressFunctionName(const LogicalType &result_type) { template static inline RESULT_TYPE TemplatedIntegralDecompress(const INPUT_TYPE &input, const RESULT_TYPE &min_val) { - return min_val + input; + return UnsafeNumericCast(min_val + input); } template diff --git a/src/function/scalar/compressed_materialization/compress_string.cpp b/src/function/scalar/compressed_materialization/compress_string.cpp index 96e14fec9a95..5cdf44121cdd 100644 --- a/src/function/scalar/compressed_materialization/compress_string.cpp +++ b/src/function/scalar/compressed_materialization/compress_string.cpp @@ -39,7 +39,7 @@ static inline RESULT_TYPE StringCompressInternal(const string_t &input) { ReverseMemCpy(result_ptr + remainder, data_ptr_cast(input.GetPointer()), input.GetSize()); memset(result_ptr, '\0', remainder); } - result_ptr[0] = input.GetSize(); + result_ptr[0] = UnsafeNumericCast(input.GetSize()); return result; } @@ -52,11 +52,11 @@ static inline RESULT_TYPE StringCompress(const string_t &input) { template static inline RESULT_TYPE MiniStringCompress(const string_t &input) { if (sizeof(RESULT_TYPE) <= string_t::INLINE_LENGTH) { - return input.GetSize() + *const_data_ptr_cast(input.GetPrefix()); + return UnsafeNumericCast(input.GetSize() + *const_data_ptr_cast(input.GetPrefix())); } else if (input.GetSize() == 0) { return 0; } else { - return input.GetSize() + *const_data_ptr_cast(input.GetPointer()); + return UnsafeNumericCast(input.GetSize() + *const_data_ptr_cast(input.GetPointer())); } } diff --git a/src/function/scalar/operators/arithmetic.cpp b/src/function/scalar/operators/arithmetic.cpp index ebb76e30efbc..64e9d57ba228 100644 --- a/src/function/scalar/operators/arithmetic.cpp +++ b/src/function/scalar/operators/arithmetic.cpp @@ -205,7 +205,7 @@ unique_ptr BindDecimalAddSubtract(ClientContext &context, ScalarFu } D_ASSERT(max_width > 0); // for addition/subtraction, we add 1 to the width to ensure we don't overflow - auto required_width = MaxValue(max_scale + max_width_over_scale, max_width) + 1; + auto required_width = NumericCast(MaxValue(max_scale + max_width_over_scale, max_width) + 1); if (required_width > Decimal::MAX_WIDTH_INT64 && max_width <= Decimal::MAX_WIDTH_INT64) { // we don't automatically promote past the hugeint boundary to avoid the large hugeint performance penalty bind_data->check_overflow = true; diff --git a/src/function/scalar/operators/multiply.cpp b/src/function/scalar/operators/multiply.cpp index b0e033a9791d..14462f8bb06e 100644 --- a/src/function/scalar/operators/multiply.cpp +++ b/src/function/scalar/operators/multiply.cpp @@ -28,8 +28,10 @@ double MultiplyOperator::Operation(double left, double right) { template <> interval_t MultiplyOperator::Operation(interval_t left, int64_t right) { - left.months = MultiplyOperatorOverflowCheck::Operation(left.months, right); - left.days = MultiplyOperatorOverflowCheck::Operation(left.days, right); + left.months = MultiplyOperatorOverflowCheck::Operation( + left.months, UnsafeNumericCast(right)); + left.days = MultiplyOperatorOverflowCheck::Operation(left.days, + UnsafeNumericCast(right)); left.micros = MultiplyOperatorOverflowCheck::Operation(left.micros, right); return left; } diff --git a/src/function/scalar/operators/subtract.cpp b/src/function/scalar/operators/subtract.cpp index 4d49823126d9..3a102b66940d 100644 --- a/src/function/scalar/operators/subtract.cpp +++ b/src/function/scalar/operators/subtract.cpp @@ -50,9 +50,15 @@ date_t SubtractOperator::Operation(date_t left, int32_t right) { template <> interval_t SubtractOperator::Operation(interval_t left, interval_t right) { interval_t result; - result.months = left.months - right.months; - result.days = left.days - right.days; - result.micros = left.micros - right.micros; + if (!TrySubtractOperator::Operation(left.months, right.months, result.months)) { + throw OutOfRangeException("Interval months subtraction out of range"); + } + if (!TrySubtractOperator::Operation(left.days, right.days, result.days)) { + throw OutOfRangeException("Interval days subtraction out of range"); + } + if (!TrySubtractOperator::Operation(left.micros, right.micros, result.micros)) { + throw OutOfRangeException("Interval micros subtraction out of range"); + } return result; } diff --git a/src/function/scalar/strftime_format.cpp b/src/function/scalar/strftime_format.cpp index b0f6ee1bab6d..5c8b18ff440c 100644 --- a/src/function/scalar/strftime_format.cpp +++ b/src/function/scalar/strftime_format.cpp @@ -367,7 +367,7 @@ char *StrfTimeFormat::WriteStandardSpecifier(StrTimeSpecifier specifier, int32_t break; } case StrTimeSpecifier::MONTH_DECIMAL: { - target = Write2(target, data[1]); + target = Write2(target, UnsafeNumericCast(data[1])); break; } case StrTimeSpecifier::YEAR_WITHOUT_CENTURY: { @@ -375,7 +375,7 @@ char *StrfTimeFormat::WriteStandardSpecifier(StrTimeSpecifier specifier, int32_t break; } case StrTimeSpecifier::HOUR_24_DECIMAL: { - target = Write2(target, data[3]); + target = Write2(target, UnsafeNumericCast(data[3])); break; } case StrTimeSpecifier::HOUR_12_DECIMAL: { @@ -383,15 +383,15 @@ char *StrfTimeFormat::WriteStandardSpecifier(StrTimeSpecifier specifier, int32_t if (hour == 0) { hour = 12; } - target = Write2(target, hour); + target = Write2(target, UnsafeNumericCast(hour)); break; } case StrTimeSpecifier::MINUTE_DECIMAL: { - target = Write2(target, data[4]); + target = Write2(target, UnsafeNumericCast(data[4])); break; } case StrTimeSpecifier::SECOND_DECIMAL: { - target = Write2(target, data[5]); + target = Write2(target, UnsafeNumericCast(data[5])); break; } default: @@ -731,7 +731,7 @@ int32_t StrpTimeFormat::TryParseCollection(const char *data, idx_t &pos, idx_t s if (i == entry_size) { // full match pos += entry_size; - return c; + return UnsafeNumericCast(c); } } return -1; @@ -862,7 +862,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // day of the month - result_data[2] = number; + result_data[2] = UnsafeNumericCast(number); offset_specifier = specifiers[i]; break; case StrTimeSpecifier::MONTH_DECIMAL_PADDED: @@ -873,7 +873,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // month number - result_data[1] = number; + result_data[1] = UnsafeNumericCast(number); offset_specifier = specifiers[i]; break; case StrTimeSpecifier::YEAR_WITHOUT_CENTURY_PADDED: @@ -916,7 +916,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { break; } // year as full number - result_data[0] = number; + result_data[0] = UnsafeNumericCast(number); break; case StrTimeSpecifier::YEAR_ISO: switch (offset_specifier) { @@ -965,7 +965,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // hour as full number - result_data[3] = number; + result_data[3] = UnsafeNumericCast(number); break; case StrTimeSpecifier::HOUR_12_PADDED: case StrTimeSpecifier::HOUR_12_DECIMAL: @@ -975,7 +975,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // 12-hour number: start off by just storing the number - result_data[3] = number; + result_data[3] = UnsafeNumericCast(number); break; case StrTimeSpecifier::MINUTE_PADDED: case StrTimeSpecifier::MINUTE_DECIMAL: @@ -985,7 +985,7 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // minutes - result_data[4] = number; + result_data[4] = UnsafeNumericCast(number); break; case StrTimeSpecifier::SECOND_PADDED: case StrTimeSpecifier::SECOND_DECIMAL: @@ -995,22 +995,23 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { return false; } // seconds - result_data[5] = number; + result_data[5] = UnsafeNumericCast(number); break; case StrTimeSpecifier::NANOSECOND_PADDED: D_ASSERT(number < Interval::NANOS_PER_SEC); // enforced by the length of the number // microseconds (rounded) - result_data[6] = (number + Interval::NANOS_PER_MICRO / 2) / Interval::NANOS_PER_MICRO; + result_data[6] = + UnsafeNumericCast((number + Interval::NANOS_PER_MICRO / 2) / Interval::NANOS_PER_MICRO); break; case StrTimeSpecifier::MICROSECOND_PADDED: D_ASSERT(number < Interval::MICROS_PER_SEC); // enforced by the length of the number // microseconds - result_data[6] = number; + result_data[6] = UnsafeNumericCast(number); break; case StrTimeSpecifier::MILLISECOND_PADDED: D_ASSERT(number < Interval::MSECS_PER_SEC); // enforced by the length of the number // microseconds - result_data[6] = number * Interval::MICROS_PER_MSEC; + result_data[6] = UnsafeNumericCast(number * Interval::MICROS_PER_MSEC); break; case StrTimeSpecifier::WEEK_NUMBER_PADDED_SUN_FIRST: case StrTimeSpecifier::WEEK_NUMBER_PADDED_MON_FIRST: @@ -1272,11 +1273,11 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { iso_week = (iso_week > 53) ? 1 : iso_week; iso_weekday = (iso_weekday > 7) ? 1 : iso_weekday; // Gregorian and ISO agree on the year of January 4 - auto jan4 = Date::FromDate(iso_year, 1, 4); + auto jan4 = Date::FromDate(UnsafeNumericCast(iso_year), 1, 4); // ISO Week 1 starts on the previous Monday auto week1 = Date::GetMondayOfCurrentWeek(jan4); // ISO Week N starts N-1 weeks later - auto iso_date = week1 + (iso_week - 1) * 7 + (iso_weekday - 1); + auto iso_date = week1 + UnsafeNumericCast((iso_week - 1) * 7 + (iso_weekday - 1)); Date::Convert(iso_date, result_data[0], result_data[1], result_data[2]); break; } @@ -1292,14 +1293,14 @@ bool StrpTimeFormat::Parse(string_t str, ParseResult &result) const { yeardate -= int(offset_specifier == StrTimeSpecifier::WEEK_NUMBER_PADDED_SUN_FIRST); // Is there a week 0? yeardate -= 7 * int(yeardate >= jan1); - yeardate += weekno * 7 + weekday; + yeardate += UnsafeNumericCast(weekno * 7 + weekday); Date::Convert(yeardate, result_data[0], result_data[1], result_data[2]); break; } case StrTimeSpecifier::DAY_OF_YEAR_PADDED: case StrTimeSpecifier::DAY_OF_YEAR_DECIMAL: { auto yeardate = Date::FromDate(result_data[0], 1, 1); - yeardate += yearday - 1; + yeardate += UnsafeNumericCast(yearday - 1); Date::Convert(yeardate, result_data[0], result_data[1], result_data[2]); break; } diff --git a/src/function/scalar/string/like.cpp b/src/function/scalar/string/like.cpp index eb9f2e34e0b8..2a45e7d92c77 100644 --- a/src/function/scalar/string/like.cpp +++ b/src/function/scalar/string/like.cpp @@ -8,12 +8,23 @@ namespace duckdb { struct StandardCharacterReader { + static void NextCharacter(const char *sdata, idx_t slen, idx_t &sidx) { + sidx++; + while (sidx < slen && !LengthFun::IsCharacter(sdata[sidx])) { + sidx++; + } + } + static char Operation(const char *data, idx_t pos) { return data[pos]; } }; struct ASCIILCaseReader { + static void NextCharacter(const char *sdata, idx_t slen, idx_t &sidx) { + sidx++; + } + static char Operation(const char *data, idx_t pos) { return (char)LowerFun::ascii_to_lower_map[(uint8_t)data[pos]]; } @@ -36,7 +47,7 @@ bool TemplatedLikeOperator(const char *sdata, idx_t slen, const char *pdata, idx } sidx++; } else if (pchar == UNDERSCORE) { - sidx++; + READER::NextCharacter(sdata, slen, sidx); } else if (pchar == PERCENTAGE) { pidx++; while (pidx < plen && pdata[pidx] == PERCENTAGE) { @@ -398,8 +409,8 @@ bool ILikeOperatorFunction(string_t &str, string_t &pattern, char escape = '\0') idx_t pat_llength = LowerFun::LowerLength(pat_data, pat_size); auto pat_ldata = make_unsafe_uniq_array(pat_llength); LowerFun::LowerCase(pat_data, pat_size, pat_ldata.get()); - string_t str_lcase(str_ldata.get(), str_llength); - string_t pat_lcase(pat_ldata.get(), pat_llength); + string_t str_lcase(str_ldata.get(), UnsafeNumericCast(str_llength)); + string_t pat_lcase(pat_ldata.get(), UnsafeNumericCast(pat_llength)); return LikeOperatorFunction(str_lcase, pat_lcase, escape); } diff --git a/src/function/scalar/string/regexp.cpp b/src/function/scalar/string/regexp.cpp index 89aa0e30d03e..265e84be7a81 100644 --- a/src/function/scalar/string/regexp.cpp +++ b/src/function/scalar/string/regexp.cpp @@ -272,13 +272,14 @@ static void RegexExtractStructFunction(DataChunk &args, ExpressionState &state, ConstantVector::SetNull(result, false); auto idata = ConstantVector::GetData(input); auto str = CreateStringPiece(idata[0]); - auto match = duckdb_re2::RE2::PartialMatchN(str, lstate.constant_pattern, groups.data(), groups.size()); + auto match = duckdb_re2::RE2::PartialMatchN(str, lstate.constant_pattern, groups.data(), + UnsafeNumericCast(groups.size())); for (size_t col = 0; col < child_entries.size(); ++col) { auto &child_entry = child_entries[col]; ConstantVector::SetNull(*child_entry, false); auto &extracted = ws[col]; auto cdata = ConstantVector::GetData(*child_entry); - cdata[0] = string_t(extracted.data(), match ? extracted.size() : 0); + cdata[0] = string_t(extracted.data(), UnsafeNumericCast(match ? extracted.size() : 0)); } } } else { @@ -301,12 +302,13 @@ static void RegexExtractStructFunction(DataChunk &args, ExpressionState &state, const auto idx = iunified.sel->get_index(i); if (ivalidity.RowIsValid(idx)) { auto str = CreateStringPiece(idata[idx]); - auto match = duckdb_re2::RE2::PartialMatchN(str, lstate.constant_pattern, groups.data(), groups.size()); + auto match = duckdb_re2::RE2::PartialMatchN(str, lstate.constant_pattern, groups.data(), + UnsafeNumericCast(groups.size())); for (size_t col = 0; col < child_entries.size(); ++col) { auto &child_entry = child_entries[col]; auto cdata = FlatVector::GetData(*child_entry); auto &extracted = ws[col]; - cdata[i] = string_t(extracted.data(), match ? extracted.size() : 0); + cdata[i] = string_t(extracted.data(), UnsafeNumericCast(match ? extracted.size() : 0)); } } else { FlatVector::SetNull(result, i, true); diff --git a/src/function/scalar/string/regexp/regexp_extract_all.cpp b/src/function/scalar/string/regexp/regexp_extract_all.cpp index 98b50a7952be..1b5bd06b9dae 100644 --- a/src/function/scalar/string/regexp/regexp_extract_all.cpp +++ b/src/function/scalar/string/regexp/regexp_extract_all.cpp @@ -68,7 +68,8 @@ void ExtractSingleTuple(const string_t &string, duckdb_re2::RE2 &pattern, int32_ bool throw_on_group_found = (idx_t)group > args.size; idx_t startpos = 0; - for (idx_t iteration = 0; ExtractAll(input, pattern, &startpos, args.group_buffer, args.size); iteration++) { + for (idx_t iteration = 0; + ExtractAll(input, pattern, &startpos, args.group_buffer, UnsafeNumericCast(args.size)); iteration++) { if (!iteration && throw_on_group_found) { throw InvalidInputException("Pattern has %d groups. Cannot access group %d", args.size, group); } @@ -96,7 +97,8 @@ void ExtractSingleTuple(const string_t &string, duckdb_re2::RE2 &pattern, int32_ // the 'match_group' address is guaranteed to be bigger than that of the source D_ASSERT(const_char_ptr_cast(match_group.begin()) >= string.GetData()); idx_t offset = match_group.begin() - string.GetData(); - list_content[child_idx] = string_t(string.GetData() + offset, match_group.size()); + list_content[child_idx] = + string_t(string.GetData() + offset, UnsafeNumericCast(match_group.size())); } current_list_size++; if (startpos > input.size()) { diff --git a/src/function/scalar/string/suffix.cpp b/src/function/scalar/string/suffix.cpp index f497333abbea..df1484571a06 100644 --- a/src/function/scalar/string/suffix.cpp +++ b/src/function/scalar/string/suffix.cpp @@ -23,7 +23,7 @@ static bool SuffixFunction(const string_t &str, const string_t &suffix) { auto suffix_data = suffix.GetData(); auto str_data = str.GetData(); - int32_t suf_idx = suffix_size - 1; + auto suf_idx = UnsafeNumericCast(suffix_size) - 1; idx_t str_idx = str_size - 1; for (; suf_idx >= 0; --suf_idx, --str_idx) { if (suffix_data[suf_idx] != str_data[str_idx]) { diff --git a/src/function/table/arrow.cpp b/src/function/table/arrow.cpp index 8f59c89e59f4..530882473886 100644 --- a/src/function/table/arrow.cpp +++ b/src/function/table/arrow.cpp @@ -41,13 +41,30 @@ static unique_ptr GetArrowLogicalTypeNoDictionary(ArrowSchema &schema } else if (format == "g") { return make_uniq(LogicalType::DOUBLE); } else if (format[0] == 'd') { //! this can be either decimal128 or decimal 256 (e.g., d:38,0) - std::string parameters = format.substr(format.find(':')); - uint8_t width = std::stoi(parameters.substr(1, parameters.find(','))); - uint8_t scale = std::stoi(parameters.substr(parameters.find(',') + 1)); - if (width > 38) { + auto extra_info = StringUtil::Split(format, ':'); + if (extra_info.size() != 2) { + throw InvalidInputException( + "Decimal format of Arrow object is incomplete, it is missing the scale and width. Current format: %s", + format); + } + auto parameters = StringUtil::Split(extra_info[1], ","); + // Parameters must always be 2 or 3 values (i.e., width, scale and an optional bit-width) + if (parameters.size() != 2 && parameters.size() != 3) { + throw InvalidInputException( + "Decimal format of Arrow object is incomplete, it is missing the scale or width. Current format: %s", + format); + } + uint64_t width = std::stoull(parameters[0]); + uint64_t scale = std::stoull(parameters[1]); + uint64_t bitwidth = 128; + if (parameters.size() == 3) { + // We have a bit-width defined + bitwidth = std::stoull(parameters[2]); + } + if (width > 38 || bitwidth > 128) { throw NotImplementedException("Unsupported Internal Arrow Type for Decimal %s", format); } - return make_uniq(LogicalType::DECIMAL(width, scale)); + return make_uniq(LogicalType::DECIMAL(NumericCast(width), NumericCast(scale))); } else if (format == "u") { return make_uniq(LogicalType::VARCHAR, ArrowVariableSizeType::NORMAL); } else if (format == "U") { @@ -102,7 +119,7 @@ static unique_ptr GetArrowLogicalTypeNoDictionary(ArrowSchema &schema std::string parameters = format.substr(format.find(':') + 1); idx_t fixed_size = std::stoi(parameters); auto child_type = ArrowTableFunction::GetArrowLogicalType(*schema.children[0]); - auto list_type = make_uniq(LogicalType::LIST(child_type->GetDuckType()), fixed_size); + auto list_type = make_uniq(LogicalType::ARRAY(child_type->GetDuckType(), fixed_size), fixed_size); list_type->AddChild(std::move(child_type)); return list_type; } else if (format == "+s") { diff --git a/src/function/table/arrow/arrow_array_scan_state.cpp b/src/function/table/arrow/arrow_array_scan_state.cpp index 88aa49bfa1db..0e60b470f352 100644 --- a/src/function/table/arrow/arrow_array_scan_state.cpp +++ b/src/function/table/arrow/arrow_array_scan_state.cpp @@ -1,8 +1,11 @@ #include "duckdb/function/table/arrow.hpp" +#include "duckdb/common/printer.hpp" +#include "duckdb/common/types/arrow_aux_data.hpp" namespace duckdb { ArrowArrayScanState::ArrowArrayScanState(ArrowScanLocalState &state) : state(state) { + arrow_dictionary = nullptr; } ArrowArrayScanState &ArrowArrayScanState::GetChild(idx_t child_idx) { @@ -10,20 +13,43 @@ ArrowArrayScanState &ArrowArrayScanState::GetChild(idx_t child_idx) { if (it == children.end()) { auto child_p = make_uniq(state); auto &child = *child_p; + child.owned_data = owned_data; children.emplace(std::make_pair(child_idx, std::move(child_p))); return child; } + if (!it->second->owned_data) { + // Propagate down the ownership, for dictionaries in children + D_ASSERT(owned_data); + it->second->owned_data = owned_data; + } return *it->second; } -void ArrowArrayScanState::AddDictionary(unique_ptr dictionary_p) { - this->dictionary = std::move(dictionary_p); +void ArrowArrayScanState::AddDictionary(unique_ptr dictionary_p, ArrowArray *arrow_dict) { + dictionary = std::move(dictionary_p); + D_ASSERT(owned_data); + D_ASSERT(arrow_dict); + arrow_dictionary = arrow_dict; + // Make sure the data referenced by the dictionary stays alive + dictionary->GetBuffer()->SetAuxiliaryData(make_uniq(owned_data)); } bool ArrowArrayScanState::HasDictionary() const { return dictionary != nullptr; } +bool ArrowArrayScanState::CacheOutdated(ArrowArray *dictionary) const { + if (!dictionary) { + // Not cached + return true; + } + if (dictionary == arrow_dictionary.get()) { + // Already cached, not outdated + return false; + } + return true; +} + Vector &ArrowArrayScanState::GetDictionary() { D_ASSERT(HasDictionary()); return *dictionary; diff --git a/src/function/table/arrow_conversion.cpp b/src/function/table/arrow_conversion.cpp index 40915d5dd8a0..55058683b24d 100644 --- a/src/function/table/arrow_conversion.cpp +++ b/src/function/table/arrow_conversion.cpp @@ -29,7 +29,7 @@ static void ShiftRight(unsigned char *ar, int size, int shift) { while (shift--) { for (int i = size - 1; i >= 0; --i) { int next = (ar[i] & 1) ? 0x80 : 0; - ar[i] = carry | (ar[i] >> 1); + ar[i] = UnsafeNumericCast(carry | (ar[i] >> 1)); carry = next; } } @@ -73,7 +73,7 @@ static void GetValidityMask(ValidityMask &mask, ArrowArray &array, const ArrowSc //! need to re-align nullmask vector temp_nullmask(n_bitmask_bytes + 1); memcpy(temp_nullmask.data(), ArrowBufferData(array, 0) + bit_offset / 8, n_bitmask_bytes + 1); - ShiftRight(temp_nullmask.data(), n_bitmask_bytes + 1, + ShiftRight(temp_nullmask.data(), NumericCast(n_bitmask_bytes + 1), bit_offset % 8); //! why this has to be a right shift is a mystery to me memcpy((void *)mask.GetData(), data_ptr_cast(temp_nullmask.data()), n_bitmask_bytes); } @@ -129,20 +129,7 @@ static void ArrowToDuckDBList(Vector &vector, ArrowArray &array, ArrowArrayScanS SetValidityMask(vector, array, scan_state, size, parent_offset, nested_offset); idx_t start_offset = 0; idx_t cur_offset = 0; - if (size_type == ArrowVariableSizeType::FIXED_SIZE) { - auto fixed_size = arrow_type.FixedSize(); - //! Have to check validity mask before setting this up - idx_t offset = GetEffectiveOffset(array, parent_offset, scan_state, nested_offset) * fixed_size; - start_offset = offset; - auto list_data = FlatVector::GetData(vector); - for (idx_t i = 0; i < size; i++) { - auto &le = list_data[i]; - le.offset = cur_offset; - le.length = fixed_size; - cur_offset += fixed_size; - } - list_size = start_offset + cur_offset; - } else if (size_type == ArrowVariableSizeType::NORMAL) { + if (size_type == ArrowVariableSizeType::NORMAL) { auto offsets = ArrowBufferData(array, 1) + GetEffectiveOffset(array, parent_offset, scan_state, nested_offset); start_offset = offsets[0]; @@ -209,6 +196,61 @@ static void ArrowToDuckDBList(Vector &vector, ArrowArray &array, ArrowArrayScanS } } +static void ArrowToDuckDBArray(Vector &vector, ArrowArray &array, ArrowArrayScanState &array_state, idx_t size, + const ArrowType &arrow_type, int64_t nested_offset, ValidityMask *parent_mask, + int64_t parent_offset) { + + D_ASSERT(arrow_type.GetSizeType() == ArrowVariableSizeType::FIXED_SIZE); + auto &scan_state = array_state.state; + auto array_size = arrow_type.FixedSize(); + auto child_count = array_size * size; + auto child_offset = GetEffectiveOffset(array, parent_offset, scan_state, nested_offset) * array_size; + + SetValidityMask(vector, array, scan_state, size, parent_offset, nested_offset); + + auto &child_vector = ArrayVector::GetEntry(vector); + SetValidityMask(child_vector, *array.children[0], scan_state, child_count, array.offset, child_offset); + + auto &array_mask = FlatVector::Validity(vector); + if (parent_mask) { + //! Since this List is owned by a struct we must guarantee their validity map matches on Null + if (!parent_mask->AllValid()) { + for (idx_t i = 0; i < size; i++) { + if (!parent_mask->RowIsValid(i)) { + array_mask.SetInvalid(i); + } + } + } + } + + // Broadcast the validity mask to the child vector + if (!array_mask.AllValid()) { + auto &child_validity_mask = FlatVector::Validity(child_vector); + for (idx_t i = 0; i < size; i++) { + if (!array_mask.RowIsValid(i)) { + for (idx_t j = 0; j < array_size; j++) { + child_validity_mask.SetInvalid(i * array_size + j); + } + } + } + } + + auto &child_state = array_state.GetChild(0); + auto &child_array = *array.children[0]; + auto &child_type = arrow_type[0]; + if (child_count == 0 && child_offset == 0) { + D_ASSERT(!child_array.dictionary); + ColumnArrowToDuckDB(child_vector, child_array, child_state, child_count, child_type, -1); + } else { + if (child_array.dictionary) { + ColumnArrowToDuckDBDictionary(child_vector, child_array, child_state, child_count, child_type, + child_offset); + } else { + ColumnArrowToDuckDB(child_vector, child_array, child_state, child_count, child_type, child_offset); + } + } +} + static void ArrowToDuckDBBlob(Vector &vector, ArrowArray &array, const ArrowScanLocalState &scan_state, idx_t size, const ArrowType &arrow_type, int64_t nested_offset, int64_t parent_offset) { auto size_type = arrow_type.GetSizeType(); @@ -290,7 +332,7 @@ static void SetVectorString(Vector &vector, idx_t size, char *cdata, T *offsets) if (str_len > NumericLimits::Maximum()) { // LCOV_EXCL_START throw ConversionException("DuckDB does not support Strings over 4GB"); } // LCOV_EXCL_STOP - strings[row_idx] = string_t(cptr, str_len); + strings[row_idx] = string_t(cptr, UnsafeNumericCast(str_len)); } } @@ -588,9 +630,6 @@ static void ColumnArrowToDuckDBRunEndEncoded(Vector &vector, ArrowArray &array, static void ColumnArrowToDuckDB(Vector &vector, ArrowArray &array, ArrowArrayScanState &array_state, idx_t size, const ArrowType &arrow_type, int64_t nested_offset, ValidityMask *parent_mask, uint64_t parent_offset) { - if (parent_offset != 0) { - (void)array_state; - } auto &scan_state = array_state.state; D_ASSERT(!array.dictionary); @@ -670,7 +709,8 @@ static void ColumnArrowToDuckDB(Vector &vector, ArrowArray &array, ArrowArraySca GetEffectiveOffset(array, parent_offset, scan_state, nested_offset); auto tgt_ptr = FlatVector::GetData(vector); for (idx_t row = 0; row < size; row++) { - tgt_ptr[row] = date_t(int64_t(src_ptr[row]) / static_cast(1000 * 60 * 60 * 24)); + tgt_ptr[row] = date_t( + UnsafeNumericCast(int64_t(src_ptr[row]) / static_cast(1000 * 60 * 60 * 24))); } break; } @@ -836,6 +876,10 @@ static void ColumnArrowToDuckDB(Vector &vector, ArrowArray &array, ArrowArraySca ArrowToDuckDBList(vector, array, array_state, size, arrow_type, nested_offset, parent_mask, parent_offset); break; } + case LogicalTypeId::ARRAY: { + ArrowToDuckDBArray(vector, array, array_state, size, arrow_type, nested_offset, parent_mask, parent_offset); + break; + } case LogicalTypeId::MAP: { ArrowToDuckDBList(vector, array, array_state, size, arrow_type, nested_offset, parent_mask, parent_offset); ArrowToDuckDBMapVerify(vector, size); @@ -1070,10 +1114,10 @@ static bool CanContainNull(ArrowArray &array, ValidityMask *parent_mask) { static void ColumnArrowToDuckDBDictionary(Vector &vector, ArrowArray &array, ArrowArrayScanState &array_state, idx_t size, const ArrowType &arrow_type, int64_t nested_offset, ValidityMask *parent_mask, uint64_t parent_offset) { + D_ASSERT(arrow_type.HasDictionary()); auto &scan_state = array_state.state; - const bool has_nulls = CanContainNull(array, parent_mask); - if (!array_state.HasDictionary()) { + if (array_state.CacheOutdated(array.dictionary)) { //! We need to set the dictionary data for this column auto base_vector = make_uniq(vector.GetType(), array.dictionary->length); SetValidityMask(*base_vector, *array.dictionary, scan_state, array.dictionary->length, 0, 0, has_nulls); @@ -1095,7 +1139,7 @@ static void ColumnArrowToDuckDBDictionary(Vector &vector, ArrowArray &array, Arr default: throw NotImplementedException("ArrowArrayPhysicalType not recognized"); }; - array_state.AddDictionary(std::move(base_vector)); + array_state.AddDictionary(std::move(base_vector), array.dictionary); } auto offset_type = arrow_type.GetDuckType(); //! Get Pointer to Indices of Dictionary @@ -1120,6 +1164,7 @@ static void ColumnArrowToDuckDBDictionary(Vector &vector, ArrowArray &array, Arr SetSelectionVector(sel, indices, offset_type, size); } vector.Slice(array_state.GetDictionary(), sel, size); + vector.Verify(size); } void ArrowTableFunction::ArrowToDuckDB(ArrowScanLocalState &scan_state, const arrow_column_map_t &arrow_convert_data, @@ -1144,20 +1189,17 @@ void ArrowTableFunction::ArrowToDuckDB(ArrowScanLocalState &scan_state, const ar if (array.length != scan_state.chunk->arrow_array.length) { throw InvalidInputException("arrow_scan: array length mismatch"); } - // Make sure this Vector keeps the Arrow chunk alive in case we can zero-copy the data - if (scan_state.arrow_owned_data.find(idx) == scan_state.arrow_owned_data.end()) { - auto arrow_data = make_shared(); - arrow_data->arrow_array = scan_state.chunk->arrow_array; - scan_state.chunk->arrow_array.release = nullptr; - scan_state.arrow_owned_data[idx] = arrow_data; - } - - output.data[idx].GetBuffer()->SetAuxiliaryData(make_uniq(scan_state.arrow_owned_data[idx])); D_ASSERT(arrow_convert_data.find(col_idx) != arrow_convert_data.end()); auto &arrow_type = *arrow_convert_data.at(col_idx); auto &array_state = scan_state.GetState(col_idx); + // Make sure this Vector keeps the Arrow chunk alive in case we can zero-copy the data + if (!array_state.owned_data) { + array_state.owned_data = scan_state.chunk; + } + output.data[idx].GetBuffer()->SetAuxiliaryData(make_uniq(array_state.owned_data)); + auto array_physical_type = GetArrowArrayPhysicalType(arrow_type); switch (array_physical_type) { diff --git a/src/function/table/copy_csv.cpp b/src/function/table/copy_csv.cpp index 800b4424101d..ad4c540c1e30 100644 --- a/src/function/table/copy_csv.cpp +++ b/src/function/table/copy_csv.cpp @@ -7,7 +7,7 @@ #include "duckdb/common/types/column/column_data_collection.hpp" #include "duckdb/common/types/string_type.hpp" #include "duckdb/common/vector_operations/vector_operations.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/function/copy_function.hpp" #include "duckdb/function/scalar/string_functions.hpp" #include "duckdb/function/table/read_csv.hpp" diff --git a/src/function/table/range.cpp b/src/function/table/range.cpp index ecb65eb9980b..884a51b754ee 100644 --- a/src/function/table/range.cpp +++ b/src/function/table/range.cpp @@ -157,6 +157,11 @@ static unique_ptr RangeDateTimeBind(ClientContext &context, TableF auto result = make_uniq(); auto &inputs = input.inputs; D_ASSERT(inputs.size() == 3); + for (idx_t i = 0; i < inputs.size(); ++i) { + if (inputs[i].IsNull()) { + throw BinderException("RANGE with NULL argument is not supported"); + } + } result->start = inputs[0].GetValue(); result->end = inputs[1].GetValue(); result->increment = inputs[2].GetValue(); diff --git a/src/function/table/read_csv.cpp b/src/function/table/read_csv.cpp index 7d12244a94ba..8d2e1be0d780 100644 --- a/src/function/table/read_csv.cpp +++ b/src/function/table/read_csv.cpp @@ -6,9 +6,9 @@ #include "duckdb/common/serializer/serializer.hpp" #include "duckdb/common/string_util.hpp" #include "duckdb/common/union_by_name.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" -#include "duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/global_csv_state.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/execution/operator/persistent/csv_rejects_table.hpp" #include "duckdb/function/function_set.hpp" #include "duckdb/main/client_context.hpp" @@ -20,10 +20,10 @@ #include "duckdb/parser/expression/function_expression.hpp" #include "duckdb/parser/tableref/table_function_ref.hpp" #include "duckdb/planner/operator/logical_get.hpp" -#include "duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/base_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" #include @@ -211,8 +211,6 @@ static void ReadCSVFunction(ClientContext &context, TableFunctionInput &data_p, break; } if (csv_local_state.csv_reader->FinishedIterator()) { - csv_local_state.csv_reader->csv_file_scan->error_handler->Insert( - csv_local_state.csv_reader->GetBoundaryIndex(), csv_local_state.csv_reader->GetLinesRead()); csv_local_state.csv_reader = csv_global_state.Next(); if (!csv_local_state.csv_reader) { csv_global_state.DecrementThread(); @@ -270,6 +268,9 @@ void ReadCSVTableFunction::ReadCSVAddNamedParameters(TableFunction &table_functi double CSVReaderProgress(ClientContext &context, const FunctionData *bind_data_p, const GlobalTableFunctionState *global_state) { + if (!global_state) { + return 0; + } auto &bind_data = bind_data_p->Cast(); auto &data = global_state->Cast(); return data.GetProgress(bind_data); diff --git a/src/function/table/sniff_csv.cpp b/src/function/table/sniff_csv.cpp index 406f3309252a..f135b15c615d 100644 --- a/src/function/table/sniff_csv.cpp +++ b/src/function/table/sniff_csv.cpp @@ -1,12 +1,12 @@ #include "duckdb/function/built_in_functions.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/common/types/data_chunk.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" #include "duckdb/function/table_function.hpp" #include "duckdb/main/client_context.hpp" #include "duckdb/function/table/range.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" #include "duckdb/function/table/read_csv.hpp" namespace duckdb { @@ -142,7 +142,7 @@ static void CSVSniffFunction(ClientContext &context, TableFunctionInput &data_p, NewLineIdentifierToString(sniffer_options.dialect_options.state_machine_options.new_line.GetValue()); output.SetValue(3, 0, new_line_identifier); // 5. Skip Rows - output.SetValue(4, 0, Value::UINTEGER(sniffer_options.dialect_options.skip_rows.GetValue())); + output.SetValue(4, 0, Value::UINTEGER(NumericCast(sniffer_options.dialect_options.skip_rows.GetValue()))); // 6. Has Header auto has_header = Value::BOOLEAN(sniffer_options.dialect_options.header.GetValue()).ToString(); output.SetValue(5, 0, has_header); diff --git a/src/function/table/system/duckdb_columns.cpp b/src/function/table/system/duckdb_columns.cpp index cee5e1f49c65..2d7790e1109c 100644 --- a/src/function/table/system/duckdb_columns.cpp +++ b/src/function/table/system/duckdb_columns.cpp @@ -178,7 +178,11 @@ class ViewColumnHelper : public ColumnHelper { return true; } const Value ColumnComment(idx_t col) override { - return Value(); + if (entry.column_comments.empty()) { + return Value(); + } + D_ASSERT(entry.column_comments.size() == entry.types.size()); + return entry.column_comments[col]; } private: @@ -217,7 +221,7 @@ void ColumnHelper::WriteColumns(idx_t start_index, idx_t start_col, idx_t end_co // column_name, VARCHAR output.SetValue(col++, index, Value(ColumnName(i))); // column_index, INTEGER - output.SetValue(col++, index, Value::INTEGER(i + 1)); + output.SetValue(col++, index, Value::INTEGER(UnsafeNumericCast(i + 1))); // comment, VARCHAR output.SetValue(col++, index, ColumnComment(i)); // internal, BOOLEAN diff --git a/src/function/table/system/duckdb_secrets.cpp b/src/function/table/system/duckdb_secrets.cpp index e97a5d11e6af..44557e349426 100644 --- a/src/function/table/system/duckdb_secrets.cpp +++ b/src/function/table/system/duckdb_secrets.cpp @@ -15,6 +15,7 @@ struct DuckDBSecretsData : public GlobalTableFunctionState { DuckDBSecretsData() : offset(0) { } idx_t offset; + duckdb::vector secrets; }; struct DuckDBSecretsBindData : public FunctionData { @@ -84,8 +85,11 @@ void DuckDBSecretsFunction(ClientContext &context, TableFunctionInput &data_p, D auto &secret_manager = SecretManager::Get(context); auto transaction = CatalogTransaction::GetSystemCatalogTransaction(context); - auto secrets = secret_manager.AllSecrets(transaction); + if (data.secrets.empty()) { + data.secrets = secret_manager.AllSecrets(transaction); + } + auto &secrets = data.secrets; if (data.offset >= secrets.size()) { // finished returning values return; diff --git a/src/function/table/system/duckdb_sequences.cpp b/src/function/table/system/duckdb_sequences.cpp index b4b274a83870..7a38e1c65e96 100644 --- a/src/function/table/system/duckdb_sequences.cpp +++ b/src/function/table/system/duckdb_sequences.cpp @@ -4,6 +4,7 @@ #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp" #include "duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp" #include "duckdb/common/exception.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/main/client_context.hpp" #include "duckdb/main/client_data.hpp" @@ -121,7 +122,8 @@ void DuckDBSequencesFunction(ClientContext &context, TableFunctionInput &data_p, // cycle, BOOLEAN output.SetValue(col++, count, Value::BOOLEAN(seq_data.cycle)); // last_value, BIGINT - output.SetValue(col++, count, seq_data.usage_count == 0 ? Value() : Value::BOOLEAN(seq_data.last_value)); + output.SetValue(col++, count, + seq_data.usage_count == 0 ? Value() : Value::BOOLEAN(NumericCast(seq_data.last_value))); // sql, LogicalType::VARCHAR output.SetValue(col++, count, Value(seq.ToSQL())); diff --git a/src/function/table/system/test_all_types.cpp b/src/function/table/system/test_all_types.cpp index 53e41672a1c6..94450345fd90 100644 --- a/src/function/table/system/test_all_types.cpp +++ b/src/function/table/system/test_all_types.cpp @@ -212,6 +212,70 @@ vector TestAllTypesFun::GetTestTypes(bool use_large_enum) { const Value &max = Value::UNION(members, 1, Value::SMALLINT(5)); result.emplace_back(union_type, "union", min, max); + // fixed int array + auto fixed_int_array_type = LogicalType::ARRAY(LogicalType::INTEGER, 3); + auto fixed_int_min_array_value = Value::ARRAY({Value(LogicalType::INTEGER), 2, 3}); + auto fixed_int_max_array_value = Value::ARRAY({4, 5, 6}); + result.emplace_back(fixed_int_array_type, "fixed_int_array", fixed_int_min_array_value, fixed_int_max_array_value); + + // fixed varchar array + auto fixed_varchar_array_type = LogicalType::ARRAY(LogicalType::VARCHAR, 3); + auto fixed_varchar_min_array_value = Value::ARRAY({Value("a"), Value(LogicalType::VARCHAR), Value("c")}); + auto fixed_varchar_max_array_value = Value::ARRAY({Value("d"), Value("e"), Value("f")}); + result.emplace_back(fixed_varchar_array_type, "fixed_varchar_array", fixed_varchar_min_array_value, + fixed_varchar_max_array_value); + + // fixed nested int array + auto fixed_nested_int_array_type = LogicalType::ARRAY(fixed_int_array_type, 3); + auto fixed_nested_int_min_array_value = + Value::ARRAY({fixed_int_min_array_value, Value(fixed_int_array_type), fixed_int_min_array_value}); + auto fixed_nested_int_max_array_value = + Value::ARRAY({fixed_int_max_array_value, fixed_int_min_array_value, fixed_int_max_array_value}); + result.emplace_back(fixed_nested_int_array_type, "fixed_nested_int_array", fixed_nested_int_min_array_value, + fixed_nested_int_max_array_value); + + // fixed nested varchar array + auto fixed_nested_varchar_array_type = LogicalType::ARRAY(fixed_varchar_array_type, 3); + auto fixed_nested_varchar_min_array_value = + Value::ARRAY({fixed_varchar_min_array_value, Value(fixed_varchar_array_type), fixed_varchar_min_array_value}); + auto fixed_nested_varchar_max_array_value = + Value::ARRAY({fixed_varchar_max_array_value, fixed_varchar_min_array_value, fixed_varchar_max_array_value}); + result.emplace_back(fixed_nested_varchar_array_type, "fixed_nested_varchar_array", + fixed_nested_varchar_min_array_value, fixed_nested_varchar_max_array_value); + + // fixed array of structs + auto fixed_struct_array_type = LogicalType::ARRAY(struct_type, 3); + auto fixed_struct_min_array_value = Value::ARRAY({min_struct_val, max_struct_val, min_struct_val}); + auto fixed_struct_max_array_value = Value::ARRAY({max_struct_val, min_struct_val, max_struct_val}); + result.emplace_back(fixed_struct_array_type, "fixed_struct_array", fixed_struct_min_array_value, + fixed_struct_max_array_value); + + // struct of fixed array + auto struct_of_fixed_array_type = + LogicalType::STRUCT({{"a", fixed_int_array_type}, {"b", fixed_varchar_array_type}}); + auto struct_of_fixed_array_min_value = + Value::STRUCT({{"a", fixed_int_min_array_value}, {"b", fixed_varchar_min_array_value}}); + auto struct_of_fixed_array_max_value = + Value::STRUCT({{"a", fixed_int_max_array_value}, {"b", fixed_varchar_max_array_value}}); + result.emplace_back(struct_of_fixed_array_type, "struct_of_fixed_array", struct_of_fixed_array_min_value, + struct_of_fixed_array_max_value); + + // fixed array of list of int + auto fixed_array_of_list_of_int_type = LogicalType::ARRAY(LogicalType::LIST(LogicalType::INTEGER), 3); + auto fixed_array_of_list_of_int_min_value = Value::ARRAY({empty_int_list, int_list, empty_int_list}); + auto fixed_array_of_list_of_int_max_value = Value::ARRAY({int_list, empty_int_list, int_list}); + result.emplace_back(fixed_array_of_list_of_int_type, "fixed_array_of_int_list", + fixed_array_of_list_of_int_min_value, fixed_array_of_list_of_int_max_value); + + // list of fixed array of int + auto list_of_fixed_array_of_int_type = LogicalType::LIST(fixed_int_array_type); + auto list_of_fixed_array_of_int_min_value = + Value::LIST({fixed_int_min_array_value, fixed_int_max_array_value, fixed_int_min_array_value}); + auto list_of_fixed_array_of_int_max_value = + Value::LIST({fixed_int_max_array_value, fixed_int_min_array_value, fixed_int_max_array_value}); + result.emplace_back(list_of_fixed_array_of_int_type, "list_of_fixed_int_array", + list_of_fixed_array_of_int_min_value, list_of_fixed_array_of_int_max_value); + return result; } diff --git a/src/include/duckdb.h b/src/include/duckdb.h index d0b6160d5a60..45606c8a31a5 100644 --- a/src/include/duckdb.h +++ b/src/include/duckdb.h @@ -64,74 +64,77 @@ extern "C" { //===--------------------------------------------------------------------===// // Enums //===--------------------------------------------------------------------===// - +// WARNING: the numbers of these enums should not be changed, as changing the numbers breaks ABI compatibility +// Always add enums at the END of the enum //! An enum over DuckDB's internal types. typedef enum DUCKDB_TYPE { DUCKDB_TYPE_INVALID = 0, // bool - DUCKDB_TYPE_BOOLEAN, + DUCKDB_TYPE_BOOLEAN = 1, // int8_t - DUCKDB_TYPE_TINYINT, + DUCKDB_TYPE_TINYINT = 2, // int16_t - DUCKDB_TYPE_SMALLINT, + DUCKDB_TYPE_SMALLINT = 3, // int32_t - DUCKDB_TYPE_INTEGER, + DUCKDB_TYPE_INTEGER = 4, // int64_t - DUCKDB_TYPE_BIGINT, + DUCKDB_TYPE_BIGINT = 5, // uint8_t - DUCKDB_TYPE_UTINYINT, + DUCKDB_TYPE_UTINYINT = 6, // uint16_t - DUCKDB_TYPE_USMALLINT, + DUCKDB_TYPE_USMALLINT = 7, // uint32_t - DUCKDB_TYPE_UINTEGER, + DUCKDB_TYPE_UINTEGER = 8, // uint64_t - DUCKDB_TYPE_UBIGINT, + DUCKDB_TYPE_UBIGINT = 9, // float - DUCKDB_TYPE_FLOAT, + DUCKDB_TYPE_FLOAT = 10, // double - DUCKDB_TYPE_DOUBLE, + DUCKDB_TYPE_DOUBLE = 11, // duckdb_timestamp, in microseconds - DUCKDB_TYPE_TIMESTAMP, + DUCKDB_TYPE_TIMESTAMP = 12, // duckdb_date - DUCKDB_TYPE_DATE, + DUCKDB_TYPE_DATE = 13, // duckdb_time - DUCKDB_TYPE_TIME, + DUCKDB_TYPE_TIME = 14, // duckdb_interval - DUCKDB_TYPE_INTERVAL, + DUCKDB_TYPE_INTERVAL = 15, // duckdb_hugeint - DUCKDB_TYPE_HUGEINT, + DUCKDB_TYPE_HUGEINT = 16, // duckdb_uhugeint - DUCKDB_TYPE_UHUGEINT, + DUCKDB_TYPE_UHUGEINT = 32, // const char* - DUCKDB_TYPE_VARCHAR, + DUCKDB_TYPE_VARCHAR = 17, // duckdb_blob - DUCKDB_TYPE_BLOB, + DUCKDB_TYPE_BLOB = 18, // decimal - DUCKDB_TYPE_DECIMAL, + DUCKDB_TYPE_DECIMAL = 19, // duckdb_timestamp, in seconds - DUCKDB_TYPE_TIMESTAMP_S, + DUCKDB_TYPE_TIMESTAMP_S = 20, // duckdb_timestamp, in milliseconds - DUCKDB_TYPE_TIMESTAMP_MS, + DUCKDB_TYPE_TIMESTAMP_MS = 21, // duckdb_timestamp, in nanoseconds - DUCKDB_TYPE_TIMESTAMP_NS, + DUCKDB_TYPE_TIMESTAMP_NS = 22, // enum type, only useful as logical type - DUCKDB_TYPE_ENUM, + DUCKDB_TYPE_ENUM = 23, // list type, only useful as logical type - DUCKDB_TYPE_LIST, + DUCKDB_TYPE_LIST = 24, // struct type, only useful as logical type - DUCKDB_TYPE_STRUCT, + DUCKDB_TYPE_STRUCT = 25, // map type, only useful as logical type - DUCKDB_TYPE_MAP, + DUCKDB_TYPE_MAP = 26, + // duckdb_array, only useful as logical type + DUCKDB_TYPE_ARRAY = 33, // duckdb_hugeint - DUCKDB_TYPE_UUID, + DUCKDB_TYPE_UUID = 27, // union type, only useful as logical type - DUCKDB_TYPE_UNION, + DUCKDB_TYPE_UNION = 28, // duckdb_bit - DUCKDB_TYPE_BIT, + DUCKDB_TYPE_BIT = 29, // duckdb_time_tz - DUCKDB_TYPE_TIME_TZ, + DUCKDB_TYPE_TIME_TZ = 30, // duckdb_timestamp - DUCKDB_TYPE_TIMESTAMP_TZ, + DUCKDB_TYPE_TIMESTAMP_TZ = 31, } duckdb_type; //! An enum over the returned state of different functions. typedef enum { DuckDBSuccess = 0, DuckDBError = 1 } duckdb_state; @@ -144,41 +147,41 @@ typedef enum { } duckdb_pending_state; //! An enum over DuckDB's different result types. typedef enum { - DUCKDB_RESULT_TYPE_INVALID, - DUCKDB_RESULT_TYPE_CHANGED_ROWS, - DUCKDB_RESULT_TYPE_NOTHING, - DUCKDB_RESULT_TYPE_QUERY_RESULT, + DUCKDB_RESULT_TYPE_INVALID = 0, + DUCKDB_RESULT_TYPE_CHANGED_ROWS = 1, + DUCKDB_RESULT_TYPE_NOTHING = 2, + DUCKDB_RESULT_TYPE_QUERY_RESULT = 3, } duckdb_result_type; //! An enum over DuckDB's different statement types. typedef enum { - DUCKDB_STATEMENT_TYPE_INVALID, - DUCKDB_STATEMENT_TYPE_SELECT, - DUCKDB_STATEMENT_TYPE_INSERT, - DUCKDB_STATEMENT_TYPE_UPDATE, - DUCKDB_STATEMENT_TYPE_EXPLAIN, - DUCKDB_STATEMENT_TYPE_DELETE, - DUCKDB_STATEMENT_TYPE_PREPARE, - DUCKDB_STATEMENT_TYPE_CREATE, - DUCKDB_STATEMENT_TYPE_EXECUTE, - DUCKDB_STATEMENT_TYPE_ALTER, - DUCKDB_STATEMENT_TYPE_TRANSACTION, - DUCKDB_STATEMENT_TYPE_COPY, - DUCKDB_STATEMENT_TYPE_ANALYZE, - DUCKDB_STATEMENT_TYPE_VARIABLE_SET, - DUCKDB_STATEMENT_TYPE_CREATE_FUNC, - DUCKDB_STATEMENT_TYPE_DROP, - DUCKDB_STATEMENT_TYPE_EXPORT, - DUCKDB_STATEMENT_TYPE_PRAGMA, - DUCKDB_STATEMENT_TYPE_VACUUM, - DUCKDB_STATEMENT_TYPE_CALL, - DUCKDB_STATEMENT_TYPE_SET, - DUCKDB_STATEMENT_TYPE_LOAD, - DUCKDB_STATEMENT_TYPE_RELATION, - DUCKDB_STATEMENT_TYPE_EXTENSION, - DUCKDB_STATEMENT_TYPE_LOGICAL_PLAN, - DUCKDB_STATEMENT_TYPE_ATTACH, - DUCKDB_STATEMENT_TYPE_DETACH, - DUCKDB_STATEMENT_TYPE_MULTI, + DUCKDB_STATEMENT_TYPE_INVALID = 0, + DUCKDB_STATEMENT_TYPE_SELECT = 1, + DUCKDB_STATEMENT_TYPE_INSERT = 2, + DUCKDB_STATEMENT_TYPE_UPDATE = 3, + DUCKDB_STATEMENT_TYPE_EXPLAIN = 4, + DUCKDB_STATEMENT_TYPE_DELETE = 5, + DUCKDB_STATEMENT_TYPE_PREPARE = 6, + DUCKDB_STATEMENT_TYPE_CREATE = 7, + DUCKDB_STATEMENT_TYPE_EXECUTE = 8, + DUCKDB_STATEMENT_TYPE_ALTER = 9, + DUCKDB_STATEMENT_TYPE_TRANSACTION = 10, + DUCKDB_STATEMENT_TYPE_COPY = 11, + DUCKDB_STATEMENT_TYPE_ANALYZE = 12, + DUCKDB_STATEMENT_TYPE_VARIABLE_SET = 13, + DUCKDB_STATEMENT_TYPE_CREATE_FUNC = 14, + DUCKDB_STATEMENT_TYPE_DROP = 15, + DUCKDB_STATEMENT_TYPE_EXPORT = 16, + DUCKDB_STATEMENT_TYPE_PRAGMA = 17, + DUCKDB_STATEMENT_TYPE_VACUUM = 18, + DUCKDB_STATEMENT_TYPE_CALL = 19, + DUCKDB_STATEMENT_TYPE_SET = 20, + DUCKDB_STATEMENT_TYPE_LOAD = 21, + DUCKDB_STATEMENT_TYPE_RELATION = 22, + DUCKDB_STATEMENT_TYPE_EXTENSION = 23, + DUCKDB_STATEMENT_TYPE_LOGICAL_PLAN = 24, + DUCKDB_STATEMENT_TYPE_ATTACH = 25, + DUCKDB_STATEMENT_TYPE_DETACH = 26, + DUCKDB_STATEMENT_TYPE_MULTI = 27, } duckdb_statement_type; //===--------------------------------------------------------------------===// @@ -227,7 +230,7 @@ typedef struct { uint64_t bits; } duckdb_time_tz; typedef struct { - duckdb_time time; + duckdb_time_struct time; int32_t offset; } duckdb_time_tz_struct; @@ -1625,6 +1628,16 @@ Creates a list value from a type and an array of values of length `value_count` */ DUCKDB_API duckdb_value duckdb_create_list_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count); +/*! +Creates a array value from a type and an array of values of length `value_count` + +* type: The type of the array +* values: The values for the array +* value_count: The number of values in the array +* returns: The value. This must be destroyed with `duckdb_destroy_value`. +*/ +DUCKDB_API duckdb_value duckdb_create_array_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count); + /*! Obtains a string representation of the given value. The result must be destroyed with `duckdb_free`. @@ -1675,6 +1688,16 @@ The resulting type should be destroyed with `duckdb_destroy_logical_type`. */ DUCKDB_API duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type); +/*! +Creates a array type from its child type. +The resulting type should be destroyed with `duckdb_destroy_logical_type`. + +* type: The child type of array type to create. +* array_size: The number of elements in the array. +* returns: The logical type. +*/ +DUCKDB_API duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size); + /*! Creates a map type from its key type and value type. The resulting type should be destroyed with `duckdb_destroy_logical_type`. @@ -1797,6 +1820,24 @@ The result must be freed with `duckdb_destroy_logical_type`. */ DUCKDB_API duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type); +/*! +Retrieves the child type of the given array type. + +The result must be freed with `duckdb_destroy_logical_type`. + +* type: The logical type object +* returns: The child type of the array type. Must be destroyed with `duckdb_destroy_logical_type`. +*/ +DUCKDB_API duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type); + +/*! +Retrieves the array size of the given array type. + +* type: The logical type object +* returns: The fixed number of elements the values of this array type can store. +*/ +DUCKDB_API idx_t duckdb_array_type_array_size(duckdb_logical_type type); + /*! Retrieves the key type of the given map type. @@ -2015,7 +2056,7 @@ Assigns a string element in the vector at the specified location. DUCKDB_API void duckdb_vector_assign_string_element(duckdb_vector vector, idx_t index, const char *str); /*! -Assigns a string element in the vector at the specified location. +Assigns a string element in the vector at the specified location. You may also use this function to assign BLOBs. * vector: The vector to alter * index: The row position in the vector to assign the string to @@ -2072,6 +2113,17 @@ The resulting vector is valid as long as the parent vector is valid. */ DUCKDB_API duckdb_vector duckdb_struct_vector_get_child(duckdb_vector vector, idx_t index); +/*! +Retrieves the child vector of a array vector. + +The resulting vector is valid as long as the parent vector is valid. +The resulting vector has the size of the parent vector multiplied by the array size. + +* vector: The vector +* returns: The child vector +*/ +DUCKDB_API duckdb_vector duckdb_array_vector_get_child(duckdb_vector vector); + //===--------------------------------------------------------------------===// // Validity Mask Functions //===--------------------------------------------------------------------===// diff --git a/src/include/duckdb/catalog/catalog.hpp b/src/include/duckdb/catalog/catalog.hpp index 988d54c74f40..0bbf322c628b 100644 --- a/src/include/duckdb/catalog/catalog.hpp +++ b/src/include/duckdb/catalog/catalog.hpp @@ -191,6 +191,10 @@ class Catalog { DUCKDB_API optional_ptr GetSchema(ClientContext &context, const string &name, OnEntryNotFound if_not_found, QueryErrorContext error_context = QueryErrorContext()); + //! Overloadable method for giving warnings on ambiguous naming id.tab due to a database and schema with name id + DUCKDB_API virtual bool CheckAmbiguousCatalogOrSchema(ClientContext &context, const string &name) { + return !!GetSchema(context, name, OnEntryNotFound::RETURN_NULL); + } DUCKDB_API SchemaCatalogEntry &GetSchema(CatalogTransaction transaction, const string &name, QueryErrorContext error_context = QueryErrorContext()); DUCKDB_API virtual optional_ptr @@ -348,7 +352,7 @@ class Catalog { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } diff --git a/src/include/duckdb/catalog/catalog_entry.hpp b/src/include/duckdb/catalog/catalog_entry.hpp index 995b8d00dbd8..0ff1d6cf2349 100644 --- a/src/include/duckdb/catalog/catalog_entry.hpp +++ b/src/include/duckdb/catalog/catalog_entry.hpp @@ -95,7 +95,7 @@ class CatalogEntry { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp b/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp index 554f13fccc6f..d435fcec2ec4 100644 --- a/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +++ b/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp @@ -38,6 +38,8 @@ class ViewCatalogEntry : public StandardEntry { vector types; //! The returned names of the view vector names; + //! The comments on the columns of the view: can be empty if there are no comments + vector column_comments; public: unique_ptr GetInfo() const override; diff --git a/src/include/duckdb/common/allocator.hpp b/src/include/duckdb/common/allocator.hpp index 9d4528ae5278..0945516aecb7 100644 --- a/src/include/duckdb/common/allocator.hpp +++ b/src/include/duckdb/common/allocator.hpp @@ -29,7 +29,7 @@ struct PrivateAllocatorData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/common/arrow/appender/enum_data.hpp b/src/include/duckdb/common/arrow/appender/enum_data.hpp index 087c622e85ee..e6ed5c107b0a 100644 --- a/src/include/duckdb/common/arrow/appender/enum_data.hpp +++ b/src/include/duckdb/common/arrow/appender/enum_data.hpp @@ -45,13 +45,13 @@ struct ArrowEnumData : public ArrowScalarBaseData { // append the offset data auto current_offset = last_offset + string_length; - offset_data[offset_idx] = current_offset; + offset_data[offset_idx] = UnsafeNumericCast(current_offset); // resize the string buffer if required, and write the string data append_data.aux_buffer.resize(current_offset); WriteData(append_data.aux_buffer.data() + last_offset, data[i]); - last_offset = current_offset; + last_offset = UnsafeNumericCast(current_offset); } append_data.row_count += size; } diff --git a/src/include/duckdb/common/arrow/appender/fixed_size_list_data.hpp b/src/include/duckdb/common/arrow/appender/fixed_size_list_data.hpp new file mode 100644 index 000000000000..4ad609441393 --- /dev/null +++ b/src/include/duckdb/common/arrow/appender/fixed_size_list_data.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include "duckdb/common/arrow/appender/append_data.hpp" + +namespace duckdb { + +struct ArrowFixedSizeListData { +public: + static void Initialize(ArrowAppendData &result, const LogicalType &type, idx_t capacity); + static void Append(ArrowAppendData &append_data, Vector &input, idx_t from, idx_t to, idx_t input_size); + static void Finalize(ArrowAppendData &append_data, const LogicalType &type, ArrowArray *result); +}; + +} // namespace duckdb diff --git a/src/include/duckdb/common/arrow/appender/list.hpp b/src/include/duckdb/common/arrow/appender/list.hpp index 48b94def2465..54cc34dd4dab 100644 --- a/src/include/duckdb/common/arrow/appender/list.hpp +++ b/src/include/duckdb/common/arrow/appender/list.hpp @@ -1,5 +1,6 @@ #include "duckdb/common/arrow/appender/bool_data.hpp" #include "duckdb/common/arrow/appender/enum_data.hpp" +#include "duckdb/common/arrow/appender/fixed_size_list_data.hpp" #include "duckdb/common/arrow/appender/list_data.hpp" #include "duckdb/common/arrow/appender/map_data.hpp" #include "duckdb/common/arrow/appender/scalar_data.hpp" diff --git a/src/include/duckdb/common/arrow/appender/list_data.hpp b/src/include/duckdb/common/arrow/appender/list_data.hpp index 534ddef2a368..ca11f49a80cc 100644 --- a/src/include/duckdb/common/arrow/appender/list_data.hpp +++ b/src/include/duckdb/common/arrow/appender/list_data.hpp @@ -79,7 +79,7 @@ struct ArrowListData { offset_data[offset_idx] = last_offset; for (idx_t k = 0; k < list_length; k++) { - child_sel.push_back(data[source_idx].offset + k); + child_sel.push_back(UnsafeNumericCast(data[source_idx].offset + k)); } } } diff --git a/src/include/duckdb/common/arrow/appender/varchar_data.hpp b/src/include/duckdb/common/arrow/appender/varchar_data.hpp index fd2a2385dbe0..d6ffcd9db868 100644 --- a/src/include/duckdb/common/arrow/appender/varchar_data.hpp +++ b/src/include/duckdb/common/arrow/appender/varchar_data.hpp @@ -85,13 +85,13 @@ struct ArrowVarcharData { "%u but the offset of %lu exceeds this.", NumericLimits::Maximum(), current_offset); } - offset_data[offset_idx] = current_offset; + offset_data[offset_idx] = UnsafeNumericCast(current_offset); // resize the string buffer if required, and write the string data append_data.aux_buffer.resize(current_offset); OP::WriteData(append_data.aux_buffer.data() + last_offset, data[source_idx]); - last_offset = current_offset; + last_offset = UnsafeNumericCast(current_offset); } append_data.row_count += size; } diff --git a/src/include/duckdb/common/bitpacking.hpp b/src/include/duckdb/common/bitpacking.hpp index d41a97a2157f..7bddedfc42d6 100644 --- a/src/include/duckdb/common/bitpacking.hpp +++ b/src/include/duckdb/common/bitpacking.hpp @@ -189,10 +189,10 @@ class BitpackingPrimitives { // Sign bit extension template ::type> static void SignExtend(data_ptr_t dst, bitpacking_width_t width) { - T const mask = T_U(1) << (width - 1); + T const mask = UnsafeNumericCast(T_U(1) << (width - 1)); for (idx_t i = 0; i < BitpackingPrimitives::BITPACKING_ALGORITHM_GROUP_SIZE; ++i) { T value = Load(dst + i * sizeof(T)); - value = value & ((T_U(1) << width) - T_U(1)); + value = UnsafeNumericCast(value & ((T_U(1) << width) - T_U(1))); T result = (value ^ mask) - mask; Store(result, dst + i * sizeof(T)); } diff --git a/src/include/duckdb/common/bswap.hpp b/src/include/duckdb/common/bswap.hpp index fae539699ad4..16119f453a6f 100644 --- a/src/include/duckdb/common/bswap.hpp +++ b/src/include/duckdb/common/bswap.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb/common/common.hpp" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -33,9 +34,12 @@ static inline T BSwap(const T &x) { } else if (sizeof(T) == 2) { return BSWAP16(x); } else if (sizeof(T) == 4) { - return BSWAP32(x); + // this check is superfluous as the branch is not taken for small return types but the compiler does not realize + // that + return UnsafeNumericCast(BSWAP32(x)); } else { - return BSWAP64(x); + // see above + return UnsafeNumericCast(BSWAP64(x)); } } diff --git a/src/include/duckdb/common/enum_util.hpp b/src/include/duckdb/common/enum_util.hpp index 66a34ad8b6af..bb289b28e46f 100644 --- a/src/include/duckdb/common/enum_util.hpp +++ b/src/include/duckdb/common/enum_util.hpp @@ -154,6 +154,8 @@ enum class JoinType : uint8_t; enum class KeywordCategory : uint8_t; +enum class LimitNodeType : uint8_t; + enum class LoadType : uint8_t; enum class LogicalOperatorType : uint8_t; @@ -492,6 +494,9 @@ const char* EnumUtil::ToChars(JoinType value); template<> const char* EnumUtil::ToChars(KeywordCategory value); +template<> +const char* EnumUtil::ToChars(LimitNodeType value); + template<> const char* EnumUtil::ToChars(LoadType value); @@ -907,6 +912,9 @@ JoinType EnumUtil::FromString(const char *value); template<> KeywordCategory EnumUtil::FromString(const char *value); +template<> +LimitNodeType EnumUtil::FromString(const char *value); + template<> LoadType EnumUtil::FromString(const char *value); diff --git a/src/include/duckdb/common/enums/logical_operator_type.hpp b/src/include/duckdb/common/enums/logical_operator_type.hpp index 9c90ab7d2155..e9e435ae17b8 100644 --- a/src/include/duckdb/common/enums/logical_operator_type.hpp +++ b/src/include/duckdb/common/enums/logical_operator_type.hpp @@ -28,7 +28,6 @@ enum class LogicalOperatorType : uint8_t { LOGICAL_COPY_TO_FILE = 10, LOGICAL_DISTINCT = 11, LOGICAL_SAMPLE = 12, - LOGICAL_LIMIT_PERCENT = 13, LOGICAL_PIVOT = 14, LOGICAL_COPY_DATABASE = 15, diff --git a/src/include/duckdb/common/enums/statement_type.hpp b/src/include/duckdb/common/enums/statement_type.hpp index 3a52b5283f63..26ecce70ad6a 100644 --- a/src/include/duckdb/common/enums/statement_type.hpp +++ b/src/include/duckdb/common/enums/statement_type.hpp @@ -65,6 +65,8 @@ struct StatementProperties { return_type(StatementReturnType::QUERY_RESULT), parameter_count(0), always_require_rebind(false) { } + //! The set of databases this statement will read from + unordered_set read_databases; //! The set of databases this statement will modify unordered_set modified_databases; //! Whether or not the statement requires a valid transaction. Almost all statements require this, with the diff --git a/src/include/duckdb/common/exception.hpp b/src/include/duckdb/common/exception.hpp index b23fb9709c25..2e45cb92af56 100644 --- a/src/include/duckdb/common/exception.hpp +++ b/src/include/duckdb/common/exception.hpp @@ -339,6 +339,8 @@ class TypeMismatchException : public Exception { public: DUCKDB_API TypeMismatchException(const PhysicalType type_1, const PhysicalType type_2, const string &msg); DUCKDB_API TypeMismatchException(const LogicalType &type_1, const LogicalType &type_2, const string &msg); + DUCKDB_API TypeMismatchException(optional_idx error_location, const LogicalType &type_1, const LogicalType &type_2, + const string &msg); DUCKDB_API TypeMismatchException(const string &msg); //! Needed to be able to recreate the exception after it's been serialized }; diff --git a/src/include/duckdb/common/exception/conversion_exception.hpp b/src/include/duckdb/common/exception/conversion_exception.hpp index 945e091d66d6..8feaec75ddfc 100644 --- a/src/include/duckdb/common/exception/conversion_exception.hpp +++ b/src/include/duckdb/common/exception/conversion_exception.hpp @@ -9,12 +9,14 @@ #pragma once #include "duckdb/common/exception.hpp" +#include "duckdb/common/optional_idx.hpp" namespace duckdb { class ConversionException : public Exception { public: DUCKDB_API explicit ConversionException(const string &msg); + DUCKDB_API explicit ConversionException(optional_idx error_location, const string &msg); DUCKDB_API ConversionException(const PhysicalType origType, const PhysicalType newType); DUCKDB_API ConversionException(const LogicalType &origType, const LogicalType &newType); @@ -22,6 +24,10 @@ class ConversionException : public Exception { explicit ConversionException(const string &msg, Args... params) : ConversionException(ConstructMessage(msg, params...)) { } + template + explicit ConversionException(optional_idx error_location, const string &msg, Args... params) + : ConversionException(error_location, ConstructMessage(msg, params...)) { + } }; } // namespace duckdb diff --git a/src/include/duckdb/common/exception/parser_exception.hpp b/src/include/duckdb/common/exception/parser_exception.hpp index 15d97bf0e028..da0972e0cfe5 100644 --- a/src/include/duckdb/common/exception/parser_exception.hpp +++ b/src/include/duckdb/common/exception/parser_exception.hpp @@ -22,6 +22,10 @@ class ParserException : public Exception { template explicit ParserException(const string &msg, Args... params) : ParserException(ConstructMessage(msg, params...)) { } + template + explicit ParserException(optional_idx error_location, const string &msg, Args... params) + : ParserException(ConstructMessage(msg, params...), Exception::InitializeExtraInfo(error_location)) { + } static ParserException SyntaxError(const string &query, const string &error_message, optional_idx error_location); }; diff --git a/src/include/duckdb/common/extra_type_info.hpp b/src/include/duckdb/common/extra_type_info.hpp index 930c44a33b5d..5ba5c9f6ab8d 100644 --- a/src/include/duckdb/common/extra_type_info.hpp +++ b/src/include/duckdb/common/extra_type_info.hpp @@ -45,7 +45,7 @@ struct ExtraTypeInfo { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -190,8 +190,8 @@ struct EnumTypeInfo : public ExtraTypeInfo { struct ArrayTypeInfo : public ExtraTypeInfo { LogicalType child_type; - idx_t size; - explicit ArrayTypeInfo(LogicalType child_type_p, idx_t size_p); + uint32_t size; + explicit ArrayTypeInfo(LogicalType child_type_p, uint32_t size_p); public: void Serialize(Serializer &serializer) const override; diff --git a/src/include/duckdb/common/file_system.hpp b/src/include/duckdb/common/file_system.hpp index a9237d6fbe19..3dc81acfa2a3 100644 --- a/src/include/duckdb/common/file_system.hpp +++ b/src/include/duckdb/common/file_system.hpp @@ -8,7 +8,7 @@ #pragma once -#include "duckdb/common/constants.hpp" +#include "duckdb/common/common.hpp" #include "duckdb/common/enums/file_compression_type.hpp" #include "duckdb/common/exception.hpp" #include "duckdb/common/file_buffer.hpp" @@ -80,7 +80,7 @@ struct FileHandle { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/common/helper.hpp b/src/include/duckdb/common/helper.hpp index e1f86c3d368f..f0aa28288f2c 100644 --- a/src/include/duckdb/common/helper.hpp +++ b/src/include/duckdb/common/helper.hpp @@ -220,4 +220,11 @@ bool RefersToSameObject(const T &A, const T &B) { return &A == &B; } +template +void DynamicCastCheck(SRC *source) { +#ifndef __APPLE__ + D_ASSERT(dynamic_cast(source)); +#endif +} + } // namespace duckdb diff --git a/src/include/duckdb/common/limits.hpp b/src/include/duckdb/common/limits.hpp index 9b89492a0f29..9cd4e7a58c00 100644 --- a/src/include/duckdb/common/limits.hpp +++ b/src/include/duckdb/common/limits.hpp @@ -29,7 +29,7 @@ struct NumericLimits { static constexpr T Maximum() { return std::numeric_limits::max(); } - DUCKDB_API static constexpr bool IsSigned() { + static constexpr bool IsSigned() { return std::is_signed::value; } DUCKDB_API static constexpr idx_t Digits() { diff --git a/src/include/duckdb/common/numeric_utils.hpp b/src/include/duckdb/common/numeric_utils.hpp index 4ffcddc252c2..5b111c896fee 100644 --- a/src/include/duckdb/common/numeric_utils.hpp +++ b/src/include/duckdb/common/numeric_utils.hpp @@ -9,7 +9,9 @@ #pragma once #include + #include "duckdb/common/hugeint.hpp" +#include "duckdb/common/limits.hpp" namespace duckdb { @@ -58,4 +60,66 @@ struct IsIntegral { static constexpr bool value = true; }; +template +static void ThrowNumericCastError(FROM in, TO minval, TO maxval) { + throw InternalException("Information loss on integer cast: value %d outside of target range [%d, %d]", in, minval, + maxval); +} + +template +TO NumericCast(FROM val) { + // some dance around signed-unsigned integer comparison below + auto minval = NumericLimits::Minimum(); + auto maxval = NumericLimits::Maximum(); + auto unsigned_in = static_cast::type>(val); + auto unsigned_min = static_cast::type>(minval); + auto unsigned_max = static_cast::type>(maxval); + auto signed_in = static_cast::type>(val); + auto signed_min = static_cast::type>(minval); + auto signed_max = static_cast::type>(maxval); + + if (std::is_unsigned() && std::is_unsigned() && + (unsigned_in < unsigned_min || unsigned_in > unsigned_max)) { + ThrowNumericCastError(val, minval, maxval); + } + + if (std::is_signed() && std::is_signed() && (signed_in < signed_min || signed_in > signed_max)) { + ThrowNumericCastError(val, minval, maxval); + } + + if (std::is_signed() != std::is_signed() && (signed_in < signed_min || unsigned_in > unsigned_max)) { + ThrowNumericCastError(val, minval, maxval); + } + + return static_cast(val); +} + +template +TO NumericCast(double val) { + return static_cast(val); +} + +template +TO NumericCast(float val) { + return static_cast(val); +} + +template +TO UnsafeNumericCast(FROM in) { +#ifdef DEBUG + return NumericCast(in); +#endif + return static_cast(in); +} + +template +TO UnsafeNumericCast(double val) { + return NumericCast(val); +} + +template +TO UnsafeNumericCast(float val) { + return NumericCast(val); +} + } // namespace duckdb diff --git a/src/include/duckdb/common/operator/cast_operators.hpp b/src/include/duckdb/common/operator/cast_operators.hpp index 0f9ae453b1b0..0555c83e8292 100644 --- a/src/include/duckdb/common/operator/cast_operators.hpp +++ b/src/include/duckdb/common/operator/cast_operators.hpp @@ -21,8 +21,10 @@ #include "duckdb/common/types/bit.hpp" #include "duckdb/common/types/vector.hpp" #include "duckdb/common/exception/conversion_exception.hpp" +#include "duckdb/function/cast/default_casts.hpp" namespace duckdb { +struct CastParameters; struct ValidityMask; class Vector; @@ -35,15 +37,17 @@ struct TryCast { struct TryCastErrorMessage { template - static inline bool Operation(SRC input, DST &result, string *error_message, bool strict = false) { - throw NotImplementedException("Unimplemented type for cast (%s -> %s)", GetTypeId(), GetTypeId()); + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters) { + throw NotImplementedException(parameters.query_location, "Unimplemented type for cast (%s -> %s)", + GetTypeId(), GetTypeId()); } }; struct TryCastErrorMessageCommaSeparated { template - static inline bool Operation(SRC input, DST &result, string *error_message, bool strict = false) { - throw NotImplementedException("Unimplemented type for cast (%s -> %s)", GetTypeId(), GetTypeId()); + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters) { + throw NotImplementedException(parameters.query_location, "Unimplemented type for cast (%s -> %s)", + GetTypeId(), GetTypeId()); } }; @@ -74,9 +78,11 @@ struct Cast { }; struct HandleCastError { - static void AssignError(const string &error_message, string *error_message_ptr) { + static void AssignError(const string &error_message, CastParameters ¶meters); + static void AssignError(const string &error_message, string *error_message_ptr, + optional_idx error_location = optional_idx()) { if (!error_message_ptr) { - throw ConversionException(error_message); + throw ConversionException(error_location, error_message); } if (error_message_ptr->empty()) { *error_message_ptr = error_message; @@ -504,15 +510,14 @@ DUCKDB_API bool TryCast::Operation(string_t input, float &result, bool strict); template <> DUCKDB_API bool TryCast::Operation(string_t input, double &result, bool strict); template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, float &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, float &result, CastParameters ¶meters); template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, double &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, double &result, CastParameters ¶meters); template <> -DUCKDB_API bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, string *error_message, - bool strict); +DUCKDB_API bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, CastParameters ¶meters); template <> -DUCKDB_API bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, string *error_message, - bool strict); +DUCKDB_API bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, + CastParameters ¶meters); //===--------------------------------------------------------------------===// // Date Casts @@ -560,7 +565,7 @@ DUCKDB_API bool TryCast::Operation(interval_t input, interval_t &result, bool st // String -> Date Casts //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, date_t &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, date_t &result, CastParameters ¶meters); template <> DUCKDB_API bool TryCast::Operation(string_t input, date_t &result, bool strict); template <> @@ -569,7 +574,7 @@ date_t Cast::Operation(string_t input); // String -> Time Casts //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, CastParameters ¶meters); template <> DUCKDB_API bool TryCast::Operation(string_t input, dtime_t &result, bool strict); template <> @@ -578,7 +583,7 @@ dtime_t Cast::Operation(string_t input); // String -> TimeTZ Casts //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, CastParameters ¶meters); template <> DUCKDB_API bool TryCast::Operation(string_t input, dtime_tz_t &result, bool strict); template <> @@ -587,7 +592,7 @@ dtime_tz_t Cast::Operation(string_t input); // String -> Timestamp Casts //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, CastParameters ¶meters); template <> DUCKDB_API bool TryCast::Operation(string_t input, timestamp_t &result, bool strict); template <> @@ -596,7 +601,7 @@ timestamp_t Cast::Operation(string_t input); // String -> Interval Casts //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, interval_t &result, string *error_message, bool strict); +DUCKDB_API bool TryCastErrorMessage::Operation(string_t input, interval_t &result, CastParameters ¶meters); //===--------------------------------------------------------------------===// // string -> Non-Standard Timestamps @@ -823,14 +828,12 @@ string_t CastFromBlobToBit::Operation(string_t input, Vector &result); struct TryCastToBlob { template - static inline bool Operation(SRC input, DST &result, Vector &result_vector, string *error_message, - bool strict = false) { + static inline bool Operation(SRC input, DST &result, Vector &result_vector, CastParameters ¶meters) { throw InternalException("Unsupported type for try cast to blob"); } }; template <> -bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, string *error_message, - bool strict); +bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters); //===--------------------------------------------------------------------===// // Bits @@ -846,24 +849,25 @@ duckdb::string_t CastFromBitToString::Operation(duckdb::string_t input, Vector & struct CastFromBitToNumeric { template - static inline bool Operation(SRC input, DST &result, bool strict = false) { + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters) { D_ASSERT(input.GetSize() > 1); // TODO: Allow conversion if the significant bytes of the bitstring can be cast to the target type // Currently only allows bitstring -> numeric if the full bitstring fits inside the numeric type if (input.GetSize() - 1 > sizeof(DST)) { - throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId()); + throw ConversionException(parameters.query_location, "Bitstring doesn't fit inside of %s", + GetTypeId()); } Bit::BitToNumeric(input, result); return (true); } }; template <> -bool CastFromBitToNumeric::Operation(string_t input, bool &result, bool strict); +bool CastFromBitToNumeric::Operation(string_t input, bool &result, CastParameters ¶meters); template <> -bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, bool strict); +bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, CastParameters ¶meters); template <> -bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, bool strict); +bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, CastParameters ¶meters); struct CastFromBitToBlob { template @@ -875,15 +879,13 @@ struct CastFromBitToBlob { struct TryCastToBit { template - static inline bool Operation(SRC input, DST &result, Vector &result_vector, string *error_message, - bool strict = false) { + static inline bool Operation(SRC input, DST &result, Vector &result_vector, CastParameters ¶meters) { throw InternalException("Unsupported type for try cast to bit"); } }; template <> -bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector, string *error_message, - bool strict); +bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters); //===--------------------------------------------------------------------===// // UUID @@ -899,15 +901,14 @@ duckdb::string_t CastFromUUID::Operation(duckdb::hugeint_t input, Vector &vector struct TryCastToUUID { template - static inline bool Operation(SRC input, DST &result, Vector &result_vector, string *error_message, - bool strict = false) { + static inline bool Operation(SRC input, DST &result, Vector &result_vector, CastParameters ¶meters) { throw InternalException("Unsupported type for try cast to uuid"); } }; template <> DUCKDB_API bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_vector, - string *error_message, bool strict); + CastParameters ¶meters); //===--------------------------------------------------------------------===// // Pointers diff --git a/src/include/duckdb/common/operator/decimal_cast_operators.hpp b/src/include/duckdb/common/operator/decimal_cast_operators.hpp index 847af0a22ad4..f3f70cbbdc14 100644 --- a/src/include/duckdb/common/operator/decimal_cast_operators.hpp +++ b/src/include/duckdb/common/operator/decimal_cast_operators.hpp @@ -17,21 +17,21 @@ namespace duckdb { //===--------------------------------------------------------------------===// struct TryCastToDecimal { template - static inline bool Operation(SRC input, DST &result, string *error_message, uint8_t width, uint8_t scale) { + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { throw NotImplementedException("Unimplemented type for TryCastToDecimal!"); } }; struct TryCastToDecimalCommaSeparated { template - static inline bool Operation(SRC input, DST &result, string *error_message, uint8_t width, uint8_t scale) { + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { throw NotImplementedException("Unimplemented type for TryCastToDecimal!"); } }; struct TryCastFromDecimal { template - static inline bool Operation(SRC input, DST &result, string *error_message, uint8_t width, uint8_t scale) { + static inline bool Operation(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) { throw NotImplementedException("Unimplemented type for TryCastFromDecimal!"); } }; @@ -40,379 +40,405 @@ struct TryCastFromDecimal { // Cast Decimal <-> bool //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(bool input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(bool input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(bool input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(bool input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(bool input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(bool input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(bool input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(bool input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, bool &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, bool &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, bool &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, bool &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(hugeint_t input, bool &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> int8_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, int8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, int8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> int16_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, int16_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> int32_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, int32_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> int64_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, int64_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> hugeint_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> uhugeint_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> uint8_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> uint16_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> uint32_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> uint64_t //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> float //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(float input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(float input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(float input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(float input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(float input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(float input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(float input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(float input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, float &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, float &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, float &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, float &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(hugeint_t input, float &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> double //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(double input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(double input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(double input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(double input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(double input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(double input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(double input, hugeint_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(double input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int16_t input, double &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int16_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int32_t input, double &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int32_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(int64_t input, double &result, string *error_message, uint8_t width, uint8_t scale); +bool TryCastFromDecimal::Operation(int64_t input, double &result, CastParameters ¶meters, uint8_t width, + uint8_t scale); template <> -bool TryCastFromDecimal::Operation(hugeint_t input, double &result, string *error_message, uint8_t width, +bool TryCastFromDecimal::Operation(hugeint_t input, double &result, CastParameters ¶meters, uint8_t width, uint8_t scale); //===--------------------------------------------------------------------===// // Cast Decimal <-> VARCHAR //===--------------------------------------------------------------------===// template <> -DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int16_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int32_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int64_t &result, string *error_message, uint8_t width, +DUCKDB_API bool TryCastToDecimal::Operation(string_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimal::Operation(string_t input, hugeint_t &result, string *error_message, uint8_t width, - uint8_t scale); +DUCKDB_API bool TryCastToDecimal::Operation(string_t input, hugeint_t &result, CastParameters ¶meters, + uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result, string *error_message, +DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result, string *error_message, +DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result, string *error_message, +DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); template <> -DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result, string *error_message, +DUCKDB_API bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale); struct StringCastFromDecimal { diff --git a/src/include/duckdb/common/operator/integer_cast_operator.hpp b/src/include/duckdb/common/operator/integer_cast_operator.hpp index 28a5125f3f14..0fdca6b15b16 100644 --- a/src/include/duckdb/common/operator/integer_cast_operator.hpp +++ b/src/include/duckdb/common/operator/integer_cast_operator.hpp @@ -29,12 +29,12 @@ struct IntegerCastOperation { if (DUCKDB_UNLIKELY(state.result < (NumericLimits::Minimum() + digit) / 10)) { return false; } - state.result = state.result * 10 - digit; + state.result = UnsafeNumericCast(state.result * 10 - digit); } else { if (DUCKDB_UNLIKELY(state.result > (NumericLimits::Maximum() - digit) / 10)) { return false; } - state.result = state.result * 10 + digit; + state.result = UnsafeNumericCast(state.result * 10 + digit); } return true; } @@ -45,7 +45,7 @@ struct IntegerCastOperation { if (DUCKDB_UNLIKELY(state.result > (NumericLimits::Maximum() - digit) / 16)) { return false; } - state.result = state.result * 16 + digit; + state.result = UnsafeNumericCast(state.result * 16 + digit); return true; } @@ -55,7 +55,7 @@ struct IntegerCastOperation { if (DUCKDB_UNLIKELY(state.result > (NumericLimits::Maximum() - digit) / 2)) { return false; } - state.result = state.result * 2 + digit; + state.result = UnsafeNumericCast(state.result * 2 + digit); return true; } @@ -126,7 +126,7 @@ struct IntegerDecimalCastOperation : IntegerCastOperation { } // Handle decimals - e = exponent - state.decimal_digits; + e = UnsafeNumericCast(exponent - state.decimal_digits); store_t remainder = 0; if (e < 0) { if (static_cast(-e) <= NumericLimits::Digits()) { diff --git a/src/include/duckdb/common/radix.hpp b/src/include/duckdb/common/radix.hpp index 021d271860c4..a4d774b9bb6d 100644 --- a/src/include/duckdb/common/radix.hpp +++ b/src/include/duckdb/common/radix.hpp @@ -50,7 +50,7 @@ struct Radix { } static inline uint32_t EncodeFloat(float x) { - uint64_t buff; + uint32_t buff; //! zero if (x == 0) { diff --git a/src/include/duckdb/common/serializer/deserializer.hpp b/src/include/duckdb/common/serializer/deserializer.hpp index e75d6d3ed4a3..000104c43c60 100644 --- a/src/include/duckdb/common/serializer/deserializer.hpp +++ b/src/include/duckdb/common/serializer/deserializer.hpp @@ -15,7 +15,7 @@ #include "duckdb/common/unordered_map.hpp" #include "duckdb/common/unordered_set.hpp" #include "duckdb/common/uhugeint.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" namespace duckdb { diff --git a/src/include/duckdb/common/sort/duckdb_pdqsort.hpp b/src/include/duckdb/common/sort/duckdb_pdqsort.hpp index d779511c21db..78d40b912f9e 100644 --- a/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +++ b/src/include/duckdb/common/sort/duckdb_pdqsort.hpp @@ -401,7 +401,7 @@ inline std::pair partition_right_branchless(const PDQIterator // Fill the offset blocks. if (left_split >= block_size) { - for (size_t i = 0; i < block_size;) { + for (unsigned char i = 0; i < block_size;) { offsets_l[num_l] = i++; num_l += !comp(*first, pivot, constants); ++first; @@ -428,7 +428,7 @@ inline std::pair partition_right_branchless(const PDQIterator ++first; } } else { - for (size_t i = 0; i < left_split;) { + for (unsigned char i = 0; i < left_split;) { offsets_l[num_l] = i++; num_l += !comp(*first, pivot, constants); ++first; @@ -436,7 +436,7 @@ inline std::pair partition_right_branchless(const PDQIterator } if (right_split >= block_size) { - for (size_t i = 0; i < block_size;) { + for (unsigned char i = 0; i < block_size;) { offsets_r[num_r] = ++i; num_r += comp(*--last, pivot, constants); offsets_r[num_r] = ++i; @@ -455,7 +455,7 @@ inline std::pair partition_right_branchless(const PDQIterator num_r += comp(*--last, pivot, constants); } } else { - for (size_t i = 0; i < right_split;) { + for (unsigned char i = 0; i < right_split;) { offsets_r[num_r] = ++i; num_r += comp(*--last, pivot, constants); } diff --git a/src/include/duckdb/common/types.hpp b/src/include/duckdb/common/types.hpp index 04c0e96fa5c7..46bd113693d9 100644 --- a/src/include/duckdb/common/types.hpp +++ b/src/include/duckdb/common/types.hpp @@ -382,7 +382,7 @@ struct LogicalType { static constexpr const LogicalTypeId ROW_TYPE = LogicalTypeId::BIGINT; // explicitly allowing these functions to be capitalized to be in-line with the remaining functions - DUCKDB_API static LogicalType DECIMAL(int width, int scale); // NOLINT + DUCKDB_API static LogicalType DECIMAL(uint8_t width, uint8_t scale); // NOLINT DUCKDB_API static LogicalType VARCHAR_COLLATION(string collation); // NOLINT DUCKDB_API static LogicalType LIST(const LogicalType &child); // NOLINT DUCKDB_API static LogicalType STRUCT(child_list_t children); // NOLINT diff --git a/src/include/duckdb/common/types/bit.hpp b/src/include/duckdb/common/types/bit.hpp index 0eb82a4e7a4d..2dd594dd5524 100644 --- a/src/include/duckdb/common/types/bit.hpp +++ b/src/include/duckdb/common/types/bit.hpp @@ -113,7 +113,7 @@ template string Bit::NumericToBit(T numeric) { auto bit_len = sizeof(T) + 1; auto buffer = make_unsafe_uniq_array(bit_len); - string_t output_str(buffer.get(), bit_len); + string_t output_str(buffer.get(), UnsafeNumericCast(bit_len)); Bit::NumericToBit(numeric, output_str); return output_str.GetString(); } diff --git a/src/include/duckdb/common/types/blob.hpp b/src/include/duckdb/common/types/blob.hpp index 26f2faccfc62..816224befb32 100644 --- a/src/include/duckdb/common/types/blob.hpp +++ b/src/include/duckdb/common/types/blob.hpp @@ -12,6 +12,7 @@ #include "duckdb/common/types.hpp" namespace duckdb { +struct CastParameters; //! The Blob class is a static class that holds helper functions for the Blob type. class Blob { @@ -35,13 +36,15 @@ class Blob { DUCKDB_API static string ToString(string_t blob); //! Returns the blob size of a string -> blob conversion - DUCKDB_API static bool TryGetBlobSize(string_t str, idx_t &result_size, string *error_message); + DUCKDB_API static bool TryGetBlobSize(string_t str, idx_t &result_size, CastParameters ¶meters); DUCKDB_API static idx_t GetBlobSize(string_t str); + DUCKDB_API static idx_t GetBlobSize(string_t str, CastParameters ¶meters); //! Convert a string to a blob. This function should ONLY be called after calling GetBlobSize, since it does NOT //! perform data validation. DUCKDB_API static void ToBlob(string_t str, data_ptr_t output); //! Convert a string object to a blob DUCKDB_API static string ToBlob(string_t str); + DUCKDB_API static string ToBlob(string_t str, CastParameters ¶meters); // base 64 conversion functions //! Returns the string size of a blob -> base64 conversion diff --git a/src/include/duckdb/common/types/cast_helpers.hpp b/src/include/duckdb/common/types/cast_helpers.hpp index 5d335ae1928f..cac8803f3cb4 100644 --- a/src/include/duckdb/common/types/cast_helpers.hpp +++ b/src/include/duckdb/common/types/cast_helpers.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb/common/common.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/types/string_type.hpp" #include "duckdb/common/types/decimal.hpp" #include "duckdb/common/types/interval.hpp" @@ -32,7 +33,7 @@ class NumericHelper { template static int SignedLength(SIGNED value) { int sign = -(value < 0); - UNSIGNED unsigned_value = (value ^ sign) - sign; + UNSIGNED unsigned_value = UnsafeNumericCast((value ^ sign) - sign); return UnsignedLength(unsigned_value) - sign; } @@ -43,16 +44,16 @@ class NumericHelper { // Integer division is slow so do it for a group of two digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". - auto index = static_cast((value % 100) * 2); + auto index = NumericCast((value % 100) * 2); value /= 100; *--ptr = duckdb_fmt::internal::data::digits[index + 1]; *--ptr = duckdb_fmt::internal::data::digits[index]; } if (value < 10) { - *--ptr = static_cast('0' + value); + *--ptr = NumericCast('0' + value); return ptr; } - auto index = static_cast(value * 2); + auto index = NumericCast(value * 2); *--ptr = duckdb_fmt::internal::data::digits[index + 1]; *--ptr = duckdb_fmt::internal::data::digits[index]; return ptr; @@ -61,7 +62,7 @@ class NumericHelper { template static string_t FormatSigned(SIGNED value, Vector &vector) { int sign = -(value < 0); - UNSIGNED unsigned_value = UNSIGNED(value ^ sign) - sign; + UNSIGNED unsigned_value = UnsafeNumericCast(UNSIGNED(value ^ sign) - sign); int length = UnsignedLength(unsigned_value) - sign; string_t result = StringVector::EmptyString(vector, length); auto dataptr = result.GetDataWriteable(); @@ -239,7 +240,7 @@ struct HugeintToStringCast { // the remainder is small (i.e. less than 10000000000000000) ptr = NumericHelper::FormatUnsigned(remainder, ptr); - int format_length = startptr - ptr; + int format_length = UnsafeNumericCast(startptr - ptr); // pad with zero for (int i = format_length; i < 17; i++) { *--ptr = '0'; @@ -399,9 +400,9 @@ struct DateToStringCast { ptr[0] = '-'; if (date[i] < 10) { ptr[1] = '0'; - ptr[2] = '0' + date[i]; + ptr[2] = '0' + UnsafeNumericCast(date[i]); } else { - auto index = static_cast(date[i] * 2); + auto index = UnsafeNumericCast(date[i] * 2); ptr[1] = duckdb_fmt::internal::data::digits[index]; ptr[2] = duckdb_fmt::internal::data::digits[index + 1]; } @@ -429,7 +430,7 @@ struct TimeToStringCast { } trailing_zeros++; } - return trailing_zeros; + return UnsafeNumericCast(trailing_zeros); } static idx_t Length(int32_t time[], char micro_buffer[]) { @@ -456,9 +457,9 @@ struct TimeToStringCast { D_ASSERT(value >= 0 && value <= 99); if (value < 10) { ptr[0] = '0'; - ptr[1] = '0' + value; + ptr[1] = '0' + UnsafeNumericCast(value); } else { - auto index = static_cast(value * 2); + auto index = UnsafeNumericCast(value * 2); ptr[0] = duckdb_fmt::internal::data::digits[index]; ptr[1] = duckdb_fmt::internal::data::digits[index + 1]; } @@ -494,7 +495,7 @@ struct IntervalToStringCast { } static void FormatTwoDigits(int64_t value, char buffer[], idx_t &length) { - TimeToStringCast::FormatTwoDigits(buffer + length, value); + TimeToStringCast::FormatTwoDigits(buffer + length, UnsafeNumericCast(value)); length += 2; } @@ -566,7 +567,8 @@ struct IntervalToStringCast { FormatTwoDigits(sec, buffer, length); if (micros != 0) { buffer[length++] = '.'; - auto trailing_zeros = TimeToStringCast::FormatMicros(micros, buffer + length); + auto trailing_zeros = + TimeToStringCast::FormatMicros(UnsafeNumericCast(micros), buffer + length); length += 6 - trailing_zeros; } } else if (length == 0) { diff --git a/src/include/duckdb/common/types/column/column_data_allocator.hpp b/src/include/duckdb/common/types/column/column_data_allocator.hpp index 2b04390a42d3..01d2fc13e4e3 100644 --- a/src/include/duckdb/common/types/column/column_data_allocator.hpp +++ b/src/include/duckdb/common/types/column/column_data_allocator.hpp @@ -56,6 +56,9 @@ class ColumnDataAllocator { } return total_size; } + idx_t AllocationSize() const { + return allocated_size; + } public: void AllocateData(idx_t size, uint32_t &block_id, uint32_t &offset, ChunkManagementState *chunk_state); @@ -99,6 +102,8 @@ class ColumnDataAllocator { bool shared = false; //! Lock used in case this ColumnDataAllocator is shared across threads mutex lock; + //! Total allocated size + idx_t allocated_size = 0; }; } // namespace duckdb diff --git a/src/include/duckdb/common/types/column/column_data_collection.hpp b/src/include/duckdb/common/types/column/column_data_collection.hpp index 0fcd5f4a7358..5e427ca6d0d4 100644 --- a/src/include/duckdb/common/types/column/column_data_collection.hpp +++ b/src/include/duckdb/common/types/column/column_data_collection.hpp @@ -63,6 +63,8 @@ class ColumnDataCollection { //! The size (in bytes) of this ColumnDataCollection idx_t SizeInBytes() const; + //! The allocation size (in bytes) of this ColumnDataCollection - this property is cached + idx_t AllocationSize() const; //! Get the allocator DUCKDB_API Allocator &GetAllocator() const; diff --git a/src/include/duckdb/common/types/column/column_data_collection_segment.hpp b/src/include/duckdb/common/types/column/column_data_collection_segment.hpp index 5f69e2118855..33dba6ad9fef 100644 --- a/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +++ b/src/include/duckdb/common/types/column/column_data_collection_segment.hpp @@ -126,7 +126,10 @@ class ColumnDataCollectionSegment { } idx_t ChunkCount() const; + //! Get the total *used* size (not cached) idx_t SizeInBytes() const; + //! Get the currently allocated size in bytes (cached) + idx_t AllocationSize() const; void FetchChunk(idx_t chunk_idx, DataChunk &result); void FetchChunk(idx_t chunk_idx, DataChunk &result, const vector &column_ids); diff --git a/src/include/duckdb/common/types/column/partitioned_column_data.hpp b/src/include/duckdb/common/types/column/partitioned_column_data.hpp index 3defecb01fe8..70caddbae666 100644 --- a/src/include/duckdb/common/types/column/partitioned_column_data.hpp +++ b/src/include/duckdb/common/types/column/partitioned_column_data.hpp @@ -112,7 +112,7 @@ class PartitionedColumnData { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp b/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp index de8f77c94d83..3a4c7f56179b 100644 --- a/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +++ b/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp @@ -176,7 +176,7 @@ class PartitionedTupleData { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/common/types/selection_vector.hpp b/src/include/duckdb/common/types/selection_vector.hpp index ec403fa20659..976a72f40a74 100644 --- a/src/include/duckdb/common/types/selection_vector.hpp +++ b/src/include/duckdb/common/types/selection_vector.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb/common/common.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/types.hpp" #include "duckdb/common/vector_size.hpp" @@ -83,7 +84,7 @@ struct SelectionVector { } inline void set_index(idx_t idx, idx_t loc) { - sel_vector[idx] = loc; + sel_vector[idx] = UnsafeNumericCast(loc); } inline void swap(idx_t i, idx_t j) { sel_t tmp = sel_vector[i]; diff --git a/src/include/duckdb/common/types/string_heap.hpp b/src/include/duckdb/common/types/string_heap.hpp index 59dbb3f0cd43..788a62483eef 100644 --- a/src/include/duckdb/common/types/string_heap.hpp +++ b/src/include/duckdb/common/types/string_heap.hpp @@ -40,6 +40,8 @@ class StringHeap { //! Size of strings DUCKDB_API idx_t SizeInBytes() const; + //! Total allocation size (cached) + DUCKDB_API idx_t AllocationSize() const; private: ArenaAllocator allocator; diff --git a/src/include/duckdb/common/types/string_type.hpp b/src/include/duckdb/common/types/string_type.hpp index d6ab2c4bd7bf..7bdda5ae5360 100644 --- a/src/include/duckdb/common/types/string_type.hpp +++ b/src/include/duckdb/common/types/string_type.hpp @@ -11,6 +11,7 @@ #include "duckdb/common/assert.hpp" #include "duckdb/common/constants.hpp" #include "duckdb/common/helper.hpp" +#include "duckdb/common/numeric_utils.hpp" #include @@ -58,10 +59,14 @@ struct string_t { value.pointer.ptr = (char *)data; // NOLINT } } - string_t(const char *data) : string_t(data, strlen(data)) { // NOLINT: Allow implicit conversion from `const char*` + + string_t(const char *data) + : string_t(data, + UnsafeNumericCast(strlen(data))) { // NOLINT: Allow implicit conversion from `const char*` } string_t(const string &value) - : string_t(value.c_str(), value.size()) { // NOLINT: Allow implicit conversion from `const char*` + : string_t(value.c_str(), + UnsafeNumericCast(value.size())) { // NOLINT: Allow implicit conversion from `const char*` } bool IsInlined() const { @@ -165,8 +170,8 @@ struct string_t { } // compare up to shared length. if still the same, compare lengths static bool GreaterThan(const string_t &left, const string_t &right) { - const uint32_t left_length = left.GetSize(); - const uint32_t right_length = right.GetSize(); + const uint32_t left_length = UnsafeNumericCast(left.GetSize()); + const uint32_t right_length = UnsafeNumericCast(right.GetSize()); const uint32_t min_length = std::min(left_length, right_length); #ifndef DUCKDB_DEBUG_NO_INLINE diff --git a/src/include/duckdb/common/types/time.hpp b/src/include/duckdb/common/types/time.hpp index e8cee119a220..20b76060b841 100644 --- a/src/include/duckdb/common/types/time.hpp +++ b/src/include/duckdb/common/types/time.hpp @@ -26,7 +26,7 @@ class Time { DUCKDB_API static dtime_t FromCString(const char *buf, idx_t len, bool strict = false); DUCKDB_API static bool TryConvertTime(const char *buf, idx_t len, idx_t &pos, dtime_t &result, bool strict = false); DUCKDB_API static bool TryConvertTimeTZ(const char *buf, idx_t len, idx_t &pos, dtime_tz_t &result, - bool strict = false); + bool &has_offset, bool strict = false); // No hour limit DUCKDB_API static bool TryConvertInterval(const char *buf, idx_t len, idx_t &pos, dtime_t &result, bool strict = false); diff --git a/src/include/duckdb/common/types/timestamp.hpp b/src/include/duckdb/common/types/timestamp.hpp index 0d0851fa3a93..cf7dce95bdfc 100644 --- a/src/include/duckdb/common/types/timestamp.hpp +++ b/src/include/duckdb/common/types/timestamp.hpp @@ -137,14 +137,19 @@ class Timestamp { DUCKDB_API static timestamp_t GetCurrentTimestamp(); //! Convert the epoch (in sec) to a timestamp - DUCKDB_API static timestamp_t FromEpochSeconds(int64_t ms); + DUCKDB_API static timestamp_t FromEpochSecondsPossiblyInfinite(int64_t s); + DUCKDB_API static timestamp_t FromEpochSeconds(int64_t s); //! Convert the epoch (in ms) to a timestamp + DUCKDB_API static timestamp_t FromEpochMsPossiblyInfinite(int64_t ms); DUCKDB_API static timestamp_t FromEpochMs(int64_t ms); //! Convert the epoch (in microseconds) to a timestamp DUCKDB_API static timestamp_t FromEpochMicroSeconds(int64_t micros); //! Convert the epoch (in nanoseconds) to a timestamp - DUCKDB_API static timestamp_t FromEpochNanoSeconds(int64_t micros); + DUCKDB_API static timestamp_t FromEpochNanoSecondsPossiblyInfinite(int64_t nanos); + DUCKDB_API static timestamp_t FromEpochNanoSeconds(int64_t nanos); + //! Try convert a timestamp to epoch (in nanoseconds) + DUCKDB_API static bool TryGetEpochNanoSeconds(timestamp_t timestamp, int64_t &result); //! Convert the epoch (in seconds) to a timestamp DUCKDB_API static int64_t GetEpochSeconds(timestamp_t timestamp); //! Convert the epoch (in ms) to a timestamp diff --git a/src/include/duckdb/common/types/uuid.hpp b/src/include/duckdb/common/types/uuid.hpp index 36a70d73fd73..30cdc878ad77 100644 --- a/src/include/duckdb/common/types/uuid.hpp +++ b/src/include/duckdb/common/types/uuid.hpp @@ -28,6 +28,9 @@ class UUID { //! Convert a hugeint object to a uuid style string static void ToString(hugeint_t input, char *buf); + //! Convert a uhugeint_t object to a uuid value + static hugeint_t FromUHugeint(uhugeint_t input); + //! Convert a hugeint object to a uuid style string static hugeint_t GenerateRandomUUID(RandomEngine &engine); static hugeint_t GenerateRandomUUID(); diff --git a/src/include/duckdb/common/types/vector.hpp b/src/include/duckdb/common/types/vector.hpp index 51644515761f..0130f2ffaaa4 100644 --- a/src/include/duckdb/common/types/vector.hpp +++ b/src/include/duckdb/common/types/vector.hpp @@ -437,7 +437,15 @@ struct FSSTVector { DUCKDB_API static idx_t GetCount(Vector &vector); }; -enum class MapInvalidReason : uint8_t { VALID, NULL_KEY_LIST, NULL_KEY, DUPLICATE_KEY }; +enum class MapInvalidReason : uint8_t { + VALID, + NULL_KEY_LIST, + NULL_KEY, + DUPLICATE_KEY, + NULL_VALUE_LIST, + NOT_ALIGNED, + INVALID_PARAMS +}; struct MapVector { DUCKDB_API static const Vector &GetKeys(const Vector &vector); @@ -446,6 +454,7 @@ struct MapVector { DUCKDB_API static Vector &GetValues(Vector &vector); DUCKDB_API static MapInvalidReason CheckMapValidity(Vector &map, idx_t count, const SelectionVector &sel = *FlatVector::IncrementalSelectionVector()); + DUCKDB_API static void EvalMapInvalidReason(MapInvalidReason reason); DUCKDB_API static void MapConversionVerify(Vector &vector, idx_t count); }; diff --git a/src/include/duckdb/common/types/vector_buffer.hpp b/src/include/duckdb/common/types/vector_buffer.hpp index 3459b7c52572..e1d49aacb629 100644 --- a/src/include/duckdb/common/types/vector_buffer.hpp +++ b/src/include/duckdb/common/types/vector_buffer.hpp @@ -126,7 +126,7 @@ class VectorBuffer { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/common/vector_operations/general_cast.hpp b/src/include/duckdb/common/vector_operations/general_cast.hpp index 9ddfe4fcb605..9dbde834d793 100644 --- a/src/include/duckdb/common/vector_operations/general_cast.hpp +++ b/src/include/duckdb/common/vector_operations/general_cast.hpp @@ -13,12 +13,20 @@ namespace duckdb { +struct VectorTryCastData { + VectorTryCastData(Vector &result_p, CastParameters ¶meters) : result(result_p), parameters(parameters) { + } + + Vector &result; + CastParameters ¶meters; + bool all_converted = true; +}; + struct HandleVectorCastError { template - static RESULT_TYPE Operation(string error_message, ValidityMask &mask, idx_t idx, string *error_message_ptr, - bool &all_converted) { - HandleCastError::AssignError(error_message, error_message_ptr); - all_converted = false; + static RESULT_TYPE Operation(string error_message, ValidityMask &mask, idx_t idx, VectorTryCastData &cast_data) { + HandleCastError::AssignError(error_message, cast_data.parameters); + cast_data.all_converted = false; mask.SetInvalid(idx); return NullValue(); } diff --git a/src/include/duckdb/common/vector_operations/vector_operations.hpp b/src/include/duckdb/common/vector_operations/vector_operations.hpp index f4966df48181..cd0ffbe099a8 100644 --- a/src/include/duckdb/common/vector_operations/vector_operations.hpp +++ b/src/include/duckdb/common/vector_operations/vector_operations.hpp @@ -158,11 +158,12 @@ struct VectorOperations { //! NULLs. If any elements cannot be converted, returns false and fills in the error_message. If no error message is //! provided, an exception is thrown instead. DUCKDB_API static bool TryCast(CastFunctionSet &set, GetCastFunctionInput &input, Vector &source, Vector &result, - idx_t count, string *error_message, bool strict = false); + idx_t count, string *error_message, bool strict = false, + const bool nullify_parent = false); DUCKDB_API static bool DefaultTryCast(Vector &source, Vector &result, idx_t count, string *error_message, bool strict = false); DUCKDB_API static bool TryCast(ClientContext &context, Vector &source, Vector &result, idx_t count, - string *error_message, bool strict = false); + string *error_message, bool strict = false, const bool nullify_parent = false); //! Cast the data from the source type to the target type. Throws an exception if the cast fails. DUCKDB_API static void Cast(ClientContext &context, Vector &source, Vector &result, idx_t count, bool strict = false); diff --git a/src/include/duckdb/common/windows_undefs.hpp b/src/include/duckdb/common/windows_undefs.hpp index 7b4866d84eb4..680c2a43c695 100644 --- a/src/include/duckdb/common/windows_undefs.hpp +++ b/src/include/duckdb/common/windows_undefs.hpp @@ -38,4 +38,8 @@ #undef RemoveDirectory #endif +#ifdef UUID +#undef UUID +#endif + #endif diff --git a/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp b/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp index 926cc393746d..2b13a2abf9fb 100644 --- a/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +++ b/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp @@ -28,7 +28,7 @@ struct RegrCountFunction { template static void Finalize(STATE &state, T &target, AggregateFinalizeData &finalize_data) { - target = state; + target = static_cast(state); } static bool IgnoreNull() { return true; diff --git a/src/include/duckdb/core_functions/scalar/list_functions.hpp b/src/include/duckdb/core_functions/scalar/list_functions.hpp index f37bce788f93..9848f618ced2 100644 --- a/src/include/duckdb/core_functions/scalar/list_functions.hpp +++ b/src/include/duckdb/core_functions/scalar/list_functions.hpp @@ -312,4 +312,13 @@ struct ListInnerProductFunAlias { static constexpr const char *Name = "<#>"; }; +struct UnpivotListFun { + static constexpr const char *Name = "unpivot_list"; + static constexpr const char *Parameters = "any,..."; + static constexpr const char *Description = "Identical to list_value, but generated as part of unpivot for better error messages"; + static constexpr const char *Example = "unpivot_list(4, 5, 6)"; + + static ScalarFunction GetFunction(); +}; + } // namespace duckdb diff --git a/src/include/duckdb/execution/column_binding_resolver.hpp b/src/include/duckdb/execution/column_binding_resolver.hpp index fa9fd3f9c68e..1c47a677c5bb 100644 --- a/src/include/duckdb/execution/column_binding_resolver.hpp +++ b/src/include/duckdb/execution/column_binding_resolver.hpp @@ -19,13 +19,14 @@ namespace duckdb { //! are used within the execution engine class ColumnBindingResolver : public LogicalOperatorVisitor { public: - ColumnBindingResolver(); + ColumnBindingResolver(bool verify_only = false); void VisitOperator(LogicalOperator &op) override; static void Verify(LogicalOperator &op); protected: vector bindings; + bool verify_only; unique_ptr VisitReplace(BoundColumnRefExpression &expr, unique_ptr *expr_ptr) override; static unordered_set VerifyInternal(LogicalOperator &op); diff --git a/src/include/duckdb/execution/executor.hpp b/src/include/duckdb/execution/executor.hpp index 03cf4843d70e..05a40cb9d7e4 100644 --- a/src/include/duckdb/execution/executor.hpp +++ b/src/include/duckdb/execution/executor.hpp @@ -99,6 +99,13 @@ class Executor { //! Returns true if all pipelines have been completed bool ExecutionIsFinished(); + void RegisterTask() { + executor_tasks++; + } + void UnregisterTask() { + executor_tasks--; + } + private: bool ResultCollectorIsBlocked(); void InitializeInternal(PhysicalOperator &physical_plan); @@ -157,5 +164,8 @@ class Executor { //! Task that have been descheduled unordered_map> to_be_rescheduled_tasks; + + //! Currently alive executor tasks + atomic executor_tasks; }; } // namespace duckdb diff --git a/src/include/duckdb/execution/expression_executor_state.hpp b/src/include/duckdb/execution/expression_executor_state.hpp index a03b791826f8..4edecb66c474 100644 --- a/src/include/duckdb/execution/expression_executor_state.hpp +++ b/src/include/duckdb/execution/expression_executor_state.hpp @@ -43,7 +43,7 @@ struct ExpressionState { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp b/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp similarity index 77% rename from src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp rename to src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp index d103a9a7d52b..c8a2f886fa9f 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp @@ -1,17 +1,18 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +// duckdb/execution/operator/csv_scanner/base_scanner.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_error.hpp" +#include "duckdb/common/helper.hpp" namespace duckdb { @@ -46,8 +47,8 @@ class ScannerResult { class BaseScanner { public: explicit BaseScanner(shared_ptr buffer_manager, shared_ptr state_machine, - shared_ptr error_handler, shared_ptr csv_file_scan = nullptr, - CSVIterator iterator = {}); + shared_ptr error_handler, bool sniffing = false, + shared_ptr csv_file_scan = nullptr, CSVIterator iterator = {}); virtual ~BaseScanner() = default; //! Returns true if the scanner is finished @@ -89,13 +90,15 @@ class BaseScanner { //! States CSVStates states; + bool ever_quoted = false; + protected: //! Boundaries of this scanner CSVIterator iterator; //! Unique pointer to the buffer_handle, this is unique per scanner, since it also contains the necessary counters //! To offload buffers to disk if necessary - unique_ptr cur_buffer_handle; + shared_ptr cur_buffer_handle; //! Hold the current buffer ptr char *buffer_handle_ptr = nullptr; @@ -112,6 +115,10 @@ class BaseScanner { //! Initializes the scanner virtual void Initialize(); + inline bool ContainsZeroByte(uint64_t v) { + return (v - UINT64_C(0x0101010101010101)) & ~(v)&UINT64_C(0x8080808080808080); + } + //! Process one chunk template void Process(T &result) { @@ -135,67 +142,94 @@ class BaseScanner { return; case CSVState::RECORD_SEPARATOR: if (states.states[0] == CSVState::RECORD_SEPARATOR || states.states[0] == CSVState::NOT_SET) { - lines_read++; if (T::EmptyLine(result, iterator.pos.buffer_pos)) { iterator.pos.buffer_pos++; bytes_read = iterator.pos.buffer_pos - start_pos; + lines_read++; return; } - } else if (states.states[0] != CSVState::CARRIAGE_RETURN) { lines_read++; + + } else if (states.states[0] != CSVState::CARRIAGE_RETURN) { if (T::AddRow(result, iterator.pos.buffer_pos)) { iterator.pos.buffer_pos++; bytes_read = iterator.pos.buffer_pos - start_pos; + lines_read++; return; } + lines_read++; } iterator.pos.buffer_pos++; break; case CSVState::CARRIAGE_RETURN: - lines_read++; if (states.states[0] == CSVState::RECORD_SEPARATOR || states.states[0] == CSVState::NOT_SET) { if (T::EmptyLine(result, iterator.pos.buffer_pos)) { iterator.pos.buffer_pos++; bytes_read = iterator.pos.buffer_pos - start_pos; + lines_read++; return; } } else if (states.states[0] != CSVState::CARRIAGE_RETURN) { if (T::AddRow(result, iterator.pos.buffer_pos)) { iterator.pos.buffer_pos++; bytes_read = iterator.pos.buffer_pos - start_pos; + lines_read++; return; } } iterator.pos.buffer_pos++; + lines_read++; break; case CSVState::DELIMITER: T::AddValue(result, iterator.pos.buffer_pos); iterator.pos.buffer_pos++; break; - case CSVState::QUOTED: + case CSVState::QUOTED: { if (states.states[0] == CSVState::UNQUOTED) { T::SetEscaped(result); } + ever_quoted = true; T::SetQuoted(result, iterator.pos.buffer_pos); iterator.pos.buffer_pos++; + while (iterator.pos.buffer_pos + 8 < to_pos) { + uint64_t value = + Load(reinterpret_cast(&buffer_handle_ptr[iterator.pos.buffer_pos])); + if (ContainsZeroByte((value ^ state_machine->transition_array.quote) & + (value ^ state_machine->transition_array.escape))) { + break; + } + iterator.pos.buffer_pos += 8; + } + while (state_machine->transition_array .skip_quoted[static_cast(buffer_handle_ptr[iterator.pos.buffer_pos])] && iterator.pos.buffer_pos < to_pos - 1) { iterator.pos.buffer_pos++; } - break; + } break; case CSVState::ESCAPE: T::SetEscaped(result); iterator.pos.buffer_pos++; break; - case CSVState::STANDARD: + case CSVState::STANDARD: { iterator.pos.buffer_pos++; + while (iterator.pos.buffer_pos + 8 < to_pos) { + uint64_t value = + Load(reinterpret_cast(&buffer_handle_ptr[iterator.pos.buffer_pos])); + if (ContainsZeroByte((value ^ state_machine->transition_array.delimiter) & + (value ^ state_machine->transition_array.new_line) & + (value ^ state_machine->transition_array.carriage_return))) { + break; + } + iterator.pos.buffer_pos += 8; + } while (state_machine->transition_array .skip_standard[static_cast(buffer_handle_ptr[iterator.pos.buffer_pos])] && iterator.pos.buffer_pos < to_pos - 1) { iterator.pos.buffer_pos++; } break; + } case CSVState::QUOTED_NEW_LINE: T::QuotedNewLine(result); iterator.pos.buffer_pos++; diff --git a/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp b/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp similarity index 79% rename from src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp rename to src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp index 87cd04058c73..c641541df90b 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp @@ -1,18 +1,18 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +// duckdb/execution/operator/csv_scanner/column_count_scanner.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/base_scanner.hpp" namespace duckdb { diff --git a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp similarity index 94% rename from src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp index 0c29b2709cc7..72665ae2de54 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +// duckdb/execution/operator/csv_scanner/csv_buffer.hpp // // //===----------------------------------------------------------------------===// @@ -9,7 +9,7 @@ #pragma once #include "duckdb/common/constants.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" #include "duckdb/storage/buffer_manager.hpp" #include "duckdb/storage/block_manager.hpp" #include "duckdb/storage/buffer/block_handle.hpp" @@ -65,7 +65,7 @@ class CSVBuffer { void Reload(CSVFileHandle &file_handle); //! Wrapper for the Pin Function, if it can seek, it means that the buffer might have been destroyed, hence we must //! Scan it from the disk file again. - unique_ptr Pin(CSVFileHandle &file_handle, bool &has_seeked); + shared_ptr Pin(CSVFileHandle &file_handle, bool &has_seeked); //! Wrapper for the unpin void Unpin(); char *Ptr() { diff --git a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp similarity index 89% rename from src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp index ff3d35f728d9..b9b4bb92d372 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +// duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp // // //===----------------------------------------------------------------------===// @@ -9,8 +9,8 @@ #pragma once #include "duckdb/main/client_context.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" namespace duckdb { class CSVBuffer; @@ -25,7 +25,7 @@ class CSVBufferManager { const idx_t file_idx); //! Returns a buffer from a buffer id (starting from 0). If it's in the auto-detection then we cache new buffers //! Otherwise we remove them from the cache if they are already there, or just return them bypassing the cache. - unique_ptr GetBuffer(const idx_t buffer_idx); + shared_ptr GetBuffer(const idx_t buffer_idx); void ResetBuffer(const idx_t buffer_idx); //! unique_ptr to the file handle, gets stolen after sniffing diff --git a/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_casting.hpp similarity index 79% rename from src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_casting.hpp index 7a21264d09c8..5a2937b67156 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_casting.hpp @@ -1,14 +1,14 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +// duckdb/execution/operator/csv_scanner/csv_casting.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/common/vector_operations/unary_executor.hpp" #include "duckdb/common/operator/cast_operators.hpp" #include "duckdb/common/operator/decimal_cast_operators.hpp" @@ -17,14 +17,14 @@ namespace duckdb { class CSVCast { template static bool TemplatedTryCastFloatingVector(const CSVReaderOptions &options, Vector &input_vector, - Vector &result_vector, idx_t count, string &error_message, + Vector &result_vector, idx_t count, CastParameters ¶meters, idx_t &line_error) { D_ASSERT(input_vector.GetType().id() == LogicalTypeId::VARCHAR); bool all_converted = true; idx_t row = 0; UnaryExecutor::Execute(input_vector, result_vector, count, [&](string_t input) { T result; - if (!OP::Operation(input, result, &error_message)) { + if (!OP::Operation(input, result, parameters)) { line_error = row; all_converted = false; } else { @@ -37,13 +37,13 @@ class CSVCast { template static bool TemplatedTryCastDecimalVector(const CSVReaderOptions &options, Vector &input_vector, - Vector &result_vector, idx_t count, string &error_message, uint8_t width, - uint8_t scale) { + Vector &result_vector, idx_t count, CastParameters ¶meters, + uint8_t width, uint8_t scale) { D_ASSERT(input_vector.GetType().id() == LogicalTypeId::VARCHAR); bool all_converted = true; UnaryExecutor::Execute(input_vector, result_vector, count, [&](string_t input) { T result; - if (!OP::Operation(input, result, &error_message, width, scale)) { + if (!OP::Operation(input, result, parameters, width, scale)) { all_converted = false; } return result; @@ -68,13 +68,13 @@ class CSVCast { template static bool TemplatedTryCastDateVector(const map> &options, Vector &input_vector, Vector &result_vector, idx_t count, - string &error_message, idx_t &line_error) { + CastParameters ¶meters, idx_t &line_error) { D_ASSERT(input_vector.GetType().id() == LogicalTypeId::VARCHAR); bool all_converted = true; idx_t cur_line = 0; UnaryExecutor::Execute(input_vector, result_vector, count, [&](string_t input) { T result; - if (!OP::Operation(options, input, result, error_message)) { + if (!OP::Operation(options, input, result, *parameters.error_message)) { line_error = cur_line; all_converted = false; } @@ -86,49 +86,49 @@ class CSVCast { public: static bool TryCastDateVector(const map> &options, Vector &input_vector, - Vector &result_vector, idx_t count, string &error_message, idx_t &line_error) { + Vector &result_vector, idx_t count, CastParameters ¶meters, idx_t &line_error) { return TemplatedTryCastDateVector(options, input_vector, result_vector, count, - error_message, line_error); + parameters, line_error); } static bool TryCastTimestampVector(const map> &options, Vector &input_vector, Vector &result_vector, idx_t count, - string &error_message) { + CastParameters ¶meters) { idx_t line_error; return TemplatedTryCastDateVector(options, input_vector, result_vector, - count, error_message, line_error); + count, parameters, line_error); } static bool TryCastFloatingVectorCommaSeparated(const CSVReaderOptions &options, Vector &input_vector, - Vector &result_vector, idx_t count, string &error_message, + Vector &result_vector, idx_t count, CastParameters ¶meters, const LogicalType &result_type, idx_t &line_error) { switch (result_type.InternalType()) { case PhysicalType::DOUBLE: return TemplatedTryCastFloatingVector( - options, input_vector, result_vector, count, error_message, line_error); + options, input_vector, result_vector, count, parameters, line_error); case PhysicalType::FLOAT: return TemplatedTryCastFloatingVector( - options, input_vector, result_vector, count, error_message, line_error); + options, input_vector, result_vector, count, parameters, line_error); default: throw InternalException("Unimplemented physical type for floating"); } } static bool TryCastDecimalVectorCommaSeparated(const CSVReaderOptions &options, Vector &input_vector, - Vector &result_vector, idx_t count, string &error_message, + Vector &result_vector, idx_t count, CastParameters ¶meters, const LogicalType &result_type) { auto width = DecimalType::GetWidth(result_type); auto scale = DecimalType::GetScale(result_type); switch (result_type.InternalType()) { case PhysicalType::INT16: return TemplatedTryCastDecimalVector( - options, input_vector, result_vector, count, error_message, width, scale); + options, input_vector, result_vector, count, parameters, width, scale); case PhysicalType::INT32: return TemplatedTryCastDecimalVector( - options, input_vector, result_vector, count, error_message, width, scale); + options, input_vector, result_vector, count, parameters, width, scale); case PhysicalType::INT64: return TemplatedTryCastDecimalVector( - options, input_vector, result_vector, count, error_message, width, scale); + options, input_vector, result_vector, count, parameters, width, scale); case PhysicalType::INT128: return TemplatedTryCastDecimalVector( - options, input_vector, result_vector, count, error_message, width, scale); + options, input_vector, result_vector, count, parameters, width, scale); default: throw InternalException("Unimplemented physical type for decimal"); } diff --git a/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp similarity index 68% rename from src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp index f166f86abe50..ccfb67cbe0c9 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/util/csv_error.hpp +// duckdb/execution/operator/csv_scanner/csv_error.hpp // // //===----------------------------------------------------------------------===// @@ -14,7 +14,7 @@ #include "duckdb/common/unordered_map.hpp" #include "duckdb/common/case_insensitive_map.hpp" #include "duckdb/common/types/string_type.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" namespace duckdb { @@ -27,6 +27,13 @@ class LinesPerBoundary { idx_t boundary_idx = 0; idx_t lines_in_batch = 0; + + bool operator<(const LinesPerBoundary &other) const { + if (boundary_idx < other.boundary_idx) { + return true; + } + return lines_in_batch < other.lines_in_batch; + } }; enum CSVErrorType : uint8_t { @@ -37,30 +44,39 @@ enum CSVErrorType : uint8_t { SNIFFING = 4, // If something went wrong during sniffing and was not possible to find suitable candidates MAXIMUM_LINE_SIZE = 5, // Maximum line size was exceeded by a line in the CSV File NULLPADDED_QUOTED_NEW_VALUE = 6, // If the null_padding option is set and we have quoted new values in parallel + INVALID_UNICODE = 7 }; class CSVError { public: - CSVError(string error_message, CSVErrorType type, idx_t column_idx, vector row); - CSVError(string error_message, CSVErrorType type); + CSVError() {}; + CSVError(string error_message, CSVErrorType type, idx_t column_idx, vector row, LinesPerBoundary error_info); + CSVError(string error_message, CSVErrorType type, LinesPerBoundary error_info); //! Produces error messages for column name -> type mismatch. static CSVError ColumnTypesError(case_insensitive_map_t sql_types_per_column, const vector &names); //! Produces error messages for casting errors static CSVError CastError(const CSVReaderOptions &options, string &column_name, string &cast_error, - idx_t column_idx, vector &row); + idx_t column_idx, vector &row, LinesPerBoundary error_info); //! Produces error for when the line size exceeds the maximum line size option - static CSVError LineSizeError(const CSVReaderOptions &options, idx_t actual_size); + static CSVError LineSizeError(const CSVReaderOptions &options, idx_t actual_size, LinesPerBoundary error_info); //! Produces error for when the sniffer couldn't find viable options static CSVError SniffingError(string &file_path); //! Produces error messages for unterminated quoted values static CSVError UnterminatedQuotesError(const CSVReaderOptions &options, string_t *vector_ptr, - idx_t vector_line_start, idx_t current_column); + idx_t vector_line_start, idx_t current_column, LinesPerBoundary error_info); //! Produces error messages for null_padding option is set and we have quoted new values in parallel - static CSVError NullPaddingFail(const CSVReaderOptions &options); + static CSVError NullPaddingFail(const CSVReaderOptions &options, LinesPerBoundary error_info); //! Produces error for incorrect (e.g., smaller and lower than the predefined) number of columns in a CSV Line static CSVError IncorrectColumnAmountError(const CSVReaderOptions &options, string_t *vector_ptr, - idx_t vector_line_start, idx_t actual_columns); + idx_t vector_line_start, idx_t actual_columns, + LinesPerBoundary error_info); + //! Produces error message when we detect an invalid utf-8 value + static CSVError InvalidUTF8(const CSVReaderOptions &options, LinesPerBoundary error_info); + idx_t GetBoundaryIndex() { + return error_info.boundary_idx; + } + //! Actual error message string error_message; //! Error Type @@ -69,36 +85,46 @@ class CSVError { idx_t column_idx; //! Values from the row where error happened vector row; + //! Line information regarding this error + LinesPerBoundary error_info; }; class CSVErrorHandler { public: CSVErrorHandler(bool ignore_errors = false); //! Throws the error - void Error(LinesPerBoundary &error_info, CSVError &csv_error, bool force_error = false); - //! Throws the error - void Error(CSVError &csv_error); + void Error(CSVError csv_error, bool force_error = false); + //! If we have a cached error, and we can now error, we error. + void ErrorIfNeeded(); //! Inserts a finished error info void Insert(idx_t boundary_idx, idx_t rows); - vector> errors; + //! Method that actually throws the error + void ThrowError(CSVError csv_error); + //! If we processed all boundaries before the one that error-ed + bool CanGetLine(idx_t boundary_index); //! Return the 1-indexed line number - idx_t GetLine(LinesPerBoundary &error_info); + idx_t GetLine(const LinesPerBoundary &error_info); void NewMaxLineSize(idx_t scan_line_size); + //! Set of errors + map> errors; + idx_t GetMaxLineLength() { return max_line_length; } + void DontPrintErrorLine() { + print_line = false; + } private: //! If we should print the line of an error bool PrintLineNumber(CSVError &error); //! CSV Error Handler Mutex mutex main_mutex; - //! Map of -> lines + //! Map of -> lines read unordered_map lines_per_batch_map; idx_t max_line_length = 0; bool ignore_errors = false; - - bool got_borked = false; + bool print_line = true; }; } // namespace duckdb diff --git a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp similarity index 95% rename from src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp index 21cd6385e7a7..c7e70b008ae7 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +// duckdb/execution/operator/csv_scanner/csv_file_handle.hpp // // //===----------------------------------------------------------------------===// diff --git a/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp similarity index 85% rename from src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp index 57192e6637a4..ce9fc08ce0bd 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp @@ -1,17 +1,17 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +// duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_error.hpp" namespace duckdb { struct ReadCSVData; diff --git a/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp similarity index 98% rename from src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp index 1bcd27b3f4d4..8c13e2c9f15f 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/options/csv_option.hpp +// duckdb/execution/operator/csv_scanner/csv_option.hpp // // //===----------------------------------------------------------------------===// diff --git a/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp similarity index 95% rename from src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp index 6aced3713898..6aa349bf823e 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp @@ -1,16 +1,16 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +// duckdb/execution/operator/csv_scanner/csv_reader_options.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_option.hpp" -#include "duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_option.hpp" +#include "duckdb/execution/operator/csv_scanner/state_machine_options.hpp" #include "duckdb/common/map.hpp" #include "duckdb/function/scalar/strftime_format.hpp" #include "duckdb/common/types/value.hpp" diff --git a/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp similarity index 94% rename from src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp index 3584b1e91a3e..d5365b83db01 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp @@ -1,17 +1,17 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +// duckdb/execution/operator/csv_scanner/csv_sniffer.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" #include "duckdb/common/vector.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/quote_rules.hpp" +#include "duckdb/execution/operator/csv_scanner/column_count_scanner.hpp" namespace duckdb { struct DateTimestampSniffing { @@ -142,7 +142,8 @@ class CSVSniffer { void DetectTypes(); //! Change the date format for the type to the string //! Try to cast a string value to the specified sql type - bool TryCastValue(CSVStateMachine &candidate, const Value &value, const LogicalType &sql_type); + bool TryCastValue(const DialectOptions &dialect_options, const string &decimal_separator, const Value &value, + const LogicalType &sql_type); void SetDateFormat(CSVStateMachine &candidate, const string &format_specifier, const LogicalTypeId &sql_type); //! Function that initialized the necessary variables used for date and timestamp detection @@ -178,6 +179,7 @@ class CSVSniffer { //! ------------------ Header Detection ----------------- // //! ------------------------------------------------------// void DetectHeader(); + bool DetectHeaderWithSetColumn(); vector names; //! ------------------------------------------------------// diff --git a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp similarity index 94% rename from src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp index 774d50040cdc..d2993e0371e1 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +// duckdb/execution/operator/csv_scanner/csv_state.hpp // // //===----------------------------------------------------------------------===// diff --git a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp similarity index 91% rename from src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp index 4b6348fbc046..49542782f56a 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp @@ -1,16 +1,16 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +// duckdb/execution/operator/csv_scanner/csv_state_machine.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp" namespace duckdb { diff --git a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp b/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp similarity index 88% rename from src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp rename to src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp index 41f4fa69474e..b72e46bb672a 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +// duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp // // //===----------------------------------------------------------------------===// @@ -10,9 +10,9 @@ #include "duckdb/storage/object_cache.hpp" #include "duckdb/common/types/hash.hpp" -#include "duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp" +#include "duckdb/execution/operator/csv_scanner/state_machine_options.hpp" +#include "duckdb/execution/operator/csv_scanner/quote_rules.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state.hpp" namespace duckdb { @@ -28,6 +28,11 @@ class StateMachine { //! For the Quoted State bool skip_quoted[256]; + uint64_t delimiter = 0; + uint64_t new_line = 0; + uint64_t carriage_return = 0; + uint64_t quote = 0; + uint64_t escape = 0; const CSVState *operator[](idx_t i) const { return state_machine[i]; } @@ -63,7 +68,6 @@ class CSVStateMachineCache : public ObjectCacheEntry { //! It first caches it, then returns it. const StateMachine &Get(const CSVStateMachineOptions &state_machine_options); - static const string STATE_KEY; static string ObjectType() { return "CSV_STATE_MACHINE_CACHE"; } diff --git a/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp b/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp similarity index 77% rename from src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp rename to src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp index edd7062481ec..bbeb2bfee094 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp @@ -1,20 +1,20 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +// duckdb/execution/operator/csv_scanner/global_csv_state.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/util/csv_error.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_error.hpp" #include "duckdb/function/table/read_csv.hpp" -#include "duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" namespace duckdb { @@ -51,7 +51,7 @@ struct CSVGlobalState : public GlobalTableFunctionState { vector> file_scans; //! Mutex to lock when getting next batch of bytes (Parallel Only) - mutex main_mutex; + mutable mutex main_mutex; //! Basically max number of threads in DuckDB idx_t system_threads; diff --git a/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp b/src/include/duckdb/execution/operator/csv_scanner/quote_rules.hpp similarity index 90% rename from src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp rename to src/include/duckdb/execution/operator/csv_scanner/quote_rules.hpp index 771c12b80062..4579eb11d721 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/quote_rules.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +// duckdb/execution/operator/csv_scanner/quote_rules.hpp // // //===----------------------------------------------------------------------===// diff --git a/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp b/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp similarity index 87% rename from src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp rename to src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp index a0534735c65f..7cf9769575ad 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp @@ -1,17 +1,17 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +// duckdb/execution/operator/csv_scanner/scanner_boundary.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" #include "duckdb/main/client_context.hpp" #include "duckdb/common/multi_file_reader.hpp" #include "duckdb/common/fast_mem.hpp" diff --git a/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp b/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp similarity index 76% rename from src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp rename to src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp index 86766750f1fc..7fd54ee1b35b 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp @@ -1,18 +1,18 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +// duckdb/execution/operator/csv_scanner/skip_scanner.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/base_scanner.hpp" namespace duckdb { diff --git a/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp b/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp similarity index 89% rename from src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp rename to src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp index 0cb97f46e72c..ee23720923e8 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp @@ -1,14 +1,14 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +// duckdb/execution/operator/csv_scanner/state_machine_options.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/options/csv_option.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_option.hpp" namespace duckdb { //! Struct that holds the configuration of a CSV State Machine diff --git a/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp b/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp similarity index 84% rename from src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp rename to src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp index 2fb22afa28ac..d48f1b44e27b 100644 --- a/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +++ b/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp @@ -1,17 +1,17 @@ //===----------------------------------------------------------------------===// // DuckDB // -// duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +// duckdb/execution/operator/csv_scanner/string_value_scanner.hpp // // //===----------------------------------------------------------------------===// #pragma once -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine.hpp" +#include "duckdb/execution/operator/csv_scanner/scanner_boundary.hpp" +#include "duckdb/execution/operator/csv_scanner/base_scanner.hpp" namespace duckdb { @@ -49,10 +49,12 @@ class LinePosition { class StringValueResult : public ScannerResult { public: - StringValueResult(CSVStates &states, CSVStateMachine &state_machine, CSVBufferHandle &buffer_handle, - Allocator &buffer_allocator, idx_t result_size, idx_t buffer_position, - CSVErrorHandler &error_hander, CSVIterator &iterator, bool store_line_size, - shared_ptr csv_file_scan, idx_t &lines_read); + StringValueResult(CSVStates &states, CSVStateMachine &state_machine, + const shared_ptr &buffer_handle, Allocator &buffer_allocator, idx_t result_size, + idx_t buffer_position, CSVErrorHandler &error_hander, CSVIterator &iterator, bool store_line_size, + shared_ptr csv_file_scan, idx_t &lines_read, bool sniffing); + + ~StringValueResult(); //! Information on the vector unsafe_vector vector_ptr; @@ -85,7 +87,7 @@ class StringValueResult : public ScannerResult { bool added_last_line = false; bool quoted_new_line = false; - unsafe_unique_array parse_types; + unsafe_unique_array> parse_types; vector names; unordered_map cast_errors; @@ -96,8 +98,13 @@ class StringValueResult : public ScannerResult { bool projecting_columns = false; idx_t chunk_col_id = 0; + //! We must ensure that we keep the buffers alive until processing the query result + vector> buffer_handles; + //! If the current row has an error, we have to skip it bool ignore_current_row = false; + + bool sniffing; //! Specialized code for quoted values, makes sure to remove quotes and escapes static inline void AddQuotedValue(StringValueResult &result, const idx_t buffer_pos); //! Adds a Value to the result @@ -120,6 +127,8 @@ class StringValueResult : public ScannerResult { Value GetValue(idx_t row_idx, idx_t col_idx); DataChunk &ToChunk(); + //! Resets the state of the result + void Reset(); }; //! Our dialect scanner basically goes over the CSV and actually parses the values to a DuckDB vector of string_t @@ -128,7 +137,7 @@ class StringValueScanner : public BaseScanner { StringValueScanner(idx_t scanner_idx, const shared_ptr &buffer_manager, const shared_ptr &state_machine, const shared_ptr &error_handler, const shared_ptr &csv_file_scan, - CSVIterator boundary = {}, idx_t result_size = STANDARD_VECTOR_SIZE); + bool sniffing = false, CSVIterator boundary = {}, idx_t result_size = STANDARD_VECTOR_SIZE); StringValueScanner(const shared_ptr &buffer_manager, const shared_ptr &state_machine, @@ -185,7 +194,7 @@ class StringValueScanner : public BaseScanner { vector types; //! Pointer to the previous buffer handle, necessary for overbuffer values - unique_ptr previous_buffer_handle; + shared_ptr previous_buffer_handle; }; } // namespace duckdb diff --git a/src/include/duckdb/execution/operator/helper/physical_limit.hpp b/src/include/duckdb/execution/operator/helper/physical_limit.hpp index 2282dbfd0df6..2734066bb653 100644 --- a/src/include/duckdb/execution/operator/helper/physical_limit.hpp +++ b/src/include/duckdb/execution/operator/helper/physical_limit.hpp @@ -10,6 +10,7 @@ #include "duckdb/execution/physical_operator.hpp" #include "duckdb/planner/expression.hpp" +#include "duckdb/planner/bound_result_modifier.hpp" namespace duckdb { @@ -18,14 +19,14 @@ class PhysicalLimit : public PhysicalOperator { public: static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::LIMIT; + static constexpr const idx_t MAX_LIMIT_VALUE = 1ULL << 62ULL; + public: - PhysicalLimit(vector types, idx_t limit, idx_t offset, unique_ptr limit_expression, - unique_ptr offset_expression, idx_t estimated_cardinality); + PhysicalLimit(vector types, BoundLimitNode limit_val, BoundLimitNode offset_val, + idx_t estimated_cardinality); - idx_t limit_value; - idx_t offset_value; - unique_ptr limit_expression; - unique_ptr offset_expression; + BoundLimitNode limit_val; + BoundLimitNode offset_val; public: bool SinkOrderDependent() const override { @@ -61,11 +62,13 @@ class PhysicalLimit : public PhysicalOperator { } public: - static bool ComputeOffset(ExecutionContext &context, DataChunk &input, idx_t &limit, idx_t &offset, - idx_t current_offset, idx_t &max_element, Expression *limit_expression, - Expression *offset_expression); + static void SetInitialLimits(const BoundLimitNode &limit_val, const BoundLimitNode &offset_val, optional_idx &limit, + optional_idx &offset); + static bool ComputeOffset(ExecutionContext &context, DataChunk &input, optional_idx &limit, optional_idx &offset, + idx_t current_offset, idx_t &max_element, const BoundLimitNode &limit_val, + const BoundLimitNode &offset_val); static bool HandleOffset(DataChunk &input, idx_t ¤t_offset, idx_t offset, idx_t limit); - static Value GetDelimiter(ExecutionContext &context, DataChunk &input, Expression *expr); + static Value GetDelimiter(ExecutionContext &context, DataChunk &input, const Expression &expr); }; } // namespace duckdb diff --git a/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp b/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp index 93c04ed87d85..723822ec1754 100644 --- a/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp +++ b/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp @@ -10,6 +10,7 @@ #include "duckdb/execution/physical_operator.hpp" #include "duckdb/planner/expression.hpp" +#include "duckdb/planner/bound_result_modifier.hpp" namespace duckdb { @@ -19,18 +20,11 @@ class PhysicalLimitPercent : public PhysicalOperator { static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::LIMIT_PERCENT; public: - PhysicalLimitPercent(vector types, double limit_percent, idx_t offset, - unique_ptr limit_expression, unique_ptr offset_expression, - idx_t estimated_cardinality) - : PhysicalOperator(PhysicalOperatorType::LIMIT_PERCENT, std::move(types), estimated_cardinality), - limit_percent(limit_percent), offset_value(offset), limit_expression(std::move(limit_expression)), - offset_expression(std::move(offset_expression)) { - } + PhysicalLimitPercent(vector types, BoundLimitNode limit_val_p, BoundLimitNode offset_val_p, + idx_t estimated_cardinality); - double limit_percent; - idx_t offset_value; - unique_ptr limit_expression; - unique_ptr offset_expression; + BoundLimitNode limit_val; + BoundLimitNode offset_val; public: bool SinkOrderDependent() const override { diff --git a/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp b/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp index a12b4e247dc1..22cdc00d88ec 100644 --- a/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp +++ b/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp @@ -10,6 +10,7 @@ #include "duckdb/execution/physical_operator.hpp" #include "duckdb/planner/expression.hpp" +#include "duckdb/planner/bound_result_modifier.hpp" namespace duckdb { @@ -18,14 +19,11 @@ class PhysicalStreamingLimit : public PhysicalOperator { static constexpr const PhysicalOperatorType TYPE = PhysicalOperatorType::STREAMING_LIMIT; public: - PhysicalStreamingLimit(vector types, idx_t limit, idx_t offset, - unique_ptr limit_expression, unique_ptr offset_expression, + PhysicalStreamingLimit(vector types, BoundLimitNode limit_val_p, BoundLimitNode offset_val_p, idx_t estimated_cardinality, bool parallel); - idx_t limit_value; - idx_t offset_value; - unique_ptr limit_expression; - unique_ptr offset_expression; + BoundLimitNode limit_val; + BoundLimitNode offset_val; bool parallel; public: diff --git a/src/include/duckdb/execution/operator/join/physical_hash_join.hpp b/src/include/duckdb/execution/operator/join/physical_hash_join.hpp index 9fc80701493a..9e663b910107 100644 --- a/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +++ b/src/include/duckdb/execution/operator/join/physical_hash_join.hpp @@ -52,6 +52,9 @@ class PhysicalHashJoin : public PhysicalComparisonJoin { //! Used in perfect hash join PerfectHashJoinStats perfect_join_statistics; +public: + string ParamsToString() const override; + public: // Operator Interface unique_ptr GetOperatorState(ExecutionContext &context) const override; diff --git a/src/include/duckdb/execution/operator/persistent/batch_memory_manager.hpp b/src/include/duckdb/execution/operator/persistent/batch_memory_manager.hpp new file mode 100644 index 000000000000..b97071a395d3 --- /dev/null +++ b/src/include/duckdb/execution/operator/persistent/batch_memory_manager.hpp @@ -0,0 +1,165 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/execution/operator/persistent/batch_memory_manager.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/common/common.hpp" +#include "duckdb/storage/temporary_memory_manager.hpp" +#include "duckdb/parallel/interrupt.hpp" +#include "duckdb/storage/buffer_manager.hpp" + +namespace duckdb { + +class BatchMemoryManager { +public: + BatchMemoryManager(ClientContext &context, idx_t initial_memory_request) + : context(context), unflushed_memory_usage(0), min_batch_index(0), available_memory(0), + can_increase_memory(true) { + memory_state = TemporaryMemoryManager::Get(context).Register(context); + SetMemorySize(initial_memory_request); + } + +private: + ClientContext &context; + //! Temporary memory state + unique_ptr memory_state; + //! Total memory usage of unflushed rows + atomic unflushed_memory_usage; + //! Minimum batch size + atomic min_batch_index; + //! The available memory for unflushed rows + atomic available_memory; + //! Blocked task lock + mutex blocked_task_lock; + //! The set of blocked tasks + vector blocked_tasks; + //! Whether or not we can request additional memory + bool can_increase_memory; + +public: + void SetMemorySize(idx_t size) { + // request at most 1/4th of all available memory + idx_t total_max_memory = BufferManager::GetBufferManager(context).GetQueryMaxMemory(); + idx_t request_cap = total_max_memory / 4; + + size = MinValue(size, request_cap); + if (size <= available_memory) { + return; + } + + memory_state->SetRemainingSize(context, size); + auto next_reservation = memory_state->GetReservation(); + if (available_memory >= next_reservation) { + // we tried to ask for more memory but were declined + // stop asking for more memory + can_increase_memory = false; + } + available_memory = next_reservation; + } + + void IncreaseMemory() { + if (!can_increase_memory) { + return; + } + SetMemorySize(available_memory * 2); + } + + bool OutOfMemory(idx_t batch_index) { +#ifdef DUCKDB_ALTERNATIVE_VERIFY + // alternative verify - always report that we are out of memory to test this code path + return true; +#else + if (unflushed_memory_usage >= available_memory) { + lock_guard l(blocked_task_lock); + if (batch_index > min_batch_index) { + // exceeded available memory and we are not the minimum batch index- try to increase it + IncreaseMemory(); + if (unflushed_memory_usage >= available_memory) { + // STILL out of memory + return true; + } + } + } + return false; +#endif + } + + void BlockTask(InterruptState &state) { + blocked_tasks.push_back(state); + } + + bool UnblockTasks() { + lock_guard l(blocked_task_lock); + return UnblockTasksInternal(); + } + + bool UnblockTasksInternal() { + if (blocked_tasks.empty()) { + return false; + } + for (auto &entry : blocked_tasks) { + entry.Callback(); + } + blocked_tasks.clear(); + return true; + } + + void UpdateMinBatchIndex(idx_t current_min_batch_index) { + if (min_batch_index >= current_min_batch_index) { + return; + } + lock_guard l(blocked_task_lock); + auto new_batch_index = MaxValue(min_batch_index, current_min_batch_index); + if (new_batch_index != min_batch_index) { + // new batch index! unblock all tasks + min_batch_index = new_batch_index; + UnblockTasksInternal(); + } + } + + idx_t AvailableMemory() const { + return available_memory; + } + + idx_t GetMinimumBatchIndex() const { + return min_batch_index; + } + + mutex &GetBlockedTaskLock() { + return blocked_task_lock; + } + + idx_t GetUnflushedMemory() { + return unflushed_memory_usage; + } + + void IncreaseUnflushedMemory(idx_t memory_increase) { + unflushed_memory_usage += memory_increase; + } + + void ReduceUnflushedMemory(idx_t memory_reduction) { + if (unflushed_memory_usage < memory_reduction) { + throw InternalException("Reducing unflushed memory usage below zero!?"); + } else { + unflushed_memory_usage -= memory_reduction; + } + } + + bool IsMinimumBatchIndex(idx_t batch_index) { + return batch_index <= min_batch_index; + } + + void FinalCheck() { + if (unflushed_memory_usage != 0) { + throw InternalException("Unflushed memory usage is not zero at finalize but %llu", + unflushed_memory_usage.load()); + } + } +}; + +} // namespace duckdb diff --git a/src/include/duckdb/execution/operator/persistent/batch_task_manager.hpp b/src/include/duckdb/execution/operator/persistent/batch_task_manager.hpp new file mode 100644 index 000000000000..5be0d4284f0f --- /dev/null +++ b/src/include/duckdb/execution/operator/persistent/batch_task_manager.hpp @@ -0,0 +1,48 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/execution/operator/persistent/batch_task_manager.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/common/common.hpp" +#include "duckdb/storage/temporary_memory_manager.hpp" +#include "duckdb/parallel/interrupt.hpp" +#include "duckdb/storage/buffer_manager.hpp" +#include "duckdb/common/queue.hpp" + +namespace duckdb { + +template +class BatchTaskManager { +public: + void AddTask(unique_ptr task) { + lock_guard l(task_lock); + task_queue.push(std::move(task)); + } + + unique_ptr GetTask() { + lock_guard l(task_lock); + if (task_queue.empty()) { + return nullptr; + } + auto entry = std::move(task_queue.front()); + task_queue.pop(); + return entry; + } + + idx_t TaskCount() { + lock_guard l(task_lock); + return task_queue.size(); + } + +private: + mutex task_lock; + //! The task queue for the batch copy to file + queue> task_queue; +}; + +} // namespace duckdb diff --git a/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp b/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp index ff471a5df875..60bd8090003d 100644 --- a/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +++ b/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp @@ -61,6 +61,7 @@ class PhysicalBatchCopyToFile : public PhysicalOperator { } private: + void AddLocalBatch(ClientContext &context, GlobalSinkState &gstate, LocalSinkState &state) const; void PrepareBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t batch_index, unique_ptr collection) const; void FlushBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index) const; diff --git a/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp b/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp index 55ec0a018790..1a7155f37076 100644 --- a/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +++ b/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp @@ -69,6 +69,10 @@ class PhysicalBatchInsert : public PhysicalOperator { bool ParallelSink() const override { return true; } + +private: + bool ExecuteTask(ClientContext &context, GlobalSinkState &gstate_p, LocalSinkState &lstate_p) const; + void ExecuteTasks(ClientContext &context, GlobalSinkState &gstate_p, LocalSinkState &lstate_p) const; }; } // namespace duckdb diff --git a/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp b/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp index 432234b9d923..b65582e503f7 100644 --- a/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp +++ b/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp @@ -15,6 +15,7 @@ #include "duckdb/common/filename_pattern.hpp" namespace duckdb { +struct FixedRawBatchData; class PhysicalFixedBatchCopy : public PhysicalOperator { public: @@ -60,8 +61,9 @@ class PhysicalFixedBatchCopy : public PhysicalOperator { } public: + void AddLocalBatch(ClientContext &context, GlobalSinkState &gstate, LocalSinkState &state) const; void AddRawBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t batch_index, - unique_ptr collection) const; + unique_ptr collection) const; void RepartitionBatches(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index, bool final = false) const; void FlushBatchData(ClientContext &context, GlobalSinkState &gstate_p, idx_t min_index) const; diff --git a/src/include/duckdb/execution/physical_operator_states.hpp b/src/include/duckdb/execution/physical_operator_states.hpp index d799ec0d75dd..b0bb166a975d 100644 --- a/src/include/duckdb/execution/physical_operator_states.hpp +++ b/src/include/duckdb/execution/physical_operator_states.hpp @@ -47,7 +47,7 @@ class OperatorState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -64,7 +64,7 @@ class GlobalOperatorState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -85,7 +85,7 @@ class GlobalSinkState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -93,6 +93,10 @@ class GlobalSinkState { D_ASSERT(dynamic_cast(this)); return reinterpret_cast(*this); } + + virtual idx_t MaxThreads(idx_t source_max_threads) { + return source_max_threads; + } }; class LocalSinkState { @@ -105,7 +109,7 @@ class LocalSinkState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -126,7 +130,7 @@ class GlobalSourceState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -143,7 +147,7 @@ class LocalSourceState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/execution/physical_plan_generator.hpp b/src/include/duckdb/execution/physical_plan_generator.hpp index ab6198104b15..cd43ba55f034 100644 --- a/src/include/duckdb/execution/physical_plan_generator.hpp +++ b/src/include/duckdb/execution/physical_plan_generator.hpp @@ -12,7 +12,6 @@ #include "duckdb/execution/physical_operator.hpp" #include "duckdb/planner/logical_operator.hpp" #include "duckdb/planner/logical_tokens.hpp" -#include "duckdb/planner/operator/logical_limit_percent.hpp" #include "duckdb/planner/joinside.hpp" #include "duckdb/catalog/dependency_list.hpp" #include "duckdb/common/unordered_map.hpp" @@ -71,7 +70,6 @@ class PhysicalPlanGenerator { unique_ptr CreatePlan(LogicalFilter &op); unique_ptr CreatePlan(LogicalGet &op); unique_ptr CreatePlan(LogicalLimit &op); - unique_ptr CreatePlan(LogicalLimitPercent &op); unique_ptr CreatePlan(LogicalOrder &op); unique_ptr CreatePlan(LogicalTopN &op); unique_ptr CreatePlan(LogicalPositionalJoin &op); diff --git a/src/include/duckdb/execution/window_executor.hpp b/src/include/duckdb/execution/window_executor.hpp index 73a63527fa59..e944b6de3262 100644 --- a/src/include/duckdb/execution/window_executor.hpp +++ b/src/include/duckdb/execution/window_executor.hpp @@ -125,7 +125,7 @@ class WindowExecutorState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/execution/window_segment_tree.hpp b/src/include/duckdb/execution/window_segment_tree.hpp index 4e71f0fe158c..0cfbff2874b7 100644 --- a/src/include/duckdb/execution/window_segment_tree.hpp +++ b/src/include/duckdb/execution/window_segment_tree.hpp @@ -26,7 +26,7 @@ class WindowAggregatorState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/function/cast/cast_function_set.hpp b/src/include/duckdb/function/cast/cast_function_set.hpp index 1c6f38ceae76..7d43ba356718 100644 --- a/src/include/duckdb/function/cast/cast_function_set.hpp +++ b/src/include/duckdb/function/cast/cast_function_set.hpp @@ -26,6 +26,7 @@ struct GetCastFunctionInput { } optional_ptr context; + optional_idx query_location; }; struct BindCastFunction { diff --git a/src/include/duckdb/function/cast/default_casts.hpp b/src/include/duckdb/function/cast/default_casts.hpp index a102f08ad6e4..4bf6b4a7e55b 100644 --- a/src/include/duckdb/function/cast/default_casts.hpp +++ b/src/include/duckdb/function/cast/default_casts.hpp @@ -25,7 +25,7 @@ struct BindCastInfo { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -43,7 +43,7 @@ struct BoundCastData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -56,13 +56,17 @@ struct BoundCastData { struct CastParameters { CastParameters() { } + CastParameters(bool strict, string *error_message) : CastParameters(nullptr, strict, error_message, nullptr) { + } CastParameters(BoundCastData *cast_data, bool strict, string *error_message, - optional_ptr local_state) - : cast_data(cast_data), strict(strict), error_message(error_message), local_state(local_state) { + optional_ptr local_state, bool nullify_parent_p = false) + : cast_data(cast_data), strict(strict), error_message(error_message), local_state(local_state), + nullify_parent(nullify_parent_p) { } CastParameters(CastParameters &parent, optional_ptr cast_data, optional_ptr local_state) - : cast_data(cast_data), strict(parent.strict), error_message(parent.error_message), local_state(local_state) { + : cast_data(cast_data), strict(parent.strict), error_message(parent.error_message), local_state(local_state), + query_location(parent.query_location) { } //! The bound cast data (if any) @@ -73,6 +77,10 @@ struct CastParameters { string *error_message = nullptr; //! Local state optional_ptr local_state; + //! Query location (if any) + optional_idx query_location; + //! In the case of a nested type, when facing a cast error, if we nullify the parent + bool nullify_parent = false; }; struct CastLocalStateParameters { @@ -114,6 +122,7 @@ struct BindCastInput { CastFunctionSet &function_set; optional_ptr info; optional_ptr context; + optional_idx query_location; public: DUCKDB_API BoundCastInfo GetCastFunction(const LogicalType &source, const LogicalType &target); diff --git a/src/include/duckdb/function/cast/vector_cast_helpers.hpp b/src/include/duckdb/function/cast/vector_cast_helpers.hpp index 7835d9d43956..2b010d7db94c 100644 --- a/src/include/duckdb/function/cast/vector_cast_helpers.hpp +++ b/src/include/duckdb/function/cast/vector_cast_helpers.hpp @@ -26,17 +26,6 @@ struct VectorStringCastOperator { } }; -struct VectorTryCastData { - VectorTryCastData(Vector &result_p, string *error_message_p, bool strict_p) - : result(result_p), error_message(error_message_p), strict(strict_p) { - } - - Vector &result; - string *error_message; - bool strict; - bool all_converted = true; -}; - template struct VectorTryCastOperator { template @@ -47,7 +36,7 @@ struct VectorTryCastOperator { } auto data = (VectorTryCastData *)dataptr; return HandleVectorCastError::Operation(CastExceptionText(input), mask, - idx, data->error_message, data->all_converted); + idx, *data); } }; @@ -57,11 +46,11 @@ struct VectorTryCastStrictOperator { static RESULT_TYPE Operation(INPUT_TYPE input, ValidityMask &mask, idx_t idx, void *dataptr) { auto data = (VectorTryCastData *)dataptr; RESULT_TYPE output; - if (DUCKDB_LIKELY(OP::template Operation(input, output, data->strict))) { + if (DUCKDB_LIKELY(OP::template Operation(input, output, data->parameters.strict))) { return output; } return HandleVectorCastError::Operation(CastExceptionText(input), mask, - idx, data->error_message, data->all_converted); + idx, *data); } }; @@ -71,14 +60,13 @@ struct VectorTryCastErrorOperator { static RESULT_TYPE Operation(INPUT_TYPE input, ValidityMask &mask, idx_t idx, void *dataptr) { auto data = (VectorTryCastData *)dataptr; RESULT_TYPE output; - if (DUCKDB_LIKELY( - OP::template Operation(input, output, data->error_message, data->strict))) { + if (DUCKDB_LIKELY(OP::template Operation(input, output, data->parameters))) { return output; } - bool has_error = data->error_message && !data->error_message->empty(); + bool has_error = data->parameters.error_message && !data->parameters.error_message->empty(); return HandleVectorCastError::Operation( - has_error ? *data->error_message : CastExceptionText(input), mask, idx, - data->error_message, data->all_converted); + has_error ? *data->parameters.error_message : CastExceptionText(input), mask, idx, + *data); } }; @@ -88,24 +76,23 @@ struct VectorTryCastStringOperator { static RESULT_TYPE Operation(INPUT_TYPE input, ValidityMask &mask, idx_t idx, void *dataptr) { auto data = (VectorTryCastData *)dataptr; RESULT_TYPE output; - if (DUCKDB_LIKELY(OP::template Operation(input, output, data->result, - data->error_message, data->strict))) { + if (DUCKDB_LIKELY( + OP::template Operation(input, output, data->result, data->parameters))) { return output; } return HandleVectorCastError::Operation(CastExceptionText(input), mask, - idx, data->error_message, data->all_converted); + idx, *data); } }; struct VectorDecimalCastData { - VectorDecimalCastData(string *error_message_p, uint8_t width_p, uint8_t scale_p) - : error_message(error_message_p), width(width_p), scale(scale_p) { + VectorDecimalCastData(Vector &result, CastParameters ¶meters, uint8_t width_p, uint8_t scale_p) + : vector_cast_data(result, parameters), width(width_p), scale(scale_p) { } - string *error_message; + VectorTryCastData vector_cast_data; uint8_t width; uint8_t scale; - bool all_converted = true; }; template @@ -114,10 +101,10 @@ struct VectorDecimalCastOperator { static RESULT_TYPE Operation(INPUT_TYPE input, ValidityMask &mask, idx_t idx, void *dataptr) { auto data = (VectorDecimalCastData *)dataptr; RESULT_TYPE result_value; - if (!OP::template Operation(input, result_value, data->error_message, data->width, - data->scale)) { + if (!OP::template Operation(input, result_value, data->vector_cast_data.parameters, + data->width, data->scale)) { return HandleVectorCastError::Operation("Failed to cast decimal value", mask, idx, - data->error_message, data->all_converted); + data->vector_cast_data); } return result_value; } @@ -132,7 +119,7 @@ struct VectorCastHelpers { template static bool TemplatedTryCastLoop(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) { - VectorTryCastData input(result, parameters.error_message, parameters.strict); + VectorTryCastData input(result, parameters); UnaryExecutor::GenericExecute(source, result, count, &input, parameters.error_message); return input.all_converted; } @@ -166,12 +153,12 @@ struct VectorCastHelpers { } template - static bool TemplatedDecimalCast(Vector &source, Vector &result, idx_t count, string *error_message, uint8_t width, - uint8_t scale) { - VectorDecimalCastData input(error_message, width, scale); + static bool TemplatedDecimalCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters, + uint8_t width, uint8_t scale) { + VectorDecimalCastData input(result, parameters, width, scale); UnaryExecutor::GenericExecute>(source, result, count, (void *)&input, - error_message); - return input.all_converted; + parameters.error_message); + return input.vector_cast_data.all_converted; } template @@ -181,17 +168,14 @@ struct VectorCastHelpers { auto scale = DecimalType::GetScale(result_type); switch (result_type.InternalType()) { case PhysicalType::INT16: - return TemplatedDecimalCast(source, result, count, parameters.error_message, - width, scale); + return TemplatedDecimalCast(source, result, count, parameters, width, scale); case PhysicalType::INT32: - return TemplatedDecimalCast(source, result, count, parameters.error_message, - width, scale); + return TemplatedDecimalCast(source, result, count, parameters, width, scale); case PhysicalType::INT64: - return TemplatedDecimalCast(source, result, count, parameters.error_message, - width, scale); + return TemplatedDecimalCast(source, result, count, parameters, width, scale); case PhysicalType::INT128: - return TemplatedDecimalCast(source, result, count, parameters.error_message, - width, scale); + return TemplatedDecimalCast(source, result, count, parameters, width, + scale); default: throw InternalException("Unimplemented internal type for decimal"); } diff --git a/src/include/duckdb/function/compression_function.hpp b/src/include/duckdb/function/compression_function.hpp index 24bb45e01e5a..4095e1826229 100644 --- a/src/include/duckdb/function/compression_function.hpp +++ b/src/include/duckdb/function/compression_function.hpp @@ -34,7 +34,7 @@ struct AnalyzeState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -50,7 +50,7 @@ struct CompressionState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -71,7 +71,7 @@ struct CompressedSegmentState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -91,7 +91,7 @@ struct CompressionAppendState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/function/copy_function.hpp b/src/include/duckdb/function/copy_function.hpp index 2375489a0f7b..639eb989ccbb 100644 --- a/src/include/duckdb/function/copy_function.hpp +++ b/src/include/duckdb/function/copy_function.hpp @@ -26,7 +26,7 @@ struct LocalFunctionData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -42,7 +42,7 @@ struct GlobalFunctionData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -58,7 +58,7 @@ struct PreparedBatchData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/function/function.hpp b/src/include/duckdb/function/function.hpp index 7cf8e8880faf..e6c1ff7aaf57 100644 --- a/src/include/duckdb/function/function.hpp +++ b/src/include/duckdb/function/function.hpp @@ -53,7 +53,7 @@ struct FunctionData { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/function/scalar/list/contains_or_position.hpp b/src/include/duckdb/function/scalar/list/contains_or_position.hpp index c05e98a53f3a..7941da81c332 100644 --- a/src/include/duckdb/function/scalar/list/contains_or_position.hpp +++ b/src/include/duckdb/function/scalar/list/contains_or_position.hpp @@ -130,6 +130,7 @@ void ListContainsOrPosition(DataChunk &args, Vector &result) { break; case PhysicalType::STRUCT: case PhysicalType::LIST: + case PhysicalType::ARRAY: TemplatedContainsOrPosition(args, result, true); break; default: diff --git a/src/include/duckdb/function/scalar/nested_functions.hpp b/src/include/duckdb/function/scalar/nested_functions.hpp index 5eec127b0645..2ac436ff2c9b 100644 --- a/src/include/duckdb/function/scalar/nested_functions.hpp +++ b/src/include/duckdb/function/scalar/nested_functions.hpp @@ -45,7 +45,7 @@ struct PositionFunctor { return 0; } static inline int32_t UpdateResultEntries(idx_t child_idx) { - return child_idx + 1; + return UnsafeNumericCast(child_idx + 1); } }; diff --git a/src/include/duckdb/function/scalar_function.hpp b/src/include/duckdb/function/scalar_function.hpp index b9807b007558..485eaca8ceae 100644 --- a/src/include/duckdb/function/scalar_function.hpp +++ b/src/include/duckdb/function/scalar_function.hpp @@ -24,7 +24,7 @@ struct FunctionLocalState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/function/table/arrow.hpp b/src/include/duckdb/function/table/arrow.hpp index ce923906e80c..d74e4f4d1b5e 100644 --- a/src/include/duckdb/function/table/arrow.hpp +++ b/src/include/duckdb/function/table/arrow.hpp @@ -86,7 +86,11 @@ struct ArrowArrayScanState { public: ArrowScanLocalState &state; + // Hold ownership over the Arrow Arrays owned by DuckDB to allow for zero-copy + shared_ptr owned_data; unordered_map> children; + // Optionally holds the pointer that was used to create the cached dictionary + optional_ptr arrow_dictionary = nullptr; // Cache the (optional) dictionary of this array unique_ptr dictionary; //! Run-end-encoding state @@ -94,8 +98,9 @@ struct ArrowArrayScanState { public: ArrowArrayScanState &GetChild(idx_t child_idx); - void AddDictionary(unique_ptr dictionary_p); + void AddDictionary(unique_ptr dictionary_p, ArrowArray *arrow_dict); bool HasDictionary() const; + bool CacheOutdated(ArrowArray *dictionary) const; Vector &GetDictionary(); ArrowRunEndEncodingState &RunEndEncoding() { return run_end_encoding; @@ -106,6 +111,10 @@ struct ArrowArrayScanState { // Note: dictionary is not reset // the dictionary should be the same for every array scanned of this column run_end_encoding.Reset(); + for (auto &child : children) { + child.second->Reset(); + } + owned_data.reset(); } }; @@ -117,9 +126,6 @@ struct ArrowScanLocalState : public LocalTableFunctionState { public: unique_ptr stream; shared_ptr chunk; - // This vector hold the Arrow Vectors owned by DuckDB to allow for zero-copy - // Note that only DuckDB can release these vectors - unordered_map> arrow_owned_data; idx_t chunk_offset = 0; idx_t batch_index = 0; vector column_ids; diff --git a/src/include/duckdb/function/table/read_csv.hpp b/src/include/duckdb/function/table/read_csv.hpp index 63bc0ba04647..20d70c63e2d0 100644 --- a/src/include/duckdb/function/table/read_csv.hpp +++ b/src/include/duckdb/function/table/read_csv.hpp @@ -9,15 +9,15 @@ #pragma once #include "duckdb/common/multi_file_reader.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_handle.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp" #include "duckdb/function/built_in_functions.hpp" #include "duckdb/function/scalar/strftime_format.hpp" #include "duckdb/function/table_function.hpp" -#include "duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp" namespace duckdb { class BaseScanner; diff --git a/src/include/duckdb/function/table_function.hpp b/src/include/duckdb/function/table_function.hpp index 68c90d2d5721..feca386037c9 100644 --- a/src/include/duckdb/function/table_function.hpp +++ b/src/include/duckdb/function/table_function.hpp @@ -31,7 +31,7 @@ struct TableFunctionInfo { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -55,7 +55,7 @@ struct GlobalTableFunctionState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -70,7 +70,7 @@ struct LocalTableFunctionState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/main/attached_database.hpp b/src/include/duckdb/main/attached_database.hpp index a7d8241807be..63d9868416ba 100644 --- a/src/include/duckdb/main/attached_database.hpp +++ b/src/include/duckdb/main/attached_database.hpp @@ -44,6 +44,7 @@ class AttachedDatabase : public CatalogEntry { ~AttachedDatabase() override; void Initialize(); + void Close(); Catalog &ParentCatalog() override; StorageManager &GetStorageManager(); @@ -61,6 +62,7 @@ class AttachedDatabase : public CatalogEntry { bool IsInitialDatabase() const; void SetInitialDatabase(); + static bool NameIsReserved(const string &name); static string ExtractDatabaseName(const string &dbpath, FileSystem &fs); private: @@ -71,6 +73,7 @@ class AttachedDatabase : public CatalogEntry { AttachedDatabaseType type; optional_ptr parent_catalog; bool is_initial_database = false; + bool is_closed = false; }; } // namespace duckdb diff --git a/src/include/duckdb/main/capi/cast/from_decimal.hpp b/src/include/duckdb/main/capi/cast/from_decimal.hpp index de3f49ecc824..2a9bf7644bbe 100644 --- a/src/include/duckdb/main/capi/cast/from_decimal.hpp +++ b/src/include/duckdb/main/capi/cast/from_decimal.hpp @@ -21,19 +21,21 @@ bool CastDecimalCInternal(duckdb_result *source, RESULT_TYPE &result, idx_t col, auto width = duckdb::DecimalType::GetWidth(source_type); auto scale = duckdb::DecimalType::GetScale(source_type); void *source_address = UnsafeFetchPtr(source, col, row); + + CastParameters parameters; switch (source_type.InternalType()) { case duckdb::PhysicalType::INT16: return duckdb::TryCastFromDecimal::Operation(UnsafeFetchFromPtr(source_address), - result, nullptr, width, scale); + result, parameters, width, scale); case duckdb::PhysicalType::INT32: return duckdb::TryCastFromDecimal::Operation(UnsafeFetchFromPtr(source_address), - result, nullptr, width, scale); + result, parameters, width, scale); case duckdb::PhysicalType::INT64: return duckdb::TryCastFromDecimal::Operation(UnsafeFetchFromPtr(source_address), - result, nullptr, width, scale); + result, parameters, width, scale); case duckdb::PhysicalType::INT128: return duckdb::TryCastFromDecimal::Operation( - UnsafeFetchFromPtr(source_address), result, nullptr, width, scale); + UnsafeFetchFromPtr(source_address), result, parameters, width, scale); default: throw duckdb::InternalException("Unimplemented internal type for decimal"); } diff --git a/src/include/duckdb/main/capi/cast/to_decimal.hpp b/src/include/duckdb/main/capi/cast/to_decimal.hpp index 049423d5ff9f..39c4ab7e789c 100644 --- a/src/include/duckdb/main/capi/cast/to_decimal.hpp +++ b/src/include/duckdb/main/capi/cast/to_decimal.hpp @@ -15,7 +15,8 @@ namespace duckdb { template struct ToCDecimalCastWrapper { template - static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, std::string *error, uint8_t width, uint8_t scale) { + static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { throw NotImplementedException("Type not implemented for CDecimalCastWrapper"); } }; @@ -24,10 +25,12 @@ struct ToCDecimalCastWrapper { template <> struct ToCDecimalCastWrapper { template - static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, std::string *error, uint8_t width, uint8_t scale) { + static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { hugeint_t intermediate_result; - if (!TryCastToDecimal::Operation(input, intermediate_result, error, width, scale)) { + if (!TryCastToDecimal::Operation(input, intermediate_result, parameters, width, + scale)) { result = FetchDefaultValue::Operation(); return false; } @@ -47,10 +50,11 @@ struct ToCDecimalCastWrapper { template <> struct ToCDecimalCastWrapper { template - static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, std::string *error, uint8_t width, uint8_t scale) { + static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { int16_t intermediate_result; - if (!TryCastToDecimal::Operation(input, intermediate_result, error, width, scale)) { + if (!TryCastToDecimal::Operation(input, intermediate_result, parameters, width, scale)) { result = FetchDefaultValue::Operation(); return false; } @@ -70,10 +74,11 @@ struct ToCDecimalCastWrapper { template <> struct ToCDecimalCastWrapper { template - static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, std::string *error, uint8_t width, uint8_t scale) { + static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { int32_t intermediate_result; - if (!TryCastToDecimal::Operation(input, intermediate_result, error, width, scale)) { + if (!TryCastToDecimal::Operation(input, intermediate_result, parameters, width, scale)) { result = FetchDefaultValue::Operation(); return false; } @@ -93,10 +98,11 @@ struct ToCDecimalCastWrapper { template <> struct ToCDecimalCastWrapper { template - static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, std::string *error, uint8_t width, uint8_t scale) { + static bool Operation(SOURCE_TYPE input, duckdb_decimal &result, CastParameters ¶meters, uint8_t width, + uint8_t scale) { int64_t intermediate_result; - if (!TryCastToDecimal::Operation(input, intermediate_result, error, width, scale)) { + if (!TryCastToDecimal::Operation(input, intermediate_result, parameters, width, scale)) { result = FetchDefaultValue::Operation(); return false; } @@ -117,7 +123,8 @@ template duckdb_decimal TryCastToDecimalCInternal(SOURCE_TYPE source, uint8_t width, uint8_t scale) { duckdb_decimal result; try { - if (!OP::template Operation(source, result, nullptr, width, scale)) { + CastParameters parameters; + if (!OP::template Operation(source, result, parameters, width, scale)) { return FetchDefaultValue::Operation(); } } catch (...) { diff --git a/src/include/duckdb/main/client_data.hpp b/src/include/duckdb/main/client_data.hpp index 2d7fa16e6cde..7c281806b5c7 100644 --- a/src/include/duckdb/main/client_data.hpp +++ b/src/include/duckdb/main/client_data.hpp @@ -13,7 +13,7 @@ #include "duckdb/common/types/value.hpp" #include "duckdb/common/case_insensitive_map.hpp" #include "duckdb/common/atomic.hpp" -#include "duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp" namespace duckdb { class AttachedDatabase; diff --git a/src/include/duckdb/main/database_manager.hpp b/src/include/duckdb/main/database_manager.hpp index 1556caacb67c..aee2566e10bc 100644 --- a/src/include/duckdb/main/database_manager.hpp +++ b/src/include/duckdb/main/database_manager.hpp @@ -24,6 +24,7 @@ class Catalog; class CatalogSet; class ClientContext; class DatabaseInstance; +class TaskScheduler; //! The DatabaseManager is a class that sits at the root of all attached databases class DatabaseManager { @@ -67,7 +68,7 @@ class DatabaseManager { vector> GetDatabases(ClientContext &context); //! Removes all databases from the catalog set. This is necessary for the database instance's destructor, //! as the database manager has to be alive when destroying the catalog set objects. - void ResetDatabases(); + void ResetDatabases(unique_ptr &scheduler); transaction_t GetNewQueryNumber() { return current_query_number++; diff --git a/src/include/duckdb/main/extension/generated_extension_loader.hpp b/src/include/duckdb/main/extension/generated_extension_loader.hpp index 2dd9190e4aaa..eb98d38cb4a1 100644 --- a/src/include/duckdb/main/extension/generated_extension_loader.hpp +++ b/src/include/duckdb/main/extension/generated_extension_loader.hpp @@ -12,7 +12,7 @@ #include "duckdb/common/vector.hpp" #include "duckdb/main/database.hpp" -#if defined(GENERATED_EXTENSION_HEADERS) and !defined(DUCKDB_AMALGAMATION) +#if defined(GENERATED_EXTENSION_HEADERS) && !defined(DUCKDB_AMALGAMATION) #include "duckdb/common/common.hpp" #include "generated_extension_headers.hpp" diff --git a/src/include/duckdb/main/extension_entries.hpp b/src/include/duckdb/main/extension_entries.hpp index 1c96337d7cba..a3e1bed07341 100644 --- a/src/include/duckdb/main/extension_entries.hpp +++ b/src/include/duckdb/main/extension_entries.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb/common/unordered_map.hpp" +#include "duckdb/common/enums/catalog_type.hpp" // NOTE: this file is generated by scripts/generate_extensions_function.py. Check out the check-load-install-extensions // job in .github/workflows/LinuxRelease.yml on how to use it @@ -20,208 +21,230 @@ struct ExtensionEntry { char extension[48]; }; -static constexpr ExtensionEntry EXTENSION_FUNCTIONS[] = {{"->>", "json"}, - {"add_parquet_key", "parquet"}, - {"array_to_json", "json"}, - {"create_fts_index", "fts"}, - {"current_localtime", "icu"}, - {"current_localtimestamp", "icu"}, - {"dbgen", "tpch"}, - {"drop_fts_index", "fts"}, - {"dsdgen", "tpcds"}, - {"excel_text", "excel"}, - {"from_json", "json"}, - {"from_json_strict", "json"}, - {"from_substrait", "substrait"}, - {"from_substrait_json", "substrait"}, - {"fuzz_all_functions", "sqlsmith"}, - {"fuzzyduck", "sqlsmith"}, - {"get_substrait", "substrait"}, - {"get_substrait_json", "substrait"}, - {"host", "inet"}, - {"iceberg_metadata", "iceberg"}, - {"iceberg_scan", "iceberg"}, - {"iceberg_snapshots", "iceberg"}, - {"icu_calendar_names", "icu"}, - {"icu_sort_key", "icu"}, - {"json", "json"}, - {"json_array", "json"}, - {"json_array_length", "json"}, - {"json_contains", "json"}, - {"json_deserialize_sql", "json"}, - {"json_execute_serialized_sql", "json"}, - {"json_extract", "json"}, - {"json_extract_path", "json"}, - {"json_extract_path_text", "json"}, - {"json_extract_string", "json"}, - {"json_group_array", "json"}, - {"json_group_object", "json"}, - {"json_group_structure", "json"}, - {"json_keys", "json"}, - {"json_merge_patch", "json"}, - {"json_object", "json"}, - {"json_quote", "json"}, - {"json_serialize_plan", "json"}, - {"json_serialize_sql", "json"}, - {"json_structure", "json"}, - {"json_transform", "json"}, - {"json_transform_strict", "json"}, - {"json_type", "json"}, - {"json_valid", "json"}, - {"load_aws_credentials", "aws"}, - {"make_timestamptz", "icu"}, - {"parquet_file_metadata", "parquet"}, - {"parquet_kv_metadata", "parquet"}, - {"parquet_metadata", "parquet"}, - {"parquet_scan", "parquet"}, - {"parquet_schema", "parquet"}, - {"pg_clear_cache", "postgres_scanner"}, - {"pg_timezone_names", "icu"}, - {"postgres_attach", "postgres_scanner"}, - {"postgres_query", "postgres_scanner"}, - {"postgres_scan", "postgres_scanner"}, - {"postgres_scan_pushdown", "postgres_scanner"}, - {"read_json", "json"}, - {"read_json_auto", "json"}, - {"read_json_objects", "json"}, - {"read_json_objects_auto", "json"}, - {"read_ndjson", "json"}, - {"read_ndjson_auto", "json"}, - {"read_ndjson_objects", "json"}, - {"read_parquet", "parquet"}, - {"reduce_sql_statement", "sqlsmith"}, - {"row_to_json", "json"}, - {"scan_arrow_ipc", "arrow"}, - {"sql_auto_complete", "autocomplete"}, - {"sqlite_attach", "sqlite_scanner"}, - {"sqlite_scan", "sqlite_scanner"}, - {"sqlsmith", "sqlsmith"}, - {"shapefile_meta", "spatial"}, - {"st_area", "spatial"}, - {"st_area_spheroid", "spatial"}, - {"st_asgeojson", "spatial"}, - {"st_ashexwkb", "spatial"}, - {"st_astext", "spatial"}, - {"st_aswkb", "spatial"}, - {"st_boundary", "spatial"}, - {"st_buffer", "spatial"}, - {"st_centroid", "spatial"}, - {"st_collect", "spatial"}, - {"st_collectionextract", "spatial"}, - {"st_contains", "spatial"}, - {"st_containsproperly", "spatial"}, - {"st_convexhull", "spatial"}, - {"st_coveredby", "spatial"}, - {"st_covers", "spatial"}, - {"st_crosses", "spatial"}, - {"st_difference", "spatial"}, - {"st_dimension", "spatial"}, - {"st_disjoint", "spatial"}, - {"st_distance", "spatial"}, - {"st_distance_spheroid", "spatial"}, - {"st_drivers", "spatial"}, - {"st_dump", "spatial"}, - {"st_dwithin", "spatial"}, - {"st_dwithin_spheroid", "spatial"}, - {"st_endpoint", "spatial"}, - {"st_envelope", "spatial"}, - {"st_envelope_agg", "spatial"}, - {"st_equals", "spatial"}, - {"st_extent", "spatial"}, - {"st_exteriorring", "spatial"}, - {"st_flipcoordinates", "spatial"}, - {"st_geometrytype", "spatial"}, - {"st_geomfromgeojson", "spatial"}, - {"st_geomfromhexewkb", "spatial"}, - {"st_geomfromhexwkb", "spatial"}, - {"st_geomfromtext", "spatial"}, - {"st_geomfromwkb", "spatial"}, - {"st_intersection", "spatial"}, - {"st_intersection_agg", "spatial"}, - {"st_intersects", "spatial"}, - {"st_intersects_extent", "spatial"}, - {"st_isclosed", "spatial"}, - {"st_isempty", "spatial"}, - {"st_isring", "spatial"}, - {"st_issimple", "spatial"}, - {"st_isvalid", "spatial"}, - {"st_length", "spatial"}, - {"st_length_spheroid", "spatial"}, - {"st_linemerge", "spatial"}, - {"st_linestring2dfromwkb", "spatial"}, - {"st_list_proj_crs", "spatial"}, - {"st_makeenvelope", "spatial"}, - {"st_makeline", "spatial"}, - {"st_makepolygon", "spatial"}, - {"st_makevalid", "spatial"}, - {"st_ngeometries", "spatial"}, - {"st_ninteriorrings", "spatial"}, - {"st_normalize", "spatial"}, - {"st_npoints", "spatial"}, - {"st_numgeometries", "spatial"}, - {"st_numinteriorrings", "spatial"}, - {"st_numpoints", "spatial"}, - {"st_overlaps", "spatial"}, - {"st_perimeter", "spatial"}, - {"st_perimeter_spheroid", "spatial"}, - {"st_point", "spatial"}, - {"st_point2d", "spatial"}, - {"st_point2dfromwkb", "spatial"}, - {"st_point3d", "spatial"}, - {"st_point4d", "spatial"}, - {"st_pointn", "spatial"}, - {"st_pointonsurface", "spatial"}, - {"st_polygon2dfromwkb", "spatial"}, - {"st_quadkey", "spatial"}, - {"st_reverse", "spatial"}, - {"st_read", "spatial"}, - {"st_read_meta", "spatial"}, - {"st_readosm", "spatial"}, - {"st_readshp", "spatial"}, - {"st_reduceprecision", "spatial"}, - {"st_removerepeatedpoints", "spatial"}, - {"st_simplify", "spatial"}, - {"st_simplifypreservetopology", "spatial"}, - {"st_startpoint", "spatial"}, - {"st_touches", "spatial"}, - {"st_transform", "spatial"}, - {"st_union", "spatial"}, - {"st_union_agg", "spatial"}, - {"st_within", "spatial"}, - {"st_x", "spatial"}, - {"st_xmax", "spatial"}, - {"st_xmin", "spatial"}, - {"st_y", "spatial"}, - {"st_ymax", "spatial"}, - {"st_ymin", "spatial"}, - {"stem", "fts"}, - {"text", "excel"}, - {"to_arrow_ipc", "arrow"}, - {"to_json", "json"}, - {"tpcds", "tpcds"}, - {"tpcds_answers", "tpcds"}, - {"tpcds_queries", "tpcds"}, - {"tpch", "tpch"}, - {"tpch_answers", "tpch"}, - {"tpch_queries", "tpch"}}; // END_OF_EXTENSION_FUNCTIONS +struct ExtensionFunctionEntry { + char name[48]; + char extension[48]; + CatalogType type; +}; + +static constexpr ExtensionFunctionEntry EXTENSION_FUNCTIONS[] = { + {"->>", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"add_parquet_key", "parquet", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"array_to_json", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"create_fts_index", "fts", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"current_localtime", "icu", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"current_localtimestamp", "icu", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"dbgen", "tpch", CatalogType::TABLE_FUNCTION_ENTRY}, + {"drop_fts_index", "fts", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"dsdgen", "tpcds", CatalogType::TABLE_FUNCTION_ENTRY}, + {"excel_text", "excel", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"family", "inet", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"from_json", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"from_json_strict", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"from_substrait", "substrait", CatalogType::TABLE_FUNCTION_ENTRY}, + {"from_substrait_json", "substrait", CatalogType::TABLE_FUNCTION_ENTRY}, + {"fuzz_all_functions", "sqlsmith", CatalogType::TABLE_FUNCTION_ENTRY}, + {"fuzzyduck", "sqlsmith", CatalogType::TABLE_FUNCTION_ENTRY}, + {"get_substrait", "substrait", CatalogType::TABLE_FUNCTION_ENTRY}, + {"get_substrait_json", "substrait", CatalogType::TABLE_FUNCTION_ENTRY}, + {"host", "inet", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"iceberg_metadata", "iceberg", CatalogType::TABLE_FUNCTION_ENTRY}, + {"iceberg_scan", "iceberg", CatalogType::TABLE_FUNCTION_ENTRY}, + {"iceberg_snapshots", "iceberg", CatalogType::TABLE_FUNCTION_ENTRY}, + {"icu_calendar_names", "icu", CatalogType::TABLE_FUNCTION_ENTRY}, + {"icu_sort_key", "icu", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json", "json", CatalogType::MACRO_ENTRY}, + {"json_array", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_array_length", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_contains", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_deserialize_sql", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_execute_serialized_sql", "json", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"json_execute_serialized_sql", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"json_extract", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_extract_path", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_extract_path_text", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_extract_string", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_group_array", "json", CatalogType::MACRO_ENTRY}, + {"json_group_object", "json", CatalogType::MACRO_ENTRY}, + {"json_group_structure", "json", CatalogType::MACRO_ENTRY}, + {"json_keys", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_merge_patch", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_object", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_quote", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_serialize_plan", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_serialize_sql", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_structure", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_transform", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_transform_strict", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_type", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"json_valid", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"load_aws_credentials", "aws", CatalogType::TABLE_FUNCTION_ENTRY}, + {"make_timestamptz", "icu", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"parquet_file_metadata", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"parquet_kv_metadata", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"parquet_metadata", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"parquet_scan", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"parquet_schema", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"pg_clear_cache", "postgres_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"pg_timezone_names", "icu", CatalogType::TABLE_FUNCTION_ENTRY}, + {"postgres_attach", "postgres_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"postgres_query", "postgres_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"postgres_scan", "postgres_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"postgres_scan_pushdown", "postgres_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_json", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_json_auto", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_json_objects", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_json_objects_auto", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_ndjson", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_ndjson_auto", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_ndjson_objects", "json", CatalogType::TABLE_FUNCTION_ENTRY}, + {"read_parquet", "parquet", CatalogType::TABLE_FUNCTION_ENTRY}, + {"reduce_sql_statement", "sqlsmith", CatalogType::TABLE_FUNCTION_ENTRY}, + {"row_to_json", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"scan_arrow_ipc", "arrow", CatalogType::TABLE_FUNCTION_ENTRY}, + {"shapefile_meta", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"sql_auto_complete", "autocomplete", CatalogType::TABLE_FUNCTION_ENTRY}, + {"sqlite_attach", "sqlite_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"sqlite_scan", "sqlite_scanner", CatalogType::TABLE_FUNCTION_ENTRY}, + {"sqlsmith", "sqlsmith", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_area", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_area_spheroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_asgeojson", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_ashexwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_astext", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_aswkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_boundary", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_buffer", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_centroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_collect", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_collectionextract", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_contains", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_containsproperly", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_convexhull", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_coveredby", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_covers", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_crosses", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_difference", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_dimension", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_disjoint", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_distance", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_distance_spheroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_drivers", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_dump", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_dwithin", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_dwithin_spheroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_endpoint", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_envelope", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_envelope_agg", "spatial", CatalogType::AGGREGATE_FUNCTION_ENTRY}, + {"st_equals", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_extent", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_exteriorring", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_flipcoordinates", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geometrytype", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geomfromgeojson", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geomfromhexewkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geomfromhexwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geomfromtext", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_geomfromwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_intersection", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_intersection_agg", "spatial", CatalogType::AGGREGATE_FUNCTION_ENTRY}, + {"st_intersects", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_intersects_extent", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_isclosed", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_isempty", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_isring", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_issimple", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_isvalid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_length", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_length_spheroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_linemerge", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_linestring2dfromwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_list_proj_crs", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_makeenvelope", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_makeline", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_makepolygon", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_makevalid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_ngeometries", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_ninteriorrings", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_normalize", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_npoints", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_numgeometries", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_numinteriorrings", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_numpoints", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_overlaps", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_perimeter", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_perimeter_spheroid", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_point", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_point2d", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_point2dfromwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_point3d", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_point4d", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_pointn", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_pointonsurface", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_polygon2dfromwkb", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_quadkey", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_read", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_read_meta", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_readosm", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_readshp", "spatial", CatalogType::TABLE_FUNCTION_ENTRY}, + {"st_reduceprecision", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_removerepeatedpoints", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_reverse", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_simplify", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_simplifypreservetopology", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_startpoint", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_touches", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_transform", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_union", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_union_agg", "spatial", CatalogType::AGGREGATE_FUNCTION_ENTRY}, + {"st_within", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_x", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_xmax", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_xmin", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_y", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_ymax", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"st_ymin", "spatial", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"stem", "fts", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"text", "excel", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"to_arrow_ipc", "arrow", CatalogType::TABLE_FUNCTION_ENTRY}, + {"to_json", "json", CatalogType::SCALAR_FUNCTION_ENTRY}, + {"tpcds", "tpcds", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"tpcds_answers", "tpcds", CatalogType::TABLE_FUNCTION_ENTRY}, + {"tpcds_queries", "tpcds", CatalogType::TABLE_FUNCTION_ENTRY}, + {"tpch", "tpch", CatalogType::PRAGMA_FUNCTION_ENTRY}, + {"tpch_answers", "tpch", CatalogType::TABLE_FUNCTION_ENTRY}, + {"tpch_queries", "tpch", CatalogType::TABLE_FUNCTION_ENTRY}, +}; // END_OF_EXTENSION_FUNCTIONS static constexpr ExtensionEntry EXTENSION_SETTINGS[] = { + {"azure_account_name", "azure"}, + {"azure_credential_chain", "azure"}, + {"azure_endpoint", "azure"}, + {"azure_http_proxy", "azure"}, + {"azure_http_stats", "azure"}, + {"azure_proxy_password", "azure"}, + {"azure_proxy_user_name", "azure"}, + {"azure_read_buffer_size", "azure"}, + {"azure_read_transfer_chunk_size", "azure"}, + {"azure_read_transfer_concurrency", "azure"}, {"azure_storage_connection_string", "azure"}, {"binary_as_string", "parquet"}, + {"ca_cert_file", "httpfs"}, {"calendar", "icu"}, + {"enable_server_cert_verification", "httpfs"}, {"force_download", "httpfs"}, + {"http_keep_alive", "httpfs"}, {"http_retries", "httpfs"}, {"http_retry_backoff", "httpfs"}, {"http_retry_wait_ms", "httpfs"}, {"http_timeout", "httpfs"}, - {"http_keep_alive", "httpfs"}, - {"pg_debug_show_queries", "postgres_scanner"}, - {"pg_use_binary_copy", "postgres_scanner"}, - {"pg_experimental_filter_pushdown", "postgres_scanner"}, + {"pg_array_as_varchar", "postgres_scanner"}, {"pg_connection_cache", "postgres_scanner"}, {"pg_connection_limit", "postgres_scanner"}, + {"pg_debug_show_queries", "postgres_scanner"}, + {"pg_experimental_filter_pushdown", "postgres_scanner"}, {"pg_pages_per_task", "postgres_scanner"}, - {"pg_array_as_varchar", "postgres_scanner"}, + {"pg_use_binary_copy", "postgres_scanner"}, {"s3_access_key_id", "httpfs"}, {"s3_endpoint", "httpfs"}, {"s3_region", "httpfs"}, @@ -276,8 +299,9 @@ static constexpr ExtensionEntry EXTENSION_COLLATIONS[] = { // Note: these are currently hardcoded in scripts/generate_extensions_function.py // TODO: automate by passing though to script via duckdb static constexpr ExtensionEntry EXTENSION_FILE_PREFIXES[] = { - {"http://", "httpfs"}, {"https://", "httpfs"}, {"s3://", "httpfs"}, {"s3a://", "httpfs"}, - {"s3n://", "httpfs"}, {"gcs://", "httpfs"}, {"gs://", "httpfs"}, {"r2://", "httpfs"} // , {"azure://", "azure"} + {"http://", "httpfs"}, {"https://", "httpfs"}, {"s3://", "httpfs"}, {"s3a://", "httpfs"}, {"s3n://", "httpfs"}, + {"gcs://", "httpfs"}, {"gs://", "httpfs"}, {"r2://", "httpfs"} + // {"azure://", "azure"} }; // END_OF_EXTENSION_FILE_PREFIXES // Note: these are currently hardcoded in scripts/generate_extensions_function.py @@ -306,12 +330,8 @@ static constexpr ExtensionEntry EXTENSION_SECRET_PROVIDERS[] = { {"azure/config", "azure"}, {"azure/credential_chain", "azure"}}; // EXTENSION_SECRET_PROVIDERS static constexpr const char *AUTOLOADABLE_EXTENSIONS[] = { - // "azure", - "arrow", "aws", "autocomplete", "excel", "fts", "httpfs", - // "inet", - // "icu", - "json", "parquet", "postgres_scanner", - // "spatial", TODO: table function isnt always autoloaded so test fails - "sqlsmith", "sqlite_scanner", "tpcds", "tpch"}; // END_OF_AUTOLOADABLE_EXTENSIONS + "aws", "azure", "autocomplete", "excel", "fts", "httpfs", "inet", + "icu", "json", "parquet", "sqlite_scanner", "sqlsmith", "postgres_scanner", "tpcds", + "tpch"}; // END_OF_AUTOLOADABLE_EXTENSIONS } // namespace duckdb diff --git a/src/include/duckdb/main/extension_helper.hpp b/src/include/duckdb/main/extension_helper.hpp index 2fc2d502987d..e1e6a3675f96 100644 --- a/src/include/duckdb/main/extension_helper.hpp +++ b/src/include/duckdb/main/extension_helper.hpp @@ -87,6 +87,22 @@ class ExtensionHelper { static string GetExtensionName(const string &extension); static bool IsFullPath(const string &extension); + //! Lookup a name + type in an ExtensionFunctionEntry list + template + static vector> + FindExtensionInFunctionEntries(const string &name, const ExtensionFunctionEntry (&entries)[N]) { + auto lcase = StringUtil::Lower(name); + + vector> result; + for (idx_t i = 0; i < N; i++) { + auto &element = entries[i]; + if (element.name == lcase) { + result.push_back(make_pair(element.extension, element.type)); + } + } + return result; + } + //! Lookup a name in an ExtensionEntry list template static string FindExtensionInEntries(const string &name, const ExtensionEntry (&entries)[N]) { diff --git a/src/include/duckdb/main/relation.hpp b/src/include/duckdb/main/relation.hpp index 89a66d0284f5..7d1798712975 100644 --- a/src/include/duckdb/main/relation.hpp +++ b/src/include/duckdb/main/relation.hpp @@ -180,7 +180,7 @@ class Relation : public std::enable_shared_from_this { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/main/relation/read_csv_relation.hpp b/src/include/duckdb/main/relation/read_csv_relation.hpp index c4d8a5917403..0590cf6a944d 100644 --- a/src/include/duckdb/main/relation/read_csv_relation.hpp +++ b/src/include/duckdb/main/relation/read_csv_relation.hpp @@ -8,7 +8,7 @@ #pragma once -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/main/relation/table_function_relation.hpp" #include "duckdb/common/shared_ptr.hpp" #include "duckdb/common/case_insensitive_map.hpp" diff --git a/src/include/duckdb/main/relation/table_function_relation.hpp b/src/include/duckdb/main/relation/table_function_relation.hpp index 4dce6d951fe9..394e92ba716b 100644 --- a/src/include/duckdb/main/relation/table_function_relation.hpp +++ b/src/include/duckdb/main/relation/table_function_relation.hpp @@ -20,6 +20,8 @@ class TableFunctionRelation : public Relation { TableFunctionRelation(const std::shared_ptr &context, string name, vector parameters, shared_ptr input_relation_p = nullptr, bool auto_init = true); + ~TableFunctionRelation() override { + } string name; vector parameters; diff --git a/src/include/duckdb/optimizer/join_order/relation_manager.hpp b/src/include/duckdb/optimizer/join_order/relation_manager.hpp index adaf487f0491..1a607f5e46d3 100644 --- a/src/include/duckdb/optimizer/join_order/relation_manager.hpp +++ b/src/include/duckdb/optimizer/join_order/relation_manager.hpp @@ -55,7 +55,8 @@ class RelationManager { bool ExtractBindings(Expression &expression, unordered_set &bindings); void AddRelation(LogicalOperator &op, optional_ptr parent, const RelationStats &stats); - void AddAggregateRelation(LogicalOperator &op, optional_ptr parent, const RelationStats &stats); + void AddAggregateOrWindowRelation(LogicalOperator &op, optional_ptr parent, + const RelationStats &stats, LogicalOperatorType op_type); vector> GetRelations(); const vector GetRelationStats(); diff --git a/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp b/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp index 0de9a95d749e..1b757e78cb15 100644 --- a/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +++ b/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp @@ -17,6 +17,8 @@ class OrderedAggregateOptimizer : public Rule { public: explicit OrderedAggregateOptimizer(ExpressionRewriter &rewriter); + static unique_ptr Apply(ClientContext &context, BoundAggregateExpression &aggr, + vector> &groups, bool &changes_made); unique_ptr Apply(LogicalOperator &op, vector> &bindings, bool &changes_made, bool is_root) override; }; diff --git a/src/include/duckdb/parallel/concurrentqueue.hpp b/src/include/duckdb/parallel/concurrentqueue.hpp index b83896b4d3fe..7c277ac49983 100644 --- a/src/include/duckdb/parallel/concurrentqueue.hpp +++ b/src/include/duckdb/parallel/concurrentqueue.hpp @@ -42,24 +42,24 @@ struct ProducerToken { template class ConcurrentQueue { private: - //! The queue + //! The standard library queue. std::queue> q; public: - //! Constructor + //! Default constructor. ConcurrentQueue() = default; - //! Constructor + //! Constructor reserving capacity. explicit ConcurrentQueue(size_t capacity) { q.reserve(capacity); } - //! Enqueue item + //! Enqueue an item. template bool enqueue(U &&item) { q.push(std::forward(item)); return true; } - //! Try to dequeue an item + //! Try to dequeue an item. bool try_dequeue(T &item) { if (q.empty()) { return false; @@ -68,6 +68,22 @@ class ConcurrentQueue { q.pop(); return true; } + //! Get the size of the queue. + size_t size_approx() const { + return q.size(); + } + //! Dequeues several elements from the queue. + //! Returns the number of elements dequeued. + template + size_t try_dequeue_bulk(It itemFirst, size_t max) { + for (size_t i = 0; i < max; i++) { + if (!try_dequeue(*itemFirst)) { + return i; + } + itemFirst++; + } + return max; + } }; } // namespace duckdb_moodycamel diff --git a/src/include/duckdb/parallel/event.hpp b/src/include/duckdb/parallel/event.hpp index 354012020d58..89a108d98a98 100644 --- a/src/include/duckdb/parallel/event.hpp +++ b/src/include/duckdb/parallel/event.hpp @@ -54,7 +54,7 @@ class Event : public std::enable_shared_from_this { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/parallel/executor_task.hpp b/src/include/duckdb/parallel/executor_task.hpp new file mode 100644 index 000000000000..b6d22701722f --- /dev/null +++ b/src/include/duckdb/parallel/executor_task.hpp @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/parallel/executor_task.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/parallel/task.hpp" +#include "duckdb/parallel/event.hpp" + +namespace duckdb { + +//! Execute a task within an executor, including exception handling +//! This should be used within queries +class ExecutorTask : public Task { +public: + ExecutorTask(Executor &executor, shared_ptr event); + ExecutorTask(ClientContext &context, shared_ptr event); + virtual ~ExecutorTask(); + +public: + void Deschedule() override; + void Reschedule() override; + +public: + Executor &executor; + shared_ptr event; + +public: + virtual TaskExecutionResult ExecuteTask(TaskExecutionMode mode) = 0; + TaskExecutionResult Execute(TaskExecutionMode mode) override; +}; + +} // namespace duckdb diff --git a/src/include/duckdb/parallel/interrupt.hpp b/src/include/duckdb/parallel/interrupt.hpp index 5805e158ac80..a9163ea4a12f 100644 --- a/src/include/duckdb/parallel/interrupt.hpp +++ b/src/include/duckdb/parallel/interrupt.hpp @@ -1,7 +1,7 @@ //===----------------------------------------------------------------------===// // DuckDB // -// src/include/duckdb/parallel/interrupt.hpp +// duckdb/parallel/interrupt.hpp // // //===----------------------------------------------------------------------===// diff --git a/src/include/duckdb/parallel/pipeline.hpp b/src/include/duckdb/parallel/pipeline.hpp index ca60992eb41d..28781200abb8 100644 --- a/src/include/duckdb/parallel/pipeline.hpp +++ b/src/include/duckdb/parallel/pipeline.hpp @@ -15,6 +15,7 @@ #include "duckdb/function/table_function.hpp" #include "duckdb/parallel/task_scheduler.hpp" #include "duckdb/common/reference_map.hpp" +#include "duckdb/parallel/executor_task.hpp" namespace duckdb { @@ -31,7 +32,6 @@ class PipelineTask : public ExecutorTask { explicit PipelineTask(Pipeline &pipeline_p, shared_ptr event_p); Pipeline &pipeline; - shared_ptr event; unique_ptr pipeline_executor; public: diff --git a/src/include/duckdb/parallel/task.hpp b/src/include/duckdb/parallel/task.hpp index 25a85b710346..2deadcbe3bad 100644 --- a/src/include/duckdb/parallel/task.hpp +++ b/src/include/duckdb/parallel/task.hpp @@ -52,24 +52,4 @@ class Task : public std::enable_shared_from_this { } }; -//! Execute a task within an executor, including exception handling -//! This should be used within queries -class ExecutorTask : public Task { -public: - ExecutorTask(Executor &executor); - ExecutorTask(ClientContext &context); - virtual ~ExecutorTask(); - -public: - void Deschedule() override; - void Reschedule() override; - -public: - Executor &executor; - -public: - virtual TaskExecutionResult ExecuteTask(TaskExecutionMode mode) = 0; - TaskExecutionResult Execute(TaskExecutionMode mode) override; -}; - } // namespace duckdb diff --git a/src/include/duckdb/parser/parsed_data/alter_info.hpp b/src/include/duckdb/parser/parsed_data/alter_info.hpp index 11053374f17b..a2f13da220ac 100644 --- a/src/include/duckdb/parser/parsed_data/alter_info.hpp +++ b/src/include/duckdb/parser/parsed_data/alter_info.hpp @@ -23,7 +23,8 @@ enum class AlterType : uint8_t { CHANGE_OWNERSHIP = 4, ALTER_SCALAR_FUNCTION = 5, ALTER_TABLE_FUNCTION = 6, - SET_COMMENT = 7 + SET_COMMENT = 7, + SET_COLUMN_COMMENT = 8 }; struct AlterEntryData { diff --git a/src/include/duckdb/parser/parsed_data/alter_table_info.hpp b/src/include/duckdb/parser/parsed_data/alter_table_info.hpp index 7fcbac233f1b..9da19c70e3ac 100644 --- a/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +++ b/src/include/duckdb/parser/parsed_data/alter_table_info.hpp @@ -207,30 +207,6 @@ struct ChangeColumnTypeInfo : public AlterTableInfo { ChangeColumnTypeInfo(); }; -//===--------------------------------------------------------------------===// -// SetColumnCommentInfo -//===--------------------------------------------------------------------===// -struct SetColumnCommentInfo : public AlterTableInfo { - SetColumnCommentInfo(AlterEntryData data, string column_name, Value comment_value); - ~SetColumnCommentInfo() override; - - //! The column name to alter - string column_name; - //! The target type of the column - Value comment; - -public: - unique_ptr Copy() const override; - void Serialize(Serializer &serializer) const override; - static unique_ptr Deserialize(Deserializer &deserializer); - - string GetColumnName() const override { - return column_name; - }; - - explicit SetColumnCommentInfo(); -}; - //===--------------------------------------------------------------------===// // SetDefaultInfo //===--------------------------------------------------------------------===// diff --git a/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp b/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp new file mode 100644 index 000000000000..b13aaacc4740 --- /dev/null +++ b/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp @@ -0,0 +1,46 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/parser/parsed_data/comment_on_column_info.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/common/enums/catalog_type.hpp" +#include "duckdb/common/types/value.hpp" +#include "duckdb/parser/parsed_data/alter_info.hpp" +#include "duckdb/parser/qualified_name.hpp" + +namespace duckdb { +class ClientContext; +class CatalogEntry; + +struct SetColumnCommentInfo : public AlterInfo { +public: + static constexpr const ParseInfoType TYPE = ParseInfoType::COMMENT_ON_COLUMN_INFO; + +public: + SetColumnCommentInfo(); + SetColumnCommentInfo(string catalog, string schema, string name, string column_name, Value comment_value, + OnEntryNotFound if_not_found); + + //! The resolved Catalog Type + CatalogType catalog_entry_type; + + //! name of the column to comment on + string column_name; + //! The comment, can be NULL or a string + Value comment_value; + +public: + optional_ptr TryResolveCatalogEntry(ClientContext &context); + unique_ptr Copy() const override; + CatalogType GetCatalogType() const override; + + void Serialize(Serializer &serializer) const override; + static unique_ptr Deserialize(Deserializer &deserializer); +}; + +} // namespace duckdb diff --git a/src/include/duckdb/parser/parsed_data/comment_on_info.hpp b/src/include/duckdb/parser/parsed_data/comment_on_info.hpp deleted file mode 100644 index c8093be7c888..000000000000 --- a/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +++ /dev/null @@ -1,45 +0,0 @@ -//===----------------------------------------------------------------------===// -// DuckDB -// -// duckdb/parser/parsed_data/comment_on_info.hpp -// -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include "duckdb/common/enums/catalog_type.hpp" -#include "duckdb/common/types/value.hpp" -#include "duckdb/parser/parsed_data/parse_info.hpp" -#include "duckdb/parser/qualified_name.hpp" - -namespace duckdb { - -struct CommentOnInfo : public ParseInfo { -public: - static constexpr const ParseInfoType TYPE = ParseInfoType::COMMENT_ON_INFO; - -public: - CommentOnInfo(); - - //! Catalog type to comment on - CatalogType type; - - //! The catalog name of the entry to comment on - string catalog; - //! The schema name of the entry to comment on - string schema; - //! The name of the entry to comment on - string name; - - //! The comment, can be NULL or a string - Value comment; - -public: - unique_ptr Copy() const; - - void Serialize(Serializer &serializer) const override; - static unique_ptr Deserialize(Deserializer &deserializer); -}; - -} // namespace duckdb diff --git a/src/include/duckdb/parser/parsed_data/create_view_info.hpp b/src/include/duckdb/parser/parsed_data/create_view_info.hpp index a6a4c39b4a07..3b54f9023b86 100644 --- a/src/include/duckdb/parser/parsed_data/create_view_info.hpp +++ b/src/include/duckdb/parser/parsed_data/create_view_info.hpp @@ -29,6 +29,8 @@ struct CreateViewInfo : public CreateInfo { vector types; //! Names of the query vector names; + //! Comments on columns of the query. Note: vector can be empty when no comments are set + vector column_comments; //! The SelectStatement of the view unique_ptr query; diff --git a/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp b/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp index 83a5834ee409..0dfd48042a74 100644 --- a/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +++ b/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp @@ -32,7 +32,7 @@ struct ExtraDropInfo { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } diff --git a/src/include/duckdb/parser/parsed_data/parse_info.hpp b/src/include/duckdb/parser/parsed_data/parse_info.hpp index c99297adfdf5..16bb9dd9f3b4 100644 --- a/src/include/duckdb/parser/parsed_data/parse_info.hpp +++ b/src/include/duckdb/parser/parsed_data/parse_info.hpp @@ -26,7 +26,8 @@ enum class ParseInfoType : uint8_t { SHOW_SELECT_INFO, TRANSACTION_INFO, VACUUM_INFO, - COMMENT_ON_INFO + COMMENT_ON_INFO, + COMMENT_ON_COLUMN_INFO }; struct ParseInfo { @@ -40,7 +41,7 @@ struct ParseInfo { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } diff --git a/src/include/duckdb/parser/tableref/pivotref.hpp b/src/include/duckdb/parser/tableref/pivotref.hpp index b4a5421f3f75..0d521bede7fc 100644 --- a/src/include/duckdb/parser/tableref/pivotref.hpp +++ b/src/include/duckdb/parser/tableref/pivotref.hpp @@ -14,10 +14,10 @@ namespace duckdb { struct PivotColumnEntry { - //! The set of values to match on + //! The set of values to match on (PIVOT only) vector values; - //! The star expression (UNPIVOT only) - unique_ptr star_expr; + //! The expression (UNPIVOT only) + unique_ptr expr; //! The alias of the pivot column entry string alias; diff --git a/src/include/duckdb/parser/transformer.hpp b/src/include/duckdb/parser/transformer.hpp index 28cdf40bfee2..2657eb2d39cc 100644 --- a/src/include/duckdb/parser/transformer.hpp +++ b/src/include/duckdb/parser/transformer.hpp @@ -181,9 +181,9 @@ class Transformer { unique_ptr TransformDeallocate(duckdb_libpgquery::PGDeallocateStmt &stmt); unique_ptr TransformPivotStatement(duckdb_libpgquery::PGSelectStmt &select); unique_ptr CreatePivotStatement(unique_ptr statement); - PivotColumn TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot); - vector TransformPivotList(duckdb_libpgquery::PGList &list); - static void TransformPivotInList(unique_ptr &expr, PivotColumnEntry &entry, + PivotColumn TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot, bool is_pivot); + vector TransformPivotList(duckdb_libpgquery::PGList &list, bool is_pivot); + static bool TransformPivotInList(unique_ptr &expr, PivotColumnEntry &entry, bool root_entry = true); //===--------------------------------------------------------------------===// diff --git a/src/include/duckdb/planner/binder.hpp b/src/include/duckdb/planner/binder.hpp index 8421c9017d2f..d7b750bf20d3 100644 --- a/src/include/duckdb/planner/binder.hpp +++ b/src/include/duckdb/planner/binder.hpp @@ -49,6 +49,9 @@ struct BoundCreateFunctionInfo; struct CommonTableExpressionInfo; struct BoundParameterMap; struct BoundPragmaInfo; +struct BoundLimitNode; +struct PivotColumnEntry; +struct UnpivotEntry; enum class BindingMode : uint8_t { STANDARD_BINDING, EXTRACT_NAMES }; @@ -203,10 +206,12 @@ class Binder : public std::enable_shared_from_this { unordered_set table_names; //! The set of bound views reference_set_t bound_views; + //! Unnamed subquery index + idx_t unnamed_subquery_index = 1; private: //! Get the root binder (binder with no parent) - Binder *GetRootBinder(); + Binder &GetRootBinder(); //! Determine the depth of the binder idx_t GetBinderDepth() const; //! Bind the expressions of generated columns to check for errors @@ -214,9 +219,8 @@ class Binder : public std::enable_shared_from_this { //! Bind the default values of the columns of a table void BindDefaultValues(const ColumnList &columns, vector> &bound_defaults); //! Bind a limit value (LIMIT or OFFSET) - unique_ptr BindDelimiter(ClientContext &context, OrderBinder &order_binder, - unique_ptr delimiter, const LogicalType &type, - Value &delimiter_value); + BoundLimitNode BindLimitValue(OrderBinder &order_binder, unique_ptr limit_val, bool is_percentage, + bool is_offset); //! Move correlated expressions from the child binder to this binder void MoveCorrelatedExpressions(Binder &other); @@ -271,6 +275,7 @@ class Binder : public std::enable_shared_from_this { unique_ptr CreatePlan(BoundSetOperationNode &node); unique_ptr CreatePlan(BoundQueryNode &node); + unique_ptr BindJoin(Binder &parent, TableRef &ref); unique_ptr Bind(BaseTableRef &ref); unique_ptr Bind(JoinRef &ref); unique_ptr Bind(SubqueryRef &ref, optional_ptr cte = nullptr); @@ -285,6 +290,8 @@ class Binder : public std::enable_shared_from_this { vector> all_columns, unique_ptr &where_clause); unique_ptr BindBoundPivot(PivotRef &expr); + void ExtractUnpivotEntries(Binder &child_binder, PivotColumnEntry &entry, vector &unpivot_entries); + void ExtractUnpivotColumnName(ParsedExpression &expr, vector &result); bool BindTableFunctionParameters(TableFunctionCatalogEntry &table_function, vector> &expressions, vector &arguments, diff --git a/src/include/duckdb/planner/bound_result_modifier.hpp b/src/include/duckdb/planner/bound_result_modifier.hpp index 31d3d612beb4..6d2b4935f6f2 100644 --- a/src/include/duckdb/planner/bound_result_modifier.hpp +++ b/src/include/duckdb/planner/bound_result_modifier.hpp @@ -65,6 +65,63 @@ struct BoundOrderByNode { static BoundOrderByNode Deserialize(Deserializer &deserializer); }; +enum class LimitNodeType : uint8_t { + UNSET = 0, + CONSTANT_VALUE = 1, + CONSTANT_PERCENTAGE = 2, + EXPRESSION_VALUE = 3, + EXPRESSION_PERCENTAGE = 4 +}; + +struct BoundLimitNode { +public: + BoundLimitNode(); + BoundLimitNode(LimitNodeType type, idx_t constant_integer, double constant_percentage, + unique_ptr expression); + +public: + static BoundLimitNode ConstantValue(int64_t value); + static BoundLimitNode ConstantPercentage(double percentage); + static BoundLimitNode ExpressionValue(unique_ptr expression); + static BoundLimitNode ExpressionPercentage(unique_ptr expression); + + LimitNodeType Type() const { + return type; + } + + //! Returns the constant value, only valid if Type() == CONSTANT_VALUE + idx_t GetConstantValue() const; + //! Returns the constant percentage, only valid if Type() == CONSTANT_PERCENTAGE + double GetConstantPercentage() const; + //! Returns the constant percentage, only valid if Type() == EXPRESSION_VALUE + const Expression &GetValueExpression() const; + //! Returns the constant percentage, only valid if Type() == EXPRESSION_PERCENTAGE + const Expression &GetPercentageExpression() const; + + //! Returns a pointer to the expression - should only be used for limit-agnostic optimizations. + //! Prefer using the methods above in other scenarios. + unique_ptr &GetExpression() { + return expression; + } + + void Serialize(Serializer &serializer) const; + static BoundLimitNode Deserialize(Deserializer &deserializer); + +private: + LimitNodeType type = LimitNodeType::UNSET; + //! Integer value, if value is a constant non-percentage + idx_t constant_integer = 0; + //! Percentage value, if value is a constant percentage + double constant_percentage = -1; + //! Expression in case node is not constant + unique_ptr expression; + +private: + explicit BoundLimitNode(int64_t constant_value); + explicit BoundLimitNode(double percentage_value); + explicit BoundLimitNode(unique_ptr expression, bool is_percentage); +}; + class BoundLimitModifier : public BoundResultModifier { public: static constexpr const ResultModifierType TYPE = ResultModifierType::LIMIT_MODIFIER; @@ -73,13 +130,9 @@ class BoundLimitModifier : public BoundResultModifier { BoundLimitModifier(); //! LIMIT - int64_t limit_val = NumericLimits::Maximum(); + BoundLimitNode limit_val; //! OFFSET - int64_t offset_val = 0; - //! Expression in case limit is not constant - unique_ptr limit; - //! Expression in case limit is not constant - unique_ptr offset; + BoundLimitNode offset_val; }; class BoundOrderModifier : public BoundResultModifier { @@ -119,21 +172,4 @@ class BoundDistinctModifier : public BoundResultModifier { vector> target_distincts; }; -class BoundLimitPercentModifier : public BoundResultModifier { -public: - static constexpr const ResultModifierType TYPE = ResultModifierType::LIMIT_PERCENT_MODIFIER; - -public: - BoundLimitPercentModifier(); - - //! LIMIT % - double limit_percent = 100.0; - //! OFFSET - int64_t offset_val = 0; - //! Expression in case limit is not constant - unique_ptr limit; - //! Expression in case limit is not constant - unique_ptr offset; -}; - } // namespace duckdb diff --git a/src/include/duckdb/planner/expression.hpp b/src/include/duckdb/planner/expression.hpp index 3cfa825d8475..7598986c3470 100644 --- a/src/include/duckdb/planner/expression.hpp +++ b/src/include/duckdb/planner/expression.hpp @@ -64,6 +64,7 @@ class Expression : public BaseExpression { expression_class = other.expression_class; alias = other.alias; return_type = other.return_type; + query_location = other.query_location; } }; diff --git a/src/include/duckdb/planner/expression_iterator.hpp b/src/include/duckdb/planner/expression_iterator.hpp index bf3b204ac1a0..c07f60e1064e 100644 --- a/src/include/duckdb/planner/expression_iterator.hpp +++ b/src/include/duckdb/planner/expression_iterator.hpp @@ -27,10 +27,18 @@ class ExpressionIterator { static void EnumerateExpression(unique_ptr &expr, const std::function &callback); +}; - static void EnumerateTableRefChildren(BoundTableRef &ref, const std::function &callback); - static void EnumerateQueryNodeChildren(BoundQueryNode &node, - const std::function &callback); +class BoundNodeVisitor { +public: + virtual void VisitBoundQueryNode(BoundQueryNode &op); + virtual void VisitBoundTableRef(BoundTableRef &ref); + virtual void VisitExpression(unique_ptr &expression); + +protected: + // The VisitExpressionChildren method is called at the end of every call to VisitExpression to recursively visit all + // expressions in an expression tree. It can be overloaded to prevent automatically visiting the entire tree. + virtual void VisitExpressionChildren(Expression &expression); }; } // namespace duckdb diff --git a/src/include/duckdb/planner/operator/list.hpp b/src/include/duckdb/planner/operator/list.hpp index c0dfd0c8aa54..199f0a65234f 100644 --- a/src/include/duckdb/planner/operator/list.hpp +++ b/src/include/duckdb/planner/operator/list.hpp @@ -25,7 +25,6 @@ #include "duckdb/planner/operator/logical_insert.hpp" #include "duckdb/planner/operator/logical_join.hpp" #include "duckdb/planner/operator/logical_limit.hpp" -#include "duckdb/planner/operator/logical_limit_percent.hpp" #include "duckdb/planner/operator/logical_materialized_cte.hpp" #include "duckdb/planner/operator/logical_order.hpp" #include "duckdb/planner/operator/logical_pivot.hpp" diff --git a/src/include/duckdb/planner/operator/logical_insert.hpp b/src/include/duckdb/planner/operator/logical_insert.hpp index 615d4aa19291..0c31fd6e4bd4 100644 --- a/src/include/duckdb/planner/operator/logical_insert.hpp +++ b/src/include/duckdb/planner/operator/logical_insert.hpp @@ -53,7 +53,7 @@ class LogicalInsert : public LogicalOperator { // The types of the columns targeted by the DO UPDATE SET expressions vector set_types; // The table_index referring to the column references qualified with 'excluded' - idx_t excluded_table_index; + idx_t excluded_table_index = 0; // The columns to fetch from the 'destination' table vector columns_to_fetch; // The columns to fetch from the 'source' table diff --git a/src/include/duckdb/planner/operator/logical_limit.hpp b/src/include/duckdb/planner/operator/logical_limit.hpp index 1bec099d0ebc..a8becefec7ca 100644 --- a/src/include/duckdb/planner/operator/logical_limit.hpp +++ b/src/include/duckdb/planner/operator/logical_limit.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb/planner/logical_operator.hpp" +#include "duckdb/planner/bound_result_modifier.hpp" namespace duckdb { @@ -18,15 +19,10 @@ class LogicalLimit : public LogicalOperator { static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_LIMIT; public: - LogicalLimit(int64_t limit_val, int64_t offset_val, unique_ptr limit, unique_ptr offset); - - //! Limit and offset values in case they are constants, used in optimizations. - int64_t limit_val; - int64_t offset_val; - //! The maximum amount of elements to emit - unique_ptr limit; - //! The offset from the start to begin emitting elements - unique_ptr offset; + LogicalLimit(BoundLimitNode limit_val, BoundLimitNode offset_val); + + BoundLimitNode limit_val; + BoundLimitNode offset_val; public: vector GetColumnBindings() override; diff --git a/src/include/duckdb/planner/operator/logical_limit_percent.hpp b/src/include/duckdb/planner/operator/logical_limit_percent.hpp deleted file mode 100644 index da2c67105dd0..000000000000 --- a/src/include/duckdb/planner/operator/logical_limit_percent.hpp +++ /dev/null @@ -1,49 +0,0 @@ -//===----------------------------------------------------------------------===// -// DuckDB -// -// duckdb/planner/operator/logical_limit_percent.hpp -// -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include "duckdb/planner/logical_operator.hpp" - -namespace duckdb { - -//! LogicalLimitPercent represents a LIMIT PERCENT clause -class LogicalLimitPercent : public LogicalOperator { -public: - static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_LIMIT_PERCENT; - -public: - LogicalLimitPercent(double limit_percent, int64_t offset_val, unique_ptr limit, - unique_ptr offset) - : LogicalOperator(LogicalOperatorType::LOGICAL_LIMIT_PERCENT), limit_percent(limit_percent), - offset_val(offset_val), limit(std::move(limit)), offset(std::move(offset)) { - } - - //! Limit percent and offset values in case they are constants, used in optimizations. - double limit_percent; - int64_t offset_val; - //! The maximum amount of elements to emit - unique_ptr limit; - //! The offset from the start to begin emitting elements - unique_ptr offset; - -public: - vector GetColumnBindings() override { - return children[0]->GetColumnBindings(); - } - - void Serialize(Serializer &serializer) const override; - static unique_ptr Deserialize(Deserializer &deserializer); - idx_t EstimateCardinality(ClientContext &context) override; - -protected: - void ResolveTypes() override { - types = children[0]->types; - } -}; -} // namespace duckdb diff --git a/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp b/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp index 0de0597c0175..f69f63c848d9 100644 --- a/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +++ b/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp @@ -26,21 +26,6 @@ class RewriteCorrelatedExpressions : public LogicalOperatorVisitor { unique_ptr VisitReplace(BoundColumnRefExpression &expr, unique_ptr *expr_ptr) override; unique_ptr VisitReplace(BoundSubqueryExpression &expr, unique_ptr *expr_ptr) override; -private: - //! Helper class used to recursively rewrite correlated expressions within nested subqueries. - class RewriteCorrelatedRecursive { - public: - RewriteCorrelatedRecursive(BoundSubqueryExpression &parent, ColumnBinding base_binding, - column_binding_map_t &correlated_map); - void RewriteJoinRefRecursive(BoundTableRef &ref); - void RewriteCorrelatedSubquery(BoundSubqueryExpression &expr); - void RewriteCorrelatedExpressions(Expression &child); - - BoundSubqueryExpression &parent; - ColumnBinding base_binding; - column_binding_map_t &correlated_map; - }; - private: ColumnBinding base_binding; column_binding_map_t &correlated_map; diff --git a/src/include/duckdb/storage/arena_allocator.hpp b/src/include/duckdb/storage/arena_allocator.hpp index ef66702da8c6..444bfd2dfd95 100644 --- a/src/include/duckdb/storage/arena_allocator.hpp +++ b/src/include/duckdb/storage/arena_allocator.hpp @@ -46,7 +46,10 @@ class ArenaAllocator { DUCKDB_API ArenaChunk *GetTail(); DUCKDB_API bool IsEmpty() const; + //! Get the total *used* size (not cached) DUCKDB_API idx_t SizeInBytes() const; + //! Get the currently allocated size in bytes (cached, read from "allocated_size") + DUCKDB_API idx_t AllocationSize() const; //! Returns an "Allocator" wrapper for this arena allocator Allocator &GetAllocator() { @@ -61,6 +64,8 @@ class ArenaAllocator { ArenaChunk *tail; //! An allocator wrapper using this arena allocator Allocator arena_allocator; + //! The total allocated size + idx_t allocated_size = 0; }; } // namespace duckdb diff --git a/src/include/duckdb/storage/buffer/buffer_pool.hpp b/src/include/duckdb/storage/buffer/buffer_pool.hpp index a75b1a2da344..9b9b3fd78d5f 100644 --- a/src/include/duckdb/storage/buffer/buffer_pool.hpp +++ b/src/include/duckdb/storage/buffer/buffer_pool.hpp @@ -29,7 +29,6 @@ struct BufferEvictionNode { idx_t timestamp; bool CanUnload(BlockHandle &handle_p); - shared_ptr TryGetBlockHandle(); }; @@ -73,9 +72,24 @@ class BufferPool { virtual EvictionResult EvictBlocks(MemoryTag tag, idx_t extra_memory, idx_t memory_limit, unique_ptr *buffer = nullptr); - //! Garbage collect eviction queue + //! Tries to dequeue an element from the eviction queue, but only after acquiring the purge queue lock. + bool TryDequeueWithLock(BufferEvictionNode &node); + //! Bulk purge dead nodes from the eviction queue. Then, enqueue those that are still alive. + void PurgeIteration(const idx_t purge_size); + //! Garbage collect dead nodes in the eviction queue. void PurgeQueue(); - void AddToEvictionQueue(shared_ptr &handle); + //! Add a buffer handle to the eviction queue. Returns true, if the queue is + //! ready to be purged, and false otherwise. + bool AddToEvictionQueue(shared_ptr &handle); + + //! Increment the dead node counter in the purge queue. + inline void IncrementDeadNodes() { + total_dead_nodes++; + } + //! Decrement the dead node counter in the purge queue. + inline void DecrementDeadNodes() { + total_dead_nodes--; + } protected: //! The lock for changing the memory limit @@ -86,12 +100,33 @@ class BufferPool { atomic maximum_memory; //! Eviction queue unique_ptr queue; - //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue. - atomic queue_insertions; //! Memory manager for concurrently used temporary memory, e.g., for physical operators unique_ptr temporary_memory_manager; //! Memory usage per tag atomic memory_usage_per_tag[MEMORY_TAG_COUNT]; + + //! We trigger a purge of the eviction queue every INSERT_INTERVAL insertions + constexpr static idx_t INSERT_INTERVAL = 4096; + //! We multiply the base purge size by this value. + constexpr static idx_t PURGE_SIZE_MULTIPLIER = 2; + //! We multiply the purge size by this value to determine early-outs. This is the minimum queue size. + //! We never purge below this point. + constexpr static idx_t EARLY_OUT_MULTIPLIER = 4; + //! We multiply the approximate alive nodes by this value to test whether our total dead nodes + //! exceed their allowed ratio. Must be greater than 1. + constexpr static idx_t ALIVE_NODE_MULTIPLIER = 4; + + //! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue. + atomic evict_queue_insertions; + //! Total dead nodes in the eviction queue. There are two scenarios in which a node dies: (1) we destroy its block + //! handle, or (2) we insert a newer version into the eviction queue. + atomic total_dead_nodes; + //! Locked, if a queue purge is currently active or we're trying to forcefully evict a node. + //! Only lets a single thread enter the purge phase. + mutex purge_lock; + + //! A pre-allocated vector of eviction nodes. We reuse this to keep the allocation overhead of purges small. + vector purge_nodes; }; } // namespace duckdb diff --git a/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp b/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp index 49eb80815741..d71189ded9a3 100644 --- a/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +++ b/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp @@ -306,7 +306,7 @@ struct AlpCompression { state.encoded_integers[i] = encoded_value; //! We detect exceptions using a predicated comparison auto is_exception = (decoded_value != actual_value); - state.exceptions_positions[exceptions_idx] = i; + state.exceptions_positions[exceptions_idx] = UnsafeNumericCast(i); exceptions_idx += is_exception; } diff --git a/src/include/duckdb/storage/compression/alp/alp_analyze.hpp b/src/include/duckdb/storage/compression/alp/alp_analyze.hpp index 0288a9bd42c4..f05479bc6e54 100644 --- a/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +++ b/src/include/duckdb/storage/compression/alp/alp_analyze.hpp @@ -115,7 +115,7 @@ bool AlpAnalyze(AnalyzeState &state, Vector &input, idx_t count) { T value = data[idx]; //! We resolve null values with a predicated comparison bool is_null = !vdata.validity.RowIsValid(idx); - current_vector_null_positions[nulls_idx] = i; + current_vector_null_positions[nulls_idx] = UnsafeNumericCast(i); nulls_idx += is_null; current_vector_values[i] = value; } @@ -164,6 +164,10 @@ idx_t AlpFinalAnalyze(AnalyzeState &state) { // Flush last unfinished segment analyze_state.FlushSegment(); + if (compressed_values == 0) { + return DConstants::INVALID_INDEX; + } + // We estimate the size by taking into account the portion of the values we took const auto factor_of_sampling = analyze_state.total_values_count / compressed_values; const auto final_analyze_size = analyze_state.TotalUsedBytes() * factor_of_sampling; diff --git a/src/include/duckdb/storage/compression/alp/alp_compress.hpp b/src/include/duckdb/storage/compression/alp/alp_compress.hpp index 83b886207f34..3b2b91ea3335 100644 --- a/src/include/duckdb/storage/compression/alp/alp_compress.hpp +++ b/src/include/duckdb/storage/compression/alp/alp_compress.hpp @@ -141,7 +141,7 @@ struct AlpCompressionState : public CompressionState { Store(state.frame_of_reference, data_ptr); data_ptr += AlpConstants::FOR_SIZE; - Store(state.bit_width, data_ptr); + Store(UnsafeNumericCast(state.bit_width), data_ptr); data_ptr += AlpConstants::BIT_WIDTH_SIZE; memcpy((void *)data_ptr, (void *)state.values_encoded, state.bp_size); @@ -166,7 +166,7 @@ struct AlpCompressionState : public CompressionState { // Write pointer to the vector data (metadata) metadata_ptr -= sizeof(uint32_t); Store(next_vector_byte_index_start, metadata_ptr); - next_vector_byte_index_start = UsedSpace(); + next_vector_byte_index_start = NumericCast(UsedSpace()); vectors_flushed++; vector_idx = 0; @@ -206,7 +206,7 @@ struct AlpCompressionState : public CompressionState { } // Store the offset to the end of metadata (to be used as a backwards pointer in decoding) - Store(total_segment_size, dataptr); + Store(NumericCast(total_segment_size), dataptr); handle.Destroy(); checkpoint_state.FlushSegment(std::move(current_segment), total_segment_size); @@ -244,7 +244,7 @@ struct AlpCompressionState : public CompressionState { T value = data[idx]; bool is_null = !vdata.validity.RowIsValid(idx); //! We resolve null values with a predicated comparison - vector_null_positions[nulls_idx] = vector_idx + i; + vector_null_positions[nulls_idx] = UnsafeNumericCast(vector_idx + i); nulls_idx += is_null; input_vector[vector_idx + i] = value; } diff --git a/src/include/duckdb/storage/compression/alp/alp_utils.hpp b/src/include/duckdb/storage/compression/alp/alp_utils.hpp index dd6b566ada86..1b77e219e489 100644 --- a/src/include/duckdb/storage/compression/alp/alp_utils.hpp +++ b/src/include/duckdb/storage/compression/alp/alp_utils.hpp @@ -37,7 +37,8 @@ class AlpUtils { public: static AlpSamplingParameters GetSamplingParameters(idx_t current_vector_n_values) { - uint32_t n_lookup_values = MinValue(current_vector_n_values, (idx_t)AlpConstants::ALP_VECTOR_SIZE); + auto n_lookup_values = + NumericCast(MinValue(current_vector_n_values, (idx_t)AlpConstants::ALP_VECTOR_SIZE)); //! We sample equidistant values within a vector; to do this we jump a fixed number of values uint32_t n_sampled_increments = MaxValue(1, (int32_t)std::ceil((double)n_lookup_values / AlpConstants::SAMPLES_PER_VECTOR)); diff --git a/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp b/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp index cee6e20bd557..625e69cfe882 100644 --- a/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +++ b/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp @@ -16,6 +16,7 @@ #include "duckdb/common/pair.hpp" #include "duckdb/common/unordered_map.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include @@ -109,7 +110,8 @@ struct AlpRDCompression { if (PERSIST_DICT) { for (idx_t dict_idx = 0; dict_idx < actual_dictionary_size; dict_idx++) { //! The dict keys are mapped to the left part themselves - state.left_parts_dict[dict_idx] = left_parts_sorted_repetitions[dict_idx].hash; + state.left_parts_dict[dict_idx] = + UnsafeNumericCast(left_parts_sorted_repetitions[dict_idx].hash); state.left_parts_dict_map.insert({state.left_parts_dict[dict_idx], dict_idx}); } //! Pararelly we store a map of the dictionary to quickly resolve exceptions during encoding @@ -118,24 +120,24 @@ struct AlpRDCompression { } state.left_bit_width = left_bit_width; state.right_bit_width = right_bit_width; - state.actual_dictionary_size = actual_dictionary_size; + state.actual_dictionary_size = UnsafeNumericCast(actual_dictionary_size); D_ASSERT(state.left_bit_width > 0 && state.right_bit_width > 0 && state.left_bit_width <= AlpRDConstants::MAX_DICTIONARY_BIT_WIDTH && state.actual_dictionary_size <= AlpRDConstants::MAX_DICTIONARY_SIZE); } - double estimated_size = - EstimateCompressionSize(right_bit_width, left_bit_width, exceptions_count, values.size()); + double estimated_size = EstimateCompressionSize(right_bit_width, left_bit_width, + UnsafeNumericCast(exceptions_count), values.size()); return estimated_size; } static double FindBestDictionary(const vector &values, State &state) { - uint8_t right_bit_width; + uint8_t right_bit_width = 0; double best_dict_size = NumericLimits::Maximum(); //! Finding the best position to CUT the values for (idx_t i = 1; i <= AlpRDConstants::CUTTING_LIMIT; i++) { - uint8_t candidate_right_bit_width = EXACT_TYPE_BITSIZE - i; + uint8_t candidate_right_bit_width = UnsafeNumericCast(EXACT_TYPE_BITSIZE - i); double estimated_size = BuildLeftPartsDictionary(values, candidate_right_bit_width, state); if (estimated_size <= best_dict_size) { right_bit_width = candidate_right_bit_width; @@ -156,7 +158,7 @@ struct AlpRDCompression { for (idx_t i = 0; i < n_values; i++) { EXACT_TYPE tmp = input_vector[i]; right_parts[i] = tmp & ((1ULL << state.right_bit_width) - 1); - left_parts[i] = (tmp >> state.right_bit_width); + left_parts[i] = UnsafeNumericCast(tmp >> state.right_bit_width); } // Dictionary encoding for left parts @@ -174,7 +176,7 @@ struct AlpRDCompression { //! Left parts not found in the dictionary are stored as exceptions if (dictionary_index >= state.actual_dictionary_size) { state.exceptions[state.exceptions_count] = dictionary_key; - state.exceptions_positions[state.exceptions_count] = i; + state.exceptions_positions[state.exceptions_count] = UnsafeNumericCast(i); state.exceptions_count++; } } diff --git a/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp b/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp index 6a2522ba63b4..7fa8e0bbc1c2 100644 --- a/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +++ b/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp @@ -14,6 +14,7 @@ #include "duckdb/storage/compression/alprd/alprd_constants.hpp" #include "duckdb/storage/compression/alp/alp_utils.hpp" #include "duckdb/storage/compression/alp/alp_constants.hpp" +#include "duckdb/common/numeric_utils.hpp" #include @@ -82,7 +83,7 @@ bool AlpRDAnalyze(AnalyzeState &state, Vector &input, idx_t count) { current_vector_sample[sample_idx] = value; //! We resolve null values with a predicated comparison bool is_null = !vdata.validity.RowIsValid(idx); - current_vector_null_positions[nulls_idx] = sample_idx; + current_vector_null_positions[nulls_idx] = UnsafeNumericCast(sample_idx); nulls_idx += is_null; sample_idx++; } @@ -108,6 +109,9 @@ bool AlpRDAnalyze(AnalyzeState &state, Vector &input, idx_t count) { template idx_t AlpRDFinalAnalyze(AnalyzeState &state) { auto &analyze_state = (AlpRDAnalyzeState &)state; + if (analyze_state.total_values_count == 0) { + return DConstants::INVALID_INDEX; + } double factor_of_sampling = 1 / ((double)analyze_state.rowgroup_sample.size() / analyze_state.total_values_count); // Finding which is the best dictionary for the sample diff --git a/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp b/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp index 23e74845fde5..ddcce6e33bb5 100644 --- a/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +++ b/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp @@ -168,7 +168,7 @@ struct AlpRDCompressionState : public CompressionState { // Write pointer to the vector data (metadata) metadata_ptr -= AlpRDConstants::METADATA_POINTER_SIZE; Store(next_vector_byte_index_start, metadata_ptr); - next_vector_byte_index_start = UsedSpace(); + next_vector_byte_index_start = NumericCast(UsedSpace()); vectors_flushed++; vector_idx = 0; @@ -208,7 +208,7 @@ struct AlpRDCompressionState : public CompressionState { } // Store the offset to the end of metadata (to be used as a backwards pointer in decoding) - Store(total_segment_size, dataptr); + Store(NumericCast(total_segment_size), dataptr); dataptr += AlpRDConstants::METADATA_POINTER_SIZE; // Store the right bw for the segment @@ -261,7 +261,7 @@ struct AlpRDCompressionState : public CompressionState { EXACT_TYPE value = Load(const_data_ptr_cast(&data[idx])); bool is_null = !vdata.validity.RowIsValid(idx); //! We resolve null values with a predicated comparison - vector_null_positions[nulls_idx] = vector_idx + i; + vector_null_positions[nulls_idx] = UnsafeNumericCast(vector_idx + i); nulls_idx += is_null; input_vector[vector_idx + i] = value; } diff --git a/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp b/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp index 65220f29ba92..57512f27be5f 100644 --- a/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp +++ b/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp @@ -9,6 +9,7 @@ #pragma once #include "duckdb.h" +#include "duckdb/common/numeric_utils.hpp" namespace duckdb { @@ -71,7 +72,7 @@ struct BitReader { } inline uint8_t InnerReadByte(const uint8_t &offset) { - uint8_t result = input[ByteIndex() + offset] << BitIndex() | + uint8_t result = static_cast(input[ByteIndex() + offset] << BitIndex()) | ((input[ByteIndex() + offset + 1] & REMAINDER_MASKS[8 + BitIndex()]) >> (8 - BitIndex())); return result; } @@ -114,30 +115,30 @@ struct BitReader { inline T ReadBytes(const uint8_t &remainder) { T result = 0; if (BYTES > 0) { - result = result << 8 | InnerReadByte(0); + result = UnsafeNumericCast(result << 8 | InnerReadByte(0)); } if (BYTES > 1) { - result = result << 8 | InnerReadByte(1); + result = UnsafeNumericCast(result << 8 | InnerReadByte(1)); } if (BYTES > 2) { - result = result << 8 | InnerReadByte(2); + result = UnsafeNumericCast(result << 8 | InnerReadByte(2)); } if (BYTES > 3) { - result = result << 8 | InnerReadByte(3); + result = UnsafeNumericCast(result << 8 | InnerReadByte(3)); } if (BYTES > 4) { - result = result << 8 | InnerReadByte(4); + result = UnsafeNumericCast(result << 8 | InnerReadByte(4)); } if (BYTES > 5) { - result = result << 8 | InnerReadByte(5); + result = UnsafeNumericCast(result << 8 | InnerReadByte(5)); } if (BYTES > 6) { - result = result << 8 | InnerReadByte(6); + result = UnsafeNumericCast(result << 8 | InnerReadByte(6)); } if (BYTES > 7) { - result = result << 8 | InnerReadByte(7); + result = UnsafeNumericCast(result << 8 | InnerReadByte(7)); } - result = result << remainder | InnerRead(remainder, BYTES); + result = UnsafeNumericCast(result << remainder | InnerRead(remainder, BYTES)); index += (BYTES << 3) + remainder; return result; } diff --git a/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp b/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp index 3f65918bf18a..f75571c60a23 100644 --- a/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp +++ b/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp @@ -8,12 +8,14 @@ #pragma once +#include "duckdb/common/numeric_utils.hpp" + namespace duckdb { template struct BitUtils { static constexpr R Mask(unsigned int const bits) { - return (((uint64_t)(bits < (sizeof(R) * 8))) << (bits & ((sizeof(R) * 8) - 1))) - 1U; + return UnsafeNumericCast((((uint64_t)(bits < (sizeof(R) * 8))) << (bits & ((sizeof(R) * 8) - 1))) - 1U); } }; diff --git a/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp b/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp index 50c3a123ae38..277e30b6aa10 100644 --- a/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp +++ b/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp @@ -257,7 +257,7 @@ struct Chimp128Decompression { case ChimpConstants::Flags::VALUE_IDENTICAL: { //! Value is identical to previous value auto index = state.input.template ReadValue(); - result = state.ring_buffer.Value(index); + result = UnsafeNumericCast(state.ring_buffer.Value(index)); break; } case ChimpConstants::Flags::TRAILING_EXCEEDS_THRESHOLD: { diff --git a/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp b/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp index 436de19a0122..88f174143f30 100644 --- a/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +++ b/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp @@ -10,6 +10,7 @@ #include "duckdb.h" #include "duckdb/common/helper.hpp" +#include "duckdb/common/numeric_utils.hpp" #ifdef DEBUG #include "duckdb/common/vector.hpp" #include "duckdb/common/assert.hpp" @@ -91,7 +92,8 @@ class LeadingZeroBuffer { public: #ifdef DEBUG uint8_t ExtractValue(uint32_t value, uint8_t index) { - return (value & LeadingZeroBufferConstants::MASKS[index]) >> LeadingZeroBufferConstants::SHIFTS[index]; + return NumericCast((value & LeadingZeroBufferConstants::MASKS[index]) >> + LeadingZeroBufferConstants::SHIFTS[index]); } #endif @@ -140,8 +142,8 @@ class LeadingZeroBuffer { const auto buffer_idx = BlockIndex(); auto const temp = Load(buffer + buffer_idx); - const uint8_t result = - (temp & LeadingZeroBufferConstants::MASKS[counter & 7]) >> LeadingZeroBufferConstants::SHIFTS[counter & 7]; + const uint8_t result = UnsafeNumericCast((temp & LeadingZeroBufferConstants::MASKS[counter & 7]) >> + LeadingZeroBufferConstants::SHIFTS[counter & 7]); counter++; return result; } diff --git a/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp b/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp index 206806a59a2f..8cc61817b53e 100644 --- a/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +++ b/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp @@ -12,6 +12,7 @@ #include "duckdb/storage/compression/chimp/algorithm/chimp_utils.hpp" #include "duckdb/common/limits.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/types/null_value.hpp" #include "duckdb/function/compression/compression.hpp" #include "duckdb/function/compression_function.hpp" @@ -210,7 +211,7 @@ struct ChimpScanState : public SegmentScanState { auto group_size = MinValue(segment_count - total_value_count, ChimpPrimitives::CHIMP_SEQUENCE_SIZE); // Reduce by one, because the first value of a group does not have a flag auto flag_count = group_size - 1; - uint16_t flag_byte_count = (AlignValue(flag_count) / 4); + uint16_t flag_byte_count = AlignValue(UnsafeNumericCast(flag_count)) / 4; // Load the flags metadata_ptr -= flag_byte_count; diff --git a/src/include/duckdb/storage/data_pointer.hpp b/src/include/duckdb/storage/data_pointer.hpp index c9f0bf38cf0c..c0c51df679aa 100644 --- a/src/include/duckdb/storage/data_pointer.hpp +++ b/src/include/duckdb/storage/data_pointer.hpp @@ -29,7 +29,7 @@ struct ColumnSegmentState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/storage/data_table.hpp b/src/include/duckdb/storage/data_table.hpp index 4c2e0d6b580c..c6ae98a9f24e 100644 --- a/src/include/duckdb/storage/data_table.hpp +++ b/src/include/duckdb/storage/data_table.hpp @@ -128,9 +128,11 @@ class DataTable { //! Fetches an append lock void AppendLock(TableAppendState &state); //! Begin appending structs to this table, obtaining necessary locks, etc - void InitializeAppend(DuckTransaction &transaction, TableAppendState &state, idx_t append_count); + void InitializeAppend(DuckTransaction &transaction, TableAppendState &state); //! Append a chunk to the table using the AppendState obtained from InitializeAppend void Append(DataChunk &chunk, TableAppendState &state); + //! Finalize an append + void FinalizeAppend(DuckTransaction &transaction, TableAppendState &state); //! Commit the append void CommitAppend(transaction_t commit_id, idx_t row_start, idx_t count); //! Write a segment of the table to the WAL diff --git a/src/include/duckdb/storage/index.hpp b/src/include/duckdb/storage/index.hpp index 7fb6ffbdf0cf..179735e8c117 100644 --- a/src/include/duckdb/storage/index.hpp +++ b/src/include/duckdb/storage/index.hpp @@ -154,7 +154,7 @@ class Index { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } diff --git a/src/include/duckdb/storage/partial_block_manager.hpp b/src/include/duckdb/storage/partial_block_manager.hpp index 8e4c1ba9e944..818f2ff6b54b 100644 --- a/src/include/duckdb/storage/partial_block_manager.hpp +++ b/src/include/duckdb/storage/partial_block_manager.hpp @@ -69,7 +69,7 @@ struct PartialBlock { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } }; diff --git a/src/include/duckdb/storage/serialization/create_info.json b/src/include/duckdb/storage/serialization/create_info.json index 77b2e6e6a048..c850a71e854a 100644 --- a/src/include/duckdb/storage/serialization/create_info.json +++ b/src/include/duckdb/storage/serialization/create_info.json @@ -187,6 +187,12 @@ "id": 204, "name": "names", "type": "vector" + }, + { + "id": 205, + "name": "column_comments", + "type": "vector", + "default": "vector()" } ] }, diff --git a/src/include/duckdb/storage/serialization/expression.json b/src/include/duckdb/storage/serialization/expression.json index bd7299b1058d..7181831be7a4 100644 --- a/src/include/duckdb/storage/serialization/expression.json +++ b/src/include/duckdb/storage/serialization/expression.json @@ -23,6 +23,12 @@ "id": 102, "name": "alias", "type": "string" + }, + { + "id": 103, + "name": "query_location", + "type": "optional_idx", + "default": "optional_idx()" } ] }, diff --git a/src/include/duckdb/storage/serialization/logical_operator.json b/src/include/duckdb/storage/serialization/logical_operator.json index 66be2b3a2a56..4fc84183599c 100644 --- a/src/include/duckdb/storage/serialization/logical_operator.json +++ b/src/include/duckdb/storage/serialization/logical_operator.json @@ -143,25 +143,15 @@ { "id": 200, "name": "limit_val", - "type": "int64_t" + "type": "BoundLimitNode" }, { "id": 201, "name": "offset_val", - "type": "int64_t" - }, - { - "id": 202, - "name": "limit", - "type": "Expression*" - }, - { - "id": 203, - "name": "offset", - "type": "Expression*" + "type": "BoundLimitNode" } ], - "constructor": ["limit_val", "offset_val", "limit", "offset"] + "constructor": ["limit_val", "offset_val"] }, { "class": "LogicalOrder", @@ -239,34 +229,6 @@ } ] }, - { - "class": "LogicalLimitPercent", - "base": "LogicalOperator", - "enum": "LOGICAL_LIMIT_PERCENT", - "members": [ - { - "id": 200, - "name": "limit_percent", - "type": "double" - }, - { - "id": 201, - "name": "offset_val", - "type": "int64_t" - }, - { - "id": 202, - "name": "limit", - "type": "Expression*" - }, - { - "id": 203, - "name": "offset", - "type": "Expression*" - } - ], - "constructor": ["limit_percent", "offset_val", "limit", "offset"] - }, { "class": "LogicalColumnDataGet", "base": "LogicalOperator", diff --git a/src/include/duckdb/storage/serialization/nodes.json b/src/include/duckdb/storage/serialization/nodes.json index b27c36655c83..9769cc96f458 100644 --- a/src/include/duckdb/storage/serialization/nodes.json +++ b/src/include/duckdb/storage/serialization/nodes.json @@ -109,6 +109,33 @@ "pointer_type": "none", "constructor": ["type", "null_order", "expression"] }, + { + "class": "BoundLimitNode", + "members": [ + { + "id": 100, + "name": "type", + "type": "LimitNodeType" + }, + { + "id": 101, + "name": "constant_integer", + "type": "idx_t" + }, + { + "id": 102, + "name": "constant_percentage", + "type": "double" + }, + { + "id": 103, + "name": "expression", + "type": "Expression*" + } + ], + "pointer_type": "none", + "constructor": ["type", "constant_integer", "constant_percentage", "expression"] + }, { "class": "CaseCheck", "includes": [ @@ -216,7 +243,8 @@ { "id": 101, "name": "star_expr", - "type": "ParsedExpression*" + "type": "ParsedExpression*", + "property": "expr" }, { "id": 102, @@ -485,7 +513,7 @@ { "class": "CSVOption", "includes": [ - "duckdb/execution/operator/csv_scanner/options/csv_option.hpp" + "duckdb/execution/operator/csv_scanner/csv_option.hpp" ], "members": [ { @@ -504,7 +532,7 @@ { "class": "CSVReaderOptions", "includes": [ - "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" + "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" ], "members": [ {"id": 100, diff --git a/src/include/duckdb/storage/serialization/parse_info.json b/src/include/duckdb/storage/serialization/parse_info.json index 123fa1501bca..1ebf6014c182 100644 --- a/src/include/duckdb/storage/serialization/parse_info.json +++ b/src/include/duckdb/storage/serialization/parse_info.json @@ -216,23 +216,6 @@ } ] }, - { - "class": "SetColumnCommentInfo", - "base": "AlterTableInfo", - "enum": "SET_COLUMN_COMMENT", - "members": [ - { - "id": 400, - "name": "column_name", - "type": "string" - }, - { - "id": 401, - "name": "comment", - "type": "Value" - } - ] - }, { "class": "SetNotNullInfo", "base": "AlterTableInfo", @@ -274,6 +257,31 @@ } ] }, + { + "class": "SetColumnCommentInfo", + "base": "AlterInfo", + "enum": "SET_COLUMN_COMMENT", + "includes" : [ + "duckdb/parser/parsed_data/comment_on_column_info.hpp" + ], + "members": [ + { + "id": 300, + "name": "catalog_entry_type", + "type": "CatalogType" + }, + { + "id": 301, + "name": "comment_value", + "type": "Value" + }, + { + "id": 302, + "name": "column_name", + "type": "string" + } + ] + }, { "class": "AlterViewInfo", "base": "AlterInfo", @@ -530,40 +538,5 @@ } ], "constructor": ["options"] - }, - { - "class": "CommentOnInfo", - "base": "ParseInfo", - "enum": "COMMENT_ON_INFO", - "includes": [ - "duckdb/parser/parsed_data/comment_on_info.hpp" - ], - "members": [ - { - "id": 200, - "name": "type", - "type": "CatalogType" - }, - { - "id": 201, - "name": "catalog", - "type": "string" - }, - { - "id": 202, - "name": "schema", - "type": "string" - }, - { - "id": 203, - "name": "name", - "type": "string" - }, - { - "id": 204, - "name": "comment", - "type": "Value" - } - ] } ] diff --git a/src/include/duckdb/storage/standard_buffer_manager.hpp b/src/include/duckdb/storage/standard_buffer_manager.hpp index f52f2058aeec..de36f9477ad5 100644 --- a/src/include/duckdb/storage/standard_buffer_manager.hpp +++ b/src/include/duckdb/storage/standard_buffer_manager.hpp @@ -40,6 +40,9 @@ class StandardBufferManager : public BufferManager { public: static unique_ptr CreateBufferManager(DatabaseInstance &db, string temp_directory); + static unique_ptr ReadTemporaryBufferInternal(BufferManager &buffer_manager, FileHandle &handle, + idx_t position, idx_t size, + unique_ptr reusable_buffer); //! Registers an in-memory buffer that cannot be unloaded until it is destroyed //! This buffer can be small (smaller than BLOCK_SIZE) //! Unpin and pin are nops on this block of memory diff --git a/src/include/duckdb/storage/storage_manager.hpp b/src/include/duckdb/storage/storage_manager.hpp index 5c063c3fe10d..0f5ffeb2f8e8 100644 --- a/src/include/duckdb/storage/storage_manager.hpp +++ b/src/include/duckdb/storage/storage_manager.hpp @@ -91,7 +91,7 @@ class StorageManager { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/storage/table/append_state.hpp b/src/include/duckdb/storage/table/append_state.hpp index 382f86da5d00..5c5ebd0c68fa 100644 --- a/src/include/duckdb/storage/table/append_state.hpp +++ b/src/include/duckdb/storage/table/append_state.hpp @@ -67,8 +67,6 @@ struct TableAppendState { RowGroup *start_row_group; //! The transaction data TransactionData transaction; - //! The remaining append count, only if the append count is known beforehand - idx_t remaining; }; struct LocalAppendState { diff --git a/src/include/duckdb/storage/table/column_checkpoint_state.hpp b/src/include/duckdb/storage/table/column_checkpoint_state.hpp index 463e2fd95599..5ac11cf7cc28 100644 --- a/src/include/duckdb/storage/table/column_checkpoint_state.hpp +++ b/src/include/duckdb/storage/table/column_checkpoint_state.hpp @@ -46,7 +46,7 @@ struct ColumnCheckpointState { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/storage/table/column_data.hpp b/src/include/duckdb/storage/table/column_data.hpp index c555b25236f0..9b273f0bd3e6 100644 --- a/src/include/duckdb/storage/table/column_data.hpp +++ b/src/include/duckdb/storage/table/column_data.hpp @@ -70,6 +70,10 @@ class ColumnData { void IncrementVersion(); + idx_t GetAllocationSize() const { + return allocation_size; + } + virtual void SetStart(idx_t new_start); //! The root type of the column const LogicalType &RootType() const; @@ -168,6 +172,8 @@ class ColumnData { idx_t version; //! The stats of the root segment unique_ptr stats; + //! Total transient allocation size + idx_t allocation_size; }; } // namespace duckdb diff --git a/src/include/duckdb/storage/table/column_segment.hpp b/src/include/duckdb/storage/table/column_segment.hpp index 6ae03d4f3aa9..fa11971603a2 100644 --- a/src/include/duckdb/storage/table/column_segment.hpp +++ b/src/include/duckdb/storage/table/column_segment.hpp @@ -68,8 +68,8 @@ class ColumnSegment : public SegmentBase { //! Fetch a value of the specific row id and append it to the result void FetchRow(ColumnFetchState &state, row_t row_id, Vector &result, idx_t result_idx); - static idx_t FilterSelection(SelectionVector &sel, Vector &result, const TableFilter &filter, - idx_t &approved_tuple_count, ValidityMask &mask); + static idx_t FilterSelection(SelectionVector &sel, Vector &vector, UnifiedVectorFormat &vdata, + const TableFilter &filter, idx_t scan_count, idx_t &approved_tuple_count); //! Skip a scan forward to the row_index specified in the scan state void Skip(ColumnScanState &state); diff --git a/src/include/duckdb/storage/table/row_group.hpp b/src/include/duckdb/storage/table/row_group.hpp index 0ddc4068cd74..ee413dc9532b 100644 --- a/src/include/duckdb/storage/table/row_group.hpp +++ b/src/include/duckdb/storage/table/row_group.hpp @@ -139,6 +139,10 @@ class RowGroup : public SegmentBase { void GetColumnSegmentInfo(idx_t row_group_index, vector &result); + idx_t GetAllocationSize() const { + return allocation_size; + } + void Verify(); void NextVector(CollectionScanState &state); @@ -172,6 +176,7 @@ class RowGroup : public SegmentBase { unique_ptr[]> is_loaded; vector deletes_pointers; atomic deletes_is_loaded; + idx_t allocation_size; }; } // namespace duckdb diff --git a/src/include/duckdb/storage/table/row_group_collection.hpp b/src/include/duckdb/storage/table/row_group_collection.hpp index f5f9ee0af73e..85d99ba19501 100644 --- a/src/include/duckdb/storage/table/row_group_collection.hpp +++ b/src/include/duckdb/storage/table/row_group_collection.hpp @@ -69,8 +69,9 @@ class RowGroupCollection { //! Initialize an append of a variable number of rows. FinalizeAppend must be called after appending is done. void InitializeAppend(TableAppendState &state); - //! Initialize an append with a known number of rows. FinalizeAppend should not be called after appending is done. - void InitializeAppend(TransactionData transaction, TableAppendState &state, idx_t append_count); + //! Initialize an append with a variable number of rows. FinalizeAppend should not be called after appending is + //! done. + void InitializeAppend(TransactionData transaction, TableAppendState &state); //! Appends to the row group collection. Returns true if a new row group has been created to append to bool Append(DataChunk &chunk, TableAppendState &state); //! FinalizeAppend flushes an append with a variable number of rows. @@ -119,6 +120,10 @@ class RowGroupCollection { return *info; } + idx_t GetAllocationSize() const { + return allocation_size; + } + private: bool IsEmpty(SegmentLock &) const; @@ -136,6 +141,8 @@ class RowGroupCollection { shared_ptr row_groups; //! Table statistics TableStatistics stats; + //! Allocation size, only tracked for appends + idx_t allocation_size; }; } // namespace duckdb diff --git a/src/include/duckdb/storage/table/scan_state.hpp b/src/include/duckdb/storage/table/scan_state.hpp index 56dfc8be583d..3ecceb02bc13 100644 --- a/src/include/duckdb/storage/table/scan_state.hpp +++ b/src/include/duckdb/storage/table/scan_state.hpp @@ -39,7 +39,7 @@ struct SegmentScanState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template @@ -55,7 +55,7 @@ struct IndexScanState { template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/include/duckdb/storage/temporary_file_manager.hpp b/src/include/duckdb/storage/temporary_file_manager.hpp new file mode 100644 index 000000000000..bfb22ee96139 --- /dev/null +++ b/src/include/duckdb/storage/temporary_file_manager.hpp @@ -0,0 +1,169 @@ +//===----------------------------------------------------------------------===// +// DuckDB +// +// duckdb/storage/temporary_file_manager.hpp +// +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include "duckdb/common/allocator.hpp" +#include "duckdb/common/atomic.hpp" +#include "duckdb/common/file_system.hpp" +#include "duckdb/common/mutex.hpp" +#include "duckdb/storage/block_manager.hpp" +#include "duckdb/storage/buffer/block_handle.hpp" +#include "duckdb/storage/buffer/buffer_pool.hpp" +#include "duckdb/storage/buffer_manager.hpp" + +namespace duckdb { + +//===--------------------------------------------------------------------===// +// BlockIndexManager +//===--------------------------------------------------------------------===// + +struct BlockIndexManager { +public: + BlockIndexManager(); + +public: + //! Obtains a new block index from the index manager + idx_t GetNewBlockIndex(); + //! Removes an index from the block manager + //! Returns true if the max_index has been altered + bool RemoveIndex(idx_t index); + idx_t GetMaxIndex(); + bool HasFreeBlocks(); + +private: + idx_t GetNewBlockIndexInternal(); + +private: + idx_t max_index; + set free_indexes; + set indexes_in_use; +}; + +//===--------------------------------------------------------------------===// +// TemporaryFileIndex +//===--------------------------------------------------------------------===// + +// FIXME: should be optional_idx +struct TemporaryFileIndex { + explicit TemporaryFileIndex(idx_t file_index = DConstants::INVALID_INDEX, + idx_t block_index = DConstants::INVALID_INDEX); + + idx_t file_index; + idx_t block_index; + +public: + bool IsValid() const; +}; + +//===--------------------------------------------------------------------===// +// TemporaryFileHandle +//===--------------------------------------------------------------------===// + +class TemporaryFileHandle { + constexpr static idx_t MAX_ALLOWED_INDEX_BASE = 4000; + +public: + TemporaryFileHandle(idx_t temp_file_count, DatabaseInstance &db, const string &temp_directory, idx_t index); + +public: + struct TemporaryFileLock { + public: + explicit TemporaryFileLock(mutex &mutex); + + public: + lock_guard lock; + }; + +public: + TemporaryFileIndex TryGetBlockIndex(); + void WriteTemporaryFile(FileBuffer &buffer, TemporaryFileIndex index); + unique_ptr ReadTemporaryBuffer(idx_t block_index, unique_ptr reusable_buffer); + void EraseBlockIndex(block_id_t block_index); + bool DeleteIfEmpty(); + TemporaryFileInformation GetTemporaryFile(); + +private: + void CreateFileIfNotExists(TemporaryFileLock &); + void RemoveTempBlockIndex(TemporaryFileLock &, idx_t index); + idx_t GetPositionInFile(idx_t index); + +private: + const idx_t max_allowed_index; + DatabaseInstance &db; + unique_ptr handle; + idx_t file_index; + string path; + mutex file_lock; + BlockIndexManager index_manager; +}; + +class TemporaryFileManager; + +//===--------------------------------------------------------------------===// +// TemporaryDirectoryHandle +//===--------------------------------------------------------------------===// + +class TemporaryDirectoryHandle { +public: + TemporaryDirectoryHandle(DatabaseInstance &db, string path_p); + ~TemporaryDirectoryHandle(); + + TemporaryFileManager &GetTempFile(); + +private: + DatabaseInstance &db; + string temp_directory; + bool created_directory = false; + unique_ptr temp_file; +}; + +//===--------------------------------------------------------------------===// +// TemporaryFileManager +//===--------------------------------------------------------------------===// + +class TemporaryFileManager { +public: + TemporaryFileManager(DatabaseInstance &db, const string &temp_directory_p); + +public: + struct TemporaryManagerLock { + public: + explicit TemporaryManagerLock(mutex &mutex); + + public: + lock_guard lock; + }; + + void WriteTemporaryBuffer(block_id_t block_id, FileBuffer &buffer); + bool HasTemporaryBuffer(block_id_t block_id); + unique_ptr ReadTemporaryBuffer(block_id_t id, unique_ptr reusable_buffer); + void DeleteTemporaryBuffer(block_id_t id); + vector GetTemporaryFiles(); + +private: + void EraseUsedBlock(TemporaryManagerLock &lock, block_id_t id, TemporaryFileHandle *handle, + TemporaryFileIndex index); + TemporaryFileHandle *GetFileHandle(TemporaryManagerLock &, idx_t index); + TemporaryFileIndex GetTempBlockIndex(TemporaryManagerLock &, block_id_t id); + void EraseFileHandle(TemporaryManagerLock &, idx_t file_index); + +private: + DatabaseInstance &db; + mutex manager_lock; + //! The temporary directory + string temp_directory; + //! The set of active temporary file handles + unordered_map> files; + //! map of block_id -> temporary file position + unordered_map used_blocks; + //! Manager of in-use temporary file indexes + BlockIndexManager index_manager; +}; + +} // namespace duckdb diff --git a/src/include/duckdb/transaction/duck_transaction_manager.hpp b/src/include/duckdb/transaction/duck_transaction_manager.hpp index 49596e641591..63756e977f90 100644 --- a/src/include/duckdb/transaction/duck_transaction_manager.hpp +++ b/src/include/duckdb/transaction/duck_transaction_manager.hpp @@ -45,8 +45,14 @@ class DuckTransactionManager : public TransactionManager { return true; } +protected: + struct CheckpointDecision { + bool can_checkpoint; + string reason; + }; + private: - bool CanCheckpoint(optional_ptr current = nullptr); + CheckpointDecision CanCheckpoint(optional_ptr current = nullptr); //! Remove the given transaction from the list of active transactions void RemoveTransaction(DuckTransaction &transaction) noexcept; @@ -69,6 +75,10 @@ class DuckTransactionManager : public TransactionManager { mutex transaction_lock; bool thread_is_checkpointing; + +protected: + virtual void OnCommitCheckpointDecision(const CheckpointDecision &decision, DuckTransaction &transaction) { + } }; } // namespace duckdb diff --git a/src/include/duckdb/transaction/meta_transaction.hpp b/src/include/duckdb/transaction/meta_transaction.hpp index e858b5c8037e..30855f0821d7 100644 --- a/src/include/duckdb/transaction/meta_transaction.hpp +++ b/src/include/duckdb/transaction/meta_transaction.hpp @@ -41,7 +41,7 @@ class MetaTransaction { public: DUCKDB_API static MetaTransaction &Get(ClientContext &context); - timestamp_t GetCurrentTransactionStartTimestamp() { + timestamp_t GetCurrentTransactionStartTimestamp() const { return start_timestamp; } @@ -60,6 +60,8 @@ class MetaTransaction { } private: + //! Lock to prevent all_transactions and transactions from getting out of sync + mutex lock; //! The set of active transactions for each database reference_map_t> transactions; //! The set of transactions in order of when they were started diff --git a/src/include/duckdb/transaction/transaction.hpp b/src/include/duckdb/transaction/transaction.hpp index 0caa342afb11..1c47725c10dd 100644 --- a/src/include/duckdb/transaction/transaction.hpp +++ b/src/include/duckdb/transaction/transaction.hpp @@ -61,7 +61,7 @@ class Transaction { public: template TARGET &Cast() { - D_ASSERT(dynamic_cast(this)); + DynamicCastCheck(this); return reinterpret_cast(*this); } template diff --git a/src/main/appender.cpp b/src/main/appender.cpp index 2aa782245950..c374b2cd191f 100644 --- a/src/main/appender.cpp +++ b/src/main/appender.cpp @@ -102,7 +102,8 @@ void BaseAppender::AppendDecimalValueInternal(Vector &col, SRC input) { D_ASSERT(type.id() == LogicalTypeId::DECIMAL); auto width = DecimalType::GetWidth(type); auto scale = DecimalType::GetScale(type); - TryCastToDecimal::Operation(input, FlatVector::GetData(col)[chunk.size()], nullptr, width, + CastParameters parameters; + TryCastToDecimal::Operation(input, FlatVector::GetData(col)[chunk.size()], parameters, width, scale); return; } diff --git a/src/main/attached_database.cpp b/src/main/attached_database.cpp index 855e163bce86..d9a287ef86e4 100644 --- a/src/main/attached_database.cpp +++ b/src/main/attached_database.cpp @@ -33,8 +33,10 @@ AttachedDatabase::AttachedDatabase(DatabaseInstance &db, Catalog &catalog_p, str : CatalogEntry(CatalogType::DATABASE_ENTRY, catalog_p, std::move(name_p)), db(db), parent_catalog(&catalog_p) { type = access_mode == AccessMode::READ_ONLY ? AttachedDatabaseType::READ_ONLY_DATABASE : AttachedDatabaseType::READ_WRITE_DATABASE; - storage = make_uniq(*this, std::move(file_path_p), access_mode == AccessMode::READ_ONLY); catalog = make_uniq(*this); + // do this after catalog to guarnatee we allow extension to instantionate DuckCatalog causing creation + // of the storage + storage = make_uniq(*this, std::move(file_path_p), access_mode == AccessMode::READ_ONLY); transaction_manager = make_uniq(*this); internal = true; } @@ -50,6 +52,10 @@ AttachedDatabase::AttachedDatabase(DatabaseInstance &db, Catalog &catalog_p, Sto if (!catalog) { throw InternalException("AttachedDatabase - attach function did not return a catalog"); } + if (catalog->IsDuckCatalog()) { + // DuckCatalog, instantiate storage + storage = make_uniq(*this, info.path, access_mode == AccessMode::READ_ONLY); + } transaction_manager = storage_extension.create_transaction_manager(storage_extension.storage_info.get(), *this, *catalog); if (!transaction_manager) { @@ -60,31 +66,7 @@ AttachedDatabase::AttachedDatabase(DatabaseInstance &db, Catalog &catalog_p, Sto } AttachedDatabase::~AttachedDatabase() { - D_ASSERT(catalog); - - if (!IsSystem() && !catalog->InMemory()) { - db.GetDatabaseManager().EraseDatabasePath(catalog->GetDBPath()); - } - - if (Exception::UncaughtException()) { - return; - } - if (!storage) { - return; - } - - // shutting down: attempt to checkpoint the database - // but only if we are not cleaning up as part of an exception unwind - try { - if (!storage->InMemory()) { - auto &config = DBConfig::GetConfig(db); - if (!config.options.checkpoint_on_shutdown) { - return; - } - storage->CreateCheckpoint(true); - } - } catch (...) { - } + Close(); } bool AttachedDatabase::IsSystem() const { @@ -99,11 +81,19 @@ bool AttachedDatabase::IsReadOnly() const { return type == AttachedDatabaseType::READ_ONLY_DATABASE; } +bool AttachedDatabase::NameIsReserved(const string &name) { + return name == DEFAULT_SCHEMA || name == TEMP_CATALOG; +} + string AttachedDatabase::ExtractDatabaseName(const string &dbpath, FileSystem &fs) { if (dbpath.empty() || dbpath == IN_MEMORY_PATH) { return "memory"; } - return fs.ExtractBaseName(dbpath); + auto name = fs.ExtractBaseName(dbpath); + if (NameIsReserved(name)) { + name += "_db"; + } + return name; } void AttachedDatabase::Initialize() { @@ -144,4 +134,36 @@ void AttachedDatabase::SetInitialDatabase() { is_initial_database = true; } +void AttachedDatabase::Close() { + D_ASSERT(catalog); + if (is_closed) { + return; + } + is_closed = true; + + if (!IsSystem() && !catalog->InMemory()) { + db.GetDatabaseManager().EraseDatabasePath(catalog->GetDBPath()); + } + + if (Exception::UncaughtException()) { + return; + } + if (!storage) { + return; + } + + // shutting down: attempt to checkpoint the database + // but only if we are not cleaning up as part of an exception unwind + try { + if (!storage->InMemory()) { + auto &config = DBConfig::GetConfig(db); + if (!config.options.checkpoint_on_shutdown) { + return; + } + storage->CreateCheckpoint(true); + } + } catch (...) { + } +} + } // namespace duckdb diff --git a/src/main/capi/appender-c.cpp b/src/main/capi/appender-c.cpp index 95177cf2baf0..2b0789bc133e 100644 --- a/src/main/capi/appender-c.cpp +++ b/src/main/capi/appender-c.cpp @@ -197,7 +197,7 @@ duckdb_state duckdb_append_varchar(duckdb_appender appender, const char *val) { } duckdb_state duckdb_append_varchar_length(duckdb_appender appender, const char *val, idx_t length) { - return duckdb_append_internal(appender, string_t(val, length)); + return duckdb_append_internal(appender, string_t(val, duckdb::UnsafeNumericCast(length))); } duckdb_state duckdb_append_blob(duckdb_appender appender, const void *data, idx_t length) { auto value = duckdb::Value::BLOB((duckdb::const_data_ptr_t)data, length); diff --git a/src/main/capi/cast/utils-c.cpp b/src/main/capi/cast/utils-c.cpp index 779d96006f4f..94c17dde6071 100644 --- a/src/main/capi/cast/utils-c.cpp +++ b/src/main/capi/cast/utils-c.cpp @@ -68,7 +68,7 @@ duckdb_blob FetchDefaultValue::Operation() { template <> bool FromCBlobCastWrapper::Operation(duckdb_blob input, duckdb_string &result) { - string_t input_str(const_char_ptr_cast(input.data), input.size); + string_t input_str(const_char_ptr_cast(input.data), UnsafeNumericCast(input.size)); return ToCStringCastWrapper::template Operation(input_str, result); } diff --git a/src/main/capi/data_chunk-c.cpp b/src/main/capi/data_chunk-c.cpp index b73a7a9d274e..255b343ebd70 100644 --- a/src/main/capi/data_chunk-c.cpp +++ b/src/main/capi/data_chunk-c.cpp @@ -110,7 +110,7 @@ void duckdb_vector_assign_string_element_len(duckdb_vector vector, idx_t index, } auto v = reinterpret_cast(vector); auto data = duckdb::FlatVector::GetData(*v); - data[index] = duckdb::StringVector::AddString(*v, str, str_len); + data[index] = duckdb::StringVector::AddStringOrBlob(*v, str, str_len); } duckdb_vector duckdb_list_vector_get_child(duckdb_vector vector) { @@ -155,6 +155,14 @@ duckdb_vector duckdb_struct_vector_get_child(duckdb_vector vector, idx_t index) return reinterpret_cast(duckdb::StructVector::GetEntries(*v)[index].get()); } +duckdb_vector duckdb_array_vector_get_child(duckdb_vector vector) { + if (!vector) { + return nullptr; + } + auto v = reinterpret_cast(vector); + return reinterpret_cast(&duckdb::ArrayVector::GetEntry(*v)); +} + bool duckdb_validity_row_is_valid(uint64_t *validity, idx_t row) { if (!validity) { return true; diff --git a/src/main/capi/datetime-c.cpp b/src/main/capi/datetime-c.cpp index 9b07007af636..de92c8dadf71 100644 --- a/src/main/capi/datetime-c.cpp +++ b/src/main/capi/datetime-c.cpp @@ -1,4 +1,5 @@ #include "duckdb/main/capi/capi_internal.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/types/date.hpp" #include "duckdb/common/types/time.hpp" #include "duckdb/common/types/timestamp.hpp" @@ -17,8 +18,8 @@ duckdb_date_struct duckdb_from_date(duckdb_date date) { duckdb_date_struct result; result.year = year; - result.month = month; - result.day = day; + result.month = duckdb::UnsafeNumericCast(month); + result.day = duckdb::UnsafeNumericCast(day); return result; } @@ -37,18 +38,23 @@ duckdb_time_struct duckdb_from_time(duckdb_time time) { Time::Convert(dtime_t(time.micros), hour, minute, second, micros); duckdb_time_struct result; - result.hour = hour; - result.min = minute; - result.sec = second; + result.hour = duckdb::UnsafeNumericCast(hour); + result.min = duckdb::UnsafeNumericCast(minute); + result.sec = duckdb::UnsafeNumericCast(second); result.micros = micros; return result; } duckdb_time_tz_struct duckdb_from_time_tz(duckdb_time_tz input) { - duckdb::dtime_tz_t time(input.bits); duckdb_time_tz_struct result; - result.time.micros = time.time().micros; - result.offset = time.offset(); + duckdb_time time; + + duckdb::dtime_tz_t time_tz(input.bits); + + time.micros = time_tz.time().micros; + + result.time = duckdb_from_time(time); + result.offset = time_tz.offset(); return result; } diff --git a/src/main/capi/duckdb_value-c.cpp b/src/main/capi/duckdb_value-c.cpp index c66184b897ad..7bc0c219a669 100644 --- a/src/main/capi/duckdb_value-c.cpp +++ b/src/main/capi/duckdb_value-c.cpp @@ -73,7 +73,7 @@ duckdb_value duckdb_create_struct_value(duckdb_logical_type type, duckdb_value * } duckdb::Value *struct_value = new duckdb::Value; try { - *struct_value = duckdb::Value::STRUCT(ltype, unwrapped_values); + *struct_value = duckdb::Value::STRUCT(ltype, std::move(unwrapped_values)); } catch (...) { delete struct_value; return nullptr; @@ -96,10 +96,37 @@ duckdb_value duckdb_create_list_value(duckdb_logical_type type, duckdb_value *va } duckdb::Value *list_value = new duckdb::Value; try { - *list_value = duckdb::Value::LIST(ltype, unwrapped_values); + *list_value = duckdb::Value::LIST(ltype, std::move(unwrapped_values)); } catch (...) { delete list_value; return nullptr; } return WrapValue(list_value); } + +duckdb_value duckdb_create_array_value(duckdb_logical_type type, duckdb_value *values, idx_t value_count) { + if (!type || !values) { + return nullptr; + } + if (value_count >= duckdb::ArrayType::MAX_ARRAY_SIZE) { + return nullptr; + } + auto <ype = UnwrapType(type); + duckdb::vector unwrapped_values; + + for (idx_t i = 0; i < value_count; i++) { + auto value = values[i]; + if (!value) { + return nullptr; + } + unwrapped_values.push_back(UnwrapValue(value)); + } + duckdb::Value *array_value = new duckdb::Value; + try { + *array_value = duckdb::Value::ARRAY(ltype, std::move(unwrapped_values)); + } catch (...) { + delete array_value; + return nullptr; + } + return WrapValue(array_value); +} diff --git a/src/main/capi/helper-c.cpp b/src/main/capi/helper-c.cpp index b9caf94df38c..39cacbf2628f 100644 --- a/src/main/capi/helper-c.cpp +++ b/src/main/capi/helper-c.cpp @@ -126,6 +126,8 @@ duckdb_type ConvertCPPTypeToC(const LogicalType &sql_type) { return DUCKDB_TYPE_UNION; case LogicalTypeId::UUID: return DUCKDB_TYPE_UUID; + case LogicalTypeId::ARRAY: + return DUCKDB_TYPE_ARRAY; default: // LCOV_EXCL_START D_ASSERT(0); return DUCKDB_TYPE_INVALID; diff --git a/src/main/capi/hugeint-c.cpp b/src/main/capi/hugeint-c.cpp index bafed1efd4b6..5ac7120f1479 100644 --- a/src/main/capi/hugeint-c.cpp +++ b/src/main/capi/hugeint-c.cpp @@ -77,6 +77,7 @@ double duckdb_decimal_to_double(duckdb_decimal val) { hugeint_t value; value.lower = val.value.lower; value.upper = val.value.upper; - duckdb::TryCastFromDecimal::Operation(value, result, nullptr, val.width, val.scale); + duckdb::CastParameters parameters; + duckdb::TryCastFromDecimal::Operation(value, result, parameters, val.width, val.scale); return result; } diff --git a/src/main/capi/logical_types-c.cpp b/src/main/capi/logical_types-c.cpp index 6a50fba7abed..f8440dd0507b 100644 --- a/src/main/capi/logical_types-c.cpp +++ b/src/main/capi/logical_types-c.cpp @@ -35,6 +35,18 @@ duckdb_logical_type duckdb_create_list_type(duckdb_logical_type type) { return reinterpret_cast(ltype); } +duckdb_logical_type duckdb_create_array_type(duckdb_logical_type type, idx_t array_size) { + if (!type) { + return nullptr; + } + if (array_size >= duckdb::ArrayType::MAX_ARRAY_SIZE) { + return nullptr; + } + duckdb::LogicalType *ltype = new duckdb::LogicalType; + *ltype = duckdb::LogicalType::ARRAY(*reinterpret_cast(type), array_size); + return reinterpret_cast(ltype); +} + duckdb_logical_type duckdb_create_union_type(duckdb_logical_type *member_types_p, const char **member_names, idx_t member_count) { if (!member_types_p || !member_names) { @@ -179,7 +191,7 @@ uint32_t duckdb_enum_dictionary_size(duckdb_logical_type type) { return 0; } auto <ype = *(reinterpret_cast(type)); - return duckdb::EnumType::GetSize(ltype); + return duckdb::NumericCast(duckdb::EnumType::GetSize(ltype)); } char *duckdb_enum_dictionary_value(duckdb_logical_type type, idx_t index) { @@ -204,6 +216,28 @@ duckdb_logical_type duckdb_list_type_child_type(duckdb_logical_type type) { return reinterpret_cast(new duckdb::LogicalType(duckdb::ListType::GetChildType(ltype))); } +duckdb_logical_type duckdb_array_type_child_type(duckdb_logical_type type) { + if (!AssertLogicalTypeId(type, duckdb::LogicalTypeId::ARRAY)) { + return nullptr; + } + auto <ype = *(reinterpret_cast(type)); + if (ltype.id() != duckdb::LogicalTypeId::ARRAY) { + return nullptr; + } + return reinterpret_cast(new duckdb::LogicalType(duckdb::ArrayType::GetChildType(ltype))); +} + +idx_t duckdb_array_type_array_size(duckdb_logical_type type) { + if (!AssertLogicalTypeId(type, duckdb::LogicalTypeId::ARRAY)) { + return 0; + } + auto <ype = *(reinterpret_cast(type)); + if (ltype.id() != duckdb::LogicalTypeId::ARRAY) { + return 0; + } + return duckdb::ArrayType::GetSize(ltype); +} + duckdb_logical_type duckdb_map_type_key_type(duckdb_logical_type type) { if (!AssertLogicalTypeId(type, duckdb::LogicalTypeId::MAP)) { return nullptr; diff --git a/src/main/capi/result-c.cpp b/src/main/capi/result-c.cpp index c3b62c410741..610ecc3b6afc 100644 --- a/src/main/capi/result-c.cpp +++ b/src/main/capi/result-c.cpp @@ -54,6 +54,9 @@ struct CBlobConverter { struct CTimestampMsConverter : public CBaseConverter { template static DST Convert(SRC input) { + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochMs(input.value); } }; @@ -61,6 +64,9 @@ struct CTimestampMsConverter : public CBaseConverter { struct CTimestampNsConverter : public CBaseConverter { template static DST Convert(SRC input) { + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochNanoSeconds(input.value); } }; @@ -68,6 +74,9 @@ struct CTimestampNsConverter : public CBaseConverter { struct CTimestampSecConverter : public CBaseConverter { template static DST Convert(SRC input) { + if (!Timestamp::IsFinite(input)) { + return input; + } return Timestamp::FromEpochSeconds(input.value); } }; diff --git a/src/main/client_context.cpp b/src/main/client_context.cpp index 459dfe52fa4b..f7e4527e4e06 100644 --- a/src/main/client_context.cpp +++ b/src/main/client_context.cpp @@ -319,7 +319,6 @@ ClientContext::CreatePreparedStatement(ClientContextLock &lock, const string &qu result->types = planner.types; result->value_map = std::move(planner.value_map); result->catalog_version = MetaTransaction::Get(*this).catalog_version; - if (!planner.properties.bound_all_parameters) { return result; } @@ -458,6 +457,7 @@ PendingExecutionResult ClientContext::ExecuteTaskInternal(ClientContextLock &loc auto &db_instance = DatabaseInstance::GetDatabase(*this); ValidChecker::Invalidate(db_instance, error.RawMessage()); } + ProcessError(error, active_query->query); result.SetError(std::move(error)); } catch (...) { // LCOV_EXCL_START result.SetError(ErrorData("Unhandled exception in ExecuteTaskInternal")); diff --git a/src/main/database.cpp b/src/main/database.cpp index b37191e70075..36f281604817 100644 --- a/src/main/database.cpp +++ b/src/main/database.cpp @@ -34,6 +34,7 @@ DBConfig::DBConfig() { cast_functions = make_uniq(*this); index_types = make_uniq(); error_manager = make_uniq(); + secret_manager = make_uniq(); } DBConfig::DBConfig(bool read_only) : DBConfig::DBConfig() { @@ -53,7 +54,8 @@ DatabaseInstance::DatabaseInstance() { } DatabaseInstance::~DatabaseInstance() { - GetDatabaseManager().ResetDatabases(); + // destroy all attached databases + GetDatabaseManager().ResetDatabases(scheduler); } BufferManager &BufferManager::GetBufferManager(DatabaseInstance &db) { @@ -328,8 +330,6 @@ void DatabaseInstance::Configure(DBConfig &new_config) { } if (new_config.secret_manager) { config.secret_manager = std::move(new_config.secret_manager); - } else { - config.secret_manager = make_uniq(); } if (config.options.maximum_memory == (idx_t)-1) { config.SetDefaultMaxMemory(); diff --git a/src/main/database_manager.cpp b/src/main/database_manager.cpp index 77f5448a5367..b3bbdf699f56 100644 --- a/src/main/database_manager.cpp +++ b/src/main/database_manager.cpp @@ -36,6 +36,9 @@ optional_ptr DatabaseManager::GetDatabase(ClientContext &conte optional_ptr DatabaseManager::AttachDatabase(ClientContext &context, const AttachInfo &info, const string &db_type, AccessMode access_mode) { + if (AttachedDatabase::NameIsReserved(info.name)) { + throw BinderException("Attached database name \"%s\" cannot be used because it is a reserved name", info.name); + } // now create the attached database auto &db = DatabaseInstance::GetDatabase(context); auto attached_db = db.CreateAttachedDatabase(context, info, db_type, access_mode); @@ -205,7 +208,13 @@ vector> DatabaseManager::GetDatabases(ClientContext return result; } -void DatabaseManager::ResetDatabases() { +void DatabaseManager::ResetDatabases(unique_ptr &scheduler) { + vector> result; + databases->Scan([&](CatalogEntry &entry) { result.push_back(entry.Cast()); }); + for (auto &database : result) { + database.get().Close(); + } + scheduler.reset(); databases.reset(); } diff --git a/src/main/extension/extension_helper.cpp b/src/main/extension/extension_helper.cpp index d6b950181bf3..96d905ed81ae 100644 --- a/src/main/extension/extension_helper.cpp +++ b/src/main/extension/extension_helper.cpp @@ -122,7 +122,6 @@ static DefaultExtension internal_extensions[] = { {"arrow", "A zero-copy data integration between Apache Arrow and DuckDB", false}, {"azure", "Adds a filesystem abstraction for Azure blob storage to DuckDB", false}, {"iceberg", "Adds support for Apache Iceberg", false}, - {"visualizer", "Creates an HTML-based visualization of the query plan", false}, {nullptr, nullptr, false}}; idx_t ExtensionHelper::DefaultExtensionCount() { @@ -246,7 +245,7 @@ void ExtensionHelper::LoadAllExtensions(DuckDB &db) { // The in-tree extensions that we check. Non-cmake builds are currently limited to these for static linking // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that // these can be removed - unordered_set extensions {"parquet", "icu", "tpch", "tpcds", "fts", "httpfs", "visualizer", + unordered_set extensions {"parquet", "icu", "tpch", "tpcds", "fts", "httpfs", "json", "excel", "sqlsmith", "inet", "jemalloc", "autocomplete"}; for (auto &ext : extensions) { LoadExtensionInternal(db, ext, true); diff --git a/src/main/extension/extension_install.cpp b/src/main/extension/extension_install.cpp index 418a298db343..e7943a95e5d6 100644 --- a/src/main/extension/extension_install.cpp +++ b/src/main/extension/extension_install.cpp @@ -171,7 +171,7 @@ string ExtensionHelper::ExtensionUrlTemplate(optional_ptr db_con string versioned_path = "/${REVISION}/${PLATFORM}/${NAME}.duckdb_extension"; #ifdef WASM_LOADABLE_EXTENSIONS string default_endpoint = "https://extensions.duckdb.org"; - versioned_path = "/duckdb-wasm" + versioned_path + ".wasm"; + versioned_path = versioned_path + ".wasm"; #else string default_endpoint = "http://extensions.duckdb.org"; versioned_path = versioned_path + ".gz"; diff --git a/src/main/prepared_statement_data.cpp b/src/main/prepared_statement_data.cpp index ed129d426e66..a6eb943a6ea3 100644 --- a/src/main/prepared_statement_data.cpp +++ b/src/main/prepared_statement_data.cpp @@ -2,6 +2,8 @@ #include "duckdb/execution/physical_operator.hpp" #include "duckdb/parser/sql_statement.hpp" #include "duckdb/common/exception/binder_exception.hpp" +#include "duckdb/main/database_manager.hpp" +#include "duckdb/transaction/transaction.hpp" namespace duckdb { @@ -19,12 +21,19 @@ void PreparedStatementData::CheckParameterCount(idx_t parameter_count) { } } +void StartTransactionInCatalog(ClientContext &context, const string &catalog_name) { + auto database = DatabaseManager::Get(context).GetDatabase(context, catalog_name); + if (!database) { + throw BinderException("Prepared statement requires database %s but it was not attached", catalog_name); + } + Transaction::Get(context, *database); +} + bool PreparedStatementData::RequireRebind(ClientContext &context, optional_ptr> values) { idx_t count = values ? values->size() : 0; CheckParameterCount(count); if (!unbound_statement) { - // no unbound statement!? cannot rebind? - return false; + throw InternalException("Prepared statement without unbound statement"); } if (properties.always_require_rebind) { // this statement must always be re-bound @@ -34,10 +43,6 @@ bool PreparedStatementData::RequireRebind(ClientContext &context, optional_ptrfind(identifier); @@ -48,6 +53,18 @@ bool PreparedStatementData::RequireRebind(ClientContext &context, optional_ptr(toupper(str[0])); for (idx_t i = 0; i < str.size(); i++) { if (str[i] == '_') { str[i] = ' '; if (i + 1 < str.size()) { - str[i + 1] = toupper(str[i + 1]); + str[i + 1] = NumericCast(toupper(str[i + 1])); } } } @@ -506,8 +507,8 @@ static void PrintRow(std::ostream &ss, const string &annotation, int id, const s static void ExtractFunctions(std::ostream &ss, ExpressionInfo &info, int &fun_id, int depth) { if (info.hasfunction) { double time = info.sample_tuples_count == 0 ? 0 : int(info.function_time) / double(info.sample_tuples_count); - PrintRow(ss, "Function", fun_id++, info.function_name, time, info.sample_tuples_count, info.tuples_count, "", - depth); + PrintRow(ss, "Function", fun_id++, info.function_name, time, NumericCast(info.sample_tuples_count), + NumericCast(info.tuples_count), "", NumericCast(depth)); } if (info.children.empty()) { return; @@ -538,7 +539,8 @@ static void ToJSONRecursive(QueryProfiler::TreeNode &node, std::ostream &ss, int ? 0 : double(expr_timer->time) / double(expr_timer->sample_tuples_count); PrintRow(ss, "ExpressionRoot", expression_counter++, expr_timer->name, time, - expr_timer->sample_tuples_count, expr_timer->tuples_count, expr_timer->extra_info, depth + 1); + NumericCast(expr_timer->sample_tuples_count), NumericCast(expr_timer->tuples_count), + expr_timer->extra_info, depth + 1); // Extract all functions inside the tree ExtractFunctions(ss, *expr_timer->root, function_counter, depth + 1); } diff --git a/src/main/relation/read_csv_relation.cpp b/src/main/relation/read_csv_relation.cpp index c657bbc888cd..1500720e0069 100644 --- a/src/main/relation/read_csv_relation.cpp +++ b/src/main/relation/read_csv_relation.cpp @@ -1,13 +1,13 @@ #include "duckdb/main/relation/read_csv_relation.hpp" -#include "duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp" -#include "duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_sniffer.hpp" #include "duckdb/parser/expression/columnref_expression.hpp" #include "duckdb/parser/expression/comparison_expression.hpp" #include "duckdb/parser/expression/constant_expression.hpp" #include "duckdb/parser/expression/function_expression.hpp" #include "duckdb/common/string_util.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/common/multi_file_reader.hpp" #include "duckdb/parser/expression/star_expression.hpp" #include "duckdb/parser/query_node/select_node.hpp" @@ -38,7 +38,9 @@ ReadCSVRelation::ReadCSVRelation(const std::shared_ptr &context, InitializeAlias(input); auto file_list = CreateValueFromFileList(input); - auto files = MultiFileReader::GetFileList(*context, file_list, "CSV"); + + vector files; + context->RunFunctionInTransaction([&]() { files = MultiFileReader::GetFileList(*context, file_list, "CSV"); }); D_ASSERT(!files.empty()); auto &file_name = files[0]; @@ -52,14 +54,17 @@ ReadCSVRelation::ReadCSVRelation(const std::shared_ptr &context, // Run the auto-detect, populating the options with the detected settings - auto buffer_manager = make_shared(*context, csv_options, files[0], 0); - CSVSniffer sniffer(csv_options, buffer_manager, CSVStateMachineCache::Get(*context)); - auto sniffer_result = sniffer.SniffCSV(); - auto &types = sniffer_result.return_types; - auto &names = sniffer_result.names; - for (idx_t i = 0; i < types.size(); i++) { - columns.emplace_back(names[i], types[i]); - } + shared_ptr buffer_manager; + context->RunFunctionInTransaction([&]() { + buffer_manager = make_shared(*context, csv_options, files[0], 0); + CSVSniffer sniffer(csv_options, buffer_manager, CSVStateMachineCache::Get(*context)); + auto sniffer_result = sniffer.SniffCSV(); + auto &types = sniffer_result.return_types; + auto &names = sniffer_result.names; + for (idx_t i = 0; i < types.size(); i++) { + columns.emplace_back(names[i], types[i]); + } + }); // After sniffing we can consider these set, so they are exported as named parameters // FIXME: This is horribly hacky, should be refactored at some point diff --git a/src/main/secret/secret.cpp b/src/main/secret/secret.cpp index bf92728f8cfb..450e5621c323 100644 --- a/src/main/secret/secret.cpp +++ b/src/main/secret/secret.cpp @@ -15,7 +15,7 @@ int64_t BaseSecret::MatchScore(const string &path) const { continue; } if (StringUtil::StartsWith(path, prefix)) { - longest_match = MaxValue(prefix.length(), longest_match); + longest_match = MaxValue(prefix.length(), longest_match); } } return longest_match; diff --git a/src/main/secret/secret_manager.cpp b/src/main/secret/secret_manager.cpp index 650c177ac4d6..c972a9ea9a59 100644 --- a/src/main/secret/secret_manager.cpp +++ b/src/main/secret/secret_manager.cpp @@ -44,12 +44,9 @@ void SecretManager::Initialize(DatabaseInstance &db) { // Construct default path LocalFileSystem fs; config.default_secret_path = fs.GetHomeDirectory(); - vector path_components = {".duckdb", "stored_secrets", ExtensionHelper::GetVersionDirectoryName()}; + vector path_components = {".duckdb", "stored_secrets"}; for (auto &path_ele : path_components) { config.default_secret_path = fs.JoinPath(config.default_secret_path, path_ele); - if (!fs.DirectoryExists(config.default_secret_path)) { - fs.CreateDirectory(config.default_secret_path); - } } config.secret_path = config.default_secret_path; @@ -158,6 +155,11 @@ unique_ptr SecretManager::RegisterSecretInternal(CatalogTransaction //! Lookup which backend to store the secret in auto backend = GetSecretStorage(resolved_storage); if (!backend) { + if (!config.allow_persistent_secrets && + (persist_type == SecretPersistType::PERSISTENT || storage == LOCAL_FILE_STORAGE_NAME)) { + throw InvalidInputException("Persistent secrets are disabled. Restart DuckDB and enable persistent secrets " + "through 'SET allow_persistent_secrets=true'"); + } throw InvalidInputException("Secret storage '%s' not found!", resolved_storage); } @@ -503,9 +505,11 @@ void SecretManager::InitializeSecrets(CatalogTransaction transaction) { // load the tmp storage LoadSecretStorageInternal(make_uniq(TEMPORARY_STORAGE_NAME, *transaction.db)); - // load the persistent storage if enabled - LoadSecretStorageInternal( - make_uniq(*this, *transaction.db, LOCAL_FILE_STORAGE_NAME, config.secret_path)); + if (config.allow_persistent_secrets) { + // load the persistent storage if enabled + LoadSecretStorageInternal( + make_uniq(*this, *transaction.db, LOCAL_FILE_STORAGE_NAME, config.secret_path)); + } initialized = true; } diff --git a/src/main/secret/secret_storage.cpp b/src/main/secret/secret_storage.cpp index 6e8e24b855ca..5be8a68a4e80 100644 --- a/src/main/secret/secret_storage.cpp +++ b/src/main/secret/secret_storage.cpp @@ -134,13 +134,9 @@ LocalFileSecretStorage::LocalFileSecretStorage(SecretManager &manager, DatabaseI : CatalogSetSecretStorage(db_p, name_p), secret_path(secret_path) { persistent = true; + // Check existence of persistent secret dir LocalFileSystem fs; - - if (!fs.DirectoryExists(secret_path)) { - fs.CreateDirectory(secret_path); - } - - if (persistent_secrets.empty()) { + if (fs.DirectoryExists(secret_path)) { fs.ListFiles(secret_path, [&](const string &fname, bool is_dir) { string full_path = fs.JoinPath(secret_path, fname); @@ -172,6 +168,35 @@ CatalogTransaction CatalogSetSecretStorage::GetTransactionOrDefault(optional_ptr void LocalFileSecretStorage::WriteSecret(const BaseSecret &secret, OnCreateConflict on_conflict) { LocalFileSystem fs; + + // We may need to create the secret dir here if the directory was not present during LocalFileSecretStorage + // construction + if (!fs.DirectoryExists(secret_path)) { + // TODO: recursive directory creation should probably live in filesystem + auto sep = fs.PathSeparator(secret_path); + auto splits = StringUtil::Split(secret_path, sep); + D_ASSERT(!splits.empty()); + string extension_directory_prefix; + if (StringUtil::StartsWith(secret_path, sep)) { + extension_directory_prefix = sep; // this is swallowed by Split otherwise + } + try { + for (auto &split : splits) { + extension_directory_prefix = extension_directory_prefix + split + sep; + if (!fs.DirectoryExists(extension_directory_prefix)) { + fs.CreateDirectory(extension_directory_prefix); + } + } + } catch (std::exception &ex) { + ErrorData error(ex); + if (error.Type() == ExceptionType::IO) { + throw IOException("Failed to initialize persistent storage directory. (original error: '%s')", + error.RawMessage()); + } + throw; + } + } + auto file_path = fs.JoinPath(secret_path, secret.GetName() + ".duckdb_secret"); if (fs.FileExists(file_path)) { @@ -201,6 +226,7 @@ void LocalFileSecretStorage::RemoveSecret(const string &secret, OnEntryNotFound "instance. (original error: '%s')", file, error.RawMessage()); } + throw; } } diff --git a/src/optimizer/filter_combiner.cpp b/src/optimizer/filter_combiner.cpp index ed0443796021..cd6f3319134d 100644 --- a/src/optimizer/filter_combiner.cpp +++ b/src/optimizer/filter_combiner.cpp @@ -117,8 +117,8 @@ void FilterCombiner::GenerateFilters(const std::function= 0 && upper_index >= 0) { + if (lower_index.IsValid() && upper_index.IsValid()) { // found both lower and upper index, create a BETWEEN expression - auto lower_constant = make_uniq(constant_list[lower_index].constant); - auto upper_constant = make_uniq(constant_list[upper_index].constant); + auto lower_constant = + make_uniq(constant_list[lower_index.GetIndex()].constant); + auto upper_constant = + make_uniq(constant_list[upper_index.GetIndex()].constant); auto between = make_uniq(entries[i].get().Copy(), std::move(lower_constant), std::move(upper_constant), lower_inclusive, upper_inclusive); callback(std::move(between)); - } else if (lower_index >= 0) { + } else if (lower_index.IsValid()) { // only lower index found, create simple comparison expression - auto constant = make_uniq(constant_list[lower_index].constant); - auto comparison = make_uniq(constant_list[lower_index].comparison_type, - entries[i].get().Copy(), std::move(constant)); + auto constant = make_uniq(constant_list[lower_index.GetIndex()].constant); + auto comparison = + make_uniq(constant_list[lower_index.GetIndex()].comparison_type, + entries[i].get().Copy(), std::move(constant)); callback(std::move(comparison)); - } else if (upper_index >= 0) { + } else if (upper_index.IsValid()) { // only upper index found, create simple comparison expression - auto constant = make_uniq(constant_list[upper_index].constant); - auto comparison = make_uniq(constant_list[upper_index].comparison_type, - entries[i].get().Copy(), std::move(constant)); + auto constant = make_uniq(constant_list[upper_index.GetIndex()].constant); + auto comparison = + make_uniq(constant_list[upper_index.GetIndex()].comparison_type, + entries[i].get().Copy(), std::move(constant)); callback(std::move(comparison)); } } @@ -829,7 +833,9 @@ FilterResult FilterCombiner::AddFilter(Expression &expr) { * It's missing to create another method to add transitive filters from scalar filters, e.g, i > 10 */ FilterResult FilterCombiner::AddTransitiveFilters(BoundComparisonExpression &comparison, bool is_root) { - D_ASSERT(IsGreaterThan(comparison.type) || IsLessThan(comparison.type)); + if (!IsGreaterThan(comparison.type) && !IsLessThan(comparison.type)) { + return FilterResult::UNSUPPORTED; + } // get the LHS and RHS nodes auto &left_node = GetNode(*comparison.left); reference right_node = GetNode(*comparison.right); diff --git a/src/optimizer/join_order/relation_manager.cpp b/src/optimizer/join_order/relation_manager.cpp index 2476d2b8e766..15545c401439 100644 --- a/src/optimizer/join_order/relation_manager.cpp +++ b/src/optimizer/join_order/relation_manager.cpp @@ -29,15 +29,32 @@ idx_t RelationManager::NumRelations() { return relations.size(); } -void RelationManager::AddAggregateRelation(LogicalOperator &op, optional_ptr parent, - const RelationStats &stats) { +void RelationManager::AddAggregateOrWindowRelation(LogicalOperator &op, optional_ptr parent, + const RelationStats &stats, LogicalOperatorType op_type) { auto relation = make_uniq(op, parent, stats); auto relation_id = relations.size(); - auto table_indexes = op.GetTableIndex(); - for (auto &index : table_indexes) { - D_ASSERT(relation_mapping.find(index) == relation_mapping.end()); - relation_mapping[index] = relation_id; + LogicalOperator *aggr_op = &op; + while (aggr_op->type != op_type) { + if (aggr_op->children.empty()) { + throw InternalException("Parent of Aggregate/window operation by does not have window/window op as child."); + } + aggr_op = aggr_op->children[0].get(); + } + + if (aggr_op->type == LogicalOperatorType::LOGICAL_WINDOW) { + auto window_bindings = aggr_op->GetColumnBindings(); + for (auto &binding : window_bindings) { + if (relation_mapping.find(binding.table_index) == relation_mapping.end()) { + relation_mapping[binding.table_index] = relation_id; + } + } + } else { + auto table_indexes = aggr_op->GetTableIndex(); + for (auto &index : table_indexes) { + D_ASSERT(relation_mapping.find(index) == relation_mapping.end()); + relation_mapping[index] = relation_id; + } } relations.push_back(std::move(relation)); } @@ -184,7 +201,7 @@ bool RelationManager::ExtractJoinRelations(LogicalOperator &input_op, if (!datasource_filters.empty()) { operator_stats.cardinality *= RelationStatisticsHelper::DEFAULT_SELECTIVITY; } - AddAggregateRelation(input_op, parent, operator_stats); + AddAggregateOrWindowRelation(input_op, parent, operator_stats, op->type); return true; } case LogicalOperatorType::LOGICAL_WINDOW: { @@ -194,7 +211,10 @@ bool RelationManager::ExtractJoinRelations(LogicalOperator &input_op, op->children[0] = optimizer.Optimize(std::move(op->children[0]), &child_stats); auto &window = op->Cast(); auto operator_stats = RelationStatisticsHelper::ExtractWindowStats(window, child_stats); - AddAggregateRelation(input_op, parent, operator_stats); + if (!datasource_filters.empty()) { + operator_stats.cardinality *= RelationStatisticsHelper::DEFAULT_SELECTIVITY; + } + AddAggregateOrWindowRelation(input_op, parent, operator_stats, op->type); return true; } case LogicalOperatorType::LOGICAL_COMPARISON_JOIN: diff --git a/src/optimizer/pushdown/pushdown_limit.cpp b/src/optimizer/pushdown/pushdown_limit.cpp index c2c2d0b00d34..10487bbdcb71 100644 --- a/src/optimizer/pushdown/pushdown_limit.cpp +++ b/src/optimizer/pushdown/pushdown_limit.cpp @@ -9,7 +9,7 @@ namespace duckdb { unique_ptr FilterPushdown::PushdownLimit(unique_ptr op) { auto &limit = op->Cast(); - if (!limit.limit && limit.limit_val == 0) { + if (limit.limit_val.Type() == LimitNodeType::CONSTANT_VALUE && limit.limit_val.GetConstantValue() == 0) { return make_uniq(std::move(op)); } diff --git a/src/optimizer/remove_unused_columns.cpp b/src/optimizer/remove_unused_columns.cpp index bd71de72aee4..73d106558a6c 100644 --- a/src/optimizer/remove_unused_columns.cpp +++ b/src/optimizer/remove_unused_columns.cpp @@ -108,12 +108,12 @@ void RemoveUnusedColumns::VisitOperator(LogicalOperator &op) { } case LogicalOperatorType::LOGICAL_ANY_JOIN: break; - case LogicalOperatorType::LOGICAL_UNION: - if (!everything_referenced) { - // for UNION we can remove unreferenced columns as long as everything_referenced is false (i.e. we - // encounter a UNION node that is not preceded by a DISTINCT) - // this happens when UNION ALL is used - auto &setop = op.Cast(); + case LogicalOperatorType::LOGICAL_UNION: { + auto &setop = op.Cast(); + if (setop.setop_all && !everything_referenced) { + // for UNION we can remove unreferenced columns if union all is used + // it's possible not all columns are referenced, but unreferenced columns in the union can + // still have an affect on the result of the union vector entries; for (idx_t i = 0; i < setop.column_count; i++) { entries.push_back(i); @@ -156,6 +156,7 @@ void RemoveUnusedColumns::VisitOperator(LogicalOperator &op) { remove.VisitOperator(*child); } return; + } case LogicalOperatorType::LOGICAL_EXCEPT: case LogicalOperatorType::LOGICAL_INTERSECT: // for INTERSECT/EXCEPT operations we can't remove anything, just recursively visit the children diff --git a/src/optimizer/rule/ordered_aggregate_optimizer.cpp b/src/optimizer/rule/ordered_aggregate_optimizer.cpp index 12c631e7d516..553c0e30f450 100644 --- a/src/optimizer/rule/ordered_aggregate_optimizer.cpp +++ b/src/optimizer/rule/ordered_aggregate_optimizer.cpp @@ -17,9 +17,8 @@ OrderedAggregateOptimizer::OrderedAggregateOptimizer(ExpressionRewriter &rewrite root->expr_class = ExpressionClass::BOUND_AGGREGATE; } -unique_ptr OrderedAggregateOptimizer::Apply(LogicalOperator &op, vector> &bindings, - bool &changes_made, bool is_root) { - auto &aggr = bindings[0].get().Cast(); +unique_ptr OrderedAggregateOptimizer::Apply(ClientContext &context, BoundAggregateExpression &aggr, + vector> &groups, bool &changes_made) { if (!aggr.order_bys) { // no ORDER BYs defined return nullptr; @@ -32,7 +31,7 @@ unique_ptr OrderedAggregateOptimizer::Apply(LogicalOperator &op, vec } // Remove unnecessary ORDER BY clauses and return if nothing remains - if (aggr.order_bys->Simplify(op.Cast().groups)) { + if (aggr.order_bys->Simplify(groups)) { aggr.order_bys.reset(); changes_made = true; return nullptr; @@ -51,7 +50,6 @@ unique_ptr OrderedAggregateOptimizer::Apply(LogicalOperator &op, vec return nullptr; } - auto &context = rewriter.context; FunctionBinder binder(context); vector> sort_children; for (auto &order : aggr.order_bys->orders) { @@ -93,8 +91,12 @@ unique_ptr OrderedAggregateOptimizer::Apply(LogicalOperator &op, vec auto bound_function = func.functions.GetFunctionByOffset(best_function); return binder.BindAggregateFunction(bound_function, std::move(children), std::move(aggr.filter), aggr.IsDistinct() ? AggregateType::DISTINCT : AggregateType::NON_DISTINCT); +} - return nullptr; +unique_ptr OrderedAggregateOptimizer::Apply(LogicalOperator &op, vector> &bindings, + bool &changes_made, bool is_root) { + auto &aggr = bindings[0].get().Cast(); + return Apply(rewriter.context, aggr, op.Cast().groups, changes_made); } } // namespace duckdb diff --git a/src/optimizer/rule/regex_optimizations.cpp b/src/optimizer/rule/regex_optimizations.cpp index 5aa4401c3f40..16caee8ef1b8 100644 --- a/src/optimizer/rule/regex_optimizations.cpp +++ b/src/optimizer/rule/regex_optimizations.cpp @@ -32,7 +32,7 @@ static void AddCharacter(char chr, LikeString &ret, bool contains) { // if we are not converting into a contains, and the string has LIKE special characters // then don't return a possible LIKE match // same if the character is a control character - if (iscntrl(chr) || (!contains && (chr == '%' || chr == '_'))) { + if (iscntrl(static_cast(chr)) || (!contains && (chr == '%' || chr == '_'))) { ret.exists = false; return; } diff --git a/src/optimizer/statistics/expression/propagate_cast.cpp b/src/optimizer/statistics/expression/propagate_cast.cpp index 4daf5ee58e47..94908ea48665 100644 --- a/src/optimizer/statistics/expression/propagate_cast.cpp +++ b/src/optimizer/statistics/expression/propagate_cast.cpp @@ -24,7 +24,7 @@ static unique_ptr StatisticsOperationsNumericNumericCast(const B static unique_ptr StatisticsNumericCastSwitch(const BaseStatistics &input, const LogicalType &target) { // Downcasting timestamps to times is not a truncation operation switch (target.id()) { - case LogicalTypeId::TIME: + case LogicalTypeId::TIME: { switch (input.GetType().id()) { case LogicalTypeId::TIMESTAMP: case LogicalTypeId::TIMESTAMP_TZ: @@ -33,6 +33,76 @@ static unique_ptr StatisticsNumericCastSwitch(const BaseStatisti break; } break; + } + // FIXME: perform actual stats propagation for these casts + case LogicalTypeId::TIMESTAMP: + case LogicalTypeId::TIMESTAMP_TZ: { + const bool to_timestamp = target.id() == LogicalTypeId::TIMESTAMP; + const bool to_timestamp_tz = target.id() == LogicalTypeId::TIMESTAMP_TZ; + // Casting to timestamp[_tz] (us) from a different unit can not re-use stats + switch (input.GetType().id()) { + case LogicalTypeId::TIMESTAMP_NS: + case LogicalTypeId::TIMESTAMP_MS: + case LogicalTypeId::TIMESTAMP_SEC: + return nullptr; + case LogicalTypeId::TIMESTAMP: { + if (to_timestamp_tz) { + // Both use INT64 physical type, but should not be treated equal + return nullptr; + } + break; + } + case LogicalTypeId::TIMESTAMP_TZ: { + if (to_timestamp) { + // Both use INT64 physical type, but should not be treated equal + return nullptr; + } + break; + } + default: + break; + } + break; + } + case LogicalTypeId::TIMESTAMP_NS: { + // Same as above ^ + switch (input.GetType().id()) { + case LogicalTypeId::TIMESTAMP: + case LogicalTypeId::TIMESTAMP_TZ: + case LogicalTypeId::TIMESTAMP_MS: + case LogicalTypeId::TIMESTAMP_SEC: + return nullptr; + default: + break; + } + break; + } + case LogicalTypeId::TIMESTAMP_MS: { + // Same as above ^ + switch (input.GetType().id()) { + case LogicalTypeId::TIMESTAMP: + case LogicalTypeId::TIMESTAMP_TZ: + case LogicalTypeId::TIMESTAMP_NS: + case LogicalTypeId::TIMESTAMP_SEC: + return nullptr; + default: + break; + } + break; + } + case LogicalTypeId::TIMESTAMP_SEC: { + // Same as above ^ + switch (input.GetType().id()) { + case LogicalTypeId::TIMESTAMP: + case LogicalTypeId::TIMESTAMP_TZ: + case LogicalTypeId::TIMESTAMP_NS: + case LogicalTypeId::TIMESTAMP_MS: + return nullptr; + default: + break; + } + break; + } default: break; } diff --git a/src/optimizer/statistics/operator/propagate_join.cpp b/src/optimizer/statistics/operator/propagate_join.cpp index 5fb8092cd827..093a37905270 100644 --- a/src/optimizer/statistics/operator/propagate_join.cpp +++ b/src/optimizer/statistics/operator/propagate_join.cpp @@ -103,7 +103,7 @@ void StatisticsPropagator::PropagateStatistics(LogicalComparisonJoin &join, uniq // then the whole result should be empty. // TODO: write better CE logic for limits so that we can just look at // join.children[1].estimated_cardinality. - auto limit = make_uniq(1, 0, nullptr, nullptr); + auto limit = make_uniq(BoundLimitNode::ConstantValue(1), BoundLimitNode()); limit->AddChild(std::move(join.children[1])); auto cross_product = LogicalCrossProduct::Create(std::move(join.children[0]), std::move(limit)); *node_ptr = std::move(cross_product); diff --git a/src/optimizer/statistics/operator/propagate_limit.cpp b/src/optimizer/statistics/operator/propagate_limit.cpp index 17855bfc88a2..390e24aba15c 100644 --- a/src/optimizer/statistics/operator/propagate_limit.cpp +++ b/src/optimizer/statistics/operator/propagate_limit.cpp @@ -8,7 +8,11 @@ unique_ptr StatisticsPropagator::PropagateStatistics(LogicalLimi // propagate statistics in the child node PropagateStatistics(limit.children[0]); // return the node stats, with as expected cardinality the amount specified in the limit - return make_uniq(limit.limit_val, limit.limit_val); + if (limit.limit_val.Type() == LimitNodeType::CONSTANT_VALUE) { + auto constant_limit = limit.limit_val.GetConstantValue(); + return make_uniq(constant_limit, constant_limit); + } + return nullptr; } } // namespace duckdb diff --git a/src/optimizer/topn_optimizer.cpp b/src/optimizer/topn_optimizer.cpp index 4e7b59ad7a05..ca64e5700704 100644 --- a/src/optimizer/topn_optimizer.cpp +++ b/src/optimizer/topn_optimizer.cpp @@ -12,18 +12,15 @@ bool TopN::CanOptimize(LogicalOperator &op) { op.children[0]->type == LogicalOperatorType::LOGICAL_ORDER_BY) { auto &limit = op.Cast(); - // When there are some expressions in the limit operator, - // we shouldn't use this optimizations. Because of the expressions - // will be lost when it convert to TopN operator. - if (limit.limit || limit.offset) { + if (limit.limit_val.Type() != LimitNodeType::CONSTANT_VALUE) { + // we need LIMIT to be present AND be a constant value for us to be able to use Top-N return false; } - - // This optimization doesn't apply when OFFSET is present without LIMIT - // Or if offset is not constant - if (limit.limit_val != NumericLimits::Maximum() || limit.offset) { - return true; + if (limit.offset_val.Type() == LimitNodeType::EXPRESSION_VALUE) { + // we need offset to be either not set (i.e. limit without offset) OR have offset be + return false; } + return true; } return false; } @@ -32,8 +29,12 @@ unique_ptr TopN::Optimize(unique_ptr op) { if (CanOptimize(*op)) { auto &limit = op->Cast(); auto &order_by = (op->children[0])->Cast(); - - auto topn = make_uniq(std::move(order_by.orders), limit.limit_val, limit.offset_val); + auto limit_val = int64_t(limit.limit_val.GetConstantValue()); + int64_t offset_val = 0; + if (limit.offset_val.Type() == LimitNodeType::CONSTANT_VALUE) { + offset_val = limit.offset_val.GetConstantValue(); + } + auto topn = make_uniq(std::move(order_by.orders), limit_val, offset_val); topn->AddChild(std::move(order_by.children[0])); op = std::move(topn); } else { diff --git a/src/parallel/executor.cpp b/src/parallel/executor.cpp index 2eb6aa9227de..41e710284c0e 100644 --- a/src/parallel/executor.cpp +++ b/src/parallel/executor.cpp @@ -20,10 +20,11 @@ namespace duckdb { -Executor::Executor(ClientContext &context) : context(context) { +Executor::Executor(ClientContext &context) : context(context), executor_tasks(0) { } Executor::~Executor() { + D_ASSERT(executor_tasks == 0); } Executor &Executor::Get(ClientContext &context) { @@ -390,17 +391,12 @@ void Executor::InitializeInternal(PhysicalOperator &plan) { void Executor::CancelTasks() { task.reset(); - // we do this by creating weak pointers to all pipelines - // then clearing our references to the pipelines - // and waiting until all pipelines have been destroyed - vector> weak_references; + { lock_guard elock(executor_lock); - weak_references.reserve(pipelines.size()); + // mark the query as cancelled so tasks will early-out cancelled = true; - for (auto &pipeline : pipelines) { - weak_references.push_back(weak_ptr(pipeline)); - } + // destroy all pipelines, events and states for (auto &rec_cte_ref : recursive_ctes) { auto &rec_cte = rec_cte_ref.get().Cast(); rec_cte.recursive_meta_pipeline.reset(); @@ -411,15 +407,8 @@ void Executor::CancelTasks() { events.clear(); } // Take all pending tasks and execute them until they cancel - WorkOnTasks(); - // In case there are still tasks being worked, wait for those to properly finish as well - for (auto &weak_ref : weak_references) { - while (true) { - auto weak = weak_ref.lock(); - if (!weak) { - break; - } - } + while (executor_tasks > 0) { + WorkOnTasks(); } } @@ -649,7 +638,7 @@ bool Executor::GetPipelinesProgress(double ¤t_progress, uint64_t ¤t_ current_progress = 0; for (size_t i = 0; i < progress.size(); i++) { - D_ASSERT(progress[i] <= 100); + progress[i] = MaxValue(0.0, MinValue(100.0, progress[i])); current_cardinality += double(progress[i]) * double(cardinality[i]) / double(100); current_progress += progress[i] * double(cardinality[i]) / double(total_cardinality); D_ASSERT(current_cardinality <= total_cardinality); diff --git a/src/parallel/executor_task.cpp b/src/parallel/executor_task.cpp index ba0ea1b185e8..d86b1446caa0 100644 --- a/src/parallel/executor_task.cpp +++ b/src/parallel/executor_task.cpp @@ -4,13 +4,17 @@ namespace duckdb { -ExecutorTask::ExecutorTask(Executor &executor_p) : executor(executor_p) { +ExecutorTask::ExecutorTask(Executor &executor_p, shared_ptr event_p) + : executor(executor_p), event(std::move(event_p)) { + executor.RegisterTask(); } -ExecutorTask::ExecutorTask(ClientContext &context) : ExecutorTask(Executor::Get(context)) { +ExecutorTask::ExecutorTask(ClientContext &context, shared_ptr event_p) + : ExecutorTask(Executor::Get(context), std::move(event_p)) { } ExecutorTask::~ExecutorTask() { + executor.UnregisterTask(); } void ExecutorTask::Deschedule() { diff --git a/src/parallel/pipeline.cpp b/src/parallel/pipeline.cpp index aee671b9236c..e0ace608b19f 100644 --- a/src/parallel/pipeline.cpp +++ b/src/parallel/pipeline.cpp @@ -16,7 +16,7 @@ namespace duckdb { PipelineTask::PipelineTask(Pipeline &pipeline_p, shared_ptr event_p) - : ExecutorTask(pipeline_p.executor), pipeline(pipeline_p), event(std::move(event_p)) { + : ExecutorTask(pipeline_p.executor, std::move(event_p)), pipeline(pipeline_p) { } bool PipelineTask::TaskBlockedOnResult() const { @@ -111,6 +111,17 @@ bool Pipeline::ScheduleParallel(shared_ptr &event) { } } idx_t max_threads = source_state->MaxThreads(); + auto &scheduler = TaskScheduler::GetScheduler(executor.context); + idx_t active_threads = scheduler.NumberOfThreads(); + if (max_threads > active_threads) { + max_threads = active_threads; + } + if (sink && sink->sink_state) { + max_threads = sink->sink_state->MaxThreads(max_threads); + } + if (max_threads > active_threads) { + max_threads = active_threads; + } return LaunchScanTasks(event, max_threads); } @@ -155,11 +166,6 @@ void Pipeline::Schedule(shared_ptr &event) { bool Pipeline::LaunchScanTasks(shared_ptr &event, idx_t max_threads) { // split the scan up into parts and schedule the parts - auto &scheduler = TaskScheduler::GetScheduler(executor.context); - idx_t active_threads = scheduler.NumberOfThreads(); - if (max_threads > active_threads) { - max_threads = active_threads; - } if (max_threads <= 1) { // too small to parallelize return false; diff --git a/src/parallel/pipeline_executor.cpp b/src/parallel/pipeline_executor.cpp index fadfd8bd03d8..18bb5e745f0a 100644 --- a/src/parallel/pipeline_executor.cpp +++ b/src/parallel/pipeline_executor.cpp @@ -412,7 +412,7 @@ OperatorResultType PipelineExecutor::Execute(DataChunk &input, DataChunk &result in_process_operators.push(current_idx); } else if (result == OperatorResultType::FINISHED) { D_ASSERT(current_chunk.size() == 0); - FinishProcessing(current_idx); + FinishProcessing(NumericCast(current_idx)); return OperatorResultType::FINISHED; } current_chunk.Verify(); diff --git a/src/parallel/pipeline_finish_event.cpp b/src/parallel/pipeline_finish_event.cpp index a3858a2ddf33..1b83fc14573f 100644 --- a/src/parallel/pipeline_finish_event.cpp +++ b/src/parallel/pipeline_finish_event.cpp @@ -1,6 +1,7 @@ #include "duckdb/parallel/pipeline_finish_event.hpp" #include "duckdb/execution/executor.hpp" #include "duckdb/parallel/interrupt.hpp" +#include "duckdb/parallel/executor_task.hpp" namespace duckdb { @@ -9,11 +10,10 @@ namespace duckdb { class PipelineFinishTask : public ExecutorTask { public: explicit PipelineFinishTask(Pipeline &pipeline_p, shared_ptr event_p) - : ExecutorTask(pipeline_p.executor), pipeline(pipeline_p), event(std::move(event_p)) { + : ExecutorTask(pipeline_p.executor, std::move(event_p)), pipeline(pipeline_p) { } Pipeline &pipeline; - shared_ptr event; public: TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { diff --git a/src/parallel/pipeline_initialize_event.cpp b/src/parallel/pipeline_initialize_event.cpp index f7cb8b40be45..2d9e460d5495 100644 --- a/src/parallel/pipeline_initialize_event.cpp +++ b/src/parallel/pipeline_initialize_event.cpp @@ -11,11 +11,10 @@ PipelineInitializeEvent::PipelineInitializeEvent(shared_ptr pipeline_p class PipelineInitializeTask : public ExecutorTask { public: explicit PipelineInitializeTask(Pipeline &pipeline_p, shared_ptr event_p) - : ExecutorTask(pipeline_p.executor), pipeline(pipeline_p), event(std::move(event_p)) { + : ExecutorTask(pipeline_p.executor, std::move(event_p)), pipeline(pipeline_p) { } Pipeline &pipeline; - shared_ptr event; public: TaskExecutionResult ExecuteTask(TaskExecutionMode mode) override { diff --git a/src/parallel/task_scheduler.cpp b/src/parallel/task_scheduler.cpp index aad0a13360b6..4f90a8997e64 100644 --- a/src/parallel/task_scheduler.cpp +++ b/src/parallel/task_scheduler.cpp @@ -231,7 +231,7 @@ static void ThreadExecuteTasks(TaskScheduler *scheduler, atomic *marker) { int32_t TaskScheduler::NumberOfThreads() { lock_guard t(thread_lock); auto &config = DBConfig::GetConfig(db); - return threads.size() + config.options.external_threads; + return NumericCast(threads.size() + config.options.external_threads); } void TaskScheduler::SetThreads(idx_t total_threads, idx_t external_threads) { @@ -242,13 +242,13 @@ void TaskScheduler::SetThreads(idx_t total_threads, idx_t external_threads) { if (total_threads < external_threads) { throw SyntaxException("Number of threads can't be smaller than number of external threads!"); } - thread_count = total_threads - external_threads; #else - if (threads.size() != external_threads) { + if (total_threads != external_threads) { throw NotImplementedException( - "DuckDB was compiled without threads! Setting threads != external_threads is not allowed."); + "DuckDB was compiled without threads! Setting total_threads != external_threads is not allowed."); } #endif + thread_count = NumericCast(total_threads - external_threads); } void TaskScheduler::SetAllocatorFlushTreshold(idx_t threshold) { diff --git a/src/parser/parsed_data/CMakeLists.txt b/src/parser/parsed_data/CMakeLists.txt index 729781f2e0af..9e2a712ba42a 100644 --- a/src/parser/parsed_data/CMakeLists.txt +++ b/src/parser/parsed_data/CMakeLists.txt @@ -6,7 +6,7 @@ add_library_unity( alter_table_function_info.cpp alter_table_info.cpp attach_info.cpp - comment_on_info.cpp + comment_on_column_info.cpp create_info.cpp create_index_info.cpp create_aggregate_function_info.cpp diff --git a/src/parser/parsed_data/alter_table_info.cpp b/src/parser/parsed_data/alter_table_info.cpp index 0f9967024603..977c66d6f137 100644 --- a/src/parser/parsed_data/alter_table_info.cpp +++ b/src/parser/parsed_data/alter_table_info.cpp @@ -154,24 +154,6 @@ unique_ptr ChangeColumnTypeInfo::Copy() const { expression->Copy()); } -//===--------------------------------------------------------------------===// -// SetColumnCommentInfo -//===--------------------------------------------------------------------===// -SetColumnCommentInfo::SetColumnCommentInfo() : AlterTableInfo(AlterTableType::SET_COLUMN_COMMENT) { -} - -SetColumnCommentInfo::SetColumnCommentInfo(AlterEntryData data, string column_name, Value comment_value) - : AlterTableInfo(AlterTableType::SET_COLUMN_COMMENT, std::move(data)), column_name(std::move(column_name)), - comment(std::move(comment_value)) { -} - -SetColumnCommentInfo::~SetColumnCommentInfo() { -} - -unique_ptr SetColumnCommentInfo::Copy() const { - return make_uniq_base(GetAlterEntryData(), column_name, comment); -} - //===--------------------------------------------------------------------===// // SetDefaultInfo //===--------------------------------------------------------------------===// diff --git a/src/parser/parsed_data/comment_on_column_info.cpp b/src/parser/parsed_data/comment_on_column_info.cpp new file mode 100644 index 000000000000..909990d69d77 --- /dev/null +++ b/src/parser/parsed_data/comment_on_column_info.cpp @@ -0,0 +1,44 @@ +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" +#include "duckdb/catalog/catalog.hpp" + +namespace duckdb { + +SetColumnCommentInfo::SetColumnCommentInfo() + : AlterInfo(AlterType::SET_COLUMN_COMMENT, INVALID_CATALOG, INVALID_SCHEMA, "", OnEntryNotFound::THROW_EXCEPTION), + catalog_entry_type(CatalogType::INVALID), column_name(""), comment_value(Value()) { +} + +SetColumnCommentInfo::SetColumnCommentInfo(string catalog, string schema, string name, string column_name, + Value comment_value, OnEntryNotFound if_not_found) + : AlterInfo(AlterType::SET_COLUMN_COMMENT, std::move(catalog), std::move(schema), std::move(name), if_not_found), + catalog_entry_type(CatalogType::INVALID), column_name(std::move(column_name)), + comment_value(std::move(comment_value)) { +} + +unique_ptr SetColumnCommentInfo::Copy() const { + auto result = make_uniq(catalog, schema, name, column_name, comment_value, if_not_found); + result->type = type; + return std::move(result); +} + +optional_ptr SetColumnCommentInfo::TryResolveCatalogEntry(ClientContext &context) { + auto entry = Catalog::GetEntry(context, CatalogType::TABLE_ENTRY, catalog, schema, name, if_not_found); + + if (entry) { + catalog_entry_type = entry->type; + return entry; + } + + return nullptr; +} + +// Note: this is a bit of a weird one: the exact type is not yet known: it can be either a view or a column this needs +// to be resolved at bind time. If type is invalid here, the CommentOnColumnInfo was not properly resolved first +CatalogType SetColumnCommentInfo::GetCatalogType() const { + if (catalog_entry_type == CatalogType::INVALID) { + throw InternalException("Attempted to access unresolved "); + } + return catalog_entry_type; +} + +} // namespace duckdb diff --git a/src/parser/parsed_data/comment_on_info.cpp b/src/parser/parsed_data/comment_on_info.cpp deleted file mode 100644 index 2be18857f9f9..000000000000 --- a/src/parser/parsed_data/comment_on_info.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "duckdb/parser/parsed_data/comment_on_info.hpp" - -namespace duckdb { - -CommentOnInfo::CommentOnInfo() - : ParseInfo(TYPE), catalog(INVALID_CATALOG), schema(INVALID_SCHEMA), name(""), comment(Value()) { -} - -unique_ptr CommentOnInfo::Copy() const { - auto result = make_uniq(); - result->type = type; - result->catalog = catalog; - result->schema = schema; - result->name = name; - result->comment = comment; - return result; -} - -} // namespace duckdb diff --git a/src/parser/parsed_data/create_view_info.cpp b/src/parser/parsed_data/create_view_info.cpp index 4f30137f4c58..78d14969a237 100644 --- a/src/parser/parsed_data/create_view_info.cpp +++ b/src/parser/parsed_data/create_view_info.cpp @@ -51,6 +51,7 @@ unique_ptr CreateViewInfo::Copy() const { CopyProperties(*result); result->aliases = aliases; result->types = types; + result->column_comments = column_comments; result->query = unique_ptr_cast(query->Copy()); return std::move(result); } diff --git a/src/parser/parser.cpp b/src/parser/parser.cpp index 9d2cf7559201..8274c521d71f 100644 --- a/src/parser/parser.cpp +++ b/src/parser/parser.cpp @@ -128,7 +128,7 @@ vector SplitQueryStringIntoStatements(const string &query) { // Break sql string down into sql statements using the tokenizer vector query_statements; auto tokens = Parser::Tokenize(query); - auto next_statement_start = 0; + idx_t next_statement_start = 0; for (idx_t i = 1; i < tokens.size(); ++i) { auto &t_prev = tokens[i - 1]; auto &t = tokens[i]; diff --git a/src/parser/query_error_context.cpp b/src/parser/query_error_context.cpp index 65f3eaff73fc..5dd5447802cc 100644 --- a/src/parser/query_error_context.cpp +++ b/src/parser/query_error_context.cpp @@ -23,7 +23,21 @@ string QueryErrorContext::Format(const string &query, const string &error_messag idx_t start_pos = 0; idx_t line_number = 1; for (idx_t i = 0; i < error_location; i++) { - if (StringUtil::CharacterIsNewline(query[i])) { + bool is_newline = false; + switch (query[i]) { + case '\r': + if (i + 1 >= error_location || query[i + 1] != '\n') { + // not \r\n + is_newline = true; + } + break; + case '\n': + is_newline = true; + break; + default: + break; + } + if (is_newline) { line_number++; start_pos = i + 1; } diff --git a/src/parser/tableref/pivotref.cpp b/src/parser/tableref/pivotref.cpp index 4b182277952a..341aa9564263 100644 --- a/src/parser/tableref/pivotref.cpp +++ b/src/parser/tableref/pivotref.cpp @@ -43,9 +43,9 @@ string PivotColumn::ToString() const { if (e > 0) { result += ", "; } - if (entry.star_expr) { + if (entry.expr) { D_ASSERT(entry.values.empty()); - result += entry.star_expr->ToString(); + result += entry.expr->ToString(); } else if (entry.values.size() == 1) { result += entry.values[0].ToSQLString(); } else { @@ -124,7 +124,7 @@ PivotColumn PivotColumn::Copy() const { PivotColumnEntry PivotColumnEntry::Copy() const { PivotColumnEntry result; result.values = values; - result.star_expr = star_expr ? star_expr->Copy() : nullptr; + result.expr = expr ? expr->Copy() : nullptr; result.alias = alias; return result; } diff --git a/src/parser/tableref/showref.cpp b/src/parser/tableref/showref.cpp index a403d6e83ef7..950defb31671 100644 --- a/src/parser/tableref/showref.cpp +++ b/src/parser/tableref/showref.cpp @@ -13,7 +13,9 @@ string ShowRef::ToString() const { result += "DESCRIBE "; } if (query) { + result += "("; result += query->ToString(); + result += ")"; } else if (table_name != "__show_tables_expanded") { result += table_name; } diff --git a/src/parser/transform/expression/transform_boolean_test.cpp b/src/parser/transform/expression/transform_boolean_test.cpp index 9ee96a9317e9..ec9dffb794a5 100644 --- a/src/parser/transform/expression/transform_boolean_test.cpp +++ b/src/parser/transform/expression/transform_boolean_test.cpp @@ -22,7 +22,7 @@ static unique_ptr TransformBooleanTestInternal(unique_ptr TransformBooleanTestIsNull(unique_ptr argument, ExpressionType operator_type, idx_t query_location) { auto result = make_uniq(operator_type, std::move(argument)); - Transformer::SetQueryLocation(*result, query_location); + Transformer::SetQueryLocation(*result, UnsafeNumericCast(query_location)); return std::move(result); } diff --git a/src/parser/transform/expression/transform_cast.cpp b/src/parser/transform/expression/transform_cast.cpp index d884290d35fa..c10c81d76404 100644 --- a/src/parser/transform/expression/transform_cast.cpp +++ b/src/parser/transform/expression/transform_cast.cpp @@ -3,6 +3,7 @@ #include "duckdb/parser/expression/constant_expression.hpp" #include "duckdb/parser/transformer.hpp" #include "duckdb/common/operator/cast_operators.hpp" +#include "duckdb/common/types/blob.hpp" namespace duckdb { @@ -15,7 +16,12 @@ unique_ptr Transformer::TransformTypeCast(duckdb_libpgquery::P if (!root.tryCast && target_type == LogicalType::BLOB && root.arg->type == duckdb_libpgquery::T_PGAConst) { auto c = PGPointerCast(root.arg); if (c->val.type == duckdb_libpgquery::T_PGString) { - return make_uniq(Value::BLOB(string(c->val.val.str))); + CastParameters parameters; + if (root.location >= 0) { + parameters.query_location = root.location; + } + auto blob_data = Blob::ToBlob(string(c->val.val.str), parameters); + return make_uniq(Value::BLOB_RAW(blob_data)); } } // transform the expression node @@ -23,7 +29,9 @@ unique_ptr Transformer::TransformTypeCast(duckdb_libpgquery::P bool try_cast = root.tryCast; // now create a cast operation - return make_uniq(target_type, std::move(expression), try_cast); + auto result = make_uniq(target_type, std::move(expression), try_cast); + SetQueryLocation(*result, root.location); + return std::move(result); } } // namespace duckdb diff --git a/src/parser/transform/expression/transform_constant.cpp b/src/parser/transform/expression/transform_constant.cpp index c64d47d6b8be..7e668c9e0aea 100644 --- a/src/parser/transform/expression/transform_constant.cpp +++ b/src/parser/transform/expression/transform_constant.cpp @@ -21,9 +21,9 @@ unique_ptr Transformer::TransformValue(duckdb_libpgquery::PG string_t str_val(val.val.str); bool try_cast_as_integer = true; bool try_cast_as_decimal = true; - int decimal_position = -1; - int num_underscores = 0; - int num_integer_underscores = 0; + optional_idx decimal_position = optional_idx::Invalid(); + idx_t num_underscores = 0; + idx_t num_integer_underscores = 0; for (idx_t i = 0; i < str_val.GetSize(); i++) { if (val.val.str[i] == '.') { // decimal point: cast as either decimal or double @@ -37,7 +37,7 @@ unique_ptr Transformer::TransformValue(duckdb_libpgquery::PG } if (val.val.str[i] == '_') { num_underscores++; - if (decimal_position < 0) { + if (!decimal_position.IsValid()) { num_integer_underscores++; } } @@ -57,11 +57,11 @@ unique_ptr Transformer::TransformValue(duckdb_libpgquery::PG } } idx_t decimal_offset = val.val.str[0] == '-' ? 3 : 2; - if (try_cast_as_decimal && decimal_position >= 0 && + if (try_cast_as_decimal && decimal_position.IsValid() && str_val.GetSize() - num_underscores < Decimal::MAX_WIDTH_DECIMAL + decimal_offset) { // figure out the width/scale based on the decimal position - auto width = uint8_t(str_val.GetSize() - 1 - num_underscores); - auto scale = uint8_t(width - decimal_position + num_integer_underscores); + auto width = NumericCast(str_val.GetSize() - 1 - num_underscores); + auto scale = NumericCast(width - decimal_position.GetIndex() + num_integer_underscores); if (val.val.str[0] == '-') { width--; } diff --git a/src/parser/transform/expression/transform_interval.cpp b/src/parser/transform/expression/transform_interval.cpp index 9865bb03e66a..50450f5fe46b 100644 --- a/src/parser/transform/expression/transform_interval.cpp +++ b/src/parser/transform/expression/transform_interval.cpp @@ -32,7 +32,8 @@ unique_ptr Transformer::TransformInterval(duckdb_libpgquery::P return make_uniq(LogicalType::INTERVAL, std::move(expr)); } - int32_t mask = PGPointerCast(node.typmods->head->data.ptr_value)->val.val.ival; + int32_t mask = NumericCast( + PGPointerCast(node.typmods->head->data.ptr_value)->val.val.ival); // these seemingly random constants are from datetime.hpp // they are copied here to avoid having to include this header // the bitshift is from the function INTERVAL_MASK in the parser diff --git a/src/parser/transform/helpers/transform_typename.cpp b/src/parser/transform/helpers/transform_typename.cpp index b11da893e5cb..ff40554f6084 100644 --- a/src/parser/transform/helpers/transform_typename.cpp +++ b/src/parser/transform/helpers/transform_typename.cpp @@ -132,7 +132,7 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName &type_n D_ASSERT(!children.empty()); result_type = LogicalType::UNION(std::move(children)); } else { - int64_t width, scale; + idx_t width, scale; if (base_type == LogicalTypeId::DECIMAL) { // default decimal width/scale width = 18; @@ -186,7 +186,7 @@ LogicalType Transformer::TransformTypeName(duckdb_libpgquery::PGTypeName &type_n if (scale > width) { throw ParserException("Scale cannot be bigger than width"); } - result_type = LogicalType::DECIMAL(width, scale); + result_type = LogicalType::DECIMAL(NumericCast(width), NumericCast(scale)); break; case LogicalTypeId::INTERVAL: if (modifier_idx > 1) { diff --git a/src/parser/transform/statement/transform_comment_on.cpp b/src/parser/transform/statement/transform_comment_on.cpp index d48e4fa1f9c9..097b0c27385e 100644 --- a/src/parser/transform/statement/transform_comment_on.cpp +++ b/src/parser/transform/statement/transform_comment_on.cpp @@ -2,6 +2,7 @@ #include "duckdb/parser/parsed_data/alter_info.hpp" #include "duckdb/parser/parsed_data/alter_table_info.hpp" #include "duckdb/parser/statement/alter_statement.hpp" +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" #include "duckdb/parser/transformer.hpp" namespace duckdb { @@ -83,14 +84,8 @@ unique_ptr Transformer::TransformCommentOn(duckdb_libpgquery::PG info = make_uniq(type, qualified_name.catalog, qualified_name.schema, qualified_name.name, comment_value, OnEntryNotFound::THROW_EXCEPTION); } else if (stmt.object_type == duckdb_libpgquery::PG_OBJECT_COLUMN) { - // Special case: Table Column - AlterEntryData alter_entry_data; - alter_entry_data.catalog = qualified_name.catalog; - alter_entry_data.schema = qualified_name.schema; - alter_entry_data.name = qualified_name.name; - alter_entry_data.if_not_found = OnEntryNotFound::THROW_EXCEPTION; - - info = make_uniq(alter_entry_data, column_name, comment_value); + info = make_uniq(qualified_name.catalog, qualified_name.schema, qualified_name.name, + column_name, comment_value, OnEntryNotFound::THROW_EXCEPTION); } else if (stmt.object_type == duckdb_libpgquery::PG_OBJECT_DATABASE) { throw NotImplementedException("Adding comments to databases is not implemented"); } else if (stmt.object_type == duckdb_libpgquery::PG_OBJECT_SCHEMA) { diff --git a/src/parser/transform/statement/transform_pivot_stmt.cpp b/src/parser/transform/statement/transform_pivot_stmt.cpp index a554b2a6a114..ae36530e4a3c 100644 --- a/src/parser/transform/statement/transform_pivot_stmt.cpp +++ b/src/parser/transform/statement/transform_pivot_stmt.cpp @@ -168,7 +168,8 @@ unique_ptr Transformer::TransformPivotStatement(duckdb_libpgquery::PG } // generate CREATE TYPE statements for each of the columns that do not have an IN list - auto columns = TransformPivotList(*pivot->columns); + bool is_pivot = !pivot->unpivots; + auto columns = TransformPivotList(*pivot->columns, is_pivot); auto pivot_idx = PivotEntryCount(); for (idx_t c = 0; c < columns.size(); c++) { auto &col = columns[c]; @@ -209,6 +210,7 @@ unique_ptr Transformer::TransformPivotStatement(duckdb_libpgquery::PG pivot_ref->groups = TransformStringList(pivot->groups); } pivot_ref->pivots = std::move(columns); + SetQueryLocation(*pivot_ref, pivot->location); select_node->from_table = std::move(pivot_ref); // transform order by/limit modifiers TransformModifiers(select, *select_node); diff --git a/src/parser/transform/statement/transform_show_select.cpp b/src/parser/transform/statement/transform_show_select.cpp index c22c948677ff..78e19d175842 100644 --- a/src/parser/transform/statement/transform_show_select.cpp +++ b/src/parser/transform/statement/transform_show_select.cpp @@ -9,14 +9,13 @@ namespace duckdb { unique_ptr Transformer::TransformShowSelect(duckdb_libpgquery::PGVariableShowSelectStmt &stmt) { // we capture the select statement of SHOW - auto select_stmt = PGPointerCast(stmt.stmt); - auto select_node = make_uniq(); select_node->select_list.push_back(make_uniq()); auto show_ref = make_uniq(); show_ref->show_type = stmt.is_summary ? ShowType::SUMMARY : ShowType::DESCRIBE; - show_ref->query = TransformSelectNode(*select_stmt); + auto select = TransformSelect(stmt.stmt); + show_ref->query = std::move(select->node); select_node->from_table = std::move(show_ref); auto result = make_uniq(); diff --git a/src/parser/transform/tableref/transform_join.cpp b/src/parser/transform/tableref/transform_join.cpp index 4213cb5a2f52..9c60ec244b40 100644 --- a/src/parser/transform/tableref/transform_join.cpp +++ b/src/parser/transform/tableref/transform_join.cpp @@ -2,6 +2,9 @@ #include "duckdb/parser/tableref/basetableref.hpp" #include "duckdb/parser/tableref/joinref.hpp" #include "duckdb/parser/transformer.hpp" +#include "duckdb/parser/query_node/select_node.hpp" +#include "duckdb/parser/tableref/subqueryref.hpp" +#include "duckdb/parser/expression/star_expression.hpp" namespace duckdb { @@ -70,6 +73,19 @@ unique_ptr Transformer::TransformJoin(duckdb_libpgquery::PGJoinExpr &r result->ref_type = JoinRefType::CROSS; } result->condition = TransformExpression(root.quals); + if (root.alias) { + // join with an alias - wrap it in a subquery + auto select_node = make_uniq(); + select_node->select_list.push_back(make_uniq()); + select_node->from_table = std::move(result); + auto select = make_uniq(); + select->node = std::move(select_node); + auto subquery = make_uniq(std::move(select)); + SetQueryLocation(*subquery, root.location); + // apply the alias to that subquery + subquery->alias = TransformAlias(root.alias, subquery->column_name_alias); + return std::move(subquery); + } return std::move(result); } diff --git a/src/parser/transform/tableref/transform_pivot.cpp b/src/parser/transform/tableref/transform_pivot.cpp index 6cb5c0436b52..1223994de7a6 100644 --- a/src/parser/transform/tableref/transform_pivot.cpp +++ b/src/parser/transform/tableref/transform_pivot.cpp @@ -7,42 +7,49 @@ namespace duckdb { -void Transformer::TransformPivotInList(unique_ptr &expr, PivotColumnEntry &entry, bool root_entry) { - if (expr->type == ExpressionType::COLUMN_REF) { +bool Transformer::TransformPivotInList(unique_ptr &expr, PivotColumnEntry &entry, bool root_entry) { + switch (expr->type) { + case ExpressionType::COLUMN_REF: { auto &colref = expr->Cast(); if (colref.IsQualified()) { - throw ParserException("PIVOT IN list cannot contain qualified column references"); + throw ParserException(expr->query_location, "PIVOT IN list cannot contain qualified column references"); } entry.values.emplace_back(colref.GetColumnName()); - } else if (root_entry && expr->type == ExpressionType::FUNCTION) { + return true; + } + case ExpressionType::FUNCTION: { auto &function = expr->Cast(); if (function.function_name != "row") { - throw ParserException("PIVOT IN list must contain columns or lists of columns"); + return false; } for (auto &child : function.children) { - TransformPivotInList(child, entry, false); + if (!TransformPivotInList(child, entry, false)) { + return false; + } } - } else if (root_entry && expr->type == ExpressionType::STAR) { - entry.star_expr = std::move(expr); - } else { + return true; + } + default: { Value val; if (!Transformer::ConstructConstantFromExpression(*expr, val)) { - throw ParserException("PIVOT IN list must contain columns or lists of columns"); + return false; } entry.values.push_back(std::move(val)); + return true; + } } } -PivotColumn Transformer::TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot) { +PivotColumn Transformer::TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot, bool is_pivot) { PivotColumn col; if (pivot.pivot_columns) { TransformExpressionList(*pivot.pivot_columns, col.pivot_expressions); for (auto &expr : col.pivot_expressions) { if (expr->IsScalar()) { - throw ParserException("Cannot pivot on constant value \"%s\"", expr->ToString()); + throw ParserException(expr->query_location, "Cannot pivot on constant value \"%s\"", expr->ToString()); } if (expr->HasSubquery()) { - throw ParserException("Cannot pivot on subquery \"%s\"", expr->ToString()); + throw ParserException(expr->query_location, "Cannot pivot on subquery \"%s\"", expr->ToString()); } } } else if (pivot.unpivot_columns) { @@ -56,7 +63,18 @@ PivotColumn Transformer::TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot) auto expr = TransformExpression(n); PivotColumnEntry entry; entry.alias = expr->alias; - TransformPivotInList(expr, entry); + auto transformed = TransformPivotInList(expr, entry); + if (!transformed) { + // could not transform into list of constant values + if (is_pivot) { + // for pivot - throw an exception + throw ParserException(expr->query_location, + "PIVOT IN list must contain columns or lists of columns"); + } else { + // for unpivot - we can forward the expression immediately + entry.expr = std::move(expr); + } + } col.entries.push_back(std::move(entry)); } } @@ -69,11 +87,11 @@ PivotColumn Transformer::TransformPivotColumn(duckdb_libpgquery::PGPivot &pivot) return col; } -vector Transformer::TransformPivotList(duckdb_libpgquery::PGList &list) { +vector Transformer::TransformPivotList(duckdb_libpgquery::PGList &list, bool is_pivot) { vector result; for (auto node = list.head; node != nullptr; node = node->next) { auto pivot = PGPointerCast(node->data.ptr_value); - result.push_back(TransformPivotColumn(*pivot)); + result.push_back(TransformPivotColumn(*pivot, is_pivot)); } return result; } @@ -87,41 +105,40 @@ unique_ptr Transformer::TransformPivot(duckdb_libpgquery::PGPivotExpr if (root.unpivots) { result->unpivot_names = TransformStringList(root.unpivots); } - result->pivots = TransformPivotList(*root.pivots); - if (!result->unpivot_names.empty() && result->pivots.size() > 1) { + auto is_pivot = result->unpivot_names.empty(); + result->pivots = TransformPivotList(*root.pivots, is_pivot); + if (!is_pivot && result->pivots.size() > 1) { throw ParserException("UNPIVOT requires a single pivot element"); } if (root.groups) { result->groups = TransformStringList(root.groups); } for (auto &pivot : result->pivots) { - idx_t expected_size; - bool is_pivot = result->unpivot_names.empty(); - if (!result->unpivot_names.empty()) { + if (!is_pivot) { // unpivot if (pivot.unpivot_names.size() != 1) { throw ParserException("UNPIVOT requires a single column name for the PIVOT IN clause"); } D_ASSERT(pivot.pivot_expressions.empty()); - expected_size = pivot.entries[0].values.size(); } else { // pivot - expected_size = pivot.pivot_expressions.size(); + auto expected_size = pivot.pivot_expressions.size(); D_ASSERT(pivot.unpivot_names.empty()); - } - for (auto &entry : pivot.entries) { - if (entry.star_expr && is_pivot) { - throw ParserException("PIVOT IN list must contain columns or lists of columns - star expressions are " - "only supported for UNPIVOT"); - } - if (entry.values.size() != expected_size) { - throw ParserException("PIVOT IN list - inconsistent amount of rows - expected %d but got %d", - expected_size, entry.values.size()); + for (auto &entry : pivot.entries) { + if (entry.expr) { + throw ParserException("PIVOT IN list must contain columns or lists of columns - expressions are " + "only supported for UNPIVOT"); + } + if (entry.values.size() != expected_size) { + throw ParserException("PIVOT IN list - inconsistent amount of rows - expected %d but got %d", + expected_size, entry.values.size()); + } } } } result->include_nulls = root.include_nulls; result->alias = TransformAlias(root.alias, result->column_name_alias); + SetQueryLocation(*result, root.location); return std::move(result); } diff --git a/src/planner/binder.cpp b/src/planner/binder.cpp index 5a81ee6eccc1..9ab70f440aab 100644 --- a/src/planner/binder.cpp +++ b/src/planner/binder.cpp @@ -21,20 +21,20 @@ namespace duckdb { -Binder *Binder::GetRootBinder() { - Binder *root = this; - while (root->parent) { - root = root->parent.get(); +Binder &Binder::GetRootBinder() { + reference root = *this; + while (root.get().parent) { + root = *root.get().parent; } - return root; + return root.get(); } idx_t Binder::GetBinderDepth() const { - const Binder *root = this; + const_reference root = *this; idx_t depth = 1; - while (root->parent) { + while (root.get().parent) { depth++; - root = root->parent.get(); + root = *root.get().parent; } return depth; } @@ -299,8 +299,8 @@ void Binder::AddBoundView(ViewCatalogEntry &view) { } idx_t Binder::GenerateTableIndex() { - auto root_binder = GetRootBinder(); - return root_binder->bound_tables++; + auto &root_binder = GetRootBinder(); + return root_binder.bound_tables++; } void Binder::PushExpressionBinder(ExpressionBinder &binder) { @@ -326,13 +326,13 @@ bool Binder::HasActiveBinder() { } vector> &Binder::GetActiveBinders() { - auto root_binder = GetRootBinder(); - return root_binder->active_binders; + auto &root_binder = GetRootBinder(); + return root_binder.active_binders; } void Binder::AddUsingBindingSet(unique_ptr set) { - auto root_binder = GetRootBinder(); - root_binder->bind_context.AddUsingBindingSet(std::move(set)); + auto &root_binder = GetRootBinder(); + root_binder.bind_context.AddUsingBindingSet(std::move(set)); } void Binder::MoveCorrelatedExpressions(Binder &other) { @@ -401,14 +401,13 @@ bool Binder::HasMatchingBinding(const string &catalog_name, const string &schema } void Binder::SetBindingMode(BindingMode mode) { - auto root_binder = GetRootBinder(); - // FIXME: this used to also set the 'mode' for the current binder, was that necessary? - root_binder->mode = mode; + auto &root_binder = GetRootBinder(); + root_binder.mode = mode; } BindingMode Binder::GetBindingMode() { - auto root_binder = GetRootBinder(); - return root_binder->mode; + auto &root_binder = GetRootBinder(); + return root_binder.mode; } void Binder::SetCanContainNulls(bool can_contain_nulls_p) { @@ -428,13 +427,13 @@ void Binder::SetAlwaysRequireRebind() { } void Binder::AddTableName(string table_name) { - auto root_binder = GetRootBinder(); - root_binder->table_names.insert(std::move(table_name)); + auto &root_binder = GetRootBinder(); + root_binder.table_names.insert(std::move(table_name)); } const unordered_set &Binder::GetTableNames() { - auto root_binder = GetRootBinder(); - return root_binder->table_names; + auto &root_binder = GetRootBinder(); + return root_binder.table_names; } // FIXME: this is extremely naive diff --git a/src/planner/binder/expression/bind_columnref_expression.cpp b/src/planner/binder/expression/bind_columnref_expression.cpp index f90b4e129bc6..ce6cb104b723 100644 --- a/src/planner/binder/expression/bind_columnref_expression.cpp +++ b/src/planner/binder/expression/bind_columnref_expression.cpp @@ -423,7 +423,7 @@ BindResult ExpressionBinder::BindExpression(ColumnRefExpression &col_ref_p, idx_ if (!expr) { if (!col_ref_p.IsQualified()) { // column was not found - check if it is a SQL value function - auto value_function = GetSQLValueFunction(col_ref_p.GetName()); + auto value_function = GetSQLValueFunction(col_ref_p.GetColumnName()); if (value_function) { return BindExpression(value_function, depth); } diff --git a/src/planner/binder/expression/bind_lambda.cpp b/src/planner/binder/expression/bind_lambda.cpp index 2907889a9888..7dd9b737336b 100644 --- a/src/planner/binder/expression/bind_lambda.cpp +++ b/src/planner/binder/expression/bind_lambda.cpp @@ -65,11 +65,18 @@ void ExtractParameters(LambdaExpression &expr, vector &column_names, vec BindResult ExpressionBinder::BindExpression(LambdaExpression &expr, idx_t depth, const LogicalType &list_child_type, optional_ptr bind_lambda_function) { - // this is for binding JSON + // This is not a lambda expression, but the JSON arrow operator. if (!bind_lambda_function) { - auto lhs_expr = expr.lhs->Copy(); - OperatorExpression arrow_expr(ExpressionType::ARROW, std::move(lhs_expr), expr.expr->Copy()); - return BindExpression(arrow_expr, depth); + OperatorExpression arrow_expr(ExpressionType::ARROW, std::move(expr.lhs), std::move(expr.expr)); + auto bind_result = BindExpression(arrow_expr, depth); + + // The arrow_expr now contains bound nodes. We move these into the original expression. + if (bind_result.HasError()) { + D_ASSERT(arrow_expr.children.size() == 2); + expr.lhs = std::move(arrow_expr.children[0]); + expr.expr = std::move(arrow_expr.children[1]); + } + return bind_result; } // extract and verify lambda parameters to create dummy columns diff --git a/src/planner/binder/expression/bind_operator_expression.cpp b/src/planner/binder/expression/bind_operator_expression.cpp index 4aaac887f5d1..3ac3f7881c3a 100644 --- a/src/planner/binder/expression/bind_operator_expression.cpp +++ b/src/planner/binder/expression/bind_operator_expression.cpp @@ -88,7 +88,9 @@ BindResult ExpressionBinder::BindExpression(OperatorExpression &op, idx_t depth) if (op.type == ExpressionType::GROUPING_FUNCTION) { return BindGroupingFunction(op, depth); } - // bind the children of the operator expression + + // Bind the children of the operator expression. We already create bound expressions. + // Only those children that trigger an error are not yet bound. ErrorData error; for (idx_t i = 0; i < op.children.size(); i++) { BindChild(op.children[i], depth, error); @@ -96,6 +98,7 @@ BindResult ExpressionBinder::BindExpression(OperatorExpression &op, idx_t depth) if (error.HasError()) { return BindResult(std::move(error)); } + // all children bound successfully string function_name; switch (op.type) { diff --git a/src/planner/binder/expression/bind_star_expression.cpp b/src/planner/binder/expression/bind_star_expression.cpp index 915c32e22337..ebdd8022606f 100644 --- a/src/planner/binder/expression/bind_star_expression.cpp +++ b/src/planner/binder/expression/bind_star_expression.cpp @@ -1,10 +1,12 @@ #include "duckdb/planner/binder.hpp" #include "duckdb/parser/expression/star_expression.hpp" #include "duckdb/parser/expression/constant_expression.hpp" +#include "duckdb/parser/expression/columnref_expression.hpp" +#include "duckdb/parser/expression/operator_expression.hpp" #include "duckdb/planner/expression_binder/table_function_binder.hpp" #include "duckdb/parser/parsed_expression_iterator.hpp" #include "duckdb/execution/expression_executor.hpp" -#include "re2/re2.h" +#include "duckdb/function/scalar/regexp.hpp" namespace duckdb { @@ -76,13 +78,54 @@ void Binder::ReplaceStarExpression(unique_ptr &expr, unique_pt D_ASSERT(expr); if (expr->GetExpressionClass() == ExpressionClass::STAR) { D_ASSERT(replacement); + auto alias = expr->alias; expr = replacement->Copy(); + if (!alias.empty()) { + expr->alias = std::move(alias); + } return; } ParsedExpressionIterator::EnumerateChildren( *expr, [&](unique_ptr &child_expr) { ReplaceStarExpression(child_expr, replacement); }); } +static string ReplaceColumnsAlias(const string &alias, const string &column_name, optional_ptr regex) { + string result; + result.reserve(alias.size()); + for (idx_t c = 0; c < alias.size(); c++) { + if (alias[c] == '\\') { + c++; + if (c >= alias.size()) { + throw BinderException("Unterminated backslash in COLUMNS(*) \"%s\" alias. Backslashes must either be " + "escaped or followed by a number", + alias); + } + if (alias[c] == '\\') { + result += "\\"; + continue; + } + if (alias[c] < '0' || alias[c] > '9') { + throw BinderException("Invalid backslash code in COLUMNS(*) \"%s\" alias. Backslashes must either be " + "escaped or followed by a number", + alias); + } + if (alias[c] == '0') { + result += column_name; + } else if (!regex) { + throw BinderException( + "Only the backslash escape code \\0 can be used when no regex is supplied to COLUMNS(*)"); + } else { + string extracted; + RE2::Extract(column_name, *regex, "\\" + alias.substr(c, 1), &extracted); + result += extracted; + } + } else { + result += alias[c]; + } + } + return result; +} + void Binder::ExpandStarExpression(unique_ptr expr, vector> &new_select_list) { StarExpression *star = nullptr; @@ -97,6 +140,7 @@ void Binder::ExpandStarExpression(unique_ptr expr, // we have star expressions! expand the list of star expressions bind_context.GenerateAllColumnExpressions(*star, star_list); + unique_ptr regex; if (star->expr) { // COLUMNS with an expression // two options: @@ -120,15 +164,15 @@ void Binder::ExpandStarExpression(unique_ptr expr, throw BinderException("COLUMNS does not support NULL as regex argument"); } auto ®ex_str = StringValue::Get(val); - duckdb_re2::RE2 regex(regex_str); - if (!regex.error().empty()) { - auto err = StringUtil::Format("Failed to compile regex \"%s\": %s", regex_str, regex.error()); + regex = make_uniq(regex_str); + if (!regex->error().empty()) { + auto err = StringUtil::Format("Failed to compile regex \"%s\": %s", regex_str, regex->error()); throw BinderException(*star, err); } vector> new_list; for (idx_t i = 0; i < star_list.size(); i++) { auto &colref = star_list[i]->Cast(); - if (!RE2::PartialMatch(colref.GetColumnName(), regex)) { + if (!RE2::PartialMatch(colref.GetColumnName(), *regex)) { continue; } new_list.push_back(std::move(star_list[i])); @@ -180,6 +224,28 @@ void Binder::ExpandStarExpression(unique_ptr expr, for (idx_t i = 0; i < star_list.size(); i++) { auto new_expr = expr->Copy(); ReplaceStarExpression(new_expr, star_list[i]); + if (star->columns) { + optional_ptr expr = star_list[i].get(); + while (expr) { + if (expr->type == ExpressionType::COLUMN_REF) { + break; + } + if (expr->type == ExpressionType::OPERATOR_COALESCE) { + expr = expr->Cast().children[0].get(); + } else { + // unknown expression + expr = nullptr; + } + } + if (expr) { + auto &colref = expr->Cast(); + if (new_expr->alias.empty()) { + new_expr->alias = colref.GetColumnName(); + } else { + new_expr->alias = ReplaceColumnsAlias(new_expr->alias, colref.GetColumnName(), regex.get()); + } + } + } new_select_list.push_back(std::move(new_expr)); } } diff --git a/src/planner/binder/expression/bind_window_expression.cpp b/src/planner/binder/expression/bind_window_expression.cpp index 4dbd8625cf01..7801f5e6b27c 100644 --- a/src/planner/binder/expression/bind_window_expression.cpp +++ b/src/planner/binder/expression/bind_window_expression.cpp @@ -88,6 +88,27 @@ static unique_ptr CastWindowExpression(unique_ptr return std::move(bound); } +static bool IsRangeType(const LogicalType &type) { + switch (type.InternalType()) { + case PhysicalType::INT8: + case PhysicalType::INT16: + case PhysicalType::INT32: + case PhysicalType::INT64: + case PhysicalType::UINT8: + case PhysicalType::UINT16: + case PhysicalType::UINT32: + case PhysicalType::UINT64: + case PhysicalType::INT128: + case PhysicalType::UINT128: + case PhysicalType::FLOAT: + case PhysicalType::DOUBLE: + case PhysicalType::INTERVAL: + return true; + default: + return false; + } +} + static LogicalType BindRangeExpression(ClientContext &context, const string &name, unique_ptr &expr, unique_ptr &order_expr) { @@ -101,6 +122,10 @@ static LogicalType BindRangeExpression(ClientContext &context, const string &nam D_ASSERT(expr.get()); D_ASSERT(expr->expression_class == ExpressionClass::BOUND_EXPRESSION); auto &bound = BoundExpression::GetExpression(*expr); + QueryErrorContext error_context(bound->query_location); + if (bound->return_type == LogicalType::SQLNULL) { + throw BinderException(error_context, "Window RANGE expressions cannot be NULL"); + } children.emplace_back(std::move(bound)); ErrorData error; @@ -109,6 +134,11 @@ static LogicalType BindRangeExpression(ClientContext &context, const string &nam if (!function) { error.Throw(); } + // +/- can be applied to non-scalar types, + // so we can't rely on function binding to catch all problems. + if (!IsRangeType(function->return_type)) { + throw BinderException(error_context, "Invalid type for Window RANGE expression"); + } bound = std::move(function); return bound->return_type; } @@ -145,7 +175,7 @@ BindResult BaseSelectBinder::BindWindow(WindowExpression &window, idx_t depth) { // If the frame is a RANGE frame and the type is a time, // then we have to convert the time to a timestamp to avoid wrapping. - if (!is_range) { + if (!is_range || error.HasError()) { continue; } auto &order_expr = order.expression; @@ -171,6 +201,10 @@ BindResult BaseSelectBinder::BindWindow(WindowExpression &window, idx_t depth) { } // Restore any collation expressions + for (auto &part_expr : window.partitions) { + auto &bound_partition = BoundExpression::GetExpression(*part_expr); + ExpressionBinder::PushCollation(context, bound_partition, bound_partition->return_type, true); + } for (auto &order : window.orders) { auto &order_expr = order.expression; auto &bound_order = BoundExpression::GetExpression(*order_expr); diff --git a/src/planner/binder/query_node/bind_select_node.cpp b/src/planner/binder/query_node/bind_select_node.cpp index 41931f5390b3..accd54a27642 100644 --- a/src/planner/binder/query_node/bind_select_node.cpp +++ b/src/planner/binder/query_node/bind_select_node.cpp @@ -40,75 +40,83 @@ unique_ptr Binder::BindOrderExpression(OrderBinder &order_binder, un return bound_expr; } -unique_ptr Binder::BindDelimiter(ClientContext &context, OrderBinder &order_binder, - unique_ptr delimiter, const LogicalType &type, - Value &delimiter_value) { +BoundLimitNode Binder::BindLimitValue(OrderBinder &order_binder, unique_ptr limit_val, + bool is_percentage, bool is_offset) { auto new_binder = Binder::CreateBinder(context, this, true); - if (delimiter->HasSubquery()) { + if (limit_val->HasSubquery()) { if (!order_binder.HasExtraList()) { throw BinderException("Subquery in LIMIT/OFFSET not supported in set operation"); } - return order_binder.CreateExtraReference(std::move(delimiter)); + auto bound_limit = order_binder.CreateExtraReference(std::move(limit_val)); + if (is_percentage) { + return BoundLimitNode::ExpressionPercentage(std::move(bound_limit)); + } else { + return BoundLimitNode::ExpressionValue(std::move(bound_limit)); + } } ExpressionBinder expr_binder(*new_binder, context); - expr_binder.target_type = type; - auto expr = expr_binder.Bind(delimiter); + auto target_type = is_percentage ? LogicalType::DOUBLE : LogicalType::BIGINT; + ; + expr_binder.target_type = target_type; + auto expr = expr_binder.Bind(limit_val); if (expr->IsFoldable()) { //! this is a constant - delimiter_value = ExpressionExecutor::EvaluateScalar(context, *expr).CastAs(context, type); - return nullptr; + auto val = ExpressionExecutor::EvaluateScalar(context, *expr).CastAs(context, target_type); + if (is_percentage) { + D_ASSERT(!is_offset); + double percentage_val; + if (val.IsNull()) { + percentage_val = 100.0; + } else { + percentage_val = val.GetValue(); + } + if (Value::IsNan(percentage_val) || percentage_val < 0 || percentage_val > 100) { + throw OutOfRangeException("Limit percent out of range, should be between 0% and 100%"); + } + return BoundLimitNode::ConstantPercentage(percentage_val); + } else { + int64_t constant_val; + if (val.IsNull()) { + constant_val = is_offset ? 0 : NumericLimits::Maximum(); + } else { + constant_val = val.GetValue(); + } + if (constant_val < 0) { + throw BinderException(expr->query_location, "LIMIT/OFFSET cannot be negative"); + } + return BoundLimitNode::ConstantValue(constant_val); + } } if (!new_binder->correlated_columns.empty()) { throw BinderException("Correlated columns not supported in LIMIT/OFFSET"); } // move any correlated columns to this binder MoveCorrelatedExpressions(*new_binder); - return expr; + if (is_percentage) { + return BoundLimitNode::ExpressionPercentage(std::move(expr)); + } else { + return BoundLimitNode::ExpressionValue(std::move(expr)); + } } duckdb::unique_ptr Binder::BindLimit(OrderBinder &order_binder, LimitModifier &limit_mod) { auto result = make_uniq(); if (limit_mod.limit) { - Value val; - result->limit = BindDelimiter(context, order_binder, std::move(limit_mod.limit), LogicalType::BIGINT, val); - if (!result->limit) { - result->limit_val = val.IsNull() ? NumericLimits::Maximum() : val.GetValue(); - if (result->limit_val < 0) { - throw BinderException("LIMIT cannot be negative"); - } - } + result->limit_val = BindLimitValue(order_binder, std::move(limit_mod.limit), false, false); } if (limit_mod.offset) { - Value val; - result->offset = BindDelimiter(context, order_binder, std::move(limit_mod.offset), LogicalType::BIGINT, val); - if (!result->offset) { - result->offset_val = val.IsNull() ? 0 : val.GetValue(); - if (result->offset_val < 0) { - throw BinderException("OFFSET cannot be negative"); - } - } + result->offset_val = BindLimitValue(order_binder, std::move(limit_mod.offset), false, true); } return std::move(result); } unique_ptr Binder::BindLimitPercent(OrderBinder &order_binder, LimitPercentModifier &limit_mod) { - auto result = make_uniq(); + auto result = make_uniq(); if (limit_mod.limit) { - Value val; - result->limit = BindDelimiter(context, order_binder, std::move(limit_mod.limit), LogicalType::DOUBLE, val); - if (!result->limit) { - result->limit_percent = val.IsNull() ? 100 : val.GetValue(); - if (result->limit_percent < 0.0) { - throw InvalidInputException("Limit percentage can't be negative value"); - } - } + result->limit_val = BindLimitValue(order_binder, std::move(limit_mod.limit), true, false); } if (limit_mod.offset) { - Value val; - result->offset = BindDelimiter(context, order_binder, std::move(limit_mod.offset), LogicalType::BIGINT, val); - if (!result->offset) { - result->offset_val = val.IsNull() ? 0 : val.GetValue(); - } + result->offset_val = BindLimitValue(order_binder, std::move(limit_mod.offset), false, true); } return std::move(result); } @@ -124,7 +132,8 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun distinct.distinct_on_targets.empty() ? DistinctType::DISTINCT : DistinctType::DISTINCT_ON; if (distinct.distinct_on_targets.empty()) { for (idx_t i = 0; i < result.names.size(); i++) { - distinct.distinct_on_targets.push_back(make_uniq(Value::INTEGER(1 + i))); + distinct.distinct_on_targets.push_back( + make_uniq(Value::INTEGER(UnsafeNumericCast(1 + i)))); } } for (auto &distinct_on_target : distinct.distinct_on_targets) { @@ -153,8 +162,9 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun vector new_orders; for (idx_t i = 0; i < order_binder.MaxCount(); i++) { - new_orders.emplace_back(order_type, null_order, - make_uniq(Value::INTEGER(i + 1))); + new_orders.emplace_back( + order_type, null_order, + make_uniq(Value::INTEGER(UnsafeNumericCast(i + 1)))); } order.orders = std::move(new_orders); } @@ -266,14 +276,8 @@ void Binder::BindModifierTypes(BoundQueryNode &result, const vector } case ResultModifierType::LIMIT_MODIFIER: { auto &limit = bound_mod->Cast(); - AssignReturnType(limit.limit, sql_types); - AssignReturnType(limit.offset, sql_types); - break; - } - case ResultModifierType::LIMIT_PERCENT_MODIFIER: { - auto &limit = bound_mod->Cast(); - AssignReturnType(limit.limit, sql_types); - AssignReturnType(limit.offset, sql_types); + AssignReturnType(limit.limit_val.GetExpression(), sql_types); + AssignReturnType(limit.offset_val.GetExpression(), sql_types); break; } case ResultModifierType::ORDER_MODIFIER: { diff --git a/src/planner/binder/query_node/plan_query_node.cpp b/src/planner/binder/query_node/plan_query_node.cpp index ff29a54829c9..97678d2271e0 100644 --- a/src/planner/binder/query_node/plan_query_node.cpp +++ b/src/planner/binder/query_node/plan_query_node.cpp @@ -2,7 +2,6 @@ #include "duckdb/planner/binder.hpp" #include "duckdb/planner/operator/logical_distinct.hpp" #include "duckdb/planner/operator/logical_limit.hpp" -#include "duckdb/planner/operator/logical_limit_percent.hpp" #include "duckdb/planner/operator/logical_order.hpp" #include "duckdb/planner/bound_result_modifier.hpp" @@ -38,16 +37,7 @@ unique_ptr Binder::VisitQueryNode(BoundQueryNode &node, unique_ } case ResultModifierType::LIMIT_MODIFIER: { auto &bound = mod->Cast(); - auto limit = make_uniq(bound.limit_val, bound.offset_val, std::move(bound.limit), - std::move(bound.offset)); - limit->AddChild(std::move(root)); - root = std::move(limit); - break; - } - case ResultModifierType::LIMIT_PERCENT_MODIFIER: { - auto &bound = mod->Cast(); - auto limit = make_uniq(bound.limit_percent, bound.offset_val, std::move(bound.limit), - std::move(bound.offset)); + auto limit = make_uniq(std::move(bound.limit_val), std::move(bound.offset_val)); limit->AddChild(std::move(root)); root = std::move(limit); break; diff --git a/src/planner/binder/query_node/plan_subquery.cpp b/src/planner/binder/query_node/plan_subquery.cpp index d2ad056bb3fb..7370457a6031 100644 --- a/src/planner/binder/query_node/plan_subquery.cpp +++ b/src/planner/binder/query_node/plan_subquery.cpp @@ -29,7 +29,7 @@ static unique_ptr PlanUncorrelatedSubquery(Binder &binder, BoundSubq case SubqueryType::EXISTS: { // uncorrelated EXISTS // we only care about existence, hence we push a LIMIT 1 operator - auto limit = make_uniq(1, 0, nullptr, nullptr); + auto limit = make_uniq(BoundLimitNode::ConstantValue(1), BoundLimitNode()); limit->AddChild(std::move(plan)); plan = std::move(limit); @@ -79,7 +79,7 @@ static unique_ptr PlanUncorrelatedSubquery(Binder &binder, BoundSubq // in the uncorrelated case we are only interested in the first result of the query // hence we simply push a LIMIT 1 to get the first row of the subquery - auto limit = make_uniq(1, 0, nullptr, nullptr); + auto limit = make_uniq(BoundLimitNode::ConstantValue(1), BoundLimitNode()); limit->AddChild(std::move(plan)); plan = std::move(limit); diff --git a/src/planner/binder/statement/bind_create.cpp b/src/planner/binder/statement/bind_create.cpp index fef6365380e2..7903342bd8e3 100644 --- a/src/planner/binder/statement/bind_create.cpp +++ b/src/planner/binder/statement/bind_create.cpp @@ -54,12 +54,18 @@ void Binder::BindSchemaOrCatalog(ClientContext &context, string &catalog, string if (database) { // we have a database with this name // check if there is a schema - auto schema_obj = Catalog::GetSchema(context, INVALID_CATALOG, schema, OnEntryNotFound::RETURN_NULL); - if (schema_obj) { - auto &attached = schema_obj->catalog.GetAttached(); - throw BinderException( - "Ambiguous reference to catalog or schema \"%s\" - use a fully qualified path like \"%s.%s\"", - schema, attached.GetName(), schema); + auto &search_path = *context.client_data->catalog_search_path; + auto catalog_names = search_path.GetCatalogsForSchema(schema); + if (catalog_names.empty()) { + catalog_names.push_back(DatabaseManager::GetDefaultDatabase(context)); + } + for (auto &catalog_name : catalog_names) { + auto &catalog = Catalog::GetCatalog(context, catalog_name); + if (catalog.CheckAmbiguousCatalogOrSchema(context, schema)) { + throw BinderException( + "Ambiguous reference to catalog or schema \"%s\" - use a fully qualified path like \"%s.%s\"", + schema, catalog_name, schema); + } } catalog = schema; schema = string(); diff --git a/src/planner/binder/statement/bind_drop.cpp b/src/planner/binder/statement/bind_drop.cpp index 65baae2ef5bd..9c5f43dfaeaa 100644 --- a/src/planner/binder/statement/bind_drop.cpp +++ b/src/planner/binder/statement/bind_drop.cpp @@ -35,7 +35,7 @@ BoundStatement Binder::Bind(DropStatement &stmt) { case CatalogType::TYPE_ENTRY: { BindSchemaOrCatalog(stmt.info->catalog, stmt.info->schema); auto entry = Catalog::GetEntry(context, stmt.info->type, stmt.info->catalog, stmt.info->schema, stmt.info->name, - OnEntryNotFound::RETURN_NULL); + stmt.info->if_not_found); if (!entry) { break; } diff --git a/src/planner/binder/statement/bind_export.cpp b/src/planner/binder/statement/bind_export.cpp index 380145eb53ac..f5370a20a915 100644 --- a/src/planner/binder/statement/bind_export.cpp +++ b/src/planner/binder/statement/bind_export.cpp @@ -14,8 +14,9 @@ #include "duckdb/parser/expression/cast_expression.hpp" #include "duckdb/parser/tableref/basetableref.hpp" #include "duckdb/parser/query_node/select_node.hpp" - +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/string_util.hpp" + #include namespace duckdb { @@ -34,7 +35,7 @@ string SanitizeExportIdentifier(const string &str) { if (c >= 'A' && c <= 'Z') { // To lowercase - result[i] = tolower(c); + result[i] = NumericCast(tolower(c)); } else { // Substitute to underscore result[i] = '_'; @@ -128,6 +129,11 @@ static LogicalType AlterLogicalType(const LogicalType &original, copy_supports_t auto child = AlterLogicalType(ListType::GetChildType(original), type_check); return LogicalType::LIST(child); } + case LogicalTypeId::ARRAY: { + // Attempt to convert the array to a list + auto &child = ArrayType::GetChildType(original); + return AlterLogicalType(LogicalType::LIST(child), type_check); + } case LogicalTypeId::STRUCT: { auto &original_children = StructType::GetChildTypes(original); child_list_t new_children; diff --git a/src/planner/binder/statement/bind_insert.cpp b/src/planner/binder/statement/bind_insert.cpp index d8a252af077d..d0827fde2ebb 100644 --- a/src/planner/binder/statement/bind_insert.cpp +++ b/src/planner/binder/statement/bind_insert.cpp @@ -259,18 +259,21 @@ void Binder::BindOnConflictClause(LogicalInsert &insert, TableCatalogEntry &tabl if (!index.is_unique) { continue; } - // does this work with multi-column indexes? auto &indexed_columns = index.column_set; + bool matches = false; for (auto &column : table.GetColumns().Physical()) { if (indexed_columns.count(column.Physical().index)) { - found_matching_indexes++; + matches = true; + break; } } + found_matching_indexes += matches; } + if (!found_matching_indexes) { throw BinderException( "There are no UNIQUE/PRIMARY KEY Indexes that refer to this table, ON CONFLICT is a no-op"); - } else if (storage_info.index_info.size() != 1) { + } else if (found_matching_indexes != 1) { if (insert.action_type != OnConflictAction::NOTHING) { // When no conflict target is provided, and the action type is UPDATE, // we only allow the operation when only a single Index exists diff --git a/src/planner/binder/statement/bind_simple.cpp b/src/planner/binder/statement/bind_simple.cpp index 3d1b73f016ce..08c73ef84733 100644 --- a/src/planner/binder/statement/bind_simple.cpp +++ b/src/planner/binder/statement/bind_simple.cpp @@ -5,6 +5,7 @@ #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp" #include "duckdb/catalog/catalog_entry/table_catalog_entry.hpp" #include "duckdb/catalog/catalog_entry/view_catalog_entry.hpp" +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" #include "duckdb/planner/binder.hpp" //! This file contains the binder definitions for statements that do not need to be bound at all and only require a @@ -18,8 +19,18 @@ BoundStatement Binder::Bind(AlterStatement &stmt) { result.types = {LogicalType::BOOLEAN}; BindSchemaOrCatalog(stmt.info->catalog, stmt.info->schema); - auto entry = Catalog::GetEntry(context, stmt.info->GetCatalogType(), stmt.info->catalog, stmt.info->schema, - stmt.info->name, stmt.info->if_not_found); + optional_ptr entry; + + if (stmt.info->type == AlterType::SET_COLUMN_COMMENT) { + // for column comments we need to an extra step: they can alter a table or a view, we resolve that here. + auto &info = stmt.info->Cast(); + entry = info.TryResolveCatalogEntry(context); + } else { + // All other AlterTypes + entry = Catalog::GetEntry(context, stmt.info->GetCatalogType(), stmt.info->catalog, stmt.info->schema, + stmt.info->name, stmt.info->if_not_found); + } + if (entry) { D_ASSERT(!entry->deleted); auto &catalog = entry->ParentCatalog(); diff --git a/src/planner/binder/tableref/bind_basetableref.cpp b/src/planner/binder/tableref/bind_basetableref.cpp index f8d04c5bf344..f68634dbc048 100644 --- a/src/planner/binder/tableref/bind_basetableref.cpp +++ b/src/planner/binder/tableref/bind_basetableref.cpp @@ -181,14 +181,17 @@ unique_ptr Binder::Bind(BaseTableRef &ref) { } // could not find an alternative: bind again to get the error - table_or_view = Catalog::GetEntry(context, CatalogType::TABLE_ENTRY, ref.catalog_name, ref.schema_name, - ref.table_name, OnEntryNotFound::THROW_EXCEPTION, error_context); + Catalog::GetEntry(context, CatalogType::TABLE_ENTRY, ref.catalog_name, ref.schema_name, ref.table_name, + OnEntryNotFound::THROW_EXCEPTION, error_context); + throw InternalException("Catalog::GetEntry should have thrown an exception above"); } + switch (table_or_view->type) { case CatalogType::TABLE_ENTRY: { // base table: create the BoundBaseTableRef node auto table_index = GenerateTableIndex(); auto &table = table_or_view->Cast(); + properties.read_databases.insert(table.ParentCatalog().GetName()); unique_ptr bind_data; auto scan_function = table.GetScanFunction(context, bind_data); @@ -244,11 +247,19 @@ unique_ptr Binder::Bind(BaseTableRef &ref) { auto &bound_subquery = bound_child->Cast(); if (GetBindingMode() != BindingMode::EXTRACT_NAMES) { if (bound_subquery.subquery->types != view_catalog_entry.types) { - throw BinderException("Contents of view were altered: types don't match!"); + auto actual_types = StringUtil::ToString(bound_subquery.subquery->types, ", "); + auto expected_types = StringUtil::ToString(view_catalog_entry.types, ", "); + throw BinderException( + "Contents of view were altered: types don't match! Expected [%s], but found [%s] instead", + expected_types, actual_types); } if (bound_subquery.subquery->names.size() == view_catalog_entry.names.size() && bound_subquery.subquery->names != view_catalog_entry.names) { - throw BinderException("Contents of view were altered: names don't match!"); + auto actual_names = StringUtil::Join(bound_subquery.subquery->names, ", "); + auto expected_names = StringUtil::Join(view_catalog_entry.names, ", "); + throw BinderException( + "Contents of view were altered: names don't match! Expected [%s], but found [%s] instead", + expected_names, actual_names); } } bind_context.AddView(bound_subquery.subquery->GetRootIndex(), subquery.alias, subquery, diff --git a/src/planner/binder/tableref/bind_joinref.cpp b/src/planner/binder/tableref/bind_joinref.cpp index 1de85aa36a1c..7d1d882210c5 100644 --- a/src/planner/binder/tableref/bind_joinref.cpp +++ b/src/planner/binder/tableref/bind_joinref.cpp @@ -118,6 +118,13 @@ static vector RemoveDuplicateUsingColumns(const vector &using_co return result; } +unique_ptr Binder::BindJoin(Binder &parent_binder, TableRef &ref) { + unnamed_subquery_index = parent_binder.unnamed_subquery_index; + auto result = Bind(ref); + parent_binder.unnamed_subquery_index = unnamed_subquery_index; + return result; +} + unique_ptr Binder::Bind(JoinRef &ref) { auto result = make_uniq(ref.ref_type); result->left_binder = Binder::CreateBinder(context, this); @@ -126,10 +133,10 @@ unique_ptr Binder::Bind(JoinRef &ref) { auto &right_binder = *result->right_binder; result->type = ref.type; - result->left = left_binder.Bind(*ref.left); + result->left = left_binder.BindJoin(*this, *ref.left); { LateralBinder binder(left_binder, context); - result->right = right_binder.Bind(*ref.right); + result->right = right_binder.BindJoin(*this, *ref.right); bool is_lateral = false; // Store the correlated columns in the right binder in bound ref for planning of LATERALs // Ignore the correlated columns in the left binder, flattening handles those correlations diff --git a/src/planner/binder/tableref/bind_pivot.cpp b/src/planner/binder/tableref/bind_pivot.cpp index 3ca1a8879261..6c89b7b2cd91 100644 --- a/src/planner/binder/tableref/bind_pivot.cpp +++ b/src/planner/binder/tableref/bind_pivot.cpp @@ -80,16 +80,16 @@ static unique_ptr ConstructInitialGrouping(PivotRef &ref, vectorCast(); if (handled_columns.find(columnref.GetColumnName()) == handled_columns.end()) { // not handled - add to grouping set - subquery->groups.group_expressions.push_back( - make_uniq(Value::INTEGER(subquery->select_list.size() + 1))); + subquery->groups.group_expressions.push_back(make_uniq( + Value::INTEGER(UnsafeNumericCast(subquery->select_list.size() + 1)))); subquery->select_list.push_back(make_uniq(columnref.GetColumnName())); } } } else { // if rows are specified only the columns mentioned in rows are added as groups for (auto &row : ref.groups) { - subquery->groups.group_expressions.push_back( - make_uniq(Value::INTEGER(subquery->select_list.size() + 1))); + subquery->groups.group_expressions.push_back(make_uniq( + Value::INTEGER(UnsafeNumericCast(subquery->select_list.size() + 1)))); subquery->select_list.push_back(make_uniq(row)); } } @@ -165,8 +165,8 @@ static unique_ptr PivotInitialAggregate(PivotBindState &bind_state, pivot_expr->alias = "__internal_pivot_ref" + std::to_string(++pivot_count); } auto pivot_alias = pivot_expr->alias; - subquery_stage1->groups.group_expressions.push_back( - make_uniq(Value::INTEGER(subquery_stage1->select_list.size() + 1))); + subquery_stage1->groups.group_expressions.push_back(make_uniq( + Value::INTEGER(UnsafeNumericCast(subquery_stage1->select_list.size() + 1)))); subquery_stage1->select_list.push_back(std::move(pivot_expr)); pivot_expr = make_uniq(std::move(pivot_alias)); } @@ -202,8 +202,8 @@ static unique_ptr PivotListAggregate(PivotBindState &bind_state, Piv // add all of the groups for (idx_t gr = 0; gr < bind_state.internal_group_names.size(); gr++) { - subquery_stage2->groups.group_expressions.push_back( - make_uniq(Value::INTEGER(subquery_stage2->select_list.size() + 1))); + subquery_stage2->groups.group_expressions.push_back(make_uniq( + Value::INTEGER(UnsafeNumericCast(subquery_stage2->select_list.size() + 1)))); auto group_reference = make_uniq(bind_state.internal_group_names[gr]); group_reference->alias = bind_state.internal_group_names[gr]; subquery_stage2->select_list.push_back(std::move(group_reference)); @@ -396,7 +396,7 @@ unique_ptr Binder::BindPivot(PivotRef &ref, vector Binder::BindPivot(PivotRef &ref, vector column_names; + vector> expressions; +}; + +void Binder::ExtractUnpivotEntries(Binder &child_binder, PivotColumnEntry &entry, + vector &unpivot_entries) { + if (!entry.expr) { + // pivot entry without an expression - generate one + UnpivotEntry unpivot_entry; + unpivot_entry.alias = entry.alias; + for (auto &val : entry.values) { + auto column_name = val.ToString(); + if (column_name.empty()) { + throw BinderException("UNPIVOT - empty column name not supported"); + } + unpivot_entry.expressions.push_back(make_uniq(column_name)); + } + unpivot_entries.push_back(std::move(unpivot_entry)); + return; + } + D_ASSERT(entry.values.empty()); + // expand star expressions (if any) + vector> star_columns; + child_binder.ExpandStarExpression(std::move(entry.expr), star_columns); + + for (auto &expr : star_columns) { + // create one pivot entry per result column + UnpivotEntry unpivot_entry; + if (!expr->alias.empty()) { + unpivot_entry.alias = std::move(expr->alias); + } + unpivot_entry.expressions.push_back(std::move(expr)); + unpivot_entries.push_back(std::move(unpivot_entry)); + } +} + +void Binder::ExtractUnpivotColumnName(ParsedExpression &expr, vector &result) { + if (expr.type == ExpressionType::COLUMN_REF) { + auto &colref = expr.Cast(); + result.push_back(colref.GetColumnName()); + return; + } + if (expr.type == ExpressionType::SUBQUERY) { + throw BinderException(expr, "UNPIVOT list cannot contain subqueries"); + } + ParsedExpressionIterator::EnumerateChildren( + expr, [&](ParsedExpression &child) { ExtractUnpivotColumnName(child, result); }); +} + unique_ptr Binder::BindUnpivot(Binder &child_binder, PivotRef &ref, vector> all_columns, unique_ptr &where_clause) { D_ASSERT(ref.groups.empty()); D_ASSERT(ref.pivots.size() == 1); - unique_ptr expr; auto select_node = make_uniq(); select_node->from_table = std::move(ref.source); @@ -478,34 +528,32 @@ unique_ptr Binder::BindUnpivot(Binder &child_binder, PivotRef &ref, auto &unpivot = ref.pivots[0]; // handle star expressions in any entries - vector new_entries; + vector unpivot_entries; for (auto &entry : unpivot.entries) { - if (entry.star_expr) { - D_ASSERT(entry.values.empty()); - vector> star_columns; - child_binder.ExpandStarExpression(std::move(entry.star_expr), star_columns); - - for (auto &col : star_columns) { - if (col->type != ExpressionType::COLUMN_REF) { - throw InternalException("Unexpected child of unpivot star - not a ColumnRef"); - } - auto &columnref = col->Cast(); - PivotColumnEntry new_entry; - new_entry.values.emplace_back(columnref.GetColumnName()); - new_entry.alias = columnref.GetColumnName(); - new_entries.push_back(std::move(new_entry)); - } - } else { - new_entries.push_back(std::move(entry)); - } + ExtractUnpivotEntries(child_binder, entry, unpivot_entries); } - unpivot.entries = std::move(new_entries); case_insensitive_set_t handled_columns; case_insensitive_map_t name_map; - for (auto &entry : unpivot.entries) { - for (auto &value : entry.values) { - handled_columns.insert(value.ToString()); + for (auto &entry : unpivot_entries) { + for (auto &unpivot_expr : entry.expressions) { + vector result; + ExtractUnpivotColumnName(*unpivot_expr, result); + if (result.empty()) { + + throw BinderException( + *unpivot_expr, + "UNPIVOT clause must contain exactly one column - expression \"%s\" does not contain any", + unpivot_expr->ToString()); + } + if (result.size() > 1) { + throw BinderException( + *unpivot_expr, + "UNPIVOT clause must contain exactly one column - expression \"%s\" contains multiple (%s)", + unpivot_expr->ToString(), StringUtil::Join(result, ", ")); + } + handled_columns.insert(result[0]); + entry.column_names.push_back(std::move(result[0])); } } @@ -531,10 +579,11 @@ unique_ptr Binder::BindUnpivot(Binder &child_binder, PivotRef &ref, } } vector unpivot_names; - for (auto &entry : unpivot.entries) { + for (auto &entry : unpivot_entries) { string generated_name; - for (auto &val : entry.values) { - auto name_entry = name_map.find(val.ToString()); + D_ASSERT(entry.expressions.size() == entry.column_names.size()); + for (idx_t c = 0; c < entry.expressions.size(); c++) { + auto name_entry = name_map.find(entry.column_names[c]); if (name_entry == name_map.end()) { throw InternalException("Unpivot - could not find column name in name map"); } @@ -546,21 +595,20 @@ unique_ptr Binder::BindUnpivot(Binder &child_binder, PivotRef &ref, unpivot_names.emplace_back(!entry.alias.empty() ? entry.alias : generated_name); } vector>> unpivot_expressions; - for (idx_t v_idx = 1; v_idx < unpivot.entries.size(); v_idx++) { - if (unpivot.entries[v_idx].values.size() != unpivot.entries[0].values.size()) { + for (idx_t v_idx = 1; v_idx < unpivot_entries.size(); v_idx++) { + if (unpivot_entries[v_idx].expressions.size() != unpivot_entries[0].expressions.size()) { throw BinderException( ref, "UNPIVOT value count mismatch - entry has %llu values, but expected all entries to have %llu values", - unpivot.entries[v_idx].values.size(), unpivot.entries[0].values.size()); + unpivot_entries[v_idx].expressions.size(), unpivot_entries[0].expressions.size()); } } - for (idx_t v_idx = 0; v_idx < unpivot.entries[0].values.size(); v_idx++) { + for (idx_t v_idx = 0; v_idx < unpivot_entries[0].expressions.size(); v_idx++) { vector> expressions; - expressions.reserve(unpivot.entries.size()); - for (auto &entry : unpivot.entries) { - auto colref = make_uniq(entry.values[v_idx].ToString()); - expressions.push_back(std::move(colref)); + expressions.reserve(unpivot_entries.size()); + for (auto &entry : unpivot_entries) { + expressions.push_back(std::move(entry.expressions[v_idx])); } unpivot_expressions.push_back(std::move(expressions)); } @@ -580,7 +628,7 @@ unique_ptr Binder::BindUnpivot(Binder &child_binder, PivotRef &ref, ref.unpivot_names.size(), unpivot_expressions.size()); } for (idx_t i = 0; i < unpivot_expressions.size(); i++) { - auto list_expr = make_uniq("list_value", std::move(unpivot_expressions[i])); + auto list_expr = make_uniq("unpivot_list", std::move(unpivot_expressions[i])); vector> unnest_val_children; unnest_val_children.push_back(std::move(list_expr)); auto unnest_val_expr = make_uniq("unnest", std::move(unnest_val_children)); diff --git a/src/planner/binder/tableref/bind_subqueryref.cpp b/src/planner/binder/tableref/bind_subqueryref.cpp index e7755bc45fb8..f674970ffac1 100644 --- a/src/planner/binder/tableref/bind_subqueryref.cpp +++ b/src/planner/binder/tableref/bind_subqueryref.cpp @@ -15,7 +15,12 @@ unique_ptr Binder::Bind(SubqueryRef &ref, optional_ptrGetRootIndex(); string subquery_alias; if (ref.alias.empty()) { - subquery_alias = "unnamed_subquery" + to_string(bind_index); + auto index = unnamed_subquery_index++; + subquery_alias = "unnamed_subquery"; + ; + if (index > 1) { + subquery_alias += to_string(index); + } } else { subquery_alias = ref.alias; } diff --git a/src/planner/bound_result_modifier.cpp b/src/planner/bound_result_modifier.cpp index dea41088a680..9a1728ed71d0 100644 --- a/src/planner/bound_result_modifier.cpp +++ b/src/planner/bound_result_modifier.cpp @@ -116,6 +116,73 @@ bool BoundOrderModifier::Simplify(const vector> &groups) return orders.empty(); } +BoundLimitNode::BoundLimitNode(LimitNodeType type, idx_t constant_integer, double constant_percentage, + unique_ptr expression_p) + : type(type), constant_integer(constant_integer), constant_percentage(constant_percentage), + expression(std::move(expression_p)) { +} + +BoundLimitNode::BoundLimitNode() : type(LimitNodeType::UNSET) { +} + +BoundLimitNode::BoundLimitNode(int64_t constant_value) + : type(LimitNodeType::CONSTANT_VALUE), constant_integer(constant_value) { +} + +BoundLimitNode::BoundLimitNode(double percentage_value) + : type(LimitNodeType::CONSTANT_PERCENTAGE), constant_percentage(percentage_value) { +} + +BoundLimitNode::BoundLimitNode(unique_ptr expression_p, bool is_percentage) + : type(is_percentage ? LimitNodeType::EXPRESSION_PERCENTAGE : LimitNodeType::EXPRESSION_VALUE), + expression(std::move(expression_p)) { +} + +BoundLimitNode BoundLimitNode::ConstantValue(int64_t value) { + return BoundLimitNode(value); +} + +BoundLimitNode BoundLimitNode::ConstantPercentage(double percentage) { + return BoundLimitNode(percentage); +} + +BoundLimitNode BoundLimitNode::ExpressionValue(unique_ptr expression) { + return BoundLimitNode(std::move(expression), false); +} + +BoundLimitNode BoundLimitNode::ExpressionPercentage(unique_ptr expression) { + return BoundLimitNode(std::move(expression), true); +} + +idx_t BoundLimitNode::GetConstantValue() const { + if (Type() != LimitNodeType::CONSTANT_VALUE) { + throw InternalException("BoundLimitNode::GetConstantValue called but limit is not a constant value"); + } + return constant_integer; +} + +double BoundLimitNode::GetConstantPercentage() const { + if (Type() != LimitNodeType::CONSTANT_PERCENTAGE) { + throw InternalException("BoundLimitNode::GetConstantPercentage called but limit is not a constant percentage"); + } + return constant_percentage; +} + +const Expression &BoundLimitNode::GetValueExpression() const { + if (Type() != LimitNodeType::EXPRESSION_VALUE) { + throw InternalException("BoundLimitNode::GetValueExpression called but limit is not an expression value"); + } + return *expression; +} + +const Expression &BoundLimitNode::GetPercentageExpression() const { + if (Type() != LimitNodeType::EXPRESSION_PERCENTAGE) { + throw InternalException( + "BoundLimitNode::GetPercentageExpression called but limit is not an expression percentage"); + } + return *expression; +} + BoundLimitModifier::BoundLimitModifier() : BoundResultModifier(ResultModifierType::LIMIT_MODIFIER) { } @@ -125,8 +192,4 @@ BoundOrderModifier::BoundOrderModifier() : BoundResultModifier(ResultModifierTyp BoundDistinctModifier::BoundDistinctModifier() : BoundResultModifier(ResultModifierType::DISTINCT_MODIFIER) { } -BoundLimitPercentModifier::BoundLimitPercentModifier() - : BoundResultModifier(ResultModifierType::LIMIT_PERCENT_MODIFIER) { -} - } // namespace duckdb diff --git a/src/planner/expression/bound_cast_expression.cpp b/src/planner/expression/bound_cast_expression.cpp index 9699fd706948..af176cb98ef0 100644 --- a/src/planner/expression/bound_cast_expression.cpp +++ b/src/planner/expression/bound_cast_expression.cpp @@ -40,7 +40,9 @@ unique_ptr AddCastExpressionInternal(unique_ptr expr, co return expr; } } - return make_uniq(std::move(expr), target_type, std::move(bound_cast), try_cast); + auto result = make_uniq(std::move(expr), target_type, std::move(bound_cast), try_cast); + result->query_location = result->child->query_location; + return std::move(result); } unique_ptr AddCastToTypeInternal(unique_ptr expr, const LogicalType &target_type, @@ -93,6 +95,7 @@ unique_ptr BoundCastExpression::AddDefaultCastToType(unique_ptrquery_location; return AddCastToTypeInternal(std::move(expr), target_type, default_set, get_input, try_cast); } @@ -100,6 +103,7 @@ unique_ptr BoundCastExpression::AddCastToType(ClientContext &context const LogicalType &target_type, bool try_cast) { auto &cast_functions = DBConfig::GetConfig(context).GetCastFunctions(); GetCastFunctionInput get_input(context); + get_input.query_location = expr->query_location; return AddCastToTypeInternal(std::move(expr), target_type, cast_functions, get_input, try_cast); } diff --git a/src/planner/expression/bound_window_expression.cpp b/src/planner/expression/bound_window_expression.cpp index 7dd33ca82014..56bfe4586b36 100644 --- a/src/planner/expression/bound_window_expression.cpp +++ b/src/planner/expression/bound_window_expression.cpp @@ -56,6 +56,9 @@ bool BoundWindowExpression::Equals(const BaseExpression &other_p) const { if (!Expression::ListEquals(children, other.children)) { return false; } + if (!Expression::ListEquals(partitions, other.partitions)) { + return false; + } // check if the filter expressions are equivalent if (!Expression::Equals(filter_expr, other.filter_expr)) { return false; diff --git a/src/planner/expression_binder/lateral_binder.cpp b/src/planner/expression_binder/lateral_binder.cpp index 18a68ff0f4c2..13e3ae59980a 100644 --- a/src/planner/expression_binder/lateral_binder.cpp +++ b/src/planner/expression_binder/lateral_binder.cpp @@ -3,6 +3,7 @@ #include "duckdb/planner/logical_operator_visitor.hpp" #include "duckdb/planner/expression/bound_columnref_expression.hpp" #include "duckdb/planner/expression/bound_subquery_expression.hpp" +#include "duckdb/planner/tableref/bound_joinref.hpp" namespace duckdb { @@ -53,59 +54,82 @@ string LateralBinder::UnsupportedAggregateMessage() { return "LATERAL join cannot contain aggregates!"; } -class ExpressionDepthReducer : public LogicalOperatorVisitor { -public: - explicit ExpressionDepthReducer(const vector &correlated) : correlated_columns(correlated) { +static void ReduceColumnRefDepth(BoundColumnRefExpression &expr, + const vector &correlated_columns) { + // don't need to reduce this + if (expr.depth == 0) { + return; } - -protected: - void ReduceColumnRefDepth(BoundColumnRefExpression &expr) { - // don't need to reduce this - if (expr.depth == 0) { - return; + for (auto &correlated : correlated_columns) { + if (correlated.binding == expr.binding) { + D_ASSERT(expr.depth > 1); + expr.depth--; + break; } - for (auto &correlated : correlated_columns) { - if (correlated.binding == expr.binding) { - D_ASSERT(expr.depth > 1); - expr.depth--; + } +} + +static void ReduceColumnDepth(vector &columns, + const vector &affected_columns) { + for (auto &s_correlated : columns) { + for (auto &affected : affected_columns) { + if (affected == s_correlated) { + s_correlated.depth--; break; } } } +} - unique_ptr VisitReplace(BoundColumnRefExpression &expr, unique_ptr *expr_ptr) override { - ReduceColumnRefDepth(expr); - return nullptr; +static void ReduceExpressionSubquery(BoundSubqueryExpression &expr, + const vector &correlated_columns) { + ReduceColumnDepth(expr.binder->correlated_columns, correlated_columns); +} + +class ExpressionDepthReducerRecursive : public BoundNodeVisitor { +public: + explicit ExpressionDepthReducerRecursive(const vector &correlated) + : correlated_columns(correlated) { } - void ReduceExpressionSubquery(BoundSubqueryExpression &expr) { - for (auto &s_correlated : expr.binder->correlated_columns) { - for (auto &correlated : correlated_columns) { - if (correlated == s_correlated) { - s_correlated.depth--; - break; - } - } + void VisitExpression(unique_ptr &expression) override { + if (expression->type == ExpressionType::BOUND_COLUMN_REF) { + ReduceColumnRefDepth(expression->Cast(), correlated_columns); + } else if (expression->type == ExpressionType::SUBQUERY) { + ReduceExpressionSubquery(expression->Cast(), correlated_columns); } + BoundNodeVisitor::VisitExpression(expression); } - void ReduceExpressionDepth(Expression &expr) { - if (expr.GetExpressionType() == ExpressionType::BOUND_COLUMN_REF) { - ReduceColumnRefDepth(expr.Cast()); - } - if (expr.GetExpressionClass() == ExpressionClass::BOUND_SUBQUERY) { - auto &subquery_ref = expr.Cast(); - ReduceExpressionSubquery(expr.Cast()); - // Recursively update the depth in the bindings of the children nodes - ExpressionIterator::EnumerateQueryNodeChildren( - *subquery_ref.subquery, [&](Expression &child_expr) { ReduceExpressionDepth(child_expr); }); + void VisitBoundTableRef(BoundTableRef &ref) override { + if (ref.type == TableReferenceType::JOIN) { + // rewrite correlated columns in child joins + auto &bound_join = ref.Cast(); + ReduceColumnDepth(bound_join.correlated_columns, correlated_columns); } + // visit the children of the table ref + BoundNodeVisitor::VisitBoundTableRef(ref); + } + +private: + const vector &correlated_columns; +}; + +class ExpressionDepthReducer : public LogicalOperatorVisitor { +public: + explicit ExpressionDepthReducer(const vector &correlated) : correlated_columns(correlated) { + } + +protected: + unique_ptr VisitReplace(BoundColumnRefExpression &expr, unique_ptr *expr_ptr) override { + ReduceColumnRefDepth(expr, correlated_columns); + return nullptr; } unique_ptr VisitReplace(BoundSubqueryExpression &expr, unique_ptr *expr_ptr) override { - ReduceExpressionSubquery(expr); - ExpressionIterator::EnumerateQueryNodeChildren( - *expr.subquery, [&](Expression &child_expr) { ReduceExpressionDepth(child_expr); }); + ReduceExpressionSubquery(expr, correlated_columns); + ExpressionDepthReducerRecursive recursive(correlated_columns); + recursive.VisitBoundQueryNode(*expr.subquery); return nullptr; } diff --git a/src/planner/expression_iterator.cpp b/src/planner/expression_iterator.cpp index 4ed384b9f045..8bf1622041c3 100644 --- a/src/planner/expression_iterator.cpp +++ b/src/planner/expression_iterator.cpp @@ -148,86 +148,61 @@ void ExpressionIterator::EnumerateExpression(unique_ptr &expr, [&](unique_ptr &child) { EnumerateExpression(child, callback); }); } -void ExpressionIterator::EnumerateTableRefChildren(BoundTableRef &ref, - const std::function &callback) { - switch (ref.type) { - case TableReferenceType::EXPRESSION_LIST: { - auto &bound_expr_list = ref.Cast(); - for (auto &expr_list : bound_expr_list.values) { - for (auto &expr : expr_list) { - EnumerateExpression(expr, callback); - } - } - break; - } - case TableReferenceType::JOIN: { - auto &bound_join = ref.Cast(); - if (bound_join.condition) { - EnumerateExpression(bound_join.condition, callback); - } - EnumerateTableRefChildren(*bound_join.left, callback); - EnumerateTableRefChildren(*bound_join.right, callback); - break; - } - case TableReferenceType::SUBQUERY: { - auto &bound_subquery = ref.Cast(); - EnumerateQueryNodeChildren(*bound_subquery.subquery, callback); - break; - } - case TableReferenceType::TABLE_FUNCTION: - case TableReferenceType::EMPTY_FROM: - case TableReferenceType::BASE_TABLE: - case TableReferenceType::CTE: - break; - default: - throw NotImplementedException("Unimplemented table reference type in ExpressionIterator"); - } +void BoundNodeVisitor::VisitExpression(unique_ptr &expression) { + VisitExpressionChildren(*expression); +} + +void BoundNodeVisitor::VisitExpressionChildren(Expression &expr) { + ExpressionIterator::EnumerateChildren(expr, [&](unique_ptr &expr) { VisitExpression(expr); }); } -void ExpressionIterator::EnumerateQueryNodeChildren(BoundQueryNode &node, - const std::function &callback) { +void BoundNodeVisitor::VisitBoundQueryNode(BoundQueryNode &node) { switch (node.type) { case QueryNodeType::SET_OPERATION_NODE: { auto &bound_setop = node.Cast(); - EnumerateQueryNodeChildren(*bound_setop.left, callback); - EnumerateQueryNodeChildren(*bound_setop.right, callback); + VisitBoundQueryNode(*bound_setop.left); + VisitBoundQueryNode(*bound_setop.right); break; } case QueryNodeType::RECURSIVE_CTE_NODE: { auto &cte_node = node.Cast(); - EnumerateQueryNodeChildren(*cte_node.left, callback); - EnumerateQueryNodeChildren(*cte_node.right, callback); + VisitBoundQueryNode(*cte_node.left); + VisitBoundQueryNode(*cte_node.right); break; } case QueryNodeType::CTE_NODE: { auto &cte_node = node.Cast(); - EnumerateQueryNodeChildren(*cte_node.child, callback); - EnumerateQueryNodeChildren(*cte_node.query, callback); + VisitBoundQueryNode(*cte_node.child); + VisitBoundQueryNode(*cte_node.query); break; } case QueryNodeType::SELECT_NODE: { auto &bound_select = node.Cast(); for (auto &expr : bound_select.select_list) { - EnumerateExpression(expr, callback); + VisitExpression(expr); + } + if (bound_select.where_clause) { + VisitExpression(bound_select.where_clause); } - EnumerateExpression(bound_select.where_clause, callback); for (auto &expr : bound_select.groups.group_expressions) { - EnumerateExpression(expr, callback); + VisitExpression(expr); + } + if (bound_select.having) { + VisitExpression(bound_select.having); } - EnumerateExpression(bound_select.having, callback); for (auto &expr : bound_select.aggregates) { - EnumerateExpression(expr, callback); + VisitExpression(expr); } for (auto &entry : bound_select.unnests) { for (auto &expr : entry.second.expressions) { - EnumerateExpression(expr, callback); + VisitExpression(expr); } } for (auto &expr : bound_select.windows) { - EnumerateExpression(expr, callback); + VisitExpression(expr); } if (bound_select.from_table) { - EnumerateTableRefChildren(*bound_select.from_table, callback); + VisitBoundTableRef(*bound_select.from_table); } break; } @@ -238,18 +213,64 @@ void ExpressionIterator::EnumerateQueryNodeChildren(BoundQueryNode &node, switch (node.modifiers[i]->type) { case ResultModifierType::DISTINCT_MODIFIER: for (auto &expr : node.modifiers[i]->Cast().target_distincts) { - EnumerateExpression(expr, callback); + VisitExpression(expr); } break; case ResultModifierType::ORDER_MODIFIER: for (auto &order : node.modifiers[i]->Cast().orders) { - EnumerateExpression(order.expression, callback); + VisitExpression(order.expression); + } + break; + case ResultModifierType::LIMIT_MODIFIER: { + auto &limit_expr = node.modifiers[i]->Cast().limit_val.GetExpression(); + auto &offset_expr = node.modifiers[i]->Cast().offset_val.GetExpression(); + if (limit_expr) { + VisitExpression(limit_expr); + } + if (offset_expr) { + VisitExpression(offset_expr); } break; + } default: break; } } } +void BoundNodeVisitor::VisitBoundTableRef(BoundTableRef &ref) { + switch (ref.type) { + case TableReferenceType::EXPRESSION_LIST: { + auto &bound_expr_list = ref.Cast(); + for (auto &expr_list : bound_expr_list.values) { + for (auto &expr : expr_list) { + VisitExpression(expr); + } + } + break; + } + case TableReferenceType::JOIN: { + auto &bound_join = ref.Cast(); + if (bound_join.condition) { + VisitExpression(bound_join.condition); + } + VisitBoundTableRef(*bound_join.left); + VisitBoundTableRef(*bound_join.right); + break; + } + case TableReferenceType::SUBQUERY: { + auto &bound_subquery = ref.Cast(); + VisitBoundQueryNode(*bound_subquery.subquery); + break; + } + case TableReferenceType::TABLE_FUNCTION: + case TableReferenceType::EMPTY_FROM: + case TableReferenceType::BASE_TABLE: + case TableReferenceType::CTE: + break; + default: + throw NotImplementedException("Unimplemented table reference type in ExpressionIterator"); + } +} + } // namespace duckdb diff --git a/src/planner/logical_operator_visitor.cpp b/src/planner/logical_operator_visitor.cpp index e692473f1fac..367fb5f20438 100644 --- a/src/planner/logical_operator_visitor.cpp +++ b/src/planner/logical_operator_visitor.cpp @@ -87,21 +87,11 @@ void LogicalOperatorVisitor::EnumerateExpressions(LogicalOperator &op, } case LogicalOperatorType::LOGICAL_LIMIT: { auto &limit = op.Cast(); - if (limit.limit) { - callback(&limit.limit); + if (limit.limit_val.GetExpression()) { + callback(&limit.limit_val.GetExpression()); } - if (limit.offset) { - callback(&limit.offset); - } - break; - } - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: { - auto &limit = op.Cast(); - if (limit.limit) { - callback(&limit.limit); - } - if (limit.offset) { - callback(&limit.offset); + if (limit.offset_val.GetExpression()) { + callback(&limit.offset_val.GetExpression()); } break; } diff --git a/src/planner/operator/CMakeLists.txt b/src/planner/operator/CMakeLists.txt index d2350edc3de3..2823f1cee6c7 100644 --- a/src/planner/operator/CMakeLists.txt +++ b/src/planner/operator/CMakeLists.txt @@ -25,7 +25,6 @@ add_library_unity( logical_insert.cpp logical_join.cpp logical_limit.cpp - logical_limit_percent.cpp logical_order.cpp logical_pivot.cpp logical_positional_join.cpp diff --git a/src/planner/operator/logical_limit.cpp b/src/planner/operator/logical_limit.cpp index e413078aa970..332da4ab55e0 100644 --- a/src/planner/operator/logical_limit.cpp +++ b/src/planner/operator/logical_limit.cpp @@ -2,10 +2,9 @@ namespace duckdb { -LogicalLimit::LogicalLimit(int64_t limit_val, int64_t offset_val, unique_ptr limit, - unique_ptr offset) - : LogicalOperator(LogicalOperatorType::LOGICAL_LIMIT), limit_val(limit_val), offset_val(offset_val), - limit(std::move(limit)), offset(std::move(offset)) { +LogicalLimit::LogicalLimit(BoundLimitNode limit_val, BoundLimitNode offset_val) + : LogicalOperator(LogicalOperatorType::LOGICAL_LIMIT), limit_val(std::move(limit_val)), + offset_val(std::move(offset_val)) { } vector LogicalLimit::GetColumnBindings() { @@ -14,8 +13,17 @@ vector LogicalLimit::GetColumnBindings() { idx_t LogicalLimit::EstimateCardinality(ClientContext &context) { auto child_cardinality = children[0]->EstimateCardinality(context); - if (limit_val >= 0 && idx_t(limit_val) < child_cardinality) { - child_cardinality = limit_val; + switch (limit_val.Type()) { + case LimitNodeType::CONSTANT_VALUE: + if (limit_val.GetConstantValue() < child_cardinality) { + child_cardinality = limit_val.GetConstantValue(); + } + break; + case LimitNodeType::CONSTANT_PERCENTAGE: + child_cardinality = idx_t(double(child_cardinality) * limit_val.GetConstantPercentage()); + break; + default: + break; } return child_cardinality; } diff --git a/src/planner/operator/logical_limit_percent.cpp b/src/planner/operator/logical_limit_percent.cpp deleted file mode 100644 index c020ac4b56a9..000000000000 --- a/src/planner/operator/logical_limit_percent.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "duckdb/planner/operator/logical_limit_percent.hpp" -#include - -namespace duckdb { - -idx_t LogicalLimitPercent::EstimateCardinality(ClientContext &context) { - auto child_cardinality = LogicalOperator::EstimateCardinality(context); - if ((limit_percent < 0 || limit_percent > 100) || std::isnan(limit_percent)) { - return child_cardinality; - } - return idx_t(child_cardinality * (limit_percent / 100.0)); -} - -} // namespace duckdb diff --git a/src/planner/planner.cpp b/src/planner/planner.cpp index 7194c10d3a25..e1efe1e4e6b3 100644 --- a/src/planner/planner.cpp +++ b/src/planner/planner.cpp @@ -12,6 +12,7 @@ #include "duckdb/planner/binder.hpp" #include "duckdb/planner/expression/bound_parameter_expression.hpp" #include "duckdb/transaction/meta_transaction.hpp" +#include "duckdb/execution/column_binding_resolver.hpp" namespace duckdb { @@ -166,6 +167,8 @@ void Planner::VerifyPlan(ClientContext &context, unique_ptr &op if (!OperatorSupportsSerialization(*op)) { return; } + // verify the column bindings of the plan + ColumnBindingResolver::Verify(*op); // format (de)serialization of this operator try { diff --git a/src/planner/subquery/flatten_dependent_join.cpp b/src/planner/subquery/flatten_dependent_join.cpp index 6720e8ad3c15..4e5623cab48d 100644 --- a/src/planner/subquery/flatten_dependent_join.cpp +++ b/src/planner/subquery/flatten_dependent_join.cpp @@ -12,6 +12,7 @@ #include "duckdb/planner/subquery/rewrite_correlated_expressions.hpp" #include "duckdb/planner/subquery/rewrite_cte_scan.hpp" #include "duckdb/planner/operator/logical_dependent_join.hpp" +#include "duckdb/execution/column_binding_resolver.hpp" namespace duckdb { @@ -447,8 +448,26 @@ unique_ptr FlattenDependentJoins::PushDownDependentJoinInternal } case LogicalOperatorType::LOGICAL_LIMIT: { auto &limit = plan->Cast(); - if (limit.limit || limit.offset) { - throw ParserException("Non-constant limit or offset not supported in correlated subquery"); + switch (limit.limit_val.Type()) { + case LimitNodeType::CONSTANT_PERCENTAGE: + case LimitNodeType::EXPRESSION_PERCENTAGE: + // NOTE: limit percent could be supported in a manner similar to the LIMIT above + // but instead of filtering by an exact number of rows, the limit should be expressed as + // COUNT computed over the partition multiplied by the percentage + throw ParserException("Limit percent operator not supported in correlated subquery"); + case LimitNodeType::EXPRESSION_VALUE: + throw ParserException("Non-constant limit not supported in correlated subquery"); + default: + break; + } + switch (limit.offset_val.Type()) { + case LimitNodeType::EXPRESSION_VALUE: + throw ParserException("Non-constant offset not supported in correlated subquery"); + case LimitNodeType::CONSTANT_PERCENTAGE: + case LimitNodeType::EXPRESSION_PERCENTAGE: + throw InternalException("Percentage offset in FlattenDependentJoin"); + default: + break; } auto rownum_alias = "limit_rownum"; unique_ptr child; @@ -495,19 +514,34 @@ unique_ptr FlattenDependentJoins::PushDownDependentJoinInternal auto row_num_ref = make_uniq(rownum_alias, LogicalType::BIGINT, ColumnBinding(window_index, 0)); - int64_t upper_bound_limit = NumericLimits::Maximum(); - TryAddOperator::Operation(limit.offset_val, limit.limit_val, upper_bound_limit); - auto upper_bound = make_uniq(Value::BIGINT(upper_bound_limit)); - condition = make_uniq(ExpressionType::COMPARE_LESSTHANOREQUALTO, row_num_ref->Copy(), - std::move(upper_bound)); + if (limit.limit_val.Type() == LimitNodeType::CONSTANT_VALUE) { + auto upper_bound_limit = NumericLimits::Maximum(); + auto limit_val = int64_t(limit.limit_val.GetConstantValue()); + if (limit.offset_val.Type() == LimitNodeType::CONSTANT_VALUE) { + // both offset and limit specified - upper bound is offset + limit + auto offset_val = int64_t(limit.offset_val.GetConstantValue()); + TryAddOperator::Operation(limit_val, offset_val, upper_bound_limit); + } else { + // no offset - upper bound is only the limit + upper_bound_limit = limit_val; + } + auto upper_bound = make_uniq(Value::BIGINT(upper_bound_limit)); + condition = make_uniq(ExpressionType::COMPARE_LESSTHANOREQUALTO, + row_num_ref->Copy(), std::move(upper_bound)); + } // we only need to add "row_number >= offset + 1" if offset is bigger than 0 - if (limit.offset_val > 0) { - auto lower_bound = make_uniq(Value::BIGINT(limit.offset_val)); + if (limit.offset_val.Type() == LimitNodeType::CONSTANT_VALUE) { + auto offset_val = int64_t(limit.offset_val.GetConstantValue()); + auto lower_bound = make_uniq(Value::BIGINT(offset_val)); auto lower_comp = make_uniq(ExpressionType::COMPARE_GREATERTHAN, row_num_ref->Copy(), std::move(lower_bound)); - auto conj = make_uniq(ExpressionType::CONJUNCTION_AND, std::move(lower_comp), - std::move(condition)); - condition = std::move(conj); + if (condition) { + auto conj = make_uniq(ExpressionType::CONJUNCTION_AND, + std::move(lower_comp), std::move(condition)); + condition = std::move(conj); + } else { + condition = std::move(lower_comp); + } } filter->expressions.push_back(std::move(condition)); filter->children.push_back(std::move(window)); @@ -517,12 +551,6 @@ unique_ptr FlattenDependentJoins::PushDownDependentJoinInternal } return std::move(filter); } - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: { - // NOTE: limit percent could be supported in a manner similar to the LIMIT above - // but instead of filtering by an exact number of rows, the limit should be expressed as - // COUNT computed over the partition multiplied by the percentage - throw ParserException("Limit percent operator not supported in correlated subquery"); - } case LogicalOperatorType::LOGICAL_WINDOW: { auto &window = plan->Cast(); // push into children diff --git a/src/planner/subquery/rewrite_correlated_expressions.cpp b/src/planner/subquery/rewrite_correlated_expressions.cpp index fd177ccf7735..00444dcfb2ec 100644 --- a/src/planner/subquery/rewrite_correlated_expressions.cpp +++ b/src/planner/subquery/rewrite_correlated_expressions.cpp @@ -9,6 +9,7 @@ #include "duckdb/planner/expression_iterator.hpp" #include "duckdb/planner/tableref/bound_joinref.hpp" #include "duckdb/planner/operator/logical_dependent_join.hpp" +#include "duckdb/planner/tableref/bound_subqueryref.hpp" namespace duckdb { @@ -69,6 +70,20 @@ unique_ptr RewriteCorrelatedExpressions::VisitReplace(BoundColumnRef return nullptr; } +//! Helper class used to recursively rewrite correlated expressions within nested subqueries. +class RewriteCorrelatedRecursive : public BoundNodeVisitor { +public: + RewriteCorrelatedRecursive(ColumnBinding base_binding, column_binding_map_t &correlated_map); + + void VisitBoundTableRef(BoundTableRef &ref) override; + void VisitExpression(unique_ptr &expression) override; + + void RewriteCorrelatedSubquery(Binder &binder, BoundQueryNode &subquery); + + ColumnBinding base_binding; + column_binding_map_t &correlated_map; +}; + unique_ptr RewriteCorrelatedExpressions::VisitReplace(BoundSubqueryExpression &expr, unique_ptr *expr_ptr) { if (!expr.IsCorrelated()) { @@ -76,19 +91,19 @@ unique_ptr RewriteCorrelatedExpressions::VisitReplace(BoundSubqueryE } // subquery detected within this subquery // recursively rewrite it using the RewriteCorrelatedRecursive class - RewriteCorrelatedRecursive rewrite(expr, base_binding, correlated_map); - rewrite.RewriteCorrelatedSubquery(expr); + RewriteCorrelatedRecursive rewrite(base_binding, correlated_map); + rewrite.RewriteCorrelatedSubquery(*expr.binder, *expr.subquery); return nullptr; } -RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedRecursive( - BoundSubqueryExpression &parent, ColumnBinding base_binding, column_binding_map_t &correlated_map) - : parent(parent), base_binding(base_binding), correlated_map(correlated_map) { +RewriteCorrelatedRecursive::RewriteCorrelatedRecursive(ColumnBinding base_binding, + column_binding_map_t &correlated_map) + : base_binding(base_binding), correlated_map(correlated_map) { } -void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteJoinRefRecursive(BoundTableRef &ref) { - // recursively rewrite bindings in the correlated columns for the table ref and all the children +void RewriteCorrelatedRecursive::VisitBoundTableRef(BoundTableRef &ref) { if (ref.type == TableReferenceType::JOIN) { + // rewrite correlated columns in child joins auto &bound_join = ref.Cast(); for (auto &corr : bound_join.correlated_columns) { auto entry = correlated_map.find(corr.binding); @@ -96,39 +111,30 @@ void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteJoinRefRec corr.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second); } } - RewriteJoinRefRecursive(*bound_join.left); - RewriteJoinRefRecursive(*bound_join.right); + } else if (ref.type == TableReferenceType::SUBQUERY) { + auto &subquery = ref.Cast(); + RewriteCorrelatedSubquery(*subquery.binder, *subquery.subquery); + return; } + // visit the children of the table ref + BoundNodeVisitor::VisitBoundTableRef(ref); } -void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedSubquery( - BoundSubqueryExpression &expr) { +void RewriteCorrelatedRecursive::RewriteCorrelatedSubquery(Binder &binder, BoundQueryNode &subquery) { // rewrite the binding in the correlated list of the subquery) - for (auto &corr : expr.binder->correlated_columns) { + for (auto &corr : binder.correlated_columns) { auto entry = correlated_map.find(corr.binding); if (entry != correlated_map.end()) { corr.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second); } } - // TODO: Cleanup and find a better way to do this - auto &node = *expr.subquery; - if (node.type == QueryNodeType::SELECT_NODE) { - // Found an unplanned select node, need to update column bindings correlated columns in the from tables - auto &bound_select = node.Cast(); - if (bound_select.from_table) { - BoundTableRef &table_ref = *bound_select.from_table; - RewriteJoinRefRecursive(table_ref); - } - } - // now rewrite any correlated BoundColumnRef expressions inside the subquery - ExpressionIterator::EnumerateQueryNodeChildren(*expr.subquery, - [&](Expression &child) { RewriteCorrelatedExpressions(child); }); + VisitBoundQueryNode(subquery); } -void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelatedExpressions(Expression &child) { - if (child.type == ExpressionType::BOUND_COLUMN_REF) { +void RewriteCorrelatedRecursive::VisitExpression(unique_ptr &expression) { + if (expression->type == ExpressionType::BOUND_COLUMN_REF) { // bound column reference - auto &bound_colref = child.Cast(); + auto &bound_colref = expression->Cast(); if (bound_colref.depth == 0) { // not a correlated column, ignore return; @@ -142,13 +148,13 @@ void RewriteCorrelatedExpressions::RewriteCorrelatedRecursive::RewriteCorrelated bound_colref.binding = ColumnBinding(base_binding.table_index, base_binding.column_index + entry->second); bound_colref.depth--; } - } else if (child.type == ExpressionType::SUBQUERY) { + } else if (expression->type == ExpressionType::SUBQUERY) { // we encountered another subquery: rewrite recursively - D_ASSERT(child.GetExpressionClass() == ExpressionClass::BOUND_SUBQUERY); - auto &bound_subquery = child.Cast(); - RewriteCorrelatedRecursive rewrite(bound_subquery, base_binding, correlated_map); - rewrite.RewriteCorrelatedSubquery(bound_subquery); + auto &bound_subquery = expression->Cast(); + RewriteCorrelatedSubquery(*bound_subquery.binder, *bound_subquery.subquery); } + // recurse into the children of this subquery + BoundNodeVisitor::VisitExpression(expression); } RewriteCountAggregates::RewriteCountAggregates(column_binding_map_t &replacement_map) diff --git a/src/storage/CMakeLists.txt b/src/storage/CMakeLists.txt index 4dd78dd02c1b..71002db11346 100644 --- a/src/storage/CMakeLists.txt +++ b/src/storage/CMakeLists.txt @@ -21,6 +21,7 @@ add_library_unity( magic_bytes.cpp storage_manager.cpp standard_buffer_manager.cpp + temporary_file_manager.cpp table_index_list.cpp write_ahead_log.cpp optimistic_data_writer.cpp diff --git a/src/storage/arena_allocator.cpp b/src/storage/arena_allocator.cpp index 1382ba2e0910..f5eae77c8ec2 100644 --- a/src/storage/arena_allocator.cpp +++ b/src/storage/arena_allocator.cpp @@ -72,6 +72,7 @@ data_ptr_t ArenaAllocator::Allocate(idx_t len) { tail = new_chunk.get(); } head = std::move(new_chunk); + allocated_size += current_capacity; } D_ASSERT(head->current_position + len <= head->maximum_size); auto result = head->data.get() + head->current_position; @@ -123,12 +124,14 @@ void ArenaAllocator::Reset() { head->current_position = 0; head->prev = nullptr; } + allocated_size = 0; } void ArenaAllocator::Destroy() { head = nullptr; tail = nullptr; current_capacity = ARENA_ALLOCATOR_INITIAL_CAPACITY; + allocated_size = 0; } void ArenaAllocator::Move(ArenaAllocator &other) { @@ -136,6 +139,7 @@ void ArenaAllocator::Move(ArenaAllocator &other) { other.tail = tail; other.head = std::move(head); other.current_capacity = current_capacity; + other.allocated_size = allocated_size; Destroy(); } @@ -163,4 +167,9 @@ idx_t ArenaAllocator::SizeInBytes() const { return total_size; } +idx_t ArenaAllocator::AllocationSize() const { + D_ASSERT(head || allocated_size == 0); + return allocated_size; +} + } // namespace duckdb diff --git a/src/storage/buffer/block_handle.cpp b/src/storage/buffer/block_handle.cpp index e462fd73e923..6e7a96c0d022 100644 --- a/src/storage/buffer/block_handle.cpp +++ b/src/storage/buffer/block_handle.cpp @@ -31,7 +31,12 @@ BlockHandle::BlockHandle(BlockManager &block_manager, block_id_t block_id_p, Mem BlockHandle::~BlockHandle() { // NOLINT: allow internal exceptions // being destroyed, so any unswizzled pointers are just binary junk now. unswizzled = nullptr; - auto &buffer_manager = block_manager.buffer_manager; + if (buffer && buffer->type != FileBufferType::TINY_BUFFER) { + // we kill the latest version in the eviction queue + auto &buffer_manager = block_manager.buffer_manager; + buffer_manager.GetBufferPool().IncrementDeadNodes(); + } + // no references remain to this block: erase if (buffer && state == BlockState::BLOCK_LOADED) { D_ASSERT(memory_charge.size > 0); @@ -41,7 +46,7 @@ BlockHandle::~BlockHandle() { // NOLINT: allow internal exceptions } else { D_ASSERT(memory_charge.size == 0); } - buffer_manager.GetBufferPool().PurgeQueue(); + block_manager.UnregisterBlock(block_id, can_destroy); } diff --git a/src/storage/buffer/block_manager.cpp b/src/storage/buffer/block_manager.cpp index bc35dff61c3d..36c2b559f354 100644 --- a/src/storage/buffer/block_manager.cpp +++ b/src/storage/buffer/block_manager.cpp @@ -35,8 +35,8 @@ shared_ptr BlockManager::ConvertToPersistent(block_id_t block_id, s D_ASSERT(old_block->state == BlockState::BLOCK_LOADED); D_ASSERT(old_block->buffer); - // Temp buffers can be larger than the storage block size. But persistent buffers - // cannot. + // Temp buffers can be larger than the storage block size. + // But persistent buffers cannot. D_ASSERT(old_block->buffer->AllocSize() <= Storage::BLOCK_ALLOC_SIZE); // register a block with the new block id @@ -60,7 +60,11 @@ shared_ptr BlockManager::ConvertToPersistent(block_id_t block_id, s // persist the new block to disk Write(*new_block->buffer, block_id); - buffer_manager.GetBufferPool().AddToEvictionQueue(new_block); + // potentially purge the queue + auto purge_queue = buffer_manager.GetBufferPool().AddToEvictionQueue(new_block); + if (purge_queue) { + buffer_manager.GetBufferPool().PurgeQueue(); + } return new_block; } diff --git a/src/storage/buffer/buffer_pool.cpp b/src/storage/buffer/buffer_pool.cpp index 37aafb2c4b33..aa4e1b422784 100644 --- a/src/storage/buffer/buffer_pool.cpp +++ b/src/storage/buffer/buffer_pool.cpp @@ -35,22 +35,35 @@ shared_ptr BufferEvictionNode::TryGetBlockHandle() { } BufferPool::BufferPool(idx_t maximum_memory) - : current_memory(0), maximum_memory(maximum_memory), queue(make_uniq()), queue_insertions(0), - temporary_memory_manager(make_uniq()) { + : current_memory(0), maximum_memory(maximum_memory), queue(make_uniq()), + temporary_memory_manager(make_uniq()), evict_queue_insertions(0), total_dead_nodes(0) { + for (idx_t i = 0; i < MEMORY_TAG_COUNT; i++) { + memory_usage_per_tag[i] = 0; + } } BufferPool::~BufferPool() { } -void BufferPool::AddToEvictionQueue(shared_ptr &handle) { - constexpr int INSERT_INTERVAL = 1024; +bool BufferPool::AddToEvictionQueue(shared_ptr &handle) { + + // The block handle is locked during this operation (Unpin), + // or the block handle is still a local variable (ConvertToPersistent) D_ASSERT(handle->readers == 0); - handle->eviction_timestamp++; - // After each 1024 insertions, run through the queue and purge. - if ((++queue_insertions % INSERT_INTERVAL) == 0) { - PurgeQueue(); + auto ts = ++handle->eviction_timestamp; + + BufferEvictionNode evict_node(weak_ptr(handle), ts); + queue->q.enqueue(evict_node); + + if (ts != 1) { + // we add a newer version, i.e., we kill exactly one previous version + IncrementDeadNodes(); + } + + if (++evict_queue_insertions % INSERT_INTERVAL == 0) { + return true; } - queue->q.enqueue(BufferEvictionNode(weak_ptr(handle), handle->eviction_timestamp)); + return false; } void BufferPool::IncreaseUsedMemory(MemoryTag tag, idx_t size) { @@ -78,50 +91,138 @@ BufferPool::EvictionResult BufferPool::EvictBlocks(MemoryTag tag, idx_t extra_me unique_ptr *buffer) { BufferEvictionNode node; TempBufferPoolReservation r(tag, *this, extra_memory); + while (current_memory > memory_limit) { + // get a block to unpin from the queue if (!queue->q.try_dequeue(node)) { - // Failed to reserve. Adjust size of temp reservation to 0. - r.Resize(0); - return {false, std::move(r)}; + // we could not dequeue any eviction node, so we try one more time, + // but more aggressively + if (!TryDequeueWithLock(node)) { + // still no success, we return + r.Resize(0); + return {false, std::move(r)}; + } } + // get a reference to the underlying block pointer auto handle = node.TryGetBlockHandle(); if (!handle) { + DecrementDeadNodes(); continue; } + // we might be able to free this block: grab the mutex and check if we can free it lock_guard lock(handle->lock); if (!node.CanUnload(*handle)) { // something changed in the mean-time, bail out + DecrementDeadNodes(); continue; } + // hooray, we can unload the block if (buffer && handle->buffer->AllocSize() == extra_memory) { - // we can actually re-use the memory directly! + // we can re-use the memory directly *buffer = handle->UnloadAndTakeBlock(); return {true, std::move(r)}; - } else { - // release the memory and mark the block as unloaded - handle->Unload(); } + + // release the memory and mark the block as unloaded + handle->Unload(); } return {true, std::move(r)}; } +bool BufferPool::TryDequeueWithLock(BufferEvictionNode &node) { + lock_guard lock(purge_lock); + return queue->q.try_dequeue(node); +} + +void BufferPool::PurgeIteration(const idx_t purge_size) { + // if this purge is significantly smaller or bigger than the previous purge, then + // we need to resize the purge_nodes vector. Note that this barely happens, as we + // purge queue_insertions * PURGE_SIZE_MULTIPLIER nodes + idx_t previous_purge_size = purge_nodes.size(); + if (purge_size < previous_purge_size / 2 || purge_size > previous_purge_size) { + purge_nodes.resize(purge_size); + } + + // bulk purge + idx_t actually_dequeued = queue->q.try_dequeue_bulk(purge_nodes.begin(), purge_size); + + // retrieve all alive nodes that have been wrongly dequeued + idx_t alive_nodes = 0; + for (idx_t i = 0; i < actually_dequeued; i++) { + auto &node = purge_nodes[i]; + auto handle = node.TryGetBlockHandle(); + if (handle) { + queue->q.enqueue(std::move(node)); + alive_nodes++; + } + } + + total_dead_nodes -= actually_dequeued - alive_nodes; +} + void BufferPool::PurgeQueue() { - BufferEvictionNode node; - while (true) { - if (!queue->q.try_dequeue(node)) { + + // only one thread purges the queue, all other threads early-out + if (!purge_lock.try_lock()) { + return; + } + lock_guard lock {purge_lock, std::adopt_lock}; + + // we purge INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER nodes + idx_t purge_size = INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER; + + // get an estimate of the queue size as-of now + idx_t approx_q_size = queue->q.size_approx(); + + // early-out, if the queue is not big enough to justify purging + // - we want to keep the LRU characteristic alive + if (approx_q_size < purge_size * EARLY_OUT_MULTIPLIER) { + return; + } + + // There are two types of situations. + + // For most scenarios, purging INSERT_INTERVAL * PURGE_SIZE_MULTIPLIER nodes is enough. + // Purging more nodes than we insert also counters oscillation for scenarios where most nodes are dead. + // If we always purge slightly more, we trigger a purge less often, as we purge below the trigger. + + // However, if the pressure on the queue becomes too contested, we need to purge more aggressively, + // i.e., we actively seek a specific number of dead nodes to purge. We use the total number of existing dead nodes. + // We detect this situation by observing the queue's ratio between alive vs. dead nodes. If the ratio of alive vs. + // dead nodes grows faster than we can purge, we keep purging until we hit one of the following conditions. + + // 2.1. We're back at an approximate queue size less than purge_size * EARLY_OUT_MULTIPLIER. + // 2.2. We're back at a ratio of 1*alive_node:ALIVE_NODE_MULTIPLIER*dead_nodes. + // 2.3. We've purged the entire queue: max_purges is zero. This is a worst-case scenario, + // guaranteeing that we always exit the loop. + + idx_t max_purges = approx_q_size / purge_size; + while (max_purges != 0) { + + PurgeIteration(purge_size); + + // update relevant sizes and potentially early-out + approx_q_size = queue->q.size_approx(); + + // early-out according to (2.1) + if (approx_q_size < purge_size * EARLY_OUT_MULTIPLIER) { break; } - auto handle = node.TryGetBlockHandle(); - if (!handle) { - continue; - } else { - queue->q.enqueue(std::move(node)); + + idx_t approx_dead_nodes = total_dead_nodes; + approx_dead_nodes = approx_dead_nodes > approx_q_size ? approx_q_size : approx_dead_nodes; + idx_t approx_alive_nodes = approx_q_size - approx_dead_nodes; + + // early-out according to (2.2) + if (approx_alive_nodes * (ALIVE_NODE_MULTIPLIER - 1) > approx_dead_nodes) { break; } + + max_purges--; } } diff --git a/src/storage/checkpoint/write_overflow_strings_to_disk.cpp b/src/storage/checkpoint/write_overflow_strings_to_disk.cpp index 665168ef96a1..fd75132a9acd 100644 --- a/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +++ b/src/storage/checkpoint/write_overflow_strings_to_disk.cpp @@ -47,19 +47,19 @@ void WriteOverflowStringsToDisk::WriteString(UncompressedStringSegmentState &sta AllocateNewBlock(state, block_manager.GetFreeBlockId()); } result_block = block_id; - result_offset = offset; + result_offset = UnsafeNumericCast(offset); // write the length field auto data_ptr = handle.Ptr(); auto string_length = string.GetSize(); - Store(string_length, data_ptr + offset); + Store(UnsafeNumericCast(string_length), data_ptr + offset); offset += sizeof(uint32_t); // now write the remainder of the string auto strptr = string.GetData(); - uint32_t remaining = string_length; + auto remaining = UnsafeNumericCast(string_length); while (remaining > 0) { - uint32_t to_write = MinValue(remaining, STRING_SPACE - offset); + uint32_t to_write = MinValue(remaining, UnsafeNumericCast(STRING_SPACE - offset)); if (to_write > 0) { memcpy(data_ptr + offset, strptr, to_write); diff --git a/src/storage/compression/dictionary_compression.cpp b/src/storage/compression/dictionary_compression.cpp index b5d071843091..4f2bce492d11 100644 --- a/src/storage/compression/dictionary_compression.cpp +++ b/src/storage/compression/dictionary_compression.cpp @@ -1,4 +1,5 @@ #include "duckdb/common/bitpacking.hpp" +#include "duckdb/common/numeric_utils.hpp" #include "duckdb/common/operator/comparison_operators.hpp" #include "duckdb/common/string_map_set.hpp" #include "duckdb/common/types/vector_buffer.hpp" @@ -212,7 +213,7 @@ struct DictionaryCompressionCompressState : public DictionaryCompressionState { // Update buffers and map index_buffer.push_back(current_dictionary.size); - selection_buffer.push_back(index_buffer.size() - 1); + selection_buffer.push_back(UnsafeNumericCast(index_buffer.size() - 1)); if (str.IsInlined()) { current_string_map.insert({str, index_buffer.size() - 1}); } else { @@ -285,8 +286,8 @@ struct DictionaryCompressionCompressState : public DictionaryCompressionState { memcpy(base_ptr + index_buffer_offset, index_buffer.data(), index_buffer_size); // Store sizes and offsets in segment header - Store(index_buffer_offset, data_ptr_cast(&header_ptr->index_buffer_offset)); - Store(index_buffer.size(), data_ptr_cast(&header_ptr->index_buffer_count)); + Store(NumericCast(index_buffer_offset), data_ptr_cast(&header_ptr->index_buffer_offset)); + Store(NumericCast(index_buffer.size()), data_ptr_cast(&header_ptr->index_buffer_count)); Store((uint32_t)current_width, data_ptr_cast(&header_ptr->bitpacking_width)); D_ASSERT(current_width == BitpackingPrimitives::MinimumBitWidth(index_buffer.size() - 1)); @@ -507,7 +508,7 @@ void DictionaryCompressionStorage::StringScanPartial(ColumnSegment &segment, Col // Lookup dict offset in index buffer auto string_number = scan_state.sel_vec->get_index(i + start_offset); auto dict_offset = index_buffer_ptr[string_number]; - uint16_t str_len = GetStringLength(index_buffer_ptr, string_number); + auto str_len = GetStringLength(index_buffer_ptr, UnsafeNumericCast(string_number)); result_data[result_offset + i] = FetchStringFromDict(segment, dict, baseptr, dict_offset, str_len); } @@ -627,7 +628,7 @@ uint16_t DictionaryCompressionStorage::GetStringLength(uint32_t *index_buffer_pt if (index == 0) { return 0; } else { - return index_buffer_ptr[index] - index_buffer_ptr[index - 1]; + return UnsafeNumericCast(index_buffer_ptr[index] - index_buffer_ptr[index - 1]); } } diff --git a/src/storage/compression/fsst.cpp b/src/storage/compression/fsst.cpp index f5809653c21a..6c9562366f0c 100644 --- a/src/storage/compression/fsst.cpp +++ b/src/storage/compression/fsst.cpp @@ -249,7 +249,7 @@ class FSSTCompressionState : public CompressionState { current_dictionary.Verify(); // We just push the string length to effectively delta encode the strings - index_buffer.push_back(compressed_string_len); + index_buffer.push_back(NumericCast(compressed_string_len)); max_compressed_string_length = MaxValue(max_compressed_string_length, compressed_string_len); @@ -348,7 +348,8 @@ class FSSTCompressionState : public CompressionState { memset(base_ptr + symbol_table_offset, 0, fsst_serialized_symbol_table_size); } - Store(symbol_table_offset, data_ptr_cast(&header_ptr->fsst_symbol_table_offset)); + Store(NumericCast(symbol_table_offset), + data_ptr_cast(&header_ptr->fsst_symbol_table_offset)); Store((uint32_t)current_width, data_ptr_cast(&header_ptr->bitpacking_width)); if (total_size >= FSSTStorage::COMPACTION_FLUSH_LIMIT) { diff --git a/src/storage/compression/rle.cpp b/src/storage/compression/rle.cpp index 89a800b80a6e..edc111dd337a 100644 --- a/src/storage/compression/rle.cpp +++ b/src/storage/compression/rle.cpp @@ -250,7 +250,7 @@ struct RLEScanState : public SegmentScanState { handle = buffer_manager.Pin(segment.block); entry_pos = 0; position_in_entry = 0; - rle_count_offset = Load(handle.Ptr() + segment.GetBlockOffset()); + rle_count_offset = UnsafeNumericCast(Load(handle.Ptr() + segment.GetBlockOffset())); D_ASSERT(rle_count_offset <= Storage::BLOCK_SIZE); } diff --git a/src/storage/compression/string_uncompressed.cpp b/src/storage/compression/string_uncompressed.cpp index 7d0a594c7b8e..6aee50452f8d 100644 --- a/src/storage/compression/string_uncompressed.cpp +++ b/src/storage/compression/string_uncompressed.cpp @@ -164,7 +164,7 @@ UncompressedStringStorage::StringInitSegment(ColumnSegment &segment, block_id_t auto handle = buffer_manager.Pin(segment.block); StringDictionaryContainer dictionary; dictionary.size = 0; - dictionary.end = segment.SegmentSize(); + dictionary.end = UnsafeNumericCast(segment.SegmentSize()); SetDictionary(segment, handle, dictionary); } auto result = make_uniq(); @@ -283,7 +283,7 @@ void UncompressedStringStorage::WriteString(ColumnSegment &segment, string_t str void UncompressedStringStorage::WriteStringMemory(ColumnSegment &segment, string_t string, block_id_t &result_block, int32_t &result_offset) { - uint32_t total_length = string.GetSize() + sizeof(uint32_t); + auto total_length = UnsafeNumericCast(string.GetSize() + sizeof(uint32_t)); shared_ptr block; BufferHandle handle; @@ -309,11 +309,11 @@ void UncompressedStringStorage::WriteStringMemory(ColumnSegment &segment, string } result_block = state.head->block->BlockId(); - result_offset = state.head->offset; + result_offset = UnsafeNumericCast(state.head->offset); // copy the string and the length there auto ptr = handle.Ptr() + state.head->offset; - Store(string.GetSize(), ptr); + Store(UnsafeNumericCast(string.GetSize()), ptr); ptr += sizeof(uint32_t); memcpy(ptr, string.GetData(), string.GetSize()); state.head->offset += total_length; diff --git a/src/storage/data_table.cpp b/src/storage/data_table.cpp index 0e64ab831f03..435766de0186 100644 --- a/src/storage/data_table.cpp +++ b/src/storage/data_table.cpp @@ -747,12 +747,12 @@ void DataTable::AppendLock(TableAppendState &state) { state.current_row = state.row_start; } -void DataTable::InitializeAppend(DuckTransaction &transaction, TableAppendState &state, idx_t append_count) { +void DataTable::InitializeAppend(DuckTransaction &transaction, TableAppendState &state) { // obtain the append lock for this table if (!state.append_lock) { throw InternalException("DataTable::AppendLock should be called before DataTable::InitializeAppend"); } - row_groups->InitializeAppend(transaction, state, append_count); + row_groups->InitializeAppend(transaction, state); } void DataTable::Append(DataChunk &chunk, TableAppendState &state) { @@ -760,6 +760,10 @@ void DataTable::Append(DataChunk &chunk, TableAppendState &state) { row_groups->Append(chunk, state); } +void DataTable::FinalizeAppend(DuckTransaction &transaction, TableAppendState &state) { + row_groups->FinalizeAppend(transaction, state); +} + void DataTable::ScanTableSegment(idx_t row_start, idx_t count, const std::function &function) { if (count == 0) { return; diff --git a/src/storage/local_storage.cpp b/src/storage/local_storage.cpp index 2aa7ab7363c0..2c7fb0fe1d79 100644 --- a/src/storage/local_storage.cpp +++ b/src/storage/local_storage.cpp @@ -151,7 +151,7 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen idx_t append_count, bool append_to_table) { auto &table = table_ref.get(); if (append_to_table) { - table.InitializeAppend(transaction, append_state, append_count); + table.InitializeAppend(transaction, append_state); } ErrorData error; if (append_to_table) { @@ -202,6 +202,9 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen }); error.Throw(); } + if (append_to_table) { + table.FinalizeAppend(transaction, append_state); + } } OptimisticDataWriter &LocalTableStorage::CreateOptimisticWriter() { @@ -352,7 +355,7 @@ bool LocalStorage::NextParallelScan(ClientContext &context, DataTable &table, Pa void LocalStorage::InitializeAppend(LocalAppendState &state, DataTable &table) { state.storage = &table_manager.GetOrCreateStorage(table); - state.storage->row_groups->InitializeAppend(TransactionData(transaction), state.append_state, 0); + state.storage->row_groups->InitializeAppend(TransactionData(transaction), state.append_state); } void LocalStorage::Append(LocalAppendState &state, DataChunk &chunk) { diff --git a/src/storage/metadata/metadata_manager.cpp b/src/storage/metadata/metadata_manager.cpp index 808ede82843c..8d25e037e1b5 100644 --- a/src/storage/metadata/metadata_manager.cpp +++ b/src/storage/metadata/metadata_manager.cpp @@ -85,7 +85,7 @@ block_id_t MetadataManager::AllocateNewBlock() { auto handle = buffer_manager.Allocate(MemoryTag::METADATA, Storage::BLOCK_SIZE, false, &new_block.block); new_block.block_id = new_block_id; for (idx_t i = 0; i < METADATA_BLOCK_COUNT; i++) { - new_block.free_blocks.push_back(METADATA_BLOCK_COUNT - i - 1); + new_block.free_blocks.push_back(NumericCast(METADATA_BLOCK_COUNT - i - 1)); } // zero-initialize the handle memset(handle.Ptr(), 0, Storage::BLOCK_SIZE); @@ -135,7 +135,7 @@ MetadataPointer MetadataManager::FromDiskPointer(MetaBlockPointer pointer) { } // LCOV_EXCL_STOP MetadataPointer result; result.block_index = block_id; - result.index = index; + result.index = UnsafeNumericCast(index); return result; } @@ -165,7 +165,7 @@ MetaBlockPointer MetadataManager::FromBlockPointer(BlockPointer block_pointer) { D_ASSERT(offset < MetadataManager::METADATA_BLOCK_SIZE); MetaBlockPointer result; result.block_pointer = idx_t(block_pointer.block_id) | index << 56ULL; - result.offset = offset; + result.offset = UnsafeNumericCast(offset); return result; } @@ -247,7 +247,7 @@ void MetadataBlock::FreeBlocksFromInteger(idx_t free_list) { auto index = i - 1; idx_t mask = idx_t(1) << index; if (free_list & mask) { - free_blocks.push_back(index); + free_blocks.push_back(UnsafeNumericCast(index)); } } } diff --git a/src/storage/metadata/metadata_reader.cpp b/src/storage/metadata/metadata_reader.cpp index fbc4dfb44e1d..91677253573e 100644 --- a/src/storage/metadata/metadata_reader.cpp +++ b/src/storage/metadata/metadata_reader.cpp @@ -47,7 +47,7 @@ void MetadataReader::ReadData(data_ptr_t buffer, idx_t read_size) { } MetaBlockPointer MetadataReader::GetMetaBlockPointer() { - return manager.GetDiskPointer(block.pointer, offset); + return manager.GetDiskPointer(block.pointer, UnsafeNumericCast(offset)); } void MetadataReader::ReadNextBlock() { diff --git a/src/storage/metadata/metadata_writer.cpp b/src/storage/metadata/metadata_writer.cpp index 47bb8d1f16c2..e47708c21f6a 100644 --- a/src/storage/metadata/metadata_writer.cpp +++ b/src/storage/metadata/metadata_writer.cpp @@ -27,7 +27,7 @@ MetaBlockPointer MetadataWriter::GetMetaBlockPointer() { NextBlock(); D_ASSERT(capacity > 0); } - return manager.GetDiskPointer(block.pointer, offset); + return manager.GetDiskPointer(block.pointer, UnsafeNumericCast(offset)); } MetadataHandle MetadataWriter::NextHandle() { diff --git a/src/storage/partial_block_manager.cpp b/src/storage/partial_block_manager.cpp index 8a91e8844cc0..26366706581f 100644 --- a/src/storage/partial_block_manager.cpp +++ b/src/storage/partial_block_manager.cpp @@ -139,7 +139,7 @@ void PartialBlockManager::Merge(PartialBlockManager &other) { if (!e.second) { throw InternalException("Empty partially filled block found"); } - auto used_space = Storage::BLOCK_SIZE - e.first; + auto used_space = NumericCast(Storage::BLOCK_SIZE - e.first); if (HasBlockAllocation(used_space)) { // we can merge this block into an existing block - merge them // merge blocks diff --git a/src/storage/serialization/serialize_create_info.cpp b/src/storage/serialization/serialize_create_info.cpp index 8d667acf669c..3196a1d107d0 100644 --- a/src/storage/serialization/serialize_create_info.cpp +++ b/src/storage/serialization/serialize_create_info.cpp @@ -188,6 +188,7 @@ void CreateViewInfo::Serialize(Serializer &serializer) const { serializer.WritePropertyWithDefault>(202, "types", types); serializer.WritePropertyWithDefault>(203, "query", query); serializer.WritePropertyWithDefault>(204, "names", names); + serializer.WritePropertyWithDefault>(205, "column_comments", column_comments, vector()); } unique_ptr CreateViewInfo::Deserialize(Deserializer &deserializer) { @@ -197,6 +198,7 @@ unique_ptr CreateViewInfo::Deserialize(Deserializer &deserializer) { deserializer.ReadPropertyWithDefault>(202, "types", result->types); deserializer.ReadPropertyWithDefault>(203, "query", result->query); deserializer.ReadPropertyWithDefault>(204, "names", result->names); + deserializer.ReadPropertyWithDefault>(205, "column_comments", result->column_comments, vector()); return std::move(result); } diff --git a/src/storage/serialization/serialize_expression.cpp b/src/storage/serialization/serialize_expression.cpp index e26e4ca49c51..a28b01d15423 100644 --- a/src/storage/serialization/serialize_expression.cpp +++ b/src/storage/serialization/serialize_expression.cpp @@ -13,12 +13,14 @@ void Expression::Serialize(Serializer &serializer) const { serializer.WriteProperty(100, "expression_class", expression_class); serializer.WriteProperty(101, "type", type); serializer.WritePropertyWithDefault(102, "alias", alias); + serializer.WritePropertyWithDefault(103, "query_location", query_location, optional_idx()); } unique_ptr Expression::Deserialize(Deserializer &deserializer) { auto expression_class = deserializer.ReadProperty(100, "expression_class"); auto type = deserializer.ReadProperty(101, "type"); auto alias = deserializer.ReadPropertyWithDefault(102, "alias"); + auto query_location = deserializer.ReadPropertyWithDefault(103, "query_location", optional_idx()); deserializer.Set(type); unique_ptr result; switch (expression_class) { @@ -78,6 +80,7 @@ unique_ptr Expression::Deserialize(Deserializer &deserializer) { } deserializer.Unset(); result->alias = std::move(alias); + result->query_location = query_location; return result; } diff --git a/src/storage/serialization/serialize_logical_operator.cpp b/src/storage/serialization/serialize_logical_operator.cpp index fd061c1dbb80..1c155485c4a9 100644 --- a/src/storage/serialization/serialize_logical_operator.cpp +++ b/src/storage/serialization/serialize_logical_operator.cpp @@ -124,9 +124,6 @@ unique_ptr LogicalOperator::Deserialize(Deserializer &deseriali case LogicalOperatorType::LOGICAL_LIMIT: result = LogicalLimit::Deserialize(deserializer); break; - case LogicalOperatorType::LOGICAL_LIMIT_PERCENT: - result = LogicalLimitPercent::Deserialize(deserializer); - break; case LogicalOperatorType::LOGICAL_LOAD: result = LogicalSimple::Deserialize(deserializer); break; @@ -506,35 +503,14 @@ unique_ptr LogicalInsert::Deserialize(Deserializer &deserialize void LogicalLimit::Serialize(Serializer &serializer) const { LogicalOperator::Serialize(serializer); - serializer.WritePropertyWithDefault(200, "limit_val", limit_val); - serializer.WritePropertyWithDefault(201, "offset_val", offset_val); - serializer.WritePropertyWithDefault>(202, "limit", limit); - serializer.WritePropertyWithDefault>(203, "offset", offset); + serializer.WriteProperty(200, "limit_val", limit_val); + serializer.WriteProperty(201, "offset_val", offset_val); } unique_ptr LogicalLimit::Deserialize(Deserializer &deserializer) { - auto limit_val = deserializer.ReadPropertyWithDefault(200, "limit_val"); - auto offset_val = deserializer.ReadPropertyWithDefault(201, "offset_val"); - auto limit = deserializer.ReadPropertyWithDefault>(202, "limit"); - auto offset = deserializer.ReadPropertyWithDefault>(203, "offset"); - auto result = duckdb::unique_ptr(new LogicalLimit(limit_val, offset_val, std::move(limit), std::move(offset))); - return std::move(result); -} - -void LogicalLimitPercent::Serialize(Serializer &serializer) const { - LogicalOperator::Serialize(serializer); - serializer.WriteProperty(200, "limit_percent", limit_percent); - serializer.WritePropertyWithDefault(201, "offset_val", offset_val); - serializer.WritePropertyWithDefault>(202, "limit", limit); - serializer.WritePropertyWithDefault>(203, "offset", offset); -} - -unique_ptr LogicalLimitPercent::Deserialize(Deserializer &deserializer) { - auto limit_percent = deserializer.ReadProperty(200, "limit_percent"); - auto offset_val = deserializer.ReadPropertyWithDefault(201, "offset_val"); - auto limit = deserializer.ReadPropertyWithDefault>(202, "limit"); - auto offset = deserializer.ReadPropertyWithDefault>(203, "offset"); - auto result = duckdb::unique_ptr(new LogicalLimitPercent(limit_percent, offset_val, std::move(limit), std::move(offset))); + auto limit_val = deserializer.ReadProperty(200, "limit_val"); + auto offset_val = deserializer.ReadProperty(201, "offset_val"); + auto result = duckdb::unique_ptr(new LogicalLimit(std::move(limit_val), std::move(offset_val))); return std::move(result); } diff --git a/src/storage/serialization/serialize_nodes.cpp b/src/storage/serialization/serialize_nodes.cpp index 47c464e1f205..2be3e4e5f002 100644 --- a/src/storage/serialization/serialize_nodes.cpp +++ b/src/storage/serialization/serialize_nodes.cpp @@ -25,8 +25,8 @@ #include "duckdb/planner/table_filter.hpp" #include "duckdb/common/multi_file_reader_options.hpp" #include "duckdb/common/multi_file_reader.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_option.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_option.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/function/scalar/strftime_format.hpp" #include "duckdb/function/table/read_csv.hpp" #include "duckdb/common/types/interval.hpp" @@ -45,6 +45,22 @@ BoundCaseCheck BoundCaseCheck::Deserialize(Deserializer &deserializer) { return result; } +void BoundLimitNode::Serialize(Serializer &serializer) const { + serializer.WriteProperty(100, "type", type); + serializer.WritePropertyWithDefault(101, "constant_integer", constant_integer); + serializer.WriteProperty(102, "constant_percentage", constant_percentage); + serializer.WritePropertyWithDefault>(103, "expression", expression); +} + +BoundLimitNode BoundLimitNode::Deserialize(Deserializer &deserializer) { + auto type = deserializer.ReadProperty(100, "type"); + auto constant_integer = deserializer.ReadPropertyWithDefault(101, "constant_integer"); + auto constant_percentage = deserializer.ReadProperty(102, "constant_percentage"); + auto expression = deserializer.ReadPropertyWithDefault>(103, "expression"); + BoundLimitNode result(type, constant_integer, constant_percentage, std::move(expression)); + return result; +} + void BoundOrderByNode::Serialize(Serializer &serializer) const { serializer.WriteProperty(100, "type", type); serializer.WriteProperty(101, "null_order", null_order); @@ -363,14 +379,14 @@ PivotColumn PivotColumn::Deserialize(Deserializer &deserializer) { void PivotColumnEntry::Serialize(Serializer &serializer) const { serializer.WritePropertyWithDefault>(100, "values", values); - serializer.WritePropertyWithDefault>(101, "star_expr", star_expr); + serializer.WritePropertyWithDefault>(101, "star_expr", expr); serializer.WritePropertyWithDefault(102, "alias", alias); } PivotColumnEntry PivotColumnEntry::Deserialize(Deserializer &deserializer) { PivotColumnEntry result; deserializer.ReadPropertyWithDefault>(100, "values", result.values); - deserializer.ReadPropertyWithDefault>(101, "star_expr", result.star_expr); + deserializer.ReadPropertyWithDefault>(101, "star_expr", result.expr); deserializer.ReadPropertyWithDefault(102, "alias", result.alias); return result; } diff --git a/src/storage/serialization/serialize_parse_info.cpp b/src/storage/serialization/serialize_parse_info.cpp index 2e0d510093e3..a0f931ebbccd 100644 --- a/src/storage/serialization/serialize_parse_info.cpp +++ b/src/storage/serialization/serialize_parse_info.cpp @@ -8,6 +8,7 @@ #include "duckdb/parser/parsed_data/parse_info.hpp" #include "duckdb/parser/parsed_data/alter_info.hpp" #include "duckdb/parser/parsed_data/alter_table_info.hpp" +#include "duckdb/parser/parsed_data/comment_on_column_info.hpp" #include "duckdb/parser/parsed_data/attach_info.hpp" #include "duckdb/parser/parsed_data/copy_info.hpp" #include "duckdb/parser/parsed_data/detach_info.hpp" @@ -16,7 +17,6 @@ #include "duckdb/parser/parsed_data/pragma_info.hpp" #include "duckdb/parser/parsed_data/transaction_info.hpp" #include "duckdb/parser/parsed_data/vacuum_info.hpp" -#include "duckdb/parser/parsed_data/comment_on_info.hpp" namespace duckdb { @@ -34,9 +34,6 @@ unique_ptr ParseInfo::Deserialize(Deserializer &deserializer) { case ParseInfoType::ATTACH_INFO: result = AttachInfo::Deserialize(deserializer); break; - case ParseInfoType::COMMENT_ON_INFO: - result = CommentOnInfo::Deserialize(deserializer); - break; case ParseInfoType::COPY_INFO: result = CopyInfo::Deserialize(deserializer); break; @@ -89,6 +86,9 @@ unique_ptr AlterInfo::Deserialize(Deserializer &deserializer) { case AlterType::ALTER_VIEW: result = AlterViewInfo::Deserialize(deserializer); break; + case AlterType::SET_COLUMN_COMMENT: + result = SetColumnCommentInfo::Deserialize(deserializer); + break; case AlterType::SET_COMMENT: result = SetCommentInfo::Deserialize(deserializer); break; @@ -133,9 +133,6 @@ unique_ptr AlterTableInfo::Deserialize(Deserializer &deserializer) { case AlterTableType::RENAME_TABLE: result = RenameTableInfo::Deserialize(deserializer); break; - case AlterTableType::SET_COLUMN_COMMENT: - result = SetColumnCommentInfo::Deserialize(deserializer); - break; case AlterTableType::SET_DEFAULT: result = SetDefaultInfo::Deserialize(deserializer); break; @@ -232,25 +229,6 @@ unique_ptr ChangeColumnTypeInfo::Deserialize(Deserializer &deser return std::move(result); } -void CommentOnInfo::Serialize(Serializer &serializer) const { - ParseInfo::Serialize(serializer); - serializer.WriteProperty(200, "type", type); - serializer.WritePropertyWithDefault(201, "catalog", catalog); - serializer.WritePropertyWithDefault(202, "schema", schema); - serializer.WritePropertyWithDefault(203, "name", name); - serializer.WriteProperty(204, "comment", comment); -} - -unique_ptr CommentOnInfo::Deserialize(Deserializer &deserializer) { - auto result = duckdb::unique_ptr(new CommentOnInfo()); - deserializer.ReadProperty(200, "type", result->type); - deserializer.ReadPropertyWithDefault(201, "catalog", result->catalog); - deserializer.ReadPropertyWithDefault(202, "schema", result->schema); - deserializer.ReadPropertyWithDefault(203, "name", result->name); - deserializer.ReadProperty(204, "comment", result->comment); - return std::move(result); -} - void CopyInfo::Serialize(Serializer &serializer) const { ParseInfo::Serialize(serializer); serializer.WritePropertyWithDefault(200, "catalog", catalog); @@ -406,15 +384,17 @@ unique_ptr RenameViewInfo::Deserialize(Deserializer &deserializer } void SetColumnCommentInfo::Serialize(Serializer &serializer) const { - AlterTableInfo::Serialize(serializer); - serializer.WritePropertyWithDefault(400, "column_name", column_name); - serializer.WriteProperty(401, "comment", comment); + AlterInfo::Serialize(serializer); + serializer.WriteProperty(300, "catalog_entry_type", catalog_entry_type); + serializer.WriteProperty(301, "comment_value", comment_value); + serializer.WritePropertyWithDefault(302, "column_name", column_name); } -unique_ptr SetColumnCommentInfo::Deserialize(Deserializer &deserializer) { +unique_ptr SetColumnCommentInfo::Deserialize(Deserializer &deserializer) { auto result = duckdb::unique_ptr(new SetColumnCommentInfo()); - deserializer.ReadPropertyWithDefault(400, "column_name", result->column_name); - deserializer.ReadProperty(401, "comment", result->comment); + deserializer.ReadProperty(300, "catalog_entry_type", result->catalog_entry_type); + deserializer.ReadProperty(301, "comment_value", result->comment_value); + deserializer.ReadPropertyWithDefault(302, "column_name", result->column_name); return std::move(result); } diff --git a/src/storage/standard_buffer_manager.cpp b/src/storage/standard_buffer_manager.cpp index 7bcc782ee47a..a846e04ec3a1 100644 --- a/src/storage/standard_buffer_manager.cpp +++ b/src/storage/standard_buffer_manager.cpp @@ -9,6 +9,7 @@ #include "duckdb/storage/in_memory_block_manager.hpp" #include "duckdb/storage/storage_manager.hpp" #include "duckdb/storage/temporary_memory_manager.hpp" +#include "duckdb/storage/temporary_file_manager.hpp" namespace duckdb { @@ -34,22 +35,6 @@ unique_ptr StandardBufferManager::ConstructManagedBuffer(idx_t size, return result; } -class TemporaryFileManager; - -class TemporaryDirectoryHandle { -public: - TemporaryDirectoryHandle(DatabaseInstance &db, string path_p); - ~TemporaryDirectoryHandle(); - - TemporaryFileManager &GetTempFile(); - -private: - DatabaseInstance &db; - string temp_directory; - bool created_directory = false; - unique_ptr temp_file; -}; - void StandardBufferManager::SetTemporaryDirectory(const string &new_dir) { if (temp_directory_handle) { throw NotImplementedException("Cannot switch temporary directory after the current one has been used"); @@ -62,6 +47,9 @@ StandardBufferManager::StandardBufferManager(DatabaseInstance &db, string tmp) temporary_id(MAXIMUM_BLOCK), buffer_allocator(BufferAllocatorAllocate, BufferAllocatorFree, BufferAllocatorRealloc, make_uniq(*this)) { temp_block_manager = make_uniq(*this); + for (idx_t i = 0; i < MEMORY_TAG_COUNT; i++) { + evicted_data_per_tag[i] = 0; + } } StandardBufferManager::~StandardBufferManager() { @@ -176,7 +164,7 @@ BufferHandle StandardBufferManager::Pin(shared_ptr &handle) { auto reservation = EvictBlocksOrThrow(handle->tag, required_memory, &reusable_buffer, "failed to pin block of size %s%s", StringUtil::BytesToHumanReadableString(required_memory)); - // lock the handle again and repeat the check (in case anybody loaded in the mean time) + // lock the handle again and repeat the check (in case anybody loaded in the meantime) lock_guard lock(handle->lock); // check if the block is already loaded if (handle->state == BlockState::BLOCK_LOADED) { @@ -220,15 +208,23 @@ void StandardBufferManager::VerifyZeroReaders(shared_ptr &handle) { } void StandardBufferManager::Unpin(shared_ptr &handle) { - lock_guard lock(handle->lock); - if (!handle->buffer || handle->buffer->type == FileBufferType::TINY_BUFFER) { - return; + bool purge = false; + { + lock_guard lock(handle->lock); + if (!handle->buffer || handle->buffer->type == FileBufferType::TINY_BUFFER) { + return; + } + D_ASSERT(handle->readers > 0); + handle->readers--; + if (handle->readers == 0) { + VerifyZeroReaders(handle); + purge = buffer_pool.AddToEvictionQueue(handle); + } } - D_ASSERT(handle->readers > 0); - handle->readers--; - if (handle->readers == 0) { - VerifyZeroReaders(handle); - buffer_pool.AddToEvictionQueue(handle); + + // We do not have to keep the handle locked while purging. + if (purge) { + PurgeQueue(); } } @@ -248,379 +244,15 @@ vector StandardBufferManager::GetMemoryUsageInfo() const { return result; } -//===--------------------------------------------------------------------===// -// Temporary File Management -//===--------------------------------------------------------------------===// -unique_ptr ReadTemporaryBufferInternal(BufferManager &buffer_manager, FileHandle &handle, idx_t position, - idx_t size, block_id_t id, unique_ptr reusable_buffer) { +unique_ptr StandardBufferManager::ReadTemporaryBufferInternal(BufferManager &buffer_manager, + FileHandle &handle, idx_t position, + idx_t size, + unique_ptr reusable_buffer) { auto buffer = buffer_manager.ConstructManagedBuffer(size, std::move(reusable_buffer)); buffer->Read(handle, position); return buffer; } -struct TemporaryFileIndex { - explicit TemporaryFileIndex(idx_t file_index = DConstants::INVALID_INDEX, - idx_t block_index = DConstants::INVALID_INDEX) - : file_index(file_index), block_index(block_index) { - } - - idx_t file_index; - idx_t block_index; - -public: - bool IsValid() { - return block_index != DConstants::INVALID_INDEX; - } -}; - -struct BlockIndexManager { - BlockIndexManager() : max_index(0) { - } - -public: - //! Obtains a new block index from the index manager - idx_t GetNewBlockIndex() { - auto index = GetNewBlockIndexInternal(); - indexes_in_use.insert(index); - return index; - } - - //! Removes an index from the block manager - //! Returns true if the max_index has been altered - bool RemoveIndex(idx_t index) { - // remove this block from the set of blocks - auto entry = indexes_in_use.find(index); - if (entry == indexes_in_use.end()) { - throw InternalException("RemoveIndex - index %llu not found in indexes_in_use", index); - } - indexes_in_use.erase(entry); - free_indexes.insert(index); - // check if we can truncate the file - - // get the max_index in use right now - auto max_index_in_use = indexes_in_use.empty() ? 0 : *indexes_in_use.rbegin(); - if (max_index_in_use < max_index) { - // max index in use is lower than the max_index - // reduce the max_index - max_index = indexes_in_use.empty() ? 0 : max_index_in_use + 1; - // we can remove any free_indexes that are larger than the current max_index - while (!free_indexes.empty()) { - auto max_entry = *free_indexes.rbegin(); - if (max_entry < max_index) { - break; - } - free_indexes.erase(max_entry); - } - return true; - } - return false; - } - - idx_t GetMaxIndex() { - return max_index; - } - - bool HasFreeBlocks() { - return !free_indexes.empty(); - } - -private: - idx_t GetNewBlockIndexInternal() { - if (free_indexes.empty()) { - return max_index++; - } - auto entry = free_indexes.begin(); - auto index = *entry; - free_indexes.erase(entry); - return index; - } - - idx_t max_index; - set free_indexes; - set indexes_in_use; -}; - -class TemporaryFileHandle { - constexpr static idx_t MAX_ALLOWED_INDEX_BASE = 4000; - -public: - TemporaryFileHandle(idx_t temp_file_count, DatabaseInstance &db, const string &temp_directory, idx_t index) - : max_allowed_index((1 << temp_file_count) * MAX_ALLOWED_INDEX_BASE), db(db), file_index(index), - path(FileSystem::GetFileSystem(db).JoinPath(temp_directory, - "duckdb_temp_storage-" + to_string(index) + ".tmp")) { - } - -public: - struct TemporaryFileLock { - explicit TemporaryFileLock(mutex &mutex) : lock(mutex) { - } - - lock_guard lock; - }; - -public: - TemporaryFileIndex TryGetBlockIndex() { - TemporaryFileLock lock(file_lock); - if (index_manager.GetMaxIndex() >= max_allowed_index && index_manager.HasFreeBlocks()) { - // file is at capacity - return TemporaryFileIndex(); - } - // open the file handle if it does not yet exist - CreateFileIfNotExists(lock); - // fetch a new block index to write to - auto block_index = index_manager.GetNewBlockIndex(); - return TemporaryFileIndex(file_index, block_index); - } - - void WriteTemporaryFile(FileBuffer &buffer, TemporaryFileIndex index) { - D_ASSERT(buffer.size == Storage::BLOCK_SIZE); - buffer.Write(*handle, GetPositionInFile(index.block_index)); - } - - unique_ptr ReadTemporaryBuffer(block_id_t id, idx_t block_index, - unique_ptr reusable_buffer) { - return ReadTemporaryBufferInternal(BufferManager::GetBufferManager(db), *handle, GetPositionInFile(block_index), - Storage::BLOCK_SIZE, id, std::move(reusable_buffer)); - } - - void EraseBlockIndex(block_id_t block_index) { - // remove the block (and potentially truncate the temp file) - TemporaryFileLock lock(file_lock); - D_ASSERT(handle); - RemoveTempBlockIndex(lock, block_index); - } - - bool DeleteIfEmpty() { - TemporaryFileLock lock(file_lock); - if (index_manager.GetMaxIndex() > 0) { - // there are still blocks in this file - return false; - } - // the file is empty: delete it - handle.reset(); - auto &fs = FileSystem::GetFileSystem(db); - fs.RemoveFile(path); - return true; - } - - TemporaryFileInformation GetTemporaryFile() { - TemporaryFileLock lock(file_lock); - TemporaryFileInformation info; - info.path = path; - info.size = GetPositionInFile(index_manager.GetMaxIndex()); - return info; - } - -private: - void CreateFileIfNotExists(TemporaryFileLock &) { - if (handle) { - return; - } - auto &fs = FileSystem::GetFileSystem(db); - handle = fs.OpenFile(path, FileFlags::FILE_FLAGS_READ | FileFlags::FILE_FLAGS_WRITE | - FileFlags::FILE_FLAGS_FILE_CREATE); - } - - void RemoveTempBlockIndex(TemporaryFileLock &, idx_t index) { - // remove the block index from the index manager - if (index_manager.RemoveIndex(index)) { - // the max_index that is currently in use has decreased - // as a result we can truncate the file -#ifndef WIN32 // this ended up causing issues when sorting - auto max_index = index_manager.GetMaxIndex(); - auto &fs = FileSystem::GetFileSystem(db); - fs.Truncate(*handle, GetPositionInFile(max_index + 1)); -#endif - } - } - - idx_t GetPositionInFile(idx_t index) { - return index * Storage::BLOCK_ALLOC_SIZE; - } - -private: - const idx_t max_allowed_index; - DatabaseInstance &db; - unique_ptr handle; - idx_t file_index; - string path; - mutex file_lock; - BlockIndexManager index_manager; -}; - -class TemporaryFileManager { -public: - TemporaryFileManager(DatabaseInstance &db, const string &temp_directory_p) - : db(db), temp_directory(temp_directory_p) { - } - -public: - struct TemporaryManagerLock { - explicit TemporaryManagerLock(mutex &mutex) : lock(mutex) { - } - - lock_guard lock; - }; - - void WriteTemporaryBuffer(block_id_t block_id, FileBuffer &buffer) { - D_ASSERT(buffer.size == Storage::BLOCK_SIZE); - TemporaryFileIndex index; - TemporaryFileHandle *handle = nullptr; - - { - TemporaryManagerLock lock(manager_lock); - // first check if we can write to an open existing file - for (auto &entry : files) { - auto &temp_file = entry.second; - index = temp_file->TryGetBlockIndex(); - if (index.IsValid()) { - handle = entry.second.get(); - break; - } - } - if (!handle) { - // no existing handle to write to; we need to create & open a new file - auto new_file_index = index_manager.GetNewBlockIndex(); - auto new_file = make_uniq(files.size(), db, temp_directory, new_file_index); - handle = new_file.get(); - files[new_file_index] = std::move(new_file); - - index = handle->TryGetBlockIndex(); - } - D_ASSERT(used_blocks.find(block_id) == used_blocks.end()); - used_blocks[block_id] = index; - } - D_ASSERT(handle); - D_ASSERT(index.IsValid()); - handle->WriteTemporaryFile(buffer, index); - } - - bool HasTemporaryBuffer(block_id_t block_id) { - lock_guard lock(manager_lock); - return used_blocks.find(block_id) != used_blocks.end(); - } - - unique_ptr ReadTemporaryBuffer(block_id_t id, unique_ptr reusable_buffer) { - TemporaryFileIndex index; - TemporaryFileHandle *handle; - { - TemporaryManagerLock lock(manager_lock); - index = GetTempBlockIndex(lock, id); - handle = GetFileHandle(lock, index.file_index); - } - auto buffer = handle->ReadTemporaryBuffer(id, index.block_index, std::move(reusable_buffer)); - { - // remove the block (and potentially erase the temp file) - TemporaryManagerLock lock(manager_lock); - EraseUsedBlock(lock, id, handle, index); - } - return buffer; - } - - void DeleteTemporaryBuffer(block_id_t id) { - TemporaryManagerLock lock(manager_lock); - auto index = GetTempBlockIndex(lock, id); - auto handle = GetFileHandle(lock, index.file_index); - EraseUsedBlock(lock, id, handle, index); - } - - vector GetTemporaryFiles() { - lock_guard lock(manager_lock); - vector result; - for (auto &file : files) { - result.push_back(file.second->GetTemporaryFile()); - } - return result; - } - -private: - void EraseUsedBlock(TemporaryManagerLock &lock, block_id_t id, TemporaryFileHandle *handle, - TemporaryFileIndex index) { - auto entry = used_blocks.find(id); - if (entry == used_blocks.end()) { - throw InternalException("EraseUsedBlock - Block %llu not found in used blocks", id); - } - used_blocks.erase(entry); - handle->EraseBlockIndex(index.block_index); - if (handle->DeleteIfEmpty()) { - EraseFileHandle(lock, index.file_index); - } - } - - TemporaryFileHandle *GetFileHandle(TemporaryManagerLock &, idx_t index) { - return files[index].get(); - } - - TemporaryFileIndex GetTempBlockIndex(TemporaryManagerLock &, block_id_t id) { - D_ASSERT(used_blocks.find(id) != used_blocks.end()); - return used_blocks[id]; - } - - void EraseFileHandle(TemporaryManagerLock &, idx_t file_index) { - files.erase(file_index); - index_manager.RemoveIndex(file_index); - } - -private: - DatabaseInstance &db; - mutex manager_lock; - //! The temporary directory - string temp_directory; - //! The set of active temporary file handles - unordered_map> files; - //! map of block_id -> temporary file position - unordered_map used_blocks; - //! Manager of in-use temporary file indexes - BlockIndexManager index_manager; -}; - -TemporaryDirectoryHandle::TemporaryDirectoryHandle(DatabaseInstance &db, string path_p) - : db(db), temp_directory(std::move(path_p)), temp_file(make_uniq(db, temp_directory)) { - auto &fs = FileSystem::GetFileSystem(db); - if (!temp_directory.empty()) { - if (!fs.DirectoryExists(temp_directory)) { - fs.CreateDirectory(temp_directory); - created_directory = true; - } - } -} -TemporaryDirectoryHandle::~TemporaryDirectoryHandle() { - // first release any temporary files - temp_file.reset(); - // then delete the temporary file directory - auto &fs = FileSystem::GetFileSystem(db); - if (!temp_directory.empty()) { - bool delete_directory = created_directory; - vector files_to_delete; - if (!created_directory) { - bool deleted_everything = true; - fs.ListFiles(temp_directory, [&](const string &path, bool isdir) { - if (isdir) { - deleted_everything = false; - return; - } - if (!StringUtil::StartsWith(path, "duckdb_temp_")) { - deleted_everything = false; - return; - } - files_to_delete.push_back(path); - }); - } - if (delete_directory) { - // we want to remove all files in the directory - fs.RemoveDirectory(temp_directory); - } else { - for (auto &file : files_to_delete) { - fs.RemoveFile(fs.JoinPath(temp_directory, file)); - } - } - } -} - -TemporaryFileManager &TemporaryDirectoryHandle::GetTempFile() { - return *temp_file; -} - string StandardBufferManager::GetTemporaryPath(block_id_t id) { auto &fs = FileSystem::GetFileSystem(db); return fs.JoinPath(temp_directory, "duckdb_temp_block-" + to_string(id) + ".block"); @@ -674,8 +306,7 @@ unique_ptr StandardBufferManager::ReadTemporaryBuffer(MemoryTag tag, evicted_data_per_tag[uint8_t(tag)] -= block_size; // now allocate a buffer of this size and read the data into that buffer - auto buffer = - ReadTemporaryBufferInternal(*this, *handle, sizeof(idx_t), block_size, id, std::move(reusable_buffer)); + auto buffer = ReadTemporaryBufferInternal(*this, *handle, sizeof(idx_t), block_size, std::move(reusable_buffer)); handle.reset(); DeleteTemporaryFile(id); diff --git a/src/storage/statistics/string_stats.cpp b/src/storage/statistics/string_stats.cpp index 9b571fa810f3..ba15f160aa3c 100644 --- a/src/storage/statistics/string_stats.cpp +++ b/src/storage/statistics/string_stats.cpp @@ -152,7 +152,7 @@ void StringStats::Update(BaseStatistics &stats, const string_t &value) { memcpy(string_data.max, target, StringStatsData::MAX_STRING_MINMAX_SIZE); } if (size > string_data.max_string_length) { - string_data.max_string_length = size; + string_data.max_string_length = UnsafeNumericCast(size); } if (stats.GetType().id() == LogicalTypeId::VARCHAR && !string_data.has_unicode) { auto unicode = Utf8Proc::Analyze(const_char_ptr_cast(data), size); diff --git a/src/storage/storage_info.cpp b/src/storage/storage_info.cpp index fd469437713a..ab8822425258 100644 --- a/src/storage/storage_info.cpp +++ b/src/storage/storage_info.cpp @@ -9,7 +9,7 @@ struct StorageVersionInfo { idx_t storage_version; }; -static StorageVersionInfo storage_version_info[] = {{"v0.9.0, v0.9.1 or v0.9.2", 64}, +static StorageVersionInfo storage_version_info[] = {{"v0.9.0, v0.9.1, v0.9.2 or v0.10.0", 64}, {"v0.8.0 or v0.8.1", 51}, {"v0.7.0 or v0.7.1", 43}, {"v0.6.0 or v0.6.1", 39}, diff --git a/src/storage/table/column_checkpoint_state.cpp b/src/storage/table/column_checkpoint_state.cpp index 10a49b305a23..83ea3611fcd7 100644 --- a/src/storage/table/column_checkpoint_state.cpp +++ b/src/storage/table/column_checkpoint_state.cpp @@ -97,7 +97,7 @@ void PartialBlockForCheckpoint::Merge(PartialBlock &other_p, idx_t offset, idx_t // move over the segments for (auto &segment : other.segments) { - AddSegmentToTail(segment.data, segment.segment, segment.offset_in_block + offset); + AddSegmentToTail(segment.data, segment.segment, NumericCast(segment.offset_in_block + offset)); } other.Clear(); @@ -134,7 +134,8 @@ void ColumnCheckpointState::FlushSegment(unique_ptr segment, idx_ partial_block_lock = partial_block_manager.GetLock(); // non-constant block - PartialBlockAllocation allocation = partial_block_manager.GetBlockAllocation(segment_size); + PartialBlockAllocation allocation = + partial_block_manager.GetBlockAllocation(NumericCast(segment_size)); block_id = allocation.state.block_id; offset_in_block = allocation.state.offset; diff --git a/src/storage/table/column_data.cpp b/src/storage/table/column_data.cpp index ef9b0e66bdc2..605258876be6 100644 --- a/src/storage/table/column_data.cpp +++ b/src/storage/table/column_data.cpp @@ -23,7 +23,7 @@ namespace duckdb { ColumnData::ColumnData(BlockManager &block_manager, DataTableInfo &info, idx_t column_index, idx_t start_row, LogicalType type_p, optional_ptr parent) : start(start_row), count(0), block_manager(block_manager), info(info), column_index(column_index), - type(std::move(type_p)), parent(parent), version(0) { + type(std::move(type_p)), parent(parent), version(0), allocation_size(0) { if (!parent) { stats = make_uniq(type); } @@ -210,8 +210,10 @@ idx_t ColumnData::ScanCount(ColumnScanState &state, Vector &result, idx_t count) void ColumnData::Select(TransactionData transaction, idx_t vector_index, ColumnScanState &state, Vector &result, SelectionVector &sel, idx_t &count, const TableFilter &filter) { idx_t scan_count = Scan(transaction, vector_index, state, result); - result.Flatten(scan_count); - ColumnSegment::FilterSelection(sel, result, filter, count, FlatVector::Validity(result)); + + UnifiedVectorFormat vdata; + result.ToUnifiedFormat(scan_count, vdata); + ColumnSegment::FilterSelection(sel, result, vdata, filter, scan_count, count); } void ColumnData::FilterScan(TransactionData transaction, idx_t vector_index, ColumnScanState &state, Vector &result, @@ -406,6 +408,7 @@ void ColumnData::AppendTransientSegment(SegmentLock &l, idx_t start_row) { // the segment size is bound by the block size, but can be smaller idx_t segment_size = Storage::BLOCK_SIZE < vector_segment_size ? Storage::BLOCK_SIZE : vector_segment_size; + allocation_size += segment_size; auto new_segment = ColumnSegment::CreateTransientSegment(GetDatabase(), type, start_row, segment_size); data.AppendSegment(l, std::move(new_segment)); } diff --git a/src/storage/table/column_data_checkpointer.cpp b/src/storage/table/column_data_checkpointer.cpp index 8c943830812e..9ecfe43eb7de 100644 --- a/src/storage/table/column_data_checkpointer.cpp +++ b/src/storage/table/column_data_checkpointer.cpp @@ -147,6 +147,9 @@ unique_ptr ColumnDataCheckpointer::DetectBestCompressionMethod(idx if (!compression_functions[i]) { continue; } + if (!analyze_states[i]) { + continue; + } //! Check if the method type is the forced method (if forced is used) bool forced_method_found = compression_functions[i]->type == forced_method; auto score = compression_functions[i]->final_analyze(*analyze_states[i]); @@ -229,7 +232,7 @@ void ColumnDataCheckpointer::WritePersistentSegments() { // set up the data pointer directly using the data from the persistent segment DataPointer pointer(segment->stats.statistics.Copy()); pointer.block_pointer.block_id = segment->GetBlockId(); - pointer.block_pointer.offset = segment->GetBlockOffset(); + pointer.block_pointer.offset = NumericCast(segment->GetBlockOffset()); pointer.row_start = segment->start; pointer.tuple_count = segment->count; pointer.compression_type = segment->function.get().type; diff --git a/src/storage/table/column_segment.cpp b/src/storage/table/column_segment.cpp index c0f67a0ca8e6..175791b612a4 100644 --- a/src/storage/table/column_segment.cpp +++ b/src/storage/table/column_segment.cpp @@ -244,12 +244,15 @@ void ColumnSegment::CommitDropSegment() { // Filter Selection //===--------------------------------------------------------------------===// template -static idx_t TemplatedFilterSelection(T *vec, T predicate, SelectionVector &sel, idx_t approved_tuple_count, - ValidityMask &mask, SelectionVector &result_sel) { +static idx_t TemplatedFilterSelection(UnifiedVectorFormat &vdata, T predicate, SelectionVector &sel, + idx_t approved_tuple_count, SelectionVector &result_sel) { + auto &mask = vdata.validity; + auto vec = UnifiedVectorFormat::GetData(vdata); idx_t result_count = 0; for (idx_t i = 0; i < approved_tuple_count; i++) { auto idx = sel.get_index(i); - if ((!HAS_NULL || mask.RowIsValid(idx)) && OP::Operation(vec[idx], predicate)) { + auto vector_idx = vdata.sel->get_index(idx); + if ((!HAS_NULL || mask.RowIsValid(vector_idx)) && OP::Operation(vec[vector_idx], predicate)) { result_sel.set_index(result_count++, idx); } } @@ -257,68 +260,69 @@ static idx_t TemplatedFilterSelection(T *vec, T predicate, SelectionVector &sel, } template -static void FilterSelectionSwitch(T *vec, T predicate, SelectionVector &sel, idx_t &approved_tuple_count, - ExpressionType comparison_type, ValidityMask &mask) { +static void FilterSelectionSwitch(UnifiedVectorFormat &vdata, T predicate, SelectionVector &sel, + idx_t &approved_tuple_count, ExpressionType comparison_type) { SelectionVector new_sel(approved_tuple_count); + auto &mask = vdata.validity; // the inplace loops take the result as the last parameter switch (comparison_type) { case ExpressionType::COMPARE_EQUAL: { if (mask.AllValid()) { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } else { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } break; } case ExpressionType::COMPARE_NOTEQUAL: { if (mask.AllValid()) { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } else { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } break; } case ExpressionType::COMPARE_LESSTHAN: { if (mask.AllValid()) { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } else { approved_tuple_count = - TemplatedFilterSelection(vec, predicate, sel, approved_tuple_count, mask, new_sel); + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } break; } case ExpressionType::COMPARE_GREATERTHAN: { if (mask.AllValid()) { - approved_tuple_count = TemplatedFilterSelection(vec, predicate, sel, - approved_tuple_count, mask, new_sel); + approved_tuple_count = + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } else { - approved_tuple_count = TemplatedFilterSelection(vec, predicate, sel, - approved_tuple_count, mask, new_sel); + approved_tuple_count = + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } break; } case ExpressionType::COMPARE_LESSTHANOREQUALTO: { if (mask.AllValid()) { - approved_tuple_count = TemplatedFilterSelection( - vec, predicate, sel, approved_tuple_count, mask, new_sel); + approved_tuple_count = TemplatedFilterSelection(vdata, predicate, sel, + approved_tuple_count, new_sel); } else { - approved_tuple_count = TemplatedFilterSelection( - vec, predicate, sel, approved_tuple_count, mask, new_sel); + approved_tuple_count = + TemplatedFilterSelection(vdata, predicate, sel, approved_tuple_count, new_sel); } break; } case ExpressionType::COMPARE_GREATERTHANOREQUALTO: { if (mask.AllValid()) { - approved_tuple_count = TemplatedFilterSelection( - vec, predicate, sel, approved_tuple_count, mask, new_sel); + approved_tuple_count = TemplatedFilterSelection(vdata, predicate, sel, + approved_tuple_count, new_sel); } else { - approved_tuple_count = TemplatedFilterSelection( - vec, predicate, sel, approved_tuple_count, mask, new_sel); + approved_tuple_count = TemplatedFilterSelection(vdata, predicate, sel, + approved_tuple_count, new_sel); } break; } @@ -329,7 +333,8 @@ static void FilterSelectionSwitch(T *vec, T predicate, SelectionVector &sel, idx } template -static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_count, ValidityMask &mask) { +static idx_t TemplatedNullSelection(UnifiedVectorFormat &vdata, SelectionVector &sel, idx_t &approved_tuple_count) { + auto &mask = vdata.validity; if (mask.AllValid()) { // no NULL values if (IS_NULL) { @@ -343,7 +348,8 @@ static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_ idx_t result_count = 0; for (idx_t i = 0; i < approved_tuple_count; i++) { auto idx = sel.get_index(i); - if (mask.RowIsValid(idx) != IS_NULL) { + auto vector_idx = vdata.sel->get_index(idx); + if (mask.RowIsValid(vector_idx) != IS_NULL) { result_sel.set_index(result_count++, idx); } } @@ -353,8 +359,8 @@ static idx_t TemplatedNullSelection(SelectionVector &sel, idx_t &approved_tuple_ } } -idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const TableFilter &filter, - idx_t &approved_tuple_count, ValidityMask &mask) { +idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &vector, UnifiedVectorFormat &vdata, + const TableFilter &filter, idx_t scan_count, idx_t &approved_tuple_count) { switch (filter.filter_type) { case TableFilterType::CONJUNCTION_OR: { // similar to the CONJUNCTION_AND, but we need to take care of the SelectionVectors (OR all of them) @@ -365,7 +371,7 @@ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const SelectionVector temp_sel; temp_sel.Initialize(sel); idx_t temp_tuple_count = approved_tuple_count; - idx_t temp_count = FilterSelection(temp_sel, result, *child_filter, temp_tuple_count, mask); + idx_t temp_count = FilterSelection(temp_sel, vector, vdata, *child_filter, scan_count, temp_tuple_count); // tuples passed, move them into the actual result vector for (idx_t i = 0; i < temp_count; i++) { auto new_idx = temp_sel.get_index(i); @@ -388,127 +394,111 @@ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const case TableFilterType::CONJUNCTION_AND: { auto &conjunction_and = filter.Cast(); for (auto &child_filter : conjunction_and.child_filters) { - FilterSelection(sel, result, *child_filter, approved_tuple_count, mask); + FilterSelection(sel, vector, vdata, *child_filter, scan_count, approved_tuple_count); } return approved_tuple_count; } case TableFilterType::CONSTANT_COMPARISON: { auto &constant_filter = filter.Cast(); // the inplace loops take the result as the last parameter - switch (result.GetType().InternalType()) { + switch (vector.GetType().InternalType()) { case PhysicalType::UINT8: { - auto result_flat = FlatVector::GetData(result); auto predicate = UTinyIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::UINT16: { - auto result_flat = FlatVector::GetData(result); auto predicate = USmallIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::UINT32: { - auto result_flat = FlatVector::GetData(result); auto predicate = UIntegerValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::UINT64: { - auto result_flat = FlatVector::GetData(result); auto predicate = UBigIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::INT8: { - auto result_flat = FlatVector::GetData(result); auto predicate = TinyIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type); break; } case PhysicalType::INT16: { - auto result_flat = FlatVector::GetData(result); auto predicate = SmallIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::INT32: { - auto result_flat = FlatVector::GetData(result); auto predicate = IntegerValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::INT64: { - auto result_flat = FlatVector::GetData(result); auto predicate = BigIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::INT128: { - auto result_flat = FlatVector::GetData(result); auto predicate = HugeIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::UINT128: { - auto result_flat = FlatVector::GetData(result); auto predicate = UhugeIntValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::FLOAT: { - auto result_flat = FlatVector::GetData(result); auto predicate = FloatValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type); break; } case PhysicalType::DOUBLE: { - auto result_flat = FlatVector::GetData(result); auto predicate = DoubleValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type); break; } case PhysicalType::VARCHAR: { - auto result_flat = FlatVector::GetData(result); auto predicate = string_t(StringValue::Get(constant_filter.constant)); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, + constant_filter.comparison_type); break; } case PhysicalType::BOOL: { - auto result_flat = FlatVector::GetData(result); auto predicate = BooleanValue::Get(constant_filter.constant); - FilterSelectionSwitch(result_flat, predicate, sel, approved_tuple_count, - constant_filter.comparison_type, mask); + FilterSelectionSwitch(vdata, predicate, sel, approved_tuple_count, constant_filter.comparison_type); break; } default: - throw InvalidTypeException(result.GetType(), "Invalid type for filter pushed down to table comparison"); + throw InvalidTypeException(vector.GetType(), "Invalid type for filter pushed down to table comparison"); } return approved_tuple_count; } case TableFilterType::IS_NULL: - return TemplatedNullSelection(sel, approved_tuple_count, mask); + return TemplatedNullSelection(vdata, sel, approved_tuple_count); case TableFilterType::IS_NOT_NULL: - return TemplatedNullSelection(sel, approved_tuple_count, mask); + return TemplatedNullSelection(vdata, sel, approved_tuple_count); case TableFilterType::STRUCT_EXTRACT: { auto &struct_filter = filter.Cast(); // Apply the filter on the child vector - auto &child_vec = StructVector::GetEntries(result)[struct_filter.child_idx]; - auto &child_mask = FlatVector::Validity(*child_vec); - return FilterSelection(sel, *child_vec, *struct_filter.child_filter, approved_tuple_count, child_mask); + auto &child_vec = StructVector::GetEntries(vector)[struct_filter.child_idx]; + UnifiedVectorFormat child_data; + child_vec->ToUnifiedFormat(scan_count, child_data); + return FilterSelection(sel, *child_vec, child_data, *struct_filter.child_filter, scan_count, + approved_tuple_count); } default: throw InternalException("FIXME: unsupported type for filter selection"); diff --git a/src/storage/table/list_column_data.cpp b/src/storage/table/list_column_data.cpp index b805497a596c..418a4bd4644e 100644 --- a/src/storage/table/list_column_data.cpp +++ b/src/storage/table/list_column_data.cpp @@ -303,6 +303,7 @@ void ListColumnData::FetchRow(TransactionData transaction, ColumnFetchState &sta } void ListColumnData::CommitDropColumn() { + ColumnData::CommitDropColumn(); validity.CommitDropColumn(); child_column->CommitDropColumn(); } diff --git a/src/storage/table/row_group.cpp b/src/storage/table/row_group.cpp index b4572ebfb2fe..67e17737211a 100644 --- a/src/storage/table/row_group.cpp +++ b/src/storage/table/row_group.cpp @@ -26,12 +26,12 @@ namespace duckdb { RowGroup::RowGroup(RowGroupCollection &collection, idx_t start, idx_t count) - : SegmentBase(start, count), collection(collection) { + : SegmentBase(start, count), collection(collection), allocation_size(0) { Verify(); } RowGroup::RowGroup(RowGroupCollection &collection, RowGroupPointer &&pointer) - : SegmentBase(pointer.row_start, pointer.tuple_count), collection(collection) { + : SegmentBase(pointer.row_start, pointer.tuple_count), collection(collection), allocation_size(0) { // deserialize the columns if (pointer.data_pointers.size() != collection.GetTypes().size()) { throw IOException("Row group column count is unaligned with table column count. Corrupt file?"); @@ -184,12 +184,17 @@ bool RowGroup::InitializeScanWithOffset(CollectionScanState &state, idx_t vector state.vector_index = vector_offset; state.max_row_group_row = this->start > state.max_row ? 0 : MinValue(this->count, state.max_row - this->start); + auto row_number = start + vector_offset * STANDARD_VECTOR_SIZE; + if (state.max_row_group_row == 0) { + // exceeded row groups to scan + return false; + } D_ASSERT(state.column_scans); for (idx_t i = 0; i < column_ids.size(); i++) { const auto &column = column_ids[i]; if (column != COLUMN_IDENTIFIER_ROW_ID) { auto &column_data = GetColumn(column); - column_data.InitializeScanWithOffset(state.column_scans[i], start + vector_offset * STANDARD_VECTOR_SIZE); + column_data.InitializeScanWithOffset(state.column_scans[i], row_number); state.column_scans[i].scan_options = &state.GetOptions(); } else { state.column_scans[i].current = nullptr; @@ -660,16 +665,19 @@ void RowGroup::FetchRow(TransactionData transaction, ColumnFetchState &state, co row_t row_id, DataChunk &result, idx_t result_idx) { for (idx_t col_idx = 0; col_idx < column_ids.size(); col_idx++) { auto column = column_ids[col_idx]; + auto &result_vector = result.data[col_idx]; + D_ASSERT(result_vector.GetVectorType() == VectorType::FLAT_VECTOR); + D_ASSERT(!FlatVector::IsNull(result_vector, result_idx)); if (column == COLUMN_IDENTIFIER_ROW_ID) { // row id column: fill in the row ids - D_ASSERT(result.data[col_idx].GetType().InternalType() == PhysicalType::INT64); - result.data[col_idx].SetVectorType(VectorType::FLAT_VECTOR); - auto data = FlatVector::GetData(result.data[col_idx]); + D_ASSERT(result_vector.GetType().InternalType() == PhysicalType::INT64); + result_vector.SetVectorType(VectorType::FLAT_VECTOR); + auto data = FlatVector::GetData(result_vector); data[result_idx] = row_id; } else { // regular column: fetch data from the base column auto &col_data = GetColumn(column); - col_data.FetchRow(transaction, state, row_id, result.data[col_idx], result_idx); + col_data.FetchRow(transaction, state, row_id, result_vector, result_idx); } } } @@ -717,7 +725,9 @@ void RowGroup::Append(RowGroupAppendState &state, DataChunk &chunk, idx_t append D_ASSERT(chunk.ColumnCount() == GetColumnCount()); for (idx_t i = 0; i < GetColumnCount(); i++) { auto &col_data = GetColumn(i); + auto prev_allocation_size = col_data.GetAllocationSize(); col_data.Append(state.states[i], chunk.data[i], append_count); + allocation_size += col_data.GetAllocationSize() - prev_allocation_size; } state.offset_in_row_group += append_count; } diff --git a/src/storage/table/row_group_collection.cpp b/src/storage/table/row_group_collection.cpp index e730fbb228a8..8c8a2a3fd785 100644 --- a/src/storage/table/row_group_collection.cpp +++ b/src/storage/table/row_group_collection.cpp @@ -54,7 +54,7 @@ unique_ptr RowGroupSegmentTree::LoadSegment() { RowGroupCollection::RowGroupCollection(shared_ptr info_p, BlockManager &block_manager, vector types_p, idx_t row_start_p, idx_t total_rows_p) : block_manager(block_manager), total_rows(total_rows_p), info(std::move(info_p)), types(std::move(types_p)), - row_start(row_start_p) { + row_start(row_start_p), allocation_size(0) { row_groups = make_shared(*this); } @@ -288,11 +288,10 @@ void RowGroupCollection::Fetch(TransactionData transaction, DataChunk &result, c // Append //===--------------------------------------------------------------------===// TableAppendState::TableAppendState() - : row_group_append_state(*this), total_append_count(0), start_row_group(nullptr), transaction(0, 0), remaining(0) { + : row_group_append_state(*this), total_append_count(0), start_row_group(nullptr), transaction(0, 0) { } TableAppendState::~TableAppendState() { - D_ASSERT(Exception::UncaughtException() || remaining == 0); } bool RowGroupCollection::IsEmpty() const { @@ -304,7 +303,7 @@ bool RowGroupCollection::IsEmpty(SegmentLock &l) const { return row_groups->IsEmpty(l); } -void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppendState &state, idx_t append_count) { +void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppendState &state) { state.row_start = total_rows; state.current_row = state.row_start; state.total_append_count = 0; @@ -318,17 +317,12 @@ void RowGroupCollection::InitializeAppend(TransactionData transaction, TableAppe state.start_row_group = row_groups->GetLastSegment(l); D_ASSERT(this->row_start + total_rows == state.start_row_group->start + state.start_row_group->count); state.start_row_group->InitializeAppend(state.row_group_append_state); - state.remaining = append_count; state.transaction = transaction; - if (state.remaining > 0) { - state.start_row_group->AppendVersionInfo(transaction, state.remaining); - total_rows += state.remaining; - } } void RowGroupCollection::InitializeAppend(TableAppendState &state) { TransactionData tdata(0, 0); - InitializeAppend(tdata, state, 0); + InitializeAppend(tdata, state); } bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) { @@ -336,16 +330,18 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) { chunk.Verify(); bool new_row_group = false; - idx_t append_count = chunk.size(); + idx_t total_append_count = chunk.size(); idx_t remaining = chunk.size(); - state.total_append_count += append_count; + state.total_append_count += total_append_count; while (true) { auto current_row_group = state.row_group_append_state.row_group; // check how much we can fit into the current row_group idx_t append_count = MinValue(remaining, Storage::ROW_GROUP_SIZE - state.row_group_append_state.offset_in_row_group); if (append_count > 0) { + auto previous_allocation_size = current_row_group->GetAllocationSize(); current_row_group->Append(state.row_group_append_state, chunk, append_count); + allocation_size += current_row_group->GetAllocationSize() - previous_allocation_size; // merge the stats auto stats_lock = stats.GetLock(); for (idx_t i = 0; i < types.size(); i++) { @@ -353,9 +349,6 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) { } } remaining -= append_count; - if (state.remaining > 0) { - state.remaining -= append_count; - } if (remaining > 0) { // we expect max 1 iteration of this loop (i.e. a single chunk should never overflow more than one // row_group) @@ -373,15 +366,12 @@ bool RowGroupCollection::Append(DataChunk &chunk, TableAppendState &state) { // set up the append state for this row_group auto last_row_group = row_groups->GetLastSegment(l); last_row_group->InitializeAppend(state.row_group_append_state); - if (state.remaining > 0) { - last_row_group->AppendVersionInfo(state.transaction, state.remaining); - } continue; } else { break; } } - state.current_row += append_count; + state.current_row += row_t(total_append_count); auto stats_lock = stats.GetLock(); for (idx_t col_idx = 0; col_idx < types.size(); col_idx++) { stats.GetStats(col_idx).UpdateDistinctStatistics(chunk.data[col_idx], chunk.size()); @@ -776,11 +766,14 @@ class VacuumTask : public BaseCheckpointTask { scan_state.Initialize(column_ids); scan_state.table_state.Initialize(types); scan_state.table_state.max_row = idx_t(-1); - idx_t next_idx = segment_idx + merge_count; - for (idx_t c_idx = segment_idx; c_idx < next_idx; c_idx++) { + idx_t merged_groups = 0; + idx_t total_row_groups = vacuum_state.row_group_counts.size(); + for (idx_t c_idx = segment_idx; merged_groups < merge_count && c_idx < total_row_groups; c_idx++) { if (vacuum_state.row_group_counts[c_idx] == 0) { continue; } + merged_groups++; + auto ¤t_row_group = *checkpoint_state.segments[c_idx].node; current_row_group.InitializeScan(scan_state.table_state); diff --git a/src/storage/table/update_segment.cpp b/src/storage/table/update_segment.cpp index 1e1039961867..885241592e98 100644 --- a/src/storage/table/update_segment.cpp +++ b/src/storage/table/update_segment.cpp @@ -574,12 +574,12 @@ void UpdateSegment::InitializeUpdateInfo(UpdateInfo &info, row_t *ids, const Sel info.next = nullptr; // set up the tuple ids - info.N = count; + info.N = UnsafeNumericCast(count); for (idx_t i = 0; i < count; i++) { auto idx = sel.get_index(i); auto id = ids[idx]; D_ASSERT(idx_t(id) >= vector_offset && idx_t(id) < vector_offset + STANDARD_VECTOR_SIZE); - info.tuples[i] = id - vector_offset; + info.tuples[i] = NumericCast(id - vector_offset); }; } @@ -804,7 +804,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U result_values[result_offset] = UpdateSelectElement::Operation( base_info->segment, OP::template Extract(base_table_data, update_id)); } - result_ids[result_offset++] = update_id; + result_ids[result_offset++] = UnsafeNumericCast(update_id); } // write any remaining entries from the old updates while (update_info_offset < update_info->N) { @@ -813,7 +813,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U update_info_offset++; } // now copy them back - update_info->N = result_offset; + update_info->N = UnsafeNumericCast(result_offset); memcpy(update_info_data, result_values, result_offset * sizeof(T)); memcpy(update_info->tuples, result_ids, result_offset * sizeof(sel_t)); @@ -821,12 +821,12 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U result_offset = 0; auto pick_new = [&](idx_t id, idx_t aidx, idx_t count) { result_values[result_offset] = OP::template Extract(update_vector_data, aidx); - result_ids[result_offset] = id; + result_ids[result_offset] = UnsafeNumericCast(id); result_offset++; }; auto pick_old = [&](idx_t id, idx_t bidx, idx_t count) { result_values[result_offset] = base_info_data[bidx]; - result_ids[result_offset] = id; + result_ids[result_offset] = UnsafeNumericCast(id); result_offset++; }; // now we perform a merge of the new ids with the old ids @@ -835,7 +835,7 @@ static void MergeUpdateLoopInternal(UpdateInfo *base_info, V *base_table_data, U }; MergeLoop(ids, base_info->tuples, count, base_info->N, base_id, merge, pick_new, pick_old, sel); - base_info->N = result_offset; + base_info->N = UnsafeNumericCast(result_offset); memcpy(base_info_data, result_values, result_offset * sizeof(T)); memcpy(base_info->tuples, result_ids, result_offset * sizeof(sel_t)); } diff --git a/src/storage/temporary_file_manager.cpp b/src/storage/temporary_file_manager.cpp new file mode 100644 index 000000000000..34ec0ca5dce0 --- /dev/null +++ b/src/storage/temporary_file_manager.cpp @@ -0,0 +1,334 @@ +#include "duckdb/storage/temporary_file_manager.hpp" +#include "duckdb/storage/buffer/temporary_file_information.hpp" +#include "duckdb/storage/standard_buffer_manager.hpp" + +namespace duckdb { + +//===--------------------------------------------------------------------===// +// BlockIndexManager +//===--------------------------------------------------------------------===// + +BlockIndexManager::BlockIndexManager() : max_index(0) { +} + +idx_t BlockIndexManager::GetNewBlockIndex() { + auto index = GetNewBlockIndexInternal(); + indexes_in_use.insert(index); + return index; +} + +bool BlockIndexManager::RemoveIndex(idx_t index) { + // remove this block from the set of blocks + auto entry = indexes_in_use.find(index); + if (entry == indexes_in_use.end()) { + throw InternalException("RemoveIndex - index %llu not found in indexes_in_use", index); + } + indexes_in_use.erase(entry); + free_indexes.insert(index); + // check if we can truncate the file + + // get the max_index in use right now + auto max_index_in_use = indexes_in_use.empty() ? 0 : *indexes_in_use.rbegin(); + if (max_index_in_use < max_index) { + // max index in use is lower than the max_index + // reduce the max_index + max_index = indexes_in_use.empty() ? 0 : max_index_in_use + 1; + // we can remove any free_indexes that are larger than the current max_index + while (!free_indexes.empty()) { + auto max_entry = *free_indexes.rbegin(); + if (max_entry < max_index) { + break; + } + free_indexes.erase(max_entry); + } + return true; + } + return false; +} + +idx_t BlockIndexManager::GetMaxIndex() { + return max_index; +} + +bool BlockIndexManager::HasFreeBlocks() { + return !free_indexes.empty(); +} + +idx_t BlockIndexManager::GetNewBlockIndexInternal() { + if (free_indexes.empty()) { + return max_index++; + } + auto entry = free_indexes.begin(); + auto index = *entry; + free_indexes.erase(entry); + return index; +} + +//===--------------------------------------------------------------------===// +// TemporaryFileHandle +//===--------------------------------------------------------------------===// + +TemporaryFileHandle::TemporaryFileHandle(idx_t temp_file_count, DatabaseInstance &db, const string &temp_directory, + idx_t index) + : max_allowed_index((1 << temp_file_count) * MAX_ALLOWED_INDEX_BASE), db(db), file_index(index), + path(FileSystem::GetFileSystem(db).JoinPath(temp_directory, "duckdb_temp_storage-" + to_string(index) + ".tmp")) { +} + +TemporaryFileHandle::TemporaryFileLock::TemporaryFileLock(mutex &mutex) : lock(mutex) { +} + +TemporaryFileIndex TemporaryFileHandle::TryGetBlockIndex() { + TemporaryFileLock lock(file_lock); + if (index_manager.GetMaxIndex() >= max_allowed_index && index_manager.HasFreeBlocks()) { + // file is at capacity + return TemporaryFileIndex(); + } + // open the file handle if it does not yet exist + CreateFileIfNotExists(lock); + // fetch a new block index to write to + auto block_index = index_manager.GetNewBlockIndex(); + return TemporaryFileIndex(file_index, block_index); +} + +void TemporaryFileHandle::WriteTemporaryFile(FileBuffer &buffer, TemporaryFileIndex index) { + D_ASSERT(buffer.size == Storage::BLOCK_SIZE); + buffer.Write(*handle, GetPositionInFile(index.block_index)); +} + +unique_ptr TemporaryFileHandle::ReadTemporaryBuffer(idx_t block_index, + unique_ptr reusable_buffer) { + return StandardBufferManager::ReadTemporaryBufferInternal(BufferManager::GetBufferManager(db), *handle, + GetPositionInFile(block_index), Storage::BLOCK_SIZE, + std::move(reusable_buffer)); +} + +void TemporaryFileHandle::EraseBlockIndex(block_id_t block_index) { + // remove the block (and potentially truncate the temp file) + TemporaryFileLock lock(file_lock); + D_ASSERT(handle); + RemoveTempBlockIndex(lock, block_index); +} + +bool TemporaryFileHandle::DeleteIfEmpty() { + TemporaryFileLock lock(file_lock); + if (index_manager.GetMaxIndex() > 0) { + // there are still blocks in this file + return false; + } + // the file is empty: delete it + handle.reset(); + auto &fs = FileSystem::GetFileSystem(db); + fs.RemoveFile(path); + return true; +} + +TemporaryFileInformation TemporaryFileHandle::GetTemporaryFile() { + TemporaryFileLock lock(file_lock); + TemporaryFileInformation info; + info.path = path; + info.size = GetPositionInFile(index_manager.GetMaxIndex()); + return info; +} + +void TemporaryFileHandle::CreateFileIfNotExists(TemporaryFileLock &) { + if (handle) { + return; + } + auto &fs = FileSystem::GetFileSystem(db); + uint8_t open_flags = FileFlags::FILE_FLAGS_READ | FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE; + handle = fs.OpenFile(path, open_flags); +} + +void TemporaryFileHandle::RemoveTempBlockIndex(TemporaryFileLock &, idx_t index) { + // remove the block index from the index manager + if (index_manager.RemoveIndex(index)) { + // the max_index that is currently in use has decreased + // as a result we can truncate the file +#ifndef WIN32 // this ended up causing issues when sorting + auto max_index = index_manager.GetMaxIndex(); + auto &fs = FileSystem::GetFileSystem(db); + fs.Truncate(*handle, GetPositionInFile(max_index + 1)); +#endif + } +} + +idx_t TemporaryFileHandle::GetPositionInFile(idx_t index) { + return index * Storage::BLOCK_ALLOC_SIZE; +} + +//===--------------------------------------------------------------------===// +// TemporaryDirectoryHandle +//===--------------------------------------------------------------------===// + +TemporaryDirectoryHandle::TemporaryDirectoryHandle(DatabaseInstance &db, string path_p) + : db(db), temp_directory(std::move(path_p)), temp_file(make_uniq(db, temp_directory)) { + auto &fs = FileSystem::GetFileSystem(db); + if (!temp_directory.empty()) { + if (!fs.DirectoryExists(temp_directory)) { + fs.CreateDirectory(temp_directory); + created_directory = true; + } + } +} + +TemporaryDirectoryHandle::~TemporaryDirectoryHandle() { + // first release any temporary files + temp_file.reset(); + // then delete the temporary file directory + auto &fs = FileSystem::GetFileSystem(db); + if (!temp_directory.empty()) { + bool delete_directory = created_directory; + vector files_to_delete; + if (!created_directory) { + bool deleted_everything = true; + fs.ListFiles(temp_directory, [&](const string &path, bool isdir) { + if (isdir) { + deleted_everything = false; + return; + } + if (!StringUtil::StartsWith(path, "duckdb_temp_")) { + deleted_everything = false; + return; + } + files_to_delete.push_back(path); + }); + } + if (delete_directory) { + // we want to remove all files in the directory + fs.RemoveDirectory(temp_directory); + } else { + for (auto &file : files_to_delete) { + fs.RemoveFile(fs.JoinPath(temp_directory, file)); + } + } + } +} + +TemporaryFileManager &TemporaryDirectoryHandle::GetTempFile() { + return *temp_file; +} + +//===--------------------------------------------------------------------===// +// TemporaryFileIndex +//===--------------------------------------------------------------------===// + +TemporaryFileIndex::TemporaryFileIndex(idx_t file_index, idx_t block_index) + : file_index(file_index), block_index(block_index) { +} + +bool TemporaryFileIndex::IsValid() const { + return block_index != DConstants::INVALID_INDEX; +} + +//===--------------------------------------------------------------------===// +// TemporaryFileManager +//===--------------------------------------------------------------------===// + +TemporaryFileManager::TemporaryFileManager(DatabaseInstance &db, const string &temp_directory_p) + : db(db), temp_directory(temp_directory_p) { +} + +TemporaryFileManager::TemporaryManagerLock::TemporaryManagerLock(mutex &mutex) : lock(mutex) { +} + +void TemporaryFileManager::WriteTemporaryBuffer(block_id_t block_id, FileBuffer &buffer) { + D_ASSERT(buffer.size == Storage::BLOCK_SIZE); + TemporaryFileIndex index; + TemporaryFileHandle *handle = nullptr; + + { + TemporaryManagerLock lock(manager_lock); + // first check if we can write to an open existing file + for (auto &entry : files) { + auto &temp_file = entry.second; + index = temp_file->TryGetBlockIndex(); + if (index.IsValid()) { + handle = entry.second.get(); + break; + } + } + if (!handle) { + // no existing handle to write to; we need to create & open a new file + auto new_file_index = index_manager.GetNewBlockIndex(); + auto new_file = make_uniq(files.size(), db, temp_directory, new_file_index); + handle = new_file.get(); + files[new_file_index] = std::move(new_file); + + index = handle->TryGetBlockIndex(); + } + D_ASSERT(used_blocks.find(block_id) == used_blocks.end()); + used_blocks[block_id] = index; + } + D_ASSERT(handle); + D_ASSERT(index.IsValid()); + handle->WriteTemporaryFile(buffer, index); +} + +bool TemporaryFileManager::HasTemporaryBuffer(block_id_t block_id) { + lock_guard lock(manager_lock); + return used_blocks.find(block_id) != used_blocks.end(); +} + +unique_ptr TemporaryFileManager::ReadTemporaryBuffer(block_id_t id, + unique_ptr reusable_buffer) { + TemporaryFileIndex index; + TemporaryFileHandle *handle; + { + TemporaryManagerLock lock(manager_lock); + index = GetTempBlockIndex(lock, id); + handle = GetFileHandle(lock, index.file_index); + } + auto buffer = handle->ReadTemporaryBuffer(index.block_index, std::move(reusable_buffer)); + { + // remove the block (and potentially erase the temp file) + TemporaryManagerLock lock(manager_lock); + EraseUsedBlock(lock, id, handle, index); + } + return buffer; +} + +void TemporaryFileManager::DeleteTemporaryBuffer(block_id_t id) { + TemporaryManagerLock lock(manager_lock); + auto index = GetTempBlockIndex(lock, id); + auto handle = GetFileHandle(lock, index.file_index); + EraseUsedBlock(lock, id, handle, index); +} + +vector TemporaryFileManager::GetTemporaryFiles() { + lock_guard lock(manager_lock); + vector result; + for (auto &file : files) { + result.push_back(file.second->GetTemporaryFile()); + } + return result; +} + +void TemporaryFileManager::EraseUsedBlock(TemporaryManagerLock &lock, block_id_t id, TemporaryFileHandle *handle, + TemporaryFileIndex index) { + auto entry = used_blocks.find(id); + if (entry == used_blocks.end()) { + throw InternalException("EraseUsedBlock - Block %llu not found in used blocks", id); + } + used_blocks.erase(entry); + handle->EraseBlockIndex(index.block_index); + if (handle->DeleteIfEmpty()) { + EraseFileHandle(lock, index.file_index); + } +} + +// FIXME: returning a raw pointer??? +TemporaryFileHandle *TemporaryFileManager::GetFileHandle(TemporaryManagerLock &, idx_t index) { + return files[index].get(); +} + +TemporaryFileIndex TemporaryFileManager::GetTempBlockIndex(TemporaryManagerLock &, block_id_t id) { + D_ASSERT(used_blocks.find(id) != used_blocks.end()); + return used_blocks[id]; +} + +void TemporaryFileManager::EraseFileHandle(TemporaryManagerLock &, idx_t file_index) { + files.erase(file_index); + index_manager.RemoveIndex(file_index); +} + +} // namespace duckdb diff --git a/src/storage/write_ahead_log.cpp b/src/storage/write_ahead_log.cpp index a90b9dedf404..5dac22c509c1 100644 --- a/src/storage/write_ahead_log.cpp +++ b/src/storage/write_ahead_log.cpp @@ -22,8 +22,9 @@ const uint64_t WAL_VERSION_NUMBER = 2; WriteAheadLog::WriteAheadLog(AttachedDatabase &database, const string &path) : skip_writing(false), database(database) { wal_path = path; writer = make_uniq(FileSystem::Get(database), path.c_str(), - FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE | - FileFlags::FILE_FLAGS_APPEND); + NumericCast(FileFlags::FILE_FLAGS_WRITE | + FileFlags::FILE_FLAGS_FILE_CREATE | + FileFlags::FILE_FLAGS_APPEND)); } WriteAheadLog::~WriteAheadLog() { diff --git a/src/transaction/commit_state.cpp b/src/transaction/commit_state.cpp index 37756f1a9252..46cd9e49ac5a 100644 --- a/src/transaction/commit_state.cpp +++ b/src/transaction/commit_state.cpp @@ -82,7 +82,7 @@ void CommitState::WriteCatalogEntry(CatalogEntry &entry, data_ptr_t dataptr) { (void)column_name; break; default: - throw InternalException("Don't know how to drop this type!"); + throw InternalException("Don't know how to alter this type!"); } auto &alter_info = parse_info->Cast(); @@ -116,7 +116,7 @@ void CommitState::WriteCatalogEntry(CatalogEntry &entry, data_ptr_t dataptr) { log->WriteCreateTableMacro(parent.Cast()); break; default: - throw InternalException("Don't know how to drop this type!"); + throw InternalException("Don't know how to create this type!"); } } break; @@ -284,6 +284,8 @@ void CommitState::CommitEntry(UndoFlags type, data_ptr_t data) { if (!StringUtil::CIEquals(catalog_entry->name, catalog_entry->Parent().name)) { catalog_entry->set->UpdateTimestamp(*catalog_entry, commit_id); } + // modify catalog on commit + duck_catalog.ModifyCatalog(); if (HAS_LOG) { // push the catalog update to the WAL diff --git a/src/transaction/duck_transaction_manager.cpp b/src/transaction/duck_transaction_manager.cpp index e55a726535c4..008604c3502c 100644 --- a/src/transaction/duck_transaction_manager.cpp +++ b/src/transaction/duck_transaction_manager.cpp @@ -109,7 +109,7 @@ void DuckTransactionManager::Checkpoint(ClientContext &context, bool force) { throw TransactionException("Cannot CHECKPOINT: the current transaction has transaction local changes"); } if (!force) { - if (!CanCheckpoint(current)) { + if (!CanCheckpoint(current).can_checkpoint) { throw TransactionException("Cannot CHECKPOINT: there are other transactions. Use FORCE CHECKPOINT to abort " "the other transactions and force a checkpoint"); } @@ -124,7 +124,7 @@ void DuckTransactionManager::Checkpoint(ClientContext &context, bool force) { connection_manager.LockClients(client_locks, context); lock.lock(); - if (!CanCheckpoint(current)) { + if (!CanCheckpoint(current).can_checkpoint) { for (size_t i = 0; i < active_transactions.size(); i++) { auto &transaction = active_transactions[i]; // rollback the transaction @@ -142,29 +142,41 @@ void DuckTransactionManager::Checkpoint(ClientContext &context, bool force) { } i--; } - D_ASSERT(CanCheckpoint(nullptr)); + D_ASSERT(CanCheckpoint(nullptr).can_checkpoint); } } storage_manager.CreateCheckpoint(); } -bool DuckTransactionManager::CanCheckpoint(optional_ptr current) { +DuckTransactionManager::CheckpointDecision +DuckTransactionManager::CanCheckpoint(optional_ptr current) { if (db.IsSystem()) { - return false; + return {false, "system transaction"}; } auto &storage_manager = db.GetStorageManager(); if (storage_manager.InMemory()) { - return false; + return {false, "in memory db"}; } - if (!recently_committed_transactions.empty() || !old_transactions.empty()) { - return false; + auto trans_to_string = [](const unique_ptr &t) { + return std::to_string(t->transaction_id); + }; + if (!recently_committed_transactions.empty()) { + return {false, "recently committed transactions: [" + + StringUtil::Join(recently_committed_transactions, recently_committed_transactions.size(), + ",", trans_to_string) + + "]"}; } + if (!old_transactions.empty()) { + return {false, "old transactions: [" + + StringUtil::Join(old_transactions, old_transactions.size(), ",", trans_to_string) + "]"}; + } + for (auto &transaction : active_transactions) { if (transaction.get() != current.get()) { - return false; + return {false, "current transaction [" + std::to_string(current->transaction_id) + "] isn't active"}; } } - return true; + return {true, ""}; } ErrorData DuckTransactionManager::CommitTransaction(ClientContext &context, Transaction &transaction_p) { @@ -173,25 +185,28 @@ ErrorData DuckTransactionManager::CommitTransaction(ClientContext &context, Tran auto lock = make_uniq>(transaction_lock); CheckpointLock checkpoint_lock(*this); // check if we can checkpoint - bool checkpoint = thread_is_checkpointing ? false : CanCheckpoint(&transaction); - if (checkpoint) { + auto checkpoint_decision = thread_is_checkpointing ? CheckpointDecision {false, "another thread is checkpointing"} + : CanCheckpoint(&transaction); + if (checkpoint_decision.can_checkpoint) { if (transaction.AutomaticCheckpoint(db)) { checkpoint_lock.Lock(); } else { - checkpoint = false; + checkpoint_decision = {false, "no reason to automatically checkpoint"}; } } + OnCommitCheckpointDecision(checkpoint_decision, transaction); + // obtain a commit id for the transaction transaction_t commit_id = current_start_timestamp++; // commit the UndoBuffer of the transaction - auto error = transaction.Commit(db, commit_id, checkpoint); + auto error = transaction.Commit(db, commit_id, checkpoint_decision.can_checkpoint); if (error.HasError()) { // commit unsuccessful: rollback the transaction instead - checkpoint = false; + checkpoint_decision = CheckpointDecision {false, error.Message()}; transaction.commit_id = 0; transaction.Rollback(); } - if (!checkpoint) { + if (!checkpoint_decision.can_checkpoint) { // we won't checkpoint after all: unlock the clients again checkpoint_lock.Unlock(); client_locks.clear(); @@ -202,7 +217,7 @@ ErrorData DuckTransactionManager::CommitTransaction(ClientContext &context, Tran RemoveTransaction(transaction); // now perform a checkpoint if (1) we are able to checkpoint, and (2) the WAL has reached sufficient size to // checkpoint - if (checkpoint) { + if (checkpoint_decision.can_checkpoint) { // checkpoint the database to disk auto &storage_manager = db.GetStorageManager(); storage_manager.CreateCheckpoint(false, true); diff --git a/src/transaction/meta_transaction.cpp b/src/transaction/meta_transaction.cpp index 739d59d5919a..7cd7fa450b81 100644 --- a/src/transaction/meta_transaction.cpp +++ b/src/transaction/meta_transaction.cpp @@ -24,13 +24,28 @@ Transaction &Transaction::Get(ClientContext &context, AttachedDatabase &db) { return meta_transaction.GetTransaction(db); } +#ifdef DEBUG +static void VerifyAllTransactionsUnique(AttachedDatabase &db, vector> &all_transactions) { + for (auto &tx : all_transactions) { + if (RefersToSameObject(db, tx.get())) { + throw InternalException("Database is already present in all_transactions"); + } + } +} +#endif + Transaction &MetaTransaction::GetTransaction(AttachedDatabase &db) { + lock_guard guard(lock); auto entry = transactions.find(db); if (entry == transactions.end()) { auto &new_transaction = db.GetTransactionManager().StartTransaction(context); new_transaction.active_query = active_query; +#ifdef DEBUG + VerifyAllTransactionsUnique(db, all_transactions); +#endif all_transactions.push_back(db); transactions.insert(make_pair(reference(db), reference(new_transaction))); + return new_transaction; } else { D_ASSERT(entry->second.get().active_query == active_query); @@ -60,6 +75,9 @@ Transaction &Transaction::Get(ClientContext &context, Catalog &catalog) { ErrorData MetaTransaction::Commit() { ErrorData error; +#ifdef DEBUG + reference_set_t committed_tx; +#endif // commit transactions in reverse order for (idx_t i = all_transactions.size(); i > 0; i--) { auto &db = all_transactions[i - 1].get(); @@ -67,6 +85,12 @@ ErrorData MetaTransaction::Commit() { if (entry == transactions.end()) { throw InternalException("Could not find transaction corresponding to database in MetaTransaction"); } +#ifdef DEBUG + auto already_committed = committed_tx.insert(db).second == false; + if (already_committed) { + throw InternalException("All databases inside all_transactions should be unique, invariant broken!"); + } +#endif auto &transaction_manager = db.GetTransactionManager(); auto &transaction = entry->second.get(); if (!error.HasError()) { diff --git a/src/transaction/transaction_context.cpp b/src/transaction/transaction_context.cpp index f67b89a02c0a..f2eaa9fed87d 100644 --- a/src/transaction/transaction_context.cpp +++ b/src/transaction/transaction_context.cpp @@ -35,15 +35,6 @@ void TransactionContext::BeginTransaction() { for (auto const &s : context.registered_state) { s.second->TransactionBegin(*current_transaction, context); } - - auto &config = DBConfig::GetConfig(context); - if (config.options.immediate_transaction_mode) { - // if immediate transaction mode is enabled then start all transactions immediately - auto databases = DatabaseManager::Get(context).GetDatabases(context); - for (auto db : databases) { - current_transaction->GetTransaction(db.get()); - } - } } void TransactionContext::Commit() { diff --git a/src/transaction/undo_buffer.cpp b/src/transaction/undo_buffer.cpp index 395442573b0e..148bd3d04913 100644 --- a/src/transaction/undo_buffer.cpp +++ b/src/transaction/undo_buffer.cpp @@ -24,7 +24,7 @@ data_ptr_t UndoBuffer::CreateEntry(UndoFlags type, idx_t len) { auto data = allocator.Allocate(needed_space); Store(type, data); data += sizeof(UndoFlags); - Store(len, data); + Store(UnsafeNumericCast(len), data); data += sizeof(uint32_t); return data; } diff --git a/test/api/CMakeLists.txt b/test/api/CMakeLists.txt index 2c917fbb9c3e..f0f24152f707 100644 --- a/test/api/CMakeLists.txt +++ b/test/api/CMakeLists.txt @@ -20,6 +20,7 @@ set(TEST_API_OBJECTS test_query_profiler.cpp test_dbdir.cpp test_progress_bar.cpp + test_uuid.cpp test_threads.cpp test_windows_header_compatibility.cpp test_windows_unicode_path.cpp @@ -37,7 +38,7 @@ if(DUCKDB_EXTENSION_TPCH_SHOULD_LINK) serialized_plans/test_plan_serialization_bwc.cpp) endif() -add_library_unity(test_api OBJECT ${TEST_API_OBJECTS}) +add_library(test_api OBJECT ${TEST_API_OBJECTS}) set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} $ PARENT_SCOPE) diff --git a/test/api/capi/test_capi.cpp b/test/api/capi/test_capi.cpp index 269179b5e8bb..2d6202a53e55 100644 --- a/test/api/capi/test_capi.cpp +++ b/test/api/capi/test_capi.cpp @@ -430,11 +430,10 @@ TEST_CASE("decompose timetz with duckdb_from_time_tz", "[capi]") { auto time_tz = duckdb_from_time_tz(data[0]); - auto val = duckdb_from_time(time_tz.time); - REQUIRE(val.hour == 11); - REQUIRE(val.min == 30); - REQUIRE(val.sec == 0); - REQUIRE(val.micros == 123456); + REQUIRE(time_tz.time.hour == 11); + REQUIRE(time_tz.time.min == 30); + REQUIRE(time_tz.time.sec == 0); + REQUIRE(time_tz.time.micros == 123456); REQUIRE(time_tz.offset == -7200); } @@ -453,14 +452,12 @@ TEST_CASE("create time_tz value") { // and back again auto inverse = duckdb_from_time_tz(res); - REQUIRE(micros.micros == inverse.time.micros); REQUIRE(offset == inverse.offset); - time = duckdb_from_time(inverse.time); - REQUIRE(time.hour == 4); - REQUIRE(time.min == 2); - REQUIRE(time.sec == 6); - REQUIRE(time.micros == 9); + REQUIRE(inverse.time.hour == 4); + REQUIRE(inverse.time.min == 2); + REQUIRE(inverse.time.sec == 6); + REQUIRE(inverse.time.micros == 9); } TEST_CASE("Test errors in C API", "[capi]") { diff --git a/test/api/capi/test_capi_appender.cpp b/test/api/capi/test_capi_appender.cpp index e7e3a4c2c538..f364627f10ac 100644 --- a/test/api/capi/test_capi_appender.cpp +++ b/test/api/capi/test_capi_appender.cpp @@ -88,6 +88,80 @@ TEST_CASE("Test appending into DECIMAL in C API", "[capi]") { TestAppendingSingleDecimalValue(12345234234.31243244234324, expected, 26, 1); } +TEST_CASE("Test NULL struct Appender", "[capi]") { + CAPITester tester; + duckdb::unique_ptr result; + duckdb_state status; + + REQUIRE(tester.OpenDatabase(nullptr)); + tester.Query("CREATE TABLE test (simple_struct STRUCT(a INTEGER, b VARCHAR));"); + duckdb_appender appender; + + status = duckdb_appender_create(tester.connection, nullptr, "test", &appender); + REQUIRE(status == DuckDBSuccess); + REQUIRE(duckdb_appender_error(appender) == nullptr); + + // create the column types of the data chunk + duckdb::vector child_types = {duckdb_create_logical_type(DUCKDB_TYPE_INTEGER), + duckdb_create_logical_type(DUCKDB_TYPE_VARCHAR)}; + duckdb::vector names = {"a", "b"}; + auto struct_type = duckdb_create_struct_type(child_types.data(), names.data(), child_types.size()); + + // create the data chunk + duckdb_logical_type types[1] = {struct_type}; + auto data_chunk = duckdb_create_data_chunk(types, 1); + REQUIRE(data_chunk); + REQUIRE(duckdb_data_chunk_get_column_count(data_chunk) == 1); + + auto struct_vector = duckdb_data_chunk_get_vector(data_chunk, 0); + auto first_child_vector = duckdb_struct_vector_get_child(struct_vector, 0); + auto second_child_vector = duckdb_struct_vector_get_child(struct_vector, 1); + + // set two values + auto first_child_ptr = (int64_t *)duckdb_vector_get_data(first_child_vector); + *first_child_ptr = 42; + duckdb_vector_assign_string_element(second_child_vector, 0, "hello"); + + // set the parent/STRUCT vector to NULL + duckdb_vector_ensure_validity_writable(struct_vector); + auto validity = duckdb_vector_get_validity(struct_vector); + duckdb_validity_set_row_validity(validity, 1, false); + + // set the first child vector to NULL + duckdb_vector_ensure_validity_writable(first_child_vector); + auto first_validity = duckdb_vector_get_validity(first_child_vector); + duckdb_validity_set_row_validity(first_validity, 1, false); + + // set the second child vector to NULL + duckdb_vector_ensure_validity_writable(second_child_vector); + auto second_validity = duckdb_vector_get_validity(second_child_vector); + duckdb_validity_set_row_validity(second_validity, 1, false); + + duckdb_data_chunk_set_size(data_chunk, 2); + REQUIRE(duckdb_append_data_chunk(appender, data_chunk) == DuckDBSuccess); + + // close flushes all remaining data + status = duckdb_appender_close(appender); + REQUIRE(status == DuckDBSuccess); + + // verify the result + result = tester.Query("SELECT simple_struct::VARCHAR FROM test;"); + REQUIRE_NO_FAIL(*result); + REQUIRE(result->Fetch(0, 0) == "{'a': 42, 'b': hello}"); + REQUIRE(result->Fetch(0, 1) == ""); + + // destroy the data chunk and the appender + duckdb_destroy_data_chunk(&data_chunk); + status = duckdb_appender_destroy(&appender); + REQUIRE(status == DuckDBSuccess); + + // destroy the logical types + for (auto child_type : child_types) { + duckdb_destroy_logical_type(&child_type); + } + duckdb_destroy_logical_type(&struct_type); +} + TEST_CASE("Test appender statements in C API", "[capi]") { CAPITester tester; duckdb::unique_ptr result; diff --git a/test/api/capi/test_capi_complex_types.cpp b/test/api/capi/test_capi_complex_types.cpp index d5334dd881d7..ff84948beb93 100644 --- a/test/api/capi/test_capi_complex_types.cpp +++ b/test/api/capi/test_capi_complex_types.cpp @@ -465,3 +465,41 @@ TEST_CASE("Test Infinite Dates", "[capi]") { REQUIRE(ts.micros > 0); } } + +TEST_CASE("Array type construction") { + CAPITester tester; + REQUIRE(tester.OpenDatabase(nullptr)); + + auto child_type = duckdb_create_logical_type(DUCKDB_TYPE_INTEGER); + auto array_type = duckdb_create_array_type(child_type, 3); + + REQUIRE(duckdb_array_type_array_size(array_type) == 3); + + auto get_child_type = duckdb_array_type_child_type(array_type); + REQUIRE(duckdb_get_type_id(get_child_type) == DUCKDB_TYPE_INTEGER); + duckdb_destroy_logical_type(&get_child_type); + + duckdb_destroy_logical_type(&child_type); + duckdb_destroy_logical_type(&array_type); +} + +TEST_CASE("Array value construction") { + CAPITester tester; + REQUIRE(tester.OpenDatabase(nullptr)); + + auto child_type = duckdb_create_logical_type(DUCKDB_TYPE_INTEGER); + + duckdb::vector values; + values.push_back(duckdb_create_int64(42)); + values.push_back(duckdb_create_int64(43)); + values.push_back(duckdb_create_int64(44)); + + auto array_value = duckdb_create_array_value(child_type, values.data(), values.size()); + REQUIRE(array_value); + + duckdb_destroy_logical_type(&child_type); + for (auto &val : values) { + duckdb_destroy_value(&val); + } + duckdb_destroy_value(&array_value); +} diff --git a/test/api/capi/test_capi_data_chunk.cpp b/test/api/capi/test_capi_data_chunk.cpp index 873b096b3b4b..9d5e82aa38b8 100644 --- a/test/api/capi/test_capi_data_chunk.cpp +++ b/test/api/capi/test_capi_data_chunk.cpp @@ -97,56 +97,71 @@ TEST_CASE("Test DataChunk C API", "[capi]") { duckdb_state status; REQUIRE(tester.OpenDatabase(nullptr)); - REQUIRE(duckdb_vector_size() == STANDARD_VECTOR_SIZE); - tester.Query("CREATE TABLE test(i BIGINT, j SMALLINT)"); + // create column types + const idx_t COLUMN_COUNT = 3; + duckdb_type duckdbTypes[COLUMN_COUNT]; + duckdbTypes[0] = DUCKDB_TYPE_BIGINT; + duckdbTypes[1] = DUCKDB_TYPE_SMALLINT; + duckdbTypes[2] = DUCKDB_TYPE_BLOB; - duckdb_logical_type types[2]; - types[0] = duckdb_create_logical_type(DUCKDB_TYPE_BIGINT); - types[1] = duckdb_create_logical_type(DUCKDB_TYPE_SMALLINT); + duckdb_logical_type types[COLUMN_COUNT]; + for (idx_t i = 0; i < COLUMN_COUNT; i++) { + types[i] = duckdb_create_logical_type(duckdbTypes[i]); + } - auto data_chunk = duckdb_create_data_chunk(types, 2); + // create data chunk + auto data_chunk = duckdb_create_data_chunk(types, COLUMN_COUNT); REQUIRE(data_chunk); - - REQUIRE(duckdb_data_chunk_get_column_count(data_chunk) == 2); - - auto first_type = duckdb_vector_get_column_type(duckdb_data_chunk_get_vector(data_chunk, 0)); - REQUIRE(duckdb_get_type_id(first_type) == DUCKDB_TYPE_BIGINT); - duckdb_destroy_logical_type(&first_type); - - auto second_type = duckdb_vector_get_column_type(duckdb_data_chunk_get_vector(data_chunk, 1)); - REQUIRE(duckdb_get_type_id(second_type) == DUCKDB_TYPE_SMALLINT); - duckdb_destroy_logical_type(&second_type); + REQUIRE(duckdb_data_chunk_get_column_count(data_chunk) == COLUMN_COUNT); + + // test duckdb_vector_get_column_type + for (idx_t i = 0; i < COLUMN_COUNT; i++) { + auto vector = duckdb_data_chunk_get_vector(data_chunk, i); + auto type = duckdb_vector_get_column_type(vector); + REQUIRE(duckdb_get_type_id(type) == duckdbTypes[i]); + duckdb_destroy_logical_type(&type); + } REQUIRE(duckdb_data_chunk_get_vector(data_chunk, 999) == nullptr); REQUIRE(duckdb_data_chunk_get_vector(nullptr, 0) == nullptr); REQUIRE(duckdb_vector_get_column_type(nullptr) == nullptr); - REQUIRE(duckdb_data_chunk_get_size(data_chunk) == 0); REQUIRE(duckdb_data_chunk_get_size(nullptr) == 0); - // use the appender to insert a value using the data chunk API + // create table + tester.Query("CREATE TABLE test(i BIGINT, j SMALLINT, k BLOB)"); + + // use the appender to insert values using the data chunk API duckdb_appender appender; status = duckdb_appender_create(tester.connection, nullptr, "test", &appender); REQUIRE(status == DuckDBSuccess); // get the column types from the appender - REQUIRE(duckdb_appender_column_count(appender) == 2); + REQUIRE(duckdb_appender_column_count(appender) == COLUMN_COUNT); - auto appender_first_type = duckdb_appender_column_type(appender, 0); - REQUIRE(duckdb_get_type_id(appender_first_type) == DUCKDB_TYPE_BIGINT); - duckdb_destroy_logical_type(&appender_first_type); + // test duckdb_appender_column_type + for (idx_t i = 0; i < COLUMN_COUNT; i++) { + auto type = duckdb_appender_column_type(appender, i); + REQUIRE(duckdb_get_type_id(type) == duckdbTypes[i]); + duckdb_destroy_logical_type(&type); + } - auto appender_second_type = duckdb_appender_column_type(appender, 1); - REQUIRE(duckdb_get_type_id(appender_second_type) == DUCKDB_TYPE_SMALLINT); - duckdb_destroy_logical_type(&appender_second_type); + // append BIGINT + auto bigint_vector = duckdb_data_chunk_get_vector(data_chunk, 0); + auto int64_ptr = (int64_t *)duckdb_vector_get_data(bigint_vector); + *int64_ptr = 42; - // append standard primitive values - auto col1_ptr = (int64_t *)duckdb_vector_get_data(duckdb_data_chunk_get_vector(data_chunk, 0)); - *col1_ptr = 42; - auto col2_ptr = (int16_t *)duckdb_vector_get_data(duckdb_data_chunk_get_vector(data_chunk, 1)); - *col2_ptr = 84; + // append SMALLINT + auto smallint_vector = duckdb_data_chunk_get_vector(data_chunk, 1); + auto int16_ptr = (int16_t *)duckdb_vector_get_data(smallint_vector); + *int16_ptr = 84; + + // append BLOB + string s = "this is my blob"; + auto blob_vector = duckdb_data_chunk_get_vector(data_chunk, 2); + duckdb_vector_assign_string_element_len(blob_vector, 0, s.c_str(), s.length()); REQUIRE(duckdb_vector_get_data(nullptr) == nullptr); @@ -161,34 +176,33 @@ TEST_CASE("Test DataChunk C API", "[capi]") { duckdb_data_chunk_reset(data_chunk); REQUIRE(duckdb_data_chunk_get_size(data_chunk) == 0); - duckdb_vector_ensure_validity_writable(duckdb_data_chunk_get_vector(data_chunk, 0)); - duckdb_vector_ensure_validity_writable(duckdb_data_chunk_get_vector(data_chunk, 1)); - auto col1_validity = duckdb_vector_get_validity(duckdb_data_chunk_get_vector(data_chunk, 0)); - REQUIRE(duckdb_validity_row_is_valid(col1_validity, 0)); - duckdb_validity_set_row_validity(col1_validity, 0, false); - REQUIRE(!duckdb_validity_row_is_valid(col1_validity, 0)); + for (idx_t i = 0; i < COLUMN_COUNT; i++) { + auto vector = duckdb_data_chunk_get_vector(data_chunk, i); + duckdb_vector_ensure_validity_writable(vector); + auto validity = duckdb_vector_get_validity(vector); - auto col2_validity = duckdb_vector_get_validity(duckdb_data_chunk_get_vector(data_chunk, 1)); - REQUIRE(col2_validity); - REQUIRE(duckdb_validity_row_is_valid(col2_validity, 0)); - duckdb_validity_set_row_validity(col2_validity, 0, false); - REQUIRE(!duckdb_validity_row_is_valid(col2_validity, 0)); + REQUIRE(duckdb_validity_row_is_valid(validity, 0)); + duckdb_validity_set_row_validity(validity, 0, false); + REQUIRE(!duckdb_validity_row_is_valid(validity, 0)); + } duckdb_data_chunk_set_size(data_chunk, 1); REQUIRE(duckdb_data_chunk_get_size(data_chunk) == 1); - REQUIRE(duckdb_append_data_chunk(appender, data_chunk) == DuckDBSuccess); - REQUIRE(duckdb_vector_get_validity(nullptr) == nullptr); duckdb_appender_destroy(&appender); result = tester.Query("SELECT * FROM test"); REQUIRE_NO_FAIL(*result); + REQUIRE(result->Fetch(0, 0) == 42); REQUIRE(result->Fetch(1, 0) == 84); + REQUIRE(result->Fetch(2, 0) == "this is my blob"); + REQUIRE(result->IsNull(0, 1)); REQUIRE(result->IsNull(1, 1)); + REQUIRE(result->IsNull(2, 1)); duckdb_data_chunk_reset(data_chunk); duckdb_data_chunk_reset(nullptr); @@ -196,11 +210,11 @@ TEST_CASE("Test DataChunk C API", "[capi]") { duckdb_destroy_data_chunk(&data_chunk); duckdb_destroy_data_chunk(&data_chunk); - duckdb_destroy_data_chunk(nullptr); - duckdb_destroy_logical_type(&types[0]); - duckdb_destroy_logical_type(&types[1]); + for (idx_t i = 0; i < COLUMN_COUNT; i++) { + duckdb_destroy_logical_type(&types[i]); + } } TEST_CASE("Test DataChunk appending incorrect types in C API", "[capi]") { @@ -417,3 +431,30 @@ TEST_CASE("Test DataChunk populate ListVector in C API", "[capi]") { duckdb_destroy_logical_type(&list_type); duckdb_destroy_logical_type(&elem_type); } + +TEST_CASE("Test DataChunk populate ArrayVector in C API", "[capi]") { + + auto elem_type = duckdb_create_logical_type(duckdb_type::DUCKDB_TYPE_INTEGER); + auto array_type = duckdb_create_array_type(elem_type, 3); + duckdb_logical_type schema[] = {array_type}; + auto chunk = duckdb_create_data_chunk(schema, 1); + duckdb_data_chunk_set_size(chunk, 2); + auto array_vector = duckdb_data_chunk_get_vector(chunk, 0); + + auto child = duckdb_array_vector_get_child(array_vector); + for (int i = 0; i < 6; i++) { + ((int *)duckdb_vector_get_data(child))[i] = i; + } + + auto vec = (Vector &)(*array_vector); + for (int i = 0; i < 2; i++) { + auto child_vals = ArrayValue::GetChildren(vec.GetValue(i)); + for (int j = 0; j < 3; j++) { + REQUIRE(child_vals[j].GetValue() == i * 3 + j); + } + } + + duckdb_destroy_data_chunk(&chunk); + duckdb_destroy_logical_type(&array_type); + duckdb_destroy_logical_type(&elem_type); +} diff --git a/test/api/serialized_plans/serialized_plans.binary b/test/api/serialized_plans/serialized_plans.binary index 996645e3e423..42a316d52da3 100644 Binary files a/test/api/serialized_plans/serialized_plans.binary and b/test/api/serialized_plans/serialized_plans.binary differ diff --git a/test/api/test_api.cpp b/test/api/test_api.cpp index ca41df7e3acc..070b6c63c05a 100644 --- a/test/api/test_api.cpp +++ b/test/api/test_api.cpp @@ -70,7 +70,7 @@ TEST_CASE("Test closing database during long running query", "[api]") { auto conn = make_uniq(*db); // create the database REQUIRE_NO_FAIL(conn->Query("CREATE TABLE integers(i INTEGER)")); - REQUIRE_NO_FAIL(conn->Query("INSERT INTO integers VALUES (1), (2), (3), (NULL)")); + REQUIRE_NO_FAIL(conn->Query("INSERT INTO integers FROM range(10000)")); conn->DisableProfiling(); // perform a long running query in the background (many cross products) bool correct = true; diff --git a/test/api/test_results.cpp b/test/api/test_results.cpp index 10cf0c77d806..e4c3ec89e3a3 100644 --- a/test/api/test_results.cpp +++ b/test/api/test_results.cpp @@ -200,7 +200,10 @@ TEST_CASE("Test ARRAY_AGG with ORDER BY", "[api][array_agg]") { } TEST_CASE("Issue #9417", "[api][.]") { - DuckDB db("issue_replication.db"); + DBConfig config; + config.options.allow_unsigned_extensions = true; + + DuckDB db("issue_replication.db", &config); Connection con(db); auto result = con.SendQuery("with max_period as (" " select max(reporting_date) as max_record\n" diff --git a/test/api/test_uuid.cpp b/test/api/test_uuid.cpp new file mode 100644 index 000000000000..aa58c03af70c --- /dev/null +++ b/test/api/test_uuid.cpp @@ -0,0 +1,19 @@ +#include "test_helpers.hpp" +#include "duckdb/common/types/uuid.hpp" +#include "catch.hpp" + +using namespace duckdb; +using namespace std; + +TEST_CASE("Test UUID API", "[api]") { + REQUIRE(UUID::ToString(UUID::FromUHugeint(uhugeint_t(0))) == "00000000-0000-0000-0000-000000000000"); + REQUIRE(UUID::ToString(UUID::FromUHugeint(uhugeint_t(1))) == "00000000-0000-0000-0000-000000000001"); + REQUIRE(UUID::ToString(UUID::FromUHugeint(NumericLimits::Maximum())) == + "ffffffff-ffff-ffff-ffff-ffffffffffff"); + REQUIRE(UUID::ToString(UUID::FromUHugeint(NumericLimits::Maximum() - 1)) == + "ffffffff-ffff-ffff-ffff-fffffffffffe"); + REQUIRE(UUID::ToString(UUID::FromUHugeint(NumericLimits::Maximum() / 2)) == + "7fffffff-ffff-ffff-ffff-ffffffffffff"); + REQUIRE(UUID::ToString(UUID::FromUHugeint((NumericLimits::Maximum() / 2) + 1)) == + "80000000-0000-0000-0000-000000000000"); +} diff --git a/test/arrow/arrow_roundtrip.cpp b/test/arrow/arrow_roundtrip.cpp index d7e33fc7d706..e953791a9dad 100644 --- a/test/arrow/arrow_roundtrip.cpp +++ b/test/arrow/arrow_roundtrip.cpp @@ -16,13 +16,12 @@ static void TestArrowRoundtrip(const string &query, bool export_large_buffer = f } static void TestParquetRoundtrip(const string &path) { - DuckDB db; - Connection con(db); + DBConfig config; + // This needs to be set since this test will be triggered when testing autoloading + config.options.allow_unsigned_extensions = true; - if (ExtensionHelper::LoadExtension(db, "parquet") == ExtensionLoadResult::NOT_LOADED) { - FAIL(); - return; - } + DuckDB db(nullptr, &config); + Connection con(db); // run the query auto query = "SELECT * FROM parquet_scan('" + path + "')"; diff --git a/test/common/CMakeLists.txt b/test/common/CMakeLists.txt index f21307e0385b..7646cf6947be 100644 --- a/test/common/CMakeLists.txt +++ b/test/common/CMakeLists.txt @@ -5,6 +5,7 @@ add_library_unity( test_checksum.cpp test_file_system.cpp test_hyperlog.cpp + test_numeric_cast.cpp test_utf.cpp test_strftime.cpp test_string_util.cpp) diff --git a/test/common/test_numeric_cast.cpp b/test/common/test_numeric_cast.cpp new file mode 100644 index 000000000000..7473c6f78be3 --- /dev/null +++ b/test/common/test_numeric_cast.cpp @@ -0,0 +1,60 @@ +#include "catch.hpp" +#include "duckdb/common/numeric_utils.hpp" +#include "test_helpers.hpp" + +using namespace duckdb; +using namespace std; + +TEST_CASE("Numeric cast checks", "[numeric_cast]") { +#ifdef DUCKDB_CRASH_ON_ASSERT + return; +#endif + // unsigned-unsiged + // can not fail upcasting unsigned type + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + REQUIRE_NOTHROW(NumericCast(NumericLimits::Minimum())); + + // we can down cast if value fits + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + + // but not if it doesn't + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum() + 1)); + + // signed-signed, same as above + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + REQUIRE_NOTHROW(NumericCast(NumericLimits::Minimum())); + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum() + 1)); + REQUIRE_THROWS(NumericCast(NumericLimits::Minimum() - 1)); + + // unsigned to signed + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + REQUIRE_NOTHROW(NumericCast(NumericLimits::Minimum())); + + // uint8 max will not fit in int8 + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + + // signed to unsigned + // can cast int8 max to uint8 + REQUIRE_NOTHROW(NumericCast(NumericLimits::Maximum())); + // cat cast int8 min to unit8 + REQUIRE_THROWS(NumericCast(NumericLimits::Minimum())); + + // can't cast anything negative to anything unsigned + REQUIRE_THROWS(NumericCast(-1)); + REQUIRE_THROWS(NumericCast(-1)); + REQUIRE_THROWS(NumericCast(-1)); + REQUIRE_THROWS(NumericCast(-1)); + + // can't downcast big number + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + REQUIRE_THROWS(NumericCast(NumericLimits::Maximum())); + + // TODO this should throw but doesn't + // REQUIRE_THROWS(NumericCast(hugeint_t(-1))); +} diff --git a/test/extension/autoloading_filesystems.test b/test/extension/autoloading_filesystems.test index 4379d7ccc29d..bd163acf4d9f 100644 --- a/test/extension/autoloading_filesystems.test +++ b/test/extension/autoloading_filesystems.test @@ -6,6 +6,9 @@ # -> this should be the case for our autoloading tests where we have the local_extension_repo variable set require-env LOCAL_EXTENSION_REPO +statement ok +set allow_persistent_secrets=false; + # Ensure we have a clean extension directory without any preinstalled extensions statement ok set extension_directory='__TEST_DIR__/autoloading_filesystems' diff --git a/test/extension/wrong_function_type.test b/test/extension/wrong_function_type.test new file mode 100644 index 000000000000..40d960d955da --- /dev/null +++ b/test/extension/wrong_function_type.test @@ -0,0 +1,21 @@ +# name: test/extension/wrong_function_type.test +# group: [extension] + +statement error +FROM json("['item':'phasers','year':2155','count':1035]"); +---- +Catalog Error: Table Function with name "json" is not in the catalog, a function by this name exists in the json extension, but it's of a different type, namely Macro Function + +require no_extension_autoloading + +# Multiple options exist, none are scalar +statement error +select json_execute_serialized_sql(42) from range(5); +---- +Catalog Error: Scalar Function with name "json_execute_serialized_sql" is not in the catalog, functions with this name exist in the json extension, but they are of different types, namely Pragma Function, Table Function + +# One of the two options is Table Function +statement error +CALL json_execute_serialized_sql('test'); +---- +Catalog Error: Table Function with name "json_execute_serialized_sql" is not in the catalog, but it exists in the json extension. diff --git a/test/fuzzer/duckfuzz/arg_minmax_by_decimal.test b/test/fuzzer/duckfuzz/arg_minmax_by_decimal.test new file mode 100644 index 000000000000..e409e32de320 --- /dev/null +++ b/test/fuzzer/duckfuzz/arg_minmax_by_decimal.test @@ -0,0 +1,20 @@ +# name: test/fuzzer/duckfuzz/arg_minmax_by_decimal.test +# description: Coverage for narrow DECIMAL ordering argument +# group: [duckfuzz] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types() + limit 0; + +statement ok +SELECT min_by(DISTINCT c23, c22) +FROM all_types AS t43(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) + +statement error +SELECT c6 +FROM all_types AS t43(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) +PIVOT (argmin(c23, c6) FOR (c6, c33) IN ((8899, 4068))) +---- +Binder Error: Referenced column "c6" not found in FROM clause diff --git a/test/fuzzer/duckfuzz/array_const_null_cast.test b/test/fuzzer/duckfuzz/array_const_null_cast.test new file mode 100644 index 000000000000..528c6ea009dd --- /dev/null +++ b/test/fuzzer/duckfuzz/array_const_null_cast.test @@ -0,0 +1,17 @@ +# name: test/fuzzer/duckfuzz/array_const_null_cast.test +# group: [duckfuzz] + +# Internal Issue #1420 +# Caused by not flattening constant null array vectors properly +statement ok +create table tbl(c8 UTINYINT); + +statement ok +INSERT INTO tbl VALUES (0), (255), (NULL); + +query I +SELECT CAST(TRY_CAST(c8 AS ENUM('DUCK_DUCK_ENUM', 'GOOSE')) AS VARCHAR[3]) FROM tbl; +---- +NULL +NULL +NULL \ No newline at end of file diff --git a/test/fuzzer/duckfuzz/array_group_by_sample.test b/test/fuzzer/duckfuzz/array_group_by_sample.test new file mode 100644 index 000000000000..3d66a22b4042 --- /dev/null +++ b/test/fuzzer/duckfuzz/array_group_by_sample.test @@ -0,0 +1,19 @@ +# name: test/fuzzer/duckfuzz/array_group_by_sample.test +# group: [duckfuzz] + +# Internal Issue #1408 +# Caused by not allocating enough fake list_entry_t's during tuple format serialization +statement ok +CREATE TABLE array_tbl(c50 INTEGER[2][]);; + +statement ok +INSERT INTO array_tbl VALUES('[[1, 2], [1, 2]]'); + +statement ok +INSERT INTO array_tbl VALUES('[[3, 4], [3, 4]]'); + +query I rowsort +SELECT c50 FROM array_tbl GROUP BY ALL USING SAMPLE 3; +---- +[[1, 2], [1, 2]] +[[3, 4], [3, 4]] \ No newline at end of file diff --git a/test/fuzzer/duckfuzz/array_hash.test b/test/fuzzer/duckfuzz/array_hash.test new file mode 100644 index 000000000000..5ece739cc672 --- /dev/null +++ b/test/fuzzer/duckfuzz/array_hash.test @@ -0,0 +1,15 @@ +# name: test/fuzzer/duckfuzz/array_hash.test +# group: [duckfuzz] + +# Duckfuzz Issue #1434 +# Caused by not calculating the correct number of child elements when hashing a constant array vector. +statement ok +create table all_types as select * exclude(small_enum, medium_enum, large_enum) from test_all_types(); + +query I rowsort +SELECT subq_0.c2 AS c4 FROM (SELECT ref_1.fixed_nested_int_array AS c2 FROM main.all_types AS ref_0 LEFT JOIN main.all_types AS ref_1 ON ((ref_0."varchar" !~~* ref_1."varchar"))) AS subq_0 RIGHT JOIN main.all_types AS ref_2 ON ((subq_0.c2 = ref_2.fixed_nested_int_array)) +---- +NULL +[[4, 5, 6], [NULL, 2, 3], [4, 5, 6]] +[[4, 5, 6], [NULL, 2, 3], [4, 5, 6]] +[[NULL, 2, 3], NULL, [NULL, 2, 3]] \ No newline at end of file diff --git a/test/fuzzer/duckfuzz/array_serialization_flattening.test b/test/fuzzer/duckfuzz/array_serialization_flattening.test new file mode 100644 index 000000000000..ebd66a0178e2 --- /dev/null +++ b/test/fuzzer/duckfuzz/array_serialization_flattening.test @@ -0,0 +1,10 @@ +# name: test/fuzzer/duckfuzz/array_serialization_flattening.test +# group: [duckfuzz] + +# Internal Issue #1409 +# Caused by accidentally flattening during serialization/verification of array vectors +statement ok +CREATE TABLE test(c2 BOOL, c48 STRUCT(a INTEGER[3], b VARCHAR[3]));; + +statement ok +INSERT INTO test VALUES(false, '{''a'': [NULL, 2, 3], ''b'': [a, NULL, c]}'); \ No newline at end of file diff --git a/test/fuzzer/duckfuzz/bitstring_agg_minmax.test b/test/fuzzer/duckfuzz/bitstring_agg_minmax.test new file mode 100644 index 000000000000..46b4114dd549 --- /dev/null +++ b/test/fuzzer/duckfuzz/bitstring_agg_minmax.test @@ -0,0 +1,26 @@ +# name: test/fuzzer/duckfuzz/bitstring_agg_minmax.test +# description: Coverage for narrow DECIMAL ordering argument +# group: [duckfuzz] + +statement error +select bitstring_agg(4741, 1706, -128); +---- +Invalid explicit bitstring range + +statement error +select bitstring_agg(4741, 1706, 1706); +---- +Value 4741 is outside of provided min and max range (1706 <-> 1706) + +statement ok +select bitstring_agg(1706, 1706, 1706); + +statement error +select bitstring_agg(4741::hugeint, 1706::hugeint, -128::hugeint); +---- +Invalid explicit bitstring range + +statement error +select bitstring_agg(4741::uhugeint, 1706::uhugeint, 40::uhugeint); +---- +Invalid explicit bitstring range diff --git a/test/fuzzer/duckfuzz/bitstring_agg_uhugeint.test b/test/fuzzer/duckfuzz/bitstring_agg_uhugeint.test new file mode 100644 index 000000000000..27efab01dae5 --- /dev/null +++ b/test/fuzzer/duckfuzz/bitstring_agg_uhugeint.test @@ -0,0 +1,16 @@ +# name: test/fuzzer/duckfuzz/bitstring_agg_uhugeint.test +# description: Coverage for narrow DECIMAL ordering argument +# group: [duckfuzz] + +statement ok +create table all_types as select hugeint, uhugeint from test_all_types(); + +statement error +SELECT bitstring_agg(uhugeint) FROM all_types; +---- +Out of Range Error + +statement error +SELECT bitstring_agg(hugeint) FROM all_types; +---- +Out of Range Error \ No newline at end of file diff --git a/test/fuzzer/duckfuzz/filter_combiner_assert.test b/test/fuzzer/duckfuzz/filter_combiner_assert.test new file mode 100644 index 000000000000..6d8c40f2213d --- /dev/null +++ b/test/fuzzer/duckfuzz/filter_combiner_assert.test @@ -0,0 +1,12 @@ +# name: test/fuzzer/duckfuzz/filter_combiner_assert.test +# description: Test filter combiner assert +# group: [duckfuzz] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE partsupp(ps_partkey INTEGER, ps_suppkey INTEGER, ps_availqty INTEGER, ps_supplycost DECIMAL(15,2), ps_comment VARCHAR); + +statement ok +SELECT NULL FROM partsupp AS t6(c1, c2, c3, c4, c5) WHERE (c4 = COLUMNS(* REPLACE (3947 AS c3))) diff --git a/test/fuzzer/duckfuzz/generate_null_timestamp.test b/test/fuzzer/duckfuzz/generate_null_timestamp.test new file mode 100644 index 000000000000..d3546fe5311d --- /dev/null +++ b/test/fuzzer/duckfuzz/generate_null_timestamp.test @@ -0,0 +1,12 @@ +# name: test/fuzzer/duckfuzz/generate_null_timestamp.test +# description: Generate Series NULL timestamp +# group: [duckfuzz] + +statement ok +PRAGMA enable_verification + +statement error +SELECT NULL +FROM generate_series(CAST('294247-01-10 04:00:54.775806' AS TIMESTAMP), NULL, NULL) AS t3(c1, c2) +---- +RANGE with NULL argument is not supported diff --git a/test/fuzzer/duckfuzz/limit_percent_subquery.test b/test/fuzzer/duckfuzz/limit_percent_subquery.test new file mode 100644 index 000000000000..85ba9d3bb4e6 --- /dev/null +++ b/test/fuzzer/duckfuzz/limit_percent_subquery.test @@ -0,0 +1,21 @@ +# name: test/fuzzer/duckfuzz/limit_percent_subquery.test +# description: Limit percent subquery +# group: [duckfuzz] + +statement ok +PRAGMA enable_verification + +statement ok +create table tbl(i INT); + +query I +FROM tbl LIMIT (EXISTS(SELECT 42))% +---- + +statement ok +INSERT INTO tbl VALUES (42); + +query I +FROM tbl LIMIT (EXISTS(SELECT 42))% +---- + diff --git a/test/fuzzer/duckfuzz/string_to_nested_cast_sample.test b/test/fuzzer/duckfuzz/string_to_nested_cast_sample.test new file mode 100644 index 000000000000..4057db2ed6d3 --- /dev/null +++ b/test/fuzzer/duckfuzz/string_to_nested_cast_sample.test @@ -0,0 +1,14 @@ +# name: test/fuzzer/duckfuzz/string_to_nested_cast_sample.test +# description: cast strings to lists with a sample +# group: [duckfuzz] + +statement ok +CREATE TABLE part AS SELECT concat('this is a long part name', i) AS p_name FROM range(20000) t(i); + +query I +SELECT COUNT(*) FILTER (cast_part IS NULL) +FROM ( + SELECT TRY_CAST(p_name AS STRUCT(a INTEGER[], b VARCHAR[])) FROM part USING SAMPLE 81.0% (Reservoir) +) t(cast_part) +---- +16200 diff --git a/test/fuzzer/duckfuzz/to_weeks_overflow.test b/test/fuzzer/duckfuzz/to_weeks_overflow.test new file mode 100644 index 000000000000..a4c8c8a92276 --- /dev/null +++ b/test/fuzzer/duckfuzz/to_weeks_overflow.test @@ -0,0 +1,16 @@ +# name: test/fuzzer/duckfuzz/to_weeks_overflow.test +# description: Check Overflow in to_weeks +# group: [duckfuzz] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement error +SELECT to_weeks(#4) +FROM all_types AS t43(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) +WHERE c9 +---- +Out of Range Error: Interval value 2147483647 weeks out of range + diff --git a/test/fuzzer/duckfuzz/window_expression_equality.test b/test/fuzzer/duckfuzz/window_expression_equality.test new file mode 100644 index 000000000000..e3dd41ace372 --- /dev/null +++ b/test/fuzzer/duckfuzz/window_expression_equality.test @@ -0,0 +1,15 @@ +# name: test/fuzzer/duckfuzz/window_expression_equality.test +# description: Window expression equality test +# group: [duckfuzz] + +statement ok +pragma enable_verification + +statement ok +create table all_types(c1 BOOL, c9 SMALLINT, c10 UINTEGER, c36 VARCHAR[]); + +statement ok +SELECT + first_value(c9) OVER (PARTITION BY c10, c1, c9, (c36 IS NOT DISTINCT FROM c36) ROWS BETWEEN 8201 PRECEDING AND CURRENT ROW), + first_value(c9) OVER (PARTITION BY c10, c9, c9, (c36 IS NOT DISTINCT FROM c36) ROWS BETWEEN 8201 PRECEDING AND CURRENT ROW) +FROM all_types diff --git a/test/fuzzer/duckfuzz/window_negate_stats.test b/test/fuzzer/duckfuzz/window_negate_stats.test new file mode 100644 index 000000000000..937ea674af61 --- /dev/null +++ b/test/fuzzer/duckfuzz/window_negate_stats.test @@ -0,0 +1,12 @@ +# name: test/fuzzer/duckfuzz/window_negate_stats.test +# description: Negate extreme window statistics. +# group: [duckfuzz] + +statement ok +create table all_types as select * exclude(small_enum, medium_enum, large_enum) from test_all_types(); + +statement error +SELECT max(c32) FILTER (WHERE c24) OVER (PARTITION BY c21 ROWS BETWEEN c5 PRECEDING AND CURRENT ROW) +FROM all_types AS t43(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) +---- +Out of Range Error: Overflow computing ROWS PRECEDING start diff --git a/test/fuzzer/duckfuzz/window_null_range.test b/test/fuzzer/duckfuzz/window_null_range.test new file mode 100644 index 000000000000..5b64719cb95d --- /dev/null +++ b/test/fuzzer/duckfuzz/window_null_range.test @@ -0,0 +1,13 @@ +# name: test/fuzzer/duckfuzz/window_null_range.test +# description: Negate extreme window statistics. +# group: [duckfuzz] + +statement ok +create table all_types as select * exclude(small_enum, medium_enum, large_enum) +from test_all_types(); + +statement error +SELECT percent_rank() OVER (PARTITION BY c21 ORDER BY c37 ASC NULLS FIRST RANGE BETWEEN NULL FOLLOWING AND UNBOUNDED FOLLOWING) +FROM all_types AS t43(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42) +---- +Window RANGE expressions cannot be NULL diff --git a/test/fuzzer/duckfuzz/window_order_bind_failure.test b/test/fuzzer/duckfuzz/window_order_bind_failure.test new file mode 100644 index 000000000000..9bb8b31c0676 --- /dev/null +++ b/test/fuzzer/duckfuzz/window_order_bind_failure.test @@ -0,0 +1,14 @@ +# name: test/fuzzer/duckfuzz/window_order_bind_failure.test +# description: Give up fast on window binding order by failures +# group: [duckfuzz] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement error +SELECT lead(#1) OVER (PARTITION BY 2378 ORDER BY ((c70 BETWEEN c90 AND c19) AND c51) ASC NULLS FIRST RANGE BETWEEN CURRENT ROW AND c7 FOLLOWING) +FROM all_types AS t91(c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, c81, c82, c83, c84, c85, c86, c87, c88, c89, c90) +---- +Binder Error diff --git a/test/fuzzer/pedro/setop_type_mismatch.test b/test/fuzzer/pedro/setop_type_mismatch.test index 12ff24ee61a8..3c58498db60d 100644 --- a/test/fuzzer/pedro/setop_type_mismatch.test +++ b/test/fuzzer/pedro/setop_type_mismatch.test @@ -12,7 +12,17 @@ statement ok INSERT INTO t1 (c1) VALUES (1); query I -SELECT ((SELECT 0) UNION (SELECT t1.c0) OFFSET 1) FROM t1; +SELECT ((SELECT 0) UNION (SELECT t1.c0) OFFSET 2) FROM t1; +---- +NULL + +query I +SELECT ((SELECT 0) UNION (SELECT t1.c0) ORDER BY 1 NULLS FIRST OFFSET 1) FROM t1; +---- +0 + +query I +SELECT ((SELECT 0) UNION (SELECT t1.c0) ORDER BY 1 NULLS LAST OFFSET 1) FROM t1; ---- NULL diff --git a/test/fuzzer/sqlsmith/interval_diff_overflow.test b/test/fuzzer/sqlsmith/interval_diff_overflow.test new file mode 100644 index 000000000000..db0739a92994 --- /dev/null +++ b/test/fuzzer/sqlsmith/interval_diff_overflow.test @@ -0,0 +1,32 @@ +# name: test/fuzzer/sqlsmith/interval_diff_overflow.test +# description: Overflow in interval part subtraction +# group: [sqlsmith] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement error +SELECT subtract( + CAST(main.all_types."interval" AS INTERVAL), + CAST(to_months(CAST(main.all_types."int" AS INTEGER)) AS INTERVAL)) +FROM main.all_types +---- +Out of Range Error: Interval months subtraction out of range + +statement error +SELECT subtract( + CAST(main.all_types."interval" AS INTERVAL), + CAST(to_days(CAST(main.all_types."int" AS INTEGER)) AS INTERVAL)) +FROM main.all_types +---- +Out of Range Error: Interval days subtraction out of range + +statement error +SELECT subtract( + CAST(main.all_types."interval" AS INTERVAL), + CAST(to_microseconds(CAST(main.all_types."bigint" AS BIGINT)) AS INTERVAL)) +FROM main.all_types +---- +Out of Range Error: Interval micros subtraction out of range diff --git a/test/fuzzer/sqlsmith/mad_overflow.test b/test/fuzzer/sqlsmith/mad_overflow.test new file mode 100644 index 000000000000..091cde970b13 --- /dev/null +++ b/test/fuzzer/sqlsmith/mad_overflow.test @@ -0,0 +1,12 @@ +# name: test/fuzzer/sqlsmith/mad_overflow.test +# description: Prevent INT128 overflow during interpolation +# group: [sqlsmith] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement ok +SELECT mad(dec38_10) +FROM all_types; diff --git a/test/fuzzer/sqlsmith/makedate_overflow.test b/test/fuzzer/sqlsmith/makedate_overflow.test new file mode 100644 index 000000000000..dce494a5bf1e --- /dev/null +++ b/test/fuzzer/sqlsmith/makedate_overflow.test @@ -0,0 +1,20 @@ +# name: test/fuzzer/sqlsmith/makedate_overflow.test +# description: Trap overflow from INT64 => INT32 +# group: [sqlsmith] + +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement error +SELECT make_timestamp("bigint", "bigint", "bigint", "bigint", "bigint", "double") +FROM all_types; +---- +can't be cast because the value is out of range for the destination type INT32 + +statement error +SELECT make_date(c1) +FROM test_vector_types(CAST(NULL AS STRUCT("year" BIGINT, "month" BIGINT, "day" BIGINT))) AS test_vector_types(c1); +---- +the value is out of range for the destination type INT32 diff --git a/test/fuzzer/sqlsmith/nested_correlated_subquery.test b/test/fuzzer/sqlsmith/nested_correlated_subquery.test new file mode 100644 index 000000000000..d3caf0fad99a --- /dev/null +++ b/test/fuzzer/sqlsmith/nested_correlated_subquery.test @@ -0,0 +1,52 @@ +# name: test/fuzzer/sqlsmith/nested_correlated_subquery.test +# description: Test nested correlated subquery +# group: [sqlsmith] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE t(ps_supplycost INT, n_name INT); + +statement ok +SELECT NULL +FROM + t AS ref_2, + (SELECT (SELECT NULL + FROM (FROM t AS ref_5, + (SELECT ref_2.n_name AS c1)))); + +query I +SELECT NULL +FROM + t AS ref_2, + (SELECT (SELECT NULL + FROM (FROM t AS ref_5, + (SELECT ref_5.ps_supplycost AS c0, + ref_2.n_name AS c1)))); +---- + +# postgres compatible with explicit LATERAL annotations +query I +SELECT NULL +FROM + t AS ref_2, + LATERAL (SELECT (SELECT NULL + FROM (SELECT * FROM t AS ref_5, + LATERAL (SELECT ref_5.ps_supplycost AS c0, + ref_2.n_name AS c1) AS alias1) AS alias2) AS alias3) AS alias4; +---- + +statement ok +INSERT INTO t VALUES (1, 100); + +query III +SELECT * +FROM + t AS ref_2, + LATERAL (SELECT (SELECT NULL + FROM (SELECT * FROM t AS ref_5, + LATERAL (SELECT ref_5.ps_supplycost AS c0, + ref_2.n_name AS c1) AS alias1) AS alias2) AS alias3) AS alias4; +---- +1 100 NULL \ No newline at end of file diff --git a/test/fuzzer/sqlsmith/window-rows-overflow.test b/test/fuzzer/sqlsmith/window-rows-overflow.test index 7a39e68821fe..4ae47b6b0cfe 100644 --- a/test/fuzzer/sqlsmith/window-rows-overflow.test +++ b/test/fuzzer/sqlsmith/window-rows-overflow.test @@ -2,11 +2,6 @@ # description: Overflow testing for rows offsets. # group: [sqlsmith] -# Query failed, but error message did not match expected error message: -# Out of Range Error: Overflow computing ROWS PRECEDING start (test/fuzzer/sqlsmith/window-rows-overflow.test:14)! -# Skipping for now since it's causing non-deterministic failures on CI -mode skip - statement ok create table all_types as select * exclude( @@ -17,7 +12,7 @@ create table all_types as from test_all_types(); statement error -SELECT nth_value(1929, "array_of_structs") OVER ( +SELECT nth_value(1929, 42) OVER ( PARTITION BY ( "usmallint" > "smallint" ), 747 ROWS BETWEEN "bigint" PRECEDING AND CURRENT ROW @@ -27,7 +22,7 @@ FROM all_types; Out of Range Error: Overflow computing ROWS PRECEDING start statement error -SELECT nth_value(1929, "bool") OVER ( +SELECT nth_value(1929, 42) OVER ( PARTITION BY ( "usmallint" > "smallint" ), 747 ROWS BETWEEN 1 PRECEDING AND "bigint" PRECEDING @@ -37,7 +32,7 @@ FROM all_types; Out of Range Error: Overflow computing ROWS PRECEDING end statement error -SELECT nth_value(1929, "bool") OVER ( +SELECT nth_value(1929, 42) OVER ( PARTITION BY ( "usmallint" > "smallint" ), 747 ROWS BETWEEN "bigint" FOLLOWING AND 1 FOLLOWING @@ -47,7 +42,7 @@ FROM all_types; Out of Range Error: Overflow computing ROWS FOLLOWING start statement error -SELECT nth_value(1929, "bool") OVER ( +SELECT nth_value(1929, 42) OVER ( PARTITION BY ( "usmallint" > "smallint" ), 747 ROWS BETWEEN CURRENT ROW AND "bigint" FOLLOWING diff --git a/test/fuzzer/sqlsmith/window_function_error.test b/test/fuzzer/sqlsmith/window_function_error.test new file mode 100644 index 000000000000..e557445c321d --- /dev/null +++ b/test/fuzzer/sqlsmith/window_function_error.test @@ -0,0 +1,14 @@ +# name: test/fuzzer/sqlsmith/window_function_error.test +# description: Correctly handle errors in window expressions +# group: [sqlsmith] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE tbl AS SELECT 'thisisastring42' AS r_name; + +statement error +SELECT max(CAST(from_hex(CAST(ref_0.r_name AS VARCHAR)) AS BLOB)) OVER (ORDER BY ref_0.r_name) AS c5, +FROM tbl AS ref_0 +---- diff --git a/test/fuzzer/sqlsmith/window_scalar_range.test b/test/fuzzer/sqlsmith/window_scalar_range.test index fa0593122a27..3e390a84f417 100644 --- a/test/fuzzer/sqlsmith/window_scalar_range.test +++ b/test/fuzzer/sqlsmith/window_scalar_range.test @@ -1,7 +1,8 @@ # name: test/fuzzer/sqlsmith/window_scalar_range.test -# description: Test multiple constant chunks +# description: Test various RANGE types # group: [sqlsmith] +# Constant ORDER BY statement ok CREATE TABLE partsupp AS SELECT (random() * 100)::INT AS c2 FROM range(8000); @@ -11,3 +12,16 @@ SELECT percent_rank() OVER (ORDER BY 7543 ASC NULLS FIRST RANGE BETWEEN c2 PRECEDING AND c2 FOLLOWING) FROM partsupp; + +# LIST + ARRAY +statement ok +create table all_types as + select * exclude(small_enum, medium_enum, large_enum) + from test_all_types(); + +statement error +SELECT NULL +FROM all_types AS t51(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50) +QUALIFY row_number() OVER (ORDER BY main.list_value() ASC NULLS FIRST RANGE BETWEEN c43 FOLLOWING AND UNBOUNDED FOLLOWING) +---- +Invalid type for Window RANGE expression diff --git a/test/helpers/test_helpers.cpp b/test/helpers/test_helpers.cpp index aa0ac316a8a7..200f6c2ca43d 100644 --- a/test/helpers/test_helpers.cpp +++ b/test/helpers/test_helpers.cpp @@ -8,7 +8,7 @@ #include "test_helpers.hpp" #include "duckdb/parser/parsed_data/copy_info.hpp" #include "duckdb/main/client_context.hpp" -#include "duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp" +#include "duckdb/execution/operator/csv_scanner/string_value_scanner.hpp" #include "duckdb/common/case_insensitive_map.hpp" #include "pid.hpp" diff --git a/test/optimizer/csv_pushdown.test b/test/optimizer/csv_pushdown.test index 90fd6f8ab3a1..483b9b8fc7ba 100644 --- a/test/optimizer/csv_pushdown.test +++ b/test/optimizer/csv_pushdown.test @@ -31,7 +31,7 @@ Column at position: 13 Set type: DATE Sniffed type: VARCHAR # conversion is skipped if we don't read the value - so even with the incorrect type specified this still works query I -SELECT l_returnflag FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'DECIMAL(15,2)','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}); +SELECT l_returnflag FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'DECIMAL(15,2)','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}, header = 0); ---- N N @@ -56,7 +56,7 @@ SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/d l_extendedprice query III -SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'SMALLINT','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}, ignore_errors=true); +SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'SMALLINT','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}, ignore_errors=true, header = 0); ---- 1 15519 24387 1 6370 10211 @@ -69,7 +69,7 @@ SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/d l_extendedprice query III -SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'USMALLINT','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}, ignore_errors=true); +SELECT l_orderkey, l_partkey, l_extendedprice FROM read_csv('test/sql/copy/csv/data/real/lineitem_sample.csv', delim='|', columns={'l_orderkey': 'INTEGER','l_partkey': 'INTEGER','l_suppkey': 'INTEGER','l_linenumber': 'INTEGER','l_quantity': 'INTEGER','l_extendedprice': 'USMALLINT','l_discount': 'DECIMAL(15,2)','l_tax': 'DECIMAL(15,2)','l_returnflag': 'VARCHAR','l_linestatus': 'VARCHAR','l_shipdate': 'DATE','l_commitdate': 'DATE','l_receiptdate': 'DATE','l_shipinstruct': 'DATE','l_shipmode': 'VARCHAR','l_comment': 'VARCHAR'}, ignore_errors=true, header = 0); ---- 1 15519 24387 1 6731 58958 diff --git a/test/optimizer/joins/filter_on_subquery_with_aggregate.test b/test/optimizer/joins/filter_on_subquery_with_aggregate.test new file mode 100644 index 000000000000..4b3276246921 --- /dev/null +++ b/test/optimizer/joins/filter_on_subquery_with_aggregate.test @@ -0,0 +1,19 @@ +# name: test/optimizer/joins/filter_on_subquery_with_aggregate.test +# description: some fuzzer issues +# group: [joins] + +statement ok +create table df as select unnest(range(1, 10)) as A, unnest(range(1, 10)) as B; + +query II +WITH cte AS ( + SELECT A, B + FROM df + WHERE A >= 7 +) +SELECT * +FROM cte +WHERE A = (SELECT MAX(A) FROM cte); +---- +9 9 + diff --git a/test/optimizer/joins/joins_with_correlated_subqueries.test b/test/optimizer/joins/joins_with_correlated_subqueries.test new file mode 100644 index 000000000000..afa4c90094b9 --- /dev/null +++ b/test/optimizer/joins/joins_with_correlated_subqueries.test @@ -0,0 +1,27 @@ +# name: test/optimizer/joins/joins_with_correlated_subqueries.test +# description: issue duckdblabs/duckdb-internal #840 +# group: [joins] + +statement ok +CREATE TABLE df (x NUMERIC, y NUMERIC); + +statement ok +INSERT INTO df VALUES (0, 2), (1, NULL), (2, 4), (3, 5), (4, NULL); + +statement ok +SELECT + x, + COALESCE( + y, + ( + SELECT + prev.y + ( (next.y - prev.y) * (parent.x - prev.x) / (next.x - prev.x) ) + FROM + ( SELECT x, y FROM df WHERE x <= parent.x and y is not null ORDER BY x DESC LIMIT 1 ) AS prev + CROSS JOIN + ( SELECT x, y FROM df WHERE x >= parent.x and y is not null ORDER BY x ASC LIMIT 1 ) AS next + ) + ) AS y +FROM + df parent; + diff --git a/test/optimizer/union_exclude.test b/test/optimizer/union_exclude.test new file mode 100644 index 000000000000..9a2a9c459d46 --- /dev/null +++ b/test/optimizer/union_exclude.test @@ -0,0 +1,66 @@ +# name: test/optimizer/union_exclude.test +# description: Test union and exclude +# group: [optimizer] + +statement ok +CREATE TABLE test_df_a(number BIGINT, date VARCHAR, rn BIGINT); + +statement ok +INSERT INTO test_df_a VALUES(7058,'2015-07-31',1); + +statement ok +INSERT INTO test_df_a VALUES(7058,'2015-07-31',2); + +statement ok +INSERT INTO test_df_a VALUES(7075,'2016-07-31',1); + +statement ok +INSERT INTO test_df_a VALUES(7076,'2017-07-31',1); + +statement ok +INSERT INTO test_df_a VALUES(7076,'2017-07-31',2); + +statement ok +CREATE TABLE test_df_b(number BIGINT, date VARCHAR, rn BIGINT);; + +statement ok +INSERT INTO test_df_b VALUES(7058,'2015-07-31',1); + +statement ok +INSERT INTO test_df_b VALUES(7058,'2015-07-31',2); + +statement ok +INSERT INTO test_df_b VALUES(7012,'2015-07-31',1); + +statement ok +INSERT INTO test_df_b VALUES(7075,'2016-07-31',1); + +statement ok +INSERT INTO test_df_b VALUES(7076,'2017-07-31',1); + +query II +with t as (select * from test_df_a UNION select * from test_df_b) select * exclude rn from t order by all; +---- +7012 2015-07-31 +7058 2015-07-31 +7058 2015-07-31 +7075 2016-07-31 +7076 2017-07-31 +7076 2017-07-31 + + +statement ok +create table t1 as select 1 a, range b from range(100); + +statement ok +create table t2 as select 1 a, range b from range(100); + +query I +select count(a) from (select * from t1 union select * from t2) t_union; +---- +100 + +query I +select count(a) from (select * from t1 union all select * from t2) t_union; +---- +200 \ No newline at end of file diff --git a/test/parallel_csv/test_parallel_csv.cpp b/test/parallel_csv/test_parallel_csv.cpp index 3a681a0ce76c..d0bae1f811fc 100644 --- a/test/parallel_csv/test_parallel_csv.cpp +++ b/test/parallel_csv/test_parallel_csv.cpp @@ -2,7 +2,7 @@ #include "duckdb/common/types/date.hpp" #include "duckdb/common/types/time.hpp" #include "duckdb/common/types/timestamp.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb/main/appender.hpp" #include "test_helpers.hpp" #include "duckdb/main/client_data.hpp" @@ -144,7 +144,7 @@ TEST_CASE("Test Parallel CSV All Files - test/sql/copy/csv/data", "[parallel-csv //! Test case with specific parameters that allow us to run the no_quote.tsv we were skipping TEST_CASE("Test Parallel CSV All Files - test/sql/copy/csv/data/no_quote.csv", "[parallel-csv][.]") { - string add_parameters = ", header=1, quote=''"; + string add_parameters = ", quote=''"; string file = "test/sql/copy/csv/data/no_quote.csv"; REQUIRE(RunFull(file, nullptr, add_parameters)); } @@ -242,7 +242,7 @@ TEST_CASE("Test Parallel CSV All Files - data/csv", "[parallel-csv][.]") { //! Test case with specific parameters that allow us to run the bug_7578.csv we were skipping TEST_CASE("Test Parallel CSV All Files - data/csv/bug_7578.csv", "[parallel-csv][.]") { - string add_parameters = ", delim=\'\\t\', header=true, quote = \'`\', columns={ \'transaction_id\': \'VARCHAR\', " + string add_parameters = ", delim=\'\\t\', quote = \'`\', columns={ \'transaction_id\': \'VARCHAR\', " "\'team_id\': \'INT\', \'direction\': \'INT\', \'amount\':\'DOUBLE\', " "\'account_id\':\'INT\', \'transaction_date\':\'DATE\', \'recorded_date\':\'DATE\', " "\'tags.transaction_id\':\'VARCHAR\', \'tags.team_id\':\'INT\', \'tags\':\'varchar\'}"; diff --git a/test/parquet/test_parquet_schema.test b/test/parquet/test_parquet_schema.test index a7712718a3d7..5a8a86e7e859 100644 --- a/test/parquet/test_parquet_schema.test +++ b/test/parquet/test_parquet_schema.test @@ -64,7 +64,7 @@ FROM read_parquet('__TEST_DIR__/integers.parquet', schema=map { 0: {name: 'new_column', type: 'UTINYINT', default_value: 43} }) ---- -Invalid Input Error: Map keys have to be unique +Map keys must be unique # cannot duplicate column names statement error diff --git a/test/secrets/test_custom_secret_storage.cpp b/test/secrets/test_custom_secret_storage.cpp index 98cce41563c6..708cf47c03d2 100644 --- a/test/secrets/test_custom_secret_storage.cpp +++ b/test/secrets/test_custom_secret_storage.cpp @@ -118,6 +118,10 @@ TEST_CASE("Test adding a custom secret storage", "[secret][.]") { REQUIRE_NO_FAIL(con.Query("set allow_persistent_secrets=true;")); + // Set custom secret path to prevent interference with other tests + auto secret_dir = TestCreatePath("custom_secret_storage_cpp_1"); + REQUIRE_NO_FAIL(con.Query("set secret_directory='" + secret_dir + "'")); + REQUIRE_NO_FAIL(con.Query("CREATE SECRET s1 IN TEST_STORAGE (TYPE S3, SCOPE 's3://foo')")); REQUIRE_NO_FAIL(con.Query("CREATE PERSISTENT SECRET s2 IN test_storage (TYPE S3, SCOPE 's3://')")); REQUIRE_NO_FAIL(con.Query("CREATE TEMPORARY SECRET s2 (TYPE S3, SCOPE 's3://')")); @@ -188,6 +192,10 @@ TEST_CASE("Test tie-break behaviour for custom secret storage", "[secret][.]") { REQUIRE_NO_FAIL(con.Query("set allow_persistent_secrets=true;")); + // Set custom secret path to prevent interference with other tests + auto secret_dir = TestCreatePath("custom_secret_storage_cpp_2"); + REQUIRE_NO_FAIL(con.Query("set secret_directory='" + secret_dir + "'")); + // Register custom secret storage auto &secret_manager = duckdb::SecretManager::Get(*db.instance); diff --git a/test/sql/aggregate/aggregates/aggregate_limit.test_slow b/test/sql/aggregate/aggregates/aggregate_limit.test_slow new file mode 100644 index 000000000000..436d9c9d4fad --- /dev/null +++ b/test/sql/aggregate/aggregates/aggregate_limit.test_slow @@ -0,0 +1,16 @@ +# name: test/sql/aggregate/aggregates/aggregate_limit.test_slow +# description: Test running a limit over a big aggregate +# group: [aggregates] + +statement ok +SET threads=8 + +statement ok +CREATE TABLE big_tbl AS SELECT i, concat('thisisalongstring', i) as str FROM range(10000000) t(i); + +loop i 0 10 + +statement ok +SELECT i, str, COUNT(*) FROM big_tbl GROUP BY ALL LIMIT 10 + +endloop diff --git a/test/sql/aggregate/aggregates/test_arg_min_max.test b/test/sql/aggregate/aggregates/test_arg_min_max.test index d232b6335384..906c80db81ec 100644 --- a/test/sql/aggregate/aggregates/test_arg_min_max.test +++ b/test/sql/aggregate/aggregates/test_arg_min_max.test @@ -82,6 +82,22 @@ select argmin(a,b), argmax(a,b) from args group by a%2 ORDER BY argmin(a,b); 1 1 2 10 +# Avoid lossy promotion from hugeint to double +statement ok +CREATE TABLE hugeints (z HUGEINT); + +statement ok +insert into hugeints values + (-168123123123200005565479978461862821890), + (-168123123123200005565479978461862821889), + (-168123123123200005565479978461862821888), + (-168123123123200005565479978461862821893) + +query I +SELECT min(z) - arg_min(z,z) FROM hugeints; +---- +0 + statement ok CREATE TABLE blobs (b BYTEA, a BIGINT); diff --git a/test/sql/aggregate/distinct/distinct_on_nulls.test b/test/sql/aggregate/distinct/distinct_on_nulls.test new file mode 100644 index 000000000000..6c45db9029b0 --- /dev/null +++ b/test/sql/aggregate/distinct/distinct_on_nulls.test @@ -0,0 +1,83 @@ +# name: test/sql/aggregate/distinct/distinct_on_nulls.test +# description: Test DISTINCT ON with NULL values +# group: [distinct] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE integers(i INTEGER, j INTEGER); + +statement ok +INSERT INTO integers VALUES (2, 3), (4, 5), (2, NULL), (NULL, NULL); + +query II +SELECT DISTINCT ON (i) i, j FROM integers ORDER BY j +---- +2 3 +4 5 +NULL NULL + +query II +SELECT DISTINCT ON (i) i, j FROM integers ORDER BY i, j +---- +2 3 +4 5 +NULL NULL + +query II +SELECT DISTINCT ON (i) i, j FROM integers ORDER BY i NULLS FIRST, j NULLS FIRST +---- +NULL NULL +2 NULL +4 5 + +query II +SELECT DISTINCT ON (i) i, j FROM integers ORDER BY i, j NULLS FIRST +---- +2 NULL +4 5 +NULL NULL + +# multi-way sort and ties +statement ok +CREATE TABLE distinct_on_test(key INTEGER, v1 VARCHAR, v2 INTEGER[], v3 INTEGER); + +statement ok +INSERT INTO distinct_on_test VALUES + (1, 'hello', ARRAY[1], 42), -- ASC + (1, 'hello', ARRAY[1], 42), + (1, 'hello', ARRAY[1], 43), -- DESC + (2, NULL, NULL, 0), -- ASC + (2, NULL, NULL, 1), + (2, NULL, NULL, NULL), -- DESC + (3, 'thisisalongstring', NULL, 0), -- ASC + (3, 'thisisalongstringbutlonger', NULL, 1), + (3, 'thisisalongstringbutevenlonger', ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9], 2) -- DESC +; + +query IIII +SELECT DISTINCT ON (key) * FROM distinct_on_test ORDER BY key, v1, v2, v3 +---- +1 hello [1] 42 +2 NULL NULL 0 +3 thisisalongstring NULL 0 + +query IIII +SELECT DISTINCT ON (key) * FROM distinct_on_test WHERE key <> 2 ORDER BY key, v1, v2, v3 +---- +1 hello [1] 42 +3 thisisalongstring NULL 0 + +query IIII +SELECT DISTINCT ON (key) * FROM distinct_on_test ORDER BY key, v1 DESC NULLS FIRST, v2 DESC NULLS FIRST, v3 DESC NULLS FIRST +---- +1 hello [1] 43 +2 NULL NULL NULL +3 thisisalongstringbutlonger NULL 1 + +query IIII +SELECT DISTINCT ON (key) * FROM distinct_on_test WHERE key <> 2 ORDER BY key, v1 DESC NULLS FIRST, v2 DESC NULLS FIRST, v3 DESC NULLS FIRST +---- +1 hello [1] 43 +3 thisisalongstringbutlonger NULL 1 diff --git a/test/sql/aggregate/distinct/issue8505.test b/test/sql/aggregate/distinct/issue8505.test index 2f1be21e50bc..a3d8e4928ae8 100644 --- a/test/sql/aggregate/distinct/issue8505.test +++ b/test/sql/aggregate/distinct/issue8505.test @@ -11,14 +11,14 @@ explain select record_key from ( select distinct on (id, provider) id, provider, record_key from test order by id, provider, record_rank desc, record_date ) ---- -physical_plan :.*HASH_GROUP_BY.*#0.*#1.*first\(#2, #3, #4\).*first\(#5, #6, #7\).*first\(#8, #9, #10\).* +physical_plan :.*HASH_GROUP_BY.*#0.*#1.*arg_min_null.* # this query was slow, but should be equivalent to the first query query II explain select distinct on (id, provider) record_key from test order by id, provider, record_rank desc, record_date ---- -physical_plan :.*HASH_GROUP_BY.*#0.*#1.*first\(#2, #3, #4\).*first\(#5, #6, #7\).*first\(#8, #9, #10\).* +physical_plan :.*HASH_GROUP_BY.*#0.*#1.*arg_min_null.* # the problem was that our aggregate became way too big in the second case because we didn't de-duplicate columns # this regex checks that they both have the same 'minimal' aggregate (this test is a bit fragile to binder changes tho) diff --git a/test/sql/attach/attach_reserved.test b/test/sql/attach/attach_reserved.test new file mode 100644 index 000000000000..986f7801ce2b --- /dev/null +++ b/test/sql/attach/attach_reserved.test @@ -0,0 +1,30 @@ +# name: test/sql/attach/attach_reserved.test +# description: Test ATTACH of reserved names +# group: [attach] + +require noforcestorage + +statement ok +PRAGMA enable_verification + +# attach a new database called temp +statement ok +ATTACH DATABASE '__TEST_DIR__/temp.db'; + +# we alias "temp" and "main" to use "_db" instead +statement ok +CREATE TABLE temp_db.integers(i INTEGER); + +statement ok +DETACH temp_db; + +# explicitly selecting these aliases leads to an error +statement error +ATTACH DATABASE ':memory:' AS temp; +---- +reserved name + +statement error +ATTACH DATABASE ':memory:' AS main; +---- +reserved name diff --git a/test/sql/cast/cast_error_location.test b/test/sql/cast/cast_error_location.test new file mode 100644 index 000000000000..eec6206331ab --- /dev/null +++ b/test/sql/cast/cast_error_location.test @@ -0,0 +1,174 @@ +# name: test/sql/cast/cast_error_location.test +# description: Test reporting error location of casts +# group: [cast] + +statement ok +PRAGMA enable_verification + +# unimplemented cast +statement error +SELECT 1::STRUCT(i INTEGER) +---- +^ + +# out of range integer cast +statement error +SELECT 1000::utinyint +---- +^ + +# string cast +statement error +SELECT 'hello'::int +---- +^ + +# numeric -> decimal cast +statement error +SELECT 1000::decimal(2,1) +---- +^ + +# decimal -> decimal cast +statement error +SELECT 1000.0::decimal(5,1)::decimal(2,1) +---- +^ + +# list cast +statement error +SELECT [1000]::utinyint[] +---- +^ + +# struct cast +statement error +SELECT {'x': 1000}::row(x tinyint) +---- +^ + +# double -> float +statement error +select 1e308::float +---- +^ + +# double -> hugeint +statement error +select 1e308::hugeint +---- +^ + +# hugeint -> int +statement error +select 1000000000000000000000000000000::hugeint::int +---- +^ + +# automatically added cast +statement error +select nth_value(42, 'hello') over () +---- +^ + +# dates +statement error +select '1900'::date +---- +^ + +statement error +select 42::utinyint + 'hello' +---- +^ + +# bit +statement error +SELECT bitstring('1', 9)::BOOL; +---- +^ + +# array +statement error +SELECT [1,2,3]::INT[2] +---- +^ + +# blob +statement error +SELECT '\x'::BYTEA +---- +^ + +# now with a table +statement ok +CREATE TABLE cast_table(i INTEGER, s VARCHAR, d DECIMAL(5,1), l INT[], int_struct ROW(i INTEGER), dbl DOUBLE, hge HUGEINT, invalid_blob_str VARCHAR); + +statement ok +INSERT INTO cast_table VALUES (1000, 'hello', 1000.0, [1000], {'i': 1000}, 1e308, 1000000000000000000000000000000, '\x') + +# out of range integer cast +statement error +SELECT i::utinyint from cast_table +---- +^ + +# string cast +statement error +SELECT s::int FROM cast_table +---- +^ + +# numeric -> decimal cast +statement error +SELECT i::decimal(2,1) FROM cast_table +---- +^ + +# decimal -> decimal cast +statement error +SELECT d::decimal(2,1) FROM cast_table +---- +^ + +# list cast +statement error +SELECT l::utinyint[] FROM cast_table +---- +^ + +# struct cast +statement error +SELECT int_struct::row(x tinyint) FROM cast_table +---- +^ + +# double -> float +statement error +select dbl::float FROM cast_table +---- +^ + +# double -> hugeint +statement error +select dbl::hugeint FROM cast_table +---- +^ + +# hugeint -> int +statement error +select hge::hugeint::int FROM cast_table +---- +^ + +# array +statement error +SELECT l::INT[3] FROM cast_table +---- +^ + +# blob +statement error +SELECT invalid_blob_str::BYTEA FROM cast_table +---- +^ \ No newline at end of file diff --git a/test/sql/cast/string_to_list_cast.test b/test/sql/cast/string_to_list_cast.test index 24d1b9c0b175..45a84603810a 100644 --- a/test/sql/cast/string_to_list_cast.test +++ b/test/sql/cast/string_to_list_cast.test @@ -474,7 +474,7 @@ statement ok CREATE TABLE int_list(col INT[]); statement ok -COPY (SELECT [1,2,3]) TO '__TEST_DIR__/int_list.csv' (Header 0); +COPY (SELECT [1,2,3]) TO '__TEST_DIR__/int_list.csv'; statement ok COPY int_list FROM '__TEST_DIR__/int_list.csv'; diff --git a/test/sql/cast/string_to_map_cast.test b/test/sql/cast/string_to_map_cast.test index d0d9c350f0fd..f1e4b983cfec 100644 --- a/test/sql/cast/string_to_map_cast.test +++ b/test/sql/cast/string_to_map_cast.test @@ -36,7 +36,7 @@ SELECT '{"key=A"=Duck, "key=B"="hello=world"}'::MAP(VARCHAR, VARCHAR) statement error SELECT '{a=1, b=2, a=3}'::MAP(VARCHAR, INT) ---- -Invalid Input Error: Map keys have to be unique +Map keys must be unique # Nested Maps @@ -324,7 +324,7 @@ statement ok CREATE TABLE assembled_maps(col1 MAP(INT, VARCHAR)); statement ok -COPY (SELECT '{8="hello, DuckDB"}') TO '__TEST_DIR__/assembled_maps.csv' (Header 0); +COPY (SELECT '{8="hello, DuckDB"}') TO '__TEST_DIR__/assembled_maps.csv'; statement ok COPY assembled_maps FROM '__TEST_DIR__/assembled_maps.csv'; diff --git a/test/sql/cast/string_to_struct_cast.test b/test/sql/cast/string_to_struct_cast.test index de0f207ce3a1..9d6c6646bf3a 100644 --- a/test/sql/cast/string_to_struct_cast.test +++ b/test/sql/cast/string_to_struct_cast.test @@ -386,7 +386,7 @@ statement ok CREATE TABLE assorted_structs(col1 STRUCT(a INT, b VARCHAR)); statement ok -COPY (SELECT '{a: 8, b: "hello, DuckDB"}') TO '__TEST_DIR__/assorted_structs.csv' (Header 0); +COPY (SELECT '{a: 8, b: "hello, DuckDB"}') TO '__TEST_DIR__/assorted_structs.csv'; statement ok COPY assorted_structs FROM '__TEST_DIR__/assorted_structs.csv'; diff --git a/test/sql/cast/test_string_cast.test b/test/sql/cast/test_string_cast.test index 730f865fabfe..d558932c0e61 100644 --- a/test/sql/cast/test_string_cast.test +++ b/test/sql/cast/test_string_cast.test @@ -231,3 +231,30 @@ SELECT '0'::${inttype}; 0 endloop + +# Casting infinities of various timestamp units + +foreach ts timestamp timestamp_ms timestamp_ns timestamp_s timestamptz + +query I +SELECT ('infinity'::${ts})::VARCHAR +---- +infinity + +query I +SELECT ('-infinity'::${ts})::VARCHAR +---- +-infinity + +query I +SELECT TRY_CAST('infinity' AS ${ts}) +---- +infinity + +query I +SELECT TRY_CAST('-infinity' AS ${ts}) +---- +-infinity + +#ts +endloop diff --git a/test/sql/catalog/comment_on.test b/test/sql/catalog/comment_on.test index 255099ca57be..03956e22f3d8 100644 --- a/test/sql/catalog/comment_on.test +++ b/test/sql/catalog/comment_on.test @@ -6,8 +6,6 @@ load __TEST_DIR__/comment_on.db ### Generic tests -# TODO: we need further testing of comments not being modified as catalog entries are altered - # String literal or NULL only statement error COMMENT ON TABLE test IS 1337 @@ -37,6 +35,37 @@ select comment from duckdb_tables() where table_name='test_table'; ---- very gezellige table +# Apply a set of alters to the table to ensure it is not corrupted +statement ok +ALTER TABLE test_table ADD COLUMN new_col INTEGER + +statement ok +ALTER TABLE test_table ALTER new_col SET DATA TYPE TINYINT + +statement ok +ALTER TABLE test_table ALTER new_col SET DATA TYPE TINYINT + +statement ok +ALTER TABLE test_table ALTER COLUMN new_col SET DEFAULT 1 + +statement ok +ALTER TABLE test_table ALTER COLUMN new_col DROP DEFAULT + +statement ok +ALTER TABLE test_table ALTER new_col SET DATA TYPE TINYINT + +statement ok +ALTER TABLE test_table RENAME COLUMN new_col TO new_col_2 + +statement ok +ALTER TABLE test_table DROP COLUMN new_col_2 + +statement ok +ALTER TABLE test_table RENAME TO test_table_2 + +statement ok +ALTER TABLE test_table_2 RENAME TO test_table + restart query I @@ -76,6 +105,12 @@ select comment from duckdb_views() where view_name='test_view'; ---- very gezellige view +statement ok +ALTER VIEW test_view RENAME TO test_view_2 + +statement ok +ALTER VIEW test_view_2 RENAME TO test_view + restart query I @@ -89,6 +124,28 @@ SELECT * FROM test_view ---- 1 +### Comment on view column + +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +NULL + +statement ok +COMMENT ON COLUMN test_view.test_view_column IS 'very gezellige viewcolumn' + +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +very gezellige viewcolumn + +restart + +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +very gezellige viewcolumn + statement ok DROP VIEW test_view @@ -191,7 +248,7 @@ SELECT 1::test_type as val; statement ok DROP TYPE test_type -### Comment on column +### Comment on table column query I select comment from duckdb_columns() where column_name='test_table_column'; diff --git a/test/sql/catalog/comment_on_column.test b/test/sql/catalog/comment_on_column.test new file mode 100644 index 000000000000..0d3516f186a3 --- /dev/null +++ b/test/sql/catalog/comment_on_column.test @@ -0,0 +1,80 @@ +# name: test/sql/catalog/comment_on_column.test +# description: Test COMMENT ON COLUMN +# group: [catalog] + +load __TEST_DIR__/comment_on_column.db + +statement ok +CREATE TABLE test_table as SELECT 1 as test_table_column + +### Comment on column from table +query I +select comment from duckdb_columns() where column_name='test_table_column'; +---- +NULL + +statement ok +COMMENT ON COLUMN test_table.test_table_column IS 'very gezellige column' + +query I +select comment from duckdb_columns() where column_name='test_table_column'; +---- +very gezellige column + +restart + +query I +select comment from duckdb_columns() where column_name='test_table_column'; +---- +very gezellige column + +statement ok +CREATE VIEW test_view AS SELECT test_table_column as test_view_column FROM test_table; + +### Comment on column from table +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +NULL + +statement ok +COMMENT ON COLUMN test_view.test_view_column IS 'very gezellige view column' + +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +very gezellige view column + +restart + +query I +select comment from duckdb_columns() where column_name='test_view_column'; +---- +very gezellige view column + +query IIII +SELECT database_name, table_name, column_name, comment FROM duckdb_columns() where internal is false +---- +comment_on_column test_table test_table_column very gezellige column +comment_on_column test_view test_view_column very gezellige view column + +# check some erroneous inputs +statement error +COMMENT ON COLUMN bla.bloe.blie.blo IS NULL +---- +Catalog "bla" does not exist! + +statement error +COMMENT ON COLUMN blie.blo IS NULL +---- +Table with name blie does not exist! + +statement error +COMMENT ON COLUMN test_view.test_table_column IS NULL +---- +View "test_view" does not have a column with name "test_table_column" + +statement error +COMMENT ON COLUMN test_table.test_view_column IS NULL +---- +Table "test_table" does not have a column with name "test_view_column" \ No newline at end of file diff --git a/test/sql/catalog/comment_on_pg_description.test b/test/sql/catalog/comment_on_pg_description.test index 325872be7530..763885e79fd7 100644 --- a/test/sql/catalog/comment_on_pg_description.test +++ b/test/sql/catalog/comment_on_pg_description.test @@ -14,14 +14,9 @@ COMMENT ON COLUMN test.a IS 'comment-2' statement ok CREATE VIEW test_view AS FROM test; -# TODO comment on view column -mode skip - statement ok COMMENT ON COLUMN test_view.a IS 'comment-2.5' -mode unskip - statement ok CREATE INDEX test_index ON test(a) @@ -74,6 +69,15 @@ WHERE pg.objsubid=1 AND ddb.table_name='test' ---- comment-2 comment-2 +query II +SELECT ddb.comment, pg.description +FROM duckdb_columns AS ddb +LEFT JOIN pg_description AS pg + ON pg.classoid=ddb.database_oid AND pg.objoid=ddb.table_oid +WHERE pg.objsubid=1 AND ddb.table_name='test_view' +---- +comment-2.5 comment-2.5 + query II SELECT ddb.comment, pg.description FROM duckdb_views AS ddb diff --git a/test/sql/catalog/test_extension_suggestion.test b/test/sql/catalog/test_extension_suggestion.test index dc1e2445a265..dcae92b8b147 100644 --- a/test/sql/catalog/test_extension_suggestion.test +++ b/test/sql/catalog/test_extension_suggestion.test @@ -9,4 +9,4 @@ require no_extension_autoloading statement error SELECT get_substrait("select 1"); ---- -it exists in the substrait extension +Catalog Error: Scalar Function with name "get_substrait" is not in the catalog, a function by this name exists in the substrait extension, but it's of a different type, namely Table Function diff --git a/test/sql/copy/csv/auto/test_auto_8573.test b/test/sql/copy/csv/auto/test_auto_8573.test index cd901f672096..e6158b583a0d 100644 --- a/test/sql/copy/csv/auto/test_auto_8573.test +++ b/test/sql/copy/csv/auto/test_auto_8573.test @@ -6,11 +6,11 @@ statement ok PRAGMA verify_parallelism query II -SELECT typeof(bignumber), typeof(bignumber::DECIMAL(25,3)) FROM read_csv('data/csv/big_number.csv', HEADER=TRUE, COLUMNS={'bignumber': 'DECIMAL(25,3)'}, QUOTE='"', DELIM=','); +SELECT typeof(bignumber), typeof(bignumber::DECIMAL(25,3)) FROM read_csv('data/csv/big_number.csv', COLUMNS={'bignumber': 'DECIMAL(25,3)'}, QUOTE='"', DELIM=','); ---- DECIMAL(25,3) DECIMAL(25,3) query II -SELECT typeof(bignumber), typeof(bignumber::DECIMAL(25,3)) FROM read_csv_auto('data/csv/big_number.csv', HEADER=TRUE, COLUMNS={'bignumber': 'DECIMAL(25,3)'}, QUOTE='"', DELIM=','); +SELECT typeof(bignumber), typeof(bignumber::DECIMAL(25,3)) FROM read_csv_auto('data/csv/big_number.csv', COLUMNS={'bignumber': 'DECIMAL(25,3)'}, QUOTE='"', DELIM=','); ---- DECIMAL(25,3) DECIMAL(25,3) diff --git a/test/sql/copy/csv/auto/test_auto_8649.test b/test/sql/copy/csv/auto/test_auto_8649.test index 0496950b167f..e47c22afd55b 100644 --- a/test/sql/copy/csv/auto/test_auto_8649.test +++ b/test/sql/copy/csv/auto/test_auto_8649.test @@ -7,7 +7,7 @@ PRAGMA verify_parallelism # Sample query I -SELECT * FROM read_csv_auto("data/csv/dim0.csv", header = 1) ; +SELECT * FROM read_csv_auto("data/csv/dim0.csv") ; ---- T 0 diff --git a/test/sql/copy/csv/auto/test_auto_ontime.test b/test/sql/copy/csv/auto/test_auto_ontime.test index e038a5b2bd29..b0447cb422d3 100644 --- a/test/sql/copy/csv/auto/test_auto_ontime.test +++ b/test/sql/copy/csv/auto/test_auto_ontime.test @@ -6,7 +6,7 @@ statement ok CREATE TABLE ontime(year SMALLINT, quarter SMALLINT, month SMALLINT, dayofmonth SMALLINT, dayofweek SMALLINT, flightdate DATE, uniquecarrier CHAR(7), airlineid DECIMAL(8,2), carrier CHAR(2), tailnum VARCHAR(50), flightnum VARCHAR(10), originairportid INTEGER, originairportseqid INTEGER, origincitymarketid INTEGER, origin CHAR(5), origincityname VARCHAR(100), originstate CHAR(2), originstatefips VARCHAR(10), originstatename VARCHAR(100), originwac DECIMAL(8,2), destairportid INTEGER, destairportseqid INTEGER, destcitymarketid INTEGER, dest CHAR(5), destcityname VARCHAR(100), deststate CHAR(2), deststatefips VARCHAR(10), deststatename VARCHAR(100), destwac DECIMAL(8,2), crsdeptime DECIMAL(8,2), deptime DECIMAL(8,2), depdelay DECIMAL(8,2), depdelayminutes DECIMAL(8,2), depdel15 DECIMAL(8,2), departuredelaygroups DECIMAL(8,2), deptimeblk VARCHAR(20), taxiout DECIMAL(8,2), wheelsoff DECIMAL(8,2), wheelson DECIMAL(8,2), taxiin DECIMAL(8,2), crsarrtime DECIMAL(8,2), arrtime DECIMAL(8,2), arrdelay DECIMAL(8,2), arrdelayminutes DECIMAL(8,2), arrdel15 DECIMAL(8,2), arrivaldelaygroups DECIMAL(8,2), arrtimeblk VARCHAR(20), cancelled DECIMAL(8,2), cancellationcode CHAR(1), diverted DECIMAL(8,2), crselapsedtime DECIMAL(8,2), actualelapsedtime DECIMAL(8,2), airtime DECIMAL(8,2), flights DECIMAL(8,2), distance DECIMAL(8,2), distancegroup DECIMAL(8,2), carrierdelay DECIMAL(8,2), weatherdelay DECIMAL(8,2), nasdelay DECIMAL(8,2), securitydelay DECIMAL(8,2), lateaircraftdelay DECIMAL(8,2), firstdeptime VARCHAR(10), totaladdgtime VARCHAR(10), longestaddgtime VARCHAR(10), divairportlandings VARCHAR(10), divreacheddest VARCHAR(10), divactualelapsedtime VARCHAR(10), divarrdelay VARCHAR(10), divdistance VARCHAR(10), div1airport VARCHAR(10), div1aiportid INTEGER, div1airportseqid INTEGER, div1wheelson VARCHAR(10), div1totalgtime VARCHAR(10), div1longestgtime VARCHAR(10), div1wheelsoff VARCHAR(10), div1tailnum VARCHAR(10), div2airport VARCHAR(10), div2airportid INTEGER, div2airportseqid INTEGER, div2wheelson VARCHAR(10), div2totalgtime VARCHAR(10), div2longestgtime VARCHAR(10), div2wheelsoff VARCHAR(10), div2tailnum VARCHAR(10), div3airport VARCHAR(10), div3airportid INTEGER, div3airportseqid INTEGER, div3wheelson VARCHAR(10), div3totalgtime VARCHAR(10), div3longestgtime VARCHAR(10), div3wheelsoff VARCHAR(10), div3tailnum VARCHAR(10), div4airport VARCHAR(10), div4airportid INTEGER, div4airportseqid INTEGER, div4wheelson VARCHAR(10), div4totalgtime VARCHAR(10), div4longestgtime VARCHAR(10), div4wheelsoff VARCHAR(10), div4tailnum VARCHAR(10), div5airport VARCHAR(10), div5airportid INTEGER, div5airportseqid INTEGER, div5wheelson VARCHAR(10), div5totalgtime VARCHAR(10), div5longestgtime VARCHAR(10), div5wheelsoff VARCHAR(10), div5tailnum VARCHAR(10)); query I -COPY ontime FROM 'test/sql/copy/csv/data/real/ontime_sample.csv' (HEADER TRUE); +COPY ontime FROM 'test/sql/copy/csv/data/real/ontime_sample.csv'; ---- 9 @@ -31,7 +31,7 @@ statement ok CREATE TABLE ontime2 AS SELECT * FROM ontime LIMIT 0 statement ok -COPY ontime2 FROM 'test/sql/copy/csv/data/real/ontime_sample.csv' (HEADER TRUE); +COPY ontime2 FROM 'test/sql/copy/csv/data/real/ontime_sample.csv'; query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII (SELECT * FROM ontime EXCEPT SELECT * FROM ontime2) diff --git a/test/sql/copy/csv/auto/test_date_format_bug_linux.test b/test/sql/copy/csv/auto/test_date_format_bug_linux.test index 10651f42ca6b..f21c597e00e4 100644 --- a/test/sql/copy/csv/auto/test_date_format_bug_linux.test +++ b/test/sql/copy/csv/auto/test_date_format_bug_linux.test @@ -4,7 +4,6 @@ query I SELECT * FROM read_csv_auto('test/sql/copy/csv/data/auto/date_format_bug_linux.csv') ---- -test 8cb123cb8 34fd321 fg5391jn4 diff --git a/test/sql/copy/csv/auto/test_header_detection.test b/test/sql/copy/csv/auto/test_header_detection.test index 4eddc4346337..d60a1deab5db 100644 --- a/test/sql/copy/csv/auto/test_header_detection.test +++ b/test/sql/copy/csv/auto/test_header_detection.test @@ -55,7 +55,7 @@ DROP TABLE test; # CSV file with two lines both only strings statement ok -CREATE TABLE test AS SELECT * FROM read_csv_auto ('test/sql/copy/csv/data/auto/varchar_multi_line.csv'); +CREATE TABLE test AS SELECT * FROM read_csv_auto ('test/sql/copy/csv/data/auto/varchar_multi_line.csv', header = 0); query TTT SELECT * FROM test ORDER BY column0; @@ -68,7 +68,7 @@ DROP TABLE test; # CSV file with one line, two columns, only strings statement ok -CREATE TABLE test AS SELECT * FROM read_csv_auto ('test/sql/copy/csv/data/auto/varchar_single_line.csv'); +CREATE TABLE test AS SELECT * FROM read_csv_auto ('test/sql/copy/csv/data/auto/varchar_single_line.csv', header = 0); query TT SELECT column0, column1 FROM test ORDER BY column0; @@ -97,7 +97,6 @@ CREATE TABLE test AS SELECT * FROM read_csv_auto ('test/sql/copy/csv/data/auto/s query T SELECT * FROM test; ---- -Test statement ok DROP TABLE test; @@ -132,3 +131,44 @@ SELECT id FROM test; statement ok DROP TABLE test; + +statement ok +CREATE TABLE my_varchars(a VARCHAR, b VARCHAR, c VARCHAR); + +statement ok +INSERT INTO my_varchars VALUES ('Hello', 'Beautiful', 'World'); + +statement ok +COPY my_varchars TO '__TEST_DIR__/varchar_header.csv' (HEADER 1); + +statement ok +COPY my_varchars TO '__TEST_DIR__/varchar_no_header.csv' (HEADER 0); + +statement ok +COPY my_varchars FROM '__TEST_DIR__/varchar_header.csv'; + +statement ok +COPY my_varchars FROM '__TEST_DIR__/varchar_no_header.csv'; + +query III +FROM my_varchars; +---- +Hello Beautiful World +Hello Beautiful World +Hello Beautiful World + +statement ok +COPY my_varchars TO '__TEST_DIR__/big_varchar.csv'; + +statement ok +COPY my_varchars FROM '__TEST_DIR__/big_varchar.csv'; + +query III +FROM my_varchars; +---- +Hello Beautiful World +Hello Beautiful World +Hello Beautiful World +Hello Beautiful World +Hello Beautiful World +Hello Beautiful World \ No newline at end of file diff --git a/test/sql/copy/csv/auto/test_sniffer_blob.test b/test/sql/copy/csv/auto/test_sniffer_blob.test index 40b054a1bd44..3e27210a89bd 100644 --- a/test/sql/copy/csv/auto/test_sniffer_blob.test +++ b/test/sql/copy/csv/auto/test_sniffer_blob.test @@ -11,7 +11,7 @@ Auto Type Candidate of type BLOB is not accepted as a valid input # All this is cool and should work. query I -select count(*) from read_csv('test/sql/copy/csv/data/test/blob.csv',types=['blob']) +select count(*) from read_csv('test/sql/copy/csv/data/test/blob.csv',types=['blob'], header = 0) ---- 1 diff --git a/test/sql/copy/csv/auto/test_type_candidates.test b/test/sql/copy/csv/auto/test_type_candidates.test index 4904f0033f23..ddb51ca7b9c2 100644 --- a/test/sql/copy/csv/auto/test_type_candidates.test +++ b/test/sql/copy/csv/auto/test_type_candidates.test @@ -36,12 +36,12 @@ BIGINT DOUBLE VARCHAR query III -SELECT * FROM read_csv_auto ('__TEST_DIR__/csv_file.csv', auto_type_candidates=['VARCHAR']); +SELECT * FROM read_csv_auto ('__TEST_DIR__/csv_file.csv', auto_type_candidates=['VARCHAR'], header = 0); ---- 1 1.1 bla query TTT -SELECT typeof(column0), typeof(column1), typeof(column2) FROM read_csv_auto ('__TEST_DIR__/csv_file.csv', auto_type_candidates=['VARCHAR']); +SELECT typeof(column0), typeof(column1), typeof(column2) FROM read_csv_auto ('__TEST_DIR__/csv_file.csv', auto_type_candidates=['VARCHAR'], header = 0); ---- VARCHAR VARCHAR VARCHAR diff --git a/test/sql/copy/csv/batched_write/batch_csv_mixed_batches.test_slow b/test/sql/copy/csv/batched_write/batch_csv_mixed_batches.test_slow index b0027d6ae156..cc9799af8b04 100644 --- a/test/sql/copy/csv/batched_write/batch_csv_mixed_batches.test_slow +++ b/test/sql/copy/csv/batched_write/batch_csv_mixed_batches.test_slow @@ -125,7 +125,7 @@ COPY v4 TO '__TEST_DIR__/mixed_batches_v4.csv' (HEADER) 0 query I -CREATE TABLE mixed_batches_v4 AS SELECT i::BIGINT as i FROM read_csv_auto('__TEST_DIR__/mixed_batches_v4.csv', header=True) +CREATE TABLE mixed_batches_v4 AS SELECT i::BIGINT as i FROM read_csv_auto('__TEST_DIR__/mixed_batches_v4.csv') ---- 0 diff --git a/test/sql/copy/csv/code_cov/csv_dialect_detection.test b/test/sql/copy/csv/code_cov/csv_dialect_detection.test index d289e54f4dd7..faad6eeb0007 100644 --- a/test/sql/copy/csv/code_cov/csv_dialect_detection.test +++ b/test/sql/copy/csv/code_cov/csv_dialect_detection.test @@ -6,12 +6,12 @@ statement ok PRAGMA enable_verification query I -SELECT * from read_csv_auto('data/csv/escape.csv', escape=']') +SELECT * from read_csv_auto('data/csv/escape.csv', escape=']', header = 0) ---- "bla" query I -SELECT * from read_csv_auto('data/csv/escape.csv') +SELECT * from read_csv_auto('data/csv/escape.csv', header = 0) ---- "]"bla]"" diff --git a/test/sql/copy/csv/code_cov/csv_state_machine_invalid_utf.test b/test/sql/copy/csv/code_cov/csv_state_machine_invalid_utf.test index bd8f903b8d32..15d5ae79e949 100644 --- a/test/sql/copy/csv/code_cov/csv_state_machine_invalid_utf.test +++ b/test/sql/copy/csv/code_cov/csv_state_machine_invalid_utf.test @@ -1,11 +1,209 @@ # name: test/sql/copy/csv/code_cov/csv_state_machine_invalid_utf.test -# description: Test to reach error of invalidate state machine due to utf8 incompatible data +# description: Tests related to invalid UTF-8 detection # group: [code_cov] +# Error during sniffing +statement error +from read_csv_auto('test/sql/copy/csv/data/test/invalid_utf.csv') +---- +Invalid unicode (byte sequence mismatch) detected + +statement error +from read_csv_auto('test/sql/copy/csv/data/test/invalid_utf.csv') +---- +CSV Error on Line: 1 + +# Error during parsing +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',') +---- +Invalid unicode (byte sequence mismatch) detected. + + +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',') +---- +CSV Error on Line: 1 + +# Test ignore errors over more complex file +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_complex.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',') +---- +CSV Error on Line: 11 + +query III +from read_csv('test/sql/copy/csv/data/test/invalid_utf_complex.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', ignore_errors=true) +---- +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid + +# Test error in the second vector statement ok -PRAGMA enable_verification +create table t as from read_csv('test/sql/copy/csv/data/test/invalid_utf_big.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', ignore_errors=true) + +query I +select count(*) from t +---- +3030 statement error -select * from read_csv_auto('test/sql/copy/csv/data/test/invalid_utf.csv') +from read_csv('test/sql/copy/csv/data/test/invalid_utf_big.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',') ---- -Invalid unicode (byte sequence mismatch) detected +CSV Error on Line: 3001 + +# Test borked utf-8 within quotes +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_quoted.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', quote = '"') +---- +CSV Error on Line: 11 + +query III +from read_csv('test/sql/copy/csv/data/test/invalid_utf_complex.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', quote = '"', ignore_errors=true) +---- +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid + +# Test Invalid Header +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_header.csv', delim = ',', quote = '"') +---- +Invalid unicode (byte sequence mismatch) detected. + +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_header.csv', header=1, delim = ',', quote = '"') +---- +Invalid unicode (byte sequence mismatch) detected. + +query III +from read_csv('test/sql/copy/csv/data/test/invalid_utf_header.csv', header=1, delim = ',', quote = '"', ignore_errors = true) +---- +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid + +# Test invalid unicode in between a quoted newline +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_quoted_nl.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', quote = '"') +---- +CSV Error on Line: 11 + +query III +from read_csv('test/sql/copy/csv/data/test/invalid_utf_quoted_nl.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', quote = '"', ignore_errors=true) +---- +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid + +# Test error between buffers +statement error +from read_csv('test/sql/copy/csv/data/test/invalid_utf_complex.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', quote = '"', buffer_size = 198) +---- +CSV Error on Line: 11 + +# Test error between buffers (with ignore_errors set) +query III +from read_csv('test/sql/copy/csv/data/test/invalid_utf_complex.csv',columns = {'col1': 'VARCHAR','col2': 'VARCHAR','col3': 'VARCHAR'}, auto_detect=false, header = 0, delim = ',', ignore_errors=true, buffer_size = 198) +---- +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid +valid valid valid + + +# We get a casting error +statement error +SELECT * FROM read_csv('test/sql/copy/csv/data/test/invalid_utf_list.csv', header=0, auto_detect=false, quote = '"',columns = {'col1': 'INTEGER[]'} ) +---- +Could not convert string + +statement error +SELECT * FROM read_csv('test/sql/copy/csv/data/test/invalid_utf_list.csv', header=0, auto_detect=false, quote = '"',columns = {'col1': 'INTEGER[]'} ) +---- +CSV Error on Line: 11 + +# We get a invalid unicode error +statement error +SELECT * FROM read_csv('test/sql/copy/csv/data/test/invalid_utf_list.csv', header=0, auto_detect=false, quote = '"',columns = {'col1': 'VARCHAR'} ) +---- +Invalid unicode (byte sequence mismatch) detected. + +statement error +SELECT * FROM read_csv('test/sql/copy/csv/data/test/invalid_utf_list.csv', header=0, auto_detect=false, quote = '"',columns = {'col1': 'VARCHAR'} ) +---- +CSV Error on Line: 11 \ No newline at end of file diff --git a/test/sql/copy/csv/code_cov/csv_type_detection.test b/test/sql/copy/csv/code_cov/csv_type_detection.test index 16ad1600e294..d3007c7fc0f8 100644 --- a/test/sql/copy/csv/code_cov/csv_type_detection.test +++ b/test/sql/copy/csv/code_cov/csv_type_detection.test @@ -23,5 +23,4 @@ select * from read_csv_auto('data/csv/small_file.csv', sample_size=1) query I select * from read_csv_auto('data/csv/date_format_percentage.csv') ---- -test 336%584%3205 diff --git a/test/sql/copy/csv/code_cov/csv_type_refinement.test b/test/sql/copy/csv/code_cov/csv_type_refinement.test index 978f2704ed89..7f2869f77f0d 100644 --- a/test/sql/copy/csv/code_cov/csv_type_refinement.test +++ b/test/sql/copy/csv/code_cov/csv_type_refinement.test @@ -11,6 +11,6 @@ select count(*) from read_csv_auto('data/csv/borked_date.csv', header = 0) 2070 query I -select count(*) from read_csv_auto('data/csv/big_not_bool.csv') +select count(*) from read_csv_auto('data/csv/big_not_bool.csv', header = 0) ---- 2450 diff --git a/test/sql/copy/csv/csv_decimal_separator.test b/test/sql/copy/csv/csv_decimal_separator.test index 14fcfc94e646..a171c09e10a2 100644 --- a/test/sql/copy/csv/csv_decimal_separator.test +++ b/test/sql/copy/csv/csv_decimal_separator.test @@ -9,12 +9,12 @@ PRAGMA enable_verification # period-separated decimal doesn't parse statement error -CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'commas': 'double', 'periods': 'double'}, delim=';', decimal_separator=',') +CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'double', 'periods': 'double'}, delim=';', decimal_separator=',') ---- Line: 2 statement ok -CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'commas': 'double'}, delim=';', decimal_separator=',') +CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'double'}, delim=';', decimal_separator=',') query II SELECT commas, periods FROM decimal_separators; @@ -32,18 +32,18 @@ DOUBLE VARCHAR # reading the commas column as decimal fails when decimal separator is set to '.' statement error -CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'commas': 'decimal', 'periods': 'decimal'}, delim=';', decimal_separator='.') +CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'decimal', 'periods': 'decimal'}, delim=';', decimal_separator='.') ---- Line: 2 # reading the commas column as float fails when decimal separator is set to '.' statement error -CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'commas': 'float', 'periods': 'decimal'}, delim=';', decimal_separator='.') +CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'float', 'periods': 'decimal'}, delim=';', decimal_separator='.') ---- Line: 2 statement ok -CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'commas': 'decimal'}, delim=';', decimal_separator=',') +CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'decimal'}, delim=';', decimal_separator=',') query II SELECT commas, periods FROM decimal_separators2; @@ -62,7 +62,7 @@ DECIMAL(18,3) VARCHAR # no separator specified => commas get read as varchar statement ok -CREATE TABLE decimal_separators3 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', header=1, column_types={'periods': 'decimal'}, delim=';') +CREATE TABLE decimal_separators3 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators.csv', column_types={'periods': 'decimal'}, delim=';') query II SELECT commas, periods FROM decimal_separators3; @@ -76,7 +76,7 @@ SELECT commas, periods FROM decimal_separators3; # in a comma-delimited file, comma as decimal separator is OK when quoted statement ok -CREATE TABLE decimal_separators4 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators_csv.csv', header=1, column_types={'commas': 'double'}, quote='"',delim=',',decimal_separator=',') +CREATE TABLE decimal_separators4 AS SELECT * FROM read_csv_auto('data/csv/decimal_separators/decimal_separators_csv.csv', column_types={'commas': 'double'}, quote='"',delim=',',decimal_separator=',') query II SELECT commas, periods FROM decimal_separators4; @@ -91,12 +91,12 @@ DOUBLE VARCHAR # unsupported separator characters result in error statement error -SELECT * FROM read_csv_auto('data/csv/decimal_separators/invalid_char.csv', header=1, column_types={'foo': 'double'}, decimal_separator='ö') +SELECT * FROM read_csv_auto('data/csv/decimal_separators/invalid_char.csv', column_types={'foo': 'double'}, decimal_separator='ö') ---- Binder Error: Unsupported parameter for DECIMAL_SEPARATOR: should be '.' or ',' # data with mixed separators will fail reading statement error -SELECT * FROM read_csv_auto('data/csv/decimal_separators/mixed_format_fail.csv', header=true, column_types={'foo': 'double'}, decimal_separator=',', skip=0) +SELECT * FROM read_csv_auto('data/csv/decimal_separators/mixed_format_fail.csv', column_types={'foo': 'double'}, decimal_separator=',', skip=0) ---- Line: 4 diff --git a/test/sql/copy/csv/csv_dtypes_union_by_name.test b/test/sql/copy/csv/csv_dtypes_union_by_name.test index ec7036b0bdbd..893be2a0ab53 100644 --- a/test/sql/copy/csv/csv_dtypes_union_by_name.test +++ b/test/sql/copy/csv/csv_dtypes_union_by_name.test @@ -24,13 +24,13 @@ statement ok INSERT INTO ubn3 VALUES (100,101), (102, 103); statement ok -COPY ubn1 TO '__TEST_DIR__/ubn1.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn1 TO '__TEST_DIR__/ubn1.csv' WITH (DELIMITER ','); statement ok -COPY ubn2 TO '__TEST_DIR__/ubn2.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn2 TO '__TEST_DIR__/ubn2.csv' WITH ( DELIMITER ','); statement ok -COPY ubn3 TO '__TEST_DIR__/ubn3.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn3 TO '__TEST_DIR__/ubn3.csv' WITH (DELIMITER ','); query III SELECT typeof(a), typeof(b), typeof(c) diff --git a/test/sql/copy/csv/csv_enum.test b/test/sql/copy/csv/csv_enum.test index 3a31c169c28d..c329a089200b 100644 --- a/test/sql/copy/csv/csv_enum.test +++ b/test/sql/copy/csv/csv_enum.test @@ -9,7 +9,7 @@ statement ok CREATE TYPE bla AS ENUM ('Y', 'N'); query I -select * from read_csv_auto('data/csv/response.csv') +select * from read_csv_auto('data/csv/response.csv', header = 0) ---- Y Y @@ -26,7 +26,7 @@ NULL query I -FROM read_csv_auto('data/csv/response.csv', types={'column0': 'bla'}, nullstr = 'Null'); +FROM read_csv_auto('data/csv/response.csv', types={'column0': 'bla'}, nullstr = 'Null', header = 0); ---- Y Y @@ -38,9 +38,3 @@ FROM read_csv_auto('data/csv/response.csv', auto_type_candidates=['bla'], nullst ---- Auto Type Candidate of type ENUM is not accepted as a valid input -#select * from read_csv_auto('data/csv/response.csv') -#---- -#Y -#Y -#N -#Null diff --git a/test/sql/copy/csv/csv_enum_storage.test b/test/sql/copy/csv/csv_enum_storage.test index 9891300c1d39..e63b2b4d2417 100644 --- a/test/sql/copy/csv/csv_enum_storage.test +++ b/test/sql/copy/csv/csv_enum_storage.test @@ -15,7 +15,7 @@ CREATE TYPE bla AS ENUM ('Y', 'N'); restart query I -select * from read_csv_auto('data/csv/response.csv') +select * from read_csv_auto('data/csv/response.csv', header = 0) ---- Y Y @@ -32,7 +32,7 @@ NULL query I -FROM read_csv_auto('data/csv/response.csv', types={'column0': 'bla'}, nullstr = 'Null'); +FROM read_csv_auto('data/csv/response.csv', types={'column0': 'bla'}, nullstr = 'Null', header = 0); ---- Y Y diff --git a/test/sql/copy/csv/csv_error_message.test b/test/sql/copy/csv/csv_error_message.test index 96b33d861361..b41d049fe65d 100644 --- a/test/sql/copy/csv/csv_error_message.test +++ b/test/sql/copy/csv/csv_error_message.test @@ -9,7 +9,7 @@ statement ok COPY (SELECT i::VARCHAR i FROM range(103) tbl(i) UNION ALL SELECT 'hello') TO '__TEST_DIR__/int_parse_error.csv' (HEADER, DELIMITER '|') statement error -SELECT * FROM read_csv('__TEST_DIR__/int_parse_error.csv', columns={'i': 'INT'}, header=True) +SELECT * FROM read_csv('__TEST_DIR__/int_parse_error.csv', columns={'i': 'INT'}) ---- Column at position: 0 Set type: INTEGER Sniffed type: VARCHAR diff --git a/test/sql/copy/csv/csv_hive.test b/test/sql/copy/csv/csv_hive.test index 3079733f6ac7..e6899a1454dc 100644 --- a/test/sql/copy/csv/csv_hive.test +++ b/test/sql/copy/csv/csv_hive.test @@ -11,71 +11,71 @@ CREATE TABLE test2 AS SELECT 2 as id, 'value2' as value; # filenames could allow you to parse hive partitions manually using SQL query III -select id, value, replace(filename, '\', '/') from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', FILENAME=1, HEADER=1) order by id +select id, value, replace(filename, '\', '/') from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', FILENAME=1) order by id ---- 1 value1 data/csv/hive-partitioning/simple/part=a/date=2012-01-01/test.csv 2 value2 data/csv/hive-partitioning/simple/part=b/date=2013-01-01/test.csv # however this is just a lot nicer query IIII -select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by id +select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1) order by id ---- 1 value1 a 2012-01-01 2 value2 b 2013-01-01 # As long as the names match, we don't really mind since everything is a string anyway query IIII -select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by id +select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) order by id ---- 1 value1 a 2012-01-01 2 value2 b 2013-01-01 # If the key names don't add up, we throw statement error -select * from read_csv_auto('data/csv/hive-partitioning/mismatching_names/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) +select * from read_csv_auto('data/csv/hive-partitioning/mismatching_names/*/*/test.csv', HIVE_PARTITIONING=1) ---- Hive partition mismatch # If the key names don't add up, we throw statement error -select * from read_csv_auto('data/csv/hive-partitioning/mismatching_count/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) +select * from read_csv_auto('data/csv/hive-partitioning/mismatching_count/*/*/test.csv', HIVE_PARTITIONING=1) ---- Hive partition mismatch # Now we do a bunch of filtering on the partitions, to test the file skipping mechanism query IIII -select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where part='a' +select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) where part='a' ---- 1 value1 a 2012-01-01 query IIII -select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where part='b' +select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) where part='b' ---- 2 value2 b 2013-01-01 query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where part_cast > 0 and part_cast < 5000; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where part_cast > 0 and part_cast < 5000; ---- 1 value1 1000 2012-01-01 query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where part_cast > 5000; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where part_cast > 5000; ---- 2 value2 9000 2013-01-01 query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where date_cast > CAST('2000-01-01' as DATE) and date_cast < CAST('2012-12-12' as DATE); +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where date_cast > CAST('2000-01-01' as DATE) and date_cast < CAST('2012-12-12' as DATE); ---- 1 value1 1000 2012-01-01 query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where date_cast > CAST('2000-01-01' as DATE) order by date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where date_cast > CAST('2000-01-01' as DATE) order by date_cast; ---- 1 value1 1000 2012-01-01 2 value2 9000 2013-01-01 query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where date_cast=CAST('2012-01-01' as DATE) OR part_cast=9000 ORDER BY date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where date_cast=CAST('2012-01-01' as DATE) OR part_cast=9000 ORDER BY date_cast; ---- 1 value1 1000 2012-01-01 2 value2 9000 2013-01-01 @@ -84,68 +84,68 @@ select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cas # Filtering out 0/2 files query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=9000) ORDER BY date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=9000) ORDER BY date_cast; ---- 1 value1 1000 2012-01-01 2 value2 9000 2013-01-01 # There should not be any filter operation remaining since it can be handled completely during pushdown by pruning file list query II -EXPLAIN select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=9000) ORDER BY date_cast; +EXPLAIN select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=9000) ORDER BY date_cast; ---- physical_plan :.*FILTER.* # Query filtering out first file query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=9000) ORDER BY date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=9000) ORDER BY date_cast; ---- 2 value2 9000 2013-01-01 # Again, we should not have a filter operator here query II -explain select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=9000) ORDER BY date_cast; +explain select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=9000) ORDER BY date_cast; ---- physical_plan :.*FILTER.* # Query filtering out second file query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=1337) ORDER BY date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=1337) ORDER BY date_cast; ---- 1 value1 1000 2012-01-01 # Again, we should not have a filter operator here query II -explain select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=1337) ORDER BY date_cast; +explain select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == '2012-01-011000') OR (part_cast=1337) ORDER BY date_cast; ---- physical_plan :.*FILTER.* # Filtering out both files query IIII -select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=1337) ORDER BY date_cast; +select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=1337) ORDER BY date_cast; ---- # Again, we should not have a filter operator here query II -EXPLAIN select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=1337) ORDER BY date_cast; +EXPLAIN select id, value, CAST(part AS INT) as part_cast, CAST(date AS DATE) as date_cast from read_csv_auto('data/csv/hive-partitioning/types/*/*/test.csv', HIVE_PARTITIONING=1) where (date_cast=CAST('2012-01-01' as DATE) AND concat(date_cast::VARCHAR, part_cast::VARCHAR) == 'foobar') OR (part_cast=1337) ORDER BY date_cast; ---- physical_plan :.*FILTER.* # projection pushdown query I -select value from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by 1 +select value from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) order by 1 ---- value1 value2 query I -select part from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by 1 +select part from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) order by 1 ---- a b # project only some columns from a hive partition query I -select date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by 1 +select date from read_csv_auto('data/csv/hive-partitioning/different_order/*/*/test.csv', HIVE_PARTITIONING=1) order by 1 ---- 2012-01-01 2013-01-01 diff --git a/test/sql/copy/csv/csv_hive_filename_union.test b/test/sql/copy/csv/csv_hive_filename_union.test index 56ad3fdf8f1b..79f84efcdfc0 100644 --- a/test/sql/copy/csv/csv_hive_filename_union.test +++ b/test/sql/copy/csv/csv_hive_filename_union.test @@ -7,65 +7,65 @@ PRAGMA enable_verification # projection pushdown query I -select filename.replace('\', '/').split('/')[-2] from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1) order by 1 +select filename.replace('\', '/').split('/')[-2] from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, FILENAME=1) order by 1 ---- date=2012-01-01 date=2013-01-01 query III -select part, filename.replace('\', '/').split('/')[-2], value from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1) order by 1 +select part, filename.replace('\', '/').split('/')[-2], value from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, FILENAME=1) order by 1 ---- a date=2012-01-01 value1 b date=2013-01-01 value2 query III -select part, filename.replace('\', '/').split('/')[-2], value from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1, UNION_BY_NAME=1) order by 1 +select part, filename.replace('\', '/').split('/')[-2], value from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, FILENAME=1, UNION_BY_NAME=1) order by 1 ---- a date=2012-01-01 value1 b date=2013-01-01 value2 statement error -select * exclude(filename) from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1) order by 1 +select * exclude(filename) from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, FILENAME=1) order by 1 ---- Could not convert string query III -select * from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, HEADER=1, UNION_BY_NAME=1) order by 1 +select * from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, UNION_BY_NAME=1) order by 1 ---- 99 world 2 xxx 42 1 query IIII -select * exclude(filename), filename.replace('\', '/').split('/')[-2] from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1, UNION_BY_NAME=1) order by 1 +select * exclude(filename), filename.replace('\', '/').split('/')[-2] from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, FILENAME=1, UNION_BY_NAME=1) order by 1 ---- 99 world 2 part=2 xxx 42 1 part=1 query IIII -select part, filename.replace('\', '/').split('/')[-2], a, b from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, HEADER=1, FILENAME=1, UNION_BY_NAME=1) order by 1 +select part, filename.replace('\', '/').split('/')[-2], a, b from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=1, FILENAME=1, UNION_BY_NAME=1) order by 1 ---- 1 part=1 xxx 42 2 part=2 99 world query II -select * exclude (filename) from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=0, HEADER=1, FILENAME=1, UNION_BY_NAME=1) order by 1 +select * exclude (filename) from read_csv_auto('data/csv/hive-partitioning/mismatching_types/*/*.csv', HIVE_PARTITIONING=0, FILENAME=1, UNION_BY_NAME=1) order by 1 ---- 99 world xxx 42 statement error -select * from read_csv_auto(['data/csv/hive-partitioning/mismatching_contents/part=1/test.csv', 'data/csv/hive-partitioning/mismatching_contents/part=2/test.csv'], HEADER=1) order by 1 +select * from read_csv_auto(['data/csv/hive-partitioning/mismatching_contents/part=1/test.csv', 'data/csv/hive-partitioning/mismatching_contents/part=2/test.csv']) order by 1 ---- date field value out of range query III -select a, b, c from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', HEADER=1, UNION_BY_NAME=1) order by 2 NULLS LAST +select a, b, c from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', UNION_BY_NAME=1) order by 2 NULLS LAST ---- 42 world NULL 42 NULL 1992-01-01 query IIII -select a, b, part, c from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', HEADER=1, UNION_BY_NAME=1, HIVE_PARTITIONING=1) order by 2 NULLS LAST +select a, b, part, c from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', UNION_BY_NAME=1, HIVE_PARTITIONING=1) order by 2 NULLS LAST ---- 42 world 2 NULL 42 NULL 1 1992-01-01 diff --git a/test/sql/copy/csv/csv_home_directory.test b/test/sql/copy/csv/csv_home_directory.test index 9e3d4a69fed0..77f0940f1909 100644 --- a/test/sql/copy/csv/csv_home_directory.test +++ b/test/sql/copy/csv/csv_home_directory.test @@ -32,7 +32,7 @@ statement ok CREATE TABLE integers_load(i INTEGER); statement ok -COPY integers_load FROM '~/integers.csv' (HEADER 1) +COPY integers_load FROM '~/integers.csv' query I SELECT * FROM integers_load diff --git a/test/sql/copy/csv/csv_limit_copy.test b/test/sql/copy/csv/csv_limit_copy.test new file mode 100644 index 000000000000..e5d938d351ee --- /dev/null +++ b/test/sql/copy/csv/csv_limit_copy.test @@ -0,0 +1,14 @@ +# name: test/sql/copy/csv/csv_limit_copy.test +# description: CSV limit copy +# group: [csv] + +statement ok +CREATE TABLE integers AS FROM range(1000000) t(i); + +statement ok +COPY (FROM integers LIMIT 30000) TO '__TEST_DIR__/limit_copy.csv' + +query I +SELECT COUNT(*) FROM '__TEST_DIR__/limit_copy.csv' +---- +30000 diff --git a/test/sql/copy/csv/csv_null_byte.test b/test/sql/copy/csv/csv_null_byte.test index bded9b5880d7..a81d0a1a51d6 100644 --- a/test/sql/copy/csv/csv_null_byte.test +++ b/test/sql/copy/csv/csv_null_byte.test @@ -8,19 +8,16 @@ PRAGMA enable_verification query III select * from 'data/csv/nullbyte.csv'; ---- -col1 col2 col3 val1 val\02 val3 query III select * from read_csv('data/csv/nullbyte.csv', columns={'col1': 'VARCHAR', 'col2': 'VARCHAR', 'col3': 'VARCHAR'}, delim='|'); ---- -col1 col2 col3 val1 val\02 val3 query II select * from 'data/csv/nullbyte_header.csv'; ---- -col1 col\02 val1 val2 query II diff --git a/test/sql/copy/csv/csv_null_padding.test b/test/sql/copy/csv/csv_null_padding.test index ee19b08cb170..a822710ca7d1 100644 --- a/test/sql/copy/csv/csv_null_padding.test +++ b/test/sql/copy/csv/csv_null_padding.test @@ -17,7 +17,7 @@ one two three four # without null padding we can only read one column query I -FROM read_csv_auto('data/csv/nullpadding_header.csv', null_padding=False) +FROM read_csv_auto('data/csv/nullpadding_header.csv', null_padding=False, header = 0) ---- # this file has a bunch of gunk at the top one,two,three,four @@ -25,7 +25,7 @@ one,two,three,four 2,b,bob query I -FROM read_csv_auto('data/csv/nullpadding_header.csv', null_padding=False, skip=1) +FROM read_csv_auto('data/csv/nullpadding_header.csv', null_padding=False, skip=1, header = 0) ---- one,two,three,four 1,a,alice diff --git a/test/sql/copy/csv/csv_projection_pushdown.test b/test/sql/copy/csv/csv_projection_pushdown.test index a241685d57b8..6d1a95aa57fc 100644 --- a/test/sql/copy/csv/csv_projection_pushdown.test +++ b/test/sql/copy/csv/csv_projection_pushdown.test @@ -12,7 +12,7 @@ statement ok INSERT INTO tbl VALUES (42, 'hello world', NULL), (NULL, NULL, DATE '1992-01-01'), (100, 'thisisalongstring', DATE '2000-01-01'); statement ok -COPY tbl TO '__TEST_DIR__/projection_pushdown.csv' (FORMAT CSV, HEADER 1); +COPY tbl TO '__TEST_DIR__/projection_pushdown.csv' (FORMAT CSV); statement ok CREATE VIEW v1 AS FROM read_csv_auto('__TEST_DIR__/projection_pushdown.csv', filename=True) diff --git a/test/sql/copy/csv/data/real/nfc_normalization_rn.csv b/test/sql/copy/csv/data/real/nfc_normalization_rn.csv new file mode 100644 index 000000000000..8f27121eb336 --- /dev/null +++ b/test/sql/copy/csv/data/real/nfc_normalization_rn.csv @@ -0,0 +1,18819 @@ +Ḋ|Ḋ|Ḋ +Ḍ|Ḍ|Ḍ +Ḍ̇|Ḍ̇|Ḍ̇ +Ḍ̇|Ḍ̇|Ḍ̇ +Ḍ̇|Ḍ̇|Ḍ̇ +Ḍ̇|Ḍ̇|Ḍ̇ +Ḋ̛|Ḋ̛|Ḋ̛ +Ḍ̛|Ḍ̛|Ḍ̛ +Ḍ̛̇|Ḍ̛̇|Ḍ̛̇ +Ḍ̛̇|Ḍ̛̇|Ḍ̛̇ +Ḍ̛̇|Ḍ̛̇|Ḍ̛̇ +Ḍ̛̇|Ḍ̛̇|Ḍ̛̇ +È|È|È +Ē|Ē|Ē +È|È|È +Ē|Ē|Ē +Ḕ|Ḕ|Ḕ +Ḕ|Ḕ|Ḕ +Ḕ̄|Ḕ̄|Ḕ̄ +Ḕ|Ḕ|Ḕ +È̄|È̄|È̄ +ֱָֹ֑׃ְ֬֟|ֱָֹ֑׃ְ֬֟|ֱָֹ֑׃ְ֬֟ +ְַּ֥֒׀֭ׄ|ְַּ֥֒׀֭ׄ|ְַּ֥֒׀֭ׄ +ᄀ각|ᄀ각|ᄀ각 +ᄀ각ᆨ|ᄀ각ᆨ|ᄀ각ᆨ + | |  +¨|¨|¨ +ª|ª|ª +¯|¯|¯ +²|²|² +³|³|³ +´|´|´ +µ|µ|µ +¸|¸|¸ +¹|¹|¹ +º|º|º +¼|¼|¼ +½|½|½ +¾|¾|¾ +À|À|À +Á|Á|Á +Â|Â|Â +Ã|Ã|Ã +Ä|Ä|Ä +Å|Å|Å +Ç|Ç|Ç +È|È|È +É|É|É +Ê|Ê|Ê +Ë|Ë|Ë +Ì|Ì|Ì +Í|Í|Í +Î|Î|Î +Ï|Ï|Ï +Ñ|Ñ|Ñ +Ò|Ò|Ò +Ó|Ó|Ó +Ô|Ô|Ô +Õ|Õ|Õ +Ö|Ö|Ö +Ù|Ù|Ù +Ú|Ú|Ú +Û|Û|Û +Ü|Ü|Ü +Ý|Ý|Ý +à|à|à +á|á|á +â|â|â +ã|ã|ã +ä|ä|ä +å|å|å +ç|ç|ç +è|è|è +é|é|é +ê|ê|ê +ë|ë|ë +ì|ì|ì +í|í|í +î|î|î +ï|ï|ï +ñ|ñ|ñ +ò|ò|ò +ó|ó|ó +ô|ô|ô +õ|õ|õ +ö|ö|ö +ù|ù|ù +ú|ú|ú +û|û|û +ü|ü|ü +ý|ý|ý +ÿ|ÿ|ÿ +Ā|Ā|Ā +ā|ā|ā +Ă|Ă|Ă +ă|ă|ă +Ą|Ą|Ą +ą|ą|ą +Ć|Ć|Ć +ć|ć|ć +Ĉ|Ĉ|Ĉ +ĉ|ĉ|ĉ +Ċ|Ċ|Ċ +ċ|ċ|ċ +Č|Č|Č +č|č|č +Ď|Ď|Ď +ď|ď|ď +Ē|Ē|Ē +ē|ē|ē +Ĕ|Ĕ|Ĕ +ĕ|ĕ|ĕ +Ė|Ė|Ė +ė|ė|ė +Ę|Ę|Ę +ę|ę|ę +Ě|Ě|Ě +ě|ě|ě +Ĝ|Ĝ|Ĝ +ĝ|ĝ|ĝ +Ğ|Ğ|Ğ +ğ|ğ|ğ +Ġ|Ġ|Ġ +ġ|ġ|ġ +Ģ|Ģ|Ģ +ģ|ģ|ģ +Ĥ|Ĥ|Ĥ +ĥ|ĥ|ĥ +Ĩ|Ĩ|Ĩ +ĩ|ĩ|ĩ +Ī|Ī|Ī +ī|ī|ī +Ĭ|Ĭ|Ĭ +ĭ|ĭ|ĭ +Į|Į|Į +į|į|į +İ|İ|İ +IJ|IJ|IJ +ij|ij|ij +Ĵ|Ĵ|Ĵ +ĵ|ĵ|ĵ +Ķ|Ķ|Ķ +ķ|ķ|ķ +Ĺ|Ĺ|Ĺ +ĺ|ĺ|ĺ +Ļ|Ļ|Ļ +ļ|ļ|ļ +Ľ|Ľ|Ľ +ľ|ľ|ľ +Ŀ|Ŀ|Ŀ +ŀ|ŀ|ŀ +Ń|Ń|Ń +ń|ń|ń +Ņ|Ņ|Ņ +ņ|ņ|ņ +Ň|Ň|Ň +ň|ň|ň +ʼn|ʼn|ʼn +Ō|Ō|Ō +ō|ō|ō +Ŏ|Ŏ|Ŏ +ŏ|ŏ|ŏ +Ő|Ő|Ő +ő|ő|ő +Ŕ|Ŕ|Ŕ +ŕ|ŕ|ŕ +Ŗ|Ŗ|Ŗ +ŗ|ŗ|ŗ +Ř|Ř|Ř +ř|ř|ř +Ś|Ś|Ś +ś|ś|ś +Ŝ|Ŝ|Ŝ +ŝ|ŝ|ŝ +Ş|Ş|Ş +ş|ş|ş +Š|Š|Š +š|š|š +Ţ|Ţ|Ţ +ţ|ţ|ţ +Ť|Ť|Ť +ť|ť|ť +Ũ|Ũ|Ũ +ũ|ũ|ũ +Ū|Ū|Ū +ū|ū|ū +Ŭ|Ŭ|Ŭ +ŭ|ŭ|ŭ +Ů|Ů|Ů +ů|ů|ů +Ű|Ű|Ű +ű|ű|ű +Ų|Ų|Ų +ų|ų|ų +Ŵ|Ŵ|Ŵ +ŵ|ŵ|ŵ +Ŷ|Ŷ|Ŷ +ŷ|ŷ|ŷ +Ÿ|Ÿ|Ÿ +Ź|Ź|Ź +ź|ź|ź +Ż|Ż|Ż +ż|ż|ż +Ž|Ž|Ž +ž|ž|ž +ſ|ſ|ſ +Ơ|Ơ|Ơ +ơ|ơ|ơ +Ư|Ư|Ư +ư|ư|ư +DŽ|DŽ|DŽ +Dž|Dž|Dž +dž|dž|dž +LJ|LJ|LJ +Lj|Lj|Lj +lj|lj|lj +NJ|NJ|NJ +Nj|Nj|Nj +nj|nj|nj +Ǎ|Ǎ|Ǎ +ǎ|ǎ|ǎ +Ǐ|Ǐ|Ǐ +ǐ|ǐ|ǐ +Ǒ|Ǒ|Ǒ +ǒ|ǒ|ǒ +Ǔ|Ǔ|Ǔ +ǔ|ǔ|ǔ +Ǖ|Ǖ|Ǖ +ǖ|ǖ|ǖ +Ǘ|Ǘ|Ǘ +ǘ|ǘ|ǘ +Ǚ|Ǚ|Ǚ +ǚ|ǚ|ǚ +Ǜ|Ǜ|Ǜ +ǜ|ǜ|ǜ +Ǟ|Ǟ|Ǟ +ǟ|ǟ|ǟ +Ǡ|Ǡ|Ǡ +ǡ|ǡ|ǡ +Ǣ|Ǣ|Ǣ +ǣ|ǣ|ǣ +Ǧ|Ǧ|Ǧ +ǧ|ǧ|ǧ +Ǩ|Ǩ|Ǩ +ǩ|ǩ|ǩ +Ǫ|Ǫ|Ǫ +ǫ|ǫ|ǫ +Ǭ|Ǭ|Ǭ +ǭ|ǭ|ǭ +Ǯ|Ǯ|Ǯ +ǯ|ǯ|ǯ +ǰ|ǰ|ǰ +DZ|DZ|DZ +Dz|Dz|Dz +dz|dz|dz +Ǵ|Ǵ|Ǵ +ǵ|ǵ|ǵ +Ǹ|Ǹ|Ǹ +ǹ|ǹ|ǹ +Ǻ|Ǻ|Ǻ +ǻ|ǻ|ǻ +Ǽ|Ǽ|Ǽ +ǽ|ǽ|ǽ +Ǿ|Ǿ|Ǿ +ǿ|ǿ|ǿ +Ȁ|Ȁ|Ȁ +ȁ|ȁ|ȁ +Ȃ|Ȃ|Ȃ +ȃ|ȃ|ȃ +Ȅ|Ȅ|Ȅ +ȅ|ȅ|ȅ +Ȇ|Ȇ|Ȇ +ȇ|ȇ|ȇ +Ȉ|Ȉ|Ȉ +ȉ|ȉ|ȉ +Ȋ|Ȋ|Ȋ +ȋ|ȋ|ȋ +Ȍ|Ȍ|Ȍ +ȍ|ȍ|ȍ +Ȏ|Ȏ|Ȏ +ȏ|ȏ|ȏ +Ȑ|Ȑ|Ȑ +ȑ|ȑ|ȑ +Ȓ|Ȓ|Ȓ +ȓ|ȓ|ȓ +Ȕ|Ȕ|Ȕ +ȕ|ȕ|ȕ +Ȗ|Ȗ|Ȗ +ȗ|ȗ|ȗ +Ș|Ș|Ș +ș|ș|ș +Ț|Ț|Ț +ț|ț|ț +Ȟ|Ȟ|Ȟ +ȟ|ȟ|ȟ +Ȧ|Ȧ|Ȧ +ȧ|ȧ|ȧ +Ȩ|Ȩ|Ȩ +ȩ|ȩ|ȩ +Ȫ|Ȫ|Ȫ +ȫ|ȫ|ȫ +Ȭ|Ȭ|Ȭ +ȭ|ȭ|ȭ +Ȯ|Ȯ|Ȯ +ȯ|ȯ|ȯ +Ȱ|Ȱ|Ȱ +ȱ|ȱ|ȱ +Ȳ|Ȳ|Ȳ +ȳ|ȳ|ȳ +ʰ|ʰ|ʰ +ʱ|ʱ|ʱ +ʲ|ʲ|ʲ +ʳ|ʳ|ʳ +ʴ|ʴ|ʴ +ʵ|ʵ|ʵ +ʶ|ʶ|ʶ +ʷ|ʷ|ʷ +ʸ|ʸ|ʸ +˘|˘|˘ +˙|˙|˙ +˚|˚|˚ +˛|˛|˛ +˜|˜|˜ +˝|˝|˝ +ˠ|ˠ|ˠ +ˡ|ˡ|ˡ +ˢ|ˢ|ˢ +ˣ|ˣ|ˣ +ˤ|ˤ|ˤ +̀|̀|̀ +́|́|́ +̓|̓|̓ +̈́|̈́|̈́ +ʹ|ʹ|ʹ +ͺ|ͺ|ͺ +;|;|; +΄|΄|΄ +΅|΅|΅ +Ά|Ά|Ά +·|·|· +Έ|Έ|Έ +Ή|Ή|Ή +Ί|Ί|Ί +Ό|Ό|Ό +Ύ|Ύ|Ύ +Ώ|Ώ|Ώ +ΐ|ΐ|ΐ +Ϊ|Ϊ|Ϊ +Ϋ|Ϋ|Ϋ +ά|ά|ά +έ|έ|έ +ή|ή|ή +ί|ί|ί +ΰ|ΰ|ΰ +ϊ|ϊ|ϊ +ϋ|ϋ|ϋ +ό|ό|ό +ύ|ύ|ύ +ώ|ώ|ώ +ϐ|ϐ|ϐ +ϑ|ϑ|ϑ +ϒ|ϒ|ϒ +ϓ|ϓ|ϓ +ϔ|ϔ|ϔ +ϕ|ϕ|ϕ +ϖ|ϖ|ϖ +ϰ|ϰ|ϰ +ϱ|ϱ|ϱ +ϲ|ϲ|ϲ +ϴ|ϴ|ϴ +ϵ|ϵ|ϵ +Ϲ|Ϲ|Ϲ +Ѐ|Ѐ|Ѐ +Ё|Ё|Ё +Ѓ|Ѓ|Ѓ +Ї|Ї|Ї +Ќ|Ќ|Ќ +Ѝ|Ѝ|Ѝ +Ў|Ў|Ў +Й|Й|Й +й|й|й +ѐ|ѐ|ѐ +ё|ё|ё +ѓ|ѓ|ѓ +ї|ї|ї +ќ|ќ|ќ +ѝ|ѝ|ѝ +ў|ў|ў +Ѷ|Ѷ|Ѷ +ѷ|ѷ|ѷ +Ӂ|Ӂ|Ӂ +ӂ|ӂ|ӂ +Ӑ|Ӑ|Ӑ +ӑ|ӑ|ӑ +Ӓ|Ӓ|Ӓ +ӓ|ӓ|ӓ +Ӗ|Ӗ|Ӗ +ӗ|ӗ|ӗ +Ӛ|Ӛ|Ӛ +ӛ|ӛ|ӛ +Ӝ|Ӝ|Ӝ +ӝ|ӝ|ӝ +Ӟ|Ӟ|Ӟ +ӟ|ӟ|ӟ +Ӣ|Ӣ|Ӣ +ӣ|ӣ|ӣ +Ӥ|Ӥ|Ӥ +ӥ|ӥ|ӥ +Ӧ|Ӧ|Ӧ +ӧ|ӧ|ӧ +Ӫ|Ӫ|Ӫ +ӫ|ӫ|ӫ +Ӭ|Ӭ|Ӭ +ӭ|ӭ|ӭ +Ӯ|Ӯ|Ӯ +ӯ|ӯ|ӯ +Ӱ|Ӱ|Ӱ +ӱ|ӱ|ӱ +Ӳ|Ӳ|Ӳ +ӳ|ӳ|ӳ +Ӵ|Ӵ|Ӵ +ӵ|ӵ|ӵ +Ӹ|Ӹ|Ӹ +ӹ|ӹ|ӹ +և|և|և +آ|آ|آ +أ|أ|أ +ؤ|ؤ|ؤ +إ|إ|إ +ئ|ئ|ئ +ٵ|ٵ|ٵ +ٶ|ٶ|ٶ +ٷ|ٷ|ٷ +ٸ|ٸ|ٸ +ۀ|ۀ|ۀ +ۂ|ۂ|ۂ +ۓ|ۓ|ۓ +ऩ|ऩ|ऩ +ऱ|ऱ|ऱ +ऴ|ऴ|ऴ +क़|क़|क़ +ख़|ख़|ख़ +ग़|ग़|ग़ +ज़|ज़|ज़ +ड़|ड़|ड़ +ढ़|ढ़|ढ़ +फ़|फ़|फ़ +य़|य़|य़ +ো|ো|ো +ৌ|ৌ|ৌ +ড়|ড়|ড় +ঢ়|ঢ়|ঢ় +য়|য়|য় +ਲ਼|ਲ਼|ਲ਼ +ਸ਼|ਸ਼|ਸ਼ +ਖ਼|ਖ਼|ਖ਼ +ਗ਼|ਗ਼|ਗ਼ +ਜ਼|ਜ਼|ਜ਼ +ਫ਼|ਫ਼|ਫ਼ +ୈ|ୈ|ୈ +ୋ|ୋ|ୋ +ୌ|ୌ|ୌ +ଡ଼|ଡ଼|ଡ଼ +ଢ଼|ଢ଼|ଢ଼ +ஔ|ஔ|ஔ +ொ|ொ|ொ +ோ|ோ|ோ +ௌ|ௌ|ௌ +ై|ై|ై +ೀ|ೀ|ೀ +ೇ|ೇ|ೇ +ೈ|ೈ|ೈ +ೊ|ೊ|ೊ +ೋ|ೋ|ೋ +ൊ|ൊ|ൊ +ോ|ോ|ോ +ൌ|ൌ|ൌ +ේ|ේ|ේ +ො|ො|ො +ෝ|ෝ|ෝ +ෞ|ෞ|ෞ +ำ|ำ|ำ +ຳ|ຳ|ຳ +ໜ|ໜ|ໜ +ໝ|ໝ|ໝ +༌|༌|༌ +གྷ|གྷ|གྷ +ཌྷ|ཌྷ|ཌྷ +དྷ|དྷ|དྷ +བྷ|བྷ|བྷ +ཛྷ|ཛྷ|ཛྷ +ཀྵ|ཀྵ|ཀྵ +ཱི|ཱི|ཱི +ཱུ|ཱུ|ཱུ +ྲྀ|ྲྀ|ྲྀ +ཷ|ཷ|ཷ +ླྀ|ླྀ|ླྀ +ཹ|ཹ|ཹ +ཱྀ|ཱྀ|ཱྀ +ྒྷ|ྒྷ|ྒྷ +ྜྷ|ྜྷ|ྜྷ +ྡྷ|ྡྷ|ྡྷ +ྦྷ|ྦྷ|ྦྷ +ྫྷ|ྫྷ|ྫྷ +ྐྵ|ྐྵ|ྐྵ +ဦ|ဦ|ဦ +ჼ|ჼ|ჼ +ᬆ|ᬆ|ᬆ +ᬈ|ᬈ|ᬈ +ᬊ|ᬊ|ᬊ +ᬌ|ᬌ|ᬌ +ᬎ|ᬎ|ᬎ +ᬒ|ᬒ|ᬒ +ᬻ|ᬻ|ᬻ +ᬽ|ᬽ|ᬽ +ᭀ|ᭀ|ᭀ +ᭁ|ᭁ|ᭁ +ᭃ|ᭃ|ᭃ +ᴬ|ᴬ|ᴬ +ᴭ|ᴭ|ᴭ +ᴮ|ᴮ|ᴮ +ᴰ|ᴰ|ᴰ +ᴱ|ᴱ|ᴱ +ᴲ|ᴲ|ᴲ +ᴳ|ᴳ|ᴳ +ᴴ|ᴴ|ᴴ +ᴵ|ᴵ|ᴵ +ᴶ|ᴶ|ᴶ +ᴷ|ᴷ|ᴷ +ᴸ|ᴸ|ᴸ +ᴹ|ᴹ|ᴹ +ᴺ|ᴺ|ᴺ +ᴼ|ᴼ|ᴼ +ᴽ|ᴽ|ᴽ +ᴾ|ᴾ|ᴾ +ᴿ|ᴿ|ᴿ +ᵀ|ᵀ|ᵀ +ᵁ|ᵁ|ᵁ +ᵂ|ᵂ|ᵂ +ᵃ|ᵃ|ᵃ +ᵄ|ᵄ|ᵄ +ᵅ|ᵅ|ᵅ +ᵆ|ᵆ|ᵆ +ᵇ|ᵇ|ᵇ +ᵈ|ᵈ|ᵈ +ᵉ|ᵉ|ᵉ +ᵊ|ᵊ|ᵊ +ᵋ|ᵋ|ᵋ +ᵌ|ᵌ|ᵌ +ᵍ|ᵍ|ᵍ +ᵏ|ᵏ|ᵏ +ᵐ|ᵐ|ᵐ +ᵑ|ᵑ|ᵑ +ᵒ|ᵒ|ᵒ +ᵓ|ᵓ|ᵓ +ᵔ|ᵔ|ᵔ +ᵕ|ᵕ|ᵕ +ᵖ|ᵖ|ᵖ +ᵗ|ᵗ|ᵗ +ᵘ|ᵘ|ᵘ +ᵙ|ᵙ|ᵙ +ᵚ|ᵚ|ᵚ +ᵛ|ᵛ|ᵛ +ᵜ|ᵜ|ᵜ +ᵝ|ᵝ|ᵝ +ᵞ|ᵞ|ᵞ +ᵟ|ᵟ|ᵟ +ᵠ|ᵠ|ᵠ +ᵡ|ᵡ|ᵡ +ᵢ|ᵢ|ᵢ +ᵣ|ᵣ|ᵣ +ᵤ|ᵤ|ᵤ +ᵥ|ᵥ|ᵥ +ᵦ|ᵦ|ᵦ +ᵧ|ᵧ|ᵧ +ᵨ|ᵨ|ᵨ +ᵩ|ᵩ|ᵩ +ᵪ|ᵪ|ᵪ +ᵸ|ᵸ|ᵸ +ᶛ|ᶛ|ᶛ +ᶜ|ᶜ|ᶜ +ᶝ|ᶝ|ᶝ +ᶞ|ᶞ|ᶞ +ᶟ|ᶟ|ᶟ +ᶠ|ᶠ|ᶠ +ᶡ|ᶡ|ᶡ +ᶢ|ᶢ|ᶢ +ᶣ|ᶣ|ᶣ +ᶤ|ᶤ|ᶤ +ᶥ|ᶥ|ᶥ +ᶦ|ᶦ|ᶦ +ᶧ|ᶧ|ᶧ +ᶨ|ᶨ|ᶨ +ᶩ|ᶩ|ᶩ +ᶪ|ᶪ|ᶪ +ᶫ|ᶫ|ᶫ +ᶬ|ᶬ|ᶬ +ᶭ|ᶭ|ᶭ +ᶮ|ᶮ|ᶮ +ᶯ|ᶯ|ᶯ +ᶰ|ᶰ|ᶰ +ᶱ|ᶱ|ᶱ +ᶲ|ᶲ|ᶲ +ᶳ|ᶳ|ᶳ +ᶴ|ᶴ|ᶴ +ᶵ|ᶵ|ᶵ +ᶶ|ᶶ|ᶶ +ᶷ|ᶷ|ᶷ +ᶸ|ᶸ|ᶸ +ᶹ|ᶹ|ᶹ +ᶺ|ᶺ|ᶺ +ᶻ|ᶻ|ᶻ +ᶼ|ᶼ|ᶼ +ᶽ|ᶽ|ᶽ +ᶾ|ᶾ|ᶾ +ᶿ|ᶿ|ᶿ +Ḁ|Ḁ|Ḁ +ḁ|ḁ|ḁ +Ḃ|Ḃ|Ḃ +ḃ|ḃ|ḃ +Ḅ|Ḅ|Ḅ +ḅ|ḅ|ḅ +Ḇ|Ḇ|Ḇ +ḇ|ḇ|ḇ +Ḉ|Ḉ|Ḉ +ḉ|ḉ|ḉ +Ḋ|Ḋ|Ḋ +ḋ|ḋ|ḋ +Ḍ|Ḍ|Ḍ +ḍ|ḍ|ḍ +Ḏ|Ḏ|Ḏ +ḏ|ḏ|ḏ +Ḑ|Ḑ|Ḑ +ḑ|ḑ|ḑ +Ḓ|Ḓ|Ḓ +ḓ|ḓ|ḓ +Ḕ|Ḕ|Ḕ +ḕ|ḕ|ḕ +Ḗ|Ḗ|Ḗ +ḗ|ḗ|ḗ +Ḙ|Ḙ|Ḙ +ḙ|ḙ|ḙ +Ḛ|Ḛ|Ḛ +ḛ|ḛ|ḛ +Ḝ|Ḝ|Ḝ +ḝ|ḝ|ḝ +Ḟ|Ḟ|Ḟ +ḟ|ḟ|ḟ +Ḡ|Ḡ|Ḡ +ḡ|ḡ|ḡ +Ḣ|Ḣ|Ḣ +ḣ|ḣ|ḣ +Ḥ|Ḥ|Ḥ +ḥ|ḥ|ḥ +Ḧ|Ḧ|Ḧ +ḧ|ḧ|ḧ +Ḩ|Ḩ|Ḩ +ḩ|ḩ|ḩ +Ḫ|Ḫ|Ḫ +ḫ|ḫ|ḫ +Ḭ|Ḭ|Ḭ +ḭ|ḭ|ḭ +Ḯ|Ḯ|Ḯ +ḯ|ḯ|ḯ +Ḱ|Ḱ|Ḱ +ḱ|ḱ|ḱ +Ḳ|Ḳ|Ḳ +ḳ|ḳ|ḳ +Ḵ|Ḵ|Ḵ +ḵ|ḵ|ḵ +Ḷ|Ḷ|Ḷ +ḷ|ḷ|ḷ +Ḹ|Ḹ|Ḹ +ḹ|ḹ|ḹ +Ḻ|Ḻ|Ḻ +ḻ|ḻ|ḻ +Ḽ|Ḽ|Ḽ +ḽ|ḽ|ḽ +Ḿ|Ḿ|Ḿ +ḿ|ḿ|ḿ +Ṁ|Ṁ|Ṁ +ṁ|ṁ|ṁ +Ṃ|Ṃ|Ṃ +ṃ|ṃ|ṃ +Ṅ|Ṅ|Ṅ +ṅ|ṅ|ṅ +Ṇ|Ṇ|Ṇ +ṇ|ṇ|ṇ +Ṉ|Ṉ|Ṉ +ṉ|ṉ|ṉ +Ṋ|Ṋ|Ṋ +ṋ|ṋ|ṋ +Ṍ|Ṍ|Ṍ +ṍ|ṍ|ṍ +Ṏ|Ṏ|Ṏ +ṏ|ṏ|ṏ +Ṑ|Ṑ|Ṑ +ṑ|ṑ|ṑ +Ṓ|Ṓ|Ṓ +ṓ|ṓ|ṓ +Ṕ|Ṕ|Ṕ +ṕ|ṕ|ṕ +Ṗ|Ṗ|Ṗ +ṗ|ṗ|ṗ +Ṙ|Ṙ|Ṙ +ṙ|ṙ|ṙ +Ṛ|Ṛ|Ṛ +ṛ|ṛ|ṛ +Ṝ|Ṝ|Ṝ +ṝ|ṝ|ṝ +Ṟ|Ṟ|Ṟ +ṟ|ṟ|ṟ +Ṡ|Ṡ|Ṡ +ṡ|ṡ|ṡ +Ṣ|Ṣ|Ṣ +ṣ|ṣ|ṣ +Ṥ|Ṥ|Ṥ +ṥ|ṥ|ṥ +Ṧ|Ṧ|Ṧ +ṧ|ṧ|ṧ +Ṩ|Ṩ|Ṩ +ṩ|ṩ|ṩ +Ṫ|Ṫ|Ṫ +ṫ|ṫ|ṫ +Ṭ|Ṭ|Ṭ +ṭ|ṭ|ṭ +Ṯ|Ṯ|Ṯ +ṯ|ṯ|ṯ +Ṱ|Ṱ|Ṱ +ṱ|ṱ|ṱ +Ṳ|Ṳ|Ṳ +ṳ|ṳ|ṳ +Ṵ|Ṵ|Ṵ +ṵ|ṵ|ṵ +Ṷ|Ṷ|Ṷ +ṷ|ṷ|ṷ +Ṹ|Ṹ|Ṹ +ṹ|ṹ|ṹ +Ṻ|Ṻ|Ṻ +ṻ|ṻ|ṻ +Ṽ|Ṽ|Ṽ +ṽ|ṽ|ṽ +Ṿ|Ṿ|Ṿ +ṿ|ṿ|ṿ +Ẁ|Ẁ|Ẁ +ẁ|ẁ|ẁ +Ẃ|Ẃ|Ẃ +ẃ|ẃ|ẃ +Ẅ|Ẅ|Ẅ +ẅ|ẅ|ẅ +Ẇ|Ẇ|Ẇ +ẇ|ẇ|ẇ +Ẉ|Ẉ|Ẉ +ẉ|ẉ|ẉ +Ẋ|Ẋ|Ẋ +ẋ|ẋ|ẋ +Ẍ|Ẍ|Ẍ +ẍ|ẍ|ẍ +Ẏ|Ẏ|Ẏ +ẏ|ẏ|ẏ +Ẑ|Ẑ|Ẑ +ẑ|ẑ|ẑ +Ẓ|Ẓ|Ẓ +ẓ|ẓ|ẓ +Ẕ|Ẕ|Ẕ +ẕ|ẕ|ẕ +ẖ|ẖ|ẖ +ẗ|ẗ|ẗ +ẘ|ẘ|ẘ +ẙ|ẙ|ẙ +ẚ|ẚ|ẚ +ẛ|ẛ|ẛ +Ạ|Ạ|Ạ +ạ|ạ|ạ +Ả|Ả|Ả +ả|ả|ả +Ấ|Ấ|Ấ +ấ|ấ|ấ +Ầ|Ầ|Ầ +ầ|ầ|ầ +Ẩ|Ẩ|Ẩ +ẩ|ẩ|ẩ +Ẫ|Ẫ|Ẫ +ẫ|ẫ|ẫ +Ậ|Ậ|Ậ +ậ|ậ|ậ +Ắ|Ắ|Ắ +ắ|ắ|ắ +Ằ|Ằ|Ằ +ằ|ằ|ằ +Ẳ|Ẳ|Ẳ +ẳ|ẳ|ẳ +Ẵ|Ẵ|Ẵ +ẵ|ẵ|ẵ +Ặ|Ặ|Ặ +ặ|ặ|ặ +Ẹ|Ẹ|Ẹ +ẹ|ẹ|ẹ +Ẻ|Ẻ|Ẻ +ẻ|ẻ|ẻ +Ẽ|Ẽ|Ẽ +ẽ|ẽ|ẽ +Ế|Ế|Ế +ế|ế|ế +Ề|Ề|Ề +ề|ề|ề +Ể|Ể|Ể +ể|ể|ể +Ễ|Ễ|Ễ +ễ|ễ|ễ +Ệ|Ệ|Ệ +ệ|ệ|ệ +Ỉ|Ỉ|Ỉ +ỉ|ỉ|ỉ +Ị|Ị|Ị +ị|ị|ị +Ọ|Ọ|Ọ +ọ|ọ|ọ +Ỏ|Ỏ|Ỏ +ỏ|ỏ|ỏ +Ố|Ố|Ố +ố|ố|ố +Ồ|Ồ|Ồ +ồ|ồ|ồ +Ổ|Ổ|Ổ +ổ|ổ|ổ +Ỗ|Ỗ|Ỗ +ỗ|ỗ|ỗ +Ộ|Ộ|Ộ +ộ|ộ|ộ +Ớ|Ớ|Ớ +ớ|ớ|ớ +Ờ|Ờ|Ờ +ờ|ờ|ờ +Ở|Ở|Ở +ở|ở|ở +Ỡ|Ỡ|Ỡ +ỡ|ỡ|ỡ +Ợ|Ợ|Ợ +ợ|ợ|ợ +Ụ|Ụ|Ụ +ụ|ụ|ụ +Ủ|Ủ|Ủ +ủ|ủ|ủ +Ứ|Ứ|Ứ +ứ|ứ|ứ +Ừ|Ừ|Ừ +ừ|ừ|ừ +Ử|Ử|Ử +ử|ử|ử +Ữ|Ữ|Ữ +ữ|ữ|ữ +Ự|Ự|Ự +ự|ự|ự +Ỳ|Ỳ|Ỳ +ỳ|ỳ|ỳ +Ỵ|Ỵ|Ỵ +ỵ|ỵ|ỵ +Ỷ|Ỷ|Ỷ +ỷ|ỷ|ỷ +Ỹ|Ỹ|Ỹ +ỹ|ỹ|ỹ +ἀ|ἀ|ἀ +ἁ|ἁ|ἁ +ἂ|ἂ|ἂ +ἃ|ἃ|ἃ +ἄ|ἄ|ἄ +ἅ|ἅ|ἅ +ἆ|ἆ|ἆ +ἇ|ἇ|ἇ +Ἀ|Ἀ|Ἀ +Ἁ|Ἁ|Ἁ +Ἂ|Ἂ|Ἂ +Ἃ|Ἃ|Ἃ +Ἄ|Ἄ|Ἄ +Ἅ|Ἅ|Ἅ +Ἆ|Ἆ|Ἆ +Ἇ|Ἇ|Ἇ +ἐ|ἐ|ἐ +ἑ|ἑ|ἑ +ἒ|ἒ|ἒ +ἓ|ἓ|ἓ +ἔ|ἔ|ἔ +ἕ|ἕ|ἕ +Ἐ|Ἐ|Ἐ +Ἑ|Ἑ|Ἑ +Ἒ|Ἒ|Ἒ +Ἓ|Ἓ|Ἓ +Ἔ|Ἔ|Ἔ +Ἕ|Ἕ|Ἕ +ἠ|ἠ|ἠ +ἡ|ἡ|ἡ +ἢ|ἢ|ἢ +ἣ|ἣ|ἣ +ἤ|ἤ|ἤ +ἥ|ἥ|ἥ +ἦ|ἦ|ἦ +ἧ|ἧ|ἧ +Ἠ|Ἠ|Ἠ +Ἡ|Ἡ|Ἡ +Ἢ|Ἢ|Ἢ +Ἣ|Ἣ|Ἣ +Ἤ|Ἤ|Ἤ +Ἥ|Ἥ|Ἥ +Ἦ|Ἦ|Ἦ +Ἧ|Ἧ|Ἧ +ἰ|ἰ|ἰ +ἱ|ἱ|ἱ +ἲ|ἲ|ἲ +ἳ|ἳ|ἳ +ἴ|ἴ|ἴ +ἵ|ἵ|ἵ +ἶ|ἶ|ἶ +ἷ|ἷ|ἷ +Ἰ|Ἰ|Ἰ +Ἱ|Ἱ|Ἱ +Ἲ|Ἲ|Ἲ +Ἳ|Ἳ|Ἳ +Ἴ|Ἴ|Ἴ +Ἵ|Ἵ|Ἵ +Ἶ|Ἶ|Ἶ +Ἷ|Ἷ|Ἷ +ὀ|ὀ|ὀ +ὁ|ὁ|ὁ +ὂ|ὂ|ὂ +ὃ|ὃ|ὃ +ὄ|ὄ|ὄ +ὅ|ὅ|ὅ +Ὀ|Ὀ|Ὀ +Ὁ|Ὁ|Ὁ +Ὂ|Ὂ|Ὂ +Ὃ|Ὃ|Ὃ +Ὄ|Ὄ|Ὄ +Ὅ|Ὅ|Ὅ +ὐ|ὐ|ὐ +ὑ|ὑ|ὑ +ὒ|ὒ|ὒ +ὓ|ὓ|ὓ +ὔ|ὔ|ὔ +ὕ|ὕ|ὕ +ὖ|ὖ|ὖ +ὗ|ὗ|ὗ +Ὑ|Ὑ|Ὑ +Ὓ|Ὓ|Ὓ +Ὕ|Ὕ|Ὕ +Ὗ|Ὗ|Ὗ +ὠ|ὠ|ὠ +ὡ|ὡ|ὡ +ὢ|ὢ|ὢ +ὣ|ὣ|ὣ +ὤ|ὤ|ὤ +ὥ|ὥ|ὥ +ὦ|ὦ|ὦ +ὧ|ὧ|ὧ +Ὠ|Ὠ|Ὠ +Ὡ|Ὡ|Ὡ +Ὢ|Ὢ|Ὢ +Ὣ|Ὣ|Ὣ +Ὤ|Ὤ|Ὤ +Ὥ|Ὥ|Ὥ +Ὦ|Ὦ|Ὦ +Ὧ|Ὧ|Ὧ +ὰ|ὰ|ὰ +ά|ά|ά +ὲ|ὲ|ὲ +έ|έ|έ +ὴ|ὴ|ὴ +ή|ή|ή +ὶ|ὶ|ὶ +ί|ί|ί +ὸ|ὸ|ὸ +ό|ό|ό +ὺ|ὺ|ὺ +ύ|ύ|ύ +ὼ|ὼ|ὼ +ώ|ώ|ώ +ᾀ|ᾀ|ᾀ +ᾁ|ᾁ|ᾁ +ᾂ|ᾂ|ᾂ +ᾃ|ᾃ|ᾃ +ᾄ|ᾄ|ᾄ +ᾅ|ᾅ|ᾅ +ᾆ|ᾆ|ᾆ +ᾇ|ᾇ|ᾇ +ᾈ|ᾈ|ᾈ +ᾉ|ᾉ|ᾉ +ᾊ|ᾊ|ᾊ +ᾋ|ᾋ|ᾋ +ᾌ|ᾌ|ᾌ +ᾍ|ᾍ|ᾍ +ᾎ|ᾎ|ᾎ +ᾏ|ᾏ|ᾏ +ᾐ|ᾐ|ᾐ +ᾑ|ᾑ|ᾑ +ᾒ|ᾒ|ᾒ +ᾓ|ᾓ|ᾓ +ᾔ|ᾔ|ᾔ +ᾕ|ᾕ|ᾕ +ᾖ|ᾖ|ᾖ +ᾗ|ᾗ|ᾗ +ᾘ|ᾘ|ᾘ +ᾙ|ᾙ|ᾙ +ᾚ|ᾚ|ᾚ +ᾛ|ᾛ|ᾛ +ᾜ|ᾜ|ᾜ +ᾝ|ᾝ|ᾝ +ᾞ|ᾞ|ᾞ +ᾟ|ᾟ|ᾟ +ᾠ|ᾠ|ᾠ +ᾡ|ᾡ|ᾡ +ᾢ|ᾢ|ᾢ +ᾣ|ᾣ|ᾣ +ᾤ|ᾤ|ᾤ +ᾥ|ᾥ|ᾥ +ᾦ|ᾦ|ᾦ +ᾧ|ᾧ|ᾧ +ᾨ|ᾨ|ᾨ +ᾩ|ᾩ|ᾩ +ᾪ|ᾪ|ᾪ +ᾫ|ᾫ|ᾫ +ᾬ|ᾬ|ᾬ +ᾭ|ᾭ|ᾭ +ᾮ|ᾮ|ᾮ +ᾯ|ᾯ|ᾯ +ᾰ|ᾰ|ᾰ +ᾱ|ᾱ|ᾱ +ᾲ|ᾲ|ᾲ +ᾳ|ᾳ|ᾳ +ᾴ|ᾴ|ᾴ +ᾶ|ᾶ|ᾶ +ᾷ|ᾷ|ᾷ +Ᾰ|Ᾰ|Ᾰ +Ᾱ|Ᾱ|Ᾱ +Ὰ|Ὰ|Ὰ +Ά|Ά|Ά +ᾼ|ᾼ|ᾼ +᾽|᾽|᾽ +ι|ι|ι +᾿|᾿|᾿ +῀|῀|῀ +῁|῁|῁ +ῂ|ῂ|ῂ +ῃ|ῃ|ῃ +ῄ|ῄ|ῄ +ῆ|ῆ|ῆ +ῇ|ῇ|ῇ +Ὲ|Ὲ|Ὲ +Έ|Έ|Έ +Ὴ|Ὴ|Ὴ +Ή|Ή|Ή +ῌ|ῌ|ῌ +῍|῍|῍ +῎|῎|῎ +῏|῏|῏ +ῐ|ῐ|ῐ +ῑ|ῑ|ῑ +ῒ|ῒ|ῒ +ΐ|ΐ|ΐ +ῖ|ῖ|ῖ +ῗ|ῗ|ῗ +Ῐ|Ῐ|Ῐ +Ῑ|Ῑ|Ῑ +Ὶ|Ὶ|Ὶ +Ί|Ί|Ί +῝|῝|῝ +῞|῞|῞ +῟|῟|῟ +ῠ|ῠ|ῠ +ῡ|ῡ|ῡ +ῢ|ῢ|ῢ +ΰ|ΰ|ΰ +ῤ|ῤ|ῤ +ῥ|ῥ|ῥ +ῦ|ῦ|ῦ +ῧ|ῧ|ῧ +Ῠ|Ῠ|Ῠ +Ῡ|Ῡ|Ῡ +Ὺ|Ὺ|Ὺ +Ύ|Ύ|Ύ +Ῥ|Ῥ|Ῥ +῭|῭|῭ +΅|΅|΅ +`|`|` +ῲ|ῲ|ῲ +ῳ|ῳ|ῳ +ῴ|ῴ|ῴ +ῶ|ῶ|ῶ +ῷ|ῷ|ῷ +Ὸ|Ὸ|Ὸ +Ό|Ό|Ό +Ὼ|Ὼ|Ὼ +Ώ|Ώ|Ώ +ῼ|ῼ|ῼ +´|´|´ +῾|῾|῾ + | |  + | |  + | |  + | |  + | |  + | |  + | |  + | |  + | |  + | |  + | |  +‑|‑|‑ +‗|‗|‗ +․|․|․ +‥|‥|‥ +…|…|… + | |  +″|″|″ +‴|‴|‴ +‶|‶|‶ +‷|‷|‷ +‼|‼|‼ +‾|‾|‾ +⁇|⁇|⁇ +⁈|⁈|⁈ +⁉|⁉|⁉ +⁗|⁗|⁗ + | |  +⁰|⁰|⁰ +ⁱ|ⁱ|ⁱ +⁴|⁴|⁴ +⁵|⁵|⁵ +⁶|⁶|⁶ +⁷|⁷|⁷ +⁸|⁸|⁸ +⁹|⁹|⁹ +⁺|⁺|⁺ +⁻|⁻|⁻ +⁼|⁼|⁼ +⁽|⁽|⁽ +⁾|⁾|⁾ +ⁿ|ⁿ|ⁿ +₀|₀|₀ +₁|₁|₁ +₂|₂|₂ +₃|₃|₃ +₄|₄|₄ +₅|₅|₅ +₆|₆|₆ +₇|₇|₇ +₈|₈|₈ +₉|₉|₉ +₊|₊|₊ +₋|₋|₋ +₌|₌|₌ +₍|₍|₍ +₎|₎|₎ +ₐ|ₐ|ₐ +ₑ|ₑ|ₑ +ₒ|ₒ|ₒ +ₓ|ₓ|ₓ +ₔ|ₔ|ₔ +ₕ|ₕ|ₕ +ₖ|ₖ|ₖ +ₗ|ₗ|ₗ +ₘ|ₘ|ₘ +ₙ|ₙ|ₙ +ₚ|ₚ|ₚ +ₛ|ₛ|ₛ +ₜ|ₜ|ₜ +₨|₨|₨ +℀|℀|℀ +℁|℁|℁ +ℂ|ℂ|ℂ +℃|℃|℃ +℅|℅|℅ +℆|℆|℆ +ℇ|ℇ|ℇ +℉|℉|℉ +ℊ|ℊ|ℊ +ℋ|ℋ|ℋ +ℌ|ℌ|ℌ +ℍ|ℍ|ℍ +ℎ|ℎ|ℎ +ℏ|ℏ|ℏ +ℐ|ℐ|ℐ +ℑ|ℑ|ℑ +ℒ|ℒ|ℒ +ℓ|ℓ|ℓ +ℕ|ℕ|ℕ +№|№|№ +ℙ|ℙ|ℙ +ℚ|ℚ|ℚ +ℛ|ℛ|ℛ +ℜ|ℜ|ℜ +ℝ|ℝ|ℝ +℠|℠|℠ +℡|℡|℡ +™|™|™ +ℤ|ℤ|ℤ +Ω|Ω|Ω +ℨ|ℨ|ℨ +K|K|K +Å|Å|Å +ℬ|ℬ|ℬ +ℭ|ℭ|ℭ +ℯ|ℯ|ℯ +ℰ|ℰ|ℰ +ℱ|ℱ|ℱ +ℳ|ℳ|ℳ +ℴ|ℴ|ℴ +ℵ|ℵ|ℵ +ℶ|ℶ|ℶ +ℷ|ℷ|ℷ +ℸ|ℸ|ℸ +ℹ|ℹ|ℹ +℻|℻|℻ +ℼ|ℼ|ℼ +ℽ|ℽ|ℽ +ℾ|ℾ|ℾ +ℿ|ℿ|ℿ +⅀|⅀|⅀ +ⅅ|ⅅ|ⅅ +ⅆ|ⅆ|ⅆ +ⅇ|ⅇ|ⅇ +ⅈ|ⅈ|ⅈ +ⅉ|ⅉ|ⅉ +⅐|⅐|⅐ +⅑|⅑|⅑ +⅒|⅒|⅒ +⅓|⅓|⅓ +⅔|⅔|⅔ +⅕|⅕|⅕ +⅖|⅖|⅖ +⅗|⅗|⅗ +⅘|⅘|⅘ +⅙|⅙|⅙ +⅚|⅚|⅚ +⅛|⅛|⅛ +⅜|⅜|⅜ +⅝|⅝|⅝ +⅞|⅞|⅞ +⅟|⅟|⅟ +Ⅰ|Ⅰ|Ⅰ +Ⅱ|Ⅱ|Ⅱ +Ⅲ|Ⅲ|Ⅲ +Ⅳ|Ⅳ|Ⅳ +Ⅴ|Ⅴ|Ⅴ +Ⅵ|Ⅵ|Ⅵ +Ⅶ|Ⅶ|Ⅶ +Ⅷ|Ⅷ|Ⅷ +Ⅸ|Ⅸ|Ⅸ +Ⅹ|Ⅹ|Ⅹ +Ⅺ|Ⅺ|Ⅺ +Ⅻ|Ⅻ|Ⅻ +Ⅼ|Ⅼ|Ⅼ +Ⅽ|Ⅽ|Ⅽ +Ⅾ|Ⅾ|Ⅾ +Ⅿ|Ⅿ|Ⅿ +ⅰ|ⅰ|ⅰ +ⅱ|ⅱ|ⅱ +ⅲ|ⅲ|ⅲ +ⅳ|ⅳ|ⅳ +ⅴ|ⅴ|ⅴ +ⅵ|ⅵ|ⅵ +ⅶ|ⅶ|ⅶ +ⅷ|ⅷ|ⅷ +ⅸ|ⅸ|ⅸ +ⅹ|ⅹ|ⅹ +ⅺ|ⅺ|ⅺ +ⅻ|ⅻ|ⅻ +ⅼ|ⅼ|ⅼ +ⅽ|ⅽ|ⅽ +ⅾ|ⅾ|ⅾ +ⅿ|ⅿ|ⅿ +↉|↉|↉ +↚|↚|↚ +↛|↛|↛ +↮|↮|↮ +⇍|⇍|⇍ +⇎|⇎|⇎ +⇏|⇏|⇏ +∄|∄|∄ +∉|∉|∉ +∌|∌|∌ +∤|∤|∤ +∦|∦|∦ +∬|∬|∬ +∭|∭|∭ +∯|∯|∯ +∰|∰|∰ +≁|≁|≁ +≄|≄|≄ +≇|≇|≇ +≉|≉|≉ +≠|≠|≠ +≢|≢|≢ +≭|≭|≭ +≮|≮|≮ +≯|≯|≯ +≰|≰|≰ +≱|≱|≱ +≴|≴|≴ +≵|≵|≵ +≸|≸|≸ +≹|≹|≹ +⊀|⊀|⊀ +⊁|⊁|⊁ +⊄|⊄|⊄ +⊅|⊅|⊅ +⊈|⊈|⊈ +⊉|⊉|⊉ +⊬|⊬|⊬ +⊭|⊭|⊭ +⊮|⊮|⊮ +⊯|⊯|⊯ +⋠|⋠|⋠ +⋡|⋡|⋡ +⋢|⋢|⋢ +⋣|⋣|⋣ +⋪|⋪|⋪ +⋫|⋫|⋫ +⋬|⋬|⋬ +⋭|⋭|⋭ +〈|〈|〈 +〉|〉|〉 +①|①|① +②|②|② +③|③|③ +④|④|④ +⑤|⑤|⑤ +⑥|⑥|⑥ +⑦|⑦|⑦ +⑧|⑧|⑧ +⑨|⑨|⑨ +⑩|⑩|⑩ +⑪|⑪|⑪ +⑫|⑫|⑫ +⑬|⑬|⑬ +⑭|⑭|⑭ +⑮|⑮|⑮ +⑯|⑯|⑯ +⑰|⑰|⑰ +⑱|⑱|⑱ +⑲|⑲|⑲ +⑳|⑳|⑳ +⑴|⑴|⑴ +⑵|⑵|⑵ +⑶|⑶|⑶ +⑷|⑷|⑷ +⑸|⑸|⑸ +⑹|⑹|⑹ +⑺|⑺|⑺ +⑻|⑻|⑻ +⑼|⑼|⑼ +⑽|⑽|⑽ +⑾|⑾|⑾ +⑿|⑿|⑿ +⒀|⒀|⒀ +⒁|⒁|⒁ +⒂|⒂|⒂ +⒃|⒃|⒃ +⒄|⒄|⒄ +⒅|⒅|⒅ +⒆|⒆|⒆ +⒇|⒇|⒇ +⒈|⒈|⒈ +⒉|⒉|⒉ +⒊|⒊|⒊ +⒋|⒋|⒋ +⒌|⒌|⒌ +⒍|⒍|⒍ +⒎|⒎|⒎ +⒏|⒏|⒏ +⒐|⒐|⒐ +⒑|⒑|⒑ +⒒|⒒|⒒ +⒓|⒓|⒓ +⒔|⒔|⒔ +⒕|⒕|⒕ +⒖|⒖|⒖ +⒗|⒗|⒗ +⒘|⒘|⒘ +⒙|⒙|⒙ +⒚|⒚|⒚ +⒛|⒛|⒛ +⒜|⒜|⒜ +⒝|⒝|⒝ +⒞|⒞|⒞ +⒟|⒟|⒟ +⒠|⒠|⒠ +⒡|⒡|⒡ +⒢|⒢|⒢ +⒣|⒣|⒣ +⒤|⒤|⒤ +⒥|⒥|⒥ +⒦|⒦|⒦ +⒧|⒧|⒧ +⒨|⒨|⒨ +⒩|⒩|⒩ +⒪|⒪|⒪ +⒫|⒫|⒫ +⒬|⒬|⒬ +⒭|⒭|⒭ +⒮|⒮|⒮ +⒯|⒯|⒯ +⒰|⒰|⒰ +⒱|⒱|⒱ +⒲|⒲|⒲ +⒳|⒳|⒳ +⒴|⒴|⒴ +⒵|⒵|⒵ +Ⓐ|Ⓐ|Ⓐ +Ⓑ|Ⓑ|Ⓑ +Ⓒ|Ⓒ|Ⓒ +Ⓓ|Ⓓ|Ⓓ +Ⓔ|Ⓔ|Ⓔ +Ⓕ|Ⓕ|Ⓕ +Ⓖ|Ⓖ|Ⓖ +Ⓗ|Ⓗ|Ⓗ +Ⓘ|Ⓘ|Ⓘ +Ⓙ|Ⓙ|Ⓙ +Ⓚ|Ⓚ|Ⓚ +Ⓛ|Ⓛ|Ⓛ +Ⓜ|Ⓜ|Ⓜ +Ⓝ|Ⓝ|Ⓝ +Ⓞ|Ⓞ|Ⓞ +Ⓟ|Ⓟ|Ⓟ +Ⓠ|Ⓠ|Ⓠ +Ⓡ|Ⓡ|Ⓡ +Ⓢ|Ⓢ|Ⓢ +Ⓣ|Ⓣ|Ⓣ +Ⓤ|Ⓤ|Ⓤ +Ⓥ|Ⓥ|Ⓥ +Ⓦ|Ⓦ|Ⓦ +Ⓧ|Ⓧ|Ⓧ +Ⓨ|Ⓨ|Ⓨ +Ⓩ|Ⓩ|Ⓩ +ⓐ|ⓐ|ⓐ +ⓑ|ⓑ|ⓑ +ⓒ|ⓒ|ⓒ +ⓓ|ⓓ|ⓓ +ⓔ|ⓔ|ⓔ +ⓕ|ⓕ|ⓕ +ⓖ|ⓖ|ⓖ +ⓗ|ⓗ|ⓗ +ⓘ|ⓘ|ⓘ +ⓙ|ⓙ|ⓙ +ⓚ|ⓚ|ⓚ +ⓛ|ⓛ|ⓛ +ⓜ|ⓜ|ⓜ +ⓝ|ⓝ|ⓝ +ⓞ|ⓞ|ⓞ +ⓟ|ⓟ|ⓟ +ⓠ|ⓠ|ⓠ +ⓡ|ⓡ|ⓡ +ⓢ|ⓢ|ⓢ +ⓣ|ⓣ|ⓣ +ⓤ|ⓤ|ⓤ +ⓥ|ⓥ|ⓥ +ⓦ|ⓦ|ⓦ +ⓧ|ⓧ|ⓧ +ⓨ|ⓨ|ⓨ +ⓩ|ⓩ|ⓩ +⓪|⓪|⓪ +⨌|⨌|⨌ +⩴|⩴|⩴ +⩵|⩵|⩵ +⩶|⩶|⩶ +⫝̸|⫝̸|⫝̸ +ⱼ|ⱼ|ⱼ +ⱽ|ⱽ|ⱽ +ⵯ|ⵯ|ⵯ +⺟|⺟|⺟ +⻳|⻳|⻳ +⼀|⼀|⼀ +⼁|⼁|⼁ +⼂|⼂|⼂ +⼃|⼃|⼃ +⼄|⼄|⼄ +⼅|⼅|⼅ +⼆|⼆|⼆ +⼇|⼇|⼇ +⼈|⼈|⼈ +⼉|⼉|⼉ +⼊|⼊|⼊ +⼋|⼋|⼋ +⼌|⼌|⼌ +⼍|⼍|⼍ +⼎|⼎|⼎ +⼏|⼏|⼏ +⼐|⼐|⼐ +⼑|⼑|⼑ +⼒|⼒|⼒ +⼓|⼓|⼓ +⼔|⼔|⼔ +⼕|⼕|⼕ +⼖|⼖|⼖ +⼗|⼗|⼗ +⼘|⼘|⼘ +⼙|⼙|⼙ +⼚|⼚|⼚ +⼛|⼛|⼛ +⼜|⼜|⼜ +⼝|⼝|⼝ +⼞|⼞|⼞ +⼟|⼟|⼟ +⼠|⼠|⼠ +⼡|⼡|⼡ +⼢|⼢|⼢ +⼣|⼣|⼣ +⼤|⼤|⼤ +⼥|⼥|⼥ +⼦|⼦|⼦ +⼧|⼧|⼧ +⼨|⼨|⼨ +⼩|⼩|⼩ +⼪|⼪|⼪ +⼫|⼫|⼫ +⼬|⼬|⼬ +⼭|⼭|⼭ +⼮|⼮|⼮ +⼯|⼯|⼯ +⼰|⼰|⼰ +⼱|⼱|⼱ +⼲|⼲|⼲ +⼳|⼳|⼳ +⼴|⼴|⼴ +⼵|⼵|⼵ +⼶|⼶|⼶ +⼷|⼷|⼷ +⼸|⼸|⼸ +⼹|⼹|⼹ +⼺|⼺|⼺ +⼻|⼻|⼻ +⼼|⼼|⼼ +⼽|⼽|⼽ +⼾|⼾|⼾ +⼿|⼿|⼿ +⽀|⽀|⽀ +⽁|⽁|⽁ +⽂|⽂|⽂ +⽃|⽃|⽃ +⽄|⽄|⽄ +⽅|⽅|⽅ +⽆|⽆|⽆ +⽇|⽇|⽇ +⽈|⽈|⽈ +⽉|⽉|⽉ +⽊|⽊|⽊ +⽋|⽋|⽋ +⽌|⽌|⽌ +⽍|⽍|⽍ +⽎|⽎|⽎ +⽏|⽏|⽏ +⽐|⽐|⽐ +⽑|⽑|⽑ +⽒|⽒|⽒ +⽓|⽓|⽓ +⽔|⽔|⽔ +⽕|⽕|⽕ +⽖|⽖|⽖ +⽗|⽗|⽗ +⽘|⽘|⽘ +⽙|⽙|⽙ +⽚|⽚|⽚ +⽛|⽛|⽛ +⽜|⽜|⽜ +⽝|⽝|⽝ +⽞|⽞|⽞ +⽟|⽟|⽟ +⽠|⽠|⽠ +⽡|⽡|⽡ +⽢|⽢|⽢ +⽣|⽣|⽣ +⽤|⽤|⽤ +⽥|⽥|⽥ +⽦|⽦|⽦ +⽧|⽧|⽧ +⽨|⽨|⽨ +⽩|⽩|⽩ +⽪|⽪|⽪ +⽫|⽫|⽫ +⽬|⽬|⽬ +⽭|⽭|⽭ +⽮|⽮|⽮ +⽯|⽯|⽯ +⽰|⽰|⽰ +⽱|⽱|⽱ +⽲|⽲|⽲ +⽳|⽳|⽳ +⽴|⽴|⽴ +⽵|⽵|⽵ +⽶|⽶|⽶ +⽷|⽷|⽷ +⽸|⽸|⽸ +⽹|⽹|⽹ +⽺|⽺|⽺ +⽻|⽻|⽻ +⽼|⽼|⽼ +⽽|⽽|⽽ +⽾|⽾|⽾ +⽿|⽿|⽿ +⾀|⾀|⾀ +⾁|⾁|⾁ +⾂|⾂|⾂ +⾃|⾃|⾃ +⾄|⾄|⾄ +⾅|⾅|⾅ +⾆|⾆|⾆ +⾇|⾇|⾇ +⾈|⾈|⾈ +⾉|⾉|⾉ +⾊|⾊|⾊ +⾋|⾋|⾋ +⾌|⾌|⾌ +⾍|⾍|⾍ +⾎|⾎|⾎ +⾏|⾏|⾏ +⾐|⾐|⾐ +⾑|⾑|⾑ +⾒|⾒|⾒ +⾓|⾓|⾓ +⾔|⾔|⾔ +⾕|⾕|⾕ +⾖|⾖|⾖ +⾗|⾗|⾗ +⾘|⾘|⾘ +⾙|⾙|⾙ +⾚|⾚|⾚ +⾛|⾛|⾛ +⾜|⾜|⾜ +⾝|⾝|⾝ +⾞|⾞|⾞ +⾟|⾟|⾟ +⾠|⾠|⾠ +⾡|⾡|⾡ +⾢|⾢|⾢ +⾣|⾣|⾣ +⾤|⾤|⾤ +⾥|⾥|⾥ +⾦|⾦|⾦ +⾧|⾧|⾧ +⾨|⾨|⾨ +⾩|⾩|⾩ +⾪|⾪|⾪ +⾫|⾫|⾫ +⾬|⾬|⾬ +⾭|⾭|⾭ +⾮|⾮|⾮ +⾯|⾯|⾯ +⾰|⾰|⾰ +⾱|⾱|⾱ +⾲|⾲|⾲ +⾳|⾳|⾳ +⾴|⾴|⾴ +⾵|⾵|⾵ +⾶|⾶|⾶ +⾷|⾷|⾷ +⾸|⾸|⾸ +⾹|⾹|⾹ +⾺|⾺|⾺ +⾻|⾻|⾻ +⾼|⾼|⾼ +⾽|⾽|⾽ +⾾|⾾|⾾ +⾿|⾿|⾿ +⿀|⿀|⿀ +⿁|⿁|⿁ +⿂|⿂|⿂ +⿃|⿃|⿃ +⿄|⿄|⿄ +⿅|⿅|⿅ +⿆|⿆|⿆ +⿇|⿇|⿇ +⿈|⿈|⿈ +⿉|⿉|⿉ +⿊|⿊|⿊ +⿋|⿋|⿋ +⿌|⿌|⿌ +⿍|⿍|⿍ +⿎|⿎|⿎ +⿏|⿏|⿏ +⿐|⿐|⿐ +⿑|⿑|⿑ +⿒|⿒|⿒ +⿓|⿓|⿓ +⿔|⿔|⿔ +⿕|⿕|⿕ + | |  +〶|〶|〶 +〸|〸|〸 +〹|〹|〹 +〺|〺|〺 +が|が|が +ぎ|ぎ|ぎ +ぐ|ぐ|ぐ +げ|げ|げ +ご|ご|ご +ざ|ざ|ざ +じ|じ|じ +ず|ず|ず +ぜ|ぜ|ぜ +ぞ|ぞ|ぞ +だ|だ|だ +ぢ|ぢ|ぢ +づ|づ|づ +で|で|で +ど|ど|ど +ば|ば|ば +ぱ|ぱ|ぱ +び|び|び +ぴ|ぴ|ぴ +ぶ|ぶ|ぶ +ぷ|ぷ|ぷ +べ|べ|べ +ぺ|ぺ|ぺ +ぼ|ぼ|ぼ +ぽ|ぽ|ぽ +ゔ|ゔ|ゔ +゛|゛|゛ +゜|゜|゜ +ゞ|ゞ|ゞ +ゟ|ゟ|ゟ +ガ|ガ|ガ +ギ|ギ|ギ +グ|グ|グ +ゲ|ゲ|ゲ +ゴ|ゴ|ゴ +ザ|ザ|ザ +ジ|ジ|ジ +ズ|ズ|ズ +ゼ|ゼ|ゼ +ゾ|ゾ|ゾ +ダ|ダ|ダ +ヂ|ヂ|ヂ +ヅ|ヅ|ヅ +デ|デ|デ +ド|ド|ド +バ|バ|バ +パ|パ|パ +ビ|ビ|ビ +ピ|ピ|ピ +ブ|ブ|ブ +プ|プ|プ +ベ|ベ|ベ +ペ|ペ|ペ +ボ|ボ|ボ +ポ|ポ|ポ +ヴ|ヴ|ヴ +ヷ|ヷ|ヷ +ヸ|ヸ|ヸ +ヹ|ヹ|ヹ +ヺ|ヺ|ヺ +ヾ|ヾ|ヾ +ヿ|ヿ|ヿ +ㄱ|ㄱ|ㄱ +ㄲ|ㄲ|ㄲ +ㄳ|ㄳ|ㄳ +ㄴ|ㄴ|ㄴ +ㄵ|ㄵ|ㄵ +ㄶ|ㄶ|ㄶ +ㄷ|ㄷ|ㄷ +ㄸ|ㄸ|ㄸ +ㄹ|ㄹ|ㄹ +ㄺ|ㄺ|ㄺ +ㄻ|ㄻ|ㄻ +ㄼ|ㄼ|ㄼ +ㄽ|ㄽ|ㄽ +ㄾ|ㄾ|ㄾ +ㄿ|ㄿ|ㄿ +ㅀ|ㅀ|ㅀ +ㅁ|ㅁ|ㅁ +ㅂ|ㅂ|ㅂ +ㅃ|ㅃ|ㅃ +ㅄ|ㅄ|ㅄ +ㅅ|ㅅ|ㅅ +ㅆ|ㅆ|ㅆ +ㅇ|ㅇ|ㅇ +ㅈ|ㅈ|ㅈ +ㅉ|ㅉ|ㅉ +ㅊ|ㅊ|ㅊ +ㅋ|ㅋ|ㅋ +ㅌ|ㅌ|ㅌ +ㅍ|ㅍ|ㅍ +ㅎ|ㅎ|ㅎ +ㅏ|ㅏ|ㅏ +ㅐ|ㅐ|ㅐ +ㅑ|ㅑ|ㅑ +ㅒ|ㅒ|ㅒ +ㅓ|ㅓ|ㅓ +ㅔ|ㅔ|ㅔ +ㅕ|ㅕ|ㅕ +ㅖ|ㅖ|ㅖ +ㅗ|ㅗ|ㅗ +ㅘ|ㅘ|ㅘ +ㅙ|ㅙ|ㅙ +ㅚ|ㅚ|ㅚ +ㅛ|ㅛ|ㅛ +ㅜ|ㅜ|ㅜ +ㅝ|ㅝ|ㅝ +ㅞ|ㅞ|ㅞ +ㅟ|ㅟ|ㅟ +ㅠ|ㅠ|ㅠ +ㅡ|ㅡ|ㅡ +ㅢ|ㅢ|ㅢ +ㅣ|ㅣ|ㅣ +ㅤ|ㅤ|ㅤ +ㅥ|ㅥ|ㅥ +ㅦ|ㅦ|ㅦ +ㅧ|ㅧ|ㅧ +ㅨ|ㅨ|ㅨ +ㅩ|ㅩ|ㅩ +ㅪ|ㅪ|ㅪ +ㅫ|ㅫ|ㅫ +ㅬ|ㅬ|ㅬ +ㅭ|ㅭ|ㅭ +ㅮ|ㅮ|ㅮ +ㅯ|ㅯ|ㅯ +ㅰ|ㅰ|ㅰ +ㅱ|ㅱ|ㅱ +ㅲ|ㅲ|ㅲ +ㅳ|ㅳ|ㅳ +ㅴ|ㅴ|ㅴ +ㅵ|ㅵ|ㅵ +ㅶ|ㅶ|ㅶ +ㅷ|ㅷ|ㅷ +ㅸ|ㅸ|ㅸ +ㅹ|ㅹ|ㅹ +ㅺ|ㅺ|ㅺ +ㅻ|ㅻ|ㅻ +ㅼ|ㅼ|ㅼ +ㅽ|ㅽ|ㅽ +ㅾ|ㅾ|ㅾ +ㅿ|ㅿ|ㅿ +ㆀ|ㆀ|ㆀ +ㆁ|ㆁ|ㆁ +ㆂ|ㆂ|ㆂ +ㆃ|ㆃ|ㆃ +ㆄ|ㆄ|ㆄ +ㆅ|ㆅ|ㆅ +ㆆ|ㆆ|ㆆ +ㆇ|ㆇ|ㆇ +ㆈ|ㆈ|ㆈ +ㆉ|ㆉ|ㆉ +ㆊ|ㆊ|ㆊ +ㆋ|ㆋ|ㆋ +ㆌ|ㆌ|ㆌ +ㆍ|ㆍ|ㆍ +ㆎ|ㆎ|ㆎ +㆒|㆒|㆒ +㆓|㆓|㆓ +㆔|㆔|㆔ +㆕|㆕|㆕ +㆖|㆖|㆖ +㆗|㆗|㆗ +㆘|㆘|㆘ +㆙|㆙|㆙ +㆚|㆚|㆚ +㆛|㆛|㆛ +㆜|㆜|㆜ +㆝|㆝|㆝ +㆞|㆞|㆞ +㆟|㆟|㆟ +㈀|㈀|㈀ +㈁|㈁|㈁ +㈂|㈂|㈂ +㈃|㈃|㈃ +㈄|㈄|㈄ +㈅|㈅|㈅ +㈆|㈆|㈆ +㈇|㈇|㈇ +㈈|㈈|㈈ +㈉|㈉|㈉ +㈊|㈊|㈊ +㈋|㈋|㈋ +㈌|㈌|㈌ +㈍|㈍|㈍ +㈎|㈎|㈎ +㈏|㈏|㈏ +㈐|㈐|㈐ +㈑|㈑|㈑ +㈒|㈒|㈒ +㈓|㈓|㈓ +㈔|㈔|㈔ +㈕|㈕|㈕ +㈖|㈖|㈖ +㈗|㈗|㈗ +㈘|㈘|㈘ +㈙|㈙|㈙ +㈚|㈚|㈚ +㈛|㈛|㈛ +㈜|㈜|㈜ +㈝|㈝|㈝ +㈞|㈞|㈞ +㈠|㈠|㈠ +㈡|㈡|㈡ +㈢|㈢|㈢ +㈣|㈣|㈣ +㈤|㈤|㈤ +㈥|㈥|㈥ +㈦|㈦|㈦ +㈧|㈧|㈧ +㈨|㈨|㈨ +㈩|㈩|㈩ +㈪|㈪|㈪ +㈫|㈫|㈫ +㈬|㈬|㈬ +㈭|㈭|㈭ +㈮|㈮|㈮ +㈯|㈯|㈯ +㈰|㈰|㈰ +㈱|㈱|㈱ +㈲|㈲|㈲ +㈳|㈳|㈳ +㈴|㈴|㈴ +㈵|㈵|㈵ +㈶|㈶|㈶ +㈷|㈷|㈷ +㈸|㈸|㈸ +㈹|㈹|㈹ +㈺|㈺|㈺ +㈻|㈻|㈻ +㈼|㈼|㈼ +㈽|㈽|㈽ +㈾|㈾|㈾ +㈿|㈿|㈿ +㉀|㉀|㉀ +㉁|㉁|㉁ +㉂|㉂|㉂ +㉃|㉃|㉃ +㉄|㉄|㉄ +㉅|㉅|㉅ +㉆|㉆|㉆ +㉇|㉇|㉇ +㉐|㉐|㉐ +㉑|㉑|㉑ +㉒|㉒|㉒ +㉓|㉓|㉓ +㉔|㉔|㉔ +㉕|㉕|㉕ +㉖|㉖|㉖ +㉗|㉗|㉗ +㉘|㉘|㉘ +㉙|㉙|㉙ +㉚|㉚|㉚ +㉛|㉛|㉛ +㉜|㉜|㉜ +㉝|㉝|㉝ +㉞|㉞|㉞ +㉟|㉟|㉟ +㉠|㉠|㉠ +㉡|㉡|㉡ +㉢|㉢|㉢ +㉣|㉣|㉣ +㉤|㉤|㉤ +㉥|㉥|㉥ +㉦|㉦|㉦ +㉧|㉧|㉧ +㉨|㉨|㉨ +㉩|㉩|㉩ +㉪|㉪|㉪ +㉫|㉫|㉫ +㉬|㉬|㉬ +㉭|㉭|㉭ +㉮|㉮|㉮ +㉯|㉯|㉯ +㉰|㉰|㉰ +㉱|㉱|㉱ +㉲|㉲|㉲ +㉳|㉳|㉳ +㉴|㉴|㉴ +㉵|㉵|㉵ +㉶|㉶|㉶ +㉷|㉷|㉷ +㉸|㉸|㉸ +㉹|㉹|㉹ +㉺|㉺|㉺ +㉻|㉻|㉻ +㉼|㉼|㉼ +㉽|㉽|㉽ +㉾|㉾|㉾ +㊀|㊀|㊀ +㊁|㊁|㊁ +㊂|㊂|㊂ +㊃|㊃|㊃ +㊄|㊄|㊄ +㊅|㊅|㊅ +㊆|㊆|㊆ +㊇|㊇|㊇ +㊈|㊈|㊈ +㊉|㊉|㊉ +㊊|㊊|㊊ +㊋|㊋|㊋ +㊌|㊌|㊌ +㊍|㊍|㊍ +㊎|㊎|㊎ +㊏|㊏|㊏ +㊐|㊐|㊐ +㊑|㊑|㊑ +㊒|㊒|㊒ +㊓|㊓|㊓ +㊔|㊔|㊔ +㊕|㊕|㊕ +㊖|㊖|㊖ +㊗|㊗|㊗ +㊘|㊘|㊘ +㊙|㊙|㊙ +㊚|㊚|㊚ +㊛|㊛|㊛ +㊜|㊜|㊜ +㊝|㊝|㊝ +㊞|㊞|㊞ +㊟|㊟|㊟ +㊠|㊠|㊠ +㊡|㊡|㊡ +㊢|㊢|㊢ +㊣|㊣|㊣ +㊤|㊤|㊤ +㊥|㊥|㊥ +㊦|㊦|㊦ +㊧|㊧|㊧ +㊨|㊨|㊨ +㊩|㊩|㊩ +㊪|㊪|㊪ +㊫|㊫|㊫ +㊬|㊬|㊬ +㊭|㊭|㊭ +㊮|㊮|㊮ +㊯|㊯|㊯ +㊰|㊰|㊰ +㊱|㊱|㊱ +㊲|㊲|㊲ +㊳|㊳|㊳ +㊴|㊴|㊴ +㊵|㊵|㊵ +㊶|㊶|㊶ +㊷|㊷|㊷ +㊸|㊸|㊸ +㊹|㊹|㊹ +㊺|㊺|㊺ +㊻|㊻|㊻ +㊼|㊼|㊼ +㊽|㊽|㊽ +㊾|㊾|㊾ +㊿|㊿|㊿ +㋀|㋀|㋀ +㋁|㋁|㋁ +㋂|㋂|㋂ +㋃|㋃|㋃ +㋄|㋄|㋄ +㋅|㋅|㋅ +㋆|㋆|㋆ +㋇|㋇|㋇ +㋈|㋈|㋈ +㋉|㋉|㋉ +㋊|㋊|㋊ +㋋|㋋|㋋ +㋌|㋌|㋌ +㋍|㋍|㋍ +㋎|㋎|㋎ +㋏|㋏|㋏ +㋐|㋐|㋐ +㋑|㋑|㋑ +㋒|㋒|㋒ +㋓|㋓|㋓ +㋔|㋔|㋔ +㋕|㋕|㋕ +㋖|㋖|㋖ +㋗|㋗|㋗ +㋘|㋘|㋘ +㋙|㋙|㋙ +㋚|㋚|㋚ +㋛|㋛|㋛ +㋜|㋜|㋜ +㋝|㋝|㋝ +㋞|㋞|㋞ +㋟|㋟|㋟ +㋠|㋠|㋠ +㋡|㋡|㋡ +㋢|㋢|㋢ +㋣|㋣|㋣ +㋤|㋤|㋤ +㋥|㋥|㋥ +㋦|㋦|㋦ +㋧|㋧|㋧ +㋨|㋨|㋨ +㋩|㋩|㋩ +㋪|㋪|㋪ +㋫|㋫|㋫ +㋬|㋬|㋬ +㋭|㋭|㋭ +㋮|㋮|㋮ +㋯|㋯|㋯ +㋰|㋰|㋰ +㋱|㋱|㋱ +㋲|㋲|㋲ +㋳|㋳|㋳ +㋴|㋴|㋴ +㋵|㋵|㋵ +㋶|㋶|㋶ +㋷|㋷|㋷ +㋸|㋸|㋸ +㋹|㋹|㋹ +㋺|㋺|㋺ +㋻|㋻|㋻ +㋼|㋼|㋼ +㋽|㋽|㋽ +㋾|㋾|㋾ +㌀|㌀|㌀ +㌁|㌁|㌁ +㌂|㌂|㌂ +㌃|㌃|㌃ +㌄|㌄|㌄ +㌅|㌅|㌅ +㌆|㌆|㌆ +㌇|㌇|㌇ +㌈|㌈|㌈ +㌉|㌉|㌉ +㌊|㌊|㌊ +㌋|㌋|㌋ +㌌|㌌|㌌ +㌍|㌍|㌍ +㌎|㌎|㌎ +㌏|㌏|㌏ +㌐|㌐|㌐ +㌑|㌑|㌑ +㌒|㌒|㌒ +㌓|㌓|㌓ +㌔|㌔|㌔ +㌕|㌕|㌕ +㌖|㌖|㌖ +㌗|㌗|㌗ +㌘|㌘|㌘ +㌙|㌙|㌙ +㌚|㌚|㌚ +㌛|㌛|㌛ +㌜|㌜|㌜ +㌝|㌝|㌝ +㌞|㌞|㌞ +㌟|㌟|㌟ +㌠|㌠|㌠ +㌡|㌡|㌡ +㌢|㌢|㌢ +㌣|㌣|㌣ +㌤|㌤|㌤ +㌥|㌥|㌥ +㌦|㌦|㌦ +㌧|㌧|㌧ +㌨|㌨|㌨ +㌩|㌩|㌩ +㌪|㌪|㌪ +㌫|㌫|㌫ +㌬|㌬|㌬ +㌭|㌭|㌭ +㌮|㌮|㌮ +㌯|㌯|㌯ +㌰|㌰|㌰ +㌱|㌱|㌱ +㌲|㌲|㌲ +㌳|㌳|㌳ +㌴|㌴|㌴ +㌵|㌵|㌵ +㌶|㌶|㌶ +㌷|㌷|㌷ +㌸|㌸|㌸ +㌹|㌹|㌹ +㌺|㌺|㌺ +㌻|㌻|㌻ +㌼|㌼|㌼ +㌽|㌽|㌽ +㌾|㌾|㌾ +㌿|㌿|㌿ +㍀|㍀|㍀ +㍁|㍁|㍁ +㍂|㍂|㍂ +㍃|㍃|㍃ +㍄|㍄|㍄ +㍅|㍅|㍅ +㍆|㍆|㍆ +㍇|㍇|㍇ +㍈|㍈|㍈ +㍉|㍉|㍉ +㍊|㍊|㍊ +㍋|㍋|㍋ +㍌|㍌|㍌ +㍍|㍍|㍍ +㍎|㍎|㍎ +㍏|㍏|㍏ +㍐|㍐|㍐ +㍑|㍑|㍑ +㍒|㍒|㍒ +㍓|㍓|㍓ +㍔|㍔|㍔ +㍕|㍕|㍕ +㍖|㍖|㍖ +㍗|㍗|㍗ +㍘|㍘|㍘ +㍙|㍙|㍙ +㍚|㍚|㍚ +㍛|㍛|㍛ +㍜|㍜|㍜ +㍝|㍝|㍝ +㍞|㍞|㍞ +㍟|㍟|㍟ +㍠|㍠|㍠ +㍡|㍡|㍡ +㍢|㍢|㍢ +㍣|㍣|㍣ +㍤|㍤|㍤ +㍥|㍥|㍥ +㍦|㍦|㍦ +㍧|㍧|㍧ +㍨|㍨|㍨ +㍩|㍩|㍩ +㍪|㍪|㍪ +㍫|㍫|㍫ +㍬|㍬|㍬ +㍭|㍭|㍭ +㍮|㍮|㍮ +㍯|㍯|㍯ +㍰|㍰|㍰ +㍱|㍱|㍱ +㍲|㍲|㍲ +㍳|㍳|㍳ +㍴|㍴|㍴ +㍵|㍵|㍵ +㍶|㍶|㍶ +㍷|㍷|㍷ +㍸|㍸|㍸ +㍹|㍹|㍹ +㍺|㍺|㍺ +㍻|㍻|㍻ +㍼|㍼|㍼ +㍽|㍽|㍽ +㍾|㍾|㍾ +㍿|㍿|㍿ +㎀|㎀|㎀ +㎁|㎁|㎁ +㎂|㎂|㎂ +㎃|㎃|㎃ +㎄|㎄|㎄ +㎅|㎅|㎅ +㎆|㎆|㎆ +㎇|㎇|㎇ +㎈|㎈|㎈ +㎉|㎉|㎉ +㎊|㎊|㎊ +㎋|㎋|㎋ +㎌|㎌|㎌ +㎍|㎍|㎍ +㎎|㎎|㎎ +㎏|㎏|㎏ +㎐|㎐|㎐ +㎑|㎑|㎑ +㎒|㎒|㎒ +㎓|㎓|㎓ +㎔|㎔|㎔ +㎕|㎕|㎕ +㎖|㎖|㎖ +㎗|㎗|㎗ +㎘|㎘|㎘ +㎙|㎙|㎙ +㎚|㎚|㎚ +㎛|㎛|㎛ +㎜|㎜|㎜ +㎝|㎝|㎝ +㎞|㎞|㎞ +㎟|㎟|㎟ +㎠|㎠|㎠ +㎡|㎡|㎡ +㎢|㎢|㎢ +㎣|㎣|㎣ +㎤|㎤|㎤ +㎥|㎥|㎥ +㎦|㎦|㎦ +㎧|㎧|㎧ +㎨|㎨|㎨ +㎩|㎩|㎩ +㎪|㎪|㎪ +㎫|㎫|㎫ +㎬|㎬|㎬ +㎭|㎭|㎭ +㎮|㎮|㎮ +㎯|㎯|㎯ +㎰|㎰|㎰ +㎱|㎱|㎱ +㎲|㎲|㎲ +㎳|㎳|㎳ +㎴|㎴|㎴ +㎵|㎵|㎵ +㎶|㎶|㎶ +㎷|㎷|㎷ +㎸|㎸|㎸ +㎹|㎹|㎹ +㎺|㎺|㎺ +㎻|㎻|㎻ +㎼|㎼|㎼ +㎽|㎽|㎽ +㎾|㎾|㎾ +㎿|㎿|㎿ +㏀|㏀|㏀ +㏁|㏁|㏁ +㏂|㏂|㏂ +㏃|㏃|㏃ +㏄|㏄|㏄ +㏅|㏅|㏅ +㏆|㏆|㏆ +㏇|㏇|㏇ +㏈|㏈|㏈ +㏉|㏉|㏉ +㏊|㏊|㏊ +㏋|㏋|㏋ +㏌|㏌|㏌ +㏍|㏍|㏍ +㏎|㏎|㏎ +㏏|㏏|㏏ +㏐|㏐|㏐ +㏑|㏑|㏑ +㏒|㏒|㏒ +㏓|㏓|㏓ +㏔|㏔|㏔ +㏕|㏕|㏕ +㏖|㏖|㏖ +㏗|㏗|㏗ +㏘|㏘|㏘ +㏙|㏙|㏙ +㏚|㏚|㏚ +㏛|㏛|㏛ +㏜|㏜|㏜ +㏝|㏝|㏝ +㏞|㏞|㏞ +㏟|㏟|㏟ +㏠|㏠|㏠ +㏡|㏡|㏡ +㏢|㏢|㏢ +㏣|㏣|㏣ +㏤|㏤|㏤ +㏥|㏥|㏥ +㏦|㏦|㏦ +㏧|㏧|㏧ +㏨|㏨|㏨ +㏩|㏩|㏩ +㏪|㏪|㏪ +㏫|㏫|㏫ +㏬|㏬|㏬ +㏭|㏭|㏭ +㏮|㏮|㏮ +㏯|㏯|㏯ +㏰|㏰|㏰ +㏱|㏱|㏱ +㏲|㏲|㏲ +㏳|㏳|㏳ +㏴|㏴|㏴ +㏵|㏵|㏵ +㏶|㏶|㏶ +㏷|㏷|㏷ +㏸|㏸|㏸ +㏹|㏹|㏹ +㏺|㏺|㏺ +㏻|㏻|㏻ +㏼|㏼|㏼ +㏽|㏽|㏽ +㏾|㏾|㏾ +㏿|㏿|㏿ +ꚜ|ꚜ|ꚜ +ꚝ|ꚝ|ꚝ +ꝰ|ꝰ|ꝰ +ꟸ|ꟸ|ꟸ +ꟹ|ꟹ|ꟹ +ꭜ|ꭜ|ꭜ +ꭝ|ꭝ|ꭝ +ꭞ|ꭞ|ꭞ +ꭟ|ꭟ|ꭟ +가|가|가 +각|각|각 +갂|갂|갂 +갃|갃|갃 +간|간|간 +갅|갅|갅 +갆|갆|갆 +갇|갇|갇 +갈|갈|갈 +갉|갉|갉 +갊|갊|갊 +갋|갋|갋 +갌|갌|갌 +갍|갍|갍 +갎|갎|갎 +갏|갏|갏 +감|감|감 +갑|갑|갑 +값|값|값 +갓|갓|갓 +갔|갔|갔 +강|강|강 +갖|갖|갖 +갗|갗|갗 +갘|갘|갘 +같|같|같 +갚|갚|갚 +갛|갛|갛 +개|개|개 +객|객|객 +갞|갞|갞 +갟|갟|갟 +갠|갠|갠 +갡|갡|갡 +갢|갢|갢 +갣|갣|갣 +갤|갤|갤 +갥|갥|갥 +갦|갦|갦 +갧|갧|갧 +갨|갨|갨 +갩|갩|갩 +갪|갪|갪 +갫|갫|갫 +갬|갬|갬 +갭|갭|갭 +갮|갮|갮 +갯|갯|갯 +갰|갰|갰 +갱|갱|갱 +갲|갲|갲 +갳|갳|갳 +갴|갴|갴 +갵|갵|갵 +갶|갶|갶 +갷|갷|갷 +갸|갸|갸 +갹|갹|갹 +갺|갺|갺 +갻|갻|갻 +갼|갼|갼 +갽|갽|갽 +갾|갾|갾 +갿|갿|갿 +걀|걀|걀 +걁|걁|걁 +걂|걂|걂 +걃|걃|걃 +걄|걄|걄 +걅|걅|걅 +걆|걆|걆 +걇|걇|걇 +걈|걈|걈 +걉|걉|걉 +걊|걊|걊 +걋|걋|걋 +걌|걌|걌 +걍|걍|걍 +걎|걎|걎 +걏|걏|걏 +걐|걐|걐 +걑|걑|걑 +걒|걒|걒 +걓|걓|걓 +걔|걔|걔 +걕|걕|걕 +걖|걖|걖 +걗|걗|걗 +걘|걘|걘 +걙|걙|걙 +걚|걚|걚 +걛|걛|걛 +걜|걜|걜 +걝|걝|걝 +걞|걞|걞 +걟|걟|걟 +걠|걠|걠 +걡|걡|걡 +걢|걢|걢 +걣|걣|걣 +걤|걤|걤 +걥|걥|걥 +걦|걦|걦 +걧|걧|걧 +걨|걨|걨 +걩|걩|걩 +걪|걪|걪 +걫|걫|걫 +걬|걬|걬 +걭|걭|걭 +걮|걮|걮 +걯|걯|걯 +거|거|거 +걱|걱|걱 +걲|걲|걲 +걳|걳|걳 +건|건|건 +걵|걵|걵 +걶|걶|걶 +걷|걷|걷 +걸|걸|걸 +걹|걹|걹 +걺|걺|걺 +걻|걻|걻 +걼|걼|걼 +걽|걽|걽 +걾|걾|걾 +걿|걿|걿 +검|검|검 +겁|겁|겁 +겂|겂|겂 +것|것|것 +겄|겄|겄 +겅|겅|겅 +겆|겆|겆 +겇|겇|겇 +겈|겈|겈 +겉|겉|겉 +겊|겊|겊 +겋|겋|겋 +게|게|게 +겍|겍|겍 +겎|겎|겎 +겏|겏|겏 +겐|겐|겐 +겑|겑|겑 +겒|겒|겒 +겓|겓|겓 +겔|겔|겔 +겕|겕|겕 +겖|겖|겖 +겗|겗|겗 +겘|겘|겘 +겙|겙|겙 +겚|겚|겚 +겛|겛|겛 +겜|겜|겜 +겝|겝|겝 +겞|겞|겞 +겟|겟|겟 +겠|겠|겠 +겡|겡|겡 +겢|겢|겢 +겣|겣|겣 +겤|겤|겤 +겥|겥|겥 +겦|겦|겦 +겧|겧|겧 +겨|겨|겨 +격|격|격 +겪|겪|겪 +겫|겫|겫 +견|견|견 +겭|겭|겭 +겮|겮|겮 +겯|겯|겯 +결|결|결 +겱|겱|겱 +겲|겲|겲 +겳|겳|겳 +겴|겴|겴 +겵|겵|겵 +겶|겶|겶 +겷|겷|겷 +겸|겸|겸 +겹|겹|겹 +겺|겺|겺 +겻|겻|겻 +겼|겼|겼 +경|경|경 +겾|겾|겾 +겿|겿|겿 +곀|곀|곀 +곁|곁|곁 +곂|곂|곂 +곃|곃|곃 +계|계|계 +곅|곅|곅 +곆|곆|곆 +곇|곇|곇 +곈|곈|곈 +곉|곉|곉 +곊|곊|곊 +곋|곋|곋 +곌|곌|곌 +곍|곍|곍 +곎|곎|곎 +곏|곏|곏 +곐|곐|곐 +곑|곑|곑 +곒|곒|곒 +곓|곓|곓 +곔|곔|곔 +곕|곕|곕 +곖|곖|곖 +곗|곗|곗 +곘|곘|곘 +곙|곙|곙 +곚|곚|곚 +곛|곛|곛 +곜|곜|곜 +곝|곝|곝 +곞|곞|곞 +곟|곟|곟 +고|고|고 +곡|곡|곡 +곢|곢|곢 +곣|곣|곣 +곤|곤|곤 +곥|곥|곥 +곦|곦|곦 +곧|곧|곧 +골|골|골 +곩|곩|곩 +곪|곪|곪 +곫|곫|곫 +곬|곬|곬 +곭|곭|곭 +곮|곮|곮 +곯|곯|곯 +곰|곰|곰 +곱|곱|곱 +곲|곲|곲 +곳|곳|곳 +곴|곴|곴 +공|공|공 +곶|곶|곶 +곷|곷|곷 +곸|곸|곸 +곹|곹|곹 +곺|곺|곺 +곻|곻|곻 +과|과|과 +곽|곽|곽 +곾|곾|곾 +곿|곿|곿 +관|관|관 +괁|괁|괁 +괂|괂|괂 +괃|괃|괃 +괄|괄|괄 +괅|괅|괅 +괆|괆|괆 +괇|괇|괇 +괈|괈|괈 +괉|괉|괉 +괊|괊|괊 +괋|괋|괋 +괌|괌|괌 +괍|괍|괍 +괎|괎|괎 +괏|괏|괏 +괐|괐|괐 +광|광|광 +괒|괒|괒 +괓|괓|괓 +괔|괔|괔 +괕|괕|괕 +괖|괖|괖 +괗|괗|괗 +괘|괘|괘 +괙|괙|괙 +괚|괚|괚 +괛|괛|괛 +괜|괜|괜 +괝|괝|괝 +괞|괞|괞 +괟|괟|괟 +괠|괠|괠 +괡|괡|괡 +괢|괢|괢 +괣|괣|괣 +괤|괤|괤 +괥|괥|괥 +괦|괦|괦 +괧|괧|괧 +괨|괨|괨 +괩|괩|괩 +괪|괪|괪 +괫|괫|괫 +괬|괬|괬 +괭|괭|괭 +괮|괮|괮 +괯|괯|괯 +괰|괰|괰 +괱|괱|괱 +괲|괲|괲 +괳|괳|괳 +괴|괴|괴 +괵|괵|괵 +괶|괶|괶 +괷|괷|괷 +괸|괸|괸 +괹|괹|괹 +괺|괺|괺 +괻|괻|괻 +괼|괼|괼 +괽|괽|괽 +괾|괾|괾 +괿|괿|괿 +굀|굀|굀 +굁|굁|굁 +굂|굂|굂 +굃|굃|굃 +굄|굄|굄 +굅|굅|굅 +굆|굆|굆 +굇|굇|굇 +굈|굈|굈 +굉|굉|굉 +굊|굊|굊 +굋|굋|굋 +굌|굌|굌 +굍|굍|굍 +굎|굎|굎 +굏|굏|굏 +교|교|교 +굑|굑|굑 +굒|굒|굒 +굓|굓|굓 +굔|굔|굔 +굕|굕|굕 +굖|굖|굖 +굗|굗|굗 +굘|굘|굘 +굙|굙|굙 +굚|굚|굚 +굛|굛|굛 +굜|굜|굜 +굝|굝|굝 +굞|굞|굞 +굟|굟|굟 +굠|굠|굠 +굡|굡|굡 +굢|굢|굢 +굣|굣|굣 +굤|굤|굤 +굥|굥|굥 +굦|굦|굦 +굧|굧|굧 +굨|굨|굨 +굩|굩|굩 +굪|굪|굪 +굫|굫|굫 +구|구|구 +국|국|국 +굮|굮|굮 +굯|굯|굯 +군|군|군 +굱|굱|굱 +굲|굲|굲 +굳|굳|굳 +굴|굴|굴 +굵|굵|굵 +굶|굶|굶 +굷|굷|굷 +굸|굸|굸 +굹|굹|굹 +굺|굺|굺 +굻|굻|굻 +굼|굼|굼 +굽|굽|굽 +굾|굾|굾 +굿|굿|굿 +궀|궀|궀 +궁|궁|궁 +궂|궂|궂 +궃|궃|궃 +궄|궄|궄 +궅|궅|궅 +궆|궆|궆 +궇|궇|궇 +궈|궈|궈 +궉|궉|궉 +궊|궊|궊 +궋|궋|궋 +권|권|권 +궍|궍|궍 +궎|궎|궎 +궏|궏|궏 +궐|궐|궐 +궑|궑|궑 +궒|궒|궒 +궓|궓|궓 +궔|궔|궔 +궕|궕|궕 +궖|궖|궖 +궗|궗|궗 +궘|궘|궘 +궙|궙|궙 +궚|궚|궚 +궛|궛|궛 +궜|궜|궜 +궝|궝|궝 +궞|궞|궞 +궟|궟|궟 +궠|궠|궠 +궡|궡|궡 +궢|궢|궢 +궣|궣|궣 +궤|궤|궤 +궥|궥|궥 +궦|궦|궦 +궧|궧|궧 +궨|궨|궨 +궩|궩|궩 +궪|궪|궪 +궫|궫|궫 +궬|궬|궬 +궭|궭|궭 +궮|궮|궮 +궯|궯|궯 +궰|궰|궰 +궱|궱|궱 +궲|궲|궲 +궳|궳|궳 +궴|궴|궴 +궵|궵|궵 +궶|궶|궶 +궷|궷|궷 +궸|궸|궸 +궹|궹|궹 +궺|궺|궺 +궻|궻|궻 +궼|궼|궼 +궽|궽|궽 +궾|궾|궾 +궿|궿|궿 +귀|귀|귀 +귁|귁|귁 +귂|귂|귂 +귃|귃|귃 +귄|귄|귄 +귅|귅|귅 +귆|귆|귆 +귇|귇|귇 +귈|귈|귈 +귉|귉|귉 +귊|귊|귊 +귋|귋|귋 +귌|귌|귌 +귍|귍|귍 +귎|귎|귎 +귏|귏|귏 +귐|귐|귐 +귑|귑|귑 +귒|귒|귒 +귓|귓|귓 +귔|귔|귔 +귕|귕|귕 +귖|귖|귖 +귗|귗|귗 +귘|귘|귘 +귙|귙|귙 +귚|귚|귚 +귛|귛|귛 +규|규|규 +귝|귝|귝 +귞|귞|귞 +귟|귟|귟 +균|균|균 +귡|귡|귡 +귢|귢|귢 +귣|귣|귣 +귤|귤|귤 +귥|귥|귥 +귦|귦|귦 +귧|귧|귧 +귨|귨|귨 +귩|귩|귩 +귪|귪|귪 +귫|귫|귫 +귬|귬|귬 +귭|귭|귭 +귮|귮|귮 +귯|귯|귯 +귰|귰|귰 +귱|귱|귱 +귲|귲|귲 +귳|귳|귳 +귴|귴|귴 +귵|귵|귵 +귶|귶|귶 +귷|귷|귷 +그|그|그 +극|극|극 +귺|귺|귺 +귻|귻|귻 +근|근|근 +귽|귽|귽 +귾|귾|귾 +귿|귿|귿 +글|글|글 +긁|긁|긁 +긂|긂|긂 +긃|긃|긃 +긄|긄|긄 +긅|긅|긅 +긆|긆|긆 +긇|긇|긇 +금|금|금 +급|급|급 +긊|긊|긊 +긋|긋|긋 +긌|긌|긌 +긍|긍|긍 +긎|긎|긎 +긏|긏|긏 +긐|긐|긐 +긑|긑|긑 +긒|긒|긒 +긓|긓|긓 +긔|긔|긔 +긕|긕|긕 +긖|긖|긖 +긗|긗|긗 +긘|긘|긘 +긙|긙|긙 +긚|긚|긚 +긛|긛|긛 +긜|긜|긜 +긝|긝|긝 +긞|긞|긞 +긟|긟|긟 +긠|긠|긠 +긡|긡|긡 +긢|긢|긢 +긣|긣|긣 +긤|긤|긤 +긥|긥|긥 +긦|긦|긦 +긧|긧|긧 +긨|긨|긨 +긩|긩|긩 +긪|긪|긪 +긫|긫|긫 +긬|긬|긬 +긭|긭|긭 +긮|긮|긮 +긯|긯|긯 +기|기|기 +긱|긱|긱 +긲|긲|긲 +긳|긳|긳 +긴|긴|긴 +긵|긵|긵 +긶|긶|긶 +긷|긷|긷 +길|길|길 +긹|긹|긹 +긺|긺|긺 +긻|긻|긻 +긼|긼|긼 +긽|긽|긽 +긾|긾|긾 +긿|긿|긿 +김|김|김 +깁|깁|깁 +깂|깂|깂 +깃|깃|깃 +깄|깄|깄 +깅|깅|깅 +깆|깆|깆 +깇|깇|깇 +깈|깈|깈 +깉|깉|깉 +깊|깊|깊 +깋|깋|깋 +까|까|까 +깍|깍|깍 +깎|깎|깎 +깏|깏|깏 +깐|깐|깐 +깑|깑|깑 +깒|깒|깒 +깓|깓|깓 +깔|깔|깔 +깕|깕|깕 +깖|깖|깖 +깗|깗|깗 +깘|깘|깘 +깙|깙|깙 +깚|깚|깚 +깛|깛|깛 +깜|깜|깜 +깝|깝|깝 +깞|깞|깞 +깟|깟|깟 +깠|깠|깠 +깡|깡|깡 +깢|깢|깢 +깣|깣|깣 +깤|깤|깤 +깥|깥|깥 +깦|깦|깦 +깧|깧|깧 +깨|깨|깨 +깩|깩|깩 +깪|깪|깪 +깫|깫|깫 +깬|깬|깬 +깭|깭|깭 +깮|깮|깮 +깯|깯|깯 +깰|깰|깰 +깱|깱|깱 +깲|깲|깲 +깳|깳|깳 +깴|깴|깴 +깵|깵|깵 +깶|깶|깶 +깷|깷|깷 +깸|깸|깸 +깹|깹|깹 +깺|깺|깺 +깻|깻|깻 +깼|깼|깼 +깽|깽|깽 +깾|깾|깾 +깿|깿|깿 +꺀|꺀|꺀 +꺁|꺁|꺁 +꺂|꺂|꺂 +꺃|꺃|꺃 +꺄|꺄|꺄 +꺅|꺅|꺅 +꺆|꺆|꺆 +꺇|꺇|꺇 +꺈|꺈|꺈 +꺉|꺉|꺉 +꺊|꺊|꺊 +꺋|꺋|꺋 +꺌|꺌|꺌 +꺍|꺍|꺍 +꺎|꺎|꺎 +꺏|꺏|꺏 +꺐|꺐|꺐 +꺑|꺑|꺑 +꺒|꺒|꺒 +꺓|꺓|꺓 +꺔|꺔|꺔 +꺕|꺕|꺕 +꺖|꺖|꺖 +꺗|꺗|꺗 +꺘|꺘|꺘 +꺙|꺙|꺙 +꺚|꺚|꺚 +꺛|꺛|꺛 +꺜|꺜|꺜 +꺝|꺝|꺝 +꺞|꺞|꺞 +꺟|꺟|꺟 +꺠|꺠|꺠 +꺡|꺡|꺡 +꺢|꺢|꺢 +꺣|꺣|꺣 +꺤|꺤|꺤 +꺥|꺥|꺥 +꺦|꺦|꺦 +꺧|꺧|꺧 +꺨|꺨|꺨 +꺩|꺩|꺩 +꺪|꺪|꺪 +꺫|꺫|꺫 +꺬|꺬|꺬 +꺭|꺭|꺭 +꺮|꺮|꺮 +꺯|꺯|꺯 +꺰|꺰|꺰 +꺱|꺱|꺱 +꺲|꺲|꺲 +꺳|꺳|꺳 +꺴|꺴|꺴 +꺵|꺵|꺵 +꺶|꺶|꺶 +꺷|꺷|꺷 +꺸|꺸|꺸 +꺹|꺹|꺹 +꺺|꺺|꺺 +꺻|꺻|꺻 +꺼|꺼|꺼 +꺽|꺽|꺽 +꺾|꺾|꺾 +꺿|꺿|꺿 +껀|껀|껀 +껁|껁|껁 +껂|껂|껂 +껃|껃|껃 +껄|껄|껄 +껅|껅|껅 +껆|껆|껆 +껇|껇|껇 +껈|껈|껈 +껉|껉|껉 +껊|껊|껊 +껋|껋|껋 +껌|껌|껌 +껍|껍|껍 +껎|껎|껎 +껏|껏|껏 +껐|껐|껐 +껑|껑|껑 +껒|껒|껒 +껓|껓|껓 +껔|껔|껔 +껕|껕|껕 +껖|껖|껖 +껗|껗|껗 +께|께|께 +껙|껙|껙 +껚|껚|껚 +껛|껛|껛 +껜|껜|껜 +껝|껝|껝 +껞|껞|껞 +껟|껟|껟 +껠|껠|껠 +껡|껡|껡 +껢|껢|껢 +껣|껣|껣 +껤|껤|껤 +껥|껥|껥 +껦|껦|껦 +껧|껧|껧 +껨|껨|껨 +껩|껩|껩 +껪|껪|껪 +껫|껫|껫 +껬|껬|껬 +껭|껭|껭 +껮|껮|껮 +껯|껯|껯 +껰|껰|껰 +껱|껱|껱 +껲|껲|껲 +껳|껳|껳 +껴|껴|껴 +껵|껵|껵 +껶|껶|껶 +껷|껷|껷 +껸|껸|껸 +껹|껹|껹 +껺|껺|껺 +껻|껻|껻 +껼|껼|껼 +껽|껽|껽 +껾|껾|껾 +껿|껿|껿 +꼀|꼀|꼀 +꼁|꼁|꼁 +꼂|꼂|꼂 +꼃|꼃|꼃 +꼄|꼄|꼄 +꼅|꼅|꼅 +꼆|꼆|꼆 +꼇|꼇|꼇 +꼈|꼈|꼈 +꼉|꼉|꼉 +꼊|꼊|꼊 +꼋|꼋|꼋 +꼌|꼌|꼌 +꼍|꼍|꼍 +꼎|꼎|꼎 +꼏|꼏|꼏 +꼐|꼐|꼐 +꼑|꼑|꼑 +꼒|꼒|꼒 +꼓|꼓|꼓 +꼔|꼔|꼔 +꼕|꼕|꼕 +꼖|꼖|꼖 +꼗|꼗|꼗 +꼘|꼘|꼘 +꼙|꼙|꼙 +꼚|꼚|꼚 +꼛|꼛|꼛 +꼜|꼜|꼜 +꼝|꼝|꼝 +꼞|꼞|꼞 +꼟|꼟|꼟 +꼠|꼠|꼠 +꼡|꼡|꼡 +꼢|꼢|꼢 +꼣|꼣|꼣 +꼤|꼤|꼤 +꼥|꼥|꼥 +꼦|꼦|꼦 +꼧|꼧|꼧 +꼨|꼨|꼨 +꼩|꼩|꼩 +꼪|꼪|꼪 +꼫|꼫|꼫 +꼬|꼬|꼬 +꼭|꼭|꼭 +꼮|꼮|꼮 +꼯|꼯|꼯 +꼰|꼰|꼰 +꼱|꼱|꼱 +꼲|꼲|꼲 +꼳|꼳|꼳 +꼴|꼴|꼴 +꼵|꼵|꼵 +꼶|꼶|꼶 +꼷|꼷|꼷 +꼸|꼸|꼸 +꼹|꼹|꼹 +꼺|꼺|꼺 +꼻|꼻|꼻 +꼼|꼼|꼼 +꼽|꼽|꼽 +꼾|꼾|꼾 +꼿|꼿|꼿 +꽀|꽀|꽀 +꽁|꽁|꽁 +꽂|꽂|꽂 +꽃|꽃|꽃 +꽄|꽄|꽄 +꽅|꽅|꽅 +꽆|꽆|꽆 +꽇|꽇|꽇 +꽈|꽈|꽈 +꽉|꽉|꽉 +꽊|꽊|꽊 +꽋|꽋|꽋 +꽌|꽌|꽌 +꽍|꽍|꽍 +꽎|꽎|꽎 +꽏|꽏|꽏 +꽐|꽐|꽐 +꽑|꽑|꽑 +꽒|꽒|꽒 +꽓|꽓|꽓 +꽔|꽔|꽔 +꽕|꽕|꽕 +꽖|꽖|꽖 +꽗|꽗|꽗 +꽘|꽘|꽘 +꽙|꽙|꽙 +꽚|꽚|꽚 +꽛|꽛|꽛 +꽜|꽜|꽜 +꽝|꽝|꽝 +꽞|꽞|꽞 +꽟|꽟|꽟 +꽠|꽠|꽠 +꽡|꽡|꽡 +꽢|꽢|꽢 +꽣|꽣|꽣 +꽤|꽤|꽤 +꽥|꽥|꽥 +꽦|꽦|꽦 +꽧|꽧|꽧 +꽨|꽨|꽨 +꽩|꽩|꽩 +꽪|꽪|꽪 +꽫|꽫|꽫 +꽬|꽬|꽬 +꽭|꽭|꽭 +꽮|꽮|꽮 +꽯|꽯|꽯 +꽰|꽰|꽰 +꽱|꽱|꽱 +꽲|꽲|꽲 +꽳|꽳|꽳 +꽴|꽴|꽴 +꽵|꽵|꽵 +꽶|꽶|꽶 +꽷|꽷|꽷 +꽸|꽸|꽸 +꽹|꽹|꽹 +꽺|꽺|꽺 +꽻|꽻|꽻 +꽼|꽼|꽼 +꽽|꽽|꽽 +꽾|꽾|꽾 +꽿|꽿|꽿 +꾀|꾀|꾀 +꾁|꾁|꾁 +꾂|꾂|꾂 +꾃|꾃|꾃 +꾄|꾄|꾄 +꾅|꾅|꾅 +꾆|꾆|꾆 +꾇|꾇|꾇 +꾈|꾈|꾈 +꾉|꾉|꾉 +꾊|꾊|꾊 +꾋|꾋|꾋 +꾌|꾌|꾌 +꾍|꾍|꾍 +꾎|꾎|꾎 +꾏|꾏|꾏 +꾐|꾐|꾐 +꾑|꾑|꾑 +꾒|꾒|꾒 +꾓|꾓|꾓 +꾔|꾔|꾔 +꾕|꾕|꾕 +꾖|꾖|꾖 +꾗|꾗|꾗 +꾘|꾘|꾘 +꾙|꾙|꾙 +꾚|꾚|꾚 +꾛|꾛|꾛 +꾜|꾜|꾜 +꾝|꾝|꾝 +꾞|꾞|꾞 +꾟|꾟|꾟 +꾠|꾠|꾠 +꾡|꾡|꾡 +꾢|꾢|꾢 +꾣|꾣|꾣 +꾤|꾤|꾤 +꾥|꾥|꾥 +꾦|꾦|꾦 +꾧|꾧|꾧 +꾨|꾨|꾨 +꾩|꾩|꾩 +꾪|꾪|꾪 +꾫|꾫|꾫 +꾬|꾬|꾬 +꾭|꾭|꾭 +꾮|꾮|꾮 +꾯|꾯|꾯 +꾰|꾰|꾰 +꾱|꾱|꾱 +꾲|꾲|꾲 +꾳|꾳|꾳 +꾴|꾴|꾴 +꾵|꾵|꾵 +꾶|꾶|꾶 +꾷|꾷|꾷 +꾸|꾸|꾸 +꾹|꾹|꾹 +꾺|꾺|꾺 +꾻|꾻|꾻 +꾼|꾼|꾼 +꾽|꾽|꾽 +꾾|꾾|꾾 +꾿|꾿|꾿 +꿀|꿀|꿀 +꿁|꿁|꿁 +꿂|꿂|꿂 +꿃|꿃|꿃 +꿄|꿄|꿄 +꿅|꿅|꿅 +꿆|꿆|꿆 +꿇|꿇|꿇 +꿈|꿈|꿈 +꿉|꿉|꿉 +꿊|꿊|꿊 +꿋|꿋|꿋 +꿌|꿌|꿌 +꿍|꿍|꿍 +꿎|꿎|꿎 +꿏|꿏|꿏 +꿐|꿐|꿐 +꿑|꿑|꿑 +꿒|꿒|꿒 +꿓|꿓|꿓 +꿔|꿔|꿔 +꿕|꿕|꿕 +꿖|꿖|꿖 +꿗|꿗|꿗 +꿘|꿘|꿘 +꿙|꿙|꿙 +꿚|꿚|꿚 +꿛|꿛|꿛 +꿜|꿜|꿜 +꿝|꿝|꿝 +꿞|꿞|꿞 +꿟|꿟|꿟 +꿠|꿠|꿠 +꿡|꿡|꿡 +꿢|꿢|꿢 +꿣|꿣|꿣 +꿤|꿤|꿤 +꿥|꿥|꿥 +꿦|꿦|꿦 +꿧|꿧|꿧 +꿨|꿨|꿨 +꿩|꿩|꿩 +꿪|꿪|꿪 +꿫|꿫|꿫 +꿬|꿬|꿬 +꿭|꿭|꿭 +꿮|꿮|꿮 +꿯|꿯|꿯 +꿰|꿰|꿰 +꿱|꿱|꿱 +꿲|꿲|꿲 +꿳|꿳|꿳 +꿴|꿴|꿴 +꿵|꿵|꿵 +꿶|꿶|꿶 +꿷|꿷|꿷 +꿸|꿸|꿸 +꿹|꿹|꿹 +꿺|꿺|꿺 +꿻|꿻|꿻 +꿼|꿼|꿼 +꿽|꿽|꿽 +꿾|꿾|꿾 +꿿|꿿|꿿 +뀀|뀀|뀀 +뀁|뀁|뀁 +뀂|뀂|뀂 +뀃|뀃|뀃 +뀄|뀄|뀄 +뀅|뀅|뀅 +뀆|뀆|뀆 +뀇|뀇|뀇 +뀈|뀈|뀈 +뀉|뀉|뀉 +뀊|뀊|뀊 +뀋|뀋|뀋 +뀌|뀌|뀌 +뀍|뀍|뀍 +뀎|뀎|뀎 +뀏|뀏|뀏 +뀐|뀐|뀐 +뀑|뀑|뀑 +뀒|뀒|뀒 +뀓|뀓|뀓 +뀔|뀔|뀔 +뀕|뀕|뀕 +뀖|뀖|뀖 +뀗|뀗|뀗 +뀘|뀘|뀘 +뀙|뀙|뀙 +뀚|뀚|뀚 +뀛|뀛|뀛 +뀜|뀜|뀜 +뀝|뀝|뀝 +뀞|뀞|뀞 +뀟|뀟|뀟 +뀠|뀠|뀠 +뀡|뀡|뀡 +뀢|뀢|뀢 +뀣|뀣|뀣 +뀤|뀤|뀤 +뀥|뀥|뀥 +뀦|뀦|뀦 +뀧|뀧|뀧 +뀨|뀨|뀨 +뀩|뀩|뀩 +뀪|뀪|뀪 +뀫|뀫|뀫 +뀬|뀬|뀬 +뀭|뀭|뀭 +뀮|뀮|뀮 +뀯|뀯|뀯 +뀰|뀰|뀰 +뀱|뀱|뀱 +뀲|뀲|뀲 +뀳|뀳|뀳 +뀴|뀴|뀴 +뀵|뀵|뀵 +뀶|뀶|뀶 +뀷|뀷|뀷 +뀸|뀸|뀸 +뀹|뀹|뀹 +뀺|뀺|뀺 +뀻|뀻|뀻 +뀼|뀼|뀼 +뀽|뀽|뀽 +뀾|뀾|뀾 +뀿|뀿|뀿 +끀|끀|끀 +끁|끁|끁 +끂|끂|끂 +끃|끃|끃 +끄|끄|끄 +끅|끅|끅 +끆|끆|끆 +끇|끇|끇 +끈|끈|끈 +끉|끉|끉 +끊|끊|끊 +끋|끋|끋 +끌|끌|끌 +끍|끍|끍 +끎|끎|끎 +끏|끏|끏 +끐|끐|끐 +끑|끑|끑 +끒|끒|끒 +끓|끓|끓 +끔|끔|끔 +끕|끕|끕 +끖|끖|끖 +끗|끗|끗 +끘|끘|끘 +끙|끙|끙 +끚|끚|끚 +끛|끛|끛 +끜|끜|끜 +끝|끝|끝 +끞|끞|끞 +끟|끟|끟 +끠|끠|끠 +끡|끡|끡 +끢|끢|끢 +끣|끣|끣 +끤|끤|끤 +끥|끥|끥 +끦|끦|끦 +끧|끧|끧 +끨|끨|끨 +끩|끩|끩 +끪|끪|끪 +끫|끫|끫 +끬|끬|끬 +끭|끭|끭 +끮|끮|끮 +끯|끯|끯 +끰|끰|끰 +끱|끱|끱 +끲|끲|끲 +끳|끳|끳 +끴|끴|끴 +끵|끵|끵 +끶|끶|끶 +끷|끷|끷 +끸|끸|끸 +끹|끹|끹 +끺|끺|끺 +끻|끻|끻 +끼|끼|끼 +끽|끽|끽 +끾|끾|끾 +끿|끿|끿 +낀|낀|낀 +낁|낁|낁 +낂|낂|낂 +낃|낃|낃 +낄|낄|낄 +낅|낅|낅 +낆|낆|낆 +낇|낇|낇 +낈|낈|낈 +낉|낉|낉 +낊|낊|낊 +낋|낋|낋 +낌|낌|낌 +낍|낍|낍 +낎|낎|낎 +낏|낏|낏 +낐|낐|낐 +낑|낑|낑 +낒|낒|낒 +낓|낓|낓 +낔|낔|낔 +낕|낕|낕 +낖|낖|낖 +낗|낗|낗 +나|나|나 +낙|낙|낙 +낚|낚|낚 +낛|낛|낛 +난|난|난 +낝|낝|낝 +낞|낞|낞 +낟|낟|낟 +날|날|날 +낡|낡|낡 +낢|낢|낢 +낣|낣|낣 +낤|낤|낤 +낥|낥|낥 +낦|낦|낦 +낧|낧|낧 +남|남|남 +납|납|납 +낪|낪|낪 +낫|낫|낫 +났|났|났 +낭|낭|낭 +낮|낮|낮 +낯|낯|낯 +낰|낰|낰 +낱|낱|낱 +낲|낲|낲 +낳|낳|낳 +내|내|내 +낵|낵|낵 +낶|낶|낶 +낷|낷|낷 +낸|낸|낸 +낹|낹|낹 +낺|낺|낺 +낻|낻|낻 +낼|낼|낼 +낽|낽|낽 +낾|낾|낾 +낿|낿|낿 +냀|냀|냀 +냁|냁|냁 +냂|냂|냂 +냃|냃|냃 +냄|냄|냄 +냅|냅|냅 +냆|냆|냆 +냇|냇|냇 +냈|냈|냈 +냉|냉|냉 +냊|냊|냊 +냋|냋|냋 +냌|냌|냌 +냍|냍|냍 +냎|냎|냎 +냏|냏|냏 +냐|냐|냐 +냑|냑|냑 +냒|냒|냒 +냓|냓|냓 +냔|냔|냔 +냕|냕|냕 +냖|냖|냖 +냗|냗|냗 +냘|냘|냘 +냙|냙|냙 +냚|냚|냚 +냛|냛|냛 +냜|냜|냜 +냝|냝|냝 +냞|냞|냞 +냟|냟|냟 +냠|냠|냠 +냡|냡|냡 +냢|냢|냢 +냣|냣|냣 +냤|냤|냤 +냥|냥|냥 +냦|냦|냦 +냧|냧|냧 +냨|냨|냨 +냩|냩|냩 +냪|냪|냪 +냫|냫|냫 +냬|냬|냬 +냭|냭|냭 +냮|냮|냮 +냯|냯|냯 +냰|냰|냰 +냱|냱|냱 +냲|냲|냲 +냳|냳|냳 +냴|냴|냴 +냵|냵|냵 +냶|냶|냶 +냷|냷|냷 +냸|냸|냸 +냹|냹|냹 +냺|냺|냺 +냻|냻|냻 +냼|냼|냼 +냽|냽|냽 +냾|냾|냾 +냿|냿|냿 +넀|넀|넀 +넁|넁|넁 +넂|넂|넂 +넃|넃|넃 +넄|넄|넄 +넅|넅|넅 +넆|넆|넆 +넇|넇|넇 +너|너|너 +넉|넉|넉 +넊|넊|넊 +넋|넋|넋 +넌|넌|넌 +넍|넍|넍 +넎|넎|넎 +넏|넏|넏 +널|널|널 +넑|넑|넑 +넒|넒|넒 +넓|넓|넓 +넔|넔|넔 +넕|넕|넕 +넖|넖|넖 +넗|넗|넗 +넘|넘|넘 +넙|넙|넙 +넚|넚|넚 +넛|넛|넛 +넜|넜|넜 +넝|넝|넝 +넞|넞|넞 +넟|넟|넟 +넠|넠|넠 +넡|넡|넡 +넢|넢|넢 +넣|넣|넣 +네|네|네 +넥|넥|넥 +넦|넦|넦 +넧|넧|넧 +넨|넨|넨 +넩|넩|넩 +넪|넪|넪 +넫|넫|넫 +넬|넬|넬 +넭|넭|넭 +넮|넮|넮 +넯|넯|넯 +넰|넰|넰 +넱|넱|넱 +넲|넲|넲 +넳|넳|넳 +넴|넴|넴 +넵|넵|넵 +넶|넶|넶 +넷|넷|넷 +넸|넸|넸 +넹|넹|넹 +넺|넺|넺 +넻|넻|넻 +넼|넼|넼 +넽|넽|넽 +넾|넾|넾 +넿|넿|넿 +녀|녀|녀 +녁|녁|녁 +녂|녂|녂 +녃|녃|녃 +년|년|년 +녅|녅|녅 +녆|녆|녆 +녇|녇|녇 +녈|녈|녈 +녉|녉|녉 +녊|녊|녊 +녋|녋|녋 +녌|녌|녌 +녍|녍|녍 +녎|녎|녎 +녏|녏|녏 +념|념|념 +녑|녑|녑 +녒|녒|녒 +녓|녓|녓 +녔|녔|녔 +녕|녕|녕 +녖|녖|녖 +녗|녗|녗 +녘|녘|녘 +녙|녙|녙 +녚|녚|녚 +녛|녛|녛 +녜|녜|녜 +녝|녝|녝 +녞|녞|녞 +녟|녟|녟 +녠|녠|녠 +녡|녡|녡 +녢|녢|녢 +녣|녣|녣 +녤|녤|녤 +녥|녥|녥 +녦|녦|녦 +녧|녧|녧 +녨|녨|녨 +녩|녩|녩 +녪|녪|녪 +녫|녫|녫 +녬|녬|녬 +녭|녭|녭 +녮|녮|녮 +녯|녯|녯 +녰|녰|녰 +녱|녱|녱 +녲|녲|녲 +녳|녳|녳 +녴|녴|녴 +녵|녵|녵 +녶|녶|녶 +녷|녷|녷 +노|노|노 +녹|녹|녹 +녺|녺|녺 +녻|녻|녻 +논|논|논 +녽|녽|녽 +녾|녾|녾 +녿|녿|녿 +놀|놀|놀 +놁|놁|놁 +놂|놂|놂 +놃|놃|놃 +놄|놄|놄 +놅|놅|놅 +놆|놆|놆 +놇|놇|놇 +놈|놈|놈 +놉|놉|놉 +놊|놊|놊 +놋|놋|놋 +놌|놌|놌 +농|농|농 +놎|놎|놎 +놏|놏|놏 +놐|놐|놐 +놑|놑|놑 +높|높|높 +놓|놓|놓 +놔|놔|놔 +놕|놕|놕 +놖|놖|놖 +놗|놗|놗 +놘|놘|놘 +놙|놙|놙 +놚|놚|놚 +놛|놛|놛 +놜|놜|놜 +놝|놝|놝 +놞|놞|놞 +놟|놟|놟 +놠|놠|놠 +놡|놡|놡 +놢|놢|놢 +놣|놣|놣 +놤|놤|놤 +놥|놥|놥 +놦|놦|놦 +놧|놧|놧 +놨|놨|놨 +놩|놩|놩 +놪|놪|놪 +놫|놫|놫 +놬|놬|놬 +놭|놭|놭 +놮|놮|놮 +놯|놯|놯 +놰|놰|놰 +놱|놱|놱 +놲|놲|놲 +놳|놳|놳 +놴|놴|놴 +놵|놵|놵 +놶|놶|놶 +놷|놷|놷 +놸|놸|놸 +놹|놹|놹 +놺|놺|놺 +놻|놻|놻 +놼|놼|놼 +놽|놽|놽 +놾|놾|놾 +놿|놿|놿 +뇀|뇀|뇀 +뇁|뇁|뇁 +뇂|뇂|뇂 +뇃|뇃|뇃 +뇄|뇄|뇄 +뇅|뇅|뇅 +뇆|뇆|뇆 +뇇|뇇|뇇 +뇈|뇈|뇈 +뇉|뇉|뇉 +뇊|뇊|뇊 +뇋|뇋|뇋 +뇌|뇌|뇌 +뇍|뇍|뇍 +뇎|뇎|뇎 +뇏|뇏|뇏 +뇐|뇐|뇐 +뇑|뇑|뇑 +뇒|뇒|뇒 +뇓|뇓|뇓 +뇔|뇔|뇔 +뇕|뇕|뇕 +뇖|뇖|뇖 +뇗|뇗|뇗 +뇘|뇘|뇘 +뇙|뇙|뇙 +뇚|뇚|뇚 +뇛|뇛|뇛 +뇜|뇜|뇜 +뇝|뇝|뇝 +뇞|뇞|뇞 +뇟|뇟|뇟 +뇠|뇠|뇠 +뇡|뇡|뇡 +뇢|뇢|뇢 +뇣|뇣|뇣 +뇤|뇤|뇤 +뇥|뇥|뇥 +뇦|뇦|뇦 +뇧|뇧|뇧 +뇨|뇨|뇨 +뇩|뇩|뇩 +뇪|뇪|뇪 +뇫|뇫|뇫 +뇬|뇬|뇬 +뇭|뇭|뇭 +뇮|뇮|뇮 +뇯|뇯|뇯 +뇰|뇰|뇰 +뇱|뇱|뇱 +뇲|뇲|뇲 +뇳|뇳|뇳 +뇴|뇴|뇴 +뇵|뇵|뇵 +뇶|뇶|뇶 +뇷|뇷|뇷 +뇸|뇸|뇸 +뇹|뇹|뇹 +뇺|뇺|뇺 +뇻|뇻|뇻 +뇼|뇼|뇼 +뇽|뇽|뇽 +뇾|뇾|뇾 +뇿|뇿|뇿 +눀|눀|눀 +눁|눁|눁 +눂|눂|눂 +눃|눃|눃 +누|누|누 +눅|눅|눅 +눆|눆|눆 +눇|눇|눇 +눈|눈|눈 +눉|눉|눉 +눊|눊|눊 +눋|눋|눋 +눌|눌|눌 +눍|눍|눍 +눎|눎|눎 +눏|눏|눏 +눐|눐|눐 +눑|눑|눑 +눒|눒|눒 +눓|눓|눓 +눔|눔|눔 +눕|눕|눕 +눖|눖|눖 +눗|눗|눗 +눘|눘|눘 +눙|눙|눙 +눚|눚|눚 +눛|눛|눛 +눜|눜|눜 +눝|눝|눝 +눞|눞|눞 +눟|눟|눟 +눠|눠|눠 +눡|눡|눡 +눢|눢|눢 +눣|눣|눣 +눤|눤|눤 +눥|눥|눥 +눦|눦|눦 +눧|눧|눧 +눨|눨|눨 +눩|눩|눩 +눪|눪|눪 +눫|눫|눫 +눬|눬|눬 +눭|눭|눭 +눮|눮|눮 +눯|눯|눯 +눰|눰|눰 +눱|눱|눱 +눲|눲|눲 +눳|눳|눳 +눴|눴|눴 +눵|눵|눵 +눶|눶|눶 +눷|눷|눷 +눸|눸|눸 +눹|눹|눹 +눺|눺|눺 +눻|눻|눻 +눼|눼|눼 +눽|눽|눽 +눾|눾|눾 +눿|눿|눿 +뉀|뉀|뉀 +뉁|뉁|뉁 +뉂|뉂|뉂 +뉃|뉃|뉃 +뉄|뉄|뉄 +뉅|뉅|뉅 +뉆|뉆|뉆 +뉇|뉇|뉇 +뉈|뉈|뉈 +뉉|뉉|뉉 +뉊|뉊|뉊 +뉋|뉋|뉋 +뉌|뉌|뉌 +뉍|뉍|뉍 +뉎|뉎|뉎 +뉏|뉏|뉏 +뉐|뉐|뉐 +뉑|뉑|뉑 +뉒|뉒|뉒 +뉓|뉓|뉓 +뉔|뉔|뉔 +뉕|뉕|뉕 +뉖|뉖|뉖 +뉗|뉗|뉗 +뉘|뉘|뉘 +뉙|뉙|뉙 +뉚|뉚|뉚 +뉛|뉛|뉛 +뉜|뉜|뉜 +뉝|뉝|뉝 +뉞|뉞|뉞 +뉟|뉟|뉟 +뉠|뉠|뉠 +뉡|뉡|뉡 +뉢|뉢|뉢 +뉣|뉣|뉣 +뉤|뉤|뉤 +뉥|뉥|뉥 +뉦|뉦|뉦 +뉧|뉧|뉧 +뉨|뉨|뉨 +뉩|뉩|뉩 +뉪|뉪|뉪 +뉫|뉫|뉫 +뉬|뉬|뉬 +뉭|뉭|뉭 +뉮|뉮|뉮 +뉯|뉯|뉯 +뉰|뉰|뉰 +뉱|뉱|뉱 +뉲|뉲|뉲 +뉳|뉳|뉳 +뉴|뉴|뉴 +뉵|뉵|뉵 +뉶|뉶|뉶 +뉷|뉷|뉷 +뉸|뉸|뉸 +뉹|뉹|뉹 +뉺|뉺|뉺 +뉻|뉻|뉻 +뉼|뉼|뉼 +뉽|뉽|뉽 +뉾|뉾|뉾 +뉿|뉿|뉿 +늀|늀|늀 +늁|늁|늁 +늂|늂|늂 +늃|늃|늃 +늄|늄|늄 +늅|늅|늅 +늆|늆|늆 +늇|늇|늇 +늈|늈|늈 +늉|늉|늉 +늊|늊|늊 +늋|늋|늋 +늌|늌|늌 +늍|늍|늍 +늎|늎|늎 +늏|늏|늏 +느|느|느 +늑|늑|늑 +늒|늒|늒 +늓|늓|늓 +는|는|는 +늕|늕|늕 +늖|늖|늖 +늗|늗|늗 +늘|늘|늘 +늙|늙|늙 +늚|늚|늚 +늛|늛|늛 +늜|늜|늜 +늝|늝|늝 +늞|늞|늞 +늟|늟|늟 +늠|늠|늠 +늡|늡|늡 +늢|늢|늢 +늣|늣|늣 +늤|늤|늤 +능|능|능 +늦|늦|늦 +늧|늧|늧 +늨|늨|늨 +늩|늩|늩 +늪|늪|늪 +늫|늫|늫 +늬|늬|늬 +늭|늭|늭 +늮|늮|늮 +늯|늯|늯 +늰|늰|늰 +늱|늱|늱 +늲|늲|늲 +늳|늳|늳 +늴|늴|늴 +늵|늵|늵 +늶|늶|늶 +늷|늷|늷 +늸|늸|늸 +늹|늹|늹 +늺|늺|늺 +늻|늻|늻 +늼|늼|늼 +늽|늽|늽 +늾|늾|늾 +늿|늿|늿 +닀|닀|닀 +닁|닁|닁 +닂|닂|닂 +닃|닃|닃 +닄|닄|닄 +닅|닅|닅 +닆|닆|닆 +닇|닇|닇 +니|니|니 +닉|닉|닉 +닊|닊|닊 +닋|닋|닋 +닌|닌|닌 +닍|닍|닍 +닎|닎|닎 +닏|닏|닏 +닐|닐|닐 +닑|닑|닑 +닒|닒|닒 +닓|닓|닓 +닔|닔|닔 +닕|닕|닕 +닖|닖|닖 +닗|닗|닗 +님|님|님 +닙|닙|닙 +닚|닚|닚 +닛|닛|닛 +닜|닜|닜 +닝|닝|닝 +닞|닞|닞 +닟|닟|닟 +닠|닠|닠 +닡|닡|닡 +닢|닢|닢 +닣|닣|닣 +다|다|다 +닥|닥|닥 +닦|닦|닦 +닧|닧|닧 +단|단|단 +닩|닩|닩 +닪|닪|닪 +닫|닫|닫 +달|달|달 +닭|닭|닭 +닮|닮|닮 +닯|닯|닯 +닰|닰|닰 +닱|닱|닱 +닲|닲|닲 +닳|닳|닳 +담|담|담 +답|답|답 +닶|닶|닶 +닷|닷|닷 +닸|닸|닸 +당|당|당 +닺|닺|닺 +닻|닻|닻 +닼|닼|닼 +닽|닽|닽 +닾|닾|닾 +닿|닿|닿 +대|대|대 +댁|댁|댁 +댂|댂|댂 +댃|댃|댃 +댄|댄|댄 +댅|댅|댅 +댆|댆|댆 +댇|댇|댇 +댈|댈|댈 +댉|댉|댉 +댊|댊|댊 +댋|댋|댋 +댌|댌|댌 +댍|댍|댍 +댎|댎|댎 +댏|댏|댏 +댐|댐|댐 +댑|댑|댑 +댒|댒|댒 +댓|댓|댓 +댔|댔|댔 +댕|댕|댕 +댖|댖|댖 +댗|댗|댗 +댘|댘|댘 +댙|댙|댙 +댚|댚|댚 +댛|댛|댛 +댜|댜|댜 +댝|댝|댝 +댞|댞|댞 +댟|댟|댟 +댠|댠|댠 +댡|댡|댡 +댢|댢|댢 +댣|댣|댣 +댤|댤|댤 +댥|댥|댥 +댦|댦|댦 +댧|댧|댧 +댨|댨|댨 +댩|댩|댩 +댪|댪|댪 +댫|댫|댫 +댬|댬|댬 +댭|댭|댭 +댮|댮|댮 +댯|댯|댯 +댰|댰|댰 +댱|댱|댱 +댲|댲|댲 +댳|댳|댳 +댴|댴|댴 +댵|댵|댵 +댶|댶|댶 +댷|댷|댷 +댸|댸|댸 +댹|댹|댹 +댺|댺|댺 +댻|댻|댻 +댼|댼|댼 +댽|댽|댽 +댾|댾|댾 +댿|댿|댿 +덀|덀|덀 +덁|덁|덁 +덂|덂|덂 +덃|덃|덃 +덄|덄|덄 +덅|덅|덅 +덆|덆|덆 +덇|덇|덇 +덈|덈|덈 +덉|덉|덉 +덊|덊|덊 +덋|덋|덋 +덌|덌|덌 +덍|덍|덍 +덎|덎|덎 +덏|덏|덏 +덐|덐|덐 +덑|덑|덑 +덒|덒|덒 +덓|덓|덓 +더|더|더 +덕|덕|덕 +덖|덖|덖 +덗|덗|덗 +던|던|던 +덙|덙|덙 +덚|덚|덚 +덛|덛|덛 +덜|덜|덜 +덝|덝|덝 +덞|덞|덞 +덟|덟|덟 +덠|덠|덠 +덡|덡|덡 +덢|덢|덢 +덣|덣|덣 +덤|덤|덤 +덥|덥|덥 +덦|덦|덦 +덧|덧|덧 +덨|덨|덨 +덩|덩|덩 +덪|덪|덪 +덫|덫|덫 +덬|덬|덬 +덭|덭|덭 +덮|덮|덮 +덯|덯|덯 +데|데|데 +덱|덱|덱 +덲|덲|덲 +덳|덳|덳 +덴|덴|덴 +덵|덵|덵 +덶|덶|덶 +덷|덷|덷 +델|델|델 +덹|덹|덹 +덺|덺|덺 +덻|덻|덻 +덼|덼|덼 +덽|덽|덽 +덾|덾|덾 +덿|덿|덿 +뎀|뎀|뎀 +뎁|뎁|뎁 +뎂|뎂|뎂 +뎃|뎃|뎃 +뎄|뎄|뎄 +뎅|뎅|뎅 +뎆|뎆|뎆 +뎇|뎇|뎇 +뎈|뎈|뎈 +뎉|뎉|뎉 +뎊|뎊|뎊 +뎋|뎋|뎋 +뎌|뎌|뎌 +뎍|뎍|뎍 +뎎|뎎|뎎 +뎏|뎏|뎏 +뎐|뎐|뎐 +뎑|뎑|뎑 +뎒|뎒|뎒 +뎓|뎓|뎓 +뎔|뎔|뎔 +뎕|뎕|뎕 +뎖|뎖|뎖 +뎗|뎗|뎗 +뎘|뎘|뎘 +뎙|뎙|뎙 +뎚|뎚|뎚 +뎛|뎛|뎛 +뎜|뎜|뎜 +뎝|뎝|뎝 +뎞|뎞|뎞 +뎟|뎟|뎟 +뎠|뎠|뎠 +뎡|뎡|뎡 +뎢|뎢|뎢 +뎣|뎣|뎣 +뎤|뎤|뎤 +뎥|뎥|뎥 +뎦|뎦|뎦 +뎧|뎧|뎧 +뎨|뎨|뎨 +뎩|뎩|뎩 +뎪|뎪|뎪 +뎫|뎫|뎫 +뎬|뎬|뎬 +뎭|뎭|뎭 +뎮|뎮|뎮 +뎯|뎯|뎯 +뎰|뎰|뎰 +뎱|뎱|뎱 +뎲|뎲|뎲 +뎳|뎳|뎳 +뎴|뎴|뎴 +뎵|뎵|뎵 +뎶|뎶|뎶 +뎷|뎷|뎷 +뎸|뎸|뎸 +뎹|뎹|뎹 +뎺|뎺|뎺 +뎻|뎻|뎻 +뎼|뎼|뎼 +뎽|뎽|뎽 +뎾|뎾|뎾 +뎿|뎿|뎿 +돀|돀|돀 +돁|돁|돁 +돂|돂|돂 +돃|돃|돃 +도|도|도 +독|독|독 +돆|돆|돆 +돇|돇|돇 +돈|돈|돈 +돉|돉|돉 +돊|돊|돊 +돋|돋|돋 +돌|돌|돌 +돍|돍|돍 +돎|돎|돎 +돏|돏|돏 +돐|돐|돐 +돑|돑|돑 +돒|돒|돒 +돓|돓|돓 +돔|돔|돔 +돕|돕|돕 +돖|돖|돖 +돗|돗|돗 +돘|돘|돘 +동|동|동 +돚|돚|돚 +돛|돛|돛 +돜|돜|돜 +돝|돝|돝 +돞|돞|돞 +돟|돟|돟 +돠|돠|돠 +돡|돡|돡 +돢|돢|돢 +돣|돣|돣 +돤|돤|돤 +돥|돥|돥 +돦|돦|돦 +돧|돧|돧 +돨|돨|돨 +돩|돩|돩 +돪|돪|돪 +돫|돫|돫 +돬|돬|돬 +돭|돭|돭 +돮|돮|돮 +돯|돯|돯 +돰|돰|돰 +돱|돱|돱 +돲|돲|돲 +돳|돳|돳 +돴|돴|돴 +돵|돵|돵 +돶|돶|돶 +돷|돷|돷 +돸|돸|돸 +돹|돹|돹 +돺|돺|돺 +돻|돻|돻 +돼|돼|돼 +돽|돽|돽 +돾|돾|돾 +돿|돿|돿 +됀|됀|됀 +됁|됁|됁 +됂|됂|됂 +됃|됃|됃 +됄|됄|됄 +됅|됅|됅 +됆|됆|됆 +됇|됇|됇 +됈|됈|됈 +됉|됉|됉 +됊|됊|됊 +됋|됋|됋 +됌|됌|됌 +됍|됍|됍 +됎|됎|됎 +됏|됏|됏 +됐|됐|됐 +됑|됑|됑 +됒|됒|됒 +됓|됓|됓 +됔|됔|됔 +됕|됕|됕 +됖|됖|됖 +됗|됗|됗 +되|되|되 +됙|됙|됙 +됚|됚|됚 +됛|됛|됛 +된|된|된 +됝|됝|됝 +됞|됞|됞 +됟|됟|됟 +될|될|될 +됡|됡|됡 +됢|됢|됢 +됣|됣|됣 +됤|됤|됤 +됥|됥|됥 +됦|됦|됦 +됧|됧|됧 +됨|됨|됨 +됩|됩|됩 +됪|됪|됪 +됫|됫|됫 +됬|됬|됬 +됭|됭|됭 +됮|됮|됮 +됯|됯|됯 +됰|됰|됰 +됱|됱|됱 +됲|됲|됲 +됳|됳|됳 +됴|됴|됴 +됵|됵|됵 +됶|됶|됶 +됷|됷|됷 +됸|됸|됸 +됹|됹|됹 +됺|됺|됺 +됻|됻|됻 +됼|됼|됼 +됽|됽|됽 +됾|됾|됾 +됿|됿|됿 +둀|둀|둀 +둁|둁|둁 +둂|둂|둂 +둃|둃|둃 +둄|둄|둄 +둅|둅|둅 +둆|둆|둆 +둇|둇|둇 +둈|둈|둈 +둉|둉|둉 +둊|둊|둊 +둋|둋|둋 +둌|둌|둌 +둍|둍|둍 +둎|둎|둎 +둏|둏|둏 +두|두|두 +둑|둑|둑 +둒|둒|둒 +둓|둓|둓 +둔|둔|둔 +둕|둕|둕 +둖|둖|둖 +둗|둗|둗 +둘|둘|둘 +둙|둙|둙 +둚|둚|둚 +둛|둛|둛 +둜|둜|둜 +둝|둝|둝 +둞|둞|둞 +둟|둟|둟 +둠|둠|둠 +둡|둡|둡 +둢|둢|둢 +둣|둣|둣 +둤|둤|둤 +둥|둥|둥 +둦|둦|둦 +둧|둧|둧 +둨|둨|둨 +둩|둩|둩 +둪|둪|둪 +둫|둫|둫 +둬|둬|둬 +둭|둭|둭 +둮|둮|둮 +둯|둯|둯 +둰|둰|둰 +둱|둱|둱 +둲|둲|둲 +둳|둳|둳 +둴|둴|둴 +둵|둵|둵 +둶|둶|둶 +둷|둷|둷 +둸|둸|둸 +둹|둹|둹 +둺|둺|둺 +둻|둻|둻 +둼|둼|둼 +둽|둽|둽 +둾|둾|둾 +둿|둿|둿 +뒀|뒀|뒀 +뒁|뒁|뒁 +뒂|뒂|뒂 +뒃|뒃|뒃 +뒄|뒄|뒄 +뒅|뒅|뒅 +뒆|뒆|뒆 +뒇|뒇|뒇 +뒈|뒈|뒈 +뒉|뒉|뒉 +뒊|뒊|뒊 +뒋|뒋|뒋 +뒌|뒌|뒌 +뒍|뒍|뒍 +뒎|뒎|뒎 +뒏|뒏|뒏 +뒐|뒐|뒐 +뒑|뒑|뒑 +뒒|뒒|뒒 +뒓|뒓|뒓 +뒔|뒔|뒔 +뒕|뒕|뒕 +뒖|뒖|뒖 +뒗|뒗|뒗 +뒘|뒘|뒘 +뒙|뒙|뒙 +뒚|뒚|뒚 +뒛|뒛|뒛 +뒜|뒜|뒜 +뒝|뒝|뒝 +뒞|뒞|뒞 +뒟|뒟|뒟 +뒠|뒠|뒠 +뒡|뒡|뒡 +뒢|뒢|뒢 +뒣|뒣|뒣 +뒤|뒤|뒤 +뒥|뒥|뒥 +뒦|뒦|뒦 +뒧|뒧|뒧 +뒨|뒨|뒨 +뒩|뒩|뒩 +뒪|뒪|뒪 +뒫|뒫|뒫 +뒬|뒬|뒬 +뒭|뒭|뒭 +뒮|뒮|뒮 +뒯|뒯|뒯 +뒰|뒰|뒰 +뒱|뒱|뒱 +뒲|뒲|뒲 +뒳|뒳|뒳 +뒴|뒴|뒴 +뒵|뒵|뒵 +뒶|뒶|뒶 +뒷|뒷|뒷 +뒸|뒸|뒸 +뒹|뒹|뒹 +뒺|뒺|뒺 +뒻|뒻|뒻 +뒼|뒼|뒼 +뒽|뒽|뒽 +뒾|뒾|뒾 +뒿|뒿|뒿 +듀|듀|듀 +듁|듁|듁 +듂|듂|듂 +듃|듃|듃 +듄|듄|듄 +듅|듅|듅 +듆|듆|듆 +듇|듇|듇 +듈|듈|듈 +듉|듉|듉 +듊|듊|듊 +듋|듋|듋 +듌|듌|듌 +듍|듍|듍 +듎|듎|듎 +듏|듏|듏 +듐|듐|듐 +듑|듑|듑 +듒|듒|듒 +듓|듓|듓 +듔|듔|듔 +듕|듕|듕 +듖|듖|듖 +듗|듗|듗 +듘|듘|듘 +듙|듙|듙 +듚|듚|듚 +듛|듛|듛 +드|드|드 +득|득|득 +듞|듞|듞 +듟|듟|듟 +든|든|든 +듡|듡|듡 +듢|듢|듢 +듣|듣|듣 +들|들|들 +듥|듥|듥 +듦|듦|듦 +듧|듧|듧 +듨|듨|듨 +듩|듩|듩 +듪|듪|듪 +듫|듫|듫 +듬|듬|듬 +듭|듭|듭 +듮|듮|듮 +듯|듯|듯 +듰|듰|듰 +등|등|등 +듲|듲|듲 +듳|듳|듳 +듴|듴|듴 +듵|듵|듵 +듶|듶|듶 +듷|듷|듷 +듸|듸|듸 +듹|듹|듹 +듺|듺|듺 +듻|듻|듻 +듼|듼|듼 +듽|듽|듽 +듾|듾|듾 +듿|듿|듿 +딀|딀|딀 +딁|딁|딁 +딂|딂|딂 +딃|딃|딃 +딄|딄|딄 +딅|딅|딅 +딆|딆|딆 +딇|딇|딇 +딈|딈|딈 +딉|딉|딉 +딊|딊|딊 +딋|딋|딋 +딌|딌|딌 +딍|딍|딍 +딎|딎|딎 +딏|딏|딏 +딐|딐|딐 +딑|딑|딑 +딒|딒|딒 +딓|딓|딓 +디|디|디 +딕|딕|딕 +딖|딖|딖 +딗|딗|딗 +딘|딘|딘 +딙|딙|딙 +딚|딚|딚 +딛|딛|딛 +딜|딜|딜 +딝|딝|딝 +딞|딞|딞 +딟|딟|딟 +딠|딠|딠 +딡|딡|딡 +딢|딢|딢 +딣|딣|딣 +딤|딤|딤 +딥|딥|딥 +딦|딦|딦 +딧|딧|딧 +딨|딨|딨 +딩|딩|딩 +딪|딪|딪 +딫|딫|딫 +딬|딬|딬 +딭|딭|딭 +딮|딮|딮 +딯|딯|딯 +따|따|따 +딱|딱|딱 +딲|딲|딲 +딳|딳|딳 +딴|딴|딴 +딵|딵|딵 +딶|딶|딶 +딷|딷|딷 +딸|딸|딸 +딹|딹|딹 +딺|딺|딺 +딻|딻|딻 +딼|딼|딼 +딽|딽|딽 +딾|딾|딾 +딿|딿|딿 +땀|땀|땀 +땁|땁|땁 +땂|땂|땂 +땃|땃|땃 +땄|땄|땄 +땅|땅|땅 +땆|땆|땆 +땇|땇|땇 +땈|땈|땈 +땉|땉|땉 +땊|땊|땊 +땋|땋|땋 +때|때|때 +땍|땍|땍 +땎|땎|땎 +땏|땏|땏 +땐|땐|땐 +땑|땑|땑 +땒|땒|땒 +땓|땓|땓 +땔|땔|땔 +땕|땕|땕 +땖|땖|땖 +땗|땗|땗 +땘|땘|땘 +땙|땙|땙 +땚|땚|땚 +땛|땛|땛 +땜|땜|땜 +땝|땝|땝 +땞|땞|땞 +땟|땟|땟 +땠|땠|땠 +땡|땡|땡 +땢|땢|땢 +땣|땣|땣 +땤|땤|땤 +땥|땥|땥 +땦|땦|땦 +땧|땧|땧 +땨|땨|땨 +땩|땩|땩 +땪|땪|땪 +땫|땫|땫 +땬|땬|땬 +땭|땭|땭 +땮|땮|땮 +땯|땯|땯 +땰|땰|땰 +땱|땱|땱 +땲|땲|땲 +땳|땳|땳 +땴|땴|땴 +땵|땵|땵 +땶|땶|땶 +땷|땷|땷 +땸|땸|땸 +땹|땹|땹 +땺|땺|땺 +땻|땻|땻 +땼|땼|땼 +땽|땽|땽 +땾|땾|땾 +땿|땿|땿 +떀|떀|떀 +떁|떁|떁 +떂|떂|떂 +떃|떃|떃 +떄|떄|떄 +떅|떅|떅 +떆|떆|떆 +떇|떇|떇 +떈|떈|떈 +떉|떉|떉 +떊|떊|떊 +떋|떋|떋 +떌|떌|떌 +떍|떍|떍 +떎|떎|떎 +떏|떏|떏 +떐|떐|떐 +떑|떑|떑 +떒|떒|떒 +떓|떓|떓 +떔|떔|떔 +떕|떕|떕 +떖|떖|떖 +떗|떗|떗 +떘|떘|떘 +떙|떙|떙 +떚|떚|떚 +떛|떛|떛 +떜|떜|떜 +떝|떝|떝 +떞|떞|떞 +떟|떟|떟 +떠|떠|떠 +떡|떡|떡 +떢|떢|떢 +떣|떣|떣 +떤|떤|떤 +떥|떥|떥 +떦|떦|떦 +떧|떧|떧 +떨|떨|떨 +떩|떩|떩 +떪|떪|떪 +떫|떫|떫 +떬|떬|떬 +떭|떭|떭 +떮|떮|떮 +떯|떯|떯 +떰|떰|떰 +떱|떱|떱 +떲|떲|떲 +떳|떳|떳 +떴|떴|떴 +떵|떵|떵 +떶|떶|떶 +떷|떷|떷 +떸|떸|떸 +떹|떹|떹 +떺|떺|떺 +떻|떻|떻 +떼|떼|떼 +떽|떽|떽 +떾|떾|떾 +떿|떿|떿 +뗀|뗀|뗀 +뗁|뗁|뗁 +뗂|뗂|뗂 +뗃|뗃|뗃 +뗄|뗄|뗄 +뗅|뗅|뗅 +뗆|뗆|뗆 +뗇|뗇|뗇 +뗈|뗈|뗈 +뗉|뗉|뗉 +뗊|뗊|뗊 +뗋|뗋|뗋 +뗌|뗌|뗌 +뗍|뗍|뗍 +뗎|뗎|뗎 +뗏|뗏|뗏 +뗐|뗐|뗐 +뗑|뗑|뗑 +뗒|뗒|뗒 +뗓|뗓|뗓 +뗔|뗔|뗔 +뗕|뗕|뗕 +뗖|뗖|뗖 +뗗|뗗|뗗 +뗘|뗘|뗘 +뗙|뗙|뗙 +뗚|뗚|뗚 +뗛|뗛|뗛 +뗜|뗜|뗜 +뗝|뗝|뗝 +뗞|뗞|뗞 +뗟|뗟|뗟 +뗠|뗠|뗠 +뗡|뗡|뗡 +뗢|뗢|뗢 +뗣|뗣|뗣 +뗤|뗤|뗤 +뗥|뗥|뗥 +뗦|뗦|뗦 +뗧|뗧|뗧 +뗨|뗨|뗨 +뗩|뗩|뗩 +뗪|뗪|뗪 +뗫|뗫|뗫 +뗬|뗬|뗬 +뗭|뗭|뗭 +뗮|뗮|뗮 +뗯|뗯|뗯 +뗰|뗰|뗰 +뗱|뗱|뗱 +뗲|뗲|뗲 +뗳|뗳|뗳 +뗴|뗴|뗴 +뗵|뗵|뗵 +뗶|뗶|뗶 +뗷|뗷|뗷 +뗸|뗸|뗸 +뗹|뗹|뗹 +뗺|뗺|뗺 +뗻|뗻|뗻 +뗼|뗼|뗼 +뗽|뗽|뗽 +뗾|뗾|뗾 +뗿|뗿|뗿 +똀|똀|똀 +똁|똁|똁 +똂|똂|똂 +똃|똃|똃 +똄|똄|똄 +똅|똅|똅 +똆|똆|똆 +똇|똇|똇 +똈|똈|똈 +똉|똉|똉 +똊|똊|똊 +똋|똋|똋 +똌|똌|똌 +똍|똍|똍 +똎|똎|똎 +똏|똏|똏 +또|또|또 +똑|똑|똑 +똒|똒|똒 +똓|똓|똓 +똔|똔|똔 +똕|똕|똕 +똖|똖|똖 +똗|똗|똗 +똘|똘|똘 +똙|똙|똙 +똚|똚|똚 +똛|똛|똛 +똜|똜|똜 +똝|똝|똝 +똞|똞|똞 +똟|똟|똟 +똠|똠|똠 +똡|똡|똡 +똢|똢|똢 +똣|똣|똣 +똤|똤|똤 +똥|똥|똥 +똦|똦|똦 +똧|똧|똧 +똨|똨|똨 +똩|똩|똩 +똪|똪|똪 +똫|똫|똫 +똬|똬|똬 +똭|똭|똭 +똮|똮|똮 +똯|똯|똯 +똰|똰|똰 +똱|똱|똱 +똲|똲|똲 +똳|똳|똳 +똴|똴|똴 +똵|똵|똵 +똶|똶|똶 +똷|똷|똷 +똸|똸|똸 +똹|똹|똹 +똺|똺|똺 +똻|똻|똻 +똼|똼|똼 +똽|똽|똽 +똾|똾|똾 +똿|똿|똿 +뙀|뙀|뙀 +뙁|뙁|뙁 +뙂|뙂|뙂 +뙃|뙃|뙃 +뙄|뙄|뙄 +뙅|뙅|뙅 +뙆|뙆|뙆 +뙇|뙇|뙇 +뙈|뙈|뙈 +뙉|뙉|뙉 +뙊|뙊|뙊 +뙋|뙋|뙋 +뙌|뙌|뙌 +뙍|뙍|뙍 +뙎|뙎|뙎 +뙏|뙏|뙏 +뙐|뙐|뙐 +뙑|뙑|뙑 +뙒|뙒|뙒 +뙓|뙓|뙓 +뙔|뙔|뙔 +뙕|뙕|뙕 +뙖|뙖|뙖 +뙗|뙗|뙗 +뙘|뙘|뙘 +뙙|뙙|뙙 +뙚|뙚|뙚 +뙛|뙛|뙛 +뙜|뙜|뙜 +뙝|뙝|뙝 +뙞|뙞|뙞 +뙟|뙟|뙟 +뙠|뙠|뙠 +뙡|뙡|뙡 +뙢|뙢|뙢 +뙣|뙣|뙣 +뙤|뙤|뙤 +뙥|뙥|뙥 +뙦|뙦|뙦 +뙧|뙧|뙧 +뙨|뙨|뙨 +뙩|뙩|뙩 +뙪|뙪|뙪 +뙫|뙫|뙫 +뙬|뙬|뙬 +뙭|뙭|뙭 +뙮|뙮|뙮 +뙯|뙯|뙯 +뙰|뙰|뙰 +뙱|뙱|뙱 +뙲|뙲|뙲 +뙳|뙳|뙳 +뙴|뙴|뙴 +뙵|뙵|뙵 +뙶|뙶|뙶 +뙷|뙷|뙷 +뙸|뙸|뙸 +뙹|뙹|뙹 +뙺|뙺|뙺 +뙻|뙻|뙻 +뙼|뙼|뙼 +뙽|뙽|뙽 +뙾|뙾|뙾 +뙿|뙿|뙿 +뚀|뚀|뚀 +뚁|뚁|뚁 +뚂|뚂|뚂 +뚃|뚃|뚃 +뚄|뚄|뚄 +뚅|뚅|뚅 +뚆|뚆|뚆 +뚇|뚇|뚇 +뚈|뚈|뚈 +뚉|뚉|뚉 +뚊|뚊|뚊 +뚋|뚋|뚋 +뚌|뚌|뚌 +뚍|뚍|뚍 +뚎|뚎|뚎 +뚏|뚏|뚏 +뚐|뚐|뚐 +뚑|뚑|뚑 +뚒|뚒|뚒 +뚓|뚓|뚓 +뚔|뚔|뚔 +뚕|뚕|뚕 +뚖|뚖|뚖 +뚗|뚗|뚗 +뚘|뚘|뚘 +뚙|뚙|뚙 +뚚|뚚|뚚 +뚛|뚛|뚛 +뚜|뚜|뚜 +뚝|뚝|뚝 +뚞|뚞|뚞 +뚟|뚟|뚟 +뚠|뚠|뚠 +뚡|뚡|뚡 +뚢|뚢|뚢 +뚣|뚣|뚣 +뚤|뚤|뚤 +뚥|뚥|뚥 +뚦|뚦|뚦 +뚧|뚧|뚧 +뚨|뚨|뚨 +뚩|뚩|뚩 +뚪|뚪|뚪 +뚫|뚫|뚫 +뚬|뚬|뚬 +뚭|뚭|뚭 +뚮|뚮|뚮 +뚯|뚯|뚯 +뚰|뚰|뚰 +뚱|뚱|뚱 +뚲|뚲|뚲 +뚳|뚳|뚳 +뚴|뚴|뚴 +뚵|뚵|뚵 +뚶|뚶|뚶 +뚷|뚷|뚷 +뚸|뚸|뚸 +뚹|뚹|뚹 +뚺|뚺|뚺 +뚻|뚻|뚻 +뚼|뚼|뚼 +뚽|뚽|뚽 +뚾|뚾|뚾 +뚿|뚿|뚿 +뛀|뛀|뛀 +뛁|뛁|뛁 +뛂|뛂|뛂 +뛃|뛃|뛃 +뛄|뛄|뛄 +뛅|뛅|뛅 +뛆|뛆|뛆 +뛇|뛇|뛇 +뛈|뛈|뛈 +뛉|뛉|뛉 +뛊|뛊|뛊 +뛋|뛋|뛋 +뛌|뛌|뛌 +뛍|뛍|뛍 +뛎|뛎|뛎 +뛏|뛏|뛏 +뛐|뛐|뛐 +뛑|뛑|뛑 +뛒|뛒|뛒 +뛓|뛓|뛓 +뛔|뛔|뛔 +뛕|뛕|뛕 +뛖|뛖|뛖 +뛗|뛗|뛗 +뛘|뛘|뛘 +뛙|뛙|뛙 +뛚|뛚|뛚 +뛛|뛛|뛛 +뛜|뛜|뛜 +뛝|뛝|뛝 +뛞|뛞|뛞 +뛟|뛟|뛟 +뛠|뛠|뛠 +뛡|뛡|뛡 +뛢|뛢|뛢 +뛣|뛣|뛣 +뛤|뛤|뛤 +뛥|뛥|뛥 +뛦|뛦|뛦 +뛧|뛧|뛧 +뛨|뛨|뛨 +뛩|뛩|뛩 +뛪|뛪|뛪 +뛫|뛫|뛫 +뛬|뛬|뛬 +뛭|뛭|뛭 +뛮|뛮|뛮 +뛯|뛯|뛯 +뛰|뛰|뛰 +뛱|뛱|뛱 +뛲|뛲|뛲 +뛳|뛳|뛳 +뛴|뛴|뛴 +뛵|뛵|뛵 +뛶|뛶|뛶 +뛷|뛷|뛷 +뛸|뛸|뛸 +뛹|뛹|뛹 +뛺|뛺|뛺 +뛻|뛻|뛻 +뛼|뛼|뛼 +뛽|뛽|뛽 +뛾|뛾|뛾 +뛿|뛿|뛿 +뜀|뜀|뜀 +뜁|뜁|뜁 +뜂|뜂|뜂 +뜃|뜃|뜃 +뜄|뜄|뜄 +뜅|뜅|뜅 +뜆|뜆|뜆 +뜇|뜇|뜇 +뜈|뜈|뜈 +뜉|뜉|뜉 +뜊|뜊|뜊 +뜋|뜋|뜋 +뜌|뜌|뜌 +뜍|뜍|뜍 +뜎|뜎|뜎 +뜏|뜏|뜏 +뜐|뜐|뜐 +뜑|뜑|뜑 +뜒|뜒|뜒 +뜓|뜓|뜓 +뜔|뜔|뜔 +뜕|뜕|뜕 +뜖|뜖|뜖 +뜗|뜗|뜗 +뜘|뜘|뜘 +뜙|뜙|뜙 +뜚|뜚|뜚 +뜛|뜛|뜛 +뜜|뜜|뜜 +뜝|뜝|뜝 +뜞|뜞|뜞 +뜟|뜟|뜟 +뜠|뜠|뜠 +뜡|뜡|뜡 +뜢|뜢|뜢 +뜣|뜣|뜣 +뜤|뜤|뜤 +뜥|뜥|뜥 +뜦|뜦|뜦 +뜧|뜧|뜧 +뜨|뜨|뜨 +뜩|뜩|뜩 +뜪|뜪|뜪 +뜫|뜫|뜫 +뜬|뜬|뜬 +뜭|뜭|뜭 +뜮|뜮|뜮 +뜯|뜯|뜯 +뜰|뜰|뜰 +뜱|뜱|뜱 +뜲|뜲|뜲 +뜳|뜳|뜳 +뜴|뜴|뜴 +뜵|뜵|뜵 +뜶|뜶|뜶 +뜷|뜷|뜷 +뜸|뜸|뜸 +뜹|뜹|뜹 +뜺|뜺|뜺 +뜻|뜻|뜻 +뜼|뜼|뜼 +뜽|뜽|뜽 +뜾|뜾|뜾 +뜿|뜿|뜿 +띀|띀|띀 +띁|띁|띁 +띂|띂|띂 +띃|띃|띃 +띄|띄|띄 +띅|띅|띅 +띆|띆|띆 +띇|띇|띇 +띈|띈|띈 +띉|띉|띉 +띊|띊|띊 +띋|띋|띋 +띌|띌|띌 +띍|띍|띍 +띎|띎|띎 +띏|띏|띏 +띐|띐|띐 +띑|띑|띑 +띒|띒|띒 +띓|띓|띓 +띔|띔|띔 +띕|띕|띕 +띖|띖|띖 +띗|띗|띗 +띘|띘|띘 +띙|띙|띙 +띚|띚|띚 +띛|띛|띛 +띜|띜|띜 +띝|띝|띝 +띞|띞|띞 +띟|띟|띟 +띠|띠|띠 +띡|띡|띡 +띢|띢|띢 +띣|띣|띣 +띤|띤|띤 +띥|띥|띥 +띦|띦|띦 +띧|띧|띧 +띨|띨|띨 +띩|띩|띩 +띪|띪|띪 +띫|띫|띫 +띬|띬|띬 +띭|띭|띭 +띮|띮|띮 +띯|띯|띯 +띰|띰|띰 +띱|띱|띱 +띲|띲|띲 +띳|띳|띳 +띴|띴|띴 +띵|띵|띵 +띶|띶|띶 +띷|띷|띷 +띸|띸|띸 +띹|띹|띹 +띺|띺|띺 +띻|띻|띻 +라|라|라 +락|락|락 +띾|띾|띾 +띿|띿|띿 +란|란|란 +랁|랁|랁 +랂|랂|랂 +랃|랃|랃 +랄|랄|랄 +랅|랅|랅 +랆|랆|랆 +랇|랇|랇 +랈|랈|랈 +랉|랉|랉 +랊|랊|랊 +랋|랋|랋 +람|람|람 +랍|랍|랍 +랎|랎|랎 +랏|랏|랏 +랐|랐|랐 +랑|랑|랑 +랒|랒|랒 +랓|랓|랓 +랔|랔|랔 +랕|랕|랕 +랖|랖|랖 +랗|랗|랗 +래|래|래 +랙|랙|랙 +랚|랚|랚 +랛|랛|랛 +랜|랜|랜 +랝|랝|랝 +랞|랞|랞 +랟|랟|랟 +랠|랠|랠 +랡|랡|랡 +랢|랢|랢 +랣|랣|랣 +랤|랤|랤 +랥|랥|랥 +랦|랦|랦 +랧|랧|랧 +램|램|램 +랩|랩|랩 +랪|랪|랪 +랫|랫|랫 +랬|랬|랬 +랭|랭|랭 +랮|랮|랮 +랯|랯|랯 +랰|랰|랰 +랱|랱|랱 +랲|랲|랲 +랳|랳|랳 +랴|랴|랴 +략|략|략 +랶|랶|랶 +랷|랷|랷 +랸|랸|랸 +랹|랹|랹 +랺|랺|랺 +랻|랻|랻 +랼|랼|랼 +랽|랽|랽 +랾|랾|랾 +랿|랿|랿 +럀|럀|럀 +럁|럁|럁 +럂|럂|럂 +럃|럃|럃 +럄|럄|럄 +럅|럅|럅 +럆|럆|럆 +럇|럇|럇 +럈|럈|럈 +량|량|량 +럊|럊|럊 +럋|럋|럋 +럌|럌|럌 +럍|럍|럍 +럎|럎|럎 +럏|럏|럏 +럐|럐|럐 +럑|럑|럑 +럒|럒|럒 +럓|럓|럓 +럔|럔|럔 +럕|럕|럕 +럖|럖|럖 +럗|럗|럗 +럘|럘|럘 +럙|럙|럙 +럚|럚|럚 +럛|럛|럛 +럜|럜|럜 +럝|럝|럝 +럞|럞|럞 +럟|럟|럟 +럠|럠|럠 +럡|럡|럡 +럢|럢|럢 +럣|럣|럣 +럤|럤|럤 +럥|럥|럥 +럦|럦|럦 +럧|럧|럧 +럨|럨|럨 +럩|럩|럩 +럪|럪|럪 +럫|럫|럫 +러|러|러 +럭|럭|럭 +럮|럮|럮 +럯|럯|럯 +런|런|런 +럱|럱|럱 +럲|럲|럲 +럳|럳|럳 +럴|럴|럴 +럵|럵|럵 +럶|럶|럶 +럷|럷|럷 +럸|럸|럸 +럹|럹|럹 +럺|럺|럺 +럻|럻|럻 +럼|럼|럼 +럽|럽|럽 +럾|럾|럾 +럿|럿|럿 +렀|렀|렀 +렁|렁|렁 +렂|렂|렂 +렃|렃|렃 +렄|렄|렄 +렅|렅|렅 +렆|렆|렆 +렇|렇|렇 +레|레|레 +렉|렉|렉 +렊|렊|렊 +렋|렋|렋 +렌|렌|렌 +렍|렍|렍 +렎|렎|렎 +렏|렏|렏 +렐|렐|렐 +렑|렑|렑 +렒|렒|렒 +렓|렓|렓 +렔|렔|렔 +렕|렕|렕 +렖|렖|렖 +렗|렗|렗 +렘|렘|렘 +렙|렙|렙 +렚|렚|렚 +렛|렛|렛 +렜|렜|렜 +렝|렝|렝 +렞|렞|렞 +렟|렟|렟 +렠|렠|렠 +렡|렡|렡 +렢|렢|렢 +렣|렣|렣 +려|려|려 +력|력|력 +렦|렦|렦 +렧|렧|렧 +련|련|련 +렩|렩|렩 +렪|렪|렪 +렫|렫|렫 +렬|렬|렬 +렭|렭|렭 +렮|렮|렮 +렯|렯|렯 +렰|렰|렰 +렱|렱|렱 +렲|렲|렲 +렳|렳|렳 +렴|렴|렴 +렵|렵|렵 +렶|렶|렶 +렷|렷|렷 +렸|렸|렸 +령|령|령 +렺|렺|렺 +렻|렻|렻 +렼|렼|렼 +렽|렽|렽 +렾|렾|렾 +렿|렿|렿 +례|례|례 +롁|롁|롁 +롂|롂|롂 +롃|롃|롃 +롄|롄|롄 +롅|롅|롅 +롆|롆|롆 +롇|롇|롇 +롈|롈|롈 +롉|롉|롉 +롊|롊|롊 +롋|롋|롋 +롌|롌|롌 +롍|롍|롍 +롎|롎|롎 +롏|롏|롏 +롐|롐|롐 +롑|롑|롑 +롒|롒|롒 +롓|롓|롓 +롔|롔|롔 +롕|롕|롕 +롖|롖|롖 +롗|롗|롗 +롘|롘|롘 +롙|롙|롙 +롚|롚|롚 +롛|롛|롛 +로|로|로 +록|록|록 +롞|롞|롞 +롟|롟|롟 +론|론|론 +롡|롡|롡 +롢|롢|롢 +롣|롣|롣 +롤|롤|롤 +롥|롥|롥 +롦|롦|롦 +롧|롧|롧 +롨|롨|롨 +롩|롩|롩 +롪|롪|롪 +롫|롫|롫 +롬|롬|롬 +롭|롭|롭 +롮|롮|롮 +롯|롯|롯 +롰|롰|롰 +롱|롱|롱 +롲|롲|롲 +롳|롳|롳 +롴|롴|롴 +롵|롵|롵 +롶|롶|롶 +롷|롷|롷 +롸|롸|롸 +롹|롹|롹 +롺|롺|롺 +롻|롻|롻 +롼|롼|롼 +롽|롽|롽 +롾|롾|롾 +롿|롿|롿 +뢀|뢀|뢀 +뢁|뢁|뢁 +뢂|뢂|뢂 +뢃|뢃|뢃 +뢄|뢄|뢄 +뢅|뢅|뢅 +뢆|뢆|뢆 +뢇|뢇|뢇 +뢈|뢈|뢈 +뢉|뢉|뢉 +뢊|뢊|뢊 +뢋|뢋|뢋 +뢌|뢌|뢌 +뢍|뢍|뢍 +뢎|뢎|뢎 +뢏|뢏|뢏 +뢐|뢐|뢐 +뢑|뢑|뢑 +뢒|뢒|뢒 +뢓|뢓|뢓 +뢔|뢔|뢔 +뢕|뢕|뢕 +뢖|뢖|뢖 +뢗|뢗|뢗 +뢘|뢘|뢘 +뢙|뢙|뢙 +뢚|뢚|뢚 +뢛|뢛|뢛 +뢜|뢜|뢜 +뢝|뢝|뢝 +뢞|뢞|뢞 +뢟|뢟|뢟 +뢠|뢠|뢠 +뢡|뢡|뢡 +뢢|뢢|뢢 +뢣|뢣|뢣 +뢤|뢤|뢤 +뢥|뢥|뢥 +뢦|뢦|뢦 +뢧|뢧|뢧 +뢨|뢨|뢨 +뢩|뢩|뢩 +뢪|뢪|뢪 +뢫|뢫|뢫 +뢬|뢬|뢬 +뢭|뢭|뢭 +뢮|뢮|뢮 +뢯|뢯|뢯 +뢰|뢰|뢰 +뢱|뢱|뢱 +뢲|뢲|뢲 +뢳|뢳|뢳 +뢴|뢴|뢴 +뢵|뢵|뢵 +뢶|뢶|뢶 +뢷|뢷|뢷 +뢸|뢸|뢸 +뢹|뢹|뢹 +뢺|뢺|뢺 +뢻|뢻|뢻 +뢼|뢼|뢼 +뢽|뢽|뢽 +뢾|뢾|뢾 +뢿|뢿|뢿 +룀|룀|룀 +룁|룁|룁 +룂|룂|룂 +룃|룃|룃 +룄|룄|룄 +룅|룅|룅 +룆|룆|룆 +룇|룇|룇 +룈|룈|룈 +룉|룉|룉 +룊|룊|룊 +룋|룋|룋 +료|료|료 +룍|룍|룍 +룎|룎|룎 +룏|룏|룏 +룐|룐|룐 +룑|룑|룑 +룒|룒|룒 +룓|룓|룓 +룔|룔|룔 +룕|룕|룕 +룖|룖|룖 +룗|룗|룗 +룘|룘|룘 +룙|룙|룙 +룚|룚|룚 +룛|룛|룛 +룜|룜|룜 +룝|룝|룝 +룞|룞|룞 +룟|룟|룟 +룠|룠|룠 +룡|룡|룡 +룢|룢|룢 +룣|룣|룣 +룤|룤|룤 +룥|룥|룥 +룦|룦|룦 +룧|룧|룧 +루|루|루 +룩|룩|룩 +룪|룪|룪 +룫|룫|룫 +룬|룬|룬 +룭|룭|룭 +룮|룮|룮 +룯|룯|룯 +룰|룰|룰 +룱|룱|룱 +룲|룲|룲 +룳|룳|룳 +룴|룴|룴 +룵|룵|룵 +룶|룶|룶 +룷|룷|룷 +룸|룸|룸 +룹|룹|룹 +룺|룺|룺 +룻|룻|룻 +룼|룼|룼 +룽|룽|룽 +룾|룾|룾 +룿|룿|룿 +뤀|뤀|뤀 +뤁|뤁|뤁 +뤂|뤂|뤂 +뤃|뤃|뤃 +뤄|뤄|뤄 +뤅|뤅|뤅 +뤆|뤆|뤆 +뤇|뤇|뤇 +뤈|뤈|뤈 +뤉|뤉|뤉 +뤊|뤊|뤊 +뤋|뤋|뤋 +뤌|뤌|뤌 +뤍|뤍|뤍 +뤎|뤎|뤎 +뤏|뤏|뤏 +뤐|뤐|뤐 +뤑|뤑|뤑 +뤒|뤒|뤒 +뤓|뤓|뤓 +뤔|뤔|뤔 +뤕|뤕|뤕 +뤖|뤖|뤖 +뤗|뤗|뤗 +뤘|뤘|뤘 +뤙|뤙|뤙 +뤚|뤚|뤚 +뤛|뤛|뤛 +뤜|뤜|뤜 +뤝|뤝|뤝 +뤞|뤞|뤞 +뤟|뤟|뤟 +뤠|뤠|뤠 +뤡|뤡|뤡 +뤢|뤢|뤢 +뤣|뤣|뤣 +뤤|뤤|뤤 +뤥|뤥|뤥 +뤦|뤦|뤦 +뤧|뤧|뤧 +뤨|뤨|뤨 +뤩|뤩|뤩 +뤪|뤪|뤪 +뤫|뤫|뤫 +뤬|뤬|뤬 +뤭|뤭|뤭 +뤮|뤮|뤮 +뤯|뤯|뤯 +뤰|뤰|뤰 +뤱|뤱|뤱 +뤲|뤲|뤲 +뤳|뤳|뤳 +뤴|뤴|뤴 +뤵|뤵|뤵 +뤶|뤶|뤶 +뤷|뤷|뤷 +뤸|뤸|뤸 +뤹|뤹|뤹 +뤺|뤺|뤺 +뤻|뤻|뤻 +뤼|뤼|뤼 +뤽|뤽|뤽 +뤾|뤾|뤾 +뤿|뤿|뤿 +륀|륀|륀 +륁|륁|륁 +륂|륂|륂 +륃|륃|륃 +륄|륄|륄 +륅|륅|륅 +륆|륆|륆 +륇|륇|륇 +륈|륈|륈 +륉|륉|륉 +륊|륊|륊 +륋|륋|륋 +륌|륌|륌 +륍|륍|륍 +륎|륎|륎 +륏|륏|륏 +륐|륐|륐 +륑|륑|륑 +륒|륒|륒 +륓|륓|륓 +륔|륔|륔 +륕|륕|륕 +륖|륖|륖 +륗|륗|륗 +류|류|류 +륙|륙|륙 +륚|륚|륚 +륛|륛|륛 +륜|륜|륜 +륝|륝|륝 +륞|륞|륞 +륟|륟|륟 +률|률|률 +륡|륡|륡 +륢|륢|륢 +륣|륣|륣 +륤|륤|륤 +륥|륥|륥 +륦|륦|륦 +륧|륧|륧 +륨|륨|륨 +륩|륩|륩 +륪|륪|륪 +륫|륫|륫 +륬|륬|륬 +륭|륭|륭 +륮|륮|륮 +륯|륯|륯 +륰|륰|륰 +륱|륱|륱 +륲|륲|륲 +륳|륳|륳 +르|르|르 +륵|륵|륵 +륶|륶|륶 +륷|륷|륷 +른|른|른 +륹|륹|륹 +륺|륺|륺 +륻|륻|륻 +를|를|를 +륽|륽|륽 +륾|륾|륾 +륿|륿|륿 +릀|릀|릀 +릁|릁|릁 +릂|릂|릂 +릃|릃|릃 +름|름|름 +릅|릅|릅 +릆|릆|릆 +릇|릇|릇 +릈|릈|릈 +릉|릉|릉 +릊|릊|릊 +릋|릋|릋 +릌|릌|릌 +릍|릍|릍 +릎|릎|릎 +릏|릏|릏 +릐|릐|릐 +릑|릑|릑 +릒|릒|릒 +릓|릓|릓 +릔|릔|릔 +릕|릕|릕 +릖|릖|릖 +릗|릗|릗 +릘|릘|릘 +릙|릙|릙 +릚|릚|릚 +릛|릛|릛 +릜|릜|릜 +릝|릝|릝 +릞|릞|릞 +릟|릟|릟 +릠|릠|릠 +릡|릡|릡 +릢|릢|릢 +릣|릣|릣 +릤|릤|릤 +릥|릥|릥 +릦|릦|릦 +릧|릧|릧 +릨|릨|릨 +릩|릩|릩 +릪|릪|릪 +릫|릫|릫 +리|리|리 +릭|릭|릭 +릮|릮|릮 +릯|릯|릯 +린|린|린 +릱|릱|릱 +릲|릲|릲 +릳|릳|릳 +릴|릴|릴 +릵|릵|릵 +릶|릶|릶 +릷|릷|릷 +릸|릸|릸 +릹|릹|릹 +릺|릺|릺 +릻|릻|릻 +림|림|림 +립|립|립 +릾|릾|릾 +릿|릿|릿 +맀|맀|맀 +링|링|링 +맂|맂|맂 +맃|맃|맃 +맄|맄|맄 +맅|맅|맅 +맆|맆|맆 +맇|맇|맇 +마|마|마 +막|막|막 +맊|맊|맊 +맋|맋|맋 +만|만|만 +맍|맍|맍 +많|많|많 +맏|맏|맏 +말|말|말 +맑|맑|맑 +맒|맒|맒 +맓|맓|맓 +맔|맔|맔 +맕|맕|맕 +맖|맖|맖 +맗|맗|맗 +맘|맘|맘 +맙|맙|맙 +맚|맚|맚 +맛|맛|맛 +맜|맜|맜 +망|망|망 +맞|맞|맞 +맟|맟|맟 +맠|맠|맠 +맡|맡|맡 +맢|맢|맢 +맣|맣|맣 +매|매|매 +맥|맥|맥 +맦|맦|맦 +맧|맧|맧 +맨|맨|맨 +맩|맩|맩 +맪|맪|맪 +맫|맫|맫 +맬|맬|맬 +맭|맭|맭 +맮|맮|맮 +맯|맯|맯 +맰|맰|맰 +맱|맱|맱 +맲|맲|맲 +맳|맳|맳 +맴|맴|맴 +맵|맵|맵 +맶|맶|맶 +맷|맷|맷 +맸|맸|맸 +맹|맹|맹 +맺|맺|맺 +맻|맻|맻 +맼|맼|맼 +맽|맽|맽 +맾|맾|맾 +맿|맿|맿 +먀|먀|먀 +먁|먁|먁 +먂|먂|먂 +먃|먃|먃 +먄|먄|먄 +먅|먅|먅 +먆|먆|먆 +먇|먇|먇 +먈|먈|먈 +먉|먉|먉 +먊|먊|먊 +먋|먋|먋 +먌|먌|먌 +먍|먍|먍 +먎|먎|먎 +먏|먏|먏 +먐|먐|먐 +먑|먑|먑 +먒|먒|먒 +먓|먓|먓 +먔|먔|먔 +먕|먕|먕 +먖|먖|먖 +먗|먗|먗 +먘|먘|먘 +먙|먙|먙 +먚|먚|먚 +먛|먛|먛 +먜|먜|먜 +먝|먝|먝 +먞|먞|먞 +먟|먟|먟 +먠|먠|먠 +먡|먡|먡 +먢|먢|먢 +먣|먣|먣 +먤|먤|먤 +먥|먥|먥 +먦|먦|먦 +먧|먧|먧 +먨|먨|먨 +먩|먩|먩 +먪|먪|먪 +먫|먫|먫 +먬|먬|먬 +먭|먭|먭 +먮|먮|먮 +먯|먯|먯 +먰|먰|먰 +먱|먱|먱 +먲|먲|먲 +먳|먳|먳 +먴|먴|먴 +먵|먵|먵 +먶|먶|먶 +먷|먷|먷 +머|머|머 +먹|먹|먹 +먺|먺|먺 +먻|먻|먻 +먼|먼|먼 +먽|먽|먽 +먾|먾|먾 +먿|먿|먿 +멀|멀|멀 +멁|멁|멁 +멂|멂|멂 +멃|멃|멃 +멄|멄|멄 +멅|멅|멅 +멆|멆|멆 +멇|멇|멇 +멈|멈|멈 +멉|멉|멉 +멊|멊|멊 +멋|멋|멋 +멌|멌|멌 +멍|멍|멍 +멎|멎|멎 +멏|멏|멏 +멐|멐|멐 +멑|멑|멑 +멒|멒|멒 +멓|멓|멓 +메|메|메 +멕|멕|멕 +멖|멖|멖 +멗|멗|멗 +멘|멘|멘 +멙|멙|멙 +멚|멚|멚 +멛|멛|멛 +멜|멜|멜 +멝|멝|멝 +멞|멞|멞 +멟|멟|멟 +멠|멠|멠 +멡|멡|멡 +멢|멢|멢 +멣|멣|멣 +멤|멤|멤 +멥|멥|멥 +멦|멦|멦 +멧|멧|멧 +멨|멨|멨 +멩|멩|멩 +멪|멪|멪 +멫|멫|멫 +멬|멬|멬 +멭|멭|멭 +멮|멮|멮 +멯|멯|멯 +며|며|며 +멱|멱|멱 +멲|멲|멲 +멳|멳|멳 +면|면|면 +멵|멵|멵 +멶|멶|멶 +멷|멷|멷 +멸|멸|멸 +멹|멹|멹 +멺|멺|멺 +멻|멻|멻 +멼|멼|멼 +멽|멽|멽 +멾|멾|멾 +멿|멿|멿 +몀|몀|몀 +몁|몁|몁 +몂|몂|몂 +몃|몃|몃 +몄|몄|몄 +명|명|명 +몆|몆|몆 +몇|몇|몇 +몈|몈|몈 +몉|몉|몉 +몊|몊|몊 +몋|몋|몋 +몌|몌|몌 +몍|몍|몍 +몎|몎|몎 +몏|몏|몏 +몐|몐|몐 +몑|몑|몑 +몒|몒|몒 +몓|몓|몓 +몔|몔|몔 +몕|몕|몕 +몖|몖|몖 +몗|몗|몗 +몘|몘|몘 +몙|몙|몙 +몚|몚|몚 +몛|몛|몛 +몜|몜|몜 +몝|몝|몝 +몞|몞|몞 +몟|몟|몟 +몠|몠|몠 +몡|몡|몡 +몢|몢|몢 +몣|몣|몣 +몤|몤|몤 +몥|몥|몥 +몦|몦|몦 +몧|몧|몧 +모|모|모 +목|목|목 +몪|몪|몪 +몫|몫|몫 +몬|몬|몬 +몭|몭|몭 +몮|몮|몮 +몯|몯|몯 +몰|몰|몰 +몱|몱|몱 +몲|몲|몲 +몳|몳|몳 +몴|몴|몴 +몵|몵|몵 +몶|몶|몶 +몷|몷|몷 +몸|몸|몸 +몹|몹|몹 +몺|몺|몺 +못|못|못 +몼|몼|몼 +몽|몽|몽 +몾|몾|몾 +몿|몿|몿 +뫀|뫀|뫀 +뫁|뫁|뫁 +뫂|뫂|뫂 +뫃|뫃|뫃 +뫄|뫄|뫄 +뫅|뫅|뫅 +뫆|뫆|뫆 +뫇|뫇|뫇 +뫈|뫈|뫈 +뫉|뫉|뫉 +뫊|뫊|뫊 +뫋|뫋|뫋 +뫌|뫌|뫌 +뫍|뫍|뫍 +뫎|뫎|뫎 +뫏|뫏|뫏 +뫐|뫐|뫐 +뫑|뫑|뫑 +뫒|뫒|뫒 +뫓|뫓|뫓 +뫔|뫔|뫔 +뫕|뫕|뫕 +뫖|뫖|뫖 +뫗|뫗|뫗 +뫘|뫘|뫘 +뫙|뫙|뫙 +뫚|뫚|뫚 +뫛|뫛|뫛 +뫜|뫜|뫜 +뫝|뫝|뫝 +뫞|뫞|뫞 +뫟|뫟|뫟 +뫠|뫠|뫠 +뫡|뫡|뫡 +뫢|뫢|뫢 +뫣|뫣|뫣 +뫤|뫤|뫤 +뫥|뫥|뫥 +뫦|뫦|뫦 +뫧|뫧|뫧 +뫨|뫨|뫨 +뫩|뫩|뫩 +뫪|뫪|뫪 +뫫|뫫|뫫 +뫬|뫬|뫬 +뫭|뫭|뫭 +뫮|뫮|뫮 +뫯|뫯|뫯 +뫰|뫰|뫰 +뫱|뫱|뫱 +뫲|뫲|뫲 +뫳|뫳|뫳 +뫴|뫴|뫴 +뫵|뫵|뫵 +뫶|뫶|뫶 +뫷|뫷|뫷 +뫸|뫸|뫸 +뫹|뫹|뫹 +뫺|뫺|뫺 +뫻|뫻|뫻 +뫼|뫼|뫼 +뫽|뫽|뫽 +뫾|뫾|뫾 +뫿|뫿|뫿 +묀|묀|묀 +묁|묁|묁 +묂|묂|묂 +묃|묃|묃 +묄|묄|묄 +묅|묅|묅 +묆|묆|묆 +묇|묇|묇 +묈|묈|묈 +묉|묉|묉 +묊|묊|묊 +묋|묋|묋 +묌|묌|묌 +묍|묍|묍 +묎|묎|묎 +묏|묏|묏 +묐|묐|묐 +묑|묑|묑 +묒|묒|묒 +묓|묓|묓 +묔|묔|묔 +묕|묕|묕 +묖|묖|묖 +묗|묗|묗 +묘|묘|묘 +묙|묙|묙 +묚|묚|묚 +묛|묛|묛 +묜|묜|묜 +묝|묝|묝 +묞|묞|묞 +묟|묟|묟 +묠|묠|묠 +묡|묡|묡 +묢|묢|묢 +묣|묣|묣 +묤|묤|묤 +묥|묥|묥 +묦|묦|묦 +묧|묧|묧 +묨|묨|묨 +묩|묩|묩 +묪|묪|묪 +묫|묫|묫 +묬|묬|묬 +묭|묭|묭 +묮|묮|묮 +묯|묯|묯 +묰|묰|묰 +묱|묱|묱 +묲|묲|묲 +묳|묳|묳 +무|무|무 +묵|묵|묵 +묶|묶|묶 +묷|묷|묷 +문|문|문 +묹|묹|묹 +묺|묺|묺 +묻|묻|묻 +물|물|물 +묽|묽|묽 +묾|묾|묾 +묿|묿|묿 +뭀|뭀|뭀 +뭁|뭁|뭁 +뭂|뭂|뭂 +뭃|뭃|뭃 +뭄|뭄|뭄 +뭅|뭅|뭅 +뭆|뭆|뭆 +뭇|뭇|뭇 +뭈|뭈|뭈 +뭉|뭉|뭉 +뭊|뭊|뭊 +뭋|뭋|뭋 +뭌|뭌|뭌 +뭍|뭍|뭍 +뭎|뭎|뭎 +뭏|뭏|뭏 +뭐|뭐|뭐 +뭑|뭑|뭑 +뭒|뭒|뭒 +뭓|뭓|뭓 +뭔|뭔|뭔 +뭕|뭕|뭕 +뭖|뭖|뭖 +뭗|뭗|뭗 +뭘|뭘|뭘 +뭙|뭙|뭙 +뭚|뭚|뭚 +뭛|뭛|뭛 +뭜|뭜|뭜 +뭝|뭝|뭝 +뭞|뭞|뭞 +뭟|뭟|뭟 +뭠|뭠|뭠 +뭡|뭡|뭡 +뭢|뭢|뭢 +뭣|뭣|뭣 +뭤|뭤|뭤 +뭥|뭥|뭥 +뭦|뭦|뭦 +뭧|뭧|뭧 +뭨|뭨|뭨 +뭩|뭩|뭩 +뭪|뭪|뭪 +뭫|뭫|뭫 +뭬|뭬|뭬 +뭭|뭭|뭭 +뭮|뭮|뭮 +뭯|뭯|뭯 +뭰|뭰|뭰 +뭱|뭱|뭱 +뭲|뭲|뭲 +뭳|뭳|뭳 +뭴|뭴|뭴 +뭵|뭵|뭵 +뭶|뭶|뭶 +뭷|뭷|뭷 +뭸|뭸|뭸 +뭹|뭹|뭹 +뭺|뭺|뭺 +뭻|뭻|뭻 +뭼|뭼|뭼 +뭽|뭽|뭽 +뭾|뭾|뭾 +뭿|뭿|뭿 +뮀|뮀|뮀 +뮁|뮁|뮁 +뮂|뮂|뮂 +뮃|뮃|뮃 +뮄|뮄|뮄 +뮅|뮅|뮅 +뮆|뮆|뮆 +뮇|뮇|뮇 +뮈|뮈|뮈 +뮉|뮉|뮉 +뮊|뮊|뮊 +뮋|뮋|뮋 +뮌|뮌|뮌 +뮍|뮍|뮍 +뮎|뮎|뮎 +뮏|뮏|뮏 +뮐|뮐|뮐 +뮑|뮑|뮑 +뮒|뮒|뮒 +뮓|뮓|뮓 +뮔|뮔|뮔 +뮕|뮕|뮕 +뮖|뮖|뮖 +뮗|뮗|뮗 +뮘|뮘|뮘 +뮙|뮙|뮙 +뮚|뮚|뮚 +뮛|뮛|뮛 +뮜|뮜|뮜 +뮝|뮝|뮝 +뮞|뮞|뮞 +뮟|뮟|뮟 +뮠|뮠|뮠 +뮡|뮡|뮡 +뮢|뮢|뮢 +뮣|뮣|뮣 +뮤|뮤|뮤 +뮥|뮥|뮥 +뮦|뮦|뮦 +뮧|뮧|뮧 +뮨|뮨|뮨 +뮩|뮩|뮩 +뮪|뮪|뮪 +뮫|뮫|뮫 +뮬|뮬|뮬 +뮭|뮭|뮭 +뮮|뮮|뮮 +뮯|뮯|뮯 +뮰|뮰|뮰 +뮱|뮱|뮱 +뮲|뮲|뮲 +뮳|뮳|뮳 +뮴|뮴|뮴 +뮵|뮵|뮵 +뮶|뮶|뮶 +뮷|뮷|뮷 +뮸|뮸|뮸 +뮹|뮹|뮹 +뮺|뮺|뮺 +뮻|뮻|뮻 +뮼|뮼|뮼 +뮽|뮽|뮽 +뮾|뮾|뮾 +뮿|뮿|뮿 +므|므|므 +믁|믁|믁 +믂|믂|믂 +믃|믃|믃 +믄|믄|믄 +믅|믅|믅 +믆|믆|믆 +믇|믇|믇 +믈|믈|믈 +믉|믉|믉 +믊|믊|믊 +믋|믋|믋 +믌|믌|믌 +믍|믍|믍 +믎|믎|믎 +믏|믏|믏 +믐|믐|믐 +믑|믑|믑 +믒|믒|믒 +믓|믓|믓 +믔|믔|믔 +믕|믕|믕 +믖|믖|믖 +믗|믗|믗 +믘|믘|믘 +믙|믙|믙 +믚|믚|믚 +믛|믛|믛 +믜|믜|믜 +믝|믝|믝 +믞|믞|믞 +믟|믟|믟 +믠|믠|믠 +믡|믡|믡 +믢|믢|믢 +믣|믣|믣 +믤|믤|믤 +믥|믥|믥 +믦|믦|믦 +믧|믧|믧 +믨|믨|믨 +믩|믩|믩 +믪|믪|믪 +믫|믫|믫 +믬|믬|믬 +믭|믭|믭 +믮|믮|믮 +믯|믯|믯 +믰|믰|믰 +믱|믱|믱 +믲|믲|믲 +믳|믳|믳 +믴|믴|믴 +믵|믵|믵 +믶|믶|믶 +믷|믷|믷 +미|미|미 +믹|믹|믹 +믺|믺|믺 +믻|믻|믻 +민|민|민 +믽|믽|믽 +믾|믾|믾 +믿|믿|믿 +밀|밀|밀 +밁|밁|밁 +밂|밂|밂 +밃|밃|밃 +밄|밄|밄 +밅|밅|밅 +밆|밆|밆 +밇|밇|밇 +밈|밈|밈 +밉|밉|밉 +밊|밊|밊 +밋|밋|밋 +밌|밌|밌 +밍|밍|밍 +밎|밎|밎 +및|및|및 +밐|밐|밐 +밑|밑|밑 +밒|밒|밒 +밓|밓|밓 +바|바|바 +박|박|박 +밖|밖|밖 +밗|밗|밗 +반|반|반 +밙|밙|밙 +밚|밚|밚 +받|받|받 +발|발|발 +밝|밝|밝 +밞|밞|밞 +밟|밟|밟 +밠|밠|밠 +밡|밡|밡 +밢|밢|밢 +밣|밣|밣 +밤|밤|밤 +밥|밥|밥 +밦|밦|밦 +밧|밧|밧 +밨|밨|밨 +방|방|방 +밪|밪|밪 +밫|밫|밫 +밬|밬|밬 +밭|밭|밭 +밮|밮|밮 +밯|밯|밯 +배|배|배 +백|백|백 +밲|밲|밲 +밳|밳|밳 +밴|밴|밴 +밵|밵|밵 +밶|밶|밶 +밷|밷|밷 +밸|밸|밸 +밹|밹|밹 +밺|밺|밺 +밻|밻|밻 +밼|밼|밼 +밽|밽|밽 +밾|밾|밾 +밿|밿|밿 +뱀|뱀|뱀 +뱁|뱁|뱁 +뱂|뱂|뱂 +뱃|뱃|뱃 +뱄|뱄|뱄 +뱅|뱅|뱅 +뱆|뱆|뱆 +뱇|뱇|뱇 +뱈|뱈|뱈 +뱉|뱉|뱉 +뱊|뱊|뱊 +뱋|뱋|뱋 +뱌|뱌|뱌 +뱍|뱍|뱍 +뱎|뱎|뱎 +뱏|뱏|뱏 +뱐|뱐|뱐 +뱑|뱑|뱑 +뱒|뱒|뱒 +뱓|뱓|뱓 +뱔|뱔|뱔 +뱕|뱕|뱕 +뱖|뱖|뱖 +뱗|뱗|뱗 +뱘|뱘|뱘 +뱙|뱙|뱙 +뱚|뱚|뱚 +뱛|뱛|뱛 +뱜|뱜|뱜 +뱝|뱝|뱝 +뱞|뱞|뱞 +뱟|뱟|뱟 +뱠|뱠|뱠 +뱡|뱡|뱡 +뱢|뱢|뱢 +뱣|뱣|뱣 +뱤|뱤|뱤 +뱥|뱥|뱥 +뱦|뱦|뱦 +뱧|뱧|뱧 +뱨|뱨|뱨 +뱩|뱩|뱩 +뱪|뱪|뱪 +뱫|뱫|뱫 +뱬|뱬|뱬 +뱭|뱭|뱭 +뱮|뱮|뱮 +뱯|뱯|뱯 +뱰|뱰|뱰 +뱱|뱱|뱱 +뱲|뱲|뱲 +뱳|뱳|뱳 +뱴|뱴|뱴 +뱵|뱵|뱵 +뱶|뱶|뱶 +뱷|뱷|뱷 +뱸|뱸|뱸 +뱹|뱹|뱹 +뱺|뱺|뱺 +뱻|뱻|뱻 +뱼|뱼|뱼 +뱽|뱽|뱽 +뱾|뱾|뱾 +뱿|뱿|뱿 +벀|벀|벀 +벁|벁|벁 +벂|벂|벂 +벃|벃|벃 +버|버|버 +벅|벅|벅 +벆|벆|벆 +벇|벇|벇 +번|번|번 +벉|벉|벉 +벊|벊|벊 +벋|벋|벋 +벌|벌|벌 +벍|벍|벍 +벎|벎|벎 +벏|벏|벏 +벐|벐|벐 +벑|벑|벑 +벒|벒|벒 +벓|벓|벓 +범|범|범 +법|법|법 +벖|벖|벖 +벗|벗|벗 +벘|벘|벘 +벙|벙|벙 +벚|벚|벚 +벛|벛|벛 +벜|벜|벜 +벝|벝|벝 +벞|벞|벞 +벟|벟|벟 +베|베|베 +벡|벡|벡 +벢|벢|벢 +벣|벣|벣 +벤|벤|벤 +벥|벥|벥 +벦|벦|벦 +벧|벧|벧 +벨|벨|벨 +벩|벩|벩 +벪|벪|벪 +벫|벫|벫 +벬|벬|벬 +벭|벭|벭 +벮|벮|벮 +벯|벯|벯 +벰|벰|벰 +벱|벱|벱 +벲|벲|벲 +벳|벳|벳 +벴|벴|벴 +벵|벵|벵 +벶|벶|벶 +벷|벷|벷 +벸|벸|벸 +벹|벹|벹 +벺|벺|벺 +벻|벻|벻 +벼|벼|벼 +벽|벽|벽 +벾|벾|벾 +벿|벿|벿 +변|변|변 +볁|볁|볁 +볂|볂|볂 +볃|볃|볃 +별|별|별 +볅|볅|볅 +볆|볆|볆 +볇|볇|볇 +볈|볈|볈 +볉|볉|볉 +볊|볊|볊 +볋|볋|볋 +볌|볌|볌 +볍|볍|볍 +볎|볎|볎 +볏|볏|볏 +볐|볐|볐 +병|병|병 +볒|볒|볒 +볓|볓|볓 +볔|볔|볔 +볕|볕|볕 +볖|볖|볖 +볗|볗|볗 +볘|볘|볘 +볙|볙|볙 +볚|볚|볚 +볛|볛|볛 +볜|볜|볜 +볝|볝|볝 +볞|볞|볞 +볟|볟|볟 +볠|볠|볠 +볡|볡|볡 +볢|볢|볢 +볣|볣|볣 +볤|볤|볤 +볥|볥|볥 +볦|볦|볦 +볧|볧|볧 +볨|볨|볨 +볩|볩|볩 +볪|볪|볪 +볫|볫|볫 +볬|볬|볬 +볭|볭|볭 +볮|볮|볮 +볯|볯|볯 +볰|볰|볰 +볱|볱|볱 +볲|볲|볲 +볳|볳|볳 +보|보|보 +복|복|복 +볶|볶|볶 +볷|볷|볷 +본|본|본 +볹|볹|볹 +볺|볺|볺 +볻|볻|볻 +볼|볼|볼 +볽|볽|볽 +볾|볾|볾 +볿|볿|볿 +봀|봀|봀 +봁|봁|봁 +봂|봂|봂 +봃|봃|봃 +봄|봄|봄 +봅|봅|봅 +봆|봆|봆 +봇|봇|봇 +봈|봈|봈 +봉|봉|봉 +봊|봊|봊 +봋|봋|봋 +봌|봌|봌 +봍|봍|봍 +봎|봎|봎 +봏|봏|봏 +봐|봐|봐 +봑|봑|봑 +봒|봒|봒 +봓|봓|봓 +봔|봔|봔 +봕|봕|봕 +봖|봖|봖 +봗|봗|봗 +봘|봘|봘 +봙|봙|봙 +봚|봚|봚 +봛|봛|봛 +봜|봜|봜 +봝|봝|봝 +봞|봞|봞 +봟|봟|봟 +봠|봠|봠 +봡|봡|봡 +봢|봢|봢 +봣|봣|봣 +봤|봤|봤 +봥|봥|봥 +봦|봦|봦 +봧|봧|봧 +봨|봨|봨 +봩|봩|봩 +봪|봪|봪 +봫|봫|봫 +봬|봬|봬 +봭|봭|봭 +봮|봮|봮 +봯|봯|봯 +봰|봰|봰 +봱|봱|봱 +봲|봲|봲 +봳|봳|봳 +봴|봴|봴 +봵|봵|봵 +봶|봶|봶 +봷|봷|봷 +봸|봸|봸 +봹|봹|봹 +봺|봺|봺 +봻|봻|봻 +봼|봼|봼 +봽|봽|봽 +봾|봾|봾 +봿|봿|봿 +뵀|뵀|뵀 +뵁|뵁|뵁 +뵂|뵂|뵂 +뵃|뵃|뵃 +뵄|뵄|뵄 +뵅|뵅|뵅 +뵆|뵆|뵆 +뵇|뵇|뵇 +뵈|뵈|뵈 +뵉|뵉|뵉 +뵊|뵊|뵊 +뵋|뵋|뵋 +뵌|뵌|뵌 +뵍|뵍|뵍 +뵎|뵎|뵎 +뵏|뵏|뵏 +뵐|뵐|뵐 +뵑|뵑|뵑 +뵒|뵒|뵒 +뵓|뵓|뵓 +뵔|뵔|뵔 +뵕|뵕|뵕 +뵖|뵖|뵖 +뵗|뵗|뵗 +뵘|뵘|뵘 +뵙|뵙|뵙 +뵚|뵚|뵚 +뵛|뵛|뵛 +뵜|뵜|뵜 +뵝|뵝|뵝 +뵞|뵞|뵞 +뵟|뵟|뵟 +뵠|뵠|뵠 +뵡|뵡|뵡 +뵢|뵢|뵢 +뵣|뵣|뵣 +뵤|뵤|뵤 +뵥|뵥|뵥 +뵦|뵦|뵦 +뵧|뵧|뵧 +뵨|뵨|뵨 +뵩|뵩|뵩 +뵪|뵪|뵪 +뵫|뵫|뵫 +뵬|뵬|뵬 +뵭|뵭|뵭 +뵮|뵮|뵮 +뵯|뵯|뵯 +뵰|뵰|뵰 +뵱|뵱|뵱 +뵲|뵲|뵲 +뵳|뵳|뵳 +뵴|뵴|뵴 +뵵|뵵|뵵 +뵶|뵶|뵶 +뵷|뵷|뵷 +뵸|뵸|뵸 +뵹|뵹|뵹 +뵺|뵺|뵺 +뵻|뵻|뵻 +뵼|뵼|뵼 +뵽|뵽|뵽 +뵾|뵾|뵾 +뵿|뵿|뵿 +부|부|부 +북|북|북 +붂|붂|붂 +붃|붃|붃 +분|분|분 +붅|붅|붅 +붆|붆|붆 +붇|붇|붇 +불|불|불 +붉|붉|붉 +붊|붊|붊 +붋|붋|붋 +붌|붌|붌 +붍|붍|붍 +붎|붎|붎 +붏|붏|붏 +붐|붐|붐 +붑|붑|붑 +붒|붒|붒 +붓|붓|붓 +붔|붔|붔 +붕|붕|붕 +붖|붖|붖 +붗|붗|붗 +붘|붘|붘 +붙|붙|붙 +붚|붚|붚 +붛|붛|붛 +붜|붜|붜 +붝|붝|붝 +붞|붞|붞 +붟|붟|붟 +붠|붠|붠 +붡|붡|붡 +붢|붢|붢 +붣|붣|붣 +붤|붤|붤 +붥|붥|붥 +붦|붦|붦 +붧|붧|붧 +붨|붨|붨 +붩|붩|붩 +붪|붪|붪 +붫|붫|붫 +붬|붬|붬 +붭|붭|붭 +붮|붮|붮 +붯|붯|붯 +붰|붰|붰 +붱|붱|붱 +붲|붲|붲 +붳|붳|붳 +붴|붴|붴 +붵|붵|붵 +붶|붶|붶 +붷|붷|붷 +붸|붸|붸 +붹|붹|붹 +붺|붺|붺 +붻|붻|붻 +붼|붼|붼 +붽|붽|붽 +붾|붾|붾 +붿|붿|붿 +뷀|뷀|뷀 +뷁|뷁|뷁 +뷂|뷂|뷂 +뷃|뷃|뷃 +뷄|뷄|뷄 +뷅|뷅|뷅 +뷆|뷆|뷆 +뷇|뷇|뷇 +뷈|뷈|뷈 +뷉|뷉|뷉 +뷊|뷊|뷊 +뷋|뷋|뷋 +뷌|뷌|뷌 +뷍|뷍|뷍 +뷎|뷎|뷎 +뷏|뷏|뷏 +뷐|뷐|뷐 +뷑|뷑|뷑 +뷒|뷒|뷒 +뷓|뷓|뷓 +뷔|뷔|뷔 +뷕|뷕|뷕 +뷖|뷖|뷖 +뷗|뷗|뷗 +뷘|뷘|뷘 +뷙|뷙|뷙 +뷚|뷚|뷚 +뷛|뷛|뷛 +뷜|뷜|뷜 +뷝|뷝|뷝 +뷞|뷞|뷞 +뷟|뷟|뷟 +뷠|뷠|뷠 +뷡|뷡|뷡 +뷢|뷢|뷢 +뷣|뷣|뷣 +뷤|뷤|뷤 +뷥|뷥|뷥 +뷦|뷦|뷦 +뷧|뷧|뷧 +뷨|뷨|뷨 +뷩|뷩|뷩 +뷪|뷪|뷪 +뷫|뷫|뷫 +뷬|뷬|뷬 +뷭|뷭|뷭 +뷮|뷮|뷮 +뷯|뷯|뷯 +뷰|뷰|뷰 +뷱|뷱|뷱 +뷲|뷲|뷲 +뷳|뷳|뷳 +뷴|뷴|뷴 +뷵|뷵|뷵 +뷶|뷶|뷶 +뷷|뷷|뷷 +뷸|뷸|뷸 +뷹|뷹|뷹 +뷺|뷺|뷺 +뷻|뷻|뷻 +뷼|뷼|뷼 +뷽|뷽|뷽 +뷾|뷾|뷾 +뷿|뷿|뷿 +븀|븀|븀 +븁|븁|븁 +븂|븂|븂 +븃|븃|븃 +븄|븄|븄 +븅|븅|븅 +븆|븆|븆 +븇|븇|븇 +븈|븈|븈 +븉|븉|븉 +븊|븊|븊 +븋|븋|븋 +브|브|브 +븍|븍|븍 +븎|븎|븎 +븏|븏|븏 +븐|븐|븐 +븑|븑|븑 +븒|븒|븒 +븓|븓|븓 +블|블|블 +븕|븕|븕 +븖|븖|븖 +븗|븗|븗 +븘|븘|븘 +븙|븙|븙 +븚|븚|븚 +븛|븛|븛 +븜|븜|븜 +븝|븝|븝 +븞|븞|븞 +븟|븟|븟 +븠|븠|븠 +븡|븡|븡 +븢|븢|븢 +븣|븣|븣 +븤|븤|븤 +븥|븥|븥 +븦|븦|븦 +븧|븧|븧 +븨|븨|븨 +븩|븩|븩 +븪|븪|븪 +븫|븫|븫 +븬|븬|븬 +븭|븭|븭 +븮|븮|븮 +븯|븯|븯 +븰|븰|븰 +븱|븱|븱 +븲|븲|븲 +븳|븳|븳 +븴|븴|븴 +븵|븵|븵 +븶|븶|븶 +븷|븷|븷 +븸|븸|븸 +븹|븹|븹 +븺|븺|븺 +븻|븻|븻 +븼|븼|븼 +븽|븽|븽 +븾|븾|븾 +븿|븿|븿 +빀|빀|빀 +빁|빁|빁 +빂|빂|빂 +빃|빃|빃 +비|비|비 +빅|빅|빅 +빆|빆|빆 +빇|빇|빇 +빈|빈|빈 +빉|빉|빉 +빊|빊|빊 +빋|빋|빋 +빌|빌|빌 +빍|빍|빍 +빎|빎|빎 +빏|빏|빏 +빐|빐|빐 +빑|빑|빑 +빒|빒|빒 +빓|빓|빓 +빔|빔|빔 +빕|빕|빕 +빖|빖|빖 +빗|빗|빗 +빘|빘|빘 +빙|빙|빙 +빚|빚|빚 +빛|빛|빛 +빜|빜|빜 +빝|빝|빝 +빞|빞|빞 +빟|빟|빟 +빠|빠|빠 +빡|빡|빡 +빢|빢|빢 +빣|빣|빣 +빤|빤|빤 +빥|빥|빥 +빦|빦|빦 +빧|빧|빧 +빨|빨|빨 +빩|빩|빩 +빪|빪|빪 +빫|빫|빫 +빬|빬|빬 +빭|빭|빭 +빮|빮|빮 +빯|빯|빯 +빰|빰|빰 +빱|빱|빱 +빲|빲|빲 +빳|빳|빳 +빴|빴|빴 +빵|빵|빵 +빶|빶|빶 +빷|빷|빷 +빸|빸|빸 +빹|빹|빹 +빺|빺|빺 +빻|빻|빻 +빼|빼|빼 +빽|빽|빽 +빾|빾|빾 +빿|빿|빿 +뺀|뺀|뺀 +뺁|뺁|뺁 +뺂|뺂|뺂 +뺃|뺃|뺃 +뺄|뺄|뺄 +뺅|뺅|뺅 +뺆|뺆|뺆 +뺇|뺇|뺇 +뺈|뺈|뺈 +뺉|뺉|뺉 +뺊|뺊|뺊 +뺋|뺋|뺋 +뺌|뺌|뺌 +뺍|뺍|뺍 +뺎|뺎|뺎 +뺏|뺏|뺏 +뺐|뺐|뺐 +뺑|뺑|뺑 +뺒|뺒|뺒 +뺓|뺓|뺓 +뺔|뺔|뺔 +뺕|뺕|뺕 +뺖|뺖|뺖 +뺗|뺗|뺗 +뺘|뺘|뺘 +뺙|뺙|뺙 +뺚|뺚|뺚 +뺛|뺛|뺛 +뺜|뺜|뺜 +뺝|뺝|뺝 +뺞|뺞|뺞 +뺟|뺟|뺟 +뺠|뺠|뺠 +뺡|뺡|뺡 +뺢|뺢|뺢 +뺣|뺣|뺣 +뺤|뺤|뺤 +뺥|뺥|뺥 +뺦|뺦|뺦 +뺧|뺧|뺧 +뺨|뺨|뺨 +뺩|뺩|뺩 +뺪|뺪|뺪 +뺫|뺫|뺫 +뺬|뺬|뺬 +뺭|뺭|뺭 +뺮|뺮|뺮 +뺯|뺯|뺯 +뺰|뺰|뺰 +뺱|뺱|뺱 +뺲|뺲|뺲 +뺳|뺳|뺳 +뺴|뺴|뺴 +뺵|뺵|뺵 +뺶|뺶|뺶 +뺷|뺷|뺷 +뺸|뺸|뺸 +뺹|뺹|뺹 +뺺|뺺|뺺 +뺻|뺻|뺻 +뺼|뺼|뺼 +뺽|뺽|뺽 +뺾|뺾|뺾 +뺿|뺿|뺿 +뻀|뻀|뻀 +뻁|뻁|뻁 +뻂|뻂|뻂 +뻃|뻃|뻃 +뻄|뻄|뻄 +뻅|뻅|뻅 +뻆|뻆|뻆 +뻇|뻇|뻇 +뻈|뻈|뻈 +뻉|뻉|뻉 +뻊|뻊|뻊 +뻋|뻋|뻋 +뻌|뻌|뻌 +뻍|뻍|뻍 +뻎|뻎|뻎 +뻏|뻏|뻏 +뻐|뻐|뻐 +뻑|뻑|뻑 +뻒|뻒|뻒 +뻓|뻓|뻓 +뻔|뻔|뻔 +뻕|뻕|뻕 +뻖|뻖|뻖 +뻗|뻗|뻗 +뻘|뻘|뻘 +뻙|뻙|뻙 +뻚|뻚|뻚 +뻛|뻛|뻛 +뻜|뻜|뻜 +뻝|뻝|뻝 +뻞|뻞|뻞 +뻟|뻟|뻟 +뻠|뻠|뻠 +뻡|뻡|뻡 +뻢|뻢|뻢 +뻣|뻣|뻣 +뻤|뻤|뻤 +뻥|뻥|뻥 +뻦|뻦|뻦 +뻧|뻧|뻧 +뻨|뻨|뻨 +뻩|뻩|뻩 +뻪|뻪|뻪 +뻫|뻫|뻫 +뻬|뻬|뻬 +뻭|뻭|뻭 +뻮|뻮|뻮 +뻯|뻯|뻯 +뻰|뻰|뻰 +뻱|뻱|뻱 +뻲|뻲|뻲 +뻳|뻳|뻳 +뻴|뻴|뻴 +뻵|뻵|뻵 +뻶|뻶|뻶 +뻷|뻷|뻷 +뻸|뻸|뻸 +뻹|뻹|뻹 +뻺|뻺|뻺 +뻻|뻻|뻻 +뻼|뻼|뻼 +뻽|뻽|뻽 +뻾|뻾|뻾 +뻿|뻿|뻿 +뼀|뼀|뼀 +뼁|뼁|뼁 +뼂|뼂|뼂 +뼃|뼃|뼃 +뼄|뼄|뼄 +뼅|뼅|뼅 +뼆|뼆|뼆 +뼇|뼇|뼇 +뼈|뼈|뼈 +뼉|뼉|뼉 +뼊|뼊|뼊 +뼋|뼋|뼋 +뼌|뼌|뼌 +뼍|뼍|뼍 +뼎|뼎|뼎 +뼏|뼏|뼏 +뼐|뼐|뼐 +뼑|뼑|뼑 +뼒|뼒|뼒 +뼓|뼓|뼓 +뼔|뼔|뼔 +뼕|뼕|뼕 +뼖|뼖|뼖 +뼗|뼗|뼗 +뼘|뼘|뼘 +뼙|뼙|뼙 +뼚|뼚|뼚 +뼛|뼛|뼛 +뼜|뼜|뼜 +뼝|뼝|뼝 +뼞|뼞|뼞 +뼟|뼟|뼟 +뼠|뼠|뼠 +뼡|뼡|뼡 +뼢|뼢|뼢 +뼣|뼣|뼣 +뼤|뼤|뼤 +뼥|뼥|뼥 +뼦|뼦|뼦 +뼧|뼧|뼧 +뼨|뼨|뼨 +뼩|뼩|뼩 +뼪|뼪|뼪 +뼫|뼫|뼫 +뼬|뼬|뼬 +뼭|뼭|뼭 +뼮|뼮|뼮 +뼯|뼯|뼯 +뼰|뼰|뼰 +뼱|뼱|뼱 +뼲|뼲|뼲 +뼳|뼳|뼳 +뼴|뼴|뼴 +뼵|뼵|뼵 +뼶|뼶|뼶 +뼷|뼷|뼷 +뼸|뼸|뼸 +뼹|뼹|뼹 +뼺|뼺|뼺 +뼻|뼻|뼻 +뼼|뼼|뼼 +뼽|뼽|뼽 +뼾|뼾|뼾 +뼿|뼿|뼿 +뽀|뽀|뽀 +뽁|뽁|뽁 +뽂|뽂|뽂 +뽃|뽃|뽃 +뽄|뽄|뽄 +뽅|뽅|뽅 +뽆|뽆|뽆 +뽇|뽇|뽇 +뽈|뽈|뽈 +뽉|뽉|뽉 +뽊|뽊|뽊 +뽋|뽋|뽋 +뽌|뽌|뽌 +뽍|뽍|뽍 +뽎|뽎|뽎 +뽏|뽏|뽏 +뽐|뽐|뽐 +뽑|뽑|뽑 +뽒|뽒|뽒 +뽓|뽓|뽓 +뽔|뽔|뽔 +뽕|뽕|뽕 +뽖|뽖|뽖 +뽗|뽗|뽗 +뽘|뽘|뽘 +뽙|뽙|뽙 +뽚|뽚|뽚 +뽛|뽛|뽛 +뽜|뽜|뽜 +뽝|뽝|뽝 +뽞|뽞|뽞 +뽟|뽟|뽟 +뽠|뽠|뽠 +뽡|뽡|뽡 +뽢|뽢|뽢 +뽣|뽣|뽣 +뽤|뽤|뽤 +뽥|뽥|뽥 +뽦|뽦|뽦 +뽧|뽧|뽧 +뽨|뽨|뽨 +뽩|뽩|뽩 +뽪|뽪|뽪 +뽫|뽫|뽫 +뽬|뽬|뽬 +뽭|뽭|뽭 +뽮|뽮|뽮 +뽯|뽯|뽯 +뽰|뽰|뽰 +뽱|뽱|뽱 +뽲|뽲|뽲 +뽳|뽳|뽳 +뽴|뽴|뽴 +뽵|뽵|뽵 +뽶|뽶|뽶 +뽷|뽷|뽷 +뽸|뽸|뽸 +뽹|뽹|뽹 +뽺|뽺|뽺 +뽻|뽻|뽻 +뽼|뽼|뽼 +뽽|뽽|뽽 +뽾|뽾|뽾 +뽿|뽿|뽿 +뾀|뾀|뾀 +뾁|뾁|뾁 +뾂|뾂|뾂 +뾃|뾃|뾃 +뾄|뾄|뾄 +뾅|뾅|뾅 +뾆|뾆|뾆 +뾇|뾇|뾇 +뾈|뾈|뾈 +뾉|뾉|뾉 +뾊|뾊|뾊 +뾋|뾋|뾋 +뾌|뾌|뾌 +뾍|뾍|뾍 +뾎|뾎|뾎 +뾏|뾏|뾏 +뾐|뾐|뾐 +뾑|뾑|뾑 +뾒|뾒|뾒 +뾓|뾓|뾓 +뾔|뾔|뾔 +뾕|뾕|뾕 +뾖|뾖|뾖 +뾗|뾗|뾗 +뾘|뾘|뾘 +뾙|뾙|뾙 +뾚|뾚|뾚 +뾛|뾛|뾛 +뾜|뾜|뾜 +뾝|뾝|뾝 +뾞|뾞|뾞 +뾟|뾟|뾟 +뾠|뾠|뾠 +뾡|뾡|뾡 +뾢|뾢|뾢 +뾣|뾣|뾣 +뾤|뾤|뾤 +뾥|뾥|뾥 +뾦|뾦|뾦 +뾧|뾧|뾧 +뾨|뾨|뾨 +뾩|뾩|뾩 +뾪|뾪|뾪 +뾫|뾫|뾫 +뾬|뾬|뾬 +뾭|뾭|뾭 +뾮|뾮|뾮 +뾯|뾯|뾯 +뾰|뾰|뾰 +뾱|뾱|뾱 +뾲|뾲|뾲 +뾳|뾳|뾳 +뾴|뾴|뾴 +뾵|뾵|뾵 +뾶|뾶|뾶 +뾷|뾷|뾷 +뾸|뾸|뾸 +뾹|뾹|뾹 +뾺|뾺|뾺 +뾻|뾻|뾻 +뾼|뾼|뾼 +뾽|뾽|뾽 +뾾|뾾|뾾 +뾿|뾿|뾿 +뿀|뿀|뿀 +뿁|뿁|뿁 +뿂|뿂|뿂 +뿃|뿃|뿃 +뿄|뿄|뿄 +뿅|뿅|뿅 +뿆|뿆|뿆 +뿇|뿇|뿇 +뿈|뿈|뿈 +뿉|뿉|뿉 +뿊|뿊|뿊 +뿋|뿋|뿋 +뿌|뿌|뿌 +뿍|뿍|뿍 +뿎|뿎|뿎 +뿏|뿏|뿏 +뿐|뿐|뿐 +뿑|뿑|뿑 +뿒|뿒|뿒 +뿓|뿓|뿓 +뿔|뿔|뿔 +뿕|뿕|뿕 +뿖|뿖|뿖 +뿗|뿗|뿗 +뿘|뿘|뿘 +뿙|뿙|뿙 +뿚|뿚|뿚 +뿛|뿛|뿛 +뿜|뿜|뿜 +뿝|뿝|뿝 +뿞|뿞|뿞 +뿟|뿟|뿟 +뿠|뿠|뿠 +뿡|뿡|뿡 +뿢|뿢|뿢 +뿣|뿣|뿣 +뿤|뿤|뿤 +뿥|뿥|뿥 +뿦|뿦|뿦 +뿧|뿧|뿧 +뿨|뿨|뿨 +뿩|뿩|뿩 +뿪|뿪|뿪 +뿫|뿫|뿫 +뿬|뿬|뿬 +뿭|뿭|뿭 +뿮|뿮|뿮 +뿯|뿯|뿯 +뿰|뿰|뿰 +뿱|뿱|뿱 +뿲|뿲|뿲 +뿳|뿳|뿳 +뿴|뿴|뿴 +뿵|뿵|뿵 +뿶|뿶|뿶 +뿷|뿷|뿷 +뿸|뿸|뿸 +뿹|뿹|뿹 +뿺|뿺|뿺 +뿻|뿻|뿻 +뿼|뿼|뿼 +뿽|뿽|뿽 +뿾|뿾|뿾 +뿿|뿿|뿿 +쀀|쀀|쀀 +쀁|쀁|쀁 +쀂|쀂|쀂 +쀃|쀃|쀃 +쀄|쀄|쀄 +쀅|쀅|쀅 +쀆|쀆|쀆 +쀇|쀇|쀇 +쀈|쀈|쀈 +쀉|쀉|쀉 +쀊|쀊|쀊 +쀋|쀋|쀋 +쀌|쀌|쀌 +쀍|쀍|쀍 +쀎|쀎|쀎 +쀏|쀏|쀏 +쀐|쀐|쀐 +쀑|쀑|쀑 +쀒|쀒|쀒 +쀓|쀓|쀓 +쀔|쀔|쀔 +쀕|쀕|쀕 +쀖|쀖|쀖 +쀗|쀗|쀗 +쀘|쀘|쀘 +쀙|쀙|쀙 +쀚|쀚|쀚 +쀛|쀛|쀛 +쀜|쀜|쀜 +쀝|쀝|쀝 +쀞|쀞|쀞 +쀟|쀟|쀟 +쀠|쀠|쀠 +쀡|쀡|쀡 +쀢|쀢|쀢 +쀣|쀣|쀣 +쀤|쀤|쀤 +쀥|쀥|쀥 +쀦|쀦|쀦 +쀧|쀧|쀧 +쀨|쀨|쀨 +쀩|쀩|쀩 +쀪|쀪|쀪 +쀫|쀫|쀫 +쀬|쀬|쀬 +쀭|쀭|쀭 +쀮|쀮|쀮 +쀯|쀯|쀯 +쀰|쀰|쀰 +쀱|쀱|쀱 +쀲|쀲|쀲 +쀳|쀳|쀳 +쀴|쀴|쀴 +쀵|쀵|쀵 +쀶|쀶|쀶 +쀷|쀷|쀷 +쀸|쀸|쀸 +쀹|쀹|쀹 +쀺|쀺|쀺 +쀻|쀻|쀻 +쀼|쀼|쀼 +쀽|쀽|쀽 +쀾|쀾|쀾 +쀿|쀿|쀿 +쁀|쁀|쁀 +쁁|쁁|쁁 +쁂|쁂|쁂 +쁃|쁃|쁃 +쁄|쁄|쁄 +쁅|쁅|쁅 +쁆|쁆|쁆 +쁇|쁇|쁇 +쁈|쁈|쁈 +쁉|쁉|쁉 +쁊|쁊|쁊 +쁋|쁋|쁋 +쁌|쁌|쁌 +쁍|쁍|쁍 +쁎|쁎|쁎 +쁏|쁏|쁏 +쁐|쁐|쁐 +쁑|쁑|쁑 +쁒|쁒|쁒 +쁓|쁓|쁓 +쁔|쁔|쁔 +쁕|쁕|쁕 +쁖|쁖|쁖 +쁗|쁗|쁗 +쁘|쁘|쁘 +쁙|쁙|쁙 +쁚|쁚|쁚 +쁛|쁛|쁛 +쁜|쁜|쁜 +쁝|쁝|쁝 +쁞|쁞|쁞 +쁟|쁟|쁟 +쁠|쁠|쁠 +쁡|쁡|쁡 +쁢|쁢|쁢 +쁣|쁣|쁣 +쁤|쁤|쁤 +쁥|쁥|쁥 +쁦|쁦|쁦 +쁧|쁧|쁧 +쁨|쁨|쁨 +쁩|쁩|쁩 +쁪|쁪|쁪 +쁫|쁫|쁫 +쁬|쁬|쁬 +쁭|쁭|쁭 +쁮|쁮|쁮 +쁯|쁯|쁯 +쁰|쁰|쁰 +쁱|쁱|쁱 +쁲|쁲|쁲 +쁳|쁳|쁳 +쁴|쁴|쁴 +쁵|쁵|쁵 +쁶|쁶|쁶 +쁷|쁷|쁷 +쁸|쁸|쁸 +쁹|쁹|쁹 +쁺|쁺|쁺 +쁻|쁻|쁻 +쁼|쁼|쁼 +쁽|쁽|쁽 +쁾|쁾|쁾 +쁿|쁿|쁿 +삀|삀|삀 +삁|삁|삁 +삂|삂|삂 +삃|삃|삃 +삄|삄|삄 +삅|삅|삅 +삆|삆|삆 +삇|삇|삇 +삈|삈|삈 +삉|삉|삉 +삊|삊|삊 +삋|삋|삋 +삌|삌|삌 +삍|삍|삍 +삎|삎|삎 +삏|삏|삏 +삐|삐|삐 +삑|삑|삑 +삒|삒|삒 +삓|삓|삓 +삔|삔|삔 +삕|삕|삕 +삖|삖|삖 +삗|삗|삗 +삘|삘|삘 +삙|삙|삙 +삚|삚|삚 +삛|삛|삛 +삜|삜|삜 +삝|삝|삝 +삞|삞|삞 +삟|삟|삟 +삠|삠|삠 +삡|삡|삡 +삢|삢|삢 +삣|삣|삣 +삤|삤|삤 +삥|삥|삥 +삦|삦|삦 +삧|삧|삧 +삨|삨|삨 +삩|삩|삩 +삪|삪|삪 +삫|삫|삫 +사|사|사 +삭|삭|삭 +삮|삮|삮 +삯|삯|삯 +산|산|산 +삱|삱|삱 +삲|삲|삲 +삳|삳|삳 +살|살|살 +삵|삵|삵 +삶|삶|삶 +삷|삷|삷 +삸|삸|삸 +삹|삹|삹 +삺|삺|삺 +삻|삻|삻 +삼|삼|삼 +삽|삽|삽 +삾|삾|삾 +삿|삿|삿 +샀|샀|샀 +상|상|상 +샂|샂|샂 +샃|샃|샃 +샄|샄|샄 +샅|샅|샅 +샆|샆|샆 +샇|샇|샇 +새|새|새 +색|색|색 +샊|샊|샊 +샋|샋|샋 +샌|샌|샌 +샍|샍|샍 +샎|샎|샎 +샏|샏|샏 +샐|샐|샐 +샑|샑|샑 +샒|샒|샒 +샓|샓|샓 +샔|샔|샔 +샕|샕|샕 +샖|샖|샖 +샗|샗|샗 +샘|샘|샘 +샙|샙|샙 +샚|샚|샚 +샛|샛|샛 +샜|샜|샜 +생|생|생 +샞|샞|샞 +샟|샟|샟 +샠|샠|샠 +샡|샡|샡 +샢|샢|샢 +샣|샣|샣 +샤|샤|샤 +샥|샥|샥 +샦|샦|샦 +샧|샧|샧 +샨|샨|샨 +샩|샩|샩 +샪|샪|샪 +샫|샫|샫 +샬|샬|샬 +샭|샭|샭 +샮|샮|샮 +샯|샯|샯 +샰|샰|샰 +샱|샱|샱 +샲|샲|샲 +샳|샳|샳 +샴|샴|샴 +샵|샵|샵 +샶|샶|샶 +샷|샷|샷 +샸|샸|샸 +샹|샹|샹 +샺|샺|샺 +샻|샻|샻 +샼|샼|샼 +샽|샽|샽 +샾|샾|샾 +샿|샿|샿 +섀|섀|섀 +섁|섁|섁 +섂|섂|섂 +섃|섃|섃 +섄|섄|섄 +섅|섅|섅 +섆|섆|섆 +섇|섇|섇 +섈|섈|섈 +섉|섉|섉 +섊|섊|섊 +섋|섋|섋 +섌|섌|섌 +섍|섍|섍 +섎|섎|섎 +섏|섏|섏 +섐|섐|섐 +섑|섑|섑 +섒|섒|섒 +섓|섓|섓 +섔|섔|섔 +섕|섕|섕 +섖|섖|섖 +섗|섗|섗 +섘|섘|섘 +섙|섙|섙 +섚|섚|섚 +섛|섛|섛 +서|서|서 +석|석|석 +섞|섞|섞 +섟|섟|섟 +선|선|선 +섡|섡|섡 +섢|섢|섢 +섣|섣|섣 +설|설|설 +섥|섥|섥 +섦|섦|섦 +섧|섧|섧 +섨|섨|섨 +섩|섩|섩 +섪|섪|섪 +섫|섫|섫 +섬|섬|섬 +섭|섭|섭 +섮|섮|섮 +섯|섯|섯 +섰|섰|섰 +성|성|성 +섲|섲|섲 +섳|섳|섳 +섴|섴|섴 +섵|섵|섵 +섶|섶|섶 +섷|섷|섷 +세|세|세 +섹|섹|섹 +섺|섺|섺 +섻|섻|섻 +센|센|센 +섽|섽|섽 +섾|섾|섾 +섿|섿|섿 +셀|셀|셀 +셁|셁|셁 +셂|셂|셂 +셃|셃|셃 +셄|셄|셄 +셅|셅|셅 +셆|셆|셆 +셇|셇|셇 +셈|셈|셈 +셉|셉|셉 +셊|셊|셊 +셋|셋|셋 +셌|셌|셌 +셍|셍|셍 +셎|셎|셎 +셏|셏|셏 +셐|셐|셐 +셑|셑|셑 +셒|셒|셒 +셓|셓|셓 +셔|셔|셔 +셕|셕|셕 +셖|셖|셖 +셗|셗|셗 +션|션|션 +셙|셙|셙 +셚|셚|셚 +셛|셛|셛 +셜|셜|셜 +셝|셝|셝 +셞|셞|셞 +셟|셟|셟 +셠|셠|셠 +셡|셡|셡 +셢|셢|셢 +셣|셣|셣 +셤|셤|셤 +셥|셥|셥 +셦|셦|셦 +셧|셧|셧 +셨|셨|셨 +셩|셩|셩 +셪|셪|셪 +셫|셫|셫 +셬|셬|셬 +셭|셭|셭 +셮|셮|셮 +셯|셯|셯 +셰|셰|셰 +셱|셱|셱 +셲|셲|셲 +셳|셳|셳 +셴|셴|셴 +셵|셵|셵 +셶|셶|셶 +셷|셷|셷 +셸|셸|셸 +셹|셹|셹 +셺|셺|셺 +셻|셻|셻 +셼|셼|셼 +셽|셽|셽 +셾|셾|셾 +셿|셿|셿 +솀|솀|솀 +솁|솁|솁 +솂|솂|솂 +솃|솃|솃 +솄|솄|솄 +솅|솅|솅 +솆|솆|솆 +솇|솇|솇 +솈|솈|솈 +솉|솉|솉 +솊|솊|솊 +솋|솋|솋 +소|소|소 +속|속|속 +솎|솎|솎 +솏|솏|솏 +손|손|손 +솑|솑|솑 +솒|솒|솒 +솓|솓|솓 +솔|솔|솔 +솕|솕|솕 +솖|솖|솖 +솗|솗|솗 +솘|솘|솘 +솙|솙|솙 +솚|솚|솚 +솛|솛|솛 +솜|솜|솜 +솝|솝|솝 +솞|솞|솞 +솟|솟|솟 +솠|솠|솠 +송|송|송 +솢|솢|솢 +솣|솣|솣 +솤|솤|솤 +솥|솥|솥 +솦|솦|솦 +솧|솧|솧 +솨|솨|솨 +솩|솩|솩 +솪|솪|솪 +솫|솫|솫 +솬|솬|솬 +솭|솭|솭 +솮|솮|솮 +솯|솯|솯 +솰|솰|솰 +솱|솱|솱 +솲|솲|솲 +솳|솳|솳 +솴|솴|솴 +솵|솵|솵 +솶|솶|솶 +솷|솷|솷 +솸|솸|솸 +솹|솹|솹 +솺|솺|솺 +솻|솻|솻 +솼|솼|솼 +솽|솽|솽 +솾|솾|솾 +솿|솿|솿 +쇀|쇀|쇀 +쇁|쇁|쇁 +쇂|쇂|쇂 +쇃|쇃|쇃 +쇄|쇄|쇄 +쇅|쇅|쇅 +쇆|쇆|쇆 +쇇|쇇|쇇 +쇈|쇈|쇈 +쇉|쇉|쇉 +쇊|쇊|쇊 +쇋|쇋|쇋 +쇌|쇌|쇌 +쇍|쇍|쇍 +쇎|쇎|쇎 +쇏|쇏|쇏 +쇐|쇐|쇐 +쇑|쇑|쇑 +쇒|쇒|쇒 +쇓|쇓|쇓 +쇔|쇔|쇔 +쇕|쇕|쇕 +쇖|쇖|쇖 +쇗|쇗|쇗 +쇘|쇘|쇘 +쇙|쇙|쇙 +쇚|쇚|쇚 +쇛|쇛|쇛 +쇜|쇜|쇜 +쇝|쇝|쇝 +쇞|쇞|쇞 +쇟|쇟|쇟 +쇠|쇠|쇠 +쇡|쇡|쇡 +쇢|쇢|쇢 +쇣|쇣|쇣 +쇤|쇤|쇤 +쇥|쇥|쇥 +쇦|쇦|쇦 +쇧|쇧|쇧 +쇨|쇨|쇨 +쇩|쇩|쇩 +쇪|쇪|쇪 +쇫|쇫|쇫 +쇬|쇬|쇬 +쇭|쇭|쇭 +쇮|쇮|쇮 +쇯|쇯|쇯 +쇰|쇰|쇰 +쇱|쇱|쇱 +쇲|쇲|쇲 +쇳|쇳|쇳 +쇴|쇴|쇴 +쇵|쇵|쇵 +쇶|쇶|쇶 +쇷|쇷|쇷 +쇸|쇸|쇸 +쇹|쇹|쇹 +쇺|쇺|쇺 +쇻|쇻|쇻 +쇼|쇼|쇼 +쇽|쇽|쇽 +쇾|쇾|쇾 +쇿|쇿|쇿 +숀|숀|숀 +숁|숁|숁 +숂|숂|숂 +숃|숃|숃 +숄|숄|숄 +숅|숅|숅 +숆|숆|숆 +숇|숇|숇 +숈|숈|숈 +숉|숉|숉 +숊|숊|숊 +숋|숋|숋 +숌|숌|숌 +숍|숍|숍 +숎|숎|숎 +숏|숏|숏 +숐|숐|숐 +숑|숑|숑 +숒|숒|숒 +숓|숓|숓 +숔|숔|숔 +숕|숕|숕 +숖|숖|숖 +숗|숗|숗 +수|수|수 +숙|숙|숙 +숚|숚|숚 +숛|숛|숛 +순|순|순 +숝|숝|숝 +숞|숞|숞 +숟|숟|숟 +술|술|술 +숡|숡|숡 +숢|숢|숢 +숣|숣|숣 +숤|숤|숤 +숥|숥|숥 +숦|숦|숦 +숧|숧|숧 +숨|숨|숨 +숩|숩|숩 +숪|숪|숪 +숫|숫|숫 +숬|숬|숬 +숭|숭|숭 +숮|숮|숮 +숯|숯|숯 +숰|숰|숰 +숱|숱|숱 +숲|숲|숲 +숳|숳|숳 +숴|숴|숴 +숵|숵|숵 +숶|숶|숶 +숷|숷|숷 +숸|숸|숸 +숹|숹|숹 +숺|숺|숺 +숻|숻|숻 +숼|숼|숼 +숽|숽|숽 +숾|숾|숾 +숿|숿|숿 +쉀|쉀|쉀 +쉁|쉁|쉁 +쉂|쉂|쉂 +쉃|쉃|쉃 +쉄|쉄|쉄 +쉅|쉅|쉅 +쉆|쉆|쉆 +쉇|쉇|쉇 +쉈|쉈|쉈 +쉉|쉉|쉉 +쉊|쉊|쉊 +쉋|쉋|쉋 +쉌|쉌|쉌 +쉍|쉍|쉍 +쉎|쉎|쉎 +쉏|쉏|쉏 +쉐|쉐|쉐 +쉑|쉑|쉑 +쉒|쉒|쉒 +쉓|쉓|쉓 +쉔|쉔|쉔 +쉕|쉕|쉕 +쉖|쉖|쉖 +쉗|쉗|쉗 +쉘|쉘|쉘 +쉙|쉙|쉙 +쉚|쉚|쉚 +쉛|쉛|쉛 +쉜|쉜|쉜 +쉝|쉝|쉝 +쉞|쉞|쉞 +쉟|쉟|쉟 +쉠|쉠|쉠 +쉡|쉡|쉡 +쉢|쉢|쉢 +쉣|쉣|쉣 +쉤|쉤|쉤 +쉥|쉥|쉥 +쉦|쉦|쉦 +쉧|쉧|쉧 +쉨|쉨|쉨 +쉩|쉩|쉩 +쉪|쉪|쉪 +쉫|쉫|쉫 +쉬|쉬|쉬 +쉭|쉭|쉭 +쉮|쉮|쉮 +쉯|쉯|쉯 +쉰|쉰|쉰 +쉱|쉱|쉱 +쉲|쉲|쉲 +쉳|쉳|쉳 +쉴|쉴|쉴 +쉵|쉵|쉵 +쉶|쉶|쉶 +쉷|쉷|쉷 +쉸|쉸|쉸 +쉹|쉹|쉹 +쉺|쉺|쉺 +쉻|쉻|쉻 +쉼|쉼|쉼 +쉽|쉽|쉽 +쉾|쉾|쉾 +쉿|쉿|쉿 +슀|슀|슀 +슁|슁|슁 +슂|슂|슂 +슃|슃|슃 +슄|슄|슄 +슅|슅|슅 +슆|슆|슆 +슇|슇|슇 +슈|슈|슈 +슉|슉|슉 +슊|슊|슊 +슋|슋|슋 +슌|슌|슌 +슍|슍|슍 +슎|슎|슎 +슏|슏|슏 +슐|슐|슐 +슑|슑|슑 +슒|슒|슒 +슓|슓|슓 +슔|슔|슔 +슕|슕|슕 +슖|슖|슖 +슗|슗|슗 +슘|슘|슘 +슙|슙|슙 +슚|슚|슚 +슛|슛|슛 +슜|슜|슜 +슝|슝|슝 +슞|슞|슞 +슟|슟|슟 +슠|슠|슠 +슡|슡|슡 +슢|슢|슢 +슣|슣|슣 +스|스|스 +슥|슥|슥 +슦|슦|슦 +슧|슧|슧 +슨|슨|슨 +슩|슩|슩 +슪|슪|슪 +슫|슫|슫 +슬|슬|슬 +슭|슭|슭 +슮|슮|슮 +슯|슯|슯 +슰|슰|슰 +슱|슱|슱 +슲|슲|슲 +슳|슳|슳 +슴|슴|슴 +습|습|습 +슶|슶|슶 +슷|슷|슷 +슸|슸|슸 +승|승|승 +슺|슺|슺 +슻|슻|슻 +슼|슼|슼 +슽|슽|슽 +슾|슾|슾 +슿|슿|슿 +싀|싀|싀 +싁|싁|싁 +싂|싂|싂 +싃|싃|싃 +싄|싄|싄 +싅|싅|싅 +싆|싆|싆 +싇|싇|싇 +싈|싈|싈 +싉|싉|싉 +싊|싊|싊 +싋|싋|싋 +싌|싌|싌 +싍|싍|싍 +싎|싎|싎 +싏|싏|싏 +싐|싐|싐 +싑|싑|싑 +싒|싒|싒 +싓|싓|싓 +싔|싔|싔 +싕|싕|싕 +싖|싖|싖 +싗|싗|싗 +싘|싘|싘 +싙|싙|싙 +싚|싚|싚 +싛|싛|싛 +시|시|시 +식|식|식 +싞|싞|싞 +싟|싟|싟 +신|신|신 +싡|싡|싡 +싢|싢|싢 +싣|싣|싣 +실|실|실 +싥|싥|싥 +싦|싦|싦 +싧|싧|싧 +싨|싨|싨 +싩|싩|싩 +싪|싪|싪 +싫|싫|싫 +심|심|심 +십|십|십 +싮|싮|싮 +싯|싯|싯 +싰|싰|싰 +싱|싱|싱 +싲|싲|싲 +싳|싳|싳 +싴|싴|싴 +싵|싵|싵 +싶|싶|싶 +싷|싷|싷 +싸|싸|싸 +싹|싹|싹 +싺|싺|싺 +싻|싻|싻 +싼|싼|싼 +싽|싽|싽 +싾|싾|싾 +싿|싿|싿 +쌀|쌀|쌀 +쌁|쌁|쌁 +쌂|쌂|쌂 +쌃|쌃|쌃 +쌄|쌄|쌄 +쌅|쌅|쌅 +쌆|쌆|쌆 +쌇|쌇|쌇 +쌈|쌈|쌈 +쌉|쌉|쌉 +쌊|쌊|쌊 +쌋|쌋|쌋 +쌌|쌌|쌌 +쌍|쌍|쌍 +쌎|쌎|쌎 +쌏|쌏|쌏 +쌐|쌐|쌐 +쌑|쌑|쌑 +쌒|쌒|쌒 +쌓|쌓|쌓 +쌔|쌔|쌔 +쌕|쌕|쌕 +쌖|쌖|쌖 +쌗|쌗|쌗 +쌘|쌘|쌘 +쌙|쌙|쌙 +쌚|쌚|쌚 +쌛|쌛|쌛 +쌜|쌜|쌜 +쌝|쌝|쌝 +쌞|쌞|쌞 +쌟|쌟|쌟 +쌠|쌠|쌠 +쌡|쌡|쌡 +쌢|쌢|쌢 +쌣|쌣|쌣 +쌤|쌤|쌤 +쌥|쌥|쌥 +쌦|쌦|쌦 +쌧|쌧|쌧 +쌨|쌨|쌨 +쌩|쌩|쌩 +쌪|쌪|쌪 +쌫|쌫|쌫 +쌬|쌬|쌬 +쌭|쌭|쌭 +쌮|쌮|쌮 +쌯|쌯|쌯 +쌰|쌰|쌰 +쌱|쌱|쌱 +쌲|쌲|쌲 +쌳|쌳|쌳 +쌴|쌴|쌴 +쌵|쌵|쌵 +쌶|쌶|쌶 +쌷|쌷|쌷 +쌸|쌸|쌸 +쌹|쌹|쌹 +쌺|쌺|쌺 +쌻|쌻|쌻 +쌼|쌼|쌼 +쌽|쌽|쌽 +쌾|쌾|쌾 +쌿|쌿|쌿 +썀|썀|썀 +썁|썁|썁 +썂|썂|썂 +썃|썃|썃 +썄|썄|썄 +썅|썅|썅 +썆|썆|썆 +썇|썇|썇 +썈|썈|썈 +썉|썉|썉 +썊|썊|썊 +썋|썋|썋 +썌|썌|썌 +썍|썍|썍 +썎|썎|썎 +썏|썏|썏 +썐|썐|썐 +썑|썑|썑 +썒|썒|썒 +썓|썓|썓 +썔|썔|썔 +썕|썕|썕 +썖|썖|썖 +썗|썗|썗 +썘|썘|썘 +썙|썙|썙 +썚|썚|썚 +썛|썛|썛 +썜|썜|썜 +썝|썝|썝 +썞|썞|썞 +썟|썟|썟 +썠|썠|썠 +썡|썡|썡 +썢|썢|썢 +썣|썣|썣 +썤|썤|썤 +썥|썥|썥 +썦|썦|썦 +썧|썧|썧 +써|써|써 +썩|썩|썩 +썪|썪|썪 +썫|썫|썫 +썬|썬|썬 +썭|썭|썭 +썮|썮|썮 +썯|썯|썯 +썰|썰|썰 +썱|썱|썱 +썲|썲|썲 +썳|썳|썳 +썴|썴|썴 +썵|썵|썵 +썶|썶|썶 +썷|썷|썷 +썸|썸|썸 +썹|썹|썹 +썺|썺|썺 +썻|썻|썻 +썼|썼|썼 +썽|썽|썽 +썾|썾|썾 +썿|썿|썿 +쎀|쎀|쎀 +쎁|쎁|쎁 +쎂|쎂|쎂 +쎃|쎃|쎃 +쎄|쎄|쎄 +쎅|쎅|쎅 +쎆|쎆|쎆 +쎇|쎇|쎇 +쎈|쎈|쎈 +쎉|쎉|쎉 +쎊|쎊|쎊 +쎋|쎋|쎋 +쎌|쎌|쎌 +쎍|쎍|쎍 +쎎|쎎|쎎 +쎏|쎏|쎏 +쎐|쎐|쎐 +쎑|쎑|쎑 +쎒|쎒|쎒 +쎓|쎓|쎓 +쎔|쎔|쎔 +쎕|쎕|쎕 +쎖|쎖|쎖 +쎗|쎗|쎗 +쎘|쎘|쎘 +쎙|쎙|쎙 +쎚|쎚|쎚 +쎛|쎛|쎛 +쎜|쎜|쎜 +쎝|쎝|쎝 +쎞|쎞|쎞 +쎟|쎟|쎟 +쎠|쎠|쎠 +쎡|쎡|쎡 +쎢|쎢|쎢 +쎣|쎣|쎣 +쎤|쎤|쎤 +쎥|쎥|쎥 +쎦|쎦|쎦 +쎧|쎧|쎧 +쎨|쎨|쎨 +쎩|쎩|쎩 +쎪|쎪|쎪 +쎫|쎫|쎫 +쎬|쎬|쎬 +쎭|쎭|쎭 +쎮|쎮|쎮 +쎯|쎯|쎯 +쎰|쎰|쎰 +쎱|쎱|쎱 +쎲|쎲|쎲 +쎳|쎳|쎳 +쎴|쎴|쎴 +쎵|쎵|쎵 +쎶|쎶|쎶 +쎷|쎷|쎷 +쎸|쎸|쎸 +쎹|쎹|쎹 +쎺|쎺|쎺 +쎻|쎻|쎻 +쎼|쎼|쎼 +쎽|쎽|쎽 +쎾|쎾|쎾 +쎿|쎿|쎿 +쏀|쏀|쏀 +쏁|쏁|쏁 +쏂|쏂|쏂 +쏃|쏃|쏃 +쏄|쏄|쏄 +쏅|쏅|쏅 +쏆|쏆|쏆 +쏇|쏇|쏇 +쏈|쏈|쏈 +쏉|쏉|쏉 +쏊|쏊|쏊 +쏋|쏋|쏋 +쏌|쏌|쏌 +쏍|쏍|쏍 +쏎|쏎|쏎 +쏏|쏏|쏏 +쏐|쏐|쏐 +쏑|쏑|쏑 +쏒|쏒|쏒 +쏓|쏓|쏓 +쏔|쏔|쏔 +쏕|쏕|쏕 +쏖|쏖|쏖 +쏗|쏗|쏗 +쏘|쏘|쏘 +쏙|쏙|쏙 +쏚|쏚|쏚 +쏛|쏛|쏛 +쏜|쏜|쏜 +쏝|쏝|쏝 +쏞|쏞|쏞 +쏟|쏟|쏟 +쏠|쏠|쏠 +쏡|쏡|쏡 +쏢|쏢|쏢 +쏣|쏣|쏣 +쏤|쏤|쏤 +쏥|쏥|쏥 +쏦|쏦|쏦 +쏧|쏧|쏧 +쏨|쏨|쏨 +쏩|쏩|쏩 +쏪|쏪|쏪 +쏫|쏫|쏫 +쏬|쏬|쏬 +쏭|쏭|쏭 +쏮|쏮|쏮 +쏯|쏯|쏯 +쏰|쏰|쏰 +쏱|쏱|쏱 +쏲|쏲|쏲 +쏳|쏳|쏳 +쏴|쏴|쏴 +쏵|쏵|쏵 +쏶|쏶|쏶 +쏷|쏷|쏷 +쏸|쏸|쏸 +쏹|쏹|쏹 +쏺|쏺|쏺 +쏻|쏻|쏻 +쏼|쏼|쏼 +쏽|쏽|쏽 +쏾|쏾|쏾 +쏿|쏿|쏿 +쐀|쐀|쐀 +쐁|쐁|쐁 +쐂|쐂|쐂 +쐃|쐃|쐃 +쐄|쐄|쐄 +쐅|쐅|쐅 +쐆|쐆|쐆 +쐇|쐇|쐇 +쐈|쐈|쐈 +쐉|쐉|쐉 +쐊|쐊|쐊 +쐋|쐋|쐋 +쐌|쐌|쐌 +쐍|쐍|쐍 +쐎|쐎|쐎 +쐏|쐏|쐏 +쐐|쐐|쐐 +쐑|쐑|쐑 +쐒|쐒|쐒 +쐓|쐓|쐓 +쐔|쐔|쐔 +쐕|쐕|쐕 +쐖|쐖|쐖 +쐗|쐗|쐗 +쐘|쐘|쐘 +쐙|쐙|쐙 +쐚|쐚|쐚 +쐛|쐛|쐛 +쐜|쐜|쐜 +쐝|쐝|쐝 +쐞|쐞|쐞 +쐟|쐟|쐟 +쐠|쐠|쐠 +쐡|쐡|쐡 +쐢|쐢|쐢 +쐣|쐣|쐣 +쐤|쐤|쐤 +쐥|쐥|쐥 +쐦|쐦|쐦 +쐧|쐧|쐧 +쐨|쐨|쐨 +쐩|쐩|쐩 +쐪|쐪|쐪 +쐫|쐫|쐫 +쐬|쐬|쐬 +쐭|쐭|쐭 +쐮|쐮|쐮 +쐯|쐯|쐯 +쐰|쐰|쐰 +쐱|쐱|쐱 +쐲|쐲|쐲 +쐳|쐳|쐳 +쐴|쐴|쐴 +쐵|쐵|쐵 +쐶|쐶|쐶 +쐷|쐷|쐷 +쐸|쐸|쐸 +쐹|쐹|쐹 +쐺|쐺|쐺 +쐻|쐻|쐻 +쐼|쐼|쐼 +쐽|쐽|쐽 +쐾|쐾|쐾 +쐿|쐿|쐿 +쑀|쑀|쑀 +쑁|쑁|쑁 +쑂|쑂|쑂 +쑃|쑃|쑃 +쑄|쑄|쑄 +쑅|쑅|쑅 +쑆|쑆|쑆 +쑇|쑇|쑇 +쑈|쑈|쑈 +쑉|쑉|쑉 +쑊|쑊|쑊 +쑋|쑋|쑋 +쑌|쑌|쑌 +쑍|쑍|쑍 +쑎|쑎|쑎 +쑏|쑏|쑏 +쑐|쑐|쑐 +쑑|쑑|쑑 +쑒|쑒|쑒 +쑓|쑓|쑓 +쑔|쑔|쑔 +쑕|쑕|쑕 +쑖|쑖|쑖 +쑗|쑗|쑗 +쑘|쑘|쑘 +쑙|쑙|쑙 +쑚|쑚|쑚 +쑛|쑛|쑛 +쑜|쑜|쑜 +쑝|쑝|쑝 +쑞|쑞|쑞 +쑟|쑟|쑟 +쑠|쑠|쑠 +쑡|쑡|쑡 +쑢|쑢|쑢 +쑣|쑣|쑣 +쑤|쑤|쑤 +쑥|쑥|쑥 +쑦|쑦|쑦 +쑧|쑧|쑧 +쑨|쑨|쑨 +쑩|쑩|쑩 +쑪|쑪|쑪 +쑫|쑫|쑫 +쑬|쑬|쑬 +쑭|쑭|쑭 +쑮|쑮|쑮 +쑯|쑯|쑯 +쑰|쑰|쑰 +쑱|쑱|쑱 +쑲|쑲|쑲 +쑳|쑳|쑳 +쑴|쑴|쑴 +쑵|쑵|쑵 +쑶|쑶|쑶 +쑷|쑷|쑷 +쑸|쑸|쑸 +쑹|쑹|쑹 +쑺|쑺|쑺 +쑻|쑻|쑻 +쑼|쑼|쑼 +쑽|쑽|쑽 +쑾|쑾|쑾 +쑿|쑿|쑿 +쒀|쒀|쒀 +쒁|쒁|쒁 +쒂|쒂|쒂 +쒃|쒃|쒃 +쒄|쒄|쒄 +쒅|쒅|쒅 +쒆|쒆|쒆 +쒇|쒇|쒇 +쒈|쒈|쒈 +쒉|쒉|쒉 +쒊|쒊|쒊 +쒋|쒋|쒋 +쒌|쒌|쒌 +쒍|쒍|쒍 +쒎|쒎|쒎 +쒏|쒏|쒏 +쒐|쒐|쒐 +쒑|쒑|쒑 +쒒|쒒|쒒 +쒓|쒓|쒓 +쒔|쒔|쒔 +쒕|쒕|쒕 +쒖|쒖|쒖 +쒗|쒗|쒗 +쒘|쒘|쒘 +쒙|쒙|쒙 +쒚|쒚|쒚 +쒛|쒛|쒛 +쒜|쒜|쒜 +쒝|쒝|쒝 +쒞|쒞|쒞 +쒟|쒟|쒟 +쒠|쒠|쒠 +쒡|쒡|쒡 +쒢|쒢|쒢 +쒣|쒣|쒣 +쒤|쒤|쒤 +쒥|쒥|쒥 +쒦|쒦|쒦 +쒧|쒧|쒧 +쒨|쒨|쒨 +쒩|쒩|쒩 +쒪|쒪|쒪 +쒫|쒫|쒫 +쒬|쒬|쒬 +쒭|쒭|쒭 +쒮|쒮|쒮 +쒯|쒯|쒯 +쒰|쒰|쒰 +쒱|쒱|쒱 +쒲|쒲|쒲 +쒳|쒳|쒳 +쒴|쒴|쒴 +쒵|쒵|쒵 +쒶|쒶|쒶 +쒷|쒷|쒷 +쒸|쒸|쒸 +쒹|쒹|쒹 +쒺|쒺|쒺 +쒻|쒻|쒻 +쒼|쒼|쒼 +쒽|쒽|쒽 +쒾|쒾|쒾 +쒿|쒿|쒿 +쓀|쓀|쓀 +쓁|쓁|쓁 +쓂|쓂|쓂 +쓃|쓃|쓃 +쓄|쓄|쓄 +쓅|쓅|쓅 +쓆|쓆|쓆 +쓇|쓇|쓇 +쓈|쓈|쓈 +쓉|쓉|쓉 +쓊|쓊|쓊 +쓋|쓋|쓋 +쓌|쓌|쓌 +쓍|쓍|쓍 +쓎|쓎|쓎 +쓏|쓏|쓏 +쓐|쓐|쓐 +쓑|쓑|쓑 +쓒|쓒|쓒 +쓓|쓓|쓓 +쓔|쓔|쓔 +쓕|쓕|쓕 +쓖|쓖|쓖 +쓗|쓗|쓗 +쓘|쓘|쓘 +쓙|쓙|쓙 +쓚|쓚|쓚 +쓛|쓛|쓛 +쓜|쓜|쓜 +쓝|쓝|쓝 +쓞|쓞|쓞 +쓟|쓟|쓟 +쓠|쓠|쓠 +쓡|쓡|쓡 +쓢|쓢|쓢 +쓣|쓣|쓣 +쓤|쓤|쓤 +쓥|쓥|쓥 +쓦|쓦|쓦 +쓧|쓧|쓧 +쓨|쓨|쓨 +쓩|쓩|쓩 +쓪|쓪|쓪 +쓫|쓫|쓫 +쓬|쓬|쓬 +쓭|쓭|쓭 +쓮|쓮|쓮 +쓯|쓯|쓯 +쓰|쓰|쓰 +쓱|쓱|쓱 +쓲|쓲|쓲 +쓳|쓳|쓳 +쓴|쓴|쓴 +쓵|쓵|쓵 +쓶|쓶|쓶 +쓷|쓷|쓷 +쓸|쓸|쓸 +쓹|쓹|쓹 +쓺|쓺|쓺 +쓻|쓻|쓻 +쓼|쓼|쓼 +쓽|쓽|쓽 +쓾|쓾|쓾 +쓿|쓿|쓿 +씀|씀|씀 +씁|씁|씁 +씂|씂|씂 +씃|씃|씃 +씄|씄|씄 +씅|씅|씅 +씆|씆|씆 +씇|씇|씇 +씈|씈|씈 +씉|씉|씉 +씊|씊|씊 +씋|씋|씋 +씌|씌|씌 +씍|씍|씍 +씎|씎|씎 +씏|씏|씏 +씐|씐|씐 +씑|씑|씑 +씒|씒|씒 +씓|씓|씓 +씔|씔|씔 +씕|씕|씕 +씖|씖|씖 +씗|씗|씗 +씘|씘|씘 +씙|씙|씙 +씚|씚|씚 +씛|씛|씛 +씜|씜|씜 +씝|씝|씝 +씞|씞|씞 +씟|씟|씟 +씠|씠|씠 +씡|씡|씡 +씢|씢|씢 +씣|씣|씣 +씤|씤|씤 +씥|씥|씥 +씦|씦|씦 +씧|씧|씧 +씨|씨|씨 +씩|씩|씩 +씪|씪|씪 +씫|씫|씫 +씬|씬|씬 +씭|씭|씭 +씮|씮|씮 +씯|씯|씯 +씰|씰|씰 +씱|씱|씱 +씲|씲|씲 +씳|씳|씳 +씴|씴|씴 +씵|씵|씵 +씶|씶|씶 +씷|씷|씷 +씸|씸|씸 +씹|씹|씹 +씺|씺|씺 +씻|씻|씻 +씼|씼|씼 +씽|씽|씽 +씾|씾|씾 +씿|씿|씿 +앀|앀|앀 +앁|앁|앁 +앂|앂|앂 +앃|앃|앃 +아|아|아 +악|악|악 +앆|앆|앆 +앇|앇|앇 +안|안|안 +앉|앉|앉 +않|않|않 +앋|앋|앋 +알|알|알 +앍|앍|앍 +앎|앎|앎 +앏|앏|앏 +앐|앐|앐 +앑|앑|앑 +앒|앒|앒 +앓|앓|앓 +암|암|암 +압|압|압 +앖|앖|앖 +앗|앗|앗 +았|았|았 +앙|앙|앙 +앚|앚|앚 +앛|앛|앛 +앜|앜|앜 +앝|앝|앝 +앞|앞|앞 +앟|앟|앟 +애|애|애 +액|액|액 +앢|앢|앢 +앣|앣|앣 +앤|앤|앤 +앥|앥|앥 +앦|앦|앦 +앧|앧|앧 +앨|앨|앨 +앩|앩|앩 +앪|앪|앪 +앫|앫|앫 +앬|앬|앬 +앭|앭|앭 +앮|앮|앮 +앯|앯|앯 +앰|앰|앰 +앱|앱|앱 +앲|앲|앲 +앳|앳|앳 +앴|앴|앴 +앵|앵|앵 +앶|앶|앶 +앷|앷|앷 +앸|앸|앸 +앹|앹|앹 +앺|앺|앺 +앻|앻|앻 +야|야|야 +약|약|약 +앾|앾|앾 +앿|앿|앿 +얀|얀|얀 +얁|얁|얁 +얂|얂|얂 +얃|얃|얃 +얄|얄|얄 +얅|얅|얅 +얆|얆|얆 +얇|얇|얇 +얈|얈|얈 +얉|얉|얉 +얊|얊|얊 +얋|얋|얋 +얌|얌|얌 +얍|얍|얍 +얎|얎|얎 +얏|얏|얏 +얐|얐|얐 +양|양|양 +얒|얒|얒 +얓|얓|얓 +얔|얔|얔 +얕|얕|얕 +얖|얖|얖 +얗|얗|얗 +얘|얘|얘 +얙|얙|얙 +얚|얚|얚 +얛|얛|얛 +얜|얜|얜 +얝|얝|얝 +얞|얞|얞 +얟|얟|얟 +얠|얠|얠 +얡|얡|얡 +얢|얢|얢 +얣|얣|얣 +얤|얤|얤 +얥|얥|얥 +얦|얦|얦 +얧|얧|얧 +얨|얨|얨 +얩|얩|얩 +얪|얪|얪 +얫|얫|얫 +얬|얬|얬 +얭|얭|얭 +얮|얮|얮 +얯|얯|얯 +얰|얰|얰 +얱|얱|얱 +얲|얲|얲 +얳|얳|얳 +어|어|어 +억|억|억 +얶|얶|얶 +얷|얷|얷 +언|언|언 +얹|얹|얹 +얺|얺|얺 +얻|얻|얻 +얼|얼|얼 +얽|얽|얽 +얾|얾|얾 +얿|얿|얿 +엀|엀|엀 +엁|엁|엁 +엂|엂|엂 +엃|엃|엃 +엄|엄|엄 +업|업|업 +없|없|없 +엇|엇|엇 +었|었|었 +엉|엉|엉 +엊|엊|엊 +엋|엋|엋 +엌|엌|엌 +엍|엍|엍 +엎|엎|엎 +엏|엏|엏 +에|에|에 +엑|엑|엑 +엒|엒|엒 +엓|엓|엓 +엔|엔|엔 +엕|엕|엕 +엖|엖|엖 +엗|엗|엗 +엘|엘|엘 +엙|엙|엙 +엚|엚|엚 +엛|엛|엛 +엜|엜|엜 +엝|엝|엝 +엞|엞|엞 +엟|엟|엟 +엠|엠|엠 +엡|엡|엡 +엢|엢|엢 +엣|엣|엣 +엤|엤|엤 +엥|엥|엥 +엦|엦|엦 +엧|엧|엧 +엨|엨|엨 +엩|엩|엩 +엪|엪|엪 +엫|엫|엫 +여|여|여 +역|역|역 +엮|엮|엮 +엯|엯|엯 +연|연|연 +엱|엱|엱 +엲|엲|엲 +엳|엳|엳 +열|열|열 +엵|엵|엵 +엶|엶|엶 +엷|엷|엷 +엸|엸|엸 +엹|엹|엹 +엺|엺|엺 +엻|엻|엻 +염|염|염 +엽|엽|엽 +엾|엾|엾 +엿|엿|엿 +였|였|였 +영|영|영 +옂|옂|옂 +옃|옃|옃 +옄|옄|옄 +옅|옅|옅 +옆|옆|옆 +옇|옇|옇 +예|예|예 +옉|옉|옉 +옊|옊|옊 +옋|옋|옋 +옌|옌|옌 +옍|옍|옍 +옎|옎|옎 +옏|옏|옏 +옐|옐|옐 +옑|옑|옑 +옒|옒|옒 +옓|옓|옓 +옔|옔|옔 +옕|옕|옕 +옖|옖|옖 +옗|옗|옗 +옘|옘|옘 +옙|옙|옙 +옚|옚|옚 +옛|옛|옛 +옜|옜|옜 +옝|옝|옝 +옞|옞|옞 +옟|옟|옟 +옠|옠|옠 +옡|옡|옡 +옢|옢|옢 +옣|옣|옣 +오|오|오 +옥|옥|옥 +옦|옦|옦 +옧|옧|옧 +온|온|온 +옩|옩|옩 +옪|옪|옪 +옫|옫|옫 +올|올|올 +옭|옭|옭 +옮|옮|옮 +옯|옯|옯 +옰|옰|옰 +옱|옱|옱 +옲|옲|옲 +옳|옳|옳 +옴|옴|옴 +옵|옵|옵 +옶|옶|옶 +옷|옷|옷 +옸|옸|옸 +옹|옹|옹 +옺|옺|옺 +옻|옻|옻 +옼|옼|옼 +옽|옽|옽 +옾|옾|옾 +옿|옿|옿 +와|와|와 +왁|왁|왁 +왂|왂|왂 +왃|왃|왃 +완|완|완 +왅|왅|왅 +왆|왆|왆 +왇|왇|왇 +왈|왈|왈 +왉|왉|왉 +왊|왊|왊 +왋|왋|왋 +왌|왌|왌 +왍|왍|왍 +왎|왎|왎 +왏|왏|왏 +왐|왐|왐 +왑|왑|왑 +왒|왒|왒 +왓|왓|왓 +왔|왔|왔 +왕|왕|왕 +왖|왖|왖 +왗|왗|왗 +왘|왘|왘 +왙|왙|왙 +왚|왚|왚 +왛|왛|왛 +왜|왜|왜 +왝|왝|왝 +왞|왞|왞 +왟|왟|왟 +왠|왠|왠 +왡|왡|왡 +왢|왢|왢 +왣|왣|왣 +왤|왤|왤 +왥|왥|왥 +왦|왦|왦 +왧|왧|왧 +왨|왨|왨 +왩|왩|왩 +왪|왪|왪 +왫|왫|왫 +왬|왬|왬 +왭|왭|왭 +왮|왮|왮 +왯|왯|왯 +왰|왰|왰 +왱|왱|왱 +왲|왲|왲 +왳|왳|왳 +왴|왴|왴 +왵|왵|왵 +왶|왶|왶 +왷|왷|왷 +외|외|외 +왹|왹|왹 +왺|왺|왺 +왻|왻|왻 +왼|왼|왼 +왽|왽|왽 +왾|왾|왾 +왿|왿|왿 +욀|욀|욀 +욁|욁|욁 +욂|욂|욂 +욃|욃|욃 +욄|욄|욄 +욅|욅|욅 +욆|욆|욆 +욇|욇|욇 +욈|욈|욈 +욉|욉|욉 +욊|욊|욊 +욋|욋|욋 +욌|욌|욌 +욍|욍|욍 +욎|욎|욎 +욏|욏|욏 +욐|욐|욐 +욑|욑|욑 +욒|욒|욒 +욓|욓|욓 +요|요|요 +욕|욕|욕 +욖|욖|욖 +욗|욗|욗 +욘|욘|욘 +욙|욙|욙 +욚|욚|욚 +욛|욛|욛 +욜|욜|욜 +욝|욝|욝 +욞|욞|욞 +욟|욟|욟 +욠|욠|욠 +욡|욡|욡 +욢|욢|욢 +욣|욣|욣 +욤|욤|욤 +욥|욥|욥 +욦|욦|욦 +욧|욧|욧 +욨|욨|욨 +용|용|용 +욪|욪|욪 +욫|욫|욫 +욬|욬|욬 +욭|욭|욭 +욮|욮|욮 +욯|욯|욯 +우|우|우 +욱|욱|욱 +욲|욲|욲 +욳|욳|욳 +운|운|운 +욵|욵|욵 +욶|욶|욶 +욷|욷|욷 +울|울|울 +욹|욹|욹 +욺|욺|욺 +욻|욻|욻 +욼|욼|욼 +욽|욽|욽 +욾|욾|욾 +욿|욿|욿 +움|움|움 +웁|웁|웁 +웂|웂|웂 +웃|웃|웃 +웄|웄|웄 +웅|웅|웅 +웆|웆|웆 +웇|웇|웇 +웈|웈|웈 +웉|웉|웉 +웊|웊|웊 +웋|웋|웋 +워|워|워 +웍|웍|웍 +웎|웎|웎 +웏|웏|웏 +원|원|원 +웑|웑|웑 +웒|웒|웒 +웓|웓|웓 +월|월|월 +웕|웕|웕 +웖|웖|웖 +웗|웗|웗 +웘|웘|웘 +웙|웙|웙 +웚|웚|웚 +웛|웛|웛 +웜|웜|웜 +웝|웝|웝 +웞|웞|웞 +웟|웟|웟 +웠|웠|웠 +웡|웡|웡 +웢|웢|웢 +웣|웣|웣 +웤|웤|웤 +웥|웥|웥 +웦|웦|웦 +웧|웧|웧 +웨|웨|웨 +웩|웩|웩 +웪|웪|웪 +웫|웫|웫 +웬|웬|웬 +웭|웭|웭 +웮|웮|웮 +웯|웯|웯 +웰|웰|웰 +웱|웱|웱 +웲|웲|웲 +웳|웳|웳 +웴|웴|웴 +웵|웵|웵 +웶|웶|웶 +웷|웷|웷 +웸|웸|웸 +웹|웹|웹 +웺|웺|웺 +웻|웻|웻 +웼|웼|웼 +웽|웽|웽 +웾|웾|웾 +웿|웿|웿 +윀|윀|윀 +윁|윁|윁 +윂|윂|윂 +윃|윃|윃 +위|위|위 +윅|윅|윅 +윆|윆|윆 +윇|윇|윇 +윈|윈|윈 +윉|윉|윉 +윊|윊|윊 +윋|윋|윋 +윌|윌|윌 +윍|윍|윍 +윎|윎|윎 +윏|윏|윏 +윐|윐|윐 +윑|윑|윑 +윒|윒|윒 +윓|윓|윓 +윔|윔|윔 +윕|윕|윕 +윖|윖|윖 +윗|윗|윗 +윘|윘|윘 +윙|윙|윙 +윚|윚|윚 +윛|윛|윛 +윜|윜|윜 +윝|윝|윝 +윞|윞|윞 +윟|윟|윟 +유|유|유 +육|육|육 +윢|윢|윢 +윣|윣|윣 +윤|윤|윤 +윥|윥|윥 +윦|윦|윦 +윧|윧|윧 +율|율|율 +윩|윩|윩 +윪|윪|윪 +윫|윫|윫 +윬|윬|윬 +윭|윭|윭 +윮|윮|윮 +윯|윯|윯 +윰|윰|윰 +윱|윱|윱 +윲|윲|윲 +윳|윳|윳 +윴|윴|윴 +융|융|융 +윶|윶|윶 +윷|윷|윷 +윸|윸|윸 +윹|윹|윹 +윺|윺|윺 +윻|윻|윻 +으|으|으 +윽|윽|윽 +윾|윾|윾 +윿|윿|윿 +은|은|은 +읁|읁|읁 +읂|읂|읂 +읃|읃|읃 +을|을|을 +읅|읅|읅 +읆|읆|읆 +읇|읇|읇 +읈|읈|읈 +읉|읉|읉 +읊|읊|읊 +읋|읋|읋 +음|음|음 +읍|읍|읍 +읎|읎|읎 +읏|읏|읏 +읐|읐|읐 +응|응|응 +읒|읒|읒 +읓|읓|읓 +읔|읔|읔 +읕|읕|읕 +읖|읖|읖 +읗|읗|읗 +의|의|의 +읙|읙|읙 +읚|읚|읚 +읛|읛|읛 +읜|읜|읜 +읝|읝|읝 +읞|읞|읞 +읟|읟|읟 +읠|읠|읠 +읡|읡|읡 +읢|읢|읢 +읣|읣|읣 +읤|읤|읤 +읥|읥|읥 +읦|읦|읦 +읧|읧|읧 +읨|읨|읨 +읩|읩|읩 +읪|읪|읪 +읫|읫|읫 +읬|읬|읬 +읭|읭|읭 +읮|읮|읮 +읯|읯|읯 +읰|읰|읰 +읱|읱|읱 +읲|읲|읲 +읳|읳|읳 +이|이|이 +익|익|익 +읶|읶|읶 +읷|읷|읷 +인|인|인 +읹|읹|읹 +읺|읺|읺 +읻|읻|읻 +일|일|일 +읽|읽|읽 +읾|읾|읾 +읿|읿|읿 +잀|잀|잀 +잁|잁|잁 +잂|잂|잂 +잃|잃|잃 +임|임|임 +입|입|입 +잆|잆|잆 +잇|잇|잇 +있|있|있 +잉|잉|잉 +잊|잊|잊 +잋|잋|잋 +잌|잌|잌 +잍|잍|잍 +잎|잎|잎 +잏|잏|잏 +자|자|자 +작|작|작 +잒|잒|잒 +잓|잓|잓 +잔|잔|잔 +잕|잕|잕 +잖|잖|잖 +잗|잗|잗 +잘|잘|잘 +잙|잙|잙 +잚|잚|잚 +잛|잛|잛 +잜|잜|잜 +잝|잝|잝 +잞|잞|잞 +잟|잟|잟 +잠|잠|잠 +잡|잡|잡 +잢|잢|잢 +잣|잣|잣 +잤|잤|잤 +장|장|장 +잦|잦|잦 +잧|잧|잧 +잨|잨|잨 +잩|잩|잩 +잪|잪|잪 +잫|잫|잫 +재|재|재 +잭|잭|잭 +잮|잮|잮 +잯|잯|잯 +잰|잰|잰 +잱|잱|잱 +잲|잲|잲 +잳|잳|잳 +잴|잴|잴 +잵|잵|잵 +잶|잶|잶 +잷|잷|잷 +잸|잸|잸 +잹|잹|잹 +잺|잺|잺 +잻|잻|잻 +잼|잼|잼 +잽|잽|잽 +잾|잾|잾 +잿|잿|잿 +쟀|쟀|쟀 +쟁|쟁|쟁 +쟂|쟂|쟂 +쟃|쟃|쟃 +쟄|쟄|쟄 +쟅|쟅|쟅 +쟆|쟆|쟆 +쟇|쟇|쟇 +쟈|쟈|쟈 +쟉|쟉|쟉 +쟊|쟊|쟊 +쟋|쟋|쟋 +쟌|쟌|쟌 +쟍|쟍|쟍 +쟎|쟎|쟎 +쟏|쟏|쟏 +쟐|쟐|쟐 +쟑|쟑|쟑 +쟒|쟒|쟒 +쟓|쟓|쟓 +쟔|쟔|쟔 +쟕|쟕|쟕 +쟖|쟖|쟖 +쟗|쟗|쟗 +쟘|쟘|쟘 +쟙|쟙|쟙 +쟚|쟚|쟚 +쟛|쟛|쟛 +쟜|쟜|쟜 +쟝|쟝|쟝 +쟞|쟞|쟞 +쟟|쟟|쟟 +쟠|쟠|쟠 +쟡|쟡|쟡 +쟢|쟢|쟢 +쟣|쟣|쟣 +쟤|쟤|쟤 +쟥|쟥|쟥 +쟦|쟦|쟦 +쟧|쟧|쟧 +쟨|쟨|쟨 +쟩|쟩|쟩 +쟪|쟪|쟪 +쟫|쟫|쟫 +쟬|쟬|쟬 +쟭|쟭|쟭 +쟮|쟮|쟮 +쟯|쟯|쟯 +쟰|쟰|쟰 +쟱|쟱|쟱 +쟲|쟲|쟲 +쟳|쟳|쟳 +쟴|쟴|쟴 +쟵|쟵|쟵 +쟶|쟶|쟶 +쟷|쟷|쟷 +쟸|쟸|쟸 +쟹|쟹|쟹 +쟺|쟺|쟺 +쟻|쟻|쟻 +쟼|쟼|쟼 +쟽|쟽|쟽 +쟾|쟾|쟾 +쟿|쟿|쟿 +저|저|저 +적|적|적 +젂|젂|젂 +젃|젃|젃 +전|전|전 +젅|젅|젅 +젆|젆|젆 +젇|젇|젇 +절|절|절 +젉|젉|젉 +젊|젊|젊 +젋|젋|젋 +젌|젌|젌 +젍|젍|젍 +젎|젎|젎 +젏|젏|젏 +점|점|점 +접|접|접 +젒|젒|젒 +젓|젓|젓 +젔|젔|젔 +정|정|정 +젖|젖|젖 +젗|젗|젗 +젘|젘|젘 +젙|젙|젙 +젚|젚|젚 +젛|젛|젛 +제|제|제 +젝|젝|젝 +젞|젞|젞 +젟|젟|젟 +젠|젠|젠 +젡|젡|젡 +젢|젢|젢 +젣|젣|젣 +젤|젤|젤 +젥|젥|젥 +젦|젦|젦 +젧|젧|젧 +젨|젨|젨 +젩|젩|젩 +젪|젪|젪 +젫|젫|젫 +젬|젬|젬 +젭|젭|젭 +젮|젮|젮 +젯|젯|젯 +젰|젰|젰 +젱|젱|젱 +젲|젲|젲 +젳|젳|젳 +젴|젴|젴 +젵|젵|젵 +젶|젶|젶 +젷|젷|젷 +져|져|져 +젹|젹|젹 +젺|젺|젺 +젻|젻|젻 +젼|젼|젼 +젽|젽|젽 +젾|젾|젾 +젿|젿|젿 +졀|졀|졀 +졁|졁|졁 +졂|졂|졂 +졃|졃|졃 +졄|졄|졄 +졅|졅|졅 +졆|졆|졆 +졇|졇|졇 +졈|졈|졈 +졉|졉|졉 +졊|졊|졊 +졋|졋|졋 +졌|졌|졌 +졍|졍|졍 +졎|졎|졎 +졏|졏|졏 +졐|졐|졐 +졑|졑|졑 +졒|졒|졒 +졓|졓|졓 +졔|졔|졔 +졕|졕|졕 +졖|졖|졖 +졗|졗|졗 +졘|졘|졘 +졙|졙|졙 +졚|졚|졚 +졛|졛|졛 +졜|졜|졜 +졝|졝|졝 +졞|졞|졞 +졟|졟|졟 +졠|졠|졠 +졡|졡|졡 +졢|졢|졢 +졣|졣|졣 +졤|졤|졤 +졥|졥|졥 +졦|졦|졦 +졧|졧|졧 +졨|졨|졨 +졩|졩|졩 +졪|졪|졪 +졫|졫|졫 +졬|졬|졬 +졭|졭|졭 +졮|졮|졮 +졯|졯|졯 +조|조|조 +족|족|족 +졲|졲|졲 +졳|졳|졳 +존|존|존 +졵|졵|졵 +졶|졶|졶 +졷|졷|졷 +졸|졸|졸 +졹|졹|졹 +졺|졺|졺 +졻|졻|졻 +졼|졼|졼 +졽|졽|졽 +졾|졾|졾 +졿|졿|졿 +좀|좀|좀 +좁|좁|좁 +좂|좂|좂 +좃|좃|좃 +좄|좄|좄 +종|종|종 +좆|좆|좆 +좇|좇|좇 +좈|좈|좈 +좉|좉|좉 +좊|좊|좊 +좋|좋|좋 +좌|좌|좌 +좍|좍|좍 +좎|좎|좎 +좏|좏|좏 +좐|좐|좐 +좑|좑|좑 +좒|좒|좒 +좓|좓|좓 +좔|좔|좔 +좕|좕|좕 +좖|좖|좖 +좗|좗|좗 +좘|좘|좘 +좙|좙|좙 +좚|좚|좚 +좛|좛|좛 +좜|좜|좜 +좝|좝|좝 +좞|좞|좞 +좟|좟|좟 +좠|좠|좠 +좡|좡|좡 +좢|좢|좢 +좣|좣|좣 +좤|좤|좤 +좥|좥|좥 +좦|좦|좦 +좧|좧|좧 +좨|좨|좨 +좩|좩|좩 +좪|좪|좪 +좫|좫|좫 +좬|좬|좬 +좭|좭|좭 +좮|좮|좮 +좯|좯|좯 +좰|좰|좰 +좱|좱|좱 +좲|좲|좲 +좳|좳|좳 +좴|좴|좴 +좵|좵|좵 +좶|좶|좶 +좷|좷|좷 +좸|좸|좸 +좹|좹|좹 +좺|좺|좺 +좻|좻|좻 +좼|좼|좼 +좽|좽|좽 +좾|좾|좾 +좿|좿|좿 +죀|죀|죀 +죁|죁|죁 +죂|죂|죂 +죃|죃|죃 +죄|죄|죄 +죅|죅|죅 +죆|죆|죆 +죇|죇|죇 +죈|죈|죈 +죉|죉|죉 +죊|죊|죊 +죋|죋|죋 +죌|죌|죌 +죍|죍|죍 +죎|죎|죎 +죏|죏|죏 +죐|죐|죐 +죑|죑|죑 +죒|죒|죒 +죓|죓|죓 +죔|죔|죔 +죕|죕|죕 +죖|죖|죖 +죗|죗|죗 +죘|죘|죘 +죙|죙|죙 +죚|죚|죚 +죛|죛|죛 +죜|죜|죜 +죝|죝|죝 +죞|죞|죞 +죟|죟|죟 +죠|죠|죠 +죡|죡|죡 +죢|죢|죢 +죣|죣|죣 +죤|죤|죤 +죥|죥|죥 +죦|죦|죦 +죧|죧|죧 +죨|죨|죨 +죩|죩|죩 +죪|죪|죪 +죫|죫|죫 +죬|죬|죬 +죭|죭|죭 +죮|죮|죮 +죯|죯|죯 +죰|죰|죰 +죱|죱|죱 +죲|죲|죲 +죳|죳|죳 +죴|죴|죴 +죵|죵|죵 +죶|죶|죶 +죷|죷|죷 +죸|죸|죸 +죹|죹|죹 +죺|죺|죺 +죻|죻|죻 +주|주|주 +죽|죽|죽 +죾|죾|죾 +죿|죿|죿 +준|준|준 +줁|줁|줁 +줂|줂|줂 +줃|줃|줃 +줄|줄|줄 +줅|줅|줅 +줆|줆|줆 +줇|줇|줇 +줈|줈|줈 +줉|줉|줉 +줊|줊|줊 +줋|줋|줋 +줌|줌|줌 +줍|줍|줍 +줎|줎|줎 +줏|줏|줏 +줐|줐|줐 +중|중|중 +줒|줒|줒 +줓|줓|줓 +줔|줔|줔 +줕|줕|줕 +줖|줖|줖 +줗|줗|줗 +줘|줘|줘 +줙|줙|줙 +줚|줚|줚 +줛|줛|줛 +줜|줜|줜 +줝|줝|줝 +줞|줞|줞 +줟|줟|줟 +줠|줠|줠 +줡|줡|줡 +줢|줢|줢 +줣|줣|줣 +줤|줤|줤 +줥|줥|줥 +줦|줦|줦 +줧|줧|줧 +줨|줨|줨 +줩|줩|줩 +줪|줪|줪 +줫|줫|줫 +줬|줬|줬 +줭|줭|줭 +줮|줮|줮 +줯|줯|줯 +줰|줰|줰 +줱|줱|줱 +줲|줲|줲 +줳|줳|줳 +줴|줴|줴 +줵|줵|줵 +줶|줶|줶 +줷|줷|줷 +줸|줸|줸 +줹|줹|줹 +줺|줺|줺 +줻|줻|줻 +줼|줼|줼 +줽|줽|줽 +줾|줾|줾 +줿|줿|줿 +쥀|쥀|쥀 +쥁|쥁|쥁 +쥂|쥂|쥂 +쥃|쥃|쥃 +쥄|쥄|쥄 +쥅|쥅|쥅 +쥆|쥆|쥆 +쥇|쥇|쥇 +쥈|쥈|쥈 +쥉|쥉|쥉 +쥊|쥊|쥊 +쥋|쥋|쥋 +쥌|쥌|쥌 +쥍|쥍|쥍 +쥎|쥎|쥎 +쥏|쥏|쥏 +쥐|쥐|쥐 +쥑|쥑|쥑 +쥒|쥒|쥒 +쥓|쥓|쥓 +쥔|쥔|쥔 +쥕|쥕|쥕 +쥖|쥖|쥖 +쥗|쥗|쥗 +쥘|쥘|쥘 +쥙|쥙|쥙 +쥚|쥚|쥚 +쥛|쥛|쥛 +쥜|쥜|쥜 +쥝|쥝|쥝 +쥞|쥞|쥞 +쥟|쥟|쥟 +쥠|쥠|쥠 +쥡|쥡|쥡 +쥢|쥢|쥢 +쥣|쥣|쥣 +쥤|쥤|쥤 +쥥|쥥|쥥 +쥦|쥦|쥦 +쥧|쥧|쥧 +쥨|쥨|쥨 +쥩|쥩|쥩 +쥪|쥪|쥪 +쥫|쥫|쥫 +쥬|쥬|쥬 +쥭|쥭|쥭 +쥮|쥮|쥮 +쥯|쥯|쥯 +쥰|쥰|쥰 +쥱|쥱|쥱 +쥲|쥲|쥲 +쥳|쥳|쥳 +쥴|쥴|쥴 +쥵|쥵|쥵 +쥶|쥶|쥶 +쥷|쥷|쥷 +쥸|쥸|쥸 +쥹|쥹|쥹 +쥺|쥺|쥺 +쥻|쥻|쥻 +쥼|쥼|쥼 +쥽|쥽|쥽 +쥾|쥾|쥾 +쥿|쥿|쥿 +즀|즀|즀 +즁|즁|즁 +즂|즂|즂 +즃|즃|즃 +즄|즄|즄 +즅|즅|즅 +즆|즆|즆 +즇|즇|즇 +즈|즈|즈 +즉|즉|즉 +즊|즊|즊 +즋|즋|즋 +즌|즌|즌 +즍|즍|즍 +즎|즎|즎 +즏|즏|즏 +즐|즐|즐 +즑|즑|즑 +즒|즒|즒 +즓|즓|즓 +즔|즔|즔 +즕|즕|즕 +즖|즖|즖 +즗|즗|즗 +즘|즘|즘 +즙|즙|즙 +즚|즚|즚 +즛|즛|즛 +즜|즜|즜 +증|증|증 +즞|즞|즞 +즟|즟|즟 +즠|즠|즠 +즡|즡|즡 +즢|즢|즢 +즣|즣|즣 +즤|즤|즤 +즥|즥|즥 +즦|즦|즦 +즧|즧|즧 +즨|즨|즨 +즩|즩|즩 +즪|즪|즪 +즫|즫|즫 +즬|즬|즬 +즭|즭|즭 +즮|즮|즮 +즯|즯|즯 +즰|즰|즰 +즱|즱|즱 +즲|즲|즲 +즳|즳|즳 +즴|즴|즴 +즵|즵|즵 +즶|즶|즶 +즷|즷|즷 +즸|즸|즸 +즹|즹|즹 +즺|즺|즺 +즻|즻|즻 +즼|즼|즼 +즽|즽|즽 +즾|즾|즾 +즿|즿|즿 +지|지|지 +직|직|직 +짂|짂|짂 +짃|짃|짃 +진|진|진 +짅|짅|짅 +짆|짆|짆 +짇|짇|짇 +질|질|질 +짉|짉|짉 +짊|짊|짊 +짋|짋|짋 +짌|짌|짌 +짍|짍|짍 +짎|짎|짎 +짏|짏|짏 +짐|짐|짐 +집|집|집 +짒|짒|짒 +짓|짓|짓 +짔|짔|짔 +징|징|징 +짖|짖|짖 +짗|짗|짗 +짘|짘|짘 +짙|짙|짙 +짚|짚|짚 +짛|짛|짛 +짜|짜|짜 +짝|짝|짝 +짞|짞|짞 +짟|짟|짟 +짠|짠|짠 +짡|짡|짡 +짢|짢|짢 +짣|짣|짣 +짤|짤|짤 +짥|짥|짥 +짦|짦|짦 +짧|짧|짧 +짨|짨|짨 +짩|짩|짩 +짪|짪|짪 +짫|짫|짫 +짬|짬|짬 +짭|짭|짭 +짮|짮|짮 +짯|짯|짯 +짰|짰|짰 +짱|짱|짱 +짲|짲|짲 +짳|짳|짳 +짴|짴|짴 +짵|짵|짵 +짶|짶|짶 +짷|짷|짷 +째|째|째 +짹|짹|짹 +짺|짺|짺 +짻|짻|짻 +짼|짼|짼 +짽|짽|짽 +짾|짾|짾 +짿|짿|짿 +쨀|쨀|쨀 +쨁|쨁|쨁 +쨂|쨂|쨂 +쨃|쨃|쨃 +쨄|쨄|쨄 +쨅|쨅|쨅 +쨆|쨆|쨆 +쨇|쨇|쨇 +쨈|쨈|쨈 +쨉|쨉|쨉 +쨊|쨊|쨊 +쨋|쨋|쨋 +쨌|쨌|쨌 +쨍|쨍|쨍 +쨎|쨎|쨎 +쨏|쨏|쨏 +쨐|쨐|쨐 +쨑|쨑|쨑 +쨒|쨒|쨒 +쨓|쨓|쨓 +쨔|쨔|쨔 +쨕|쨕|쨕 +쨖|쨖|쨖 +쨗|쨗|쨗 +쨘|쨘|쨘 +쨙|쨙|쨙 +쨚|쨚|쨚 +쨛|쨛|쨛 +쨜|쨜|쨜 +쨝|쨝|쨝 +쨞|쨞|쨞 +쨟|쨟|쨟 +쨠|쨠|쨠 +쨡|쨡|쨡 +쨢|쨢|쨢 +쨣|쨣|쨣 +쨤|쨤|쨤 +쨥|쨥|쨥 +쨦|쨦|쨦 +쨧|쨧|쨧 +쨨|쨨|쨨 +쨩|쨩|쨩 +쨪|쨪|쨪 +쨫|쨫|쨫 +쨬|쨬|쨬 +쨭|쨭|쨭 +쨮|쨮|쨮 +쨯|쨯|쨯 +쨰|쨰|쨰 +쨱|쨱|쨱 +쨲|쨲|쨲 +쨳|쨳|쨳 +쨴|쨴|쨴 +쨵|쨵|쨵 +쨶|쨶|쨶 +쨷|쨷|쨷 +쨸|쨸|쨸 +쨹|쨹|쨹 +쨺|쨺|쨺 +쨻|쨻|쨻 +쨼|쨼|쨼 +쨽|쨽|쨽 +쨾|쨾|쨾 +쨿|쨿|쨿 +쩀|쩀|쩀 +쩁|쩁|쩁 +쩂|쩂|쩂 +쩃|쩃|쩃 +쩄|쩄|쩄 +쩅|쩅|쩅 +쩆|쩆|쩆 +쩇|쩇|쩇 +쩈|쩈|쩈 +쩉|쩉|쩉 +쩊|쩊|쩊 +쩋|쩋|쩋 +쩌|쩌|쩌 +쩍|쩍|쩍 +쩎|쩎|쩎 +쩏|쩏|쩏 +쩐|쩐|쩐 +쩑|쩑|쩑 +쩒|쩒|쩒 +쩓|쩓|쩓 +쩔|쩔|쩔 +쩕|쩕|쩕 +쩖|쩖|쩖 +쩗|쩗|쩗 +쩘|쩘|쩘 +쩙|쩙|쩙 +쩚|쩚|쩚 +쩛|쩛|쩛 +쩜|쩜|쩜 +쩝|쩝|쩝 +쩞|쩞|쩞 +쩟|쩟|쩟 +쩠|쩠|쩠 +쩡|쩡|쩡 +쩢|쩢|쩢 +쩣|쩣|쩣 +쩤|쩤|쩤 +쩥|쩥|쩥 +쩦|쩦|쩦 +쩧|쩧|쩧 +쩨|쩨|쩨 +쩩|쩩|쩩 +쩪|쩪|쩪 +쩫|쩫|쩫 +쩬|쩬|쩬 +쩭|쩭|쩭 +쩮|쩮|쩮 +쩯|쩯|쩯 +쩰|쩰|쩰 +쩱|쩱|쩱 +쩲|쩲|쩲 +쩳|쩳|쩳 +쩴|쩴|쩴 +쩵|쩵|쩵 +쩶|쩶|쩶 +쩷|쩷|쩷 +쩸|쩸|쩸 +쩹|쩹|쩹 +쩺|쩺|쩺 +쩻|쩻|쩻 +쩼|쩼|쩼 +쩽|쩽|쩽 +쩾|쩾|쩾 +쩿|쩿|쩿 +쪀|쪀|쪀 +쪁|쪁|쪁 +쪂|쪂|쪂 +쪃|쪃|쪃 +쪄|쪄|쪄 +쪅|쪅|쪅 +쪆|쪆|쪆 +쪇|쪇|쪇 +쪈|쪈|쪈 +쪉|쪉|쪉 +쪊|쪊|쪊 +쪋|쪋|쪋 +쪌|쪌|쪌 +쪍|쪍|쪍 +쪎|쪎|쪎 +쪏|쪏|쪏 +쪐|쪐|쪐 +쪑|쪑|쪑 +쪒|쪒|쪒 +쪓|쪓|쪓 +쪔|쪔|쪔 +쪕|쪕|쪕 +쪖|쪖|쪖 +쪗|쪗|쪗 +쪘|쪘|쪘 +쪙|쪙|쪙 +쪚|쪚|쪚 +쪛|쪛|쪛 +쪜|쪜|쪜 +쪝|쪝|쪝 +쪞|쪞|쪞 +쪟|쪟|쪟 +쪠|쪠|쪠 +쪡|쪡|쪡 +쪢|쪢|쪢 +쪣|쪣|쪣 +쪤|쪤|쪤 +쪥|쪥|쪥 +쪦|쪦|쪦 +쪧|쪧|쪧 +쪨|쪨|쪨 +쪩|쪩|쪩 +쪪|쪪|쪪 +쪫|쪫|쪫 +쪬|쪬|쪬 +쪭|쪭|쪭 +쪮|쪮|쪮 +쪯|쪯|쪯 +쪰|쪰|쪰 +쪱|쪱|쪱 +쪲|쪲|쪲 +쪳|쪳|쪳 +쪴|쪴|쪴 +쪵|쪵|쪵 +쪶|쪶|쪶 +쪷|쪷|쪷 +쪸|쪸|쪸 +쪹|쪹|쪹 +쪺|쪺|쪺 +쪻|쪻|쪻 +쪼|쪼|쪼 +쪽|쪽|쪽 +쪾|쪾|쪾 +쪿|쪿|쪿 +쫀|쫀|쫀 +쫁|쫁|쫁 +쫂|쫂|쫂 +쫃|쫃|쫃 +쫄|쫄|쫄 +쫅|쫅|쫅 +쫆|쫆|쫆 +쫇|쫇|쫇 +쫈|쫈|쫈 +쫉|쫉|쫉 +쫊|쫊|쫊 +쫋|쫋|쫋 +쫌|쫌|쫌 +쫍|쫍|쫍 +쫎|쫎|쫎 +쫏|쫏|쫏 +쫐|쫐|쫐 +쫑|쫑|쫑 +쫒|쫒|쫒 +쫓|쫓|쫓 +쫔|쫔|쫔 +쫕|쫕|쫕 +쫖|쫖|쫖 +쫗|쫗|쫗 +쫘|쫘|쫘 +쫙|쫙|쫙 +쫚|쫚|쫚 +쫛|쫛|쫛 +쫜|쫜|쫜 +쫝|쫝|쫝 +쫞|쫞|쫞 +쫟|쫟|쫟 +쫠|쫠|쫠 +쫡|쫡|쫡 +쫢|쫢|쫢 +쫣|쫣|쫣 +쫤|쫤|쫤 +쫥|쫥|쫥 +쫦|쫦|쫦 +쫧|쫧|쫧 +쫨|쫨|쫨 +쫩|쫩|쫩 +쫪|쫪|쫪 +쫫|쫫|쫫 +쫬|쫬|쫬 +쫭|쫭|쫭 +쫮|쫮|쫮 +쫯|쫯|쫯 +쫰|쫰|쫰 +쫱|쫱|쫱 +쫲|쫲|쫲 +쫳|쫳|쫳 +쫴|쫴|쫴 +쫵|쫵|쫵 +쫶|쫶|쫶 +쫷|쫷|쫷 +쫸|쫸|쫸 +쫹|쫹|쫹 +쫺|쫺|쫺 +쫻|쫻|쫻 +쫼|쫼|쫼 +쫽|쫽|쫽 +쫾|쫾|쫾 +쫿|쫿|쫿 +쬀|쬀|쬀 +쬁|쬁|쬁 +쬂|쬂|쬂 +쬃|쬃|쬃 +쬄|쬄|쬄 +쬅|쬅|쬅 +쬆|쬆|쬆 +쬇|쬇|쬇 +쬈|쬈|쬈 +쬉|쬉|쬉 +쬊|쬊|쬊 +쬋|쬋|쬋 +쬌|쬌|쬌 +쬍|쬍|쬍 +쬎|쬎|쬎 +쬏|쬏|쬏 +쬐|쬐|쬐 +쬑|쬑|쬑 +쬒|쬒|쬒 +쬓|쬓|쬓 +쬔|쬔|쬔 +쬕|쬕|쬕 +쬖|쬖|쬖 +쬗|쬗|쬗 +쬘|쬘|쬘 +쬙|쬙|쬙 +쬚|쬚|쬚 +쬛|쬛|쬛 +쬜|쬜|쬜 +쬝|쬝|쬝 +쬞|쬞|쬞 +쬟|쬟|쬟 +쬠|쬠|쬠 +쬡|쬡|쬡 +쬢|쬢|쬢 +쬣|쬣|쬣 +쬤|쬤|쬤 +쬥|쬥|쬥 +쬦|쬦|쬦 +쬧|쬧|쬧 +쬨|쬨|쬨 +쬩|쬩|쬩 +쬪|쬪|쬪 +쬫|쬫|쬫 +쬬|쬬|쬬 +쬭|쬭|쬭 +쬮|쬮|쬮 +쬯|쬯|쬯 +쬰|쬰|쬰 +쬱|쬱|쬱 +쬲|쬲|쬲 +쬳|쬳|쬳 +쬴|쬴|쬴 +쬵|쬵|쬵 +쬶|쬶|쬶 +쬷|쬷|쬷 +쬸|쬸|쬸 +쬹|쬹|쬹 +쬺|쬺|쬺 +쬻|쬻|쬻 +쬼|쬼|쬼 +쬽|쬽|쬽 +쬾|쬾|쬾 +쬿|쬿|쬿 +쭀|쭀|쭀 +쭁|쭁|쭁 +쭂|쭂|쭂 +쭃|쭃|쭃 +쭄|쭄|쭄 +쭅|쭅|쭅 +쭆|쭆|쭆 +쭇|쭇|쭇 +쭈|쭈|쭈 +쭉|쭉|쭉 +쭊|쭊|쭊 +쭋|쭋|쭋 +쭌|쭌|쭌 +쭍|쭍|쭍 +쭎|쭎|쭎 +쭏|쭏|쭏 +쭐|쭐|쭐 +쭑|쭑|쭑 +쭒|쭒|쭒 +쭓|쭓|쭓 +쭔|쭔|쭔 +쭕|쭕|쭕 +쭖|쭖|쭖 +쭗|쭗|쭗 +쭘|쭘|쭘 +쭙|쭙|쭙 +쭚|쭚|쭚 +쭛|쭛|쭛 +쭜|쭜|쭜 +쭝|쭝|쭝 +쭞|쭞|쭞 +쭟|쭟|쭟 +쭠|쭠|쭠 +쭡|쭡|쭡 +쭢|쭢|쭢 +쭣|쭣|쭣 +쭤|쭤|쭤 +쭥|쭥|쭥 +쭦|쭦|쭦 +쭧|쭧|쭧 +쭨|쭨|쭨 +쭩|쭩|쭩 +쭪|쭪|쭪 +쭫|쭫|쭫 +쭬|쭬|쭬 +쭭|쭭|쭭 +쭮|쭮|쭮 +쭯|쭯|쭯 +쭰|쭰|쭰 +쭱|쭱|쭱 +쭲|쭲|쭲 +쭳|쭳|쭳 +쭴|쭴|쭴 +쭵|쭵|쭵 +쭶|쭶|쭶 +쭷|쭷|쭷 +쭸|쭸|쭸 +쭹|쭹|쭹 +쭺|쭺|쭺 +쭻|쭻|쭻 +쭼|쭼|쭼 +쭽|쭽|쭽 +쭾|쭾|쭾 +쭿|쭿|쭿 +쮀|쮀|쮀 +쮁|쮁|쮁 +쮂|쮂|쮂 +쮃|쮃|쮃 +쮄|쮄|쮄 +쮅|쮅|쮅 +쮆|쮆|쮆 +쮇|쮇|쮇 +쮈|쮈|쮈 +쮉|쮉|쮉 +쮊|쮊|쮊 +쮋|쮋|쮋 +쮌|쮌|쮌 +쮍|쮍|쮍 +쮎|쮎|쮎 +쮏|쮏|쮏 +쮐|쮐|쮐 +쮑|쮑|쮑 +쮒|쮒|쮒 +쮓|쮓|쮓 +쮔|쮔|쮔 +쮕|쮕|쮕 +쮖|쮖|쮖 +쮗|쮗|쮗 +쮘|쮘|쮘 +쮙|쮙|쮙 +쮚|쮚|쮚 +쮛|쮛|쮛 +쮜|쮜|쮜 +쮝|쮝|쮝 +쮞|쮞|쮞 +쮟|쮟|쮟 +쮠|쮠|쮠 +쮡|쮡|쮡 +쮢|쮢|쮢 +쮣|쮣|쮣 +쮤|쮤|쮤 +쮥|쮥|쮥 +쮦|쮦|쮦 +쮧|쮧|쮧 +쮨|쮨|쮨 +쮩|쮩|쮩 +쮪|쮪|쮪 +쮫|쮫|쮫 +쮬|쮬|쮬 +쮭|쮭|쮭 +쮮|쮮|쮮 +쮯|쮯|쮯 +쮰|쮰|쮰 +쮱|쮱|쮱 +쮲|쮲|쮲 +쮳|쮳|쮳 +쮴|쮴|쮴 +쮵|쮵|쮵 +쮶|쮶|쮶 +쮷|쮷|쮷 +쮸|쮸|쮸 +쮹|쮹|쮹 +쮺|쮺|쮺 +쮻|쮻|쮻 +쮼|쮼|쮼 +쮽|쮽|쮽 +쮾|쮾|쮾 +쮿|쮿|쮿 +쯀|쯀|쯀 +쯁|쯁|쯁 +쯂|쯂|쯂 +쯃|쯃|쯃 +쯄|쯄|쯄 +쯅|쯅|쯅 +쯆|쯆|쯆 +쯇|쯇|쯇 +쯈|쯈|쯈 +쯉|쯉|쯉 +쯊|쯊|쯊 +쯋|쯋|쯋 +쯌|쯌|쯌 +쯍|쯍|쯍 +쯎|쯎|쯎 +쯏|쯏|쯏 +쯐|쯐|쯐 +쯑|쯑|쯑 +쯒|쯒|쯒 +쯓|쯓|쯓 +쯔|쯔|쯔 +쯕|쯕|쯕 +쯖|쯖|쯖 +쯗|쯗|쯗 +쯘|쯘|쯘 +쯙|쯙|쯙 +쯚|쯚|쯚 +쯛|쯛|쯛 +쯜|쯜|쯜 +쯝|쯝|쯝 +쯞|쯞|쯞 +쯟|쯟|쯟 +쯠|쯠|쯠 +쯡|쯡|쯡 +쯢|쯢|쯢 +쯣|쯣|쯣 +쯤|쯤|쯤 +쯥|쯥|쯥 +쯦|쯦|쯦 +쯧|쯧|쯧 +쯨|쯨|쯨 +쯩|쯩|쯩 +쯪|쯪|쯪 +쯫|쯫|쯫 +쯬|쯬|쯬 +쯭|쯭|쯭 +쯮|쯮|쯮 +쯯|쯯|쯯 +쯰|쯰|쯰 +쯱|쯱|쯱 +쯲|쯲|쯲 +쯳|쯳|쯳 +쯴|쯴|쯴 +쯵|쯵|쯵 +쯶|쯶|쯶 +쯷|쯷|쯷 +쯸|쯸|쯸 +쯹|쯹|쯹 +쯺|쯺|쯺 +쯻|쯻|쯻 +쯼|쯼|쯼 +쯽|쯽|쯽 +쯾|쯾|쯾 +쯿|쯿|쯿 +찀|찀|찀 +찁|찁|찁 +찂|찂|찂 +찃|찃|찃 +찄|찄|찄 +찅|찅|찅 +찆|찆|찆 +찇|찇|찇 +찈|찈|찈 +찉|찉|찉 +찊|찊|찊 +찋|찋|찋 +찌|찌|찌 +찍|찍|찍 +찎|찎|찎 +찏|찏|찏 +찐|찐|찐 +찑|찑|찑 +찒|찒|찒 +찓|찓|찓 +찔|찔|찔 +찕|찕|찕 +찖|찖|찖 +찗|찗|찗 +찘|찘|찘 +찙|찙|찙 +찚|찚|찚 +찛|찛|찛 +찜|찜|찜 +찝|찝|찝 +찞|찞|찞 +찟|찟|찟 +찠|찠|찠 +찡|찡|찡 +찢|찢|찢 +찣|찣|찣 +찤|찤|찤 +찥|찥|찥 +찦|찦|찦 +찧|찧|찧 +차|차|차 +착|착|착 +찪|찪|찪 +찫|찫|찫 +찬|찬|찬 +찭|찭|찭 +찮|찮|찮 +찯|찯|찯 +찰|찰|찰 +찱|찱|찱 +찲|찲|찲 +찳|찳|찳 +찴|찴|찴 +찵|찵|찵 +찶|찶|찶 +찷|찷|찷 +참|참|참 +찹|찹|찹 +찺|찺|찺 +찻|찻|찻 +찼|찼|찼 +창|창|창 +찾|찾|찾 +찿|찿|찿 +챀|챀|챀 +챁|챁|챁 +챂|챂|챂 +챃|챃|챃 +채|채|채 +책|책|책 +챆|챆|챆 +챇|챇|챇 +챈|챈|챈 +챉|챉|챉 +챊|챊|챊 +챋|챋|챋 +챌|챌|챌 +챍|챍|챍 +챎|챎|챎 +챏|챏|챏 +챐|챐|챐 +챑|챑|챑 +챒|챒|챒 +챓|챓|챓 +챔|챔|챔 +챕|챕|챕 +챖|챖|챖 +챗|챗|챗 +챘|챘|챘 +챙|챙|챙 +챚|챚|챚 +챛|챛|챛 +챜|챜|챜 +챝|챝|챝 +챞|챞|챞 +챟|챟|챟 +챠|챠|챠 +챡|챡|챡 +챢|챢|챢 +챣|챣|챣 +챤|챤|챤 +챥|챥|챥 +챦|챦|챦 +챧|챧|챧 +챨|챨|챨 +챩|챩|챩 +챪|챪|챪 +챫|챫|챫 +챬|챬|챬 +챭|챭|챭 +챮|챮|챮 +챯|챯|챯 +챰|챰|챰 +챱|챱|챱 +챲|챲|챲 +챳|챳|챳 +챴|챴|챴 +챵|챵|챵 +챶|챶|챶 +챷|챷|챷 +챸|챸|챸 +챹|챹|챹 +챺|챺|챺 +챻|챻|챻 +챼|챼|챼 +챽|챽|챽 +챾|챾|챾 +챿|챿|챿 +첀|첀|첀 +첁|첁|첁 +첂|첂|첂 +첃|첃|첃 +첄|첄|첄 +첅|첅|첅 +첆|첆|첆 +첇|첇|첇 +첈|첈|첈 +첉|첉|첉 +첊|첊|첊 +첋|첋|첋 +첌|첌|첌 +첍|첍|첍 +첎|첎|첎 +첏|첏|첏 +첐|첐|첐 +첑|첑|첑 +첒|첒|첒 +첓|첓|첓 +첔|첔|첔 +첕|첕|첕 +첖|첖|첖 +첗|첗|첗 +처|처|처 +척|척|척 +첚|첚|첚 +첛|첛|첛 +천|천|천 +첝|첝|첝 +첞|첞|첞 +첟|첟|첟 +철|철|철 +첡|첡|첡 +첢|첢|첢 +첣|첣|첣 +첤|첤|첤 +첥|첥|첥 +첦|첦|첦 +첧|첧|첧 +첨|첨|첨 +첩|첩|첩 +첪|첪|첪 +첫|첫|첫 +첬|첬|첬 +청|청|청 +첮|첮|첮 +첯|첯|첯 +첰|첰|첰 +첱|첱|첱 +첲|첲|첲 +첳|첳|첳 +체|체|체 +첵|첵|첵 +첶|첶|첶 +첷|첷|첷 +첸|첸|첸 +첹|첹|첹 +첺|첺|첺 +첻|첻|첻 +첼|첼|첼 +첽|첽|첽 +첾|첾|첾 +첿|첿|첿 +쳀|쳀|쳀 +쳁|쳁|쳁 +쳂|쳂|쳂 +쳃|쳃|쳃 +쳄|쳄|쳄 +쳅|쳅|쳅 +쳆|쳆|쳆 +쳇|쳇|쳇 +쳈|쳈|쳈 +쳉|쳉|쳉 +쳊|쳊|쳊 +쳋|쳋|쳋 +쳌|쳌|쳌 +쳍|쳍|쳍 +쳎|쳎|쳎 +쳏|쳏|쳏 +쳐|쳐|쳐 +쳑|쳑|쳑 +쳒|쳒|쳒 +쳓|쳓|쳓 +쳔|쳔|쳔 +쳕|쳕|쳕 +쳖|쳖|쳖 +쳗|쳗|쳗 +쳘|쳘|쳘 +쳙|쳙|쳙 +쳚|쳚|쳚 +쳛|쳛|쳛 +쳜|쳜|쳜 +쳝|쳝|쳝 +쳞|쳞|쳞 +쳟|쳟|쳟 +쳠|쳠|쳠 +쳡|쳡|쳡 +쳢|쳢|쳢 +쳣|쳣|쳣 +쳤|쳤|쳤 +쳥|쳥|쳥 +쳦|쳦|쳦 +쳧|쳧|쳧 +쳨|쳨|쳨 +쳩|쳩|쳩 +쳪|쳪|쳪 +쳫|쳫|쳫 +쳬|쳬|쳬 +쳭|쳭|쳭 +쳮|쳮|쳮 +쳯|쳯|쳯 +쳰|쳰|쳰 +쳱|쳱|쳱 +쳲|쳲|쳲 +쳳|쳳|쳳 +쳴|쳴|쳴 +쳵|쳵|쳵 +쳶|쳶|쳶 +쳷|쳷|쳷 +쳸|쳸|쳸 +쳹|쳹|쳹 +쳺|쳺|쳺 +쳻|쳻|쳻 +쳼|쳼|쳼 +쳽|쳽|쳽 +쳾|쳾|쳾 +쳿|쳿|쳿 +촀|촀|촀 +촁|촁|촁 +촂|촂|촂 +촃|촃|촃 +촄|촄|촄 +촅|촅|촅 +촆|촆|촆 +촇|촇|촇 +초|초|초 +촉|촉|촉 +촊|촊|촊 +촋|촋|촋 +촌|촌|촌 +촍|촍|촍 +촎|촎|촎 +촏|촏|촏 +촐|촐|촐 +촑|촑|촑 +촒|촒|촒 +촓|촓|촓 +촔|촔|촔 +촕|촕|촕 +촖|촖|촖 +촗|촗|촗 +촘|촘|촘 +촙|촙|촙 +촚|촚|촚 +촛|촛|촛 +촜|촜|촜 +총|총|총 +촞|촞|촞 +촟|촟|촟 +촠|촠|촠 +촡|촡|촡 +촢|촢|촢 +촣|촣|촣 +촤|촤|촤 +촥|촥|촥 +촦|촦|촦 +촧|촧|촧 +촨|촨|촨 +촩|촩|촩 +촪|촪|촪 +촫|촫|촫 +촬|촬|촬 +촭|촭|촭 +촮|촮|촮 +촯|촯|촯 +촰|촰|촰 +촱|촱|촱 +촲|촲|촲 +촳|촳|촳 +촴|촴|촴 +촵|촵|촵 +촶|촶|촶 +촷|촷|촷 +촸|촸|촸 +촹|촹|촹 +촺|촺|촺 +촻|촻|촻 +촼|촼|촼 +촽|촽|촽 +촾|촾|촾 +촿|촿|촿 +쵀|쵀|쵀 +쵁|쵁|쵁 +쵂|쵂|쵂 +쵃|쵃|쵃 +쵄|쵄|쵄 +쵅|쵅|쵅 +쵆|쵆|쵆 +쵇|쵇|쵇 +쵈|쵈|쵈 +쵉|쵉|쵉 +쵊|쵊|쵊 +쵋|쵋|쵋 +쵌|쵌|쵌 +쵍|쵍|쵍 +쵎|쵎|쵎 +쵏|쵏|쵏 +쵐|쵐|쵐 +쵑|쵑|쵑 +쵒|쵒|쵒 +쵓|쵓|쵓 +쵔|쵔|쵔 +쵕|쵕|쵕 +쵖|쵖|쵖 +쵗|쵗|쵗 +쵘|쵘|쵘 +쵙|쵙|쵙 +쵚|쵚|쵚 +쵛|쵛|쵛 +최|최|최 +쵝|쵝|쵝 +쵞|쵞|쵞 +쵟|쵟|쵟 +쵠|쵠|쵠 +쵡|쵡|쵡 +쵢|쵢|쵢 +쵣|쵣|쵣 +쵤|쵤|쵤 +쵥|쵥|쵥 +쵦|쵦|쵦 +쵧|쵧|쵧 +쵨|쵨|쵨 +쵩|쵩|쵩 +쵪|쵪|쵪 +쵫|쵫|쵫 +쵬|쵬|쵬 +쵭|쵭|쵭 +쵮|쵮|쵮 +쵯|쵯|쵯 +쵰|쵰|쵰 +쵱|쵱|쵱 +쵲|쵲|쵲 +쵳|쵳|쵳 +쵴|쵴|쵴 +쵵|쵵|쵵 +쵶|쵶|쵶 +쵷|쵷|쵷 +쵸|쵸|쵸 +쵹|쵹|쵹 +쵺|쵺|쵺 +쵻|쵻|쵻 +쵼|쵼|쵼 +쵽|쵽|쵽 +쵾|쵾|쵾 +쵿|쵿|쵿 +춀|춀|춀 +춁|춁|춁 +춂|춂|춂 +춃|춃|춃 +춄|춄|춄 +춅|춅|춅 +춆|춆|춆 +춇|춇|춇 +춈|춈|춈 +춉|춉|춉 +춊|춊|춊 +춋|춋|춋 +춌|춌|춌 +춍|춍|춍 +춎|춎|춎 +춏|춏|춏 +춐|춐|춐 +춑|춑|춑 +춒|춒|춒 +춓|춓|춓 +추|추|추 +축|축|축 +춖|춖|춖 +춗|춗|춗 +춘|춘|춘 +춙|춙|춙 +춚|춚|춚 +춛|춛|춛 +출|출|출 +춝|춝|춝 +춞|춞|춞 +춟|춟|춟 +춠|춠|춠 +춡|춡|춡 +춢|춢|춢 +춣|춣|춣 +춤|춤|춤 +춥|춥|춥 +춦|춦|춦 +춧|춧|춧 +춨|춨|춨 +충|충|충 +춪|춪|춪 +춫|춫|춫 +춬|춬|춬 +춭|춭|춭 +춮|춮|춮 +춯|춯|춯 +춰|춰|춰 +춱|춱|춱 +춲|춲|춲 +춳|춳|춳 +춴|춴|춴 +춵|춵|춵 +춶|춶|춶 +춷|춷|춷 +춸|춸|춸 +춹|춹|춹 +춺|춺|춺 +춻|춻|춻 +춼|춼|춼 +춽|춽|춽 +춾|춾|춾 +춿|춿|춿 +췀|췀|췀 +췁|췁|췁 +췂|췂|췂 +췃|췃|췃 +췄|췄|췄 +췅|췅|췅 +췆|췆|췆 +췇|췇|췇 +췈|췈|췈 +췉|췉|췉 +췊|췊|췊 +췋|췋|췋 +췌|췌|췌 +췍|췍|췍 +췎|췎|췎 +췏|췏|췏 +췐|췐|췐 +췑|췑|췑 +췒|췒|췒 +췓|췓|췓 +췔|췔|췔 +췕|췕|췕 +췖|췖|췖 +췗|췗|췗 +췘|췘|췘 +췙|췙|췙 +췚|췚|췚 +췛|췛|췛 +췜|췜|췜 +췝|췝|췝 +췞|췞|췞 +췟|췟|췟 +췠|췠|췠 +췡|췡|췡 +췢|췢|췢 +췣|췣|췣 +췤|췤|췤 +췥|췥|췥 +췦|췦|췦 +췧|췧|췧 +취|취|취 +췩|췩|췩 +췪|췪|췪 +췫|췫|췫 +췬|췬|췬 +췭|췭|췭 +췮|췮|췮 +췯|췯|췯 +췰|췰|췰 +췱|췱|췱 +췲|췲|췲 +췳|췳|췳 +췴|췴|췴 +췵|췵|췵 +췶|췶|췶 +췷|췷|췷 +췸|췸|췸 +췹|췹|췹 +췺|췺|췺 +췻|췻|췻 +췼|췼|췼 +췽|췽|췽 +췾|췾|췾 +췿|췿|췿 +츀|츀|츀 +츁|츁|츁 +츂|츂|츂 +츃|츃|츃 +츄|츄|츄 +츅|츅|츅 +츆|츆|츆 +츇|츇|츇 +츈|츈|츈 +츉|츉|츉 +츊|츊|츊 +츋|츋|츋 +츌|츌|츌 +츍|츍|츍 +츎|츎|츎 +츏|츏|츏 +츐|츐|츐 +츑|츑|츑 +츒|츒|츒 +츓|츓|츓 +츔|츔|츔 +츕|츕|츕 +츖|츖|츖 +츗|츗|츗 +츘|츘|츘 +츙|츙|츙 +츚|츚|츚 +츛|츛|츛 +츜|츜|츜 +츝|츝|츝 +츞|츞|츞 +츟|츟|츟 +츠|츠|츠 +측|측|측 +츢|츢|츢 +츣|츣|츣 +츤|츤|츤 +츥|츥|츥 +츦|츦|츦 +츧|츧|츧 +츨|츨|츨 +츩|츩|츩 +츪|츪|츪 +츫|츫|츫 +츬|츬|츬 +츭|츭|츭 +츮|츮|츮 +츯|츯|츯 +츰|츰|츰 +츱|츱|츱 +츲|츲|츲 +츳|츳|츳 +츴|츴|츴 +층|층|층 +츶|츶|츶 +츷|츷|츷 +츸|츸|츸 +츹|츹|츹 +츺|츺|츺 +츻|츻|츻 +츼|츼|츼 +츽|츽|츽 +츾|츾|츾 +츿|츿|츿 +칀|칀|칀 +칁|칁|칁 +칂|칂|칂 +칃|칃|칃 +칄|칄|칄 +칅|칅|칅 +칆|칆|칆 +칇|칇|칇 +칈|칈|칈 +칉|칉|칉 +칊|칊|칊 +칋|칋|칋 +칌|칌|칌 +칍|칍|칍 +칎|칎|칎 +칏|칏|칏 +칐|칐|칐 +칑|칑|칑 +칒|칒|칒 +칓|칓|칓 +칔|칔|칔 +칕|칕|칕 +칖|칖|칖 +칗|칗|칗 +치|치|치 +칙|칙|칙 +칚|칚|칚 +칛|칛|칛 +친|친|친 +칝|칝|칝 +칞|칞|칞 +칟|칟|칟 +칠|칠|칠 +칡|칡|칡 +칢|칢|칢 +칣|칣|칣 +칤|칤|칤 +칥|칥|칥 +칦|칦|칦 +칧|칧|칧 +침|침|침 +칩|칩|칩 +칪|칪|칪 +칫|칫|칫 +칬|칬|칬 +칭|칭|칭 +칮|칮|칮 +칯|칯|칯 +칰|칰|칰 +칱|칱|칱 +칲|칲|칲 +칳|칳|칳 +카|카|카 +칵|칵|칵 +칶|칶|칶 +칷|칷|칷 +칸|칸|칸 +칹|칹|칹 +칺|칺|칺 +칻|칻|칻 +칼|칼|칼 +칽|칽|칽 +칾|칾|칾 +칿|칿|칿 +캀|캀|캀 +캁|캁|캁 +캂|캂|캂 +캃|캃|캃 +캄|캄|캄 +캅|캅|캅 +캆|캆|캆 +캇|캇|캇 +캈|캈|캈 +캉|캉|캉 +캊|캊|캊 +캋|캋|캋 +캌|캌|캌 +캍|캍|캍 +캎|캎|캎 +캏|캏|캏 +캐|캐|캐 +캑|캑|캑 +캒|캒|캒 +캓|캓|캓 +캔|캔|캔 +캕|캕|캕 +캖|캖|캖 +캗|캗|캗 +캘|캘|캘 +캙|캙|캙 +캚|캚|캚 +캛|캛|캛 +캜|캜|캜 +캝|캝|캝 +캞|캞|캞 +캟|캟|캟 +캠|캠|캠 +캡|캡|캡 +캢|캢|캢 +캣|캣|캣 +캤|캤|캤 +캥|캥|캥 +캦|캦|캦 +캧|캧|캧 +캨|캨|캨 +캩|캩|캩 +캪|캪|캪 +캫|캫|캫 +캬|캬|캬 +캭|캭|캭 +캮|캮|캮 +캯|캯|캯 +캰|캰|캰 +캱|캱|캱 +캲|캲|캲 +캳|캳|캳 +캴|캴|캴 +캵|캵|캵 +캶|캶|캶 +캷|캷|캷 +캸|캸|캸 +캹|캹|캹 +캺|캺|캺 +캻|캻|캻 +캼|캼|캼 +캽|캽|캽 +캾|캾|캾 +캿|캿|캿 +컀|컀|컀 +컁|컁|컁 +컂|컂|컂 +컃|컃|컃 +컄|컄|컄 +컅|컅|컅 +컆|컆|컆 +컇|컇|컇 +컈|컈|컈 +컉|컉|컉 +컊|컊|컊 +컋|컋|컋 +컌|컌|컌 +컍|컍|컍 +컎|컎|컎 +컏|컏|컏 +컐|컐|컐 +컑|컑|컑 +컒|컒|컒 +컓|컓|컓 +컔|컔|컔 +컕|컕|컕 +컖|컖|컖 +컗|컗|컗 +컘|컘|컘 +컙|컙|컙 +컚|컚|컚 +컛|컛|컛 +컜|컜|컜 +컝|컝|컝 +컞|컞|컞 +컟|컟|컟 +컠|컠|컠 +컡|컡|컡 +컢|컢|컢 +컣|컣|컣 +커|커|커 +컥|컥|컥 +컦|컦|컦 +컧|컧|컧 +컨|컨|컨 +컩|컩|컩 +컪|컪|컪 +컫|컫|컫 +컬|컬|컬 +컭|컭|컭 +컮|컮|컮 +컯|컯|컯 +컰|컰|컰 +컱|컱|컱 +컲|컲|컲 +컳|컳|컳 +컴|컴|컴 +컵|컵|컵 +컶|컶|컶 +컷|컷|컷 +컸|컸|컸 +컹|컹|컹 +컺|컺|컺 +컻|컻|컻 +컼|컼|컼 +컽|컽|컽 +컾|컾|컾 +컿|컿|컿 +케|케|케 +켁|켁|켁 +켂|켂|켂 +켃|켃|켃 +켄|켄|켄 +켅|켅|켅 +켆|켆|켆 +켇|켇|켇 +켈|켈|켈 +켉|켉|켉 +켊|켊|켊 +켋|켋|켋 +켌|켌|켌 +켍|켍|켍 +켎|켎|켎 +켏|켏|켏 +켐|켐|켐 +켑|켑|켑 +켒|켒|켒 +켓|켓|켓 +켔|켔|켔 +켕|켕|켕 +켖|켖|켖 +켗|켗|켗 +켘|켘|켘 +켙|켙|켙 +켚|켚|켚 +켛|켛|켛 +켜|켜|켜 +켝|켝|켝 +켞|켞|켞 +켟|켟|켟 +켠|켠|켠 +켡|켡|켡 +켢|켢|켢 +켣|켣|켣 +켤|켤|켤 +켥|켥|켥 +켦|켦|켦 +켧|켧|켧 +켨|켨|켨 +켩|켩|켩 +켪|켪|켪 +켫|켫|켫 +켬|켬|켬 +켭|켭|켭 +켮|켮|켮 +켯|켯|켯 +켰|켰|켰 +켱|켱|켱 +켲|켲|켲 +켳|켳|켳 +켴|켴|켴 +켵|켵|켵 +켶|켶|켶 +켷|켷|켷 +켸|켸|켸 +켹|켹|켹 +켺|켺|켺 +켻|켻|켻 +켼|켼|켼 +켽|켽|켽 +켾|켾|켾 +켿|켿|켿 +콀|콀|콀 +콁|콁|콁 +콂|콂|콂 +콃|콃|콃 +콄|콄|콄 +콅|콅|콅 +콆|콆|콆 +콇|콇|콇 +콈|콈|콈 +콉|콉|콉 +콊|콊|콊 +콋|콋|콋 +콌|콌|콌 +콍|콍|콍 +콎|콎|콎 +콏|콏|콏 +콐|콐|콐 +콑|콑|콑 +콒|콒|콒 +콓|콓|콓 +코|코|코 +콕|콕|콕 +콖|콖|콖 +콗|콗|콗 +콘|콘|콘 +콙|콙|콙 +콚|콚|콚 +콛|콛|콛 +콜|콜|콜 +콝|콝|콝 +콞|콞|콞 +콟|콟|콟 +콠|콠|콠 +콡|콡|콡 +콢|콢|콢 +콣|콣|콣 +콤|콤|콤 +콥|콥|콥 +콦|콦|콦 +콧|콧|콧 +콨|콨|콨 +콩|콩|콩 +콪|콪|콪 +콫|콫|콫 +콬|콬|콬 +콭|콭|콭 +콮|콮|콮 +콯|콯|콯 +콰|콰|콰 +콱|콱|콱 +콲|콲|콲 +콳|콳|콳 +콴|콴|콴 +콵|콵|콵 +콶|콶|콶 +콷|콷|콷 +콸|콸|콸 +콹|콹|콹 +콺|콺|콺 +콻|콻|콻 +콼|콼|콼 +콽|콽|콽 +콾|콾|콾 +콿|콿|콿 +쾀|쾀|쾀 +쾁|쾁|쾁 +쾂|쾂|쾂 +쾃|쾃|쾃 +쾄|쾄|쾄 +쾅|쾅|쾅 +쾆|쾆|쾆 +쾇|쾇|쾇 +쾈|쾈|쾈 +쾉|쾉|쾉 +쾊|쾊|쾊 +쾋|쾋|쾋 +쾌|쾌|쾌 +쾍|쾍|쾍 +쾎|쾎|쾎 +쾏|쾏|쾏 +쾐|쾐|쾐 +쾑|쾑|쾑 +쾒|쾒|쾒 +쾓|쾓|쾓 +쾔|쾔|쾔 +쾕|쾕|쾕 +쾖|쾖|쾖 +쾗|쾗|쾗 +쾘|쾘|쾘 +쾙|쾙|쾙 +쾚|쾚|쾚 +쾛|쾛|쾛 +쾜|쾜|쾜 +쾝|쾝|쾝 +쾞|쾞|쾞 +쾟|쾟|쾟 +쾠|쾠|쾠 +쾡|쾡|쾡 +쾢|쾢|쾢 +쾣|쾣|쾣 +쾤|쾤|쾤 +쾥|쾥|쾥 +쾦|쾦|쾦 +쾧|쾧|쾧 +쾨|쾨|쾨 +쾩|쾩|쾩 +쾪|쾪|쾪 +쾫|쾫|쾫 +쾬|쾬|쾬 +쾭|쾭|쾭 +쾮|쾮|쾮 +쾯|쾯|쾯 +쾰|쾰|쾰 +쾱|쾱|쾱 +쾲|쾲|쾲 +쾳|쾳|쾳 +쾴|쾴|쾴 +쾵|쾵|쾵 +쾶|쾶|쾶 +쾷|쾷|쾷 +쾸|쾸|쾸 +쾹|쾹|쾹 +쾺|쾺|쾺 +쾻|쾻|쾻 +쾼|쾼|쾼 +쾽|쾽|쾽 +쾾|쾾|쾾 +쾿|쾿|쾿 +쿀|쿀|쿀 +쿁|쿁|쿁 +쿂|쿂|쿂 +쿃|쿃|쿃 +쿄|쿄|쿄 +쿅|쿅|쿅 +쿆|쿆|쿆 +쿇|쿇|쿇 +쿈|쿈|쿈 +쿉|쿉|쿉 +쿊|쿊|쿊 +쿋|쿋|쿋 +쿌|쿌|쿌 +쿍|쿍|쿍 +쿎|쿎|쿎 +쿏|쿏|쿏 +쿐|쿐|쿐 +쿑|쿑|쿑 +쿒|쿒|쿒 +쿓|쿓|쿓 +쿔|쿔|쿔 +쿕|쿕|쿕 +쿖|쿖|쿖 +쿗|쿗|쿗 +쿘|쿘|쿘 +쿙|쿙|쿙 +쿚|쿚|쿚 +쿛|쿛|쿛 +쿜|쿜|쿜 +쿝|쿝|쿝 +쿞|쿞|쿞 +쿟|쿟|쿟 +쿠|쿠|쿠 +쿡|쿡|쿡 +쿢|쿢|쿢 +쿣|쿣|쿣 +쿤|쿤|쿤 +쿥|쿥|쿥 +쿦|쿦|쿦 +쿧|쿧|쿧 +쿨|쿨|쿨 +쿩|쿩|쿩 +쿪|쿪|쿪 +쿫|쿫|쿫 +쿬|쿬|쿬 +쿭|쿭|쿭 +쿮|쿮|쿮 +쿯|쿯|쿯 +쿰|쿰|쿰 +쿱|쿱|쿱 +쿲|쿲|쿲 +쿳|쿳|쿳 +쿴|쿴|쿴 +쿵|쿵|쿵 +쿶|쿶|쿶 +쿷|쿷|쿷 +쿸|쿸|쿸 +쿹|쿹|쿹 +쿺|쿺|쿺 +쿻|쿻|쿻 +쿼|쿼|쿼 +쿽|쿽|쿽 +쿾|쿾|쿾 +쿿|쿿|쿿 +퀀|퀀|퀀 +퀁|퀁|퀁 +퀂|퀂|퀂 +퀃|퀃|퀃 +퀄|퀄|퀄 +퀅|퀅|퀅 +퀆|퀆|퀆 +퀇|퀇|퀇 +퀈|퀈|퀈 +퀉|퀉|퀉 +퀊|퀊|퀊 +퀋|퀋|퀋 +퀌|퀌|퀌 +퀍|퀍|퀍 +퀎|퀎|퀎 +퀏|퀏|퀏 +퀐|퀐|퀐 +퀑|퀑|퀑 +퀒|퀒|퀒 +퀓|퀓|퀓 +퀔|퀔|퀔 +퀕|퀕|퀕 +퀖|퀖|퀖 +퀗|퀗|퀗 +퀘|퀘|퀘 +퀙|퀙|퀙 +퀚|퀚|퀚 +퀛|퀛|퀛 +퀜|퀜|퀜 +퀝|퀝|퀝 +퀞|퀞|퀞 +퀟|퀟|퀟 +퀠|퀠|퀠 +퀡|퀡|퀡 +퀢|퀢|퀢 +퀣|퀣|퀣 +퀤|퀤|퀤 +퀥|퀥|퀥 +퀦|퀦|퀦 +퀧|퀧|퀧 +퀨|퀨|퀨 +퀩|퀩|퀩 +퀪|퀪|퀪 +퀫|퀫|퀫 +퀬|퀬|퀬 +퀭|퀭|퀭 +퀮|퀮|퀮 +퀯|퀯|퀯 +퀰|퀰|퀰 +퀱|퀱|퀱 +퀲|퀲|퀲 +퀳|퀳|퀳 +퀴|퀴|퀴 +퀵|퀵|퀵 +퀶|퀶|퀶 +퀷|퀷|퀷 +퀸|퀸|퀸 +퀹|퀹|퀹 +퀺|퀺|퀺 +퀻|퀻|퀻 +퀼|퀼|퀼 +퀽|퀽|퀽 +퀾|퀾|퀾 +퀿|퀿|퀿 +큀|큀|큀 +큁|큁|큁 +큂|큂|큂 +큃|큃|큃 +큄|큄|큄 +큅|큅|큅 +큆|큆|큆 +큇|큇|큇 +큈|큈|큈 +큉|큉|큉 +큊|큊|큊 +큋|큋|큋 +큌|큌|큌 +큍|큍|큍 +큎|큎|큎 +큏|큏|큏 +큐|큐|큐 +큑|큑|큑 +큒|큒|큒 +큓|큓|큓 +큔|큔|큔 +큕|큕|큕 +큖|큖|큖 +큗|큗|큗 +큘|큘|큘 +큙|큙|큙 +큚|큚|큚 +큛|큛|큛 +큜|큜|큜 +큝|큝|큝 +큞|큞|큞 +큟|큟|큟 +큠|큠|큠 +큡|큡|큡 +큢|큢|큢 +큣|큣|큣 +큤|큤|큤 +큥|큥|큥 +큦|큦|큦 +큧|큧|큧 +큨|큨|큨 +큩|큩|큩 +큪|큪|큪 +큫|큫|큫 +크|크|크 +큭|큭|큭 +큮|큮|큮 +큯|큯|큯 +큰|큰|큰 +큱|큱|큱 +큲|큲|큲 +큳|큳|큳 +클|클|클 +큵|큵|큵 +큶|큶|큶 +큷|큷|큷 +큸|큸|큸 +큹|큹|큹 +큺|큺|큺 +큻|큻|큻 +큼|큼|큼 +큽|큽|큽 +큾|큾|큾 +큿|큿|큿 +킀|킀|킀 +킁|킁|킁 +킂|킂|킂 +킃|킃|킃 +킄|킄|킄 +킅|킅|킅 +킆|킆|킆 +킇|킇|킇 +킈|킈|킈 +킉|킉|킉 +킊|킊|킊 +킋|킋|킋 +킌|킌|킌 +킍|킍|킍 +킎|킎|킎 +킏|킏|킏 +킐|킐|킐 +킑|킑|킑 +킒|킒|킒 +킓|킓|킓 +킔|킔|킔 +킕|킕|킕 +킖|킖|킖 +킗|킗|킗 +킘|킘|킘 +킙|킙|킙 +킚|킚|킚 +킛|킛|킛 +킜|킜|킜 +킝|킝|킝 +킞|킞|킞 +킟|킟|킟 +킠|킠|킠 +킡|킡|킡 +킢|킢|킢 +킣|킣|킣 +키|키|키 +킥|킥|킥 +킦|킦|킦 +킧|킧|킧 +킨|킨|킨 +킩|킩|킩 +킪|킪|킪 +킫|킫|킫 +킬|킬|킬 +킭|킭|킭 +킮|킮|킮 +킯|킯|킯 +킰|킰|킰 +킱|킱|킱 +킲|킲|킲 +킳|킳|킳 +킴|킴|킴 +킵|킵|킵 +킶|킶|킶 +킷|킷|킷 +킸|킸|킸 +킹|킹|킹 +킺|킺|킺 +킻|킻|킻 +킼|킼|킼 +킽|킽|킽 +킾|킾|킾 +킿|킿|킿 +타|타|타 +탁|탁|탁 +탂|탂|탂 +탃|탃|탃 +탄|탄|탄 +탅|탅|탅 +탆|탆|탆 +탇|탇|탇 +탈|탈|탈 +탉|탉|탉 +탊|탊|탊 +탋|탋|탋 +탌|탌|탌 +탍|탍|탍 +탎|탎|탎 +탏|탏|탏 +탐|탐|탐 +탑|탑|탑 +탒|탒|탒 +탓|탓|탓 +탔|탔|탔 +탕|탕|탕 +탖|탖|탖 +탗|탗|탗 +탘|탘|탘 +탙|탙|탙 +탚|탚|탚 +탛|탛|탛 +태|태|태 +택|택|택 +탞|탞|탞 +탟|탟|탟 +탠|탠|탠 +탡|탡|탡 +탢|탢|탢 +탣|탣|탣 +탤|탤|탤 +탥|탥|탥 +탦|탦|탦 +탧|탧|탧 +탨|탨|탨 +탩|탩|탩 +탪|탪|탪 +탫|탫|탫 +탬|탬|탬 +탭|탭|탭 +탮|탮|탮 +탯|탯|탯 +탰|탰|탰 +탱|탱|탱 +탲|탲|탲 +탳|탳|탳 +탴|탴|탴 +탵|탵|탵 +탶|탶|탶 +탷|탷|탷 +탸|탸|탸 +탹|탹|탹 +탺|탺|탺 +탻|탻|탻 +탼|탼|탼 +탽|탽|탽 +탾|탾|탾 +탿|탿|탿 +턀|턀|턀 +턁|턁|턁 +턂|턂|턂 +턃|턃|턃 +턄|턄|턄 +턅|턅|턅 +턆|턆|턆 +턇|턇|턇 +턈|턈|턈 +턉|턉|턉 +턊|턊|턊 +턋|턋|턋 +턌|턌|턌 +턍|턍|턍 +턎|턎|턎 +턏|턏|턏 +턐|턐|턐 +턑|턑|턑 +턒|턒|턒 +턓|턓|턓 +턔|턔|턔 +턕|턕|턕 +턖|턖|턖 +턗|턗|턗 +턘|턘|턘 +턙|턙|턙 +턚|턚|턚 +턛|턛|턛 +턜|턜|턜 +턝|턝|턝 +턞|턞|턞 +턟|턟|턟 +턠|턠|턠 +턡|턡|턡 +턢|턢|턢 +턣|턣|턣 +턤|턤|턤 +턥|턥|턥 +턦|턦|턦 +턧|턧|턧 +턨|턨|턨 +턩|턩|턩 +턪|턪|턪 +턫|턫|턫 +턬|턬|턬 +턭|턭|턭 +턮|턮|턮 +턯|턯|턯 +터|터|터 +턱|턱|턱 +턲|턲|턲 +턳|턳|턳 +턴|턴|턴 +턵|턵|턵 +턶|턶|턶 +턷|턷|턷 +털|털|털 +턹|턹|턹 +턺|턺|턺 +턻|턻|턻 +턼|턼|턼 +턽|턽|턽 +턾|턾|턾 +턿|턿|턿 +텀|텀|텀 +텁|텁|텁 +텂|텂|텂 +텃|텃|텃 +텄|텄|텄 +텅|텅|텅 +텆|텆|텆 +텇|텇|텇 +텈|텈|텈 +텉|텉|텉 +텊|텊|텊 +텋|텋|텋 +테|테|테 +텍|텍|텍 +텎|텎|텎 +텏|텏|텏 +텐|텐|텐 +텑|텑|텑 +텒|텒|텒 +텓|텓|텓 +텔|텔|텔 +텕|텕|텕 +텖|텖|텖 +텗|텗|텗 +텘|텘|텘 +텙|텙|텙 +텚|텚|텚 +텛|텛|텛 +템|템|템 +텝|텝|텝 +텞|텞|텞 +텟|텟|텟 +텠|텠|텠 +텡|텡|텡 +텢|텢|텢 +텣|텣|텣 +텤|텤|텤 +텥|텥|텥 +텦|텦|텦 +텧|텧|텧 +텨|텨|텨 +텩|텩|텩 +텪|텪|텪 +텫|텫|텫 +텬|텬|텬 +텭|텭|텭 +텮|텮|텮 +텯|텯|텯 +텰|텰|텰 +텱|텱|텱 +텲|텲|텲 +텳|텳|텳 +텴|텴|텴 +텵|텵|텵 +텶|텶|텶 +텷|텷|텷 +텸|텸|텸 +텹|텹|텹 +텺|텺|텺 +텻|텻|텻 +텼|텼|텼 +텽|텽|텽 +텾|텾|텾 +텿|텿|텿 +톀|톀|톀 +톁|톁|톁 +톂|톂|톂 +톃|톃|톃 +톄|톄|톄 +톅|톅|톅 +톆|톆|톆 +톇|톇|톇 +톈|톈|톈 +톉|톉|톉 +톊|톊|톊 +톋|톋|톋 +톌|톌|톌 +톍|톍|톍 +톎|톎|톎 +톏|톏|톏 +톐|톐|톐 +톑|톑|톑 +톒|톒|톒 +톓|톓|톓 +톔|톔|톔 +톕|톕|톕 +톖|톖|톖 +톗|톗|톗 +톘|톘|톘 +톙|톙|톙 +톚|톚|톚 +톛|톛|톛 +톜|톜|톜 +톝|톝|톝 +톞|톞|톞 +톟|톟|톟 +토|토|토 +톡|톡|톡 +톢|톢|톢 +톣|톣|톣 +톤|톤|톤 +톥|톥|톥 +톦|톦|톦 +톧|톧|톧 +톨|톨|톨 +톩|톩|톩 +톪|톪|톪 +톫|톫|톫 +톬|톬|톬 +톭|톭|톭 +톮|톮|톮 +톯|톯|톯 +톰|톰|톰 +톱|톱|톱 +톲|톲|톲 +톳|톳|톳 +톴|톴|톴 +통|통|통 +톶|톶|톶 +톷|톷|톷 +톸|톸|톸 +톹|톹|톹 +톺|톺|톺 +톻|톻|톻 +톼|톼|톼 +톽|톽|톽 +톾|톾|톾 +톿|톿|톿 +퇀|퇀|퇀 +퇁|퇁|퇁 +퇂|퇂|퇂 +퇃|퇃|퇃 +퇄|퇄|퇄 +퇅|퇅|퇅 +퇆|퇆|퇆 +퇇|퇇|퇇 +퇈|퇈|퇈 +퇉|퇉|퇉 +퇊|퇊|퇊 +퇋|퇋|퇋 +퇌|퇌|퇌 +퇍|퇍|퇍 +퇎|퇎|퇎 +퇏|퇏|퇏 +퇐|퇐|퇐 +퇑|퇑|퇑 +퇒|퇒|퇒 +퇓|퇓|퇓 +퇔|퇔|퇔 +퇕|퇕|퇕 +퇖|퇖|퇖 +퇗|퇗|퇗 +퇘|퇘|퇘 +퇙|퇙|퇙 +퇚|퇚|퇚 +퇛|퇛|퇛 +퇜|퇜|퇜 +퇝|퇝|퇝 +퇞|퇞|퇞 +퇟|퇟|퇟 +퇠|퇠|퇠 +퇡|퇡|퇡 +퇢|퇢|퇢 +퇣|퇣|퇣 +퇤|퇤|퇤 +퇥|퇥|퇥 +퇦|퇦|퇦 +퇧|퇧|퇧 +퇨|퇨|퇨 +퇩|퇩|퇩 +퇪|퇪|퇪 +퇫|퇫|퇫 +퇬|퇬|퇬 +퇭|퇭|퇭 +퇮|퇮|퇮 +퇯|퇯|퇯 +퇰|퇰|퇰 +퇱|퇱|퇱 +퇲|퇲|퇲 +퇳|퇳|퇳 +퇴|퇴|퇴 +퇵|퇵|퇵 +퇶|퇶|퇶 +퇷|퇷|퇷 +퇸|퇸|퇸 +퇹|퇹|퇹 +퇺|퇺|퇺 +퇻|퇻|퇻 +퇼|퇼|퇼 +퇽|퇽|퇽 +퇾|퇾|퇾 +퇿|퇿|퇿 +툀|툀|툀 +툁|툁|툁 +툂|툂|툂 +툃|툃|툃 +툄|툄|툄 +툅|툅|툅 +툆|툆|툆 +툇|툇|툇 +툈|툈|툈 +툉|툉|툉 +툊|툊|툊 +툋|툋|툋 +툌|툌|툌 +툍|툍|툍 +툎|툎|툎 +툏|툏|툏 +툐|툐|툐 +툑|툑|툑 +툒|툒|툒 +툓|툓|툓 +툔|툔|툔 +툕|툕|툕 +툖|툖|툖 +툗|툗|툗 +툘|툘|툘 +툙|툙|툙 +툚|툚|툚 +툛|툛|툛 +툜|툜|툜 +툝|툝|툝 +툞|툞|툞 +툟|툟|툟 +툠|툠|툠 +툡|툡|툡 +툢|툢|툢 +툣|툣|툣 +툤|툤|툤 +툥|툥|툥 +툦|툦|툦 +툧|툧|툧 +툨|툨|툨 +툩|툩|툩 +툪|툪|툪 +툫|툫|툫 +투|투|투 +툭|툭|툭 +툮|툮|툮 +툯|툯|툯 +툰|툰|툰 +툱|툱|툱 +툲|툲|툲 +툳|툳|툳 +툴|툴|툴 +툵|툵|툵 +툶|툶|툶 +툷|툷|툷 +툸|툸|툸 +툹|툹|툹 +툺|툺|툺 +툻|툻|툻 +툼|툼|툼 +툽|툽|툽 +툾|툾|툾 +툿|툿|툿 +퉀|퉀|퉀 +퉁|퉁|퉁 +퉂|퉂|퉂 +퉃|퉃|퉃 +퉄|퉄|퉄 +퉅|퉅|퉅 +퉆|퉆|퉆 +퉇|퉇|퉇 +퉈|퉈|퉈 +퉉|퉉|퉉 +퉊|퉊|퉊 +퉋|퉋|퉋 +퉌|퉌|퉌 +퉍|퉍|퉍 +퉎|퉎|퉎 +퉏|퉏|퉏 +퉐|퉐|퉐 +퉑|퉑|퉑 +퉒|퉒|퉒 +퉓|퉓|퉓 +퉔|퉔|퉔 +퉕|퉕|퉕 +퉖|퉖|퉖 +퉗|퉗|퉗 +퉘|퉘|퉘 +퉙|퉙|퉙 +퉚|퉚|퉚 +퉛|퉛|퉛 +퉜|퉜|퉜 +퉝|퉝|퉝 +퉞|퉞|퉞 +퉟|퉟|퉟 +퉠|퉠|퉠 +퉡|퉡|퉡 +퉢|퉢|퉢 +퉣|퉣|퉣 +퉤|퉤|퉤 +퉥|퉥|퉥 +퉦|퉦|퉦 +퉧|퉧|퉧 +퉨|퉨|퉨 +퉩|퉩|퉩 +퉪|퉪|퉪 +퉫|퉫|퉫 +퉬|퉬|퉬 +퉭|퉭|퉭 +퉮|퉮|퉮 +퉯|퉯|퉯 +퉰|퉰|퉰 +퉱|퉱|퉱 +퉲|퉲|퉲 +퉳|퉳|퉳 +퉴|퉴|퉴 +퉵|퉵|퉵 +퉶|퉶|퉶 +퉷|퉷|퉷 +퉸|퉸|퉸 +퉹|퉹|퉹 +퉺|퉺|퉺 +퉻|퉻|퉻 +퉼|퉼|퉼 +퉽|퉽|퉽 +퉾|퉾|퉾 +퉿|퉿|퉿 +튀|튀|튀 +튁|튁|튁 +튂|튂|튂 +튃|튃|튃 +튄|튄|튄 +튅|튅|튅 +튆|튆|튆 +튇|튇|튇 +튈|튈|튈 +튉|튉|튉 +튊|튊|튊 +튋|튋|튋 +튌|튌|튌 +튍|튍|튍 +튎|튎|튎 +튏|튏|튏 +튐|튐|튐 +튑|튑|튑 +튒|튒|튒 +튓|튓|튓 +튔|튔|튔 +튕|튕|튕 +튖|튖|튖 +튗|튗|튗 +튘|튘|튘 +튙|튙|튙 +튚|튚|튚 +튛|튛|튛 +튜|튜|튜 +튝|튝|튝 +튞|튞|튞 +튟|튟|튟 +튠|튠|튠 +튡|튡|튡 +튢|튢|튢 +튣|튣|튣 +튤|튤|튤 +튥|튥|튥 +튦|튦|튦 +튧|튧|튧 +튨|튨|튨 +튩|튩|튩 +튪|튪|튪 +튫|튫|튫 +튬|튬|튬 +튭|튭|튭 +튮|튮|튮 +튯|튯|튯 +튰|튰|튰 +튱|튱|튱 +튲|튲|튲 +튳|튳|튳 +튴|튴|튴 +튵|튵|튵 +튶|튶|튶 +튷|튷|튷 +트|트|트 +특|특|특 +튺|튺|튺 +튻|튻|튻 +튼|튼|튼 +튽|튽|튽 +튾|튾|튾 +튿|튿|튿 +틀|틀|틀 +틁|틁|틁 +틂|틂|틂 +틃|틃|틃 +틄|틄|틄 +틅|틅|틅 +틆|틆|틆 +틇|틇|틇 +틈|틈|틈 +틉|틉|틉 +틊|틊|틊 +틋|틋|틋 +틌|틌|틌 +틍|틍|틍 +틎|틎|틎 +틏|틏|틏 +틐|틐|틐 +틑|틑|틑 +틒|틒|틒 +틓|틓|틓 +틔|틔|틔 +틕|틕|틕 +틖|틖|틖 +틗|틗|틗 +틘|틘|틘 +틙|틙|틙 +틚|틚|틚 +틛|틛|틛 +틜|틜|틜 +틝|틝|틝 +틞|틞|틞 +틟|틟|틟 +틠|틠|틠 +틡|틡|틡 +틢|틢|틢 +틣|틣|틣 +틤|틤|틤 +틥|틥|틥 +틦|틦|틦 +틧|틧|틧 +틨|틨|틨 +틩|틩|틩 +틪|틪|틪 +틫|틫|틫 +틬|틬|틬 +틭|틭|틭 +틮|틮|틮 +틯|틯|틯 +티|티|티 +틱|틱|틱 +틲|틲|틲 +틳|틳|틳 +틴|틴|틴 +틵|틵|틵 +틶|틶|틶 +틷|틷|틷 +틸|틸|틸 +틹|틹|틹 +틺|틺|틺 +틻|틻|틻 +틼|틼|틼 +틽|틽|틽 +틾|틾|틾 +틿|틿|틿 +팀|팀|팀 +팁|팁|팁 +팂|팂|팂 +팃|팃|팃 +팄|팄|팄 +팅|팅|팅 +팆|팆|팆 +팇|팇|팇 +팈|팈|팈 +팉|팉|팉 +팊|팊|팊 +팋|팋|팋 +파|파|파 +팍|팍|팍 +팎|팎|팎 +팏|팏|팏 +판|판|판 +팑|팑|팑 +팒|팒|팒 +팓|팓|팓 +팔|팔|팔 +팕|팕|팕 +팖|팖|팖 +팗|팗|팗 +팘|팘|팘 +팙|팙|팙 +팚|팚|팚 +팛|팛|팛 +팜|팜|팜 +팝|팝|팝 +팞|팞|팞 +팟|팟|팟 +팠|팠|팠 +팡|팡|팡 +팢|팢|팢 +팣|팣|팣 +팤|팤|팤 +팥|팥|팥 +팦|팦|팦 +팧|팧|팧 +패|패|패 +팩|팩|팩 +팪|팪|팪 +팫|팫|팫 +팬|팬|팬 +팭|팭|팭 +팮|팮|팮 +팯|팯|팯 +팰|팰|팰 +팱|팱|팱 +팲|팲|팲 +팳|팳|팳 +팴|팴|팴 +팵|팵|팵 +팶|팶|팶 +팷|팷|팷 +팸|팸|팸 +팹|팹|팹 +팺|팺|팺 +팻|팻|팻 +팼|팼|팼 +팽|팽|팽 +팾|팾|팾 +팿|팿|팿 +퍀|퍀|퍀 +퍁|퍁|퍁 +퍂|퍂|퍂 +퍃|퍃|퍃 +퍄|퍄|퍄 +퍅|퍅|퍅 +퍆|퍆|퍆 +퍇|퍇|퍇 +퍈|퍈|퍈 +퍉|퍉|퍉 +퍊|퍊|퍊 +퍋|퍋|퍋 +퍌|퍌|퍌 +퍍|퍍|퍍 +퍎|퍎|퍎 +퍏|퍏|퍏 +퍐|퍐|퍐 +퍑|퍑|퍑 +퍒|퍒|퍒 +퍓|퍓|퍓 +퍔|퍔|퍔 +퍕|퍕|퍕 +퍖|퍖|퍖 +퍗|퍗|퍗 +퍘|퍘|퍘 +퍙|퍙|퍙 +퍚|퍚|퍚 +퍛|퍛|퍛 +퍜|퍜|퍜 +퍝|퍝|퍝 +퍞|퍞|퍞 +퍟|퍟|퍟 +퍠|퍠|퍠 +퍡|퍡|퍡 +퍢|퍢|퍢 +퍣|퍣|퍣 +퍤|퍤|퍤 +퍥|퍥|퍥 +퍦|퍦|퍦 +퍧|퍧|퍧 +퍨|퍨|퍨 +퍩|퍩|퍩 +퍪|퍪|퍪 +퍫|퍫|퍫 +퍬|퍬|퍬 +퍭|퍭|퍭 +퍮|퍮|퍮 +퍯|퍯|퍯 +퍰|퍰|퍰 +퍱|퍱|퍱 +퍲|퍲|퍲 +퍳|퍳|퍳 +퍴|퍴|퍴 +퍵|퍵|퍵 +퍶|퍶|퍶 +퍷|퍷|퍷 +퍸|퍸|퍸 +퍹|퍹|퍹 +퍺|퍺|퍺 +퍻|퍻|퍻 +퍼|퍼|퍼 +퍽|퍽|퍽 +퍾|퍾|퍾 +퍿|퍿|퍿 +펀|펀|펀 +펁|펁|펁 +펂|펂|펂 +펃|펃|펃 +펄|펄|펄 +펅|펅|펅 +펆|펆|펆 +펇|펇|펇 +펈|펈|펈 +펉|펉|펉 +펊|펊|펊 +펋|펋|펋 +펌|펌|펌 +펍|펍|펍 +펎|펎|펎 +펏|펏|펏 +펐|펐|펐 +펑|펑|펑 +펒|펒|펒 +펓|펓|펓 +펔|펔|펔 +펕|펕|펕 +펖|펖|펖 +펗|펗|펗 +페|페|페 +펙|펙|펙 +펚|펚|펚 +펛|펛|펛 +펜|펜|펜 +펝|펝|펝 +펞|펞|펞 +펟|펟|펟 +펠|펠|펠 +펡|펡|펡 +펢|펢|펢 +펣|펣|펣 +펤|펤|펤 +펥|펥|펥 +펦|펦|펦 +펧|펧|펧 +펨|펨|펨 +펩|펩|펩 +펪|펪|펪 +펫|펫|펫 +펬|펬|펬 +펭|펭|펭 +펮|펮|펮 +펯|펯|펯 +펰|펰|펰 +펱|펱|펱 +펲|펲|펲 +펳|펳|펳 +펴|펴|펴 +펵|펵|펵 +펶|펶|펶 +펷|펷|펷 +편|편|편 +펹|펹|펹 +펺|펺|펺 +펻|펻|펻 +펼|펼|펼 +펽|펽|펽 +펾|펾|펾 +펿|펿|펿 +폀|폀|폀 +폁|폁|폁 +폂|폂|폂 +폃|폃|폃 +폄|폄|폄 +폅|폅|폅 +폆|폆|폆 +폇|폇|폇 +폈|폈|폈 +평|평|평 +폊|폊|폊 +폋|폋|폋 +폌|폌|폌 +폍|폍|폍 +폎|폎|폎 +폏|폏|폏 +폐|폐|폐 +폑|폑|폑 +폒|폒|폒 +폓|폓|폓 +폔|폔|폔 +폕|폕|폕 +폖|폖|폖 +폗|폗|폗 +폘|폘|폘 +폙|폙|폙 +폚|폚|폚 +폛|폛|폛 +폜|폜|폜 +폝|폝|폝 +폞|폞|폞 +폟|폟|폟 +폠|폠|폠 +폡|폡|폡 +폢|폢|폢 +폣|폣|폣 +폤|폤|폤 +폥|폥|폥 +폦|폦|폦 +폧|폧|폧 +폨|폨|폨 +폩|폩|폩 +폪|폪|폪 +폫|폫|폫 +포|포|포 +폭|폭|폭 +폮|폮|폮 +폯|폯|폯 +폰|폰|폰 +폱|폱|폱 +폲|폲|폲 +폳|폳|폳 +폴|폴|폴 +폵|폵|폵 +폶|폶|폶 +폷|폷|폷 +폸|폸|폸 +폹|폹|폹 +폺|폺|폺 +폻|폻|폻 +폼|폼|폼 +폽|폽|폽 +폾|폾|폾 +폿|폿|폿 +퐀|퐀|퐀 +퐁|퐁|퐁 +퐂|퐂|퐂 +퐃|퐃|퐃 +퐄|퐄|퐄 +퐅|퐅|퐅 +퐆|퐆|퐆 +퐇|퐇|퐇 +퐈|퐈|퐈 +퐉|퐉|퐉 +퐊|퐊|퐊 +퐋|퐋|퐋 +퐌|퐌|퐌 +퐍|퐍|퐍 +퐎|퐎|퐎 +퐏|퐏|퐏 +퐐|퐐|퐐 +퐑|퐑|퐑 +퐒|퐒|퐒 +퐓|퐓|퐓 +퐔|퐔|퐔 +퐕|퐕|퐕 +퐖|퐖|퐖 +퐗|퐗|퐗 +퐘|퐘|퐘 +퐙|퐙|퐙 +퐚|퐚|퐚 +퐛|퐛|퐛 +퐜|퐜|퐜 +퐝|퐝|퐝 +퐞|퐞|퐞 +퐟|퐟|퐟 +퐠|퐠|퐠 +퐡|퐡|퐡 +퐢|퐢|퐢 +퐣|퐣|퐣 +퐤|퐤|퐤 +퐥|퐥|퐥 +퐦|퐦|퐦 +퐧|퐧|퐧 +퐨|퐨|퐨 +퐩|퐩|퐩 +퐪|퐪|퐪 +퐫|퐫|퐫 +퐬|퐬|퐬 +퐭|퐭|퐭 +퐮|퐮|퐮 +퐯|퐯|퐯 +퐰|퐰|퐰 +퐱|퐱|퐱 +퐲|퐲|퐲 +퐳|퐳|퐳 +퐴|퐴|퐴 +퐵|퐵|퐵 +퐶|퐶|퐶 +퐷|퐷|퐷 +퐸|퐸|퐸 +퐹|퐹|퐹 +퐺|퐺|퐺 +퐻|퐻|퐻 +퐼|퐼|퐼 +퐽|퐽|퐽 +퐾|퐾|퐾 +퐿|퐿|퐿 +푀|푀|푀 +푁|푁|푁 +푂|푂|푂 +푃|푃|푃 +푄|푄|푄 +푅|푅|푅 +푆|푆|푆 +푇|푇|푇 +푈|푈|푈 +푉|푉|푉 +푊|푊|푊 +푋|푋|푋 +푌|푌|푌 +푍|푍|푍 +푎|푎|푎 +푏|푏|푏 +푐|푐|푐 +푑|푑|푑 +푒|푒|푒 +푓|푓|푓 +푔|푔|푔 +푕|푕|푕 +푖|푖|푖 +푗|푗|푗 +푘|푘|푘 +푙|푙|푙 +푚|푚|푚 +푛|푛|푛 +표|표|표 +푝|푝|푝 +푞|푞|푞 +푟|푟|푟 +푠|푠|푠 +푡|푡|푡 +푢|푢|푢 +푣|푣|푣 +푤|푤|푤 +푥|푥|푥 +푦|푦|푦 +푧|푧|푧 +푨|푨|푨 +푩|푩|푩 +푪|푪|푪 +푫|푫|푫 +푬|푬|푬 +푭|푭|푭 +푮|푮|푮 +푯|푯|푯 +푰|푰|푰 +푱|푱|푱 +푲|푲|푲 +푳|푳|푳 +푴|푴|푴 +푵|푵|푵 +푶|푶|푶 +푷|푷|푷 +푸|푸|푸 +푹|푹|푹 +푺|푺|푺 +푻|푻|푻 +푼|푼|푼 +푽|푽|푽 +푾|푾|푾 +푿|푿|푿 +풀|풀|풀 +풁|풁|풁 +풂|풂|풂 +풃|풃|풃 +풄|풄|풄 +풅|풅|풅 +풆|풆|풆 +풇|풇|풇 +품|품|품 +풉|풉|풉 +풊|풊|풊 +풋|풋|풋 +풌|풌|풌 +풍|풍|풍 +풎|풎|풎 +풏|풏|풏 +풐|풐|풐 +풑|풑|풑 +풒|풒|풒 +풓|풓|풓 +풔|풔|풔 +풕|풕|풕 +풖|풖|풖 +풗|풗|풗 +풘|풘|풘 +풙|풙|풙 +풚|풚|풚 +풛|풛|풛 +풜|풜|풜 +풝|풝|풝 +풞|풞|풞 +풟|풟|풟 +풠|풠|풠 +풡|풡|풡 +풢|풢|풢 +풣|풣|풣 +풤|풤|풤 +풥|풥|풥 +풦|풦|풦 +풧|풧|풧 +풨|풨|풨 +풩|풩|풩 +풪|풪|풪 +풫|풫|풫 +풬|풬|풬 +풭|풭|풭 +풮|풮|풮 +풯|풯|풯 +풰|풰|풰 +풱|풱|풱 +풲|풲|풲 +풳|풳|풳 +풴|풴|풴 +풵|풵|풵 +풶|풶|풶 +풷|풷|풷 +풸|풸|풸 +풹|풹|풹 +풺|풺|풺 +풻|풻|풻 +풼|풼|풼 +풽|풽|풽 +풾|풾|풾 +풿|풿|풿 +퓀|퓀|퓀 +퓁|퓁|퓁 +퓂|퓂|퓂 +퓃|퓃|퓃 +퓄|퓄|퓄 +퓅|퓅|퓅 +퓆|퓆|퓆 +퓇|퓇|퓇 +퓈|퓈|퓈 +퓉|퓉|퓉 +퓊|퓊|퓊 +퓋|퓋|퓋 +퓌|퓌|퓌 +퓍|퓍|퓍 +퓎|퓎|퓎 +퓏|퓏|퓏 +퓐|퓐|퓐 +퓑|퓑|퓑 +퓒|퓒|퓒 +퓓|퓓|퓓 +퓔|퓔|퓔 +퓕|퓕|퓕 +퓖|퓖|퓖 +퓗|퓗|퓗 +퓘|퓘|퓘 +퓙|퓙|퓙 +퓚|퓚|퓚 +퓛|퓛|퓛 +퓜|퓜|퓜 +퓝|퓝|퓝 +퓞|퓞|퓞 +퓟|퓟|퓟 +퓠|퓠|퓠 +퓡|퓡|퓡 +퓢|퓢|퓢 +퓣|퓣|퓣 +퓤|퓤|퓤 +퓥|퓥|퓥 +퓦|퓦|퓦 +퓧|퓧|퓧 +퓨|퓨|퓨 +퓩|퓩|퓩 +퓪|퓪|퓪 +퓫|퓫|퓫 +퓬|퓬|퓬 +퓭|퓭|퓭 +퓮|퓮|퓮 +퓯|퓯|퓯 +퓰|퓰|퓰 +퓱|퓱|퓱 +퓲|퓲|퓲 +퓳|퓳|퓳 +퓴|퓴|퓴 +퓵|퓵|퓵 +퓶|퓶|퓶 +퓷|퓷|퓷 +퓸|퓸|퓸 +퓹|퓹|퓹 +퓺|퓺|퓺 +퓻|퓻|퓻 +퓼|퓼|퓼 +퓽|퓽|퓽 +퓾|퓾|퓾 +퓿|퓿|퓿 +픀|픀|픀 +픁|픁|픁 +픂|픂|픂 +픃|픃|픃 +프|프|프 +픅|픅|픅 +픆|픆|픆 +픇|픇|픇 +픈|픈|픈 +픉|픉|픉 +픊|픊|픊 +픋|픋|픋 +플|플|플 +픍|픍|픍 +픎|픎|픎 +픏|픏|픏 +픐|픐|픐 +픑|픑|픑 +픒|픒|픒 +픓|픓|픓 +픔|픔|픔 +픕|픕|픕 +픖|픖|픖 +픗|픗|픗 +픘|픘|픘 +픙|픙|픙 +픚|픚|픚 +픛|픛|픛 +픜|픜|픜 +픝|픝|픝 +픞|픞|픞 +픟|픟|픟 +픠|픠|픠 +픡|픡|픡 +픢|픢|픢 +픣|픣|픣 +픤|픤|픤 +픥|픥|픥 +픦|픦|픦 +픧|픧|픧 +픨|픨|픨 +픩|픩|픩 +픪|픪|픪 +픫|픫|픫 +픬|픬|픬 +픭|픭|픭 +픮|픮|픮 +픯|픯|픯 +픰|픰|픰 +픱|픱|픱 +픲|픲|픲 +픳|픳|픳 +픴|픴|픴 +픵|픵|픵 +픶|픶|픶 +픷|픷|픷 +픸|픸|픸 +픹|픹|픹 +픺|픺|픺 +픻|픻|픻 +피|피|피 +픽|픽|픽 +픾|픾|픾 +픿|픿|픿 +핀|핀|핀 +핁|핁|핁 +핂|핂|핂 +핃|핃|핃 +필|필|필 +핅|핅|핅 +핆|핆|핆 +핇|핇|핇 +핈|핈|핈 +핉|핉|핉 +핊|핊|핊 +핋|핋|핋 +핌|핌|핌 +핍|핍|핍 +핎|핎|핎 +핏|핏|핏 +핐|핐|핐 +핑|핑|핑 +핒|핒|핒 +핓|핓|핓 +핔|핔|핔 +핕|핕|핕 +핖|핖|핖 +핗|핗|핗 +하|하|하 +학|학|학 +핚|핚|핚 +핛|핛|핛 +한|한|한 +핝|핝|핝 +핞|핞|핞 +핟|핟|핟 +할|할|할 +핡|핡|핡 +핢|핢|핢 +핣|핣|핣 +핤|핤|핤 +핥|핥|핥 +핦|핦|핦 +핧|핧|핧 +함|함|함 +합|합|합 +핪|핪|핪 +핫|핫|핫 +핬|핬|핬 +항|항|항 +핮|핮|핮 +핯|핯|핯 +핰|핰|핰 +핱|핱|핱 +핲|핲|핲 +핳|핳|핳 +해|해|해 +핵|핵|핵 +핶|핶|핶 +핷|핷|핷 +핸|핸|핸 +핹|핹|핹 +핺|핺|핺 +핻|핻|핻 +핼|핼|핼 +핽|핽|핽 +핾|핾|핾 +핿|핿|핿 +햀|햀|햀 +햁|햁|햁 +햂|햂|햂 +햃|햃|햃 +햄|햄|햄 +햅|햅|햅 +햆|햆|햆 +햇|햇|햇 +했|했|했 +행|행|행 +햊|햊|햊 +햋|햋|햋 +햌|햌|햌 +햍|햍|햍 +햎|햎|햎 +햏|햏|햏 +햐|햐|햐 +햑|햑|햑 +햒|햒|햒 +햓|햓|햓 +햔|햔|햔 +햕|햕|햕 +햖|햖|햖 +햗|햗|햗 +햘|햘|햘 +햙|햙|햙 +햚|햚|햚 +햛|햛|햛 +햜|햜|햜 +햝|햝|햝 +햞|햞|햞 +햟|햟|햟 +햠|햠|햠 +햡|햡|햡 +햢|햢|햢 +햣|햣|햣 +햤|햤|햤 +향|향|향 +햦|햦|햦 +햧|햧|햧 +햨|햨|햨 +햩|햩|햩 +햪|햪|햪 +햫|햫|햫 +햬|햬|햬 +햭|햭|햭 +햮|햮|햮 +햯|햯|햯 +햰|햰|햰 +햱|햱|햱 +햲|햲|햲 +햳|햳|햳 +햴|햴|햴 +햵|햵|햵 +햶|햶|햶 +햷|햷|햷 +햸|햸|햸 +햹|햹|햹 +햺|햺|햺 +햻|햻|햻 +햼|햼|햼 +햽|햽|햽 +햾|햾|햾 +햿|햿|햿 +헀|헀|헀 +헁|헁|헁 +헂|헂|헂 +헃|헃|헃 +헄|헄|헄 +헅|헅|헅 +헆|헆|헆 +헇|헇|헇 +허|허|허 +헉|헉|헉 +헊|헊|헊 +헋|헋|헋 +헌|헌|헌 +헍|헍|헍 +헎|헎|헎 +헏|헏|헏 +헐|헐|헐 +헑|헑|헑 +헒|헒|헒 +헓|헓|헓 +헔|헔|헔 +헕|헕|헕 +헖|헖|헖 +헗|헗|헗 +험|험|험 +헙|헙|헙 +헚|헚|헚 +헛|헛|헛 +헜|헜|헜 +헝|헝|헝 +헞|헞|헞 +헟|헟|헟 +헠|헠|헠 +헡|헡|헡 +헢|헢|헢 +헣|헣|헣 +헤|헤|헤 +헥|헥|헥 +헦|헦|헦 +헧|헧|헧 +헨|헨|헨 +헩|헩|헩 +헪|헪|헪 +헫|헫|헫 +헬|헬|헬 +헭|헭|헭 +헮|헮|헮 +헯|헯|헯 +헰|헰|헰 +헱|헱|헱 +헲|헲|헲 +헳|헳|헳 +헴|헴|헴 +헵|헵|헵 +헶|헶|헶 +헷|헷|헷 +헸|헸|헸 +헹|헹|헹 +헺|헺|헺 +헻|헻|헻 +헼|헼|헼 +헽|헽|헽 +헾|헾|헾 +헿|헿|헿 +혀|혀|혀 +혁|혁|혁 +혂|혂|혂 +혃|혃|혃 +현|현|현 +혅|혅|혅 +혆|혆|혆 +혇|혇|혇 +혈|혈|혈 +혉|혉|혉 +혊|혊|혊 +혋|혋|혋 +혌|혌|혌 +혍|혍|혍 +혎|혎|혎 +혏|혏|혏 +혐|혐|혐 +협|협|협 +혒|혒|혒 +혓|혓|혓 +혔|혔|혔 +형|형|형 +혖|혖|혖 +혗|혗|혗 +혘|혘|혘 +혙|혙|혙 +혚|혚|혚 +혛|혛|혛 +혜|혜|혜 +혝|혝|혝 +혞|혞|혞 +혟|혟|혟 +혠|혠|혠 +혡|혡|혡 +혢|혢|혢 +혣|혣|혣 +혤|혤|혤 +혥|혥|혥 +혦|혦|혦 +혧|혧|혧 +혨|혨|혨 +혩|혩|혩 +혪|혪|혪 +혫|혫|혫 +혬|혬|혬 +혭|혭|혭 +혮|혮|혮 +혯|혯|혯 +혰|혰|혰 +혱|혱|혱 +혲|혲|혲 +혳|혳|혳 +혴|혴|혴 +혵|혵|혵 +혶|혶|혶 +혷|혷|혷 +호|호|호 +혹|혹|혹 +혺|혺|혺 +혻|혻|혻 +혼|혼|혼 +혽|혽|혽 +혾|혾|혾 +혿|혿|혿 +홀|홀|홀 +홁|홁|홁 +홂|홂|홂 +홃|홃|홃 +홄|홄|홄 +홅|홅|홅 +홆|홆|홆 +홇|홇|홇 +홈|홈|홈 +홉|홉|홉 +홊|홊|홊 +홋|홋|홋 +홌|홌|홌 +홍|홍|홍 +홎|홎|홎 +홏|홏|홏 +홐|홐|홐 +홑|홑|홑 +홒|홒|홒 +홓|홓|홓 +화|화|화 +확|확|확 +홖|홖|홖 +홗|홗|홗 +환|환|환 +홙|홙|홙 +홚|홚|홚 +홛|홛|홛 +활|활|활 +홝|홝|홝 +홞|홞|홞 +홟|홟|홟 +홠|홠|홠 +홡|홡|홡 +홢|홢|홢 +홣|홣|홣 +홤|홤|홤 +홥|홥|홥 +홦|홦|홦 +홧|홧|홧 +홨|홨|홨 +황|황|황 +홪|홪|홪 +홫|홫|홫 +홬|홬|홬 +홭|홭|홭 +홮|홮|홮 +홯|홯|홯 +홰|홰|홰 +홱|홱|홱 +홲|홲|홲 +홳|홳|홳 +홴|홴|홴 +홵|홵|홵 +홶|홶|홶 +홷|홷|홷 +홸|홸|홸 +홹|홹|홹 +홺|홺|홺 +홻|홻|홻 +홼|홼|홼 +홽|홽|홽 +홾|홾|홾 +홿|홿|홿 +횀|횀|횀 +횁|횁|횁 +횂|횂|횂 +횃|횃|횃 +횄|횄|횄 +횅|횅|횅 +횆|횆|횆 +횇|횇|횇 +횈|횈|횈 +횉|횉|횉 +횊|횊|횊 +횋|횋|횋 +회|회|회 +획|획|획 +횎|횎|횎 +횏|횏|횏 +횐|횐|횐 +횑|횑|횑 +횒|횒|횒 +횓|횓|횓 +횔|횔|횔 +횕|횕|횕 +횖|횖|횖 +횗|횗|횗 +횘|횘|횘 +횙|횙|횙 +횚|횚|횚 +횛|횛|횛 +횜|횜|횜 +횝|횝|횝 +횞|횞|횞 +횟|횟|횟 +횠|횠|횠 +횡|횡|횡 +횢|횢|횢 +횣|횣|횣 +횤|횤|횤 +횥|횥|횥 +횦|횦|횦 +횧|횧|횧 +효|효|효 +횩|횩|횩 +횪|횪|횪 +횫|횫|횫 +횬|횬|횬 +횭|횭|횭 +횮|횮|횮 +횯|횯|횯 +횰|횰|횰 +횱|횱|횱 +횲|횲|횲 +횳|횳|횳 +횴|횴|횴 +횵|횵|횵 +횶|횶|횶 +횷|횷|횷 +횸|횸|횸 +횹|횹|횹 +횺|횺|횺 +횻|횻|횻 +횼|횼|횼 +횽|횽|횽 +횾|횾|횾 +횿|횿|횿 +훀|훀|훀 +훁|훁|훁 +훂|훂|훂 +훃|훃|훃 +후|후|후 +훅|훅|훅 +훆|훆|훆 +훇|훇|훇 +훈|훈|훈 +훉|훉|훉 +훊|훊|훊 +훋|훋|훋 +훌|훌|훌 +훍|훍|훍 +훎|훎|훎 +훏|훏|훏 +훐|훐|훐 +훑|훑|훑 +훒|훒|훒 +훓|훓|훓 +훔|훔|훔 +훕|훕|훕 +훖|훖|훖 +훗|훗|훗 +훘|훘|훘 +훙|훙|훙 +훚|훚|훚 +훛|훛|훛 +훜|훜|훜 +훝|훝|훝 +훞|훞|훞 +훟|훟|훟 +훠|훠|훠 +훡|훡|훡 +훢|훢|훢 +훣|훣|훣 +훤|훤|훤 +훥|훥|훥 +훦|훦|훦 +훧|훧|훧 +훨|훨|훨 +훩|훩|훩 +훪|훪|훪 +훫|훫|훫 +훬|훬|훬 +훭|훭|훭 +훮|훮|훮 +훯|훯|훯 +훰|훰|훰 +훱|훱|훱 +훲|훲|훲 +훳|훳|훳 +훴|훴|훴 +훵|훵|훵 +훶|훶|훶 +훷|훷|훷 +훸|훸|훸 +훹|훹|훹 +훺|훺|훺 +훻|훻|훻 +훼|훼|훼 +훽|훽|훽 +훾|훾|훾 +훿|훿|훿 +휀|휀|휀 +휁|휁|휁 +휂|휂|휂 +휃|휃|휃 +휄|휄|휄 +휅|휅|휅 +휆|휆|휆 +휇|휇|휇 +휈|휈|휈 +휉|휉|휉 +휊|휊|휊 +휋|휋|휋 +휌|휌|휌 +휍|휍|휍 +휎|휎|휎 +휏|휏|휏 +휐|휐|휐 +휑|휑|휑 +휒|휒|휒 +휓|휓|휓 +휔|휔|휔 +휕|휕|휕 +휖|휖|휖 +휗|휗|휗 +휘|휘|휘 +휙|휙|휙 +휚|휚|휚 +휛|휛|휛 +휜|휜|휜 +휝|휝|휝 +휞|휞|휞 +휟|휟|휟 +휠|휠|휠 +휡|휡|휡 +휢|휢|휢 +휣|휣|휣 +휤|휤|휤 +휥|휥|휥 +휦|휦|휦 +휧|휧|휧 +휨|휨|휨 +휩|휩|휩 +휪|휪|휪 +휫|휫|휫 +휬|휬|휬 +휭|휭|휭 +휮|휮|휮 +휯|휯|휯 +휰|휰|휰 +휱|휱|휱 +휲|휲|휲 +휳|휳|휳 +휴|휴|휴 +휵|휵|휵 +휶|휶|휶 +휷|휷|휷 +휸|휸|휸 +휹|휹|휹 +휺|휺|휺 +휻|휻|휻 +휼|휼|휼 +휽|휽|휽 +휾|휾|휾 +휿|휿|휿 +흀|흀|흀 +흁|흁|흁 +흂|흂|흂 +흃|흃|흃 +흄|흄|흄 +흅|흅|흅 +흆|흆|흆 +흇|흇|흇 +흈|흈|흈 +흉|흉|흉 +흊|흊|흊 +흋|흋|흋 +흌|흌|흌 +흍|흍|흍 +흎|흎|흎 +흏|흏|흏 +흐|흐|흐 +흑|흑|흑 +흒|흒|흒 +흓|흓|흓 +흔|흔|흔 +흕|흕|흕 +흖|흖|흖 +흗|흗|흗 +흘|흘|흘 +흙|흙|흙 +흚|흚|흚 +흛|흛|흛 +흜|흜|흜 +흝|흝|흝 +흞|흞|흞 +흟|흟|흟 +흠|흠|흠 +흡|흡|흡 +흢|흢|흢 +흣|흣|흣 +흤|흤|흤 +흥|흥|흥 +흦|흦|흦 +흧|흧|흧 +흨|흨|흨 +흩|흩|흩 +흪|흪|흪 +흫|흫|흫 +희|희|희 +흭|흭|흭 +흮|흮|흮 +흯|흯|흯 +흰|흰|흰 +흱|흱|흱 +흲|흲|흲 +흳|흳|흳 +흴|흴|흴 +흵|흵|흵 +흶|흶|흶 +흷|흷|흷 +흸|흸|흸 +흹|흹|흹 +흺|흺|흺 +흻|흻|흻 +흼|흼|흼 +흽|흽|흽 +흾|흾|흾 +흿|흿|흿 +힀|힀|힀 +힁|힁|힁 +힂|힂|힂 +힃|힃|힃 +힄|힄|힄 +힅|힅|힅 +힆|힆|힆 +힇|힇|힇 +히|히|히 +힉|힉|힉 +힊|힊|힊 +힋|힋|힋 +힌|힌|힌 +힍|힍|힍 +힎|힎|힎 +힏|힏|힏 +힐|힐|힐 +힑|힑|힑 +힒|힒|힒 +힓|힓|힓 +힔|힔|힔 +힕|힕|힕 +힖|힖|힖 +힗|힗|힗 +힘|힘|힘 +힙|힙|힙 +힚|힚|힚 +힛|힛|힛 +힜|힜|힜 +힝|힝|힝 +힞|힞|힞 +힟|힟|힟 +힠|힠|힠 +힡|힡|힡 +힢|힢|힢 +힣|힣|힣 +豈|豈|豈 +更|更|更 +車|車|車 +賈|賈|賈 +滑|滑|滑 +串|串|串 +句|句|句 +龜|龜|龜 +龜|龜|龜 +契|契|契 +金|金|金 +喇|喇|喇 +奈|奈|奈 +懶|懶|懶 +癩|癩|癩 +羅|羅|羅 +蘿|蘿|蘿 +螺|螺|螺 +裸|裸|裸 +邏|邏|邏 +樂|樂|樂 +洛|洛|洛 +烙|烙|烙 +珞|珞|珞 +落|落|落 +酪|酪|酪 +駱|駱|駱 +亂|亂|亂 +卵|卵|卵 +欄|欄|欄 +爛|爛|爛 +蘭|蘭|蘭 +鸞|鸞|鸞 +嵐|嵐|嵐 +濫|濫|濫 +藍|藍|藍 +襤|襤|襤 +拉|拉|拉 +臘|臘|臘 +蠟|蠟|蠟 +廊|廊|廊 +朗|朗|朗 +浪|浪|浪 +狼|狼|狼 +郎|郎|郎 +來|來|來 +冷|冷|冷 +勞|勞|勞 +擄|擄|擄 +櫓|櫓|櫓 +爐|爐|爐 +盧|盧|盧 +老|老|老 +蘆|蘆|蘆 +虜|虜|虜 +路|路|路 +露|露|露 +魯|魯|魯 +鷺|鷺|鷺 +碌|碌|碌 +祿|祿|祿 +綠|綠|綠 +菉|菉|菉 +錄|錄|錄 +鹿|鹿|鹿 +論|論|論 +壟|壟|壟 +弄|弄|弄 +籠|籠|籠 +聾|聾|聾 +牢|牢|牢 +磊|磊|磊 +賂|賂|賂 +雷|雷|雷 +壘|壘|壘 +屢|屢|屢 +樓|樓|樓 +淚|淚|淚 +漏|漏|漏 +累|累|累 +縷|縷|縷 +陋|陋|陋 +勒|勒|勒 +肋|肋|肋 +凜|凜|凜 +凌|凌|凌 +稜|稜|稜 +綾|綾|綾 +菱|菱|菱 +陵|陵|陵 +讀|讀|讀 +拏|拏|拏 +樂|樂|樂 +諾|諾|諾 +丹|丹|丹 +寧|寧|寧 +怒|怒|怒 +率|率|率 +異|異|異 +北|北|北 +磻|磻|磻 +便|便|便 +復|復|復 +不|不|不 +泌|泌|泌 +數|數|數 +索|索|索 +參|參|參 +塞|塞|塞 +省|省|省 +葉|葉|葉 +說|說|說 +殺|殺|殺 +辰|辰|辰 +沈|沈|沈 +拾|拾|拾 +若|若|若 +掠|掠|掠 +略|略|略 +亮|亮|亮 +兩|兩|兩 +凉|凉|凉 +梁|梁|梁 +糧|糧|糧 +良|良|良 +諒|諒|諒 +量|量|量 +勵|勵|勵 +呂|呂|呂 +女|女|女 +廬|廬|廬 +旅|旅|旅 +濾|濾|濾 +礪|礪|礪 +閭|閭|閭 +驪|驪|驪 +麗|麗|麗 +黎|黎|黎 +力|力|力 +曆|曆|曆 +歷|歷|歷 +轢|轢|轢 +年|年|年 +憐|憐|憐 +戀|戀|戀 +撚|撚|撚 +漣|漣|漣 +煉|煉|煉 +璉|璉|璉 +秊|秊|秊 +練|練|練 +聯|聯|聯 +輦|輦|輦 +蓮|蓮|蓮 +連|連|連 +鍊|鍊|鍊 +列|列|列 +劣|劣|劣 +咽|咽|咽 +烈|烈|烈 +裂|裂|裂 +說|說|說 +廉|廉|廉 +念|念|念 +捻|捻|捻 +殮|殮|殮 +簾|簾|簾 +獵|獵|獵 +令|令|令 +囹|囹|囹 +寧|寧|寧 +嶺|嶺|嶺 +怜|怜|怜 +玲|玲|玲 +瑩|瑩|瑩 +羚|羚|羚 +聆|聆|聆 +鈴|鈴|鈴 +零|零|零 +靈|靈|靈 +領|領|領 +例|例|例 +禮|禮|禮 +醴|醴|醴 +隸|隸|隸 +惡|惡|惡 +了|了|了 +僚|僚|僚 +寮|寮|寮 +尿|尿|尿 +料|料|料 +樂|樂|樂 +燎|燎|燎 +療|療|療 +蓼|蓼|蓼 +遼|遼|遼 +龍|龍|龍 +暈|暈|暈 +阮|阮|阮 +劉|劉|劉 +杻|杻|杻 +柳|柳|柳 +流|流|流 +溜|溜|溜 +琉|琉|琉 +留|留|留 +硫|硫|硫 +紐|紐|紐 +類|類|類 +六|六|六 +戮|戮|戮 +陸|陸|陸 +倫|倫|倫 +崙|崙|崙 +淪|淪|淪 +輪|輪|輪 +律|律|律 +慄|慄|慄 +栗|栗|栗 +率|率|率 +隆|隆|隆 +利|利|利 +吏|吏|吏 +履|履|履 +易|易|易 +李|李|李 +梨|梨|梨 +泥|泥|泥 +理|理|理 +痢|痢|痢 +罹|罹|罹 +裏|裏|裏 +裡|裡|裡 +里|里|里 +離|離|離 +匿|匿|匿 +溺|溺|溺 +吝|吝|吝 +燐|燐|燐 +璘|璘|璘 +藺|藺|藺 +隣|隣|隣 +鱗|鱗|鱗 +麟|麟|麟 +林|林|林 +淋|淋|淋 +臨|臨|臨 +立|立|立 +笠|笠|笠 +粒|粒|粒 +狀|狀|狀 +炙|炙|炙 +識|識|識 +什|什|什 +茶|茶|茶 +刺|刺|刺 +切|切|切 +度|度|度 +拓|拓|拓 +糖|糖|糖 +宅|宅|宅 +洞|洞|洞 +暴|暴|暴 +輻|輻|輻 +行|行|行 +降|降|降 +見|見|見 +廓|廓|廓 +兀|兀|兀 +嗀|嗀|嗀 +塚|塚|塚 +晴|晴|晴 +凞|凞|凞 +猪|猪|猪 +益|益|益 +礼|礼|礼 +神|神|神 +祥|祥|祥 +福|福|福 +靖|靖|靖 +精|精|精 +羽|羽|羽 +蘒|蘒|蘒 +諸|諸|諸 +逸|逸|逸 +都|都|都 +飯|飯|飯 +飼|飼|飼 +館|館|館 +鶴|鶴|鶴 +郞|郞|郞 +隷|隷|隷 +侮|侮|侮 +僧|僧|僧 +免|免|免 +勉|勉|勉 +勤|勤|勤 +卑|卑|卑 +喝|喝|喝 +嘆|嘆|嘆 +器|器|器 +塀|塀|塀 +墨|墨|墨 +層|層|層 +屮|屮|屮 +悔|悔|悔 +慨|慨|慨 +憎|憎|憎 +懲|懲|懲 +敏|敏|敏 +既|既|既 +暑|暑|暑 +梅|梅|梅 +海|海|海 +渚|渚|渚 +漢|漢|漢 +煮|煮|煮 +爫|爫|爫 +琢|琢|琢 +碑|碑|碑 +社|社|社 +祉|祉|祉 +祈|祈|祈 +祐|祐|祐 +祖|祖|祖 +祝|祝|祝 +禍|禍|禍 +禎|禎|禎 +穀|穀|穀 +突|突|突 +節|節|節 +練|練|練 +縉|縉|縉 +繁|繁|繁 +署|署|署 +者|者|者 +臭|臭|臭 +艹|艹|艹 +艹|艹|艹 +著|著|著 +褐|褐|褐 +視|視|視 +謁|謁|謁 +謹|謹|謹 +賓|賓|賓 +贈|贈|贈 +辶|辶|辶 +逸|逸|逸 +難|難|難 +響|響|響 +頻|頻|頻 +恵|恵|恵 +𤋮|𤋮|𤋮 +舘|舘|舘 +並|並|並 +况|况|况 +全|全|全 +侀|侀|侀 +充|充|充 +冀|冀|冀 +勇|勇|勇 +勺|勺|勺 +喝|喝|喝 +啕|啕|啕 +喙|喙|喙 +嗢|嗢|嗢 +塚|塚|塚 +墳|墳|墳 +奄|奄|奄 +奔|奔|奔 +婢|婢|婢 +嬨|嬨|嬨 +廒|廒|廒 +廙|廙|廙 +彩|彩|彩 +徭|徭|徭 +惘|惘|惘 +慎|慎|慎 +愈|愈|愈 +憎|憎|憎 +慠|慠|慠 +懲|懲|懲 +戴|戴|戴 +揄|揄|揄 +搜|搜|搜 +摒|摒|摒 +敖|敖|敖 +晴|晴|晴 +朗|朗|朗 +望|望|望 +杖|杖|杖 +歹|歹|歹 +殺|殺|殺 +流|流|流 +滛|滛|滛 +滋|滋|滋 +漢|漢|漢 +瀞|瀞|瀞 +煮|煮|煮 +瞧|瞧|瞧 +爵|爵|爵 +犯|犯|犯 +猪|猪|猪 +瑱|瑱|瑱 +甆|甆|甆 +画|画|画 +瘝|瘝|瘝 +瘟|瘟|瘟 +益|益|益 +盛|盛|盛 +直|直|直 +睊|睊|睊 +着|着|着 +磌|磌|磌 +窱|窱|窱 +節|節|節 +类|类|类 +絛|絛|絛 +練|練|練 +缾|缾|缾 +者|者|者 +荒|荒|荒 +華|華|華 +蝹|蝹|蝹 +襁|襁|襁 +覆|覆|覆 +視|視|視 +調|調|調 +諸|諸|諸 +請|請|請 +謁|謁|謁 +諾|諾|諾 +諭|諭|諭 +謹|謹|謹 +變|變|變 +贈|贈|贈 +輸|輸|輸 +遲|遲|遲 +醙|醙|醙 +鉶|鉶|鉶 +陼|陼|陼 +難|難|難 +靖|靖|靖 +韛|韛|韛 +響|響|響 +頋|頋|頋 +頻|頻|頻 +鬒|鬒|鬒 +龜|龜|龜 +𢡊|𢡊|𢡊 +𢡄|𢡄|𢡄 +𣏕|𣏕|𣏕 +㮝|㮝|㮝 +䀘|䀘|䀘 +䀹|䀹|䀹 +𥉉|𥉉|𥉉 +𥳐|𥳐|𥳐 +𧻓|𧻓|𧻓 +齃|齃|齃 +龎|龎|龎 +ff|ff|ff +fi|fi|fi +fl|fl|fl +ffi|ffi|ffi +ffl|ffl|ffl +ſt|ſt|ſt +st|st|st +ﬓ|ﬓ|ﬓ +ﬔ|ﬔ|ﬔ +ﬕ|ﬕ|ﬕ +ﬖ|ﬖ|ﬖ +ﬗ|ﬗ|ﬗ +יִ|יִ|יִ +ײַ|ײַ|ײַ +ﬠ|ﬠ|ﬠ +ﬡ|ﬡ|ﬡ +ﬢ|ﬢ|ﬢ +ﬣ|ﬣ|ﬣ +ﬤ|ﬤ|ﬤ +ﬥ|ﬥ|ﬥ +ﬦ|ﬦ|ﬦ +ﬧ|ﬧ|ﬧ +ﬨ|ﬨ|ﬨ +﬩|﬩|﬩ +שׁ|שׁ|שׁ +שׂ|שׂ|שׂ +שּׁ|שּׁ|שּׁ +שּׂ|שּׂ|שּׂ +אַ|אַ|אַ +אָ|אָ|אָ +אּ|אּ|אּ +בּ|בּ|בּ +גּ|גּ|גּ +דּ|דּ|דּ +הּ|הּ|הּ +וּ|וּ|וּ +זּ|זּ|זּ +טּ|טּ|טּ +יּ|יּ|יּ +ךּ|ךּ|ךּ +כּ|כּ|כּ +לּ|לּ|לּ +מּ|מּ|מּ +נּ|נּ|נּ +סּ|סּ|סּ +ףּ|ףּ|ףּ +פּ|פּ|פּ +צּ|צּ|צּ +קּ|קּ|קּ +רּ|רּ|רּ +שּ|שּ|שּ +תּ|תּ|תּ +וֹ|וֹ|וֹ +בֿ|בֿ|בֿ +כֿ|כֿ|כֿ +פֿ|פֿ|פֿ +ﭏ|ﭏ|ﭏ +ﭐ|ﭐ|ﭐ +ﭑ|ﭑ|ﭑ +ﭒ|ﭒ|ﭒ +ﭓ|ﭓ|ﭓ +ﭔ|ﭔ|ﭔ +ﭕ|ﭕ|ﭕ +ﭖ|ﭖ|ﭖ +ﭗ|ﭗ|ﭗ +ﭘ|ﭘ|ﭘ +ﭙ|ﭙ|ﭙ +ﭚ|ﭚ|ﭚ +ﭛ|ﭛ|ﭛ +ﭜ|ﭜ|ﭜ +ﭝ|ﭝ|ﭝ +ﭞ|ﭞ|ﭞ +ﭟ|ﭟ|ﭟ +ﭠ|ﭠ|ﭠ +ﭡ|ﭡ|ﭡ +ﭢ|ﭢ|ﭢ +ﭣ|ﭣ|ﭣ +ﭤ|ﭤ|ﭤ +ﭥ|ﭥ|ﭥ +ﭦ|ﭦ|ﭦ +ﭧ|ﭧ|ﭧ +ﭨ|ﭨ|ﭨ +ﭩ|ﭩ|ﭩ +ﭪ|ﭪ|ﭪ +ﭫ|ﭫ|ﭫ +ﭬ|ﭬ|ﭬ +ﭭ|ﭭ|ﭭ +ﭮ|ﭮ|ﭮ +ﭯ|ﭯ|ﭯ +ﭰ|ﭰ|ﭰ +ﭱ|ﭱ|ﭱ +ﭲ|ﭲ|ﭲ +ﭳ|ﭳ|ﭳ +ﭴ|ﭴ|ﭴ +ﭵ|ﭵ|ﭵ +ﭶ|ﭶ|ﭶ +ﭷ|ﭷ|ﭷ +ﭸ|ﭸ|ﭸ +ﭹ|ﭹ|ﭹ +ﭺ|ﭺ|ﭺ +ﭻ|ﭻ|ﭻ +ﭼ|ﭼ|ﭼ +ﭽ|ﭽ|ﭽ +ﭾ|ﭾ|ﭾ +ﭿ|ﭿ|ﭿ +ﮀ|ﮀ|ﮀ +ﮁ|ﮁ|ﮁ +ﮂ|ﮂ|ﮂ +ﮃ|ﮃ|ﮃ +ﮄ|ﮄ|ﮄ +ﮅ|ﮅ|ﮅ +ﮆ|ﮆ|ﮆ +ﮇ|ﮇ|ﮇ +ﮈ|ﮈ|ﮈ +ﮉ|ﮉ|ﮉ +ﮊ|ﮊ|ﮊ +ﮋ|ﮋ|ﮋ +ﮌ|ﮌ|ﮌ +ﮍ|ﮍ|ﮍ +ﮎ|ﮎ|ﮎ +ﮏ|ﮏ|ﮏ +ﮐ|ﮐ|ﮐ +ﮑ|ﮑ|ﮑ +ﮒ|ﮒ|ﮒ +ﮓ|ﮓ|ﮓ +ﮔ|ﮔ|ﮔ +ﮕ|ﮕ|ﮕ +ﮖ|ﮖ|ﮖ +ﮗ|ﮗ|ﮗ +ﮘ|ﮘ|ﮘ +ﮙ|ﮙ|ﮙ +ﮚ|ﮚ|ﮚ +ﮛ|ﮛ|ﮛ +ﮜ|ﮜ|ﮜ +ﮝ|ﮝ|ﮝ +ﮞ|ﮞ|ﮞ +ﮟ|ﮟ|ﮟ +ﮠ|ﮠ|ﮠ +ﮡ|ﮡ|ﮡ +ﮢ|ﮢ|ﮢ +ﮣ|ﮣ|ﮣ +ﮤ|ﮤ|ﮤ +ﮥ|ﮥ|ﮥ +ﮦ|ﮦ|ﮦ +ﮧ|ﮧ|ﮧ +ﮨ|ﮨ|ﮨ +ﮩ|ﮩ|ﮩ +ﮪ|ﮪ|ﮪ +ﮫ|ﮫ|ﮫ +ﮬ|ﮬ|ﮬ +ﮭ|ﮭ|ﮭ +ﮮ|ﮮ|ﮮ +ﮯ|ﮯ|ﮯ +ﮰ|ﮰ|ﮰ +ﮱ|ﮱ|ﮱ +ﯓ|ﯓ|ﯓ +ﯔ|ﯔ|ﯔ +ﯕ|ﯕ|ﯕ +ﯖ|ﯖ|ﯖ +ﯗ|ﯗ|ﯗ +ﯘ|ﯘ|ﯘ +ﯙ|ﯙ|ﯙ +ﯚ|ﯚ|ﯚ +ﯛ|ﯛ|ﯛ +ﯜ|ﯜ|ﯜ +ﯝ|ﯝ|ﯝ +ﯞ|ﯞ|ﯞ +ﯟ|ﯟ|ﯟ +ﯠ|ﯠ|ﯠ +ﯡ|ﯡ|ﯡ +ﯢ|ﯢ|ﯢ +ﯣ|ﯣ|ﯣ +ﯤ|ﯤ|ﯤ +ﯥ|ﯥ|ﯥ +ﯦ|ﯦ|ﯦ +ﯧ|ﯧ|ﯧ +ﯨ|ﯨ|ﯨ +ﯩ|ﯩ|ﯩ +ﯪ|ﯪ|ﯪ +ﯫ|ﯫ|ﯫ +ﯬ|ﯬ|ﯬ +ﯭ|ﯭ|ﯭ +ﯮ|ﯮ|ﯮ +ﯯ|ﯯ|ﯯ +ﯰ|ﯰ|ﯰ +ﯱ|ﯱ|ﯱ +ﯲ|ﯲ|ﯲ +ﯳ|ﯳ|ﯳ +ﯴ|ﯴ|ﯴ +ﯵ|ﯵ|ﯵ +ﯶ|ﯶ|ﯶ +ﯷ|ﯷ|ﯷ +ﯸ|ﯸ|ﯸ +ﯹ|ﯹ|ﯹ +ﯺ|ﯺ|ﯺ +ﯻ|ﯻ|ﯻ +ﯼ|ﯼ|ﯼ +ﯽ|ﯽ|ﯽ +ﯾ|ﯾ|ﯾ +ﯿ|ﯿ|ﯿ +ﰀ|ﰀ|ﰀ +ﰁ|ﰁ|ﰁ +ﰂ|ﰂ|ﰂ +ﰃ|ﰃ|ﰃ +ﰄ|ﰄ|ﰄ +ﰅ|ﰅ|ﰅ +ﰆ|ﰆ|ﰆ +ﰇ|ﰇ|ﰇ +ﰈ|ﰈ|ﰈ +ﰉ|ﰉ|ﰉ +ﰊ|ﰊ|ﰊ +ﰋ|ﰋ|ﰋ +ﰌ|ﰌ|ﰌ +ﰍ|ﰍ|ﰍ +ﰎ|ﰎ|ﰎ +ﰏ|ﰏ|ﰏ +ﰐ|ﰐ|ﰐ +ﰑ|ﰑ|ﰑ +ﰒ|ﰒ|ﰒ +ﰓ|ﰓ|ﰓ +ﰔ|ﰔ|ﰔ +ﰕ|ﰕ|ﰕ +ﰖ|ﰖ|ﰖ +ﰗ|ﰗ|ﰗ +ﰘ|ﰘ|ﰘ +ﰙ|ﰙ|ﰙ +ﰚ|ﰚ|ﰚ +ﰛ|ﰛ|ﰛ +ﰜ|ﰜ|ﰜ +ﰝ|ﰝ|ﰝ +ﰞ|ﰞ|ﰞ +ﰟ|ﰟ|ﰟ +ﰠ|ﰠ|ﰠ +ﰡ|ﰡ|ﰡ +ﰢ|ﰢ|ﰢ +ﰣ|ﰣ|ﰣ +ﰤ|ﰤ|ﰤ +ﰥ|ﰥ|ﰥ +ﰦ|ﰦ|ﰦ +ﰧ|ﰧ|ﰧ +ﰨ|ﰨ|ﰨ +ﰩ|ﰩ|ﰩ +ﰪ|ﰪ|ﰪ +ﰫ|ﰫ|ﰫ +ﰬ|ﰬ|ﰬ +ﰭ|ﰭ|ﰭ +ﰮ|ﰮ|ﰮ +ﰯ|ﰯ|ﰯ +ﰰ|ﰰ|ﰰ +ﰱ|ﰱ|ﰱ +ﰲ|ﰲ|ﰲ +ﰳ|ﰳ|ﰳ +ﰴ|ﰴ|ﰴ +ﰵ|ﰵ|ﰵ +ﰶ|ﰶ|ﰶ +ﰷ|ﰷ|ﰷ +ﰸ|ﰸ|ﰸ +ﰹ|ﰹ|ﰹ +ﰺ|ﰺ|ﰺ +ﰻ|ﰻ|ﰻ +ﰼ|ﰼ|ﰼ +ﰽ|ﰽ|ﰽ +ﰾ|ﰾ|ﰾ +ﰿ|ﰿ|ﰿ +ﱀ|ﱀ|ﱀ +ﱁ|ﱁ|ﱁ +ﱂ|ﱂ|ﱂ +ﱃ|ﱃ|ﱃ +ﱄ|ﱄ|ﱄ +ﱅ|ﱅ|ﱅ +ﱆ|ﱆ|ﱆ +ﱇ|ﱇ|ﱇ +ﱈ|ﱈ|ﱈ +ﱉ|ﱉ|ﱉ +ﱊ|ﱊ|ﱊ +ﱋ|ﱋ|ﱋ +ﱌ|ﱌ|ﱌ +ﱍ|ﱍ|ﱍ +ﱎ|ﱎ|ﱎ +ﱏ|ﱏ|ﱏ +ﱐ|ﱐ|ﱐ +ﱑ|ﱑ|ﱑ +ﱒ|ﱒ|ﱒ +ﱓ|ﱓ|ﱓ +ﱔ|ﱔ|ﱔ +ﱕ|ﱕ|ﱕ +ﱖ|ﱖ|ﱖ +ﱗ|ﱗ|ﱗ +ﱘ|ﱘ|ﱘ +ﱙ|ﱙ|ﱙ +ﱚ|ﱚ|ﱚ +ﱛ|ﱛ|ﱛ +ﱜ|ﱜ|ﱜ +ﱝ|ﱝ|ﱝ +ﱞ|ﱞ|ﱞ +ﱟ|ﱟ|ﱟ +ﱠ|ﱠ|ﱠ +ﱡ|ﱡ|ﱡ +ﱢ|ﱢ|ﱢ +ﱣ|ﱣ|ﱣ +ﱤ|ﱤ|ﱤ +ﱥ|ﱥ|ﱥ +ﱦ|ﱦ|ﱦ +ﱧ|ﱧ|ﱧ +ﱨ|ﱨ|ﱨ +ﱩ|ﱩ|ﱩ +ﱪ|ﱪ|ﱪ +ﱫ|ﱫ|ﱫ +ﱬ|ﱬ|ﱬ +ﱭ|ﱭ|ﱭ +ﱮ|ﱮ|ﱮ +ﱯ|ﱯ|ﱯ +ﱰ|ﱰ|ﱰ +ﱱ|ﱱ|ﱱ +ﱲ|ﱲ|ﱲ +ﱳ|ﱳ|ﱳ +ﱴ|ﱴ|ﱴ +ﱵ|ﱵ|ﱵ +ﱶ|ﱶ|ﱶ +ﱷ|ﱷ|ﱷ +ﱸ|ﱸ|ﱸ +ﱹ|ﱹ|ﱹ +ﱺ|ﱺ|ﱺ +ﱻ|ﱻ|ﱻ +ﱼ|ﱼ|ﱼ +ﱽ|ﱽ|ﱽ +ﱾ|ﱾ|ﱾ +ﱿ|ﱿ|ﱿ +ﲀ|ﲀ|ﲀ +ﲁ|ﲁ|ﲁ +ﲂ|ﲂ|ﲂ +ﲃ|ﲃ|ﲃ +ﲄ|ﲄ|ﲄ +ﲅ|ﲅ|ﲅ +ﲆ|ﲆ|ﲆ +ﲇ|ﲇ|ﲇ +ﲈ|ﲈ|ﲈ +ﲉ|ﲉ|ﲉ +ﲊ|ﲊ|ﲊ +ﲋ|ﲋ|ﲋ +ﲌ|ﲌ|ﲌ +ﲍ|ﲍ|ﲍ +ﲎ|ﲎ|ﲎ +ﲏ|ﲏ|ﲏ +ﲐ|ﲐ|ﲐ +ﲑ|ﲑ|ﲑ +ﲒ|ﲒ|ﲒ +ﲓ|ﲓ|ﲓ +ﲔ|ﲔ|ﲔ +ﲕ|ﲕ|ﲕ +ﲖ|ﲖ|ﲖ +ﲗ|ﲗ|ﲗ +ﲘ|ﲘ|ﲘ +ﲙ|ﲙ|ﲙ +ﲚ|ﲚ|ﲚ +ﲛ|ﲛ|ﲛ +ﲜ|ﲜ|ﲜ +ﲝ|ﲝ|ﲝ +ﲞ|ﲞ|ﲞ +ﲟ|ﲟ|ﲟ +ﲠ|ﲠ|ﲠ +ﲡ|ﲡ|ﲡ +ﲢ|ﲢ|ﲢ +ﲣ|ﲣ|ﲣ +ﲤ|ﲤ|ﲤ +ﲥ|ﲥ|ﲥ +ﲦ|ﲦ|ﲦ +ﲧ|ﲧ|ﲧ +ﲨ|ﲨ|ﲨ +ﲩ|ﲩ|ﲩ +ﲪ|ﲪ|ﲪ +ﲫ|ﲫ|ﲫ +ﲬ|ﲬ|ﲬ +ﲭ|ﲭ|ﲭ +ﲮ|ﲮ|ﲮ +ﲯ|ﲯ|ﲯ +ﲰ|ﲰ|ﲰ +ﲱ|ﲱ|ﲱ +ﲲ|ﲲ|ﲲ +ﲳ|ﲳ|ﲳ +ﲴ|ﲴ|ﲴ +ﲵ|ﲵ|ﲵ +ﲶ|ﲶ|ﲶ +ﲷ|ﲷ|ﲷ +ﲸ|ﲸ|ﲸ +ﲹ|ﲹ|ﲹ +ﲺ|ﲺ|ﲺ +ﲻ|ﲻ|ﲻ +ﲼ|ﲼ|ﲼ +ﲽ|ﲽ|ﲽ +ﲾ|ﲾ|ﲾ +ﲿ|ﲿ|ﲿ +ﳀ|ﳀ|ﳀ +ﳁ|ﳁ|ﳁ +ﳂ|ﳂ|ﳂ +ﳃ|ﳃ|ﳃ +ﳄ|ﳄ|ﳄ +ﳅ|ﳅ|ﳅ +ﳆ|ﳆ|ﳆ +ﳇ|ﳇ|ﳇ +ﳈ|ﳈ|ﳈ +ﳉ|ﳉ|ﳉ +ﳊ|ﳊ|ﳊ +ﳋ|ﳋ|ﳋ +ﳌ|ﳌ|ﳌ +ﳍ|ﳍ|ﳍ +ﳎ|ﳎ|ﳎ +ﳏ|ﳏ|ﳏ +ﳐ|ﳐ|ﳐ +ﳑ|ﳑ|ﳑ +ﳒ|ﳒ|ﳒ +ﳓ|ﳓ|ﳓ +ﳔ|ﳔ|ﳔ +ﳕ|ﳕ|ﳕ +ﳖ|ﳖ|ﳖ +ﳗ|ﳗ|ﳗ +ﳘ|ﳘ|ﳘ +ﳙ|ﳙ|ﳙ +ﳚ|ﳚ|ﳚ +ﳛ|ﳛ|ﳛ +ﳜ|ﳜ|ﳜ +ﳝ|ﳝ|ﳝ +ﳞ|ﳞ|ﳞ +ﳟ|ﳟ|ﳟ +ﳠ|ﳠ|ﳠ +ﳡ|ﳡ|ﳡ +ﳢ|ﳢ|ﳢ +ﳣ|ﳣ|ﳣ +ﳤ|ﳤ|ﳤ +ﳥ|ﳥ|ﳥ +ﳦ|ﳦ|ﳦ +ﳧ|ﳧ|ﳧ +ﳨ|ﳨ|ﳨ +ﳩ|ﳩ|ﳩ +ﳪ|ﳪ|ﳪ +ﳫ|ﳫ|ﳫ +ﳬ|ﳬ|ﳬ +ﳭ|ﳭ|ﳭ +ﳮ|ﳮ|ﳮ +ﳯ|ﳯ|ﳯ +ﳰ|ﳰ|ﳰ +ﳱ|ﳱ|ﳱ +ﳲ|ﳲ|ﳲ +ﳳ|ﳳ|ﳳ +ﳴ|ﳴ|ﳴ +ﳵ|ﳵ|ﳵ +ﳶ|ﳶ|ﳶ +ﳷ|ﳷ|ﳷ +ﳸ|ﳸ|ﳸ +ﳹ|ﳹ|ﳹ +ﳺ|ﳺ|ﳺ +ﳻ|ﳻ|ﳻ +ﳼ|ﳼ|ﳼ +ﳽ|ﳽ|ﳽ +ﳾ|ﳾ|ﳾ +ﳿ|ﳿ|ﳿ +ﴀ|ﴀ|ﴀ +ﴁ|ﴁ|ﴁ +ﴂ|ﴂ|ﴂ +ﴃ|ﴃ|ﴃ +ﴄ|ﴄ|ﴄ +ﴅ|ﴅ|ﴅ +ﴆ|ﴆ|ﴆ +ﴇ|ﴇ|ﴇ +ﴈ|ﴈ|ﴈ +ﴉ|ﴉ|ﴉ +ﴊ|ﴊ|ﴊ +ﴋ|ﴋ|ﴋ +ﴌ|ﴌ|ﴌ +ﴍ|ﴍ|ﴍ +ﴎ|ﴎ|ﴎ +ﴏ|ﴏ|ﴏ +ﴐ|ﴐ|ﴐ +ﴑ|ﴑ|ﴑ +ﴒ|ﴒ|ﴒ +ﴓ|ﴓ|ﴓ +ﴔ|ﴔ|ﴔ +ﴕ|ﴕ|ﴕ +ﴖ|ﴖ|ﴖ +ﴗ|ﴗ|ﴗ +ﴘ|ﴘ|ﴘ +ﴙ|ﴙ|ﴙ +ﴚ|ﴚ|ﴚ +ﴛ|ﴛ|ﴛ +ﴜ|ﴜ|ﴜ +ﴝ|ﴝ|ﴝ +ﴞ|ﴞ|ﴞ +ﴟ|ﴟ|ﴟ +ﴠ|ﴠ|ﴠ +ﴡ|ﴡ|ﴡ +ﴢ|ﴢ|ﴢ +ﴣ|ﴣ|ﴣ +ﴤ|ﴤ|ﴤ +ﴥ|ﴥ|ﴥ +ﴦ|ﴦ|ﴦ +ﴧ|ﴧ|ﴧ +ﴨ|ﴨ|ﴨ +ﴩ|ﴩ|ﴩ +ﴪ|ﴪ|ﴪ +ﴫ|ﴫ|ﴫ +ﴬ|ﴬ|ﴬ +ﴭ|ﴭ|ﴭ +ﴮ|ﴮ|ﴮ +ﴯ|ﴯ|ﴯ +ﴰ|ﴰ|ﴰ +ﴱ|ﴱ|ﴱ +ﴲ|ﴲ|ﴲ +ﴳ|ﴳ|ﴳ +ﴴ|ﴴ|ﴴ +ﴵ|ﴵ|ﴵ +ﴶ|ﴶ|ﴶ +ﴷ|ﴷ|ﴷ +ﴸ|ﴸ|ﴸ +ﴹ|ﴹ|ﴹ +ﴺ|ﴺ|ﴺ +ﴻ|ﴻ|ﴻ +ﴼ|ﴼ|ﴼ +ﴽ|ﴽ|ﴽ +ﵐ|ﵐ|ﵐ +ﵑ|ﵑ|ﵑ +ﵒ|ﵒ|ﵒ +ﵓ|ﵓ|ﵓ +ﵔ|ﵔ|ﵔ +ﵕ|ﵕ|ﵕ +ﵖ|ﵖ|ﵖ +ﵗ|ﵗ|ﵗ +ﵘ|ﵘ|ﵘ +ﵙ|ﵙ|ﵙ +ﵚ|ﵚ|ﵚ +ﵛ|ﵛ|ﵛ +ﵜ|ﵜ|ﵜ +ﵝ|ﵝ|ﵝ +ﵞ|ﵞ|ﵞ +ﵟ|ﵟ|ﵟ +ﵠ|ﵠ|ﵠ +ﵡ|ﵡ|ﵡ +ﵢ|ﵢ|ﵢ +ﵣ|ﵣ|ﵣ +ﵤ|ﵤ|ﵤ +ﵥ|ﵥ|ﵥ +ﵦ|ﵦ|ﵦ +ﵧ|ﵧ|ﵧ +ﵨ|ﵨ|ﵨ +ﵩ|ﵩ|ﵩ +ﵪ|ﵪ|ﵪ +ﵫ|ﵫ|ﵫ +ﵬ|ﵬ|ﵬ +ﵭ|ﵭ|ﵭ +ﵮ|ﵮ|ﵮ +ﵯ|ﵯ|ﵯ +ﵰ|ﵰ|ﵰ +ﵱ|ﵱ|ﵱ +ﵲ|ﵲ|ﵲ +ﵳ|ﵳ|ﵳ +ﵴ|ﵴ|ﵴ +ﵵ|ﵵ|ﵵ +ﵶ|ﵶ|ﵶ +ﵷ|ﵷ|ﵷ +ﵸ|ﵸ|ﵸ +ﵹ|ﵹ|ﵹ +ﵺ|ﵺ|ﵺ +ﵻ|ﵻ|ﵻ +ﵼ|ﵼ|ﵼ +ﵽ|ﵽ|ﵽ +ﵾ|ﵾ|ﵾ +ﵿ|ﵿ|ﵿ +ﶀ|ﶀ|ﶀ +ﶁ|ﶁ|ﶁ +ﶂ|ﶂ|ﶂ +ﶃ|ﶃ|ﶃ +ﶄ|ﶄ|ﶄ +ﶅ|ﶅ|ﶅ +ﶆ|ﶆ|ﶆ +ﶇ|ﶇ|ﶇ +ﶈ|ﶈ|ﶈ +ﶉ|ﶉ|ﶉ +ﶊ|ﶊ|ﶊ +ﶋ|ﶋ|ﶋ +ﶌ|ﶌ|ﶌ +ﶍ|ﶍ|ﶍ +ﶎ|ﶎ|ﶎ +ﶏ|ﶏ|ﶏ +ﶒ|ﶒ|ﶒ +ﶓ|ﶓ|ﶓ +ﶔ|ﶔ|ﶔ +ﶕ|ﶕ|ﶕ +ﶖ|ﶖ|ﶖ +ﶗ|ﶗ|ﶗ +ﶘ|ﶘ|ﶘ +ﶙ|ﶙ|ﶙ +ﶚ|ﶚ|ﶚ +ﶛ|ﶛ|ﶛ +ﶜ|ﶜ|ﶜ +ﶝ|ﶝ|ﶝ +ﶞ|ﶞ|ﶞ +ﶟ|ﶟ|ﶟ +ﶠ|ﶠ|ﶠ +ﶡ|ﶡ|ﶡ +ﶢ|ﶢ|ﶢ +ﶣ|ﶣ|ﶣ +ﶤ|ﶤ|ﶤ +ﶥ|ﶥ|ﶥ +ﶦ|ﶦ|ﶦ +ﶧ|ﶧ|ﶧ +ﶨ|ﶨ|ﶨ +ﶩ|ﶩ|ﶩ +ﶪ|ﶪ|ﶪ +ﶫ|ﶫ|ﶫ +ﶬ|ﶬ|ﶬ +ﶭ|ﶭ|ﶭ +ﶮ|ﶮ|ﶮ +ﶯ|ﶯ|ﶯ +ﶰ|ﶰ|ﶰ +ﶱ|ﶱ|ﶱ +ﶲ|ﶲ|ﶲ +ﶳ|ﶳ|ﶳ +ﶴ|ﶴ|ﶴ +ﶵ|ﶵ|ﶵ +ﶶ|ﶶ|ﶶ +ﶷ|ﶷ|ﶷ +ﶸ|ﶸ|ﶸ +ﶹ|ﶹ|ﶹ +ﶺ|ﶺ|ﶺ +ﶻ|ﶻ|ﶻ +ﶼ|ﶼ|ﶼ +ﶽ|ﶽ|ﶽ +ﶾ|ﶾ|ﶾ +ﶿ|ﶿ|ﶿ +ﷀ|ﷀ|ﷀ +ﷁ|ﷁ|ﷁ +ﷂ|ﷂ|ﷂ +ﷃ|ﷃ|ﷃ +ﷄ|ﷄ|ﷄ +ﷅ|ﷅ|ﷅ +ﷆ|ﷆ|ﷆ +ﷇ|ﷇ|ﷇ +ﷰ|ﷰ|ﷰ +ﷱ|ﷱ|ﷱ +ﷲ|ﷲ|ﷲ +ﷳ|ﷳ|ﷳ +ﷴ|ﷴ|ﷴ +ﷵ|ﷵ|ﷵ +ﷶ|ﷶ|ﷶ +ﷷ|ﷷ|ﷷ +ﷸ|ﷸ|ﷸ +ﷹ|ﷹ|ﷹ +ﷺ|ﷺ|ﷺ +ﷻ|ﷻ|ﷻ +﷼|﷼|﷼ +︐|︐|︐ +︑|︑|︑ +︒|︒|︒ +︓|︓|︓ +︔|︔|︔ +︕|︕|︕ +︖|︖|︖ +︗|︗|︗ +︘|︘|︘ +︙|︙|︙ +︰|︰|︰ +︱|︱|︱ +︲|︲|︲ +︳|︳|︳ +︴|︴|︴ +︵|︵|︵ +︶|︶|︶ +︷|︷|︷ +︸|︸|︸ +︹|︹|︹ +︺|︺|︺ +︻|︻|︻ +︼|︼|︼ +︽|︽|︽ +︾|︾|︾ +︿|︿|︿ +﹀|﹀|﹀ +﹁|﹁|﹁ +﹂|﹂|﹂ +﹃|﹃|﹃ +﹄|﹄|﹄ +﹇|﹇|﹇ +﹈|﹈|﹈ +﹉|﹉|﹉ +﹊|﹊|﹊ +﹋|﹋|﹋ +﹌|﹌|﹌ +﹍|﹍|﹍ +﹎|﹎|﹎ +﹏|﹏|﹏ +﹐|﹐|﹐ +﹑|﹑|﹑ +﹒|﹒|﹒ +﹔|﹔|﹔ +﹕|﹕|﹕ +﹖|﹖|﹖ +﹗|﹗|﹗ +﹘|﹘|﹘ +﹙|﹙|﹙ +﹚|﹚|﹚ +﹛|﹛|﹛ +﹜|﹜|﹜ +﹝|﹝|﹝ +﹞|﹞|﹞ +﹟|﹟|﹟ +﹠|﹠|﹠ +﹡|﹡|﹡ +﹢|﹢|﹢ +﹣|﹣|﹣ +﹤|﹤|﹤ +﹥|﹥|﹥ +﹦|﹦|﹦ +﹨|﹨|﹨ +﹩|﹩|﹩ +﹪|﹪|﹪ +﹫|﹫|﹫ +ﹰ|ﹰ|ﹰ +ﹱ|ﹱ|ﹱ +ﹲ|ﹲ|ﹲ +ﹴ|ﹴ|ﹴ +ﹶ|ﹶ|ﹶ +ﹷ|ﹷ|ﹷ +ﹸ|ﹸ|ﹸ +ﹹ|ﹹ|ﹹ +ﹺ|ﹺ|ﹺ +ﹻ|ﹻ|ﹻ +ﹼ|ﹼ|ﹼ +ﹽ|ﹽ|ﹽ +ﹾ|ﹾ|ﹾ +ﹿ|ﹿ|ﹿ +ﺀ|ﺀ|ﺀ +ﺁ|ﺁ|ﺁ +ﺂ|ﺂ|ﺂ +ﺃ|ﺃ|ﺃ +ﺄ|ﺄ|ﺄ +ﺅ|ﺅ|ﺅ +ﺆ|ﺆ|ﺆ +ﺇ|ﺇ|ﺇ +ﺈ|ﺈ|ﺈ +ﺉ|ﺉ|ﺉ +ﺊ|ﺊ|ﺊ +ﺋ|ﺋ|ﺋ +ﺌ|ﺌ|ﺌ +ﺍ|ﺍ|ﺍ +ﺎ|ﺎ|ﺎ +ﺏ|ﺏ|ﺏ +ﺐ|ﺐ|ﺐ +ﺑ|ﺑ|ﺑ +ﺒ|ﺒ|ﺒ +ﺓ|ﺓ|ﺓ +ﺔ|ﺔ|ﺔ +ﺕ|ﺕ|ﺕ +ﺖ|ﺖ|ﺖ +ﺗ|ﺗ|ﺗ +ﺘ|ﺘ|ﺘ +ﺙ|ﺙ|ﺙ +ﺚ|ﺚ|ﺚ +ﺛ|ﺛ|ﺛ +ﺜ|ﺜ|ﺜ +ﺝ|ﺝ|ﺝ +ﺞ|ﺞ|ﺞ +ﺟ|ﺟ|ﺟ +ﺠ|ﺠ|ﺠ +ﺡ|ﺡ|ﺡ +ﺢ|ﺢ|ﺢ +ﺣ|ﺣ|ﺣ +ﺤ|ﺤ|ﺤ +ﺥ|ﺥ|ﺥ +ﺦ|ﺦ|ﺦ +ﺧ|ﺧ|ﺧ +ﺨ|ﺨ|ﺨ +ﺩ|ﺩ|ﺩ +ﺪ|ﺪ|ﺪ +ﺫ|ﺫ|ﺫ +ﺬ|ﺬ|ﺬ +ﺭ|ﺭ|ﺭ +ﺮ|ﺮ|ﺮ +ﺯ|ﺯ|ﺯ +ﺰ|ﺰ|ﺰ +ﺱ|ﺱ|ﺱ +ﺲ|ﺲ|ﺲ +ﺳ|ﺳ|ﺳ +ﺴ|ﺴ|ﺴ +ﺵ|ﺵ|ﺵ +ﺶ|ﺶ|ﺶ +ﺷ|ﺷ|ﺷ +ﺸ|ﺸ|ﺸ +ﺹ|ﺹ|ﺹ +ﺺ|ﺺ|ﺺ +ﺻ|ﺻ|ﺻ +ﺼ|ﺼ|ﺼ +ﺽ|ﺽ|ﺽ +ﺾ|ﺾ|ﺾ +ﺿ|ﺿ|ﺿ +ﻀ|ﻀ|ﻀ +ﻁ|ﻁ|ﻁ +ﻂ|ﻂ|ﻂ +ﻃ|ﻃ|ﻃ +ﻄ|ﻄ|ﻄ +ﻅ|ﻅ|ﻅ +ﻆ|ﻆ|ﻆ +ﻇ|ﻇ|ﻇ +ﻈ|ﻈ|ﻈ +ﻉ|ﻉ|ﻉ +ﻊ|ﻊ|ﻊ +ﻋ|ﻋ|ﻋ +ﻌ|ﻌ|ﻌ +ﻍ|ﻍ|ﻍ +ﻎ|ﻎ|ﻎ +ﻏ|ﻏ|ﻏ +ﻐ|ﻐ|ﻐ +ﻑ|ﻑ|ﻑ +ﻒ|ﻒ|ﻒ +ﻓ|ﻓ|ﻓ +ﻔ|ﻔ|ﻔ +ﻕ|ﻕ|ﻕ +ﻖ|ﻖ|ﻖ +ﻗ|ﻗ|ﻗ +ﻘ|ﻘ|ﻘ +ﻙ|ﻙ|ﻙ +ﻚ|ﻚ|ﻚ +ﻛ|ﻛ|ﻛ +ﻜ|ﻜ|ﻜ +ﻝ|ﻝ|ﻝ +ﻞ|ﻞ|ﻞ +ﻟ|ﻟ|ﻟ +ﻠ|ﻠ|ﻠ +ﻡ|ﻡ|ﻡ +ﻢ|ﻢ|ﻢ +ﻣ|ﻣ|ﻣ +ﻤ|ﻤ|ﻤ +ﻥ|ﻥ|ﻥ +ﻦ|ﻦ|ﻦ +ﻧ|ﻧ|ﻧ +ﻨ|ﻨ|ﻨ +ﻩ|ﻩ|ﻩ +ﻪ|ﻪ|ﻪ +ﻫ|ﻫ|ﻫ +ﻬ|ﻬ|ﻬ +ﻭ|ﻭ|ﻭ +ﻮ|ﻮ|ﻮ +ﻯ|ﻯ|ﻯ +ﻰ|ﻰ|ﻰ +ﻱ|ﻱ|ﻱ +ﻲ|ﻲ|ﻲ +ﻳ|ﻳ|ﻳ +ﻴ|ﻴ|ﻴ +ﻵ|ﻵ|ﻵ +ﻶ|ﻶ|ﻶ +ﻷ|ﻷ|ﻷ +ﻸ|ﻸ|ﻸ +ﻹ|ﻹ|ﻹ +ﻺ|ﻺ|ﻺ +ﻻ|ﻻ|ﻻ +ﻼ|ﻼ|ﻼ +!|!|! +"|"|" +#|#|# +$|$|$ +%|%|% +&|&|& +'|'|' +(|(|( +)|)|) +*|*|* ++|+|+ +,|,|, +-|-|- +.|.|. +/|/|/ +0|0|0 +1|1|1 +2|2|2 +3|3|3 +4|4|4 +5|5|5 +6|6|6 +7|7|7 +8|8|8 +9|9|9 +:|:|: +;|;|; +<|<|< +=|=|= +>|>|> +?|?|? +@|@|@ +A|A|A +B|B|B +C|C|C +D|D|D +E|E|E +F|F|F +G|G|G +H|H|H +I|I|I +J|J|J +K|K|K +L|L|L +M|M|M +N|N|N +O|O|O +P|P|P +Q|Q|Q +R|R|R +S|S|S +T|T|T +U|U|U +V|V|V +W|W|W +X|X|X +Y|Y|Y +Z|Z|Z +[|[|[ +\|\|\ +]|]|] +^|^|^ +_|_|_ +`|`|` +a|a|a +b|b|b +c|c|c +d|d|d +e|e|e +f|f|f +g|g|g +h|h|h +i|i|i +j|j|j +k|k|k +l|l|l +m|m|m +n|n|n +o|o|o +p|p|p +q|q|q +r|r|r +s|s|s +t|t|t +u|u|u +v|v|v +w|w|w +x|x|x +y|y|y +z|z|z +{|{|{ +||||| +}|}|} +~|~|~ +⦅|⦅|⦅ +⦆|⦆|⦆ +。|。|。 +「|「|「 +」|」|」 +、|、|、 +・|・|・ +ヲ|ヲ|ヲ +ァ|ァ|ァ +ィ|ィ|ィ +ゥ|ゥ|ゥ +ェ|ェ|ェ +ォ|ォ|ォ +ャ|ャ|ャ +ュ|ュ|ュ +ョ|ョ|ョ +ッ|ッ|ッ +ー|ー|ー +ア|ア|ア +イ|イ|イ +ウ|ウ|ウ +エ|エ|エ +オ|オ|オ +カ|カ|カ +キ|キ|キ +ク|ク|ク +ケ|ケ|ケ +コ|コ|コ +サ|サ|サ +シ|シ|シ +ス|ス|ス +セ|セ|セ +ソ|ソ|ソ +タ|タ|タ +チ|チ|チ +ツ|ツ|ツ +テ|テ|テ +ト|ト|ト +ナ|ナ|ナ +ニ|ニ|ニ +ヌ|ヌ|ヌ +ネ|ネ|ネ +ノ|ノ|ノ +ハ|ハ|ハ +ヒ|ヒ|ヒ +フ|フ|フ +ヘ|ヘ|ヘ +ホ|ホ|ホ +マ|マ|マ +ミ|ミ|ミ +ム|ム|ム +メ|メ|メ +モ|モ|モ +ヤ|ヤ|ヤ +ユ|ユ|ユ +ヨ|ヨ|ヨ +ラ|ラ|ラ +リ|リ|リ +ル|ル|ル +レ|レ|レ +ロ|ロ|ロ +ワ|ワ|ワ +ン|ン|ン +゙|゙|゙ +゚|゚|゚ +ᅠ|ᅠ|ᅠ +ᄀ|ᄀ|ᄀ +ᄁ|ᄁ|ᄁ +ᆪ|ᆪ|ᆪ +ᄂ|ᄂ|ᄂ +ᆬ|ᆬ|ᆬ +ᆭ|ᆭ|ᆭ +ᄃ|ᄃ|ᄃ +ᄄ|ᄄ|ᄄ +ᄅ|ᄅ|ᄅ +ᆰ|ᆰ|ᆰ +ᆱ|ᆱ|ᆱ +ᆲ|ᆲ|ᆲ +ᆳ|ᆳ|ᆳ +ᆴ|ᆴ|ᆴ +ᆵ|ᆵ|ᆵ +ᄚ|ᄚ|ᄚ +ᄆ|ᄆ|ᄆ +ᄇ|ᄇ|ᄇ +ᄈ|ᄈ|ᄈ +ᄡ|ᄡ|ᄡ +ᄉ|ᄉ|ᄉ +ᄊ|ᄊ|ᄊ +ᄋ|ᄋ|ᄋ +ᄌ|ᄌ|ᄌ +ᄍ|ᄍ|ᄍ +ᄎ|ᄎ|ᄎ +ᄏ|ᄏ|ᄏ +ᄐ|ᄐ|ᄐ +ᄑ|ᄑ|ᄑ +ᄒ|ᄒ|ᄒ +ᅡ|ᅡ|ᅡ +ᅢ|ᅢ|ᅢ +ᅣ|ᅣ|ᅣ +ᅤ|ᅤ|ᅤ +ᅥ|ᅥ|ᅥ +ᅦ|ᅦ|ᅦ +ᅧ|ᅧ|ᅧ +ᅨ|ᅨ|ᅨ +ᅩ|ᅩ|ᅩ +ᅪ|ᅪ|ᅪ +ᅫ|ᅫ|ᅫ +ᅬ|ᅬ|ᅬ +ᅭ|ᅭ|ᅭ +ᅮ|ᅮ|ᅮ +ᅯ|ᅯ|ᅯ +ᅰ|ᅰ|ᅰ +ᅱ|ᅱ|ᅱ +ᅲ|ᅲ|ᅲ +ᅳ|ᅳ|ᅳ +ᅴ|ᅴ|ᅴ +ᅵ|ᅵ|ᅵ +¢|¢|¢ +£|£|£ +¬|¬|¬ + ̄| ̄| ̄ +¦|¦|¦ +¥|¥|¥ +₩|₩|₩ +│|│|│ +←|←|← +↑|↑|↑ +→|→|→ +↓|↓|↓ +■|■|■ +○|○|○ +𑂚|𑂚|𑂚 +𑂜|𑂜|𑂜 +𑂫|𑂫|𑂫 +𑄮|𑄮|𑄮 +𑄯|𑄯|𑄯 +𑍋|𑍋|𑍋 +𑍌|𑍌|𑍌 +𑒻|𑒻|𑒻 +𑒼|𑒼|𑒼 +𑒾|𑒾|𑒾 +𑖺|𑖺|𑖺 +𑖻|𑖻|𑖻 +𝅗𝅥|𝅗𝅥|𝅗𝅥 +𝅘𝅥|𝅘𝅥|𝅘𝅥 +𝅘𝅥𝅮|𝅘𝅥𝅮|𝅘𝅥𝅮 +𝅘𝅥𝅯|𝅘𝅥𝅯|𝅘𝅥𝅯 +𝅘𝅥𝅰|𝅘𝅥𝅰|𝅘𝅥𝅰 +𝅘𝅥𝅱|𝅘𝅥𝅱|𝅘𝅥𝅱 +𝅘𝅥𝅲|𝅘𝅥𝅲|𝅘𝅥𝅲 +𝆹𝅥|𝆹𝅥|𝆹𝅥 +𝆺𝅥|𝆺𝅥|𝆺𝅥 +𝆹𝅥𝅮|𝆹𝅥𝅮|𝆹𝅥𝅮 +𝆺𝅥𝅮|𝆺𝅥𝅮|𝆺𝅥𝅮 +𝆹𝅥𝅯|𝆹𝅥𝅯|𝆹𝅥𝅯 +𝆺𝅥𝅯|𝆺𝅥𝅯|𝆺𝅥𝅯 +𝐀|𝐀|𝐀 +𝐁|𝐁|𝐁 +𝐂|𝐂|𝐂 +𝐃|𝐃|𝐃 +𝐄|𝐄|𝐄 +𝐅|𝐅|𝐅 +𝐆|𝐆|𝐆 +𝐇|𝐇|𝐇 +𝐈|𝐈|𝐈 +𝐉|𝐉|𝐉 +𝐊|𝐊|𝐊 +𝐋|𝐋|𝐋 +𝐌|𝐌|𝐌 +𝐍|𝐍|𝐍 +𝐎|𝐎|𝐎 +𝐏|𝐏|𝐏 +𝐐|𝐐|𝐐 +𝐑|𝐑|𝐑 +𝐒|𝐒|𝐒 +𝐓|𝐓|𝐓 +𝐔|𝐔|𝐔 +𝐕|𝐕|𝐕 +𝐖|𝐖|𝐖 +𝐗|𝐗|𝐗 +𝐘|𝐘|𝐘 +𝐙|𝐙|𝐙 +𝐚|𝐚|𝐚 +𝐛|𝐛|𝐛 +𝐜|𝐜|𝐜 +𝐝|𝐝|𝐝 +𝐞|𝐞|𝐞 +𝐟|𝐟|𝐟 +𝐠|𝐠|𝐠 +𝐡|𝐡|𝐡 +𝐢|𝐢|𝐢 +𝐣|𝐣|𝐣 +𝐤|𝐤|𝐤 +𝐥|𝐥|𝐥 +𝐦|𝐦|𝐦 +𝐧|𝐧|𝐧 +𝐨|𝐨|𝐨 +𝐩|𝐩|𝐩 +𝐪|𝐪|𝐪 +𝐫|𝐫|𝐫 +𝐬|𝐬|𝐬 +𝐭|𝐭|𝐭 +𝐮|𝐮|𝐮 +𝐯|𝐯|𝐯 +𝐰|𝐰|𝐰 +𝐱|𝐱|𝐱 +𝐲|𝐲|𝐲 +𝐳|𝐳|𝐳 +𝐴|𝐴|𝐴 +𝐵|𝐵|𝐵 +𝐶|𝐶|𝐶 +𝐷|𝐷|𝐷 +𝐸|𝐸|𝐸 +𝐹|𝐹|𝐹 +𝐺|𝐺|𝐺 +𝐻|𝐻|𝐻 +𝐼|𝐼|𝐼 +𝐽|𝐽|𝐽 +𝐾|𝐾|𝐾 +𝐿|𝐿|𝐿 +𝑀|𝑀|𝑀 +𝑁|𝑁|𝑁 +𝑂|𝑂|𝑂 +𝑃|𝑃|𝑃 +𝑄|𝑄|𝑄 +𝑅|𝑅|𝑅 +𝑆|𝑆|𝑆 +𝑇|𝑇|𝑇 +𝑈|𝑈|𝑈 +𝑉|𝑉|𝑉 +𝑊|𝑊|𝑊 +𝑋|𝑋|𝑋 +𝑌|𝑌|𝑌 +𝑍|𝑍|𝑍 +𝑎|𝑎|𝑎 +𝑏|𝑏|𝑏 +𝑐|𝑐|𝑐 +𝑑|𝑑|𝑑 +𝑒|𝑒|𝑒 +𝑓|𝑓|𝑓 +𝑔|𝑔|𝑔 +𝑖|𝑖|𝑖 +𝑗|𝑗|𝑗 +𝑘|𝑘|𝑘 +𝑙|𝑙|𝑙 +𝑚|𝑚|𝑚 +𝑛|𝑛|𝑛 +𝑜|𝑜|𝑜 +𝑝|𝑝|𝑝 +𝑞|𝑞|𝑞 +𝑟|𝑟|𝑟 +𝑠|𝑠|𝑠 +𝑡|𝑡|𝑡 +𝑢|𝑢|𝑢 +𝑣|𝑣|𝑣 +𝑤|𝑤|𝑤 +𝑥|𝑥|𝑥 +𝑦|𝑦|𝑦 +𝑧|𝑧|𝑧 +𝑨|𝑨|𝑨 +𝑩|𝑩|𝑩 +𝑪|𝑪|𝑪 +𝑫|𝑫|𝑫 +𝑬|𝑬|𝑬 +𝑭|𝑭|𝑭 +𝑮|𝑮|𝑮 +𝑯|𝑯|𝑯 +𝑰|𝑰|𝑰 +𝑱|𝑱|𝑱 +𝑲|𝑲|𝑲 +𝑳|𝑳|𝑳 +𝑴|𝑴|𝑴 +𝑵|𝑵|𝑵 +𝑶|𝑶|𝑶 +𝑷|𝑷|𝑷 +𝑸|𝑸|𝑸 +𝑹|𝑹|𝑹 +𝑺|𝑺|𝑺 +𝑻|𝑻|𝑻 +𝑼|𝑼|𝑼 +𝑽|𝑽|𝑽 +𝑾|𝑾|𝑾 +𝑿|𝑿|𝑿 +𝒀|𝒀|𝒀 +𝒁|𝒁|𝒁 +𝒂|𝒂|𝒂 +𝒃|𝒃|𝒃 +𝒄|𝒄|𝒄 +𝒅|𝒅|𝒅 +𝒆|𝒆|𝒆 +𝒇|𝒇|𝒇 +𝒈|𝒈|𝒈 +𝒉|𝒉|𝒉 +𝒊|𝒊|𝒊 +𝒋|𝒋|𝒋 +𝒌|𝒌|𝒌 +𝒍|𝒍|𝒍 +𝒎|𝒎|𝒎 +𝒏|𝒏|𝒏 +𝒐|𝒐|𝒐 +𝒑|𝒑|𝒑 +𝒒|𝒒|𝒒 +𝒓|𝒓|𝒓 +𝒔|𝒔|𝒔 +𝒕|𝒕|𝒕 +𝒖|𝒖|𝒖 +𝒗|𝒗|𝒗 +𝒘|𝒘|𝒘 +𝒙|𝒙|𝒙 +𝒚|𝒚|𝒚 +𝒛|𝒛|𝒛 +𝒜|𝒜|𝒜 +𝒞|𝒞|𝒞 +𝒟|𝒟|𝒟 +𝒢|𝒢|𝒢 +𝒥|𝒥|𝒥 +𝒦|𝒦|𝒦 +𝒩|𝒩|𝒩 +𝒪|𝒪|𝒪 +𝒫|𝒫|𝒫 +𝒬|𝒬|𝒬 +𝒮|𝒮|𝒮 +𝒯|𝒯|𝒯 +𝒰|𝒰|𝒰 +𝒱|𝒱|𝒱 +𝒲|𝒲|𝒲 +𝒳|𝒳|𝒳 +𝒴|𝒴|𝒴 +𝒵|𝒵|𝒵 +𝒶|𝒶|𝒶 +𝒷|𝒷|𝒷 +𝒸|𝒸|𝒸 +𝒹|𝒹|𝒹 +𝒻|𝒻|𝒻 +𝒽|𝒽|𝒽 +𝒾|𝒾|𝒾 +𝒿|𝒿|𝒿 +𝓀|𝓀|𝓀 +𝓁|𝓁|𝓁 +𝓂|𝓂|𝓂 +𝓃|𝓃|𝓃 +𝓅|𝓅|𝓅 +𝓆|𝓆|𝓆 +𝓇|𝓇|𝓇 +𝓈|𝓈|𝓈 +𝓉|𝓉|𝓉 +𝓊|𝓊|𝓊 +𝓋|𝓋|𝓋 +𝓌|𝓌|𝓌 +𝓍|𝓍|𝓍 +𝓎|𝓎|𝓎 +𝓏|𝓏|𝓏 +𝓐|𝓐|𝓐 +𝓑|𝓑|𝓑 +𝓒|𝓒|𝓒 +𝓓|𝓓|𝓓 +𝓔|𝓔|𝓔 +𝓕|𝓕|𝓕 +𝓖|𝓖|𝓖 +𝓗|𝓗|𝓗 +𝓘|𝓘|𝓘 +𝓙|𝓙|𝓙 +𝓚|𝓚|𝓚 +𝓛|𝓛|𝓛 +𝓜|𝓜|𝓜 +𝓝|𝓝|𝓝 +𝓞|𝓞|𝓞 +𝓟|𝓟|𝓟 +𝓠|𝓠|𝓠 +𝓡|𝓡|𝓡 +𝓢|𝓢|𝓢 +𝓣|𝓣|𝓣 +𝓤|𝓤|𝓤 +𝓥|𝓥|𝓥 +𝓦|𝓦|𝓦 +𝓧|𝓧|𝓧 +𝓨|𝓨|𝓨 +𝓩|𝓩|𝓩 +𝓪|𝓪|𝓪 +𝓫|𝓫|𝓫 +𝓬|𝓬|𝓬 +𝓭|𝓭|𝓭 +𝓮|𝓮|𝓮 +𝓯|𝓯|𝓯 +𝓰|𝓰|𝓰 +𝓱|𝓱|𝓱 +𝓲|𝓲|𝓲 +𝓳|𝓳|𝓳 +𝓴|𝓴|𝓴 +𝓵|𝓵|𝓵 +𝓶|𝓶|𝓶 +𝓷|𝓷|𝓷 +𝓸|𝓸|𝓸 +𝓹|𝓹|𝓹 +𝓺|𝓺|𝓺 +𝓻|𝓻|𝓻 +𝓼|𝓼|𝓼 +𝓽|𝓽|𝓽 +𝓾|𝓾|𝓾 +𝓿|𝓿|𝓿 +𝔀|𝔀|𝔀 +𝔁|𝔁|𝔁 +𝔂|𝔂|𝔂 +𝔃|𝔃|𝔃 +𝔄|𝔄|𝔄 +𝔅|𝔅|𝔅 +𝔇|𝔇|𝔇 +𝔈|𝔈|𝔈 +𝔉|𝔉|𝔉 +𝔊|𝔊|𝔊 +𝔍|𝔍|𝔍 +𝔎|𝔎|𝔎 +𝔏|𝔏|𝔏 +𝔐|𝔐|𝔐 +𝔑|𝔑|𝔑 +𝔒|𝔒|𝔒 +𝔓|𝔓|𝔓 +𝔔|𝔔|𝔔 +𝔖|𝔖|𝔖 +𝔗|𝔗|𝔗 +𝔘|𝔘|𝔘 +𝔙|𝔙|𝔙 +𝔚|𝔚|𝔚 +𝔛|𝔛|𝔛 +𝔜|𝔜|𝔜 +𝔞|𝔞|𝔞 +𝔟|𝔟|𝔟 +𝔠|𝔠|𝔠 +𝔡|𝔡|𝔡 +𝔢|𝔢|𝔢 +𝔣|𝔣|𝔣 +𝔤|𝔤|𝔤 +𝔥|𝔥|𝔥 +𝔦|𝔦|𝔦 +𝔧|𝔧|𝔧 +𝔨|𝔨|𝔨 +𝔩|𝔩|𝔩 +𝔪|𝔪|𝔪 +𝔫|𝔫|𝔫 +𝔬|𝔬|𝔬 +𝔭|𝔭|𝔭 +𝔮|𝔮|𝔮 +𝔯|𝔯|𝔯 +𝔰|𝔰|𝔰 +𝔱|𝔱|𝔱 +𝔲|𝔲|𝔲 +𝔳|𝔳|𝔳 +𝔴|𝔴|𝔴 +𝔵|𝔵|𝔵 +𝔶|𝔶|𝔶 +𝔷|𝔷|𝔷 +𝔸|𝔸|𝔸 +𝔹|𝔹|𝔹 +𝔻|𝔻|𝔻 +𝔼|𝔼|𝔼 +𝔽|𝔽|𝔽 +𝔾|𝔾|𝔾 +𝕀|𝕀|𝕀 +𝕁|𝕁|𝕁 +𝕂|𝕂|𝕂 +𝕃|𝕃|𝕃 +𝕄|𝕄|𝕄 +𝕆|𝕆|𝕆 +𝕊|𝕊|𝕊 +𝕋|𝕋|𝕋 +𝕌|𝕌|𝕌 +𝕍|𝕍|𝕍 +𝕎|𝕎|𝕎 +𝕏|𝕏|𝕏 +𝕐|𝕐|𝕐 +𝕒|𝕒|𝕒 +𝕓|𝕓|𝕓 +𝕔|𝕔|𝕔 +𝕕|𝕕|𝕕 +𝕖|𝕖|𝕖 +𝕗|𝕗|𝕗 +𝕘|𝕘|𝕘 +𝕙|𝕙|𝕙 +𝕚|𝕚|𝕚 +𝕛|𝕛|𝕛 +𝕜|𝕜|𝕜 +𝕝|𝕝|𝕝 +𝕞|𝕞|𝕞 +𝕟|𝕟|𝕟 +𝕠|𝕠|𝕠 +𝕡|𝕡|𝕡 +𝕢|𝕢|𝕢 +𝕣|𝕣|𝕣 +𝕤|𝕤|𝕤 +𝕥|𝕥|𝕥 +𝕦|𝕦|𝕦 +𝕧|𝕧|𝕧 +𝕨|𝕨|𝕨 +𝕩|𝕩|𝕩 +𝕪|𝕪|𝕪 +𝕫|𝕫|𝕫 +𝕬|𝕬|𝕬 +𝕭|𝕭|𝕭 +𝕮|𝕮|𝕮 +𝕯|𝕯|𝕯 +𝕰|𝕰|𝕰 +𝕱|𝕱|𝕱 +𝕲|𝕲|𝕲 +𝕳|𝕳|𝕳 +𝕴|𝕴|𝕴 +𝕵|𝕵|𝕵 +𝕶|𝕶|𝕶 +𝕷|𝕷|𝕷 +𝕸|𝕸|𝕸 +𝕹|𝕹|𝕹 +𝕺|𝕺|𝕺 +𝕻|𝕻|𝕻 +𝕼|𝕼|𝕼 +𝕽|𝕽|𝕽 +𝕾|𝕾|𝕾 +𝕿|𝕿|𝕿 +𝖀|𝖀|𝖀 +𝖁|𝖁|𝖁 +𝖂|𝖂|𝖂 +𝖃|𝖃|𝖃 +𝖄|𝖄|𝖄 +𝖅|𝖅|𝖅 +𝖆|𝖆|𝖆 +𝖇|𝖇|𝖇 +𝖈|𝖈|𝖈 +𝖉|𝖉|𝖉 +𝖊|𝖊|𝖊 +𝖋|𝖋|𝖋 +𝖌|𝖌|𝖌 +𝖍|𝖍|𝖍 +𝖎|𝖎|𝖎 +𝖏|𝖏|𝖏 +𝖐|𝖐|𝖐 +𝖑|𝖑|𝖑 +𝖒|𝖒|𝖒 +𝖓|𝖓|𝖓 +𝖔|𝖔|𝖔 +𝖕|𝖕|𝖕 +𝖖|𝖖|𝖖 +𝖗|𝖗|𝖗 +𝖘|𝖘|𝖘 +𝖙|𝖙|𝖙 +𝖚|𝖚|𝖚 +𝖛|𝖛|𝖛 +𝖜|𝖜|𝖜 +𝖝|𝖝|𝖝 +𝖞|𝖞|𝖞 +𝖟|𝖟|𝖟 +𝖠|𝖠|𝖠 +𝖡|𝖡|𝖡 +𝖢|𝖢|𝖢 +𝖣|𝖣|𝖣 +𝖤|𝖤|𝖤 +𝖥|𝖥|𝖥 +𝖦|𝖦|𝖦 +𝖧|𝖧|𝖧 +𝖨|𝖨|𝖨 +𝖩|𝖩|𝖩 +𝖪|𝖪|𝖪 +𝖫|𝖫|𝖫 +𝖬|𝖬|𝖬 +𝖭|𝖭|𝖭 +𝖮|𝖮|𝖮 +𝖯|𝖯|𝖯 +𝖰|𝖰|𝖰 +𝖱|𝖱|𝖱 +𝖲|𝖲|𝖲 +𝖳|𝖳|𝖳 +𝖴|𝖴|𝖴 +𝖵|𝖵|𝖵 +𝖶|𝖶|𝖶 +𝖷|𝖷|𝖷 +𝖸|𝖸|𝖸 +𝖹|𝖹|𝖹 +𝖺|𝖺|𝖺 +𝖻|𝖻|𝖻 +𝖼|𝖼|𝖼 +𝖽|𝖽|𝖽 +𝖾|𝖾|𝖾 +𝖿|𝖿|𝖿 +𝗀|𝗀|𝗀 +𝗁|𝗁|𝗁 +𝗂|𝗂|𝗂 +𝗃|𝗃|𝗃 +𝗄|𝗄|𝗄 +𝗅|𝗅|𝗅 +𝗆|𝗆|𝗆 +𝗇|𝗇|𝗇 +𝗈|𝗈|𝗈 +𝗉|𝗉|𝗉 +𝗊|𝗊|𝗊 +𝗋|𝗋|𝗋 +𝗌|𝗌|𝗌 +𝗍|𝗍|𝗍 +𝗎|𝗎|𝗎 +𝗏|𝗏|𝗏 +𝗐|𝗐|𝗐 +𝗑|𝗑|𝗑 +𝗒|𝗒|𝗒 +𝗓|𝗓|𝗓 +𝗔|𝗔|𝗔 +𝗕|𝗕|𝗕 +𝗖|𝗖|𝗖 +𝗗|𝗗|𝗗 +𝗘|𝗘|𝗘 +𝗙|𝗙|𝗙 +𝗚|𝗚|𝗚 +𝗛|𝗛|𝗛 +𝗜|𝗜|𝗜 +𝗝|𝗝|𝗝 +𝗞|𝗞|𝗞 +𝗟|𝗟|𝗟 +𝗠|𝗠|𝗠 +𝗡|𝗡|𝗡 +𝗢|𝗢|𝗢 +𝗣|𝗣|𝗣 +𝗤|𝗤|𝗤 +𝗥|𝗥|𝗥 +𝗦|𝗦|𝗦 +𝗧|𝗧|𝗧 +𝗨|𝗨|𝗨 +𝗩|𝗩|𝗩 +𝗪|𝗪|𝗪 +𝗫|𝗫|𝗫 +𝗬|𝗬|𝗬 +𝗭|𝗭|𝗭 +𝗮|𝗮|𝗮 +𝗯|𝗯|𝗯 +𝗰|𝗰|𝗰 +𝗱|𝗱|𝗱 +𝗲|𝗲|𝗲 +𝗳|𝗳|𝗳 +𝗴|𝗴|𝗴 +𝗵|𝗵|𝗵 +𝗶|𝗶|𝗶 +𝗷|𝗷|𝗷 +𝗸|𝗸|𝗸 +𝗹|𝗹|𝗹 +𝗺|𝗺|𝗺 +𝗻|𝗻|𝗻 +𝗼|𝗼|𝗼 +𝗽|𝗽|𝗽 +𝗾|𝗾|𝗾 +𝗿|𝗿|𝗿 +𝘀|𝘀|𝘀 +𝘁|𝘁|𝘁 +𝘂|𝘂|𝘂 +𝘃|𝘃|𝘃 +𝘄|𝘄|𝘄 +𝘅|𝘅|𝘅 +𝘆|𝘆|𝘆 +𝘇|𝘇|𝘇 +𝘈|𝘈|𝘈 +𝘉|𝘉|𝘉 +𝘊|𝘊|𝘊 +𝘋|𝘋|𝘋 +𝘌|𝘌|𝘌 +𝘍|𝘍|𝘍 +𝘎|𝘎|𝘎 +𝘏|𝘏|𝘏 +𝘐|𝘐|𝘐 +𝘑|𝘑|𝘑 +𝘒|𝘒|𝘒 +𝘓|𝘓|𝘓 +𝘔|𝘔|𝘔 +𝘕|𝘕|𝘕 +𝘖|𝘖|𝘖 +𝘗|𝘗|𝘗 +𝘘|𝘘|𝘘 +𝘙|𝘙|𝘙 +𝘚|𝘚|𝘚 +𝘛|𝘛|𝘛 +𝘜|𝘜|𝘜 +𝘝|𝘝|𝘝 +𝘞|𝘞|𝘞 +𝘟|𝘟|𝘟 +𝘠|𝘠|𝘠 +𝘡|𝘡|𝘡 +𝘢|𝘢|𝘢 +𝘣|𝘣|𝘣 +𝘤|𝘤|𝘤 +𝘥|𝘥|𝘥 +𝘦|𝘦|𝘦 +𝘧|𝘧|𝘧 +𝘨|𝘨|𝘨 +𝘩|𝘩|𝘩 +𝘪|𝘪|𝘪 +𝘫|𝘫|𝘫 +𝘬|𝘬|𝘬 +𝘭|𝘭|𝘭 +𝘮|𝘮|𝘮 +𝘯|𝘯|𝘯 +𝘰|𝘰|𝘰 +𝘱|𝘱|𝘱 +𝘲|𝘲|𝘲 +𝘳|𝘳|𝘳 +𝘴|𝘴|𝘴 +𝘵|𝘵|𝘵 +𝘶|𝘶|𝘶 +𝘷|𝘷|𝘷 +𝘸|𝘸|𝘸 +𝘹|𝘹|𝘹 +𝘺|𝘺|𝘺 +𝘻|𝘻|𝘻 +𝘼|𝘼|𝘼 +𝘽|𝘽|𝘽 +𝘾|𝘾|𝘾 +𝘿|𝘿|𝘿 +𝙀|𝙀|𝙀 +𝙁|𝙁|𝙁 +𝙂|𝙂|𝙂 +𝙃|𝙃|𝙃 +𝙄|𝙄|𝙄 +𝙅|𝙅|𝙅 +𝙆|𝙆|𝙆 +𝙇|𝙇|𝙇 +𝙈|𝙈|𝙈 +𝙉|𝙉|𝙉 +𝙊|𝙊|𝙊 +𝙋|𝙋|𝙋 +𝙌|𝙌|𝙌 +𝙍|𝙍|𝙍 +𝙎|𝙎|𝙎 +𝙏|𝙏|𝙏 +𝙐|𝙐|𝙐 +𝙑|𝙑|𝙑 +𝙒|𝙒|𝙒 +𝙓|𝙓|𝙓 +𝙔|𝙔|𝙔 +𝙕|𝙕|𝙕 +𝙖|𝙖|𝙖 +𝙗|𝙗|𝙗 +𝙘|𝙘|𝙘 +𝙙|𝙙|𝙙 +𝙚|𝙚|𝙚 +𝙛|𝙛|𝙛 +𝙜|𝙜|𝙜 +𝙝|𝙝|𝙝 +𝙞|𝙞|𝙞 +𝙟|𝙟|𝙟 +𝙠|𝙠|𝙠 +𝙡|𝙡|𝙡 +𝙢|𝙢|𝙢 +𝙣|𝙣|𝙣 +𝙤|𝙤|𝙤 +𝙥|𝙥|𝙥 +𝙦|𝙦|𝙦 +𝙧|𝙧|𝙧 +𝙨|𝙨|𝙨 +𝙩|𝙩|𝙩 +𝙪|𝙪|𝙪 +𝙫|𝙫|𝙫 +𝙬|𝙬|𝙬 +𝙭|𝙭|𝙭 +𝙮|𝙮|𝙮 +𝙯|𝙯|𝙯 +𝙰|𝙰|𝙰 +𝙱|𝙱|𝙱 +𝙲|𝙲|𝙲 +𝙳|𝙳|𝙳 +𝙴|𝙴|𝙴 +𝙵|𝙵|𝙵 +𝙶|𝙶|𝙶 +𝙷|𝙷|𝙷 +𝙸|𝙸|𝙸 +𝙹|𝙹|𝙹 +𝙺|𝙺|𝙺 +𝙻|𝙻|𝙻 +𝙼|𝙼|𝙼 +𝙽|𝙽|𝙽 +𝙾|𝙾|𝙾 +𝙿|𝙿|𝙿 +𝚀|𝚀|𝚀 +𝚁|𝚁|𝚁 +𝚂|𝚂|𝚂 +𝚃|𝚃|𝚃 +𝚄|𝚄|𝚄 +𝚅|𝚅|𝚅 +𝚆|𝚆|𝚆 +𝚇|𝚇|𝚇 +𝚈|𝚈|𝚈 +𝚉|𝚉|𝚉 +𝚊|𝚊|𝚊 +𝚋|𝚋|𝚋 +𝚌|𝚌|𝚌 +𝚍|𝚍|𝚍 +𝚎|𝚎|𝚎 +𝚏|𝚏|𝚏 +𝚐|𝚐|𝚐 +𝚑|𝚑|𝚑 +𝚒|𝚒|𝚒 +𝚓|𝚓|𝚓 +𝚔|𝚔|𝚔 +𝚕|𝚕|𝚕 +𝚖|𝚖|𝚖 +𝚗|𝚗|𝚗 +𝚘|𝚘|𝚘 +𝚙|𝚙|𝚙 +𝚚|𝚚|𝚚 +𝚛|𝚛|𝚛 +𝚜|𝚜|𝚜 +𝚝|𝚝|𝚝 +𝚞|𝚞|𝚞 +𝚟|𝚟|𝚟 +𝚠|𝚠|𝚠 +𝚡|𝚡|𝚡 +𝚢|𝚢|𝚢 +𝚣|𝚣|𝚣 +𝚤|𝚤|𝚤 +𝚥|𝚥|𝚥 +𝚨|𝚨|𝚨 +𝚩|𝚩|𝚩 +𝚪|𝚪|𝚪 +𝚫|𝚫|𝚫 +𝚬|𝚬|𝚬 +𝚭|𝚭|𝚭 +𝚮|𝚮|𝚮 +𝚯|𝚯|𝚯 +𝚰|𝚰|𝚰 +𝚱|𝚱|𝚱 +𝚲|𝚲|𝚲 +𝚳|𝚳|𝚳 +𝚴|𝚴|𝚴 +𝚵|𝚵|𝚵 +𝚶|𝚶|𝚶 +𝚷|𝚷|𝚷 +𝚸|𝚸|𝚸 +𝚹|𝚹|𝚹 +𝚺|𝚺|𝚺 +𝚻|𝚻|𝚻 +𝚼|𝚼|𝚼 +𝚽|𝚽|𝚽 +𝚾|𝚾|𝚾 +𝚿|𝚿|𝚿 +𝛀|𝛀|𝛀 +𝛁|𝛁|𝛁 +𝛂|𝛂|𝛂 +𝛃|𝛃|𝛃 +𝛄|𝛄|𝛄 +𝛅|𝛅|𝛅 +𝛆|𝛆|𝛆 +𝛇|𝛇|𝛇 +𝛈|𝛈|𝛈 +𝛉|𝛉|𝛉 +𝛊|𝛊|𝛊 +𝛋|𝛋|𝛋 +𝛌|𝛌|𝛌 +𝛍|𝛍|𝛍 +𝛎|𝛎|𝛎 +𝛏|𝛏|𝛏 +𝛐|𝛐|𝛐 +𝛑|𝛑|𝛑 +𝛒|𝛒|𝛒 +𝛓|𝛓|𝛓 +𝛔|𝛔|𝛔 +𝛕|𝛕|𝛕 +𝛖|𝛖|𝛖 +𝛗|𝛗|𝛗 +𝛘|𝛘|𝛘 +𝛙|𝛙|𝛙 +𝛚|𝛚|𝛚 +𝛛|𝛛|𝛛 +𝛜|𝛜|𝛜 +𝛝|𝛝|𝛝 +𝛞|𝛞|𝛞 +𝛟|𝛟|𝛟 +𝛠|𝛠|𝛠 +𝛡|𝛡|𝛡 +𝛢|𝛢|𝛢 +𝛣|𝛣|𝛣 +𝛤|𝛤|𝛤 +𝛥|𝛥|𝛥 +𝛦|𝛦|𝛦 +𝛧|𝛧|𝛧 +𝛨|𝛨|𝛨 +𝛩|𝛩|𝛩 +𝛪|𝛪|𝛪 +𝛫|𝛫|𝛫 +𝛬|𝛬|𝛬 +𝛭|𝛭|𝛭 +𝛮|𝛮|𝛮 +𝛯|𝛯|𝛯 +𝛰|𝛰|𝛰 +𝛱|𝛱|𝛱 +𝛲|𝛲|𝛲 +𝛳|𝛳|𝛳 +𝛴|𝛴|𝛴 +𝛵|𝛵|𝛵 +𝛶|𝛶|𝛶 +𝛷|𝛷|𝛷 +𝛸|𝛸|𝛸 +𝛹|𝛹|𝛹 +𝛺|𝛺|𝛺 +𝛻|𝛻|𝛻 +𝛼|𝛼|𝛼 +𝛽|𝛽|𝛽 +𝛾|𝛾|𝛾 +𝛿|𝛿|𝛿 +𝜀|𝜀|𝜀 +𝜁|𝜁|𝜁 +𝜂|𝜂|𝜂 +𝜃|𝜃|𝜃 +𝜄|𝜄|𝜄 +𝜅|𝜅|𝜅 +𝜆|𝜆|𝜆 +𝜇|𝜇|𝜇 +𝜈|𝜈|𝜈 +𝜉|𝜉|𝜉 +𝜊|𝜊|𝜊 +𝜋|𝜋|𝜋 +𝜌|𝜌|𝜌 +𝜍|𝜍|𝜍 +𝜎|𝜎|𝜎 +𝜏|𝜏|𝜏 +𝜐|𝜐|𝜐 +𝜑|𝜑|𝜑 +𝜒|𝜒|𝜒 +𝜓|𝜓|𝜓 +𝜔|𝜔|𝜔 +𝜕|𝜕|𝜕 +𝜖|𝜖|𝜖 +𝜗|𝜗|𝜗 +𝜘|𝜘|𝜘 +𝜙|𝜙|𝜙 +𝜚|𝜚|𝜚 +𝜛|𝜛|𝜛 +𝜜|𝜜|𝜜 +𝜝|𝜝|𝜝 +𝜞|𝜞|𝜞 +𝜟|𝜟|𝜟 +𝜠|𝜠|𝜠 +𝜡|𝜡|𝜡 +𝜢|𝜢|𝜢 +𝜣|𝜣|𝜣 +𝜤|𝜤|𝜤 +𝜥|𝜥|𝜥 +𝜦|𝜦|𝜦 +𝜧|𝜧|𝜧 +𝜨|𝜨|𝜨 +𝜩|𝜩|𝜩 +𝜪|𝜪|𝜪 +𝜫|𝜫|𝜫 +𝜬|𝜬|𝜬 +𝜭|𝜭|𝜭 +𝜮|𝜮|𝜮 +𝜯|𝜯|𝜯 +𝜰|𝜰|𝜰 +𝜱|𝜱|𝜱 +𝜲|𝜲|𝜲 +𝜳|𝜳|𝜳 +𝜴|𝜴|𝜴 +𝜵|𝜵|𝜵 +𝜶|𝜶|𝜶 +𝜷|𝜷|𝜷 +𝜸|𝜸|𝜸 +𝜹|𝜹|𝜹 +𝜺|𝜺|𝜺 +𝜻|𝜻|𝜻 +𝜼|𝜼|𝜼 +𝜽|𝜽|𝜽 +𝜾|𝜾|𝜾 +𝜿|𝜿|𝜿 +𝝀|𝝀|𝝀 +𝝁|𝝁|𝝁 +𝝂|𝝂|𝝂 +𝝃|𝝃|𝝃 +𝝄|𝝄|𝝄 +𝝅|𝝅|𝝅 +𝝆|𝝆|𝝆 +𝝇|𝝇|𝝇 +𝝈|𝝈|𝝈 +𝝉|𝝉|𝝉 +𝝊|𝝊|𝝊 +𝝋|𝝋|𝝋 +𝝌|𝝌|𝝌 +𝝍|𝝍|𝝍 +𝝎|𝝎|𝝎 +𝝏|𝝏|𝝏 +𝝐|𝝐|𝝐 +𝝑|𝝑|𝝑 +𝝒|𝝒|𝝒 +𝝓|𝝓|𝝓 +𝝔|𝝔|𝝔 +𝝕|𝝕|𝝕 +𝝖|𝝖|𝝖 +𝝗|𝝗|𝝗 +𝝘|𝝘|𝝘 +𝝙|𝝙|𝝙 +𝝚|𝝚|𝝚 +𝝛|𝝛|𝝛 +𝝜|𝝜|𝝜 +𝝝|𝝝|𝝝 +𝝞|𝝞|𝝞 +𝝟|𝝟|𝝟 +𝝠|𝝠|𝝠 +𝝡|𝝡|𝝡 +𝝢|𝝢|𝝢 +𝝣|𝝣|𝝣 +𝝤|𝝤|𝝤 +𝝥|𝝥|𝝥 +𝝦|𝝦|𝝦 +𝝧|𝝧|𝝧 +𝝨|𝝨|𝝨 +𝝩|𝝩|𝝩 +𝝪|𝝪|𝝪 +𝝫|𝝫|𝝫 +𝝬|𝝬|𝝬 +𝝭|𝝭|𝝭 +𝝮|𝝮|𝝮 +𝝯|𝝯|𝝯 +𝝰|𝝰|𝝰 +𝝱|𝝱|𝝱 +𝝲|𝝲|𝝲 +𝝳|𝝳|𝝳 +𝝴|𝝴|𝝴 +𝝵|𝝵|𝝵 +𝝶|𝝶|𝝶 +𝝷|𝝷|𝝷 +𝝸|𝝸|𝝸 +𝝹|𝝹|𝝹 +𝝺|𝝺|𝝺 +𝝻|𝝻|𝝻 +𝝼|𝝼|𝝼 +𝝽|𝝽|𝝽 +𝝾|𝝾|𝝾 +𝝿|𝝿|𝝿 +𝞀|𝞀|𝞀 +𝞁|𝞁|𝞁 +𝞂|𝞂|𝞂 +𝞃|𝞃|𝞃 +𝞄|𝞄|𝞄 +𝞅|𝞅|𝞅 +𝞆|𝞆|𝞆 +𝞇|𝞇|𝞇 +𝞈|𝞈|𝞈 +𝞉|𝞉|𝞉 +𝞊|𝞊|𝞊 +𝞋|𝞋|𝞋 +𝞌|𝞌|𝞌 +𝞍|𝞍|𝞍 +𝞎|𝞎|𝞎 +𝞏|𝞏|𝞏 +𝞐|𝞐|𝞐 +𝞑|𝞑|𝞑 +𝞒|𝞒|𝞒 +𝞓|𝞓|𝞓 +𝞔|𝞔|𝞔 +𝞕|𝞕|𝞕 +𝞖|𝞖|𝞖 +𝞗|𝞗|𝞗 +𝞘|𝞘|𝞘 +𝞙|𝞙|𝞙 +𝞚|𝞚|𝞚 +𝞛|𝞛|𝞛 +𝞜|𝞜|𝞜 +𝞝|𝞝|𝞝 +𝞞|𝞞|𝞞 +𝞟|𝞟|𝞟 +𝞠|𝞠|𝞠 +𝞡|𝞡|𝞡 +𝞢|𝞢|𝞢 +𝞣|𝞣|𝞣 +𝞤|𝞤|𝞤 +𝞥|𝞥|𝞥 +𝞦|𝞦|𝞦 +𝞧|𝞧|𝞧 +𝞨|𝞨|𝞨 +𝞩|𝞩|𝞩 +𝞪|𝞪|𝞪 +𝞫|𝞫|𝞫 +𝞬|𝞬|𝞬 +𝞭|𝞭|𝞭 +𝞮|𝞮|𝞮 +𝞯|𝞯|𝞯 +𝞰|𝞰|𝞰 +𝞱|𝞱|𝞱 +𝞲|𝞲|𝞲 +𝞳|𝞳|𝞳 +𝞴|𝞴|𝞴 +𝞵|𝞵|𝞵 +𝞶|𝞶|𝞶 +𝞷|𝞷|𝞷 +𝞸|𝞸|𝞸 +𝞹|𝞹|𝞹 +𝞺|𝞺|𝞺 +𝞻|𝞻|𝞻 +𝞼|𝞼|𝞼 +𝞽|𝞽|𝞽 +𝞾|𝞾|𝞾 +𝞿|𝞿|𝞿 +𝟀|𝟀|𝟀 +𝟁|𝟁|𝟁 +𝟂|𝟂|𝟂 +𝟃|𝟃|𝟃 +𝟄|𝟄|𝟄 +𝟅|𝟅|𝟅 +𝟆|𝟆|𝟆 +𝟇|𝟇|𝟇 +𝟈|𝟈|𝟈 +𝟉|𝟉|𝟉 +𝟊|𝟊|𝟊 +𝟋|𝟋|𝟋 +𝟎|𝟎|𝟎 +𝟏|𝟏|𝟏 +𝟐|𝟐|𝟐 +𝟑|𝟑|𝟑 +𝟒|𝟒|𝟒 +𝟓|𝟓|𝟓 +𝟔|𝟔|𝟔 +𝟕|𝟕|𝟕 +𝟖|𝟖|𝟖 +𝟗|𝟗|𝟗 +𝟘|𝟘|𝟘 +𝟙|𝟙|𝟙 +𝟚|𝟚|𝟚 +𝟛|𝟛|𝟛 +𝟜|𝟜|𝟜 +𝟝|𝟝|𝟝 +𝟞|𝟞|𝟞 +𝟟|𝟟|𝟟 +𝟠|𝟠|𝟠 +𝟡|𝟡|𝟡 +𝟢|𝟢|𝟢 +𝟣|𝟣|𝟣 +𝟤|𝟤|𝟤 +𝟥|𝟥|𝟥 +𝟦|𝟦|𝟦 +𝟧|𝟧|𝟧 +𝟨|𝟨|𝟨 +𝟩|𝟩|𝟩 +𝟪|𝟪|𝟪 +𝟫|𝟫|𝟫 +𝟬|𝟬|𝟬 +𝟭|𝟭|𝟭 +𝟮|𝟮|𝟮 +𝟯|𝟯|𝟯 +𝟰|𝟰|𝟰 +𝟱|𝟱|𝟱 +𝟲|𝟲|𝟲 +𝟳|𝟳|𝟳 +𝟴|𝟴|𝟴 +𝟵|𝟵|𝟵 +𝟶|𝟶|𝟶 +𝟷|𝟷|𝟷 +𝟸|𝟸|𝟸 +𝟹|𝟹|𝟹 +𝟺|𝟺|𝟺 +𝟻|𝟻|𝟻 +𝟼|𝟼|𝟼 +𝟽|𝟽|𝟽 +𝟾|𝟾|𝟾 +𝟿|𝟿|𝟿 +𞸀|𞸀|𞸀 +𞸁|𞸁|𞸁 +𞸂|𞸂|𞸂 +𞸃|𞸃|𞸃 +𞸅|𞸅|𞸅 +𞸆|𞸆|𞸆 +𞸇|𞸇|𞸇 +𞸈|𞸈|𞸈 +𞸉|𞸉|𞸉 +𞸊|𞸊|𞸊 +𞸋|𞸋|𞸋 +𞸌|𞸌|𞸌 +𞸍|𞸍|𞸍 +𞸎|𞸎|𞸎 +𞸏|𞸏|𞸏 +𞸐|𞸐|𞸐 +𞸑|𞸑|𞸑 +𞸒|𞸒|𞸒 +𞸓|𞸓|𞸓 +𞸔|𞸔|𞸔 +𞸕|𞸕|𞸕 +𞸖|𞸖|𞸖 +𞸗|𞸗|𞸗 +𞸘|𞸘|𞸘 +𞸙|𞸙|𞸙 +𞸚|𞸚|𞸚 +𞸛|𞸛|𞸛 +𞸜|𞸜|𞸜 +𞸝|𞸝|𞸝 +𞸞|𞸞|𞸞 +𞸟|𞸟|𞸟 +𞸡|𞸡|𞸡 +𞸢|𞸢|𞸢 +𞸤|𞸤|𞸤 +𞸧|𞸧|𞸧 +𞸩|𞸩|𞸩 +𞸪|𞸪|𞸪 +𞸫|𞸫|𞸫 +𞸬|𞸬|𞸬 +𞸭|𞸭|𞸭 +𞸮|𞸮|𞸮 +𞸯|𞸯|𞸯 +𞸰|𞸰|𞸰 +𞸱|𞸱|𞸱 +𞸲|𞸲|𞸲 +𞸴|𞸴|𞸴 +𞸵|𞸵|𞸵 +𞸶|𞸶|𞸶 +𞸷|𞸷|𞸷 +𞸹|𞸹|𞸹 +𞸻|𞸻|𞸻 +𞹂|𞹂|𞹂 +𞹇|𞹇|𞹇 +𞹉|𞹉|𞹉 +𞹋|𞹋|𞹋 +𞹍|𞹍|𞹍 +𞹎|𞹎|𞹎 +𞹏|𞹏|𞹏 +𞹑|𞹑|𞹑 +𞹒|𞹒|𞹒 +𞹔|𞹔|𞹔 +𞹗|𞹗|𞹗 +𞹙|𞹙|𞹙 +𞹛|𞹛|𞹛 +𞹝|𞹝|𞹝 +𞹟|𞹟|𞹟 +𞹡|𞹡|𞹡 +𞹢|𞹢|𞹢 +𞹤|𞹤|𞹤 +𞹧|𞹧|𞹧 +𞹨|𞹨|𞹨 +𞹩|𞹩|𞹩 +𞹪|𞹪|𞹪 +𞹬|𞹬|𞹬 +𞹭|𞹭|𞹭 +𞹮|𞹮|𞹮 +𞹯|𞹯|𞹯 +𞹰|𞹰|𞹰 +𞹱|𞹱|𞹱 +𞹲|𞹲|𞹲 +𞹴|𞹴|𞹴 +𞹵|𞹵|𞹵 +𞹶|𞹶|𞹶 +𞹷|𞹷|𞹷 +𞹹|𞹹|𞹹 +𞹺|𞹺|𞹺 +𞹻|𞹻|𞹻 +𞹼|𞹼|𞹼 +𞹾|𞹾|𞹾 +𞺀|𞺀|𞺀 +𞺁|𞺁|𞺁 +𞺂|𞺂|𞺂 +𞺃|𞺃|𞺃 +𞺄|𞺄|𞺄 +𞺅|𞺅|𞺅 +𞺆|𞺆|𞺆 +𞺇|𞺇|𞺇 +𞺈|𞺈|𞺈 +𞺉|𞺉|𞺉 +𞺋|𞺋|𞺋 +𞺌|𞺌|𞺌 +𞺍|𞺍|𞺍 +𞺎|𞺎|𞺎 +𞺏|𞺏|𞺏 +𞺐|𞺐|𞺐 +𞺑|𞺑|𞺑 +𞺒|𞺒|𞺒 +𞺓|𞺓|𞺓 +𞺔|𞺔|𞺔 +𞺕|𞺕|𞺕 +𞺖|𞺖|𞺖 +𞺗|𞺗|𞺗 +𞺘|𞺘|𞺘 +𞺙|𞺙|𞺙 +𞺚|𞺚|𞺚 +𞺛|𞺛|𞺛 +𞺡|𞺡|𞺡 +𞺢|𞺢|𞺢 +𞺣|𞺣|𞺣 +𞺥|𞺥|𞺥 +𞺦|𞺦|𞺦 +𞺧|𞺧|𞺧 +𞺨|𞺨|𞺨 +𞺩|𞺩|𞺩 +𞺫|𞺫|𞺫 +𞺬|𞺬|𞺬 +𞺭|𞺭|𞺭 +𞺮|𞺮|𞺮 +𞺯|𞺯|𞺯 +𞺰|𞺰|𞺰 +𞺱|𞺱|𞺱 +𞺲|𞺲|𞺲 +𞺳|𞺳|𞺳 +𞺴|𞺴|𞺴 +𞺵|𞺵|𞺵 +𞺶|𞺶|𞺶 +𞺷|𞺷|𞺷 +𞺸|𞺸|𞺸 +𞺹|𞺹|𞺹 +𞺺|𞺺|𞺺 +𞺻|𞺻|𞺻 +🄀|🄀|🄀 +🄁|🄁|🄁 +🄂|🄂|🄂 +🄃|🄃|🄃 +🄄|🄄|🄄 +🄅|🄅|🄅 +🄆|🄆|🄆 +🄇|🄇|🄇 +🄈|🄈|🄈 +🄉|🄉|🄉 +🄊|🄊|🄊 +🄐|🄐|🄐 +🄑|🄑|🄑 +🄒|🄒|🄒 +🄓|🄓|🄓 +🄔|🄔|🄔 +🄕|🄕|🄕 +🄖|🄖|🄖 +🄗|🄗|🄗 +🄘|🄘|🄘 +🄙|🄙|🄙 +🄚|🄚|🄚 +🄛|🄛|🄛 +🄜|🄜|🄜 +🄝|🄝|🄝 +🄞|🄞|🄞 +🄟|🄟|🄟 +🄠|🄠|🄠 +🄡|🄡|🄡 +🄢|🄢|🄢 +🄣|🄣|🄣 +🄤|🄤|🄤 +🄥|🄥|🄥 +🄦|🄦|🄦 +🄧|🄧|🄧 +🄨|🄨|🄨 +🄩|🄩|🄩 +🄪|🄪|🄪 +🄫|🄫|🄫 +🄬|🄬|🄬 +🄭|🄭|🄭 +🄮|🄮|🄮 +🄰|🄰|🄰 +🄱|🄱|🄱 +🄲|🄲|🄲 +🄳|🄳|🄳 +🄴|🄴|🄴 +🄵|🄵|🄵 +🄶|🄶|🄶 +🄷|🄷|🄷 +🄸|🄸|🄸 +🄹|🄹|🄹 +🄺|🄺|🄺 +🄻|🄻|🄻 +🄼|🄼|🄼 +🄽|🄽|🄽 +🄾|🄾|🄾 +🄿|🄿|🄿 +🅀|🅀|🅀 +🅁|🅁|🅁 +🅂|🅂|🅂 +🅃|🅃|🅃 +🅄|🅄|🅄 +🅅|🅅|🅅 +🅆|🅆|🅆 +🅇|🅇|🅇 +🅈|🅈|🅈 +🅉|🅉|🅉 +🅊|🅊|🅊 +🅋|🅋|🅋 +🅌|🅌|🅌 +🅍|🅍|🅍 +🅎|🅎|🅎 +🅏|🅏|🅏 +🅪|🅪|🅪 +🅫|🅫|🅫 +🅬|🅬|🅬 +🆐|🆐|🆐 +🈀|🈀|🈀 +🈁|🈁|🈁 +🈂|🈂|🈂 +🈐|🈐|🈐 +🈑|🈑|🈑 +🈒|🈒|🈒 +🈓|🈓|🈓 +🈔|🈔|🈔 +🈕|🈕|🈕 +🈖|🈖|🈖 +🈗|🈗|🈗 +🈘|🈘|🈘 +🈙|🈙|🈙 +🈚|🈚|🈚 +🈛|🈛|🈛 +🈜|🈜|🈜 +🈝|🈝|🈝 +🈞|🈞|🈞 +🈟|🈟|🈟 +🈠|🈠|🈠 +🈡|🈡|🈡 +🈢|🈢|🈢 +🈣|🈣|🈣 +🈤|🈤|🈤 +🈥|🈥|🈥 +🈦|🈦|🈦 +🈧|🈧|🈧 +🈨|🈨|🈨 +🈩|🈩|🈩 +🈪|🈪|🈪 +🈫|🈫|🈫 +🈬|🈬|🈬 +🈭|🈭|🈭 +🈮|🈮|🈮 +🈯|🈯|🈯 +🈰|🈰|🈰 +🈱|🈱|🈱 +🈲|🈲|🈲 +🈳|🈳|🈳 +🈴|🈴|🈴 +🈵|🈵|🈵 +🈶|🈶|🈶 +🈷|🈷|🈷 +🈸|🈸|🈸 +🈹|🈹|🈹 +🈺|🈺|🈺 +🈻|🈻|🈻 +🉀|🉀|🉀 +🉁|🉁|🉁 +🉂|🉂|🉂 +🉃|🉃|🉃 +🉄|🉄|🉄 +🉅|🉅|🉅 +🉆|🉆|🉆 +🉇|🉇|🉇 +🉈|🉈|🉈 +🉐|🉐|🉐 +🉑|🉑|🉑 +丽|丽|丽 +丸|丸|丸 +乁|乁|乁 +𠄢|𠄢|𠄢 +你|你|你 +侮|侮|侮 +侻|侻|侻 +倂|倂|倂 +偺|偺|偺 +備|備|備 +僧|僧|僧 +像|像|像 +㒞|㒞|㒞 +𠘺|𠘺|𠘺 +免|免|免 +兔|兔|兔 +兤|兤|兤 +具|具|具 +𠔜|𠔜|𠔜 +㒹|㒹|㒹 +內|內|內 +再|再|再 +𠕋|𠕋|𠕋 +冗|冗|冗 +冤|冤|冤 +仌|仌|仌 +冬|冬|冬 +况|况|况 +𩇟|𩇟|𩇟 +凵|凵|凵 +刃|刃|刃 +㓟|㓟|㓟 +刻|刻|刻 +剆|剆|剆 +割|割|割 +剷|剷|剷 +㔕|㔕|㔕 +勇|勇|勇 +勉|勉|勉 +勤|勤|勤 +勺|勺|勺 +包|包|包 +匆|匆|匆 +北|北|北 +卉|卉|卉 +卑|卑|卑 +博|博|博 +即|即|即 +卽|卽|卽 +卿|卿|卿 +卿|卿|卿 +卿|卿|卿 +𠨬|𠨬|𠨬 +灰|灰|灰 +及|及|及 +叟|叟|叟 +𠭣|𠭣|𠭣 +叫|叫|叫 +叱|叱|叱 +吆|吆|吆 +咞|咞|咞 +吸|吸|吸 +呈|呈|呈 +周|周|周 +咢|咢|咢 +哶|哶|哶 +唐|唐|唐 +啓|啓|啓 +啣|啣|啣 +善|善|善 +善|善|善 +喙|喙|喙 +喫|喫|喫 +喳|喳|喳 +嗂|嗂|嗂 +圖|圖|圖 +嘆|嘆|嘆 +圗|圗|圗 +噑|噑|噑 +噴|噴|噴 +切|切|切 +壮|壮|壮 +城|城|城 +埴|埴|埴 +堍|堍|堍 +型|型|型 +堲|堲|堲 +報|報|報 +墬|墬|墬 +𡓤|𡓤|𡓤 +売|売|売 +壷|壷|壷 +夆|夆|夆 +多|多|多 +夢|夢|夢 +奢|奢|奢 +𡚨|𡚨|𡚨 +𡛪|𡛪|𡛪 +姬|姬|姬 +娛|娛|娛 +娧|娧|娧 +姘|姘|姘 +婦|婦|婦 +㛮|㛮|㛮 +㛼|㛼|㛼 +嬈|嬈|嬈 +嬾|嬾|嬾 +嬾|嬾|嬾 +𡧈|𡧈|𡧈 +寃|寃|寃 +寘|寘|寘 +寧|寧|寧 +寳|寳|寳 +𡬘|𡬘|𡬘 +寿|寿|寿 +将|将|将 +当|当|当 +尢|尢|尢 +㞁|㞁|㞁 +屠|屠|屠 +屮|屮|屮 +峀|峀|峀 +岍|岍|岍 +𡷤|𡷤|𡷤 +嵃|嵃|嵃 +𡷦|𡷦|𡷦 +嵮|嵮|嵮 +嵫|嵫|嵫 +嵼|嵼|嵼 +巡|巡|巡 +巢|巢|巢 +㠯|㠯|㠯 +巽|巽|巽 +帨|帨|帨 +帽|帽|帽 +幩|幩|幩 +㡢|㡢|㡢 +𢆃|𢆃|𢆃 +㡼|㡼|㡼 +庰|庰|庰 +庳|庳|庳 +庶|庶|庶 +廊|廊|廊 +𪎒|𪎒|𪎒 +廾|廾|廾 +𢌱|𢌱|𢌱 +𢌱|𢌱|𢌱 +舁|舁|舁 +弢|弢|弢 +弢|弢|弢 +㣇|㣇|㣇 +𣊸|𣊸|𣊸 +𦇚|𦇚|𦇚 +形|形|形 +彫|彫|彫 +㣣|㣣|㣣 +徚|徚|徚 +忍|忍|忍 +志|志|志 +忹|忹|忹 +悁|悁|悁 +㤺|㤺|㤺 +㤜|㤜|㤜 +悔|悔|悔 +𢛔|𢛔|𢛔 +惇|惇|惇 +慈|慈|慈 +慌|慌|慌 +慎|慎|慎 +慌|慌|慌 +慺|慺|慺 +憎|憎|憎 +憲|憲|憲 +憤|憤|憤 +憯|憯|憯 +懞|懞|懞 +懲|懲|懲 +懶|懶|懶 +成|成|成 +戛|戛|戛 +扝|扝|扝 +抱|抱|抱 +拔|拔|拔 +捐|捐|捐 +𢬌|𢬌|𢬌 +挽|挽|挽 +拼|拼|拼 +捨|捨|捨 +掃|掃|掃 +揤|揤|揤 +𢯱|𢯱|𢯱 +搢|搢|搢 +揅|揅|揅 +掩|掩|掩 +㨮|㨮|㨮 +摩|摩|摩 +摾|摾|摾 +撝|撝|撝 +摷|摷|摷 +㩬|㩬|㩬 +敏|敏|敏 +敬|敬|敬 +𣀊|𣀊|𣀊 +旣|旣|旣 +書|書|書 +晉|晉|晉 +㬙|㬙|㬙 +暑|暑|暑 +㬈|㬈|㬈 +㫤|㫤|㫤 +冒|冒|冒 +冕|冕|冕 +最|最|最 +暜|暜|暜 +肭|肭|肭 +䏙|䏙|䏙 +朗|朗|朗 +望|望|望 +朡|朡|朡 +杞|杞|杞 +杓|杓|杓 +𣏃|𣏃|𣏃 +㭉|㭉|㭉 +柺|柺|柺 +枅|枅|枅 +桒|桒|桒 +梅|梅|梅 +𣑭|𣑭|𣑭 +梎|梎|梎 +栟|栟|栟 +椔|椔|椔 +㮝|㮝|㮝 +楂|楂|楂 +榣|榣|榣 +槪|槪|槪 +檨|檨|檨 +𣚣|𣚣|𣚣 +櫛|櫛|櫛 +㰘|㰘|㰘 +次|次|次 +𣢧|𣢧|𣢧 +歔|歔|歔 +㱎|㱎|㱎 +歲|歲|歲 +殟|殟|殟 +殺|殺|殺 +殻|殻|殻 +𣪍|𣪍|𣪍 +𡴋|𡴋|𡴋 +𣫺|𣫺|𣫺 +汎|汎|汎 +𣲼|𣲼|𣲼 +沿|沿|沿 +泍|泍|泍 +汧|汧|汧 +洖|洖|洖 +派|派|派 +海|海|海 +流|流|流 +浩|浩|浩 +浸|浸|浸 +涅|涅|涅 +𣴞|𣴞|𣴞 +洴|洴|洴 +港|港|港 +湮|湮|湮 +㴳|㴳|㴳 +滋|滋|滋 +滇|滇|滇 +𣻑|𣻑|𣻑 +淹|淹|淹 +潮|潮|潮 +𣽞|𣽞|𣽞 +𣾎|𣾎|𣾎 +濆|濆|濆 +瀹|瀹|瀹 +瀞|瀞|瀞 +瀛|瀛|瀛 +㶖|㶖|㶖 +灊|灊|灊 +災|災|災 +灷|灷|灷 +炭|炭|炭 +𠔥|𠔥|𠔥 +煅|煅|煅 +𤉣|𤉣|𤉣 +熜|熜|熜 +𤎫|𤎫|𤎫 +爨|爨|爨 +爵|爵|爵 +牐|牐|牐 +𤘈|𤘈|𤘈 +犀|犀|犀 +犕|犕|犕 +𤜵|𤜵|𤜵 +𤠔|𤠔|𤠔 +獺|獺|獺 +王|王|王 +㺬|㺬|㺬 +玥|玥|玥 +㺸|㺸|㺸 +㺸|㺸|㺸 +瑇|瑇|瑇 +瑜|瑜|瑜 +瑱|瑱|瑱 +璅|璅|璅 +瓊|瓊|瓊 +㼛|㼛|㼛 +甤|甤|甤 +𤰶|𤰶|𤰶 +甾|甾|甾 +𤲒|𤲒|𤲒 +異|異|異 +𢆟|𢆟|𢆟 +瘐|瘐|瘐 +𤾡|𤾡|𤾡 +𤾸|𤾸|𤾸 +𥁄|𥁄|𥁄 +㿼|㿼|㿼 +䀈|䀈|䀈 +直|直|直 +𥃳|𥃳|𥃳 +𥃲|𥃲|𥃲 +𥄙|𥄙|𥄙 +𥄳|𥄳|𥄳 +眞|眞|眞 +真|真|真 +真|真|真 +睊|睊|睊 +䀹|䀹|䀹 +瞋|瞋|瞋 +䁆|䁆|䁆 +䂖|䂖|䂖 +𥐝|𥐝|𥐝 +硎|硎|硎 +碌|碌|碌 +磌|磌|磌 +䃣|䃣|䃣 +𥘦|𥘦|𥘦 +祖|祖|祖 +𥚚|𥚚|𥚚 +𥛅|𥛅|𥛅 +福|福|福 +秫|秫|秫 +䄯|䄯|䄯 +穀|穀|穀 +穊|穊|穊 +穏|穏|穏 +𥥼|𥥼|𥥼 +𥪧|𥪧|𥪧 +𥪧|𥪧|𥪧 +竮|竮|竮 +䈂|䈂|䈂 +𥮫|𥮫|𥮫 +篆|篆|篆 +築|築|築 +䈧|䈧|䈧 +𥲀|𥲀|𥲀 +糒|糒|糒 +䊠|䊠|䊠 +糨|糨|糨 +糣|糣|糣 +紀|紀|紀 +𥾆|𥾆|𥾆 +絣|絣|絣 +䌁|䌁|䌁 +緇|緇|緇 +縂|縂|縂 +繅|繅|繅 +䌴|䌴|䌴 +𦈨|𦈨|𦈨 +𦉇|𦉇|𦉇 +䍙|䍙|䍙 +𦋙|𦋙|𦋙 +罺|罺|罺 +𦌾|𦌾|𦌾 +羕|羕|羕 +翺|翺|翺 +者|者|者 +𦓚|𦓚|𦓚 +𦔣|𦔣|𦔣 +聠|聠|聠 +𦖨|𦖨|𦖨 +聰|聰|聰 +𣍟|𣍟|𣍟 +䏕|䏕|䏕 +育|育|育 +脃|脃|脃 +䐋|䐋|䐋 +脾|脾|脾 +媵|媵|媵 +𦞧|𦞧|𦞧 +𦞵|𦞵|𦞵 +𣎓|𣎓|𣎓 +𣎜|𣎜|𣎜 +舁|舁|舁 +舄|舄|舄 +辞|辞|辞 +䑫|䑫|䑫 +芑|芑|芑 +芋|芋|芋 +芝|芝|芝 +劳|劳|劳 +花|花|花 +芳|芳|芳 +芽|芽|芽 +苦|苦|苦 +𦬼|𦬼|𦬼 +若|若|若 +茝|茝|茝 +荣|荣|荣 +莭|莭|莭 +茣|茣|茣 +莽|莽|莽 +菧|菧|菧 +著|著|著 +荓|荓|荓 +菊|菊|菊 +菌|菌|菌 +菜|菜|菜 +𦰶|𦰶|𦰶 +𦵫|𦵫|𦵫 +𦳕|𦳕|𦳕 +䔫|䔫|䔫 +蓱|蓱|蓱 +蓳|蓳|蓳 +蔖|蔖|蔖 +𧏊|𧏊|𧏊 +蕤|蕤|蕤 +𦼬|𦼬|𦼬 +䕝|䕝|䕝 +䕡|䕡|䕡 +𦾱|𦾱|𦾱 +𧃒|𧃒|𧃒 +䕫|䕫|䕫 +虐|虐|虐 +虜|虜|虜 +虧|虧|虧 +虩|虩|虩 +蚩|蚩|蚩 +蚈|蚈|蚈 +蜎|蜎|蜎 +蛢|蛢|蛢 +蝹|蝹|蝹 +蜨|蜨|蜨 +蝫|蝫|蝫 +螆|螆|螆 +䗗|䗗|䗗 +蟡|蟡|蟡 +蠁|蠁|蠁 +䗹|䗹|䗹 +衠|衠|衠 +衣|衣|衣 +𧙧|𧙧|𧙧 +裗|裗|裗 +裞|裞|裞 +䘵|䘵|䘵 +裺|裺|裺 +㒻|㒻|㒻 +𧢮|𧢮|𧢮 +𧥦|𧥦|𧥦 +䚾|䚾|䚾 +䛇|䛇|䛇 +誠|誠|誠 +諭|諭|諭 +變|變|變 +豕|豕|豕 +𧲨|𧲨|𧲨 +貫|貫|貫 +賁|賁|賁 +贛|贛|贛 +起|起|起 +𧼯|𧼯|𧼯 +𠠄|𠠄|𠠄 +跋|跋|跋 +趼|趼|趼 +跰|跰|跰 +𠣞|𠣞|𠣞 +軔|軔|軔 +輸|輸|輸 +𨗒|𨗒|𨗒 +𨗭|𨗭|𨗭 +邔|邔|邔 +郱|郱|郱 +鄑|鄑|鄑 +𨜮|𨜮|𨜮 +鄛|鄛|鄛 +鈸|鈸|鈸 +鋗|鋗|鋗 +鋘|鋘|鋘 +鉼|鉼|鉼 +鏹|鏹|鏹 +鐕|鐕|鐕 +𨯺|𨯺|𨯺 +開|開|開 +䦕|䦕|䦕 +閷|閷|閷 +𨵷|𨵷|𨵷 +䧦|䧦|䧦 +雃|雃|雃 +嶲|嶲|嶲 +霣|霣|霣 +𩅅|𩅅|𩅅 +𩈚|𩈚|𩈚 +䩮|䩮|䩮 +䩶|䩶|䩶 +韠|韠|韠 +𩐊|𩐊|𩐊 +䪲|䪲|䪲 +𩒖|𩒖|𩒖 +頋|頋|頋 +頋|頋|頋 +頩|頩|頩 +𩖶|𩖶|𩖶 +飢|飢|飢 +䬳|䬳|䬳 +餩|餩|餩 +馧|馧|馧 +駂|駂|駂 +駾|駾|駾 +䯎|䯎|䯎 +𩬰|𩬰|𩬰 +鬒|鬒|鬒 +鱀|鱀|鱀 +鳽|鳽|鳽 +䳎|䳎|䳎 +䳭|䳭|䳭 +鵧|鵧|鵧 +𪃎|𪃎|𪃎 +䳸|䳸|䳸 +𪄅|𪄅|𪄅 +𪈎|𪈎|𪈎 +𪊑|𪊑|𪊑 +麻|麻|麻 +䵖|䵖|䵖 +黹|黹|黹 +黾|黾|黾 +鼅|鼅|鼅 +鼏|鼏|鼏 +鼖|鼖|鼖 +鼻|鼻|鼻 +𪘀|𪘀|𪘀 +à֮̀̕b|à֮̀̕b|à֮̀̕b +à֮̀̕b|à֮̀̕b|à֮̀̕b +à֮́̕b|à֮́̕b|à֮́̕b +á֮̀̕b|á֮̀̕b|á֮̀̕b +à֮̂̕b|à֮̂̕b|à֮̂̕b +ầ֮̕b|ầ֮̕b|ầ֮̕b +à֮̃̕b|à֮̃̕b|à֮̃̕b +ã֮̀̕b|ã֮̀̕b|ã֮̀̕b +à֮̄̕b|à֮̄̕b|à֮̄̕b +ā֮̀̕b|ā֮̀̕b|ā֮̀̕b +à֮̅̕b|à֮̅̕b|à֮̅̕b +a֮̅̀̕b|a֮̅̀̕b|a֮̅̀̕b +à֮̆̕b|à֮̆̕b|à֮̆̕b +ằ֮̕b|ằ֮̕b|ằ֮̕b +à֮̇̕b|à֮̇̕b|à֮̇̕b +ȧ֮̀̕b|ȧ֮̀̕b|ȧ֮̀̕b +à֮̈̕b|à֮̈̕b|à֮̈̕b +ä֮̀̕b|ä֮̀̕b|ä֮̀̕b +à֮̉̕b|à֮̉̕b|à֮̉̕b +ả֮̀̕b|ả֮̀̕b|ả֮̀̕b +à֮̊̕b|à֮̊̕b|à֮̊̕b +å֮̀̕b|å֮̀̕b|å֮̀̕b +à֮̋̕b|à֮̋̕b|à֮̋̕b +a֮̋̀̕b|a֮̋̀̕b|a֮̋̀̕b +à֮̌̕b|à֮̌̕b|à֮̌̕b +ǎ֮̀̕b|ǎ֮̀̕b|ǎ֮̀̕b +à֮̍̕b|à֮̍̕b|à֮̍̕b +a֮̍̀̕b|a֮̍̀̕b|a֮̍̀̕b +à֮̎̕b|à֮̎̕b|à֮̎̕b +a֮̎̀̕b|a֮̎̀̕b|a֮̎̀̕b +à֮̏̕b|à֮̏̕b|à֮̏̕b +ȁ֮̀̕b|ȁ֮̀̕b|ȁ֮̀̕b +à֮̐̕b|à֮̐̕b|à֮̐̕b +a֮̐̀̕b|a֮̐̀̕b|a֮̐̀̕b +à֮̑̕b|à֮̑̕b|à֮̑̕b +ȃ֮̀̕b|ȃ֮̀̕b|ȃ֮̀̕b +à֮̒̕b|à֮̒̕b|à֮̒̕b +a֮̒̀̕b|a֮̒̀̕b|a֮̒̀̕b +à֮̓̕b|à֮̓̕b|à֮̓̕b +a֮̓̀̕b|a֮̓̀̕b|a֮̓̀̕b +à֮̔̕b|à֮̔̕b|à֮̔̕b +a֮̔̀̕b|a֮̔̀̕b|a֮̔̀̕b +à̕̕͜b|à̕̕͜b|à̕̕͜b +à̕̕͜b|à̕̕͜b|à̕̕͜b +a〪̖̖֚b|a〪̖̖֚b|a〪̖̖֚b +a〪̖̖֚b|a〪̖̖֚b|a〪̖̖֚b +a〪̖̗֚b|a〪̖̗֚b|a〪̖̗֚b +a〪̗̖֚b|a〪̗̖֚b|a〪̗̖֚b +a〪̖̘֚b|a〪̖̘֚b|a〪̖̘֚b +a〪̘̖֚b|a〪̘̖֚b|a〪̘̖֚b +a〪̖̙֚b|a〪̖̙֚b|a〪̖̙֚b +a〪̙̖֚b|a〪̙̖֚b|a〪̙̖֚b +à̕̚͜b|à̕̚͜b|à̕̚͜b +à̚̕͜b|à̚̕͜b|à̚̕͜b +a᷎̛̛〪b|a᷎̛̛〪b|a᷎̛̛〪b +a᷎̛̛〪b|a᷎̛̛〪b|a᷎̛̛〪b +a〪̖̜֚b|a〪̖̜֚b|a〪̖̜֚b +a〪̜̖֚b|a〪̜̖֚b|a〪̜̖֚b +a〪̖̝֚b|a〪̖̝֚b|a〪̖̝֚b +a〪̝̖֚b|a〪̝̖֚b|a〪̝̖֚b +a〪̖̞֚b|a〪̖̞֚b|a〪̖̞֚b +a〪̞̖֚b|a〪̞̖֚b|a〪̞̖֚b +a〪̖̟֚b|a〪̖̟֚b|a〪̖̟֚b +a〪̟̖֚b|a〪̟̖֚b|a〪̟̖֚b +a〪̖̠֚b|a〪̖̠֚b|a〪̖̠֚b +a〪̠̖֚b|a〪̠̖֚b|a〪̠̖֚b +aུ̡̡᷎b|aུ̡̡᷎b|aུ̡̡᷎b +aུ̡̡᷎b|aུ̡̡᷎b|aུ̡̡᷎b +aུ̡̢᷎b|aུ̡̢᷎b|aུ̡̢᷎b +aུ̢̡᷎b|aུ̢̡᷎b|aུ̢̡᷎b +a〪̖̣֚b|a〪̖̣֚b|a〪̖̣֚b +ạ〪̖֚b|ạ〪̖֚b|ạ〪̖֚b +a〪̖̤֚b|a〪̖̤֚b|a〪̖̤֚b +a〪̤̖֚b|a〪̤̖֚b|a〪̤̖֚b +a〪̖̥֚b|a〪̖̥֚b|a〪̖̥֚b +ḁ〪̖֚b|ḁ〪̖֚b|ḁ〪̖֚b +a〪̖̦֚b|a〪̖̦֚b|a〪̖̦֚b +a〪̦̖֚b|a〪̦̖֚b|a〪̦̖֚b +aུ̡̧᷎b|aུ̡̧᷎b|aུ̡̧᷎b +aུ̧̡᷎b|aུ̧̡᷎b|aུ̧̡᷎b +aུ̡̨᷎b|aུ̡̨᷎b|aུ̡̨᷎b +ąུ̡᷎b|ąུ̡᷎b|ąུ̡᷎b +a〪̖̩֚b|a〪̖̩֚b|a〪̖̩֚b +a〪̩̖֚b|a〪̩̖֚b|a〪̩̖֚b +a〪̖̪֚b|a〪̖̪֚b|a〪̖̪֚b +a〪̪̖֚b|a〪̪̖֚b|a〪̪̖֚b +a〪̖̫֚b|a〪̖̫֚b|a〪̖̫֚b +a〪̫̖֚b|a〪̫̖֚b|a〪̫̖֚b +a〪̖̬֚b|a〪̖̬֚b|a〪̖̬֚b +a〪̬̖֚b|a〪̬̖֚b|a〪̬̖֚b +a〪̖̭֚b|a〪̖̭֚b|a〪̖̭֚b +a〪̭̖֚b|a〪̭̖֚b|a〪̭̖֚b +a〪̖̮֚b|a〪̖̮֚b|a〪̖̮֚b +a〪̮̖֚b|a〪̮̖֚b|a〪̮̖֚b +a〪̖̯֚b|a〪̖̯֚b|a〪̖̯֚b +a〪̯̖֚b|a〪̯̖֚b|a〪̯̖֚b +a〪̖̰֚b|a〪̖̰֚b|a〪̖̰֚b +a〪̰̖֚b|a〪̰̖֚b|a〪̰̖֚b +a〪̖̱֚b|a〪̖̱֚b|a〪̖̱֚b +a〪̱̖֚b|a〪̱̖֚b|a〪̱̖֚b +a〪̖̲֚b|a〪̖̲֚b|a〪̖̲֚b +a〪̲̖֚b|a〪̲̖֚b|a〪̲̖֚b +a〪̖̳֚b|a〪̖̳֚b|a〪̖̳֚b +a〪̳̖֚b|a〪̳̖֚b|a〪̳̖֚b +a̴̴़b|a̴̴़b|a̴̴़b +a̴̴़b|a̴̴़b|a̴̴़b +a̴̵़b|a̴̵़b|a̴̵़b +a̵̴़b|a̵̴़b|a̵̴़b +a̴̶़b|a̴̶़b|a̴̶़b +a̶̴़b|a̶̴़b|a̶̴़b +a̴̷़b|a̴̷़b|a̴̷़b +a̷̴़b|a̷̴़b|a̷̴़b +a̴̸़b|a̴̸़b|a̴̸़b +a̸̴़b|a̸̴़b|a̸̴़b +a〪̖̹֚b|a〪̖̹֚b|a〪̖̹֚b +a〪̹̖֚b|a〪̹̖֚b|a〪̹̖֚b +a〪̖̺֚b|a〪̖̺֚b|a〪̖̺֚b +a〪̺̖֚b|a〪̺̖֚b|a〪̺̖֚b +a〪̖̻֚b|a〪̖̻֚b|a〪̖̻֚b +a〪̻̖֚b|a〪̻̖֚b|a〪̻̖֚b +a〪̖̼֚b|a〪̖̼֚b|a〪̖̼֚b +a〪̼̖֚b|a〪̼̖֚b|a〪̼̖֚b +à֮̽̕b|à֮̽̕b|à֮̽̕b +a֮̽̀̕b|a֮̽̀̕b|a֮̽̀̕b +à֮̾̕b|à֮̾̕b|à֮̾̕b +a֮̾̀̕b|a֮̾̀̕b|a֮̾̀̕b +à֮̿̕b|à֮̿̕b|à֮̿̕b +a֮̿̀̕b|a֮̿̀̕b|a֮̿̀̕b +à֮̀̕b|à֮̀̕b|à֮̀̕b +à֮̀̕b|à֮̀̕b|à֮̀̕b +à֮́̕b|à֮́̕b|à֮́̕b +á֮̀̕b|á֮̀̕b|á֮̀̕b +à֮͂̕b|à֮͂̕b|à֮͂̕b +a֮͂̀̕b|a֮͂̀̕b|a֮͂̀̕b +à֮̓̕b|à֮̓̕b|à֮̓̕b +a֮̓̀̕b|a֮̓̀̕b|a֮̓̀̕b +à֮̈́̕b|à֮̈́̕b|à֮̈́̕b +ä֮́̀̕b|ä֮́̀̕b|ä֮́̀̕b +a͝ͅͅb|a͝ͅͅb|a͝ͅͅb +a͝ͅͅb|a͝ͅͅb|a͝ͅͅb +à֮͆̕b|à֮͆̕b|à֮͆̕b +a֮͆̀̕b|a֮͆̀̕b|a֮͆̀̕b +a〪̖͇֚b|a〪̖͇֚b|a〪̖͇֚b +a〪͇̖֚b|a〪͇̖֚b|a〪͇̖֚b +a〪̖͈֚b|a〪̖͈֚b|a〪̖͈֚b +a〪͈̖֚b|a〪͈̖֚b|a〪͈̖֚b +a〪̖͉֚b|a〪̖͉֚b|a〪̖͉֚b +a〪͉̖֚b|a〪͉̖֚b|a〪͉̖֚b +à֮͊̕b|à֮͊̕b|à֮͊̕b +a֮͊̀̕b|a֮͊̀̕b|a֮͊̀̕b +à֮͋̕b|à֮͋̕b|à֮͋̕b +a֮͋̀̕b|a֮͋̀̕b|a֮͋̀̕b +à֮͌̕b|à֮͌̕b|à֮͌̕b +a֮͌̀̕b|a֮͌̀̕b|a֮͌̀̕b +a〪̖͍֚b|a〪̖͍֚b|a〪̖͍֚b +a〪͍̖֚b|a〪͍̖֚b|a〪͍̖֚b +a〪̖͎֚b|a〪̖͎֚b|a〪̖͎֚b +a〪͎̖֚b|a〪͎̖֚b|a〪͎̖֚b +à֮͐̕b|à֮͐̕b|à֮͐̕b +a֮͐̀̕b|a֮͐̀̕b|a֮͐̀̕b +à֮͑̕b|à֮͑̕b|à֮͑̕b +a֮͑̀̕b|a֮͑̀̕b|a֮͑̀̕b +à֮͒̕b|à֮͒̕b|à֮͒̕b +a֮͒̀̕b|a֮͒̀̕b|a֮͒̀̕b +a〪̖͓֚b|a〪̖͓֚b|a〪̖͓֚b +a〪͓̖֚b|a〪͓̖֚b|a〪͓̖֚b +a〪̖͔֚b|a〪̖͔֚b|a〪̖͔֚b +a〪͔̖֚b|a〪͔̖֚b|a〪͔̖֚b +a〪̖͕֚b|a〪̖͕֚b|a〪̖͕֚b +a〪͕̖֚b|a〪͕̖֚b|a〪͕̖֚b +a〪̖͖֚b|a〪̖͖֚b|a〪̖͖֚b +a〪͖̖֚b|a〪͖̖֚b|a〪͖̖֚b +à֮͗̕b|à֮͗̕b|à֮͗̕b +a֮͗̀̕b|a֮͗̀̕b|a֮͗̀̕b +à̕͘͜b|à̕͘͜b|à̕͘͜b +à͘̕͜b|à͘̕͜b|à͘̕͜b +a〪̖͙֚b|a〪̖͙֚b|a〪̖͙֚b +a〪͙̖֚b|a〪͙̖֚b|a〪͙̖֚b +a〪̖͚֚b|a〪̖͚֚b|a〪̖͚֚b +a〪͚̖֚b|a〪͚̖֚b|a〪͚̖֚b +à֮͛̕b|à֮͛̕b|à֮͛̕b +a֮͛̀̕b|a֮͛̀̕b|a֮͛̀̕b +a̕͜͜͝b|a̕͜͜͝b|a̕͜͜͝b +a̕͜͜͝b|a̕͜͜͝b|a̕͜͜͝b +a͜͝͝ͅb|a͜͝͝ͅb|a͜͝͝ͅb +a͜͝͝ͅb|a͜͝͝ͅb|a͜͝͝ͅb +a͜͝͞ͅb|a͜͝͞ͅb|a͜͝͞ͅb +a͜͞͝ͅb|a͜͞͝ͅb|a͜͞͝ͅb +a̕͜͟͝b|a̕͜͟͝b|a̕͜͟͝b +a̕͟͜͝b|a̕͟͜͝b|a̕͟͜͝b +a͜͝͠ͅb|a͜͝͠ͅb|a͜͝͠ͅb +a͜͠͝ͅb|a͜͠͝ͅb|a͜͠͝ͅb +a͜͝͡ͅb|a͜͝͡ͅb|a͜͝͡ͅb +a͜͡͝ͅb|a͜͡͝ͅb|a͜͡͝ͅb +a̕͜͢͝b|a̕͜͢͝b|a̕͜͢͝b +a̕͢͜͝b|a̕͢͜͝b|a̕͢͜͝b +à֮ͣ̕b|à֮ͣ̕b|à֮ͣ̕b +a֮ͣ̀̕b|a֮ͣ̀̕b|a֮ͣ̀̕b +à֮ͤ̕b|à֮ͤ̕b|à֮ͤ̕b +a֮ͤ̀̕b|a֮ͤ̀̕b|a֮ͤ̀̕b +à֮ͥ̕b|à֮ͥ̕b|à֮ͥ̕b +a֮ͥ̀̕b|a֮ͥ̀̕b|a֮ͥ̀̕b +à֮ͦ̕b|à֮ͦ̕b|à֮ͦ̕b +a֮ͦ̀̕b|a֮ͦ̀̕b|a֮ͦ̀̕b +à֮ͧ̕b|à֮ͧ̕b|à֮ͧ̕b +a֮ͧ̀̕b|a֮ͧ̀̕b|a֮ͧ̀̕b +à֮ͨ̕b|à֮ͨ̕b|à֮ͨ̕b +a֮ͨ̀̕b|a֮ͨ̀̕b|a֮ͨ̀̕b +à֮ͩ̕b|à֮ͩ̕b|à֮ͩ̕b +a֮ͩ̀̕b|a֮ͩ̀̕b|a֮ͩ̀̕b +à֮ͪ̕b|à֮ͪ̕b|à֮ͪ̕b +a֮ͪ̀̕b|a֮ͪ̀̕b|a֮ͪ̀̕b +à֮ͫ̕b|à֮ͫ̕b|à֮ͫ̕b +a֮ͫ̀̕b|a֮ͫ̀̕b|a֮ͫ̀̕b +à֮ͬ̕b|à֮ͬ̕b|à֮ͬ̕b +a֮ͬ̀̕b|a֮ͬ̀̕b|a֮ͬ̀̕b +à֮ͭ̕b|à֮ͭ̕b|à֮ͭ̕b +a֮ͭ̀̕b|a֮ͭ̀̕b|a֮ͭ̀̕b +à֮ͮ̕b|à֮ͮ̕b|à֮ͮ̕b +a֮ͮ̀̕b|a֮ͮ̀̕b|a֮ͮ̀̕b +à֮ͯ̕b|à֮ͯ̕b|à֮ͯ̕b +a֮ͯ̀̕b|a֮ͯ̀̕b|a֮ͯ̀̕b +à֮҃̕b|à֮҃̕b|à֮҃̕b +a֮҃̀̕b|a֮҃̀̕b|a֮҃̀̕b +à֮҄̕b|à֮҄̕b|à֮҄̕b +a֮҄̀̕b|a֮҄̀̕b|a֮҄̀̕b +à֮҅̕b|à֮҅̕b|à֮҅̕b +a֮҅̀̕b|a֮҅̀̕b|a֮҅̀̕b +à֮҆̕b|à֮҆̕b|à֮҆̕b +a֮҆̀̕b|a֮҆̀̕b|a֮҆̀̕b +à֮҇̕b|à֮҇̕b|à֮҇̕b +a֮҇̀̕b|a֮҇̀̕b|a֮҇̀̕b +a〪̖֑֚b|a〪̖֑֚b|a〪̖֑֚b +a〪֑̖֚b|a〪֑̖֚b|a〪֑̖֚b +à֮֒̕b|à֮֒̕b|à֮֒̕b +a֮֒̀̕b|a֮֒̀̕b|a֮֒̀̕b +à֮֓̕b|à֮֓̕b|à֮֓̕b +a֮֓̀̕b|a֮֓̀̕b|a֮֓̀̕b +à֮֔̕b|à֮֔̕b|à֮֔̕b +a֮֔̀̕b|a֮֔̀̕b|a֮֔̀̕b +à֮֕̕b|à֮֕̕b|à֮֕̕b +a֮֕̀̕b|a֮֕̀̕b|a֮֕̀̕b +a〪̖֖֚b|a〪̖֖֚b|a〪̖֖֚b +a〪֖̖֚b|a〪֖̖֚b|a〪֖̖֚b +à֮֗̕b|à֮֗̕b|à֮֗̕b +a֮֗̀̕b|a֮֗̀̕b|a֮֗̀̕b +à֮֘̕b|à֮֘̕b|à֮֘̕b +a֮֘̀̕b|a֮֘̀̕b|a֮֘̀̕b +à֮֙̕b|à֮֙̕b|à֮֙̕b +a֮֙̀̕b|a֮֙̀̕b|a֮֙̀̕b +a̖֚֚〮b|a̖֚֚〮b|a̖֚֚〮b +a̖֚֚〮b|a̖֚֚〮b|a̖֚֚〮b +a〪̖֛֚b|a〪̖֛֚b|a〪̖֛֚b +a〪֛̖֚b|a〪֛̖֚b|a〪֛̖֚b +à֮֜̕b|à֮֜̕b|à֮֜̕b +a֮֜̀̕b|a֮֜̀̕b|a֮֜̀̕b +à֮֝̕b|à֮֝̕b|à֮֝̕b +a֮֝̀̕b|a֮֝̀̕b|a֮֝̀̕b +à֮֞̕b|à֮֞̕b|à֮֞̕b +a֮֞̀̕b|a֮֞̀̕b|a֮֞̀̕b +à֮֟̕b|à֮֟̕b|à֮֟̕b +a֮֟̀̕b|a֮֟̀̕b|a֮֟̀̕b +à֮֠̕b|à֮֠̕b|à֮֠̕b +a֮֠̀̕b|a֮֠̀̕b|a֮֠̀̕b +à֮֡̕b|à֮֡̕b|à֮֡̕b +a֮֡̀̕b|a֮֡̀̕b|a֮֡̀̕b +a〪̖֢֚b|a〪̖֢֚b|a〪̖֢֚b +a〪֢̖֚b|a〪֢̖֚b|a〪֢̖֚b +a〪̖֣֚b|a〪̖֣֚b|a〪̖֣֚b +a〪֣̖֚b|a〪֣̖֚b|a〪֣̖֚b +a〪̖֤֚b|a〪̖֤֚b|a〪̖֤֚b +a〪֤̖֚b|a〪֤̖֚b|a〪֤̖֚b +a〪̖֥֚b|a〪̖֥֚b|a〪̖֥֚b +a〪֥̖֚b|a〪֥̖֚b|a〪֥̖֚b +a〪̖֦֚b|a〪̖֦֚b|a〪̖֦֚b +a〪֦̖֚b|a〪֦̖֚b|a〪֦̖֚b +a〪̖֧֚b|a〪̖֧֚b|a〪̖֧֚b +a〪֧̖֚b|a〪֧̖֚b|a〪֧̖֚b +à֮֨̕b|à֮֨̕b|à֮֨̕b +a֮֨̀̕b|a֮֨̀̕b|a֮֨̀̕b +à֮֩̕b|à֮֩̕b|à֮֩̕b +a֮֩̀̕b|a֮֩̀̕b|a֮֩̀̕b +a〪̖֪֚b|a〪̖֪֚b|a〪̖֪֚b +a〪֪̖֚b|a〪֪̖֚b|a〪֪̖֚b +à֮֫̕b|à֮֫̕b|à֮֫̕b +a֮֫̀̕b|a֮֫̀̕b|a֮֫̀̕b +à֮֬̕b|à֮֬̕b|à֮֬̕b +a֮֬̀̕b|a֮֬̀̕b|a֮֬̀̕b +a̖֚֭〮b|a̖֚֭〮b|a̖֚֭〮b +a̖֭֚〮b|a̖֭֚〮b|a̖֭֚〮b +à𝅭֮֮b|à𝅭֮֮b|à𝅭֮֮b +à𝅭֮֮b|à𝅭֮֮b|à𝅭֮֮b +à֮֯̕b|à֮֯̕b|à֮֯̕b +a֮֯̀̕b|a֮֯̀̕b|a֮֯̀̕b +a्ְְֱb|a्ְְֱb|a्ְְֱb +a्ְְֱb|a्ְְֱb|a्ְְֱb +aְֱֱֲb|aְֱֱֲb|aְֱֱֲb +aְֱֱֲb|aְֱֱֲb|aְֱֱֲb +aֱֲֲֳb|aֱֲֲֳb|aֱֲֲֳb +aֱֲֲֳb|aֱֲֲֳb|aֱֲֲֳb +aֲֳֳִb|aֲֳֳִb|aֲֳֳִb +aֲֳֳִb|aֲֳֳִb|aֲֳֳִb +aֳִִֵb|aֳִִֵb|aֳִִֵb +aֳִִֵb|aֳִִֵb|aֳִִֵb +aִֵֵֶb|aִֵֵֶb|aִֵֵֶb +aִֵֵֶb|aִֵֵֶb|aִֵֵֶb +aֵֶֶַb|aֵֶֶַb|aֵֶֶַb +aֵֶֶַb|aֵֶֶַb|aֵֶֶַb +aֶַַָb|aֶַַָb|aֶַַָb +aֶַַָb|aֶַַָb|aֶַַָb +aַָָֹb|aַָָֹb|aַָָֹb +aַָָֹb|aַָָֹb|aַָָֹb +aָֹֹֻb|aָֹֹֻb|aָֹֹֻb +aָֹֹֻb|aָֹֹֻb|aָֹֹֻb +aָֹֺֻb|aָֹֺֻb|aָֹֺֻb +aָֺֹֻb|aָֺֹֻb|aָֺֹֻb +aֹֻֻּb|aֹֻֻּb|aֹֻֻּb +aֹֻֻּb|aֹֻֻּb|aֹֻֻּb +aֻּּֽb|aֻּּֽb|aֻּּֽb +aֻּּֽb|aֻּּֽb|aֻּּֽb +aּֽֽֿb|aּֽֽֿb|aּֽֽֿb +aּֽֽֿb|aּֽֽֿb|aּֽֽֿb +aֽֿֿׁb|aֽֿֿׁb|aֽֿֿׁb +aֽֿֿׁb|aֽֿֿׁb|aֽֿֿׁb +aֿׁׁׂb|aֿׁׁׂb|aֿׁׁׂb +aֿׁׁׂb|aֿׁׁׂb|aֿׁׁׂb +aׁׂׂﬞb|aׁׂׂﬞb|aׁׂׂﬞb +aׁׂׂﬞb|aׁׂׂﬞb|aׁׂׂﬞb +à֮ׄ̕b|à֮ׄ̕b|à֮ׄ̕b +a֮ׄ̀̕b|a֮ׄ̀̕b|a֮ׄ̀̕b +a〪̖ׅ֚b|a〪̖ׅ֚b|a〪̖ׅ֚b +a〪ׅ̖֚b|a〪ׅ̖֚b|a〪ׅ̖֚b +aַָׇֹb|aַָׇֹb|aַָׇֹb +aַׇָֹb|aַׇָֹb|aַׇָֹb +à֮ؐ̕b|à֮ؐ̕b|à֮ؐ̕b +a֮ؐ̀̕b|a֮ؐ̀̕b|a֮ؐ̀̕b +à֮ؑ̕b|à֮ؑ̕b|à֮ؑ̕b +a֮ؑ̀̕b|a֮ؑ̀̕b|a֮ؑ̀̕b +à֮ؒ̕b|à֮ؒ̕b|à֮ؒ̕b +a֮ؒ̀̕b|a֮ؒ̀̕b|a֮ؒ̀̕b +à֮ؓ̕b|à֮ؓ̕b|à֮ؓ̕b +a֮ؓ̀̕b|a֮ؓ̀̕b|a֮ؓ̀̕b +à֮ؔ̕b|à֮ؔ̕b|à֮ؔ̕b +a֮ؔ̀̕b|a֮ؔ̀̕b|a֮ؔ̀̕b +à֮ؕ̕b|à֮ؕ̕b|à֮ؕ̕b +a֮ؕ̀̕b|a֮ؕ̀̕b|a֮ؕ̀̕b +à֮ؖ̕b|à֮ؖ̕b|à֮ؖ̕b +a֮ؖ̀̕b|a֮ؖ̀̕b|a֮ؖ̀̕b +à֮ؗ̕b|à֮ؗ̕b|à֮ؗ̕b +a֮ؗ̀̕b|a֮ؗ̀̕b|a֮ؗ̀̕b +aٍؘؘؙb|aٍؘؘؙb|aٍؘؘؙb +aٍؘؘؙb|aٍؘؘؙb|aٍؘؘؙb +aؘؙؙؚb|aؘؙؙؚb|aؘؙؙؚb +aؘؙؙؚb|aؘؙؙؚb|aؘؙؙؚb +aؙؚؚّb|aؙؚؚّb|aؙؚؚّb +aؙؚؚّb|aؙؚؚّb|aؙؚؚّb +aﬞًًٌb|aﬞًًٌb|aﬞًًٌb +aﬞًًٌb|aﬞًًٌb|aﬞًًٌb +aًٌٌٍb|aًٌٌٍb|aًٌٌٍb +aًٌٌٍb|aًٌٌٍb|aًٌٌٍb +aٌٍٍؘb|aٌٍٍؘb|aٌٍٍؘb +aٌٍٍؘb|aٌٍٍؘb|aٌٍٍؘb +aٍؘَؙb|aٍؘَؙb|aٍؘَؙb +aٍَؘؙb|aٍَؘؙb|aٍَؘؙb +aؘؙُؚb|aؘؙُؚb|aؘؙُؚb +aؘُؙؚb|aؘُؙؚb|aؘُؙؚb +aؙؚِّb|aؙؚِّb|aؙؚِّb +aؙِؚّb|aؙِؚّb|aؙِؚّb +aؚّّْb|aؚّّْb|aؚّّْb +aؚّّْb|aؚّّْb|aؚّّْb +aّْْٰb|aّْْٰb|aّْْٰb +aّْْٰb|aّْْٰb|aّْْٰb +à֮ٓ̕b|à֮ٓ̕b|à֮ٓ̕b +a֮ٓ̀̕b|a֮ٓ̀̕b|a֮ٓ̀̕b +à֮ٔ̕b|à֮ٔ̕b|à֮ٔ̕b +a֮ٔ̀̕b|a֮ٔ̀̕b|a֮ٔ̀̕b +a〪̖ٕ֚b|a〪̖ٕ֚b|a〪̖ٕ֚b +a〪ٕ̖֚b|a〪ٕ̖֚b|a〪ٕ̖֚b +a〪̖ٖ֚b|a〪̖ٖ֚b|a〪̖ٖ֚b +a〪ٖ̖֚b|a〪ٖ̖֚b|a〪ٖ̖֚b +à֮ٗ̕b|à֮ٗ̕b|à֮ٗ̕b +a֮ٗ̀̕b|a֮ٗ̀̕b|a֮ٗ̀̕b +à֮٘̕b|à֮٘̕b|à֮٘̕b +a֮٘̀̕b|a֮٘̀̕b|a֮٘̀̕b +à֮ٙ̕b|à֮ٙ̕b|à֮ٙ̕b +a֮ٙ̀̕b|a֮ٙ̀̕b|a֮ٙ̀̕b +à֮ٚ̕b|à֮ٚ̕b|à֮ٚ̕b +a֮ٚ̀̕b|a֮ٚ̀̕b|a֮ٚ̀̕b +à֮ٛ̕b|à֮ٛ̕b|à֮ٛ̕b +a֮ٛ̀̕b|a֮ٛ̀̕b|a֮ٛ̀̕b +a〪̖ٜ֚b|a〪̖ٜ֚b|a〪̖ٜ֚b +a〪ٜ̖֚b|a〪ٜ̖֚b|a〪ٜ̖֚b +à֮ٝ̕b|à֮ٝ̕b|à֮ٝ̕b +a֮ٝ̀̕b|a֮ٝ̀̕b|a֮ٝ̀̕b +à֮ٞ̕b|à֮ٞ̕b|à֮ٞ̕b +a֮ٞ̀̕b|a֮ٞ̀̕b|a֮ٞ̀̕b +a〪̖ٟ֚b|a〪̖ٟ֚b|a〪̖ٟ֚b +a〪ٟ̖֚b|a〪ٟ̖֚b|a〪ٟ̖֚b +aْٰٰܑb|aْٰٰܑb|aْٰٰܑb +aْٰٰܑb|aْٰٰܑb|aْٰٰܑb +à֮ۖ̕b|à֮ۖ̕b|à֮ۖ̕b +a֮ۖ̀̕b|a֮ۖ̀̕b|a֮ۖ̀̕b +à֮ۗ̕b|à֮ۗ̕b|à֮ۗ̕b +a֮ۗ̀̕b|a֮ۗ̀̕b|a֮ۗ̀̕b +à֮ۘ̕b|à֮ۘ̕b|à֮ۘ̕b +a֮ۘ̀̕b|a֮ۘ̀̕b|a֮ۘ̀̕b +à֮ۙ̕b|à֮ۙ̕b|à֮ۙ̕b +a֮ۙ̀̕b|a֮ۙ̀̕b|a֮ۙ̀̕b +à֮ۚ̕b|à֮ۚ̕b|à֮ۚ̕b +a֮ۚ̀̕b|a֮ۚ̀̕b|a֮ۚ̀̕b +à֮ۛ̕b|à֮ۛ̕b|à֮ۛ̕b +a֮ۛ̀̕b|a֮ۛ̀̕b|a֮ۛ̀̕b +à֮ۜ̕b|à֮ۜ̕b|à֮ۜ̕b +a֮ۜ̀̕b|a֮ۜ̀̕b|a֮ۜ̀̕b +à֮۟̕b|à֮۟̕b|à֮۟̕b +a֮۟̀̕b|a֮۟̀̕b|a֮۟̀̕b +à֮۠̕b|à֮۠̕b|à֮۠̕b +a֮۠̀̕b|a֮۠̀̕b|a֮۠̀̕b +à֮ۡ̕b|à֮ۡ̕b|à֮ۡ̕b +a֮ۡ̀̕b|a֮ۡ̀̕b|a֮ۡ̀̕b +à֮ۢ̕b|à֮ۢ̕b|à֮ۢ̕b +a֮ۢ̀̕b|a֮ۢ̀̕b|a֮ۢ̀̕b +a〪̖ۣ֚b|a〪̖ۣ֚b|a〪̖ۣ֚b +a〪ۣ̖֚b|a〪ۣ̖֚b|a〪ۣ̖֚b +à֮ۤ̕b|à֮ۤ̕b|à֮ۤ̕b +a֮ۤ̀̕b|a֮ۤ̀̕b|a֮ۤ̀̕b +à֮ۧ̕b|à֮ۧ̕b|à֮ۧ̕b +a֮ۧ̀̕b|a֮ۧ̀̕b|a֮ۧ̀̕b +à֮ۨ̕b|à֮ۨ̕b|à֮ۨ̕b +a֮ۨ̀̕b|a֮ۨ̀̕b|a֮ۨ̀̕b +a〪̖۪֚b|a〪̖۪֚b|a〪̖۪֚b +a〪۪̖֚b|a〪۪̖֚b|a〪۪̖֚b +à֮۫̕b|à֮۫̕b|à֮۫̕b +a֮۫̀̕b|a֮۫̀̕b|a֮۫̀̕b +à֮۬̕b|à֮۬̕b|à֮۬̕b +a֮۬̀̕b|a֮۬̀̕b|a֮۬̀̕b +a〪̖ۭ֚b|a〪̖ۭ֚b|a〪̖ۭ֚b +a〪ۭ̖֚b|a〪ۭ̖֚b|a〪ۭ̖֚b +aٰܑܑౕb|aٰܑܑౕb|aٰܑܑౕb +aٰܑܑౕb|aٰܑܑౕb|aٰܑܑౕb +à֮ܰ̕b|à֮ܰ̕b|à֮ܰ̕b +a֮ܰ̀̕b|a֮ܰ̀̕b|a֮ܰ̀̕b +a〪̖ܱ֚b|a〪̖ܱ֚b|a〪̖ܱ֚b +a〪ܱ̖֚b|a〪ܱ̖֚b|a〪ܱ̖֚b +à֮ܲ̕b|à֮ܲ̕b|à֮ܲ̕b +a֮ܲ̀̕b|a֮ܲ̀̕b|a֮ܲ̀̕b +à֮ܳ̕b|à֮ܳ̕b|à֮ܳ̕b +a֮ܳ̀̕b|a֮ܳ̀̕b|a֮ܳ̀̕b +a〪̖ܴ֚b|a〪̖ܴ֚b|a〪̖ܴ֚b +a〪ܴ̖֚b|a〪ܴ̖֚b|a〪ܴ̖֚b +à֮ܵ̕b|à֮ܵ̕b|à֮ܵ̕b +a֮ܵ̀̕b|a֮ܵ̀̕b|a֮ܵ̀̕b +à֮ܶ̕b|à֮ܶ̕b|à֮ܶ̕b +a֮ܶ̀̕b|a֮ܶ̀̕b|a֮ܶ̀̕b +a〪̖ܷ֚b|a〪̖ܷ֚b|a〪̖ܷ֚b +a〪ܷ̖֚b|a〪ܷ̖֚b|a〪ܷ̖֚b +a〪̖ܸ֚b|a〪̖ܸ֚b|a〪̖ܸ֚b +a〪ܸ̖֚b|a〪ܸ̖֚b|a〪ܸ̖֚b +a〪̖ܹ֚b|a〪̖ܹ֚b|a〪̖ܹ֚b +a〪ܹ̖֚b|a〪ܹ̖֚b|a〪ܹ̖֚b +à֮ܺ̕b|à֮ܺ̕b|à֮ܺ̕b +a֮ܺ̀̕b|a֮ܺ̀̕b|a֮ܺ̀̕b +a〪̖ܻ֚b|a〪̖ܻ֚b|a〪̖ܻ֚b +a〪ܻ̖֚b|a〪ܻ̖֚b|a〪ܻ̖֚b +a〪̖ܼ֚b|a〪̖ܼ֚b|a〪̖ܼ֚b +a〪ܼ̖֚b|a〪ܼ̖֚b|a〪ܼ̖֚b +à֮ܽ̕b|à֮ܽ̕b|à֮ܽ̕b +a֮ܽ̀̕b|a֮ܽ̀̕b|a֮ܽ̀̕b +a〪̖ܾ֚b|a〪̖ܾ֚b|a〪̖ܾ֚b +a〪ܾ̖֚b|a〪ܾ̖֚b|a〪ܾ̖֚b +à֮ܿ̕b|à֮ܿ̕b|à֮ܿ̕b +a֮ܿ̀̕b|a֮ܿ̀̕b|a֮ܿ̀̕b +à֮݀̕b|à֮݀̕b|à֮݀̕b +a֮݀̀̕b|a֮݀̀̕b|a֮݀̀̕b +à֮݁̕b|à֮݁̕b|à֮݁̕b +a֮݁̀̕b|a֮݁̀̕b|a֮݁̀̕b +a〪̖݂֚b|a〪̖݂֚b|a〪̖݂֚b +a〪݂̖֚b|a〪݂̖֚b|a〪݂̖֚b +à֮݃̕b|à֮݃̕b|à֮݃̕b +a֮݃̀̕b|a֮݃̀̕b|a֮݃̀̕b +a〪̖݄֚b|a〪̖݄֚b|a〪̖݄֚b +a〪݄̖֚b|a〪݄̖֚b|a〪݄̖֚b +à֮݅̕b|à֮݅̕b|à֮݅̕b +a֮݅̀̕b|a֮݅̀̕b|a֮݅̀̕b +a〪̖݆֚b|a〪̖݆֚b|a〪̖݆֚b +a〪݆̖֚b|a〪݆̖֚b|a〪݆̖֚b +à֮݇̕b|à֮݇̕b|à֮݇̕b +a֮݇̀̕b|a֮݇̀̕b|a֮݇̀̕b +a〪̖݈֚b|a〪̖݈֚b|a〪̖݈֚b +a〪݈̖֚b|a〪݈̖֚b|a〪݈̖֚b +à֮݉̕b|à֮݉̕b|à֮݉̕b +a֮݉̀̕b|a֮݉̀̕b|a֮݉̀̕b +à֮݊̕b|à֮݊̕b|à֮݊̕b +a֮݊̀̕b|a֮݊̀̕b|a֮݊̀̕b +à֮߫̕b|à֮߫̕b|à֮߫̕b +a֮߫̀̕b|a֮߫̀̕b|a֮߫̀̕b +à֮߬̕b|à֮߬̕b|à֮߬̕b +a֮߬̀̕b|a֮߬̀̕b|a֮߬̀̕b +à֮߭̕b|à֮߭̕b|à֮߭̕b +a֮߭̀̕b|a֮߭̀̕b|a֮߭̀̕b +à֮߮̕b|à֮߮̕b|à֮߮̕b +a֮߮̀̕b|a֮߮̀̕b|a֮߮̀̕b +à֮߯̕b|à֮߯̕b|à֮߯̕b +a֮߯̀̕b|a֮߯̀̕b|a֮߯̀̕b +à֮߰̕b|à֮߰̕b|à֮߰̕b +a֮߰̀̕b|a֮߰̀̕b|a֮߰̀̕b +à֮߱̕b|à֮߱̕b|à֮߱̕b +a֮߱̀̕b|a֮߱̀̕b|a֮߱̀̕b +a〪̖߲֚b|a〪̖߲֚b|a〪̖߲֚b +a〪߲̖֚b|a〪߲̖֚b|a〪߲̖֚b +à֮߳̕b|à֮߳̕b|à֮߳̕b +a֮߳̀̕b|a֮߳̀̕b|a֮߳̀̕b +a〪̖߽֚b|a〪̖߽֚b|a〪̖߽֚b +a〪߽̖֚b|a〪߽̖֚b|a〪߽̖֚b +à֮ࠖ̕b|à֮ࠖ̕b|à֮ࠖ̕b +a֮ࠖ̀̕b|a֮ࠖ̀̕b|a֮ࠖ̀̕b +à֮ࠗ̕b|à֮ࠗ̕b|à֮ࠗ̕b +a֮ࠗ̀̕b|a֮ࠗ̀̕b|a֮ࠗ̀̕b +à֮࠘̕b|à֮࠘̕b|à֮࠘̕b +a֮࠘̀̕b|a֮࠘̀̕b|a֮࠘̀̕b +à֮࠙̕b|à֮࠙̕b|à֮࠙̕b +a֮࠙̀̕b|a֮࠙̀̕b|a֮࠙̀̕b +à֮ࠛ̕b|à֮ࠛ̕b|à֮ࠛ̕b +a֮ࠛ̀̕b|a֮ࠛ̀̕b|a֮ࠛ̀̕b +à֮ࠜ̕b|à֮ࠜ̕b|à֮ࠜ̕b +a֮ࠜ̀̕b|a֮ࠜ̀̕b|a֮ࠜ̀̕b +à֮ࠝ̕b|à֮ࠝ̕b|à֮ࠝ̕b +a֮ࠝ̀̕b|a֮ࠝ̀̕b|a֮ࠝ̀̕b +à֮ࠞ̕b|à֮ࠞ̕b|à֮ࠞ̕b +a֮ࠞ̀̕b|a֮ࠞ̀̕b|a֮ࠞ̀̕b +à֮ࠟ̕b|à֮ࠟ̕b|à֮ࠟ̕b +a֮ࠟ̀̕b|a֮ࠟ̀̕b|a֮ࠟ̀̕b +à֮ࠠ̕b|à֮ࠠ̕b|à֮ࠠ̕b +a֮ࠠ̀̕b|a֮ࠠ̀̕b|a֮ࠠ̀̕b +à֮ࠡ̕b|à֮ࠡ̕b|à֮ࠡ̕b +a֮ࠡ̀̕b|a֮ࠡ̀̕b|a֮ࠡ̀̕b +à֮ࠢ̕b|à֮ࠢ̕b|à֮ࠢ̕b +a֮ࠢ̀̕b|a֮ࠢ̀̕b|a֮ࠢ̀̕b +à֮ࠣ̕b|à֮ࠣ̕b|à֮ࠣ̕b +a֮ࠣ̀̕b|a֮ࠣ̀̕b|a֮ࠣ̀̕b +à֮ࠥ̕b|à֮ࠥ̕b|à֮ࠥ̕b +a֮ࠥ̀̕b|a֮ࠥ̀̕b|a֮ࠥ̀̕b +à֮ࠦ̕b|à֮ࠦ̕b|à֮ࠦ̕b +a֮ࠦ̀̕b|a֮ࠦ̀̕b|a֮ࠦ̀̕b +à֮ࠧ̕b|à֮ࠧ̕b|à֮ࠧ̕b +a֮ࠧ̀̕b|a֮ࠧ̀̕b|a֮ࠧ̀̕b +à֮ࠩ̕b|à֮ࠩ̕b|à֮ࠩ̕b +a֮ࠩ̀̕b|a֮ࠩ̀̕b|a֮ࠩ̀̕b +à֮ࠪ̕b|à֮ࠪ̕b|à֮ࠪ̕b +a֮ࠪ̀̕b|a֮ࠪ̀̕b|a֮ࠪ̀̕b +à֮ࠫ̕b|à֮ࠫ̕b|à֮ࠫ̕b +a֮ࠫ̀̕b|a֮ࠫ̀̕b|a֮ࠫ̀̕b +à֮ࠬ̕b|à֮ࠬ̕b|à֮ࠬ̕b +a֮ࠬ̀̕b|a֮ࠬ̀̕b|a֮ࠬ̀̕b +à֮࠭̕b|à֮࠭̕b|à֮࠭̕b +a֮࠭̀̕b|a֮࠭̀̕b|a֮࠭̀̕b +a〪̖࡙֚b|a〪̖࡙֚b|a〪̖࡙֚b +a〪࡙̖֚b|a〪࡙̖֚b|a〪࡙̖֚b +a〪̖࡚֚b|a〪̖࡚֚b|a〪̖࡚֚b +a〪࡚̖֚b|a〪࡚̖֚b|a〪࡚̖֚b +a〪̖࡛֚b|a〪̖࡛֚b|a〪̖࡛֚b +a〪࡛̖֚b|a〪࡛̖֚b|a〪࡛̖֚b +a〪̖࣓֚b|a〪̖࣓֚b|a〪̖࣓֚b +a〪࣓̖֚b|a〪࣓̖֚b|a〪࣓̖֚b +à֮ࣔ̕b|à֮ࣔ̕b|à֮ࣔ̕b +a֮ࣔ̀̕b|a֮ࣔ̀̕b|a֮ࣔ̀̕b +à֮ࣕ̕b|à֮ࣕ̕b|à֮ࣕ̕b +a֮ࣕ̀̕b|a֮ࣕ̀̕b|a֮ࣕ̀̕b +à֮ࣖ̕b|à֮ࣖ̕b|à֮ࣖ̕b +a֮ࣖ̀̕b|a֮ࣖ̀̕b|a֮ࣖ̀̕b +à֮ࣗ̕b|à֮ࣗ̕b|à֮ࣗ̕b +a֮ࣗ̀̕b|a֮ࣗ̀̕b|a֮ࣗ̀̕b +à֮ࣘ̕b|à֮ࣘ̕b|à֮ࣘ̕b +a֮ࣘ̀̕b|a֮ࣘ̀̕b|a֮ࣘ̀̕b +à֮ࣙ̕b|à֮ࣙ̕b|à֮ࣙ̕b +a֮ࣙ̀̕b|a֮ࣙ̀̕b|a֮ࣙ̀̕b +à֮ࣚ̕b|à֮ࣚ̕b|à֮ࣚ̕b +a֮ࣚ̀̕b|a֮ࣚ̀̕b|a֮ࣚ̀̕b +à֮ࣛ̕b|à֮ࣛ̕b|à֮ࣛ̕b +a֮ࣛ̀̕b|a֮ࣛ̀̕b|a֮ࣛ̀̕b +à֮ࣜ̕b|à֮ࣜ̕b|à֮ࣜ̕b +a֮ࣜ̀̕b|a֮ࣜ̀̕b|a֮ࣜ̀̕b +à֮ࣝ̕b|à֮ࣝ̕b|à֮ࣝ̕b +a֮ࣝ̀̕b|a֮ࣝ̀̕b|a֮ࣝ̀̕b +à֮ࣞ̕b|à֮ࣞ̕b|à֮ࣞ̕b +a֮ࣞ̀̕b|a֮ࣞ̀̕b|a֮ࣞ̀̕b +à֮ࣟ̕b|à֮ࣟ̕b|à֮ࣟ̕b +a֮ࣟ̀̕b|a֮ࣟ̀̕b|a֮ࣟ̀̕b +à֮࣠̕b|à֮࣠̕b|à֮࣠̕b +a֮࣠̀̕b|a֮࣠̀̕b|a֮࣠̀̕b +à֮࣡̕b|à֮࣡̕b|à֮࣡̕b +a֮࣡̀̕b|a֮࣡̀̕b|a֮࣡̀̕b +a〪̖ࣣ֚b|a〪̖ࣣ֚b|a〪̖ࣣ֚b +a〪ࣣ̖֚b|a〪ࣣ̖֚b|a〪ࣣ̖֚b +à֮ࣤ̕b|à֮ࣤ̕b|à֮ࣤ̕b +a֮ࣤ̀̕b|a֮ࣤ̀̕b|a֮ࣤ̀̕b +à֮ࣥ̕b|à֮ࣥ̕b|à֮ࣥ̕b +a֮ࣥ̀̕b|a֮ࣥ̀̕b|a֮ࣥ̀̕b +a〪̖ࣦ֚b|a〪̖ࣦ֚b|a〪̖ࣦ֚b +a〪ࣦ̖֚b|a〪ࣦ̖֚b|a〪ࣦ̖֚b +à֮ࣧ̕b|à֮ࣧ̕b|à֮ࣧ̕b +a֮ࣧ̀̕b|a֮ࣧ̀̕b|a֮ࣧ̀̕b +à֮ࣨ̕b|à֮ࣨ̕b|à֮ࣨ̕b +a֮ࣨ̀̕b|a֮ࣨ̀̕b|a֮ࣨ̀̕b +a〪̖ࣩ֚b|a〪̖ࣩ֚b|a〪̖ࣩ֚b +a〪ࣩ̖֚b|a〪ࣩ̖֚b|a〪ࣩ̖֚b +à֮࣪̕b|à֮࣪̕b|à֮࣪̕b +a֮࣪̀̕b|a֮࣪̀̕b|a֮࣪̀̕b +à֮࣫̕b|à֮࣫̕b|à֮࣫̕b +a֮࣫̀̕b|a֮࣫̀̕b|a֮࣫̀̕b +à֮࣬̕b|à֮࣬̕b|à֮࣬̕b +a֮࣬̀̕b|a֮࣬̀̕b|a֮࣬̀̕b +a〪̖࣭֚b|a〪̖࣭֚b|a〪̖࣭֚b +a〪࣭̖֚b|a〪࣭̖֚b|a〪࣭̖֚b +a〪̖࣮֚b|a〪̖࣮֚b|a〪̖࣮֚b +a〪࣮̖֚b|a〪࣮̖֚b|a〪࣮̖֚b +a〪̖࣯֚b|a〪̖࣯֚b|a〪̖࣯֚b +a〪࣯̖֚b|a〪࣯̖֚b|a〪࣯̖֚b +aﬞًࣰٌb|aﬞًࣰٌb|aﬞًࣰٌb +aﬞࣰًٌb|aﬞࣰًٌb|aﬞࣰًٌb +aًٌࣱٍb|aًٌࣱٍb|aًٌࣱٍb +aًࣱٌٍb|aًࣱٌٍb|aًࣱٌٍb +aٌٍࣲؘb|aٌٍࣲؘb|aٌٍࣲؘb +aٌࣲٍؘb|aٌࣲٍؘb|aٌࣲٍؘb +à֮ࣳ̕b|à֮ࣳ̕b|à֮ࣳ̕b +a֮ࣳ̀̕b|a֮ࣳ̀̕b|a֮ࣳ̀̕b +à֮ࣴ̕b|à֮ࣴ̕b|à֮ࣴ̕b +a֮ࣴ̀̕b|a֮ࣴ̀̕b|a֮ࣴ̀̕b +à֮ࣵ̕b|à֮ࣵ̕b|à֮ࣵ̕b +a֮ࣵ̀̕b|a֮ࣵ̀̕b|a֮ࣵ̀̕b +a〪̖ࣶ֚b|a〪̖ࣶ֚b|a〪̖ࣶ֚b +a〪ࣶ̖֚b|a〪ࣶ̖֚b|a〪ࣶ̖֚b +à֮ࣷ̕b|à֮ࣷ̕b|à֮ࣷ̕b +a֮ࣷ̀̕b|a֮ࣷ̀̕b|a֮ࣷ̀̕b +à֮ࣸ̕b|à֮ࣸ̕b|à֮ࣸ̕b +a֮ࣸ̀̕b|a֮ࣸ̀̕b|a֮ࣸ̀̕b +a〪̖ࣹ֚b|a〪̖ࣹ֚b|a〪̖ࣹ֚b +a〪ࣹ̖֚b|a〪ࣹ̖֚b|a〪ࣹ̖֚b +a〪̖ࣺ֚b|a〪̖ࣺ֚b|a〪̖ࣺ֚b +a〪ࣺ̖֚b|a〪ࣺ̖֚b|a〪ࣺ̖֚b +à֮ࣻ̕b|à֮ࣻ̕b|à֮ࣻ̕b +a֮ࣻ̀̕b|a֮ࣻ̀̕b|a֮ࣻ̀̕b +à֮ࣼ̕b|à֮ࣼ̕b|à֮ࣼ̕b +a֮ࣼ̀̕b|a֮ࣼ̀̕b|a֮ࣼ̀̕b +à֮ࣽ̕b|à֮ࣽ̕b|à֮ࣽ̕b +a֮ࣽ̀̕b|a֮ࣽ̀̕b|a֮ࣽ̀̕b +à֮ࣾ̕b|à֮ࣾ̕b|à֮ࣾ̕b +a֮ࣾ̀̕b|a֮ࣾ̀̕b|a֮ࣾ̀̕b +à֮ࣿ̕b|à֮ࣿ̕b|à֮ࣿ̕b +a֮ࣿ̀̕b|a֮ࣿ̀̕b|a֮ࣿ̀̕b +a̴़़゙b|a̴़़゙b|a̴़़゙b +a̴़़゙b|a̴़़゙b|a̴़़゙b +a゙््ְb|a゙््ְb|a゙््ְb +a゙््ְb|a゙््ְb|a゙््ְb +à֮॑̕b|à֮॑̕b|à֮॑̕b +a֮॑̀̕b|a֮॑̀̕b|a֮॑̀̕b +a〪̖॒֚b|a〪̖॒֚b|a〪̖॒֚b +a〪॒̖֚b|a〪॒̖֚b|a〪॒̖֚b +à֮॓̕b|à֮॓̕b|à֮॓̕b +a֮॓̀̕b|a֮॓̀̕b|a֮॓̀̕b +à֮॔̕b|à֮॔̕b|à֮॔̕b +a֮॔̀̕b|a֮॔̀̕b|a֮॔̀̕b +a̴़়゙b|a̴़়゙b|a̴़়゙b +a̴়़゙b|a̴়़゙b|a̴়़゙b +a゙्্ְb|a゙्্ְb|a゙्্ְb +a゙্्ְb|a゙্्ְb|a゙্्ְb +à֮৾̕b|à֮৾̕b|à֮৾̕b +a֮৾̀̕b|a֮৾̀̕b|a֮৾̀̕b +a̴़਼゙b|a̴़਼゙b|a̴़਼゙b +a̴਼़゙b|a̴਼़゙b|a̴਼़゙b +a゙्੍ְb|a゙्੍ְb|a゙्੍ְb +a゙੍्ְb|a゙੍्ְb|a゙੍्ְb +a̴़઼゙b|a̴़઼゙b|a̴़઼゙b +a̴઼़゙b|a̴઼़゙b|a̴઼़゙b +a゙्્ְb|a゙्્ְb|a゙्્ְb +a゙્्ְb|a゙્्ְb|a゙્्ְb +a̴़଼゙b|a̴़଼゙b|a̴़଼゙b +a̴଼़゙b|a̴଼़゙b|a̴଼़゙b +a゙्୍ְb|a゙्୍ְb|a゙्୍ְb +a゙୍्ְb|a゙୍्ְb|a゙୍्ְb +a゙्்ְb|a゙्்ְb|a゙्்ְb +a゙்्ְb|a゙்्ְb|a゙்्ְb +a゙्్ְb|a゙्్ְb|a゙्్ְb +a゙్्ְb|a゙్्ְb|a゙్्ְb +aܑౕౕౖb|aܑౕౕౖb|aܑౕౕౖb +aܑౕౕౖb|aܑౕౕౖb|aܑౕౕౖb +aౕౖౖุb|aౕౖౖุb|aౕౖౖุb +aౕౖౖุb|aౕౖౖุb|aౕౖౖุb +a̴़಼゙b|a̴़಼゙b|a̴़಼゙b +a̴಼़゙b|a̴಼़゙b|a̴಼़゙b +a゙्್ְb|a゙्್ְb|a゙्್ְb +a゙್्ְb|a゙್्ְb|a゙್्ְb +a゙्഻ְb|a゙्഻ְb|a゙्഻ְb +a゙഻्ְb|a゙഻्ְb|a゙഻्ְb +a゙्഼ְb|a゙्഼ְb|a゙्഼ְb +a゙഼्ְb|a゙഼्ְb|a゙഼्ְb +a゙्്ְb|a゙्്ְb|a゙्്ְb +a゙്्ְb|a゙്्ְb|a゙്्ְb +a゙्්ְb|a゙्්ְb|a゙्්ְb +a゙්्ְb|a゙්्ְb|a゙්्ְb +aౖุุ่b|aౖุุ่b|aౖุุ่b +aౖุุ่b|aౖุุ่b|aౖุุ่b +aౖุู่b|aౖุู่b|aౖุู่b +aౖูุ่b|aౖูุ่b|aౖูุ่b +a゙्ฺְb|a゙्ฺְb|a゙्ฺְb +a゙ฺ्ְb|a゙ฺ्ְb|a゙ฺ्ְb +aุ่่ຸb|aุ่่ຸb|aุ่่ຸb +aุ่่ຸb|aุ่่ຸb|aุ่่ຸb +aุ่้ຸb|aุ่้ຸb|aุ่้ຸb +aุ้่ຸb|aุ้่ຸb|aุ้่ຸb +aุ่๊ຸb|aุ่๊ຸb|aุ่๊ຸb +aุ๊่ຸb|aุ๊่ຸb|aุ๊่ຸb +aุ่๋ຸb|aุ่๋ຸb|aุ่๋ຸb +aุ๋่ຸb|aุ๋่ຸb|aุ๋่ຸb +a่ຸຸ່b|a่ຸຸ່b|a่ຸຸ່b +a่ຸຸ່b|a่ຸຸ່b|a่ຸຸ່b +a่ຸູ່b|a่ຸູ່b|a่ຸູ່b +a่ູຸ່b|a่ູຸ່b|a่ູຸ່b +a゙्຺ְb|a゙्຺ְb|a゙्຺ְb +a゙຺्ְb|a゙຺्ְb|a゙຺्ְb +aຸ່່ཱb|aຸ່່ཱb|aຸ່່ཱb +aຸ່່ཱb|aຸ່່ཱb|aຸ່່ཱb +aຸ່້ཱb|aຸ່້ཱb|aຸ່້ཱb +aຸ້່ཱb|aຸ້່ཱb|aຸ້່ཱb +aຸ່໊ཱb|aຸ່໊ཱb|aຸ່໊ཱb +aຸ໊່ཱb|aຸ໊່ཱb|aຸ໊່ཱb +aຸ່໋ཱb|aຸ່໋ཱb|aຸ່໋ཱb +aຸ໋່ཱb|aຸ໋່ཱb|aຸ໋່ཱb +a〪̖༘֚b|a〪̖༘֚b|a〪̖༘֚b +a〪༘̖֚b|a〪༘̖֚b|a〪༘̖֚b +a〪̖༙֚b|a〪̖༙֚b|a〪̖༙֚b +a〪༙̖֚b|a〪༙̖֚b|a〪༙̖֚b +a〪̖༵֚b|a〪̖༵֚b|a〪̖༵֚b +a〪༵̖֚b|a〪༵̖֚b|a〪༵̖֚b +a〪̖༷֚b|a〪̖༷֚b|a〪̖༷֚b +a〪༷̖֚b|a〪༷̖֚b|a〪༷̖֚b +a᷎̛༹〪b|a᷎̛༹〪b|a᷎̛༹〪b +a᷎༹̛〪b|a᷎༹̛〪b|a᷎༹̛〪b +a່ཱཱིb|a່ཱཱིb|a່ཱཱིb +a່ཱཱིb|a່ཱཱིb|a່ཱཱིb +aཱིིུb|aཱིིུb|aཱིིུb +aཱིིུb|aཱིིུb|aཱིིུb +aིུུ̡b|aིུུ̡b|aིུུ̡b +aིུུ̡b|aིུུ̡b|aིུུ̡b +aཱིེུb|aཱིེུb|aཱིེུb +aཱེིུb|aཱེིུb|aཱེིུb +aཱིཻུb|aཱིཻུb|aཱིཻུb +aཱཻིུb|aཱཻིུb|aཱཻིུb +aཱིོུb|aཱིོུb|aཱིོུb +aཱོིུb|aཱོིུb|aཱོིུb +aཱིཽུb|aཱིཽུb|aཱིཽུb +aཱཽིུb|aཱཽིུb|aཱཽིུb +aཱིྀུb|aཱིྀུb|aཱིྀུb +aཱྀིུb|aཱྀིུb|aཱྀིུb +à֮ྂ̕b|à֮ྂ̕b|à֮ྂ̕b +a֮ྂ̀̕b|a֮ྂ̀̕b|a֮ྂ̀̕b +à֮ྃ̕b|à֮ྃ̕b|à֮ྃ̕b +a֮ྃ̀̕b|a֮ྃ̀̕b|a֮ྃ̀̕b +a゙्྄ְb|a゙्྄ְb|a゙्྄ְb +a゙྄्ְb|a゙྄्ְb|a゙྄्ְb +à֮྆̕b|à֮྆̕b|à֮྆̕b +a֮྆̀̕b|a֮྆̀̕b|a֮྆̀̕b +à֮྇̕b|à֮྇̕b|à֮྇̕b +a֮྇̀̕b|a֮྇̀̕b|a֮྇̀̕b +a〪̖࿆֚b|a〪̖࿆֚b|a〪̖࿆֚b +a〪࿆̖֚b|a〪࿆̖֚b|a〪࿆̖֚b +a̴़့゙b|a̴़့゙b|a̴़့゙b +a̴့़゙b|a̴့़゙b|a̴့़゙b +a゙्္ְb|a゙्္ְb|a゙्္ְb +a゙္्ְb|a゙္्ְb|a゙္्ְb +a゙्်ְb|a゙्်ְb|a゙्်ְb +a゙်्ְb|a゙်्ְb|a゙်्ְb +a〪̖ႍ֚b|a〪̖ႍ֚b|a〪̖ႍ֚b +a〪ႍ̖֚b|a〪ႍ̖֚b|a〪ႍ̖֚b +à֮፝̕b|à֮፝̕b|à֮፝̕b +a֮፝̀̕b|a֮፝̀̕b|a֮፝̀̕b +à֮፞̕b|à֮፞̕b|à֮፞̕b +a֮፞̀̕b|a֮፞̀̕b|a֮፞̀̕b +à֮፟̕b|à֮፟̕b|à֮፟̕b +a֮፟̀̕b|a֮፟̀̕b|a֮፟̀̕b +a゙्᜔ְb|a゙्᜔ְb|a゙्᜔ְb +a゙᜔्ְb|a゙᜔्ְb|a゙᜔्ְb +a゙्᜴ְb|a゙्᜴ְb|a゙्᜴ְb +a゙᜴्ְb|a゙᜴्ְb|a゙᜴्ְb +a゙्្ְb|a゙्្ְb|a゙्្ְb +a゙្्ְb|a゙្्ְb|a゙្्ְb +à֮៝̕b|à֮៝̕b|à֮៝̕b +a֮៝̀̕b|a֮៝̀̕b|a֮៝̀̕b +à𝅭֮ᢩb|à𝅭֮ᢩb|à𝅭֮ᢩb +à𝅭ᢩ֮b|à𝅭ᢩ֮b|à𝅭ᢩ֮b +a̖֚᤹〮b|a̖֚᤹〮b|a̖֚᤹〮b +a̖᤹֚〮b|a̖᤹֚〮b|a̖᤹֚〮b +à֮᤺̕b|à֮᤺̕b|à֮᤺̕b +a֮᤺̀̕b|a֮᤺̀̕b|a֮᤺̀̕b +a〪̖᤻֚b|a〪̖᤻֚b|a〪̖᤻֚b +a〪᤻̖֚b|a〪᤻̖֚b|a〪᤻̖֚b +à֮ᨗ̕b|à֮ᨗ̕b|à֮ᨗ̕b +a֮ᨗ̀̕b|a֮ᨗ̀̕b|a֮ᨗ̀̕b +a〪̖ᨘ֚b|a〪̖ᨘ֚b|a〪̖ᨘ֚b +a〪ᨘ̖֚b|a〪ᨘ̖֚b|a〪ᨘ̖֚b +a゙्᩠ְb|a゙्᩠ְb|a゙्᩠ְb +a゙᩠्ְb|a゙᩠्ְb|a゙᩠्ְb +à֮᩵̕b|à֮᩵̕b|à֮᩵̕b +a֮᩵̀̕b|a֮᩵̀̕b|a֮᩵̀̕b +à֮᩶̕b|à֮᩶̕b|à֮᩶̕b +a֮᩶̀̕b|a֮᩶̀̕b|a֮᩶̀̕b +à֮᩷̕b|à֮᩷̕b|à֮᩷̕b +a֮᩷̀̕b|a֮᩷̀̕b|a֮᩷̀̕b +à֮᩸̕b|à֮᩸̕b|à֮᩸̕b +a֮᩸̀̕b|a֮᩸̀̕b|a֮᩸̀̕b +à֮᩹̕b|à֮᩹̕b|à֮᩹̕b +a֮᩹̀̕b|a֮᩹̀̕b|a֮᩹̀̕b +à֮᩺̕b|à֮᩺̕b|à֮᩺̕b +a֮᩺̀̕b|a֮᩺̀̕b|a֮᩺̀̕b +à֮᩻̕b|à֮᩻̕b|à֮᩻̕b +a֮᩻̀̕b|a֮᩻̀̕b|a֮᩻̀̕b +à֮᩼̕b|à֮᩼̕b|à֮᩼̕b +a֮᩼̀̕b|a֮᩼̀̕b|a֮᩼̀̕b +a〪̖᩿֚b|a〪̖᩿֚b|a〪̖᩿֚b +a〪᩿̖֚b|a〪᩿̖֚b|a〪᩿̖֚b +à֮᪰̕b|à֮᪰̕b|à֮᪰̕b +a֮᪰̀̕b|a֮᪰̀̕b|a֮᪰̀̕b +à֮᪱̕b|à֮᪱̕b|à֮᪱̕b +a֮᪱̀̕b|a֮᪱̀̕b|a֮᪱̀̕b +à֮᪲̕b|à֮᪲̕b|à֮᪲̕b +a֮᪲̀̕b|a֮᪲̀̕b|a֮᪲̀̕b +à֮᪳̕b|à֮᪳̕b|à֮᪳̕b +a֮᪳̀̕b|a֮᪳̀̕b|a֮᪳̀̕b +à֮᪴̕b|à֮᪴̕b|à֮᪴̕b +a֮᪴̀̕b|a֮᪴̀̕b|a֮᪴̀̕b +a〪̖᪵֚b|a〪̖᪵֚b|a〪̖᪵֚b +a〪᪵̖֚b|a〪᪵̖֚b|a〪᪵̖֚b +a〪̖᪶֚b|a〪̖᪶֚b|a〪̖᪶֚b +a〪᪶̖֚b|a〪᪶̖֚b|a〪᪶̖֚b +a〪̖᪷֚b|a〪̖᪷֚b|a〪̖᪷֚b +a〪᪷̖֚b|a〪᪷̖֚b|a〪᪷̖֚b +a〪̖᪸֚b|a〪̖᪸֚b|a〪̖᪸֚b +a〪᪸̖֚b|a〪᪸̖֚b|a〪᪸̖֚b +a〪̖᪹֚b|a〪̖᪹֚b|a〪̖᪹֚b +a〪᪹̖֚b|a〪᪹̖֚b|a〪᪹̖֚b +a〪̖᪺֚b|a〪̖᪺֚b|a〪̖᪺֚b +a〪᪺̖֚b|a〪᪺̖֚b|a〪᪺̖֚b +à֮᪻̕b|à֮᪻̕b|à֮᪻̕b +a֮᪻̀̕b|a֮᪻̀̕b|a֮᪻̀̕b +à֮᪼̕b|à֮᪼̕b|à֮᪼̕b +a֮᪼̀̕b|a֮᪼̀̕b|a֮᪼̀̕b +a〪̖᪽֚b|a〪̖᪽֚b|a〪̖᪽֚b +a〪᪽̖֚b|a〪᪽̖֚b|a〪᪽̖֚b +a̴़᬴゙b|a̴़᬴゙b|a̴़᬴゙b +a̴᬴़゙b|a̴᬴़゙b|a̴᬴़゙b +a゙्᭄ְb|a゙्᭄ְb|a゙्᭄ְb +a゙᭄्ְb|a゙᭄्ְb|a゙᭄्ְb +à֮᭫̕b|à֮᭫̕b|à֮᭫̕b +a֮᭫̀̕b|a֮᭫̀̕b|a֮᭫̀̕b +a〪̖᭬֚b|a〪̖᭬֚b|a〪̖᭬֚b +a〪᭬̖֚b|a〪᭬̖֚b|a〪᭬̖֚b +à֮᭭̕b|à֮᭭̕b|à֮᭭̕b +a֮᭭̀̕b|a֮᭭̀̕b|a֮᭭̀̕b +à֮᭮̕b|à֮᭮̕b|à֮᭮̕b +a֮᭮̀̕b|a֮᭮̀̕b|a֮᭮̀̕b +à֮᭯̕b|à֮᭯̕b|à֮᭯̕b +a֮᭯̀̕b|a֮᭯̀̕b|a֮᭯̀̕b +à֮᭰̕b|à֮᭰̕b|à֮᭰̕b +a֮᭰̀̕b|a֮᭰̀̕b|a֮᭰̀̕b +à֮᭱̕b|à֮᭱̕b|à֮᭱̕b +a֮᭱̀̕b|a֮᭱̀̕b|a֮᭱̀̕b +à֮᭲̕b|à֮᭲̕b|à֮᭲̕b +a֮᭲̀̕b|a֮᭲̀̕b|a֮᭲̀̕b +à֮᭳̕b|à֮᭳̕b|à֮᭳̕b +a֮᭳̀̕b|a֮᭳̀̕b|a֮᭳̀̕b +a゙्᮪ְb|a゙्᮪ְb|a゙्᮪ְb +a゙᮪्ְb|a゙᮪्ְb|a゙᮪्ְb +a゙्᮫ְb|a゙्᮫ְb|a゙्᮫ְb +a゙᮫्ְb|a゙᮫्ְb|a゙᮫्ְb +a̴़᯦゙b|a̴़᯦゙b|a̴़᯦゙b +a̴᯦़゙b|a̴᯦़゙b|a̴᯦़゙b +a゙्᯲ְb|a゙्᯲ְb|a゙्᯲ְb +a゙᯲्ְb|a゙᯲्ְb|a゙᯲्ְb +a゙्᯳ְb|a゙्᯳ְb|a゙्᯳ְb +a゙᯳्ְb|a゙᯳्ְb|a゙᯳्ְb +a̴़᰷゙b|a̴़᰷゙b|a̴़᰷゙b +a̴᰷़゙b|a̴᰷़゙b|a̴᰷़゙b +à֮᳐̕b|à֮᳐̕b|à֮᳐̕b +a֮᳐̀̕b|a֮᳐̀̕b|a֮᳐̀̕b +à֮᳑̕b|à֮᳑̕b|à֮᳑̕b +a֮᳑̀̕b|a֮᳑̀̕b|a֮᳑̀̕b +à֮᳒̕b|à֮᳒̕b|à֮᳒̕b +a֮᳒̀̕b|a֮᳒̀̕b|a֮᳒̀̕b +a̴᳔़b|a̴᳔़b|a̴᳔़b +a᳔̴़b|a᳔̴़b|a᳔̴़b +a〪̖᳕֚b|a〪̖᳕֚b|a〪̖᳕֚b +a〪᳕̖֚b|a〪᳕̖֚b|a〪᳕̖֚b +a〪̖᳖֚b|a〪̖᳖֚b|a〪̖᳖֚b +a〪᳖̖֚b|a〪᳖̖֚b|a〪᳖̖֚b +a〪̖᳗֚b|a〪̖᳗֚b|a〪̖᳗֚b +a〪᳗̖֚b|a〪᳗̖֚b|a〪᳗̖֚b +a〪̖᳘֚b|a〪̖᳘֚b|a〪̖᳘֚b +a〪᳘̖֚b|a〪᳘̖֚b|a〪᳘̖֚b +a〪̖᳙֚b|a〪̖᳙֚b|a〪̖᳙֚b +a〪᳙̖֚b|a〪᳙̖֚b|a〪᳙̖֚b +à֮᳚̕b|à֮᳚̕b|à֮᳚̕b +a֮᳚̀̕b|a֮᳚̀̕b|a֮᳚̀̕b +à֮᳛̕b|à֮᳛̕b|à֮᳛̕b +a֮᳛̀̕b|a֮᳛̀̕b|a֮᳛̀̕b +a〪̖᳜֚b|a〪̖᳜֚b|a〪̖᳜֚b +a〪᳜̖֚b|a〪᳜̖֚b|a〪᳜̖֚b +a〪̖᳝֚b|a〪̖᳝֚b|a〪̖᳝֚b +a〪᳝̖֚b|a〪᳝̖֚b|a〪᳝̖֚b +a〪̖᳞֚b|a〪̖᳞֚b|a〪̖᳞֚b +a〪᳞̖֚b|a〪᳞̖֚b|a〪᳞̖֚b +a〪̖᳟֚b|a〪̖᳟֚b|a〪̖᳟֚b +a〪᳟̖֚b|a〪᳟̖֚b|a〪᳟̖֚b +à֮᳠̕b|à֮᳠̕b|à֮᳠̕b +a֮᳠̀̕b|a֮᳠̀̕b|a֮᳠̀̕b +a̴᳢़b|a̴᳢़b|a̴᳢़b +a᳢̴़b|a᳢̴़b|a᳢̴़b +a̴᳣़b|a̴᳣़b|a̴᳣़b +a᳣̴़b|a᳣̴़b|a᳣̴़b +a̴᳤़b|a̴᳤़b|a̴᳤़b +a᳤̴़b|a᳤̴़b|a᳤̴़b +a̴᳥़b|a̴᳥़b|a̴᳥़b +a᳥̴़b|a᳥̴़b|a᳥̴़b +a̴᳦़b|a̴᳦़b|a̴᳦़b +a᳦̴़b|a᳦̴़b|a᳦̴़b +a̴᳧़b|a̴᳧़b|a̴᳧़b +a᳧̴़b|a᳧̴़b|a᳧̴़b +a̴᳨़b|a̴᳨़b|a̴᳨़b +a᳨̴़b|a᳨̴़b|a᳨̴़b +a〪̖᳭֚b|a〪̖᳭֚b|a〪̖᳭֚b +a〪᳭̖֚b|a〪᳭̖֚b|a〪᳭̖֚b +à֮᳴̕b|à֮᳴̕b|à֮᳴̕b +a֮᳴̀̕b|a֮᳴̀̕b|a֮᳴̀̕b +à֮᳸̕b|à֮᳸̕b|à֮᳸̕b +a֮᳸̀̕b|a֮᳸̀̕b|a֮᳸̀̕b +à֮᳹̕b|à֮᳹̕b|à֮᳹̕b +a֮᳹̀̕b|a֮᳹̀̕b|a֮᳹̀̕b +à֮᷀̕b|à֮᷀̕b|à֮᷀̕b +a֮᷀̀̕b|a֮᷀̀̕b|a֮᷀̀̕b +à֮᷁̕b|à֮᷁̕b|à֮᷁̕b +a֮᷁̀̕b|a֮᷁̀̕b|a֮᷁̀̕b +a〪̖᷂֚b|a〪̖᷂֚b|a〪̖᷂֚b +a〪᷂̖֚b|a〪᷂̖֚b|a〪᷂̖֚b +à֮᷃̕b|à֮᷃̕b|à֮᷃̕b +a֮᷃̀̕b|a֮᷃̀̕b|a֮᷃̀̕b +à֮᷄̕b|à֮᷄̕b|à֮᷄̕b +a֮᷄̀̕b|a֮᷄̀̕b|a֮᷄̀̕b +à֮᷅̕b|à֮᷅̕b|à֮᷅̕b +a֮᷅̀̕b|a֮᷅̀̕b|a֮᷅̀̕b +à֮᷆̕b|à֮᷆̕b|à֮᷆̕b +a֮᷆̀̕b|a֮᷆̀̕b|a֮᷆̀̕b +à֮᷇̕b|à֮᷇̕b|à֮᷇̕b +a֮᷇̀̕b|a֮᷇̀̕b|a֮᷇̀̕b +à֮᷈̕b|à֮᷈̕b|à֮᷈̕b +a֮᷈̀̕b|a֮᷈̀̕b|a֮᷈̀̕b +à֮᷉̕b|à֮᷉̕b|à֮᷉̕b +a֮᷉̀̕b|a֮᷉̀̕b|a֮᷉̀̕b +a〪̖᷊֚b|a〪̖᷊֚b|a〪̖᷊֚b +a〪᷊̖֚b|a〪᷊̖֚b|a〪᷊̖֚b +à֮᷋̕b|à֮᷋̕b|à֮᷋̕b +a֮᷋̀̕b|a֮᷋̀̕b|a֮᷋̀̕b +à֮᷌̕b|à֮᷌̕b|à֮᷌̕b +a֮᷌̀̕b|a֮᷌̀̕b|a֮᷌̀̕b +a͜͝᷍ͅb|a͜͝᷍ͅb|a͜͝᷍ͅb +a͜᷍͝ͅb|a͜᷍͝ͅb|a͜᷍͝ͅb +a̡᷎᷎̛b|a̡᷎᷎̛b|a̡᷎᷎̛b +a̡᷎᷎̛b|a̡᷎᷎̛b|a̡᷎᷎̛b +a〪̖᷏֚b|a〪̖᷏֚b|a〪̖᷏֚b +a〪᷏̖֚b|a〪᷏̖֚b|a〪᷏̖֚b +aུ̡᷐᷎b|aུ̡᷐᷎b|aུ̡᷐᷎b +aུ᷐̡᷎b|aུ᷐̡᷎b|aུ᷐̡᷎b +à֮᷑̕b|à֮᷑̕b|à֮᷑̕b +a֮᷑̀̕b|a֮᷑̀̕b|a֮᷑̀̕b +à֮᷒̕b|à֮᷒̕b|à֮᷒̕b +a֮᷒̀̕b|a֮᷒̀̕b|a֮᷒̀̕b +à֮ᷓ̕b|à֮ᷓ̕b|à֮ᷓ̕b +a֮ᷓ̀̕b|a֮ᷓ̀̕b|a֮ᷓ̀̕b +à֮ᷔ̕b|à֮ᷔ̕b|à֮ᷔ̕b +a֮ᷔ̀̕b|a֮ᷔ̀̕b|a֮ᷔ̀̕b +à֮ᷕ̕b|à֮ᷕ̕b|à֮ᷕ̕b +a֮ᷕ̀̕b|a֮ᷕ̀̕b|a֮ᷕ̀̕b +à֮ᷖ̕b|à֮ᷖ̕b|à֮ᷖ̕b +a֮ᷖ̀̕b|a֮ᷖ̀̕b|a֮ᷖ̀̕b +à֮ᷗ̕b|à֮ᷗ̕b|à֮ᷗ̕b +a֮ᷗ̀̕b|a֮ᷗ̀̕b|a֮ᷗ̀̕b +à֮ᷘ̕b|à֮ᷘ̕b|à֮ᷘ̕b +a֮ᷘ̀̕b|a֮ᷘ̀̕b|a֮ᷘ̀̕b +à֮ᷙ̕b|à֮ᷙ̕b|à֮ᷙ̕b +a֮ᷙ̀̕b|a֮ᷙ̀̕b|a֮ᷙ̀̕b +à֮ᷚ̕b|à֮ᷚ̕b|à֮ᷚ̕b +a֮ᷚ̀̕b|a֮ᷚ̀̕b|a֮ᷚ̀̕b +à֮ᷛ̕b|à֮ᷛ̕b|à֮ᷛ̕b +a֮ᷛ̀̕b|a֮ᷛ̀̕b|a֮ᷛ̀̕b +à֮ᷜ̕b|à֮ᷜ̕b|à֮ᷜ̕b +a֮ᷜ̀̕b|a֮ᷜ̀̕b|a֮ᷜ̀̕b +à֮ᷝ̕b|à֮ᷝ̕b|à֮ᷝ̕b +a֮ᷝ̀̕b|a֮ᷝ̀̕b|a֮ᷝ̀̕b +à֮ᷞ̕b|à֮ᷞ̕b|à֮ᷞ̕b +a֮ᷞ̀̕b|a֮ᷞ̀̕b|a֮ᷞ̀̕b +à֮ᷟ̕b|à֮ᷟ̕b|à֮ᷟ̕b +a֮ᷟ̀̕b|a֮ᷟ̀̕b|a֮ᷟ̀̕b +à֮ᷠ̕b|à֮ᷠ̕b|à֮ᷠ̕b +a֮ᷠ̀̕b|a֮ᷠ̀̕b|a֮ᷠ̀̕b +à֮ᷡ̕b|à֮ᷡ̕b|à֮ᷡ̕b +a֮ᷡ̀̕b|a֮ᷡ̀̕b|a֮ᷡ̀̕b +à֮ᷢ̕b|à֮ᷢ̕b|à֮ᷢ̕b +a֮ᷢ̀̕b|a֮ᷢ̀̕b|a֮ᷢ̀̕b +à֮ᷣ̕b|à֮ᷣ̕b|à֮ᷣ̕b +a֮ᷣ̀̕b|a֮ᷣ̀̕b|a֮ᷣ̀̕b +à֮ᷤ̕b|à֮ᷤ̕b|à֮ᷤ̕b +a֮ᷤ̀̕b|a֮ᷤ̀̕b|a֮ᷤ̀̕b +à֮ᷥ̕b|à֮ᷥ̕b|à֮ᷥ̕b +a֮ᷥ̀̕b|a֮ᷥ̀̕b|a֮ᷥ̀̕b +à֮ᷦ̕b|à֮ᷦ̕b|à֮ᷦ̕b +a֮ᷦ̀̕b|a֮ᷦ̀̕b|a֮ᷦ̀̕b +à֮ᷧ̕b|à֮ᷧ̕b|à֮ᷧ̕b +a֮ᷧ̀̕b|a֮ᷧ̀̕b|a֮ᷧ̀̕b +à֮ᷨ̕b|à֮ᷨ̕b|à֮ᷨ̕b +a֮ᷨ̀̕b|a֮ᷨ̀̕b|a֮ᷨ̀̕b +à֮ᷩ̕b|à֮ᷩ̕b|à֮ᷩ̕b +a֮ᷩ̀̕b|a֮ᷩ̀̕b|a֮ᷩ̀̕b +à֮ᷪ̕b|à֮ᷪ̕b|à֮ᷪ̕b +a֮ᷪ̀̕b|a֮ᷪ̀̕b|a֮ᷪ̀̕b +à֮ᷫ̕b|à֮ᷫ̕b|à֮ᷫ̕b +a֮ᷫ̀̕b|a֮ᷫ̀̕b|a֮ᷫ̀̕b +à֮ᷬ̕b|à֮ᷬ̕b|à֮ᷬ̕b +a֮ᷬ̀̕b|a֮ᷬ̀̕b|a֮ᷬ̀̕b +à֮ᷭ̕b|à֮ᷭ̕b|à֮ᷭ̕b +a֮ᷭ̀̕b|a֮ᷭ̀̕b|a֮ᷭ̀̕b +à֮ᷮ̕b|à֮ᷮ̕b|à֮ᷮ̕b +a֮ᷮ̀̕b|a֮ᷮ̀̕b|a֮ᷮ̀̕b +à֮ᷯ̕b|à֮ᷯ̕b|à֮ᷯ̕b +a֮ᷯ̀̕b|a֮ᷯ̀̕b|a֮ᷯ̀̕b +à֮ᷰ̕b|à֮ᷰ̕b|à֮ᷰ̕b +a֮ᷰ̀̕b|a֮ᷰ̀̕b|a֮ᷰ̀̕b +à֮ᷱ̕b|à֮ᷱ̕b|à֮ᷱ̕b +a֮ᷱ̀̕b|a֮ᷱ̀̕b|a֮ᷱ̀̕b +à֮ᷲ̕b|à֮ᷲ̕b|à֮ᷲ̕b +a֮ᷲ̀̕b|a֮ᷲ̀̕b|a֮ᷲ̀̕b +à֮ᷳ̕b|à֮ᷳ̕b|à֮ᷳ̕b +a֮ᷳ̀̕b|a֮ᷳ̀̕b|a֮ᷳ̀̕b +à֮ᷴ̕b|à֮ᷴ̕b|à֮ᷴ̕b +a֮ᷴ̀̕b|a֮ᷴ̀̕b|a֮ᷴ̀̕b +à֮᷵̕b|à֮᷵̕b|à֮᷵̕b +a֮᷵̀̕b|a֮᷵̀̕b|a֮᷵̀̕b +à̕᷶͜b|à̕᷶͜b|à̕᷶͜b +à᷶̕͜b|à᷶̕͜b|à᷶̕͜b +à𝅭֮᷷b|à𝅭֮᷷b|à𝅭֮᷷b +à𝅭᷷֮b|à𝅭᷷֮b|à𝅭᷷֮b +à𝅭֮᷸b|à𝅭֮᷸b|à𝅭֮᷸b +à𝅭᷸֮b|à𝅭᷸֮b|à𝅭᷸֮b +a〪̖᷹֚b|a〪̖᷹֚b|a〪̖᷹֚b +a〪᷹̖֚b|a〪᷹̖֚b|a〪᷹̖֚b +à֮᷻̕b|à֮᷻̕b|à֮᷻̕b +a֮᷻̀̕b|a֮᷻̀̕b|a֮᷻̀̕b +a̕͜᷼͝b|a̕͜᷼͝b|a̕͜᷼͝b +a̕᷼͜͝b|a̕᷼͜͝b|a̕᷼͜͝b +a〪̖᷽֚b|a〪̖᷽֚b|a〪̖᷽֚b +a〪᷽̖֚b|a〪᷽̖֚b|a〪᷽̖֚b +à֮᷾̕b|à֮᷾̕b|à֮᷾̕b +a֮᷾̀̕b|a֮᷾̀̕b|a֮᷾̀̕b +a〪̖᷿֚b|a〪̖᷿֚b|a〪̖᷿֚b +a〪᷿̖֚b|a〪᷿̖֚b|a〪᷿̖֚b +à֮⃐̕b|à֮⃐̕b|à֮⃐̕b +a֮⃐̀̕b|a֮⃐̀̕b|a֮⃐̀̕b +à֮⃑̕b|à֮⃑̕b|à֮⃑̕b +a֮⃑̀̕b|a֮⃑̀̕b|a֮⃑̀̕b +a̴⃒़b|a̴⃒़b|a̴⃒़b +a⃒̴़b|a⃒̴़b|a⃒̴़b +a̴⃓़b|a̴⃓़b|a̴⃓़b +a⃓̴़b|a⃓̴़b|a⃓̴़b +à֮⃔̕b|à֮⃔̕b|à֮⃔̕b +a֮⃔̀̕b|a֮⃔̀̕b|a֮⃔̀̕b +à֮⃕̕b|à֮⃕̕b|à֮⃕̕b +a֮⃕̀̕b|a֮⃕̀̕b|a֮⃕̀̕b +à֮⃖̕b|à֮⃖̕b|à֮⃖̕b +a֮⃖̀̕b|a֮⃖̀̕b|a֮⃖̀̕b +à֮⃗̕b|à֮⃗̕b|à֮⃗̕b +a֮⃗̀̕b|a֮⃗̀̕b|a֮⃗̀̕b +a̴⃘़b|a̴⃘़b|a̴⃘़b +a⃘̴़b|a⃘̴़b|a⃘̴़b +a̴⃙़b|a̴⃙़b|a̴⃙़b +a⃙̴़b|a⃙̴़b|a⃙̴़b +a̴⃚़b|a̴⃚़b|a̴⃚़b +a⃚̴़b|a⃚̴़b|a⃚̴़b +à֮⃛̕b|à֮⃛̕b|à֮⃛̕b +a֮⃛̀̕b|a֮⃛̀̕b|a֮⃛̀̕b +à֮⃜̕b|à֮⃜̕b|à֮⃜̕b +a֮⃜̀̕b|a֮⃜̀̕b|a֮⃜̀̕b +à֮⃡̕b|à֮⃡̕b|à֮⃡̕b +a֮⃡̀̕b|a֮⃡̀̕b|a֮⃡̀̕b +a̴⃥़b|a̴⃥़b|a̴⃥़b +a⃥̴़b|a⃥̴़b|a⃥̴़b +a̴⃦़b|a̴⃦़b|a̴⃦़b +a⃦̴़b|a⃦̴़b|a⃦̴़b +à֮⃧̕b|à֮⃧̕b|à֮⃧̕b +a֮⃧̀̕b|a֮⃧̀̕b|a֮⃧̀̕b +a〪̖⃨֚b|a〪̖⃨֚b|a〪̖⃨֚b +a〪⃨̖֚b|a〪⃨̖֚b|a〪⃨̖֚b +à֮⃩̕b|à֮⃩̕b|à֮⃩̕b +a֮⃩̀̕b|a֮⃩̀̕b|a֮⃩̀̕b +a̴⃪़b|a̴⃪़b|a̴⃪़b +a⃪̴़b|a⃪̴़b|a⃪̴़b +a̴⃫़b|a̴⃫़b|a̴⃫़b +a⃫̴़b|a⃫̴़b|a⃫̴़b +a〪̖⃬֚b|a〪̖⃬֚b|a〪̖⃬֚b +a〪⃬̖֚b|a〪⃬̖֚b|a〪⃬̖֚b +a〪̖⃭֚b|a〪̖⃭֚b|a〪̖⃭֚b +a〪⃭̖֚b|a〪⃭̖֚b|a〪⃭̖֚b +a〪̖⃮֚b|a〪̖⃮֚b|a〪̖⃮֚b +a〪⃮̖֚b|a〪⃮̖֚b|a〪⃮̖֚b +a〪̖⃯֚b|a〪̖⃯֚b|a〪̖⃯֚b +a〪⃯̖֚b|a〪⃯̖֚b|a〪⃯̖֚b +à֮⃰̕b|à֮⃰̕b|à֮⃰̕b +a֮⃰̀̕b|a֮⃰̀̕b|a֮⃰̀̕b +à֮⳯̕b|à֮⳯̕b|à֮⳯̕b +a֮⳯̀̕b|a֮⳯̀̕b|a֮⳯̀̕b +à֮⳰̕b|à֮⳰̕b|à֮⳰̕b +a֮⳰̀̕b|a֮⳰̀̕b|a֮⳰̀̕b +à֮⳱̕b|à֮⳱̕b|à֮⳱̕b +a֮⳱̀̕b|a֮⳱̀̕b|a֮⳱̀̕b +a゙्⵿ְb|a゙्⵿ְb|a゙्⵿ְb +a゙⵿्ְb|a゙⵿्ְb|a゙⵿्ְb +à֮ⷠ̕b|à֮ⷠ̕b|à֮ⷠ̕b +a֮ⷠ̀̕b|a֮ⷠ̀̕b|a֮ⷠ̀̕b +à֮ⷡ̕b|à֮ⷡ̕b|à֮ⷡ̕b +a֮ⷡ̀̕b|a֮ⷡ̀̕b|a֮ⷡ̀̕b +à֮ⷢ̕b|à֮ⷢ̕b|à֮ⷢ̕b +a֮ⷢ̀̕b|a֮ⷢ̀̕b|a֮ⷢ̀̕b +à֮ⷣ̕b|à֮ⷣ̕b|à֮ⷣ̕b +a֮ⷣ̀̕b|a֮ⷣ̀̕b|a֮ⷣ̀̕b +à֮ⷤ̕b|à֮ⷤ̕b|à֮ⷤ̕b +a֮ⷤ̀̕b|a֮ⷤ̀̕b|a֮ⷤ̀̕b +à֮ⷥ̕b|à֮ⷥ̕b|à֮ⷥ̕b +a֮ⷥ̀̕b|a֮ⷥ̀̕b|a֮ⷥ̀̕b +à֮ⷦ̕b|à֮ⷦ̕b|à֮ⷦ̕b +a֮ⷦ̀̕b|a֮ⷦ̀̕b|a֮ⷦ̀̕b +à֮ⷧ̕b|à֮ⷧ̕b|à֮ⷧ̕b +a֮ⷧ̀̕b|a֮ⷧ̀̕b|a֮ⷧ̀̕b +à֮ⷨ̕b|à֮ⷨ̕b|à֮ⷨ̕b +a֮ⷨ̀̕b|a֮ⷨ̀̕b|a֮ⷨ̀̕b +à֮ⷩ̕b|à֮ⷩ̕b|à֮ⷩ̕b +a֮ⷩ̀̕b|a֮ⷩ̀̕b|a֮ⷩ̀̕b +à֮ⷪ̕b|à֮ⷪ̕b|à֮ⷪ̕b +a֮ⷪ̀̕b|a֮ⷪ̀̕b|a֮ⷪ̀̕b +à֮ⷫ̕b|à֮ⷫ̕b|à֮ⷫ̕b +a֮ⷫ̀̕b|a֮ⷫ̀̕b|a֮ⷫ̀̕b +à֮ⷬ̕b|à֮ⷬ̕b|à֮ⷬ̕b +a֮ⷬ̀̕b|a֮ⷬ̀̕b|a֮ⷬ̀̕b +à֮ⷭ̕b|à֮ⷭ̕b|à֮ⷭ̕b +a֮ⷭ̀̕b|a֮ⷭ̀̕b|a֮ⷭ̀̕b +à֮ⷮ̕b|à֮ⷮ̕b|à֮ⷮ̕b +a֮ⷮ̀̕b|a֮ⷮ̀̕b|a֮ⷮ̀̕b +à֮ⷯ̕b|à֮ⷯ̕b|à֮ⷯ̕b +a֮ⷯ̀̕b|a֮ⷯ̀̕b|a֮ⷯ̀̕b +à֮ⷰ̕b|à֮ⷰ̕b|à֮ⷰ̕b +a֮ⷰ̀̕b|a֮ⷰ̀̕b|a֮ⷰ̀̕b +à֮ⷱ̕b|à֮ⷱ̕b|à֮ⷱ̕b +a֮ⷱ̀̕b|a֮ⷱ̀̕b|a֮ⷱ̀̕b +à֮ⷲ̕b|à֮ⷲ̕b|à֮ⷲ̕b +a֮ⷲ̀̕b|a֮ⷲ̀̕b|a֮ⷲ̀̕b +à֮ⷳ̕b|à֮ⷳ̕b|à֮ⷳ̕b +a֮ⷳ̀̕b|a֮ⷳ̀̕b|a֮ⷳ̀̕b +à֮ⷴ̕b|à֮ⷴ̕b|à֮ⷴ̕b +a֮ⷴ̀̕b|a֮ⷴ̀̕b|a֮ⷴ̀̕b +à֮ⷵ̕b|à֮ⷵ̕b|à֮ⷵ̕b +a֮ⷵ̀̕b|a֮ⷵ̀̕b|a֮ⷵ̀̕b +à֮ⷶ̕b|à֮ⷶ̕b|à֮ⷶ̕b +a֮ⷶ̀̕b|a֮ⷶ̀̕b|a֮ⷶ̀̕b +à֮ⷷ̕b|à֮ⷷ̕b|à֮ⷷ̕b +a֮ⷷ̀̕b|a֮ⷷ̀̕b|a֮ⷷ̀̕b +à֮ⷸ̕b|à֮ⷸ̕b|à֮ⷸ̕b +a֮ⷸ̀̕b|a֮ⷸ̀̕b|a֮ⷸ̀̕b +à֮ⷹ̕b|à֮ⷹ̕b|à֮ⷹ̕b +a֮ⷹ̀̕b|a֮ⷹ̀̕b|a֮ⷹ̀̕b +à֮ⷺ̕b|à֮ⷺ̕b|à֮ⷺ̕b +a֮ⷺ̀̕b|a֮ⷺ̀̕b|a֮ⷺ̀̕b +à֮ⷻ̕b|à֮ⷻ̕b|à֮ⷻ̕b +a֮ⷻ̀̕b|a֮ⷻ̀̕b|a֮ⷻ̀̕b +à֮ⷼ̕b|à֮ⷼ̕b|à֮ⷼ̕b +a֮ⷼ̀̕b|a֮ⷼ̀̕b|a֮ⷼ̀̕b +à֮ⷽ̕b|à֮ⷽ̕b|à֮ⷽ̕b +a֮ⷽ̀̕b|a֮ⷽ̀̕b|a֮ⷽ̀̕b +à֮ⷾ̕b|à֮ⷾ̕b|à֮ⷾ̕b +a֮ⷾ̀̕b|a֮ⷾ̀̕b|a֮ⷾ̀̕b +à֮ⷿ̕b|à֮ⷿ̕b|à֮ⷿ̕b +a֮ⷿ̀̕b|a֮ⷿ̀̕b|a֮ⷿ̀̕b +a̛〪〪̖b|a̛〪〪̖b|a̛〪〪̖b +a̛〪〪̖b|a̛〪〪̖b|a̛〪〪̖b +à𝅭֮〫b|à𝅭֮〫b|à𝅭֮〫b +à𝅭〫֮b|à𝅭〫֮b|à𝅭〫֮b +à̕〬͜b|à̕〬͜b|à̕〬͜b +à〬̕͜b|à〬̕͜b|à〬̕͜b +a̖֚〭〮b|a̖֚〭〮b|a̖֚〭〮b +a̖〭֚〮b|a̖〭֚〮b|a̖〭֚〮b +a֚〮〮𝅭b|a֚〮〮𝅭b|a֚〮〮𝅭b +a֚〮〮𝅭b|a֚〮〮𝅭b|a֚〮〮𝅭b +a֚〮〯𝅭b|a֚〮〯𝅭b|a֚〮〯𝅭b +a֚〯〮𝅭b|a֚〯〮𝅭b|a֚〯〮𝅭b +a़゙゙्b|a़゙゙्b|a़゙゙्b +a़゙゙्b|a़゙゙्b|a़゙゙्b +a़゙゚्b|a़゙゚्b|a़゙゚्b +a़゚゙्b|a़゚゙्b|a़゚゙्b +à֮꙯̕b|à֮꙯̕b|à֮꙯̕b +a֮꙯̀̕b|a֮꙯̀̕b|a֮꙯̀̕b +à֮ꙴ̕b|à֮ꙴ̕b|à֮ꙴ̕b +a֮ꙴ̀̕b|a֮ꙴ̀̕b|a֮ꙴ̀̕b +à֮ꙵ̕b|à֮ꙵ̕b|à֮ꙵ̕b +a֮ꙵ̀̕b|a֮ꙵ̀̕b|a֮ꙵ̀̕b +à֮ꙶ̕b|à֮ꙶ̕b|à֮ꙶ̕b +a֮ꙶ̀̕b|a֮ꙶ̀̕b|a֮ꙶ̀̕b +à֮ꙷ̕b|à֮ꙷ̕b|à֮ꙷ̕b +a֮ꙷ̀̕b|a֮ꙷ̀̕b|a֮ꙷ̀̕b +à֮ꙸ̕b|à֮ꙸ̕b|à֮ꙸ̕b +a֮ꙸ̀̕b|a֮ꙸ̀̕b|a֮ꙸ̀̕b +à֮ꙹ̕b|à֮ꙹ̕b|à֮ꙹ̕b +a֮ꙹ̀̕b|a֮ꙹ̀̕b|a֮ꙹ̀̕b +à֮ꙺ̕b|à֮ꙺ̕b|à֮ꙺ̕b +a֮ꙺ̀̕b|a֮ꙺ̀̕b|a֮ꙺ̀̕b +à֮ꙻ̕b|à֮ꙻ̕b|à֮ꙻ̕b +a֮ꙻ̀̕b|a֮ꙻ̀̕b|a֮ꙻ̀̕b +à֮꙼̕b|à֮꙼̕b|à֮꙼̕b +a֮꙼̀̕b|a֮꙼̀̕b|a֮꙼̀̕b +à֮꙽̕b|à֮꙽̕b|à֮꙽̕b +a֮꙽̀̕b|a֮꙽̀̕b|a֮꙽̀̕b +à֮ꚞ̕b|à֮ꚞ̕b|à֮ꚞ̕b +a֮ꚞ̀̕b|a֮ꚞ̀̕b|a֮ꚞ̀̕b +à֮ꚟ̕b|à֮ꚟ̕b|à֮ꚟ̕b +a֮ꚟ̀̕b|a֮ꚟ̀̕b|a֮ꚟ̀̕b +à֮꛰̕b|à֮꛰̕b|à֮꛰̕b +a֮꛰̀̕b|a֮꛰̀̕b|a֮꛰̀̕b +à֮꛱̕b|à֮꛱̕b|à֮꛱̕b +a֮꛱̀̕b|a֮꛱̀̕b|a֮꛱̀̕b +a゙्꠆ְb|a゙्꠆ְb|a゙्꠆ְb +a゙꠆्ְb|a゙꠆्ְb|a゙꠆्ְb +a゙्꣄ְb|a゙्꣄ְb|a゙्꣄ְb +a゙꣄्ְb|a゙꣄्ְb|a゙꣄्ְb +à֮꣠̕b|à֮꣠̕b|à֮꣠̕b +a֮꣠̀̕b|a֮꣠̀̕b|a֮꣠̀̕b +à֮꣡̕b|à֮꣡̕b|à֮꣡̕b +a֮꣡̀̕b|a֮꣡̀̕b|a֮꣡̀̕b +à֮꣢̕b|à֮꣢̕b|à֮꣢̕b +a֮꣢̀̕b|a֮꣢̀̕b|a֮꣢̀̕b +à֮꣣̕b|à֮꣣̕b|à֮꣣̕b +a֮꣣̀̕b|a֮꣣̀̕b|a֮꣣̀̕b +à֮꣤̕b|à֮꣤̕b|à֮꣤̕b +a֮꣤̀̕b|a֮꣤̀̕b|a֮꣤̀̕b +à֮꣥̕b|à֮꣥̕b|à֮꣥̕b +a֮꣥̀̕b|a֮꣥̀̕b|a֮꣥̀̕b +à֮꣦̕b|à֮꣦̕b|à֮꣦̕b +a֮꣦̀̕b|a֮꣦̀̕b|a֮꣦̀̕b +à֮꣧̕b|à֮꣧̕b|à֮꣧̕b +a֮꣧̀̕b|a֮꣧̀̕b|a֮꣧̀̕b +à֮꣨̕b|à֮꣨̕b|à֮꣨̕b +a֮꣨̀̕b|a֮꣨̀̕b|a֮꣨̀̕b +à֮꣩̕b|à֮꣩̕b|à֮꣩̕b +a֮꣩̀̕b|a֮꣩̀̕b|a֮꣩̀̕b +à֮꣪̕b|à֮꣪̕b|à֮꣪̕b +a֮꣪̀̕b|a֮꣪̀̕b|a֮꣪̀̕b +à֮꣫̕b|à֮꣫̕b|à֮꣫̕b +a֮꣫̀̕b|a֮꣫̀̕b|a֮꣫̀̕b +à֮꣬̕b|à֮꣬̕b|à֮꣬̕b +a֮꣬̀̕b|a֮꣬̀̕b|a֮꣬̀̕b +à֮꣭̕b|à֮꣭̕b|à֮꣭̕b +a֮꣭̀̕b|a֮꣭̀̕b|a֮꣭̀̕b +à֮꣮̕b|à֮꣮̕b|à֮꣮̕b +a֮꣮̀̕b|a֮꣮̀̕b|a֮꣮̀̕b +à֮꣯̕b|à֮꣯̕b|à֮꣯̕b +a֮꣯̀̕b|a֮꣯̀̕b|a֮꣯̀̕b +à֮꣰̕b|à֮꣰̕b|à֮꣰̕b +a֮꣰̀̕b|a֮꣰̀̕b|a֮꣰̀̕b +à֮꣱̕b|à֮꣱̕b|à֮꣱̕b +a֮꣱̀̕b|a֮꣱̀̕b|a֮꣱̀̕b +a〪̖꤫֚b|a〪̖꤫֚b|a〪̖꤫֚b +a〪꤫̖֚b|a〪꤫̖֚b|a〪꤫̖֚b +a〪̖꤬֚b|a〪̖꤬֚b|a〪̖꤬֚b +a〪꤬̖֚b|a〪꤬̖֚b|a〪꤬̖֚b +a〪̖꤭֚b|a〪̖꤭֚b|a〪̖꤭֚b +a〪꤭̖֚b|a〪꤭̖֚b|a〪꤭̖֚b +a゙्꥓ְb|a゙्꥓ְb|a゙्꥓ְb +a゙꥓्ְb|a゙꥓्ְb|a゙꥓्ְb +a̴़꦳゙b|a̴़꦳゙b|a̴़꦳゙b +a̴꦳़゙b|a̴꦳़゙b|a̴꦳़゙b +a゙्꧀ְb|a゙्꧀ְb|a゙्꧀ְb +a゙꧀्ְb|a゙꧀्ְb|a゙꧀्ְb +à֮ꪰ̕b|à֮ꪰ̕b|à֮ꪰ̕b +a֮ꪰ̀̕b|a֮ꪰ̀̕b|a֮ꪰ̀̕b +à֮ꪲ̕b|à֮ꪲ̕b|à֮ꪲ̕b +a֮ꪲ̀̕b|a֮ꪲ̀̕b|a֮ꪲ̀̕b +à֮ꪳ̕b|à֮ꪳ̕b|à֮ꪳ̕b +a֮ꪳ̀̕b|a֮ꪳ̀̕b|a֮ꪳ̀̕b +a〪̖ꪴ֚b|a〪̖ꪴ֚b|a〪̖ꪴ֚b +a〪ꪴ̖֚b|a〪ꪴ̖֚b|a〪ꪴ̖֚b +à֮ꪷ̕b|à֮ꪷ̕b|à֮ꪷ̕b +a֮ꪷ̀̕b|a֮ꪷ̀̕b|a֮ꪷ̀̕b +à֮ꪸ̕b|à֮ꪸ̕b|à֮ꪸ̕b +a֮ꪸ̀̕b|a֮ꪸ̀̕b|a֮ꪸ̀̕b +à֮ꪾ̕b|à֮ꪾ̕b|à֮ꪾ̕b +a֮ꪾ̀̕b|a֮ꪾ̀̕b|a֮ꪾ̀̕b +à֮꪿̕b|à֮꪿̕b|à֮꪿̕b +a֮꪿̀̕b|a֮꪿̀̕b|a֮꪿̀̕b +à֮꫁̕b|à֮꫁̕b|à֮꫁̕b +a֮꫁̀̕b|a֮꫁̀̕b|a֮꫁̀̕b +a゙्꫶ְb|a゙्꫶ְb|a゙्꫶ְb +a゙꫶्ְb|a゙꫶्ְb|a゙꫶्ְb +a゙्꯭ְb|a゙्꯭ְb|a゙्꯭ְb +a゙꯭्ְb|a゙꯭्ְb|a゙꯭्ְb +aׂﬞﬞًb|aׂﬞﬞًb|aׂﬞﬞًb +aׂﬞﬞًb|aׂﬞﬞًb|aׂﬞﬞًb +à֮︠̕b|à֮︠̕b|à֮︠̕b +a֮︠̀̕b|a֮︠̀̕b|a֮︠̀̕b +à֮︡̕b|à֮︡̕b|à֮︡̕b +a֮︡̀̕b|a֮︡̀̕b|a֮︡̀̕b +à֮︢̕b|à֮︢̕b|à֮︢̕b +a֮︢̀̕b|a֮︢̀̕b|a֮︢̀̕b +à֮︣̕b|à֮︣̕b|à֮︣̕b +a֮︣̀̕b|a֮︣̀̕b|a֮︣̀̕b +à֮︤̕b|à֮︤̕b|à֮︤̕b +a֮︤̀̕b|a֮︤̀̕b|a֮︤̀̕b +à֮︥̕b|à֮︥̕b|à֮︥̕b +a֮︥̀̕b|a֮︥̀̕b|a֮︥̀̕b +à֮︦̕b|à֮︦̕b|à֮︦̕b +a֮︦̀̕b|a֮︦̀̕b|a֮︦̀̕b +a〪̖︧֚b|a〪̖︧֚b|a〪̖︧֚b +a〪︧̖֚b|a〪︧̖֚b|a〪︧̖֚b +a〪̖︨֚b|a〪̖︨֚b|a〪̖︨֚b +a〪︨̖֚b|a〪︨̖֚b|a〪︨̖֚b +a〪̖︩֚b|a〪̖︩֚b|a〪̖︩֚b +a〪︩̖֚b|a〪︩̖֚b|a〪︩̖֚b +a〪̖︪֚b|a〪̖︪֚b|a〪̖︪֚b +a〪︪̖֚b|a〪︪̖֚b|a〪︪̖֚b +a〪̖︫֚b|a〪̖︫֚b|a〪̖︫֚b +a〪︫̖֚b|a〪︫̖֚b|a〪︫̖֚b +a〪̖︬֚b|a〪̖︬֚b|a〪̖︬֚b +a〪︬̖֚b|a〪︬̖֚b|a〪︬̖֚b +a〪̖︭֚b|a〪̖︭֚b|a〪̖︭֚b +a〪︭̖֚b|a〪︭̖֚b|a〪︭̖֚b +à֮︮̕b|à֮︮̕b|à֮︮̕b +a֮︮̀̕b|a֮︮̀̕b|a֮︮̀̕b +à֮︯̕b|à֮︯̕b|à֮︯̕b +a֮︯̀̕b|a֮︯̀̕b|a֮︯̀̕b +a〪̖𐇽֚b|a〪̖𐇽֚b|a〪̖𐇽֚b +a〪𐇽̖֚b|a〪𐇽̖֚b|a〪𐇽̖֚b +a〪̖𐋠֚b|a〪̖𐋠֚b|a〪̖𐋠֚b +a〪𐋠̖֚b|a〪𐋠̖֚b|a〪𐋠̖֚b +à֮𐍶̕b|à֮𐍶̕b|à֮𐍶̕b +a֮𐍶̀̕b|a֮𐍶̀̕b|a֮𐍶̀̕b +à֮𐍷̕b|à֮𐍷̕b|à֮𐍷̕b +a֮𐍷̀̕b|a֮𐍷̀̕b|a֮𐍷̀̕b +à֮𐍸̕b|à֮𐍸̕b|à֮𐍸̕b +a֮𐍸̀̕b|a֮𐍸̀̕b|a֮𐍸̀̕b +à֮𐍹̕b|à֮𐍹̕b|à֮𐍹̕b +a֮𐍹̀̕b|a֮𐍹̀̕b|a֮𐍹̀̕b +à֮𐍺̕b|à֮𐍺̕b|à֮𐍺̕b +a֮𐍺̀̕b|a֮𐍺̀̕b|a֮𐍺̀̕b +a〪̖𐨍֚b|a〪̖𐨍֚b|a〪̖𐨍֚b +a〪𐨍̖֚b|a〪𐨍̖֚b|a〪𐨍̖֚b +à֮𐨏̕b|à֮𐨏̕b|à֮𐨏̕b +a֮𐨏̀̕b|a֮𐨏̀̕b|a֮𐨏̀̕b +à֮𐨸̕b|à֮𐨸̕b|à֮𐨸̕b +a֮𐨸̀̕b|a֮𐨸̀̕b|a֮𐨸̀̕b +a̴𐨹़b|a̴𐨹़b|a̴𐨹़b +a𐨹̴़b|a𐨹̴़b|a𐨹̴़b +a〪̖𐨺֚b|a〪̖𐨺֚b|a〪̖𐨺֚b +a〪𐨺̖֚b|a〪𐨺̖֚b|a〪𐨺̖֚b +a゙्𐨿ְb|a゙्𐨿ְb|a゙्𐨿ְb +a゙𐨿्ְb|a゙𐨿्ְb|a゙𐨿्ְb +à֮𐫥̕b|à֮𐫥̕b|à֮𐫥̕b +a֮𐫥̀̕b|a֮𐫥̀̕b|a֮𐫥̀̕b +a〪̖𐫦֚b|a〪̖𐫦֚b|a〪̖𐫦֚b +a〪𐫦̖֚b|a〪𐫦̖֚b|a〪𐫦̖֚b +à֮𐴤̕b|à֮𐴤̕b|à֮𐴤̕b +a֮𐴤̀̕b|a֮𐴤̀̕b|a֮𐴤̀̕b +à֮𐴥̕b|à֮𐴥̕b|à֮𐴥̕b +a֮𐴥̀̕b|a֮𐴥̀̕b|a֮𐴥̀̕b +à֮𐴦̕b|à֮𐴦̕b|à֮𐴦̕b +a֮𐴦̀̕b|a֮𐴦̀̕b|a֮𐴦̀̕b +à֮𐴧̕b|à֮𐴧̕b|à֮𐴧̕b +a֮𐴧̀̕b|a֮𐴧̀̕b|a֮𐴧̀̕b +a〪̖𐽆֚b|a〪̖𐽆֚b|a〪̖𐽆֚b +a〪𐽆̖֚b|a〪𐽆̖֚b|a〪𐽆̖֚b +a〪̖𐽇֚b|a〪̖𐽇֚b|a〪̖𐽇֚b +a〪𐽇̖֚b|a〪𐽇̖֚b|a〪𐽇̖֚b +à֮𐽈̕b|à֮𐽈̕b|à֮𐽈̕b +a֮𐽈̀̕b|a֮𐽈̀̕b|a֮𐽈̀̕b +à֮𐽉̕b|à֮𐽉̕b|à֮𐽉̕b +a֮𐽉̀̕b|a֮𐽉̀̕b|a֮𐽉̀̕b +à֮𐽊̕b|à֮𐽊̕b|à֮𐽊̕b +a֮𐽊̀̕b|a֮𐽊̀̕b|a֮𐽊̀̕b +a〪̖𐽋֚b|a〪̖𐽋֚b|a〪̖𐽋֚b +a〪𐽋̖֚b|a〪𐽋̖֚b|a〪𐽋̖֚b +à֮𐽌̕b|à֮𐽌̕b|à֮𐽌̕b +a֮𐽌̀̕b|a֮𐽌̀̕b|a֮𐽌̀̕b +a〪̖𐽍֚b|a〪̖𐽍֚b|a〪̖𐽍֚b +a〪𐽍̖֚b|a〪𐽍̖֚b|a〪𐽍̖֚b +a〪̖𐽎֚b|a〪̖𐽎֚b|a〪̖𐽎֚b +a〪𐽎̖֚b|a〪𐽎̖֚b|a〪𐽎̖֚b +a〪̖𐽏֚b|a〪̖𐽏֚b|a〪̖𐽏֚b +a〪𐽏̖֚b|a〪𐽏̖֚b|a〪𐽏̖֚b +a〪̖𐽐֚b|a〪̖𐽐֚b|a〪̖𐽐֚b +a〪𐽐̖֚b|a〪𐽐̖֚b|a〪𐽐̖֚b +a゙्𑁆ְb|a゙्𑁆ְb|a゙्𑁆ְb +a゙𑁆्ְb|a゙𑁆्ְb|a゙𑁆्ְb +a゙्𑁿ְb|a゙्𑁿ְb|a゙्𑁿ְb +a゙𑁿्ְb|a゙𑁿्ְb|a゙𑁿्ְb +a゙्𑂹ְb|a゙्𑂹ְb|a゙्𑂹ְb +a゙𑂹्ְb|a゙𑂹्ְb|a゙𑂹्ְb +a̴़𑂺゙b|a̴़𑂺゙b|a̴़𑂺゙b +a̴𑂺़゙b|a̴𑂺़゙b|a̴𑂺़゙b +à֮𑄀̕b|à֮𑄀̕b|à֮𑄀̕b +a֮𑄀̀̕b|a֮𑄀̀̕b|a֮𑄀̀̕b +à֮𑄁̕b|à֮𑄁̕b|à֮𑄁̕b +a֮𑄁̀̕b|a֮𑄁̀̕b|a֮𑄁̀̕b +à֮𑄂̕b|à֮𑄂̕b|à֮𑄂̕b +a֮𑄂̀̕b|a֮𑄂̀̕b|a֮𑄂̀̕b +a゙्𑄳ְb|a゙्𑄳ְb|a゙्𑄳ְb +a゙𑄳्ְb|a゙𑄳्ְb|a゙𑄳्ְb +a゙्𑄴ְb|a゙्𑄴ְb|a゙्𑄴ְb +a゙𑄴्ְb|a゙𑄴्ְb|a゙𑄴्ְb +a̴़𑅳゙b|a̴़𑅳゙b|a̴़𑅳゙b +a̴𑅳़゙b|a̴𑅳़゙b|a̴𑅳़゙b +a゙्𑇀ְb|a゙्𑇀ְb|a゙्𑇀ְb +a゙𑇀्ְb|a゙𑇀्ְb|a゙𑇀्ְb +a̴़𑇊゙b|a̴़𑇊゙b|a̴़𑇊゙b +a̴𑇊़゙b|a̴𑇊़゙b|a̴𑇊़゙b +a゙्𑈵ְb|a゙्𑈵ְb|a゙्𑈵ְb +a゙𑈵्ְb|a゙𑈵्ְb|a゙𑈵्ְb +a̴़𑈶゙b|a̴़𑈶゙b|a̴़𑈶゙b +a̴𑈶़゙b|a̴𑈶़゙b|a̴𑈶़゙b +a̴़𑋩゙b|a̴़𑋩゙b|a̴़𑋩゙b +a̴𑋩़゙b|a̴𑋩़゙b|a̴𑋩़゙b +a゙्𑋪ְb|a゙्𑋪ְb|a゙्𑋪ְb +a゙𑋪्ְb|a゙𑋪्ְb|a゙𑋪्ְb +a̴़𑌻゙b|a̴़𑌻゙b|a̴़𑌻゙b +a̴𑌻़゙b|a̴𑌻़゙b|a̴𑌻़゙b +a̴़𑌼゙b|a̴़𑌼゙b|a̴़𑌼゙b +a̴𑌼़゙b|a̴𑌼़゙b|a̴𑌼़゙b +a゙्𑍍ְb|a゙्𑍍ְb|a゙्𑍍ְb +a゙𑍍्ְb|a゙𑍍्ְb|a゙𑍍्ְb +à֮𑍦̕b|à֮𑍦̕b|à֮𑍦̕b +a֮𑍦̀̕b|a֮𑍦̀̕b|a֮𑍦̀̕b +à֮𑍧̕b|à֮𑍧̕b|à֮𑍧̕b +a֮𑍧̀̕b|a֮𑍧̀̕b|a֮𑍧̀̕b +à֮𑍨̕b|à֮𑍨̕b|à֮𑍨̕b +a֮𑍨̀̕b|a֮𑍨̀̕b|a֮𑍨̀̕b +à֮𑍩̕b|à֮𑍩̕b|à֮𑍩̕b +a֮𑍩̀̕b|a֮𑍩̀̕b|a֮𑍩̀̕b +à֮𑍪̕b|à֮𑍪̕b|à֮𑍪̕b +a֮𑍪̀̕b|a֮𑍪̀̕b|a֮𑍪̀̕b +à֮𑍫̕b|à֮𑍫̕b|à֮𑍫̕b +a֮𑍫̀̕b|a֮𑍫̀̕b|a֮𑍫̀̕b +à֮𑍬̕b|à֮𑍬̕b|à֮𑍬̕b +a֮𑍬̀̕b|a֮𑍬̀̕b|a֮𑍬̀̕b +à֮𑍰̕b|à֮𑍰̕b|à֮𑍰̕b +a֮𑍰̀̕b|a֮𑍰̀̕b|a֮𑍰̀̕b +à֮𑍱̕b|à֮𑍱̕b|à֮𑍱̕b +a֮𑍱̀̕b|a֮𑍱̀̕b|a֮𑍱̀̕b +à֮𑍲̕b|à֮𑍲̕b|à֮𑍲̕b +a֮𑍲̀̕b|a֮𑍲̀̕b|a֮𑍲̀̕b +à֮𑍳̕b|à֮𑍳̕b|à֮𑍳̕b +a֮𑍳̀̕b|a֮𑍳̀̕b|a֮𑍳̀̕b +à֮𑍴̕b|à֮𑍴̕b|à֮𑍴̕b +a֮𑍴̀̕b|a֮𑍴̀̕b|a֮𑍴̀̕b +a゙्𑑂ְb|a゙्𑑂ְb|a゙्𑑂ְb +a゙𑑂्ְb|a゙𑑂्ְb|a゙𑑂्ְb +a̴़𑑆゙b|a̴़𑑆゙b|a̴़𑑆゙b +a̴𑑆़゙b|a̴𑑆़゙b|a̴𑑆़゙b +à֮𑑞̕b|à֮𑑞̕b|à֮𑑞̕b +a֮𑑞̀̕b|a֮𑑞̀̕b|a֮𑑞̀̕b +a゙्𑓂ְb|a゙्𑓂ְb|a゙्𑓂ְb +a゙𑓂्ְb|a゙𑓂्ְb|a゙𑓂्ְb +a̴़𑓃゙b|a̴़𑓃゙b|a̴़𑓃゙b +a̴𑓃़゙b|a̴𑓃़゙b|a̴𑓃़゙b +a゙्𑖿ְb|a゙्𑖿ְb|a゙्𑖿ְb +a゙𑖿्ְb|a゙𑖿्ְb|a゙𑖿्ְb +a̴़𑗀゙b|a̴़𑗀゙b|a̴़𑗀゙b +a̴𑗀़゙b|a̴𑗀़゙b|a̴𑗀़゙b +a゙्𑘿ְb|a゙्𑘿ְb|a゙्𑘿ְb +a゙𑘿्ְb|a゙𑘿्ְb|a゙𑘿्ְb +a゙्𑚶ְb|a゙्𑚶ְb|a゙्𑚶ְb +a゙𑚶्ְb|a゙𑚶्ְb|a゙𑚶्ְb +a̴़𑚷゙b|a̴़𑚷゙b|a̴़𑚷゙b +a̴𑚷़゙b|a̴𑚷़゙b|a̴𑚷़゙b +a゙्𑜫ְb|a゙्𑜫ְb|a゙्𑜫ְb +a゙𑜫्ְb|a゙𑜫्ְb|a゙𑜫्ְb +a゙्𑠹ְb|a゙्𑠹ְb|a゙्𑠹ְb +a゙𑠹्ְb|a゙𑠹्ְb|a゙𑠹्ְb +a̴़𑠺゙b|a̴़𑠺゙b|a̴़𑠺゙b +a̴𑠺़゙b|a̴𑠺़゙b|a̴𑠺़゙b +a゙्𑧠ְb|a゙्𑧠ְb|a゙्𑧠ְb +a゙𑧠्ְb|a゙𑧠्ְb|a゙𑧠्ְb +a゙्𑨴ְb|a゙्𑨴ְb|a゙्𑨴ְb +a゙𑨴्ְb|a゙𑨴्ְb|a゙𑨴्ְb +a゙्𑩇ְb|a゙्𑩇ְb|a゙्𑩇ְb +a゙𑩇्ְb|a゙𑩇्ְb|a゙𑩇्ְb +a゙्𑪙ְb|a゙्𑪙ְb|a゙्𑪙ְb +a゙𑪙्ְb|a゙𑪙्ְb|a゙𑪙्ְb +a゙्𑰿ְb|a゙्𑰿ְb|a゙्𑰿ְb +a゙𑰿्ְb|a゙𑰿्ְb|a゙𑰿्ְb +a̴़𑵂゙b|a̴़𑵂゙b|a̴़𑵂゙b +a̴𑵂़゙b|a̴𑵂़゙b|a̴𑵂़゙b +a゙्𑵄ְb|a゙्𑵄ְb|a゙्𑵄ְb +a゙𑵄्ְb|a゙𑵄्ְb|a゙𑵄्ְb +a゙्𑵅ְb|a゙्𑵅ְb|a゙्𑵅ְb +a゙𑵅्ְb|a゙𑵅्ְb|a゙𑵅्ְb +a゙्𑶗ְb|a゙्𑶗ְb|a゙्𑶗ְb +a゙𑶗्ְb|a゙𑶗्ְb|a゙𑶗्ְb +a̴𖫰़b|a̴𖫰़b|a̴𖫰़b +a𖫰̴़b|a𖫰̴़b|a𖫰̴़b +a̴𖫱़b|a̴𖫱़b|a̴𖫱़b +a𖫱̴़b|a𖫱̴़b|a𖫱̴़b +a̴𖫲़b|a̴𖫲़b|a̴𖫲़b +a𖫲̴़b|a𖫲̴़b|a𖫲̴़b +a̴𖫳़b|a̴𖫳़b|a̴𖫳़b +a𖫳̴़b|a𖫳̴़b|a𖫳̴़b +a̴𖫴़b|a̴𖫴़b|a̴𖫴़b +a𖫴̴़b|a𖫴̴़b|a𖫴̴़b +à֮𖬰̕b|à֮𖬰̕b|à֮𖬰̕b +a֮𖬰̀̕b|a֮𖬰̀̕b|a֮𖬰̀̕b +à֮𖬱̕b|à֮𖬱̕b|à֮𖬱̕b +a֮𖬱̀̕b|a֮𖬱̀̕b|a֮𖬱̀̕b +à֮𖬲̕b|à֮𖬲̕b|à֮𖬲̕b +a֮𖬲̀̕b|a֮𖬲̀̕b|a֮𖬲̀̕b +à֮𖬳̕b|à֮𖬳̕b|à֮𖬳̕b +a֮𖬳̀̕b|a֮𖬳̀̕b|a֮𖬳̀̕b +à֮𖬴̕b|à֮𖬴̕b|à֮𖬴̕b +a֮𖬴̀̕b|a֮𖬴̀̕b|a֮𖬴̀̕b +à֮𖬵̕b|à֮𖬵̕b|à֮𖬵̕b +a֮𖬵̀̕b|a֮𖬵̀̕b|a֮𖬵̀̕b +à֮𖬶̕b|à֮𖬶̕b|à֮𖬶̕b +a֮𖬶̀̕b|a֮𖬶̀̕b|a֮𖬶̀̕b +a̴𛲞़b|a̴𛲞़b|a̴𛲞़b +a𛲞̴़b|a𛲞̴़b|a𛲞̴़b +a᷎̛𝅥〪b|a᷎̛𝅥〪b|a᷎̛𝅥〪b +a᷎𝅥̛〪b|a᷎𝅥̛〪b|a᷎𝅥̛〪b +a᷎̛𝅦〪b|a᷎̛𝅦〪b|a᷎̛𝅦〪b +a᷎𝅦̛〪b|a᷎𝅦̛〪b|a᷎𝅦̛〪b +a̴𝅧़b|a̴𝅧़b|a̴𝅧़b +a𝅧̴़b|a𝅧̴़b|a𝅧̴़b +a̴𝅨़b|a̴𝅨़b|a̴𝅨़b +a𝅨̴़b|a𝅨̴़b|a𝅨̴़b +a̴𝅩़b|a̴𝅩़b|a̴𝅩़b +a𝅩̴़b|a𝅩̴़b|a𝅩̴़b +a〮𝅭𝅭֮b|a〮𝅭𝅭֮b|a〮𝅭𝅭֮b +a〮𝅭𝅭֮b|a〮𝅭𝅭֮b|a〮𝅭𝅭֮b +a᷎̛𝅮〪b|a᷎̛𝅮〪b|a᷎̛𝅮〪b +a᷎𝅮̛〪b|a᷎𝅮̛〪b|a᷎𝅮̛〪b +a᷎̛𝅯〪b|a᷎̛𝅯〪b|a᷎̛𝅯〪b +a᷎𝅯̛〪b|a᷎𝅯̛〪b|a᷎𝅯̛〪b +a᷎̛𝅰〪b|a᷎̛𝅰〪b|a᷎̛𝅰〪b +a᷎𝅰̛〪b|a᷎𝅰̛〪b|a᷎𝅰̛〪b +a᷎̛𝅱〪b|a᷎̛𝅱〪b|a᷎̛𝅱〪b +a᷎𝅱̛〪b|a᷎𝅱̛〪b|a᷎𝅱̛〪b +a᷎̛𝅲〪b|a᷎̛𝅲〪b|a᷎̛𝅲〪b +a᷎𝅲̛〪b|a᷎𝅲̛〪b|a᷎𝅲̛〪b +a〪̖𝅻֚b|a〪̖𝅻֚b|a〪̖𝅻֚b +a〪𝅻̖֚b|a〪𝅻̖֚b|a〪𝅻̖֚b +a〪̖𝅼֚b|a〪̖𝅼֚b|a〪̖𝅼֚b +a〪𝅼̖֚b|a〪𝅼̖֚b|a〪𝅼̖֚b +a〪̖𝅽֚b|a〪̖𝅽֚b|a〪̖𝅽֚b +a〪𝅽̖֚b|a〪𝅽̖֚b|a〪𝅽̖֚b +a〪̖𝅾֚b|a〪̖𝅾֚b|a〪̖𝅾֚b +a〪𝅾̖֚b|a〪𝅾̖֚b|a〪𝅾̖֚b +a〪̖𝅿֚b|a〪̖𝅿֚b|a〪̖𝅿֚b +a〪𝅿̖֚b|a〪𝅿̖֚b|a〪𝅿̖֚b +a〪̖𝆀֚b|a〪̖𝆀֚b|a〪̖𝆀֚b +a〪𝆀̖֚b|a〪𝆀̖֚b|a〪𝆀̖֚b +a〪̖𝆁֚b|a〪̖𝆁֚b|a〪̖𝆁֚b +a〪𝆁̖֚b|a〪𝆁̖֚b|a〪𝆁̖֚b +a〪̖𝆂֚b|a〪̖𝆂֚b|a〪̖𝆂֚b +a〪𝆂̖֚b|a〪𝆂̖֚b|a〪𝆂̖֚b +à֮𝆅̕b|à֮𝆅̕b|à֮𝆅̕b +a֮𝆅̀̕b|a֮𝆅̀̕b|a֮𝆅̀̕b +à֮𝆆̕b|à֮𝆆̕b|à֮𝆆̕b +a֮𝆆̀̕b|a֮𝆆̀̕b|a֮𝆆̀̕b +à֮𝆇̕b|à֮𝆇̕b|à֮𝆇̕b +a֮𝆇̀̕b|a֮𝆇̀̕b|a֮𝆇̀̕b +à֮𝆈̕b|à֮𝆈̕b|à֮𝆈̕b +a֮𝆈̀̕b|a֮𝆈̀̕b|a֮𝆈̀̕b +à֮𝆉̕b|à֮𝆉̕b|à֮𝆉̕b +a֮𝆉̀̕b|a֮𝆉̀̕b|a֮𝆉̀̕b +a〪̖𝆊֚b|a〪̖𝆊֚b|a〪̖𝆊֚b +a〪𝆊̖֚b|a〪𝆊̖֚b|a〪𝆊̖֚b +a〪̖𝆋֚b|a〪̖𝆋֚b|a〪̖𝆋֚b +a〪𝆋̖֚b|a〪𝆋̖֚b|a〪𝆋̖֚b +à֮𝆪̕b|à֮𝆪̕b|à֮𝆪̕b +a֮𝆪̀̕b|a֮𝆪̀̕b|a֮𝆪̀̕b +à֮𝆫̕b|à֮𝆫̕b|à֮𝆫̕b +a֮𝆫̀̕b|a֮𝆫̀̕b|a֮𝆫̀̕b +à֮𝆬̕b|à֮𝆬̕b|à֮𝆬̕b +a֮𝆬̀̕b|a֮𝆬̀̕b|a֮𝆬̀̕b +à֮𝆭̕b|à֮𝆭̕b|à֮𝆭̕b +a֮𝆭̀̕b|a֮𝆭̀̕b|a֮𝆭̀̕b +à֮𝉂̕b|à֮𝉂̕b|à֮𝉂̕b +a֮𝉂̀̕b|a֮𝉂̀̕b|a֮𝉂̀̕b +à֮𝉃̕b|à֮𝉃̕b|à֮𝉃̕b +a֮𝉃̀̕b|a֮𝉃̀̕b|a֮𝉃̀̕b +à֮𝉄̕b|à֮𝉄̕b|à֮𝉄̕b +a֮𝉄̀̕b|a֮𝉄̀̕b|a֮𝉄̀̕b +à֮𞀀̕b|à֮𞀀̕b|à֮𞀀̕b +a֮𞀀̀̕b|a֮𞀀̀̕b|a֮𞀀̀̕b +à֮𞀁̕b|à֮𞀁̕b|à֮𞀁̕b +a֮𞀁̀̕b|a֮𞀁̀̕b|a֮𞀁̀̕b +à֮𞀂̕b|à֮𞀂̕b|à֮𞀂̕b +a֮𞀂̀̕b|a֮𞀂̀̕b|a֮𞀂̀̕b +à֮𞀃̕b|à֮𞀃̕b|à֮𞀃̕b +a֮𞀃̀̕b|a֮𞀃̀̕b|a֮𞀃̀̕b +à֮𞀄̕b|à֮𞀄̕b|à֮𞀄̕b +a֮𞀄̀̕b|a֮𞀄̀̕b|a֮𞀄̀̕b +à֮𞀅̕b|à֮𞀅̕b|à֮𞀅̕b +a֮𞀅̀̕b|a֮𞀅̀̕b|a֮𞀅̀̕b +à֮𞀆̕b|à֮𞀆̕b|à֮𞀆̕b +a֮𞀆̀̕b|a֮𞀆̀̕b|a֮𞀆̀̕b +à֮𞀈̕b|à֮𞀈̕b|à֮𞀈̕b +a֮𞀈̀̕b|a֮𞀈̀̕b|a֮𞀈̀̕b +à֮𞀉̕b|à֮𞀉̕b|à֮𞀉̕b +a֮𞀉̀̕b|a֮𞀉̀̕b|a֮𞀉̀̕b +à֮𞀊̕b|à֮𞀊̕b|à֮𞀊̕b +a֮𞀊̀̕b|a֮𞀊̀̕b|a֮𞀊̀̕b +à֮𞀋̕b|à֮𞀋̕b|à֮𞀋̕b +a֮𞀋̀̕b|a֮𞀋̀̕b|a֮𞀋̀̕b +à֮𞀌̕b|à֮𞀌̕b|à֮𞀌̕b +a֮𞀌̀̕b|a֮𞀌̀̕b|a֮𞀌̀̕b +à֮𞀍̕b|à֮𞀍̕b|à֮𞀍̕b +a֮𞀍̀̕b|a֮𞀍̀̕b|a֮𞀍̀̕b +à֮𞀎̕b|à֮𞀎̕b|à֮𞀎̕b +a֮𞀎̀̕b|a֮𞀎̀̕b|a֮𞀎̀̕b +à֮𞀏̕b|à֮𞀏̕b|à֮𞀏̕b +a֮𞀏̀̕b|a֮𞀏̀̕b|a֮𞀏̀̕b +à֮𞀐̕b|à֮𞀐̕b|à֮𞀐̕b +a֮𞀐̀̕b|a֮𞀐̀̕b|a֮𞀐̀̕b +à֮𞀑̕b|à֮𞀑̕b|à֮𞀑̕b +a֮𞀑̀̕b|a֮𞀑̀̕b|a֮𞀑̀̕b +à֮𞀒̕b|à֮𞀒̕b|à֮𞀒̕b +a֮𞀒̀̕b|a֮𞀒̀̕b|a֮𞀒̀̕b +à֮𞀓̕b|à֮𞀓̕b|à֮𞀓̕b +a֮𞀓̀̕b|a֮𞀓̀̕b|a֮𞀓̀̕b +à֮𞀔̕b|à֮𞀔̕b|à֮𞀔̕b +a֮𞀔̀̕b|a֮𞀔̀̕b|a֮𞀔̀̕b +à֮𞀕̕b|à֮𞀕̕b|à֮𞀕̕b +a֮𞀕̀̕b|a֮𞀕̀̕b|a֮𞀕̀̕b +à֮𞀖̕b|à֮𞀖̕b|à֮𞀖̕b +a֮𞀖̀̕b|a֮𞀖̀̕b|a֮𞀖̀̕b +à֮𞀗̕b|à֮𞀗̕b|à֮𞀗̕b +a֮𞀗̀̕b|a֮𞀗̀̕b|a֮𞀗̀̕b +à֮𞀘̕b|à֮𞀘̕b|à֮𞀘̕b +a֮𞀘̀̕b|a֮𞀘̀̕b|a֮𞀘̀̕b +à֮𞀛̕b|à֮𞀛̕b|à֮𞀛̕b +a֮𞀛̀̕b|a֮𞀛̀̕b|a֮𞀛̀̕b +à֮𞀜̕b|à֮𞀜̕b|à֮𞀜̕b +a֮𞀜̀̕b|a֮𞀜̀̕b|a֮𞀜̀̕b +à֮𞀝̕b|à֮𞀝̕b|à֮𞀝̕b +a֮𞀝̀̕b|a֮𞀝̀̕b|a֮𞀝̀̕b +à֮𞀞̕b|à֮𞀞̕b|à֮𞀞̕b +a֮𞀞̀̕b|a֮𞀞̀̕b|a֮𞀞̀̕b +à֮𞀟̕b|à֮𞀟̕b|à֮𞀟̕b +a֮𞀟̀̕b|a֮𞀟̀̕b|a֮𞀟̀̕b +à֮𞀠̕b|à֮𞀠̕b|à֮𞀠̕b +a֮𞀠̀̕b|a֮𞀠̀̕b|a֮𞀠̀̕b +à֮𞀡̕b|à֮𞀡̕b|à֮𞀡̕b +a֮𞀡̀̕b|a֮𞀡̀̕b|a֮𞀡̀̕b +à֮𞀣̕b|à֮𞀣̕b|à֮𞀣̕b +a֮𞀣̀̕b|a֮𞀣̀̕b|a֮𞀣̀̕b +à֮𞀤̕b|à֮𞀤̕b|à֮𞀤̕b +a֮𞀤̀̕b|a֮𞀤̀̕b|a֮𞀤̀̕b +à֮𞀦̕b|à֮𞀦̕b|à֮𞀦̕b +a֮𞀦̀̕b|a֮𞀦̀̕b|a֮𞀦̀̕b +à֮𞀧̕b|à֮𞀧̕b|à֮𞀧̕b +a֮𞀧̀̕b|a֮𞀧̀̕b|a֮𞀧̀̕b +à֮𞀨̕b|à֮𞀨̕b|à֮𞀨̕b +a֮𞀨̀̕b|a֮𞀨̀̕b|a֮𞀨̀̕b +à֮𞀩̕b|à֮𞀩̕b|à֮𞀩̕b +a֮𞀩̀̕b|a֮𞀩̀̕b|a֮𞀩̀̕b +à֮𞀪̕b|à֮𞀪̕b|à֮𞀪̕b +a֮𞀪̀̕b|a֮𞀪̀̕b|a֮𞀪̀̕b +à֮𞄰̕b|à֮𞄰̕b|à֮𞄰̕b +a֮𞄰̀̕b|a֮𞄰̀̕b|a֮𞄰̀̕b +à֮𞄱̕b|à֮𞄱̕b|à֮𞄱̕b +a֮𞄱̀̕b|a֮𞄱̀̕b|a֮𞄱̀̕b +à֮𞄲̕b|à֮𞄲̕b|à֮𞄲̕b +a֮𞄲̀̕b|a֮𞄲̀̕b|a֮𞄲̀̕b +à֮𞄳̕b|à֮𞄳̕b|à֮𞄳̕b +a֮𞄳̀̕b|a֮𞄳̀̕b|a֮𞄳̀̕b +à֮𞄴̕b|à֮𞄴̕b|à֮𞄴̕b +a֮𞄴̀̕b|a֮𞄴̀̕b|a֮𞄴̀̕b +à֮𞄵̕b|à֮𞄵̕b|à֮𞄵̕b +a֮𞄵̀̕b|a֮𞄵̀̕b|a֮𞄵̀̕b +à֮𞄶̕b|à֮𞄶̕b|à֮𞄶̕b +a֮𞄶̀̕b|a֮𞄶̀̕b|a֮𞄶̀̕b +à֮𞋬̕b|à֮𞋬̕b|à֮𞋬̕b +a֮𞋬̀̕b|a֮𞋬̀̕b|a֮𞋬̀̕b +à֮𞋭̕b|à֮𞋭̕b|à֮𞋭̕b +a֮𞋭̀̕b|a֮𞋭̀̕b|a֮𞋭̀̕b +à֮𞋮̕b|à֮𞋮̕b|à֮𞋮̕b +a֮𞋮̀̕b|a֮𞋮̀̕b|a֮𞋮̀̕b +à֮𞋯̕b|à֮𞋯̕b|à֮𞋯̕b +a֮𞋯̀̕b|a֮𞋯̀̕b|a֮𞋯̀̕b +a〪̖𞣐֚b|a〪̖𞣐֚b|a〪̖𞣐֚b +a〪𞣐̖֚b|a〪𞣐̖֚b|a〪𞣐̖֚b +a〪̖𞣑֚b|a〪̖𞣑֚b|a〪̖𞣑֚b +a〪𞣑̖֚b|a〪𞣑̖֚b|a〪𞣑̖֚b +a〪̖𞣒֚b|a〪̖𞣒֚b|a〪̖𞣒֚b +a〪𞣒̖֚b|a〪𞣒̖֚b|a〪𞣒̖֚b +a〪̖𞣓֚b|a〪̖𞣓֚b|a〪̖𞣓֚b +a〪𞣓̖֚b|a〪𞣓̖֚b|a〪𞣓̖֚b +a〪̖𞣔֚b|a〪̖𞣔֚b|a〪̖𞣔֚b +a〪𞣔̖֚b|a〪𞣔̖֚b|a〪𞣔̖֚b +a〪̖𞣕֚b|a〪̖𞣕֚b|a〪̖𞣕֚b +a〪𞣕̖֚b|a〪𞣕̖֚b|a〪𞣕̖֚b +a〪̖𞣖֚b|a〪̖𞣖֚b|a〪̖𞣖֚b +a〪𞣖̖֚b|a〪𞣖̖֚b|a〪𞣖̖֚b +à֮𞥄̕b|à֮𞥄̕b|à֮𞥄̕b +a֮𞥄̀̕b|a֮𞥄̀̕b|a֮𞥄̀̕b +à֮𞥅̕b|à֮𞥅̕b|à֮𞥅̕b +a֮𞥅̀̕b|a֮𞥅̀̕b|a֮𞥅̀̕b +à֮𞥆̕b|à֮𞥆̕b|à֮𞥆̕b +a֮𞥆̀̕b|a֮𞥆̀̕b|a֮𞥆̀̕b +à֮𞥇̕b|à֮𞥇̕b|à֮𞥇̕b +a֮𞥇̀̕b|a֮𞥇̀̕b|a֮𞥇̀̕b +à֮𞥈̕b|à֮𞥈̕b|à֮𞥈̕b +a֮𞥈̀̕b|a֮𞥈̀̕b|a֮𞥈̀̕b +à֮𞥉̕b|à֮𞥉̕b|à֮𞥉̕b +a֮𞥉̀̕b|a֮𞥉̀̕b|a֮𞥉̀̕b +a̴़𞥊゙b|a̴़𞥊゙b|a̴़𞥊゙b +a̴𞥊़゙b|a̴𞥊़゙b|a̴𞥊़゙b +ে̴া|ে̴া|ে̴া +ে̴ৗ|ে̴ৗ|ে̴ৗ +େ̴ା|େ̴ା|େ̴ା +େ̴ୖ|େ̴ୖ|େ̴ୖ +େ̴ୗ|େ̴ୗ|େ̴ୗ +ஒ̴ௗ|ஒ̴ௗ|ஒ̴ௗ +ெ̴ா|ெ̴ா|ெ̴ா +ெ̴ௗ|ெ̴ௗ|ெ̴ௗ +ே̴ா|ே̴ா|ே̴ா +ಿ̴ೕ|ಿ̴ೕ|ಿ̴ೕ +ೆ̴ೂ|ೆ̴ೂ|ೆ̴ೂ +ೆ̴ೕ|ೆ̴ೕ|ೆ̴ೕ +ೆ̴ೖ|ೆ̴ೖ|ೆ̴ೖ +ೊ̴ೕ|ೊ̴ೕ|ೊ̴ೕ +െ̴ാ|െ̴ാ|െ̴ാ +െ̴ൗ|െ̴ൗ|െ̴ൗ +േ̴ാ|േ̴ാ|േ̴ാ +ෙ̴ා|ෙ̴ා|ෙ̴ා +ෙ̴ෟ|ෙ̴ෟ|ෙ̴ෟ +ཀ̴ྵ|ཀ̴ྵ|ཀ̴ྵ +ག̴ྷ|ག̴ྷ|ག̴ྷ +ཌ̴ྷ|ཌ̴ྷ|ཌ̴ྷ +ད̴ྷ|ད̴ྷ|ད̴ྷ +བ̴ྷ|བ̴ྷ|བ̴ྷ +ཛ̴ྷ|ཛ̴ྷ|ཛ̴ྷ +ྐ̴ྵ|ྐ̴ྵ|ྐ̴ྵ +ྒ̴ྷ|ྒ̴ྷ|ྒ̴ྷ +ྜ̴ྷ|ྜ̴ྷ|ྜ̴ྷ +ྡ̴ྷ|ྡ̴ྷ|ྡ̴ྷ +ྦ̴ྷ|ྦ̴ྷ|ྦ̴ྷ +ྫ̴ྷ|ྫ̴ྷ|ྫ̴ྷ +ဥ̴ီ|ဥ̴ီ|ဥ̴ီ +ᄀ̴ᅡ|ᄀ̴ᅡ|ᄀ̴ᅡ +ᄀ̴ᅮ|ᄀ̴ᅮ|ᄀ̴ᅮ +ᄁ̴ᅦ|ᄁ̴ᅦ|ᄁ̴ᅦ +ᄁ̴ᅳ|ᄁ̴ᅳ|ᄁ̴ᅳ +ᄂ̴ᅫ|ᄂ̴ᅫ|ᄂ̴ᅫ +ᄃ̴ᅣ|ᄃ̴ᅣ|ᄃ̴ᅣ +ᄃ̴ᅰ|ᄃ̴ᅰ|ᄃ̴ᅰ +ᄄ̴ᅨ|ᄄ̴ᅨ|ᄄ̴ᅨ +ᄄ̴ᅵ|ᄄ̴ᅵ|ᄄ̴ᅵ +ᄅ̴ᅭ|ᄅ̴ᅭ|ᄅ̴ᅭ +ᄆ̴ᅥ|ᄆ̴ᅥ|ᄆ̴ᅥ +ᄆ̴ᅲ|ᄆ̴ᅲ|ᄆ̴ᅲ +ᄇ̴ᅪ|ᄇ̴ᅪ|ᄇ̴ᅪ +ᄈ̴ᅢ|ᄈ̴ᅢ|ᄈ̴ᅢ +ᄈ̴ᅯ|ᄈ̴ᅯ|ᄈ̴ᅯ +ᄉ̴ᅧ|ᄉ̴ᅧ|ᄉ̴ᅧ +ᄉ̴ᅴ|ᄉ̴ᅴ|ᄉ̴ᅴ +ᄊ̴ᅬ|ᄊ̴ᅬ|ᄊ̴ᅬ +ᄋ̴ᅤ|ᄋ̴ᅤ|ᄋ̴ᅤ +ᄋ̴ᅱ|ᄋ̴ᅱ|ᄋ̴ᅱ +ᄌ̴ᅩ|ᄌ̴ᅩ|ᄌ̴ᅩ +ᄍ̴ᅡ|ᄍ̴ᅡ|ᄍ̴ᅡ +ᄍ̴ᅮ|ᄍ̴ᅮ|ᄍ̴ᅮ +ᄎ̴ᅦ|ᄎ̴ᅦ|ᄎ̴ᅦ +ᄎ̴ᅳ|ᄎ̴ᅳ|ᄎ̴ᅳ +ᄏ̴ᅫ|ᄏ̴ᅫ|ᄏ̴ᅫ +ᄐ̴ᅣ|ᄐ̴ᅣ|ᄐ̴ᅣ +ᄐ̴ᅰ|ᄐ̴ᅰ|ᄐ̴ᅰ +ᄑ̴ᅨ|ᄑ̴ᅨ|ᄑ̴ᅨ +ᄑ̴ᅵ|ᄑ̴ᅵ|ᄑ̴ᅵ +ᄒ̴ᅭ|ᄒ̴ᅭ|ᄒ̴ᅭ +ᬅ̴ᬵ|ᬅ̴ᬵ|ᬅ̴ᬵ +ᬇ̴ᬵ|ᬇ̴ᬵ|ᬇ̴ᬵ +ᬉ̴ᬵ|ᬉ̴ᬵ|ᬉ̴ᬵ +ᬋ̴ᬵ|ᬋ̴ᬵ|ᬋ̴ᬵ +ᬍ̴ᬵ|ᬍ̴ᬵ|ᬍ̴ᬵ +ᬑ̴ᬵ|ᬑ̴ᬵ|ᬑ̴ᬵ +ᬺ̴ᬵ|ᬺ̴ᬵ|ᬺ̴ᬵ +ᬼ̴ᬵ|ᬼ̴ᬵ|ᬼ̴ᬵ +ᬾ̴ᬵ|ᬾ̴ᬵ|ᬾ̴ᬵ +ᬿ̴ᬵ|ᬿ̴ᬵ|ᬿ̴ᬵ +ᭂ̴ᬵ|ᭂ̴ᬵ|ᭂ̴ᬵ +걔̴ᆮ|걔̴ᆮ|걔̴ᆮ +겨̴ᆵ|겨̴ᆵ|겨̴ᆵ +과̴ᆼ|과̴ᆼ|과̴ᆼ +귀̴ᆮ|귀̴ᆮ|귀̴ᆮ +긔̴ᆵ|긔̴ᆵ|긔̴ᆵ +깨̴ᆼ|깨̴ᆼ|깨̴ᆼ +꼬̴ᆮ|꼬̴ᆮ|꼬̴ᆮ +꾀̴ᆵ|꾀̴ᆵ|꾀̴ᆵ +꿔̴ᆼ|꿔̴ᆼ|꿔̴ᆼ +나̴ᆮ|나̴ᆮ|나̴ᆮ +냬̴ᆵ|냬̴ᆵ|냬̴ᆵ +녀̴ᆼ|녀̴ᆼ|녀̴ᆼ +누̴ᆮ|누̴ᆮ|누̴ᆮ +뉘̴ᆵ|뉘̴ᆵ|뉘̴ᆵ +늬̴ᆼ|늬̴ᆼ|늬̴ᆼ +데̴ᆮ|데̴ᆮ|데̴ᆮ +도̴ᆵ|도̴ᆵ|도̴ᆵ +되̴ᆼ|되̴ᆼ|되̴ᆼ +드̴ᆮ|드̴ᆮ|드̴ᆮ +따̴ᆵ|따̴ᆵ|따̴ᆵ +떄̴ᆼ|떄̴ᆼ|떄̴ᆼ +뙈̴ᆮ|뙈̴ᆮ|뙈̴ᆮ +뚜̴ᆵ|뚜̴ᆵ|뚜̴ᆵ +뛰̴ᆼ|뛰̴ᆼ|뛰̴ᆼ +랴̴ᆮ|랴̴ᆮ|랴̴ᆮ +레̴ᆵ|레̴ᆵ|레̴ᆵ +로̴ᆼ|로̴ᆼ|로̴ᆼ +뤠̴ᆮ|뤠̴ᆮ|뤠̴ᆮ +르̴ᆵ|르̴ᆵ|르̴ᆵ +마̴ᆼ|마̴ᆼ|마̴ᆼ +몌̴ᆮ|몌̴ᆮ|몌̴ᆮ +뫠̴ᆵ|뫠̴ᆵ|뫠̴ᆵ +무̴ᆼ|무̴ᆼ|무̴ᆼ +미̴ᆮ|미̴ᆮ|미̴ᆮ +뱌̴ᆵ|뱌̴ᆵ|뱌̴ᆵ +베̴ᆼ|베̴ᆼ|베̴ᆼ +뵤̴ᆮ|뵤̴ᆮ|뵤̴ᆮ +붸̴ᆵ|붸̴ᆵ|붸̴ᆵ +브̴ᆼ|브̴ᆼ|브̴ᆼ +뻐̴ᆮ|뻐̴ᆮ|뻐̴ᆮ +뼤̴ᆵ|뼤̴ᆵ|뼤̴ᆵ +뽸̴ᆼ|뽸̴ᆼ|뽸̴ᆼ +쀼̴ᆮ|쀼̴ᆮ|쀼̴ᆮ +삐̴ᆵ|삐̴ᆵ|삐̴ᆵ +샤̴ᆼ|샤̴ᆼ|샤̴ᆼ +솨̴ᆮ|솨̴ᆮ|솨̴ᆮ +쇼̴ᆵ|쇼̴ᆵ|쇼̴ᆵ +쉐̴ᆼ|쉐̴ᆼ|쉐̴ᆼ +쌔̴ᆮ|쌔̴ᆮ|쌔̴ᆮ +써̴ᆵ|써̴ᆵ|써̴ᆵ +쎼̴ᆼ|쎼̴ᆼ|쎼̴ᆼ +쒀̴ᆮ|쒀̴ᆮ|쒀̴ᆮ +쓔̴ᆵ|쓔̴ᆵ|쓔̴ᆵ +씨̴ᆼ|씨̴ᆼ|씨̴ᆼ +여̴ᆮ|여̴ᆮ|여̴ᆮ +와̴ᆵ|와̴ᆵ|와̴ᆵ +요̴ᆼ|요̴ᆼ|요̴ᆼ +의̴ᆮ|의̴ᆮ|의̴ᆮ +재̴ᆵ|재̴ᆵ|재̴ᆵ +저̴ᆼ|저̴ᆼ|저̴ᆼ +죄̴ᆮ|죄̴ᆮ|죄̴ᆮ +줘̴ᆵ|줘̴ᆵ|줘̴ᆵ +쥬̴ᆼ|쥬̴ᆼ|쥬̴ᆼ +쨰̴ᆮ|쨰̴ᆮ|쨰̴ᆮ +쪄̴ᆵ|쪄̴ᆵ|쪄̴ᆵ +쫘̴ᆼ|쫘̴ᆼ|쫘̴ᆼ +쮜̴ᆮ|쮜̴ᆮ|쮜̴ᆮ +쯰̴ᆵ|쯰̴ᆵ|쯰̴ᆵ +채̴ᆼ|채̴ᆼ|채̴ᆼ +초̴ᆮ|초̴ᆮ|초̴ᆮ +최̴ᆵ|최̴ᆵ|최̴ᆵ +춰̴ᆼ|춰̴ᆼ|춰̴ᆼ +카̴ᆮ|카̴ᆮ|카̴ᆮ +컈̴ᆵ|컈̴ᆵ|컈̴ᆵ +켜̴ᆼ|켜̴ᆼ|켜̴ᆼ +쿠̴ᆮ|쿠̴ᆮ|쿠̴ᆮ +퀴̴ᆵ|퀴̴ᆵ|퀴̴ᆵ +킈̴ᆼ|킈̴ᆼ|킈̴ᆼ +테̴ᆮ|테̴ᆮ|테̴ᆮ +토̴ᆵ|토̴ᆵ|토̴ᆵ +퇴̴ᆼ|퇴̴ᆼ|퇴̴ᆼ +트̴ᆮ|트̴ᆮ|트̴ᆮ +파̴ᆵ|파̴ᆵ|파̴ᆵ +퍠̴ᆼ|퍠̴ᆼ|퍠̴ᆼ +퐤̴ᆮ|퐤̴ᆮ|퐤̴ᆮ +푸̴ᆵ|푸̴ᆵ|푸̴ᆵ +퓌̴ᆼ|퓌̴ᆼ|퓌̴ᆼ +햐̴ᆮ|햐̴ᆮ|햐̴ᆮ +헤̴ᆵ|헤̴ᆵ|헤̴ᆵ +호̴ᆼ|호̴ᆼ|호̴ᆼ +훼̴ᆮ|훼̴ᆮ|훼̴ᆮ +흐̴ᆵ|흐̴ᆵ|흐̴ᆵ +𑄱̴𑄧|𑄱̴𑄧|𑄱̴𑄧 +𑄲̴𑄧|𑄲̴𑄧|𑄲̴𑄧 +𑍇̴𑌾|𑍇̴𑌾|𑍇̴𑌾 +𑍇̴𑍗|𑍇̴𑍗|𑍇̴𑍗 +𑒹̴𑒰|𑒹̴𑒰|𑒹̴𑒰 +𑒹̴𑒺|𑒹̴𑒺|𑒹̴𑒺 +𑒹̴𑒽|𑒹̴𑒽|𑒹̴𑒽 +𑖸̴𑖯|𑖸̴𑖯|𑖸̴𑖯 +𑖹̴𑖯|𑖹̴𑖯|𑖹̴𑖯 diff --git a/test/sql/copy/csv/data/test/invalid_utf_big.csv b/test/sql/copy/csv/data/test/invalid_utf_big.csv new file mode 100644 index 000000000000..41005b49d465 --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_big.csv @@ -0,0 +1,3034 @@ +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,invalid_��_part,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,invalid_��_part +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,invalid_��_part,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,invalid_��_part diff --git a/test/sql/copy/csv/data/test/invalid_utf_complex.csv b/test/sql/copy/csv/data/test/invalid_utf_complex.csv new file mode 100644 index 000000000000..15f91f329b67 --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_complex.csv @@ -0,0 +1,21 @@ +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,invalid_��_part,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid +valid,valid,valid diff --git a/test/sql/copy/csv/data/test/invalid_utf_header.csv b/test/sql/copy/csv/data/test/invalid_utf_header.csv new file mode 100644 index 000000000000..dd9de71ac9ac --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_header.csv @@ -0,0 +1,11 @@ +valid,"invalid_��_part",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid diff --git a/test/sql/copy/csv/data/test/invalid_utf_list.csv b/test/sql/copy/csv/data/test/invalid_utf_list.csv new file mode 100644 index 000000000000..913a541a7956 --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_list.csv @@ -0,0 +1,21 @@ +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, ��2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" +"[1, 2]" diff --git a/test/sql/copy/csv/data/test/invalid_utf_quoted.csv b/test/sql/copy/csv/data/test/invalid_utf_quoted.csv new file mode 100644 index 000000000000..e5cbf49e651b --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_quoted.csv @@ -0,0 +1,21 @@ +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"invalid_��_part",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid diff --git a/test/sql/copy/csv/data/test/invalid_utf_quoted_nl.csv b/test/sql/copy/csv/data/test/invalid_utf_quoted_nl.csv new file mode 100644 index 000000000000..1530afdb3fe7 --- /dev/null +++ b/test/sql/copy/csv/data/test/invalid_utf_quoted_nl.csv @@ -0,0 +1,23 @@ +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"invalid +_��_ +part",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid +valid,"valid",valid diff --git a/test/sql/copy/csv/glob/read_csv_glob.test b/test/sql/copy/csv/glob/read_csv_glob.test index 34bdf2e78a99..e87c68696612 100644 --- a/test/sql/copy/csv/glob/read_csv_glob.test +++ b/test/sql/copy/csv/glob/read_csv_glob.test @@ -95,7 +95,7 @@ SELECT * FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv') ORDER BY 1 # forcing string parsing works query I -SELECT * FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv', columns=STRUCT_PACK(d := 'STRING'), header=1) ORDER BY 1 +SELECT * FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv', columns=STRUCT_PACK(d := 'STRING')) ORDER BY 1 ---- 1 2 @@ -111,7 +111,7 @@ SELECT * FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv', columns=STRUCT_PAC 3 query II -SELECT a, b LIKE '%a_.csv' FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv', columns=STRUCT_PACK(d := 'STRING'), header=1, filename=1) t(a,b) ORDER BY 1 +SELECT a, b LIKE '%a_.csv' FROM read_csv('test/sql/copy/csv/data/glob/*/*.csv', columns=STRUCT_PACK(d := 'STRING'), filename=1) t(a,b) ORDER BY 1 ---- 1 0 2 0 diff --git a/test/sql/copy/csv/glob/read_csv_glob_s3.test b/test/sql/copy/csv/glob/read_csv_glob_s3.test index 611b06b795fb..1d2d914159a0 100644 --- a/test/sql/copy/csv/glob/read_csv_glob_s3.test +++ b/test/sql/copy/csv/glob/read_csv_glob_s3.test @@ -23,13 +23,13 @@ set ignore_error_messages # Copy files to S3 before beginning tests statement ok -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a1/a1.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/a1/a1.csv' ( HEADER ); -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a2/a2.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/a2/a2.csv' ( HEADER ); -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a3/b1.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/a3/b1.csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a1/a1.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/a1/a1.csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a2/a2.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/a2/a2.csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a3/b1.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/a3/b1.csv' ( HEADER ); COPY (select null) to 's3://test-bucket/read_csv_glob_s3/glob/empty/empty.csv' (HEADER 0); -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/i1/integer.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/i1/integer.csv' ( HEADER ); -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a1/a1.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/f1/f*.csv' ( HEADER ); -COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a2/a2.csv', header=True)) to 's3://test-bucket/read_csv_glob_s3/glob/f2/f[a].csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/i1/integer.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/i1/integer.csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a1/a1.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/f1/f*.csv' ( HEADER ); +COPY (select * from read_csv_auto('test/sql/copy/csv/data/glob/a2/a2.csv')) to 's3://test-bucket/read_csv_glob_s3/glob/f2/f[a].csv' ( HEADER ); foreach urlstyle path vhost @@ -77,7 +77,7 @@ SELECT * FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/*/*.csv', auto_de # forcing string parsing works query I -SELECT * FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/[aei]*/*.csv', columns=STRUCT_PACK(d := 'STRING'), header=1) ORDER BY 1 +SELECT * FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/[aei]*/*.csv', columns=STRUCT_PACK(d := 'STRING')) ORDER BY 1 ---- 1 2 @@ -93,7 +93,7 @@ SELECT * FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/[aei]*/*.csv', co 3 query II -SELECT a, b LIKE '%a_.csv' FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/[aei]*/*.csv', columns=STRUCT_PACK(d := 'STRING'), header=1, filename=1) t(a,b) ORDER BY 1 +SELECT a, b LIKE '%a_.csv' FROM read_csv('s3://test-bucket/read_csv_glob_s3/glob/[aei]*/*.csv', columns=STRUCT_PACK(d := 'STRING'), filename=1) t(a,b) ORDER BY 1 ---- 1 0 2 0 diff --git a/test/sql/copy/csv/issue_6690.test b/test/sql/copy/csv/issue_6690.test index 42a63b18ebfa..942414e2ceb8 100644 --- a/test/sql/copy/csv/issue_6690.test +++ b/test/sql/copy/csv/issue_6690.test @@ -8,10 +8,10 @@ statement ok PRAGMA enable_verification statement ok -FROM read_csv_auto('data/csv/comma_decimal_null.csv',SEP=',',SAMPLE_SIZE=-1,header=TRUE,decimal_separator=',') +FROM read_csv_auto('data/csv/comma_decimal_null.csv',SEP=',',SAMPLE_SIZE=-1,decimal_separator=',') query I -SELECT FINANZ_STATO_FSC FROM read_csv_auto('data/csv/comma_decimal_null.csv',SEP=',',SAMPLE_SIZE=-1,header=TRUE,decimal_separator=',') +SELECT FINANZ_STATO_FSC FROM read_csv_auto('data/csv/comma_decimal_null.csv',SEP=',',SAMPLE_SIZE=-1,decimal_separator=',') ---- 80000000.0 1400000.0 diff --git a/test/sql/copy/csv/issue_6764.test b/test/sql/copy/csv/issue_6764.test index 05aad4db1a77..0ac89fbe5b03 100644 --- a/test/sql/copy/csv/issue_6764.test +++ b/test/sql/copy/csv/issue_6764.test @@ -8,8 +8,9 @@ statement ok PRAGMA enable_verification query III -FROM read_csv_auto('data/csv/issue6764.csv', all_varchar=true, header=true, skip=1, null_padding=True) +FROM read_csv_auto('data/csv/issue6764.csv', all_varchar=true, skip=1, null_padding=True) ---- +1 a alice 2 b bob query III diff --git a/test/sql/copy/csv/null_padding_big.test b/test/sql/copy/csv/null_padding_big.test index 513ec898b6a8..9e1ac22e9a30 100644 --- a/test/sql/copy/csv/null_padding_big.test +++ b/test/sql/copy/csv/null_padding_big.test @@ -8,7 +8,7 @@ statement ok CREATE TABLE test (a VARCHAR, b INTEGER, c INTEGER); query I -INSERT INTO test SELECT * FROM read_csv_auto('data/csv/nullpadding_big_mixed.csv', null_padding=True, Header=True) +INSERT INTO test SELECT * FROM read_csv_auto('data/csv/nullpadding_big_mixed.csv', null_padding=True) ---- 2501 @@ -38,7 +38,7 @@ SELECT COUNT(*) FROM read_csv_auto('data/csv/nullpadding_commas.csv', null_paddi 2500 query I -SELECT COUNT(*) FROM read_csv('data/csv/nullpadding_commas.csv', sep=',', header=True, columns={'a': INT, 'b': INT, 'c': INT, 'd': INT}, ignore_errors=True, null_padding=False, auto_detect=false) +SELECT COUNT(*) FROM read_csv('data/csv/nullpadding_commas.csv', sep=',', columns={'a': INT, 'b': INT, 'c': INT, 'd': INT}, ignore_errors=True, null_padding=False) ---- 2492 diff --git a/test/sql/copy/csv/overwrite/test_copy_overwrite.test b/test/sql/copy/csv/overwrite/test_copy_overwrite.test index 2ed5fd6e5a9a..16f5ca189f24 100644 --- a/test/sql/copy/csv/overwrite/test_copy_overwrite.test +++ b/test/sql/copy/csv/overwrite/test_copy_overwrite.test @@ -33,7 +33,7 @@ statement ok DELETE FROM test; query I -COPY test FROM '__TEST_DIR__/overwrite.csv' (HEADER 1); +COPY test FROM '__TEST_DIR__/overwrite.csv'; ---- 2 @@ -52,7 +52,7 @@ statement ok DELETE FROM test; query I -COPY test FROM '__TEST_DIR__/overwrite.csv' (HEADER 1); +COPY test FROM '__TEST_DIR__/overwrite.csv'; ---- 2 diff --git a/test/sql/copy/csv/parallel/parallel_csv_hive_partitioning.test b/test/sql/copy/csv/parallel/parallel_csv_hive_partitioning.test index 8486f4220abd..18db6030c9a6 100644 --- a/test/sql/copy/csv/parallel/parallel_csv_hive_partitioning.test +++ b/test/sql/copy/csv/parallel/parallel_csv_hive_partitioning.test @@ -8,19 +8,19 @@ PRAGMA verify_parallelism # filenames could allow you to parse hive partitions manually using SQL query IIII -select id, value, filename.replace('\', '/').split('/')[-2], filename.replace('\', '/').split('/')[-3] from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', FILENAME=1, HEADER=1) order by id +select id, value, filename.replace('\', '/').split('/')[-2], filename.replace('\', '/').split('/')[-3] from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', FILENAME=1) order by id ---- 1 value1 date=2012-01-01 part=a 2 value2 date=2013-01-01 part=b query IIII -select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by id +select id, value, part, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1) order by id ---- 1 value1 a 2012-01-01 2 value2 b 2013-01-01 query III -select part, value, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1, HEADER=1) order by 1 +select part, value, date from read_csv_auto('data/csv/hive-partitioning/simple/*/*/test.csv', HIVE_PARTITIONING=1) order by 1 ---- a value1 2012-01-01 b value2 2013-01-01 diff --git a/test/sql/copy/csv/parallel/test_7578.test b/test/sql/copy/csv/parallel/test_7578.test index 478ab897e189..a2f188511c5b 100644 --- a/test/sql/copy/csv/parallel/test_7578.test +++ b/test/sql/copy/csv/parallel/test_7578.test @@ -8,7 +8,7 @@ PRAGMA verify_parallelism query IIIIIIIIII select * -from read_csv('data/csv/bug_7578.csv', delim='\t', header=true, quote = '`', columns={ +from read_csv('data/csv/bug_7578.csv', delim='\t', quote = '`', columns={ 'transaction_id': 'VARCHAR', 'team_id': 'INT', 'direction': 'INT', @@ -19,8 +19,7 @@ from read_csv('data/csv/bug_7578.csv', delim='\t', header=true, quote = '`', co 'tags.transaction_id':'VARCHAR', 'tags.team_id':'INT', 'tags':'varchar' -}, - auto_detect = false) order by all +}) order by all ---- 01GXBE9CMV5R0Q4TEXZ4XFXPQR 58 -1 3.91 41 2022-11-22 2023-04-06 01GXBE9CMV5R0Q4TEXZ4XFXPQR 58 {"_journalize_rule": "four score and seven years ago our fathers brought forth upon this continent a new nation conceived in liberty and dedicated to the proposition that all men are created equal. now we are engaged in a great civil war", "transaction_match_id": "1234567", "transaction id": "1234456", "job id": "", "transacting party": "customer", "user id": "1278729", "state": "NY", "event type": "Sale", "product name": "acme", "event description": "", "related transaction id": "11234813", "transaction created at": "2022-11-11T01:12:31", "created on": "2022-11-11T01:12:31", "last modified on": "2022-11-14T09:03:57", "base amount": "48.0000", "tax": "4.120000", "stripe payment id": "ch_1234567889", "stripe payment amount": "54.1100", "stripe payment date": "2022-11-14T09:03:55", "payment fail date": "", "write-off id": "", "write-off date": "", "write-off amount": "", "amount due": "0.0000"} 01GXBE9CMV5R0Q4TEXZ4XFXPQR 58 1 3.91 39 2022-11-22 2023-04-06 01GXBE9CMV5R0Q4TEXZ4XFXPQR 58 {"_journalize_rule": "four score and seven years ago our fathers brought forth upon this continent a new nation conceived in liberty and dedicated to the proposition that all men are created equal. now we are engaged in a great civil war", "transaction_match_id": "1234567", "transaction id": "1234456", "job id": "", "transacting party": "customer", "user id": "1278729", "state": "NY", "event type": "Sale", "product name": "acme", "event description": "", "related transaction id": "11234813", "transaction created at": "2022-11-11T01:12:31", "created on": "2022-11-11T01:12:31", "last modified on": "2022-11-14T09:03:57", "base amount": "48.0000", "tax": "4.120000", "stripe payment id": "ch_1234567889", "stripe payment amount": "54.1100", "stripe payment date": "2022-11-14T09:03:55", "payment fail date": "", "write-off id": "", "write-off date": "", "write-off amount": "", "amount due": "0.0000"} @@ -34,7 +33,7 @@ pragma threads=2 statement error select * -from read_csv('data/csv/bug_7578.csv', delim='\t', header=true, columns={ +from read_csv('data/csv/bug_7578.csv', delim='\t', columns={ 'transaction_id': 'VARCHAR', 'team_id': 'INT', 'direction': 'INT', diff --git a/test/sql/copy/csv/parallel/test_multiple_files.test b/test/sql/copy/csv/parallel/test_multiple_files.test index ce873e22c5af..04b34c98cc41 100644 --- a/test/sql/copy/csv/parallel/test_multiple_files.test +++ b/test/sql/copy/csv/parallel/test_multiple_files.test @@ -186,7 +186,7 @@ select * from read_csv('test/sql/copy/csv/data/auto/glob/[0-9].csv', AUTO_DETECT 9 9 1.9 nine query IIII rowsort -select * from read_csv('test/sql/copy/csv/data/auto/glob/[0-9].csv', sample_size=-1, header=True, new_line = '\r\n', columns={'row_id':'BIGINT','integer':'INTEGER','float':'DOUBLE', 'text':'VARCHAR'}) +select * from read_csv('test/sql/copy/csv/data/auto/glob/[0-9].csv', sample_size=-1, new_line = '\r\n', columns={'row_id':'BIGINT','integer':'INTEGER','float':'DOUBLE', 'text':'VARCHAR'}) ---- 0 0 1.0 zero 1 1 1.1 one diff --git a/test/sql/copy/csv/parallel/test_parallel_csv.test b/test/sql/copy/csv/parallel/test_parallel_csv.test index b54098c5543d..3c446dd460f5 100644 --- a/test/sql/copy/csv/parallel/test_parallel_csv.test +++ b/test/sql/copy/csv/parallel/test_parallel_csv.test @@ -136,14 +136,14 @@ MCT Muscat Muscat Oman OM 1 23.6015386 58.2899376 Middle East South Africa, Keny require httpfs query II -select * from read_csv_auto("https://duckdb-public-gzip-test.s3.us-east-2.amazonaws.com/test.csv"); +select * from read_csv_auto("https://duckdb-public-gzip-test.s3.us-east-2.amazonaws.com/test.csv", header = 0); ---- 'foo' 'bar' foo bar query II -from read_csv_auto("https://duckdb-public-gzip-test.s3.us-east-2.amazonaws.com/test.csv.gz"); +from read_csv_auto("https://duckdb-public-gzip-test.s3.us-east-2.amazonaws.com/test.csv.gz", header = 0); ---- 'foo' 'bar' foo bar diff --git a/test/sql/copy/csv/plus_autodetect.test b/test/sql/copy/csv/plus_autodetect.test index 5e7634824e84..8d13b5f0b0c7 100644 --- a/test/sql/copy/csv/plus_autodetect.test +++ b/test/sql/copy/csv/plus_autodetect.test @@ -6,7 +6,7 @@ statement ok PRAGMA enable_verification statement ok -CREATE TABLE phone_numbers AS SELECT * FROM read_csv_auto('data/csv/phonenumbers.csv', header=1) +CREATE TABLE phone_numbers AS SELECT * FROM read_csv_auto('data/csv/phonenumbers.csv') query I SELECT phone FROM phone_numbers; diff --git a/test/sql/copy/csv/recursive_csv_union_by_name.test b/test/sql/copy/csv/recursive_csv_union_by_name.test index fede5b563c7e..23249e3655d4 100644 --- a/test/sql/copy/csv/recursive_csv_union_by_name.test +++ b/test/sql/copy/csv/recursive_csv_union_by_name.test @@ -6,7 +6,7 @@ statement ok PRAGMA enable_verification statement ok -create view r AS from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', HEADER=1, UNION_BY_NAME=1, HIVE_PARTITIONING=1) +create view r AS from read_csv_auto('data/csv/hive-partitioning/mismatching_contents/*/*.csv', UNION_BY_NAME=1, HIVE_PARTITIONING=1) query II WITH RECURSIVE t(i, j) AS diff --git a/test/sql/copy/csv/rejects/csv_rejects_auto.test b/test/sql/copy/csv/rejects/csv_rejects_auto.test index 10bcea6e6953..5dc4358708de 100644 --- a/test/sql/copy/csv/rejects/csv_rejects_auto.test +++ b/test/sql/copy/csv/rejects/csv_rejects_auto.test @@ -56,7 +56,7 @@ SELECT typeof(first(column0)), typeof(first(column1)), COUNT(*) FROM read_csv_au 'test/sql/copy/csv/data/error/mismatch/big_bad*.csv', sample_size=3000, rejects_table='csv_rejects_table', - ignore_errors=true); + ignore_errors=true, header = 0); ---- VARCHAR VARCHAR 11048 diff --git a/test/sql/copy/csv/rejects/csv_rejects_read.test b/test/sql/copy/csv/rejects/csv_rejects_read.test index 42fec65206fd..16b73ae7ac65 100644 --- a/test/sql/copy/csv/rejects/csv_rejects_read.test +++ b/test/sql/copy/csv/rejects/csv_rejects_read.test @@ -210,18 +210,14 @@ query IIII rowsort SELECT * FROM read_csv( 'test/sql/copy/csv/data/error/mismatch/small1.csv', - header = true, columns = {'num': 'INTEGER', 'str': 'VARCHAR'}, rejects_table='csv_rejects_table_left', - ignore_errors=true, - auto_detect=false) as L + ignore_errors=true) as L JOIN read_csv( 'test/sql/copy/csv/data/error/mismatch/small2.csv', - header = true, columns = {'num': 'INTEGER', 'str': 'VARCHAR'}, rejects_table='csv_rejects_table_right', - ignore_errors=true, - auto_detect=false) as R + ignore_errors=true) as R ON L.num = R.num; ---- 1 A 1 A @@ -253,19 +249,15 @@ query IIII rowsort SELECT * FROM read_csv( 'test/sql/copy/csv/data/error/mismatch/small1.csv', - header = true, columns = {'num': 'INTEGER', 'str': 'VARCHAR'}, rejects_table='csv_rejects_table_left', - ignore_errors=true, - auto_detect=false) as L + ignore_errors=true) as L JOIN read_csv( 'test/sql/copy/csv/data/error/mismatch/small2.csv', - header = true, columns = {'num': 'INTEGER', 'str': 'VARCHAR'}, rejects_table='csv_rejects_table_right', rejects_limit=1, - ignore_errors=true, - auto_detect=false) as R + ignore_errors=true) as R ON L.num = R.num; ---- 1 A 1 A diff --git a/test/sql/copy/csv/test_9005.test b/test/sql/copy/csv/test_9005.test index 7d2b26a0ca8c..de9a4e4216c7 100644 --- a/test/sql/copy/csv/test_9005.test +++ b/test/sql/copy/csv/test_9005.test @@ -9,7 +9,7 @@ PRAGMA enable_verification require notwindows query IIII -SELECT * FROM read_csv_auto('data/csv/bug_9005/teste*.csv',header=TRUE,filename=true,union_by_name=True) where filename='data/csv/bug_9005/teste1.csv'; +SELECT * FROM read_csv_auto('data/csv/bug_9005/teste*.csv',filename=true,union_by_name=True) where filename='data/csv/bug_9005/teste1.csv'; ---- 1 Ricardo 1.5 data/csv/bug_9005/teste1.csv 2 Jose 2.0 data/csv/bug_9005/teste1.csv diff --git a/test/sql/copy/csv/test_auto_detection_headers.test b/test/sql/copy/csv/test_auto_detection_headers.test new file mode 100644 index 000000000000..b842517ae622 --- /dev/null +++ b/test/sql/copy/csv/test_auto_detection_headers.test @@ -0,0 +1,32 @@ +# name: test/sql/copy/csv/test_auto_detection_headers.test +# description: Test auto detection of headers +# group: [csv] + +statement ok +PRAGMA enable_verification + +query I +from read_csv('data/csv/headers/undetected_type.csv', delim = ';') +---- +68,527.00 + +query I +from 'data/csv/headers/all_varchar.csv' +---- +Pedro + +query II +from 'data/csv/headers/single_line.csv' +---- + +query I +from 'data/csv/headers/borked_type.csv' +---- +02/01/2019 +08//01/2019 + +# This should work even with only one line +query I +from 'data/csv/headers/integer.csv' +---- +32 \ No newline at end of file diff --git a/test/sql/copy/csv/test_blob.test b/test/sql/copy/csv/test_blob.test index dadc74bcbd0f..53196582d07f 100644 --- a/test/sql/copy/csv/test_blob.test +++ b/test/sql/copy/csv/test_blob.test @@ -30,7 +30,7 @@ statement ok DELETE FROM blobs query I -COPY blobs FROM '__TEST_DIR__/blob.csv' (HEADER 1, AUTO_DETECT 0); +COPY blobs FROM '__TEST_DIR__/blob.csv'; ---- 1 @@ -49,7 +49,7 @@ statement ok DELETE FROM blobs query I -COPY blobs FROM '__TEST_DIR__/blob.csv' (DELIMITER 'A', QUOTE 'B', ESCAPE 'C', HEADER 1, AUTO_DETECT 0); +COPY blobs FROM '__TEST_DIR__/blob.csv' (DELIMITER 'A', QUOTE 'B', ESCAPE 'C'); ---- 1 diff --git a/test/sql/copy/csv/test_bug_10273.test b/test/sql/copy/csv/test_bug_10273.test index b8cef2d3d34f..bda2a8d35a10 100644 --- a/test/sql/copy/csv/test_bug_10273.test +++ b/test/sql/copy/csv/test_bug_10273.test @@ -6,7 +6,7 @@ statement ok PRAGMA enable_verification query II -FROM 'data/csv/bug_10273.csv' +FROM read_csv('data/csv/bug_10273.csv', header=0) ---- 这是alice的苹果,所以你不能吃。 This is Alice's apple, so you can't eat it. 这是alice的苹果,所以你不能吃。 This is "Alice's apple", so you can't eat it. diff --git a/test/sql/copy/csv/test_bug_9952.test b/test/sql/copy/csv/test_bug_9952.test index 93741f1ee905..a33f791ef32c 100644 --- a/test/sql/copy/csv/test_bug_9952.test +++ b/test/sql/copy/csv/test_bug_9952.test @@ -5,10 +5,8 @@ statement ok PRAGMA enable_verification -statement error +statement ok FROM 'data/csv/num.tsv.gz' ----- -Value with unterminated quote found. statement ok FROM read_csv('data/csv/num.tsv.gz', sample_size=-1) diff --git a/test/sql/copy/csv/test_copy.test b/test/sql/copy/csv/test_copy.test index fc1063eba222..a71bdd96d409 100644 --- a/test/sql/copy/csv/test_copy.test +++ b/test/sql/copy/csv/test_copy.test @@ -35,7 +35,7 @@ statement ok CREATE TABLE test2 (a INTEGER, b INTEGER, c VARCHAR(10)); query I -COPY test2 FROM '__TEST_DIR__/test2.csv' (HEADER 1); +COPY test2 FROM '__TEST_DIR__/test2.csv' ; ---- 5000 @@ -51,7 +51,7 @@ statement ok CREATE TABLE test_too_few_rows (a INTEGER, b INTEGER, c VARCHAR, d INTEGER); statement error -COPY test_too_few_rows FROM '__TEST_DIR__/test2.csv' (NULL_PADDING 0, HEADER 1); +COPY test_too_few_rows FROM '__TEST_DIR__/test2.csv' (NULL_PADDING 0); ---- # create CSV file from query @@ -65,7 +65,7 @@ statement ok CREATE TABLE test3 (a INTEGER, b INTEGER); query I -COPY test3 FROM '__TEST_DIR__/test3.csv' (HEADER 1); +COPY test3 FROM '__TEST_DIR__/test3.csv'; ---- 4000 diff --git a/test/sql/copy/csv/test_copy_null.test b/test/sql/copy/csv/test_copy_null.test index 952272c5164d..4e77c7181d1c 100644 --- a/test/sql/copy/csv/test_copy_null.test +++ b/test/sql/copy/csv/test_copy_null.test @@ -111,7 +111,7 @@ statement ok DELETE FROM test_null_option; query I -COPY test_null_option FROM '__TEST_DIR__/test_null_option_2.csv' (HEADER 1); +COPY test_null_option FROM '__TEST_DIR__/test_null_option_2.csv'; ---- 3 @@ -124,7 +124,7 @@ SELECT * FROM test_null_option ORDER BY 1 LIMIT 3; # explicitly using default NULL value query I -COPY test_null_option TO '__TEST_DIR__/test_null_option_3.csv' (NULL '', HEADER 1); +COPY test_null_option TO '__TEST_DIR__/test_null_option_3.csv' (NULL ''); ---- 3 @@ -132,7 +132,7 @@ statement ok DELETE FROM test_null_option; query I -COPY test_null_option FROM '__TEST_DIR__/test_null_option_3.csv' (NULL '', HEADER 1); +COPY test_null_option FROM '__TEST_DIR__/test_null_option_3.csv' (NULL ''); ---- 3 @@ -145,7 +145,7 @@ SELECT * FROM test_null_option ORDER BY 1 LIMIT 3; # setting specific NULL value query I -COPY test_null_option TO '__TEST_DIR__/test_null_option_4.csv' (NULL 'null', HEADER 1); +COPY test_null_option TO '__TEST_DIR__/test_null_option_4.csv' (NULL 'null'); ---- 3 @@ -153,7 +153,7 @@ statement ok DELETE FROM test_null_option; query I -COPY test_null_option FROM '__TEST_DIR__/test_null_option_4.csv' (NULL 'null', HEADER 1); +COPY test_null_option FROM '__TEST_DIR__/test_null_option_4.csv' (NULL 'null'); ---- 3 diff --git a/test/sql/copy/csv/test_csv_httpfs.test b/test/sql/copy/csv/test_csv_httpfs.test index 507dd80da980..89fdc5b5b09a 100644 --- a/test/sql/copy/csv/test_csv_httpfs.test +++ b/test/sql/copy/csv/test_csv_httpfs.test @@ -69,11 +69,11 @@ SELECT * from read_csv_auto('https://www.data.gouv.fr/fr/datasets/r/6d186965-f41 2021 UE 27 UE 27 21.894190365821018 193930.95399999994 885764.4460000001 query IIIIII rowsort res -SELECT * from read_csv('https://www.data.gouv.fr/fr/datasets/r/6d186965-f41b-41f3-9b23-88241cc6890c',DELIM=';',HEADER=TRUE,Columns={'annee_de_reference':'VARCHAR','pays':'VARCHAR','label_en':'VARCHAR','part_du_gaz_naturel_dans_la_consommation_finale_d_energie0':'VARCHAR','consommation_finale_de_gaz_naturel_mtep':'VARCHAR','consommation_finale_d_energie_totale_mtep':'VARCHAR'}); +SELECT * from read_csv('https://www.data.gouv.fr/fr/datasets/r/6d186965-f41b-41f3-9b23-88241cc6890c',DELIM=';',Columns={'annee_de_reference':'VARCHAR','pays':'VARCHAR','label_en':'VARCHAR','part_du_gaz_naturel_dans_la_consommation_finale_d_energie0':'VARCHAR','consommation_finale_de_gaz_naturel_mtep':'VARCHAR','consommation_finale_d_energie_totale_mtep':'VARCHAR'}); query IIIIII rowsort res -SELECT * from read_csv('https://www.data.gouv.fr/fr/datasets/r/6d186965-f41b-41f3-9b23-88241cc6890c',DELIM=';',HEADER=TRUE,Columns={'annee_de_reference':'VARCHAR','pays':'VARCHAR','label_en':'VARCHAR','part_du_gaz_naturel_dans_la_consommation_finale_d_energie0':'VARCHAR','consommation_finale_de_gaz_naturel_mtep':'VARCHAR','consommation_finale_d_energie_totale_mtep':'VARCHAR'}); +SELECT * from read_csv('https://www.data.gouv.fr/fr/datasets/r/6d186965-f41b-41f3-9b23-88241cc6890c',DELIM=';',Columns={'annee_de_reference':'VARCHAR','pays':'VARCHAR','label_en':'VARCHAR','part_du_gaz_naturel_dans_la_consommation_finale_d_energie0':'VARCHAR','consommation_finale_de_gaz_naturel_mtep':'VARCHAR','consommation_finale_d_energie_totale_mtep':'VARCHAR'}); # Give it a try to a request that returns length 0 diff --git a/test/sql/copy/csv/test_csv_httpfs.test_slow b/test/sql/copy/csv/test_csv_httpfs.test_slow index ad1f374027d7..06be588b64a6 100644 --- a/test/sql/copy/csv/test_csv_httpfs.test_slow +++ b/test/sql/copy/csv/test_csv_httpfs.test_slow @@ -11,7 +11,7 @@ mode skip # Add test for 3731 query I -SELECT count(*) FROM read_csv_auto('https://datasets.imdbws.com/name.basics.tsv.gz', delim='\t', quote='',header=True) +SELECT count(*) FROM read_csv_auto('https://datasets.imdbws.com/name.basics.tsv.gz', delim='\t', quote='') ---- 12783090 @@ -24,7 +24,7 @@ query I case WHEN regexp_matches(deathYear,'[0-9]+') THEN CAST(deathYear as integer) END as deathYear, case WHEN regexp_matches(birthYear,'[0-9]+') THEN CAST(birthYear as integer) END as birthYear ) - FROM read_csv_auto('https://datasets.imdbws.com/name.basics.tsv.gz', delim='\t', quote='',header=True) + FROM read_csv_auto('https://datasets.imdbws.com/name.basics.tsv.gz', delim='\t', quote='') ) to '__TEST_DIR__/name_basics.parquet' (FORMAT 'parquet', CODEC 'ZSTD') ---- 12783090 diff --git a/test/sql/copy/csv/test_csv_projection_pushdown.test b/test/sql/copy/csv/test_csv_projection_pushdown.test index 420d3f3b3581..1693bf7562bf 100644 --- a/test/sql/copy/csv/test_csv_projection_pushdown.test +++ b/test/sql/copy/csv/test_csv_projection_pushdown.test @@ -115,3 +115,39 @@ SELECT COUNT(*) FROM ${lineitem} endloop +# Test Projection over multiple buffers +query I +select count(*) from read_csv('data/csv/projection_buffer.csv', quote = '"', escape = '"', buffer_size=35) +---- +27 + +query III +select d,b,a from read_csv('data/csv/projection_buffer.csv', quote = '"', escape = '"', buffer_size=35) +---- +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" +d" b" a" \ No newline at end of file diff --git a/test/sql/copy/csv/test_csv_remote.test_slow b/test/sql/copy/csv/test_csv_remote.test_slow index 025b7e40b980..1a8e6a350341 100644 --- a/test/sql/copy/csv/test_csv_remote.test_slow +++ b/test/sql/copy/csv/test_csv_remote.test_slow @@ -7,6 +7,6 @@ require httpfs # Read a compressed file (~44MB compressed, ~700MB uncompressed) over HTTP query IIIIII select count(*), min(strain), max(strain), min(strlen(sequence)), max(strlen(sequence)), avg(strlen(sequence)) -from read_csv_auto('https://raw.githubusercontent.com/duckdb/duckdb/main/data/csv/sequences.csv.gz', delim=',', header=True); +from read_csv_auto('https://raw.githubusercontent.com/duckdb/duckdb/main/data/csv/sequences.csv.gz', delim=','); ---- 100000 ARG/Cordoba-1006-155/2020 tiger/NY/040420/2020 17340 30643 29821.264410 diff --git a/test/sql/copy/csv/test_csv_timestamp_tz.test b/test/sql/copy/csv/test_csv_timestamp_tz.test index 6ddaa34c3460..6bc16ad0df7e 100644 --- a/test/sql/copy/csv/test_csv_timestamp_tz.test +++ b/test/sql/copy/csv/test_csv_timestamp_tz.test @@ -8,11 +8,11 @@ pragma enable_verification statement ok copy ( select '2021-05-25 04:55:03.382494 UTC'::timestamp as ts, '2021-05-25 04:55:03.382494 UTC'::timestamptz as tstz -) to '__TEST_DIR__/timestamps.csv' (header 1, timestampformat '%A'); +) to '__TEST_DIR__/timestamps.csv' ( timestampformat '%A'); query II -select * from read_csv_auto('__TEST_DIR__/timestamps.csv', header=1); +select * from read_csv_auto('__TEST_DIR__/timestamps.csv'); ---- Tuesday Tuesday diff --git a/test/sql/copy/csv/test_csv_wrong_file.test_slow b/test/sql/copy/csv/test_csv_wrong_file.test_slow new file mode 100644 index 000000000000..e6a211308a7c --- /dev/null +++ b/test/sql/copy/csv/test_csv_wrong_file.test_slow @@ -0,0 +1,18 @@ +# name: test/sql/copy/csv/test_csv_wrong_file.test_slow +# description: Test CSV read over wrong file format +# group: [csv] + +require tpch + +# load the DB from disk +load __TEST_DIR__/test_csv_tpch.db + +statement ok +CALL dbgen(sf=1) + +restart + +statement error +from read_csv('__TEST_DIR__/test_csv_tpch.db') +---- +CSV options could not be auto-detected. Consider setting parser options manually. \ No newline at end of file diff --git a/test/sql/copy/csv/test_date.test b/test/sql/copy/csv/test_date.test index 5472a082fa09..8ad08f8ac232 100644 --- a/test/sql/copy/csv/test_date.test +++ b/test/sql/copy/csv/test_date.test @@ -15,3 +15,26 @@ SELECT cast(d as string) FROM date_test; ---- 2019-06-05 +query TT +Select * from read_csv('data/csv/custom_date.csv', header=true, dateformat='%m/%d/%Y, %-I:%-M %p', types = ['BIGINT', 'DATE'] ); +---- +123 2023-01-02 +124 2023-12-02 + +query TT +Select * from read_csv('data/csv/custom_date.csv', header=true, dateformat='%m/%d/%Y, %-I:%-M %p'); +---- +123 2023-01-02 +124 2023-12-02 + +query TT +Select * from read_csv('data/csv/custom_date.csv', header=true, timestampformat='%m/%d/%Y, %-I:%-M %p', types = ['BIGINT', 'TIMESTAMP'] ); +---- +123 2023-01-02 12:33:00 +124 2023-12-02 11:57:00 + +query TT +Select * from read_csv('data/csv/custom_date.csv', header=true, timestampformat='%m/%d/%Y, %-I:%-M %p'); +---- +123 2023-01-02 12:33:00 +124 2023-12-02 11:57:00 \ No newline at end of file diff --git a/test/sql/copy/csv/test_empty_quote.test b/test/sql/copy/csv/test_empty_quote.test index c5732964f018..3fcf3213acfe 100644 --- a/test/sql/copy/csv/test_empty_quote.test +++ b/test/sql/copy/csv/test_empty_quote.test @@ -7,7 +7,7 @@ CREATE TABLE no_quote(a VARCHAR, b VARCHAR); # empty quote query I -COPY no_quote FROM 'test/sql/copy/csv/data/no_quote.csv' (HEADER 1, QUOTE '', ESCAPE '', DELIM '|', AUTO_DETECT 0); +COPY no_quote FROM 'test/sql/copy/csv/data/no_quote.csv' ( QUOTE '', ESCAPE '', DELIM '|'); ---- 3 @@ -20,7 +20,7 @@ h'ow do you do" # empty quote in read_csv function query TT -SELECT * FROM read_csv('test/sql/copy/csv/data/no_quote.csv', auto_detect=1, header=1, quote=''); +SELECT * FROM read_csv('test/sql/copy/csv/data/no_quote.csv', auto_detect=1, quote=''); ---- "hello world h'ow do you do" diff --git a/test/sql/copy/csv/test_errors.test_slow b/test/sql/copy/csv/test_errors.test_slow new file mode 100644 index 000000000000..1b8f4a8819cf --- /dev/null +++ b/test/sql/copy/csv/test_errors.test_slow @@ -0,0 +1,22 @@ +# name: test/sql/copy/csv/test_errors.test_slow +# description: Test reading csv files with errors return correct error line +# group: [csv] + +require tpch + +statement ok +CALL dbgen(sf=1); + +statement ok +COPY ( + SELECT * REPLACE ( + CASE WHEN row_number() OVER ()=1234567 THEN 'thisisnotanumber' + ELSE l_orderkey::VARCHAR + END AS l_orderkey) + FROM lineitem) TO '__TEST_DIR__/lineitem_malformed.csv'; + +# Should return 1234567 + 1 (Header) +statement error +COPY lineitem FROM '__TEST_DIR__/lineitem_malformed.csv'; +---- +CSV Error on Line: 1234568 diff --git a/test/sql/copy/csv/test_force_quote.test b/test/sql/copy/csv/test_force_quote.test index 391e3cc9761f..48316be24b79 100644 --- a/test/sql/copy/csv/test_force_quote.test +++ b/test/sql/copy/csv/test_force_quote.test @@ -28,7 +28,7 @@ statement ok CREATE TABLE test2 (col_a INTEGER, col_b VARCHAR(10), col_c VARCHAR(10)); query I -COPY test2 FROM '__TEST_DIR__/test_chosen_columns.csv' (QUOTE 't', NULL 'ea', HEADER 1); +COPY test2 FROM '__TEST_DIR__/test_chosen_columns.csv' (QUOTE 't', NULL 'ea'); ---- 3 @@ -49,7 +49,7 @@ statement ok CREATE TABLE test3 (col_a INTEGER, col_b VARCHAR(10), col_c VARCHAR(10)); query I -COPY test3(col_b, col_c, col_a) FROM '__TEST_DIR__/test_reorder.csv' (NULL 'test', HEADER 1); +COPY test3(col_b, col_c, col_a) FROM '__TEST_DIR__/test_reorder.csv' (NULL 'test'); ---- 3 @@ -73,7 +73,7 @@ COPY test TO '__TEST_DIR__/test_reorder.csv' (FORCE_QUOTE (col_c, col_d)); # FORCE_QUOTE is only supported in COPY ... TO ... statement error -COPY test FROM '__TEST_DIR__/test_reorder.csv' (FORCE_QUOTE (col_c, col_d), HEADER 1); +COPY test FROM '__TEST_DIR__/test_reorder.csv' (FORCE_QUOTE (col_c, col_d)); ---- # FORCE_QUOTE must not be empty and must have the correct parameter type diff --git a/test/sql/copy/csv/test_ignore_errors.test b/test/sql/copy/csv/test_ignore_errors.test index 4066f039304e..046b07995e8b 100644 --- a/test/sql/copy/csv/test_ignore_errors.test +++ b/test/sql/copy/csv/test_ignore_errors.test @@ -28,10 +28,10 @@ statement ok DELETE FROM integers; statement ok -INSERT INTO integers SELECT * FROM read_csv('test/sql/copy/csv/data/test/error_too_little.csv', columns={'i': 'INTEGER', 'j': 'INTEGER'}, header=1, ignore_errors=1, null_padding=0) +INSERT INTO integers SELECT * FROM read_csv('test/sql/copy/csv/data/test/error_too_little.csv', columns={'i': 'INTEGER', 'j': 'INTEGER'}, ignore_errors=1, null_padding=0) statement error -INSERT INTO integers SELECT * FROM read_csv('test/sql/copy/csv/data/test/error_too_little.csv', columns={'i': 'INTEGER'}, header=1, null_padding=0) +INSERT INTO integers SELECT * FROM read_csv('test/sql/copy/csv/data/test/error_too_little.csv', columns={'i': 'INTEGER'}, null_padding=0) ---- # not enough columns provided @@ -112,3 +112,17 @@ SELECT * FROM nullable_type ---- 1 NULL test null 2 NULL test null + +query IIIIIIIIIIII +FROM read_csv('data/csv/titanic.csv', ignore_errors=1) limit 10 +---- +1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.25 NULL S +2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38.0 1 0 PC 17599 71.2833 C85 C +3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.925 NULL S +4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1 C123 S +5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.05 NULL S +6 0 3 Moran, Mr. James male NULL 0 0 330877 8.4583 NULL Q +7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S +8 0 3 Palsson, Master. Gosta Leonard male 2.0 3 1 349909 21.075 NULL S +9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0 0 2 347742 11.1333 NULL S +10 1 2 Nasser, Mrs. Nicholas (Adele Achem) female 14.0 1 0 237736 30.0708 NULL C \ No newline at end of file diff --git a/test/sql/copy/csv/test_issue3562_assertion.test b/test/sql/copy/csv/test_issue3562_assertion.test index 1c13d02ca750..633503be6302 100644 --- a/test/sql/copy/csv/test_issue3562_assertion.test +++ b/test/sql/copy/csv/test_issue3562_assertion.test @@ -3,7 +3,7 @@ # group: [csv] statement ok -create table test as SELECT * FROM read_csv('test/sql/copy/csv/data/test/issue3562_assertion.csv.gz', header=TRUE, columns={'OBJECTID': 'DECIMAL(18,3)', 'URL': 'TEXT', 'NAME': 'TEXT', 'the_geom':'TEXT', 'LINE': 'TEXT'}); +create table test as SELECT * FROM read_csv('test/sql/copy/csv/data/test/issue3562_assertion.csv.gz', columns={'OBJECTID': 'DECIMAL(18,3)', 'URL': 'TEXT', 'NAME': 'TEXT', 'the_geom':'TEXT', 'LINE': 'TEXT'}); query II select objectid, name from test ORDER BY objectid limit 10 diff --git a/test/sql/copy/csv/test_issue5077.test b/test/sql/copy/csv/test_issue5077.test index baead9f368e5..82974563d8e8 100644 --- a/test/sql/copy/csv/test_issue5077.test +++ b/test/sql/copy/csv/test_issue5077.test @@ -8,7 +8,7 @@ select * from 'data/csv/issue5077_aligned.csv' d e false query III -select * from 'data/csv/issue5077.csv' +select * from read_csv('data/csv/issue5077.csv', header=0) ---- c d e diff --git a/test/sql/copy/csv/test_limit_spinlock.test b/test/sql/copy/csv/test_limit_spinlock.test new file mode 100644 index 000000000000..be990b39dbfc --- /dev/null +++ b/test/sql/copy/csv/test_limit_spinlock.test @@ -0,0 +1,18 @@ +# name: test/sql/copy/csv/test_limit_spinlock.test +# description: Test that we can read file that was causing spinlock issues when used with the limit operator +# group: [csv] + +require httpfs + +statement ok +PRAGMA enable_verification + +# This may or may not work, depending if we encounter a value that breaks the quote on the thread set +# But this will finish +statement maybe +from read_csv('https://github.com/duckdb/duckdb-data/releases/download/v1.0/title.principals.tsv', quote='"') limit 10 +---- + +# This works, because we use \0 as a quote +statement ok +from 'https://github.com/duckdb/duckdb-data/releases/download/v1.0/title.principals.tsv' limit 10 \ No newline at end of file diff --git a/test/sql/copy/csv/test_mixed_lines.test b/test/sql/copy/csv/test_mixed_lines.test new file mode 100644 index 000000000000..85959c9fe11c --- /dev/null +++ b/test/sql/copy/csv/test_mixed_lines.test @@ -0,0 +1,24 @@ +# name: test/sql/copy/csv/test_mixed_lines.test +# description: Test mixed lines +# group: [csv] + +require httpfs + +query I +select count(*) from 'https://github.com/duckdb/duckdb-data/releases/download/v1.0/202204-clean-sane-header.csv' +---- +50000 + +query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII +select * from 'https://github.com/duckdb/duckdb-data/releases/download/v1.0/202204-clean-sane-header.csv' order by all limit 10 +---- +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaa-aaaaaaaaaaaaaaaaa a1a-11111 a1111111-1aaa-11a1-a1a1-aa1a111111a1 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-aa-aaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaa NULL NULL NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL aaaaaaa aaaaaaa 11a aa-aa-aaa-aaaaaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaa-aaaaaaaaaaaaaaaaa a1a-11111 a1111111-1aaa-11a1-a1a1-aa1a111111a1 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-aaaa-aaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL aaaaaaa aaaaaaa 11a aa-aaaa-aaaaaaaa-aaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaa-aaaaaaaaaaaaaaaaa a1a-11111 a11a11a1-111a-11a1-1a1a-1aa11a111111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a11111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11 aaaaaaaaaaaaaaaaa11 NULL NULL NULL NULL NULL aaaaaaa aaaaaaa 11a aaaaaaaaaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 111aaaa1-111a-1111-a1aa-111aa11aa111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-aaaa-aaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL aaaaaaa aaaaaaa 11a aa-aaaa-aaaaaaaa-aaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 111aaaa1-111a-1111-a1aa-111aa11aa111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-aaaa-aaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL aaaaaaa aaaaaaa 11a aa-aaaa-aaaaaaaa-aaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 111aaaa1-111a-1111-a1aa-111aa11aa111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11 aaaaaaaaaaaaaaaaa11 NULL NULL NULL NULL NULL aaaaaaa aaaaaaa 11a aaaaaaaaaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 111aaaa1-111a-1111-a1aa-111aa11aa111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111111111 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11 aaaaaaaaaaaaaaaaa11 NULL NULL NULL NULL NULL aaaaaaa aaaaaaa 11a aaaaaaaaaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 111aaaa1-111a-1111-a1aa-111aa11aa111 aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a1111 1a111111111111111 1a111111111a-11 1a11111 aaa aaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-aaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL aaaaaaa aaaaaaa 11a aa-aaa-aaa NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 aa1a111a-a1a1-1aa1-a1aa-1a1aa1aa11aa aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a111111 1a111111111111111 1a111111111111111 1a1111 aaa aaaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-a1a-aaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1111111aaaa11a1aa1aaaa aa1111111aaaa11a1aa1aaaa NULL NULL NULL aaa-aaaaaaaa-aaaaaaaaaaaaaa-aaaaa-aaaaaa NULL aaaaaaa aaaaaaa 1aaaaaaaaa aa-a1a-aaa1 NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaaaa +11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 1111-11-11 11111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaa111111aaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa 1111a1aa-1111-1111-aa11-11aa11a11111 aaaaaaaaaaaaaaaaaaaaaaaaaa 1111-11-11 aaaaaa-aaaaaaaaaaaaaaaa a1a-11111 aa1a111a-a1a1-1aa1-a1aa-1a1aa1aa11aa aaaaaaa aaaaaaa aaaaa NULL aaaaaaaaaaaaaaa 1a111111 1a111111111111111 1a111111111111111 1a1111 aaa aaaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa1111a1aa-1111-1111-aa11-11aa11a11111aaaaaaaaaaaaaaaaaa-a1a-aaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1111111aaaa11a1aa1aaaa aa1111111aaaa11a1aa1aaaa NULL NULL NULL aaa-aaaaaaaa-aaaaaaaaaaaaaa-aaaaa-aaaaaa NULL aaaaaaa aaaaaaa 1aaaaaaaaa aa-a1a-aaa1 NULL NULL NULL NULL aa-aaa-1111a aaaa NULL NULL NULL aaaaa aaaaaaaaaa aaaaa 1a1 aaaaaaaa NULL NULL NULL aaaaaaaaaaaa diff --git a/test/sql/copy/csv/test_nfc_suite.test b/test/sql/copy/csv/test_nfc_suite.test index b7b29eaef03f..2483d591cc2e 100644 --- a/test/sql/copy/csv/test_nfc_suite.test +++ b/test/sql/copy/csv/test_nfc_suite.test @@ -26,3 +26,28 @@ SELECT COUNT(*) FROM nfcstrings WHERE nfc COLLATE NFC=nfd ---- 18819 +statement ok +DROP TABLE nfcstrings + +statement ok +CREATE TABLE nfcstrings (source STRING, nfc STRING, nfd STRING); + +query I +COPY nfcstrings FROM 'test/sql/copy/csv/data/real/nfc_normalization_rn.csv' DELIMITER '|'; +---- +18819 + +query I +SELECT COUNT(*) FROM nfcstrings +---- +18819 + +query I +SELECT COUNT(*) FROM nfcstrings WHERE source COLLATE NFC=nfc +---- +18819 + +query I +SELECT COUNT(*) FROM nfcstrings WHERE nfc COLLATE NFC=nfd +---- +18819 \ No newline at end of file diff --git a/test/sql/copy/csv/test_null_padding_projection.test b/test/sql/copy/csv/test_null_padding_projection.test index ba1ef6313983..7df1f5d99dde 100644 --- a/test/sql/copy/csv/test_null_padding_projection.test +++ b/test/sql/copy/csv/test_null_padding_projection.test @@ -138,4 +138,25 @@ select * from read_csv('data/csv/nullpadding.csv',null_padding=true, columns={ 10 100 1000 10000 NULL NULL NULL 10 NULL NULL NULL NULL NULL NULL 10 100 NULL NULL NULL NULL NULL -10 100 1000 10000 100000 NULL NULL \ No newline at end of file +10 100 1000 10000 100000 NULL NULL + + +# Test Null Padding + Projection + Multiple files running Single Threaded +statement ok +set threads =1 + +statement ok +create view T as +SELECT SETTLEMENTDATE, DUID, I, filename, UNIT, CAST(LOWER6SEC AS DOUBLE) AS LOWER6SEC, CAST(LOWER6SECFLAGS AS DOUBLE) AS LOWER6SECFLAGS, CAST(LOWER60SECFLAGS AS DOUBLE) AS LOWER60SECFLAGS, CAST(RAISE5MINACTUALAVAILABILITY AS DOUBLE) AS RAISE5MINACTUALAVAILABILITY, CAST(INTERVENTION AS DOUBLE) AS INTERVENTION, CAST(LOWER5MINFLAGS AS DOUBLE) AS LOWER5MINFLAGS, CAST(RAISEREGAVAILABILITY AS DOUBLE) AS RAISEREGAVAILABILITY, CAST(LOWERREGACTUALAVAILABILITY AS DOUBLE) AS LOWERREGACTUALAVAILABILITY, CAST(VIOLATION60SECDEGREE AS DOUBLE) AS VIOLATION60SECDEGREE, CAST(LOWER60SEC AS DOUBLE) AS LOWER60SEC, CAST(MARGINAL5MINVALUE AS DOUBLE) AS MARGINAL5MINVALUE, CAST(RAISE60SEC AS DOUBLE) AS RAISE60SEC, CAST(RAMPUPRATE AS DOUBLE) AS RAMPUPRATE, CAST(TOTALCLEARED AS DOUBLE) AS TOTALCLEARED, CAST(VIOLATION5MINDEGREE AS DOUBLE) AS VIOLATION5MINDEGREE, CAST(LOWER6SECACTUALAVAILABILITY AS DOUBLE) AS LOWER6SECACTUALAVAILABILITY, CAST(AGCSTATUS AS DOUBLE) AS AGCSTATUS, CAST(RAISE60SECFLAGS AS DOUBLE) AS RAISE60SECFLAGS, CAST("VERSION" AS DOUBLE) AS "VERSION", CAST(RAISE5MINFLAGS AS DOUBLE) AS RAISE5MINFLAGS, CAST(LOWER60SECACTUALAVAILABILITY AS DOUBLE) AS LOWER60SECACTUALAVAILABILITY, CAST(RAMPDOWNRATE AS DOUBLE) AS RAMPDOWNRATE, CAST(RAISE6SECFLAGS AS DOUBLE) AS RAISE6SECFLAGS, CAST(RAISE60SECACTUALAVAILABILITY AS DOUBLE) AS RAISE60SECACTUALAVAILABILITY, CAST(VIOLATIONDEGREE AS DOUBLE) AS VIOLATIONDEGREE, CAST(RAISE5MIN AS DOUBLE) AS RAISE5MIN, CAST(MARGINALVALUE AS DOUBLE) AS MARGINALVALUE, CAST(LOWERREGFLAGS AS DOUBLE) AS LOWERREGFLAGS, CAST(RAISEREG AS DOUBLE) AS RAISEREG, CAST(LOWERREGENABLEMENTMIN AS DOUBLE) AS LOWERREGENABLEMENTMIN, CAST(LOWERREGENABLEMENTMAX AS DOUBLE) AS LOWERREGENABLEMENTMAX, CAST(DISPATCHMODE AS DOUBLE) AS DISPATCHMODE, CAST(VIOLATION6SECDEGREE AS DOUBLE) AS VIOLATION6SECDEGREE, CAST(LOWERREG AS DOUBLE) AS LOWERREG, CAST(LOWERREGAVAILABILITY AS DOUBLE) AS LOWERREGAVAILABILITY, CAST(RAISEREGACTUALAVAILABILITY AS DOUBLE) AS RAISEREGACTUALAVAILABILITY, CAST(RAISEREGFLAGS AS DOUBLE) AS RAISEREGFLAGS, CAST(MARGINAL60SECVALUE AS DOUBLE) AS MARGINAL60SECVALUE, CAST(LOWER5MINACTUALAVAILABILITY AS DOUBLE) AS LOWER5MINACTUALAVAILABILITY, CAST(RAISEREGENABLEMENTMAX AS DOUBLE) AS RAISEREGENABLEMENTMAX, CAST(INITIALMW AS DOUBLE) AS INITIALMW, CAST(AVAILABILITY AS DOUBLE) AS AVAILABILITY, CAST(RUNNO AS DOUBLE) AS RUNNO, CAST(RAISE6SECACTUALAVAILABILITY AS DOUBLE) AS RAISE6SECACTUALAVAILABILITY, CAST(MARGINAL6SECVALUE AS DOUBLE) AS MARGINAL6SECVALUE, CAST(RAISE6SEC AS DOUBLE) AS RAISE6SEC, CAST(XX AS DOUBLE) AS XX, CAST(RAISEREGENABLEMENTMIN AS DOUBLE) AS RAISEREGENABLEMENTMIN, CAST(LOWER5MIN AS DOUBLE) AS LOWER5MIN FROM (SELECT * +FROM read_csv(main.list_value('data/csv/public_daily_sample.csv','data/csv/public_daily_sample.csv','data/csv/public_daily_sample.csv') +, ("Skip" = 1), ("header" = 0), (all_varchar = 1), ("columns" = main.struct_pack(I := 'VARCHAR', UNIT := 'VARCHAR', XX := 'VARCHAR', "VERSION" := 'VARCHAR', SETTLEMENTDATE := 'VARCHAR', RUNNO := 'VARCHAR', DUID := 'VARCHAR', INTERVENTION := 'VARCHAR', DISPATCHMODE := 'VARCHAR', AGCSTATUS := 'VARCHAR', INITIALMW := 'VARCHAR', TOTALCLEARED := 'VARCHAR', RAMPDOWNRATE := 'VARCHAR', RAMPUPRATE := 'VARCHAR', LOWER5MIN := 'VARCHAR', LOWER60SEC := 'VARCHAR', LOWER6SEC := 'VARCHAR', RAISE5MIN := 'VARCHAR', RAISE60SEC := 'VARCHAR', RAISE6SEC := 'VARCHAR', MARGINAL5MINVALUE := 'VARCHAR', MARGINAL60SECVALUE := 'VARCHAR', MARGINAL6SECVALUE := 'VARCHAR', MARGINALVALUE := 'VARCHAR', VIOLATION5MINDEGREE := 'VARCHAR', VIOLATION60SECDEGREE := 'VARCHAR', VIOLATION6SECDEGREE := 'VARCHAR', VIOLATIONDEGREE := 'VARCHAR', LOWERREG := 'VARCHAR', RAISEREG := 'VARCHAR', AVAILABILITY := 'VARCHAR', RAISE6SECFLAGS := 'VARCHAR', RAISE60SECFLAGS := 'VARCHAR', RAISE5MINFLAGS := 'VARCHAR', RAISEREGFLAGS := 'VARCHAR', LOWER6SECFLAGS := 'VARCHAR', LOWER60SECFLAGS := 'VARCHAR', LOWER5MINFLAGS := 'VARCHAR', LOWERREGFLAGS := 'VARCHAR', RAISEREGAVAILABILITY := 'VARCHAR', RAISEREGENABLEMENTMAX := 'VARCHAR', RAISEREGENABLEMENTMIN := 'VARCHAR', LOWERREGAVAILABILITY := 'VARCHAR', LOWERREGENABLEMENTMAX := 'VARCHAR', LOWERREGENABLEMENTMIN := 'VARCHAR', RAISE6SECACTUALAVAILABILITY := 'VARCHAR', RAISE60SECACTUALAVAILABILITY := 'VARCHAR', RAISE5MINACTUALAVAILABILITY := 'VARCHAR', RAISEREGACTUALAVAILABILITY := 'VARCHAR', LOWER6SECACTUALAVAILABILITY := 'VARCHAR', LOWER60SECACTUALAVAILABILITY := 'VARCHAR', LOWER5MINACTUALAVAILABILITY := 'VARCHAR', LOWERREGACTUALAVAILABILITY := 'VARCHAR')), (filename = 1), (null_padding = CAST('t' AS BOOLEAN)), (ignore_errors = 1), (auto_detect = CAST('f' AS BOOLEAN))) WHERE ((I = 'D') AND (UNIT = 'DUNIT'))); + +statement ok +create view T_2 as +SELECT * EXCLUDE (SETTLEMENTDATE, XX, filename, I), CAST(SETTLEMENTDATE AS TIMESTAMP) AS SETTLEMENTDATE, split(filename, '/')[8] AS file, isoyear(CAST(SETTLEMENTDATE AS TIMESTAMP)) AS "YEAR" FROM T + + +query I +select count(*) from T_2 +---- +8349 \ No newline at end of file diff --git a/test/sql/copy/csv/test_skip_bom.test b/test/sql/copy/csv/test_skip_bom.test index 73e65194060c..24560cf85356 100644 --- a/test/sql/copy/csv/test_skip_bom.test +++ b/test/sql/copy/csv/test_skip_bom.test @@ -25,7 +25,6 @@ CREATE TABLE people2 AS SELECT * FROM read_csv_auto('test/sql/copy/csv/data/peop query TT SELECT * FROM people2 ---- -Person Region Anna Andreadi West Chuck Magee East Kelly Williams Central diff --git a/test/sql/copy/csv/test_sniff_csv.test b/test/sql/copy/csv/test_sniff_csv.test index 34a00fcc9e48..ebebabb29e54 100644 --- a/test/sql/copy/csv/test_sniff_csv.test +++ b/test/sql/copy/csv/test_sniff_csv.test @@ -2,6 +2,9 @@ # description: Test sniff_csv function # group: [csv] +# the sniffer sniffs vectors-at-a-time, so different vector sizes can lead to different results +require vector_size 2048 + statement ok PRAGMA enable_verification @@ -34,7 +37,7 @@ Cannot open file "test/sql/copy/csv/data/real/non_ecziste.csv": No such file or query IIIIIIIIIII FROM sniff_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', sample_size=1); ---- -, " " \n 0 0 {'column0': 'BIGINT', 'column1': 'VARCHAR'} NULL NULL sample_size=1 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='"', escape='"', new_line='\n', skip=0, header=false, columns={'column0': 'BIGINT', 'column1': 'VARCHAR'}, sample_size=1); +, \0 \0 \n 0 0 {'column0': 'BIGINT', 'column1': 'VARCHAR'} NULL NULL sample_size=1 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='\0', escape='\0', new_line='\n', skip=0, header=false, columns={'column0': 'BIGINT', 'column1': 'VARCHAR'}, sample_size=1); statement error FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='"', escape='"', new_line='\n', skip=0, header=0, columns={'column0': 'BIGINT', 'column1': 'VARCHAR'}, sample_size=1); @@ -44,12 +47,12 @@ Conversion Error: CSV Error on Line: 2176 query IIIIIIIIIII FROM sniff_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', sample_size=10000); ---- -, " " \n 0 0 {'column0': 'VARCHAR', 'column1': 'VARCHAR'} NULL NULL sample_size=10000 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='"', escape='"', new_line='\n', skip=0, header=false, columns={'column0': 'VARCHAR', 'column1': 'VARCHAR'}, sample_size=10000); +, \0 \0 \n 0 1 {'1': 'VARCHAR', 'A': 'VARCHAR'} NULL NULL sample_size=10000 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='\0', escape='\0', new_line='\n', skip=0, header=true, columns={'1': 'VARCHAR', 'A': 'VARCHAR'}, sample_size=10000); query IIIIIIIIIII FROM sniff_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', sample_size=-1); ---- -, " " \n 0 false {'column0': 'VARCHAR', 'column1': 'VARCHAR'} NULL NULL sample_size=-1 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='"', escape='"', new_line='\n', skip=0, header=false, columns={'column0': 'VARCHAR', 'column1': 'VARCHAR'}, sample_size=-1); +, \0 \0 \n 0 1 {'1': 'VARCHAR', 'A': 'VARCHAR'} NULL NULL sample_size=-1 FROM read_csv('test/sql/copy/csv/data/error/mismatch/big_bad.csv', auto_detect=false, delim=',', quote='\0', escape='\0', new_line='\n', skip=0, header=true, columns={'1': 'VARCHAR', 'A': 'VARCHAR'}, sample_size=-1); # Test with defined time and timestamp query IIIIIIIIIII diff --git a/test/sql/copy/csv/test_union_by_name.test b/test/sql/copy/csv/test_union_by_name.test index a59ccc21129c..a919ea028680 100644 --- a/test/sql/copy/csv/test_union_by_name.test +++ b/test/sql/copy/csv/test_union_by_name.test @@ -30,13 +30,13 @@ INSERT INTO ubn3 VALUES (100,101), (102, 103); # Write them to temporary files statement ok -COPY ubn1 TO '__TEST_DIR__/ubn1.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn1 TO '__TEST_DIR__/ubn1.csv' WITH ( DELIMITER ','); statement ok -COPY ubn2 TO '__TEST_DIR__/ubn2.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn2 TO '__TEST_DIR__/ubn2.csv' WITH (DELIMITER ','); statement ok -COPY ubn3 TO '__TEST_DIR__/ubn3.csv' WITH (HEADER 1, DELIMITER ','); +COPY ubn3 TO '__TEST_DIR__/ubn3.csv' WITH (DELIMITER ','); # Read from them (the order matters) diff --git a/test/sql/copy/csv/timestamp_with_tz.test b/test/sql/copy/csv/timestamp_with_tz.test index c5947dcfc8af..9478957d222e 100644 --- a/test/sql/copy/csv/timestamp_with_tz.test +++ b/test/sql/copy/csv/timestamp_with_tz.test @@ -13,6 +13,8 @@ timestamp that is not UTC require icu +require no_extension_autoloading + # we can load this into a timestamptz table statement ok CREATE TABLE tbl_tz(id int, ts timestamptz); diff --git a/test/sql/copy/csv/tpch_csv_sf01.test_slow b/test/sql/copy/csv/tpch_csv_sf01.test_slow index 661cc0ec960f..3f3b9f9bf4c6 100644 --- a/test/sql/copy/csv/tpch_csv_sf01.test_slow +++ b/test/sql/copy/csv/tpch_csv_sf01.test_slow @@ -13,7 +13,7 @@ statement ok COPY ${tpch_tbl}_original TO '__TEST_DIR__/${tpch_tbl}.csv' (DELIMITER '|', HEADER); statement ok -CREATE VIEW ${tpch_tbl} AS FROM read_csv_auto('__TEST_DIR__/${tpch_tbl}.csv', sep='|', header=1); +CREATE VIEW ${tpch_tbl} AS FROM read_csv_auto('__TEST_DIR__/${tpch_tbl}.csv', sep='|'); endloop diff --git a/test/sql/copy/csv/tsv_copy.test b/test/sql/copy/csv/tsv_copy.test index 5af4106f5368..de70b747ccff 100644 --- a/test/sql/copy/csv/tsv_copy.test +++ b/test/sql/copy/csv/tsv_copy.test @@ -9,7 +9,7 @@ statement ok INSERT INTO people VALUES (1, 'Mark'), (2, 'Hannes'); statement ok -COPY people TO '__TEST_DIR__/test.tsv' WITH (HEADER 1, DELIMITER '\t'); +COPY people TO '__TEST_DIR__/test.tsv' WITH (DELIMITER '\t'); query II SELECT * FROM '__TEST_DIR__/test.tsv' @@ -18,7 +18,7 @@ SELECT * FROM '__TEST_DIR__/test.tsv' 2 Hannes query II -SELECT * FROM read_csv('__TEST_DIR__/test.tsv', sep='\t', columns={'id': 'INTEGER', 'name': 'VARCHAR'}, header=1) +SELECT * FROM read_csv('__TEST_DIR__/test.tsv', sep='\t', columns={'id': 'INTEGER', 'name': 'VARCHAR'}) ---- 1 Mark 2 Hannes diff --git a/test/sql/copy/csv/write_header_default.test b/test/sql/copy/csv/write_header_default.test index 728278d36803..8e93578b8651 100644 --- a/test/sql/copy/csv/write_header_default.test +++ b/test/sql/copy/csv/write_header_default.test @@ -23,7 +23,7 @@ a NULL statement ok -COPY t TO '__TEST_DIR__/t_default.tsv' WITH (DELIMITER '\t', HEADER 1); +COPY t TO '__TEST_DIR__/t_default.tsv' WITH (DELIMITER '\t'); query I select * from read_csv_auto('__TEST_DIR__/t_default.tsv', header = 0) diff --git a/test/sql/copy/csv/zstd_crash.test b/test/sql/copy/csv/zstd_crash.test index d0e5afae8eb4..3b8df85480b6 100644 --- a/test/sql/copy/csv/zstd_crash.test +++ b/test/sql/copy/csv/zstd_crash.test @@ -52,4 +52,4 @@ statement ok COPY test_zst TO '__TEST_DIR__/noext.csv' (COMPRESSION ZSTD); statement ok -COPY test_zst FROM '__TEST_DIR__/noext.csv' (COMPRESSION ZSTD, HEADER 1); +COPY test_zst FROM '__TEST_DIR__/noext.csv' (COMPRESSION ZSTD); diff --git a/test/sql/copy/file_size_bytes.test b/test/sql/copy/file_size_bytes.test index 41b8b3319782..0a748a09ce54 100644 --- a/test/sql/copy/file_size_bytes.test +++ b/test/sql/copy/file_size_bytes.test @@ -13,7 +13,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv1' (FORMAT CSV, FILE_SIZE_BYTES 1000); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv1/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv1/*.csv') ---- 10000 @@ -28,7 +28,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv2' (FORMAT CSV, FILE_SIZE_BYTES '1kb'); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv2/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv2/*.csv') ---- 10000 @@ -89,7 +89,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv3' (FORMAT CSV, FILE_SIZE_BYTES '500kb'); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv3/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv3/*.csv') ---- 100000 @@ -104,7 +104,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv4' (FORMAT CSV, FILE_SIZE_BYTES '200kb'); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv4/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv4/*.csv') ---- 100000 @@ -121,7 +121,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv5' (FORMAT CSV, FILE_SIZE_BYTES '700kb', PER_THREAD_OUTPUT TRUE); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv5/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv5/*.csv') ---- 100000 @@ -137,7 +137,7 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv6' (FORMAT CSV, FILE_SIZE_BYTES '190kb', PER_THREAD_OUTPUT TRUE); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv6/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv6/*.csv') ---- 100000 diff --git a/test/sql/copy/file_size_bytes_large.test_slow b/test/sql/copy/file_size_bytes_large.test_slow index b8b406385b2c..616ed474194e 100644 --- a/test/sql/copy/file_size_bytes_large.test_slow +++ b/test/sql/copy/file_size_bytes_large.test_slow @@ -9,12 +9,12 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv42' (FORMAT CSV, FILE_SIZE_BYTES '200kb'); query I -SELECT COUNT(*) FROM read_csv('__TEST_DIR__/file_size_bytes_csv42/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv('__TEST_DIR__/file_size_bytes_csv42/*.csv') ---- 10000000 query II -SELECT AVG(col_a), AVG(col_b) FROM read_csv('__TEST_DIR__/file_size_bytes_csv42/*.csv', header = 1) +SELECT AVG(col_a), AVG(col_b) FROM read_csv('__TEST_DIR__/file_size_bytes_csv42/*.csv') ---- 4999999.5 4999999.5 @@ -27,12 +27,12 @@ statement ok COPY (FROM bigdata) TO '__TEST_DIR__/file_size_bytes_csv43' (FORMAT CSV, FILE_SIZE_BYTES '200kb', PER_THREAD_OUTPUT TRUE); query I -SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv43/*.csv', header = 1) +SELECT COUNT(*) FROM read_csv_auto('__TEST_DIR__/file_size_bytes_csv43/*.csv') ---- 10000000 query II -SELECT AVG(col_a), AVG(col_b) FROM read_csv('__TEST_DIR__/file_size_bytes_csv43/*.csv', header = 1) +SELECT AVG(col_a), AVG(col_b) FROM read_csv('__TEST_DIR__/file_size_bytes_csv43/*.csv') ---- 4999999.5 4999999.5 diff --git a/test/sql/copy/parquet/batched_write/batch_memory_usage.test b/test/sql/copy/parquet/batched_write/batch_memory_usage.test new file mode 100644 index 000000000000..76ffbc2392c7 --- /dev/null +++ b/test/sql/copy/parquet/batched_write/batch_memory_usage.test @@ -0,0 +1,17 @@ +# name: test/sql/copy/parquet/batched_write/batch_memory_usage.test +# description: Batched Parquet write memory usage +# group: [batched_write] + +require parquet + +statement ok +SELECT setseed(0.72) + +statement ok +COPY (SELECT uuid()::VARCHAR as varchar, uuid() AS uuid FROM range(10000000) t(i)) TO '__TEST_DIR__/random_uuids.parquet' + +statement ok +SET memory_limit='500MB' + +statement ok +COPY '__TEST_DIR__/random_uuids.parquet' TO '__TEST_DIR__/random_uuids_copy.parquet'; diff --git a/test/sql/copy/parquet/batched_write/batch_memory_usage.test_slow b/test/sql/copy/parquet/batched_write/batch_memory_usage.test_slow new file mode 100644 index 000000000000..82a1b246e615 --- /dev/null +++ b/test/sql/copy/parquet/batched_write/batch_memory_usage.test_slow @@ -0,0 +1,29 @@ +# name: test/sql/copy/parquet/batched_write/batch_memory_usage.test_slow +# description: Batched Parquet write memory usage +# group: [batched_write] + +require parquet + +statement ok +SELECT setseed(0.72) + +statement ok +COPY (SELECT uuid()::VARCHAR as varchar, uuid() AS uuid FROM range(10000000) t(i)) TO '__TEST_DIR__/random_uuids.parquet' + +# copy from one parquet file to another in a memory constrained environment +statement ok +SET memory_limit='650MB' + +statement ok +COPY '__TEST_DIR__/random_uuids.parquet' TO '__TEST_DIR__/random_uuids_copy.parquet'; + +# ensure the parquet files hold the same content +statement ok +SET memory_limit='2GB'; + +# ensure the parquet files hold the same content in the same order +query III +SELECT *, row_number() OVER () as rownum FROM '__TEST_DIR__/random_uuids.parquet' +EXCEPT +SELECT *, row_number() OVER () as rownum FROM '__TEST_DIR__/random_uuids_copy.parquet'; +---- \ No newline at end of file diff --git a/test/sql/copy/parquet/batched_write/batch_memory_usage_mixed_batches.test_slow b/test/sql/copy/parquet/batched_write/batch_memory_usage_mixed_batches.test_slow new file mode 100644 index 000000000000..5bdc7124e75e --- /dev/null +++ b/test/sql/copy/parquet/batched_write/batch_memory_usage_mixed_batches.test_slow @@ -0,0 +1,40 @@ +# name: test/sql/copy/parquet/batched_write/batch_memory_usage_mixed_batches.test_slow +# description: Batched Parquet write memory usage with mixed batches +# group: [batched_write] + +require parquet + +statement ok +COPY (FROM range(100000) tbl(i)) TO '__TEST_DIR__/mem_usage_mix_batches_small.parquet' (ROW_GROUP_SIZE 5000) + +statement ok +COPY (FROM range(100000, 400000) tbl(i)) TO '__TEST_DIR__/mem_usage_mix_batches_large.parquet' (ROW_GROUP_SIZE 200000) + +statement ok +COPY (FROM range(400000, 700000) tbl(i)) TO '__TEST_DIR__/mem_usage_mix_batches_odd.parquet' (ROW_GROUP_SIZE 999) + +statement ok +COPY (FROM range(700000, 1000000) tbl(i)) TO '__TEST_DIR__/mem_usage_mix_batches_odd_again.parquet' (ROW_GROUP_SIZE 99979) + +statement ok +CREATE VIEW v1 AS SELECT * FROM parquet_scan([ + '__TEST_DIR__/mem_usage_mix_batches_small.parquet', + '__TEST_DIR__/mem_usage_mix_batches_large.parquet', + '__TEST_DIR__/mem_usage_mix_batches_odd.parquet', + '__TEST_DIR__/mem_usage_mix_batches_odd_again.parquet']) + +statement ok +SET memory_limit='500MB' + +statement ok +COPY v1 TO '__TEST_DIR__/mem_usage_mix_result.parquet' + +# ensure the parquet files hold the same content in the same order +statement ok +SET memory_limit='2GB'; + +query II +SELECT *, row_number() OVER () as rownum FROM v1 +EXCEPT +SELECT *, row_number() OVER () as rownum FROM '__TEST_DIR__/mem_usage_mix_result.parquet'; +---- diff --git a/test/sql/copy/parquet/batched_write/lineitem_memory_usage.test_slow b/test/sql/copy/parquet/batched_write/lineitem_memory_usage.test_slow new file mode 100644 index 000000000000..d70debc853b8 --- /dev/null +++ b/test/sql/copy/parquet/batched_write/lineitem_memory_usage.test_slow @@ -0,0 +1,34 @@ +# name: test/sql/copy/parquet/batched_write/lineitem_memory_usage.test_slow +# description: Batched lineitem write memory usage +# group: [batched_write] + +require parquet + +require tpch + +load __TEST_DIR__/lineitem_memory_test.db + +statement ok +CALL dbgen(sf=1) + +statement ok +COPY lineitem TO '__TEST_DIR__/lineitem_memory_usage.parquet' + +restart + +# copy from one parquet file to another in a memory constrained environment +statement ok +SET memory_limit='500MB' + +statement ok +COPY '__TEST_DIR__/lineitem_memory_usage.parquet' TO '__TEST_DIR__/lineitem_memory_usage_copy.parquet'; + +# ensure the parquet files hold the same content in the same order +statement ok +SET memory_limit='2GB'; + +query IIIIIIIIIIIIIIIII +SELECT *, row_number() OVER () as rownum FROM '__TEST_DIR__/lineitem_memory_usage.parquet' +EXCEPT +SELECT *, row_number() OVER () as rownum FROM '__TEST_DIR__/lineitem_memory_usage_copy.parquet'; +---- diff --git a/test/sql/copy/parquet/batched_write/varying_source_target_row_groups.test_slow b/test/sql/copy/parquet/batched_write/varying_source_target_row_groups.test_slow index 098af1c26b75..cf34183d2bc3 100644 --- a/test/sql/copy/parquet/batched_write/varying_source_target_row_groups.test_slow +++ b/test/sql/copy/parquet/batched_write/varying_source_target_row_groups.test_slow @@ -33,6 +33,19 @@ select abs(median(row_group_num_rows)-${tgt_size})<2048 from parquet_metadata('_ ---- true +# verify the groups are actually written in the same order and contain the same data +query III +SELECT *, row_number() OVER () FROM integers +EXCEPT +SELECT *, row_number() OVER () FROM '__TEST_DIR__/src_size.parquet' +---- + +query III +SELECT *, row_number() OVER () FROM '__TEST_DIR__/src_size.parquet' +EXCEPT +SELECT *, row_number() OVER () FROM '__TEST_DIR__/tgt_size.parquet' +---- + endloop endloop diff --git a/test/sql/copy/parquet/parquet_encryption.test_slow b/test/sql/copy/parquet/parquet_encryption.test similarity index 52% rename from test/sql/copy/parquet/parquet_encryption.test_slow rename to test/sql/copy/parquet/parquet_encryption.test index b3d23dc8f973..67972227bd5d 100644 --- a/test/sql/copy/parquet/parquet_encryption.test_slow +++ b/test/sql/copy/parquet/parquet_encryption.test @@ -1,9 +1,12 @@ -# name: test/sql/copy/parquet/parquet_encryption.test_slow +# name: test/sql/copy/parquet/parquet_encryption.test # description: Test Parquet encryption # group: [parquet] require parquet +# parquet keys are not persisted across restarts +require noforcestorage + statement ok PRAGMA enable_verification @@ -84,91 +87,3 @@ statement error SELECT * FROM read_parquet('__TEST_DIR__/unencrypted.parquet', encryption_config={footer_key: 'key256'}) ---- Invalid Input Error - -# roundtrip all of TPCH -statement ok -PRAGMA disable_verification - -require tpch - -statement ok -CALL dbgen(sf=1) - -statement ok -EXPORT DATABASE '__TEST_DIR__/tpch_encrypted' (FORMAT 'parquet', ENCRYPTION_CONFIG {footer_key: 'key128'}) - -load :memory: - -# re-add key upon loading the DB again -statement ok -PRAGMA add_parquet_key('key128', '0123456789112345') - -statement ok -IMPORT DATABASE '__TEST_DIR__/tpch_encrypted' - -loop i 1 9 - -query I -PRAGMA tpch(${i}) ----- -:extension/tpch/dbgen/answers/sf1/q0${i}.csv - -endloop - -loop i 10 23 - -query I -PRAGMA tpch(${i}) ----- -:extension/tpch/dbgen/answers/sf1/q${i}.csv - -endloop - -# now again without importing the DB, just with views, so we can test projection/filter pushdown -load :memory: - -# re-add key upon loading the DB again -statement ok -PRAGMA add_parquet_key('key128', '0123456789112345') - -statement ok -CREATE VIEW lineitem AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/lineitem.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW orders AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/orders.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW partsupp AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/partsupp.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW part AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/part.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW customer AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/customer.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW supplier AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/supplier.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW nation AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/nation.parquet', encryption_config={footer_key: 'key128'}); - -statement ok -CREATE VIEW region AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/region.parquet', encryption_config={footer_key: 'key128'}); - -loop i 1 9 - -query I -PRAGMA tpch(${i}) ----- -:extension/tpch/dbgen/answers/sf1/q0${i}.csv - -endloop - -loop i 10 23 - -query I -PRAGMA tpch(${i}) ----- -:extension/tpch/dbgen/answers/sf1/q${i}.csv - -endloop diff --git a/test/sql/copy/parquet/parquet_encryption_tpch.test_slow b/test/sql/copy/parquet/parquet_encryption_tpch.test_slow new file mode 100644 index 000000000000..7f2644162f25 --- /dev/null +++ b/test/sql/copy/parquet/parquet_encryption_tpch.test_slow @@ -0,0 +1,92 @@ +# name: test/sql/copy/parquet/parquet_encryption_tpch.test_slow +# description: Test Parquet encryption for TPC-H +# group: [parquet] + +require parquet + +require tpch + +statement ok +CALL dbgen(sf=1) + +statement ok +PRAGMA add_parquet_key('key128', '0123456789112345') + +statement ok +EXPORT DATABASE '__TEST_DIR__/tpch_encrypted' (FORMAT 'parquet', ENCRYPTION_CONFIG {footer_key: 'key128'}) + +load :memory: + +# re-add key upon loading the DB again +statement ok +PRAGMA add_parquet_key('key128', '0123456789112345') + +statement ok +IMPORT DATABASE '__TEST_DIR__/tpch_encrypted' + +loop i 1 9 + +query I +PRAGMA tpch(${i}) +---- +:extension/tpch/dbgen/answers/sf1/q0${i}.csv + +endloop + +loop i 10 23 + +query I +PRAGMA tpch(${i}) +---- +:extension/tpch/dbgen/answers/sf1/q${i}.csv + +endloop + +# now again without importing the DB, just with views, so we can test projection/filter pushdown +load :memory: + +# re-add key upon loading the DB again +statement ok +PRAGMA add_parquet_key('key128', '0123456789112345') + +statement ok +CREATE VIEW lineitem AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/lineitem.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW orders AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/orders.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW partsupp AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/partsupp.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW part AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/part.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW customer AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/customer.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW supplier AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/supplier.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW nation AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/nation.parquet', encryption_config={footer_key: 'key128'}); + +statement ok +CREATE VIEW region AS SELECT * FROM read_parquet('__TEST_DIR__/tpch_encrypted/region.parquet', encryption_config={footer_key: 'key128'}); + +loop i 1 9 + +query I +PRAGMA tpch(${i}) +---- +:extension/tpch/dbgen/answers/sf1/q0${i}.csv + +endloop + +loop i 10 23 + +query I +PRAGMA tpch(${i}) +---- +:extension/tpch/dbgen/answers/sf1/q${i}.csv + +endloop diff --git a/test/sql/copy/parquet/parquet_filename.test b/test/sql/copy/parquet/parquet_filename.test index aa659c6976f3..43dfd080dbbd 100644 --- a/test/sql/copy/parquet/parquet_filename.test +++ b/test/sql/copy/parquet/parquet_filename.test @@ -44,7 +44,7 @@ COPY test_csv TO '__TEST_DIR__/filename_as_column.csv' WITH HEADER; # This currently fails with a binder error statement error -SELECT id, filename FROM read_csv_auto('__TEST_DIR__/filename_as_column.csv', HEADER=1, FILENAME=1); +SELECT id, filename FROM read_csv_auto('__TEST_DIR__/filename_as_column.csv', FILENAME=1); ---- # Parquet filename name conflict diff --git a/test/sql/copy/partitioned/hive_partitioned_write.test b/test/sql/copy/partitioned/hive_partitioned_write.test index cd1714968f9a..ac6104aa74ea 100644 --- a/test/sql/copy/partitioned/hive_partitioned_write.test +++ b/test/sql/copy/partitioned/hive_partitioned_write.test @@ -120,7 +120,7 @@ Not implemented Error: Can't combine PER_THREAD_OUTPUT and PARTITION_BY for COPY # partitioning csv files is also a thing statement ok -COPY test TO '__TEST_DIR__/partitioned7' (FORMAT CSV, HEADER TRUE, PARTITION_BY part_col); +COPY test TO '__TEST_DIR__/partitioned7' (FORMAT CSV, PARTITION_BY part_col); query III SELECT part_col, value_col, value2_col FROM '__TEST_DIR__/partitioned7/part_col=0/*.csv' ORDER BY value2_col; diff --git a/test/sql/copy/per_thread_output.test b/test/sql/copy/per_thread_output.test index d6af57c94d2c..49ad11d6e920 100644 --- a/test/sql/copy/per_thread_output.test +++ b/test/sql/copy/per_thread_output.test @@ -31,10 +31,10 @@ data_3.parquet # CSV also works statement ok -COPY (FROM bigdata) TO '__TEST_DIR__/per_thread_output_csv' (FORMAT CSV, HEADER TRUE, PER_THREAD_OUTPUT TRUE); +COPY (FROM bigdata) TO '__TEST_DIR__/per_thread_output_csv' (FORMAT CSV, PER_THREAD_OUTPUT TRUE); query I -SELECT COUNT(*) FROM read_csv('__TEST_DIR__/per_thread_output_csv/*.csv', columns={'col_a': 'INT', 'col_b' : 'INT'}, header=True); +SELECT COUNT(*) FROM read_csv('__TEST_DIR__/per_thread_output_csv/*.csv', columns={'col_a': 'INT', 'col_b' : 'INT'}); ---- 10000 diff --git a/test/sql/copy/s3/fully_qualified_s3_url.test b/test/sql/copy/s3/fully_qualified_s3_url.test index cc5bb50f9ca5..99b9113b1031 100644 --- a/test/sql/copy/s3/fully_qualified_s3_url.test +++ b/test/sql/copy/s3/fully_qualified_s3_url.test @@ -40,7 +40,7 @@ Unable to connect to URL #test with .csv file statement ok -COPY test TO 's3://test-bucket/s3_query_params/test.csv?s3_access_key_id=${AWS_ACCESS_KEY_ID}&s3_secret_access_key=${AWS_SECRET_ACCESS_KEY}' WITH (HEADER 1); +COPY test TO 's3://test-bucket/s3_query_params/test.csv?s3_access_key_id=${AWS_ACCESS_KEY_ID}&s3_secret_access_key=${AWS_SECRET_ACCESS_KEY}'; query I SELECT i FROM "s3://test-bucket/s3_query_params/test.csv?s3_access_key_id=${AWS_ACCESS_KEY_ID}&s3_secret_access_key=${AWS_SECRET_ACCESS_KEY}" LIMIT 3 @@ -84,7 +84,7 @@ statement ok CREATE TABLE test_2 as SELECT * FROM range(100,110) tbl(j); statement ok -COPY test_2 TO 's3://test-bucket/s3_query_params/test_2.csv?s3_access_key_id=minio_duckdb_user_2&s3_secret_access_key=minio_duckdb_user_2_password' WITH (HEADER 1); +COPY test_2 TO 's3://test-bucket/s3_query_params/test_2.csv?s3_access_key_id=minio_duckdb_user_2&s3_secret_access_key=minio_duckdb_user_2_password' ; query I SELECT j FROM "s3://test-bucket/s3_query_params/test_2.csv?s3_access_key_id=minio_duckdb_user_2&s3_secret_access_key=minio_duckdb_user_2_password" LIMIT 3 diff --git a/test/sql/copy/s3/glob_s3_paging.test_slow b/test/sql/copy/s3/glob_s3_paging.test_slow index 3c4ef0d8b76e..b2c44b7b5d7d 100644 --- a/test/sql/copy/s3/glob_s3_paging.test_slow +++ b/test/sql/copy/s3/glob_s3_paging.test_slow @@ -70,3 +70,25 @@ select sum(column0) from 's3://test-bucket/parquet_glob_s3_paging/paging/t*-${ur endloop endloop + +# test with enable_object_cache = true +statement ok +SET enable_object_cache=true + +foreach urlstyle path vhost + +foreach format parquet + +loop i 0 2 + +# Begin tests +query I +select sum(column0) from 's3://test-bucket/parquet_glob_s3_paging/paging/t*-${urlstyle}-urls.${format}' +---- +1999000 + +endloop + +endloop + +endloop diff --git a/test/sql/copy/s3/hive_partitioned_write_s3.test b/test/sql/copy/s3/hive_partitioned_write_s3.test index b4d586e45ed0..ad059b92c351 100644 --- a/test/sql/copy/s3/hive_partitioned_write_s3.test +++ b/test/sql/copy/s3/hive_partitioned_write_s3.test @@ -157,7 +157,7 @@ Not implemented Error: Can't combine PER_THREAD_OUTPUT and PARTITION_BY for COPY # partitioning csv files is also a thing statement ok -COPY test TO 's3://test-bucket/partitioned7' (FORMAT CSV, HEADER TRUE, PARTITION_BY part_col, OVERWRITE_OR_IGNORE TRUE); +COPY test TO 's3://test-bucket/partitioned7' (FORMAT CSV, PARTITION_BY part_col, OVERWRITE_OR_IGNORE TRUE); query III SELECT part_col, value_col, value2_col FROM 's3://test-bucket/partitioned7/part_col=0/*.csv' ORDER BY value2_col; diff --git a/test/sql/copy/s3/s3_hive_partition.test b/test/sql/copy/s3/s3_hive_partition.test index e7741fdcc4b8..47b3c028b169 100644 --- a/test/sql/copy/s3/s3_hive_partition.test +++ b/test/sql/copy/s3/s3_hive_partition.test @@ -46,8 +46,8 @@ CREATE TABLE test4 as SELECT id FROM range(10000,20000) tbl(id); statement ok COPY test3 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=1/test.parquet'; COPY test4 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=2/test.parquet'; -COPY test3 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=1/test.csv' (HEADER 1); -COPY test4 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=2/test.csv' (HEADER 1); +COPY test3 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=1/test.csv'; +COPY test4 TO 's3://test-bucket/hive-partitioning/medium/part=1/part2=2/test.csv'; query II select min(id), max(id) from parquet_scan('s3://test-bucket/hive-partitioning/medium/*/*/test.parquet', HIVE_PARTITIONING=1) where part2=2 diff --git a/test/sql/copy/s3/s3_presigned_read.test b/test/sql/copy/s3/s3_presigned_read.test index d6032d0ef373..21c344f4261b 100644 --- a/test/sql/copy/s3/s3_presigned_read.test +++ b/test/sql/copy/s3/s3_presigned_read.test @@ -28,7 +28,7 @@ require-env S3_SMALL_PARQUET_PRESIGNED_URL set ignore_error_messages query I -SELECT phone FROM read_csv_auto('${S3_SMALL_CSV_PRESIGNED_URL}', header=1); +SELECT phone FROM read_csv_auto('${S3_SMALL_CSV_PRESIGNED_URL}'); ---- +318855443322 +552244331122 diff --git a/test/sql/copy/s3/upload_small_file.test b/test/sql/copy/s3/upload_small_file.test index 6e71b21061d6..4e35b655bb78 100644 --- a/test/sql/copy/s3/upload_small_file.test +++ b/test/sql/copy/s3/upload_small_file.test @@ -60,7 +60,7 @@ SELECT * FROM "s3://test-bucket/multipart/web_page.parquet" LIMIT 10; # CSV file statement ok -COPY web_page TO 's3://test-bucket/multipart/web_page.csv' WITH (HEADER 1); +COPY web_page TO 's3://test-bucket/multipart/web_page.csv'; query IIIIIIIIIIIIII SELECT * FROM "s3://test-bucket/multipart/web_page.csv" LIMIT 10; diff --git a/test/sql/cte/recursive_hang_2745.test b/test/sql/cte/recursive_hang_2745.test index dd6dc8895596..167cc22fb14c 100644 --- a/test/sql/cte/recursive_hang_2745.test +++ b/test/sql/cte/recursive_hang_2745.test @@ -5,7 +5,7 @@ statement ok PRAGMA enable_verification -query III rowsort +query III with RECURSIVE parents_tab (id , value , parent ) as (values (1, 1, 2), (2, 2, 4), (3, 1, 4), (4, 2, -1), (5, 1, 2), (6, 2, 7), (7, 1, -1) ), @@ -17,7 +17,7 @@ parents as ( union all select id, value+2, parent from parents_tab2 ) -select * from parents; +select * from parents order by id, value, parent; ---- 1 1 2 1 3 2 @@ -34,7 +34,7 @@ select * from parents; 7 1 -1 7 3 -1 -query III rowsort +query III with RECURSIVE parents_tab (id , value , parent ) as (values (1, 1, 2), (2, 2, 4), (3, 1, 4), (4, 2, -1), (5, 1, 2), (6, 2, 7), (7, 1, -1) ), @@ -43,7 +43,7 @@ as (values (1, 1, 2), (2, 2, 4), (3, 1, 4), (4, 2, -1), (5, 1, 2), (6, 2, 7), (7 ) select * from parents_tab union all -select id, value+2, parent from parents_tab2; +select id, value+2, parent from parents_tab2 ORDER BY id, value, parent; ---- 1 1 2 1 3 2 @@ -60,7 +60,7 @@ select id, value+2, parent from parents_tab2; 7 1 -1 7 3 -1 -query III rowsort +query III with parents_tab (id , value , parent ) as (values (1, 1, 2), (2, 2, 4), (3, 1, 4), (4, 2, -1), (5, 1, 2), (6, 2, 7), (7, 1, -1) ), @@ -72,7 +72,7 @@ parents as ( union all select id, value+2, parent from parents_tab2 ) -select * from parents; +select * from parents ORDER BY id, value, parent; ---- 1 1 2 1 3 2 diff --git a/test/sql/filter/test_struct_pushdown.test b/test/sql/filter/test_struct_pushdown.test index 2070c57639e2..2a944f486939 100644 --- a/test/sql/filter/test_struct_pushdown.test +++ b/test/sql/filter/test_struct_pushdown.test @@ -62,7 +62,7 @@ EXPLAIN SELECT * FROM test_structs WHERE i.a = 2 OR i.a IS NULL; physical_plan :.*Filters:.* query I -SELECT * FROM test_structs WHERE i.a = 2 OR i.a IS NULL; +SELECT * FROM test_structs WHERE i.a = 2 OR i.a IS NULL ORDER BY 1 DESC NULLS FIRST; ---- NULL {'a': NULL, 'b': NULL} diff --git a/test/sql/function/generic/test_between_sideeffects.test b/test/sql/function/generic/test_between_sideeffects.test index a9f7bcf71cf6..70745eb4fc2e 100644 --- a/test/sql/function/generic/test_between_sideeffects.test +++ b/test/sql/function/generic/test_between_sideeffects.test @@ -4,6 +4,9 @@ require icu +# FIXME: Make icu properly autoloadable +require no_extension_autoloading + statement ok PRAGMA enable_verification diff --git a/test/sql/function/list/list_grade_up.test b/test/sql/function/list/list_grade_up.test index a140d646db47..32159142abdf 100644 --- a/test/sql/function/list/list_grade_up.test +++ b/test/sql/function/list/list_grade_up.test @@ -301,3 +301,20 @@ CREATE TABLE health (a VARCHAR[]); statement ok INSERT INTO health SELECT list_grade_up(string_to_array(s, ',')) AS a FROM stage; + + +# Make sure it works for arrays too +query I +SELECT array_grade_up(array_value(4,5,3), 'ASC') +---- +[3, 1, 2] + +query I +SELECT array_grade_up(array_value(4,5,3), 'DESC'); +---- +[2, 1, 3] + +query I +SELECT array_grade_up(NULL::INT[3]); +---- +NULL diff --git a/test/sql/function/list/list_reverse.test b/test/sql/function/list/list_reverse.test index 48381a6c525f..0921bbdf590f 100644 --- a/test/sql/function/list/list_reverse.test +++ b/test/sql/function/list/list_reverse.test @@ -147,7 +147,7 @@ tattarrattat statement ok DROP TABLE palindromes; -query I rowsort +query I WITH example AS ( SELECT [1, 2, 3] AS arr UNION ALL SELECT [4, 5] AS arr UNION ALL @@ -155,7 +155,7 @@ WITH example AS ( ) SELECT ${f}(arr) AS reverse_arr -FROM example; +FROM example ORDER BY length(reverse_arr) DESC; ---- [3, 2, 1] [5, 4] @@ -287,5 +287,20 @@ where g = lg ---- 0 +# bug found in PR10587 +query I +WITH example AS ( + SELECT [1, 2, 3] AS arr UNION ALL + SELECT [4, 5] AS arr UNION ALL + SELECT [] AS arr +) +SELECT + ${f}(arr) AS reverse_arr +FROM example ORDER BY length(reverse_arr) DESC; +---- +[3, 2, 1] +[5, 4] +[] + endloop diff --git a/test/sql/function/numeric/test_invalid_math.test b/test/sql/function/numeric/test_invalid_math.test index 817fc026d371..6ebdcd2f5b9b 100644 --- a/test/sql/function/numeric/test_invalid_math.test +++ b/test/sql/function/numeric/test_invalid_math.test @@ -50,7 +50,7 @@ SELECT EXP(1e300), EXP(1e100) ---- inf inf -query RRR -SELECT ACOS(3), ACOS(100), DEGREES(1e308) +query R +SELECT DEGREES(1e308) ---- -nan nan inf +inf \ No newline at end of file diff --git a/test/sql/function/numeric/test_trigo.test b/test/sql/function/numeric/test_trigo.test index 9f7b9df63932..32a777d779e0 100644 --- a/test/sql/function/numeric/test_trigo.test +++ b/test/sql/function/numeric/test_trigo.test @@ -450,3 +450,12 @@ NULL 24 785 +statement error +select asin(-2); +---- +Invalid Input Error: ASIN is undefined outside [-1,1] + +statement error +select acos(-2); +---- +Invalid Input Error: ACOS is undefined outside [-1,1] diff --git a/test/sql/function/string/like_unicode.test b/test/sql/function/string/like_unicode.test new file mode 100644 index 000000000000..9e6cea492613 --- /dev/null +++ b/test/sql/function/string/like_unicode.test @@ -0,0 +1,52 @@ +# name: test/sql/function/string/like_unicode.test +# description: Test _ and like unicode characters +# group: [string] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE t0 (c0 VARCHAR); + +statement ok +INSERT INTO t0 VALUES ('票'),('t'),('%'),('丑'),('多'), ('🦆'); + +query I +SELECT count(*) FROM t0 WHERE t0.c0 LIKE '_'; +---- +6 + +query I +SELECT count(*) FROM t0 WHERE t0.c0 ILIKE '_'; +---- +6 + +query I +SELECT '🦆a🦆' LIKE '_a_' +---- +true + +query I +SELECT '🦆a🦆' ILIKE '_A_' +---- +true + +query I +SELECT 'BaB' ILIKE '_A_' +---- +true + +query I +SELECT '🦆🦆' ILIKE '_' +---- +false + +query I +SELECT '🦆🦆' ILIKE '__' +---- +true + +query I +SELECT '🦆🦆' ILIKE '___' +---- +false diff --git a/test/sql/function/string/regexp_split_to_table.test b/test/sql/function/string/regexp_split_to_table.test new file mode 100644 index 000000000000..56c2ed88c6bb --- /dev/null +++ b/test/sql/function/string/regexp_split_to_table.test @@ -0,0 +1,30 @@ +# name: test/sql/function/string/regexp_split_to_table.test +# description: regexp_split_to_table test +# group: [string] + +statement ok +PRAGMA enable_verification + +# non-regex split +query T +SELECT regexp_split_to_table('a b c', ' ') +---- +a +b +c + +# regex-based split +query T +SELECT regexp_split_to_table('axbyc', '[x|y]') +---- +a +b +c + +# regex-based split with an unaffected column +query II +SELECT regexp_split_to_table('axbyc', '[x|y]'), 42 +---- +a 42 +b 42 +c 42 diff --git a/test/sql/function/string/test_string_array_slice.test b/test/sql/function/string/test_string_array_slice.test index 13e7b5b18e55..a2aa458c0967 100644 --- a/test/sql/function/string/test_string_array_slice.test +++ b/test/sql/function/string/test_string_array_slice.test @@ -230,3 +230,21 @@ SELECT array_slice(s, (-2147483646-1), -2147483647) FROM strings (empty) (empty) NULL + +# With constant null +query I +select * from (SELECT list_slice(NULL, 1, 3, 2)); +---- +NULL + +# With constant null +query I +select s[1:2] from (SELECT NULL) as t(s); +---- +NULL + +# Also for arrays +query I +select * from (SELECT list_slice(NULL::INT[3], 1, 3, 2)); +---- +NULL \ No newline at end of file diff --git a/test/sql/function/timestamp/current_time.test b/test/sql/function/timestamp/current_time.test index de4e0da65b6b..a5fb906bb76a 100644 --- a/test/sql/function/timestamp/current_time.test +++ b/test/sql/function/timestamp/current_time.test @@ -42,3 +42,9 @@ SELECT typeof(${func}()); TIMESTAMP WITH TIME ZONE endloop + +statement ok +SELECT CURRENT_TIME AS TIME + +statement ok +SELECT CURRENT_TIME + interval (1) second AS TIME diff --git a/test/sql/function/timestamp/test_date_part.test b/test/sql/function/timestamp/test_date_part.test index 4198cf26338b..178f570ea234 100644 --- a/test/sql/function/timestamp/test_date_part.test +++ b/test/sql/function/timestamp/test_date_part.test @@ -755,6 +755,16 @@ NULL NULL 2022-01-01 00:00:41+00 1640995241000 infinity NULL +statement error +select epoch_ms(9223372036854775807) +---- +Conversion Error: Could not convert Timestamp(MS) to Timestamp(US) + +statement error +select epoch_ms(-9223372036854775808) +---- +Conversion Error: Could not convert Timestamp(MS) to Timestamp(US) + query II SELECT ts, epoch_ns(ts) FROM timestamps ORDER BY ALL; ---- diff --git a/test/sql/function/timetz/test_icu_cast.test b/test/sql/function/timetz/test_icu_cast.test new file mode 100644 index 000000000000..7b0602b08599 --- /dev/null +++ b/test/sql/function/timetz/test_icu_cast.test @@ -0,0 +1,21 @@ +# name: test/sql/function/timetz/test_icu_cast.test +# description: Test default TIMETZ offsets with ICU loaded. +# group: [timetz] + +require icu + +statement ok +SET CALENDAR='gregorian'; + +statement ok +SET TIMEZONE='America/Phoenix'; + +query I +SELECT '01:00:00'::TIMETZ AS ttz +---- +01:00:00-07 + +query I +SELECT '01:00:00+02'::TIMETZ AS ttz +---- +01:00:00+02 diff --git a/test/sql/index/art/storage/test_art_auto_checkpoint.test b/test/sql/index/art/storage/test_art_auto_checkpoint.test index 9f1791cd3db3..98f9c8ec9b4c 100644 --- a/test/sql/index/art/storage/test_art_auto_checkpoint.test +++ b/test/sql/index/art/storage/test_art_auto_checkpoint.test @@ -6,6 +6,9 @@ load __TEST_DIR__/idx_checkpoint_create.db +# this test does not work with vsize = 2 because a low vector size changes the WAL threshold +require vector_size 2048 + statement ok PRAGMA enable_verification; diff --git a/test/sql/index/art/storage/test_art_duckdb_versions.test b/test/sql/index/art/storage/test_art_duckdb_versions.test index e21c39ae33dd..40e5195b4394 100644 --- a/test/sql/index/art/storage/test_art_duckdb_versions.test +++ b/test/sql/index/art/storage/test_art_duckdb_versions.test @@ -8,6 +8,8 @@ require 64bit # cannot read a database with a different block size require block_size 262144 +require vector_size 2048 + # SQL to create index_0-9-1.db # CREATE TABLE pk_tbl (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE); diff --git a/test/sql/inet/test_inet_functions.test b/test/sql/inet/test_inet_functions.test index 10e0931900c7..8aa5b4789975 100644 --- a/test/sql/inet/test_inet_functions.test +++ b/test/sql/inet/test_inet_functions.test @@ -25,12 +25,22 @@ SELECT host(a) from (values ('127.0.0.1/17')) t(a); ---- No function matches +query I +SELECT family('127.0.0.1/17'); +---- +4 + # subtract query I SELECT INET '127.0.0.255' - 32; ---- 127.0.0.223 +query I +SELECT INET '127.0.0.255' + 0; +---- +127.0.0.255 + query I SELECT INET '127.0.0.31' - 32; ---- @@ -41,7 +51,12 @@ SELECT INET '127.0.0.31' - -32; ---- 127.0.0.63 -# underflow statement error SELECT INET '0.0.0.0' - 32; ---- +Out of Range Error: Overflow in subtraction + +statement error +select INET '255.255.255.255' + 1 +---- +Out of Range Error: Cannot add 1 \ No newline at end of file diff --git a/test/sql/inet/test_inet_storage.test b/test/sql/inet/test_inet_storage.test index 2a59c90e2f2e..667943913f4a 100644 --- a/test/sql/inet/test_inet_storage.test +++ b/test/sql/inet/test_inet_storage.test @@ -4,6 +4,9 @@ require inet +# FIXME: Make inet properly autoloadable +require no_extension_autoloading + # load the DB from disk load __TEST_DIR__/store_inet.db diff --git a/test/sql/inet/test_inet_table.test b/test/sql/inet/test_inet_table.test index 11c2fcaaf222..656aee7624b4 100644 --- a/test/sql/inet/test_inet_table.test +++ b/test/sql/inet/test_inet_table.test @@ -11,7 +11,7 @@ statement ok CREATE TABLE tbl(id INTEGER, i INET); statement ok -INSERT INTO tbl VALUES (1, '127.0.0.1'), (2, NULL), (3, '255.255.255.255/31'), (4, '0.0.0.0/0') +INSERT INTO tbl VALUES (1, '127.0.0.1'), (2, NULL), (3, '255.255.255.255/31'), (4, '0.0.0.0/0'), (5, '::1'), (6, NULL), (7, '2266:25::12:0:ad12/96'), (8, '::/0') query I SELECT i FROM tbl ORDER BY id @@ -20,15 +20,23 @@ SELECT i FROM tbl ORDER BY id NULL 255.255.255.255/31 0.0.0.0/0 +::1 +NULL +2266:25::12:0:ad12/96 +::/0 query I SELECT i FROM tbl WHERE id%2=1 ORDER BY id ---- 127.0.0.1 255.255.255.255/31 +::1 +2266:25::12:0:ad12/96 query I SELECT host(i) FROM tbl WHERE id%2=1 ORDER BY id ---- 127.0.0.1 255.255.255.255 +::1 +2266:25::12:0:ad12 diff --git a/test/sql/inet/test_inet_type.test b/test/sql/inet/test_inet_type.test index f4f559e1e625..484126ceba9d 100644 --- a/test/sql/inet/test_inet_type.test +++ b/test/sql/inet/test_inet_type.test @@ -40,31 +40,49 @@ INET statement error select '127'::inet; ---- +^ statement error select '127..1'::inet; ---- +^ statement error SELECT '256.0.0.1'::INET::VARCHAR ---- +^ statement error SELECT '-1.0.0.1'::INET::VARCHAR ---- +^ statement error SELECT '127..0.1'::INET::VARCHAR ---- +^ statement error SELECT '127.0.0.1/33'::INET::VARCHAR ---- +^ statement error SELECT '127.0.0.1/333'::INET::VARCHAR ---- +^ statement error SELECT '127.0.0.1/33333333333333333333'::INET::VARCHAR ---- +^ + +statement error +SELECT '3,786'::INET; +---- +^ + +statement error +SELECT '1.2.3.4#34'::INET +---- +^ diff --git a/test/sql/inet/test_ipv6_inet_functions.test b/test/sql/inet/test_ipv6_inet_functions.test new file mode 100644 index 000000000000..4c93ab9b79e4 --- /dev/null +++ b/test/sql/inet/test_ipv6_inet_functions.test @@ -0,0 +1,65 @@ +# name: test/sql/inet/test_ipv6_inet_functions.test +# description: Test IPv6 inet type +# group: [inet] + +require inet + +statement ok +PRAGMA enable_verification + +# host +query I +SELECT host(INET '::ffff:127.0.0.1/17') +---- +::ffff:127.0.0.1 + +# we support auto-cast from string literals to inet +query I +SELECT host('::ffff:127.0.0.1/17') +---- +::ffff:127.0.0.1 + +# we don't support auto-casting of VARCHAR to INET +statement error +SELECT host(a) from (values ('::ffff:127.0.0.1/17')) t(a); +---- +No function matches + +query I +SELECT family('::ffff:127.0.0.1/17') +---- +6 + +# subtract +query I +SELECT INET '::ffff:127.0.0.255' - 32; +---- +::ffff:127.0.0.223 + +query I +SELECT INET '::ffff:127.0.0.31' - 32; +---- +::ffff:126.255.255.255 + +query I +SELECT INET '::ffff:127.0.0.31' - -32; +---- +::ffff:127.0.0.63 + +# add +query I +SELECT INET '::ffff:127.0.0.31' + 32; +---- +::ffff:127.0.0.63 + +# underflow +statement error +SELECT INET '::' - 32; +---- +Out of Range Error: Overflow in subtraction + +# overflow +statement error +SELECT INET 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - -32; +---- +Out of Range Error: Overflow in addition diff --git a/test/sql/inet/test_ipv6_inet_nested.test b/test/sql/inet/test_ipv6_inet_nested.test new file mode 100644 index 000000000000..007a502685fa --- /dev/null +++ b/test/sql/inet/test_ipv6_inet_nested.test @@ -0,0 +1,34 @@ +# name: test/sql/inet/test_ipv6_inet_nested.test +# description: Test inet IPv6 type with nested functions +# group: [inet] + +require inet + +statement ok +PRAGMA enable_verification + +query III +SELECT {'a': INET '2345:425::5673:23b5/64'}, NULL::STRUCT(a INET), {'a': INET '2266:25::12:0:ad12/96'} +---- +{'a': 2345:425::5673:23b5/64} NULL {'a': 2266:25::12:0:ad12/96} + +query III +SELECT {'a': INET '2345:425::5673:23b5/64'}::STRUCT(a VARCHAR), NULL::STRUCT(a INET)::STRUCT(a VARCHAR), {'a': INET '2266:25::12:0:ad12/96'}::STRUCT(a VARCHAR) +---- +{'a': 2345:425::5673:23b5/64} NULL {'a': 2266:25::12:0:ad12/96} + +query I +SELECT [INET '2345:425::5673:23b5/64', NULL, INET '2266:25::12:0:ad12/96']::VARCHAR[] +---- +[2345:425::5673:23b5/64, NULL, 2266:25::12:0:ad12/96] + +query I +SELECT [INET '2345:425::5673:23b5/64', NULL, '2266:25::12:0:ad12/96'] +---- +[2345:425::5673:23b5/64, NULL, 2266:25::12:0:ad12/96] + +# unsupported cast from int to inet +statement error +SELECT [INET '2345:425::5673:23b5/64', 3, INET '2266:25::12:0:ad12/96']::VARCHAR[] +---- +Unimplemented type for cast \ No newline at end of file diff --git a/test/sql/inet/test_ipv6_inet_operations.test b/test/sql/inet/test_ipv6_inet_operations.test new file mode 100644 index 000000000000..52714bd9d878 --- /dev/null +++ b/test/sql/inet/test_ipv6_inet_operations.test @@ -0,0 +1,79 @@ +# name: test/sql/inet/test_ipv6_inet_operations.test +# description: Test ipv6 inet operations +# group: [inet] + +statement ok +SET default_null_order='nulls_first'; + +require inet + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE tbl(id INTEGER, i INET); + +statement ok +INSERT INTO tbl VALUES (1, '::1'), (2, NULL), (3, 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127'), (4, '::/0'), (5, '::1/128'), (6, '::1/127'); + +# order by +query I +SELECT i FROM tbl ORDER BY i +---- +NULL +::/0 +::1/127 +::1 +::1 +ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127 + +query I +SELECT i FROM tbl ORDER BY i DESC +---- +NULL +ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127 +::1 +::1 +::1/127 +::/0 + +# group by +query II +SELECT i, COUNT(*) FROM tbl GROUP BY i ORDER BY i +---- +NULL 1 +::/0 1 +::1/127 1 +::1 2 +ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127 1 + +# min/max +query II +SELECT MIN(i), MAX(i) FROM tbl +---- +::/0 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127 + +# first +query II +SELECT FIRST(i ORDER BY id), FIRST(i) FILTER (id=4) FROM tbl +---- +::1 ::/0 + +# join +statement ok +CREATE TABLE tbl2(id INTEGER, j INET); + +statement ok +INSERT INTO tbl2 VALUES (3, '::1') + +query III +SELECT id, i, j FROM tbl JOIN tbl2 USING (id) +---- +3 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/127 ::1 + + +query IIII +SELECT tbl.id, tbl2.id, i, j FROM tbl JOIN tbl2 ON (i=j) ORDER BY tbl.id +---- +1 3 ::1 ::1 +5 3 ::1 ::1 \ No newline at end of file diff --git a/test/sql/inet/test_ipv6_inet_storage.test b/test/sql/inet/test_ipv6_inet_storage.test new file mode 100644 index 000000000000..5be1ff21a295 --- /dev/null +++ b/test/sql/inet/test_ipv6_inet_storage.test @@ -0,0 +1,59 @@ +# name: test/sql/inet/test_ipv6_inet_storage.test +# description: Test inet ipv6 table storage +# group: [inet] + +require inet + +# load the DB from disk +load __TEST_DIR__/store_ipv6_inet.db + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE tbl(id INTEGER, i INET); + +query IIIIII +DESCRIBE tbl +---- +id INTEGER YES NULL NULL NULL +i INET YES NULL NULL NULL + +statement ok +CREATE VIEW iview AS SELECT INET '::1' + +restart + +#FIXME: INET needs to be explicitly autoloaded on restart +require no_extension_autoloading + +query IIIIII +DESCRIBE tbl +---- +id INTEGER YES NULL NULL NULL +i INET YES NULL NULL NULL + +statement ok +INSERT INTO tbl VALUES (1, '::1'), (2, NULL), (3, '2266:25::12:0:ad12/96'), (4, '::/0') + +restart + +query I +SELECT i FROM tbl ORDER BY id +---- +::1 +NULL +2266:25::12:0:ad12/96 +::/0 + +query I +SELECT i FROM tbl WHERE id%2=1 ORDER BY id +---- +::1 +2266:25::12:0:ad12/96 + + +query I +SELECT * FROM iview +---- +::1 diff --git a/test/sql/inet/test_ipv6_inet_type.test b/test/sql/inet/test_ipv6_inet_type.test new file mode 100644 index 000000000000..c7be0f0722db --- /dev/null +++ b/test/sql/inet/test_ipv6_inet_type.test @@ -0,0 +1,180 @@ +# name: test/sql/inet/test_ipv6_inet_type.test +# description: Test IPv6 inet type +# group: [inet] + +require inet + +statement ok +PRAGMA enable_verification + +query I +SELECT '2001:db8:100:0:c59b:cef3:a0d1:6de4'::INET; +---- +2001:db8:100:0:c59b:cef3:a0d1:6de4 + +# Allow upper case hex values +query I +SELECT '2001:DB8:100:0:C59B:CEF3:A0D1:6DE4'::INET; +---- +2001:db8:100:0:c59b:cef3:a0d1:6de4 + +# Allow a single zero quibble to use double colon notation +# even though it isn't the proper canonical form. +query I +SELECT '2001:DB8:100::C59B:CEF3:A0D1:6DE4'::INET; +---- +2001:db8:100:0:c59b:cef3:a0d1:6de4 + +query I +SELECT '2001:db8:100:0:c59b:cef3::/96'::INET; +---- +2001:db8:100:0:c59b:cef3::/96 + +query II +SELECT '2001:db8::cef3:35:363/96'::INET, '2001:db8:0:0:0:cef3:35:363/96'::INET; +---- +2001:db8::cef3:35:363/96 +2001:db8::cef3:35:363/96 + +query II +SELECT '::1/128'::INET, '0:0:0:0:0:0:0:1/128'::INET;; +---- +::1 +::1 + +query II +SELECT '::1'::INET, '0:0:0:0:0:0:0:1'::INET; +---- +::1 +::1 + +query II +SELECT '::'::INET, '0:0:0:0:0:0:0:0'::INET; +---- +:: +:: + +query II +SELECT '2001:db8::'::INET, '2001:db8:0:0:0:0:0:0'::INET; +---- +2001:db8:: +2001:db8:: + +query II +SELECT '::1234:5678:9abc'::INET, '0:0:0:0:0:1234:5678:9abc'::INET; +---- +::1234:5678:9abc +::1234:5678:9abc + +query II +SELECT '2001:db8:1::ab9:C0A8:102'::INET, '2001:db8:1:0:0:ab9:C0A8:102'::INET; +---- +2001:db8:1::ab9:c0a8:102 +2001:db8:1::ab9:c0a8:102 + +# IPv4 notation +query II +SELECT '64:ff9b::192.0.2.128/96'::INET, '64:ff9b::c000:280/96'::INET; +---- +64:ff9b::c000:280/96 +64:ff9b::c000:280/96 + +# IPv4 notation: deprecated (but supported) IPv4 compatible IPv6 Address +query II +SELECT '::192.0.2.128/96'::INET, '::c000:280/96'::INET; +---- +::192.0.2.128/96 +::192.0.2.128/96 + +# IPv4 notation: ipv4-mapped IPv6 addresses +query II +SELECT '::ffff:192.0.2.128/96'::INET, '::ffff:c000:280/96'::INET; +---- +::ffff:192.0.2.128/96 +::ffff:192.0.2.128/96 + +# Parsable IPv4 address, but non-standard thus displayed as a IPv6 +query I +select '2001:db8:100:0:c59b:cef3:160.209.109.228'::INET; +---- +2001:db8:100:0:c59b:cef3:a0d1:6de4 + + +# IPv4 notation: ipv4 translated addresses +query II +SELECT '::ffff:0:192.0.2.128/96'::INET, '::ffff:0:c000:280/96'::INET; +---- +::ffff:0:192.0.2.128/96 +::ffff:0:192.0.2.128/96 + +# quibble with too many digits +statement error +SELECT '2001:db8:100:0:c59b:cef3:a0d189:6de4'::INET; +---- +Expected 4 or fewer hex digits + +# Too many quibbles +statement error +SELECT '2001:db8:100:0:c59b:cef3:a0d1:6de4:d16d'::INET; +---- +Unexpected extra characters + +# Not enough quibbles +statement error +SELECT '2001:db8:100:0:c59b:cef3:a0d1'::INET; +---- +Expected 8 sets of 4 hex digits. + +# Not enough quibbles +statement error +SELECT ':2:'::INET; +---- +Expected 8 sets of 4 hex digits. + +# Too many double colons +statement error +SELECT '2001:db8::cef3::363/96'::INET; +---- +Encountered more than one double-colon + +# Triple colons are not valid +statement error +SELECT ':::1234:5678'::INET +---- +Encountered more than two consecutive colons + +# Invalid subnet mask +statement error +SELECT '2001:db8:100:0:c59b:cef3::/266'::INET; +---- +Expected a number between 0 and 128 + +# Invalid subnet mask +statement error +SELECT '2001:db8:100:0:c59b:cef3::/130'::INET; +---- +Expected a number between 0 and 128 + +# Invalid characters +statement error +SELECT '2001:db8:100:0z:c59b:cef3::/120'::INET; +---- +Unexpected character found + +# Invalid use of the IPv4 format +statement error +SELECT '64:ff9b::192.0.2.128:1:3/96'::INET; +---- +IPv4 format can only be used for the final 2 quibbles. + +# Invalid IPv4 address +statement error +SELECT '::ffff:0:192.0.268.128/96'::INET +---- +Expected a number between 0 and 255 + +# Invalid double colon use +statement error +SELECT '2001:DB8:100:30::C59B:CEF3:A0D1:6DE4'::INET; +---- +Invalid double-colon, too many hex digits. diff --git a/test/sql/join/external/simple_external_join.test_coverage b/test/sql/join/external/simple_external_join.test_coverage index e887635920ac..6a0a5ab3b733 100644 --- a/test/sql/join/external/simple_external_join.test_coverage +++ b/test/sql/join/external/simple_external_join.test_coverage @@ -61,7 +61,7 @@ pragma debug_force_external=false # higher memory limit for this because the strings are so large statement ok -pragma memory_limit='150mb' +pragma memory_limit='200mb' # add some strings that are longer than Storage::BLOCK_SIZE statement ok @@ -73,4 +73,4 @@ insert into t2 select concat(range::VARCHAR, repeat('0', 300000)) i from range(9 query T select count(*) from t1, t2 where i = j ---- -100010 \ No newline at end of file +100010 diff --git a/test/sql/join/inner/perfect_hash_join.test b/test/sql/join/inner/perfect_hash_join.test new file mode 100644 index 000000000000..b1cb1429b92d --- /dev/null +++ b/test/sql/join/inner/perfect_hash_join.test @@ -0,0 +1,43 @@ +# name: test/sql/join/inner/perfect_hash_join.test +# description: Test perfect hash join +# group: [inner] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE t1 (a INTEGER) + +statement ok +CREATE TABLE t2 (a INTEGER) + +statement ok +INSERT INTO t1 SELECT * FROM range(10) + +statement ok +INSERT INTO t2 SELECT * FROM range(100) + +# perfect hash join is used when build range is small +query II +EXPLAIN SELECT * FROM t1 INNER JOIN t2 on t1.a = t2.a + 1 +---- +physical_plan :.*Build Min: 0.*Build Max: 9.* + + +statement ok +CREATE TABLE t3 (a INTEGER) + +statement ok +CREATE TABLE t4 (a INTEGER) + +statement ok +INSERT INTO t3 SELECT * FROM range(0, 10000000, 1000000) + +statement ok +INSERT INTO t4 SELECT * FROM range(0, 10000000, 1000000) + +# perfect hash join is not used when build range is large +query II +EXPLAIN SELECT * FROM t3 INNER JOIN t4 on t3.a = t4.a +---- +physical_plan :.*Build Min: .* diff --git a/test/sql/join/inner/test_using_join.test b/test/sql/join/inner/test_using_join.test index 77e1a83b0c61..37f731af4bd7 100644 --- a/test/sql/join/inner/test_using_join.test +++ b/test/sql/join/inner/test_using_join.test @@ -7,19 +7,19 @@ PRAGMA enable_verification # create tables statement ok -CREATE TABLE t1 (a INTEGER, b INTEGER, c INTEGER) +CREATE TABLE t1 (a INTEGER, b INTEGER, c INTEGER); statement ok -INSERT INTO t1 VALUES (1,2,3) +INSERT INTO t1 VALUES (1,2,3); statement ok -CREATE TABLE t2 (a INTEGER, b INTEGER, c INTEGER) +CREATE TABLE t2 (a INTEGER, b INTEGER, c INTEGER); statement ok -INSERT INTO t2 VALUES (1,2,3), (2,2,4), (1,3,4) +INSERT INTO t2 VALUES (1,2,3), (2,2,4), (1,3,4); query IIIIIII -SELECT * FROM t1 JOIN t2 USING(a) JOIN t2 t2b USING (a) ORDER BY 1, 2, 3, 4, 5, 6, 7 +SELECT * FROM t1 JOIN t2 USING(a) JOIN t2 t2b USING (a) ORDER BY 1, 2, 3, 4, 5, 6, 7; ---- 1 2 3 2 3 2 3 1 2 3 2 3 3 4 diff --git a/test/sql/join/left_outer/test_left_join_on_true.test b/test/sql/join/left_outer/test_left_join_on_true.test index 22392226b330..f8554ddc8458 100644 --- a/test/sql/join/left_outer/test_left_join_on_true.test +++ b/test/sql/join/left_outer/test_left_join_on_true.test @@ -51,7 +51,7 @@ ORDER BY 1, 2 2 NULL 4 NULL -query II rowsort +query II WITH t AS ( SELECT 1 AS r, ARRAY[1, 2, 3] AS a UNION SELECT 2 AS r, ARRAY[4] AS a diff --git a/test/sql/json/scalar/test_json_arrow_expr.test b/test/sql/json/scalar/test_json_arrow_expr.test new file mode 100644 index 000000000000..8c7312e08697 --- /dev/null +++ b/test/sql/json/scalar/test_json_arrow_expr.test @@ -0,0 +1,25 @@ +# name: test/sql/json/scalar/test_json_arrow_expr.test +# description: Test subquery binding of partially bound arrow expressions +# group: [scalar] + +require json + +statement ok +CREATE TABLE testjson AS SELECT JSON '{ "key" : "value" }' AS example; + +query I +SELECT (SELECT (example)->k AS v FROM (SELECT 'key' AS k) keys) +FROM testjson; +---- +"value" + +query I +SELECT (SELECT json_extract(example, k) AS v FROM (SELECT 'key' AS k) keys) +FROM testjson; +---- +"value" + +query I +SELECT (SELECT (JSON '{ "key" : "value" }')->k AS v FROM (SELECT 'key' AS k) keys); +---- +"value" \ No newline at end of file diff --git a/test/sql/json/test_json_serialize_plan.test b/test/sql/json/test_json_serialize_plan.test index 2f29f64c1928..99179bdf5759 100644 --- a/test/sql/json/test_json_serialize_plan.test +++ b/test/sql/json/test_json_serialize_plan.test @@ -12,19 +12,19 @@ CREATE TABLE tbl1 (i int); query I SELECT json_serialize_plan('SELECT 1 + 2 FROM tbl1'); ---- -{"error":false,"plans":[{"type":"LOGICAL_PROJECTION","children":[{"type":"LOGICAL_GET","children":[],"table_index":0,"returned_types":[{"id":"INTEGER","type_info":null}],"names":["i"],"column_ids":[18446744073709551615],"projection_ids":[],"table_filters":{"filters":[]},"name":"seq_scan","arguments":[],"original_arguments":[],"has_serialize":true,"function_data":{"catalog":"memory","schema":"main","table":"tbl1","is_index_scan":false,"is_create_index":false,"result_ids":[]},"projected_input":[]}],"table_index":1,"expressions":[{"expression_class":"BOUND_FUNCTION","type":"BOUND_FUNCTION","alias":"","return_type":{"id":"INTEGER","type_info":null},"children":[{"expression_class":"BOUND_CONSTANT","type":"VALUE_CONSTANT","alias":"","value":{"type":{"id":"INTEGER","type_info":null},"is_null":false,"value":1}},{"expression_class":"BOUND_CONSTANT","type":"VALUE_CONSTANT","alias":"","value":{"type":{"id":"INTEGER","type_info":null},"is_null":false,"value":2}}],"name":"+","arguments":[{"id":"INTEGER","type_info":null},{"id":"INTEGER","type_info":null}],"original_arguments":[],"has_serialize":false,"is_operator":true}]}]} +:.*LOGICAL_PROJECTION.*LOGICAL_GET.* # Example with skip_null and skip_empty query I SELECT json_serialize_plan('SELECT *, 1 + 2 FROM tbl1', skip_null := true, skip_empty := true); ---- -{"error":false,"plans":[{"type":"LOGICAL_PROJECTION","children":[{"type":"LOGICAL_GET","table_index":0,"returned_types":[{"id":"INTEGER"}],"names":["i"],"column_ids":[0],"name":"seq_scan","has_serialize":true,"function_data":{"catalog":"memory","schema":"main","table":"tbl1","is_index_scan":false,"is_create_index":false}}],"table_index":1,"expressions":[{"expression_class":"BOUND_REF","type":"BOUND_REF","alias":"i","return_type":{"id":"INTEGER"},"index":0},{"expression_class":"BOUND_FUNCTION","type":"BOUND_FUNCTION","return_type":{"id":"INTEGER"},"children":[{"expression_class":"BOUND_CONSTANT","type":"VALUE_CONSTANT","value":{"type":{"id":"INTEGER"},"is_null":false,"value":1}},{"expression_class":"BOUND_CONSTANT","type":"VALUE_CONSTANT","value":{"type":{"id":"INTEGER"},"is_null":false,"value":2}}],"name":"+","arguments":[{"id":"INTEGER"},{"id":"INTEGER"}],"has_serialize":false,"is_operator":true}]}]} +:.*LOGICAL_PROJECTION.*LOGICAL_GET.* # Example with skip_null and skip_empty and optimize query I SELECT json_serialize_plan('SELECT *, 1 + 2 FROM tbl1', skip_null := true, skip_empty := true, optimize := true); ---- -{"error":false,"plans":[{"type":"LOGICAL_PROJECTION","children":[{"type":"LOGICAL_GET","table_index":0,"returned_types":[{"id":"INTEGER"}],"names":["i"],"column_ids":[0],"projection_ids":[0],"name":"seq_scan","has_serialize":true,"function_data":{"catalog":"memory","schema":"main","table":"tbl1","is_index_scan":false,"is_create_index":false}}],"table_index":1,"expressions":[{"expression_class":"BOUND_REF","type":"BOUND_REF","alias":"i","return_type":{"id":"INTEGER"},"index":0},{"expression_class":"BOUND_CONSTANT","type":"VALUE_CONSTANT","value":{"type":{"id":"INTEGER"},"is_null":false,"value":3}}]}]} +:.*LOGICAL_PROJECTION.*LOGICAL_GET.* # Example with syntax error query I diff --git a/test/sql/parallelism/interquery/CMakeLists.txt b/test/sql/parallelism/interquery/CMakeLists.txt index de19f56cee85..49a1685bb912 100644 --- a/test/sql/parallelism/interquery/CMakeLists.txt +++ b/test/sql/parallelism/interquery/CMakeLists.txt @@ -8,6 +8,7 @@ add_library_unity( test_concurrent_index.cpp test_concurrentupdate.cpp test_concurrent_sequence.cpp + test_concurrent_prepared.cpp test_default_catalog.cpp) set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES} $ diff --git a/test/sql/parallelism/interquery/test_concurrent_prepared.cpp b/test/sql/parallelism/interquery/test_concurrent_prepared.cpp new file mode 100644 index 000000000000..55b00460728d --- /dev/null +++ b/test/sql/parallelism/interquery/test_concurrent_prepared.cpp @@ -0,0 +1,40 @@ +#include "catch.hpp" +#include "test_helpers.hpp" +#include +#include + +using namespace duckdb; +using namespace std; + +static void SelectTable(Connection con) { + for (idx_t i = 0; i < 1000; i++) { + auto prepare = con.Prepare("select * from foo"); + REQUIRE_NO_FAIL(prepare->Execute()); + } +} + +static void RecreateTable(Connection con) { + for (idx_t i = 0; i < 1000; i++) { + auto prepare = con.Prepare("create or replace table foo as select * from foo"); + REQUIRE_NO_FAIL(prepare->Execute()); + } +} + +TEST_CASE("Test concurrent prepared", "[api][.]") { + duckdb::unique_ptr result; + DuckDB db(nullptr); + Connection con(db); + con.EnableQueryVerification(); + + REQUIRE_NO_FAIL(con.Query("create table foo as select unnest(generate_series(1, 10));")); + + Connection select_conn(db); + Connection recreate_conn(db); + select_conn.EnableQueryVerification(); + + std::thread select_function(SelectTable, std::move(select_conn)); + std::thread recreate_function(RecreateTable, std::move(recreate_conn)); + + select_function.join(); + recreate_function.join(); +} diff --git a/test/sql/parser/columns_aliases.test b/test/sql/parser/columns_aliases.test new file mode 100644 index 000000000000..97a3d87d0a7b --- /dev/null +++ b/test/sql/parser/columns_aliases.test @@ -0,0 +1,110 @@ +# name: test/sql/parser/columns_aliases.test +# description: Test COLUMNS(*) aliases +# group: [parser] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE integers AS SELECT 42 i, 84 j UNION ALL SELECT 13, 14 + +# verify that COLUMNS(*) maintain names +query II +SELECT i, j FROM (SELECT COLUMNS(*)::VARCHAR FROM integers) +---- +42 84 +13 14 + +query IIII +SELECT min_i, min_j, max_i, max_j FROM (SELECT MIN(COLUMNS(*)) AS "min_\0", MAX(COLUMNS(*)) AS "max_\0" FROM integers) +---- +13 14 42 84 + +# regex +statement ok +CREATE TABLE numerics AS SELECT 42 a42, 84 b84, 126 c126, 1000 d + +query III +SELECT min_a, min_b, min_c FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\1" FROM numerics) +---- +42 84 126 + +# out of range - RE2 just swallows it +query III +SELECT min_, "min__1", "min__2" FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\2" FROM numerics) +---- +42 84 126 + +# escape +query III +SELECT "min_\a\", "min_\b\", "min_\c\" FROM (SELECT MIN(COLUMNS('([a-z])\d+')) AS "min_\\\1\\" FROM numerics) +---- +42 84 126 + +# multiple captures +query III +SELECT "a42aa", "b84bb", "c126cc" FROM (SELECT MIN(COLUMNS('([a-z])(\d+)')) AS "\1\2\1\1" FROM numerics) +---- +42 84 126 + +# unterminated escape \ +statement error +SELECT MIN(COLUMNS('([a-z])\d+')) AS "\" FROM numerics +---- +Backslashes must either be escaped or followed by a number + +# invalid backslash code \ +statement error +SELECT MIN(COLUMNS('([a-z])\d+')) AS "\a" FROM numerics +---- +Backslashes must either be escaped or followed by a number + +# no regex is supplied - cannot use \1 +statement error +SELECT MIN(COLUMNS(*)) AS "min_\1" FROM numerics +---- +no regex is supplied + +# generated columns +statement ok +CREATE TABLE tbl ( + price INTEGER, + amount_sold INTEGER, + total_profit AS (price * amount_sold), +); + +statement ok +INSERT INTO tbl VALUES (5,4); + +query III +SELECT price, amount_sold, total_profit FROM (SELECT COLUMNS(*)::VARCHAR FROM tbl) +---- +5 4 20 + +query III +SELECT varchar_price, varchar_amount_sold, varchar_total_profit FROM (SELECT COLUMNS(*)::VARCHAR AS "varchar_\0" FROM tbl) +---- +5 4 20 + +# full outer join using +statement ok +create table a as select 42 as i, 80 as j; + +statement ok +create table b as select 43 as i, 84 as k; + +statement ok +create table c as select 44 as i, 84 as l; + +query III +select i, j, k from (select columns(*)::VARCHAR from a full outer join b using (i)) order by 1; +---- +42 80 NULL +43 NULL 84 + +query IIII +select i, j, k, l from (select columns(*)::VARCHAR from a full outer join b using (i) full outer join c using (i)) order by 1; +---- +42 80 NULL NULL +43 NULL 84 NULL +44 NULL NULL 84 diff --git a/test/sql/parser/indirection.test b/test/sql/parser/indirection.test new file mode 100644 index 000000000000..0f0a15e5959b --- /dev/null +++ b/test/sql/parser/indirection.test @@ -0,0 +1,37 @@ +# name: test/sql/parser/indirection.test +# description: Test indirection +# group: [parser] + +statement ok +PRAGMA enable_verification + +# . after case +query I +select case when true then {'a': 42} end.a; +---- +42 + +# brackets after ARRAY constant +query I +select [42][1]; +---- +42 + +query I +select array[42][1]; +---- +42 + +# brackets after list comprehension +query I +select [a for a in [42, 84]][1]; +---- +42 + +statement ok +prepare v1 as select $1[1]; + +query I +execute v1([42]); +---- +42 diff --git a/test/sql/parser/join_alias.test b/test/sql/parser/join_alias.test new file mode 100644 index 000000000000..fa1a403e37eb --- /dev/null +++ b/test/sql/parser/join_alias.test @@ -0,0 +1,42 @@ +# name: test/sql/parser/join_alias.test +# description: Fix #10685: JOIN clause can be aliased, but alias cannot be referenced +# group: [parser] + +statement ok +PRAGMA enable_verification + +query II rowsort +select t.* +from ( + (values (1), (2)) as t1 (a) + cross join + (values (3), (4)) as t2 (b) +) as t +---- +1 3 +1 4 +2 3 +2 4 + +# column alias +query II rowsort +select x, y +from ( + (values (1), (2)) as t1 (a) + cross join + (values (3), (4)) as t2 (b) +) as t(x, y) +---- +1 3 +1 4 +2 3 +2 4 + +statement error +from ( + (values (1), (2)) as t1 (a) + cross join + (values (3), (4)) as t2 (b) +) as t(x, y, z) +---- +has 2 columns available but 3 columns specified diff --git a/test/sql/pivot/test_unpivot.test b/test/sql/pivot/test_unpivot.test index ec953e5e9165..e2ac98756c90 100644 --- a/test/sql/pivot/test_unpivot.test +++ b/test/sql/pivot/test_unpivot.test @@ -125,7 +125,7 @@ statement error SELECT empid, dept, month, sales_jan_feb, sales_mar_apr FROM monthly_sales UNPIVOT((sales_jan_feb, sales_mar_apr) FOR month IN ((jan, feb), mar)); ---- -inconsistent amount of +UNPIVOT value count mismatch # unrecognized entry in unpivot statement error @@ -166,14 +166,17 @@ SELECT * FROM monthly_sales UNPIVOT(sales FOR month IN ()) ORDER BY empid; ---- +syntax error statement error SELECT * FROM monthly_sales UNPIVOT(sales FOR month IN ('')) ORDER BY empid; ---- +empty column name statement error SELECT * FROM monthly_sales UNPIVOT(SUM(sales) FOR month IN (empid, dept, jan, feb, mar, april)) ---- +syntax error diff --git a/test/sql/pivot/unpivot_expression.test b/test/sql/pivot/unpivot_expression.test new file mode 100644 index 000000000000..f1a5e1aa6df7 --- /dev/null +++ b/test/sql/pivot/unpivot_expression.test @@ -0,0 +1,64 @@ +# name: test/sql/pivot/unpivot_expression.test +# description: Test expressions in UNPIVOT +# group: [pivot] + +statement ok +PRAGMA enable_verification + +query II +unpivot (select 42 as col1, 'woot' as col2) + on col1::VARCHAR, col2; +---- +col1 42 +col2 woot + +query II +unpivot (select 42 as col1, 'woot' as col2) + on COLUMNS(*)::VARCHAR; +---- +col1 42 +col2 woot + +query II +unpivot (select 42 as col1, 'woot' as col2) + on (col1 + 100)::VARCHAR, col2; +---- +col1 142 +col2 woot + +query II +unpivot (select 42 as col1, 'woot' as col2) + on (col1 + 100)::VARCHAR AS c, col2; +---- +c 142 +col2 woot + +query II +select * from (select 42 as col1, 'woot' as col2) UNPIVOT ("value" FOR "name" IN (col1::VARCHAR, col2)) +---- +col1 42 +col2 woot + +# subqueries +statement error +unpivot (select 42 as col1, 'woot' as col2) + on (col1 + (SELECT col1))::VARCHAR, col2; +---- +UNPIVOT list cannot contain subqueries + +statement error +unpivot (select 42 as col1, 'woot' as col2) + on random(), col2; +---- +UNPIVOT clause must contain exactly one column + +statement error +unpivot (select 42 as col1, 'woot' as col2) + on col1 + col2; +---- +UNPIVOT clause must contain exactly one column + +statement error +unpivot (select 42 as col1, 'woot' as col2) + on t.col1::VARCHAR, col2; +---- diff --git a/test/sql/pivot/unpivot_unnamed_subquery.test b/test/sql/pivot/unpivot_unnamed_subquery.test new file mode 100644 index 000000000000..92d892423fee --- /dev/null +++ b/test/sql/pivot/unpivot_unnamed_subquery.test @@ -0,0 +1,13 @@ +# name: test/sql/pivot/unpivot_unnamed_subquery.test +# description: Test top-level pivot syntax +# group: [pivot] + +statement ok +PRAGMA enable_verification + +query II +unpivot (select cast(columns(*) as varchar) from (select 42 as col1, 'woot' as col2)) + on columns(*); +---- +col1 42 +col2 woot diff --git a/test/sql/prepared/prepare_copy.test b/test/sql/prepared/prepare_copy.test index 7f6267d29be0..bbfbe41c9b11 100644 --- a/test/sql/prepared/prepare_copy.test +++ b/test/sql/prepared/prepare_copy.test @@ -9,8 +9,7 @@ PREPARE q1 AS COPY ( select $1 as 'col' ) to '__TEST_DIR__/res.csv' ( - FORMAT csv, - header true + FORMAT csv ); statement ok @@ -28,8 +27,7 @@ PREPARE q2 AS COPY ( select 42 as 'col' ) to $1 ( - FORMAT csv, - header true + FORMAT csv ); ---- Parser Error: syntax error at or near "$1" diff --git a/test/sql/returning/returning_delete_list.test b/test/sql/returning/returning_delete_list.test new file mode 100644 index 000000000000..7431df95d052 --- /dev/null +++ b/test/sql/returning/returning_delete_list.test @@ -0,0 +1,23 @@ +# name: test/sql/returning/returning_delete_list.test +# description: Test returning with a nested integer list +# group: [returning] + +statement ok +CREATE TABLE all_types("varchar" VARCHAR, nested_int_array INTEGER[][]);; + +statement ok +INSERT INTO all_types VALUES('🦆🦆🦆🦆🦆🦆',[]); + +statement ok +INSERT INTO all_types VALUES('goo'||chr(0) || 'se' ,[[], [42, 999, NULL, NULL, -42], NULL, [], [42, 999, NULL, NULL, -42]]); + +statement ok +INSERT INTO all_types VALUES(NULL,NULL); + +statement ok +DELETE +FROM all_types +WHERE EXISTS + (SELECT all_types."varchar" AS c2 + FROM all_types AS ref_0) +RETURNING all_types.nested_int_array diff --git a/test/sql/secrets/create_secret_non_writable_persistent_dir.test b/test/sql/secrets/create_secret_non_writable_persistent_dir.test new file mode 100644 index 000000000000..1091eb6337bc --- /dev/null +++ b/test/sql/secrets/create_secret_non_writable_persistent_dir.test @@ -0,0 +1,46 @@ +# name: test/sql/secrets/create_secret_non_writable_persistent_dir.test +# description: Test persistent secrets when the secret dir is non-writable +# group: [secrets] + +statement ok +PRAGMA enable_verification; + +load __TEST_DIR__/create_secret_non_writable_persistent_dir.db + +require httpfs + +# First we create any file +statement ok +COPY (SELECT 1 as a) to '__TEST_DIR__/file_to_prevent_the_secret_dir_from_being_created.csv' + +# Then we set the secret dir to this. +statement ok +set secret_directory='__TEST_DIR__/file_to_prevent_the_secret_dir_from_being_created.csv' + +# Now on creation of a tmp secret, the secret manager is initialized, but the persistent secret directory creation is impossible +statement ok +CREATE SECRET my_tmp_secret ( + TYPE S3, + SCOPE 's3://bucket1' +) + +# This now fails with the message that we could not create the persistent secret directory +statement error +CREATE PERSISTENT SECRET my_tmp_secret ( + TYPE S3, + SCOPE 's3://bucket2' +) +---- + +restart + +# Try with a correct, deeply nested path: AOK? +statement ok +set secret_directory='__TEST_DIR__/create_secret_non_writable_persistent_dir/a/deeply/nested/folder/will/be/created' + +statement maybe +CREATE PERSISTENT SECRET my_tmp_secret ( + TYPE S3, + SCOPE 's3://bucket2' +) +---- diff --git a/test/sql/secrets/create_secret_persistence_error_handling.test b/test/sql/secrets/create_secret_persistence_error_handling.test index b0f1eb0907c5..3e39a4c815bb 100644 --- a/test/sql/secrets/create_secret_persistence_error_handling.test +++ b/test/sql/secrets/create_secret_persistence_error_handling.test @@ -23,16 +23,4 @@ COPY (select 1 as a ) to '__TEST_DIR__/create_secret_persistence_error_handling/ statement error FROM duckdb_secrets(); ---- -Serialization Error: Failed to deserialize the persistent secret file: - - -restart - -statement ok -set secret_directory='s3://very_malicious_place_you_wouldnt_want_your_secrets_to_end_up/dir' - -# Error should be thrown indicating that this is not a valid dir and directory creation failed -statement error -FROM duckdb_secrets(); ----- -create directory \ No newline at end of file +Serialization Error: Failed to deserialize the persistent secret file: \ No newline at end of file diff --git a/test/sql/secrets/create_secret_scope_matching.test b/test/sql/secrets/create_secret_scope_matching.test index 2df9858ac02d..a026ad7cfd50 100644 --- a/test/sql/secrets/create_secret_scope_matching.test +++ b/test/sql/secrets/create_secret_scope_matching.test @@ -45,28 +45,7 @@ SELECT which_secret('s3://', 's3') ---- p1 -statement ok +statement maybe DROP SECRET p1 - -# Lets consider the "everything" scope: it will match, every path -statement ok -CREATE TEMPORARY SECRET t1 ( TYPE S3 , SCOPE '') - -statement ok -CREATE TEMPORARY SECRET t2 ( TYPE S3 , SCOPE 's') - -query I -SELECT which_secret('s3://', 's3') ---- -t2 - -statement ok -DROP SECRET t2 - -query I -SELECT which_secret('s3://', 's3') ----- -t1 - -statement ok -DROP SECRET t1 \ No newline at end of file +Invalid Input Error: Failed to remove non-existent secret diff --git a/test/sql/secrets/create_secret_storage_backends.test b/test/sql/secrets/create_secret_storage_backends.test index d05407025ca8..112b61e97308 100644 --- a/test/sql/secrets/create_secret_storage_backends.test +++ b/test/sql/secrets/create_secret_storage_backends.test @@ -16,18 +16,18 @@ set allow_persistent_secrets=false; statement error CREATE TEMPORARY SECRET s1 IN LOCAL_FILE ( TYPE S3 ) ---- -Cannot create temporary secrets in a persistent secret storage! +Invalid Input Error: Persistent secrets are disabled. Restart DuckDB and enable persistent secrets through 'SET allow_persistent_secrets=true' statement error CREATE PERSISTENT SECRET s1 IN NON_EXISTENT_SECRET_STORAGE ( TYPE S3 ) ---- -Secret storage 'non_existent_secret_storage' not found! +Invalid Input Error: Persistent secrets are disabled. Restart DuckDB and enable persistent secrets through 'SET allow_persistent_secrets=true' # We have disabled the permanent secrets, so this should fail statement error CREATE PERSISTENT SECRET perm_s1 ( TYPE S3 ) ---- -Persistent secrets are currently disabled. To enable them, restart duckdb and run 'SET allow_persistent_secrets=true' +Invalid Input Error: Persistent secrets are disabled. Restart DuckDB and enable persistent secrets through 'SET allow_persistent_secrets=true' restart @@ -96,29 +96,12 @@ perm_s2 s3 config true local_file [s3://, s3n://, s3a://] s1 s3 config true local_file [s3://, s3n://, s3a://] s2 s3 config true local_file [s3://, s3n://, s3a://] -statement ok +statement maybe DROP SECRET perm_s1; - -statement ok -DROP SECRET perm_s2; - -statement ok -DROP SECRET s1; - -statement ok -DROP SECRET s2; - -query I -SELECT count(*) FROM duckdb_secrets(); ---- -0 - -restart +Invalid Input Error: Failed to remove non-existent secret -statement ok -set secret_directory='__TEST_DIR__/create_secret_storages' - -query I -SELECT count(*) FROM duckdb_secrets(); +statement maybe +DROP SECRET perm_s2; ---- -0 \ No newline at end of file +Invalid Input Error: Failed to remove non-existent secret diff --git a/test/sql/show_select/describe_subquery.test b/test/sql/show_select/describe_subquery.test index ab003923c867..39766e814ce7 100644 --- a/test/sql/show_select/describe_subquery.test +++ b/test/sql/show_select/describe_subquery.test @@ -28,3 +28,13 @@ a statement ok FROM (SHOW databases) t + +query I +SELECT column_name FROM (DESCRIBE ( DESCRIBE SELECT * FROM (SELECT 32 as a))); +---- +column_name +column_type +null +key +default +extra diff --git a/test/sql/storage/CMakeLists.txt b/test/sql/storage/CMakeLists.txt index 1c8ad95d3134..6508973f8714 100644 --- a/test/sql/storage/CMakeLists.txt +++ b/test/sql/storage/CMakeLists.txt @@ -4,8 +4,6 @@ add_library_unity( OBJECT test_buffer_manager.cpp test_checksum.cpp - test_big_storage.cpp - test_repeated_checkpoint.cpp test_storage.cpp test_database_size.cpp wal_torn_write.cpp) diff --git a/test/sql/storage/bc/test_view_v092.test b/test/sql/storage/bc/test_view_v092.test index 1e920330dfaa..0b2e3a352853 100644 --- a/test/sql/storage/bc/test_view_v092.test +++ b/test/sql/storage/bc/test_view_v092.test @@ -2,6 +2,11 @@ # description: Test reading database with views # group: [bc] +# we cannot read/open a file with a different block size +require block_size 262144 + +require vector_size 2048 + load data/storage/views_092.db readonly statement ok diff --git a/test/sql/storage/buffer_manager/appending_table_exceeding_limit.test_slow b/test/sql/storage/buffer_manager/appending_table_exceeding_limit.test_slow new file mode 100644 index 000000000000..b551d1d70109 --- /dev/null +++ b/test/sql/storage/buffer_manager/appending_table_exceeding_limit.test_slow @@ -0,0 +1,53 @@ +# name: test/sql/storage/buffer_manager/appending_table_exceeding_limit.test_slow +# description: Test appending and checkpointing a table that exceeds buffer manager size +# group: [buffer_manager] + +# load the DB from disk +load __TEST_DIR__/test_table_exceeding_limit.db + +statement ok +SET force_compression='uncompressed' + +statement ok +SET memory_limit = '10MB' + +statement ok +SET threads=1 + +statement ok +CREATE TABLE test (a INTEGER, b INTEGER); + +statement ok +INSERT INTO test VALUES (1, 10), (2, 20), (3, 30), (NULL, NULL) + +loop i 0 23 + +statement ok +INSERT INTO test SELECT * FROM test + +endloop + +query IIII +SELECT COUNT(*), COUNT(a), SUM(a), SUM(b) FROM test +---- +33554432 25165824 50331648 503316480 + +loop i 0 2 + +restart + +statement ok +SET force_compression='uncompressed' + +statement ok +SET memory_limit = '10MB' + +statement ok +SET threads=1 + +query IIII +SELECT COUNT(*), COUNT(a), SUM(a), SUM(b) FROM test +---- +33554432 25165824 50331648 503316480 + +endloop diff --git a/test/sql/storage/compression/chimp/chimp_read.test b/test/sql/storage/compression/chimp/chimp_read.test index 174df33ba517..fedda5038170 100644 --- a/test/sql/storage/compression/chimp/chimp_read.test +++ b/test/sql/storage/compression/chimp/chimp_read.test @@ -1,6 +1,11 @@ # name: test/sql/storage/compression/chimp/chimp_read.test # group: [chimp] +# we cannot read/open a file with a different block size +require block_size 262144 + +require vector_size 2048 + load test/sql/storage/compression/chimp/chimp.db readonly query I diff --git a/test/sql/storage/compression/patas/patas_read.test b/test/sql/storage/compression/patas/patas_read.test index c6feb2a37ec9..1380d2699e12 100644 --- a/test/sql/storage/compression/patas/patas_read.test +++ b/test/sql/storage/compression/patas/patas_read.test @@ -1,6 +1,11 @@ # name: test/sql/storage/compression/patas/patas_read.test # group: [patas] +# we cannot read/open a file with a different block size +require block_size 262144 + +require vector_size 2048 + load test/sql/storage/compression/patas/patas.db readonly query I diff --git a/test/sql/storage/concurrent_table_insertion.test_slow b/test/sql/storage/concurrent_table_insertion.test_slow new file mode 100644 index 000000000000..96710b56019b --- /dev/null +++ b/test/sql/storage/concurrent_table_insertion.test_slow @@ -0,0 +1,29 @@ +# name: test/sql/storage/concurrent_table_insertion.test_slow +# description: Test concurrent table insertions +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/concurrent_table_insertions.db + +statement ok +CREATE OR REPLACE TABLE d (x INT, y INT, z INT); + +concurrentloop c 0 100 + +loop i 0 10 + +statement ok +CREATE OR REPLACE TEMP TABLE _tt AS SELECT 1 AS x, (SELECT COUNT(*) FROM d WHERE z != ${i}) AS y, ${i} AS z; + +statement ok +INSERT INTO d SELECT * FROM _tt + +statement ok +CREATE OR REPLACE TEMP TABLE _tt AS SELECT * FROM d LIMIT 20000 + +statement ok +INSERT INTO d SELECT * FROM _tt + +endloop + +endloop diff --git a/test/sql/storage/filter_pushdown_struct.test b/test/sql/storage/filter_pushdown_struct.test new file mode 100644 index 000000000000..d82fec5a750d --- /dev/null +++ b/test/sql/storage/filter_pushdown_struct.test @@ -0,0 +1,34 @@ +# name: test/sql/storage/filter_pushdown_struct.test +# description: Issue #10889 - The result of a WHERE clause on a "large" table of structs change when duckdb is connected to a persistent database file +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/filter_pushdown_struct.db + +statement ok +CREATE TABLE tbl (a STRUCT("id" VARCHAR), b STRUCT("id" VARCHAR)); + +statement ok +INSERT INTO tbl SELECT {'id': LPAD(i::VARCHAR, 4, '0')}, {'id': 'abc'} FROM range(10000) t(i) + +query I +SELECT COUNT(*) FROM (SELECT * FROM tbl WHERE b.id='abc') t +---- +10000 + +restart + +query I +SELECT COUNT(*) FROM (SELECT * FROM tbl WHERE b.id='abc') t +---- +10000 + +statement ok +INSERT INTO tbl SELECT {'id': LPAD((i + 10000)::VARCHAR, 4, '0')}, {'id': 'bcd'} FROM range(10000) t(i) + +restart + +query I +SELECT COUNT(*) FROM (SELECT * FROM tbl WHERE b.id='bcd') t +---- +10000 diff --git a/test/sql/storage/optimistic_write/optimistic_write_cyclic_dictionary.test_slow b/test/sql/storage/optimistic_write/optimistic_write_cyclic_dictionary.test_slow index f3f8176be6cf..acc8574e942f 100644 --- a/test/sql/storage/optimistic_write/optimistic_write_cyclic_dictionary.test_slow +++ b/test/sql/storage/optimistic_write/optimistic_write_cyclic_dictionary.test_slow @@ -2,7 +2,6 @@ # description: Test optimistic write with a cyclic scan # group: [optimistic_write] -# load the DB from disk load __TEST_DIR__/optimistic_write_cyclic_dictionary.db statement ok diff --git a/test/sql/storage/optimistic_write/optimistic_write_cyclic_scan.test_slow b/test/sql/storage/optimistic_write/optimistic_write_cyclic_scan.test_slow index f82ae955d220..6f39f375b9c2 100644 --- a/test/sql/storage/optimistic_write/optimistic_write_cyclic_scan.test_slow +++ b/test/sql/storage/optimistic_write/optimistic_write_cyclic_scan.test_slow @@ -2,9 +2,6 @@ # description: Test optimistic write with a cyclic scan # group: [optimistic_write] -# FIXME: runtime error: member access within address 0x000359ad3c40 which does not point to an object of type 'BlockManager' -require block_size 262144 - load __TEST_DIR__/optimistic_write_cyclic_scan.db statement ok diff --git a/test/sql/storage/parallel/batch_insert_filtered_row_groups.test_slow b/test/sql/storage/parallel/batch_insert_filtered_row_groups.test_slow index 27d24fa7c5d1..edc2bdc7cf2a 100644 --- a/test/sql/storage/parallel/batch_insert_filtered_row_groups.test_slow +++ b/test/sql/storage/parallel/batch_insert_filtered_row_groups.test_slow @@ -8,6 +8,8 @@ require parquet load __TEST_DIR__/insert_mix_batches.db +loop i 0 2 + statement ok COPY (FROM range(10000000)) TO '__TEST_DIR__/many_small_batches.parquet' (row_group_size 5000) @@ -23,6 +25,10 @@ SELECT * FROM test LIMIT 5 OFFSET 500000 1495331 1495332 +query I +SELECT * FROM test QUALIFY i <= lag(i) over () +---- + # ensure that we still write 122880 as our row group size count, even for different block sizes query I SELECT MAX(count) FROM pragma_storage_info('test') @@ -33,6 +39,15 @@ SELECT MAX(count) FROM pragma_storage_info('test') require block_size 262144 query I -SELECT MEDIAN(count) FROM pragma_storage_info('test') +SELECT MEDIAN(count)>100000 FROM pragma_storage_info('test') ---- -122880 +true + +statement ok +DROP TABLE test + +# repeat with a low memory limit +statement ok +SET memory_limit='500MB' + +endloop diff --git a/test/sql/storage/parallel/insert_order_preserving_odd_sized_batches.test_slow b/test/sql/storage/parallel/insert_order_preserving_odd_sized_batches.test_slow index e6b88e52312a..0e71376eac55 100644 --- a/test/sql/storage/parallel/insert_order_preserving_odd_sized_batches.test_slow +++ b/test/sql/storage/parallel/insert_order_preserving_odd_sized_batches.test_slow @@ -59,9 +59,9 @@ SELECT COUNT(DISTINCT block_id) < 4 FROM pragma_storage_info('integers_parquet') true query I -SELECT MEDIAN(count) FROM pragma_storage_info('integers_parquet'); +SELECT MEDIAN(count)>100000 FROM pragma_storage_info('integers_parquet'); ---- -122880 +true # verify that reading without preserving insertion order creates the same size table statement ok @@ -76,6 +76,6 @@ SELECT COUNT(DISTINCT block_id) < 4 FROM pragma_storage_info('integers_parquet_n true query I -SELECT MEDIAN(count) FROM pragma_storage_info('integers_parquet_no_order'); +SELECT MEDIAN(count)>100000 FROM pragma_storage_info('integers_parquet_no_order'); ---- -122880 +true diff --git a/test/sql/storage/parallel/memory_limit_batch_load_list.test_slow b/test/sql/storage/parallel/memory_limit_batch_load_list.test_slow index 56de967772d9..c6d649b9deab 100644 --- a/test/sql/storage/parallel/memory_limit_batch_load_list.test_slow +++ b/test/sql/storage/parallel/memory_limit_batch_load_list.test_slow @@ -2,9 +2,6 @@ # description: Test batch streaming to disk with different row group sizes # group: [parallel] -# FIXME: with a block size of 16KB and when run in relassert, this test fails with: mutex lock failed: Invalid argument -require block_size 262144 - require parquet load __TEST_DIR__/memory_limit_batch_load_list.db diff --git a/test/sql/storage/parallel/reclaim_space_parallel_insert.test_slow b/test/sql/storage/parallel/reclaim_space_parallel_insert.test_slow index d57c34310287..66c4670b65f8 100644 --- a/test/sql/storage/parallel/reclaim_space_parallel_insert.test_slow +++ b/test/sql/storage/parallel/reclaim_space_parallel_insert.test_slow @@ -2,9 +2,6 @@ # description: Test space reclamation of optimistic writing with failures # group: [parallel] -# FIXME: reliably fails for smaller block sizes -require block_size 262144 - load __TEST_DIR__/reclaim_space_parallel_insert.db statement ok diff --git a/test/sql/storage/parallel/reclaim_space_parallel_insert_unique_idx.test_slow b/test/sql/storage/parallel/reclaim_space_parallel_insert_unique_idx.test_slow index 55749bf2f1b6..4881ae6cd486 100644 --- a/test/sql/storage/parallel/reclaim_space_parallel_insert_unique_idx.test_slow +++ b/test/sql/storage/parallel/reclaim_space_parallel_insert_unique_idx.test_slow @@ -2,9 +2,6 @@ # description: Test space reclamation in a reduced scenario # group: [parallel] -# FIXME: reliably fails for smaller block sizes -require block_size 262144 - load __TEST_DIR__/reclaim_space_parallel_insert.db statement ok @@ -22,7 +19,7 @@ INSERT INTO integers2 VALUES (9999999); statement ok CREATE UNIQUE INDEX idx ON integers2(i); -loop i 0 100 +loop i 0 40 # conflict with transaction local data statement ok diff --git a/test/sql/storage/reclaim_space/reclaim_space_lists.test_slow b/test/sql/storage/reclaim_space/reclaim_space_lists.test_slow new file mode 100644 index 000000000000..e84f14265829 --- /dev/null +++ b/test/sql/storage/reclaim_space/reclaim_space_lists.test_slow @@ -0,0 +1,52 @@ +# name: test/sql/storage/reclaim_space/reclaim_space_lists.test_slow +# description: Test that we reclaim space of LIST tables +# group: [reclaim_space] + +load __TEST_DIR__/test_reclaim_space.db + +statement ok +PRAGMA force_checkpoint; + +statement ok +SET force_compression='uncompressed' + +statement ok +CREATE TABLE lists AS SELECT [i] l FROM range(10000000) tbl(i); + +statement ok +CHECKPOINT; + +statement ok +CHECKPOINT; + +query III +SELECT MIN(l[1]), MAX(l[1]), COUNT(*) FROM lists +---- +0 9999999 10000000 + +statement ok +DROP TABLE lists; + +loop i 0 10 + +statement ok +CREATE TABLE lists${i} AS SELECT [i] l FROM range(10000000) tbl(i); + +query III +SELECT MIN(l[1]), MAX(l[1]), COUNT(*) FROM lists${i} +---- +0 9999999 10000000 + +statement ok +CHECKPOINT; + +statement ok +DROP TABLE lists${i} + +statement ok +CHECKPOINT + +query I nosort expected_blocks +select round(total_blocks / 100.0) from pragma_database_size(); + +endloop diff --git a/test/sql/storage/storage_exceeds_block_large_string.test b/test/sql/storage/storage_exceeds_block_large_string.test new file mode 100644 index 000000000000..d6e73df95eb3 --- /dev/null +++ b/test/sql/storage/storage_exceeds_block_large_string.test @@ -0,0 +1,47 @@ +# name: test/sql/storage/storage_exceeds_block_large_string.test +# description: Test storing big strings +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/exceed_single_block_types.db + +statement ok +SET force_compression='uncompressed' + +statement ok +CREATE TABLE test (a VARCHAR, j BIGINT); + +statement ok +INSERT INTO test VALUES (repeat('a', 64), 1) + +loop i 2 6 + +statement ok +INSERT INTO test SELECT a||a||a||a||a||a||a||a||a||a, ${i} FROM test + +statement ok +DELETE FROM test WHERE j=${i} - 1 + +endloop + +query I +SELECT LENGTH(a) FROM test +---- +640000 + +restart + +query I +SELECT LENGTH(a) FROM test +---- +640000 + +query I +SELECT LENGTH(a) FROM test +---- +640000 + +query I +SELECT LENGTH(a) FROM test +---- +640000 diff --git a/test/sql/storage/storage_exceeds_single_block.test b/test/sql/storage/storage_exceeds_single_block.test new file mode 100644 index 000000000000..d48d27fbdb16 --- /dev/null +++ b/test/sql/storage/storage_exceeds_single_block.test @@ -0,0 +1,41 @@ +# name: test/sql/storage/storage_exceeds_single_block.test +# description: Test storage that exceeds a single block +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/exceed_single_block.db + +statement ok +SET force_compression='uncompressed' + +statement ok +CREATE TABLE test (a INTEGER, b INTEGER); + +statement ok +INSERT INTO test VALUES (11, 22), (13, 22), (12, 21), (NULL, NULL) + +loop i 0 16 + +statement ok +INSERT INTO test FROM test + +endloop + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 + +restart + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 + +restart + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 diff --git a/test/sql/storage/storage_exceeds_single_block_strings.test b/test/sql/storage/storage_exceeds_single_block_strings.test new file mode 100644 index 000000000000..3eb64bca9f4b --- /dev/null +++ b/test/sql/storage/storage_exceeds_single_block_strings.test @@ -0,0 +1,65 @@ +# name: test/sql/storage/storage_exceeds_single_block_strings.test +# description: Test storing strings that exceed a single block +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/exceed_single_block_types.db + +statement ok +SET force_compression='uncompressed' + +statement ok +CREATE TABLE test (a VARCHAR); + +statement ok +INSERT INTO test VALUES ('a'), ('bb'), ('ccc'), ('dddd'), ('eeeee') + +loop i 0 14 + +statement ok +INSERT INTO test FROM test + +endloop + +query II +SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a +---- +a 16384 +bb 16384 +ccc 16384 +dddd 16384 +eeeee 16384 + +restart + +query II +SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a +---- +a 16384 +bb 16384 +ccc 16384 +dddd 16384 +eeeee 16384 + +# now perform an update of the database + +query I +SELECT count(a) FROM test WHERE a='a' +---- +16384 + +query I +UPDATE test SET a='aaa' WHERE a='a' +---- +16384 + +restart + +query II +SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a +---- +aaa 16384 +bb 16384 +ccc 16384 +dddd 16384 +eeeee 16384 diff --git a/test/sql/storage/storage_exceeds_single_block_types.test b/test/sql/storage/storage_exceeds_single_block_types.test new file mode 100644 index 000000000000..a7cf1542d76b --- /dev/null +++ b/test/sql/storage/storage_exceeds_single_block_types.test @@ -0,0 +1,41 @@ +# name: test/sql/storage/storage_exceeds_single_block_types.test +# description: Test storage that exceeds a single block with different types +# group: [storage] + +# load the DB from disk +load __TEST_DIR__/exceed_single_block_types.db + +statement ok +SET force_compression='uncompressed' + +statement ok +CREATE TABLE test (a INTEGER, b BIGINT); + +statement ok +INSERT INTO test VALUES (11, 22), (13, 22), (12, 21), (NULL, NULL) + +loop i 0 16 + +statement ok +INSERT INTO test FROM test + +endloop + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 + +restart + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 + +restart + +query I +SELECT SUM(a) + SUM(b) FROM test +---- +6619136 diff --git a/test/sql/storage/test_big_storage.cpp b/test/sql/storage/test_big_storage.cpp deleted file mode 100644 index 4f7c775214bc..000000000000 --- a/test/sql/storage/test_big_storage.cpp +++ /dev/null @@ -1,204 +0,0 @@ -#include "catch.hpp" -#include "duckdb/common/file_system.hpp" -#include "test_helpers.hpp" -#include "duckdb/storage/storage_info.hpp" - -using namespace duckdb; -using namespace std; - -TEST_CASE("Test storage that exceeds a single block", "[storage]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("storage_test"); - auto config = GetTestConfig(); - - config->options.force_compression = CompressionType::COMPRESSION_UNCOMPRESSED; - - uint64_t integer_count = 3 * (Storage::BLOCK_SIZE / sizeof(int32_t)); - uint64_t expected_sum; - Value sum; - - // make sure the database does not exist - DeleteDatabase(storage_database); - { - // create a database and insert values - DuckDB db(storage_database, config.get()); - Connection con(db); - REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a INTEGER, b INTEGER);")); - REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES (11, 22), (13, 22), (12, 21), (NULL, NULL)")); - uint64_t table_size = 4; - expected_sum = 11 + 12 + 13 + 22 + 22 + 21; - // grow the table until it exceeds integer_count - while (table_size < integer_count) { - REQUIRE_NO_FAIL(con.Query("INSERT INTO test SELECT * FROM test")); - table_size *= 2; - expected_sum *= 2; - } - sum = Value::BIGINT(expected_sum); - // compute the sum - result = con.Query("SELECT SUM(a) + SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {sum})); - } - // reload the database from disk - { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT SUM(a) + SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {sum})); - } - // reload the database from disk, we do this again because checkpointing at startup causes this to follow a - // different code path - { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT SUM(a) + SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {sum})); - } - DeleteDatabase(storage_database); -} - -TEST_CASE("Test storage that exceeds a single block with different types", "[storage]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("storage_test"); - auto config = GetTestConfig(); - - config->options.force_compression = CompressionType::COMPRESSION_UNCOMPRESSED; - - uint64_t integer_count = 3 * (Storage::BLOCK_SIZE / sizeof(int32_t)); - Value sum; - - // make sure the database does not exist - DeleteDatabase(storage_database); - { - // create a database and insert values - DuckDB db(storage_database, config.get()); - Connection con(db); - REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a INTEGER, b BIGINT);")); - REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES (11, 22), (13, 22), (12, 21), (NULL, NULL)")); - uint64_t table_size = 4; - // grow the table until it exceeds integer_count - while (table_size < integer_count) { - REQUIRE_NO_FAIL(con.Query("INSERT INTO test SELECT * FROM test")); - table_size *= 2; - } - // compute the sum - result = con.Query("SELECT SUM(a) + SUM(b) FROM test"); - REQUIRE_NO_FAIL(*result); - sum = result->GetValue(0, 0); - } - // reload the database from disk - for (idx_t i = 0; i < 2; i++) { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT SUM(a) + SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {sum})); - } - DeleteDatabase(storage_database); -} - -TEST_CASE("Test storing strings that exceed a single block", "[storage]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("storage_test"); - auto config = GetTestConfig(); - - config->options.force_compression = CompressionType::COMPRESSION_UNCOMPRESSED; - - uint64_t string_count = 3 * (Storage::BLOCK_SIZE / (sizeof(char) * 15)); - Value sum; - - Value count_per_group; - // make sure the database does not exist - DeleteDatabase(storage_database); - { - // create a database and insert values - DuckDB db(storage_database, config.get()); - Connection con(db); - REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a VARCHAR);")); - REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES ('a'), ('bb'), ('ccc'), ('dddd'), ('eeeee')")); - uint64_t table_size = 5; - // grow the table until it exceeds integer_count - while (table_size < string_count) { - REQUIRE_NO_FAIL(con.Query("INSERT INTO test SELECT * FROM test")); - table_size *= 2; - } - count_per_group = Value::BIGINT(table_size / 5); - // compute the sum - result = con.Query("SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a"); - REQUIRE(CHECK_COLUMN(result, 0, {"a", "bb", "ccc", "dddd", "eeeee"})); - REQUIRE(CHECK_COLUMN(result, 1, - {count_per_group, count_per_group, count_per_group, count_per_group, count_per_group})); - } - // reload the database from disk - for (idx_t i = 0; i < 2; i++) { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a"); - REQUIRE(CHECK_COLUMN(result, 0, {"a", "bb", "ccc", "dddd", "eeeee"})); - REQUIRE(CHECK_COLUMN(result, 1, - {count_per_group, count_per_group, count_per_group, count_per_group, count_per_group})); - } - // now perform an update of the database - { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT count(a) FROM test WHERE a='a'"); - REQUIRE(CHECK_COLUMN(result, 0, {count_per_group})); - result = con.Query("UPDATE test SET a='aaa' WHERE a='a'"); - REQUIRE(CHECK_COLUMN(result, 0, {count_per_group})); - } - // reload the database from disk again - for (idx_t i = 0; i < 2; i++) { - DuckDB db(storage_database, config.get()); - Connection con(db); - - result = con.Query("SELECT a, COUNT(*) FROM test GROUP BY a ORDER BY a"); - REQUIRE(CHECK_COLUMN(result, 0, {"aaa", "bb", "ccc", "dddd", "eeeee"})); - REQUIRE(CHECK_COLUMN(result, 1, - {count_per_group, count_per_group, count_per_group, count_per_group, count_per_group})); - } - - DeleteDatabase(storage_database); -} - -TEST_CASE("Test storing big strings", "[storage]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("storage_test"); - auto config = GetTestConfig(); - - config->options.force_compression = CompressionType::COMPRESSION_UNCOMPRESSED; - - uint64_t string_length = 64; - // make sure the database does not exist - DeleteDatabase(storage_database); - { - // create a database and insert the big string - DuckDB db(storage_database, config.get()); - Connection con(db); - string big_string = string(string_length, 'a'); - REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a VARCHAR, j BIGINT);")); - REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES ('" + big_string + "', 1)")); - uint64_t iteration = 2; - while (string_length < Storage::BLOCK_SIZE * 2) { - REQUIRE_NO_FAIL(con.Query("INSERT INTO test SELECT a||a||a||a||a||a||a||a||a||a, " + to_string(iteration) + - " FROM test")); - REQUIRE_NO_FAIL(con.Query("DELETE FROM test WHERE j=" + to_string(iteration - 1))); - iteration++; - string_length *= 10; - } - - // check the length - result = con.Query("SELECT LENGTH(a) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(string_length)})); - } - // reload the database from disk - for (idx_t i = 0; i < 2; i++) { - DuckDB db(storage_database, config.get()); - Connection con(db); - result = con.Query("SELECT LENGTH(a) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(string_length)})); - result = con.Query("SELECT LENGTH(a) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(string_length)})); - result = con.Query("SELECT LENGTH(a) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(string_length)})); - } - DeleteDatabase(storage_database); -} diff --git a/test/sql/storage/test_buffer_manager.cpp b/test/sql/storage/test_buffer_manager.cpp index 4809638c8d03..e730fe892b92 100644 --- a/test/sql/storage/test_buffer_manager.cpp +++ b/test/sql/storage/test_buffer_manager.cpp @@ -72,58 +72,6 @@ TEST_CASE("Test storing a big string that exceeds buffer manager size", "[storag DeleteDatabase(storage_database); } -TEST_CASE("Test appending and checkpointing a table that exceeds buffer manager size", "[storage][.]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("storage_test"); - auto config = GetTestConfig(); - - // maximum memory is 10MB - config->options.force_compression = CompressionType::COMPRESSION_UNCOMPRESSED; - config->options.maximum_memory = 10000000; - config->options.maximum_threads = 1; - - // create a table of size 10 times the buffer pool size - uint64_t size = 0, size_a, sum_a, sum_b; - uint64_t table_size = 100000000 / sizeof(int32_t); - // make sure the database does not exist - DeleteDatabase(storage_database); - { - // create a database and insert the big string - DuckDB db(storage_database, config.get()); - Connection con(db); - REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a INTEGER, b INTEGER);")); - REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES (1, 10), (2, 20), (3, 30), (NULL, NULL)")); - size_a = 3; - sum_a = 1 + 2 + 3; - sum_b = 10 + 20 + 30; - for (size = 4; size < table_size; size *= 2) { - REQUIRE_NO_FAIL(con.Query("INSERT INTO test SELECT * FROM test")); - size_a *= 2; - sum_a *= 2; - sum_b *= 2; - } - - // check the aggregate statistics of the table - result = con.Query("SELECT COUNT(*), COUNT(a), SUM(a), SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(size)})); - REQUIRE(CHECK_COLUMN(result, 1, {Value::BIGINT(size_a)})); - REQUIRE(CHECK_COLUMN(result, 2, {Value::BIGINT(sum_a)})); - REQUIRE(CHECK_COLUMN(result, 3, {Value::BIGINT(sum_b)})); - } - for (idx_t i = 0; i < 2; i++) { - // reload the table and checkpoint, still with a 10MB limit - DuckDB db(storage_database, config.get()); - Connection con(db); - - result = con.Query("SELECT COUNT(*), COUNT(a), SUM(a), SUM(b) FROM test"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(size)})); - REQUIRE(CHECK_COLUMN(result, 1, {Value::BIGINT(size_a)})); - REQUIRE(CHECK_COLUMN(result, 2, {Value::BIGINT(sum_a)})); - REQUIRE(CHECK_COLUMN(result, 3, {Value::BIGINT(sum_b)})); - } - DeleteDatabase(storage_database); -} - TEST_CASE("Modifying the buffer manager limit at runtime for an in-memory database", "[storage][.]") { duckdb::unique_ptr result; diff --git a/test/sql/storage/test_purge_queue.test b/test/sql/storage/test_purge_queue.test new file mode 100644 index 000000000000..07ab5531d8d5 --- /dev/null +++ b/test/sql/storage/test_purge_queue.test @@ -0,0 +1,42 @@ +# name: test/sql/storage/test_purge_queue.test +# description: Test purging the eviction queue +# group: [storage] + +require noforcestorage + +require skip_reload + +# attach files + +loop i 0 10 + +statement ok +ATTACH '__TEST_DIR__/num${i}.db'; + +statement ok +CREATE OR REPLACE TABLE num${i}.tbl AS SELECT range AS id, range + 10 AS other FROM range(200); + +endloop + +# repeatedly query the DBs + +concurrentloop cl 0 400 + +loop i 0 10 + +query II +SELECT id, other FROM num${i}.tbl WHERE id > 50 ORDER BY other LIMIT 2; +---- +51 61 +52 62 + +endloop + +endloop + +loop i 0 10 + +statement ok +DROP TABLE num${i}.tbl; + +endloop \ No newline at end of file diff --git a/test/sql/storage/test_repeated_checkpoint.cpp b/test/sql/storage/test_repeated_checkpoint.cpp deleted file mode 100644 index 2e97b1049455..000000000000 --- a/test/sql/storage/test_repeated_checkpoint.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include "catch.hpp" -#include "duckdb/common/file_system.hpp" -#include "test_helpers.hpp" -#include "duckdb/storage/storage_info.hpp" - -#include - -using namespace duckdb; -using namespace std; - -TEST_CASE("Test repeated load and checkpoint of storage", "[storage][.]") { - duckdb::unique_ptr result; - auto storage_database = TestCreatePath("repeated_load"); - auto csv_file = TestCreatePath("rload.csv"); - auto config = GetTestConfig(); - - duckdb::vector model {"M11", "F22", "U33"}; - duckdb::vector shop {"www.goodshop.com", "www.badshop.com"}; - duckdb::vector name {"Electronics Something One", "Electronics Something Two", - "Electronics Something Three", "Electronics Something Four", - "Electronics Something Five", "Electronics Something Six", - "Electronics Something Seven", "Electronics Something Eight", - "Electronics Something Nine", "Electronics Something Ten"}; - duckdb::vector brand {"AAAAA", "BBBBB", "CCCC", "DDDDDD", "PPPP"}; - duckdb::vector color {"violet", "indigo", "blue", "green", "yellow", "orange", "red"}; - idx_t row_count = 1000; - const idx_t checkpoint_loop_count = 100; - - DeleteDatabase(storage_database); - for (idx_t counter = 0; counter < checkpoint_loop_count; counter++) { - DuckDB db(storage_database); - Connection con(db); - - if (counter > 0) { - result = con.Query("SELECT COUNT(*) FROM pdata"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT(counter * row_count)})); - } - // generate the csv file - ofstream csv_writer(csv_file); - for (idx_t i = 0; i < row_count; i++) { - idx_t z = i + counter; - idx_t record_id = i + (row_count * counter); - csv_writer << record_id << "|"; - csv_writer << i % 99 << "|"; - csv_writer << shop[z % 2] << "|"; - csv_writer << "electronics" - << "|"; - csv_writer << name[z % 10] << "|"; - csv_writer << brand[z % 5] << "|"; - csv_writer << color[z % 7] << "|"; - csv_writer << model[z % 3] << "|"; - csv_writer << "\n"; - } - csv_writer.close(); - // create and load the table - REQUIRE_NO_FAIL( - con.Query("CREATE TABLE IF NOT EXISTS pdata (record_id BIGINT PRIMARY KEY , price DOUBLE, shop VARCHAR, " - "category VARCHAR, name VARCHAR, brand VARCHAR, color VARCHAR, model VARCHAR);")); - REQUIRE_NO_FAIL(con.Query("COPY pdata(record_id,price,shop,category,name,brand,color,model) FROM '" + csv_file + - "' ( DELIMITER '|' );")); - result = con.Query("SELECT MIN(record_id), MIN(price), MIN(shop), MIN(category), MIN(name), MIN(brand), " - "MIN(color), MIN(model) FROM pdata"); - REQUIRE(CHECK_COLUMN(result, 0, {0})); - REQUIRE(CHECK_COLUMN(result, 1, {0})); - REQUIRE(CHECK_COLUMN(result, 2, {"www.badshop.com"})); - REQUIRE(CHECK_COLUMN(result, 3, {"electronics"})); - REQUIRE(CHECK_COLUMN(result, 4, {"Electronics Something Eight"})); - REQUIRE(CHECK_COLUMN(result, 5, {"AAAAA"})); - REQUIRE(CHECK_COLUMN(result, 6, {"blue"})); - REQUIRE(CHECK_COLUMN(result, 7, {"F22"})); - - result = con.Query("SELECT COUNT(*) FROM pdata"); - REQUIRE(CHECK_COLUMN(result, 0, {Value::BIGINT((counter + 1) * row_count)})); - } -} diff --git a/test/sql/storage/test_repeated_checkpoint.test_slow b/test/sql/storage/test_repeated_checkpoint.test_slow new file mode 100644 index 000000000000..91c2bdaeb15b --- /dev/null +++ b/test/sql/storage/test_repeated_checkpoint.test_slow @@ -0,0 +1,64 @@ +# name: test/sql/storage/test_repeated_checkpoint.test_slow +# description: Test repeated load and checkpoint of storage +# group: [storage] + +load __TEST_DIR__/repeated_load.db + +loop i 0 100 + +statement ok +COPY ( +SELECT + ${i} * 1000 + i AS record_id, + i % 99 AS price, + CASE WHEN i + ${i} % 2 = 0 THEN 'www.goodshop.com' ELSE 'www.badshop.com' END AS shop, + 'electronics' AS category, + CONCAT('Electronics Something ', + CASE (i + ${i} % 10) WHEN 0 THEN 'One' + WHEN 1 THEN 'Two' + WHEN 2 THEN 'Three' + WHEN 3 THEN 'Four' + WHEN 4 THEN 'Five' + WHEN 5 THEN 'Six' + WHEN 6 THEN 'Seven' + WHEN 7 THEN 'Eight' + WHEN 8 THEN 'Nine' + ELSE 'Ten' END) AS name, + CASE (i + ${i} % 5) WHEN 0 THEN 'AAAAA' + WHEN 1 THEN 'BBBBB' + WHEN 2 THEN 'CCCC' + WHEN 3 THEN 'DDDDDD' + ELSE 'PPPP' END AS brand, + CASE (i + ${i} % 7) WHEN 0 THEN 'violet' + WHEN 1 THEN 'indigo' + WHEN 2 THEN 'blue' + WHEN 3 THEN 'green' + WHEN 4 THEN 'yellow' + WHEN 5 THEN 'orange' + ELSE 'red' END AS color, + CASE (i + ${i} % 3) WHEN 0 THEN 'M11' + WHEN 1 THEN 'F22' + ELSE 'U33' END AS model +FROM range(1000) t(i) +) +TO '__TEST_DIR__/repeated_load.csv' (DELIMITER '|'); + +statement ok +CREATE TABLE IF NOT EXISTS pdata (record_id BIGINT PRIMARY KEY , price DOUBLE, shop VARCHAR, category VARCHAR, name VARCHAR, brand VARCHAR, color VARCHAR, model VARCHAR); + +statement ok +COPY pdata(record_id,price,shop,category,name,brand,color,model) FROM '__TEST_DIR__/repeated_load.csv' ( DELIMITER '|' ); + +query IIIIIIII +SELECT MIN(record_id), MIN(price), MIN(shop), MIN(category), MIN(name), MIN(brand), MIN(color), MIN(model) FROM pdata +---- +0 0 www.badshop.com electronics Electronics Something Eight AAAAA blue F22 + +query I +SELECT COUNT(*)=(${i}+1)*1000 FROM pdata +---- +true + +restart + +endloop diff --git a/test/sql/storage/types/list/empty_float_arrays.test b/test/sql/storage/types/list/empty_float_arrays.test new file mode 100644 index 000000000000..a4bf9dd4120e --- /dev/null +++ b/test/sql/storage/types/list/empty_float_arrays.test @@ -0,0 +1,33 @@ +# name: test/sql/storage/types/list/empty_float_arrays.test +# description: Test storage of empty float arrays +# group: [list] + +load __TEST_DIR__/array_empty_storage.db + +foreach compression uncompressed + +statement ok +CREATE TABLE test_table ( + id INTEGER, + emb FLOAT[], + emb_arr FLOAT[3] +); + +statement ok +INSERT INTO test_table (id) VALUES (42); + +statement ok +CHECKPOINT; + +query III +FROM test_table +---- +42 NULL NULL + +statement ok +DROP TABLE test_table + +statement ok +SET force_compression='${compression}' + +endloop diff --git a/test/sql/storage/vacuum/repeated_deletes_and_checkpoints.test_slow b/test/sql/storage/vacuum/repeated_deletes_and_checkpoints.test_slow new file mode 100644 index 000000000000..a4baa528ef1f --- /dev/null +++ b/test/sql/storage/vacuum/repeated_deletes_and_checkpoints.test_slow @@ -0,0 +1,65 @@ +# name: test/sql/storage/vacuum/repeated_deletes_and_checkpoints.test_slow +# description: Test running repeated deletes and checkpoints +# group: [vacuum] + +load __TEST_DIR__/repeated_deletes_and_checkpoints.db + +statement ok +CREATE TABLE test (pk INT); + +statement ok +INSERT INTO test SELECT * FROM generate_series(0, 1000000); + +statement ok +CHECKPOINT; + +restart + +query I +DELETE FROM test WHERE pk > 738645 AND pk < 978908; +---- +240262 + +query II +SELECT COUNT(*), SUM(pk) FROM test; +---- +759739 293669140557 + +restart + +query I +DELETE FROM test WHERE pk > 282475 AND pk < 522738; +---- +240262 + +query II +SELECT COUNT(*), SUM(pk) FROM test; +---- +519477 196938097654 + +restart + +query I +INSERT INTO test SELECT * FROM generate_series(1201414, 1201514); +---- +101 + +query II +SELECT COUNT(*), SUM(pk) FROM test; +---- +519578 197059445518 + +restart + +query II +SELECT COUNT(*), SUM(pk) FROM test; +---- +519578 197059445518 + +statement ok +CHECKPOINT; + +query II +SELECT COUNT(*), SUM(pk) FROM test; +---- +519578 197059445518 diff --git a/test/sql/storage_version/storage_version.db b/test/sql/storage_version/storage_version.db index 1d6077c5b886..c816c3c219ae 100644 Binary files a/test/sql/storage_version/storage_version.db and b/test/sql/storage_version/storage_version.db differ diff --git a/test/sql/subquery/scalar/test_correlated_subquery.test b/test/sql/subquery/scalar/test_correlated_subquery.test index dc8cb558590b..da27f83ad4a3 100644 --- a/test/sql/subquery/scalar/test_correlated_subquery.test +++ b/test/sql/subquery/scalar/test_correlated_subquery.test @@ -9,13 +9,10 @@ statement ok PRAGMA enable_verification statement ok -CREATE TABLE integers(i INTEGER) +CREATE TABLE integers(i INTEGER); statement ok -INSERT INTO integers VALUES (1), (2), (3), (NULL) - -# temporary solution until decorrelation of materialized CTEs is implemented -require noalternativeverify +INSERT INTO integers VALUES (1), (2), (3), (NULL); # scalar select with correlation query II @@ -98,6 +95,21 @@ NULL NULL 2 3 3 4 +# subquery with OFFSET and without LIMIT +query I +select (select val + i from generate_series(1, 2, 1) t(i) offset 1) from (select 42 val) t; +---- +44 + +# subquery with OFFSET and without LIMIT with ORDER BY +query II +select i, (select i1.i + i + i from generate_series(1, 100, 1) t(i) ORDER BY i DESC OFFSET 99) from integers i1 order by i; +---- +NULL NULL +1 3 +2 4 +3 5 + # subquery with ORDER BY query II SELECT i, (SELECT i+i1.i FROM integers ORDER BY i NULLS LAST LIMIT 1) AS j FROM integers i1 ORDER BY i; diff --git a/test/sql/subquery/table/test_unnamed_subquery.test b/test/sql/subquery/table/test_unnamed_subquery.test index 4014d26eb514..39c3cac51650 100644 --- a/test/sql/subquery/table/test_unnamed_subquery.test +++ b/test/sql/subquery/table/test_unnamed_subquery.test @@ -19,3 +19,27 @@ query II SELECT * FROM (VALUES (42, 43)) ---- 42 43 + +# longer chains +query IIII +SELECT * FROM (SELECT 42 a), (SELECT 43 b), (SELECT 44 c), (SELECT 45 d) +---- +42 43 44 45 + +# nested +query IIII +SELECT * FROM (FROM (SELECT 42 a), (SELECT 43 b)) JOIN (SELECT 44 c) ON (true) JOIN (SELECT 45 d) ON (true) +---- +42 43 44 45 + +# names are predictable +query II +SELECT * FROM (SELECT unnamed_subquery.a FROM (SELECT 42 a)), (SELECT unnamed_subquery.b FROM (SELECT 43 b)) +---- +42 43 + +# names are predictable +query II +SELECT unnamed_subquery.a, unnamed_subquery2.b FROM (SELECT 42 a), (SELECT 43 b) +---- +42 43 diff --git a/test/sql/timezone/test_icu_timezone.test b/test/sql/timezone/test_icu_timezone.test index 605c418600af..e3effef48f63 100644 --- a/test/sql/timezone/test_icu_timezone.test +++ b/test/sql/timezone/test_icu_timezone.test @@ -4,6 +4,9 @@ require icu +#FIXME: There are currently some problems with this test due to differences East cost / West cost +mode skip + statement ok SET Calendar = 'gregorian'; @@ -92,14 +95,16 @@ SELECT '2001-02-16 20:38:40-05'::TIMESTAMPTZ AT TIME ZONE NULL; ---- NULL +mode skip + # Normalise to TZ, add interval, then set offset -query I +query I select '12:15:37.123456-08'::TIMETZ AT TIME ZONE 'America/New_York'; ---- 15:15:37.123456-05 query I -select timezone('America/New_York', '12:15:37.123456-08'::TIMETZ); +select timezone('America/New_York', '12:15:37.123456-08'::TIMETZ); ---- 15:15:37.123456-05 diff --git a/test/sql/types/list/unnest_null_empty.test b/test/sql/types/list/unnest_null_empty.test index 2c11ed552006..89baf223750d 100644 --- a/test/sql/types/list/unnest_null_empty.test +++ b/test/sql/types/list/unnest_null_empty.test @@ -70,7 +70,7 @@ ORDER BY r, n; 1 [1, 2, 3] 3 2 [4] 4 -query II rowsort +query II WITH t AS ( SELECT 1 AS r, ARRAY[1, 2, 3] AS a UNION SELECT 2 AS r, ARRAY[4] AS a @@ -84,7 +84,7 @@ ORDER BY r, a.value 1 3 2 4 -query II rowsort +query II WITH t AS ( SELECT 1 AS r, ARRAY[1, 2, 3] AS a UNION SELECT 2 AS r, ARRAY[4] AS a @@ -104,7 +104,7 @@ CREATE TABLE t AS SELECT 5 AS r, ARRAY[1, 2, 3] AS a; statement ok INSERT INTO t VALUES (6, [4]), (7, NULL); -query II rowsort +query II SELECT r, a.value FROM t, UNNEST(a) AS a(value) ORDER BY r, a.value @@ -114,7 +114,7 @@ ORDER BY r, a.value 5 3 6 4 -query II rowsort +query II WITH t AS ( SELECT 5 AS r, ARRAY[1, 2, 3] AS a UNION SELECT 6 AS r, ARRAY[4] AS a diff --git a/test/sql/types/map/map_const_and_col_combination.test b/test/sql/types/map/map_const_and_col_combination.test index aa2675608f2a..deabbdf51020 100644 --- a/test/sql/types/map/map_const_and_col_combination.test +++ b/test/sql/types/map/map_const_and_col_combination.test @@ -1,67 +1,69 @@ # name: test/sql/types/map/map_const_and_col_combination.test -# description: Test creating map when one list is const and the other list columnar data +# description: Test MAP creation if one list is a constant and the other list contains columnar data # group: [map] statement ok -create table ints (i INT); +PRAGMA enable_verification; statement ok -INSERT INTO ints VALUES (1),(2),(3); +CREATE TABLE ints (i INT); + +statement ok +INSERT INTO ints VALUES (1), (2), (3); query I -select map(['name'], [i] ) FROM ints; +SELECT MAP(['name'], [i]) FROM ints; ---- {name=1} {name=2} {name=3} statement error -select map(['x', 'y'], [i] ) FROM ints; +SELECT MAP(['x', 'y'], [i] ) FROM ints; ---- -Error in MAP creation: key list and value list do not align. i.e. different size or incompatible structure +The map key list does not align with the map value list query I -select map([i], ['name'] ) FROM ints; +SELECT MAP([i], ['name'] ) FROM ints; ---- {1=name} {2=name} {3=name} query I -select map([i, i+1], ['x', 'y']) FROM ints; +SELECT MAP([i, i+1], ['x', 'y']) FROM ints; ---- {1=x, 2=y} {2=x, 3=y} {3=x, 4=y} - query I -select map([i, i+1], ['x', 'y']) FROM ints WHERE i > 1; +SELECT MAP([i, i+1], ['x', 'y']) FROM ints WHERE i > 1; ---- {2=x, 3=y} {3=x, 4=y} query I -select map(['x'], [m]) FROM (SELECT map([i], ['y']) m FROM ints WHERE i <> 1); +SELECT MAP(['x'], [m]) FROM (SELECT MAP([i], ['y']) m FROM ints WHERE i <> 1); ---- {x={2=y}} {x={3=y}} query I -select map(['key'], [range]) from range(5) WHERE range > 2; +SELECT MAP(['key'], [range]) FROM range(5) WHERE range > 2; ---- {key=3} {key=4} query I -select map(['🦆', '🦤', '🐓'], [i, i+1, i+2] ) FROM ints; +SELECT MAP(['🦆', '🦤', '🐓'], [i, i+1, i+2]) FROM ints; ---- {🦆=1, 🦤=2, 🐓=3} {🦆=2, 🦤=3, 🐓=4} {🦆=3, 🦤=4, 🐓=5} query I -SELECT map([10, i, i+1, 9], [i, 3.14, 0.12, 8.0]) FROM ints; +SELECT MAP([10, i, i+1, 9], [i, 3.14, 0.12, 8.0]) FROM ints; ---- {10=1.00, 1=3.14, 2=0.12, 9=8.00} {10=2.00, 2=3.14, 3=0.12, 9=8.00} @@ -71,26 +73,26 @@ statement ok CREATE TABLE tbl (v VARCHAR[]); statement ok -INSERT INTO tbl VALUES (ARRAY['test','string']), (ARRAY['foo','bar']) +INSERT INTO tbl VALUES (ARRAY['test', 'string']), (ARRAY['foo', 'bar']); query I -select map(['x', 'y'], v ) FROM tbl; +SELECT MAP(['x', 'y'], v ) FROM tbl; ---- {x=test, y=string} {x=foo, y=bar} -# test mismatched lists of same total length +# test mismatching lists of the same total length + statement ok -CREATE TABLE map_input (keys INT[], values INT[]) +CREATE TABLE MAP_input (keys INT[], values INT[]); statement ok -INSERT INTO map_input VALUES ([1,0],[2]), ([3],[4, 9]) +INSERT INTO MAP_input VALUES ([1, 0], [2]), ([3], [4, 9]); statement error -SELECT map(keys, values) FROM map_input; +SELECT MAP(keys, values) FROM MAP_input; ---- -Error in MAP creation: key list and value list do not align. i.e. different size or incompatible structure - +The map key list does not align with the map value list statement ok CREATE TABLE groups (category INT, score INT); @@ -99,14 +101,62 @@ statement ok INSERT INTO groups VALUES (1,2), (1,8), (1,3), (2,3), (2,4), (2,5), (3,6), (3,1), (3,9) query I -select map(['category', 'min', 'max'], [category, MIN(score), MAX(score)]) FROM groups GROUP BY category ORDER BY ALL; +SELECT MAP(['category', 'min', 'max'], [category, MIN(score), MAX(score)]) FROM groups GROUP BY category ORDER BY ALL; ---- {category=1, min=2, max=8} {category=2, min=3, max=5} {category=3, min=1, max=9} -#Map with larger-than-vector-size cardinalities +# test a MAP with larger-than-vector-size cardinalities + query I -select MAP([range], ['a']) FROM range(10000) WHERE range = 9999; +SELECT MAP([range], ['a']) FROM range(10000) WHERE range = 9999; ---- {9999=a} + +# the constant list has to align + +statement ok +CREATE TABLE align_tbl (i INT[]); + +statement ok +INSERT INTO align_tbl VALUES ([1, 2]), ([100, 200]); + +query I +SELECT MAP(['x', 'y'], i) FROM align_tbl; +---- +{x=1, y=2} +{x=100, y=200} + +statement ok +INSERT INTO align_tbl VALUES ([1, 2, 3, 4, 5, 6]), ([20, 30, 40, 50]); + +statement error +SELECT MAP(['x', 'y'], i) FROM align_tbl; +---- +The map key list does not align with the map value list + +statement error +SELECT MAP(['x', 'y', '1', '2', '3', '4'], i) FROM align_tbl; +---- +The map key list does not align with the map value list + +statement error +SELECT MAP(i, ['x', 'y']) FROM align_tbl; +---- +The map key list does not align with the map value list + +# test all const + +statement ok +CREATE TABLE allconst (i INT); + +statement ok +INSERT INTO allconst VALUES (1), (2), (3); + +query I +SELECT MAP(['name'], [2]) FROM allconst; +---- +{name=2} +{name=2} +{name=2} diff --git a/test/sql/types/nested/array/array_cast.test b/test/sql/types/nested/array/array_cast.test index 7eae912430f6..9c8abcda0260 100644 --- a/test/sql/types/nested/array/array_cast.test +++ b/test/sql/types/nested/array/array_cast.test @@ -161,3 +161,9 @@ query I SELECT '[1, 2, 3]'::INTEGER[3] ---- [1, 2, 3] + +# Handle wonky try-casts +query I +SELECT TRY_CAST(l AS INTEGER[][3]) FROM VALUES (['foo']) as v(l); +---- +NULL \ No newline at end of file diff --git a/test/sql/types/nested/array/array_roundtrip_csv.test b/test/sql/types/nested/array/array_roundtrip_csv.test index 4f90c335f704..4247391dd0d4 100644 --- a/test/sql/types/nested/array/array_roundtrip_csv.test +++ b/test/sql/types/nested/array/array_roundtrip_csv.test @@ -11,7 +11,7 @@ statement ok CREATE OR REPLACE TABLE arrays2 (a INTEGER[3]) statement ok -COPY (SELECT [range, range + 1, range + 2] a FROM range(3)) TO '__TEST_DIR__/arrays_csv_test.csv' WITH (HEADER false) +COPY (SELECT [range, range + 1, range + 2] a FROM range(3)) TO '__TEST_DIR__/arrays_csv_test.csv' statement ok COPY arrays2 FROM '__TEST_DIR__/arrays_csv_test.csv' diff --git a/test/sql/types/nested/list/test_list_slice_negative_step.test b/test/sql/types/nested/list/test_list_slice_negative_step.test index f0ed544f98a7..1e47765b86e2 100644 --- a/test/sql/types/nested/list/test_list_slice_negative_step.test +++ b/test/sql/types/nested/list/test_list_slice_negative_step.test @@ -73,3 +73,23 @@ select a[start:-:step] from tbl; [5, 1] [2] [1] + +# bug found in PR10587 +query II +SELECT + arr, + list_concat(arr[1:-:2], arr) +FROM (SELECT [1,2,3,4,5]) AS _(arr); +---- +[1, 2, 3, 4, 5] [1, 3, 5, 1, 2, 3, 4, 5] + +query II +SELECT + arr, + list_concat(arr[1:-:2], arr) +FROM (SELECT a FROM tbl) AS _(arr); +---- +[1, 2, 3, 4, 5] [1, 3, 5, 1, 2, 3, 4, 5] +[1, 4, 5, 6, 7, 8] [1, 5, 7, 1, 4, 5, 6, 7, 8] +[1, 2, 3, 4, 5] [1, 3, 5, 1, 2, 3, 4, 5] +[1, 2, 3, 4, 5] [1, 3, 5, 1, 2, 3, 4, 5] diff --git a/test/sql/types/nested/map/map_error.test b/test/sql/types/nested/map/map_error.test new file mode 100644 index 000000000000..315a1620ea7a --- /dev/null +++ b/test/sql/types/nested/map/map_error.test @@ -0,0 +1,92 @@ +# name: test/sql/types/nested/map/map_error.test +# description: Test map queries triggering various error messages +# group: [map] + +statement ok +PRAGMA enable_verification; + +statement error +SELECT MAP(list_value(NULL, NULL, NULL, NULL, NULL), list_value(10, 9, 10, 11, 13)) +---- +Map keys can not be NULL + +statement error +SELECT MAP(list_value(1, NULL, 3), list_value(6, 5, 4)) +---- +Map keys can not be NULL + +statement error +SELECT MAP(list_value(1, 2, 3, 4, 1), list_value(10, 9, 8, 7, 6)) +---- +Map keys must be unique + +statement error +SELECT MAP(NULL) +---- +Invalid map argument(s) + +statement ok +CREATE TABLE tbl (a INTEGER[], b TEXT[]) + +statement ok +INSERT INTO tbl VALUES (ARRAY[7, 5, 7], ARRAY['a', 'b', 'c']) + +statement error +SELECT MAP(a, b) FROM tbl; +---- +Map keys must be unique + +statement error +SELECT MAP(list_value(10), list_value()) +---- +The map key list does not align with the map value list + +statement error +SELECT MAP(10, 12) +---- +Invalid map argument(s) + +statement error +SELECT MAP(list_value(10), list_value(10), list_value(10)) +---- +Invalid map argument(s) + +statement error +SELECT MAP(list_value(10), 10) +---- +Invalid map argument(s) + +statement error +SELECT MAP(list_value(10, 20), list_value(10)) +---- +The map key list does not align with the map value list + +statement ok +CREATE TABLE t AS SELECT MAP(list_value(1, 2, 3), list_value(10, 9, 10)) AS m; + +statement error +SELECT struct_extract(m, 'key') FROM t; +---- +No function matches the given name and argument types + +statement ok +CREATE TABLE null_keys_list (k INT[], v INT[]); + +statement ok +INSERT INTO null_keys_list VALUES ([1], [2]), (NULL, [4]); + +statement error +SELECT MAP(k, v) FROM null_keys_list; +---- +The list of map keys must not be NULL. + +statement ok +CREATE TABLE null_values_list (k INT[], v INT[]); + +statement ok +INSERT INTO null_values_list VALUES ([1], [2]), ([4], NULL); + +statement error +SELECT MAP(k, v) FROM null_values_list; +---- +The list of map values must not be NULL. \ No newline at end of file diff --git a/test/sql/types/nested/map/test_map.test b/test/sql/types/nested/map/test_map.test index 135ddc7f6601..a7afe64b5426 100644 --- a/test/sql/types/nested/map/test_map.test +++ b/test/sql/types/nested/map/test_map.test @@ -5,61 +5,47 @@ statement ok PRAGMA enable_verification -# All keys are NULL -statement error -select m[NULL] from (select MAP(LIST_VALUE(NULL, NULL, NULL,NULL,NULL ),LIST_VALUE(10,9,10,11,13)) as m) as T ----- +# constant maps query I -SELECT MAP(LIST_VALUE({'i':1,'j':2},{'i':3,'j':4}),LIST_VALUE({'i':1,'j':2},{'i':3,'j':4})) as a +SELECT MAP(list_value(1, 2, 3), list_value(10, 9, 8)) ---- -{{'i': 1, 'j': 2}={'i': 1, 'j': 2}, {'i': 3, 'j': 4}={'i': 3, 'j': 4}} +{1=10, 2=9, 3=8} -# Some keys are NULL -statement error -select MAP(LIST_VALUE(1,NULL,3), LIST_VALUE(6,5,4)) +query I +SELECT MAP(list_value({'i':1,'j':2}, {'i':3,'j':4}), list_value({'i':1,'j':2}, {'i':3,'j':4})) ---- +{{'i': 1, 'j': 2}={'i': 1, 'j': 2}, {'i': 3, 'j': 4}={'i': 3, 'j': 4}} query I -select MAP(LIST_VALUE(1,2,3), LIST_VALUE(6,NULL,4)) +SELECT MAP(list_value(1, 2, 3), list_value(6, NULL, 4)) ---- {1=6, 2=NULL, 3=4} query I -select MAP(LIST_VALUE(1, 2, 3, 4),LIST_VALUE(10, 9, 8, 7)) +SELECT MAP(list_value(1, 2, 3, 4), list_value(10, 9, 8, 7)) ---- {1=10, 2=9, 3=8, 4=7} +# empty maps -# Keys have to be unique -statement error -select MAP(LIST_VALUE(1,2,3,4,1),LIST_VALUE(10,9,8,7,6)) ----- - -# Empty maps query I -select MAP(LIST_VALUE(),LIST_VALUE()) +SELECT MAP(list_value(), list_value()) ---- {} query I -select MAP() +SELECT MAP() ---- {} -statement error -select MAP(NULL) ----- +# maps from columns -# Test making MAPs from columns statement ok -CREATE TABLE tbl ( - a INTEGER[], - b TEXT[], -); +CREATE TABLE tbl (a INTEGER[], b TEXT[]) statement ok -INSERT INTO tbl VALUES (ARRAY[5,7], ARRAY['test','string']), (ARRAY[6,3], ARRAY['foo','bar']) +INSERT INTO tbl VALUES (ARRAY[5, 7], ARRAY['test', 'string']), (ARRAY[6, 3], ARRAY['foo', 'bar']) query I SELECT MAP(a, b) FROM tbl; @@ -67,11 +53,11 @@ SELECT MAP(a, b) FROM tbl; {5=test, 7=string} {6=foo, 3=bar} -# Check unique exception with columns +# same map keys in different maps (rows) + statement ok -INSERT INTO tbl VALUES (ARRAY[5,7], ARRAY['also_test', 'also_string']) +INSERT INTO tbl VALUES (ARRAY[5, 7], ARRAY['also_test', 'also_string']) -# Unique between rows, should work query I SELECT MAP(a, b) FROM tbl; ---- @@ -79,46 +65,7 @@ SELECT MAP(a, b) FROM tbl; {6=foo, 3=bar} {5=also_test, 7=also_string} -statement ok -INSERT INTO tbl VALUES (ARRAY[7,5,7], ARRAY['a', 'b', 'c']) - -# Keys are not unique for one of the rows -statement error -SELECT MAP(a, b) FROM tbl; ----- - -# Lists with different size are FORBIDDEN -statement error -select MAP(LIST_VALUE(10),LIST_VALUE()) ----- - query I -select MAP(LIST_VALUE([1],[2],[3],[4]),LIST_VALUE(10,9,8,7)) ----- -{[1]=10, [2]=9, [3]=8, [4]=7} - -# Maps that are not initialized empty or with lists are FORBIDDEN -# Map where the 2 entries are not lists -statement error -select MAP(10,12) ----- - -# Map function called with more than 2 lists -statement error -select MAP(LIST_VALUE(10),LIST_VALUE(10),LIST_VALUE(10)) ----- - -# Map where 1 of the 2 entries is not a list -statement error -select MAP(LIST_VALUE(10),10) ----- - -#Map with unbalanced list cardinalities -statement error -select MAP(LIST_VALUE(10,20),LIST_VALUE(10)) ----- - -#Can't struct extract from a map -statement error -select struct_extract(m,'key') from (select MAP(LIST_VALUE(NULL, NULL, NULL,NULL,NULL ),LIST_VALUE(10,9,10,11,13)) as m) as T +SELECT MAP(list_value([1], [2], [3], [4]), list_value(10, 9, 8, 7)) ---- +{[1]=10, [2]=9, [3]=8, [4]=7} \ No newline at end of file diff --git a/test/sql/types/nested/map/test_map_and_lambdas.test b/test/sql/types/nested/map/test_map_and_lambdas.test new file mode 100644 index 000000000000..b57918fd69d4 --- /dev/null +++ b/test/sql/types/nested/map/test_map_and_lambdas.test @@ -0,0 +1,16 @@ +# name: test/sql/types/nested/map/test_map_and_lambdas.test +# description: Test MAP functionality in lambda functions +# group: [map] + +statement ok +PRAGMA enable_verification + +statement ok +CREATE TABLE i AS SELECT str_split('my yay', ' ') AS l, range AS i FROM range(3); + +query I +SELECT list_transform(l, x -> {'map1': MAP {x::VARCHAR:1::VARCHAR, 'b'::VARCHAR: x::VARCHAR}}) FROM i; +---- +[{'map1': {my=1, b=my}}, {'map1': {yay=1, b=yay}}] +[{'map1': {my=1, b=my}}, {'map1': {yay=1, b=yay}}] +[{'map1': {my=1, b=my}}, {'map1': {yay=1, b=yay}}] \ No newline at end of file diff --git a/test/sql/types/nested/map/test_map_concat.test b/test/sql/types/nested/map/test_map_concat.test index 27d154b13851..ce4a9ed5312f 100644 --- a/test/sql/types/nested/map/test_map_concat.test +++ b/test/sql/types/nested/map/test_map_concat.test @@ -1,8 +1,7 @@ # name: test/sql/types/nested/map/test_map_concat.test # group: [map] -#statement ok -#pragma enable_verification; +# NOTE: PRAGMA enable_verification significantly increases the duration of this test # Basic use, 2 maps, same type, no nulls query I diff --git a/test/sql/types/nested/map/test_map_keys.test b/test/sql/types/nested/map/test_map_keys.test index 27cf4359695a..0a5b70c5f4ff 100644 --- a/test/sql/types/nested/map/test_map_keys.test +++ b/test/sql/types/nested/map/test_map_keys.test @@ -2,7 +2,7 @@ # group: [map] statement ok -pragma enable_verification; +PRAGMA enable_verification; # Empty query I diff --git a/test/sql/types/nested/map/test_map_subscript_composite.test b/test/sql/types/nested/map/test_map_subscript_composite.test index 6faa93342c20..d6c320b9ebc5 100644 --- a/test/sql/types/nested/map/test_map_subscript_composite.test +++ b/test/sql/types/nested/map/test_map_subscript_composite.test @@ -29,7 +29,7 @@ select m[NULL] from (select MAP(LIST_VALUE({a:3}, {a:4}, {a:5}, {a:6},{a:7}),LIS statement error select m[2] from (select MAP(LIST_VALUE([2,2], [2], [3,3], [4,4,4],[2]),LIST_VALUE(10, 9, 8, 7,11)) as m) as T ---- -Invalid Input Error: Map keys have to be unique +Map keys must be unique # Check autocast query I @@ -47,7 +47,7 @@ select m[[10,11]] from (select MAP(lst,lst) as m from (SELECT LIST([i,i+1]) as l statement error select m[[1]] from (select MAP(LIST_VALUE([1], [1], [1], [4]),LIST_VALUE(10, 9, 8, 7)) as m) as T ---- -Invalid Input Error: Map keys have to be unique +Map keys must be unique query I select m[['Tenacious D', 'test']] from (select MAP(LIST_VALUE(['Jon Lajoie'], ['test', NULL], ['Tenacious D', 'test'], ['test', 'Tenacious D']),LIST_VALUE(5,10,9,11)) as m) as T diff --git a/test/sql/types/test_all_types.test_slow b/test/sql/types/test_all_types.test_slow index 18fb121eefb0..7d6facc7a373 100644 --- a/test/sql/types/test_all_types.test_slow +++ b/test/sql/types/test_all_types.test_slow @@ -5,18 +5,18 @@ statement ok PRAGMA enable_verification -query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII +query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII SELECT * FROM test_all_types(); ---- -False -128 -32768 -2147483648 -9223372036854775808 -170141183460469231731687303715884105728 0 0 0 0 0 5877642-06-25 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 1677-09-21 00:12:43.145225 00:00:00+15:59:59 290309-12-22 (BC) 00:00:00+00 -340282346638528859811704183484516925440.000000 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -999.9 -99999.9999 -999999999999.999999 -9999999999999999999999999999.9999999999 00000000-0000-0000-0000-000000000000 00:00:00 🦆🦆🦆🦆🦆🦆 thisisalongblob\x00withnullbytes 0010001001011100010101011010111 DUCK_DUCK_ENUM enum_0 enum_0 [] [] [] [] [] [] [] {'a': NULL, 'b': NULL} {'a': NULL, 'b': NULL} [] {} Frank -True 127 32767 2147483647 9223372036854775807 170141183460469231731687303715884105727 340282366920938463463374607431768211455 255 65535 4294967295 18446744073709551615 5881580-07-10 24:00:00 294247-01-10 04:00:54.775806 294247-01-10 04:00:54 294247-01-10 04:00:54.775 2262-04-11 23:47:16.854775 24:00:00-15:59:59 294247-01-10 04:00:54.775806+00 340282346638528859811704183484516925440.000000 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 999.9 99999.9999 999999999999.999999 9999999999999999999999999999.9999999999 ffffffff-ffff-ffff-ffff-ffffffffffff 83 years 3 months 999 days 00:16:39.999999 goo\0se \x00\x00\x00a 10101 GOOSE enum_299 enum_69999 [42, 999, NULL, NULL, -42] [42.0, nan, inf, -inf, NULL, -42.0] [1970-01-01, infinity, -infinity, NULL, 2022-05-12] [1970-01-01 00:00:00, infinity, -infinity, NULL, 2022-05-12 16:23:45] [1970-01-01 00:00:00+00, infinity, -infinity, NULL, 2022-05-12 23:23:45+00] [🦆🦆🦆🦆🦆🦆, goose, NULL, ] [[], [42, 999, NULL, NULL, -42], NULL, [], [42, 999, NULL, NULL, -42]] {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆} {'a': [42, 999, NULL, NULL, -42], 'b': [🦆🦆🦆🦆🦆🦆, goose, NULL, ]} [{'a': NULL, 'b': NULL}, {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆}, NULL] {key1=🦆🦆🦆🦆🦆🦆, key2=goose} 5 -NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL +False -128 -32768 -2147483648 -9223372036854775808 -170141183460469231731687303715884105728 0 0 0 0 0 5877642-06-25 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 290309-12-22 (BC) 00:00:00 1677-09-21 00:12:43.145225 00:00:00+15:59:59 290309-12-22 (BC) 00:00:00+00 -340282346638528859811704183484516925440.000000 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 -999.9 -99999.9999 -999999999999.999999 -9999999999999999999999999999.9999999999 00000000-0000-0000-0000-000000000000 00:00:00 🦆🦆🦆🦆🦆🦆 thisisalongblob\x00withnullbytes 0010001001011100010101011010111 DUCK_DUCK_ENUM enum_0 enum_0 [] [] [] [] [] [] [] {'a': NULL, 'b': NULL} {'a': NULL, 'b': NULL} [] {} Frank [NULL, 2, 3] [a, NULL, c] [[NULL, 2, 3], NULL, [NULL, 2, 3]] [[a, NULL, c], NULL, [a, NULL, c]] [{'a': NULL, 'b': NULL}, {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆}, {'a': NULL, 'b': NULL}] {'a': [NULL, 2, 3], 'b': [a, NULL, c]} [[], [42, 999, NULL, NULL, -42], []] [[NULL, 2, 3], [4, 5, 6], [NULL, 2, 3]] +True 127 32767 2147483647 9223372036854775807 170141183460469231731687303715884105727 340282366920938463463374607431768211455 255 65535 4294967295 18446744073709551615 5881580-07-10 24:00:00 294247-01-10 04:00:54.775806 294247-01-10 04:00:54 294247-01-10 04:00:54.775 2262-04-11 23:47:16.854775 24:00:00-15:59:59 294247-01-10 04:00:54.775806+00 340282346638528859811704183484516925440.000000 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 999.9 99999.9999 999999999999.999999 9999999999999999999999999999.9999999999 ffffffff-ffff-ffff-ffff-ffffffffffff 83 years 3 months 999 days 00:16:39.999999 goo\0se \x00\x00\x00a 10101 GOOSE enum_299 enum_69999 [42, 999, NULL, NULL, -42] [42.0, nan, inf, -inf, NULL, -42.0] [1970-01-01, infinity, -infinity, NULL, 2022-05-12] [1970-01-01 00:00:00, infinity, -infinity, NULL, 2022-05-12 16:23:45] [1970-01-01 00:00:00+00, infinity, -infinity, NULL, 2022-05-12 23:23:45+00] [🦆🦆🦆🦆🦆🦆, goose, NULL, ] [[], [42, 999, NULL, NULL, -42], NULL, [], [42, 999, NULL, NULL, -42]] {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆} {'a': [42, 999, NULL, NULL, -42], 'b': [🦆🦆🦆🦆🦆🦆, goose, NULL, ]} [{'a': NULL, 'b': NULL}, {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆}, NULL] {key1=🦆🦆🦆🦆🦆🦆, key2=goose} 5 [4, 5, 6] [d, e, f] [[4, 5, 6], [NULL, 2, 3], [4, 5, 6]] [[d, e, f], [a, NULL, c], [d, e, f]] [{'a': 42, 'b': 🦆🦆🦆🦆🦆🦆}, {'a': NULL, 'b': NULL}, {'a': 42, 'b': 🦆🦆🦆🦆🦆🦆}] {'a': [4, 5, 6], 'b': [d, e, f]} [[42, 999, NULL, NULL, -42], [], [42, 999, NULL, NULL, -42]] [[4, 5, 6], [NULL, 2, 3], [4, 5, 6]] +NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL statement ok CREATE TABLE all_types AS SELECT * FROM test_all_types(); -query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII nosort r1 +query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII nosort r1 SELECT * FROM test_all_types(); -query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII nosort r1 +query IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII nosort r1 SELECT * FROM all_types; diff --git a/test/sql/types/timestamp/infinity_cast_coverage.test b/test/sql/types/timestamp/infinity_cast_coverage.test new file mode 100644 index 000000000000..5cd5bbbf5240 --- /dev/null +++ b/test/sql/types/timestamp/infinity_cast_coverage.test @@ -0,0 +1,30 @@ +# name: test/sql/types/timestamp/infinity_cast_coverage.test +# description: Test casting to TIMESTAMP WITH TIME ZONE from any unit +# group: [timestamp] + +statement ok +pragma enable_verification; + +require icu + +foreach infinity_string infinity -infinity + +foreach base_type TIMESTAMP TIMESTAMP_MS TIMESTAMP_NS TIMESTAMP_S TIMESTAMPTZ + +# FIXME: this should be expanded with the other base types +# Conversion Error: Unimplemented type for cast (TIMESTAMP_MS -> TIMESTAMP_S) +foreach target_type TIMESTAMPTZ TIMESTAMP + +query I +select '${infinity_string}'::${base_type}::${target_type} == '${infinity_string}' +---- +true + +# target_type +endloop + +# base_type +endloop + +# infinity_string +endloop diff --git a/test/sql/types/timestamp/test_timestamp_to_tz_cast.test b/test/sql/types/timestamp/test_timestamp_to_tz_cast.test new file mode 100644 index 000000000000..fd0afc1857b9 --- /dev/null +++ b/test/sql/types/timestamp/test_timestamp_to_tz_cast.test @@ -0,0 +1,244 @@ +# name: test/sql/types/timestamp/test_timestamp_to_tz_cast.test +# description: Test casting to TIMESTAMP WITH TIME ZONE from any unit +# group: [timestamp] + +require icu + +statement ok +PRAGMA enable_verification + +# Note: this also contains TIMESTAMP_NS +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +# Basic value +statement ok +create table ts_${unit}_tbl_1 as from VALUES + ('1990/12/21'::${unit}) +as t(ts); + +# NULL +statement ok +create table ts_${unit}_tbl_null as FROM VALUES + (NULL::${unit}) +as t(ts); + +# Positive infinity +statement ok +create table ts_${unit}_tbl_posinf as from VALUES + ('infinity'::${unit}) +as t(ts); + +# Negative infinity +statement ok +create table ts_${unit}_tbl_mininf as from VALUES + ('-infinity'::${unit}) +as t(ts); + +endloop + +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +# Extreme positive +statement ok +create table ts_${unit}_tbl_2 as from VALUES + ('294247-01-10'::${unit}) +as t(ts); + +# Extreme negative +statement ok +create table ts_${unit}_tbl_3 as from VALUES + ('29720-04-05 (BC) 22:13:20'::${unit}) +as t(ts); + +endloop + +statement ok +SET Calendar='gregorian'; + +# ---------------- UTC ---------------- + +statement ok +SET TimeZone='UTC'; + +# Table 1 | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_utc_1 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_1; +---- + +endloop + +# Table 2 | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_utc_2 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_2; +---- + +endloop + +# Table 3 | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_utc_3 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_3; +---- + +endloop + +# Table +inf | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_posinf; +---- +infinity infinity + +endloop + +# Table -inf | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_mininf; +---- +-infinity -infinity + +endloop + +# Table NULL | UTC +0 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_utc_null +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_null; +---- + +endloop + +# ---------------- America / Los Angeles ---------------- + +statement ok +SET TimeZone='America/Los_Angeles' + +# Table 1 | America -7/8 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_america_1 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_1; +---- + +endloop + +# Table 2 | America -7/8 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +# This timestamp is near the end of the valid range, this timezone would overflow the value +statement error +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_2; +---- +Conversion Error: Unable to convert ICU date to timestamp + +endloop + +# Table 3 | America -7/8 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_america_3 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_3; +---- + +endloop + +# Table +inf | America -7/8 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_posinf; +---- +infinity infinity + +endloop + +# Table -inf | America -7/8 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_mininf; +---- +-infinity -infinity + +endloop + +# Table NULL | America -7/8 + +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_america_null +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_null; +---- + +endloop + +# ---------------- ETC ---------------- + +statement ok +SET TimeZone='Etc/GMT-6' + +# Table 1 | ETC +6 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_etc_1 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_1; +---- + +endloop + +# Table 2 | ETC +6 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_etc_2 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_2; +---- + +endloop + +# Table 3 | ETC +6 +foreach unit TIMESTAMP TIMESTAMP_MS TIMESTAMP_S + +# FIXME: I would expect this to overflow??? +query II nosort result_etc_3 +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_3; +---- + +endloop + +# Table +inf | ETC +6 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_posinf; +---- +infinity infinity + +endloop + +# Table -inf | ETC +6 +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_mininf; +---- +-infinity -infinity + +endloop + +# Table NULL | ETC +6 + +foreach unit TIMESTAMP TIMESTAMP_NS TIMESTAMP_MS TIMESTAMP_S + +query II nosort result_etc_null +select ts as base, base::TIMESTAMPTZ as tstz from ts_${unit}_tbl_null; +---- + +endloop diff --git a/test/sql/upsert/insert_or_replace/pk_and_non_unique_index.test b/test/sql/upsert/insert_or_replace/pk_and_non_unique_index.test new file mode 100644 index 000000000000..f7fd8d89919d --- /dev/null +++ b/test/sql/upsert/insert_or_replace/pk_and_non_unique_index.test @@ -0,0 +1,25 @@ +# name: test/sql/upsert/insert_or_replace/pk_and_non_unique_index.test +# group: [insert_or_replace] + +# Single primary key on multiple columns (with non-unique INDEX) +statement ok +create table tbl( + a int, + b int, + c int, + primary key(a,b,c) +); + +statement ok +create index non_unique on tbl(b); + +statement ok +insert or replace into tbl values (1,2,3); + +statement ok +insert or replace into tbl values (1,2,3); + +query III +select * from tbl; +---- +1 2 3 diff --git a/test/sql/upsert/insert_or_replace/primary_key.test b/test/sql/upsert/insert_or_replace/primary_key.test new file mode 100644 index 000000000000..6d641bf9b9ce --- /dev/null +++ b/test/sql/upsert/insert_or_replace/primary_key.test @@ -0,0 +1,22 @@ +# name: test/sql/upsert/insert_or_replace/primary_key.test +# group: [insert_or_replace] + +# Single primary key on multiple columns +statement ok +create table tbl( + a int, + b int, + c int, + primary key(a,b,c) +); + +statement ok +insert or replace into tbl values (1,2,3); + +statement ok +insert or replace into tbl values (1,2,3); + +query III +select * from tbl; +---- +1 2 3 diff --git a/test/sql/upsert/insert_or_replace/returning.test b/test/sql/upsert/insert_or_replace/returning.test new file mode 100644 index 000000000000..ff653cf2504e --- /dev/null +++ b/test/sql/upsert/insert_or_replace/returning.test @@ -0,0 +1,24 @@ +# name: test/sql/upsert/insert_or_replace/returning.test +# group: [insert_or_replace] + +statement ok +create table foo( + bar text primary key, + baz bigint, +); + +query I +insert or replace into foo(bar, baz) values ('baz', 1) returning bar; +---- +baz + +query I +insert or replace into foo(bar, baz) values ('baz', 2) returning bar; +---- +baz + +query I +insert or replace into foo(bar, baz) values ('baz', 1), ('bar', 2) returning bar; +---- +baz +bar diff --git a/test/sql/upsert/insert_or_replace/unique_and_non_unique_index.test b/test/sql/upsert/insert_or_replace/unique_and_non_unique_index.test new file mode 100644 index 000000000000..2f8d082c6806 --- /dev/null +++ b/test/sql/upsert/insert_or_replace/unique_and_non_unique_index.test @@ -0,0 +1,27 @@ +# name: test/sql/upsert/insert_or_replace/unique_and_non_unique_index.test +# group: [insert_or_replace] + +# Single UNIQUE INDEX + non-unique INDEX +statement ok +create table tbl( + a int, + b int, + c int +); + +statement ok +create UNIQUE index "unique" on tbl(a, b); + +statement ok +create index non_unique on tbl(a, b); + +statement ok +insert or replace into tbl values (1,2,3); + +statement ok +insert or replace into tbl values (1,2,3); + +query III +select * from tbl; +---- +1 2 3 diff --git a/test/sql/upsert/insert_or_replace/unique_constraint.test b/test/sql/upsert/insert_or_replace/unique_constraint.test new file mode 100644 index 000000000000..efa0574c9272 --- /dev/null +++ b/test/sql/upsert/insert_or_replace/unique_constraint.test @@ -0,0 +1,33 @@ +# name: test/sql/upsert/insert_or_replace/unique_constraint.test +# group: [insert_or_replace] + +# Single UNIQUE CONSTRAINT +statement ok +create table tbl( + a int unique, + b int +); + +statement ok +insert or replace into tbl values(1, 2); + +statement ok +insert or replace into tbl values(1, 2); + +query II +select * from tbl; +---- +1 2 + +# Multiple UNIQUE CONSTRAINTs +statement ok +create table multiple_unique( + a int unique, + b int unique, + c int +); + +statement error +insert or replace into multiple_unique values(1, 2, 3); +---- +Binder Error: Conflict target has to be provided for a DO UPDATE operation when the table has multiple UNIQUE/PRIMARY KEY constraints diff --git a/test/sql/upsert/insert_or_replace/unique_constraint_and_non_unique_index.test b/test/sql/upsert/insert_or_replace/unique_constraint_and_non_unique_index.test new file mode 100644 index 000000000000..4acd520cb85e --- /dev/null +++ b/test/sql/upsert/insert_or_replace/unique_constraint_and_non_unique_index.test @@ -0,0 +1,36 @@ +# name: test/sql/upsert/insert_or_replace/unique_constraint_and_non_unique_index.test +# group: [insert_or_replace] + +# Single UNIQUE CONSTRAINT +statement ok +create table tbl( + a int unique, + b int +); + +statement ok +create index non_unique on tbl(a, b); + +statement ok +insert or replace into tbl values(1, 2); + +statement ok +insert or replace into tbl values(1, 2); + +query II +select * from tbl; +---- +1 2 + +# Multiple UNIQUE CONSTRAINTs +statement ok +create table multiple_unique( + a int unique, + b int unique, + c int +); + +statement error +insert or replace into multiple_unique values(1, 2, 3); +---- +Binder Error: Conflict target has to be provided for a DO UPDATE operation when the table has multiple UNIQUE/PRIMARY KEY constraints diff --git a/test/sql/upsert/insert_or_replace/unique_index.test b/test/sql/upsert/insert_or_replace/unique_index.test new file mode 100644 index 000000000000..5a06119702eb --- /dev/null +++ b/test/sql/upsert/insert_or_replace/unique_index.test @@ -0,0 +1,33 @@ +# name: test/sql/upsert/insert_or_replace/unique_index.test +# group: [insert_or_replace] + +# Single UNIQUE INDEX +statement ok +create table tbl( + a int, + b int, + c int +); + +statement ok +create UNIQUE index "unique" on tbl(a, b); + +statement ok +insert or replace into tbl values (1,2,3); + +statement ok +insert or replace into tbl values (1,2,3); + +query III +select * from tbl; +---- +1 2 3 + +# Multiple UNIQUE INDEXes +statement ok +create unique index idx3 on tbl(b, c); + +statement error +insert or replace into tbl values (1,2,3); +---- +Binder Error: Conflict target has to be provided for a DO UPDATE operation when the table has multiple UNIQUE/PRIMARY KEY constraints diff --git a/test/sql/upsert/insert_or_replace_ambiguity.test b/test/sql/upsert/insert_or_replace_ambiguity.test deleted file mode 100644 index 0e25f4ec3c41..000000000000 --- a/test/sql/upsert/insert_or_replace_ambiguity.test +++ /dev/null @@ -1,84 +0,0 @@ -# name: test/sql/upsert/insert_or_replace_ambiguity.test -# group: [upsert] - -# Single primary key on multiple columns -statement ok -create table single_pk( - a int, - b int, - c int, - primary key(a,b,c) -); - -statement ok -insert or replace into single_pk values (1,2,3); - -statement ok -insert or replace into single_pk values (1,2,3); - -query III -select * from single_pk; ----- -1 2 3 - -# Single UNIQUE INDEX -statement ok -create table using_index( - a int, - b int, - c int -); - -statement ok -create UNIQUE index idx2 on using_index(a, b); - -statement ok -insert or replace into using_index values (1,2,3); - -statement ok -insert or replace into using_index values (1,2,3); - -query III -select * from using_index; ----- -1 2 3 - -# Multiple UNIQUE INDEXes -statement ok -create unique index idx3 on using_index(b, c); - -statement error -insert or replace into using_index values (1,2,3); ----- -Binder Error: Conflict target has to be provided for a DO UPDATE operation when the table has multiple UNIQUE/PRIMARY KEY constraints - -# Single UNIQUE CONSTRAINT -statement ok -create table single_unique( - a int unique, - b int -); - -statement ok -insert or replace into single_unique values(1, 2); - -statement ok -insert or replace into single_unique values(1, 2); - -query II -select * from single_unique; ----- -1 2 - -# Multiple UNIQUE CONSTRAINTs -statement ok -create table multiple_unique( - a int unique, - b int unique, - c int -); - -statement error -insert or replace into multiple_unique values(1, 2, 3); ----- -Binder Error: Conflict target has to be provided for a DO UPDATE operation when the table has multiple UNIQUE/PRIMARY KEY constraints diff --git a/test/sql/window/test_range_optimisation.test b/test/sql/window/test_range_optimisation.test new file mode 100644 index 000000000000..f786a19ebf5c --- /dev/null +++ b/test/sql/window/test_range_optimisation.test @@ -0,0 +1,50 @@ +# name: test/sql/window/test_range_optimisation.test +# description: Range search optimisation stress tests +# group: [window] + +statement ok +CREATE TABLE rides ( + id INTEGER, + requested_date DATE, + city VARCHAR, + wait_time INTEGER +); + +statement ok +INSERT INTO rides VALUES + (0, '2023-01-05', 'San Francisco', 2925), + (1, '2023-01-03', 'San Francisco', 755), + (2, '2023-01-03', 'San Francisco', 2880), + (3, '2023-01-05', 'San Francisco', 1502), + (4, '2023-01-03', 'San Francisco', 2900), + (5, '2023-01-01', 'San Francisco', 1210), + (6, '2023-01-04', 'San Francisco', 200), + (7, '2023-01-02', 'San Francisco', 980), + (8, '2023-01-02', 'San Francisco', 430), + (9, '2023-01-05', 'San Francisco', 2999), + (10, '2023-01-01', 'San Francisco', 856), + (11, '2023-01-02', 'San Francisco', 490), + (12, '2023-01-02', 'San Francisco', 720), + +query IIIII +SELECT "id", "requested_date", "city", "wait_time", min("wait_time") OVER win_3d +FROM rides +WINDOW win_3d AS ( + PARTITION BY "city" + ORDER BY requested_date ASC + RANGE BETWEEN INTERVAL 3 DAYS PRECEDING AND INTERVAL 1 DAYS PRECEDING) +ORDER BY "requested_date", "city", "id" +---- +5 2023-01-01 San Francisco 1210 NULL +10 2023-01-01 San Francisco 856 NULL +7 2023-01-02 San Francisco 980 856 +8 2023-01-02 San Francisco 430 856 +11 2023-01-02 San Francisco 490 856 +12 2023-01-02 San Francisco 720 856 +1 2023-01-03 San Francisco 755 430 +2 2023-01-03 San Francisco 2880 430 +4 2023-01-03 San Francisco 2900 430 +6 2023-01-04 San Francisco 200 430 +0 2023-01-05 San Francisco 2925 200 +3 2023-01-05 San Francisco 1502 200 +9 2023-01-05 San Francisco 2999 200 diff --git a/test/sql/window/test_streaming_window_list.test_slow b/test/sql/window/test_streaming_window_list.test_slow new file mode 100644 index 000000000000..d156d869abc7 --- /dev/null +++ b/test/sql/window/test_streaming_window_list.test_slow @@ -0,0 +1,17 @@ +# name: test/sql/window/test_streaming_window_list.test_slow +# description: Streaming window with LIST aggregate +# group: [window] + +statement ok +select + list(row_number) over(rows between unbounded preceding and current row) +from generate_series(5000) t(row_number); + +query IIII +SELECT COUNT(*), SUM(LENGTH(list_aggr)), MIN(LENGTH(list_aggr)), MAX(LENGTH(list_aggr)) FROM ( +select + list(row_number) over(rows between unbounded preceding and current row) +from generate_series(5000) t(row_number) +) t(list_aggr) +---- +5001 12507501 1 5001 diff --git a/test/sql/window/test_window_fusion.test b/test/sql/window/test_window_fusion.test index 5d0cf859d72f..c95cc9b8a420 100644 --- a/test/sql/window/test_window_fusion.test +++ b/test/sql/window/test_window_fusion.test @@ -532,7 +532,7 @@ select l_orderkey, sum(l_extendedprice) over(partition by l_partkey order by l_orderkey desc), from lineitem -order by l_partkey, l_orderkey +order by l_partkey, l_orderkey, l_extendedprice desc ---- 29733.00 1 2883 607274.00 1802.00 1 5121 577541.00 @@ -598,7 +598,7 @@ select sum(l_extendedprice) over(partition by l_partkey order by l_orderkey), sum(l_extendedprice) over(partition by l_partkey order by l_orderkey desc), from lineitem -order by l_partkey, l_orderkey +order by l_partkey, l_orderkey, l_extendedprice desc ---- 29733.00 1 2883 607274.00 29733.00 607274.00 1802.00 1 5121 607274.00 31535.00 577541.00 @@ -667,7 +667,7 @@ select sum(l_extendedprice) over(order by l_partkey, l_orderkey), sum(l_extendedprice) over(partition by l_partkey order by l_orderkey desc), from lineitem -order by l_partkey, l_orderkey +order by l_partkey, l_orderkey, l_extendedprice desc ---- 29733.00 1 2883 1314442.00 607274.00 29733.00 607274.00 1802.00 1 5121 1314442.00 607274.00 31535.00 577541.00 diff --git a/test/sql/window/test_window_order_collate.test b/test/sql/window/test_window_order_collate.test index 04f67f40d7d8..cb41a9c925ec 100644 --- a/test/sql/window/test_window_order_collate.test +++ b/test/sql/window/test_window_order_collate.test @@ -1,5 +1,5 @@ # name: test/sql/window/test_window_order_collate.test -# description: Test collation is honoured by over(order by) +# description: Test collation is honoured by over(partition/order by) # group: [window] statement ok @@ -19,3 +19,29 @@ from ( 1 B [A, a, b, B] 1 a [A, a] 1 b [A, a, b, B] + +statement ok +CREATE TABLE db_city (name VARCHAR, city VARCHAR COLLATE NOCASE); + +statement ok +INSERT INTO db_city VALUES + ('DuckDB', 'Amsterdam'), + ('MonetDB','amsterdam'), + ('VectorWise', 'Amstërdam'); + + +query III rowsort +SELECT name, city, row_number() OVER (PARTITION BY city) AS row_id +FROM db_city; +---- +DuckDB Amsterdam 1 +MonetDB amsterdam 2 +VectorWise Amstërdam 1 + +query III rowsort +SELECT name, city, row_number() OVER (PARTITION BY city COLLATE NOCASE) AS row_id +FROM db_city; +---- +DuckDB Amsterdam 1 +MonetDB amsterdam 2 +VectorWise Amstërdam 1 diff --git a/test/sqlite/sqllogic_test_runner.cpp b/test/sqlite/sqllogic_test_runner.cpp index 76f44e32aedf..54d3d0d9c638 100644 --- a/test/sqlite/sqllogic_test_runner.cpp +++ b/test/sqlite/sqllogic_test_runner.cpp @@ -101,6 +101,9 @@ void SQLLogicTestRunner::Reconnect() { #ifdef DUCKDB_ALTERNATIVE_VERIFY con->Query("SET pivot_filter_threshold=0"); #endif + auto &client_config = ClientConfig::GetConfig(*con->context); + client_config.enable_progress_bar = true; + client_config.print_progress_bar = false; if (enable_verification) { con->EnableQueryVerification(); } @@ -642,6 +645,7 @@ void SQLLogicTestRunner::ExecuteFile(string script) { // This extension / setting was explicitly required parser.Fail(StringUtil::Format("require %s: FAILED", param)); } + SKIP_TEST("require " + token.parameters[0]); return; } } else if (token.type == SQLLogicTokenType::SQLLOGIC_REQUIRE_ENV) { @@ -657,6 +661,7 @@ void SQLLogicTestRunner::ExecuteFile(string script) { auto env_actual = std::getenv(env_var.c_str()); if (env_actual == nullptr) { // Environment variable was not found, this test should not be run + SKIP_TEST("require-env " + token.parameters[0]); return; } @@ -665,6 +670,7 @@ void SQLLogicTestRunner::ExecuteFile(string script) { auto env_value = token.parameters[1]; if (std::strcmp(env_actual, env_value.c_str()) != 0) { // It's not, check the test + SKIP_TEST("require-env " + token.parameters[0] + " " + token.parameters[1]); return; } } diff --git a/third_party/catch/catch.hpp b/third_party/catch/catch.hpp index 7a2cdf7a35c8..79986074cd61 100644 --- a/third_party/catch/catch.hpp +++ b/third_party/catch/catch.hpp @@ -2481,6 +2481,12 @@ namespace Catch { virtual void emplaceUnscopedMessage( MessageBuilder const& builder ) = 0; + virtual void onTestBegin() {} + virtual void skipTestDuringRun( std::string message ) {} + virtual bool skippedTest() { + return false; + } + virtual void handleFatalErrorCondition( StringRef message ) = 0; virtual void handleExpr @@ -2805,6 +2811,10 @@ namespace Catch { #define INTERNAL_CATCH_UNSCOPED_INFO( macroName, log ) \ Catch::getResultCapture().emplaceUnscopedMessage( Catch::MessageBuilder( macroName##_catch_sr, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log ) +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_SKIP_TEST( reason ) \ + Catch::getResultCapture().skipTestDuringRun( reason ) + /////////////////////////////////////////////////////////////////////////////// // Although this is matcher-based, it can be used with just a string #define INTERNAL_CATCH_THROWS_STR_MATCHES( macroName, resultDisposition, matcher, ... ) \ @@ -2833,6 +2843,7 @@ namespace Catch { // start catch_totals.h #include +#include namespace Catch { @@ -2857,8 +2868,10 @@ namespace Catch { Totals delta( Totals const& prevTotals ) const; int error = 0; + std::size_t skippedTests = 0; Counts assertions; Counts testCases; + std::map skippedTestReasons; }; } @@ -5493,7 +5506,6 @@ namespace Catch { #include #include -#include #include #include #include @@ -8143,6 +8155,10 @@ namespace Catch { void emplaceUnscopedMessage( MessageBuilder const& builder ) override; + void onTestBegin() override; + void skipTestDuringRun( std::string message ) override; + bool skippedTest() override; + std::string getCurrentTestName() const override; const AssertionResult* getLastResult() const override; @@ -8199,6 +8215,7 @@ namespace Catch { bool m_lastAssertionPassed = false; bool m_shouldReportUnexpected = true; bool m_includeSuccessfulResults; + std::string m_skippedTestReason; }; void seedRng(IConfig const& config); @@ -12795,6 +12812,7 @@ namespace Catch { auto const& testInfo = testCase.getTestCaseInfo(); + onTestBegin(); m_reporter->testCaseStarting(testInfo); m_activeTestCase = &testCase; @@ -12808,6 +12826,10 @@ namespace Catch { runCurrentTest(redirectedCout, redirectedCerr); } while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting()); + if (skippedTest()) { + m_totals.skippedTests++; + m_totals.skippedTestReasons[m_skippedTestReason]++; + } Totals deltaTotals = m_totals.delta(prevTotals); if (testInfo.expectedToFail() && deltaTotals.testCases.passed > 0) { deltaTotals.assertions.failed++; @@ -12951,6 +12973,18 @@ namespace Catch { m_messageScopes.emplace_back( builder ); } + void RunContext::onTestBegin() { + m_skippedTestReason = std::string(); + } + + void RunContext::skipTestDuringRun( std::string message ) { + m_skippedTestReason = std::move(message); + } + + bool RunContext::skippedTest() { + return !m_skippedTestReason.empty(); + } + std::string RunContext::getCurrentTestName() const { return m_activeTestCase ? m_activeTestCase->getTestCaseInfo().name @@ -15370,12 +15404,17 @@ namespace Catch { Totals diff; diff.assertions = assertions - other.assertions; diff.testCases = testCases - other.testCases; + diff.skippedTests = skippedTests - other.skippedTests; return diff; } Totals& Totals::operator += ( Totals const& other ) { assertions += other.assertions; testCases += other.testCases; + skippedTests += other.skippedTests; + for(auto &entry : other.skippedTestReasons) { + skippedTestReasons[entry.first] += entry.second; + } return *this; } @@ -16792,16 +16831,22 @@ struct SummaryColumn { }; void ConsoleReporter::printTotals( Totals const& totals ) { - if (totals.testCases.total() == 0) { + if (totals.testCases.total() == 0) { stream << Colour(Colour::Warning) << "No tests ran\n"; + } else if (totals.skippedTests >= totals.testCases.total()) { + stream << Colour(Colour::ResultError) << "All tests were skipped (total skipped " << totals.skippedTests << ")" << "\n"; } else if (totals.assertions.total() > 0 && totals.testCases.allPassed()) { stream << Colour(Colour::ResultSuccess) << "All tests passed"; - stream << " (" + stream << " ("; + if (totals.skippedTests > 0) { + stream << Colour(Colour::Warning) << pluralise(totals.skippedTests, "skipped test") << ", "; + } + stream << pluralise(totals.assertions.passed, "assertion") << " in " - << pluralise(totals.testCases.passed, "test case") << ')' - << '\n'; + << pluralise(totals.testCases.passed - totals.skippedTests, "test case"); + stream + << ')' << '\n'; } else { - std::vector columns; columns.push_back(SummaryColumn("", Colour::None) .addRow(totals.testCases.total()) @@ -16812,13 +16857,20 @@ void ConsoleReporter::printTotals( Totals const& totals ) { columns.push_back(SummaryColumn("failed", Colour::ResultError) .addRow(totals.testCases.failed) .addRow(totals.assertions.failed)); - columns.push_back(SummaryColumn("failed as expected", Colour::ResultExpectedFailure) - .addRow(totals.testCases.failedButOk) - .addRow(totals.assertions.failedButOk)); + columns.push_back(SummaryColumn("skipped", Colour::ResultExpectedFailure) + .addRow(totals.testCases.failedButOk + totals.skippedTests) + .addRow(totals.assertions.failedButOk + totals.skippedTests)); printSummaryRow("test cases", columns, 0); printSummaryRow("assertions", columns, 1); } + if (!totals.skippedTestReasons.empty()) { + stream << '\n'; + stream << Colour(Colour::Warning) << "Skipped tests for the following reasons:" << '\n'; + for(auto &entry : totals.skippedTestReasons) { + stream << Colour(Colour::Warning) << entry.first << ": " << entry.second << '\n'; + } + } } void ConsoleReporter::printSummaryRow(std::string const& label, std::vector const& cols, std::size_t row) { for (auto col : cols) { @@ -16841,8 +16893,8 @@ void ConsoleReporter::printSummaryRow(std::string const& label, std::vector 0) { std::size_t failedRatio = makeRatio(totals.testCases.failed, totals.testCases.total()); - std::size_t failedButOkRatio = makeRatio(totals.testCases.failedButOk, totals.testCases.total()); - std::size_t passedRatio = makeRatio(totals.testCases.passed, totals.testCases.total()); + std::size_t failedButOkRatio = makeRatio(totals.testCases.failedButOk + totals.skippedTests, totals.testCases.total()); + std::size_t passedRatio = makeRatio(totals.testCases.passed - totals.skippedTests, totals.testCases.total()); while (failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH - 1) findMax(failedRatio, failedButOkRatio, passedRatio)++; while (failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH - 1) @@ -17786,6 +17838,7 @@ int main (int argc, char * const argv[]) { #define UNSCOPED_INFO( msg ) INTERNAL_CATCH_UNSCOPED_INFO( "UNSCOPED_INFO", msg ) #define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg ) #define CAPTURE( ... ) INTERNAL_CATCH_CAPTURE( INTERNAL_CATCH_UNIQUE_NAME(capturer), "CAPTURE",__VA_ARGS__ ) +#define SKIP_TEST( reason ) INTERNAL_CATCH_SKIP_TEST( reason ) #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) diff --git a/third_party/jaro_winkler/details/common.hpp b/third_party/jaro_winkler/details/common.hpp index b094d235a994..0a3193fb5b65 100644 --- a/third_party/jaro_winkler/details/common.hpp +++ b/third_party/jaro_winkler/details/common.hpp @@ -233,7 +233,7 @@ struct BlockPatternMatchVector { for (int64_t i = 0; i < len; ++i) { int64_t block = i / 64; int64_t pos = i % 64; - insert(block, first[i], pos); + insert(block, first[i], static_cast(pos)); } } diff --git a/third_party/libpg_query/grammar/statements/select.y b/third_party/libpg_query/grammar/statements/select.y index 9803b71101d3..0ef3db6b2fcf 100644 --- a/third_party/libpg_query/grammar/statements/select.y +++ b/third_party/libpg_query/grammar/statements/select.y @@ -278,6 +278,7 @@ simple_select: PGPivotStmt *n = makeNode(PGPivotStmt); n->source = $2; n->aggrs = $4; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -288,6 +289,7 @@ simple_select: n->source = $2; n->aggrs = $4; n->groups = $7; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -297,6 +299,7 @@ simple_select: PGPivotStmt *n = makeNode(PGPivotStmt); n->source = $2; n->groups = $5; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -316,6 +319,7 @@ simple_select: n->source = $2; n->columns = $4; n->groups = $7; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -326,6 +330,7 @@ simple_select: n->source = $2; n->columns = $4; n->aggrs = $6; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -337,6 +342,7 @@ simple_select: n->columns = $4; n->aggrs = $6; n->groups = $9; + n->location = @1; res->pivot = n; $$ = (PGNode *)res; } @@ -346,6 +352,7 @@ simple_select: PGPivotStmt *n = makeNode(PGPivotStmt); n->source = $2; n->unpivots = $9; + n->location = @1; PGPivot *piv = makeNode(PGPivot); piv->unpivot_columns = list_make1(makeString($7)); piv->pivot_value = $4; @@ -360,6 +367,7 @@ simple_select: PGPivotStmt *n = makeNode(PGPivotStmt); n->source = $2; n->unpivots = list_make1(makeString("value")); + n->location = @1; PGPivot *piv = makeNode(PGPivot); piv->unpivot_columns = list_make1(makeString("name")); piv->pivot_value = $4; @@ -1078,6 +1086,7 @@ table_ref: relation_expr opt_alias_clause opt_tablesample_clause n->pivots = $6; n->groups = $7; n->alias = $9; + n->location = @2; $$ = (PGNode *) n; } | table_ref UNPIVOT opt_include_nulls '(' unpivot_header FOR unpivot_value_list ')' opt_alias_clause @@ -1088,6 +1097,7 @@ table_ref: relation_expr opt_alias_clause opt_tablesample_clause n->unpivots = $5; n->pivots = $7; n->alias = $9; + n->location = @2; $$ = (PGNode *) n; } ; @@ -1120,7 +1130,8 @@ single_pivot_value: ; pivot_header: - d_expr { $$ = list_make1($1); } + | d_expr { $$ = list_make1($1); } + | indirection_expr { $$ = list_make1($1); } | '(' c_expr_list_opt_comma ')' { $$ = $2; } pivot_value: @@ -2648,11 +2659,7 @@ b_expr: c_expr * ambiguity to the b_expr syntax. */ c_expr: d_expr - | row { - PGFuncCall *n = makeFuncCall(SystemFuncName("row"), $1, @1); - $$ = (PGNode *) n; - } - | indirection_expr opt_extended_indirection + | indirection_expr_or_a_expr opt_extended_indirection { if ($2) { @@ -2668,42 +2675,6 @@ c_expr: d_expr d_expr: columnref { $$ = $1; } | AexprConst { $$ = $1; } - | '#' ICONST - { - PGPositionalReference *n = makeNode(PGPositionalReference); - n->position = $2; - n->location = @1; - $$ = (PGNode *) n; - } - | '$' ColLabel - { - $$ = makeNamedParamRef($2, @1); - } - | '[' opt_expr_list_opt_comma ']' { - PGFuncCall *n = makeFuncCall(SystemFuncName("list_value"), $2, @2); - $$ = (PGNode *) n; - } - | list_comprehension { - $$ = $1; - } - | ARRAY select_with_parens - { - PGSubLink *n = makeNode(PGSubLink); - n->subLinkType = PG_ARRAY_SUBLINK; - n->subLinkId = 0; - n->testexpr = NULL; - n->operName = NULL; - n->subselect = $2; - n->location = @2; - $$ = (PGNode *)n; - } - | ARRAY '[' opt_expr_list_opt_comma ']' { - PGList *func_name = list_make1(makeString("construct_array")); - PGFuncCall *n = makeFuncCall(func_name, $3, @1); - $$ = (PGNode *) n; - } - | case_expr - { $$ = $1; } | select_with_parens %prec UMINUS { PGSubLink *n = makeNode(PGSubLink); @@ -2759,9 +2730,23 @@ d_expr: columnref { $$ = $1; } } ; +indirection_expr_or_a_expr: + '(' a_expr ')' + { + $$ = $2; + } + | indirection_expr + { + $$ = $1; + } + | row { + PGFuncCall *n = makeFuncCall(SystemFuncName("row"), $1, @1); + $$ = (PGNode *) n; + } + ; - -indirection_expr: '?' +indirection_expr: + '?' { $$ = makeParamRef(0, @1); } @@ -2772,10 +2757,6 @@ indirection_expr: '?' p->location = @1; $$ = (PGNode *) p; } - | '(' a_expr ')' - { - $$ = $2; - } | struct_expr { $$ = $1; @@ -2801,6 +2782,42 @@ indirection_expr: '?' { $$ = $1; } + | case_expr + { $$ = $1; } + | '[' opt_expr_list_opt_comma ']' { + PGFuncCall *n = makeFuncCall(SystemFuncName("list_value"), $2, @2); + $$ = (PGNode *) n; + } + | list_comprehension { + $$ = $1; + } + | ARRAY select_with_parens + { + PGSubLink *n = makeNode(PGSubLink); + n->subLinkType = PG_ARRAY_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NULL; + n->subselect = $2; + n->location = @2; + $$ = (PGNode *)n; + } + | ARRAY '[' opt_expr_list_opt_comma ']' { + PGList *func_name = list_make1(makeString("construct_array")); + PGFuncCall *n = makeFuncCall(func_name, $3, @1); + $$ = (PGNode *) n; + } + | '#' ICONST + { + PGPositionalReference *n = makeNode(PGPositionalReference); + n->position = $2; + n->location = @1; + $$ = (PGNode *) n; + } + | '$' ColLabel + { + $$ = makeNamedParamRef($2, @1); + } ; diff --git a/third_party/libpg_query/grammar/types/select.yh b/third_party/libpg_query/grammar/types/select.yh index fb0521d60ab2..1ddd849c7b5f 100644 --- a/third_party/libpg_query/grammar/types/select.yh +++ b/third_party/libpg_query/grammar/types/select.yh @@ -7,7 +7,7 @@ %type opt_collate_clause -%type indirection_expr +%type indirection_expr indirection_expr_or_a_expr %type struct_expr diff --git a/third_party/libpg_query/include/nodes/parsenodes.hpp b/third_party/libpg_query/include/nodes/parsenodes.hpp index b26624cfc011..cb1dc7a4a239 100755 --- a/third_party/libpg_query/include/nodes/parsenodes.hpp +++ b/third_party/libpg_query/include/nodes/parsenodes.hpp @@ -1205,6 +1205,7 @@ typedef struct PGPivotExpr { PGList *groups; /* The set of groups to pivot over (if any) */ PGAlias *alias; /* table alias & optional column aliases */ bool include_nulls; /* Whether or not to include NULL values (UNPIVOT only */ + int location; /* token location, or -1 if unknown */ } PGPivotExpr; typedef struct PGPivotStmt { @@ -1214,6 +1215,7 @@ typedef struct PGPivotStmt { PGList *unpivots; /* The names to unpivot over (UNPIVOT only) */ PGList *columns; /* The set of columns to pivot over */ PGList *groups; /* The set of groups to pivot over (if any) */ + int location; /* token location, or -1 if unknown */ } PGPivotStmt; /* ---------------------- diff --git a/third_party/libpg_query/include/parser/gram.hpp b/third_party/libpg_query/include/parser/gram.hpp index 0154683a774f..35b5c45ee0d4 100644 --- a/third_party/libpg_query/include/parser/gram.hpp +++ b/third_party/libpg_query/include/parser/gram.hpp @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Bison interface for Yacc-like parsers in C +/* Skeleton interface for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + the Free Software Foundation; either version 2, or (at your option) + any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +16,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -31,539 +33,1023 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - -#ifndef YY_BASE_YY_THIRD_PARTY_LIBPG_QUERY_GRAMMAR_GRAMMAR_OUT_HPP_INCLUDED -# define YY_BASE_YY_THIRD_PARTY_LIBPG_QUERY_GRAMMAR_GRAMMAR_OUT_HPP_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int base_yydebug; -#endif - -/* Token kinds. */ +/* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - enum yytokentype - { - YYEMPTY = -2, - YYEOF = 0, /* "end of file" */ - YYerror = 256, /* error */ - YYUNDEF = 257, /* "invalid token" */ - IDENT = 258, /* IDENT */ - FCONST = 259, /* FCONST */ - SCONST = 260, /* SCONST */ - BCONST = 261, /* BCONST */ - XCONST = 262, /* XCONST */ - Op = 263, /* Op */ - ICONST = 264, /* ICONST */ - PARAM = 265, /* PARAM */ - TYPECAST = 266, /* TYPECAST */ - DOT_DOT = 267, /* DOT_DOT */ - COLON_EQUALS = 268, /* COLON_EQUALS */ - EQUALS_GREATER = 269, /* EQUALS_GREATER */ - INTEGER_DIVISION = 270, /* INTEGER_DIVISION */ - POWER_OF = 271, /* POWER_OF */ - LAMBDA_ARROW = 272, /* LAMBDA_ARROW */ - DOUBLE_ARROW = 273, /* DOUBLE_ARROW */ - LESS_EQUALS = 274, /* LESS_EQUALS */ - GREATER_EQUALS = 275, /* GREATER_EQUALS */ - NOT_EQUALS = 276, /* NOT_EQUALS */ - ABORT_P = 277, /* ABORT_P */ - ABSOLUTE_P = 278, /* ABSOLUTE_P */ - ACCESS = 279, /* ACCESS */ - ACTION = 280, /* ACTION */ - ADD_P = 281, /* ADD_P */ - ADMIN = 282, /* ADMIN */ - AFTER = 283, /* AFTER */ - AGGREGATE = 284, /* AGGREGATE */ - ALL = 285, /* ALL */ - ALSO = 286, /* ALSO */ - ALTER = 287, /* ALTER */ - ALWAYS = 288, /* ALWAYS */ - ANALYSE = 289, /* ANALYSE */ - ANALYZE = 290, /* ANALYZE */ - AND = 291, /* AND */ - ANTI = 292, /* ANTI */ - ANY = 293, /* ANY */ - ARRAY = 294, /* ARRAY */ - AS = 295, /* AS */ - ASC_P = 296, /* ASC_P */ - ASOF = 297, /* ASOF */ - ASSERTION = 298, /* ASSERTION */ - ASSIGNMENT = 299, /* ASSIGNMENT */ - ASYMMETRIC = 300, /* ASYMMETRIC */ - AT = 301, /* AT */ - ATTACH = 302, /* ATTACH */ - ATTRIBUTE = 303, /* ATTRIBUTE */ - AUTHORIZATION = 304, /* AUTHORIZATION */ - BACKWARD = 305, /* BACKWARD */ - BEFORE = 306, /* BEFORE */ - BEGIN_P = 307, /* BEGIN_P */ - BETWEEN = 308, /* BETWEEN */ - BIGINT = 309, /* BIGINT */ - BINARY = 310, /* BINARY */ - BIT = 311, /* BIT */ - BOOLEAN_P = 312, /* BOOLEAN_P */ - BOTH = 313, /* BOTH */ - BY = 314, /* BY */ - CACHE = 315, /* CACHE */ - CALL_P = 316, /* CALL_P */ - CALLED = 317, /* CALLED */ - CASCADE = 318, /* CASCADE */ - CASCADED = 319, /* CASCADED */ - CASE = 320, /* CASE */ - CAST = 321, /* CAST */ - CATALOG_P = 322, /* CATALOG_P */ - CENTURIES_P = 323, /* CENTURIES_P */ - CENTURY_P = 324, /* CENTURY_P */ - CHAIN = 325, /* CHAIN */ - CHAR_P = 326, /* CHAR_P */ - CHARACTER = 327, /* CHARACTER */ - CHARACTERISTICS = 328, /* CHARACTERISTICS */ - CHECK_P = 329, /* CHECK_P */ - CHECKPOINT = 330, /* CHECKPOINT */ - CLASS = 331, /* CLASS */ - CLOSE = 332, /* CLOSE */ - CLUSTER = 333, /* CLUSTER */ - COALESCE = 334, /* COALESCE */ - COLLATE = 335, /* COLLATE */ - COLLATION = 336, /* COLLATION */ - COLUMN = 337, /* COLUMN */ - COLUMNS = 338, /* COLUMNS */ - COMMENT = 339, /* COMMENT */ - COMMENTS = 340, /* COMMENTS */ - COMMIT = 341, /* COMMIT */ - COMMITTED = 342, /* COMMITTED */ - COMPRESSION = 343, /* COMPRESSION */ - CONCURRENTLY = 344, /* CONCURRENTLY */ - CONFIGURATION = 345, /* CONFIGURATION */ - CONFLICT = 346, /* CONFLICT */ - CONNECTION = 347, /* CONNECTION */ - CONSTRAINT = 348, /* CONSTRAINT */ - CONSTRAINTS = 349, /* CONSTRAINTS */ - CONTENT_P = 350, /* CONTENT_P */ - CONTINUE_P = 351, /* CONTINUE_P */ - CONVERSION_P = 352, /* CONVERSION_P */ - COPY = 353, /* COPY */ - COST = 354, /* COST */ - CREATE_P = 355, /* CREATE_P */ - CROSS = 356, /* CROSS */ - CSV = 357, /* CSV */ - CUBE = 358, /* CUBE */ - CURRENT_P = 359, /* CURRENT_P */ - CURSOR = 360, /* CURSOR */ - CYCLE = 361, /* CYCLE */ - DATA_P = 362, /* DATA_P */ - DATABASE = 363, /* DATABASE */ - DAY_P = 364, /* DAY_P */ - DAYS_P = 365, /* DAYS_P */ - DEALLOCATE = 366, /* DEALLOCATE */ - DEC = 367, /* DEC */ - DECADE_P = 368, /* DECADE_P */ - DECADES_P = 369, /* DECADES_P */ - DECIMAL_P = 370, /* DECIMAL_P */ - DECLARE = 371, /* DECLARE */ - DEFAULT = 372, /* DEFAULT */ - DEFAULTS = 373, /* DEFAULTS */ - DEFERRABLE = 374, /* DEFERRABLE */ - DEFERRED = 375, /* DEFERRED */ - DEFINER = 376, /* DEFINER */ - DELETE_P = 377, /* DELETE_P */ - DELIMITER = 378, /* DELIMITER */ - DELIMITERS = 379, /* DELIMITERS */ - DEPENDS = 380, /* DEPENDS */ - DESC_P = 381, /* DESC_P */ - DESCRIBE = 382, /* DESCRIBE */ - DETACH = 383, /* DETACH */ - DICTIONARY = 384, /* DICTIONARY */ - DISABLE_P = 385, /* DISABLE_P */ - DISCARD = 386, /* DISCARD */ - DISTINCT = 387, /* DISTINCT */ - DO = 388, /* DO */ - DOCUMENT_P = 389, /* DOCUMENT_P */ - DOMAIN_P = 390, /* DOMAIN_P */ - DOUBLE_P = 391, /* DOUBLE_P */ - DROP = 392, /* DROP */ - EACH = 393, /* EACH */ - ELSE = 394, /* ELSE */ - ENABLE_P = 395, /* ENABLE_P */ - ENCODING = 396, /* ENCODING */ - ENCRYPTED = 397, /* ENCRYPTED */ - END_P = 398, /* END_P */ - ENUM_P = 399, /* ENUM_P */ - ESCAPE = 400, /* ESCAPE */ - EVENT = 401, /* EVENT */ - EXCEPT = 402, /* EXCEPT */ - EXCLUDE = 403, /* EXCLUDE */ - EXCLUDING = 404, /* EXCLUDING */ - EXCLUSIVE = 405, /* EXCLUSIVE */ - EXECUTE = 406, /* EXECUTE */ - EXISTS = 407, /* EXISTS */ - EXPLAIN = 408, /* EXPLAIN */ - EXPORT_P = 409, /* EXPORT_P */ - EXPORT_STATE = 410, /* EXPORT_STATE */ - EXTENSION = 411, /* EXTENSION */ - EXTERNAL = 412, /* EXTERNAL */ - EXTRACT = 413, /* EXTRACT */ - FALSE_P = 414, /* FALSE_P */ - FAMILY = 415, /* FAMILY */ - FETCH = 416, /* FETCH */ - FILTER = 417, /* FILTER */ - FIRST_P = 418, /* FIRST_P */ - FLOAT_P = 419, /* FLOAT_P */ - FOLLOWING = 420, /* FOLLOWING */ - FOR = 421, /* FOR */ - FORCE = 422, /* FORCE */ - FOREIGN = 423, /* FOREIGN */ - FORWARD = 424, /* FORWARD */ - FREEZE = 425, /* FREEZE */ - FROM = 426, /* FROM */ - FULL = 427, /* FULL */ - FUNCTION = 428, /* FUNCTION */ - FUNCTIONS = 429, /* FUNCTIONS */ - GENERATED = 430, /* GENERATED */ - GLOB = 431, /* GLOB */ - GLOBAL = 432, /* GLOBAL */ - GRANT = 433, /* GRANT */ - GRANTED = 434, /* GRANTED */ - GROUP_P = 435, /* GROUP_P */ - GROUPING = 436, /* GROUPING */ - GROUPING_ID = 437, /* GROUPING_ID */ - GROUPS = 438, /* GROUPS */ - HANDLER = 439, /* HANDLER */ - HAVING = 440, /* HAVING */ - HEADER_P = 441, /* HEADER_P */ - HOLD = 442, /* HOLD */ - HOUR_P = 443, /* HOUR_P */ - HOURS_P = 444, /* HOURS_P */ - IDENTITY_P = 445, /* IDENTITY_P */ - IF_P = 446, /* IF_P */ - IGNORE_P = 447, /* IGNORE_P */ - ILIKE = 448, /* ILIKE */ - IMMEDIATE = 449, /* IMMEDIATE */ - IMMUTABLE = 450, /* IMMUTABLE */ - IMPLICIT_P = 451, /* IMPLICIT_P */ - IMPORT_P = 452, /* IMPORT_P */ - IN_P = 453, /* IN_P */ - INCLUDE_P = 454, /* INCLUDE_P */ - INCLUDING = 455, /* INCLUDING */ - INCREMENT = 456, /* INCREMENT */ - INDEX = 457, /* INDEX */ - INDEXES = 458, /* INDEXES */ - INHERIT = 459, /* INHERIT */ - INHERITS = 460, /* INHERITS */ - INITIALLY = 461, /* INITIALLY */ - INLINE_P = 462, /* INLINE_P */ - INNER_P = 463, /* INNER_P */ - INOUT = 464, /* INOUT */ - INPUT_P = 465, /* INPUT_P */ - INSENSITIVE = 466, /* INSENSITIVE */ - INSERT = 467, /* INSERT */ - INSTALL = 468, /* INSTALL */ - INSTEAD = 469, /* INSTEAD */ - INT_P = 470, /* INT_P */ - INTEGER = 471, /* INTEGER */ - INTERSECT = 472, /* INTERSECT */ - INTERVAL = 473, /* INTERVAL */ - INTO = 474, /* INTO */ - INVOKER = 475, /* INVOKER */ - IS = 476, /* IS */ - ISNULL = 477, /* ISNULL */ - ISOLATION = 478, /* ISOLATION */ - JOIN = 479, /* JOIN */ - JSON = 480, /* JSON */ - KEY = 481, /* KEY */ - LABEL = 482, /* LABEL */ - LANGUAGE = 483, /* LANGUAGE */ - LARGE_P = 484, /* LARGE_P */ - LAST_P = 485, /* LAST_P */ - LATERAL_P = 486, /* LATERAL_P */ - LEADING = 487, /* LEADING */ - LEAKPROOF = 488, /* LEAKPROOF */ - LEFT = 489, /* LEFT */ - LEVEL = 490, /* LEVEL */ - LIKE = 491, /* LIKE */ - LIMIT = 492, /* LIMIT */ - LISTEN = 493, /* LISTEN */ - LOAD = 494, /* LOAD */ - LOCAL = 495, /* LOCAL */ - LOCATION = 496, /* LOCATION */ - LOCK_P = 497, /* LOCK_P */ - LOCKED = 498, /* LOCKED */ - LOGGED = 499, /* LOGGED */ - MACRO = 500, /* MACRO */ - MAP = 501, /* MAP */ - MAPPING = 502, /* MAPPING */ - MATCH = 503, /* MATCH */ - MATERIALIZED = 504, /* MATERIALIZED */ - MAXVALUE = 505, /* MAXVALUE */ - METHOD = 506, /* METHOD */ - MICROSECOND_P = 507, /* MICROSECOND_P */ - MICROSECONDS_P = 508, /* MICROSECONDS_P */ - MILLENNIA_P = 509, /* MILLENNIA_P */ - MILLENNIUM_P = 510, /* MILLENNIUM_P */ - MILLISECOND_P = 511, /* MILLISECOND_P */ - MILLISECONDS_P = 512, /* MILLISECONDS_P */ - MINUTE_P = 513, /* MINUTE_P */ - MINUTES_P = 514, /* MINUTES_P */ - MINVALUE = 515, /* MINVALUE */ - MODE = 516, /* MODE */ - MONTH_P = 517, /* MONTH_P */ - MONTHS_P = 518, /* MONTHS_P */ - MOVE = 519, /* MOVE */ - NAME_P = 520, /* NAME_P */ - NAMES = 521, /* NAMES */ - NATIONAL = 522, /* NATIONAL */ - NATURAL = 523, /* NATURAL */ - NCHAR = 524, /* NCHAR */ - NEW = 525, /* NEW */ - NEXT = 526, /* NEXT */ - NO = 527, /* NO */ - NONE = 528, /* NONE */ - NOT = 529, /* NOT */ - NOTHING = 530, /* NOTHING */ - NOTIFY = 531, /* NOTIFY */ - NOTNULL = 532, /* NOTNULL */ - NOWAIT = 533, /* NOWAIT */ - NULL_P = 534, /* NULL_P */ - NULLIF = 535, /* NULLIF */ - NULLS_P = 536, /* NULLS_P */ - NUMERIC = 537, /* NUMERIC */ - OBJECT_P = 538, /* OBJECT_P */ - OF = 539, /* OF */ - OFF = 540, /* OFF */ - OFFSET = 541, /* OFFSET */ - OIDS = 542, /* OIDS */ - OLD = 543, /* OLD */ - ON = 544, /* ON */ - ONLY = 545, /* ONLY */ - OPERATOR = 546, /* OPERATOR */ - OPTION = 547, /* OPTION */ - OPTIONS = 548, /* OPTIONS */ - OR = 549, /* OR */ - ORDER = 550, /* ORDER */ - ORDINALITY = 551, /* ORDINALITY */ - OTHERS = 552, /* OTHERS */ - OUT_P = 553, /* OUT_P */ - OUTER_P = 554, /* OUTER_P */ - OVER = 555, /* OVER */ - OVERLAPS = 556, /* OVERLAPS */ - OVERLAY = 557, /* OVERLAY */ - OVERRIDING = 558, /* OVERRIDING */ - OWNED = 559, /* OWNED */ - OWNER = 560, /* OWNER */ - PARALLEL = 561, /* PARALLEL */ - PARSER = 562, /* PARSER */ - PARTIAL = 563, /* PARTIAL */ - PARTITION = 564, /* PARTITION */ - PASSING = 565, /* PASSING */ - PASSWORD = 566, /* PASSWORD */ - PERCENT = 567, /* PERCENT */ - PERSISTENT = 568, /* PERSISTENT */ - PIVOT = 569, /* PIVOT */ - PIVOT_LONGER = 570, /* PIVOT_LONGER */ - PIVOT_WIDER = 571, /* PIVOT_WIDER */ - PLACING = 572, /* PLACING */ - PLANS = 573, /* PLANS */ - POLICY = 574, /* POLICY */ - POSITION = 575, /* POSITION */ - POSITIONAL = 576, /* POSITIONAL */ - PRAGMA_P = 577, /* PRAGMA_P */ - PRECEDING = 578, /* PRECEDING */ - PRECISION = 579, /* PRECISION */ - PREPARE = 580, /* PREPARE */ - PREPARED = 581, /* PREPARED */ - PRESERVE = 582, /* PRESERVE */ - PRIMARY = 583, /* PRIMARY */ - PRIOR = 584, /* PRIOR */ - PRIVILEGES = 585, /* PRIVILEGES */ - PROCEDURAL = 586, /* PROCEDURAL */ - PROCEDURE = 587, /* PROCEDURE */ - PROGRAM = 588, /* PROGRAM */ - PUBLICATION = 589, /* PUBLICATION */ - QUALIFY = 590, /* QUALIFY */ - QUOTE = 591, /* QUOTE */ - RANGE = 592, /* RANGE */ - READ_P = 593, /* READ_P */ - REAL = 594, /* REAL */ - REASSIGN = 595, /* REASSIGN */ - RECHECK = 596, /* RECHECK */ - RECURSIVE = 597, /* RECURSIVE */ - REF = 598, /* REF */ - REFERENCES = 599, /* REFERENCES */ - REFERENCING = 600, /* REFERENCING */ - REFRESH = 601, /* REFRESH */ - REINDEX = 602, /* REINDEX */ - RELATIVE_P = 603, /* RELATIVE_P */ - RELEASE = 604, /* RELEASE */ - RENAME = 605, /* RENAME */ - REPEATABLE = 606, /* REPEATABLE */ - REPLACE = 607, /* REPLACE */ - REPLICA = 608, /* REPLICA */ - RESET = 609, /* RESET */ - RESPECT_P = 610, /* RESPECT_P */ - RESTART = 611, /* RESTART */ - RESTRICT = 612, /* RESTRICT */ - RETURNING = 613, /* RETURNING */ - RETURNS = 614, /* RETURNS */ - REVOKE = 615, /* REVOKE */ - RIGHT = 616, /* RIGHT */ - ROLE = 617, /* ROLE */ - ROLLBACK = 618, /* ROLLBACK */ - ROLLUP = 619, /* ROLLUP */ - ROW = 620, /* ROW */ - ROWS = 621, /* ROWS */ - RULE = 622, /* RULE */ - SAMPLE = 623, /* SAMPLE */ - SAVEPOINT = 624, /* SAVEPOINT */ - SCHEMA = 625, /* SCHEMA */ - SCHEMAS = 626, /* SCHEMAS */ - SCOPE = 627, /* SCOPE */ - SCROLL = 628, /* SCROLL */ - SEARCH = 629, /* SEARCH */ - SECOND_P = 630, /* SECOND_P */ - SECONDS_P = 631, /* SECONDS_P */ - SECRET = 632, /* SECRET */ - SECURITY = 633, /* SECURITY */ - SELECT = 634, /* SELECT */ - SEMI = 635, /* SEMI */ - SEQUENCE = 636, /* SEQUENCE */ - SEQUENCES = 637, /* SEQUENCES */ - SERIALIZABLE = 638, /* SERIALIZABLE */ - SERVER = 639, /* SERVER */ - SESSION = 640, /* SESSION */ - SET = 641, /* SET */ - SETOF = 642, /* SETOF */ - SETS = 643, /* SETS */ - SHARE = 644, /* SHARE */ - SHOW = 645, /* SHOW */ - SIMILAR = 646, /* SIMILAR */ - SIMPLE = 647, /* SIMPLE */ - SKIP = 648, /* SKIP */ - SMALLINT = 649, /* SMALLINT */ - SNAPSHOT = 650, /* SNAPSHOT */ - SOME = 651, /* SOME */ - SQL_P = 652, /* SQL_P */ - STABLE = 653, /* STABLE */ - STANDALONE_P = 654, /* STANDALONE_P */ - START = 655, /* START */ - STATEMENT = 656, /* STATEMENT */ - STATISTICS = 657, /* STATISTICS */ - STDIN = 658, /* STDIN */ - STDOUT = 659, /* STDOUT */ - STORAGE = 660, /* STORAGE */ - STORED = 661, /* STORED */ - STRICT_P = 662, /* STRICT_P */ - STRIP_P = 663, /* STRIP_P */ - STRUCT = 664, /* STRUCT */ - SUBSCRIPTION = 665, /* SUBSCRIPTION */ - SUBSTRING = 666, /* SUBSTRING */ - SUMMARIZE = 667, /* SUMMARIZE */ - SYMMETRIC = 668, /* SYMMETRIC */ - SYSID = 669, /* SYSID */ - SYSTEM_P = 670, /* SYSTEM_P */ - TABLE = 671, /* TABLE */ - TABLES = 672, /* TABLES */ - TABLESAMPLE = 673, /* TABLESAMPLE */ - TABLESPACE = 674, /* TABLESPACE */ - TEMP = 675, /* TEMP */ - TEMPLATE = 676, /* TEMPLATE */ - TEMPORARY = 677, /* TEMPORARY */ - TEXT_P = 678, /* TEXT_P */ - THEN = 679, /* THEN */ - TIES = 680, /* TIES */ - TIME = 681, /* TIME */ - TIMESTAMP = 682, /* TIMESTAMP */ - TO = 683, /* TO */ - TRAILING = 684, /* TRAILING */ - TRANSACTION = 685, /* TRANSACTION */ - TRANSFORM = 686, /* TRANSFORM */ - TREAT = 687, /* TREAT */ - TRIGGER = 688, /* TRIGGER */ - TRIM = 689, /* TRIM */ - TRUE_P = 690, /* TRUE_P */ - TRUNCATE = 691, /* TRUNCATE */ - TRUSTED = 692, /* TRUSTED */ - TRY_CAST = 693, /* TRY_CAST */ - TYPE_P = 694, /* TYPE_P */ - TYPES_P = 695, /* TYPES_P */ - UNBOUNDED = 696, /* UNBOUNDED */ - UNCOMMITTED = 697, /* UNCOMMITTED */ - UNENCRYPTED = 698, /* UNENCRYPTED */ - UNION = 699, /* UNION */ - UNIQUE = 700, /* UNIQUE */ - UNKNOWN = 701, /* UNKNOWN */ - UNLISTEN = 702, /* UNLISTEN */ - UNLOGGED = 703, /* UNLOGGED */ - UNPIVOT = 704, /* UNPIVOT */ - UNTIL = 705, /* UNTIL */ - UPDATE = 706, /* UPDATE */ - USE_P = 707, /* USE_P */ - USER = 708, /* USER */ - USING = 709, /* USING */ - VACUUM = 710, /* VACUUM */ - VALID = 711, /* VALID */ - VALIDATE = 712, /* VALIDATE */ - VALIDATOR = 713, /* VALIDATOR */ - VALUE_P = 714, /* VALUE_P */ - VALUES = 715, /* VALUES */ - VARCHAR = 716, /* VARCHAR */ - VARIADIC = 717, /* VARIADIC */ - VARYING = 718, /* VARYING */ - VERBOSE = 719, /* VERBOSE */ - VERSION_P = 720, /* VERSION_P */ - VIEW = 721, /* VIEW */ - VIEWS = 722, /* VIEWS */ - VIRTUAL = 723, /* VIRTUAL */ - VOLATILE = 724, /* VOLATILE */ - WEEK_P = 725, /* WEEK_P */ - WEEKS_P = 726, /* WEEKS_P */ - WHEN = 727, /* WHEN */ - WHERE = 728, /* WHERE */ - WHITESPACE_P = 729, /* WHITESPACE_P */ - WINDOW = 730, /* WINDOW */ - WITH = 731, /* WITH */ - WITHIN = 732, /* WITHIN */ - WITHOUT = 733, /* WITHOUT */ - WORK = 734, /* WORK */ - WRAPPER = 735, /* WRAPPER */ - WRITE_P = 736, /* WRITE_P */ - XML_P = 737, /* XML_P */ - XMLATTRIBUTES = 738, /* XMLATTRIBUTES */ - XMLCONCAT = 739, /* XMLCONCAT */ - XMLELEMENT = 740, /* XMLELEMENT */ - XMLEXISTS = 741, /* XMLEXISTS */ - XMLFOREST = 742, /* XMLFOREST */ - XMLNAMESPACES = 743, /* XMLNAMESPACES */ - XMLPARSE = 744, /* XMLPARSE */ - XMLPI = 745, /* XMLPI */ - XMLROOT = 746, /* XMLROOT */ - XMLSERIALIZE = 747, /* XMLSERIALIZE */ - XMLTABLE = 748, /* XMLTABLE */ - YEAR_P = 749, /* YEAR_P */ - YEARS_P = 750, /* YEARS_P */ - YES_P = 751, /* YES_P */ - ZONE = 752, /* ZONE */ - NOT_LA = 753, /* NOT_LA */ - NULLS_LA = 754, /* NULLS_LA */ - WITH_LA = 755, /* WITH_LA */ - POSTFIXOP = 756, /* POSTFIXOP */ - UMINUS = 757 /* UMINUS */ - }; - typedef enum yytokentype yytoken_kind_t; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + IDENT = 258, + FCONST = 259, + SCONST = 260, + BCONST = 261, + XCONST = 262, + Op = 263, + ICONST = 264, + PARAM = 265, + TYPECAST = 266, + DOT_DOT = 267, + COLON_EQUALS = 268, + EQUALS_GREATER = 269, + INTEGER_DIVISION = 270, + POWER_OF = 271, + LAMBDA_ARROW = 272, + DOUBLE_ARROW = 273, + LESS_EQUALS = 274, + GREATER_EQUALS = 275, + NOT_EQUALS = 276, + ABORT_P = 277, + ABSOLUTE_P = 278, + ACCESS = 279, + ACTION = 280, + ADD_P = 281, + ADMIN = 282, + AFTER = 283, + AGGREGATE = 284, + ALL = 285, + ALSO = 286, + ALTER = 287, + ALWAYS = 288, + ANALYSE = 289, + ANALYZE = 290, + AND = 291, + ANTI = 292, + ANY = 293, + ARRAY = 294, + AS = 295, + ASC_P = 296, + ASOF = 297, + ASSERTION = 298, + ASSIGNMENT = 299, + ASYMMETRIC = 300, + AT = 301, + ATTACH = 302, + ATTRIBUTE = 303, + AUTHORIZATION = 304, + BACKWARD = 305, + BEFORE = 306, + BEGIN_P = 307, + BETWEEN = 308, + BIGINT = 309, + BINARY = 310, + BIT = 311, + BOOLEAN_P = 312, + BOTH = 313, + BY = 314, + CACHE = 315, + CALL_P = 316, + CALLED = 317, + CASCADE = 318, + CASCADED = 319, + CASE = 320, + CAST = 321, + CATALOG_P = 322, + CENTURIES_P = 323, + CENTURY_P = 324, + CHAIN = 325, + CHAR_P = 326, + CHARACTER = 327, + CHARACTERISTICS = 328, + CHECK_P = 329, + CHECKPOINT = 330, + CLASS = 331, + CLOSE = 332, + CLUSTER = 333, + COALESCE = 334, + COLLATE = 335, + COLLATION = 336, + COLUMN = 337, + COLUMNS = 338, + COMMENT = 339, + COMMENTS = 340, + COMMIT = 341, + COMMITTED = 342, + COMPRESSION = 343, + CONCURRENTLY = 344, + CONFIGURATION = 345, + CONFLICT = 346, + CONNECTION = 347, + CONSTRAINT = 348, + CONSTRAINTS = 349, + CONTENT_P = 350, + CONTINUE_P = 351, + CONVERSION_P = 352, + COPY = 353, + COST = 354, + CREATE_P = 355, + CROSS = 356, + CSV = 357, + CUBE = 358, + CURRENT_P = 359, + CURSOR = 360, + CYCLE = 361, + DATA_P = 362, + DATABASE = 363, + DAY_P = 364, + DAYS_P = 365, + DEALLOCATE = 366, + DEC = 367, + DECADE_P = 368, + DECADES_P = 369, + DECIMAL_P = 370, + DECLARE = 371, + DEFAULT = 372, + DEFAULTS = 373, + DEFERRABLE = 374, + DEFERRED = 375, + DEFINER = 376, + DELETE_P = 377, + DELIMITER = 378, + DELIMITERS = 379, + DEPENDS = 380, + DESC_P = 381, + DESCRIBE = 382, + DETACH = 383, + DICTIONARY = 384, + DISABLE_P = 385, + DISCARD = 386, + DISTINCT = 387, + DO = 388, + DOCUMENT_P = 389, + DOMAIN_P = 390, + DOUBLE_P = 391, + DROP = 392, + EACH = 393, + ELSE = 394, + ENABLE_P = 395, + ENCODING = 396, + ENCRYPTED = 397, + END_P = 398, + ENUM_P = 399, + ESCAPE = 400, + EVENT = 401, + EXCEPT = 402, + EXCLUDE = 403, + EXCLUDING = 404, + EXCLUSIVE = 405, + EXECUTE = 406, + EXISTS = 407, + EXPLAIN = 408, + EXPORT_P = 409, + EXPORT_STATE = 410, + EXTENSION = 411, + EXTERNAL = 412, + EXTRACT = 413, + FALSE_P = 414, + FAMILY = 415, + FETCH = 416, + FILTER = 417, + FIRST_P = 418, + FLOAT_P = 419, + FOLLOWING = 420, + FOR = 421, + FORCE = 422, + FOREIGN = 423, + FORWARD = 424, + FREEZE = 425, + FROM = 426, + FULL = 427, + FUNCTION = 428, + FUNCTIONS = 429, + GENERATED = 430, + GLOB = 431, + GLOBAL = 432, + GRANT = 433, + GRANTED = 434, + GROUP_P = 435, + GROUPING = 436, + GROUPING_ID = 437, + GROUPS = 438, + HANDLER = 439, + HAVING = 440, + HEADER_P = 441, + HOLD = 442, + HOUR_P = 443, + HOURS_P = 444, + IDENTITY_P = 445, + IF_P = 446, + IGNORE_P = 447, + ILIKE = 448, + IMMEDIATE = 449, + IMMUTABLE = 450, + IMPLICIT_P = 451, + IMPORT_P = 452, + IN_P = 453, + INCLUDE_P = 454, + INCLUDING = 455, + INCREMENT = 456, + INDEX = 457, + INDEXES = 458, + INHERIT = 459, + INHERITS = 460, + INITIALLY = 461, + INLINE_P = 462, + INNER_P = 463, + INOUT = 464, + INPUT_P = 465, + INSENSITIVE = 466, + INSERT = 467, + INSTALL = 468, + INSTEAD = 469, + INT_P = 470, + INTEGER = 471, + INTERSECT = 472, + INTERVAL = 473, + INTO = 474, + INVOKER = 475, + IS = 476, + ISNULL = 477, + ISOLATION = 478, + JOIN = 479, + JSON = 480, + KEY = 481, + LABEL = 482, + LANGUAGE = 483, + LARGE_P = 484, + LAST_P = 485, + LATERAL_P = 486, + LEADING = 487, + LEAKPROOF = 488, + LEFT = 489, + LEVEL = 490, + LIKE = 491, + LIMIT = 492, + LISTEN = 493, + LOAD = 494, + LOCAL = 495, + LOCATION = 496, + LOCK_P = 497, + LOCKED = 498, + LOGGED = 499, + MACRO = 500, + MAP = 501, + MAPPING = 502, + MATCH = 503, + MATERIALIZED = 504, + MAXVALUE = 505, + METHOD = 506, + MICROSECOND_P = 507, + MICROSECONDS_P = 508, + MILLENNIA_P = 509, + MILLENNIUM_P = 510, + MILLISECOND_P = 511, + MILLISECONDS_P = 512, + MINUTE_P = 513, + MINUTES_P = 514, + MINVALUE = 515, + MODE = 516, + MONTH_P = 517, + MONTHS_P = 518, + MOVE = 519, + NAME_P = 520, + NAMES = 521, + NATIONAL = 522, + NATURAL = 523, + NCHAR = 524, + NEW = 525, + NEXT = 526, + NO = 527, + NONE = 528, + NOT = 529, + NOTHING = 530, + NOTIFY = 531, + NOTNULL = 532, + NOWAIT = 533, + NULL_P = 534, + NULLIF = 535, + NULLS_P = 536, + NUMERIC = 537, + OBJECT_P = 538, + OF = 539, + OFF = 540, + OFFSET = 541, + OIDS = 542, + OLD = 543, + ON = 544, + ONLY = 545, + OPERATOR = 546, + OPTION = 547, + OPTIONS = 548, + OR = 549, + ORDER = 550, + ORDINALITY = 551, + OTHERS = 552, + OUT_P = 553, + OUTER_P = 554, + OVER = 555, + OVERLAPS = 556, + OVERLAY = 557, + OVERRIDING = 558, + OWNED = 559, + OWNER = 560, + PARALLEL = 561, + PARSER = 562, + PARTIAL = 563, + PARTITION = 564, + PASSING = 565, + PASSWORD = 566, + PERCENT = 567, + PERSISTENT = 568, + PIVOT = 569, + PIVOT_LONGER = 570, + PIVOT_WIDER = 571, + PLACING = 572, + PLANS = 573, + POLICY = 574, + POSITION = 575, + POSITIONAL = 576, + PRAGMA_P = 577, + PRECEDING = 578, + PRECISION = 579, + PREPARE = 580, + PREPARED = 581, + PRESERVE = 582, + PRIMARY = 583, + PRIOR = 584, + PRIVILEGES = 585, + PROCEDURAL = 586, + PROCEDURE = 587, + PROGRAM = 588, + PUBLICATION = 589, + QUALIFY = 590, + QUOTE = 591, + RANGE = 592, + READ_P = 593, + REAL = 594, + REASSIGN = 595, + RECHECK = 596, + RECURSIVE = 597, + REF = 598, + REFERENCES = 599, + REFERENCING = 600, + REFRESH = 601, + REINDEX = 602, + RELATIVE_P = 603, + RELEASE = 604, + RENAME = 605, + REPEATABLE = 606, + REPLACE = 607, + REPLICA = 608, + RESET = 609, + RESPECT_P = 610, + RESTART = 611, + RESTRICT = 612, + RETURNING = 613, + RETURNS = 614, + REVOKE = 615, + RIGHT = 616, + ROLE = 617, + ROLLBACK = 618, + ROLLUP = 619, + ROW = 620, + ROWS = 621, + RULE = 622, + SAMPLE = 623, + SAVEPOINT = 624, + SCHEMA = 625, + SCHEMAS = 626, + SCOPE = 627, + SCROLL = 628, + SEARCH = 629, + SECOND_P = 630, + SECONDS_P = 631, + SECRET = 632, + SECURITY = 633, + SELECT = 634, + SEMI = 635, + SEQUENCE = 636, + SEQUENCES = 637, + SERIALIZABLE = 638, + SERVER = 639, + SESSION = 640, + SET = 641, + SETOF = 642, + SETS = 643, + SHARE = 644, + SHOW = 645, + SIMILAR = 646, + SIMPLE = 647, + SKIP = 648, + SMALLINT = 649, + SNAPSHOT = 650, + SOME = 651, + SQL_P = 652, + STABLE = 653, + STANDALONE_P = 654, + START = 655, + STATEMENT = 656, + STATISTICS = 657, + STDIN = 658, + STDOUT = 659, + STORAGE = 660, + STORED = 661, + STRICT_P = 662, + STRIP_P = 663, + STRUCT = 664, + SUBSCRIPTION = 665, + SUBSTRING = 666, + SUMMARIZE = 667, + SYMMETRIC = 668, + SYSID = 669, + SYSTEM_P = 670, + TABLE = 671, + TABLES = 672, + TABLESAMPLE = 673, + TABLESPACE = 674, + TEMP = 675, + TEMPLATE = 676, + TEMPORARY = 677, + TEXT_P = 678, + THEN = 679, + TIES = 680, + TIME = 681, + TIMESTAMP = 682, + TO = 683, + TRAILING = 684, + TRANSACTION = 685, + TRANSFORM = 686, + TREAT = 687, + TRIGGER = 688, + TRIM = 689, + TRUE_P = 690, + TRUNCATE = 691, + TRUSTED = 692, + TRY_CAST = 693, + TYPE_P = 694, + TYPES_P = 695, + UNBOUNDED = 696, + UNCOMMITTED = 697, + UNENCRYPTED = 698, + UNION = 699, + UNIQUE = 700, + UNKNOWN = 701, + UNLISTEN = 702, + UNLOGGED = 703, + UNPIVOT = 704, + UNTIL = 705, + UPDATE = 706, + USE_P = 707, + USER = 708, + USING = 709, + VACUUM = 710, + VALID = 711, + VALIDATE = 712, + VALIDATOR = 713, + VALUE_P = 714, + VALUES = 715, + VARCHAR = 716, + VARIADIC = 717, + VARYING = 718, + VERBOSE = 719, + VERSION_P = 720, + VIEW = 721, + VIEWS = 722, + VIRTUAL = 723, + VOLATILE = 724, + WEEK_P = 725, + WEEKS_P = 726, + WHEN = 727, + WHERE = 728, + WHITESPACE_P = 729, + WINDOW = 730, + WITH = 731, + WITHIN = 732, + WITHOUT = 733, + WORK = 734, + WRAPPER = 735, + WRITE_P = 736, + XML_P = 737, + XMLATTRIBUTES = 738, + XMLCONCAT = 739, + XMLELEMENT = 740, + XMLEXISTS = 741, + XMLFOREST = 742, + XMLNAMESPACES = 743, + XMLPARSE = 744, + XMLPI = 745, + XMLROOT = 746, + XMLSERIALIZE = 747, + XMLTABLE = 748, + YEAR_P = 749, + YEARS_P = 750, + YES_P = 751, + ZONE = 752, + NOT_LA = 753, + NULLS_LA = 754, + WITH_LA = 755, + POSTFIXOP = 756, + UMINUS = 757 + }; #endif +/* Tokens. */ +#define IDENT 258 +#define FCONST 259 +#define SCONST 260 +#define BCONST 261 +#define XCONST 262 +#define Op 263 +#define ICONST 264 +#define PARAM 265 +#define TYPECAST 266 +#define DOT_DOT 267 +#define COLON_EQUALS 268 +#define EQUALS_GREATER 269 +#define INTEGER_DIVISION 270 +#define POWER_OF 271 +#define LAMBDA_ARROW 272 +#define DOUBLE_ARROW 273 +#define LESS_EQUALS 274 +#define GREATER_EQUALS 275 +#define NOT_EQUALS 276 +#define ABORT_P 277 +#define ABSOLUTE_P 278 +#define ACCESS 279 +#define ACTION 280 +#define ADD_P 281 +#define ADMIN 282 +#define AFTER 283 +#define AGGREGATE 284 +#define ALL 285 +#define ALSO 286 +#define ALTER 287 +#define ALWAYS 288 +#define ANALYSE 289 +#define ANALYZE 290 +#define AND 291 +#define ANTI 292 +#define ANY 293 +#define ARRAY 294 +#define AS 295 +#define ASC_P 296 +#define ASOF 297 +#define ASSERTION 298 +#define ASSIGNMENT 299 +#define ASYMMETRIC 300 +#define AT 301 +#define ATTACH 302 +#define ATTRIBUTE 303 +#define AUTHORIZATION 304 +#define BACKWARD 305 +#define BEFORE 306 +#define BEGIN_P 307 +#define BETWEEN 308 +#define BIGINT 309 +#define BINARY 310 +#define BIT 311 +#define BOOLEAN_P 312 +#define BOTH 313 +#define BY 314 +#define CACHE 315 +#define CALL_P 316 +#define CALLED 317 +#define CASCADE 318 +#define CASCADED 319 +#define CASE 320 +#define CAST 321 +#define CATALOG_P 322 +#define CENTURIES_P 323 +#define CENTURY_P 324 +#define CHAIN 325 +#define CHAR_P 326 +#define CHARACTER 327 +#define CHARACTERISTICS 328 +#define CHECK_P 329 +#define CHECKPOINT 330 +#define CLASS 331 +#define CLOSE 332 +#define CLUSTER 333 +#define COALESCE 334 +#define COLLATE 335 +#define COLLATION 336 +#define COLUMN 337 +#define COLUMNS 338 +#define COMMENT 339 +#define COMMENTS 340 +#define COMMIT 341 +#define COMMITTED 342 +#define COMPRESSION 343 +#define CONCURRENTLY 344 +#define CONFIGURATION 345 +#define CONFLICT 346 +#define CONNECTION 347 +#define CONSTRAINT 348 +#define CONSTRAINTS 349 +#define CONTENT_P 350 +#define CONTINUE_P 351 +#define CONVERSION_P 352 +#define COPY 353 +#define COST 354 +#define CREATE_P 355 +#define CROSS 356 +#define CSV 357 +#define CUBE 358 +#define CURRENT_P 359 +#define CURSOR 360 +#define CYCLE 361 +#define DATA_P 362 +#define DATABASE 363 +#define DAY_P 364 +#define DAYS_P 365 +#define DEALLOCATE 366 +#define DEC 367 +#define DECADE_P 368 +#define DECADES_P 369 +#define DECIMAL_P 370 +#define DECLARE 371 +#define DEFAULT 372 +#define DEFAULTS 373 +#define DEFERRABLE 374 +#define DEFERRED 375 +#define DEFINER 376 +#define DELETE_P 377 +#define DELIMITER 378 +#define DELIMITERS 379 +#define DEPENDS 380 +#define DESC_P 381 +#define DESCRIBE 382 +#define DETACH 383 +#define DICTIONARY 384 +#define DISABLE_P 385 +#define DISCARD 386 +#define DISTINCT 387 +#define DO 388 +#define DOCUMENT_P 389 +#define DOMAIN_P 390 +#define DOUBLE_P 391 +#define DROP 392 +#define EACH 393 +#define ELSE 394 +#define ENABLE_P 395 +#define ENCODING 396 +#define ENCRYPTED 397 +#define END_P 398 +#define ENUM_P 399 +#define ESCAPE 400 +#define EVENT 401 +#define EXCEPT 402 +#define EXCLUDE 403 +#define EXCLUDING 404 +#define EXCLUSIVE 405 +#define EXECUTE 406 +#define EXISTS 407 +#define EXPLAIN 408 +#define EXPORT_P 409 +#define EXPORT_STATE 410 +#define EXTENSION 411 +#define EXTERNAL 412 +#define EXTRACT 413 +#define FALSE_P 414 +#define FAMILY 415 +#define FETCH 416 +#define FILTER 417 +#define FIRST_P 418 +#define FLOAT_P 419 +#define FOLLOWING 420 +#define FOR 421 +#define FORCE 422 +#define FOREIGN 423 +#define FORWARD 424 +#define FREEZE 425 +#define FROM 426 +#define FULL 427 +#define FUNCTION 428 +#define FUNCTIONS 429 +#define GENERATED 430 +#define GLOB 431 +#define GLOBAL 432 +#define GRANT 433 +#define GRANTED 434 +#define GROUP_P 435 +#define GROUPING 436 +#define GROUPING_ID 437 +#define GROUPS 438 +#define HANDLER 439 +#define HAVING 440 +#define HEADER_P 441 +#define HOLD 442 +#define HOUR_P 443 +#define HOURS_P 444 +#define IDENTITY_P 445 +#define IF_P 446 +#define IGNORE_P 447 +#define ILIKE 448 +#define IMMEDIATE 449 +#define IMMUTABLE 450 +#define IMPLICIT_P 451 +#define IMPORT_P 452 +#define IN_P 453 +#define INCLUDE_P 454 +#define INCLUDING 455 +#define INCREMENT 456 +#define INDEX 457 +#define INDEXES 458 +#define INHERIT 459 +#define INHERITS 460 +#define INITIALLY 461 +#define INLINE_P 462 +#define INNER_P 463 +#define INOUT 464 +#define INPUT_P 465 +#define INSENSITIVE 466 +#define INSERT 467 +#define INSTALL 468 +#define INSTEAD 469 +#define INT_P 470 +#define INTEGER 471 +#define INTERSECT 472 +#define INTERVAL 473 +#define INTO 474 +#define INVOKER 475 +#define IS 476 +#define ISNULL 477 +#define ISOLATION 478 +#define JOIN 479 +#define JSON 480 +#define KEY 481 +#define LABEL 482 +#define LANGUAGE 483 +#define LARGE_P 484 +#define LAST_P 485 +#define LATERAL_P 486 +#define LEADING 487 +#define LEAKPROOF 488 +#define LEFT 489 +#define LEVEL 490 +#define LIKE 491 +#define LIMIT 492 +#define LISTEN 493 +#define LOAD 494 +#define LOCAL 495 +#define LOCATION 496 +#define LOCK_P 497 +#define LOCKED 498 +#define LOGGED 499 +#define MACRO 500 +#define MAP 501 +#define MAPPING 502 +#define MATCH 503 +#define MATERIALIZED 504 +#define MAXVALUE 505 +#define METHOD 506 +#define MICROSECOND_P 507 +#define MICROSECONDS_P 508 +#define MILLENNIA_P 509 +#define MILLENNIUM_P 510 +#define MILLISECOND_P 511 +#define MILLISECONDS_P 512 +#define MINUTE_P 513 +#define MINUTES_P 514 +#define MINVALUE 515 +#define MODE 516 +#define MONTH_P 517 +#define MONTHS_P 518 +#define MOVE 519 +#define NAME_P 520 +#define NAMES 521 +#define NATIONAL 522 +#define NATURAL 523 +#define NCHAR 524 +#define NEW 525 +#define NEXT 526 +#define NO 527 +#define NONE 528 +#define NOT 529 +#define NOTHING 530 +#define NOTIFY 531 +#define NOTNULL 532 +#define NOWAIT 533 +#define NULL_P 534 +#define NULLIF 535 +#define NULLS_P 536 +#define NUMERIC 537 +#define OBJECT_P 538 +#define OF 539 +#define OFF 540 +#define OFFSET 541 +#define OIDS 542 +#define OLD 543 +#define ON 544 +#define ONLY 545 +#define OPERATOR 546 +#define OPTION 547 +#define OPTIONS 548 +#define OR 549 +#define ORDER 550 +#define ORDINALITY 551 +#define OTHERS 552 +#define OUT_P 553 +#define OUTER_P 554 +#define OVER 555 +#define OVERLAPS 556 +#define OVERLAY 557 +#define OVERRIDING 558 +#define OWNED 559 +#define OWNER 560 +#define PARALLEL 561 +#define PARSER 562 +#define PARTIAL 563 +#define PARTITION 564 +#define PASSING 565 +#define PASSWORD 566 +#define PERCENT 567 +#define PERSISTENT 568 +#define PIVOT 569 +#define PIVOT_LONGER 570 +#define PIVOT_WIDER 571 +#define PLACING 572 +#define PLANS 573 +#define POLICY 574 +#define POSITION 575 +#define POSITIONAL 576 +#define PRAGMA_P 577 +#define PRECEDING 578 +#define PRECISION 579 +#define PREPARE 580 +#define PREPARED 581 +#define PRESERVE 582 +#define PRIMARY 583 +#define PRIOR 584 +#define PRIVILEGES 585 +#define PROCEDURAL 586 +#define PROCEDURE 587 +#define PROGRAM 588 +#define PUBLICATION 589 +#define QUALIFY 590 +#define QUOTE 591 +#define RANGE 592 +#define READ_P 593 +#define REAL 594 +#define REASSIGN 595 +#define RECHECK 596 +#define RECURSIVE 597 +#define REF 598 +#define REFERENCES 599 +#define REFERENCING 600 +#define REFRESH 601 +#define REINDEX 602 +#define RELATIVE_P 603 +#define RELEASE 604 +#define RENAME 605 +#define REPEATABLE 606 +#define REPLACE 607 +#define REPLICA 608 +#define RESET 609 +#define RESPECT_P 610 +#define RESTART 611 +#define RESTRICT 612 +#define RETURNING 613 +#define RETURNS 614 +#define REVOKE 615 +#define RIGHT 616 +#define ROLE 617 +#define ROLLBACK 618 +#define ROLLUP 619 +#define ROW 620 +#define ROWS 621 +#define RULE 622 +#define SAMPLE 623 +#define SAVEPOINT 624 +#define SCHEMA 625 +#define SCHEMAS 626 +#define SCOPE 627 +#define SCROLL 628 +#define SEARCH 629 +#define SECOND_P 630 +#define SECONDS_P 631 +#define SECRET 632 +#define SECURITY 633 +#define SELECT 634 +#define SEMI 635 +#define SEQUENCE 636 +#define SEQUENCES 637 +#define SERIALIZABLE 638 +#define SERVER 639 +#define SESSION 640 +#define SET 641 +#define SETOF 642 +#define SETS 643 +#define SHARE 644 +#define SHOW 645 +#define SIMILAR 646 +#define SIMPLE 647 +#define SKIP 648 +#define SMALLINT 649 +#define SNAPSHOT 650 +#define SOME 651 +#define SQL_P 652 +#define STABLE 653 +#define STANDALONE_P 654 +#define START 655 +#define STATEMENT 656 +#define STATISTICS 657 +#define STDIN 658 +#define STDOUT 659 +#define STORAGE 660 +#define STORED 661 +#define STRICT_P 662 +#define STRIP_P 663 +#define STRUCT 664 +#define SUBSCRIPTION 665 +#define SUBSTRING 666 +#define SUMMARIZE 667 +#define SYMMETRIC 668 +#define SYSID 669 +#define SYSTEM_P 670 +#define TABLE 671 +#define TABLES 672 +#define TABLESAMPLE 673 +#define TABLESPACE 674 +#define TEMP 675 +#define TEMPLATE 676 +#define TEMPORARY 677 +#define TEXT_P 678 +#define THEN 679 +#define TIES 680 +#define TIME 681 +#define TIMESTAMP 682 +#define TO 683 +#define TRAILING 684 +#define TRANSACTION 685 +#define TRANSFORM 686 +#define TREAT 687 +#define TRIGGER 688 +#define TRIM 689 +#define TRUE_P 690 +#define TRUNCATE 691 +#define TRUSTED 692 +#define TRY_CAST 693 +#define TYPE_P 694 +#define TYPES_P 695 +#define UNBOUNDED 696 +#define UNCOMMITTED 697 +#define UNENCRYPTED 698 +#define UNION 699 +#define UNIQUE 700 +#define UNKNOWN 701 +#define UNLISTEN 702 +#define UNLOGGED 703 +#define UNPIVOT 704 +#define UNTIL 705 +#define UPDATE 706 +#define USE_P 707 +#define USER 708 +#define USING 709 +#define VACUUM 710 +#define VALID 711 +#define VALIDATE 712 +#define VALIDATOR 713 +#define VALUE_P 714 +#define VALUES 715 +#define VARCHAR 716 +#define VARIADIC 717 +#define VARYING 718 +#define VERBOSE 719 +#define VERSION_P 720 +#define VIEW 721 +#define VIEWS 722 +#define VIRTUAL 723 +#define VOLATILE 724 +#define WEEK_P 725 +#define WEEKS_P 726 +#define WHEN 727 +#define WHERE 728 +#define WHITESPACE_P 729 +#define WINDOW 730 +#define WITH 731 +#define WITHIN 732 +#define WITHOUT 733 +#define WORK 734 +#define WRAPPER 735 +#define WRITE_P 736 +#define XML_P 737 +#define XMLATTRIBUTES 738 +#define XMLCONCAT 739 +#define XMLELEMENT 740 +#define XMLEXISTS 741 +#define XMLFOREST 742 +#define XMLNAMESPACES 743 +#define XMLPARSE 744 +#define XMLPI 745 +#define XMLROOT 746 +#define XMLSERIALIZE 747 +#define XMLTABLE 748 +#define YEAR_P 749 +#define YEARS_P 750 +#define YES_P 751 +#define ZONE 752 +#define NOT_LA 753 +#define NULLS_LA 754 +#define WITH_LA 755 +#define POSTFIXOP 756 +#define UMINUS 757 + + + -/* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE -{ +typedef union YYSTYPE #line 14 "third_party/libpg_query/grammar/grammar.y" - +{ core_YYSTYPE core_yystype; /* these fields must match core_YYSTYPE: */ int ival; @@ -609,33 +1095,28 @@ union YYSTYPE PGSubLinkType subquerytype; PGViewCheckOption viewcheckoption; PGInsertColumnOrder bynameorposition; - -#line 614 "third_party/libpg_query/grammar/grammar_out.hpp" - -}; -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 +} +/* Line 1529 of yacc.c. */ +#line 1101 "third_party/libpg_query/grammar/grammar_out.hpp" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif -/* Location type. */ + + #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED -typedef struct YYLTYPE YYLTYPE; -struct YYLTYPE +typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; -}; +} YYLTYPE; +# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ # define YYLTYPE_IS_DECLARED 1 # define YYLTYPE_IS_TRIVIAL 1 #endif - - -int base_yyparse (core_yyscan_t yyscanner); - - -#endif /* !YY_BASE_YY_THIRD_PARTY_LIBPG_QUERY_GRAMMAR_GRAMMAR_OUT_HPP_INCLUDED */ diff --git a/third_party/libpg_query/src_backend_parser_gram.cpp b/third_party/libpg_query/src_backend_parser_gram.cpp index a67207543626..bf569d2b5a10 100644 --- a/third_party/libpg_query/src_backend_parser_gram.cpp +++ b/third_party/libpg_query/src_backend_parser_gram.cpp @@ -1,14 +1,14 @@ -/* A Bison parser, made by GNU Bison 3.8.2. */ +/* A Bison parser, made by GNU Bison 2.3. */ -/* Bison implementation for Yacc-like parsers in C +/* Skeleton implementation for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, - Inc. + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + the Free Software Foundation; either version 2, or (at your option) + any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +16,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -34,10 +36,6 @@ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ -/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, - especially those whose name start with YY_ or yy_. They are - private implementation details that can be changed or removed. */ - /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. @@ -45,11 +43,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Identify Bison output, and Bison version. */ -#define YYBISON 30802 +/* Identify Bison output. */ +#define YYBISON 1 -/* Bison version string. */ -#define YYBISON_VERSION "3.8.2" +/* Bison version. */ +#define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -57,21 +55,1033 @@ /* Pure parsers. */ #define YYPURE 1 -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - +/* Using locations. */ +#define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ -#define yyparse base_yyparse -#define yylex base_yylex -#define yyerror base_yyerror -#define yydebug base_yydebug -#define yynerrs base_yynerrs - -/* First part of user prologue. */ +#define yyparse base_yyparse +#define yylex base_yylex +#define yyerror base_yyerror +#define yylval base_yylval +#define yychar base_yychar +#define yydebug base_yydebug +#define yynerrs base_yynerrs +#define yylloc base_yylloc + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + IDENT = 258, + FCONST = 259, + SCONST = 260, + BCONST = 261, + XCONST = 262, + Op = 263, + ICONST = 264, + PARAM = 265, + TYPECAST = 266, + DOT_DOT = 267, + COLON_EQUALS = 268, + EQUALS_GREATER = 269, + INTEGER_DIVISION = 270, + POWER_OF = 271, + LAMBDA_ARROW = 272, + DOUBLE_ARROW = 273, + LESS_EQUALS = 274, + GREATER_EQUALS = 275, + NOT_EQUALS = 276, + ABORT_P = 277, + ABSOLUTE_P = 278, + ACCESS = 279, + ACTION = 280, + ADD_P = 281, + ADMIN = 282, + AFTER = 283, + AGGREGATE = 284, + ALL = 285, + ALSO = 286, + ALTER = 287, + ALWAYS = 288, + ANALYSE = 289, + ANALYZE = 290, + AND = 291, + ANTI = 292, + ANY = 293, + ARRAY = 294, + AS = 295, + ASC_P = 296, + ASOF = 297, + ASSERTION = 298, + ASSIGNMENT = 299, + ASYMMETRIC = 300, + AT = 301, + ATTACH = 302, + ATTRIBUTE = 303, + AUTHORIZATION = 304, + BACKWARD = 305, + BEFORE = 306, + BEGIN_P = 307, + BETWEEN = 308, + BIGINT = 309, + BINARY = 310, + BIT = 311, + BOOLEAN_P = 312, + BOTH = 313, + BY = 314, + CACHE = 315, + CALL_P = 316, + CALLED = 317, + CASCADE = 318, + CASCADED = 319, + CASE = 320, + CAST = 321, + CATALOG_P = 322, + CENTURIES_P = 323, + CENTURY_P = 324, + CHAIN = 325, + CHAR_P = 326, + CHARACTER = 327, + CHARACTERISTICS = 328, + CHECK_P = 329, + CHECKPOINT = 330, + CLASS = 331, + CLOSE = 332, + CLUSTER = 333, + COALESCE = 334, + COLLATE = 335, + COLLATION = 336, + COLUMN = 337, + COLUMNS = 338, + COMMENT = 339, + COMMENTS = 340, + COMMIT = 341, + COMMITTED = 342, + COMPRESSION = 343, + CONCURRENTLY = 344, + CONFIGURATION = 345, + CONFLICT = 346, + CONNECTION = 347, + CONSTRAINT = 348, + CONSTRAINTS = 349, + CONTENT_P = 350, + CONTINUE_P = 351, + CONVERSION_P = 352, + COPY = 353, + COST = 354, + CREATE_P = 355, + CROSS = 356, + CSV = 357, + CUBE = 358, + CURRENT_P = 359, + CURSOR = 360, + CYCLE = 361, + DATA_P = 362, + DATABASE = 363, + DAY_P = 364, + DAYS_P = 365, + DEALLOCATE = 366, + DEC = 367, + DECADE_P = 368, + DECADES_P = 369, + DECIMAL_P = 370, + DECLARE = 371, + DEFAULT = 372, + DEFAULTS = 373, + DEFERRABLE = 374, + DEFERRED = 375, + DEFINER = 376, + DELETE_P = 377, + DELIMITER = 378, + DELIMITERS = 379, + DEPENDS = 380, + DESC_P = 381, + DESCRIBE = 382, + DETACH = 383, + DICTIONARY = 384, + DISABLE_P = 385, + DISCARD = 386, + DISTINCT = 387, + DO = 388, + DOCUMENT_P = 389, + DOMAIN_P = 390, + DOUBLE_P = 391, + DROP = 392, + EACH = 393, + ELSE = 394, + ENABLE_P = 395, + ENCODING = 396, + ENCRYPTED = 397, + END_P = 398, + ENUM_P = 399, + ESCAPE = 400, + EVENT = 401, + EXCEPT = 402, + EXCLUDE = 403, + EXCLUDING = 404, + EXCLUSIVE = 405, + EXECUTE = 406, + EXISTS = 407, + EXPLAIN = 408, + EXPORT_P = 409, + EXPORT_STATE = 410, + EXTENSION = 411, + EXTERNAL = 412, + EXTRACT = 413, + FALSE_P = 414, + FAMILY = 415, + FETCH = 416, + FILTER = 417, + FIRST_P = 418, + FLOAT_P = 419, + FOLLOWING = 420, + FOR = 421, + FORCE = 422, + FOREIGN = 423, + FORWARD = 424, + FREEZE = 425, + FROM = 426, + FULL = 427, + FUNCTION = 428, + FUNCTIONS = 429, + GENERATED = 430, + GLOB = 431, + GLOBAL = 432, + GRANT = 433, + GRANTED = 434, + GROUP_P = 435, + GROUPING = 436, + GROUPING_ID = 437, + GROUPS = 438, + HANDLER = 439, + HAVING = 440, + HEADER_P = 441, + HOLD = 442, + HOUR_P = 443, + HOURS_P = 444, + IDENTITY_P = 445, + IF_P = 446, + IGNORE_P = 447, + ILIKE = 448, + IMMEDIATE = 449, + IMMUTABLE = 450, + IMPLICIT_P = 451, + IMPORT_P = 452, + IN_P = 453, + INCLUDE_P = 454, + INCLUDING = 455, + INCREMENT = 456, + INDEX = 457, + INDEXES = 458, + INHERIT = 459, + INHERITS = 460, + INITIALLY = 461, + INLINE_P = 462, + INNER_P = 463, + INOUT = 464, + INPUT_P = 465, + INSENSITIVE = 466, + INSERT = 467, + INSTALL = 468, + INSTEAD = 469, + INT_P = 470, + INTEGER = 471, + INTERSECT = 472, + INTERVAL = 473, + INTO = 474, + INVOKER = 475, + IS = 476, + ISNULL = 477, + ISOLATION = 478, + JOIN = 479, + JSON = 480, + KEY = 481, + LABEL = 482, + LANGUAGE = 483, + LARGE_P = 484, + LAST_P = 485, + LATERAL_P = 486, + LEADING = 487, + LEAKPROOF = 488, + LEFT = 489, + LEVEL = 490, + LIKE = 491, + LIMIT = 492, + LISTEN = 493, + LOAD = 494, + LOCAL = 495, + LOCATION = 496, + LOCK_P = 497, + LOCKED = 498, + LOGGED = 499, + MACRO = 500, + MAP = 501, + MAPPING = 502, + MATCH = 503, + MATERIALIZED = 504, + MAXVALUE = 505, + METHOD = 506, + MICROSECOND_P = 507, + MICROSECONDS_P = 508, + MILLENNIA_P = 509, + MILLENNIUM_P = 510, + MILLISECOND_P = 511, + MILLISECONDS_P = 512, + MINUTE_P = 513, + MINUTES_P = 514, + MINVALUE = 515, + MODE = 516, + MONTH_P = 517, + MONTHS_P = 518, + MOVE = 519, + NAME_P = 520, + NAMES = 521, + NATIONAL = 522, + NATURAL = 523, + NCHAR = 524, + NEW = 525, + NEXT = 526, + NO = 527, + NONE = 528, + NOT = 529, + NOTHING = 530, + NOTIFY = 531, + NOTNULL = 532, + NOWAIT = 533, + NULL_P = 534, + NULLIF = 535, + NULLS_P = 536, + NUMERIC = 537, + OBJECT_P = 538, + OF = 539, + OFF = 540, + OFFSET = 541, + OIDS = 542, + OLD = 543, + ON = 544, + ONLY = 545, + OPERATOR = 546, + OPTION = 547, + OPTIONS = 548, + OR = 549, + ORDER = 550, + ORDINALITY = 551, + OTHERS = 552, + OUT_P = 553, + OUTER_P = 554, + OVER = 555, + OVERLAPS = 556, + OVERLAY = 557, + OVERRIDING = 558, + OWNED = 559, + OWNER = 560, + PARALLEL = 561, + PARSER = 562, + PARTIAL = 563, + PARTITION = 564, + PASSING = 565, + PASSWORD = 566, + PERCENT = 567, + PERSISTENT = 568, + PIVOT = 569, + PIVOT_LONGER = 570, + PIVOT_WIDER = 571, + PLACING = 572, + PLANS = 573, + POLICY = 574, + POSITION = 575, + POSITIONAL = 576, + PRAGMA_P = 577, + PRECEDING = 578, + PRECISION = 579, + PREPARE = 580, + PREPARED = 581, + PRESERVE = 582, + PRIMARY = 583, + PRIOR = 584, + PRIVILEGES = 585, + PROCEDURAL = 586, + PROCEDURE = 587, + PROGRAM = 588, + PUBLICATION = 589, + QUALIFY = 590, + QUOTE = 591, + RANGE = 592, + READ_P = 593, + REAL = 594, + REASSIGN = 595, + RECHECK = 596, + RECURSIVE = 597, + REF = 598, + REFERENCES = 599, + REFERENCING = 600, + REFRESH = 601, + REINDEX = 602, + RELATIVE_P = 603, + RELEASE = 604, + RENAME = 605, + REPEATABLE = 606, + REPLACE = 607, + REPLICA = 608, + RESET = 609, + RESPECT_P = 610, + RESTART = 611, + RESTRICT = 612, + RETURNING = 613, + RETURNS = 614, + REVOKE = 615, + RIGHT = 616, + ROLE = 617, + ROLLBACK = 618, + ROLLUP = 619, + ROW = 620, + ROWS = 621, + RULE = 622, + SAMPLE = 623, + SAVEPOINT = 624, + SCHEMA = 625, + SCHEMAS = 626, + SCOPE = 627, + SCROLL = 628, + SEARCH = 629, + SECOND_P = 630, + SECONDS_P = 631, + SECRET = 632, + SECURITY = 633, + SELECT = 634, + SEMI = 635, + SEQUENCE = 636, + SEQUENCES = 637, + SERIALIZABLE = 638, + SERVER = 639, + SESSION = 640, + SET = 641, + SETOF = 642, + SETS = 643, + SHARE = 644, + SHOW = 645, + SIMILAR = 646, + SIMPLE = 647, + SKIP = 648, + SMALLINT = 649, + SNAPSHOT = 650, + SOME = 651, + SQL_P = 652, + STABLE = 653, + STANDALONE_P = 654, + START = 655, + STATEMENT = 656, + STATISTICS = 657, + STDIN = 658, + STDOUT = 659, + STORAGE = 660, + STORED = 661, + STRICT_P = 662, + STRIP_P = 663, + STRUCT = 664, + SUBSCRIPTION = 665, + SUBSTRING = 666, + SUMMARIZE = 667, + SYMMETRIC = 668, + SYSID = 669, + SYSTEM_P = 670, + TABLE = 671, + TABLES = 672, + TABLESAMPLE = 673, + TABLESPACE = 674, + TEMP = 675, + TEMPLATE = 676, + TEMPORARY = 677, + TEXT_P = 678, + THEN = 679, + TIES = 680, + TIME = 681, + TIMESTAMP = 682, + TO = 683, + TRAILING = 684, + TRANSACTION = 685, + TRANSFORM = 686, + TREAT = 687, + TRIGGER = 688, + TRIM = 689, + TRUE_P = 690, + TRUNCATE = 691, + TRUSTED = 692, + TRY_CAST = 693, + TYPE_P = 694, + TYPES_P = 695, + UNBOUNDED = 696, + UNCOMMITTED = 697, + UNENCRYPTED = 698, + UNION = 699, + UNIQUE = 700, + UNKNOWN = 701, + UNLISTEN = 702, + UNLOGGED = 703, + UNPIVOT = 704, + UNTIL = 705, + UPDATE = 706, + USE_P = 707, + USER = 708, + USING = 709, + VACUUM = 710, + VALID = 711, + VALIDATE = 712, + VALIDATOR = 713, + VALUE_P = 714, + VALUES = 715, + VARCHAR = 716, + VARIADIC = 717, + VARYING = 718, + VERBOSE = 719, + VERSION_P = 720, + VIEW = 721, + VIEWS = 722, + VIRTUAL = 723, + VOLATILE = 724, + WEEK_P = 725, + WEEKS_P = 726, + WHEN = 727, + WHERE = 728, + WHITESPACE_P = 729, + WINDOW = 730, + WITH = 731, + WITHIN = 732, + WITHOUT = 733, + WORK = 734, + WRAPPER = 735, + WRITE_P = 736, + XML_P = 737, + XMLATTRIBUTES = 738, + XMLCONCAT = 739, + XMLELEMENT = 740, + XMLEXISTS = 741, + XMLFOREST = 742, + XMLNAMESPACES = 743, + XMLPARSE = 744, + XMLPI = 745, + XMLROOT = 746, + XMLSERIALIZE = 747, + XMLTABLE = 748, + YEAR_P = 749, + YEARS_P = 750, + YES_P = 751, + ZONE = 752, + NOT_LA = 753, + NULLS_LA = 754, + WITH_LA = 755, + POSTFIXOP = 756, + UMINUS = 757 + }; +#endif +/* Tokens. */ +#define IDENT 258 +#define FCONST 259 +#define SCONST 260 +#define BCONST 261 +#define XCONST 262 +#define Op 263 +#define ICONST 264 +#define PARAM 265 +#define TYPECAST 266 +#define DOT_DOT 267 +#define COLON_EQUALS 268 +#define EQUALS_GREATER 269 +#define INTEGER_DIVISION 270 +#define POWER_OF 271 +#define LAMBDA_ARROW 272 +#define DOUBLE_ARROW 273 +#define LESS_EQUALS 274 +#define GREATER_EQUALS 275 +#define NOT_EQUALS 276 +#define ABORT_P 277 +#define ABSOLUTE_P 278 +#define ACCESS 279 +#define ACTION 280 +#define ADD_P 281 +#define ADMIN 282 +#define AFTER 283 +#define AGGREGATE 284 +#define ALL 285 +#define ALSO 286 +#define ALTER 287 +#define ALWAYS 288 +#define ANALYSE 289 +#define ANALYZE 290 +#define AND 291 +#define ANTI 292 +#define ANY 293 +#define ARRAY 294 +#define AS 295 +#define ASC_P 296 +#define ASOF 297 +#define ASSERTION 298 +#define ASSIGNMENT 299 +#define ASYMMETRIC 300 +#define AT 301 +#define ATTACH 302 +#define ATTRIBUTE 303 +#define AUTHORIZATION 304 +#define BACKWARD 305 +#define BEFORE 306 +#define BEGIN_P 307 +#define BETWEEN 308 +#define BIGINT 309 +#define BINARY 310 +#define BIT 311 +#define BOOLEAN_P 312 +#define BOTH 313 +#define BY 314 +#define CACHE 315 +#define CALL_P 316 +#define CALLED 317 +#define CASCADE 318 +#define CASCADED 319 +#define CASE 320 +#define CAST 321 +#define CATALOG_P 322 +#define CENTURIES_P 323 +#define CENTURY_P 324 +#define CHAIN 325 +#define CHAR_P 326 +#define CHARACTER 327 +#define CHARACTERISTICS 328 +#define CHECK_P 329 +#define CHECKPOINT 330 +#define CLASS 331 +#define CLOSE 332 +#define CLUSTER 333 +#define COALESCE 334 +#define COLLATE 335 +#define COLLATION 336 +#define COLUMN 337 +#define COLUMNS 338 +#define COMMENT 339 +#define COMMENTS 340 +#define COMMIT 341 +#define COMMITTED 342 +#define COMPRESSION 343 +#define CONCURRENTLY 344 +#define CONFIGURATION 345 +#define CONFLICT 346 +#define CONNECTION 347 +#define CONSTRAINT 348 +#define CONSTRAINTS 349 +#define CONTENT_P 350 +#define CONTINUE_P 351 +#define CONVERSION_P 352 +#define COPY 353 +#define COST 354 +#define CREATE_P 355 +#define CROSS 356 +#define CSV 357 +#define CUBE 358 +#define CURRENT_P 359 +#define CURSOR 360 +#define CYCLE 361 +#define DATA_P 362 +#define DATABASE 363 +#define DAY_P 364 +#define DAYS_P 365 +#define DEALLOCATE 366 +#define DEC 367 +#define DECADE_P 368 +#define DECADES_P 369 +#define DECIMAL_P 370 +#define DECLARE 371 +#define DEFAULT 372 +#define DEFAULTS 373 +#define DEFERRABLE 374 +#define DEFERRED 375 +#define DEFINER 376 +#define DELETE_P 377 +#define DELIMITER 378 +#define DELIMITERS 379 +#define DEPENDS 380 +#define DESC_P 381 +#define DESCRIBE 382 +#define DETACH 383 +#define DICTIONARY 384 +#define DISABLE_P 385 +#define DISCARD 386 +#define DISTINCT 387 +#define DO 388 +#define DOCUMENT_P 389 +#define DOMAIN_P 390 +#define DOUBLE_P 391 +#define DROP 392 +#define EACH 393 +#define ELSE 394 +#define ENABLE_P 395 +#define ENCODING 396 +#define ENCRYPTED 397 +#define END_P 398 +#define ENUM_P 399 +#define ESCAPE 400 +#define EVENT 401 +#define EXCEPT 402 +#define EXCLUDE 403 +#define EXCLUDING 404 +#define EXCLUSIVE 405 +#define EXECUTE 406 +#define EXISTS 407 +#define EXPLAIN 408 +#define EXPORT_P 409 +#define EXPORT_STATE 410 +#define EXTENSION 411 +#define EXTERNAL 412 +#define EXTRACT 413 +#define FALSE_P 414 +#define FAMILY 415 +#define FETCH 416 +#define FILTER 417 +#define FIRST_P 418 +#define FLOAT_P 419 +#define FOLLOWING 420 +#define FOR 421 +#define FORCE 422 +#define FOREIGN 423 +#define FORWARD 424 +#define FREEZE 425 +#define FROM 426 +#define FULL 427 +#define FUNCTION 428 +#define FUNCTIONS 429 +#define GENERATED 430 +#define GLOB 431 +#define GLOBAL 432 +#define GRANT 433 +#define GRANTED 434 +#define GROUP_P 435 +#define GROUPING 436 +#define GROUPING_ID 437 +#define GROUPS 438 +#define HANDLER 439 +#define HAVING 440 +#define HEADER_P 441 +#define HOLD 442 +#define HOUR_P 443 +#define HOURS_P 444 +#define IDENTITY_P 445 +#define IF_P 446 +#define IGNORE_P 447 +#define ILIKE 448 +#define IMMEDIATE 449 +#define IMMUTABLE 450 +#define IMPLICIT_P 451 +#define IMPORT_P 452 +#define IN_P 453 +#define INCLUDE_P 454 +#define INCLUDING 455 +#define INCREMENT 456 +#define INDEX 457 +#define INDEXES 458 +#define INHERIT 459 +#define INHERITS 460 +#define INITIALLY 461 +#define INLINE_P 462 +#define INNER_P 463 +#define INOUT 464 +#define INPUT_P 465 +#define INSENSITIVE 466 +#define INSERT 467 +#define INSTALL 468 +#define INSTEAD 469 +#define INT_P 470 +#define INTEGER 471 +#define INTERSECT 472 +#define INTERVAL 473 +#define INTO 474 +#define INVOKER 475 +#define IS 476 +#define ISNULL 477 +#define ISOLATION 478 +#define JOIN 479 +#define JSON 480 +#define KEY 481 +#define LABEL 482 +#define LANGUAGE 483 +#define LARGE_P 484 +#define LAST_P 485 +#define LATERAL_P 486 +#define LEADING 487 +#define LEAKPROOF 488 +#define LEFT 489 +#define LEVEL 490 +#define LIKE 491 +#define LIMIT 492 +#define LISTEN 493 +#define LOAD 494 +#define LOCAL 495 +#define LOCATION 496 +#define LOCK_P 497 +#define LOCKED 498 +#define LOGGED 499 +#define MACRO 500 +#define MAP 501 +#define MAPPING 502 +#define MATCH 503 +#define MATERIALIZED 504 +#define MAXVALUE 505 +#define METHOD 506 +#define MICROSECOND_P 507 +#define MICROSECONDS_P 508 +#define MILLENNIA_P 509 +#define MILLENNIUM_P 510 +#define MILLISECOND_P 511 +#define MILLISECONDS_P 512 +#define MINUTE_P 513 +#define MINUTES_P 514 +#define MINVALUE 515 +#define MODE 516 +#define MONTH_P 517 +#define MONTHS_P 518 +#define MOVE 519 +#define NAME_P 520 +#define NAMES 521 +#define NATIONAL 522 +#define NATURAL 523 +#define NCHAR 524 +#define NEW 525 +#define NEXT 526 +#define NO 527 +#define NONE 528 +#define NOT 529 +#define NOTHING 530 +#define NOTIFY 531 +#define NOTNULL 532 +#define NOWAIT 533 +#define NULL_P 534 +#define NULLIF 535 +#define NULLS_P 536 +#define NUMERIC 537 +#define OBJECT_P 538 +#define OF 539 +#define OFF 540 +#define OFFSET 541 +#define OIDS 542 +#define OLD 543 +#define ON 544 +#define ONLY 545 +#define OPERATOR 546 +#define OPTION 547 +#define OPTIONS 548 +#define OR 549 +#define ORDER 550 +#define ORDINALITY 551 +#define OTHERS 552 +#define OUT_P 553 +#define OUTER_P 554 +#define OVER 555 +#define OVERLAPS 556 +#define OVERLAY 557 +#define OVERRIDING 558 +#define OWNED 559 +#define OWNER 560 +#define PARALLEL 561 +#define PARSER 562 +#define PARTIAL 563 +#define PARTITION 564 +#define PASSING 565 +#define PASSWORD 566 +#define PERCENT 567 +#define PERSISTENT 568 +#define PIVOT 569 +#define PIVOT_LONGER 570 +#define PIVOT_WIDER 571 +#define PLACING 572 +#define PLANS 573 +#define POLICY 574 +#define POSITION 575 +#define POSITIONAL 576 +#define PRAGMA_P 577 +#define PRECEDING 578 +#define PRECISION 579 +#define PREPARE 580 +#define PREPARED 581 +#define PRESERVE 582 +#define PRIMARY 583 +#define PRIOR 584 +#define PRIVILEGES 585 +#define PROCEDURAL 586 +#define PROCEDURE 587 +#define PROGRAM 588 +#define PUBLICATION 589 +#define QUALIFY 590 +#define QUOTE 591 +#define RANGE 592 +#define READ_P 593 +#define REAL 594 +#define REASSIGN 595 +#define RECHECK 596 +#define RECURSIVE 597 +#define REF 598 +#define REFERENCES 599 +#define REFERENCING 600 +#define REFRESH 601 +#define REINDEX 602 +#define RELATIVE_P 603 +#define RELEASE 604 +#define RENAME 605 +#define REPEATABLE 606 +#define REPLACE 607 +#define REPLICA 608 +#define RESET 609 +#define RESPECT_P 610 +#define RESTART 611 +#define RESTRICT 612 +#define RETURNING 613 +#define RETURNS 614 +#define REVOKE 615 +#define RIGHT 616 +#define ROLE 617 +#define ROLLBACK 618 +#define ROLLUP 619 +#define ROW 620 +#define ROWS 621 +#define RULE 622 +#define SAMPLE 623 +#define SAVEPOINT 624 +#define SCHEMA 625 +#define SCHEMAS 626 +#define SCOPE 627 +#define SCROLL 628 +#define SEARCH 629 +#define SECOND_P 630 +#define SECONDS_P 631 +#define SECRET 632 +#define SECURITY 633 +#define SELECT 634 +#define SEMI 635 +#define SEQUENCE 636 +#define SEQUENCES 637 +#define SERIALIZABLE 638 +#define SERVER 639 +#define SESSION 640 +#define SET 641 +#define SETOF 642 +#define SETS 643 +#define SHARE 644 +#define SHOW 645 +#define SIMILAR 646 +#define SIMPLE 647 +#define SKIP 648 +#define SMALLINT 649 +#define SNAPSHOT 650 +#define SOME 651 +#define SQL_P 652 +#define STABLE 653 +#define STANDALONE_P 654 +#define START 655 +#define STATEMENT 656 +#define STATISTICS 657 +#define STDIN 658 +#define STDOUT 659 +#define STORAGE 660 +#define STORED 661 +#define STRICT_P 662 +#define STRIP_P 663 +#define STRUCT 664 +#define SUBSCRIPTION 665 +#define SUBSTRING 666 +#define SUMMARIZE 667 +#define SYMMETRIC 668 +#define SYSID 669 +#define SYSTEM_P 670 +#define TABLE 671 +#define TABLES 672 +#define TABLESAMPLE 673 +#define TABLESPACE 674 +#define TEMP 675 +#define TEMPLATE 676 +#define TEMPORARY 677 +#define TEXT_P 678 +#define THEN 679 +#define TIES 680 +#define TIME 681 +#define TIMESTAMP 682 +#define TO 683 +#define TRAILING 684 +#define TRANSACTION 685 +#define TRANSFORM 686 +#define TREAT 687 +#define TRIGGER 688 +#define TRIM 689 +#define TRUE_P 690 +#define TRUNCATE 691 +#define TRUSTED 692 +#define TRY_CAST 693 +#define TYPE_P 694 +#define TYPES_P 695 +#define UNBOUNDED 696 +#define UNCOMMITTED 697 +#define UNENCRYPTED 698 +#define UNION 699 +#define UNIQUE 700 +#define UNKNOWN 701 +#define UNLISTEN 702 +#define UNLOGGED 703 +#define UNPIVOT 704 +#define UNTIL 705 +#define UPDATE 706 +#define USE_P 707 +#define USER 708 +#define USING 709 +#define VACUUM 710 +#define VALID 711 +#define VALIDATE 712 +#define VALIDATOR 713 +#define VALUE_P 714 +#define VALUES 715 +#define VARCHAR 716 +#define VARIADIC 717 +#define VARYING 718 +#define VERBOSE 719 +#define VERSION_P 720 +#define VIEW 721 +#define VIEWS 722 +#define VIRTUAL 723 +#define VOLATILE 724 +#define WEEK_P 725 +#define WEEKS_P 726 +#define WHEN 727 +#define WHERE 728 +#define WHITESPACE_P 729 +#define WINDOW 730 +#define WITH 731 +#define WITHIN 732 +#define WITHOUT 733 +#define WORK 734 +#define WRAPPER 735 +#define WRITE_P 736 +#define XML_P 737 +#define XMLATTRIBUTES 738 +#define XMLCONCAT 739 +#define XMLELEMENT 740 +#define XMLEXISTS 741 +#define XMLFOREST 742 +#define XMLNAMESPACES 743 +#define XMLPARSE 744 +#define XMLPI 745 +#define XMLROOT 746 +#define XMLSERIALIZE 747 +#define XMLTABLE 748 +#define YEAR_P 749 +#define YEARS_P 750 +#define YES_P 751 +#define ZONE 752 +#define NOT_LA 753 +#define NULLS_LA 754 +#define WITH_LA 755 +#define POSTFIXOP 756 +#define UMINUS 757 + + + + +/* Copy the first part of user declarations. */ #line 1 "third_party/libpg_query/grammar/grammar.y.tmp" #line 1 "third_party/libpg_query/grammar/grammar.hpp" @@ -237,1108 +1247,132 @@ static PGNode *makeRecursiveViewSelect(char *relname, PGList *aliases, PGNode *q static PGNode *makeLimitPercent(PGNode *limit_percent); -#line 241 "third_party/libpg_query/grammar/grammar_out.cpp" - -# ifndef YY_CAST -# ifdef __cplusplus -# define YY_CAST(Type, Val) static_cast (Val) -# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) -# else -# define YY_CAST(Type, Val) ((Type) (Val)) -# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) -# endif -# endif -# ifndef YY_NULLPTR -# if defined __cplusplus -# if 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# else -# define YY_NULLPTR ((void*)0) -# endif -# endif -#include "include/parser/gram.hpp" -/* Symbol kind. */ -enum yysymbol_kind_t -{ - YYSYMBOL_YYEMPTY = -2, - YYSYMBOL_YYEOF = 0, /* "end of file" */ - YYSYMBOL_YYerror = 1, /* error */ - YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ - YYSYMBOL_IDENT = 3, /* IDENT */ - YYSYMBOL_FCONST = 4, /* FCONST */ - YYSYMBOL_SCONST = 5, /* SCONST */ - YYSYMBOL_BCONST = 6, /* BCONST */ - YYSYMBOL_XCONST = 7, /* XCONST */ - YYSYMBOL_Op = 8, /* Op */ - YYSYMBOL_ICONST = 9, /* ICONST */ - YYSYMBOL_PARAM = 10, /* PARAM */ - YYSYMBOL_TYPECAST = 11, /* TYPECAST */ - YYSYMBOL_DOT_DOT = 12, /* DOT_DOT */ - YYSYMBOL_COLON_EQUALS = 13, /* COLON_EQUALS */ - YYSYMBOL_EQUALS_GREATER = 14, /* EQUALS_GREATER */ - YYSYMBOL_INTEGER_DIVISION = 15, /* INTEGER_DIVISION */ - YYSYMBOL_POWER_OF = 16, /* POWER_OF */ - YYSYMBOL_LAMBDA_ARROW = 17, /* LAMBDA_ARROW */ - YYSYMBOL_DOUBLE_ARROW = 18, /* DOUBLE_ARROW */ - YYSYMBOL_LESS_EQUALS = 19, /* LESS_EQUALS */ - YYSYMBOL_GREATER_EQUALS = 20, /* GREATER_EQUALS */ - YYSYMBOL_NOT_EQUALS = 21, /* NOT_EQUALS */ - YYSYMBOL_ABORT_P = 22, /* ABORT_P */ - YYSYMBOL_ABSOLUTE_P = 23, /* ABSOLUTE_P */ - YYSYMBOL_ACCESS = 24, /* ACCESS */ - YYSYMBOL_ACTION = 25, /* ACTION */ - YYSYMBOL_ADD_P = 26, /* ADD_P */ - YYSYMBOL_ADMIN = 27, /* ADMIN */ - YYSYMBOL_AFTER = 28, /* AFTER */ - YYSYMBOL_AGGREGATE = 29, /* AGGREGATE */ - YYSYMBOL_ALL = 30, /* ALL */ - YYSYMBOL_ALSO = 31, /* ALSO */ - YYSYMBOL_ALTER = 32, /* ALTER */ - YYSYMBOL_ALWAYS = 33, /* ALWAYS */ - YYSYMBOL_ANALYSE = 34, /* ANALYSE */ - YYSYMBOL_ANALYZE = 35, /* ANALYZE */ - YYSYMBOL_AND = 36, /* AND */ - YYSYMBOL_ANTI = 37, /* ANTI */ - YYSYMBOL_ANY = 38, /* ANY */ - YYSYMBOL_ARRAY = 39, /* ARRAY */ - YYSYMBOL_AS = 40, /* AS */ - YYSYMBOL_ASC_P = 41, /* ASC_P */ - YYSYMBOL_ASOF = 42, /* ASOF */ - YYSYMBOL_ASSERTION = 43, /* ASSERTION */ - YYSYMBOL_ASSIGNMENT = 44, /* ASSIGNMENT */ - YYSYMBOL_ASYMMETRIC = 45, /* ASYMMETRIC */ - YYSYMBOL_AT = 46, /* AT */ - YYSYMBOL_ATTACH = 47, /* ATTACH */ - YYSYMBOL_ATTRIBUTE = 48, /* ATTRIBUTE */ - YYSYMBOL_AUTHORIZATION = 49, /* AUTHORIZATION */ - YYSYMBOL_BACKWARD = 50, /* BACKWARD */ - YYSYMBOL_BEFORE = 51, /* BEFORE */ - YYSYMBOL_BEGIN_P = 52, /* BEGIN_P */ - YYSYMBOL_BETWEEN = 53, /* BETWEEN */ - YYSYMBOL_BIGINT = 54, /* BIGINT */ - YYSYMBOL_BINARY = 55, /* BINARY */ - YYSYMBOL_BIT = 56, /* BIT */ - YYSYMBOL_BOOLEAN_P = 57, /* BOOLEAN_P */ - YYSYMBOL_BOTH = 58, /* BOTH */ - YYSYMBOL_BY = 59, /* BY */ - YYSYMBOL_CACHE = 60, /* CACHE */ - YYSYMBOL_CALL_P = 61, /* CALL_P */ - YYSYMBOL_CALLED = 62, /* CALLED */ - YYSYMBOL_CASCADE = 63, /* CASCADE */ - YYSYMBOL_CASCADED = 64, /* CASCADED */ - YYSYMBOL_CASE = 65, /* CASE */ - YYSYMBOL_CAST = 66, /* CAST */ - YYSYMBOL_CATALOG_P = 67, /* CATALOG_P */ - YYSYMBOL_CENTURIES_P = 68, /* CENTURIES_P */ - YYSYMBOL_CENTURY_P = 69, /* CENTURY_P */ - YYSYMBOL_CHAIN = 70, /* CHAIN */ - YYSYMBOL_CHAR_P = 71, /* CHAR_P */ - YYSYMBOL_CHARACTER = 72, /* CHARACTER */ - YYSYMBOL_CHARACTERISTICS = 73, /* CHARACTERISTICS */ - YYSYMBOL_CHECK_P = 74, /* CHECK_P */ - YYSYMBOL_CHECKPOINT = 75, /* CHECKPOINT */ - YYSYMBOL_CLASS = 76, /* CLASS */ - YYSYMBOL_CLOSE = 77, /* CLOSE */ - YYSYMBOL_CLUSTER = 78, /* CLUSTER */ - YYSYMBOL_COALESCE = 79, /* COALESCE */ - YYSYMBOL_COLLATE = 80, /* COLLATE */ - YYSYMBOL_COLLATION = 81, /* COLLATION */ - YYSYMBOL_COLUMN = 82, /* COLUMN */ - YYSYMBOL_COLUMNS = 83, /* COLUMNS */ - YYSYMBOL_COMMENT = 84, /* COMMENT */ - YYSYMBOL_COMMENTS = 85, /* COMMENTS */ - YYSYMBOL_COMMIT = 86, /* COMMIT */ - YYSYMBOL_COMMITTED = 87, /* COMMITTED */ - YYSYMBOL_COMPRESSION = 88, /* COMPRESSION */ - YYSYMBOL_CONCURRENTLY = 89, /* CONCURRENTLY */ - YYSYMBOL_CONFIGURATION = 90, /* CONFIGURATION */ - YYSYMBOL_CONFLICT = 91, /* CONFLICT */ - YYSYMBOL_CONNECTION = 92, /* CONNECTION */ - YYSYMBOL_CONSTRAINT = 93, /* CONSTRAINT */ - YYSYMBOL_CONSTRAINTS = 94, /* CONSTRAINTS */ - YYSYMBOL_CONTENT_P = 95, /* CONTENT_P */ - YYSYMBOL_CONTINUE_P = 96, /* CONTINUE_P */ - YYSYMBOL_CONVERSION_P = 97, /* CONVERSION_P */ - YYSYMBOL_COPY = 98, /* COPY */ - YYSYMBOL_COST = 99, /* COST */ - YYSYMBOL_CREATE_P = 100, /* CREATE_P */ - YYSYMBOL_CROSS = 101, /* CROSS */ - YYSYMBOL_CSV = 102, /* CSV */ - YYSYMBOL_CUBE = 103, /* CUBE */ - YYSYMBOL_CURRENT_P = 104, /* CURRENT_P */ - YYSYMBOL_CURSOR = 105, /* CURSOR */ - YYSYMBOL_CYCLE = 106, /* CYCLE */ - YYSYMBOL_DATA_P = 107, /* DATA_P */ - YYSYMBOL_DATABASE = 108, /* DATABASE */ - YYSYMBOL_DAY_P = 109, /* DAY_P */ - YYSYMBOL_DAYS_P = 110, /* DAYS_P */ - YYSYMBOL_DEALLOCATE = 111, /* DEALLOCATE */ - YYSYMBOL_DEC = 112, /* DEC */ - YYSYMBOL_DECADE_P = 113, /* DECADE_P */ - YYSYMBOL_DECADES_P = 114, /* DECADES_P */ - YYSYMBOL_DECIMAL_P = 115, /* DECIMAL_P */ - YYSYMBOL_DECLARE = 116, /* DECLARE */ - YYSYMBOL_DEFAULT = 117, /* DEFAULT */ - YYSYMBOL_DEFAULTS = 118, /* DEFAULTS */ - YYSYMBOL_DEFERRABLE = 119, /* DEFERRABLE */ - YYSYMBOL_DEFERRED = 120, /* DEFERRED */ - YYSYMBOL_DEFINER = 121, /* DEFINER */ - YYSYMBOL_DELETE_P = 122, /* DELETE_P */ - YYSYMBOL_DELIMITER = 123, /* DELIMITER */ - YYSYMBOL_DELIMITERS = 124, /* DELIMITERS */ - YYSYMBOL_DEPENDS = 125, /* DEPENDS */ - YYSYMBOL_DESC_P = 126, /* DESC_P */ - YYSYMBOL_DESCRIBE = 127, /* DESCRIBE */ - YYSYMBOL_DETACH = 128, /* DETACH */ - YYSYMBOL_DICTIONARY = 129, /* DICTIONARY */ - YYSYMBOL_DISABLE_P = 130, /* DISABLE_P */ - YYSYMBOL_DISCARD = 131, /* DISCARD */ - YYSYMBOL_DISTINCT = 132, /* DISTINCT */ - YYSYMBOL_DO = 133, /* DO */ - YYSYMBOL_DOCUMENT_P = 134, /* DOCUMENT_P */ - YYSYMBOL_DOMAIN_P = 135, /* DOMAIN_P */ - YYSYMBOL_DOUBLE_P = 136, /* DOUBLE_P */ - YYSYMBOL_DROP = 137, /* DROP */ - YYSYMBOL_EACH = 138, /* EACH */ - YYSYMBOL_ELSE = 139, /* ELSE */ - YYSYMBOL_ENABLE_P = 140, /* ENABLE_P */ - YYSYMBOL_ENCODING = 141, /* ENCODING */ - YYSYMBOL_ENCRYPTED = 142, /* ENCRYPTED */ - YYSYMBOL_END_P = 143, /* END_P */ - YYSYMBOL_ENUM_P = 144, /* ENUM_P */ - YYSYMBOL_ESCAPE = 145, /* ESCAPE */ - YYSYMBOL_EVENT = 146, /* EVENT */ - YYSYMBOL_EXCEPT = 147, /* EXCEPT */ - YYSYMBOL_EXCLUDE = 148, /* EXCLUDE */ - YYSYMBOL_EXCLUDING = 149, /* EXCLUDING */ - YYSYMBOL_EXCLUSIVE = 150, /* EXCLUSIVE */ - YYSYMBOL_EXECUTE = 151, /* EXECUTE */ - YYSYMBOL_EXISTS = 152, /* EXISTS */ - YYSYMBOL_EXPLAIN = 153, /* EXPLAIN */ - YYSYMBOL_EXPORT_P = 154, /* EXPORT_P */ - YYSYMBOL_EXPORT_STATE = 155, /* EXPORT_STATE */ - YYSYMBOL_EXTENSION = 156, /* EXTENSION */ - YYSYMBOL_EXTERNAL = 157, /* EXTERNAL */ - YYSYMBOL_EXTRACT = 158, /* EXTRACT */ - YYSYMBOL_FALSE_P = 159, /* FALSE_P */ - YYSYMBOL_FAMILY = 160, /* FAMILY */ - YYSYMBOL_FETCH = 161, /* FETCH */ - YYSYMBOL_FILTER = 162, /* FILTER */ - YYSYMBOL_FIRST_P = 163, /* FIRST_P */ - YYSYMBOL_FLOAT_P = 164, /* FLOAT_P */ - YYSYMBOL_FOLLOWING = 165, /* FOLLOWING */ - YYSYMBOL_FOR = 166, /* FOR */ - YYSYMBOL_FORCE = 167, /* FORCE */ - YYSYMBOL_FOREIGN = 168, /* FOREIGN */ - YYSYMBOL_FORWARD = 169, /* FORWARD */ - YYSYMBOL_FREEZE = 170, /* FREEZE */ - YYSYMBOL_FROM = 171, /* FROM */ - YYSYMBOL_FULL = 172, /* FULL */ - YYSYMBOL_FUNCTION = 173, /* FUNCTION */ - YYSYMBOL_FUNCTIONS = 174, /* FUNCTIONS */ - YYSYMBOL_GENERATED = 175, /* GENERATED */ - YYSYMBOL_GLOB = 176, /* GLOB */ - YYSYMBOL_GLOBAL = 177, /* GLOBAL */ - YYSYMBOL_GRANT = 178, /* GRANT */ - YYSYMBOL_GRANTED = 179, /* GRANTED */ - YYSYMBOL_GROUP_P = 180, /* GROUP_P */ - YYSYMBOL_GROUPING = 181, /* GROUPING */ - YYSYMBOL_GROUPING_ID = 182, /* GROUPING_ID */ - YYSYMBOL_GROUPS = 183, /* GROUPS */ - YYSYMBOL_HANDLER = 184, /* HANDLER */ - YYSYMBOL_HAVING = 185, /* HAVING */ - YYSYMBOL_HEADER_P = 186, /* HEADER_P */ - YYSYMBOL_HOLD = 187, /* HOLD */ - YYSYMBOL_HOUR_P = 188, /* HOUR_P */ - YYSYMBOL_HOURS_P = 189, /* HOURS_P */ - YYSYMBOL_IDENTITY_P = 190, /* IDENTITY_P */ - YYSYMBOL_IF_P = 191, /* IF_P */ - YYSYMBOL_IGNORE_P = 192, /* IGNORE_P */ - YYSYMBOL_ILIKE = 193, /* ILIKE */ - YYSYMBOL_IMMEDIATE = 194, /* IMMEDIATE */ - YYSYMBOL_IMMUTABLE = 195, /* IMMUTABLE */ - YYSYMBOL_IMPLICIT_P = 196, /* IMPLICIT_P */ - YYSYMBOL_IMPORT_P = 197, /* IMPORT_P */ - YYSYMBOL_IN_P = 198, /* IN_P */ - YYSYMBOL_INCLUDE_P = 199, /* INCLUDE_P */ - YYSYMBOL_INCLUDING = 200, /* INCLUDING */ - YYSYMBOL_INCREMENT = 201, /* INCREMENT */ - YYSYMBOL_INDEX = 202, /* INDEX */ - YYSYMBOL_INDEXES = 203, /* INDEXES */ - YYSYMBOL_INHERIT = 204, /* INHERIT */ - YYSYMBOL_INHERITS = 205, /* INHERITS */ - YYSYMBOL_INITIALLY = 206, /* INITIALLY */ - YYSYMBOL_INLINE_P = 207, /* INLINE_P */ - YYSYMBOL_INNER_P = 208, /* INNER_P */ - YYSYMBOL_INOUT = 209, /* INOUT */ - YYSYMBOL_INPUT_P = 210, /* INPUT_P */ - YYSYMBOL_INSENSITIVE = 211, /* INSENSITIVE */ - YYSYMBOL_INSERT = 212, /* INSERT */ - YYSYMBOL_INSTALL = 213, /* INSTALL */ - YYSYMBOL_INSTEAD = 214, /* INSTEAD */ - YYSYMBOL_INT_P = 215, /* INT_P */ - YYSYMBOL_INTEGER = 216, /* INTEGER */ - YYSYMBOL_INTERSECT = 217, /* INTERSECT */ - YYSYMBOL_INTERVAL = 218, /* INTERVAL */ - YYSYMBOL_INTO = 219, /* INTO */ - YYSYMBOL_INVOKER = 220, /* INVOKER */ - YYSYMBOL_IS = 221, /* IS */ - YYSYMBOL_ISNULL = 222, /* ISNULL */ - YYSYMBOL_ISOLATION = 223, /* ISOLATION */ - YYSYMBOL_JOIN = 224, /* JOIN */ - YYSYMBOL_JSON = 225, /* JSON */ - YYSYMBOL_KEY = 226, /* KEY */ - YYSYMBOL_LABEL = 227, /* LABEL */ - YYSYMBOL_LANGUAGE = 228, /* LANGUAGE */ - YYSYMBOL_LARGE_P = 229, /* LARGE_P */ - YYSYMBOL_LAST_P = 230, /* LAST_P */ - YYSYMBOL_LATERAL_P = 231, /* LATERAL_P */ - YYSYMBOL_LEADING = 232, /* LEADING */ - YYSYMBOL_LEAKPROOF = 233, /* LEAKPROOF */ - YYSYMBOL_LEFT = 234, /* LEFT */ - YYSYMBOL_LEVEL = 235, /* LEVEL */ - YYSYMBOL_LIKE = 236, /* LIKE */ - YYSYMBOL_LIMIT = 237, /* LIMIT */ - YYSYMBOL_LISTEN = 238, /* LISTEN */ - YYSYMBOL_LOAD = 239, /* LOAD */ - YYSYMBOL_LOCAL = 240, /* LOCAL */ - YYSYMBOL_LOCATION = 241, /* LOCATION */ - YYSYMBOL_LOCK_P = 242, /* LOCK_P */ - YYSYMBOL_LOCKED = 243, /* LOCKED */ - YYSYMBOL_LOGGED = 244, /* LOGGED */ - YYSYMBOL_MACRO = 245, /* MACRO */ - YYSYMBOL_MAP = 246, /* MAP */ - YYSYMBOL_MAPPING = 247, /* MAPPING */ - YYSYMBOL_MATCH = 248, /* MATCH */ - YYSYMBOL_MATERIALIZED = 249, /* MATERIALIZED */ - YYSYMBOL_MAXVALUE = 250, /* MAXVALUE */ - YYSYMBOL_METHOD = 251, /* METHOD */ - YYSYMBOL_MICROSECOND_P = 252, /* MICROSECOND_P */ - YYSYMBOL_MICROSECONDS_P = 253, /* MICROSECONDS_P */ - YYSYMBOL_MILLENNIA_P = 254, /* MILLENNIA_P */ - YYSYMBOL_MILLENNIUM_P = 255, /* MILLENNIUM_P */ - YYSYMBOL_MILLISECOND_P = 256, /* MILLISECOND_P */ - YYSYMBOL_MILLISECONDS_P = 257, /* MILLISECONDS_P */ - YYSYMBOL_MINUTE_P = 258, /* MINUTE_P */ - YYSYMBOL_MINUTES_P = 259, /* MINUTES_P */ - YYSYMBOL_MINVALUE = 260, /* MINVALUE */ - YYSYMBOL_MODE = 261, /* MODE */ - YYSYMBOL_MONTH_P = 262, /* MONTH_P */ - YYSYMBOL_MONTHS_P = 263, /* MONTHS_P */ - YYSYMBOL_MOVE = 264, /* MOVE */ - YYSYMBOL_NAME_P = 265, /* NAME_P */ - YYSYMBOL_NAMES = 266, /* NAMES */ - YYSYMBOL_NATIONAL = 267, /* NATIONAL */ - YYSYMBOL_NATURAL = 268, /* NATURAL */ - YYSYMBOL_NCHAR = 269, /* NCHAR */ - YYSYMBOL_NEW = 270, /* NEW */ - YYSYMBOL_NEXT = 271, /* NEXT */ - YYSYMBOL_NO = 272, /* NO */ - YYSYMBOL_NONE = 273, /* NONE */ - YYSYMBOL_NOT = 274, /* NOT */ - YYSYMBOL_NOTHING = 275, /* NOTHING */ - YYSYMBOL_NOTIFY = 276, /* NOTIFY */ - YYSYMBOL_NOTNULL = 277, /* NOTNULL */ - YYSYMBOL_NOWAIT = 278, /* NOWAIT */ - YYSYMBOL_NULL_P = 279, /* NULL_P */ - YYSYMBOL_NULLIF = 280, /* NULLIF */ - YYSYMBOL_NULLS_P = 281, /* NULLS_P */ - YYSYMBOL_NUMERIC = 282, /* NUMERIC */ - YYSYMBOL_OBJECT_P = 283, /* OBJECT_P */ - YYSYMBOL_OF = 284, /* OF */ - YYSYMBOL_OFF = 285, /* OFF */ - YYSYMBOL_OFFSET = 286, /* OFFSET */ - YYSYMBOL_OIDS = 287, /* OIDS */ - YYSYMBOL_OLD = 288, /* OLD */ - YYSYMBOL_ON = 289, /* ON */ - YYSYMBOL_ONLY = 290, /* ONLY */ - YYSYMBOL_OPERATOR = 291, /* OPERATOR */ - YYSYMBOL_OPTION = 292, /* OPTION */ - YYSYMBOL_OPTIONS = 293, /* OPTIONS */ - YYSYMBOL_OR = 294, /* OR */ - YYSYMBOL_ORDER = 295, /* ORDER */ - YYSYMBOL_ORDINALITY = 296, /* ORDINALITY */ - YYSYMBOL_OTHERS = 297, /* OTHERS */ - YYSYMBOL_OUT_P = 298, /* OUT_P */ - YYSYMBOL_OUTER_P = 299, /* OUTER_P */ - YYSYMBOL_OVER = 300, /* OVER */ - YYSYMBOL_OVERLAPS = 301, /* OVERLAPS */ - YYSYMBOL_OVERLAY = 302, /* OVERLAY */ - YYSYMBOL_OVERRIDING = 303, /* OVERRIDING */ - YYSYMBOL_OWNED = 304, /* OWNED */ - YYSYMBOL_OWNER = 305, /* OWNER */ - YYSYMBOL_PARALLEL = 306, /* PARALLEL */ - YYSYMBOL_PARSER = 307, /* PARSER */ - YYSYMBOL_PARTIAL = 308, /* PARTIAL */ - YYSYMBOL_PARTITION = 309, /* PARTITION */ - YYSYMBOL_PASSING = 310, /* PASSING */ - YYSYMBOL_PASSWORD = 311, /* PASSWORD */ - YYSYMBOL_PERCENT = 312, /* PERCENT */ - YYSYMBOL_PERSISTENT = 313, /* PERSISTENT */ - YYSYMBOL_PIVOT = 314, /* PIVOT */ - YYSYMBOL_PIVOT_LONGER = 315, /* PIVOT_LONGER */ - YYSYMBOL_PIVOT_WIDER = 316, /* PIVOT_WIDER */ - YYSYMBOL_PLACING = 317, /* PLACING */ - YYSYMBOL_PLANS = 318, /* PLANS */ - YYSYMBOL_POLICY = 319, /* POLICY */ - YYSYMBOL_POSITION = 320, /* POSITION */ - YYSYMBOL_POSITIONAL = 321, /* POSITIONAL */ - YYSYMBOL_PRAGMA_P = 322, /* PRAGMA_P */ - YYSYMBOL_PRECEDING = 323, /* PRECEDING */ - YYSYMBOL_PRECISION = 324, /* PRECISION */ - YYSYMBOL_PREPARE = 325, /* PREPARE */ - YYSYMBOL_PREPARED = 326, /* PREPARED */ - YYSYMBOL_PRESERVE = 327, /* PRESERVE */ - YYSYMBOL_PRIMARY = 328, /* PRIMARY */ - YYSYMBOL_PRIOR = 329, /* PRIOR */ - YYSYMBOL_PRIVILEGES = 330, /* PRIVILEGES */ - YYSYMBOL_PROCEDURAL = 331, /* PROCEDURAL */ - YYSYMBOL_PROCEDURE = 332, /* PROCEDURE */ - YYSYMBOL_PROGRAM = 333, /* PROGRAM */ - YYSYMBOL_PUBLICATION = 334, /* PUBLICATION */ - YYSYMBOL_QUALIFY = 335, /* QUALIFY */ - YYSYMBOL_QUOTE = 336, /* QUOTE */ - YYSYMBOL_RANGE = 337, /* RANGE */ - YYSYMBOL_READ_P = 338, /* READ_P */ - YYSYMBOL_REAL = 339, /* REAL */ - YYSYMBOL_REASSIGN = 340, /* REASSIGN */ - YYSYMBOL_RECHECK = 341, /* RECHECK */ - YYSYMBOL_RECURSIVE = 342, /* RECURSIVE */ - YYSYMBOL_REF = 343, /* REF */ - YYSYMBOL_REFERENCES = 344, /* REFERENCES */ - YYSYMBOL_REFERENCING = 345, /* REFERENCING */ - YYSYMBOL_REFRESH = 346, /* REFRESH */ - YYSYMBOL_REINDEX = 347, /* REINDEX */ - YYSYMBOL_RELATIVE_P = 348, /* RELATIVE_P */ - YYSYMBOL_RELEASE = 349, /* RELEASE */ - YYSYMBOL_RENAME = 350, /* RENAME */ - YYSYMBOL_REPEATABLE = 351, /* REPEATABLE */ - YYSYMBOL_REPLACE = 352, /* REPLACE */ - YYSYMBOL_REPLICA = 353, /* REPLICA */ - YYSYMBOL_RESET = 354, /* RESET */ - YYSYMBOL_RESPECT_P = 355, /* RESPECT_P */ - YYSYMBOL_RESTART = 356, /* RESTART */ - YYSYMBOL_RESTRICT = 357, /* RESTRICT */ - YYSYMBOL_RETURNING = 358, /* RETURNING */ - YYSYMBOL_RETURNS = 359, /* RETURNS */ - YYSYMBOL_REVOKE = 360, /* REVOKE */ - YYSYMBOL_RIGHT = 361, /* RIGHT */ - YYSYMBOL_ROLE = 362, /* ROLE */ - YYSYMBOL_ROLLBACK = 363, /* ROLLBACK */ - YYSYMBOL_ROLLUP = 364, /* ROLLUP */ - YYSYMBOL_ROW = 365, /* ROW */ - YYSYMBOL_ROWS = 366, /* ROWS */ - YYSYMBOL_RULE = 367, /* RULE */ - YYSYMBOL_SAMPLE = 368, /* SAMPLE */ - YYSYMBOL_SAVEPOINT = 369, /* SAVEPOINT */ - YYSYMBOL_SCHEMA = 370, /* SCHEMA */ - YYSYMBOL_SCHEMAS = 371, /* SCHEMAS */ - YYSYMBOL_SCOPE = 372, /* SCOPE */ - YYSYMBOL_SCROLL = 373, /* SCROLL */ - YYSYMBOL_SEARCH = 374, /* SEARCH */ - YYSYMBOL_SECOND_P = 375, /* SECOND_P */ - YYSYMBOL_SECONDS_P = 376, /* SECONDS_P */ - YYSYMBOL_SECRET = 377, /* SECRET */ - YYSYMBOL_SECURITY = 378, /* SECURITY */ - YYSYMBOL_SELECT = 379, /* SELECT */ - YYSYMBOL_SEMI = 380, /* SEMI */ - YYSYMBOL_SEQUENCE = 381, /* SEQUENCE */ - YYSYMBOL_SEQUENCES = 382, /* SEQUENCES */ - YYSYMBOL_SERIALIZABLE = 383, /* SERIALIZABLE */ - YYSYMBOL_SERVER = 384, /* SERVER */ - YYSYMBOL_SESSION = 385, /* SESSION */ - YYSYMBOL_SET = 386, /* SET */ - YYSYMBOL_SETOF = 387, /* SETOF */ - YYSYMBOL_SETS = 388, /* SETS */ - YYSYMBOL_SHARE = 389, /* SHARE */ - YYSYMBOL_SHOW = 390, /* SHOW */ - YYSYMBOL_SIMILAR = 391, /* SIMILAR */ - YYSYMBOL_SIMPLE = 392, /* SIMPLE */ - YYSYMBOL_SKIP = 393, /* SKIP */ - YYSYMBOL_SMALLINT = 394, /* SMALLINT */ - YYSYMBOL_SNAPSHOT = 395, /* SNAPSHOT */ - YYSYMBOL_SOME = 396, /* SOME */ - YYSYMBOL_SQL_P = 397, /* SQL_P */ - YYSYMBOL_STABLE = 398, /* STABLE */ - YYSYMBOL_STANDALONE_P = 399, /* STANDALONE_P */ - YYSYMBOL_START = 400, /* START */ - YYSYMBOL_STATEMENT = 401, /* STATEMENT */ - YYSYMBOL_STATISTICS = 402, /* STATISTICS */ - YYSYMBOL_STDIN = 403, /* STDIN */ - YYSYMBOL_STDOUT = 404, /* STDOUT */ - YYSYMBOL_STORAGE = 405, /* STORAGE */ - YYSYMBOL_STORED = 406, /* STORED */ - YYSYMBOL_STRICT_P = 407, /* STRICT_P */ - YYSYMBOL_STRIP_P = 408, /* STRIP_P */ - YYSYMBOL_STRUCT = 409, /* STRUCT */ - YYSYMBOL_SUBSCRIPTION = 410, /* SUBSCRIPTION */ - YYSYMBOL_SUBSTRING = 411, /* SUBSTRING */ - YYSYMBOL_SUMMARIZE = 412, /* SUMMARIZE */ - YYSYMBOL_SYMMETRIC = 413, /* SYMMETRIC */ - YYSYMBOL_SYSID = 414, /* SYSID */ - YYSYMBOL_SYSTEM_P = 415, /* SYSTEM_P */ - YYSYMBOL_TABLE = 416, /* TABLE */ - YYSYMBOL_TABLES = 417, /* TABLES */ - YYSYMBOL_TABLESAMPLE = 418, /* TABLESAMPLE */ - YYSYMBOL_TABLESPACE = 419, /* TABLESPACE */ - YYSYMBOL_TEMP = 420, /* TEMP */ - YYSYMBOL_TEMPLATE = 421, /* TEMPLATE */ - YYSYMBOL_TEMPORARY = 422, /* TEMPORARY */ - YYSYMBOL_TEXT_P = 423, /* TEXT_P */ - YYSYMBOL_THEN = 424, /* THEN */ - YYSYMBOL_TIES = 425, /* TIES */ - YYSYMBOL_TIME = 426, /* TIME */ - YYSYMBOL_TIMESTAMP = 427, /* TIMESTAMP */ - YYSYMBOL_TO = 428, /* TO */ - YYSYMBOL_TRAILING = 429, /* TRAILING */ - YYSYMBOL_TRANSACTION = 430, /* TRANSACTION */ - YYSYMBOL_TRANSFORM = 431, /* TRANSFORM */ - YYSYMBOL_TREAT = 432, /* TREAT */ - YYSYMBOL_TRIGGER = 433, /* TRIGGER */ - YYSYMBOL_TRIM = 434, /* TRIM */ - YYSYMBOL_TRUE_P = 435, /* TRUE_P */ - YYSYMBOL_TRUNCATE = 436, /* TRUNCATE */ - YYSYMBOL_TRUSTED = 437, /* TRUSTED */ - YYSYMBOL_TRY_CAST = 438, /* TRY_CAST */ - YYSYMBOL_TYPE_P = 439, /* TYPE_P */ - YYSYMBOL_TYPES_P = 440, /* TYPES_P */ - YYSYMBOL_UNBOUNDED = 441, /* UNBOUNDED */ - YYSYMBOL_UNCOMMITTED = 442, /* UNCOMMITTED */ - YYSYMBOL_UNENCRYPTED = 443, /* UNENCRYPTED */ - YYSYMBOL_UNION = 444, /* UNION */ - YYSYMBOL_UNIQUE = 445, /* UNIQUE */ - YYSYMBOL_UNKNOWN = 446, /* UNKNOWN */ - YYSYMBOL_UNLISTEN = 447, /* UNLISTEN */ - YYSYMBOL_UNLOGGED = 448, /* UNLOGGED */ - YYSYMBOL_UNPIVOT = 449, /* UNPIVOT */ - YYSYMBOL_UNTIL = 450, /* UNTIL */ - YYSYMBOL_UPDATE = 451, /* UPDATE */ - YYSYMBOL_USE_P = 452, /* USE_P */ - YYSYMBOL_USER = 453, /* USER */ - YYSYMBOL_USING = 454, /* USING */ - YYSYMBOL_VACUUM = 455, /* VACUUM */ - YYSYMBOL_VALID = 456, /* VALID */ - YYSYMBOL_VALIDATE = 457, /* VALIDATE */ - YYSYMBOL_VALIDATOR = 458, /* VALIDATOR */ - YYSYMBOL_VALUE_P = 459, /* VALUE_P */ - YYSYMBOL_VALUES = 460, /* VALUES */ - YYSYMBOL_VARCHAR = 461, /* VARCHAR */ - YYSYMBOL_VARIADIC = 462, /* VARIADIC */ - YYSYMBOL_VARYING = 463, /* VARYING */ - YYSYMBOL_VERBOSE = 464, /* VERBOSE */ - YYSYMBOL_VERSION_P = 465, /* VERSION_P */ - YYSYMBOL_VIEW = 466, /* VIEW */ - YYSYMBOL_VIEWS = 467, /* VIEWS */ - YYSYMBOL_VIRTUAL = 468, /* VIRTUAL */ - YYSYMBOL_VOLATILE = 469, /* VOLATILE */ - YYSYMBOL_WEEK_P = 470, /* WEEK_P */ - YYSYMBOL_WEEKS_P = 471, /* WEEKS_P */ - YYSYMBOL_WHEN = 472, /* WHEN */ - YYSYMBOL_WHERE = 473, /* WHERE */ - YYSYMBOL_WHITESPACE_P = 474, /* WHITESPACE_P */ - YYSYMBOL_WINDOW = 475, /* WINDOW */ - YYSYMBOL_WITH = 476, /* WITH */ - YYSYMBOL_WITHIN = 477, /* WITHIN */ - YYSYMBOL_WITHOUT = 478, /* WITHOUT */ - YYSYMBOL_WORK = 479, /* WORK */ - YYSYMBOL_WRAPPER = 480, /* WRAPPER */ - YYSYMBOL_WRITE_P = 481, /* WRITE_P */ - YYSYMBOL_XML_P = 482, /* XML_P */ - YYSYMBOL_XMLATTRIBUTES = 483, /* XMLATTRIBUTES */ - YYSYMBOL_XMLCONCAT = 484, /* XMLCONCAT */ - YYSYMBOL_XMLELEMENT = 485, /* XMLELEMENT */ - YYSYMBOL_XMLEXISTS = 486, /* XMLEXISTS */ - YYSYMBOL_XMLFOREST = 487, /* XMLFOREST */ - YYSYMBOL_XMLNAMESPACES = 488, /* XMLNAMESPACES */ - YYSYMBOL_XMLPARSE = 489, /* XMLPARSE */ - YYSYMBOL_XMLPI = 490, /* XMLPI */ - YYSYMBOL_XMLROOT = 491, /* XMLROOT */ - YYSYMBOL_XMLSERIALIZE = 492, /* XMLSERIALIZE */ - YYSYMBOL_XMLTABLE = 493, /* XMLTABLE */ - YYSYMBOL_YEAR_P = 494, /* YEAR_P */ - YYSYMBOL_YEARS_P = 495, /* YEARS_P */ - YYSYMBOL_YES_P = 496, /* YES_P */ - YYSYMBOL_ZONE = 497, /* ZONE */ - YYSYMBOL_NOT_LA = 498, /* NOT_LA */ - YYSYMBOL_NULLS_LA = 499, /* NULLS_LA */ - YYSYMBOL_WITH_LA = 500, /* WITH_LA */ - YYSYMBOL_501_ = 501, /* '<' */ - YYSYMBOL_502_ = 502, /* '>' */ - YYSYMBOL_503_ = 503, /* '=' */ - YYSYMBOL_POSTFIXOP = 504, /* POSTFIXOP */ - YYSYMBOL_505_ = 505, /* '+' */ - YYSYMBOL_506_ = 506, /* '-' */ - YYSYMBOL_507_ = 507, /* '*' */ - YYSYMBOL_508_ = 508, /* '/' */ - YYSYMBOL_509_ = 509, /* '%' */ - YYSYMBOL_510_ = 510, /* '^' */ - YYSYMBOL_UMINUS = 511, /* UMINUS */ - YYSYMBOL_512_ = 512, /* '[' */ - YYSYMBOL_513_ = 513, /* ']' */ - YYSYMBOL_514_ = 514, /* '(' */ - YYSYMBOL_515_ = 515, /* ')' */ - YYSYMBOL_516_ = 516, /* '.' */ - YYSYMBOL_517_ = 517, /* ';' */ - YYSYMBOL_518_ = 518, /* ',' */ - YYSYMBOL_519_ = 519, /* '#' */ - YYSYMBOL_520_ = 520, /* '$' */ - YYSYMBOL_521_ = 521, /* '?' */ - YYSYMBOL_522_ = 522, /* '{' */ - YYSYMBOL_523_ = 523, /* '}' */ - YYSYMBOL_524_ = 524, /* ':' */ - YYSYMBOL_YYACCEPT = 525, /* $accept */ - YYSYMBOL_stmtblock = 526, /* stmtblock */ - YYSYMBOL_stmtmulti = 527, /* stmtmulti */ - YYSYMBOL_stmt = 528, /* stmt */ - YYSYMBOL_AlterObjectSchemaStmt = 529, /* AlterObjectSchemaStmt */ - YYSYMBOL_AlterSeqStmt = 530, /* AlterSeqStmt */ - YYSYMBOL_SeqOptList = 531, /* SeqOptList */ - YYSYMBOL_opt_with = 532, /* opt_with */ - YYSYMBOL_NumericOnly = 533, /* NumericOnly */ - YYSYMBOL_SeqOptElem = 534, /* SeqOptElem */ - YYSYMBOL_opt_by = 535, /* opt_by */ - YYSYMBOL_SignedIconst = 536, /* SignedIconst */ - YYSYMBOL_AlterTableStmt = 537, /* AlterTableStmt */ - YYSYMBOL_alter_identity_column_option_list = 538, /* alter_identity_column_option_list */ - YYSYMBOL_alter_column_default = 539, /* alter_column_default */ - YYSYMBOL_alter_identity_column_option = 540, /* alter_identity_column_option */ - YYSYMBOL_alter_generic_option_list = 541, /* alter_generic_option_list */ - YYSYMBOL_alter_table_cmd = 542, /* alter_table_cmd */ - YYSYMBOL_alter_using = 543, /* alter_using */ - YYSYMBOL_alter_generic_option_elem = 544, /* alter_generic_option_elem */ - YYSYMBOL_alter_table_cmds = 545, /* alter_table_cmds */ - YYSYMBOL_alter_generic_options = 546, /* alter_generic_options */ - YYSYMBOL_opt_set_data = 547, /* opt_set_data */ - YYSYMBOL_AnalyzeStmt = 548, /* AnalyzeStmt */ - YYSYMBOL_AttachStmt = 549, /* AttachStmt */ - YYSYMBOL_DetachStmt = 550, /* DetachStmt */ - YYSYMBOL_opt_database = 551, /* opt_database */ - YYSYMBOL_opt_database_alias = 552, /* opt_database_alias */ - YYSYMBOL_CallStmt = 553, /* CallStmt */ - YYSYMBOL_CheckPointStmt = 554, /* CheckPointStmt */ - YYSYMBOL_opt_col_id = 555, /* opt_col_id */ - YYSYMBOL_CommentOnStmt = 556, /* CommentOnStmt */ - YYSYMBOL_comment_value = 557, /* comment_value */ - YYSYMBOL_comment_on_type_any_name = 558, /* comment_on_type_any_name */ - YYSYMBOL_qualified_name = 559, /* qualified_name */ - YYSYMBOL_ColId = 560, /* ColId */ - YYSYMBOL_ColIdOrString = 561, /* ColIdOrString */ - YYSYMBOL_Sconst = 562, /* Sconst */ - YYSYMBOL_indirection = 563, /* indirection */ - YYSYMBOL_indirection_el = 564, /* indirection_el */ - YYSYMBOL_attr_name = 565, /* attr_name */ - YYSYMBOL_ColLabel = 566, /* ColLabel */ - YYSYMBOL_CopyStmt = 567, /* CopyStmt */ - YYSYMBOL_copy_database_flag = 568, /* copy_database_flag */ - YYSYMBOL_copy_from = 569, /* copy_from */ - YYSYMBOL_copy_delimiter = 570, /* copy_delimiter */ - YYSYMBOL_copy_generic_opt_arg_list = 571, /* copy_generic_opt_arg_list */ - YYSYMBOL_opt_using = 572, /* opt_using */ - YYSYMBOL_opt_as = 573, /* opt_as */ - YYSYMBOL_opt_program = 574, /* opt_program */ - YYSYMBOL_copy_options = 575, /* copy_options */ - YYSYMBOL_copy_generic_opt_arg = 576, /* copy_generic_opt_arg */ - YYSYMBOL_copy_generic_opt_elem = 577, /* copy_generic_opt_elem */ - YYSYMBOL_opt_oids = 578, /* opt_oids */ - YYSYMBOL_copy_opt_list = 579, /* copy_opt_list */ - YYSYMBOL_opt_binary = 580, /* opt_binary */ - YYSYMBOL_copy_opt_item = 581, /* copy_opt_item */ - YYSYMBOL_copy_generic_opt_arg_list_item = 582, /* copy_generic_opt_arg_list_item */ - YYSYMBOL_copy_file_name = 583, /* copy_file_name */ - YYSYMBOL_copy_generic_opt_list = 584, /* copy_generic_opt_list */ - YYSYMBOL_CreateStmt = 585, /* CreateStmt */ - YYSYMBOL_ConstraintAttributeSpec = 586, /* ConstraintAttributeSpec */ - YYSYMBOL_def_arg = 587, /* def_arg */ - YYSYMBOL_OptParenthesizedSeqOptList = 588, /* OptParenthesizedSeqOptList */ - YYSYMBOL_generic_option_arg = 589, /* generic_option_arg */ - YYSYMBOL_key_action = 590, /* key_action */ - YYSYMBOL_ColConstraint = 591, /* ColConstraint */ - YYSYMBOL_ColConstraintElem = 592, /* ColConstraintElem */ - YYSYMBOL_GeneratedColumnType = 593, /* GeneratedColumnType */ - YYSYMBOL_opt_GeneratedColumnType = 594, /* opt_GeneratedColumnType */ - YYSYMBOL_GeneratedConstraintElem = 595, /* GeneratedConstraintElem */ - YYSYMBOL_generic_option_elem = 596, /* generic_option_elem */ - YYSYMBOL_key_update = 597, /* key_update */ - YYSYMBOL_key_actions = 598, /* key_actions */ - YYSYMBOL_OnCommitOption = 599, /* OnCommitOption */ - YYSYMBOL_reloptions = 600, /* reloptions */ - YYSYMBOL_opt_no_inherit = 601, /* opt_no_inherit */ - YYSYMBOL_TableConstraint = 602, /* TableConstraint */ - YYSYMBOL_TableLikeOption = 603, /* TableLikeOption */ - YYSYMBOL_reloption_list = 604, /* reloption_list */ - YYSYMBOL_ExistingIndex = 605, /* ExistingIndex */ - YYSYMBOL_ConstraintAttr = 606, /* ConstraintAttr */ - YYSYMBOL_OptWith = 607, /* OptWith */ - YYSYMBOL_definition = 608, /* definition */ - YYSYMBOL_TableLikeOptionList = 609, /* TableLikeOptionList */ - YYSYMBOL_generic_option_name = 610, /* generic_option_name */ - YYSYMBOL_ConstraintAttributeElem = 611, /* ConstraintAttributeElem */ - YYSYMBOL_columnDef = 612, /* columnDef */ - YYSYMBOL_def_list = 613, /* def_list */ - YYSYMBOL_index_name = 614, /* index_name */ - YYSYMBOL_TableElement = 615, /* TableElement */ - YYSYMBOL_def_elem = 616, /* def_elem */ - YYSYMBOL_opt_definition = 617, /* opt_definition */ - YYSYMBOL_OptTableElementList = 618, /* OptTableElementList */ - YYSYMBOL_columnElem = 619, /* columnElem */ - YYSYMBOL_opt_column_list = 620, /* opt_column_list */ - YYSYMBOL_ColQualList = 621, /* ColQualList */ - YYSYMBOL_key_delete = 622, /* key_delete */ - YYSYMBOL_reloption_elem = 623, /* reloption_elem */ - YYSYMBOL_columnList = 624, /* columnList */ - YYSYMBOL_columnList_opt_comma = 625, /* columnList_opt_comma */ - YYSYMBOL_func_type = 626, /* func_type */ - YYSYMBOL_ConstraintElem = 627, /* ConstraintElem */ - YYSYMBOL_TableElementList = 628, /* TableElementList */ - YYSYMBOL_key_match = 629, /* key_match */ - YYSYMBOL_TableLikeClause = 630, /* TableLikeClause */ - YYSYMBOL_OptTemp = 631, /* OptTemp */ - YYSYMBOL_generated_when = 632, /* generated_when */ - YYSYMBOL_CreateAsStmt = 633, /* CreateAsStmt */ - YYSYMBOL_opt_with_data = 634, /* opt_with_data */ - YYSYMBOL_create_as_target = 635, /* create_as_target */ - YYSYMBOL_unreserved_keyword = 636, /* unreserved_keyword */ - YYSYMBOL_col_name_keyword = 637, /* col_name_keyword */ - YYSYMBOL_func_name_keyword = 638, /* func_name_keyword */ - YYSYMBOL_type_name_keyword = 639, /* type_name_keyword */ - YYSYMBOL_other_keyword = 640, /* other_keyword */ - YYSYMBOL_type_func_name_keyword = 641, /* type_func_name_keyword */ - YYSYMBOL_reserved_keyword = 642, /* reserved_keyword */ - YYSYMBOL_CreateFunctionStmt = 643, /* CreateFunctionStmt */ - YYSYMBOL_macro_alias = 644, /* macro_alias */ - YYSYMBOL_param_list = 645, /* param_list */ - YYSYMBOL_CreateSchemaStmt = 646, /* CreateSchemaStmt */ - YYSYMBOL_OptSchemaEltList = 647, /* OptSchemaEltList */ - YYSYMBOL_schema_stmt = 648, /* schema_stmt */ - YYSYMBOL_CreateSecretStmt = 649, /* CreateSecretStmt */ - YYSYMBOL_opt_secret_name = 650, /* opt_secret_name */ - YYSYMBOL_opt_persist = 651, /* opt_persist */ - YYSYMBOL_opt_storage_specifier = 652, /* opt_storage_specifier */ - YYSYMBOL_CreateSeqStmt = 653, /* CreateSeqStmt */ - YYSYMBOL_OptSeqOptList = 654, /* OptSeqOptList */ - YYSYMBOL_CreateTypeStmt = 655, /* CreateTypeStmt */ - YYSYMBOL_opt_enum_val_list = 656, /* opt_enum_val_list */ - YYSYMBOL_enum_val_list = 657, /* enum_val_list */ - YYSYMBOL_DeallocateStmt = 658, /* DeallocateStmt */ - YYSYMBOL_DeleteStmt = 659, /* DeleteStmt */ - YYSYMBOL_relation_expr_opt_alias = 660, /* relation_expr_opt_alias */ - YYSYMBOL_where_or_current_clause = 661, /* where_or_current_clause */ - YYSYMBOL_using_clause = 662, /* using_clause */ - YYSYMBOL_DropStmt = 663, /* DropStmt */ - YYSYMBOL_drop_type_any_name = 664, /* drop_type_any_name */ - YYSYMBOL_drop_type_name = 665, /* drop_type_name */ - YYSYMBOL_any_name_list = 666, /* any_name_list */ - YYSYMBOL_opt_drop_behavior = 667, /* opt_drop_behavior */ - YYSYMBOL_drop_type_name_on_any_name = 668, /* drop_type_name_on_any_name */ - YYSYMBOL_DropSecretStmt = 669, /* DropSecretStmt */ - YYSYMBOL_opt_storage_drop_specifier = 670, /* opt_storage_drop_specifier */ - YYSYMBOL_ExecuteStmt = 671, /* ExecuteStmt */ - YYSYMBOL_execute_param_expr = 672, /* execute_param_expr */ - YYSYMBOL_execute_param_list = 673, /* execute_param_list */ - YYSYMBOL_execute_param_clause = 674, /* execute_param_clause */ - YYSYMBOL_ExplainStmt = 675, /* ExplainStmt */ - YYSYMBOL_opt_verbose = 676, /* opt_verbose */ - YYSYMBOL_explain_option_arg = 677, /* explain_option_arg */ - YYSYMBOL_ExplainableStmt = 678, /* ExplainableStmt */ - YYSYMBOL_NonReservedWord = 679, /* NonReservedWord */ - YYSYMBOL_NonReservedWord_or_Sconst = 680, /* NonReservedWord_or_Sconst */ - YYSYMBOL_explain_option_list = 681, /* explain_option_list */ - YYSYMBOL_analyze_keyword = 682, /* analyze_keyword */ - YYSYMBOL_opt_boolean_or_string = 683, /* opt_boolean_or_string */ - YYSYMBOL_explain_option_elem = 684, /* explain_option_elem */ - YYSYMBOL_explain_option_name = 685, /* explain_option_name */ - YYSYMBOL_ExportStmt = 686, /* ExportStmt */ - YYSYMBOL_ImportStmt = 687, /* ImportStmt */ - YYSYMBOL_IndexStmt = 688, /* IndexStmt */ - YYSYMBOL_access_method = 689, /* access_method */ - YYSYMBOL_access_method_clause = 690, /* access_method_clause */ - YYSYMBOL_opt_concurrently = 691, /* opt_concurrently */ - YYSYMBOL_opt_index_name = 692, /* opt_index_name */ - YYSYMBOL_opt_reloptions = 693, /* opt_reloptions */ - YYSYMBOL_opt_unique = 694, /* opt_unique */ - YYSYMBOL_InsertStmt = 695, /* InsertStmt */ - YYSYMBOL_insert_rest = 696, /* insert_rest */ - YYSYMBOL_insert_target = 697, /* insert_target */ - YYSYMBOL_opt_by_name_or_position = 698, /* opt_by_name_or_position */ - YYSYMBOL_opt_conf_expr = 699, /* opt_conf_expr */ - YYSYMBOL_opt_with_clause = 700, /* opt_with_clause */ - YYSYMBOL_insert_column_item = 701, /* insert_column_item */ - YYSYMBOL_set_clause = 702, /* set_clause */ - YYSYMBOL_opt_or_action = 703, /* opt_or_action */ - YYSYMBOL_opt_on_conflict = 704, /* opt_on_conflict */ - YYSYMBOL_index_elem = 705, /* index_elem */ - YYSYMBOL_returning_clause = 706, /* returning_clause */ - YYSYMBOL_override_kind = 707, /* override_kind */ - YYSYMBOL_set_target_list = 708, /* set_target_list */ - YYSYMBOL_opt_collate = 709, /* opt_collate */ - YYSYMBOL_opt_class = 710, /* opt_class */ - YYSYMBOL_insert_column_list = 711, /* insert_column_list */ - YYSYMBOL_set_clause_list = 712, /* set_clause_list */ - YYSYMBOL_set_clause_list_opt_comma = 713, /* set_clause_list_opt_comma */ - YYSYMBOL_index_params = 714, /* index_params */ - YYSYMBOL_set_target = 715, /* set_target */ - YYSYMBOL_LoadStmt = 716, /* LoadStmt */ - YYSYMBOL_file_name = 717, /* file_name */ - YYSYMBOL_repo_path = 718, /* repo_path */ - YYSYMBOL_PragmaStmt = 719, /* PragmaStmt */ - YYSYMBOL_PrepareStmt = 720, /* PrepareStmt */ - YYSYMBOL_prep_type_clause = 721, /* prep_type_clause */ - YYSYMBOL_PreparableStmt = 722, /* PreparableStmt */ - YYSYMBOL_RenameStmt = 723, /* RenameStmt */ - YYSYMBOL_opt_column = 724, /* opt_column */ - YYSYMBOL_SelectStmt = 725, /* SelectStmt */ - YYSYMBOL_select_with_parens = 726, /* select_with_parens */ - YYSYMBOL_select_no_parens = 727, /* select_no_parens */ - YYSYMBOL_select_clause = 728, /* select_clause */ - YYSYMBOL_opt_select = 729, /* opt_select */ - YYSYMBOL_simple_select = 730, /* simple_select */ - YYSYMBOL_value_or_values = 731, /* value_or_values */ - YYSYMBOL_pivot_keyword = 732, /* pivot_keyword */ - YYSYMBOL_unpivot_keyword = 733, /* unpivot_keyword */ - YYSYMBOL_pivot_column_entry = 734, /* pivot_column_entry */ - YYSYMBOL_pivot_column_list_internal = 735, /* pivot_column_list_internal */ - YYSYMBOL_pivot_column_list = 736, /* pivot_column_list */ - YYSYMBOL_with_clause = 737, /* with_clause */ - YYSYMBOL_cte_list = 738, /* cte_list */ - YYSYMBOL_common_table_expr = 739, /* common_table_expr */ - YYSYMBOL_opt_materialized = 740, /* opt_materialized */ - YYSYMBOL_into_clause = 741, /* into_clause */ - YYSYMBOL_OptTempTableName = 742, /* OptTempTableName */ - YYSYMBOL_opt_table = 743, /* opt_table */ - YYSYMBOL_all_or_distinct = 744, /* all_or_distinct */ - YYSYMBOL_by_name = 745, /* by_name */ - YYSYMBOL_distinct_clause = 746, /* distinct_clause */ - YYSYMBOL_opt_all_clause = 747, /* opt_all_clause */ - YYSYMBOL_opt_ignore_nulls = 748, /* opt_ignore_nulls */ - YYSYMBOL_opt_sort_clause = 749, /* opt_sort_clause */ - YYSYMBOL_sort_clause = 750, /* sort_clause */ - YYSYMBOL_sortby_list = 751, /* sortby_list */ - YYSYMBOL_sortby = 752, /* sortby */ - YYSYMBOL_opt_asc_desc = 753, /* opt_asc_desc */ - YYSYMBOL_opt_nulls_order = 754, /* opt_nulls_order */ - YYSYMBOL_select_limit = 755, /* select_limit */ - YYSYMBOL_opt_select_limit = 756, /* opt_select_limit */ - YYSYMBOL_limit_clause = 757, /* limit_clause */ - YYSYMBOL_offset_clause = 758, /* offset_clause */ - YYSYMBOL_sample_count = 759, /* sample_count */ - YYSYMBOL_sample_clause = 760, /* sample_clause */ - YYSYMBOL_opt_sample_func = 761, /* opt_sample_func */ - YYSYMBOL_tablesample_entry = 762, /* tablesample_entry */ - YYSYMBOL_tablesample_clause = 763, /* tablesample_clause */ - YYSYMBOL_opt_tablesample_clause = 764, /* opt_tablesample_clause */ - YYSYMBOL_opt_repeatable_clause = 765, /* opt_repeatable_clause */ - YYSYMBOL_select_limit_value = 766, /* select_limit_value */ - YYSYMBOL_select_offset_value = 767, /* select_offset_value */ - YYSYMBOL_select_fetch_first_value = 768, /* select_fetch_first_value */ - YYSYMBOL_I_or_F_const = 769, /* I_or_F_const */ - YYSYMBOL_row_or_rows = 770, /* row_or_rows */ - YYSYMBOL_first_or_next = 771, /* first_or_next */ - YYSYMBOL_group_clause = 772, /* group_clause */ - YYSYMBOL_group_by_list = 773, /* group_by_list */ - YYSYMBOL_group_by_list_opt_comma = 774, /* group_by_list_opt_comma */ - YYSYMBOL_group_by_item = 775, /* group_by_item */ - YYSYMBOL_empty_grouping_set = 776, /* empty_grouping_set */ - YYSYMBOL_rollup_clause = 777, /* rollup_clause */ - YYSYMBOL_cube_clause = 778, /* cube_clause */ - YYSYMBOL_grouping_sets_clause = 779, /* grouping_sets_clause */ - YYSYMBOL_grouping_or_grouping_id = 780, /* grouping_or_grouping_id */ - YYSYMBOL_having_clause = 781, /* having_clause */ - YYSYMBOL_qualify_clause = 782, /* qualify_clause */ - YYSYMBOL_for_locking_clause = 783, /* for_locking_clause */ - YYSYMBOL_opt_for_locking_clause = 784, /* opt_for_locking_clause */ - YYSYMBOL_for_locking_items = 785, /* for_locking_items */ - YYSYMBOL_for_locking_item = 786, /* for_locking_item */ - YYSYMBOL_for_locking_strength = 787, /* for_locking_strength */ - YYSYMBOL_locked_rels_list = 788, /* locked_rels_list */ - YYSYMBOL_opt_nowait_or_skip = 789, /* opt_nowait_or_skip */ - YYSYMBOL_values_clause = 790, /* values_clause */ - YYSYMBOL_values_clause_opt_comma = 791, /* values_clause_opt_comma */ - YYSYMBOL_from_clause = 792, /* from_clause */ - YYSYMBOL_from_list = 793, /* from_list */ - YYSYMBOL_from_list_opt_comma = 794, /* from_list_opt_comma */ - YYSYMBOL_table_ref = 795, /* table_ref */ - YYSYMBOL_opt_pivot_group_by = 796, /* opt_pivot_group_by */ - YYSYMBOL_opt_include_nulls = 797, /* opt_include_nulls */ - YYSYMBOL_single_pivot_value = 798, /* single_pivot_value */ - YYSYMBOL_pivot_header = 799, /* pivot_header */ - YYSYMBOL_pivot_value = 800, /* pivot_value */ - YYSYMBOL_pivot_value_list = 801, /* pivot_value_list */ - YYSYMBOL_unpivot_header = 802, /* unpivot_header */ - YYSYMBOL_unpivot_value = 803, /* unpivot_value */ - YYSYMBOL_unpivot_value_list = 804, /* unpivot_value_list */ - YYSYMBOL_joined_table = 805, /* joined_table */ - YYSYMBOL_alias_clause = 806, /* alias_clause */ - YYSYMBOL_opt_alias_clause = 807, /* opt_alias_clause */ - YYSYMBOL_func_alias_clause = 808, /* func_alias_clause */ - YYSYMBOL_join_type = 809, /* join_type */ - YYSYMBOL_join_outer = 810, /* join_outer */ - YYSYMBOL_join_qual = 811, /* join_qual */ - YYSYMBOL_relation_expr = 812, /* relation_expr */ - YYSYMBOL_func_table = 813, /* func_table */ - YYSYMBOL_rowsfrom_item = 814, /* rowsfrom_item */ - YYSYMBOL_rowsfrom_list = 815, /* rowsfrom_list */ - YYSYMBOL_opt_col_def_list = 816, /* opt_col_def_list */ - YYSYMBOL_opt_ordinality = 817, /* opt_ordinality */ - YYSYMBOL_where_clause = 818, /* where_clause */ - YYSYMBOL_TableFuncElementList = 819, /* TableFuncElementList */ - YYSYMBOL_TableFuncElement = 820, /* TableFuncElement */ - YYSYMBOL_opt_collate_clause = 821, /* opt_collate_clause */ - YYSYMBOL_colid_type_list = 822, /* colid_type_list */ - YYSYMBOL_RowOrStruct = 823, /* RowOrStruct */ - YYSYMBOL_opt_Typename = 824, /* opt_Typename */ - YYSYMBOL_Typename = 825, /* Typename */ - YYSYMBOL_qualified_typename = 826, /* qualified_typename */ - YYSYMBOL_opt_array_bounds = 827, /* opt_array_bounds */ - YYSYMBOL_SimpleTypename = 828, /* SimpleTypename */ - YYSYMBOL_ConstTypename = 829, /* ConstTypename */ - YYSYMBOL_GenericType = 830, /* GenericType */ - YYSYMBOL_opt_type_modifiers = 831, /* opt_type_modifiers */ - YYSYMBOL_Numeric = 832, /* Numeric */ - YYSYMBOL_opt_float = 833, /* opt_float */ - YYSYMBOL_Bit = 834, /* Bit */ - YYSYMBOL_ConstBit = 835, /* ConstBit */ - YYSYMBOL_BitWithLength = 836, /* BitWithLength */ - YYSYMBOL_BitWithoutLength = 837, /* BitWithoutLength */ - YYSYMBOL_Character = 838, /* Character */ - YYSYMBOL_ConstCharacter = 839, /* ConstCharacter */ - YYSYMBOL_CharacterWithLength = 840, /* CharacterWithLength */ - YYSYMBOL_CharacterWithoutLength = 841, /* CharacterWithoutLength */ - YYSYMBOL_character = 842, /* character */ - YYSYMBOL_opt_varying = 843, /* opt_varying */ - YYSYMBOL_ConstDatetime = 844, /* ConstDatetime */ - YYSYMBOL_ConstInterval = 845, /* ConstInterval */ - YYSYMBOL_opt_timezone = 846, /* opt_timezone */ - YYSYMBOL_year_keyword = 847, /* year_keyword */ - YYSYMBOL_month_keyword = 848, /* month_keyword */ - YYSYMBOL_day_keyword = 849, /* day_keyword */ - YYSYMBOL_hour_keyword = 850, /* hour_keyword */ - YYSYMBOL_minute_keyword = 851, /* minute_keyword */ - YYSYMBOL_second_keyword = 852, /* second_keyword */ - YYSYMBOL_millisecond_keyword = 853, /* millisecond_keyword */ - YYSYMBOL_microsecond_keyword = 854, /* microsecond_keyword */ - YYSYMBOL_week_keyword = 855, /* week_keyword */ - YYSYMBOL_decade_keyword = 856, /* decade_keyword */ - YYSYMBOL_century_keyword = 857, /* century_keyword */ - YYSYMBOL_millennium_keyword = 858, /* millennium_keyword */ - YYSYMBOL_opt_interval = 859, /* opt_interval */ - YYSYMBOL_a_expr = 860, /* a_expr */ - YYSYMBOL_b_expr = 861, /* b_expr */ - YYSYMBOL_c_expr = 862, /* c_expr */ - YYSYMBOL_d_expr = 863, /* d_expr */ - YYSYMBOL_indirection_expr = 864, /* indirection_expr */ - YYSYMBOL_struct_expr = 865, /* struct_expr */ - YYSYMBOL_func_application = 866, /* func_application */ - YYSYMBOL_func_expr = 867, /* func_expr */ - YYSYMBOL_func_expr_windowless = 868, /* func_expr_windowless */ - YYSYMBOL_func_expr_common_subexpr = 869, /* func_expr_common_subexpr */ - YYSYMBOL_list_comprehension = 870, /* list_comprehension */ - YYSYMBOL_within_group_clause = 871, /* within_group_clause */ - YYSYMBOL_filter_clause = 872, /* filter_clause */ - YYSYMBOL_export_clause = 873, /* export_clause */ - YYSYMBOL_window_clause = 874, /* window_clause */ - YYSYMBOL_window_definition_list = 875, /* window_definition_list */ - YYSYMBOL_window_definition = 876, /* window_definition */ - YYSYMBOL_over_clause = 877, /* over_clause */ - YYSYMBOL_window_specification = 878, /* window_specification */ - YYSYMBOL_opt_existing_window_name = 879, /* opt_existing_window_name */ - YYSYMBOL_opt_partition_clause = 880, /* opt_partition_clause */ - YYSYMBOL_opt_frame_clause = 881, /* opt_frame_clause */ - YYSYMBOL_frame_extent = 882, /* frame_extent */ - YYSYMBOL_frame_bound = 883, /* frame_bound */ - YYSYMBOL_opt_window_exclusion_clause = 884, /* opt_window_exclusion_clause */ - YYSYMBOL_qualified_row = 885, /* qualified_row */ - YYSYMBOL_row = 886, /* row */ - YYSYMBOL_dict_arg = 887, /* dict_arg */ - YYSYMBOL_dict_arguments = 888, /* dict_arguments */ - YYSYMBOL_dict_arguments_opt_comma = 889, /* dict_arguments_opt_comma */ - YYSYMBOL_map_arg = 890, /* map_arg */ - YYSYMBOL_map_arguments = 891, /* map_arguments */ - YYSYMBOL_map_arguments_opt_comma = 892, /* map_arguments_opt_comma */ - YYSYMBOL_opt_map_arguments_opt_comma = 893, /* opt_map_arguments_opt_comma */ - YYSYMBOL_sub_type = 894, /* sub_type */ - YYSYMBOL_all_Op = 895, /* all_Op */ - YYSYMBOL_MathOp = 896, /* MathOp */ - YYSYMBOL_qual_Op = 897, /* qual_Op */ - YYSYMBOL_qual_all_Op = 898, /* qual_all_Op */ - YYSYMBOL_subquery_Op = 899, /* subquery_Op */ - YYSYMBOL_any_operator = 900, /* any_operator */ - YYSYMBOL_c_expr_list = 901, /* c_expr_list */ - YYSYMBOL_c_expr_list_opt_comma = 902, /* c_expr_list_opt_comma */ - YYSYMBOL_expr_list = 903, /* expr_list */ - YYSYMBOL_expr_list_opt_comma = 904, /* expr_list_opt_comma */ - YYSYMBOL_opt_expr_list_opt_comma = 905, /* opt_expr_list_opt_comma */ - YYSYMBOL_func_arg_list = 906, /* func_arg_list */ - YYSYMBOL_func_arg_expr = 907, /* func_arg_expr */ - YYSYMBOL_type_list = 908, /* type_list */ - YYSYMBOL_extract_list = 909, /* extract_list */ - YYSYMBOL_extract_arg = 910, /* extract_arg */ - YYSYMBOL_overlay_list = 911, /* overlay_list */ - YYSYMBOL_overlay_placing = 912, /* overlay_placing */ - YYSYMBOL_position_list = 913, /* position_list */ - YYSYMBOL_substr_list = 914, /* substr_list */ - YYSYMBOL_substr_from = 915, /* substr_from */ - YYSYMBOL_substr_for = 916, /* substr_for */ - YYSYMBOL_trim_list = 917, /* trim_list */ - YYSYMBOL_in_expr = 918, /* in_expr */ - YYSYMBOL_case_expr = 919, /* case_expr */ - YYSYMBOL_when_clause_list = 920, /* when_clause_list */ - YYSYMBOL_when_clause = 921, /* when_clause */ - YYSYMBOL_case_default = 922, /* case_default */ - YYSYMBOL_case_arg = 923, /* case_arg */ - YYSYMBOL_columnref = 924, /* columnref */ - YYSYMBOL_opt_slice_bound = 925, /* opt_slice_bound */ - YYSYMBOL_opt_indirection = 926, /* opt_indirection */ - YYSYMBOL_opt_func_arguments = 927, /* opt_func_arguments */ - YYSYMBOL_extended_indirection_el = 928, /* extended_indirection_el */ - YYSYMBOL_opt_extended_indirection = 929, /* opt_extended_indirection */ - YYSYMBOL_opt_asymmetric = 930, /* opt_asymmetric */ - YYSYMBOL_opt_target_list_opt_comma = 931, /* opt_target_list_opt_comma */ - YYSYMBOL_target_list = 932, /* target_list */ - YYSYMBOL_target_list_opt_comma = 933, /* target_list_opt_comma */ - YYSYMBOL_target_el = 934, /* target_el */ - YYSYMBOL_except_list = 935, /* except_list */ - YYSYMBOL_opt_except_list = 936, /* opt_except_list */ - YYSYMBOL_replace_list_el = 937, /* replace_list_el */ - YYSYMBOL_replace_list = 938, /* replace_list */ - YYSYMBOL_replace_list_opt_comma = 939, /* replace_list_opt_comma */ - YYSYMBOL_opt_replace_list = 940, /* opt_replace_list */ - YYSYMBOL_qualified_name_list = 941, /* qualified_name_list */ - YYSYMBOL_name_list = 942, /* name_list */ - YYSYMBOL_name_list_opt_comma = 943, /* name_list_opt_comma */ - YYSYMBOL_name_list_opt_comma_opt_bracket = 944, /* name_list_opt_comma_opt_bracket */ - YYSYMBOL_name = 945, /* name */ - YYSYMBOL_func_name = 946, /* func_name */ - YYSYMBOL_AexprConst = 947, /* AexprConst */ - YYSYMBOL_Iconst = 948, /* Iconst */ - YYSYMBOL_type_function_name = 949, /* type_function_name */ - YYSYMBOL_function_name_token = 950, /* function_name_token */ - YYSYMBOL_type_name_token = 951, /* type_name_token */ - YYSYMBOL_any_name = 952, /* any_name */ - YYSYMBOL_attrs = 953, /* attrs */ - YYSYMBOL_opt_name_list = 954, /* opt_name_list */ - YYSYMBOL_param_name = 955, /* param_name */ - YYSYMBOL_ColLabelOrString = 956, /* ColLabelOrString */ - YYSYMBOL_TransactionStmt = 957, /* TransactionStmt */ - YYSYMBOL_opt_transaction = 958, /* opt_transaction */ - YYSYMBOL_UpdateStmt = 959, /* UpdateStmt */ - YYSYMBOL_UseStmt = 960, /* UseStmt */ - YYSYMBOL_VacuumStmt = 961, /* VacuumStmt */ - YYSYMBOL_vacuum_option_elem = 962, /* vacuum_option_elem */ - YYSYMBOL_opt_full = 963, /* opt_full */ - YYSYMBOL_vacuum_option_list = 964, /* vacuum_option_list */ - YYSYMBOL_opt_freeze = 965, /* opt_freeze */ - YYSYMBOL_VariableResetStmt = 966, /* VariableResetStmt */ - YYSYMBOL_generic_reset = 967, /* generic_reset */ - YYSYMBOL_reset_rest = 968, /* reset_rest */ - YYSYMBOL_VariableSetStmt = 969, /* VariableSetStmt */ - YYSYMBOL_set_rest = 970, /* set_rest */ - YYSYMBOL_generic_set = 971, /* generic_set */ - YYSYMBOL_var_value = 972, /* var_value */ - YYSYMBOL_zone_value = 973, /* zone_value */ - YYSYMBOL_var_list = 974, /* var_list */ - YYSYMBOL_VariableShowStmt = 975, /* VariableShowStmt */ - YYSYMBOL_describe_or_desc = 976, /* describe_or_desc */ - YYSYMBOL_show_or_describe = 977, /* show_or_describe */ - YYSYMBOL_opt_tables = 978, /* opt_tables */ - YYSYMBOL_var_name = 979, /* var_name */ - YYSYMBOL_table_id = 980, /* table_id */ - YYSYMBOL_ViewStmt = 981, /* ViewStmt */ - YYSYMBOL_opt_check_option = 982 /* opt_check_option */ -}; -typedef enum yysymbol_kind_t yysymbol_kind_t; +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +#line 14 "third_party/libpg_query/grammar/grammar.y" +{ + core_YYSTYPE core_yystype; + /* these fields must match core_YYSTYPE: */ + int ival; + char *str; + const char *keyword; + const char *conststr; + + char chr; + bool boolean; + PGJoinType jtype; + PGDropBehavior dbehavior; + PGOnCommitAction oncommit; + PGOnCreateConflict oncreateconflict; + PGList *list; + PGNode *node; + PGValue *value; + PGObjectType objtype; + PGTypeName *typnam; + PGObjectWithArgs *objwithargs; + PGDefElem *defelt; + PGSortBy *sortby; + PGWindowDef *windef; + PGJoinExpr *jexpr; + PGIndexElem *ielem; + PGAlias *alias; + PGRangeVar *range; + PGIntoClause *into; + PGCTEMaterialize ctematerialize; + PGWithClause *with; + PGInferClause *infer; + PGOnConflictClause *onconflict; + PGOnConflictActionAlias onconflictshorthand; + PGAIndices *aind; + PGResTarget *target; + PGInsertStmt *istmt; + PGVariableSetStmt *vsetstmt; + PGOverridingKind override; + PGSortByDir sortorder; + PGSortByNulls nullorder; + PGConstrType constr; + PGLockClauseStrength lockstrength; + PGLockWaitPolicy lockwaitpolicy; + PGSubLinkType subquerytype; + PGViewCheckOption viewcheckoption; + PGInsertColumnOrder bynameorposition; +} +/* Line 193 of yacc.c. */ +#line 1321 "third_party/libpg_query/grammar/grammar_out.cpp" + YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif -#ifdef short -# undef short +#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED +typedef struct YYLTYPE +{ + int first_line; + int first_column; + int last_line; + int last_column; +} YYLTYPE; +# define yyltype YYLTYPE /* obsolescent; will be withdrawn */ +# define YYLTYPE_IS_DECLARED 1 +# define YYLTYPE_IS_TRIVIAL 1 #endif -/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure - and (if available) are included - so that the code can choose integer types of a good width. */ -#ifndef __PTRDIFF_MAX__ -# include /* INFRINGES ON USER NAME SPACE */ -# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_STDINT_H -# endif -#endif +/* Copy the second part of user declarations. */ -/* Narrow types that promote to a signed type and that can represent a - signed or unsigned integer of at least N bits. In tables they can - save space and decrease cache pressure. Promoting to a signed type - helps avoid bugs in integer arithmetic. */ -#ifdef __INT_LEAST8_MAX__ -typedef __INT_LEAST8_TYPE__ yytype_int8; -#elif defined YY_STDINT_H -typedef int_least8_t yytype_int8; -#else -typedef signed char yytype_int8; -#endif +/* Line 216 of yacc.c. */ +#line 1346 "third_party/libpg_query/grammar/grammar_out.cpp" -#ifdef __INT_LEAST16_MAX__ -typedef __INT_LEAST16_TYPE__ yytype_int16; -#elif defined YY_STDINT_H -typedef int_least16_t yytype_int16; -#else -typedef short yytype_int16; +#ifdef short +# undef short #endif -/* Work around bug in HP-UX 11.23, which defines these macros - incorrectly for preprocessor constants. This workaround can likely - be removed in 2023, as HPE has promised support for HP-UX 11.23 - (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of - . */ -#ifdef __hpux -# undef UINT_LEAST8_MAX -# undef UINT_LEAST16_MAX -# define UINT_LEAST8_MAX 255 -# define UINT_LEAST16_MAX 65535 +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; #endif -#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST8_TYPE__ yytype_uint8; -#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST8_MAX <= INT_MAX) -typedef uint_least8_t yytype_uint8; -#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX -typedef unsigned char yytype_uint8; +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; #else -typedef short yytype_uint8; +typedef short int yytype_int8; #endif -#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ -typedef __UINT_LEAST16_TYPE__ yytype_uint16; -#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ - && UINT_LEAST16_MAX <= INT_MAX) -typedef uint_least16_t yytype_uint16; -#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX -typedef unsigned short yytype_uint16; +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; #else -typedef int yytype_uint16; +typedef unsigned short int yytype_uint16; #endif -#ifndef YYPTRDIFF_T -# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ -# define YYPTRDIFF_T __PTRDIFF_TYPE__ -# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ -# elif defined PTRDIFF_MAX -# ifndef ptrdiff_t -# include /* INFRINGES ON USER NAME SPACE */ -# endif -# define YYPTRDIFF_T ptrdiff_t -# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX -# else -# define YYPTRDIFF_T long -# define YYPTRDIFF_MAXIMUM LONG_MAX -# endif +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; #endif #ifndef YYSIZE_T @@ -1346,106 +1380,55 @@ typedef int yytype_uint16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned +# define YYSIZE_T unsigned int # endif #endif -#define YYSIZE_MAXIMUM \ - YY_CAST (YYPTRDIFF_T, \ - (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ - ? YYPTRDIFF_MAXIMUM \ - : YY_CAST (YYSIZE_T, -1))) - -#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) - - -/* Stored state numbers (used for stacks). */ -typedef yytype_int16 yy_state_t; - -/* State numbers in computations. */ -typedef int yy_state_fast_t; +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - - -#ifndef YY_ATTRIBUTE_PURE -# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define YY_ATTRIBUTE_PURE -# endif -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) -# else -# define YY_ATTRIBUTE_UNUSED +# define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) +# define YYUSE(e) ((void) (e)) #else -# define YY_USE(E) /* empty */ +# define YYUSE(e) /* empty */ #endif -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ -# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") -# else -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# endif -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) #else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ -# define YY_IGNORE_USELESS_CAST_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") -# define YY_IGNORE_USELESS_CAST_END \ - _Pragma ("GCC diagnostic pop") +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int i) +#else +static int +YYID (i) + int i; #endif -#ifndef YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_BEGIN -# define YY_IGNORE_USELESS_CAST_END +{ + return i; +} #endif - -#define YY_ASSERT(E) ((void) (0 && (E))) - -#if !defined yyoverflow +#if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -1462,11 +1445,11 @@ typedef int yy_state_fast_t; # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # endif @@ -1474,8 +1457,8 @@ typedef int yy_state_fast_t; # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@ -1489,134 +1472,127 @@ typedef int yy_state_fast_t; # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ +# if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 +# ifndef _STDLIB_H +# define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif -#endif /* !defined yyoverflow */ +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ - && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ + && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { - yy_state_t yyss_alloc; - YYSTYPE yyvs_alloc; - YYLTYPE yyls_alloc; + yytype_int16 yyss; + YYSTYPE yyvs; + YYLTYPE yyls; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \ - + YYSIZEOF (YYLTYPE)) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ + 2 * YYSTACK_GAP_MAXIMUM) -# define YYCOPY_NEEDED 1 +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYPTRDIFF_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / YYSIZEOF (*yyptr); \ - } \ - while (0) +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) #endif -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYPTRDIFF_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - /* YYFINAL -- State number of the termination state. */ #define YYFINAL 867 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 72555 +#define YYLAST 72581 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 525 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 458 +#define YYNNTS 459 /* YYNRULES -- Number of rules. */ -#define YYNRULES 2115 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 3524 +#define YYNRULES 2118 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 3526 -/* YYMAXUTOK -- Last valid token kind. */ +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 #define YYMAXUTOK 757 +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - (0 <= (YYX) && (YYX) <= YYMAXUTOK \ - ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ - : YYSYMBOL_YYUNDEF) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex. */ -static const yytype_int16 yytranslate[] = +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 519, 520, 509, 2, 2, + 2, 2, 2, 2, 2, 522, 523, 509, 2, 2, 514, 515, 507, 505, 518, 506, 516, 508, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 524, 517, - 501, 503, 502, 521, 2, 2, 2, 2, 2, 2, + 501, 503, 502, 519, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 512, 2, 513, 510, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 522, 2, 523, 2, 2, 2, 2, + 2, 2, 2, 520, 2, 521, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1683,8 +1659,869 @@ static const yytype_int16 yytranslate[] = }; #if YYDEBUG -/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_int16 yyrline[] = +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint16 yyprhs[] = +{ + 0, 0, 3, 5, 9, 11, 13, 15, 17, 19, + 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, + 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, + 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, + 81, 83, 85, 87, 89, 91, 92, 97, 104, 109, + 116, 121, 128, 133, 140, 142, 145, 149, 152, 154, + 158, 161, 165, 167, 171, 174, 180, 184, 191, 196, + 203, 210, 217, 223, 229, 236, 246, 251, 257, 265, + 272, 277, 286, 291, 294, 299, 303, 310, 315, 318, + 321, 324, 327, 329, 332, 333, 335, 338, 341, 344, + 346, 350, 355, 358, 360, 361, 364, 368, 371, 375, + 377, 380, 382, 384, 386, 388, 390, 392, 394, 397, + 400, 402, 404, 406, 408, 410, 417, 424, 433, 440, + 449, 456, 465, 472, 481, 490, 501, 510, 521, 523, + 524, 534, 536, 541, 546, 554, 557, 559, 563, 566, + 569, 570, 575, 579, 580, 582, 583, 586, 590, 596, + 599, 602, 603, 612, 618, 619, 625, 631, 639, 642, + 643, 645, 647, 649, 653, 656, 657, 659, 660, 662, + 666, 668, 672, 674, 677, 679, 683, 686, 693, 702, + 708, 710, 711, 713, 717, 720, 725, 731, 737, 746, + 754, 756, 757, 766, 778, 789, 790, 792, 793, 795, + 797, 798, 801, 805, 815, 828, 830, 834, 836, 840, + 844, 845, 850, 857, 859, 862, 864, 866, 867, 869, + 872, 875, 877, 880, 883, 885, 888, 892, 895, 898, + 901, 904, 908, 912, 916, 918, 922, 924, 925, 927, + 930, 933, 939, 947, 948, 951, 954, 957, 960, 963, + 966, 969, 971, 973, 974, 977, 987, 1000, 1012, 1013, + 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1032, 1033, 1035, + 1038, 1040, 1042, 1045, 1048, 1052, 1054, 1056, 1059, 1062, + 1064, 1067, 1071, 1077, 1081, 1084, 1090, 1092, 1094, 1096, + 1097, 1103, 1111, 1117, 1120, 1124, 1126, 1128, 1131, 1134, + 1135, 1139, 1144, 1149, 1150, 1154, 1157, 1158, 1162, 1164, + 1166, 1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1186, + 1190, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 1211, 1215, + 1219, 1223, 1224, 1226, 1229, 1231, 1234, 1237, 1240, 1243, + 1247, 1252, 1254, 1258, 1260, 1262, 1264, 1266, 1270, 1272, + 1275, 1276, 1278, 1281, 1282, 1284, 1288, 1289, 1292, 1293, + 1297, 1301, 1303, 1309, 1313, 1315, 1319, 1321, 1324, 1326, + 1331, 1337, 1343, 1350, 1354, 1362, 1367, 1379, 1381, 1385, + 1388, 1391, 1394, 1395, 1399, 1401, 1403, 1406, 1409, 1412, + 1415, 1417, 1418, 1420, 1423, 1430, 1435, 1442, 1447, 1454, + 1463, 1465, 1467, 1469, 1471, 1474, 1476, 1479, 1481, 1484, + 1486, 1488, 1490, 1492, 1496, 1500, 1504, 1508, 1510, 1513, + 1516, 1518, 1522, 1524, 1526, 1528, 1532, 1534, 1536, 1537, + 1539, 1541, 1543, 1552, 1564, 1575, 1583, 1594, 1604, 1606, + 1608, 1611, 1615, 1624, 1636, 1646, 1654, 1655, 1659, 1663, + 1665, 1667, 1671, 1672, 1674, 1678, 1680, 1681, 1683, 1684, + 1686, 1687, 1689, 1693, 1695, 1697, 1699, 1703, 1705, 1706, + 1709, 1712, 1713, 1716, 1717, 1719, 1720, 1722, 1724, 1726, + 1730, 1734, 1736, 1738, 1742, 1746, 1750, 1754, 1758, 1762, + 1767, 1771, 1774, 1776, 1778, 1780, 1782, 1786, 1788, 1790, + 1794, 1796, 1798, 1802, 1806, 1810, 1812, 1815, 1820, 1825, + 1828, 1832, 1838, 1844, 1846, 1848, 1852, 1853, 1865, 1877, + 1888, 1901, 1903, 1906, 1912, 1917, 1922, 1927, 1932, 1940, + 1946, 1951, 1959, 1966, 1976, 1986, 1991, 1993, 1995, 1997, + 1999, 2001, 2003, 2005, 2011, 2013, 2015, 2019, 2021, 2024, + 2027, 2030, 2034, 2036, 2040, 2048, 2050, 2053, 2054, 2057, + 2058, 2062, 2066, 2071, 2076, 2081, 2086, 2090, 2093, 2095, + 2097, 2098, 2100, 2102, 2103, 2106, 2108, 2114, 2116, 2117, + 2120, 2123, 2124, 2126, 2127, 2131, 2137, 2139, 2143, 2148, + 2152, 2154, 2156, 2157, 2160, 2163, 2164, 2167, 2170, 2172, + 2174, 2176, 2177, 2180, 2185, 2191, 2196, 2199, 2203, 2206, + 2209, 2212, 2215, 2217, 2220, 2224, 2225, 2227, 2228, 2234, + 2236, 2241, 2248, 2251, 2253, 2254, 2259, 2260, 2262, 2264, + 2267, 2270, 2273, 2275, 2277, 2280, 2283, 2285, 2287, 2289, + 2291, 2293, 2295, 2299, 2303, 2304, 2306, 2310, 2312, 2315, + 2317, 2319, 2321, 2323, 2325, 2328, 2333, 2338, 2344, 2346, + 2348, 2351, 2352, 2355, 2356, 2358, 2362, 2364, 2365, 2367, + 2370, 2374, 2377, 2382, 2385, 2389, 2392, 2393, 2395, 2398, + 2399, 2404, 2410, 2412, 2415, 2418, 2419, 2421, 2425, 2427, + 2430, 2434, 2438, 2442, 2446, 2450, 2454, 2456, 2461, 2471, + 2481, 2485, 2486, 2489, 2492, 2493, 2499, 2503, 2504, 2506, + 2508, 2512, 2518, 2522, 2524, 2527, 2529, 2533, 2539, 2541, + 2544, 2548, 2553, 2559, 2564, 2570, 2575, 2582, 2588, 2593, + 2599, 2605, 2611, 2614, 2619, 2621, 2623, 2624, 2626, 2631, + 2637, 2642, 2643, 2646, 2649, 2652, 2654, 2656, 2658, 2660, + 2661, 2666, 2669, 2671, 2674, 2677, 2682, 2685, 2692, 2695, + 2697, 2701, 2706, 2707, 2710, 2711, 2714, 2715, 2717, 2721, + 2725, 2728, 2729, 2732, 2737, 2739, 2741, 2743, 2744, 2747, + 2751, 2757, 2764, 2767, 2771, 2773, 2779, 2785, 2791, 2795, + 2799, 2803, 2808, 2809, 2811, 2813, 2815, 2817, 2819, 2822, + 2827, 2829, 2831, 2833, 2835, 2838, 2842, 2843, 2845, 2847, + 2849, 2851, 2853, 2856, 2859, 2862, 2865, 2868, 2870, 2874, + 2875, 2877, 2879, 2881, 2883, 2889, 2892, 2894, 2896, 2898, + 2900, 2905, 2907, 2910, 2913, 2915, 2919, 2923, 2926, 2928, + 2929, 2935, 2938, 2944, 2947, 2949, 2953, 2957, 2958, 2960, + 2962, 2964, 2966, 2968, 2970, 2972, 2974, 2976, 2978, 2980, + 2982, 2984, 2986, 2988, 2990, 2992, 2994, 2996, 2998, 3000, + 3002, 3004, 3006, 3008, 3010, 3012, 3014, 3016, 3018, 3020, + 3022, 3024, 3026, 3028, 3030, 3034, 3038, 3042, 3046, 3050, + 3054, 3058, 3059, 3061, 3065, 3069, 3075, 3078, 3081, 3085, + 3089, 3093, 3097, 3101, 3105, 3109, 3113, 3117, 3121, 3125, + 3129, 3133, 3137, 3141, 3144, 3147, 3151, 3155, 3158, 3161, + 3165, 3169, 3175, 3180, 3187, 3191, 3197, 3202, 3209, 3214, + 3221, 3227, 3235, 3239, 3242, 3247, 3251, 3254, 3258, 3262, + 3266, 3270, 3275, 3279, 3284, 3288, 3293, 3299, 3306, 3313, + 3321, 3328, 3336, 3343, 3351, 3355, 3360, 3365, 3372, 3374, + 3379, 3383, 3389, 3391, 3395, 3398, 3401, 3405, 3409, 3413, + 3417, 3421, 3425, 3429, 3433, 3437, 3441, 3445, 3449, 3453, + 3457, 3461, 3464, 3467, 3473, 3480, 3487, 3495, 3497, 3500, + 3502, 3504, 3506, 3509, 3512, 3517, 3521, 3523, 3525, 3527, + 3529, 3531, 3536, 3538, 3540, 3544, 3546, 3549, 3554, 3557, + 3560, 3564, 3568, 3575, 3583, 3593, 3601, 3609, 3615, 3617, + 3619, 3621, 3627, 3634, 3641, 3646, 3651, 3656, 3661, 3668, + 3674, 3680, 3686, 3691, 3698, 3703, 3711, 3721, 3727, 3728, + 3734, 3739, 3740, 3742, 3743, 3746, 3747, 3749, 3753, 3757, + 3760, 3763, 3764, 3771, 3773, 3774, 3778, 3779, 3783, 3787, + 3791, 3792, 3794, 3799, 3802, 3805, 3808, 3811, 3814, 3818, + 3821, 3824, 3828, 3829, 3834, 3838, 3840, 3846, 3850, 3852, + 3856, 3858, 3861, 3865, 3867, 3871, 3873, 3876, 3878, 3879, + 3881, 3883, 3885, 3887, 3889, 3891, 3893, 3895, 3897, 3899, + 3901, 3903, 3905, 3907, 3909, 3911, 3913, 3915, 3917, 3919, + 3924, 3926, 3931, 3933, 3938, 3940, 3943, 3945, 3948, 3950, + 3953, 3955, 3959, 3961, 3965, 3967, 3970, 3972, 3976, 3978, + 3981, 3983, 3984, 3986, 3990, 3992, 3996, 4000, 4002, 4006, + 4010, 4011, 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, + 4029, 4031, 4033, 4035, 4037, 4039, 4044, 4048, 4051, 4055, + 4056, 4060, 4064, 4067, 4070, 4072, 4073, 4076, 4079, 4083, + 4086, 4088, 4090, 4094, 4100, 4102, 4105, 4110, 4113, 4114, + 4116, 4117, 4119, 4122, 4126, 4132, 4140, 4148, 4150, 4151, + 4152, 4155, 4156, 4159, 4163, 4167, 4171, 4177, 4185, 4193, + 4194, 4197, 4199, 4200, 4202, 4203, 4205, 4209, 4211, 4214, + 4218, 4221, 4223, 4228, 4231, 4233, 4234, 4238, 4240, 4244, + 4246, 4249, 4254, 4257, 4258, 4260, 4264, 4266, 4270, 4272, + 4275, 4277, 4281, 4283, 4285, 4288, 4290, 4292, 4295, 4297, + 4299, 4302, 4310, 4313, 4319, 4323, 4327, 4329, 4331, 4333, + 4335, 4337, 4339, 4341, 4343, 4345, 4347, 4349, 4351, 4353, + 4355, 4358, 4361, 4365, 4369, 4370, 4372, 4374, 4376, 4382, + 4386, 4387, 4389, 4391, 4393, 4395, 4397, 4399, 4404, 4412, + 4419, 4422, 4423, 4425, 4427, 4429, 4431, 4445, 4462, 4464, + 4467, 4468, 4470, 4471, 4473, 4474, 4477, 4478, 4480, 4481, + 4488, 4497, 4504, 4513, 4520, 4529, 4533, 4536, 4538, 4539, + 4546, 4553, 4555, 4557, 4559, 4561, 4563, 4565, 4568, 4570, + 4572, 4574, 4576, 4578, 4583, 4590, 4594, 4597, 4602, 4606, + 4612, 4614, 4615, 4617, 4619, 4620, 4622, 4624, 4626, 4628, + 4630, 4632, 4634, 4636, 4638, 4640, 4642, 4644, 4646, 4648, + 4650, 4652, 4654, 4656, 4658, 4660, 4662, 4664, 4666, 4668, + 4670, 4672, 4674, 4676, 4678, 4680, 4682, 4684, 4686, 4688, + 4690, 4692, 4696, 4698, 4700, 4702, 4704, 4706, 4708, 4711, + 4713, 4715, 4718, 4722, 4726, 4730, 4732, 4736, 4740, 4743, + 4747, 4751, 4753, 4755, 4757, 4761, 4767, 4769, 4771, 4773, + 4775, 4779, 4782, 4785, 4789, 4794, 4800, 4802, 4804, 4806, + 4808, 4813, 4820, 4826, 4831, 4838, 4840, 4842, 4844, 4846, + 4848, 4850, 4851, 4853, 4857, 4859, 4860, 4868, 4872, 4874, + 4877, 4881, 4884, 4885, 4888, 4889, 4892, 4897, 4903, 4912, + 4915, 4919, 4925, 4927, 4928, 4931, 4932, 4935, 4939, 4943, + 4947, 4949, 4951, 4953, 4956, 4960, 4963, 4966, 4969, 4972, + 4976, 4981, 4985, 4987, 4989, 4991, 4993, 4995, 4997, 4998, + 5000, 5004, 5006, 5010, 5013, 5023, 5036, 5048, 5061, 5076, + 5080, 5085, 5090, 5091, 5099, 5110, 5120, 5123, 5127, 5128, + 5133, 5135, 5137, 5139, 5141, 5143, 5145, 5147, 5149, 5151, + 5153, 5155, 5157, 5159, 5161, 5163, 5165, 5167, 5169, 5171, + 5173, 5175, 5177, 5179, 5181, 5183, 5185, 5187, 5189, 5191, + 5193, 5195, 5197, 5199, 5201, 5203, 5205, 5207, 5209, 5211, + 5213, 5215, 5217, 5219, 5221, 5223, 5225, 5227, 5229, 5231, + 5233, 5235, 5237, 5239, 5241, 5243, 5245, 5247, 5249, 5251, + 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, 5271, + 5273, 5275, 5277, 5279, 5281, 5283, 5285, 5287, 5289, 5291, + 5293, 5295, 5297, 5299, 5301, 5303, 5305, 5307, 5309, 5311, + 5313, 5315, 5317, 5319, 5321, 5323, 5325, 5327, 5329, 5331, + 5333, 5335, 5337, 5339, 5341, 5343, 5345, 5347, 5349, 5351, + 5353, 5355, 5357, 5359, 5361, 5363, 5365, 5367, 5369, 5371, + 5373, 5375, 5377, 5379, 5381, 5383, 5385, 5387, 5389, 5391, + 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, 5411, + 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, + 5433, 5435, 5437, 5439, 5441, 5443, 5445, 5447, 5449, 5451, + 5453, 5455, 5457, 5459, 5461, 5463, 5465, 5467, 5469, 5471, + 5473, 5475, 5477, 5479, 5481, 5483, 5485, 5487, 5489, 5491, + 5493, 5495, 5497, 5499, 5501, 5503, 5505, 5507, 5509, 5511, + 5513, 5515, 5517, 5519, 5521, 5523, 5525, 5527, 5529, 5531, + 5533, 5535, 5537, 5539, 5541, 5543, 5545, 5547, 5549, 5551, + 5553, 5555, 5557, 5559, 5561, 5563, 5565, 5567, 5569, 5571, + 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, 5591, + 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, + 5613, 5615, 5617, 5619, 5621, 5623, 5625, 5627, 5629, 5631, + 5633, 5635, 5637, 5639, 5641, 5643, 5645, 5647, 5649, 5651, + 5653, 5655, 5657, 5659, 5661, 5663, 5665, 5667, 5669, 5671, + 5673, 5675, 5677, 5679, 5681, 5683, 5685, 5687, 5689, 5691, + 5693, 5695, 5697, 5699, 5701, 5703, 5705, 5707, 5709, 5711, + 5713, 5715, 5717, 5719, 5721, 5723, 5725, 5727, 5729, 5731, + 5733, 5735, 5737, 5739, 5741, 5743, 5745, 5747, 5749, 5751, + 5753, 5755, 5757, 5759, 5761, 5763, 5765, 5767, 5769, 5771, + 5773, 5775, 5777, 5779, 5781, 5783, 5785, 5787, 5789, 5791, + 5793, 5795, 5797, 5799, 5801, 5803, 5805, 5807, 5809, 5811, + 5813, 5815, 5817, 5819, 5821, 5823, 5825, 5827, 5829, 5831, + 5833, 5835, 5837, 5839, 5841, 5843, 5845, 5847, 5849, 5851, + 5853, 5855, 5857, 5859, 5861, 5863, 5865, 5867, 5869, 5871, + 5873, 5875, 5877, 5879, 5881, 5883, 5885, 5887, 5889, 5891, + 5893, 5895, 5897, 5899, 5901, 5903, 5905, 5907, 5909, 5911, + 5913, 5915, 5917, 5919, 5921, 5923, 5925, 5927, 5929, 5931, + 5933, 5935, 5937, 5939, 5941, 5943, 5945, 5947, 5949, 5951, + 5953, 5955, 5957, 5959, 5961, 5963, 5965, 5967, 5969, 5971, + 5973, 5975, 5977, 5979, 5981, 5983, 5985, 5987, 5989, 5991, + 5993, 5995, 5997, 5999, 6001, 6003, 6005, 6007, 6009, 6011, + 6013, 6015, 6017, 6019, 6021, 6023, 6025, 6027, 6029, 6031, + 6033, 6035, 6037, 6039, 6041, 6043, 6045, 6047, 6049, 6051, + 6053, 6055, 6057, 6059, 6061, 6063, 6065, 6067, 6069, 6071, + 6073, 6075, 6077, 6079, 6081, 6083, 6085, 6087, 6089, 6091, + 6093, 6095, 6097, 6099, 6101, 6103, 6105, 6107, 6109, 6111, + 6113, 6115, 6117, 6119, 6121, 6123, 6125, 6127, 6129, 6131, + 6133, 6135, 6137, 6139, 6141, 6143, 6145, 6147, 6149, 6151, + 6153, 6155, 6157, 6159, 6161, 6163, 6165, 6167, 6169, 6171, + 6173, 6175, 6177, 6179, 6181, 6183, 6185, 6187, 6189, 6191, + 6193, 6195, 6197, 6199, 6201, 6203, 6205, 6207, 6209, 6211, + 6213, 6215, 6217, 6219, 6221, 6223, 6225, 6227, 6229, 6231, + 6233, 6235, 6237, 6239, 6241, 6243, 6245, 6247, 6249, 6251, + 6253, 6255, 6257, 6259, 6261, 6263, 6265, 6267, 6269, 6271, + 6273, 6275, 6277, 6279, 6281, 6283, 6285, 6287, 6289, 6291, + 6293, 6295, 6297, 6299, 6301, 6303, 6305, 6307, 6309, 6311, + 6313, 6315, 6317, 6319, 6321, 6323, 6325, 6327, 6329, 6331, + 6333, 6335, 6337, 6339, 6341, 6343, 6345, 6347, 6349, 6351, + 6353, 6355, 6357, 6359, 6361, 6363, 6365, 6367, 6369 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int16 yyrhs[] = +{ + 526, 0, -1, 527, -1, 527, 517, 528, -1, 528, + -1, 920, -1, 586, -1, 529, -1, 957, -1, 958, + -1, 971, -1, 921, -1, 923, -1, 656, -1, 974, + -1, 652, -1, 910, -1, 578, -1, 576, -1, 598, + -1, 572, -1, 540, -1, 953, -1, 959, -1, 593, + -1, 646, -1, 582, -1, 928, -1, 926, -1, 927, + -1, 913, -1, 551, -1, 945, -1, 575, -1, 907, + -1, 549, -1, 674, -1, 595, -1, 655, -1, 597, + -1, 948, -1, 962, -1, 939, -1, 965, -1, 972, + -1, -1, 32, 416, 761, 537, -1, 32, 416, 191, + 152, 761, 537, -1, 32, 202, 541, 537, -1, 32, + 202, 191, 152, 541, 537, -1, 32, 381, 541, 537, + -1, 32, 381, 191, 152, 541, 537, -1, 32, 466, + 541, 537, -1, 32, 466, 191, 152, 541, 537, -1, + 532, -1, 530, 532, -1, 386, 117, 809, -1, 137, + 117, -1, 356, -1, 356, 588, 589, -1, 386, 590, + -1, 386, 175, 645, -1, 536, -1, 533, 518, 536, + -1, 26, 625, -1, 26, 191, 274, 152, 625, -1, + 26, 82, 625, -1, 26, 82, 191, 274, 152, 625, + -1, 32, 550, 542, 531, -1, 32, 550, 542, 137, + 274, 279, -1, 32, 550, 542, 386, 274, 279, -1, + 32, 550, 542, 386, 402, 592, -1, 32, 550, 542, + 386, 613, -1, 32, 550, 542, 354, 613, -1, 32, + 550, 542, 386, 405, 542, -1, 32, 550, 542, 26, + 175, 645, 40, 190, 601, -1, 32, 550, 542, 530, + -1, 32, 550, 542, 137, 190, -1, 32, 550, 542, + 137, 190, 191, 152, -1, 137, 550, 191, 152, 542, + 650, -1, 137, 550, 542, 650, -1, 32, 550, 542, + 539, 439, 774, 770, 535, -1, 32, 550, 542, 538, + -1, 26, 615, -1, 32, 93, 895, 599, -1, 457, + 93, 895, -1, 137, 93, 191, 152, 895, 650, -1, + 137, 93, 895, 650, -1, 386, 244, -1, 386, 448, + -1, 386, 613, -1, 354, 613, -1, 538, -1, 454, + 809, -1, -1, 609, -1, 386, 609, -1, 26, 609, + -1, 137, 623, -1, 534, -1, 537, 518, 534, -1, + 293, 514, 533, 515, -1, 386, 107, -1, 386, -1, + -1, 111, 895, -1, 111, 325, 895, -1, 111, 30, + -1, 111, 325, 30, -1, 543, -1, 542, 545, -1, + 3, -1, 977, -1, 978, -1, 542, -1, 5, -1, + 5, -1, 546, -1, 545, 546, -1, 516, 547, -1, + 548, -1, 3, -1, 981, -1, 977, -1, 983, -1, + 32, 370, 895, 350, 428, 895, -1, 32, 416, 761, + 350, 428, 895, -1, 32, 416, 191, 152, 761, 350, + 428, 895, -1, 32, 381, 541, 350, 428, 895, -1, + 32, 381, 191, 152, 541, 350, 428, 895, -1, 32, + 466, 541, 350, 428, 895, -1, 32, 466, 191, 152, + 541, 350, 428, 895, -1, 32, 202, 541, 350, 428, + 895, -1, 32, 202, 191, 152, 541, 350, 428, 895, + -1, 32, 416, 761, 350, 550, 895, 428, 895, -1, + 32, 416, 191, 152, 761, 350, 550, 895, 428, 895, + -1, 32, 416, 761, 350, 93, 895, 428, 895, -1, + 32, 416, 191, 152, 761, 350, 93, 895, 428, 895, + -1, 82, -1, -1, 556, 212, 559, 219, 553, 554, + 552, 560, 562, -1, 674, -1, 303, 563, 459, 674, + -1, 514, 567, 515, 674, -1, 514, 567, 515, 303, + 563, 459, 674, -1, 117, 460, -1, 541, -1, 541, + 40, 542, -1, 59, 265, -1, 59, 320, -1, -1, + 514, 570, 515, 767, -1, 289, 93, 895, -1, -1, + 686, -1, -1, 542, 876, -1, 571, 503, 809, -1, + 514, 564, 515, 503, 809, -1, 294, 352, -1, 294, + 192, -1, -1, 289, 91, 555, 133, 451, 386, 569, + 767, -1, 289, 91, 555, 133, 275, -1, -1, 542, + 565, 566, 702, 703, -1, 818, 565, 566, 702, 703, + -1, 514, 809, 515, 565, 566, 702, 703, -1, 358, + 882, -1, -1, 453, -1, 415, -1, 571, -1, 564, + 518, 571, -1, 80, 902, -1, -1, 902, -1, -1, + 557, -1, 567, 518, 557, -1, 558, -1, 568, 518, + 558, -1, 568, -1, 568, 518, -1, 561, -1, 570, + 518, 561, -1, 542, 876, -1, 100, 439, 541, 40, + 144, 675, -1, 100, 439, 541, 40, 144, 514, 573, + 515, -1, 100, 439, 541, 40, 774, -1, 574, -1, + -1, 544, -1, 574, 518, 544, -1, 322, 542, -1, + 322, 542, 503, 944, -1, 322, 542, 514, 856, 515, + -1, 100, 644, 381, 541, 577, -1, 100, 644, 381, + 191, 274, 152, 541, 577, -1, 100, 294, 352, 644, + 381, 541, 577, -1, 587, -1, -1, 100, 580, 377, + 579, 581, 514, 673, 515, -1, 100, 580, 377, 191, + 274, 152, 579, 581, 514, 673, 515, -1, 100, 294, + 352, 580, 377, 579, 581, 514, 673, 515, -1, -1, + 542, -1, -1, 422, -1, 313, -1, -1, 198, 3, + -1, 151, 895, 585, -1, 100, 644, 416, 976, 40, + 151, 895, 585, 975, -1, 100, 644, 416, 191, 274, + 152, 976, 40, 151, 895, 585, 975, -1, 809, -1, + 905, 13, 809, -1, 583, -1, 584, 518, 583, -1, + 514, 584, 515, -1, -1, 32, 381, 541, 587, -1, + 32, 381, 191, 152, 541, 587, -1, 590, -1, 587, + 590, -1, 476, -1, 500, -1, -1, 4, -1, 505, + 4, -1, 506, 4, -1, 592, -1, 40, 777, -1, + 60, 589, -1, 106, -1, 272, 106, -1, 201, 591, + 589, -1, 250, 589, -1, 260, 589, -1, 272, 250, + -1, 272, 260, -1, 304, 59, 902, -1, 381, 265, + 902, -1, 400, 588, 589, -1, 356, -1, 356, 588, + 589, -1, 59, -1, -1, 898, -1, 505, 898, -1, + 506, 898, -1, 137, 580, 377, 542, 594, -1, 137, + 580, 377, 191, 152, 542, 594, -1, -1, 171, 3, + -1, 22, 596, -1, 52, 596, -1, 400, 596, -1, + 86, 596, -1, 143, 596, -1, 363, 596, -1, 479, + -1, 430, -1, -1, 452, 541, -1, 100, 644, 416, + 541, 514, 631, 515, 620, 612, -1, 100, 644, 416, + 191, 274, 152, 541, 514, 631, 515, 620, 612, -1, + 100, 294, 352, 644, 416, 541, 514, 631, 515, 620, + 612, -1, -1, 599, 624, -1, 639, -1, 983, -1, + 848, -1, 589, -1, 544, -1, 273, -1, 514, 587, + 515, -1, -1, 544, -1, 272, 25, -1, 357, -1, + 63, -1, 386, 279, -1, 386, 117, -1, 93, 895, + 605, -1, 605, -1, 619, -1, 80, 902, -1, 274, + 279, -1, 279, -1, 445, 630, -1, 328, 226, 630, + -1, 74, 514, 809, 515, 614, -1, 454, 88, 895, + -1, 117, 810, -1, 344, 541, 633, 642, 611, -1, + 468, -1, 406, -1, 606, -1, -1, 175, 645, 40, + 190, 601, -1, 175, 645, 40, 514, 809, 515, 607, + -1, 40, 514, 809, 515, 607, -1, 623, 602, -1, + 289, 451, 603, -1, 610, -1, 635, -1, 610, 635, + -1, 635, 610, -1, -1, 289, 86, 137, -1, 289, + 86, 122, 366, -1, 289, 86, 327, 366, -1, -1, + 514, 617, 515, -1, 272, 204, -1, -1, 93, 895, + 640, -1, 640, -1, 85, -1, 94, -1, 118, -1, + 190, -1, 203, -1, 402, -1, 405, -1, 30, -1, + 636, -1, 617, 518, 636, -1, 454, 202, 627, -1, + 119, -1, 274, 119, -1, 206, 120, -1, 206, 194, + -1, 476, 613, -1, 476, 287, -1, 478, 287, -1, + -1, 514, 626, 515, -1, 622, 200, 616, -1, 622, + 149, 616, -1, -1, 548, -1, 274, 119, -1, 119, + -1, 206, 194, -1, 206, 120, -1, 274, 456, -1, + 272, 204, -1, 542, 774, 634, -1, 542, 773, 608, + 634, -1, 629, -1, 626, 518, 629, -1, 542, -1, + 625, -1, 643, -1, 615, -1, 548, 503, 600, -1, + 548, -1, 476, 621, -1, -1, 641, -1, 641, 518, + -1, -1, 542, -1, 514, 637, 515, -1, -1, 634, + 604, -1, -1, 289, 122, 603, -1, 548, 503, 600, + -1, 548, -1, 548, 516, 548, 503, 600, -1, 548, + 516, 548, -1, 632, -1, 637, 518, 632, -1, 637, + -1, 637, 518, -1, 774, -1, 899, 903, 509, 439, + -1, 387, 899, 903, 509, 439, -1, 74, 514, 809, + 515, 599, -1, 445, 514, 638, 515, 630, 599, -1, + 445, 618, 599, -1, 328, 226, 514, 638, 515, 630, + 599, -1, 328, 226, 618, 599, -1, 168, 226, 514, + 638, 515, 344, 541, 633, 642, 611, 599, -1, 628, + -1, 641, 518, 628, -1, 248, 172, -1, 248, 308, + -1, 248, 392, -1, -1, 236, 541, 622, -1, 422, + -1, 420, -1, 240, 422, -1, 240, 420, -1, 177, + 422, -1, 177, 420, -1, 448, -1, -1, 33, -1, + 59, 117, -1, 137, 647, 191, 152, 649, 650, -1, + 137, 647, 649, 650, -1, 137, 648, 191, 152, 892, + 650, -1, 137, 648, 892, 650, -1, 137, 651, 895, + 289, 902, 650, -1, 137, 651, 191, 152, 895, 289, + 902, 650, -1, 416, -1, 381, -1, 173, -1, 245, + -1, 245, 416, -1, 466, -1, 249, 466, -1, 202, + -1, 168, 416, -1, 81, -1, 97, -1, 370, -1, + 402, -1, 423, 374, 307, -1, 423, 374, 129, -1, + 423, 374, 421, -1, 423, 374, 90, -1, 439, -1, + 24, 251, -1, 146, 433, -1, 156, -1, 168, 107, + 480, -1, 334, -1, 384, -1, 902, -1, 649, 518, + 902, -1, 63, -1, 357, -1, -1, 319, -1, 367, + -1, 433, -1, 100, 644, 653, 541, 654, 40, 416, + 674, -1, 100, 644, 653, 191, 274, 152, 541, 654, + 40, 416, 674, -1, 100, 294, 352, 644, 653, 541, + 654, 40, 416, 674, -1, 100, 644, 653, 541, 654, + 40, 809, -1, 100, 644, 653, 191, 274, 152, 541, + 654, 40, 809, -1, 100, 294, 352, 644, 653, 541, + 654, 40, 809, -1, 173, -1, 245, -1, 514, 515, + -1, 514, 856, 515, -1, 556, 451, 954, 386, 569, + 741, 955, 562, -1, 98, 669, 541, 633, 667, 658, + 663, 672, 659, 588, 664, -1, 98, 514, 674, 515, + 428, 663, 672, 588, 664, -1, 98, 171, 108, 542, + 428, 542, 657, -1, -1, 514, 370, 515, -1, 514, + 107, 515, -1, 171, -1, 428, -1, 661, 124, 544, + -1, -1, 671, -1, 660, 518, 671, -1, 454, -1, + -1, 40, -1, -1, 333, -1, -1, 668, -1, 514, + 673, 515, -1, 936, -1, 589, -1, 507, -1, 514, + 660, 515, -1, 815, -1, -1, 548, 665, -1, 476, + 287, -1, -1, 668, 670, -1, -1, 55, -1, -1, + 55, -1, 287, -1, 170, -1, 123, 662, 544, -1, + 279, 662, 544, -1, 102, -1, 186, -1, 336, 662, + 544, -1, 145, 662, 544, -1, 167, 336, 637, -1, + 167, 336, 507, -1, 309, 59, 637, -1, 309, 59, + 507, -1, 167, 274, 279, 637, -1, 167, 279, 637, + -1, 141, 544, -1, 936, -1, 544, -1, 403, -1, + 404, -1, 3, 516, 542, -1, 3, -1, 666, -1, + 673, 518, 666, -1, 676, -1, 675, -1, 514, 676, + 515, -1, 514, 675, 515, -1, 514, 965, 515, -1, + 679, -1, 677, 699, -1, 677, 698, 732, 705, -1, + 677, 698, 704, 733, -1, 686, 677, -1, 686, 677, + 699, -1, 686, 677, 698, 732, 705, -1, 686, 677, + 698, 704, 733, -1, 679, -1, 675, -1, 379, 696, + 881, -1, -1, 379, 696, 881, 690, 741, 767, 721, + 730, 824, 731, 709, -1, 379, 695, 883, 690, 741, + 767, 721, 730, 824, 731, 709, -1, 171, 742, 678, + 690, 767, 721, 730, 824, 731, 709, -1, 171, 742, + 379, 695, 883, 690, 767, 721, 730, 824, 731, 709, + -1, 740, -1, 416, 761, -1, 677, 444, 693, 694, + 677, -1, 677, 444, 693, 677, -1, 677, 217, 693, + 677, -1, 677, 147, 693, 677, -1, 681, 744, 454, + 883, -1, 681, 744, 454, 883, 180, 59, 894, -1, + 681, 744, 180, 59, 894, -1, 681, 744, 289, 685, + -1, 681, 744, 289, 685, 180, 59, 894, -1, 681, + 744, 289, 685, 454, 883, -1, 681, 744, 289, 685, + 454, 883, 180, 59, 894, -1, 682, 744, 289, 883, + 219, 265, 895, 680, 894, -1, 682, 744, 289, 883, + -1, 459, -1, 460, -1, 314, -1, 316, -1, 449, + -1, 315, -1, 810, -1, 810, 198, 514, 676, 515, + -1, 747, -1, 683, -1, 684, 518, 683, -1, 684, + -1, 684, 518, -1, 476, 687, -1, 500, 687, -1, + 476, 342, 687, -1, 688, -1, 687, 518, 688, -1, + 895, 904, 40, 689, 514, 909, 515, -1, 249, -1, + 274, 249, -1, -1, 219, 691, -1, -1, 422, 692, + 541, -1, 420, 692, 541, -1, 240, 422, 692, 541, + -1, 240, 420, 692, 541, -1, 177, 422, 692, 541, + -1, 177, 420, 692, 541, -1, 448, 692, 541, -1, + 416, 541, -1, 541, -1, 416, -1, -1, 30, -1, + 132, -1, -1, 59, 265, -1, 132, -1, 132, 289, + 514, 854, 515, -1, 30, -1, -1, 192, 281, -1, + 355, 281, -1, -1, 699, -1, -1, 295, 59, 700, + -1, 295, 59, 30, 702, 703, -1, 701, -1, 700, + 518, 701, -1, 809, 454, 848, 703, -1, 809, 702, + 703, -1, 41, -1, 126, -1, -1, 499, 163, -1, + 499, 230, -1, -1, 706, 707, -1, 707, 706, -1, + 706, -1, 707, -1, 704, -1, -1, 237, 715, -1, + 237, 715, 518, 716, -1, 161, 720, 717, 719, 290, + -1, 161, 720, 719, 290, -1, 286, 716, -1, 286, + 717, 719, -1, 4, 509, -1, 9, 509, -1, 4, + 312, -1, 9, 312, -1, 9, -1, 9, 366, -1, + 454, 368, 711, -1, -1, 542, -1, -1, 710, 514, + 708, 515, 714, -1, 708, -1, 708, 514, 542, 515, + -1, 708, 514, 542, 518, 9, 515, -1, 418, 711, + -1, 712, -1, -1, 351, 514, 9, 515, -1, -1, + 809, -1, 30, -1, 809, 509, -1, 4, 312, -1, + 9, 312, -1, 809, -1, 811, -1, 505, 718, -1, + 506, 718, -1, 898, -1, 4, -1, 365, -1, 366, + -1, 163, -1, 271, -1, 180, 59, 723, -1, 180, + 59, 30, -1, -1, 724, -1, 722, 518, 724, -1, + 722, -1, 722, 518, -1, 809, -1, 725, -1, 727, + -1, 726, -1, 728, -1, 514, 515, -1, 364, 514, + 854, 515, -1, 103, 514, 854, 515, -1, 181, 388, + 514, 723, 515, -1, 181, -1, 182, -1, 185, 809, + -1, -1, 335, 809, -1, -1, 734, -1, 166, 338, + 290, -1, 732, -1, -1, 735, -1, 734, 735, -1, + 736, 737, 738, -1, 166, 451, -1, 166, 272, 226, + 451, -1, 166, 389, -1, 166, 226, 389, -1, 284, + 891, -1, -1, 278, -1, 393, 243, -1, -1, 460, + 514, 854, 515, -1, 739, 518, 514, 854, 515, -1, + 739, -1, 739, 518, -1, 171, 743, -1, -1, 744, + -1, 742, 518, 744, -1, 742, -1, 742, 518, -1, + 761, 756, 713, -1, 762, 757, 713, -1, 740, 755, + 713, -1, 231, 762, 757, -1, 675, 756, 713, -1, + 231, 675, 756, -1, 754, -1, 514, 754, 515, 755, + -1, 744, 314, 514, 883, 166, 750, 745, 515, 756, + -1, 744, 449, 746, 514, 751, 166, 753, 515, 756, + -1, 180, 59, 893, -1, -1, 199, 281, -1, 148, + 281, -1, -1, 810, 198, 514, 883, 515, -1, 810, + 198, 543, -1, -1, 812, -1, 814, -1, 514, 852, + 515, -1, 748, 198, 514, 883, 515, -1, 748, 198, + 543, -1, 749, -1, 750, 749, -1, 543, -1, 514, + 893, 515, -1, 751, 198, 514, 883, 515, -1, 752, + -1, 753, 752, -1, 514, 754, 515, -1, 744, 101, + 224, 744, -1, 744, 758, 224, 744, 760, -1, 744, + 224, 744, 760, -1, 744, 268, 758, 224, 744, -1, + 744, 268, 224, 744, -1, 744, 42, 758, 224, 744, + 760, -1, 744, 42, 224, 744, 760, -1, 744, 321, + 224, 744, -1, 744, 37, 224, 744, 760, -1, 744, + 380, 224, 744, 760, -1, 40, 543, 514, 893, 515, + -1, 40, 543, -1, 542, 514, 893, 515, -1, 542, + -1, 755, -1, -1, 755, -1, 40, 514, 768, 515, + -1, 40, 543, 514, 768, 515, -1, 542, 514, 768, + 515, -1, -1, 172, 759, -1, 234, 759, -1, 361, + 759, -1, 380, -1, 37, -1, 208, -1, 299, -1, + -1, 454, 514, 893, 515, -1, 289, 809, -1, 541, + -1, 541, 507, -1, 290, 541, -1, 290, 514, 541, + 515, -1, 818, 766, -1, 366, 171, 514, 764, 515, + 766, -1, 818, 765, -1, 763, -1, 764, 518, 763, + -1, 40, 514, 768, 515, -1, -1, 500, 296, -1, + -1, 473, 809, -1, -1, 769, -1, 768, 518, 769, + -1, 543, 774, 770, -1, 80, 902, -1, -1, 542, + 774, -1, 771, 518, 542, 774, -1, 365, -1, 409, + -1, 774, -1, -1, 777, 776, -1, 387, 777, 776, + -1, 777, 39, 512, 898, 513, -1, 387, 777, 39, + 512, 898, 513, -1, 777, 39, -1, 387, 777, 39, + -1, 775, -1, 772, 514, 771, 515, 776, -1, 246, + 514, 858, 515, 776, -1, 444, 514, 771, 515, 776, + -1, 3, 516, 3, -1, 775, 516, 3, -1, 776, + 512, 513, -1, 776, 512, 898, 513, -1, -1, 779, + -1, 781, -1, 783, -1, 787, -1, 793, -1, 794, + 808, -1, 794, 514, 898, 515, -1, 781, -1, 784, + -1, 788, -1, 793, -1, 901, 780, -1, 514, 855, + 515, -1, -1, 215, -1, 216, -1, 394, -1, 54, + -1, 339, -1, 164, 782, -1, 136, 324, -1, 115, + 780, -1, 112, 780, -1, 282, 780, -1, 57, -1, + 514, 898, 515, -1, -1, 785, -1, 786, -1, 785, + -1, 786, -1, 56, 792, 514, 854, 515, -1, 56, + 792, -1, 789, -1, 790, -1, 789, -1, 790, -1, + 791, 514, 898, 515, -1, 791, -1, 72, 792, -1, + 71, 792, -1, 461, -1, 267, 72, 792, -1, 267, + 71, 792, -1, 269, 792, -1, 463, -1, -1, 427, + 514, 898, 515, 795, -1, 427, 795, -1, 426, 514, + 898, 515, 795, -1, 426, 795, -1, 218, -1, 500, + 426, 497, -1, 478, 426, 497, -1, -1, 494, -1, + 495, -1, 262, -1, 263, -1, 109, -1, 110, -1, + 188, -1, 189, -1, 258, -1, 259, -1, 375, -1, + 376, -1, 256, -1, 257, -1, 252, -1, 253, -1, + 470, -1, 471, -1, 113, -1, 114, -1, 69, -1, + 68, -1, 255, -1, 254, -1, 796, -1, 797, -1, + 798, -1, 799, -1, 800, -1, 801, -1, 802, -1, + 803, -1, 804, -1, 805, -1, 806, -1, 807, -1, + 796, 428, 797, -1, 798, 428, 799, -1, 798, 428, + 800, -1, 798, 428, 801, -1, 799, 428, 800, -1, + 799, 428, 801, -1, 800, 428, 801, -1, -1, 811, + -1, 809, 11, 774, -1, 809, 80, 902, -1, 809, + 46, 426, 497, 809, -1, 505, 809, -1, 506, 809, + -1, 809, 505, 809, -1, 809, 506, 809, -1, 809, + 507, 809, -1, 809, 508, 809, -1, 809, 15, 809, + -1, 809, 509, 809, -1, 809, 510, 809, -1, 809, + 16, 809, -1, 809, 501, 809, -1, 809, 502, 809, + -1, 809, 503, 809, -1, 809, 19, 809, -1, 809, + 20, 809, -1, 809, 21, 809, -1, 809, 847, 809, + -1, 847, 809, -1, 809, 847, -1, 809, 36, 809, + -1, 809, 294, 809, -1, 274, 809, -1, 498, 809, + -1, 809, 176, 809, -1, 809, 236, 809, -1, 809, + 236, 809, 145, 809, -1, 809, 498, 236, 809, -1, + 809, 498, 236, 809, 145, 809, -1, 809, 193, 809, + -1, 809, 193, 809, 145, 809, -1, 809, 498, 193, + 809, -1, 809, 498, 193, 809, 145, 809, -1, 809, + 391, 428, 809, -1, 809, 391, 428, 809, 145, 809, + -1, 809, 498, 391, 428, 809, -1, 809, 498, 391, + 428, 809, 145, 809, -1, 809, 221, 279, -1, 809, + 222, -1, 809, 221, 274, 279, -1, 809, 274, 279, + -1, 809, 277, -1, 809, 17, 809, -1, 809, 18, + 809, -1, 836, 301, 836, -1, 809, 221, 435, -1, + 809, 221, 274, 435, -1, 809, 221, 159, -1, 809, + 221, 274, 159, -1, 809, 221, 446, -1, 809, 221, + 274, 446, -1, 809, 221, 132, 171, 809, -1, 809, + 221, 274, 132, 171, 809, -1, 809, 221, 284, 514, + 858, 515, -1, 809, 221, 274, 284, 514, 858, 515, + -1, 809, 53, 880, 810, 36, 809, -1, 809, 498, + 53, 880, 810, 36, 809, -1, 809, 53, 413, 810, + 36, 809, -1, 809, 498, 53, 413, 810, 36, 809, + -1, 809, 198, 868, -1, 809, 498, 198, 868, -1, + 809, 849, 844, 675, -1, 809, 849, 844, 514, 809, + 515, -1, 117, -1, 83, 514, 809, 515, -1, 507, + 886, 890, -1, 542, 516, 507, 886, 890, -1, 811, + -1, 810, 11, 774, -1, 505, 810, -1, 506, 810, + -1, 810, 505, 810, -1, 810, 506, 810, -1, 810, + 507, 810, -1, 810, 508, 810, -1, 810, 15, 810, + -1, 810, 509, 810, -1, 810, 510, 810, -1, 810, + 16, 810, -1, 810, 501, 810, -1, 810, 502, 810, + -1, 810, 503, 810, -1, 810, 19, 810, -1, 810, + 20, 810, -1, 810, 21, 810, -1, 810, 847, 810, + -1, 847, 810, -1, 810, 847, -1, 810, 221, 132, + 171, 810, -1, 810, 221, 274, 132, 171, 810, -1, + 810, 221, 284, 514, 858, 515, -1, 810, 221, 274, + 284, 514, 858, 515, -1, 812, -1, 813, 879, -1, + 874, -1, 897, -1, 675, -1, 675, 545, -1, 152, + 675, -1, 729, 514, 854, 515, -1, 514, 809, 515, + -1, 814, -1, 836, -1, 519, -1, 10, -1, 815, + -1, 246, 520, 843, 521, -1, 817, -1, 869, -1, + 512, 855, 513, -1, 820, -1, 39, 675, -1, 39, + 512, 855, 513, -1, 522, 9, -1, 523, 548, -1, + 520, 839, 521, -1, 896, 514, 515, -1, 896, 514, + 856, 698, 697, 515, -1, 896, 514, 462, 857, 698, + 697, 515, -1, 896, 514, 856, 518, 462, 857, 698, + 697, 515, -1, 896, 514, 30, 856, 698, 697, 515, + -1, 896, 514, 132, 856, 698, 697, 515, -1, 816, + 821, 822, 823, 827, -1, 819, -1, 816, -1, 819, + -1, 81, 166, 514, 809, 515, -1, 66, 514, 809, + 40, 774, 515, -1, 438, 514, 809, 40, 774, 515, + -1, 158, 514, 859, 515, -1, 302, 514, 861, 515, + -1, 320, 514, 863, 515, -1, 411, 514, 864, 515, + -1, 432, 514, 809, 40, 774, 515, -1, 434, 514, + 58, 867, 515, -1, 434, 514, 232, 867, 515, -1, + 434, 514, 429, 867, 515, -1, 434, 514, 867, 515, + -1, 280, 514, 809, 518, 809, 515, -1, 79, 514, + 854, 515, -1, 512, 809, 166, 542, 198, 809, 513, + -1, 512, 809, 166, 542, 198, 811, 191, 809, 513, + -1, 477, 180, 514, 699, 515, -1, -1, 162, 514, + 473, 809, 515, -1, 162, 514, 809, 515, -1, -1, + 155, -1, -1, 475, 825, -1, -1, 826, -1, 825, + 518, 826, -1, 542, 40, 828, -1, 300, 828, -1, + 300, 542, -1, -1, 514, 829, 830, 698, 831, 515, + -1, 542, -1, -1, 309, 59, 853, -1, -1, 337, + 832, 834, -1, 366, 832, 834, -1, 183, 832, 834, + -1, -1, 833, -1, 53, 833, 36, 833, -1, 441, + 323, -1, 441, 165, -1, 104, 365, -1, 809, 323, + -1, 809, 165, -1, 148, 104, 365, -1, 148, 180, + -1, 148, 425, -1, 148, 272, 297, -1, -1, 365, + 514, 854, 515, -1, 365, 514, 515, -1, 835, -1, + 514, 853, 518, 809, 515, -1, 543, 524, 809, -1, + 837, -1, 838, 518, 837, -1, 838, -1, 838, 518, + -1, 809, 524, 809, -1, 840, -1, 841, 518, 840, + -1, 841, -1, 841, 518, -1, 842, -1, -1, 38, + -1, 396, -1, 30, -1, 8, -1, 846, -1, 505, + -1, 506, -1, 507, -1, 508, -1, 15, -1, 509, + -1, 510, -1, 16, -1, 501, -1, 502, -1, 503, + -1, 19, -1, 20, -1, 21, -1, 8, -1, 291, + 514, 850, 515, -1, 845, -1, 291, 514, 850, 515, + -1, 845, -1, 291, 514, 850, 515, -1, 236, -1, + 498, 236, -1, 176, -1, 498, 176, -1, 193, -1, + 498, 193, -1, 845, -1, 542, 516, 850, -1, 811, + -1, 851, 518, 811, -1, 851, -1, 851, 518, -1, + 809, -1, 853, 518, 809, -1, 853, -1, 853, 518, + -1, 854, -1, -1, 857, -1, 856, 518, 857, -1, + 809, -1, 905, 13, 809, -1, 905, 14, 809, -1, + 774, -1, 858, 518, 774, -1, 860, 171, 809, -1, + -1, 3, -1, 796, -1, 797, -1, 798, -1, 799, + -1, 800, -1, 801, -1, 802, -1, 803, -1, 804, + -1, 805, -1, 806, -1, 807, -1, 544, -1, 809, + 862, 865, 866, -1, 809, 862, 865, -1, 317, 809, + -1, 810, 198, 810, -1, -1, 809, 865, 866, -1, + 809, 866, 865, -1, 809, 865, -1, 809, 866, -1, + 853, -1, -1, 171, 809, -1, 166, 809, -1, 809, + 171, 854, -1, 171, 854, -1, 854, -1, 675, -1, + 514, 854, 515, -1, 65, 873, 870, 872, 143, -1, + 871, -1, 870, 871, -1, 472, 809, 424, 809, -1, + 139, 809, -1, -1, 809, -1, -1, 542, -1, 542, + 545, -1, 512, 809, 513, -1, 512, 875, 524, 875, + 513, -1, 512, 875, 524, 875, 524, 875, 513, -1, + 512, 875, 524, 506, 524, 875, 513, -1, 809, -1, + -1, -1, 876, 546, -1, -1, 514, 515, -1, 514, + 856, 515, -1, 516, 547, 877, -1, 512, 809, 513, + -1, 512, 875, 524, 875, 513, -1, 512, 875, 524, + 875, 524, 875, 513, -1, 512, 875, 524, 506, 524, + 875, 513, -1, -1, 879, 878, -1, 45, -1, -1, + 883, -1, -1, 884, -1, 882, 518, 884, -1, 882, + -1, 882, 518, -1, 809, 40, 906, -1, 809, 3, + -1, 809, -1, 148, 514, 893, 515, -1, 148, 542, + -1, 885, -1, -1, 809, 40, 542, -1, 887, -1, + 888, 518, 887, -1, 888, -1, 888, 518, -1, 352, + 514, 889, 515, -1, 352, 887, -1, -1, 541, -1, + 891, 518, 541, -1, 895, -1, 892, 518, 895, -1, + 892, -1, 892, 518, -1, 893, -1, 514, 893, 515, + -1, 543, -1, 900, -1, 542, 545, -1, 898, -1, + 4, -1, 544, 876, -1, 6, -1, 7, -1, 896, + 544, -1, 896, 514, 856, 698, 697, 515, 544, -1, + 778, 544, -1, 794, 514, 809, 515, 808, -1, 794, + 898, 808, -1, 794, 544, 808, -1, 435, -1, 159, + -1, 279, -1, 9, -1, 3, -1, 977, -1, 982, + -1, 3, -1, 977, -1, 979, -1, 3, -1, 977, + -1, 980, -1, 542, -1, 542, 903, -1, 516, 547, + -1, 903, 516, 547, -1, 514, 893, 515, -1, -1, + 899, -1, 548, -1, 5, -1, 325, 895, 908, 40, + 909, -1, 514, 858, 515, -1, -1, 674, -1, 551, + -1, 655, -1, 656, -1, 953, -1, 965, -1, 100, + 370, 541, 911, -1, 100, 370, 191, 274, 152, 541, + 911, -1, 100, 294, 352, 370, 541, 911, -1, 911, + 912, -1, -1, 598, -1, 913, -1, 576, -1, 972, + -1, 100, 919, 202, 916, 917, 289, 541, 915, 514, + 570, 515, 918, 767, -1, 100, 919, 202, 916, 191, + 274, 152, 627, 289, 541, 915, 514, 570, 515, 918, + 767, -1, 542, -1, 454, 914, -1, -1, 89, -1, + -1, 627, -1, -1, 476, 613, -1, -1, 445, -1, + -1, 32, 416, 761, 386, 370, 895, -1, 32, 416, + 191, 152, 761, 386, 370, 895, -1, 32, 381, 541, + 386, 370, 895, -1, 32, 381, 191, 152, 541, 386, + 370, 895, -1, 32, 466, 541, 386, 370, 895, -1, + 32, 466, 191, 152, 541, 386, 370, 895, -1, 167, + 75, 922, -1, 75, 922, -1, 542, -1, -1, 84, + 289, 925, 541, 221, 924, -1, 84, 289, 82, 809, + 221, 924, -1, 544, -1, 279, -1, 416, -1, 381, + -1, 173, -1, 245, -1, 245, 416, -1, 466, -1, + 108, -1, 202, -1, 370, -1, 439, -1, 154, 108, + 544, 664, -1, 154, 108, 542, 428, 544, 664, -1, + 197, 108, 544, -1, 153, 931, -1, 153, 935, 929, + 931, -1, 153, 464, 931, -1, 153, 514, 934, 515, + 931, -1, 464, -1, -1, 936, -1, 589, -1, -1, + 920, -1, 586, -1, 529, -1, 971, -1, 921, -1, + 656, -1, 974, -1, 652, -1, 910, -1, 576, -1, + 598, -1, 572, -1, 540, -1, 953, -1, 646, -1, + 582, -1, 913, -1, 551, -1, 945, -1, 575, -1, + 907, -1, 549, -1, 674, -1, 595, -1, 655, -1, + 948, -1, 962, -1, 939, -1, 965, -1, 972, -1, + 3, -1, 977, -1, 981, -1, 932, -1, 544, -1, + 937, -1, 934, 518, 937, -1, 35, -1, 34, -1, + 435, -1, 159, -1, 289, -1, 933, -1, 938, 930, + -1, 932, -1, 935, -1, 386, 940, -1, 386, 240, + 940, -1, 386, 385, 940, -1, 386, 177, 940, -1, + 941, -1, 969, 171, 104, -1, 426, 497, 943, -1, + 370, 544, -1, 969, 428, 944, -1, 969, 503, 944, + -1, 809, -1, 544, -1, 3, -1, 794, 544, 808, + -1, 794, 514, 898, 515, 544, -1, 589, -1, 117, + -1, 240, -1, 942, -1, 944, 518, 942, -1, 239, + 946, -1, 213, 946, -1, 167, 213, 946, -1, 213, + 946, 171, 947, -1, 167, 213, 946, 171, 947, -1, + 544, -1, 542, -1, 544, -1, 542, -1, 455, 950, + 952, 929, -1, 455, 950, 952, 929, 541, 904, -1, + 455, 950, 952, 929, 957, -1, 455, 514, 951, 515, + -1, 455, 514, 951, 515, 541, 904, -1, 935, -1, + 464, -1, 170, -1, 172, -1, 3, -1, 172, -1, + -1, 949, -1, 951, 518, 949, -1, 170, -1, -1, + 556, 122, 171, 954, 956, 955, 562, -1, 436, 692, + 954, -1, 761, -1, 761, 542, -1, 761, 40, 542, + -1, 473, 809, -1, -1, 454, 743, -1, -1, 935, + 929, -1, 935, 929, 541, 904, -1, 47, 960, 544, + 961, 664, -1, 47, 191, 274, 152, 960, 544, 961, + 664, -1, 128, 548, -1, 128, 108, 548, -1, 128, + 108, 191, 152, 548, -1, 108, -1, -1, 40, 542, + -1, -1, 354, 964, -1, 354, 240, 964, -1, 354, + 385, 964, -1, 354, 177, 964, -1, 969, -1, 30, + -1, 963, -1, 426, 497, -1, 430, 223, 235, -1, + 967, 674, -1, 412, 674, -1, 412, 970, -1, 967, + 970, -1, 967, 426, 497, -1, 967, 430, 223, 235, + -1, 967, 30, 968, -1, 967, -1, 127, -1, 126, + -1, 390, -1, 966, -1, 417, -1, -1, 542, -1, + 969, 516, 542, -1, 542, -1, 970, 516, 542, -1, + 61, 816, -1, 100, 644, 466, 541, 633, 918, 40, + 674, 973, -1, 100, 644, 466, 191, 274, 152, 541, + 633, 918, 40, 674, 973, -1, 100, 294, 352, 644, + 466, 541, 633, 918, 40, 674, 973, -1, 100, 644, + 342, 466, 541, 514, 637, 515, 918, 40, 674, 973, + -1, 100, 294, 352, 644, 342, 466, 541, 514, 637, + 515, 918, 40, 674, 973, -1, 476, 74, 292, -1, + 476, 64, 74, 292, -1, 476, 240, 74, 292, -1, + -1, 100, 644, 416, 976, 40, 674, 975, -1, 100, + 644, 416, 191, 274, 152, 976, 40, 674, 975, -1, + 100, 294, 352, 644, 416, 976, 40, 674, 975, -1, + 476, 107, -1, 476, 272, 107, -1, -1, 541, 633, + 620, 612, -1, 22, -1, 23, -1, 24, -1, 25, + -1, 26, -1, 27, -1, 28, -1, 29, -1, 31, + -1, 32, -1, 33, -1, 43, -1, 44, -1, 46, + -1, 47, -1, 48, -1, 50, -1, 51, -1, 52, + -1, 59, -1, 60, -1, 61, -1, 62, -1, 63, + -1, 64, -1, 67, -1, 68, -1, 69, -1, 70, + -1, 73, -1, 75, -1, 76, -1, 77, -1, 78, + -1, 84, -1, 85, -1, 86, -1, 87, -1, 88, + -1, 90, -1, 91, -1, 92, -1, 94, -1, 95, + -1, 96, -1, 97, -1, 98, -1, 99, -1, 102, + -1, 103, -1, 104, -1, 105, -1, 106, -1, 107, + -1, 108, -1, 109, -1, 110, -1, 111, -1, 113, + -1, 114, -1, 116, -1, 118, -1, 120, -1, 121, + -1, 122, -1, 123, -1, 124, -1, 125, -1, 128, + -1, 129, -1, 130, -1, 131, -1, 134, -1, 135, + -1, 136, -1, 137, -1, 138, -1, 140, -1, 141, + -1, 142, -1, 144, -1, 145, -1, 146, -1, 148, + -1, 149, -1, 150, -1, 151, -1, 153, -1, 154, + -1, 155, -1, 156, -1, 157, -1, 160, -1, 162, + -1, 163, -1, 165, -1, 167, -1, 169, -1, 173, + -1, 174, -1, 177, -1, 179, -1, 183, -1, 184, + -1, 186, -1, 187, -1, 188, -1, 189, -1, 190, + -1, 191, -1, 192, -1, 194, -1, 195, -1, 196, + -1, 197, -1, 199, -1, 200, -1, 201, -1, 202, + -1, 203, -1, 204, -1, 205, -1, 207, -1, 210, + -1, 211, -1, 212, -1, 213, -1, 214, -1, 220, + -1, 223, -1, 225, -1, 226, -1, 227, -1, 228, + -1, 229, -1, 230, -1, 233, -1, 235, -1, 238, + -1, 239, -1, 240, -1, 241, -1, 242, -1, 243, + -1, 244, -1, 245, -1, 247, -1, 248, -1, 249, + -1, 250, -1, 251, -1, 252, -1, 253, -1, 254, + -1, 255, -1, 256, -1, 257, -1, 258, -1, 259, + -1, 260, -1, 261, -1, 262, -1, 263, -1, 264, + -1, 265, -1, 266, -1, 270, -1, 271, -1, 272, + -1, 275, -1, 276, -1, 278, -1, 281, -1, 283, + -1, 284, -1, 285, -1, 287, -1, 288, -1, 291, + -1, 292, -1, 293, -1, 296, -1, 297, -1, 300, + -1, 303, -1, 304, -1, 305, -1, 306, -1, 307, + -1, 308, -1, 309, -1, 310, -1, 311, -1, 312, + -1, 313, -1, 318, -1, 319, -1, 322, -1, 323, + -1, 325, -1, 326, -1, 327, -1, 329, -1, 330, + -1, 331, -1, 332, -1, 333, -1, 334, -1, 336, + -1, 337, -1, 338, -1, 340, -1, 341, -1, 342, + -1, 343, -1, 345, -1, 346, -1, 347, -1, 348, + -1, 349, -1, 350, -1, 351, -1, 352, -1, 353, + -1, 354, -1, 355, -1, 356, -1, 357, -1, 359, + -1, 360, -1, 362, -1, 363, -1, 364, -1, 366, + -1, 367, -1, 368, -1, 369, -1, 370, -1, 371, + -1, 372, -1, 373, -1, 374, -1, 375, -1, 376, + -1, 377, -1, 378, -1, 381, -1, 382, -1, 383, + -1, 384, -1, 385, -1, 386, -1, 388, -1, 389, + -1, 392, -1, 393, -1, 395, -1, 397, -1, 398, + -1, 399, -1, 400, -1, 401, -1, 402, -1, 403, + -1, 404, -1, 405, -1, 406, -1, 407, -1, 408, + -1, 410, -1, 414, -1, 415, -1, 417, -1, 419, + -1, 420, -1, 421, -1, 422, -1, 423, -1, 425, + -1, 430, -1, 431, -1, 433, -1, 436, -1, 437, + -1, 439, -1, 440, -1, 441, -1, 442, -1, 443, + -1, 446, -1, 447, -1, 448, -1, 450, -1, 451, + -1, 452, -1, 453, -1, 455, -1, 456, -1, 457, + -1, 458, -1, 459, -1, 463, -1, 465, -1, 466, + -1, 467, -1, 468, -1, 469, -1, 470, -1, 471, + -1, 474, -1, 477, -1, 478, -1, 479, -1, 480, + -1, 481, -1, 482, -1, 494, -1, 495, -1, 496, + -1, 497, -1, 53, -1, 54, -1, 56, -1, 57, + -1, 71, -1, 72, -1, 79, -1, 83, -1, 112, + -1, 115, -1, 152, -1, 158, -1, 164, -1, 175, + -1, 181, -1, 182, -1, 209, -1, 215, -1, 216, + -1, 218, -1, 246, -1, 267, -1, 269, -1, 273, + -1, 280, -1, 282, -1, 298, -1, 302, -1, 320, + -1, 324, -1, 339, -1, 365, -1, 387, -1, 394, + -1, 409, -1, 411, -1, 426, -1, 427, -1, 432, + -1, 434, -1, 438, -1, 460, -1, 461, -1, 483, + -1, 484, -1, 485, -1, 486, -1, 487, -1, 488, + -1, 489, -1, 490, -1, 491, -1, 492, -1, 493, + -1, 42, -1, 49, -1, 55, -1, 81, -1, 89, + -1, 101, -1, 170, -1, 172, -1, 175, -1, 176, + -1, 193, -1, 208, -1, 221, -1, 222, -1, 224, + -1, 234, -1, 236, -1, 246, -1, 268, -1, 277, + -1, 299, -1, 301, -1, 321, -1, 361, -1, 391, + -1, 409, -1, 418, -1, 464, -1, 37, -1, 42, + -1, 49, -1, 55, -1, 81, -1, 83, -1, 89, + -1, 101, -1, 170, -1, 172, -1, 176, -1, 193, + -1, 208, -1, 221, -1, 222, -1, 224, -1, 234, + -1, 236, -1, 268, -1, 277, -1, 299, -1, 301, + -1, 321, -1, 361, -1, 380, -1, 391, -1, 418, + -1, 438, -1, 464, -1, 37, -1, 42, -1, 49, + -1, 53, -1, 54, -1, 55, -1, 56, -1, 57, + -1, 72, -1, 71, -1, 79, -1, 81, -1, 83, + -1, 89, -1, 101, -1, 112, -1, 115, -1, 152, + -1, 158, -1, 164, -1, 170, -1, 172, -1, 175, + -1, 176, -1, 181, -1, 182, -1, 193, -1, 208, + -1, 209, -1, 216, -1, 218, -1, 215, -1, 221, + -1, 222, -1, 224, -1, 234, -1, 236, -1, 246, + -1, 267, -1, 268, -1, 269, -1, 273, -1, 277, + -1, 280, -1, 282, -1, 299, -1, 298, -1, 301, + -1, 302, -1, 320, -1, 321, -1, 324, -1, 339, + -1, 361, -1, 365, -1, 380, -1, 387, -1, 391, + -1, 394, -1, 409, -1, 411, -1, 418, -1, 426, + -1, 427, -1, 432, -1, 434, -1, 438, -1, 460, + -1, 461, -1, 464, -1, 483, -1, 484, -1, 485, + -1, 486, -1, 487, -1, 488, -1, 489, -1, 490, + -1, 491, -1, 492, -1, 493, -1, 37, -1, 42, + -1, 49, -1, 55, -1, 81, -1, 83, -1, 89, + -1, 101, -1, 170, -1, 172, -1, 175, -1, 176, + -1, 193, -1, 208, -1, 221, -1, 222, -1, 224, + -1, 234, -1, 236, -1, 246, -1, 268, -1, 277, + -1, 299, -1, 301, -1, 321, -1, 361, -1, 380, + -1, 391, -1, 409, -1, 418, -1, 438, -1, 464, + -1, 30, -1, 34, -1, 35, -1, 36, -1, 38, + -1, 39, -1, 40, -1, 41, -1, 45, -1, 58, + -1, 65, -1, 66, -1, 74, -1, 80, -1, 82, + -1, 93, -1, 100, -1, 117, -1, 119, -1, 126, + -1, 127, -1, 132, -1, 133, -1, 139, -1, 143, + -1, 147, -1, 159, -1, 161, -1, 166, -1, 168, + -1, 171, -1, 178, -1, 180, -1, 185, -1, 198, + -1, 206, -1, 217, -1, 219, -1, 231, -1, 232, + -1, 237, -1, 274, -1, 279, -1, 286, -1, 289, + -1, 290, -1, 294, -1, 295, -1, 314, -1, 315, + -1, 316, -1, 317, -1, 328, -1, 335, -1, 344, + -1, 358, -1, 379, -1, 390, -1, 396, -1, 412, + -1, 413, -1, 416, -1, 424, -1, 428, -1, 429, + -1, 435, -1, 444, -1, 445, -1, 449, -1, 454, + -1, 462, -1, 472, -1, 473, -1, 475, -1, 476, + -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = { 0, 500, 500, 516, 528, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, @@ -1739,103 +2576,104 @@ static const yytype_int16 yyrline[] = 214, 218, 226, 231, 232, 233, 234, 235, 241, 245, 47, 48, 52, 53, 54, 72, 73, 80, 88, 96, 104, 112, 120, 131, 132, 159, 164, 172, 188, 205, - 222, 239, 240, 259, 263, 267, 271, 275, 284, 294, - 303, 312, 322, 332, 343, 357, 374, 374, 378, 378, - 382, 382, 386, 392, 399, 403, 404, 408, 409, 423, - 430, 437, 447, 448, 451, 464, 465, 466, 470, 481, - 489, 494, 499, 504, 509, 517, 525, 530, 535, 542, - 543, 547, 548, 549, 553, 560, 561, 565, 566, 570, - 571, 572, 576, 577, 581, 582, 598, 599, 602, 611, - 622, 623, 624, 627, 628, 629, 633, 634, 635, 636, - 640, 641, 645, 647, 663, 665, 670, 673, 681, 685, - 689, 693, 697, 701, 708, 713, 720, 721, 725, 730, - 734, 738, 746, 753, 754, 759, 760, 764, 765, 770, - 772, 774, 779, 799, 800, 802, 807, 808, 812, 813, - 816, 817, 842, 843, 848, 852, 853, 857, 858, 862, - 863, 864, 865, 866, 870, 883, 890, 897, 904, 905, - 909, 910, 914, 915, 919, 920, 924, 925, 929, 930, - 934, 945, 946, 947, 948, 952, 953, 958, 959, 960, - 969, 975, 984, 985, 998, 999, 1003, 1004, 1008, 1009, - 1015, 1021, 1029, 1038, 1046, 1055, 1064, 1068, 1073, 1083, - 1096, 1097, 1100, 1101, 1102, 1105, 1113, 1123, 1124, 1127, - 1135, 1144, 1148, 1155, 1156, 1160, 1169, 1173, 1198, 1202, - 1215, 1229, 1244, 1256, 1269, 1283, 1297, 1310, 1325, 1344, - 1350, 1355, 1361, 1368, 1369, 1377, 1381, 1385, 1391, 1398, - 1403, 1404, 1405, 1406, 1407, 1408, 1412, 1413, 1425, 1426, - 1431, 1438, 1445, 1452, 1484, 1495, 1508, 1513, 1514, 1517, - 1518, 1521, 1522, 1527, 1528, 1533, 1537, 1543, 1564, 1572, - 1585, 1588, 1592, 1592, 1595, 1596, 1598, 1603, 1610, 1615, - 1621, 1626, 1632, 1636, 1643, 1650, 1660, 1661, 1665, 1667, - 1670, 1674, 1675, 1676, 1677, 1678, 1679, 1684, 1704, 1705, - 1706, 1707, 1718, 1732, 1733, 1739, 1744, 1749, 1754, 1759, - 1764, 1769, 1774, 1780, 1786, 1792, 1799, 1821, 1830, 1834, - 1842, 1846, 1854, 1866, 1887, 1891, 1897, 1901, 1914, 1922, - 1932, 1934, 1936, 1938, 1940, 1942, 1947, 1948, 1955, 1964, - 1972, 1981, 1992, 2000, 2001, 2002, 2006, 2006, 2009, 2009, - 2012, 2012, 2015, 2015, 2018, 2018, 2021, 2021, 2024, 2024, - 2027, 2027, 2030, 2030, 2033, 2033, 2036, 2036, 2039, 2039, - 2042, 2044, 2046, 2048, 2050, 2052, 2054, 2056, 2058, 2060, - 2062, 2064, 2066, 2071, 2076, 2082, 2089, 2094, 2100, 2106, - 2137, 2139, 2141, 2149, 2164, 2166, 2168, 2170, 2172, 2174, - 2176, 2178, 2180, 2182, 2184, 2186, 2188, 2190, 2192, 2194, - 2197, 2199, 2201, 2204, 2206, 2208, 2210, 2212, 2217, 2222, - 2229, 2234, 2241, 2246, 2253, 2258, 2266, 2274, 2282, 2290, - 2308, 2316, 2324, 2332, 2340, 2348, 2356, 2360, 2376, 2384, - 2392, 2400, 2408, 2416, 2424, 2428, 2432, 2436, 2440, 2448, - 2456, 2464, 2472, 2492, 2514, 2525, 2532, 2546, 2554, 2562, - 2582, 2584, 2586, 2588, 2590, 2592, 2594, 2596, 2598, 2600, - 2602, 2604, 2606, 2608, 2610, 2612, 2614, 2616, 2618, 2620, - 2622, 2624, 2628, 2632, 2636, 2650, 2651, 2655, 2669, 2670, - 2671, 2678, 2682, 2686, 2689, 2700, 2705, 2707, 2718, 2742, - 2753, 2764, 2768, 2775, 2779, 2783, 2800, 2808, 2817, 2821, - 2828, 2836, 2844, 2855, 2875, 2911, 2922, 2923, 2930, 2936, - 2938, 2940, 2944, 2953, 2958, 2965, 2980, 2987, 2991, 2995, - 2999, 3003, 3013, 3022, 3044, 3045, 3049, 3050, 3051, 3055, - 3056, 3063, 3064, 3068, 3069, 3074, 3082, 3084, 3098, 3101, - 3128, 3129, 3132, 3133, 3141, 3149, 3157, 3166, 3176, 3194, - 3240, 3249, 3258, 3267, 3276, 3288, 3289, 3290, 3291, 3292, - 3306, 3307, 3310, 3311, 3315, 3325, 3326, 3330, 3331, 3335, - 3342, 3343, 3348, 3349, 3354, 3355, 3358, 3359, 3360, 3363, - 3364, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, - 3376, 3377, 3378, 3379, 3380, 3383, 3385, 3390, 3392, 3397, - 3399, 3401, 3403, 3405, 3407, 3409, 3411, 3425, 3427, 3432, - 3436, 3443, 3448, 3454, 3458, 3465, 3470, 3477, 3482, 3490, - 3494, 3500, 3504, 3513, 3524, 3525, 3529, 3533, 3540, 3541, - 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, - 3552, 3553, 3563, 3567, 3574, 3581, 3582, 3598, 3602, 3607, - 3611, 3626, 3631, 3635, 3638, 3641, 3642, 3643, 3646, 3653, - 3663, 3677, 3678, 3682, 3693, 3694, 3697, 3698, 3701, 3705, - 3712, 3720, 3728, 3736, 3746, 3747, 3752, 3753, 3757, 3758, - 3759, 3763, 3772, 3780, 3788, 3797, 3812, 3813, 3818, 3819, - 3829, 3830, 3834, 3835, 3839, 3840, 3843, 3859, 3867, 3877, - 3878, 3881, 3882, 3885, 3889, 3890, 3894, 3895, 3898, 3899, - 3900, 3910, 3911, 3915, 3917, 3923, 3924, 3928, 3929, 3932, - 3943, 3946, 3957, 3961, 3965, 3977, 3981, 3990, 3997, 4035, - 4039, 4043, 4047, 4051, 4055, 4059, 4065, 4082, 4083, 4084, - 4087, 4088, 4089, 4092, 4093, 4094, 4097, 4098, 4101, 4103, - 4108, 4109, 4112, 4116, 4117, 7, 18, 19, 23, 24, - 25, 26, 27, 28, 7, 26, 50, 73, 80, 85, - 86, 87, 88, 8, 33, 62, 66, 67, 72, 73, - 78, 79, 83, 84, 89, 90, 7, 16, 25, 34, - 43, 52, 5, 12, 22, 23, 7, 15, 26, 27, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 7, 19, 33, 9, 16, 26, 33, 44, 45, 50, - 51, 52, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 90, 91, 92, 97, 98, 103, 107, 115, - 116, 121, 122, 123, 129, 134, 142, 143, 10, 16, - 22, 28, 38, 39, 47, 58, 70, 78, 89, 95, - 99, 103, 118, 125, 126, 127, 131, 132, 7, 15, - 22, 29, 36, 45, 46, 48, 49, 8, 22, 36, - 48, 56, 70, 71, 72, 73, 74, 87, 88, 93, - 94, 98, 99, 7, 18, 31, 35, 42, 53, 54, - 60, 61, 9, 19, 7, 16, 28, 35, 42, 51, - 52, 56, 57, 2, 7, 12, 17, 26, 33, 43, - 44, 51, 3, 10, 17, 24, 31, 38, 45, 52, - 61, 61, 63, 63, 65, 65, 67, 68, 72, 73, - 6, 8, 21, 34, 47, 65, 87, 88, 89, 90, - 11, 24, 37, 54, 55, 56, 61, 74, 74, 74, + 222, 239, 240, 259, 263, 267, 271, 275, 285, 296, + 306, 315, 326, 337, 349, 364, 382, 382, 386, 386, + 390, 390, 394, 400, 407, 411, 412, 416, 417, 431, + 438, 445, 455, 456, 459, 472, 473, 474, 478, 489, + 497, 502, 507, 512, 517, 525, 533, 538, 543, 550, + 551, 555, 556, 557, 561, 568, 569, 573, 574, 578, + 579, 580, 584, 585, 589, 590, 606, 607, 610, 619, + 630, 631, 632, 635, 636, 637, 641, 642, 643, 644, + 648, 649, 653, 655, 671, 673, 678, 681, 689, 693, + 697, 701, 705, 709, 716, 721, 728, 729, 733, 738, + 742, 746, 754, 761, 762, 767, 768, 772, 773, 778, + 780, 782, 787, 807, 808, 810, 815, 816, 820, 821, + 824, 825, 850, 851, 856, 860, 861, 865, 866, 870, + 871, 872, 873, 874, 878, 891, 898, 905, 912, 913, + 917, 918, 922, 923, 927, 928, 932, 933, 937, 938, + 942, 953, 954, 955, 956, 960, 961, 966, 967, 968, + 977, 983, 992, 993, 1006, 1007, 1011, 1012, 1016, 1017, + 1023, 1029, 1037, 1046, 1054, 1063, 1072, 1076, 1081, 1092, + 1106, 1107, 1110, 1111, 1112, 1115, 1123, 1132, 1133, 1134, + 1135, 1138, 1146, 1155, 1159, 1166, 1167, 1171, 1180, 1184, + 1209, 1213, 1226, 1240, 1255, 1267, 1280, 1294, 1308, 1321, + 1336, 1355, 1361, 1366, 1372, 1379, 1380, 1388, 1392, 1396, + 1402, 1409, 1414, 1415, 1416, 1417, 1418, 1419, 1423, 1424, + 1436, 1437, 1442, 1449, 1456, 1463, 1495, 1506, 1519, 1524, + 1525, 1528, 1529, 1532, 1533, 1538, 1539, 1544, 1548, 1554, + 1575, 1583, 1596, 1599, 1603, 1603, 1606, 1607, 1609, 1614, + 1621, 1626, 1632, 1637, 1643, 1647, 1654, 1661, 1671, 1672, + 1676, 1678, 1681, 1685, 1686, 1687, 1688, 1689, 1690, 1695, + 1715, 1716, 1717, 1718, 1729, 1743, 1744, 1750, 1755, 1760, + 1765, 1770, 1775, 1780, 1785, 1791, 1797, 1803, 1810, 1832, + 1841, 1845, 1853, 1857, 1865, 1877, 1898, 1902, 1908, 1912, + 1925, 1933, 1943, 1945, 1947, 1949, 1951, 1953, 1958, 1959, + 1966, 1975, 1983, 1992, 2003, 2011, 2012, 2013, 2017, 2017, + 2020, 2020, 2023, 2023, 2026, 2026, 2029, 2029, 2032, 2032, + 2035, 2035, 2038, 2038, 2041, 2041, 2044, 2044, 2047, 2047, + 2050, 2050, 2053, 2055, 2057, 2059, 2061, 2063, 2065, 2067, + 2069, 2071, 2073, 2075, 2077, 2082, 2087, 2093, 2100, 2105, + 2111, 2117, 2148, 2150, 2152, 2160, 2175, 2177, 2179, 2181, + 2183, 2185, 2187, 2189, 2191, 2193, 2195, 2197, 2199, 2201, + 2203, 2205, 2208, 2210, 2212, 2215, 2217, 2219, 2221, 2223, + 2228, 2233, 2240, 2245, 2252, 2257, 2264, 2269, 2277, 2285, + 2293, 2301, 2319, 2327, 2335, 2343, 2351, 2359, 2367, 2371, + 2387, 2395, 2403, 2411, 2419, 2427, 2435, 2439, 2443, 2447, + 2451, 2459, 2467, 2475, 2483, 2503, 2525, 2536, 2543, 2557, + 2565, 2573, 2593, 2595, 2597, 2599, 2601, 2603, 2605, 2607, + 2609, 2611, 2613, 2615, 2617, 2619, 2621, 2623, 2625, 2627, + 2629, 2631, 2633, 2635, 2639, 2643, 2647, 2661, 2662, 2676, + 2677, 2678, 2689, 2713, 2724, 2734, 2738, 2742, 2749, 2753, + 2760, 2764, 2781, 2785, 2787, 2791, 2794, 2805, 2810, 2817, + 2825, 2834, 2838, 2845, 2853, 2861, 2872, 2892, 2928, 2939, + 2940, 2947, 2953, 2955, 2957, 2961, 2970, 2975, 2982, 2997, + 3004, 3008, 3012, 3016, 3020, 3030, 3039, 3061, 3062, 3066, + 3067, 3068, 3072, 3073, 3080, 3081, 3085, 3086, 3091, 3099, + 3101, 3115, 3118, 3145, 3146, 3149, 3150, 3158, 3166, 3174, + 3183, 3193, 3211, 3257, 3266, 3275, 3284, 3293, 3305, 3306, + 3307, 3308, 3309, 3323, 3324, 3327, 3328, 3332, 3342, 3343, + 3347, 3348, 3352, 3359, 3360, 3365, 3366, 3371, 3372, 3375, + 3376, 3377, 3380, 3381, 3384, 3385, 3386, 3387, 3388, 3389, + 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3400, 3402, + 3407, 3409, 3414, 3416, 3418, 3420, 3422, 3424, 3426, 3428, + 3442, 3444, 3449, 3453, 3460, 3465, 3471, 3475, 3482, 3487, + 3494, 3499, 3507, 3511, 3517, 3521, 3530, 3541, 3542, 3546, + 3550, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, + 3566, 3567, 3568, 3569, 3570, 3580, 3584, 3591, 3598, 3599, + 3615, 3619, 3624, 3628, 3643, 3648, 3652, 3655, 3658, 3659, + 3660, 3663, 3670, 3680, 3694, 3695, 3699, 3710, 3711, 3714, + 3715, 3718, 3722, 3729, 3737, 3745, 3753, 3763, 3764, 3769, + 3770, 3774, 3775, 3776, 3780, 3789, 3797, 3805, 3814, 3829, + 3830, 3835, 3836, 3846, 3847, 3851, 3852, 3856, 3857, 3860, + 3876, 3884, 3894, 3895, 3898, 3899, 3902, 3906, 3907, 3911, + 3912, 3915, 3916, 3917, 3927, 3928, 3932, 3934, 3940, 3941, + 3945, 3946, 3949, 3960, 3963, 3974, 3978, 3982, 3994, 3998, + 4007, 4014, 4052, 4056, 4060, 4064, 4068, 4072, 4076, 4082, + 4099, 4100, 4101, 4104, 4105, 4106, 4109, 4110, 4111, 4114, + 4115, 4118, 4120, 4125, 4126, 4129, 4133, 4134, 7, 18, + 19, 23, 24, 25, 26, 27, 28, 7, 26, 50, + 73, 80, 85, 86, 87, 88, 8, 33, 62, 66, + 67, 72, 73, 78, 79, 83, 84, 89, 90, 7, + 16, 25, 34, 43, 52, 5, 12, 22, 23, 7, + 15, 26, 27, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 7, 19, 33, 9, 16, 26, 33, + 44, 45, 50, 51, 52, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 90, 91, 92, 97, 98, + 103, 107, 115, 116, 121, 122, 123, 129, 134, 142, + 143, 10, 16, 22, 28, 38, 39, 47, 58, 70, + 78, 89, 95, 99, 103, 118, 125, 126, 127, 131, + 132, 7, 15, 22, 29, 36, 45, 46, 48, 49, + 8, 22, 36, 48, 56, 70, 71, 72, 73, 74, + 87, 88, 93, 94, 98, 99, 7, 18, 31, 35, + 42, 53, 54, 60, 61, 9, 19, 7, 16, 28, + 35, 42, 51, 52, 56, 57, 2, 7, 12, 17, + 26, 33, 43, 44, 51, 3, 10, 17, 24, 31, + 38, 45, 52, 61, 61, 63, 63, 65, 65, 67, + 68, 72, 73, 6, 8, 21, 34, 47, 65, 87, + 88, 89, 90, 11, 24, 37, 54, 55, 56, 61, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, @@ -1867,18 +2705,18 @@ static const yytype_int16 yyrline[] = 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, + 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, @@ -1886,52 +2724,43 @@ static const yytype_int16 yyrline[] = 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80 + 80, 80, 80, 80, 80, 80, 80, 80, 80 }; #endif -/** Accessing symbol of state STATE. */ -#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) - -#if YYDEBUG || 0 -/* The user-facing name of the symbol whose (internal) number is - YYSYMBOL. No bounds checking. */ -static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; - +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "\"end of file\"", "error", "\"invalid token\"", "IDENT", "FCONST", - "SCONST", "BCONST", "XCONST", "Op", "ICONST", "PARAM", "TYPECAST", - "DOT_DOT", "COLON_EQUALS", "EQUALS_GREATER", "INTEGER_DIVISION", - "POWER_OF", "LAMBDA_ARROW", "DOUBLE_ARROW", "LESS_EQUALS", - "GREATER_EQUALS", "NOT_EQUALS", "ABORT_P", "ABSOLUTE_P", "ACCESS", - "ACTION", "ADD_P", "ADMIN", "AFTER", "AGGREGATE", "ALL", "ALSO", "ALTER", - "ALWAYS", "ANALYSE", "ANALYZE", "AND", "ANTI", "ANY", "ARRAY", "AS", - "ASC_P", "ASOF", "ASSERTION", "ASSIGNMENT", "ASYMMETRIC", "AT", "ATTACH", - "ATTRIBUTE", "AUTHORIZATION", "BACKWARD", "BEFORE", "BEGIN_P", "BETWEEN", - "BIGINT", "BINARY", "BIT", "BOOLEAN_P", "BOTH", "BY", "CACHE", "CALL_P", - "CALLED", "CASCADE", "CASCADED", "CASE", "CAST", "CATALOG_P", - "CENTURIES_P", "CENTURY_P", "CHAIN", "CHAR_P", "CHARACTER", - "CHARACTERISTICS", "CHECK_P", "CHECKPOINT", "CLASS", "CLOSE", "CLUSTER", - "COALESCE", "COLLATE", "COLLATION", "COLUMN", "COLUMNS", "COMMENT", - "COMMENTS", "COMMIT", "COMMITTED", "COMPRESSION", "CONCURRENTLY", - "CONFIGURATION", "CONFLICT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", - "CONTENT_P", "CONTINUE_P", "CONVERSION_P", "COPY", "COST", "CREATE_P", - "CROSS", "CSV", "CUBE", "CURRENT_P", "CURSOR", "CYCLE", "DATA_P", - "DATABASE", "DAY_P", "DAYS_P", "DEALLOCATE", "DEC", "DECADE_P", + "$end", "error", "$undefined", "IDENT", "FCONST", "SCONST", "BCONST", + "XCONST", "Op", "ICONST", "PARAM", "TYPECAST", "DOT_DOT", "COLON_EQUALS", + "EQUALS_GREATER", "INTEGER_DIVISION", "POWER_OF", "LAMBDA_ARROW", + "DOUBLE_ARROW", "LESS_EQUALS", "GREATER_EQUALS", "NOT_EQUALS", "ABORT_P", + "ABSOLUTE_P", "ACCESS", "ACTION", "ADD_P", "ADMIN", "AFTER", "AGGREGATE", + "ALL", "ALSO", "ALTER", "ALWAYS", "ANALYSE", "ANALYZE", "AND", "ANTI", + "ANY", "ARRAY", "AS", "ASC_P", "ASOF", "ASSERTION", "ASSIGNMENT", + "ASYMMETRIC", "AT", "ATTACH", "ATTRIBUTE", "AUTHORIZATION", "BACKWARD", + "BEFORE", "BEGIN_P", "BETWEEN", "BIGINT", "BINARY", "BIT", "BOOLEAN_P", + "BOTH", "BY", "CACHE", "CALL_P", "CALLED", "CASCADE", "CASCADED", "CASE", + "CAST", "CATALOG_P", "CENTURIES_P", "CENTURY_P", "CHAIN", "CHAR_P", + "CHARACTER", "CHARACTERISTICS", "CHECK_P", "CHECKPOINT", "CLASS", + "CLOSE", "CLUSTER", "COALESCE", "COLLATE", "COLLATION", "COLUMN", + "COLUMNS", "COMMENT", "COMMENTS", "COMMIT", "COMMITTED", "COMPRESSION", + "CONCURRENTLY", "CONFIGURATION", "CONFLICT", "CONNECTION", "CONSTRAINT", + "CONSTRAINTS", "CONTENT_P", "CONTINUE_P", "CONVERSION_P", "COPY", "COST", + "CREATE_P", "CROSS", "CSV", "CUBE", "CURRENT_P", "CURSOR", "CYCLE", + "DATA_P", "DATABASE", "DAY_P", "DAYS_P", "DEALLOCATE", "DEC", "DECADE_P", "DECADES_P", "DECIMAL_P", "DECLARE", "DEFAULT", "DEFAULTS", "DEFERRABLE", "DEFERRED", "DEFINER", "DELETE_P", "DELIMITER", "DELIMITERS", "DEPENDS", "DESC_P", "DESCRIBE", "DETACH", "DICTIONARY", "DISABLE_P", "DISCARD", @@ -1995,27 +2824,29 @@ static const char *const yytname[] = "XMLROOT", "XMLSERIALIZE", "XMLTABLE", "YEAR_P", "YEARS_P", "YES_P", "ZONE", "NOT_LA", "NULLS_LA", "WITH_LA", "'<'", "'>'", "'='", "POSTFIXOP", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'", "UMINUS", "'['", - "']'", "'('", "')'", "'.'", "';'", "','", "'#'", "'$'", "'?'", "'{'", - "'}'", "':'", "$accept", "stmtblock", "stmtmulti", "stmt", - "AlterObjectSchemaStmt", "AlterSeqStmt", "SeqOptList", "opt_with", - "NumericOnly", "SeqOptElem", "opt_by", "SignedIconst", "AlterTableStmt", - "alter_identity_column_option_list", "alter_column_default", - "alter_identity_column_option", "alter_generic_option_list", - "alter_table_cmd", "alter_using", "alter_generic_option_elem", - "alter_table_cmds", "alter_generic_options", "opt_set_data", - "AnalyzeStmt", "AttachStmt", "DetachStmt", "opt_database", - "opt_database_alias", "CallStmt", "CheckPointStmt", "opt_col_id", - "CommentOnStmt", "comment_value", "comment_on_type_any_name", - "qualified_name", "ColId", "ColIdOrString", "Sconst", "indirection", - "indirection_el", "attr_name", "ColLabel", "CopyStmt", - "copy_database_flag", "copy_from", "copy_delimiter", - "copy_generic_opt_arg_list", "opt_using", "opt_as", "opt_program", - "copy_options", "copy_generic_opt_arg", "copy_generic_opt_elem", - "opt_oids", "copy_opt_list", "opt_binary", "copy_opt_item", - "copy_generic_opt_arg_list_item", "copy_file_name", - "copy_generic_opt_list", "CreateStmt", "ConstraintAttributeSpec", - "def_arg", "OptParenthesizedSeqOptList", "generic_option_arg", - "key_action", "ColConstraint", "ColConstraintElem", + "']'", "'('", "')'", "'.'", "';'", "','", "'?'", "'{'", "'}'", "'#'", + "'$'", "':'", "$accept", "stmtblock", "stmtmulti", "stmt", + "AlterTableStmt", "alter_identity_column_option_list", + "alter_column_default", "alter_identity_column_option", + "alter_generic_option_list", "alter_table_cmd", "alter_using", + "alter_generic_option_elem", "alter_table_cmds", "alter_generic_options", + "opt_set_data", "DeallocateStmt", "qualified_name", "ColId", + "ColIdOrString", "Sconst", "indirection", "indirection_el", "attr_name", + "ColLabel", "RenameStmt", "opt_column", "InsertStmt", "insert_rest", + "insert_target", "opt_by_name_or_position", "opt_conf_expr", + "opt_with_clause", "insert_column_item", "set_clause", "opt_or_action", + "opt_on_conflict", "index_elem", "returning_clause", "override_kind", + "set_target_list", "opt_collate", "opt_class", "insert_column_list", + "set_clause_list", "set_clause_list_opt_comma", "index_params", + "set_target", "CreateTypeStmt", "opt_enum_val_list", "enum_val_list", + "PragmaStmt", "CreateSeqStmt", "OptSeqOptList", "CreateSecretStmt", + "opt_secret_name", "opt_persist", "opt_storage_specifier", "ExecuteStmt", + "execute_param_expr", "execute_param_list", "execute_param_clause", + "AlterSeqStmt", "SeqOptList", "opt_with", "NumericOnly", "SeqOptElem", + "opt_by", "SignedIconst", "DropSecretStmt", "opt_storage_drop_specifier", + "TransactionStmt", "opt_transaction", "UseStmt", "CreateStmt", + "ConstraintAttributeSpec", "def_arg", "OptParenthesizedSeqOptList", + "generic_option_arg", "key_action", "ColConstraint", "ColConstraintElem", "GeneratedColumnType", "opt_GeneratedColumnType", "GeneratedConstraintElem", "generic_option_elem", "key_update", "key_actions", "OnCommitOption", "reloptions", "opt_no_inherit", @@ -2026,33 +2857,16 @@ static const char *const yytname[] = "OptTableElementList", "columnElem", "opt_column_list", "ColQualList", "key_delete", "reloption_elem", "columnList", "columnList_opt_comma", "func_type", "ConstraintElem", "TableElementList", "key_match", - "TableLikeClause", "OptTemp", "generated_when", "CreateAsStmt", - "opt_with_data", "create_as_target", "unreserved_keyword", - "col_name_keyword", "func_name_keyword", "type_name_keyword", - "other_keyword", "type_func_name_keyword", "reserved_keyword", - "CreateFunctionStmt", "macro_alias", "param_list", "CreateSchemaStmt", - "OptSchemaEltList", "schema_stmt", "CreateSecretStmt", "opt_secret_name", - "opt_persist", "opt_storage_specifier", "CreateSeqStmt", "OptSeqOptList", - "CreateTypeStmt", "opt_enum_val_list", "enum_val_list", "DeallocateStmt", - "DeleteStmt", "relation_expr_opt_alias", "where_or_current_clause", - "using_clause", "DropStmt", "drop_type_any_name", "drop_type_name", - "any_name_list", "opt_drop_behavior", "drop_type_name_on_any_name", - "DropSecretStmt", "opt_storage_drop_specifier", "ExecuteStmt", - "execute_param_expr", "execute_param_list", "execute_param_clause", - "ExplainStmt", "opt_verbose", "explain_option_arg", "ExplainableStmt", - "NonReservedWord", "NonReservedWord_or_Sconst", "explain_option_list", - "analyze_keyword", "opt_boolean_or_string", "explain_option_elem", - "explain_option_name", "ExportStmt", "ImportStmt", "IndexStmt", - "access_method", "access_method_clause", "opt_concurrently", - "opt_index_name", "opt_reloptions", "opt_unique", "InsertStmt", - "insert_rest", "insert_target", "opt_by_name_or_position", - "opt_conf_expr", "opt_with_clause", "insert_column_item", "set_clause", - "opt_or_action", "opt_on_conflict", "index_elem", "returning_clause", - "override_kind", "set_target_list", "opt_collate", "opt_class", - "insert_column_list", "set_clause_list", "set_clause_list_opt_comma", - "index_params", "set_target", "LoadStmt", "file_name", "repo_path", - "PragmaStmt", "PrepareStmt", "prep_type_clause", "PreparableStmt", - "RenameStmt", "opt_column", "SelectStmt", "select_with_parens", + "TableLikeClause", "OptTemp", "generated_when", "DropStmt", + "drop_type_any_name", "drop_type_name", "any_name_list", + "opt_drop_behavior", "drop_type_name_on_any_name", "CreateFunctionStmt", + "macro_alias", "param_list", "UpdateStmt", "CopyStmt", + "copy_database_flag", "copy_from", "copy_delimiter", + "copy_generic_opt_arg_list", "opt_using", "opt_as", "opt_program", + "copy_options", "copy_generic_opt_arg", "copy_generic_opt_elem", + "opt_oids", "copy_opt_list", "opt_binary", "copy_opt_item", + "copy_generic_opt_arg_list_item", "copy_file_name", + "copy_generic_opt_list", "SelectStmt", "select_with_parens", "select_no_parens", "select_clause", "opt_select", "simple_select", "value_or_values", "pivot_keyword", "unpivot_keyword", "pivot_column_entry", "pivot_column_list_internal", "pivot_column_list", @@ -2091,9 +2905,10 @@ static const char *const yytname[] = "millisecond_keyword", "microsecond_keyword", "week_keyword", "decade_keyword", "century_keyword", "millennium_keyword", "opt_interval", "a_expr", "b_expr", "c_expr", "d_expr", - "indirection_expr", "struct_expr", "func_application", "func_expr", - "func_expr_windowless", "func_expr_common_subexpr", "list_comprehension", - "within_group_clause", "filter_clause", "export_clause", "window_clause", + "indirection_expr_or_a_expr", "indirection_expr", "struct_expr", + "func_application", "func_expr", "func_expr_windowless", + "func_expr_common_subexpr", "list_comprehension", "within_group_clause", + "filter_clause", "export_clause", "window_clause", "window_definition_list", "window_definition", "over_clause", "window_specification", "opt_existing_window_name", "opt_partition_clause", "opt_frame_clause", "frame_extent", @@ -2117,10416 +2932,9576 @@ static const char *const yytname[] = "name_list_opt_comma_opt_bracket", "name", "func_name", "AexprConst", "Iconst", "type_function_name", "function_name_token", "type_name_token", "any_name", "attrs", "opt_name_list", "param_name", "ColLabelOrString", - "TransactionStmt", "opt_transaction", "UpdateStmt", "UseStmt", - "VacuumStmt", "vacuum_option_elem", "opt_full", "vacuum_option_list", - "opt_freeze", "VariableResetStmt", "generic_reset", "reset_rest", - "VariableSetStmt", "set_rest", "generic_set", "var_value", "zone_value", - "var_list", "VariableShowStmt", "describe_or_desc", "show_or_describe", - "opt_tables", "var_name", "table_id", "ViewStmt", "opt_check_option", YY_NULLPTR + "PrepareStmt", "prep_type_clause", "PreparableStmt", "CreateSchemaStmt", + "OptSchemaEltList", "schema_stmt", "IndexStmt", "access_method", + "access_method_clause", "opt_concurrently", "opt_index_name", + "opt_reloptions", "opt_unique", "AlterObjectSchemaStmt", + "CheckPointStmt", "opt_col_id", "CommentOnStmt", "comment_value", + "comment_on_type_any_name", "ExportStmt", "ImportStmt", "ExplainStmt", + "opt_verbose", "explain_option_arg", "ExplainableStmt", + "NonReservedWord", "NonReservedWord_or_Sconst", "explain_option_list", + "analyze_keyword", "opt_boolean_or_string", "explain_option_elem", + "explain_option_name", "VariableSetStmt", "set_rest", "generic_set", + "var_value", "zone_value", "var_list", "LoadStmt", "file_name", + "repo_path", "VacuumStmt", "vacuum_option_elem", "opt_full", + "vacuum_option_list", "opt_freeze", "DeleteStmt", + "relation_expr_opt_alias", "where_or_current_clause", "using_clause", + "AnalyzeStmt", "AttachStmt", "DetachStmt", "opt_database", + "opt_database_alias", "VariableResetStmt", "generic_reset", "reset_rest", + "VariableShowStmt", "describe_or_desc", "show_or_describe", "opt_tables", + "var_name", "table_id", "CallStmt", "ViewStmt", "opt_check_option", + "CreateAsStmt", "opt_with_data", "create_as_target", + "unreserved_keyword", "col_name_keyword", "func_name_keyword", + "type_name_keyword", "other_keyword", "type_func_name_keyword", + "reserved_keyword", 0 }; - -static const char * -yysymbol_name (yysymbol_kind_t yysymbol) -{ - return yytname[yysymbol]; -} #endif -#define YYPACT_NINF (-3054) - -#define yypact_value_is_default(Yyn) \ - ((Yyn) == YYPACT_NINF) - -#define YYTABLE_NINF (-2041) - -#define yytable_value_is_error(Yyn) \ - ((Yyn) == YYTABLE_NINF) - -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const int yypact[] = -{ - 6730, 369, 821, -3054, -3054, 278, 369, 49852, 64687, 414, - 369, 134, 2149, 51832, -3054, -3054, 46387, 8014, 369, 54802, - 72023, 324, 355, 31638, 654, 55297, 55297, -3054, -3054, -3054, - 64687, 54802, 55792, 369, 731, 65182, -3054, 369, 34113, 52327, - 417, -3054, 54802, 40, 97, 56287, 54802, 1995, 842, 340, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, 413, -3054, -3054, -3054, -3054, 111, - -3054, -3054, -3054, -3054, -3054, 151, -3054, 128, 154, 31638, - 31638, 1561, 384, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, 33618, -3054, -3054, -3054, -3054, 56782, 54802, 57277, - 52822, 57772, -3054, 671, 950, -3054, 167, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, 178, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, 186, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, 192, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, 638, 200, -3054, -3054, - -3054, 549, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - 1395, -3054, -3054, 865, 2206, 54802, 830, 836, 689, -3054, - 58267, -3054, 696, 54802, -3054, -3054, 806, 720, 884, -3054, - -3054, 53317, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, 46882, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, 854, -3054, -3054, - 727, -3054, 107, -3054, -3054, 726, 719, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, 795, -3054, -3054, -3054, - 798, 65677, 58762, 59257, -3054, 682, 1360, 6152, 72041, 30646, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, 413, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, 55297, 64687, 55297, 757, 776, 1072, 786, 32133, - 790, 34609, 794, 825, 1154, 872, 886, 898, 906, 97, - 31142, 787, 638, -3054, 59752, 59752, -57, 197, -3054, 59752, - 60247, -3054, 868, -3054, 950, -3054, -3054, -3054, 1262, -3054, - 135, 926, -3054, 60742, 60742, 60742, 965, 1241, -3054, -3054, - -3054, 958, -3054, -3054, 1197, 20385, 20385, 66172, 66172, 950, - 66172, 997, -3054, -3054, 73, -3054, -3054, -3054, 1561, 980, - 638, -3054, -3054, 52327, -3054, -3054, 294, 1336, 20385, 54802, - 994, -3054, 1051, 994, 1054, 1056, 1061, -3054, 6730, -3054, - 54802, 1414, 1279, 52327, 749, 749, 1533, 749, 622, 628, - 3173, 3454, -3054, 947, -3054, 1076, 1201, 1097, 1416, -3054, - 980, 1472, 905, 1293, 1519, 2639, 1538, 1035, 1544, 1077, - 1552, 1639, 20385, 47377, 638, -3054, 11564, 20385, -3054, -3054, - -3054, 1305, -3054, -3054, -3054, -3054, -3054, 54802, 64687, 1196, - 1222, -3054, -3054, -3054, -3054, 93, 1464, -3054, 1711, -3054, - -3054, 1287, 61237, 61732, 62227, 62722, 66667, 1656, -3054, -3054, - 1610, -3054, -3054, -3054, 1284, -3054, -3054, -3054, 226, 67162, - 1616, 1254, 122, -3054, 1623, 228, -3054, 1629, 1495, 15185, - -3054, 1443, -3054, -3054, -3054, 97, -3054, -3054, -3054, 629, - -3054, -3054, 43244, 72041, 1376, 1292, -3054, 1636, 20385, 20385, - 1296, 3361, 59752, 60247, 20385, 54802, -3054, 20385, 25065, 1298, - 20385, 20385, 12585, 20385, 29656, 59752, 197, 1294, -3054, 586, - 54802, 1299, -3054, 1396, 1396, 731, 31638, 1597, -3054, 880, - 1593, 1520, -3054, 31638, 1520, 1479, 1306, 1598, 1520, -3054, - 299, 1600, 1396, 35104, 1307, -3054, 1396, 1529, -3054, -3054, - 55297, 20385, 15185, 69637, 1783, -3054, -3054, -3054, -3054, 1591, - 64687, 1313, -3054, -3054, -3054, -3054, -3054, -3054, 822, 1823, - 174, 1824, 20385, 174, 174, 1316, 204, 204, -3054, 1508, - 1319, -3054, 210, 1321, 1322, 1832, 1833, 175, 150, 737, - 174, 20385, -3054, 204, 1327, 1837, 1329, 1839, 183, 195, - -3054, 211, 20385, 20385, 20385, 1697, 20385, 10524, 1838, 47377, - -3054, 54802, 709, -3054, 638, 1334, 950, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, 1335, -3054, 185, 7336, -3054, -3054, - -3054, -3054, 1374, -3054, -3054, -3054, -3054, 1554, 20385, -3054, - -3054, 1338, 1597, -3054, 212, -3054, -3054, 1597, -3054, -3054, - -3054, -3054, -3054, 233, 1748, 20385, 20385, 64687, 638, -3054, - 67657, -3054, -3054, -3054, -3054, -3054, -3054, 797, -3054, 413, - 44932, 1339, 1343, 994, 54802, 54802, 1828, -3054, -3054, -3054, - -3054, 1051, 52327, 209, 1644, 1478, -3054, -3054, 1561, 1561, - 15705, 891, 339, 710, 16225, 20905, 1706, 1583, 241, 607, - 1707, -3054, 1594, 1822, 25065, 20385, 20385, 622, 628, 20385, - -3054, -3054, -3054, 1647, 54802, 50347, 745, 837, 1371, 1459, - 1375, 52, 1795, -3054, 1372, -3054, 1470, 54802, 71572, 231, - -3054, 1840, 231, 231, 247, 1851, 1484, 259, 1649, 57, - -51, 2616, -3054, 1372, 52327, 159, 569, 1372, 54802, 1490, - 571, 1372, 1812, 64687, 1292, 41096, 1398, -3054, -3054, -3054, - 163, 15185, -3054, 911, 1117, 1231, 322, 208, 1250, 1272, - 15185, 1304, 1405, 173, 1471, 1488, 1505, 1531, 1540, 1585, - 1599, 1634, 145, 1648, 1671, 1688, 1701, 1703, 1705, -3054, - 1713, 188, 1715, 218, 15185, 1729, -3054, 190, -3054, 44932, - -8, -3054, -3054, 1736, 45021, -3054, 1702, 1496, 1497, 64687, - 1451, 54802, 867, 1555, 1777, 1831, 70117, 54802, 1660, 2616, - 1661, 1423, 1902, 1670, 1222, 1672, 1435, 1678, -3054, 1756, - -3054, 68152, 47377, -3054, -3054, -3054, -3054, -3054, 1807, 1789, - 64687, 47377, 1450, -3054, -3054, 64687, -3054, 54802, 54802, -3054, - 54802, 64687, -3054, 801, 44932, 1956, 117, 72041, 48862, -3054, - -3054, -3054, -3054, 425, 985, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, 950, 47377, -3054, 3660, 55297, 43862, - 1458, 20385, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - 1460, 1805, -3054, -3054, 6524, 1467, 43902, 1469, 25065, 25065, - 638, 1527, -3054, -3054, 25065, 1475, 49357, 43775, 1461, 1476, - 44250, 16745, 20385, 16745, 16745, 44337, -3054, 1477, 44414, 59752, - 1473, 54802, 53812, -3054, -3054, -3054, 20385, 20385, 197, 54307, - 1512, -3054, 31638, -3054, 1754, 31638, -3054, -3054, 1896, -3054, - 31638, 1762, 20385, 31638, -3054, 1721, 1723, 1480, 31638, -3054, - 54802, 1498, 54802, -3054, -3054, -3054, -3054, -3054, 44932, -3054, - 1487, 811, 1500, -3054, -3054, -3054, -3054, -3054, 1557, -3054, - 1557, 1557, -3054, -3054, -3054, -3054, 1509, 1509, 1511, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, 1517, 737, -3054, 1557, -3054, 1509, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, 71572, -3054, -3054, -3054, -3054, - 643, 681, -3054, 1525, -3054, -3054, -3054, -3054, 1528, -3054, - 1501, 1985, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, 6014, 823, 1509, 5103, -3054, -3054, 20385, 20385, -3054, - -3054, 1530, 44932, 1569, -3054, -3054, 20385, 20385, -3054, -3054, - -3054, -3054, 2017, -3054, 20385, 1557, 1557, -3054, 45363, -3054, - 39561, 17265, 1619, 1620, 2017, -3054, 2017, -3054, 45363, 2037, - 2037, 37579, -3054, 1698, 44501, -3054, 1536, 1503, 7998, 1537, - -3054, -3054, 1532, -3054, 1539, 1535, 41759, 164, 638, 638, - 20385, -3054, 2017, 20385, 7141, 7141, -3054, 344, 69637, 20385, - 20385, 20385, 20385, 20385, 20385, 20385, 20385, 45892, 1628, 162, - 64687, 20385, 20385, 1545, 1058, -3054, 20385, 1781, -3054, 1553, - 20385, 1638, 235, 20385, 20385, 20385, 20385, 20385, 20385, 20385, - 20385, 20385, -3054, -3054, 27646, 353, 724, 1889, 1909, 35, - 295, 20385, 1901, 11564, -3054, 1901, -3054, -3054, -3054, -3054, - -3054, 213, -3054, -3054, 1487, 1487, -3054, 64687, -3054, 54802, - 294, 51337, 20385, -3054, -3054, 1562, 1568, 193, -3054, 1630, - -3054, -3054, 54802, 38074, 1869, -3054, 367, 1572, -3054, 43736, - 1830, 1869, 1561, -3054, -3054, 26105, 1708, 1872, 1813, -3054, - -3054, 1794, 1796, -3054, 1589, 45154, 21425, 21425, -3054, 656, - 44932, 1391, -3054, -3054, -3054, -3054, -3054, -3054, 781, -3054, - 54802, 225, 35599, -3054, 1595, 96, -3054, 4021, 1936, 1900, - 1706, 607, 1611, -3054, 1266, 1614, 68647, 54802, 1899, 1858, - 1907, -60, 69637, -3054, -3054, -3054, -3054, 54802, 64687, 63217, - 69142, 47872, 54802, 47377, -3054, -3054, -3054, -3054, 54802, 1094, - 54802, 2790, -3054, -3054, -3054, -3054, 231, -3054, -3054, -3054, - -3054, -3054, 64687, 54802, -3054, -3054, 231, 64687, 54802, 231, - -3054, 1267, 54802, 54802, 54802, 54802, 1295, 54802, 54802, 950, - -3054, -3054, -3054, 21945, 14, 14, 1841, 13105, 121, -3054, - 20385, 20385, 206, 248, 64687, 1801, -3054, -3054, 828, 1848, - 160, -3054, 1673, 54802, 54802, 54802, 54802, 64687, 54802, 1491, - -3054, -3054, -3054, -3054, -3054, 1624, -3054, 1626, 1990, 2616, - -3054, 1991, 50842, 166, 3478, 1997, 1674, 1999, 13625, 2097, - 2000, 2144, 1640, 1879, -3054, -3054, 1867, -3054, 64687, 2157, - -3054, 122, -3054, 47377, -3054, 228, -3054, 1873, 239, -3054, - 15185, 20385, -3054, -3054, -3054, -3054, -3054, -3054, 1292, 28152, - -3054, 832, -3054, -3054, 2121, 950, 2121, 780, -3054, -3054, - 2121, -3054, 2106, 2121, -3054, -3054, 69637, -3054, 8220, -3054, - 20385, 20385, -3054, 20385, 1996, -3054, 2158, 2158, 69637, 25065, - 25065, 25065, 25065, 25065, 25065, 511, 1327, 25065, 25065, 25065, - 25065, 25065, 25065, 25065, 25065, 25065, 26625, 268, -3054, -3054, - 838, 2128, 20385, 20385, 2004, 1996, 20385, -3054, 69637, 1657, - -3054, 1658, 1662, 20385, -3054, 69637, -3054, 54802, 1663, 31, - 27, -3054, 1665, 1666, -3054, 1597, -3054, 856, 935, 54802, - 3395, 5093, 5529, -3054, -3054, 20385, 2001, 1896, 31638, -3054, - 20385, 1669, -3054, -3054, 31638, 2018, -3054, -3054, -3054, 36094, - 1896, 69637, 849, -3054, 54802, 69637, 860, 20385, -3054, 15185, - 2183, 69637, 2148, 64687, 64687, 2186, 1680, 1682, 2017, 1768, - -3054, 1769, 1770, 1771, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, 69637, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, 1675, 1687, 20385, 20385, 85, -3054, 8294, 1686, - 1690, 6447, -3054, 1685, -3054, 1691, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, 1693, -3054, 1700, -3054, 1704, 1716, 1719, - 1728, 1733, 54802, -3054, 22465, -3054, 64687, -3054, -3054, 20385, - 20385, 54802, -3054, 1697, -3054, 1734, 1735, 8386, -3054, -3054, - -3054, 262, 1073, 45260, 295, 45316, 45316, 45316, 45363, -3054, - -3054, -3054, 1726, -3054, 25065, 25065, -3054, 3089, 1200, 10524, - -3054, -3054, 2047, -3054, 1065, -3054, 1717, -3054, -3054, 2724, - -3054, 39561, 7629, 20385, 180, -3054, 20385, 1545, 20385, 1802, - 45316, 45316, 45316, 246, 246, 262, 262, 262, 1073, 295, - -3054, -3054, -3054, 1730, 20385, 47377, -3054, 1737, 1738, 2098, - 1329, 20385, -3054, -3054, 31638, 1512, -8, 1512, 2017, 7141, - -3054, 1051, -3054, -3054, 1051, 44932, 54802, -3054, -3054, 2006, - 1742, 31638, 1785, 2220, 2202, 64687, -3054, -3054, 1744, 1901, - 1760, -3054, -3054, 1765, 20385, 2073, 1765, -3054, 1869, -10, - 1979, 1062, 1062, 656, 1982, -3054, -3054, 1827, -3054, -3054, - -3054, 20385, 14145, 1394, -3054, 1401, -3054, -3054, -3054, -3054, - -3054, 1755, -3054, 2031, -3054, 54802, -3054, -3054, 25065, 2216, - 20385, 36589, 2222, 2019, -3054, -3054, -3054, 1854, 1372, 20385, - 2009, -3054, 156, 1778, 2139, 357, 2091, 64687, -3054, 350, - 459, -3054, 817, 2145, 239, 2147, 239, 47377, 47377, 47377, - 879, -3054, -3054, -3054, 950, -3054, 316, 881, -3054, -3054, - -3054, -3054, 1868, 644, 2616, 1372, -3054, -3054, -3054, -3054, - -3054, -3054, -3054, 184, 690, 1372, 1874, -3054, 1877, -3054, - 1878, 704, 1372, -3054, -3054, 1639, 8960, 44932, 408, 121, - 121, 121, 15185, -3054, 2032, 2033, 1797, 44932, 44932, 153, - -3054, -3054, -3054, -3054, 1786, -3054, 170, -3054, 64687, -3054, - -3054, -3054, 1801, 1831, 54802, 2616, 1803, 2275, 1222, 1435, - 1756, -3054, 1964, 29, 1551, -3054, 64687, 54802, 54802, 54802, - 63712, -3054, -3054, -3054, 1804, 1800, -3054, 20, 2035, 2034, - 54802, 1844, 54802, 1375, 2285, 54802, -3054, 908, 17785, 64687, - -3054, 47377, 2175, 54802, 1789, -3054, -3054, -3054, -3054, 64687, - -3054, -3054, 44932, -3054, -3054, 48367, -3054, -3054, -3054, -3054, - -3054, 47377, -3054, 950, -3054, 950, 2049, 64687, 42254, 950, - 42749, 950, 1814, -3054, 44932, 40064, 44932, 2004, -3054, 155, - 2158, 527, 527, 527, 4897, 2159, 232, 1817, 527, 527, - 527, 146, 146, 155, 155, 155, 2158, 268, 868, 49357, - 1818, -3054, 44932, 44932, -3054, -3054, 1819, -3054, -3054, -3054, - -3054, 1820, 1821, -3054, -3054, -3054, -3054, -3054, -3054, 64687, - 1086, 1512, 417, 417, 417, 417, -3054, 54802, 54802, 54802, - 44932, 2278, 2154, -3054, 1896, 44932, 54802, -3054, 29157, 54802, - -3054, 2174, -3054, 2263, -3054, 54802, 910, -3054, -3054, -3054, - 919, 1834, 1682, 69637, 953, 954, -3054, 2017, 147, 1843, - 1510, 1113, 582, 1402, -3054, -3054, -3054, 1845, 44636, 20385, - -3054, 2204, -3054, -3054, -3054, 20385, 20385, -3054, 39561, -3054, - -3054, -3054, -3054, 372, 372, 1846, 10524, 44858, -3054, 2150, - 40103, 44932, -3054, 1698, -3054, -3054, 7141, 20385, 2351, 3644, - 20385, 1850, 20385, 2184, -3054, -3054, 1849, -3054, -3054, 69637, - 20385, 1860, 4152, 25065, 25065, 4537, -3054, 4675, 20385, 10524, - -3054, 41178, 1852, 1859, 1841, 18305, -3054, 2078, 1861, -3054, - 2001, 121, 2001, 1866, -3054, -3054, -3054, -3054, 5103, -3054, - 20385, 2026, 64687, 371, 1974, 995, -3054, 638, 38074, 1785, - 20385, 244, -3054, -3054, 1880, -3054, 1765, -3054, -3054, -3054, - 2101, -3054, -3054, -3054, 54802, -3054, 1884, -3054, 35599, 2213, - 11044, -3054, 35599, 54802, 54802, 40142, 2248, -3054, 64687, 64687, - 64687, -3054, 64687, 1883, 1887, 850, 1890, 391, -3054, 3681, - 850, 2228, 579, 1375, 259, 2963, 431, -3054, -3054, -3054, - 1966, 54802, -3054, 64687, -3054, -3054, -3054, -3054, -3054, 47872, - -3054, -3054, 39065, 47377, -3054, 47377, 54802, 54802, 54802, 54802, - 54802, 54802, 54802, 54802, 54802, 54802, 1292, 20385, -3054, 20385, - 1893, 1897, 1898, 1841, -3054, -3054, -3054, 237, -3054, 1904, - -3054, -3054, -3054, -51, -3054, 170, 1903, -3054, 50842, 2206, - 1674, 2375, 1910, 1831, 703, 64192, -3054, 1913, 1911, 1008, - 2616, 1916, 2376, -3054, 166, 50842, -3054, -3054, -3054, 2332, - -3054, 682, 220, -3054, 1222, -3054, 2206, 1435, -3054, 2206, - 44932, 1756, 1009, 64687, 1977, -3054, 239, 1013, -3054, -3054, - -3054, -3054, -3054, 64687, 1914, -3054, 1914, -3054, -3054, 1914, - -3054, -3054, -3054, -3054, 25065, 2264, 1924, 69637, -3054, -3054, - 54802, -3054, -3054, -3054, 1014, 1925, 2001, 54802, 54802, 54802, - 54802, -3054, -3054, -3054, 18825, 20385, 1967, -3054, 1930, 12084, - 2241, -3054, 28658, -3054, 214, 1931, 36094, 64687, -3054, -3054, - -3054, -3054, 2017, -3054, -3054, 64687, -3054, 1934, -3054, 1938, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, 20385, - 44932, -3054, 44932, -3054, -3054, -3054, -3054, -3054, 7702, -3054, - 1935, 1939, 64687, 20385, -3054, -3054, -3054, 392, 20385, 20385, - 3089, -3054, 45403, 20385, 69637, 1015, 3089, 354, 20385, 3898, - 4474, 20385, 20385, 5451, 40189, -3054, 22985, 14665, -3054, 1941, - 20385, 40228, 38569, -3054, 31638, 2154, 1948, 2154, 950, 1949, - 44932, 20385, -3054, -3054, -3054, -3054, 1989, 381, 33123, 2176, - -3054, 1963, 64687, -3054, 2026, 44932, -3054, -3054, 39561, -3054, - -3054, -3054, -3054, -3054, 2408, 82, 1953, 1955, -3054, 1328, - -3054, -3054, 64687, 1957, -3054, 1960, 850, -3054, 64687, 2002, - -3054, 258, 2272, 104, -3054, 20385, -3054, 2360, 2439, 3681, - 1968, 64687, 54802, 25065, -3054, 297, 202, -3054, 2255, 54802, - 2002, 2396, -3054, -3054, -3054, 391, -3054, 2295, 2208, -3054, - 231, -3054, 20385, 391, 2210, 238, 64687, -3054, -3054, 2709, - -3054, 69637, 239, 239, -3054, 1500, 1978, 1983, 1987, 1988, - 1994, 1998, 2011, 2015, 2021, 2022, -3054, 2023, 2030, 2038, - 2042, 2044, 2052, 2057, 2061, 1517, 2068, -3054, 2070, 1880, - 2071, 2074, 2077, 2083, 2084, 70597, 2085, 2086, 2087, 2088, - 1525, 2089, 425, 985, -3054, -3054, -3054, -3054, 2092, -3054, - -3054, -3054, 1254, 2003, -3054, -3054, -3054, 2079, -3054, 2090, - -3054, -3054, -3054, -3054, -3054, -3054, 1992, 2076, -3054, -3054, - -3054, 121, 2020, 2050, 64687, 1292, 169, 64687, 2094, 1844, - 2458, 19345, 47377, 764, 2238, 2099, -3054, 950, 1674, -3054, - 50842, 3843, 490, 2034, -3054, 277, 1844, -3054, 2406, 1674, - 2039, 2476, -3054, 2100, -3054, 2245, 64687, 2102, -3054, -3054, - 48367, 1914, 5145, 25065, 69637, 1021, 1037, -3054, 2508, 2240, - 2154, -3054, -3054, -3054, -3054, -3054, 2104, 16, 2115, 10004, - 2093, -3054, -3054, -3054, -3054, -3054, -3054, 44932, 44932, 64687, - 2280, -3054, -3054, 2112, 2105, 37084, 2572, 2117, -3054, 15185, - -3054, 2435, -3054, 30151, -3054, 1682, 2122, 1682, 69637, 1682, - -3054, -3054, 44932, 20385, -3054, -3054, 41217, 2443, 3089, 3089, - 45403, 1060, -3054, 3089, 20385, 20385, 3089, 3089, 20385, -3054, - 9482, 503, -3054, 1066, -3054, 40578, -3054, 71077, -3054, -3054, - 1967, 950, 1967, -3054, -3054, 2118, -3054, -3054, -3054, 2178, - -3054, -3054, 1107, 2547, 2026, 20385, -3054, -3054, 2124, 35599, - -3054, -3054, -3054, -3054, 35599, 850, -3054, 2296, 2002, 2127, - -3054, -3054, -3054, -3054, -3054, -3054, 40664, -3054, 66, 20385, - -3054, 1235, 4897, -3054, -3054, -3054, -3054, 2002, 1222, -3054, - 54802, 2603, 2494, -3054, -3054, 44932, -3054, -3054, 2017, 2017, - -3054, -3054, 2263, -3054, -3054, 2132, -3054, -3054, 1254, -63, - 39065, 54802, 54802, -3054, -3054, 2135, -3054, -3054, -3054, -3054, - -3054, -51, 2534, 1123, 166, -3054, 2206, 2206, 44932, 1148, - 54802, 2507, 50842, -3054, 2620, 2146, 54802, 1844, 1071, 1071, - -3054, 2297, -3054, 2298, -3054, -3054, 2622, 315, -3054, 19865, - 47377, 54802, -3054, -3054, 32628, -3054, 5145, 1152, -3054, -3054, - 2152, 2155, -3054, 1967, 20385, 2160, 20385, -3054, 23505, 2628, - 2162, -3054, 20385, 2218, 27145, -3054, 20385, -3054, 54802, 59752, - 14, 2163, 59752, -3054, -3054, -3054, -3054, -3054, 20385, -3054, - 3089, 3089, 3089, 20385, -3054, 20385, -3054, -3054, -3054, 2364, - 2280, -3054, 2280, 20385, 2206, 638, 1892, 64687, 15, -3054, - 44932, -3054, -3054, -3054, 54802, -3054, 47377, -3054, 850, -9, - 2164, 20385, 40703, 2402, -3054, -3054, 2436, -3054, 2493, -3054, - 2231, 530, 2247, -3054, -3054, -3054, -3054, 1292, 950, 1674, - 2034, 2039, -3054, -3054, 2179, 54802, 2206, 166, 682, -3054, - -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, -3054, - -3054, -3054, 2206, 2614, 2397, 2618, 2206, 44932, 1157, 1977, - 20385, 83, -3054, 1158, 2615, -3054, -3054, 2685, 2280, 2181, - 23505, 2182, -3054, 2189, 64687, 44932, 2330, -3054, -3054, 2194, - -3054, -3054, 121, 20385, -3054, 41267, 2191, 2200, 2655, 1841, - 2218, 2218, -3054, 381, -3054, -3054, 2623, 32628, 2584, 1222, - 850, 2215, 1168, -3054, -3054, -3054, -3054, -3054, 2616, -3054, - 40742, 2449, 223, 2437, 2164, 20385, -3054, 2286, -3054, -3054, - -3054, 2684, -3054, -3054, 50842, 2214, 2039, 2034, 1844, 2039, - 2438, -3054, 2441, -3054, -3054, 2217, 40828, 64687, 64687, 1674, - 32628, 64687, 2212, 2218, -3054, 2219, -3054, -3054, -3054, 53812, - -3054, 2221, 2223, -3054, -3054, -3054, 20385, 187, -3054, -3054, - 2270, 54802, 1177, 43, 2436, 39065, -3054, 47377, 2451, -9, - 2533, -3054, -3054, -3054, -3054, 149, 2452, -3054, 2454, -3054, - 44932, -3054, 2206, 50842, -3054, -3054, -3054, -3054, -3054, -3054, - 32628, 2615, -3054, 367, -3054, 1512, -3054, 367, -3054, -3054, - -3054, -3054, 950, -3054, 1461, 24025, 24025, 24025, 2229, 2206, - -3054, 1512, -3054, 2361, 2437, -3054, -3054, -3054, -3054, -3054, - 165, 165, 2624, -3054, 2299, -3054, 2039, 1179, 64687, 1765, - -3054, 1765, 25585, 2386, 222, 43814, 2604, -3054, 2604, 2604, - -3054, -3054, -3054, 38074, -3054, -3054, 2728, -3054, 217, -3054, - -3054, -3054, 1674, 367, -3054, -3054, 2721, -3054, -3054, -3054, - -3054, -3054, 196, -3054, -3054, -3054, 1512, 850, -3054, -3054, - -3054, 1512, 1765, 24545, 2393, -3054, 2462, -3054, -3054, -3054, - -3054, -3054, -3054, -3054 -}; - -/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_int16 yydefact[] = -{ - 155, 263, 0, 1380, 1379, 1450, 263, 0, 1315, 0, - 263, 485, 401, 0, 1471, 1470, 0, 207, 263, 0, - 155, 0, 0, 0, 0, 0, 0, 548, 551, 549, - 0, 0, 0, 263, 588, 0, 1472, 263, 0, 0, - 580, 550, 0, 1428, 0, 0, 0, 0, 0, 2, - 4, 5, 6, 7, 8, 9, 23, 10, 11, 12, - 13, 19, 14, 15, 16, 17, 18, 20, 21, 22, - 25, 24, 26, 27, 1338, 28, 29, 30, 31, 0, - 32, 33, 34, 35, 36, 524, 510, 593, 523, 0, - 0, 154, 692, 531, 37, 38, 39, 40, 41, 42, - 43, 1473, 1469, 44, 262, 261, 255, 0, 0, 0, - 0, 0, 1449, 0, 0, 256, 111, 1497, 1498, 1499, - 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1871, 1508, - 1509, 1510, 1511, 1512, 1872, 1513, 1514, 1515, 1817, 1818, - 1873, 1819, 1820, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1525, 1821, 1822, 1526, 1527, 1528, 1529, 1530, - 1823, 1874, 1824, 1531, 1532, 1533, 1534, 1535, 1875, 1536, - 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1876, 1545, - 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1825, - 1555, 1556, 1826, 1557, 1558, 1559, 1560, 1561, 1562, 1563, - 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, - 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, - 1827, 1584, 1585, 1586, 1587, 1588, 1828, 1589, 1590, 1591, - 1829, 1592, 1593, 1594, 1877, 1878, 1595, 1596, 1830, 1880, - 1597, 1598, 1831, 1832, 1599, 1600, 1601, 1602, 1603, 1604, - 1605, 1606, 1607, 1881, 1608, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 1616, 1617, 1618, 1619, 1882, 1833, 1620, 1621, - 1622, 1623, 1624, 1834, 1835, 1836, 1625, 1883, 1884, 1626, - 1885, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1886, 1634, - 1887, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1837, - 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, - 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, - 1838, 1889, 1839, 1663, 1664, 1665, 1840, 1666, 1667, 1890, - 1668, 1841, 1669, 1842, 1670, 1671, 1672, 1673, 1674, 1675, - 1676, 1677, 1678, 1679, 1843, 1891, 1680, 1892, 1844, 1681, - 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, - 1692, 1693, 1845, 1893, 1694, 1695, 1846, 1696, 1697, 1698, - 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1847, - 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, - 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1894, - 1727, 1728, 1729, 1848, 1730, 1731, 1732, 1733, 1734, 1735, - 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, - 1746, 1747, 1748, 1849, 1749, 1750, 1895, 1751, 1752, 1850, - 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, - 1763, 1764, 1765, 1851, 1766, 1852, 1767, 1768, 1769, 1897, - 1770, 1771, 1772, 1773, 1774, 1775, 1853, 1854, 1776, 1777, - 1855, 1778, 1856, 1779, 1780, 1857, 1781, 1782, 1783, 1784, - 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, - 1795, 1796, 1797, 1858, 1859, 1798, 1898, 1799, 1800, 1801, - 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, - 1812, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, - 1869, 1870, 1813, 1814, 1815, 1816, 0, 112, 113, 1262, - 1480, 0, 1240, 111, 1830, 1837, 1851, 1313, 1314, 112, - 0, 258, 484, 0, 0, 0, 0, 0, 0, 209, - 0, 395, 394, 0, 1304, 400, 0, 0, 0, 115, - 107, 1696, 114, 1239, 105, 121, 2041, 2042, 2043, 2044, - 1928, 2045, 2046, 2047, 2048, 1929, 2049, 1930, 1931, 1932, - 1933, 1934, 1935, 2050, 2051, 2052, 1937, 1936, 2053, 1938, - 2054, 1939, 2055, 1940, 1941, 2056, 2057, 1942, 1551, 1943, - 1944, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, - 1945, 1946, 2067, 2068, 1947, 2069, 2070, 1948, 2071, 1949, - 1950, 1951, 2072, 2073, 1952, 1953, 2074, 1954, 2075, 2076, - 1955, 1956, 1959, 1957, 2077, 1958, 2078, 1960, 1961, 1962, - 2079, 2080, 1963, 1964, 2081, 1965, 1966, 1967, 1968, 1969, - 2082, 1970, 2083, 1971, 1972, 2084, 2085, 2086, 2087, 2088, - 1974, 1973, 1975, 1976, 2089, 2090, 2091, 2092, 1977, 1978, - 1979, 2093, 2094, 1980, 2095, 2096, 1981, 1982, 2097, 1983, - 1984, 2098, 1985, 1986, 2099, 1987, 1988, 2100, 2101, 2102, - 1989, 2103, 1990, 1991, 2104, 2105, 1992, 1993, 2106, 1994, - 2107, 2108, 2109, 2110, 1995, 1996, 2111, 1997, 2112, 2113, - 2114, 2115, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 1446, 123, 122, 124, 0, 419, 420, - 0, 430, 0, 412, 417, 413, 0, 439, 432, 440, - 421, 411, 433, 422, 410, 208, 0, 441, 427, 415, - 0, 0, 0, 0, 259, 220, 401, 0, 155, 0, - 1342, 1343, 1344, 1345, 1346, 1347, 1352, 1348, 1349, 1350, - 1351, 1353, 1354, 1355, 1356, 1357, 1333, 1338, 1358, 1359, - 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, - 1370, 1371, 0, 1315, 0, 0, 1823, 1874, 1828, 0, - 1841, 0, 1844, 1845, 1730, 1852, 1855, 1856, 1857, 1858, - 0, 760, 114, 109, 744, 0, 526, 696, 706, 744, - 749, 1026, 772, 1027, 0, 116, 1414, 1413, 1409, 1408, - 194, 1277, 1458, 1597, 1637, 1747, 1853, 1776, 1476, 1459, - 1453, 1457, 260, 587, 585, 0, 1211, 1597, 1637, 1734, - 1747, 1853, 1388, 1392, 0, 257, 1478, 1463, 0, 1464, - 114, 532, 579, 0, 264, 1427, 0, 1432, 0, 1710, - 559, 562, 1271, 560, 524, 0, 0, 1, 155, 1337, - 1442, 0, 161, 0, 583, 583, 0, 583, 0, 516, - 0, 0, 524, 519, 523, 693, 1475, 1853, 1776, 1462, - 1465, 1606, 0, 0, 1606, 0, 1606, 0, 1606, 0, - 0, 1452, 1195, 0, 1241, 117, 0, 0, 1326, 1322, - 1327, 1323, 1328, 1321, 1320, 1329, 1325, 0, 0, 0, - 366, 399, 398, 397, 396, 401, 1606, 1288, 0, 448, - 449, 0, 0, 0, 0, 0, 205, 1299, 108, 106, - 1606, 1447, 428, 429, 0, 418, 414, 416, 0, 0, - 1606, 1266, 438, 434, 1606, 438, 1233, 1606, 0, 0, - 212, 0, 394, 1335, 1372, 1995, 1373, 1374, 1386, 0, - 1387, 1377, 1341, 155, 0, 483, 1312, 1410, 0, 0, - 0, 1147, 744, 749, 0, 0, 762, 0, 1166, 0, - 1172, 0, 0, 0, 744, 531, 0, 706, 761, 110, - 0, 742, 743, 634, 634, 588, 0, 569, 754, 0, - 0, 757, 755, 0, 757, 0, 0, 0, 757, 753, - 714, 0, 634, 0, 742, 745, 634, 0, 764, 1332, - 0, 0, 0, 0, 0, 1456, 1454, 1455, 1460, 0, - 0, 0, 1243, 1245, 1246, 1115, 1256, 1012, 0, 1818, - 1819, 1820, 1187, 1821, 1822, 1824, 1825, 1826, 966, 1571, - 1827, 1254, 1829, 1831, 1832, 1834, 1835, 1836, 1837, 1838, - 1839, 0, 1255, 1842, 1675, 1847, 1848, 1850, 1853, 1854, - 1253, 1859, 0, 0, 0, 1222, 1138, 0, 0, 0, - 1011, 0, 1188, 1196, 1007, 0, 0, 808, 809, 830, - 831, 810, 836, 837, 839, 811, 0, 1218, 900, 995, - 1206, 1014, 1045, 1016, 1025, 1003, 1082, 996, 0, 1006, - 998, 1214, 569, 1212, 0, 999, 1242, 569, 1210, 1391, - 1389, 1395, 1390, 0, 0, 0, 0, 0, 110, 1434, - 1435, 1426, 1424, 1425, 1423, 1422, 1429, 0, 1431, 1338, - 1133, 1135, 0, 561, 0, 0, 0, 513, 512, 514, - 3, 1271, 0, 0, 0, 0, 581, 582, 0, 0, - 0, 0, 0, 0, 0, 0, 677, 608, 609, 611, - 674, 678, 686, 0, 0, 0, 0, 0, 520, 0, - 1474, 1468, 1466, 0, 0, 0, 139, 139, 0, 0, - 0, 0, 0, 99, 48, 92, 0, 0, 0, 0, - 234, 247, 0, 0, 0, 0, 0, 244, 0, 0, - 227, 221, 223, 50, 0, 139, 0, 46, 0, 0, - 0, 52, 1450, 0, 483, 1194, 0, 119, 120, 118, - 111, 0, 2009, 1871, 1872, 1873, 1874, 1824, 1875, 1876, - 0, 1877, 1878, 1830, 1880, 1881, 1882, 1883, 1884, 1885, - 1886, 1887, 1837, 1889, 1890, 1891, 1892, 1893, 1894, 2035, - 1895, 1851, 1897, 1857, 0, 1898, 1018, 112, 1259, 1141, - 593, 1139, 1272, 0, 0, 1324, 0, 0, 0, 0, - 481, 0, 0, 0, 0, 1284, 0, 0, 1606, 201, - 1606, 366, 0, 1606, 366, 1606, 0, 1606, 206, 210, - 1298, 1301, 0, 431, 426, 424, 423, 425, 1606, 253, - 0, 0, 1267, 436, 437, 0, 405, 0, 0, 407, - 0, 0, 217, 0, 215, 0, 401, 155, 0, 228, - 1382, 1383, 1381, 0, 0, 1340, 231, 1376, 1385, 1375, - 1384, 1339, 248, 1334, 0, 0, 1330, 471, 0, 0, - 0, 0, 1148, 877, 876, 860, 861, 874, 875, 862, - 863, 870, 871, 879, 878, 868, 869, 864, 865, 858, - 859, 866, 867, 872, 873, 856, 857, 1161, 1149, 1150, - 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, - 0, 0, 705, 703, 0, 0, 0, 0, 0, 0, - 1188, 0, 970, 996, 0, 0, 0, 1133, 1171, 0, - 0, 0, 0, 0, 0, 1133, 1177, 0, 0, 728, - 740, 0, 627, 633, 704, 702, 0, 1211, 697, 0, - 774, 754, 0, 753, 0, 0, 756, 750, 0, 751, - 0, 0, 0, 0, 752, 0, 0, 0, 0, 700, - 0, 740, 0, 701, 771, 1416, 1415, 1411, 1398, 1406, - 195, 0, 1263, 1899, 1900, 1901, 818, 1902, 847, 825, - 847, 847, 1903, 1904, 1905, 1906, 814, 814, 827, 1907, - 1908, 1909, 1910, 1911, 815, 816, 852, 1912, 1913, 1914, - 1915, 1916, 0, 0, 1917, 847, 1918, 814, 1919, 1920, - 1921, 819, 1922, 782, 1923, 0, 1924, 817, 783, 1925, - 855, 855, 1926, 0, 842, 1927, 1264, 1265, 0, 1144, - 792, 800, 801, 802, 803, 828, 829, 804, 834, 835, - 805, 899, 0, 814, 155, 1461, 1477, 0, 1138, 1004, - 846, 833, 1186, 0, 841, 840, 0, 1138, 823, 822, - 821, 1009, 0, 820, 1095, 847, 847, 845, 925, 824, - 0, 0, 0, 0, 0, 851, 0, 849, 926, 904, - 905, 0, 1221, 1230, 1133, 1137, 0, 1007, 1133, 0, - 1000, 1001, 0, 1085, 1087, 0, 0, 1189, 1244, 1008, - 0, 1249, 0, 0, 899, 899, 1217, 1115, 0, 1105, - 1108, 0, 0, 1112, 1113, 1114, 0, 0, 0, 1209, - 0, 1123, 1125, 0, 0, 941, 1121, 0, 944, 0, - 0, 0, 0, 1109, 1110, 1111, 1101, 1102, 1103, 1104, - 1106, 1107, 1119, 1100, 922, 0, 997, 0, 1048, 0, - 921, 1215, 695, 0, 1247, 695, 1400, 1404, 1405, 1403, - 1399, 0, 1394, 1393, 1396, 1397, 1479, 0, 1436, 1420, - 0, 1417, 1136, 690, 563, 1235, 0, 567, 1443, 1441, - 160, 159, 0, 0, 536, 535, 602, 594, 596, 602, - 0, 534, 0, 650, 651, 0, 0, 0, 0, 683, - 681, 1243, 1256, 638, 612, 637, 0, 0, 616, 0, - 642, 900, 676, 518, 606, 607, 610, 517, 0, 679, - 0, 689, 0, 555, 557, 540, 554, 552, 537, 545, - 677, 611, 0, 1467, 0, 0, 0, 0, 0, 1606, - 0, 0, 785, 83, 64, 318, 138, 0, 0, 0, - 0, 0, 0, 0, 91, 88, 89, 90, 0, 0, - 0, 0, 1263, 232, 233, 246, 0, 237, 238, 235, - 239, 240, 0, 0, 225, 226, 0, 0, 0, 0, - 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1451, 1444, 1190, 1195, 593, 593, 593, 0, 591, 592, - 0, 0, 0, 0, 0, 470, 364, 374, 0, 0, - 0, 1288, 0, 0, 0, 0, 0, 205, 0, 401, - 1289, 1287, 1291, 1290, 1292, 1577, 189, 0, 0, 200, - 197, 0, 363, 337, 0, 0, 1303, 0, 0, 0, - 0, 0, 0, 1606, 353, 1300, 0, 1448, 0, 0, - 251, 438, 1268, 0, 435, 438, 1234, 0, 438, 219, - 0, 0, 1336, 1378, 229, 249, 230, 250, 483, 478, - 508, 0, 486, 491, 468, 0, 468, 0, 488, 492, - 468, 487, 0, 468, 482, 1412, 0, 1041, 0, 1031, - 0, 0, 763, 0, 0, 1032, 972, 973, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 990, 989, 1033, 767, - 0, 770, 0, 0, 1169, 1170, 0, 1034, 0, 0, - 1176, 0, 0, 0, 1039, 0, 707, 0, 0, 0, - 622, 626, 629, 0, 632, 569, 525, 1597, 1637, 0, - 580, 580, 580, 578, 568, 0, 654, 0, 0, 729, - 0, 0, 731, 733, 0, 0, 736, 713, 712, 0, - 0, 0, 0, 775, 0, 1239, 0, 0, 196, 0, - 0, 0, 800, 0, 0, 0, 790, 786, 0, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 806, 1276, 0, 812, 1281, 1282, 1279, 1275, 1278, - 1280, 1283, 0, 0, 0, 0, 1185, 1181, 0, 0, - 0, 0, 1090, 1092, 1094, 0, 844, 843, 1099, 1105, - 1108, 1112, 1113, 1114, 1109, 1110, 1111, 1101, 1102, 1103, - 1104, 1106, 1107, 0, 1127, 0, 1081, 0, 0, 0, - 0, 0, 0, 1220, 0, 968, 0, 1002, 1013, 0, - 0, 1088, 1017, 1222, 1197, 0, 0, 0, 1252, 1251, - 901, 910, 913, 945, 946, 917, 918, 919, 923, 1274, - 1273, 1216, 0, 1208, 0, 0, 902, 927, 932, 0, - 1178, 962, 0, 950, 0, 940, 0, 948, 952, 928, - 943, 0, 924, 0, 1209, 1124, 1126, 0, 1122, 0, - 914, 915, 916, 906, 907, 908, 909, 911, 912, 920, - 1098, 1096, 1097, 0, 1195, 0, 1207, 0, 0, 1050, - 0, 0, 947, 1213, 0, 774, 593, 774, 0, 899, - 1437, 1271, 1430, 1419, 1271, 1134, 1236, 1270, 565, 0, - 0, 0, 1439, 146, 150, 0, 1196, 180, 182, 695, - 0, 600, 601, 605, 0, 0, 605, 584, 533, 1848, - 1730, 0, 0, 0, 0, 643, 684, 0, 675, 640, - 641, 0, 639, 1243, 644, 1242, 645, 648, 649, 617, - 1231, 685, 687, 0, 680, 0, 1237, 539, 558, 0, - 0, 0, 0, 0, 522, 521, 691, 0, 49, 0, - 1606, 66, 0, 0, 0, 0, 0, 0, 268, 0, - 368, 268, 104, 1606, 438, 1606, 438, 1501, 1572, 1748, - 0, 62, 342, 95, 0, 132, 371, 0, 327, 85, - 100, 125, 0, 0, 222, 51, 236, 241, 128, 245, - 242, 1308, 243, 139, 0, 47, 0, 126, 0, 1306, - 0, 0, 53, 130, 1310, 1452, 0, 1194, 0, 591, - 591, 591, 0, 1140, 0, 0, 0, 1142, 1143, 940, - 1317, 1318, 1319, 1316, 456, 469, 0, 365, 0, 480, - 459, 460, 470, 1286, 0, 201, 366, 0, 366, 0, - 210, 1288, 0, 0, 191, 187, 0, 0, 0, 0, - 364, 356, 354, 387, 0, 361, 355, 0, 0, 313, - 0, 1495, 0, 0, 0, 0, 450, 0, 0, 205, - 211, 0, 0, 0, 253, 254, 404, 1269, 406, 0, - 408, 218, 216, 1331, 475, 0, 474, 479, 473, 477, - 472, 0, 467, 0, 501, 0, 0, 0, 0, 0, - 0, 0, 0, 1028, 1146, 0, 1164, 1163, 971, 978, - 981, 985, 986, 987, 1165, 0, 0, 0, 982, 983, - 984, 974, 975, 976, 977, 979, 980, 988, 772, 0, - 0, 766, 1174, 1173, 1167, 1168, 0, 1036, 1037, 1038, - 1175, 0, 0, 741, 620, 618, 621, 623, 619, 0, - 0, 774, 580, 580, 580, 580, 577, 0, 0, 0, - 773, 0, 671, 735, 0, 759, 0, 732, 0, 0, - 723, 0, 730, 779, 746, 0, 0, 748, 1407, 796, - 0, 791, 787, 0, 0, 0, 797, 0, 0, 0, - 0, 0, 0, 0, 1145, 586, 1005, 0, 0, 0, - 1182, 0, 967, 813, 826, 0, 1093, 1015, 0, 1116, - 1080, 854, 853, 855, 855, 0, 0, 0, 1229, 0, - 1134, 1084, 1086, 1230, 1010, 838, 899, 0, 0, 0, - 0, 0, 0, 0, 951, 942, 0, 949, 953, 0, - 0, 0, 936, 0, 0, 934, 963, 930, 0, 0, - 964, 1194, 0, 1198, 0, 0, 1049, 1058, 698, 694, - 654, 591, 654, 0, 1401, 1421, 1418, 566, 155, 1440, - 0, 169, 0, 0, 0, 0, 172, 186, 183, 1439, - 0, 0, 595, 597, 0, 1117, 605, 599, 647, 646, - 0, 615, 682, 613, 0, 688, 0, 556, 0, 542, - 0, 716, 0, 0, 0, 0, 0, 317, 0, 0, - 0, 268, 0, 376, 0, 383, 0, 0, 368, 349, - 84, 0, 0, 0, 58, 103, 76, 68, 54, 82, - 0, 0, 87, 0, 80, 97, 98, 96, 101, 0, - 278, 303, 0, 0, 314, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 483, 1195, 1191, 1195, - 0, 0, 0, 593, 589, 590, 1019, 0, 455, 507, - 504, 505, 503, 227, 375, 0, 0, 199, 363, 0, - 1303, 0, 0, 1285, 401, 0, 192, 0, 190, 0, - 201, 366, 0, 341, 337, 362, 335, 334, 336, 0, - 1496, 220, 0, 1490, 366, 1302, 0, 0, 451, 0, - 445, 210, 0, 0, 1297, 252, 438, 0, 463, 502, - 509, 489, 494, 0, 500, 496, 495, 490, 498, 497, - 493, 1029, 1040, 1162, 0, 0, 0, 0, 765, 768, - 0, 1035, 1030, 739, 0, 0, 654, 0, 0, 0, - 0, 571, 570, 576, 0, 0, 1052, 734, 0, 0, - 0, 721, 711, 717, 0, 0, 0, 0, 777, 776, - 747, 800, 0, 780, 800, 0, 800, 0, 798, 0, - 807, 892, 893, 894, 895, 896, 897, 898, 832, 0, - 1184, 1180, 1089, 1091, 1128, 850, 848, 1219, 1133, 1224, - 1226, 0, 0, 0, 1083, 969, 1250, 903, 0, 0, - 933, 1179, 954, 0, 0, 0, 929, 1116, 0, 0, - 0, 0, 0, 938, 0, 1202, 1195, 0, 1201, 0, - 0, 0, 0, 1024, 699, 671, 0, 671, 0, 0, - 1438, 0, 1433, 147, 148, 149, 0, 0, 0, 164, - 141, 0, 0, 181, 169, 157, 603, 604, 0, 598, - 614, 1232, 1238, 541, 0, 1007, 0, 0, 538, 0, - 133, 268, 0, 0, 65, 0, 385, 329, 377, 360, - 344, 0, 0, 0, 269, 0, 402, 0, 0, 350, - 0, 0, 0, 0, 330, 0, 0, 289, 0, 0, - 360, 0, 367, 285, 286, 0, 57, 77, 0, 73, - 0, 102, 0, 0, 0, 0, 0, 60, 72, 0, - 55, 0, 438, 438, 63, 1263, 1899, 1900, 1901, 1902, - 1903, 1904, 1905, 1906, 1907, 1908, 2019, 1909, 1910, 1911, - 1912, 1913, 1914, 1915, 1916, 2028, 1917, 275, 1918, 1675, - 1919, 1920, 1921, 1922, 1923, 0, 1924, 783, 1925, 1926, - 2107, 1927, 1101, 1102, 273, 274, 370, 270, 1264, 271, - 378, 272, 0, 373, 328, 129, 1309, 0, 127, 0, - 1307, 136, 134, 131, 1311, 1445, 0, 0, 1022, 1023, - 1020, 591, 0, 0, 0, 483, 462, 0, 0, 1495, - 0, 0, 0, 0, 1606, 0, 188, 0, 1303, 198, - 363, 0, 393, 313, 388, 0, 1495, 1493, 0, 1303, - 1489, 0, 442, 0, 202, 0, 0, 0, 409, 476, - 0, 499, 991, 0, 0, 0, 0, 630, 0, 636, - 671, 575, 574, 573, 572, 653, 1546, 1831, 1729, 0, - 657, 652, 655, 660, 662, 661, 663, 659, 670, 0, - 673, 758, 1129, 1131, 0, 0, 0, 0, 722, 0, - 724, 0, 726, 0, 778, 794, 0, 795, 0, 793, - 788, 799, 1183, 1227, 1228, 1223, 0, 900, 960, 958, - 955, 0, 956, 937, 0, 0, 935, 931, 0, 965, - 0, 0, 1199, 0, 1044, 0, 1047, 1061, 1057, 1056, - 1052, 1019, 1052, 1402, 564, 168, 145, 171, 170, 0, - 1196, 178, 0, 0, 169, 0, 173, 452, 0, 0, - 553, 715, 546, 547, 0, 381, 67, 0, 360, 0, - 268, 346, 345, 348, 343, 347, 0, 403, 0, 0, - 287, 0, 294, 332, 333, 331, 288, 360, 366, 290, - 0, 0, 0, 69, 59, 56, 61, 70, 0, 0, - 71, 74, 779, 86, 79, 1263, 2028, 2037, 0, 0, - 0, 0, 0, 1193, 1192, 0, 458, 457, 506, 454, - 465, 227, 0, 0, 337, 1492, 0, 0, 447, 0, - 0, 0, 363, 193, 0, 0, 0, 1495, 0, 0, - 265, 0, 310, 0, 213, 1494, 0, 0, 1481, 0, - 0, 0, 1295, 1296, 0, 464, 992, 0, 993, 769, - 0, 0, 628, 1052, 0, 0, 0, 664, 658, 0, - 1051, 1053, 0, 625, 1132, 718, 0, 720, 0, 744, - 593, 0, 744, 727, 789, 781, 1225, 1042, 0, 957, - 961, 959, 939, 1195, 1203, 1195, 1200, 1046, 1060, 1063, - 673, 1248, 673, 0, 0, 156, 0, 0, 153, 140, - 158, 1118, 543, 544, 0, 268, 0, 359, 382, 299, - 277, 0, 0, 0, 284, 291, 392, 293, 0, 78, - 94, 0, 0, 372, 137, 135, 1021, 483, 0, 1303, - 313, 1489, 444, 204, 0, 0, 0, 337, 220, 1491, - 326, 319, 320, 321, 322, 323, 324, 325, 340, 339, - 311, 312, 0, 0, 0, 0, 0, 446, 0, 1297, - 0, 175, 184, 0, 175, 994, 631, 0, 673, 0, - 0, 0, 656, 0, 0, 672, 0, 529, 1130, 0, - 710, 708, 591, 0, 709, 0, 0, 0, 0, 593, - 625, 625, 142, 0, 143, 179, 0, 0, 0, 366, - 384, 358, 0, 351, 297, 296, 298, 302, 0, 300, - 0, 316, 0, 309, 277, 0, 81, 0, 379, 453, - 461, 0, 267, 1483, 363, 0, 1489, 313, 1495, 1489, - 0, 1486, 0, 443, 203, 0, 0, 0, 177, 1303, - 0, 177, 0, 625, 666, 0, 665, 1055, 1054, 627, - 719, 0, 0, 1043, 1205, 1204, 0, 1067, 528, 527, - 0, 0, 0, 0, 392, 0, 338, 0, 0, 299, - 0, 292, 389, 390, 391, 0, 305, 295, 306, 75, - 93, 380, 0, 363, 1484, 266, 214, 1482, 1487, 1488, - 0, 175, 174, 602, 176, 774, 185, 602, 635, 530, - 667, 624, 0, 725, 1062, 0, 0, 0, 0, 0, - 152, 774, 163, 0, 309, 357, 352, 276, 301, 315, - 0, 0, 0, 307, 0, 308, 1489, 0, 177, 605, - 1293, 605, 1817, 1547, 1783, 0, 1079, 1068, 1079, 1079, - 1059, 144, 151, 0, 268, 281, 0, 280, 0, 369, - 304, 1485, 1303, 602, 165, 166, 0, 1072, 1071, 1070, - 1074, 1073, 0, 1066, 1064, 1065, 774, 386, 279, 283, - 282, 774, 605, 0, 0, 1076, 0, 1077, 162, 1294, - 167, 1069, 1075, 1078 -}; - -/* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = { - -3054, -3054, -3054, 1895, 76, 91, -888, -1189, -927, -1197, - -3054, -111, 94, -3054, -3054, 179, -3054, 1019, -3054, 182, - -794, 546, -3054, 1111, -3054, -3054, 1558, 519, 95, 100, - 2012, -3054, 982, -3054, 1463, 2517, 3539, 1174, -513, -878, - -1251, 18, 17, -3054, -3054, -3054, -3054, -3054, -811, 494, - -1194, -3054, 441, -3054, -3054, -3054, -3054, -193, 168, -2233, - 1, -2149, -2891, -556, -3054, -662, -3054, -311, -3054, -607, - -3054, -864, -613, -648, -2808, -1129, -3054, 1613, -360, -3054, - 595, -3054, -2526, -3054, -3054, 584, -3054, -1158, -3054, -2184, - 158, -589, -2493, -2529, -2153, -906, 236, -595, 219, -2093, - -1186, -3054, 611, -3054, -579, -3054, -881, -1998, 102, -2749, - -1650, -7, -3054, -3054, -3054, -703, -3054, -2495, 108, 1534, - -2100, 110, -1615, -3054, -3054, -1672, 41, -2080, 2, -2087, - 120, -3054, -3054, 123, 33, -578, 288, -3054, 125, -3054, - -3054, 1513, -902, -3054, -3054, 500, 129, 976, -3054, -2545, - -3054, -597, -3054, -626, -615, -3054, -3054, 42, -895, 1499, - -3054, -3054, -3054, 8, -3054, -460, -3054, -3054, -2559, -3054, - 38, -3054, -3054, -3054, -3054, -3054, -395, 305, -3054, -3054, - -536, -2556, -488, -3054, -2974, -2614, -3054, -3054, -636, -2922, - -2067, 130, 78, 1514, 132, 133, -3054, 320, 136, -1136, - 36, 2773, -19, -36, -3054, -32, -3054, -3054, -3054, 651, - -3054, -3054, 22, 53, 1714, -3054, -1010, -3054, -1591, 533, - -3054, 1862, 1865, -2204, -868, -77, -3054, 691, -1654, -2088, - -623, 1140, 1695, 1709, 467, -2190, -3054, -511, -3054, 253, - -3054, -3054, 698, 1185, -1547, -1542, -3054, -2084, -3054, -429, - -316, -3054, -3054, -3054, -3054, -3054, -2483, -2348, -604, 1153, - -3054, 1712, -3054, -3054, -3054, -3054, 7, -1509, 2862, 736, - -84, -3054, -3054, -3054, -3054, 171, -3054, 925, -138, -3054, - 2103, -663, -790, 1915, 140, 251, -1667, 30, 2108, 512, - -3054, -3054, 516, -2045, -1405, 470, -226, 923, -3054, -3054, - -1223, -3054, -1876, -1161, -3054, -3054, -677, 1233, -3054, -3054, - -3054, 1739, 2075, -3054, -3054, 2125, 2141, -3054, -872, 2276, - -752, -1015, 1928, -925, 1932, -929, -931, -954, 1933, 1940, - 1942, 1943, 1944, 1945, -1525, 4806, 325, 4112, -2202, -3054, - 1043, 25, -3054, -1387, 37, -3054, -3054, -3054, -3054, -2280, - -3054, -399, -3054, -397, -3054, -3054, -3054, -1655, -3053, -1678, - -3054, 4206, 858, -3054, -3054, 462, -3054, -3054, -3054, -3054, - -1545, -3054, 5585, 765, -3054, -1982, -3054, -3054, -969, -840, - -1109, -991, -1181, -1913, -3054, -3054, -3054, -3054, -3054, -3054, - -1481, -1750, -211, 824, -3054, -3054, 913, -3054, -3054, -3054, - -1708, -2105, -3054, -3054, -3054, 840, 1515, 148, -823, -1597, - -3054, 882, -2345, -3054, -3054, 463, -3054, -593, -1106, -2410, - 327, -3, -3054, -861, -2489, -3054, -3054, -728, -2617, -1086, - -896, -3054, 137, 1229, 39, -3054, 141, 1278, -3054, -3054, - -3054, 143, -3054, 403, 144, 444, -3054, 973, -3054, 667, - 23, -3054, -3054, -3054, 49, 2849, 11, -2351 + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, + 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, + 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, + 755, 60, 62, 61, 756, 43, 45, 42, 47, 37, + 94, 757, 91, 93, 40, 41, 46, 59, 44, 63, + 123, 125, 35, 36, 58 }; +# endif -/* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint16 yyr1[] = { - 0, 48, 49, 50, 750, 751, 1829, 1776, 2924, 1222, - 1766, 1346, 752, 2586, 2587, 2588, 2230, 1203, 3356, 2231, - 1204, 1205, 2590, 54, 55, 56, 114, 1234, 753, 754, - 527, 59, 2280, 917, 801, 1092, 803, 1093, 1599, 905, - 1237, 1238, 755, 2628, 2292, 3151, 2677, 3152, 2353, 2286, - 1356, 2347, 1870, 1810, 1357, 535, 1884, 2678, 2633, 1871, - 756, 2575, 2926, 3349, 2601, 3489, 2862, 2863, 3346, 3347, - 2578, 2233, 3416, 3417, 2660, 1757, 3411, 2311, 3288, 2237, - 2218, 2864, 2319, 3247, 2972, 2234, 2844, 2312, 3342, 1845, - 2313, 3343, 3100, 2314, 1807, 1833, 2579, 3418, 2238, 1808, - 2574, 2927, 1745, 2315, 3353, 2316, 546, 2848, 757, 2663, - 1302, 529, 518, 519, 1527, 715, 1278, 716, 758, 935, - 1839, 759, 1295, 1821, 65, 1309, 547, 1842, 760, 1830, - 761, 2647, 2648, 762, 763, 1139, 2531, 2152, 764, 741, - 742, 952, 1326, 743, 71, 1850, 765, 1332, 1333, 960, - 73, 870, 1348, 766, 1349, 1350, 969, 74, 2679, 971, - 972, 75, 76, 768, 3183, 2987, 1311, 1846, 2324, 548, - 769, 2809, 2154, 2534, 3338, 79, 3081, 2157, 1164, 3084, - 3302, 2802, 3079, 2535, 3378, 3433, 3082, 2158, 2159, 3303, - 2160, 770, 818, 1467, 771, 772, 1034, 2008, 773, 1748, - 774, 1094, 86, 87, 1007, 88, 3094, 89, 90, 1723, - 1724, 1725, 848, 860, 861, 2150, 1440, 1954, 853, 1168, - 1692, 835, 836, 2276, 878, 1799, 1687, 1688, 2163, 2542, - 1716, 1717, 1177, 1178, 1942, 3317, 1943, 1944, 1433, 1434, - 3192, 1704, 1708, 1709, 2184, 2174, 1695, 2422, 3010, 3011, - 3012, 3013, 3014, 3015, 3016, 1095, 2716, 3203, 1712, 1713, - 1180, 1181, 1182, 1721, 2194, 92, 93, 2135, 2518, 2519, - 807, 3027, 1457, 1726, 2720, 2721, 2722, 3031, 3032, 3033, - 808, 1002, 1003, 1026, 1021, 1447, 1962, 809, 810, 1919, - 1920, 2391, 1028, 1956, 1972, 1973, 2728, 2444, 1528, 2219, - 1529, 1530, 1987, 1531, 1096, 1532, 1558, 1097, 1563, 1534, - 1098, 1099, 1100, 1537, 1101, 1102, 1103, 1104, 1551, 1105, - 1106, 1575, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 1150, 1727, 1108, 1109, 1110, - 1111, 1112, 1113, 812, 1114, 1115, 1648, 2129, 2517, 3020, - 3200, 3201, 2793, 3069, 3229, 3329, 3448, 3476, 3477, 3503, - 1116, 1117, 1593, 1594, 1595, 2022, 2023, 2024, 2025, 2123, - 1642, 1643, 1118, 2931, 1645, 2045, 3023, 3024, 1151, 1426, - 1586, 1280, 1281, 1542, 1400, 1401, 1407, 1894, 1415, 1419, - 1924, 1925, 1427, 2091, 1119, 2016, 2017, 2461, 1553, 1120, - 1236, 1598, 2788, 2126, 1646, 2085, 1127, 1121, 1128, 1123, - 1582, 1583, 2478, 2760, 2761, 2055, 2191, 1675, 2196, 2197, - 956, 1124, 1125, 1126, 1282, 522, 1543, 3434, 1322, 1156, - 1283, 2081, 775, 106, 776, 96, 777, 1146, 857, 1147, - 1149, 778, 829, 830, 779, 842, 843, 1469, 1662, 1470, - 866, 101, 102, 1191, 831, 849, 781, 3178 + 0, 525, 526, 527, 527, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 528, 529, 529, 529, 529, + 529, 529, 529, 529, 530, 530, 531, 531, 532, 532, + 532, 532, 533, 533, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 535, 535, 536, 536, 536, 536, 537, + 537, 538, 539, 539, 539, 540, 540, 540, 540, 541, + 541, 542, 542, 542, 543, 543, 544, 545, 545, 546, + 547, 548, 548, 548, 548, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 550, 550, + 551, 552, 552, 552, 552, 552, 553, 553, 554, 554, + 554, 555, 555, 555, 556, 556, 557, 558, 558, 559, + 559, 559, 560, 560, 560, 561, 561, 561, 562, 562, + 563, 563, 564, 564, 565, 565, 566, 566, 567, 567, + 568, 568, 569, 569, 570, 570, 571, 572, 572, 572, + 573, 573, 574, 574, 575, 575, 575, 576, 576, 576, + 577, 577, 578, 578, 578, 579, 579, 580, 580, 580, + 581, 581, 582, 582, 582, 583, 583, 584, 584, 585, + 585, 586, 586, 587, 587, 588, 588, 588, 589, 589, + 589, 589, 590, 590, 590, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 590, 591, 591, 592, 592, + 592, 593, 593, 594, 594, 595, 595, 595, 595, 595, + 595, 596, 596, 596, 597, 598, 598, 598, 599, 599, + 600, 600, 600, 600, 600, 600, 601, 601, 602, 603, + 603, 603, 603, 603, 604, 604, 604, 604, 605, 605, + 605, 605, 605, 605, 605, 605, 606, 606, 607, 607, + 608, 608, 608, 609, 610, 611, 611, 611, 611, 611, + 612, 612, 612, 612, 613, 614, 614, 615, 615, 616, + 616, 616, 616, 616, 616, 616, 616, 617, 617, 618, + 619, 619, 619, 619, 620, 620, 620, 620, 621, 622, + 622, 622, 623, 624, 624, 624, 624, 624, 624, 625, + 625, 626, 626, 627, 628, 628, 628, 629, 629, 630, + 630, 631, 631, 631, 632, 633, 633, 634, 634, 635, + 636, 636, 636, 636, 637, 637, 638, 638, 639, 639, + 639, 640, 640, 640, 640, 640, 640, 641, 641, 642, + 642, 642, 642, 643, 644, 644, 644, 644, 644, 644, + 644, 644, 645, 645, 646, 646, 646, 646, 646, 646, + 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, + 647, 647, 647, 647, 647, 647, 647, 647, 648, 648, + 648, 648, 648, 648, 649, 649, 650, 650, 650, 651, + 651, 651, 652, 652, 652, 652, 652, 652, 653, 653, + 654, 654, 655, 656, 656, 656, 657, 657, 657, 658, + 658, 659, 659, 660, 660, 661, 661, 662, 662, 663, + 663, 664, 664, 665, 665, 665, 665, 665, 665, 666, + 667, 667, 668, 668, 669, 669, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 671, 672, 672, 672, 672, 672, 673, 673, + 674, 674, 675, 675, 675, 676, 676, 676, 676, 676, + 676, 676, 676, 677, 677, 678, 678, 679, 679, 679, + 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, + 679, 679, 679, 679, 679, 679, 680, 680, 681, 681, + 682, 682, 683, 683, 683, 684, 684, 685, 685, 686, + 686, 686, 687, 687, 688, 689, 689, 689, 690, 690, + 691, 691, 691, 691, 691, 691, 691, 691, 691, 692, + 692, 693, 693, 693, 694, 695, 695, 696, 696, 697, + 697, 697, 698, 698, 699, 699, 700, 700, 701, 701, + 702, 702, 702, 703, 703, 703, 704, 704, 704, 704, + 705, 705, 706, 706, 706, 706, 707, 707, 708, 708, + 708, 708, 708, 708, 709, 709, 710, 710, 711, 711, + 711, 711, 712, 713, 713, 714, 714, 715, 715, 715, + 715, 715, 716, 717, 717, 717, 718, 718, 719, 719, + 720, 720, 721, 721, 721, 722, 722, 723, 723, 724, + 724, 724, 724, 724, 725, 726, 727, 728, 729, 729, + 730, 730, 731, 731, 732, 732, 733, 733, 734, 734, + 735, 736, 736, 736, 736, 737, 737, 738, 738, 738, + 739, 739, 740, 740, 741, 741, 742, 742, 743, 743, + 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, + 745, 745, 746, 746, 746, 747, 747, 748, 748, 748, + 748, 749, 749, 750, 750, 751, 751, 752, 753, 753, + 754, 754, 754, 754, 754, 754, 754, 754, 754, 754, + 754, 755, 755, 755, 755, 756, 756, 757, 757, 757, + 757, 757, 758, 758, 758, 758, 758, 758, 759, 759, + 760, 760, 761, 761, 761, 761, 762, 762, 763, 764, + 764, 765, 765, 766, 766, 767, 767, 768, 768, 769, + 770, 770, 771, 771, 772, 772, 773, 773, 774, 774, + 774, 774, 774, 774, 774, 774, 774, 774, 775, 775, + 776, 776, 776, 777, 777, 777, 777, 777, 777, 777, + 778, 778, 778, 778, 779, 780, 780, 781, 781, 781, + 781, 781, 781, 781, 781, 781, 781, 781, 782, 782, + 783, 783, 784, 784, 785, 786, 787, 787, 788, 788, + 789, 790, 791, 791, 791, 791, 791, 791, 792, 792, + 793, 793, 793, 793, 794, 795, 795, 795, 796, 796, + 797, 797, 798, 798, 799, 799, 800, 800, 801, 801, + 802, 802, 803, 803, 804, 804, 805, 805, 806, 806, + 807, 807, 808, 808, 808, 808, 808, 808, 808, 808, + 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, + 808, 808, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, + 809, 809, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 811, 811, 812, + 812, 812, 812, 812, 812, 813, 813, 813, 814, 814, + 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, + 815, 816, 816, 816, 816, 816, 816, 817, 817, 818, + 818, 819, 819, 819, 819, 819, 819, 819, 819, 819, + 819, 819, 819, 819, 819, 820, 820, 821, 821, 822, + 822, 822, 823, 823, 824, 824, 825, 825, 826, 827, + 827, 827, 828, 829, 829, 830, 830, 831, 831, 831, + 831, 832, 832, 833, 833, 833, 833, 833, 834, 834, + 834, 834, 834, 835, 835, 836, 836, 837, 838, 838, + 839, 839, 840, 841, 841, 842, 842, 843, 843, 844, + 844, 844, 845, 845, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 847, 847, + 848, 848, 849, 849, 849, 849, 849, 849, 849, 849, + 850, 850, 851, 851, 852, 852, 853, 853, 854, 854, + 855, 855, 856, 856, 857, 857, 857, 858, 858, 859, + 859, 860, 860, 860, 860, 860, 860, 860, 860, 860, + 860, 860, 860, 860, 860, 861, 861, 862, 863, 863, + 864, 864, 864, 864, 864, 864, 865, 866, 867, 867, + 867, 868, 868, 869, 870, 870, 871, 872, 872, 873, + 873, 874, 874, 546, 546, 546, 546, 875, 875, 876, + 876, 877, 877, 877, 878, 878, 878, 878, 878, 879, + 879, 880, 880, 881, 881, 882, 882, 883, 883, 884, + 884, 884, 885, 885, 886, 886, 887, 888, 888, 889, + 889, 890, 890, 890, 891, 891, 892, 892, 893, 893, + 894, 894, 895, 896, 896, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 898, + 899, 899, 899, 900, 900, 900, 901, 901, 901, 902, + 902, 903, 903, 904, 904, 905, 906, 906, 907, 908, + 908, 909, 909, 909, 909, 909, 909, 910, 910, 910, + 911, 911, 912, 912, 912, 912, 913, 913, 914, 915, + 915, 916, 916, 917, 917, 918, 918, 919, 919, 920, + 920, 920, 920, 920, 920, 921, 921, 922, 922, 923, + 923, 924, 924, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 926, 926, 927, 928, 928, 928, 928, + 929, 929, 930, 930, 930, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 932, 932, 932, 933, 933, + 934, 934, 935, 935, 936, 936, 936, 936, 937, 938, + 938, 939, 939, 939, 939, 940, 940, 940, 940, 941, + 941, 942, 943, 943, 943, 943, 943, 943, 943, 944, + 944, 945, 945, 945, 945, 945, 946, 946, 947, 947, + 948, 948, 948, 948, 948, 949, 949, 949, 949, 949, + 950, 950, 951, 951, 952, 952, 953, 953, 954, 954, + 954, 955, 955, 956, 956, 957, 957, 958, 958, 959, + 959, 959, 960, 960, 961, 961, 962, 962, 962, 962, + 963, 963, 964, 964, 964, 965, 965, 965, 965, 965, + 965, 965, 965, 966, 966, 967, 967, 968, 968, 969, + 969, 970, 970, 971, 972, 972, 972, 972, 972, 973, + 973, 973, 973, 974, 974, 974, 975, 975, 975, 976, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, + 978, 978, 978, 978, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + 981, 981, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, + 983, 983, 983, 983, 983, 983, 983, 983, 983 }; -/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = { - 517, 61, 66, 904, 521, 880, 881, 1221, 77, 714, - 879, 103, 1122, 953, 1290, 1187, 517, 60, 1152, 1022, - 521, 1418, 91, 100, 1780, 2044, 1239, 1393, 865, 1921, - 805, 1779, 520, 69, 713, 2166, 84, 1744, 78, 95, - 1791, 1471, 91, 780, 1292, 1345, 967, 1763, 811, 1676, - 1392, 2537, 1391, 1329, 2133, 883, 1389, 1976, 740, 884, - 813, 1750, 767, 1335, 1577, 2620, 2621, 2622, 2440, 851, - 1852, 1754, 2580, 1826, 847, 1678, 51, 1351, 2547, 2068, - 2069, 2960, 517, 517, 844, 2268, 521, 521, 2536, 1784, - 2520, 52, 2522, 1796, 53, 57, 805, 805, 2672, 863, - 58, 1223, 62, 1227, 819, 1231, 2442, 2929, 63, 2958, - 64, 1352, 1652, 2932, 811, 811, 2976, 1655, 1589, 2501, - 67, 1239, 963, 68, 2573, 70, 813, 813, 2973, 72, - 80, 2759, 81, 82, 968, 2634, 83, 94, 889, 1360, - 897, 97, 1004, 98, 99, 2300, 2137, 1025, 2823, 955, - -1888, -511, 2828, -1319, -515, -1888, 1046, 1898, -2028, -2028, - 2186, 1899, 1900, 3377, 2297, 3170, 1898, 2189, -1260, -1241, - 973, 1900, -1260, 2629, 2394, 815, -1257, -1257, -1879, -847, - -852, 1554, 1555, -1879, -852, 1323, -2019, -2019, -855, 532, - 815, -1888, 1402, -1896, 1046, -1261, 2293, -1896, 1567, 2641, - -855, -2037, -2037, -1258, -1258, -1261, 1659, 2083, 2637, -814, - 3155, 815, 855, 2649, 944, -827, -842, 815, 815, 815, - 2642, -2014, -2014, 3104, 2459, 2083, 2723, 3174, 3485, -524, - 1735, -2039, -2039, 871, 1008, 1339, 1656, 1339, 815, 1009, - 1046, 1746, 1046, -524, 1134, 1605, 1585, 1046, -524, 3263, - 1794, -511, 1782, 815, -515, 1176, 3250, 1608, 3087, 1795, - 1239, 1609, 1610, -227, 2684, 2686, 1746, 2689, -227, 967, - 536, 3460, 1352, 1608, 1179, 874, 2199, 2608, 1610, 1898, - -648, 1541, 1764, 1899, 1900, 1767, 1768, 876, 2104, 999, - 2423, 1323, 1618, -466, 536, 1165, 1755, 1141, 1010, -524, - 3514, 1755, 1323, 2432, 3336, 533, 1608, 2656, 1618, 876, - 1609, 1610, 3070, 2274, 3072, 3139, 1314, 2796, 3452, -524, - 1025, 3115, 1005, 872, 1738, 1938, 1620, 2977, 3, 4, - 3381, 2290, 1004, 537, 3509, -2013, -2013, 1138, 2092, 2406, - 554, 1618, 1620, 2404, 2952, 875, 745, 1353, 1352, 1732, - 1657, 1352, 1352, 1769, 1982, 1315, 1938, 537, 821, 2417, - 2418, 2419, 1728, 1729, 2695, 2093, 2706, 3119, -524, 1011, - 3445, 931, 862, 862, -1099, 1620, 3515, -524, 3101, 3293, - 1559, 1661, -1099, 2120, -1120, 2070, 112, 3498, 2837, 3294, - 2576, 2121, -1120, 2407, 2216, 3412, 1569, 3344, 1836, 3171, - 2130, 1680, 1172, 1608, 3195, 1012, 539, 2816, 2161, 3164, - 932, 2105, 1798, 2367, 3172, 3402, 2512, 3113, 3279, 3496, - 3176, 1013, 2836, 876, 2846, 1774, 3138, 1778, 2106, 1864, - 783, 1014, 782, 2107, 1046, 893, 2795, 3486, 2797, 2013, - -511, 3165, 2148, -515, 2395, 2645, 3262, 1455, 2019, 1775, - 2847, 1496, 3102, 1853, 2217, 1292, 1541, 3468, 2819, 3345, - 3521, 1006, 3362, 1291, 1142, 1015, 1143, 2149, 3516, 113, - -207, 2108, 1620, 1658, 2817, 2573, 2275, 2573, 1174, 1324, - 2094, 3116, 1865, 1867, 1740, 2279, 2754, 1291, 980, 2985, - 2096, 3114, 2978, 2162, 3453, 934, 3510, 1770, 1456, -784, - 1756, 1135, 1693, 2192, 1571, 1756, 1577, 1771, 3467, -511, - 1797, 1016, -515, 541, 3455, 542, 2696, 3193, 1017, 2220, - 2723, 3261, 3487, 945, 3446, 2577, -524, 2282, 3239, 3337, - -668, 3413, 1979, 1316, 1753, 1045, 2408, 541, 1898, 962, - 2405, 545, 1899, 1900, 1541, 3499, -2041, -2041, -2041, 2131, - 2200, 3488, 1671, 3447, 856, 3295, 2044, 2015, 1018, 3425, - 3105, 1681, 873, 2969, 1730, 545, 1753, 2981, 784, 2436, - 919, 1753, 877, 2630, 2631, 2084, 1136, 1019, 2211, 1597, - 3251, 714, 1930, 1731, 1679, 1324, 2775, 1783, 2291, 1040, - 2991, 2983, 953, 2503, 902, 902, 1324, 1854, 903, 903, - 3461, 1741, 2337, 1858, 3173, 3245, 941, 2953, 1554, 1555, - 1694, 858, 2609, 1945, 2524, 3414, 2273, 2693, 2193, 3426, - 2545, 3517, 3000, 3150, 3255, 2186, 2109, -511, 3270, 1965, - -515, 2550, 1780, 1567, -784, 967, 2804, 1550, 1031, 3168, - 1325, 2097, 2317, 2375, 2318, 2929, 1020, 1317, 534, 1032, - 2539, 2932, 2098, 1912, 1913, 1914, 1915, 2671, 2652, -1888, - 2738, 1572, 2136, 2362, -1888, 1915, -511, 1564, -511, -515, - -1319, -515, 1564, 1572, 2343, 2368, 902, -1260, -1241, 3242, - 903, -1260, 3095, 1573, 3243, 2634, 2643, -1879, -847, -852, - 3169, 2805, -1879, 2026, 2027, 1573, 2866, 1574, 3216, 1603, - -1888, 2020, -1896, 530, -1261, 2396, -1896, 2012, 1585, 1576, - 3361, 1862, 2401, 2050, -1261, 2051, 996, 1585, 1557, 1239, - 2064, 1239, 1556, 968, 1562, -842, 1653, 2138, 3029, 3159, - 865, 2047, 993, 3368, 1855, 1774, 1343, 1344, 1343, 1344, - -1099, 2066, 966, 3128, 3129, 3086, 1328, 3145, 2433, 2122, - -1120, 3367, 2433, 1638, 1639, 1640, 1641, 2717, 1144, 1775, - 2065, 833, 814, 1541, -227, -227, 1936, 3437, 1172, 2867, - 91, 780, 1641, 1910, 1911, 1912, 1913, 1914, 1915, 1166, - 2454, 865, 517, 1172, 2995, 2376, 521, 2584, 1173, -592, - 3230, 970, 3232, 517, -592, 2377, 3077, 521, 2273, 104, - 1636, 1637, 1638, 1639, 1640, 1641, 1188, 995, 1565, 1566, - 1559, 2216, 883, 1755, 811, 1755, 884, 2879, 1906, 2602, - 3435, 2707, 2708, 2709, 2710, 811, 813, 1746, 517, 517, - 1569, 2402, 2603, 852, 3078, 2958, 3088, 813, 1747, 2246, - 1377, 1378, 867, 2581, 1174, 2185, 2185, 2327, 105, 2249, - 1572, 517, 2252, 2868, 3493, 3035, 1541, 868, 3037, 1174, - 3039, 3051, 977, 834, 3153, -592, 2004, 3121, 2402, 61, - 66, 2570, 1573, 2244, 2513, 3126, 77, 869, 939, 103, - 536, 1167, 3330, 1140, 3331, 60, 844, 844, 1755, 844, - 91, 100, 2086, 1175, 3165, 517, 714, 1597, 1145, 1277, - 517, 69, 885, 1140, 84, 1352, 78, 95, 1175, 2946, - 2929, 2947, 1153, 3308, -592, 1352, 2932, 1441, 1352, 1746, - 3363, 2618, 1438, 2044, -2010, -2010, 2269, 2270, 2271, 1448, - 1749, 1195, 2619, 3511, 1755, 2411, 1696, 1196, 2303, 1785, - 2208, 1788, 2346, 537, 51, 900, 2475, 3298, 1755, 2336, - 1690, 3248, 1277, 2338, 2582, 815, 2340, 1381, 1382, 52, - 3383, 2766, 53, 57, 1335, 966, 1293, 2245, 58, 2840, - 62, 517, 517, 918, 2348, 3235, 63, 517, 64, 929, - 517, 517, 1697, 517, 517, 517, 517, 2255, 67, 1866, - 1541, 68, 2262, 70, 1046, 91, 780, 72, 80, 517, - 81, 82, 1921, 521, 83, 94, 517, 1696, 1352, 97, - 521, 98, 99, 805, 2607, 3424, 3224, 1756, 3427, 1756, - 805, 2187, 2188, 107, 517, 1277, 1526, 3225, -2041, -2041, - -2041, 811, 1910, 1911, 1912, 1913, 1914, 1915, 811, 3357, - 929, 925, 1197, 813, 2247, 517, 1853, 1780, 1698, 2250, - 813, 930, 1011, 1697, 2356, 2525, 2841, 2545, 2526, 2357, - 2611, 1195, 23, 906, 517, 2355, 2548, 1196, 865, 2359, - 958, 1046, 2361, -208, 2615, 517, 517, 517, 3061, 517, - 517, 3187, 714, 1753, 1608, 1753, 937, 2220, 1012, 2556, - 1939, 2623, 1756, 2400, 874, 1940, 3340, 936, 902, 1699, - -1241, 3280, 903, 1195, 1442, 942, 1812, 1591, -593, 1196, - 1198, 517, 930, -593, 1014, 3491, 2358, 2610, 3391, 1618, - 1195, 1572, 2842, 541, 2843, 962, 1196, 2449, 517, 517, - -2011, -2011, 1684, 1685, 1541, 1691, 884, 884, 1756, 884, - 3398, 3399, 946, 1573, 1337, 1813, 1541, 1338, 931, 1444, - 902, 545, 1756, 1620, 903, 1451, 3281, 1574, 1753, 1572, - 943, 1700, 1589, 517, 875, 3282, 967, 517, 517, 948, - 1699, 2583, 1197, 2584, 2457, 949, 1541, 517, 517, 517, - 3160, 1573, 517, 1541, -593, 947, 862, 932, 2657, 3283, - 2092, 108, 1140, 3439, 2665, 1576, 959, 2493, 1198, 817, - 817, 1526, 109, 2585, 1753, 27, 28, 29, 1607, 1812, - 1929, 1608, 1931, 1932, 1197, 1609, 1610, 2093, 1753, 1541, - 2733, 902, 933, 1541, 2494, 1596, 1035, 1036, 1037, 1541, - 1815, 1197, 1700, -593, 1277, 115, 2124, 110, 980, 531, - 2125, 1018, 876, 1277, -2012, -2012, 1618, 744, 1813, 2491, - 921, 1541, 922, -2041, 1781, 1199, 923, 1435, 924, 1200, - 1443, 3284, 832, -2015, -2015, 1449, 845, 1277, 2521, 1454, - 34, 978, 934, 2044, 3285, 1459, 2412, 2523, 2413, 1463, - 1620, 1129, 1130, 1814, 1132, -2016, -2016, 111, 901, 1526, - 979, 1201, 1195, 1195, 998, 2996, 1820, 1822, 1196, 1196, - 981, 1369, 1370, 1823, 984, 714, 1824, 39, 987, 2850, - 2549, 2549, 1669, 1411, 714, 1670, 1859, -2017, -2017, 1860, - 2718, 1195, 2592, 2725, 2594, 989, 1978, 1196, 1198, 1979, - 1847, 966, 2094, 1815, 1548, 3507, 47, 2095, 2002, 988, - 41, 2003, 2096, 2287, 2495, 2490, 2288, 2350, 714, 2496, - 2351, 44, 2853, 2388, 517, 2414, 2389, 2415, 1957, 91, - 780, 1959, 1202, 2595, 2434, 2597, 1963, 2435, 1027, 1966, - 1198, 1377, 1378, 1869, 1970, 2437, -2041, 2559, 2435, 2930, - 970, 3494, 2833, 3495, 2835, 1225, 990, 1198, 2877, 1200, - 3470, 877, 2640, -2041, 2598, 2870, 2604, 2599, -2041, 2605, - 991, 517, 517, 1197, 1197, 47, 3482, 517, 1169, 517, - 1171, 2834, 992, 521, 517, 517, 517, 517, -2018, -2018, - 993, 1226, 2945, 2668, 3520, 2730, 1979, 1229, 2435, 517, - 517, 1200, 1197, 1030, 2731, 517, -2041, 2003, 517, 521, - 1033, 811, 521, 517, 2955, 517, 517, 521, 1200, 805, - 521, 517, 805, 813, 2869, 521, 2878, 805, 2755, 2756, - 805, 3518, 1038, 1230, 1039, 805, 3519, 811, 2734, 2736, - 811, 2735, 2735, 3286, 1040, 811, 3287, 907, 811, 813, - 1201, 862, 813, 811, -2020, -2020, 1041, 813, 1381, 1382, - 813, 1629, 1202, 2097, 1133, 813, 1137, 2744, 2746, 2747, - 2497, -2021, -2021, 908, 2098, 854, 1148, 1589, 1526, 3253, - 2811, 2498, 1154, 2812, 2857, 3326, 1441, 3327, -2022, -2022, - 2743, 2745, 2742, 2968, 2984, 2741, 2288, 2351, 2989, 2997, - 3052, 2990, 2998, 2003, 1202, 1045, 3188, 536, 1898, 2003, - 517, 517, 1899, 1900, -2023, -2023, 1901, 1902, 1903, 517, - 517, 1202, 3189, -2024, -2024, 2435, 815, 517, 1541, 1198, - 1198, 2005, -1305, 2858, 517, 1155, 91, 2011, 909, 1157, - 892, 1158, 895, 1163, 899, 3219, 1159, 2006, 2003, 2859, - 2009, 3226, 2007, 2010, 1979, 1162, 2737, 2739, 1198, 714, - 1189, -2041, 1170, 517, 1192, 2545, 517, 910, -2025, -2025, - 537, 1526, 517, 517, 517, 517, 517, 517, 517, 517, - 714, 2676, -2026, -2026, 517, 517, 2207, 2253, 1190, 517, - 1200, 1200, 3236, 517, 1194, 3237, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 2080, 2133, 517, 3269, 1193, - 911, 2288, 967, 1206, 517, 2260, 1277, -2027, -2027, 1200, - -524, 1011, 1201, 2254, 961, 1856, 2168, 1857, 3132, 2064, - 884, -2029, -2029, 3273, -524, 517, 2351, 3305, 536, -524, - 2003, 1207, 3374, 3379, 3096, 2351, 3380, 14, 15, 1233, - 2860, 2261, 2877, 3406, -2030, -2030, 3407, 1012, 517, 2861, - 1224, 1541, 3451, -1305, 3492, 3380, 1228, 3380, -2041, 517, - 517, -2031, -2031, 1450, 1232, 1636, 1637, 1638, 1639, 1640, - 1641, 1288, 1145, 1014, -2032, -2032, -2033, -2033, -2034, -2034, - -524, 1285, 23, 1202, 1202, 1904, -2036, -2036, -2038, -2038, - 540, 537, 23, 1896, 1897, 1526, 1289, 2827, 1294, 1917, - -524, 1352, -2040, -2040, 714, 1310, 714, 1541, 1905, 1800, - 1801, 1296, 1202, 1297, 1982, 2951, -643, -643, 2979, -647, - -647, 3149, 1312, 2963, 1313, 912, -646, -646, 1320, 2232, - 1321, 2236, 1379, 1380, 2988, 1327, 913, 1381, 1382, 3469, - 541, 1330, 962, 3471, 1331, 2302, 517, 3092, 3093, -524, - 1277, 3478, 3479, 517, 517, 1336, 3063, 3304, -524, 543, - 3504, 3505, 1664, 1665, 1354, 544, 1355, 1358, 545, 1429, - 1361, 914, 1416, 1431, 1432, 3215, 1439, 1445, 1906, 1446, - 1452, 1462, 1453, 1544, 1458, 1464, 1545, 1547, -818, -825, - 1556, 1277, 1560, 47, 915, -668, -669, -815, -816, 3512, - 1018, 1570, -819, 1571, -817, 1581, 714, 1590, 1600, 1602, - 1541, 1647, 1663, 1277, 517, 1649, 1651, 1672, 1673, 1443, - 2545, 916, 966, 1682, 1683, 27, 28, 29, 1677, 1175, - 2321, 3036, 1173, 1718, 2424, 27, 28, 29, 1720, 1526, - 2427, 1722, 1733, 517, 517, 1751, 517, 1752, 1758, 1753, - 1759, 1526, 517, 517, 517, 517, 517, 517, 1760, 1765, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 1772, 541, 1773, 962, 1777, 517, 517, 2930, 1787, 517, - 112, 1526, 1793, 1803, 1804, 1805, 517, 1809, 1526, 1818, - 34, 1819, 1817, 1008, 1828, 1831, 544, 1832, 1009, 545, - 34, 36, 1834, 3124, 1835, 1541, 1837, -524, 517, 1838, - 3304, 517, 1840, 517, 1841, 521, 975, 517, 817, 1848, - 1849, 521, 3267, 38, 1526, 805, 1853, 39, 1526, 1861, - 517, 805, 1277, 1887, 1526, 1889, 1890, 39, 1958, 1926, - 3133, 3134, 1892, 811, 1895, 1955, 1964, 1937, 1029, 811, - 1918, 1927, 1934, 3304, 1969, 813, 1526, 1010, 920, 3034, - 41, 813, 1967, 927, 1968, 1977, 928, 517, 517, 1352, - 41, 44, 1974, 1131, 1352, 902, 1980, 1985, 1157, 903, - 1550, 44, 1541, 1557, 1986, 1562, 1046, 45, 1907, 1908, - 1909, 1981, 1910, 1911, 1912, 1913, 1914, 1915, 3210, 1983, - 1589, 2015, 1984, 3304, 2014, 2048, 2049, 517, 1608, 2057, - 2054, 46, 517, 517, 2082, 2059, 2060, 2061, 2062, 2089, - 2100, 1865, 1867, 23, 2212, 47, 2103, 2101, 1011, 2127, - 865, 2128, 2134, 3359, 2221, 47, 2224, 517, 517, 2235, - 2146, 2028, 517, 2147, 2151, 2239, 875, 2241, 2029, 2030, - 2164, 2806, 2031, 2032, 2033, 2167, 517, 2176, 2177, 517, - 2248, 517, 3320, 2178, 1012, 2251, 2179, 2181, 2180, 2256, - 2257, 2258, 2259, 2198, 2263, 2264, 2202, 517, 714, 2203, - 1013, 14, 15, 3110, 517, 2213, 2206, 517, 2209, 1541, - 1014, 521, 2214, 2215, 2285, 2289, 876, 2328, 2304, 2294, - 2306, 805, 2307, 2308, 517, 23, 1347, 2330, 521, 2322, - 2323, 2325, 2329, 2332, 2331, 1387, 2333, 517, 805, 811, - 2335, 2352, 2339, 1541, 1015, 2360, 23, 1923, 2390, 1898, - 1922, 813, 2397, 2398, 517, 517, 811, 2399, 2403, 2409, - 2410, 2421, 2930, 2426, 2428, 1960, 2439, 2441, 813, 2446, - 2455, 517, 2447, 517, 2448, 3333, 2450, 2451, 2452, 2453, - 2456, 2463, 517, 2466, 1466, 2464, 27, 28, 29, 2468, - 1016, 1780, 3256, 2471, 2467, 2469, 2472, 1017, 2492, 2470, - 714, 714, 714, 2487, 2369, 2370, 2371, 2372, 2373, 2374, - 2508, 2499, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, - 2386, 2387, 1541, 2473, 2509, 2232, 2232, 2232, 2474, 2484, - 2485, 2514, 2515, 2516, 986, 2527, 2528, 1018, 2530, 517, - 2532, 2533, 2538, 2540, 2541, 1277, 1533, 1865, 1867, -649, - 1601, 34, 2551, 2554, 2555, 2558, 1019, 2807, 2552, 1352, - 1604, 2562, 2564, 2566, 2563, 865, 1541, 967, 27, 28, - 29, 2569, 2568, 2572, 1820, 1822, 2606, 2591, 1654, 2593, - 2627, 1823, 2612, 1526, 1824, 2613, 2614, 1660, 39, 27, - 28, 29, 2626, 2624, 2625, 2639, 2644, 2638, 2655, 2654, - 2662, 517, 2658, 2659, 714, 2666, 536, 2673, 2683, 2691, - 2694, 2697, 2700, 1161, 2701, 2702, 2703, 2714, 966, 2715, - 2726, 41, 3322, 2727, 714, 1020, 2732, 2751, 2763, 1869, - 1961, -1305, 44, 34, 3309, 2773, 3311, 2064, 2740, 1045, - 2748, 2757, 1898, 2774, 2544, 2771, 1899, 1900, 45, 1869, - 1901, 1902, 1903, 2787, 34, 2777, 2786, 23, 2792, 2794, - 1286, 2798, 517, 3319, 2801, 36, 521, 2768, 1541, 537, - 39, 2820, 46, 2824, 2818, 1299, 1301, 1304, 1306, 2822, - 2832, 2838, 2839, 2865, 2845, 2881, 47, 38, 2948, 2488, - 2489, 39, 2949, 2950, 811, 2961, 2971, 2957, 2975, 3321, - 2954, 517, 3324, 41, 2962, 2724, 813, 3444, 2966, 2967, - 2970, 2986, 2288, 3404, 44, 2993, 1526, 2789, 2994, 3025, - 2999, 1533, 3019, 538, 41, 3021, 3030, 3040, 1405, 3076, - 45, 3041, 517, 3043, 3044, 44, 3064, 865, 517, 517, - 3408, 3397, 539, 3071, 3074, 3083, 3085, 3089, 3090, 517, - 3091, 45, 3097, 1856, 46, 3098, 3103, 3107, 3099, 3108, - 517, 3117, 3109, 517, 3120, 517, 3122, 3123, 2808, 3127, - 865, 1208, 1526, 517, -2009, 46, 517, 517, 3156, -2010, - 3392, 517, 517, -2011, -2012, 3143, 3140, 3141, 517, 47, - -2013, 1209, 3161, 3175, -2014, 3177, 3179, 3190, 3142, 540, - 27, 28, 29, 517, 516, 528, -207, -2015, 1868, 1533, - 552, -2016, 1466, 517, 3181, 3146, 552, -2017, -2018, -2020, - 802, 2826, 816, 816, 1352, 2005, -2021, 820, 552, 828, - 91, 2011, 828, 517, -2022, 846, 850, 1210, -2023, 850, - -2024, 2006, 552, 552, 2009, 3147, 2007, 2010, -2025, 541, - 2810, 542, 1905, -2026, 2034, 2035, 2036, -2027, 2037, 2038, - 2039, 2040, 2041, 2042, -2029, 34, -2030, -2031, 543, 3144, - -2032, 3191, 714, -2033, 544, 2928, 714, 545, 714, -2034, - -2035, -2036, -2037, -2038, -2039, -2040, 802, 802, -1258, 3154, - 517, 3198, 517, 3162, 3180, 3202, 3184, 2232, 3194, 846, - 3205, 2933, 39, 2236, 850, 552, 850, 850, 850, 3196, - 3204, 3208, 3209, 3211, 3218, 3214, 3233, 3234, 3238, 3241, - 3244, 3246, 1906, 3258, 1820, 1822, 3259, 2661, -1257, 3432, - 3266, 1823, 1211, 1541, 1824, 41, 1208, 1734, 3268, 3275, - 3276, 3277, 3292, 3290, 3291, 1195, 44, 3306, 3313, 3307, - 1761, 1196, 3316, 3328, 3310, 2959, 1209, 3323, 3348, 1208, - 3314, 3116, 45, 3354, 3352, 3355, 3358, 517, 3370, 3371, - 1526, 1786, 3372, 3364, 3382, 3377, 3384, 3386, 3389, 1209, - 865, 1212, 2980, 3067, 3394, 2982, 46, 517, 517, 3390, - 1438, 1213, 517, 3395, 3396, 517, 3401, 3403, 3405, 2724, - 47, 3410, 1210, 1214, 3422, 3421, 3415, 3438, 3423, 3449, - 3428, 3430, 1607, 3429, 3440, 1608, 3442, 3459, 3443, 1609, - 1610, 3462, 517, 3464, 3480, 1210, 3460, 3483, 1533, 1208, - 3461, 3497, 3502, 3508, 1811, 1215, 517, 3513, 3522, 3523, - 1827, 517, 517, 1160, 3130, 2880, 517, 1526, 2589, 1209, - 1618, 517, 1535, 85, 517, 517, 1197, -2041, 2240, 517, - 1277, 2884, 2143, 517, 2616, 2283, 2635, 517, 904, 865, - 1789, 521, 2680, 85, 517, 976, 804, 3185, 3419, 3490, - 3254, 805, 3458, 2956, 1620, 3465, 3484, 1217, 1743, 3289, - 2571, 85, 2596, 2974, 2849, 1210, 1195, 1211, 3456, 811, - 864, 3463, 1196, 2567, 2934, 3454, 1816, 2814, 2779, 2780, - 1208, 813, 1218, 1851, 2675, 2139, 2341, 1863, 517, 3375, - 1211, 1533, 3335, 2813, 3436, 3400, 517, 3506, 2799, 2557, - 1209, 1220, 1907, 1908, 1909, 2543, 1910, 1911, 1912, 1913, - 1914, 1915, 804, 804, 882, 517, 1212, 1436, 1674, 2500, - 1437, 2205, 1885, 1715, 1526, 85, 1213, 2705, 3441, 2553, - 2173, 3385, 3312, 2204, 2873, 806, 1714, 2529, 1214, 1212, - 2829, 2830, 1719, 3028, 2431, 3213, 1210, 983, 1403, 1213, - -2041, 2699, 1953, 997, 2698, 2729, 3260, 2445, 2928, 1388, - 1211, 1214, 2349, 1390, 1394, 3388, 3387, -2041, 2882, 2482, - 1215, 1395, -2041, 1396, 1397, 1398, 1399, 1197, 2753, 2460, - 2546, 2506, 1198, 2935, 2936, 2937, 2938, 2939, 2940, 2941, - 2942, 2943, 2944, 1215, 2504, 2483, 2765, 1535, 2142, 3075, - 2438, 890, 1946, 0, 517, 714, 0, 0, 0, 1212, - -2041, 0, 0, 2265, 0, 0, 3457, 0, 0, 1213, - 0, 0, 1217, 0, 0, 1533, 2281, 2281, 0, 0, - 1869, 1214, 0, 966, 0, 0, 517, 1526, 0, 1216, - 865, 1211, 0, 1200, 0, 1217, 0, 1218, 0, 0, - 0, 0, 517, 1208, 0, 0, 0, 3167, 0, 0, - 0, 0, 0, 1215, 0, 1629, 1220, 0, 0, 2992, - 1218, 0, 1277, 1209, 0, 1219, 0, 0, 0, 0, - 0, 1526, 0, 0, 0, 1535, 517, 0, 0, 1220, - 1212, 0, 0, 1347, 0, 0, 0, 517, 517, 2354, - 1213, 517, 850, 517, 0, 0, 0, 850, 0, 0, - 850, 0, 1214, 0, 0, 1217, 0, 0, 552, 1210, - 2871, 0, 0, 0, 0, 0, 0, 0, 517, 0, - 2872, 0, 0, 1198, 0, 0, 0, 0, 0, 0, - 1218, 0, 0, 0, 1215, 0, 1202, 1607, 0, 0, - 1608, 0, 517, 0, 1609, 1610, 0, 0, 1536, 1220, - 0, 0, 0, 0, 0, -2041, 0, 0, 0, 1533, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1533, 2141, 2928, 2144, 1618, 0, 0, 2873, 0, - 2242, 0, -2041, 0, 1200, 2153, 1217, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1538, 0, - 0, 1533, 0, 0, 1211, 0, 0, 0, 1533, 1620, - 0, 1218, 517, 714, 1539, 0, 2243, 517, 3112, 3111, - 0, 521, 0, 2190, 0, 0, 0, 517, 0, 517, - 1220, 517, 3271, 3272, 0, 517, 0, 517, 1869, 517, - 0, 0, 0, 0, 1533, 0, 0, 0, 1533, 811, - 1008, 517, 0, 1212, 1533, 1009, 517, 0, 517, 0, - 0, 813, -2041, 1213, 0, 0, 517, 0, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 1214, 1533, 2874, 0, 714, - 0, 0, 0, 0, 517, 0, 0, 1202, 0, 0, - 0, 0, 0, 0, 1535, 0, 0, 0, 951, 552, - 552, 0, 0, 0, 3341, -2041, 0, 1215, 0, 0, - 3332, 0, 3334, 0, 1010, 0, 2295, 2296, 2298, 2299, - 0, 2301, -2041, 1536, 0, 0, 0, -2041, 0, 0, - 0, 0, 0, 517, 0, 0, 0, 0, 0, 974, - 528, 816, 0, 517, 0, 0, 516, 85, 850, 1540, - 0, 0, 3366, 0, 0, 0, 517, 802, 3186, 1217, - 0, 1001, 1001, 0, 0, -2041, 1001, 1024, 3369, 0, - 517, 0, 3373, 1538, 521, 0, 0, 0, 0, 0, - 828, 828, 828, 0, 1218, 1011, 0, 1535, 517, 1539, - 0, 0, 0, 1183, 828, 828, 0, 828, 0, 0, - 0, 0, 811, 1220, 1362, 2875, 815, 0, 2876, 0, - 850, 1536, 0, 517, 813, 0, 552, 521, 0, 0, - 1629, 1012, 0, 0, 0, 0, 0, 850, 0, 517, - 850, 0, 0, 0, 0, -1771, 0, 1013, 2928, 0, - 714, 0, 0, 0, 0, 811, 0, 1014, 2600, 0, - 0, 0, 2416, 0, 0, 0, 0, 813, 0, 0, - 0, 1538, 0, 517, 0, 3341, 0, 521, 0, 1363, - 1364, 0, 0, 0, 850, 1287, 0, 1539, 517, 517, - 517, 1015, 0, 0, 0, 0, 0, 3257, 0, 850, - 850, 850, 850, 1308, 0, 811, 0, 0, 3466, 0, - 2632, 0, 1184, 0, 0, 517, 1319, 813, 3264, 3265, - 1365, 1366, 0, 0, 1367, 1368, 0, 1753, 2646, 0, - -2041, 1535, 0, 0, 1540, 3481, 0, 1016, 0, 0, - 0, 1008, 0, 3278, 1017, -1771, 1009, 0, 0, 1001, - 1024, 0, 850, 0, 0, 1410, 517, 0, 0, 0, - 0, 1001, 1001, 0, 0, 0, 0, 552, 0, 1347, - 0, 85, 864, 802, 0, 0, 0, 2681, 0, 2682, - 802, 0, 0, 2687, 1018, 2690, 0, 0, 0, 0, - 552, 0, -1771, 1533, 0, 0, 0, 1465, 0, 1369, - 1370, 0, 553, 1019, 0, 1010, -1771, 1546, 553, 0, - 0, -1771, 982, 0, 0, 0, -1771, 0, 0, 0, - 553, 0, 1540, 994, 0, -1771, 0, 0, 0, 0, - -1771, 0, 0, 0, 553, 553, 0, -2041, 0, 0, - 1536, 0, 0, 0, 1636, 1637, 1638, 1639, 1640, 1641, - 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, - 0, 0, -1771, 1371, 1372, 1373, 1374, 1375, 1376, 1377, - 1378, 882, 1020, 1379, 1380, 1535, 1011, 1185, 0, 2320, - 0, 0, -1771, 0, 0, 0, 0, 1535, 0, 0, - 1538, 85, 0, 0, 0, 0, 0, 553, 0, 23, - 0, 0, 1045, 0, 1666, 1898, 1539, 1668, 0, 1899, - 1900, 0, 1012, 1901, 1902, 1903, 0, 1535, 0, 0, - 0, 552, 552, 0, 1535, 0, 1533, 0, 1013, 850, - 2769, -1771, 0, 1536, -1771, 0, 0, 0, 1014, 0, - -1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1410, 0, 0, 0, 0, 0, 0, 0, 0, - 1535, 850, 1742, 0, 1535, 1872, 0, 0, 0, 0, - 1535, 0, 1015, 0, 850, 0, 0, 0, 3450, 0, - -1771, 0, 1533, 1538, 0, 0, 1381, 1382, 0, 0, - 0, 850, 1535, 1186, 0, 850, 85, 0, 0, 1539, - 1790, 0, 0, -1771, 0, 2850, 0, 2636, 0, 0, - 0, 2851, 1873, 0, 0, 0, 0, 0, 1016, 0, - 2650, 2651, 2653, 0, 2852, 1017, 2925, 0, 0, 804, - 0, 0, 0, 1874, 0, 2664, 804, 0, 2667, 0, - 0, 1540, 27, 28, 29, 0, 2674, 0, 2853, 0, - 2854, 1875, 0, 0, 0, 1876, 1806, 0, 850, 2632, - 0, 852, 0, 0, 850, 1018, 0, 1536, 0, 0, - 0, 1549, 0, 0, 0, 0, 0, 1877, 1844, 0, - 1878, 1383, 1384, 1561, 1019, 1533, 0, 951, 0, -1771, - 0, 0, 951, 0, 552, 552, 1879, 552, 951, -1771, - 0, 0, 0, 0, 0, 1385, 1386, 34, 0, 0, - 1587, 0, 0, 0, 0, 1905, 0, 1538, -1771, 0, - -1771, -1771, 0, 0, 0, 1465, 0, 0, 0, 0, - 2711, 2712, 2713, 1539, 1540, 0, 0, 2855, 0, 0, - 0, 0, 0, 0, 39, 0, 0, 0, 1654, 0, - 0, 0, 0, 1020, 0, 0, 1045, -1771, 0, 1898, - -1771, -1771, -1771, 1899, 1900, 0, 0, 1901, 1902, 1903, - 0, 0, 0, 0, 0, 1410, 1410, 41, 0, 0, - 1533, 1410, 0, 516, 3054, 1906, 0, 0, 44, 1880, - 0, 882, 882, 0, 882, 0, 1001, 1881, 552, 1941, - 0, 0, 0, 0, 45, 2856, 850, 0, 0, 802, - 2857, 1536, 802, 0, 0, 0, 0, 802, 0, 1882, - 802, 0, 3073, 1536, 0, 802, 0, 552, 46, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 3166, 0, 1883, 0, 0, 0, - 0, 0, 0, 1536, 0, 0, 0, 1533, 0, 2858, - 1536, 1538, 0, 0, 23, 0, 0, 2821, 1540, 0, - 0, 0, 0, 1538, 0, 2859, 0, 1539, 0, 1045, - 0, 0, 1898, 0, 0, 0, 1899, 1900, 0, 1539, - 1901, 1902, 1903, 0, 0, 0, 1536, 0, 0, 1535, - 1536, 0, 0, 1538, 0, 0, 1536, 0, 0, 0, - 1538, 0, 0, 0, 0, 0, 0, 0, 0, 1539, - 0, 0, 0, 0, 0, 0, 1539, 0, 1536, 0, - 0, 0, 0, 0, 0, 0, 0, 2043, 0, 0, - 553, 0, 0, 0, 0, 0, 1538, 0, 2053, 0, - 1538, 0, 0, 0, 0, 0, 1538, 0, 2965, 0, - 85, 0, 1539, 0, 1533, 0, 1539, 0, 0, 1905, - 0, 0, 1539, 0, 0, 0, 2860, 0, 1538, 0, - 0, 0, 0, 0, 0, 2861, 0, 951, 0, 0, - 0, 3163, 0, 0, 1539, 1907, 1908, 1909, 1533, 1910, - 1911, 1912, 1913, 1914, 1915, 0, 0, 27, 28, 29, - 1607, 0, 1540, 1608, 1347, 0, 0, 1609, 1610, 0, - 3001, 3002, 3003, 3004, 1540, 0, 0, 0, 0, 0, - 0, 0, 1535, 0, 2140, 0, 850, 0, 850, 1906, - 0, 0, 0, 0, 0, 0, 0, 0, 1618, 850, - 2156, 0, 0, 0, 1540, -2041, 0, 0, 0, 0, - 0, 1540, 1410, 0, 0, 804, 0, 0, 804, 2201, - 0, 0, 34, 804, 0, 0, 804, 1533, 0, 0, - 0, 804, 1620, 0, 0, 0, 0, 850, 1535, 552, - 0, 0, 1905, 0, 0, 3231, 0, 1540, 0, 0, - 0, 1540, 0, 1742, 552, 0, 0, 1540, 0, 39, - 0, 0, 0, 0, 552, 2222, 552, 2226, 0, 552, - 0, 1533, 0, 0, 0, 552, 0, 552, 0, 1540, - 0, 553, 553, 0, 0, 0, 0, 0, 0, 951, - 552, 0, 41, 0, 951, 552, 0, 2778, 0, 552, - 552, 552, 552, 44, 552, 552, 0, 0, 0, 0, - 0, 0, 1906, 0, 2925, 0, 0, 85, 0, 45, - 0, 2284, 3118, 0, 0, 0, 0, 0, -2041, 0, - 850, 850, 850, 850, 1308, 850, 0, 0, 0, 0, - 0, 1535, 0, 46, 0, -2041, 0, 0, 0, 2310, - -2041, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 2334, 0, 0, 0, 0, - 0, 0, 0, 1533, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1536, 0, 0, -2041, 0, - 0, 0, 0, 0, 0, 0, 2090, 0, 553, 1907, - 1908, 1909, 0, 1910, 1911, 1912, 1913, 1914, 1915, 0, - 0, 0, 0, 0, 0, 0, 1410, 1410, 1410, 1410, - 1410, 1410, 0, 0, 1410, 1410, 1410, 1410, 1410, 1410, - 1410, 1410, 1410, 1410, 0, 1538, 1535, 0, 0, 0, - 0, 0, 3360, 1629, 0, 0, 0, 0, 0, 0, - 0, 1539, 0, 0, 552, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 882, 850, 0, 0, 0, - 0, 0, 0, 0, 0, 802, 0, 0, 0, 0, - 0, 802, 1045, 0, 0, 1898, 552, 0, 0, 1899, - 1900, 552, 0, 1901, 1902, 1903, 0, 0, 0, 0, - 2443, 2443, 0, 0, 0, 0, 0, 0, 0, 0, - 3055, 0, 0, 1535, 0, 0, 0, 0, 1536, 0, - 0, 0, 1907, 1908, 1909, 0, 1910, 1911, 1912, 1913, - 1914, 1915, 0, 0, 0, 0, 0, 0, 0, 1430, - 0, 0, 0, -2041, 0, 1607, 0, 0, 1608, 0, - 0, 0, 1609, 1610, 0, 0, 0, 0, 0, 0, - 0, 0, 1461, 0, 0, 0, 0, 0, 1538, 552, - 0, 0, 0, 2479, 1536, 0, 0, 0, 552, 2925, - 0, 0, 0, 1618, 1539, 0, 1540, 0, 0, 0, - -2041, 0, 0, 0, 0, 0, 0, 0, 2305, 0, - 0, 1410, 1410, 0, 0, 0, 0, 85, 0, 0, - 0, 0, 0, 0, 0, 0, 3231, 1620, 2043, 0, - 1535, 0, 0, 3274, 1538, 0, 0, 0, 0, 0, - 1592, 0, 0, 0, 0, 0, 0, 0, 1533, 0, - 1539, 0, 0, 0, 3299, 0, 0, 0, 0, 0, - -2041, 802, 0, 0, 1535, 0, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 552, 0, 0, 0, 0, 802, 0, - 0, 0, 2156, 0, 0, 0, 0, 1536, 0, 0, - 0, 0, 2781, 1607, 0, 0, 1608, 0, 0, 0, - 1609, 1610, 0, 553, 553, 1905, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3339, 0, 0, - 0, 0, 552, -2041, 0, 1410, 0, 0, 552, 1540, - 0, 1618, 0, 0, 0, 0, 0, 1538, -2041, 0, - -2041, 804, 0, 1535, 1806, -2041, 0, 804, 3365, 0, - 0, 0, 0, 1539, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1620, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1906, 0, 0, 0, 0, - 0, 0, 1536, -2041, 0, 1540, 0, 1535, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, - 0, 850, 0, 0, 0, 0, 0, 0, 0, 0, - 2782, 0, 1538, 1806, 850, 850, 850, 0, 1629, 0, - 0, 0, 0, 0, 0, 0, 0, 552, 1539, 850, - 0, 0, 850, 0, 0, 0, 1308, 0, 0, 1536, - 850, -2041, 0, 0, 0, 0, 951, 0, 0, 0, - 0, 0, 1587, 0, 0, 0, 553, 553, -2041, 553, - 0, 0, 0, -2041, 1806, 1806, 0, 1806, 1540, 1535, - 2090, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2510, 0, 0, 1538, - 0, 0, 0, 0, 0, 1045, 516, 804, 1898, 0, - 0, -2041, 1899, 1900, 0, 1539, 1901, 1902, 1903, 0, - 0, 0, 0, 0, 804, 0, 2704, 0, -2041, 0, - 0, 0, 0, 0, 850, 850, 850, 0, 0, 0, - 0, 0, 0, 552, 0, 1410, 552, 0, 0, 0, - 0, 0, 552, 0, 0, 0, 1536, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, - 553, 0, 0, 1540, 0, 1907, 1908, 1909, 0, 1910, - 1911, 1912, 1913, 1914, 1915, 2043, 0, 0, 0, 0, - 1536, 0, 0, 0, 0, 0, 0, 0, 0, 1971, - 0, 1975, 0, 0, 0, 0, 1538, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1410, 1410, 1539, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -2041, 0, 0, 0, 0, - 1538, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 2803, - 1540, 0, 0, 0, 0, 2156, 1539, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -2041, 0, 0, 1536, - 0, 850, 0, 0, 0, 552, 0, 864, 0, 552, - 552, 552, 0, 0, 0, 1806, 1742, 1806, 0, 1844, - 0, 0, 0, -1773, 0, 0, 0, 0, 0, 0, - 1412, 0, 0, 0, 0, 0, 0, 0, 552, 0, - 2883, 0, 0, 1536, 0, 0, 0, 0, 1905, 1538, - 0, 0, 0, 552, 552, 552, 552, 552, 552, 552, - 552, 552, 552, 0, 0, 1539, 0, 0, 0, 0, - 0, 0, 0, 0, 1535, 0, 0, 0, 0, 0, - 0, 0, 0, 1045, 0, 2310, 1898, 1540, 0, 0, - 1899, 1900, 850, 1538, 1901, 1902, 1903, 0, 0, 0, - 0, 0, 1742, -2041, 0, 0, 0, 0, 0, 1539, - 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 1906, 0, - 1844, 1540, 0, -1773, 1413, 0, 0, 0, 0, 0, - 1806, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1410, 0, 0, 0, 1536, 0, 552, 0, 0, - 0, 0, 0, 0, 850, 850, 850, 850, 0, 14, - 15, 0, 0, 0, 0, 0, 1410, 0, 0, 1410, - -1773, 0, 0, 552, 951, 0, 0, 0, 0, 1587, - 0, 0, 3038, 0, -1773, 0, 0, 0, 0, -1773, - 0, 553, 0, 0, -1773, 1538, 0, 0, 0, 0, - 1540, 0, 0, -1773, 23, 0, 553, 0, -1773, 3045, - 0, 1539, 1587, 0, 0, 0, 553, 1711, 553, 0, - 0, 553, 0, 0, 0, 0, 1412, 553, 0, 553, - 0, 85, 0, 0, 0, 0, 0, 85, 0, 3068, - -1773, 802, 553, 0, 1540, 0, 0, 553, 0, 0, - 0, 553, 553, 553, 553, 3080, 553, 553, 0, 2156, - -1773, 0, 0, 2825, 0, 2043, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1742, - 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -2041, 0, 951, 552, - 1410, 0, 0, 0, 0, 0, 850, 0, 0, -1773, - 0, 0, -1773, 0, 0, 0, 0, 0, -1773, 0, - 1413, 0, 0, 3131, 0, 0, 0, 0, 1907, 1908, - 1909, 0, 1910, 1911, 1912, 1913, 1914, 1915, 0, 0, - 0, 0, 85, 0, 0, 0, 1540, 27, 28, 29, - 0, 0, 0, 0, 0, 0, 0, 0, -1773, 0, - 0, 0, 0, 0, 0, 0, 1906, 0, 0, 85, - 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, - 0, -1773, 0, 0, 0, 0, 0, 0, 0, 1607, - 0, 0, 1608, 0, 0, 0, 1609, 1610, 0, 0, - 0, 3148, 0, 0, 1806, 0, 553, 0, 0, 0, - 1536, 0, 34, 0, 0, 0, 0, 2310, 0, 0, - 0, 0, 1587, 36, 0, 0, 0, 1618, 0, 0, - 0, 0, 0, 3182, -2041, 0, 0, 0, 2430, 852, - 1410, 0, 0, 1975, 0, 38, 0, 0, 0, 39, - 1412, 1412, 0, 0, 0, 0, 1412, 0, 0, -1788, - 1538, 1620, 0, 0, 0, 0, 3199, -1773, 0, 40, - 0, 0, 552, 0, 0, 0, 1539, -1773, 0, 0, - 552, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 44, 0, 0, -1773, 804, -1773, -1773, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 0, 864, 0, 0, 3228, 0, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 3058, 0, 0, 0, - 1592, 0, 0, 46, 0, -1773, 552, 0, -1773, -1773, - -1773, 552, 0, 0, 1413, 1413, 0, 47, 0, 0, - 1413, 0, 0, 0, 0, 0, 0, -2041, 0, -1788, - 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, - 0, 1107, 1107, 0, -2041, 0, 1907, 1908, 1909, -2041, - 1910, 1911, 1912, 1913, 1914, 1915, 0, 0, 552, 552, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -1788, 850, 0, 1742, - 0, 1540, 0, 552, 0, 553, 0, -2041, 0, 0, - -1788, 0, 0, 0, 0, -1788, 0, 0, 850, 0, - -1788, 3301, 0, 0, 0, 0, 0, 0, 1235, -1788, - 0, 0, 1279, 1284, -1788, 0, 0, 0, 0, 0, - 0, 1410, 0, 0, 0, 552, 1001, 0, 0, 1001, - 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, - 2561, 0, 1629, 0, 85, 0, -1788, 0, 0, 0, - 0, 0, 0, 0, 3080, 0, 0, 0, 0, 0, - 0, 850, 0, 0, 0, 1334, -1788, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1587, 0, 1359, 0, 0, 0, 0, 0, - 1404, 0, 850, 1406, 0, 0, 1417, 1420, 1425, 1428, - 0, 0, 0, 0, 0, 0, 0, 2175, 0, 0, - 0, 0, 0, 0, 0, -1788, 0, 0, -1788, 0, - 0, 0, 0, 0, -1788, 0, 0, 0, 0, 0, - 0, 3199, 0, 0, 0, 0, 0, 1468, 1279, 0, - 0, 0, -2041, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3301, 2132, 0, 0, 1552, 553, - 0, 0, 0, 0, -1788, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1568, 0, 0, - 0, 1742, 0, 0, 0, 0, 0, -1788, 1578, 1579, - 1580, 0, 1584, 1588, 951, 951, 0, 3301, 951, 0, - 0, 1413, 0, 0, 0, 0, 1941, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, - 0, 0, 0, 0, 1650, 0, 0, 0, 0, 85, - 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1742, 1468, 1468, 0, 0, 852, 0, 3301, 0, -2041, - 0, 0, 0, 0, 0, 0, 1636, 1637, 1638, 1639, - 1640, 1641, 0, 0, 0, 553, 0, 0, 553, 0, - 0, 0, 0, -1788, 1971, 0, 1689, 0, 0, 0, - 1705, 1710, 0, -1788, 0, 951, 0, 0, 0, 0, - 0, 1107, 1107, 0, 0, 0, 0, 0, 0, 0, - 2156, 0, -1788, 0, -1788, -1788, 0, 85, 0, 85, - 0, 1412, 1412, 1412, 1412, 1412, 1412, 0, 0, 1412, - 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -1788, 0, 0, -1788, -1788, -1788, 1279, 0, 85, - 0, 0, 0, 0, 0, 0, 1279, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1279, 0, 1363, 1364, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, - 0, 553, 553, 553, 0, 1413, 1413, 1413, 1413, 1413, - 1413, 0, 0, 1413, 1413, 1413, 1413, 1413, 1413, 1413, - 1413, 1413, 1413, 1365, 1366, 0, 0, 1367, 1368, 0, - 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1888, 0, 0, - 0, 0, 0, 0, 0, 0, 717, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 1412, 1412, 0, 0, - 0, 0, 1369, 1370, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 0, 0, 0, 0, 1425, 0, 1425, - 1425, 0, 0, 718, 0, 0, 0, 0, 0, 1971, - 0, 0, 1107, 1107, 0, 0, 0, 0, 0, 719, - 0, 0, 0, 0, 0, 0, 0, 0, 1107, 0, - 0, 0, 0, 0, 0, 2430, 1371, 1372, 1373, 1374, - 1375, 1376, 1377, 1378, 0, 0, 1379, 1380, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1413, 1413, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 721, 0, - 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 724, 0, 0, 0, 0, 0, - 0, 0, 2018, 0, 0, 0, 0, 0, 0, 0, - 2021, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1381, - 1382, 553, 0, 0, 0, 0, 0, 725, 0, 0, - 0, 726, 0, 0, 1413, 0, 0, 0, 0, 2067, - 0, 0, 0, 0, 0, 2071, 2072, 2073, 2074, 2075, - 2076, 2077, 2078, 0, 0, 0, 0, 2087, 2088, 0, - 0, 0, 2099, 0, 0, 0, 2102, 0, 0, 2110, - 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 0, 0, - 2119, 0, 0, 0, 0, 1607, 0, 1107, 1608, 1279, - 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, - 0, 727, 0, 0, 0, 0, 0, 0, 2145, 0, - 0, 0, 0, 1616, 1383, 1384, 728, 0, 0, 0, - 0, 0, 0, 1618, 0, 0, 0, 0, 0, 0, - 1619, 0, 0, 0, 0, 0, 0, 0, 1385, 1386, - 0, 0, 1579, 1580, 0, 0, 0, 0, 0, 729, - 0, 0, 730, 0, 0, 0, 0, 1620, 1988, 0, - 0, 0, 1607, 731, 0, 1608, 732, 0, 0, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, - 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, - 1616, 0, 0, 0, 3207, 0, 0, 0, 734, 0, - 1618, 0, 2430, 1414, 0, 736, 0, 1619, 0, 0, - 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, - 0, 738, 0, 0, 0, 0, 0, 0, 0, 2267, - 0, 0, 0, 1279, 1620, 0, 2277, 2278, 0, 0, - 0, 0, 0, 0, 0, 1412, 1412, 0, 739, 0, - 0, 0, 0, 1621, 0, 0, 0, 0, 553, 0, - 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, - 1622, 0, 0, 0, 1279, 1623, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 553, - 0, 0, 0, 0, 0, 0, 1334, 2342, 1624, 1625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 553, 553, 0, 1626, 0, 0, 0, 0, 0, 0, - 0, 0, 1644, 0, 0, 0, 2364, 2365, 0, 2366, - 1621, 0, 0, 0, 0, 553, 0, 0, 0, 1413, - 1413, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 0, 1627, 1623, 0, 1628, 0, 0, 0, 2392, 2393, - -45, 0, 2145, 0, 0, 1644, 0, 0, 1629, 0, - 0, 1630, 0, 0, 0, 1624, 1625, 553, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 1626, 2420, 2, 0, 3, 4, 2425, 0, 0, 1414, - 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 6, 1468, 0, 1279, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 1627, 0, - 0, 1628, 0, 0, 0, 8, 1412, 0, 0, 0, - 0, 0, 0, 0, 9, 1629, 10, 0, 1630, 0, - 1644, 2458, 0, 0, 0, 0, 0, 0, 11, 0, - 12, 3022, 0, 0, 0, 0, 0, 0, 1631, 0, - 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 14, 15, 16, 0, - 2477, 0, 0, 0, 1644, 2480, 2481, 17, 0, 1644, - 0, 0, 0, 18, 0, 3047, 0, 0, 0, 0, - 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, - 1413, 23, 0, 0, 0, 0, 0, 0, 0, 2502, - 0, 0, 2505, 0, 2507, 1631, 0, 0, 0, 1644, - 0, 0, 0, 0, 0, 1413, 0, 24, 0, 0, - 2511, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 553, 0, 0, 25, 1644, 1632, 0, 0, 1633, 1634, - 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, - 0, 0, 0, 0, 0, 1412, 0, 0, 0, 26, - 1689, 2465, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1710, 2117, 1644, - 0, 1644, 0, 1414, 1414, 0, 1916, 0, 0, 1414, - 0, 0, 1644, 0, 0, 1644, 1107, 0, 0, 0, - 1644, 0, 0, 1644, 0, 2565, 0, 0, 0, 0, - 0, 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 0, 0, 0, 0, 0, - 0, 0, 1891, 0, 27, 28, 29, 0, 0, 0, - 0, 0, 30, 1644, 0, 31, 0, 0, 0, 1413, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1580, 0, 0, 0, 0, 0, 1279, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1412, 0, 0, 0, 34, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, - 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 0, 2670, 0, 0, 1644, 0, 0, - 0, 0, 38, 0, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1644, 1644, 1644, 40, 0, 0, 1644, - 0, 0, 0, 1644, 0, 0, 0, 0, 0, 41, - 0, 0, 42, 0, 0, 43, 0, 0, 0, 0, - 44, 0, 0, 0, 0, 0, 0, 0, 0, 1413, - 0, 0, 0, 0, 0, 0, 45, 0, 0, 1363, - 1364, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 0, 0, 0, 0, 1644, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, -45, 0, 0, - 1365, 1366, 0, 0, 1367, 1368, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2750, 0, 0, 0, 0, - 0, 2752, 2021, 0, 1644, 0, 0, 0, 0, 0, - 0, 0, 2758, 0, 0, 0, 0, 0, 0, 0, - 1644, 0, 0, 2767, 0, 1644, 2770, 0, 2772, 0, - 0, 0, 0, 0, 0, 0, 2776, 0, 0, 0, - 0, 0, 1916, 0, 2783, 2784, 3318, 0, 0, 0, - 0, 2791, 0, 0, 0, 0, 0, 0, 0, 1369, - 1370, 0, 0, 0, 0, 0, 2800, 0, 0, 1606, - 0, 0, 0, 0, 1607, 0, 2815, 1608, 0, 0, - 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, - 0, 0, 0, 0, 0, 0, 1107, 0, 0, 0, - 0, 0, 1616, 0, 0, 0, 1617, 0, 0, 0, - 0, 0, 1618, 0, 0, 0, 0, 0, 0, 1619, - 0, 0, 0, 1371, 1372, 1373, 1374, 1375, 1376, 1377, - 1378, 0, 0, 1379, 1380, 0, 0, 0, 0, 0, - 1413, 0, 0, 0, 0, 0, 1620, 0, 0, 0, - 0, 0, 0, 2267, 0, 2267, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, - 0, 1916, 1916, 0, 1414, 1414, 1414, 1414, 1414, 1414, - 0, 0, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, - 1414, 1414, 1916, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1621, 0, 0, 0, 1381, 1382, 0, 0, - 3017, 3018, 0, 0, 0, 0, 0, 0, 0, 1622, - 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3042, 0, 1624, 1625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3046, - 0, 0, 1626, 0, 3048, 3049, 0, 0, 0, 3050, - 0, 0, 0, 0, 3053, 0, 0, 3056, 3057, 0, - 0, 0, 2267, 1279, 0, 0, 3065, 0, 0, 0, - 0, 0, 0, 1644, 0, 0, 1644, 1107, 0, 0, - 1627, 1383, 1384, 1628, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, - 1630, 0, 0, 0, 0, 1385, 1386, 1607, 0, 0, - 1608, 0, 0, 0, 1609, 1610, 0, 0, 1613, 1614, - 1615, 3106, 1644, 0, 0, 0, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 0, 1616, 0, 0, 0, 1414, - 1414, 0, 1644, 1644, 0, 1618, 0, 0, 3125, 0, - 0, 0, 1619, 0, 1644, 0, 0, 1644, 0, 0, - 0, 0, 0, 0, 0, 1644, 1644, 1644, 1644, 1644, - 1644, 1644, 1644, 1644, 1644, 0, 0, 0, 0, 1620, - 1607, 0, 0, 1608, 0, 0, 0, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 1631, 0, 0, - 1644, 0, 0, 0, 0, 0, 0, 0, 1616, 0, - 0, 0, 2762, 0, 0, 0, 0, 0, 1618, 0, - 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1620, 1414, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1588, 0, 0, 0, 0, - 0, 0, 1622, 0, 0, 0, 0, 1623, 0, 0, - 0, 0, 0, 0, 1632, 1279, 0, 1633, 1634, 1635, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 2477, - 1624, 1625, 1644, 0, 0, 0, 0, 0, 0, 0, - 3220, 3221, 1644, 1644, 3222, 1626, 1580, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3240, 0, 0, 0, 1622, 0, 0, 0, 0, - 1623, 0, 0, 1627, 0, 0, 1628, 0, 0, 0, - 0, 0, 0, 0, 0, 3252, 0, 0, 0, 0, - 1629, 0, 0, 1624, 1625, 0, 0, 1644, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1626, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1644, - 1644, 1644, 0, 0, 1916, 1916, 1916, 1916, 1916, 1916, - 0, 0, 0, 1916, 1916, 1916, 1916, 1916, 1916, 1916, - 1916, 1916, 1916, 0, 0, 0, 1627, 1644, 1644, 1628, - 0, 0, 0, 0, 0, 3297, 0, 0, 0, 0, - 0, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 3017, 1644, 1607, 0, 3315, 1608, - 1644, 0, 1107, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 1631, 0, 0, 0, 3325, 0, 0, 0, 0, 2267, - 0, 2267, 0, 0, 1616, 0, 0, 0, 717, 1107, - 0, 0, 0, 1644, 1618, 0, 0, 0, 0, 0, - 0, 1619, 0, 0, 0, 0, 0, 3350, 0, 0, - 0, 0, 1644, 0, 0, 1644, 1644, 0, 0, 0, - 0, 0, 0, 1916, 1916, 0, 0, 0, 1620, 0, - 0, 0, 0, 0, 0, 0, 0, 1644, 1414, 1414, - 1644, 0, 1644, 1631, 0, 718, 1644, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3376, 0, 0, 0, - 0, 719, 0, 0, 0, 0, 3017, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1632, 0, 1107, - 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 3420, 0, 0, 0, 0, 0, 0, 0, 0, - 721, 0, 0, 0, 1621, 0, 0, 0, 0, 0, - 0, 0, 722, 0, 0, 0, 0, 723, 0, 0, - 0, 1622, 0, 0, 0, 0, 1623, 0, 0, 0, - 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 0, 0, 0, 724, 2058, 0, 1624, - 1625, 0, 0, 0, 0, 0, 0, 0, 1607, 0, - 0, 1608, 0, 0, 1626, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3475, 3475, 3475, 0, 1644, 1616, 0, 0, 725, - 0, 0, 0, 726, 0, 0, 1618, 0, 0, 0, - 0, 0, 1627, 1619, 0, 1628, 0, 0, 3475, 1414, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, - 0, 0, 1630, 0, 0, 0, 0, 0, 0, 0, - 1620, 0, 1607, 0, 0, 1608, 0, 0, 0, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 3475, - 0, 0, 0, 0, 0, 0, 0, 539, 0, 0, - 1616, 0, 0, 727, 0, 1644, 0, 1644, 0, 0, - 1618, 0, 0, 1644, 0, 0, 0, 1619, 728, 0, - 0, 0, 1644, 0, 0, 1644, 0, 1644, 0, 0, - 0, 1644, 0, 0, 1916, 1916, 0, 0, 1644, 1644, - 0, 0, 0, 0, 1620, 0, 1644, 0, 0, 0, - 0, 729, 0, 0, 730, 1644, 0, 0, 0, 1631, - 0, 0, 0, 0, 1607, 731, 1621, 1608, 732, 0, - 1644, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, - 0, 0, 0, 1622, 0, 0, 733, 0, 1623, 0, - 0, 0, 1616, 0, 0, 0, 0, 0, 0, 0, - 734, 0, 1618, 0, 0, 0, 735, 736, 1414, 1619, - 0, 1624, 1625, 0, 0, 0, 0, 737, 0, 0, - 0, 0, 0, 738, 0, 0, 1626, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1620, 0, 0, 0, - 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 739, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 0, 0, 1623, 0, 1627, 0, 1632, 1628, 0, 1633, - 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, - 0, 1629, 0, 2058, 1630, 1624, 1625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1626, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1621, 0, 0, 0, 0, 0, 1627, 0, - 0, 1628, 0, 0, 0, 0, 0, 1916, 1414, 1622, - 0, 0, 0, 0, 1623, 1629, 0, 0, 1630, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1644, 1644, 0, 0, 0, 1624, 1625, 0, - 0, 1631, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1626, 0, 0, 0, 0, 1644, 0, 0, - 0, 1644, 0, 1644, 1644, 1644, 0, 0, 1644, 0, - 0, 1644, 1644, 0, 0, 0, 0, 0, 0, 0, - 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1627, 0, 0, 1628, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, - 1630, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 1644, 0, 0, 0, 0, 0, 1916, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1644, 0, 0, 0, 0, 0, 0, 0, 1632, 0, - 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, - 1641, 0, 0, 0, 0, 2363, 0, 0, 0, 0, - 0, 0, 0, 1644, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1916, 0, 0, 0, 0, 0, 1631, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 1644, 1644, 1644, 0, 2462, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1644, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1644, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1644, 0, 1632, 0, 0, 1633, 1634, 1635, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 0, - 1644, 2486, 0, 0, 0, 0, 0, 0, 0, 0, - 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1644, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1644, 0, 116, 1042, 815, 1043, 1044, 1045, 1046, - 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 0, 125, 126, 127, 0, 0, 0, 0, 0, 1048, - 0, 0, 128, 129, 130, 1644, 131, 132, 133, 134, - 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, - 144, 145, 146, 147, 148, 1052, 785, 149, 150, 151, - 152, 1053, 1054, 155, 0, 156, 157, 158, 159, 786, - 0, 787, 0, 1055, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, - 1644, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, - 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, - 203, 204, 0, 0, 205, 206, 1059, 208, 209, 0, - 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, - 218, 219, 1060, 221, 222, 223, 224, 225, 788, 1061, - 227, 0, 228, 229, 1062, 231, 0, 232, 0, 233, - 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, - 0, 1063, 1064, 244, 245, 0, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 0, 258, - 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, - 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 287, 288, 289, 290, 0, 291, 292, - 293, 294, 295, 296, 297, 298, 1068, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 1069, 321, 1070, - 323, 324, 325, 326, 1071, 327, 328, 329, 330, 1072, - 790, 332, 1073, 334, 335, 336, 0, 337, 338, 0, - 0, 1074, 340, 341, 0, 0, 342, 343, 344, 345, - 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, - 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, - 371, 372, 373, 374, 375, 0, 376, 377, 378, 1075, - 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, - 398, 399, 400, 401, 402, 1076, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, - 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 0, 426, 427, 428, 1077, 430, 0, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, - 451, 452, 453, 454, 0, 455, 1078, 1079, 0, 0, - 458, 459, 796, 461, 797, 1080, 463, 464, 798, 466, - 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, - 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 1081, 0, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 514, 515, 1082, 0, - 0, 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, - 0, 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, - 1089, 1090, 1091, 0, 2617, 116, 1042, 815, 1043, 1044, - 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 1048, 0, 0, 128, 129, 130, 0, 131, 132, - 133, 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, - 0, 143, 144, 145, 146, 147, 148, 1052, 785, 149, - 150, 151, 152, 1053, 1054, 155, 0, 156, 157, 158, - 159, 786, 0, 787, 0, 1055, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 1060, 221, 222, 223, 224, 225, - 788, 1061, 227, 0, 228, 229, 1062, 231, 0, 232, - 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, - 0, 241, 0, 1063, 1064, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 266, 267, 268, 269, 270, 271, 272, 1065, 1066, 0, - 1067, 0, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 288, 289, 290, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 1068, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 1069, - 321, 1070, 323, 324, 325, 326, 1071, 327, 328, 329, - 330, 1072, 790, 332, 1073, 334, 335, 336, 0, 337, - 338, 0, 0, 1074, 340, 341, 0, 0, 342, 343, - 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 1075, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 399, 400, 401, 402, 1076, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 426, 427, 428, 1077, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 795, 0, 0, 446, 447, 0, 448, - 449, 450, 451, 452, 453, 454, 0, 455, 1078, 1079, - 0, 0, 458, 459, 796, 461, 797, 1080, 463, 464, - 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 1081, 0, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, 1085, - 0, 0, 0, 0, 1086, 0, 1087, 0, 0, 0, - 0, 1088, 1089, 1090, 1091, 0, 3223, 116, 1042, 815, - 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, - 131, 132, 133, 134, 135, 136, 137, 138, 1049, 140, - 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, - 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, - 157, 158, 159, 786, 0, 787, 0, 1055, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, - 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, - 14, 15, 201, 202, 203, 204, 0, 0, 205, 206, - 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, - 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, - 0, 232, 0, 233, 234, 23, 235, 236, 237, 238, - 239, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, - 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, - 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, - 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, - 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, - 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 27, 28, - 29, 0, 360, 361, 793, 363, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 399, 400, 401, 402, 1076, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 34, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 36, 426, 427, 428, 1077, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 795, 38, 0, 446, 447, - 39, 448, 449, 450, 451, 452, 453, 454, 0, 455, - 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, - 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 41, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 799, 1081, 0, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 45, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 1082, 0, 46, 0, 0, 0, 0, 1083, - 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 3197, - 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, 815, - 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, - 131, 132, 133, 134, 135, 136, 137, 138, 1049, 140, - 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, - 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, - 157, 158, 159, 786, 0, 787, 0, 1055, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, - 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, - 14, 15, 201, 202, 203, 204, 0, 0, 205, 206, - 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, - 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, - 0, 232, 0, 233, 234, 23, 235, 236, 237, 238, - 239, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, - 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, - 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, - 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, - 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, - 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 27, 28, - 29, 0, 360, 361, 793, 363, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 399, 400, 401, 402, 1076, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 34, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 36, 426, 427, 428, 1077, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 795, 38, 0, 446, 447, - 39, 448, 449, 450, 451, 452, 453, 454, 0, 455, - 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, - 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 41, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 799, 1081, 0, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 45, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 1082, 0, 46, 0, 0, 0, 0, 1083, - 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, - 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, 815, - 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, - 131, 132, 133, 134, 135, 136, 137, 138, 1049, 140, - 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, - 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, - 157, 158, 159, 786, 0, 787, 0, 1055, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, - 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, - 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, - 0, 232, 0, 233, 234, 23, 235, 236, 237, 238, - 239, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, - 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, - 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, - 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, - 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, - 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 27, 28, - 29, 0, 360, 361, 793, 363, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 399, 400, 401, 402, 1076, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 34, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 426, 427, 428, 1077, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 795, 0, 0, 446, 447, - 39, 448, 449, 450, 451, 452, 453, 454, 0, 455, - 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, - 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 41, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 799, 1081, 0, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 45, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 1082, 0, 46, 0, 0, 0, 0, 1083, - 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, - 0, 0, 0, 1088, 1089, 1090, 1091, 1240, 1042, 815, - 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 1241, 125, 126, 127, 0, 0, - 0, 1242, 0, 1048, 0, 0, 1243, 129, 130, 0, - 131, 132, 133, 1244, 135, 136, 137, 138, 1049, 1245, - 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, - 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, - 157, 158, 159, 786, 0, 1246, 0, 1247, 163, 164, - 165, 166, 167, 1248, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 1249, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, - 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 1250, 0, 205, 206, - 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, - 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, - 0, 232, 0, 233, 1251, 0, 1252, 236, 237, 1253, - 1254, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 1255, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 1256, 267, 268, 269, 270, 271, 272, 1065, - 1066, 0, 1067, 0, 276, 1257, 1258, 279, 1259, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 1260, 289, - 1261, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 1262, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 1069, 1263, 1070, 323, 324, 325, 326, 1071, 327, - 328, 1264, 330, 1072, 790, 332, 1073, 334, 335, 336, - 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, - 342, 343, 344, 1265, 346, 1266, 792, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 793, 1267, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 1268, 400, 401, 402, 1076, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 1269, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 1270, 427, 428, 1077, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 1271, 444, 795, 0, 0, 446, 447, - 0, 448, 1272, 450, 451, 452, 453, 454, 0, 455, - 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, - 463, 464, 1273, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 1081, 1274, 485, 1275, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 1082, 0, 0, 0, 0, 0, 0, 1083, - 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 1276, - 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, 815, - 1043, 1044, 0, 1046, 1047, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, - 131, 132, 133, 134, 135, 136, 137, 138, 1049, 140, - 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, - 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, - 157, 158, 159, 786, 0, 787, 0, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 14, 15, 201, 202, 203, 204, 0, 0, 205, 206, - 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, - 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, - 0, 232, 0, 233, 234, 23, 235, 236, 237, 238, - 239, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, - 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, - 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 1069, 321, 1070, 323, 324, 325, 326, 0, 327, - 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 27, 28, - 29, 0, 360, 361, 793, 363, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 399, 400, 401, 402, 1076, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 34, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 36, 426, 427, 428, 1077, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 795, 38, 0, 446, 447, - 39, 448, 449, 450, 451, 452, 453, 454, 0, 455, - 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, - 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 41, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 799, 1081, 0, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 45, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 0, 0, 46, 0, 0, 0, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 1086, 0, 1087, 0, - 0, 0, 0, 1088, 1089, 1090, 1091, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 1421, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 1422, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 1423, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 1424, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 1240, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 1242, 0, 1048, 0, 0, 1243, 129, 130, - 0, 131, 132, 133, 1244, 135, 136, 137, 138, 1049, - 1245, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 1246, 0, 1247, 163, - 164, 165, 166, 167, 1248, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 1249, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 1251, 0, 1252, 236, 237, - 1253, 1254, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 1255, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 1256, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 1257, 1258, 279, 1259, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 1260, - 289, 1261, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1262, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 1263, 1070, 323, 324, 325, 326, 1071, - 327, 328, 1264, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 1265, 346, 1266, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 1267, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 1268, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 1269, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 1270, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 1271, 444, 795, 0, 0, 446, - 447, 0, 448, 1272, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 1273, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 2272, 485, 1275, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 1240, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 1242, 0, 1048, 0, 0, 1243, 129, 130, - 0, 131, 132, 133, 1244, 135, 136, 137, 138, 1049, - 1245, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 1246, 0, 1247, 163, - 164, 165, 166, 167, 1248, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 1249, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 1251, 0, 1252, 236, 237, - 1253, 1254, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 1255, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 1256, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 1257, 1258, 279, 1259, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 1260, - 289, 1261, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1262, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 1263, 1070, 323, 324, 325, 326, 1071, - 327, 328, 1264, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 1265, 346, 1266, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 1267, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 1268, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 1269, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 1270, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 1271, 444, 795, 0, 0, 446, - 447, 0, 448, 1272, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 1273, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 1275, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 2326, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, -1106, 125, 126, 127, 0, - 0, 0, 0, -1106, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, -1106, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 1240, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 1242, 0, 1048, 0, 0, 1243, 129, 130, - 0, 131, 132, 133, 1244, 135, 136, 137, 138, 1049, - 1245, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 1246, 0, 1247, 163, - 164, 165, 166, 167, 1248, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 1249, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 1251, 0, 1252, 236, 237, - 1253, 1254, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 1255, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 1256, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 1257, 1258, 279, 1259, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 1260, - 289, 1261, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1262, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 1263, 1070, 323, 324, 325, 326, 1071, - 327, 328, 1264, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 1265, 346, 1266, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 1267, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 1268, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 1269, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 1270, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 1271, 444, 795, 0, 0, 446, - 447, 0, 448, 1272, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 1273, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 1275, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 3062, 0, 0, 0, 1088, 1089, 1090, 1091, 1240, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 1242, 0, 1048, 0, 0, 1243, 129, 130, - 0, 131, 132, 133, 1244, 135, 136, 137, 138, 1049, - 1245, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 1246, 0, 1247, 163, - 164, 165, 166, 167, 1248, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 1249, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 1251, 0, 1252, 236, 237, - 1253, 1254, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 1255, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 1256, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 1257, 1258, 279, 1259, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 1260, - 289, 1261, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1262, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 1263, 1070, 323, 324, 325, 326, 1071, - 327, 328, 1264, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 1265, 346, 1266, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 1267, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 1268, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 1269, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 1270, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 1271, 444, 795, 0, 0, 446, - 447, 0, 448, 1272, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 1273, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 1275, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 1686, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1701, - 815, 1043, 1044, 1045, 1702, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 1703, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 1422, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 2046, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 2669, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 2790, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 3005, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 3006, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 3007, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 3008, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 3009, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 3157, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 3296, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1706, 1707, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 2183, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 2266, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 2476, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 3060, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 3006, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 3007, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 3008, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 3009, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 3472, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 3473, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 3474, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 3473, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 3474, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 0, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 0, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 0, 0, 0, 0, 0, 0, 0, - 1408, 1409, 0, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, -2041, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 3473, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, -2041, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, -2041, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 0, 0, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, -2041, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 0, - 327, 328, 0, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, -2041, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 3474, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, -2041, 0, 0, 0, 0, 0, 0, - 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 0, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 0, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 0, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 339, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 2169, 2170, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 0, 0, 0, 0, 0, 0, 0, - 2171, 2172, 0, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 0, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 0, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 0, 0, 0, 0, 0, 0, 0, - 1408, 1409, 0, 0, 0, 0, 0, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 116, 1042, - 815, 1043, 1044, 0, 1046, 1047, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, - 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, - 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, - 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, - 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, - 156, 157, 158, 159, 786, 0, 787, 0, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, - 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, - 1057, 193, 0, 194, 0, 195, 196, 197, 198, 199, - 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, - 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, - 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, - 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, - 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, - 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, - 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, - 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, - 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, - 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, - 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 0, - 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, - 336, 0, 337, 338, 0, 0, 339, 340, 341, 0, - 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, - 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, - 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, - 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, - 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, - 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, - 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, - 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, - 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, - 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, - 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 514, 515, 0, 0, 0, 0, 0, 0, 116, - 1042, 815, 1043, 1044, 1045, 1046, 1047, 1086, 0, 1087, - 0, 0, 0, 0, 1088, 1089, 1090, 1091, 117, 118, - 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, - 0, 0, 0, 0, 0, 1048, 0, 0, 128, 129, - 130, 0, 131, 132, 133, 134, 135, 136, 137, 0, - 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, 147, - 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, - 0, 156, 157, 158, 159, 786, 0, 787, 0, 1055, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 0, - 172, 173, 174, 175, 176, 177, 0, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 1056, 190, - 191, 1057, 193, 1058, 194, 0, 195, 196, 197, 198, - 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, - 205, 206, 1059, 208, 209, 0, 210, 211, 212, 0, - 213, 0, 215, 0, 216, 217, 218, 219, 1060, 221, - 222, 223, 224, 225, 788, 1061, 227, 0, 228, 229, - 1062, 231, 0, 232, 0, 233, 234, 0, 235, 236, - 237, 238, 0, 240, 0, 241, 0, 1063, 1064, 244, - 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, - 263, 264, 0, 265, 266, 267, 268, 269, 270, 271, - 272, 1065, 1066, 0, 1067, 0, 276, 0, 0, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 287, - 288, 289, 0, 0, 291, 292, 293, 294, 295, 296, - 297, 298, 1068, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 1069, 321, 1070, 323, 324, 325, 326, - 0, 327, 328, 0, 330, 1072, 790, 332, 1073, 334, - 335, 336, 0, 337, 338, 0, 0, 1074, 340, 341, - 0, 0, 342, 343, 344, 345, 346, 347, 792, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 0, 0, 0, 0, 360, 361, 793, 363, 364, 365, - 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, - 375, 0, 376, 377, 378, 1075, 380, 381, 382, 383, - 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 0, 397, 398, 399, 400, 401, - 402, 1076, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, - 1077, 430, 0, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 795, 0, 0, - 446, 447, 0, 448, 449, 450, 451, 452, 453, 454, - 0, 455, 1078, 1079, 0, 0, 458, 459, 796, 461, - 797, 1080, 463, 464, 798, 466, 467, 468, 469, 470, - 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 1081, 0, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 0, 0, - 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 0, 0, 0, 0, 0, 0, - 0, 1083, 1084, 1085, 0, 964, 1339, 815, 1086, 0, - 1087, 1046, 0, 0, 0, 1088, 1089, 1090, 1091, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 560, - 0, 0, 0, 0, 565, 129, 130, 0, 131, 132, - 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 576, 577, 155, 0, 156, 157, 158, - 159, 579, 0, 581, 0, 583, 163, 164, 165, 166, - 167, 584, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 587, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 589, 190, 191, 590, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, - 601, 1340, 227, 0, 228, 229, 604, 231, 0, 232, - 0, 233, 607, 0, 609, 236, 237, 610, 611, 240, - 0, 241, 0, 614, 615, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 617, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 620, 621, 268, 269, 270, 271, 272, 622, 623, 0, - 625, 0, 276, 627, 628, 279, 629, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 632, 289, 633, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, - 637, 638, 323, 324, 325, 639, 0, 327, 328, 641, - 330, 0, 643, 332, 644, 334, 335, 336, 0, 337, - 338, 1341, 0, 339, 340, 341, 0, 0, 342, 343, - 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 663, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 666, 400, 401, 402, 667, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 669, 417, 418, 419, 420, 421, 422, 670, - 424, 425, 0, 672, 427, 428, 673, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 675, 444, 676, 0, 0, 446, 447, 0, 448, - 680, 450, 451, 452, 453, 454, 0, 455, 682, 683, - 0, 0, 458, 459, 686, 461, 687, 1342, 463, 464, - 689, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 694, 695, 0, 485, 697, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, - 0, 0, 0, 0, 0, 0, 0, 1343, 1344, 2344, - 0, 116, 1042, 815, 1043, 1044, 2345, 1046, 0, 0, - 0, 0, 0, 0, 1091, 0, 0, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, - 126, 127, 0, 0, 0, 0, 0, 1048, 0, 0, - 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, - 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, - 146, 147, 148, 1052, 0, 149, 150, 151, 152, 1053, - 1054, 155, 0, 156, 157, 158, 159, 160, 0, 161, - 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 1056, 190, 191, 1057, 193, 0, 194, 0, 195, 196, - 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, - 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, - 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, - 1060, 221, 222, 223, 224, 225, 226, 1061, 227, 0, - 228, 229, 1062, 231, 0, 232, 0, 233, 234, 0, - 235, 236, 237, 238, 239, 240, 0, 241, 3026, 1063, - 1064, 244, 245, 0, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, - 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, - 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 1069, 321, 1070, 323, 324, - 325, 326, 0, 327, 328, 329, 330, 1072, 331, 332, - 1073, 334, 335, 336, 0, 337, 338, 0, 0, 339, - 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 0, 0, 0, 0, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, - 373, 374, 375, 0, 376, 377, 378, 1075, 380, 381, - 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, - 427, 428, 1077, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, - 453, 454, 0, 455, 1078, 1079, 0, 0, 458, 459, - 460, 461, 462, 1080, 463, 464, 465, 466, 467, 468, - 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 1081, - 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 0, 0, 0, 0, - 116, 1042, 815, 1043, 1044, 0, 1046, 0, 0, 0, - 1086, 0, 2719, 0, 0, 0, 0, 1088, 1089, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 1048, 0, 0, 128, - 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, - 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, - 147, 148, 1052, 0, 149, 150, 151, 152, 1053, 1054, - 155, 0, 156, 157, 158, 159, 160, 0, 161, 0, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 1056, - 190, 191, 1057, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 1060, - 221, 222, 223, 224, 225, 226, 1061, 227, 0, 228, - 229, 1062, 231, 0, 232, 0, 233, 234, 0, 235, - 236, 237, 238, 239, 240, 0, 241, 0, 1063, 1064, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, - 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 1069, 321, 1070, 323, 324, 325, - 326, 0, 327, 328, 329, 330, 1072, 331, 332, 1073, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 1075, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 426, 427, - 428, 1077, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 0, - 0, 446, 447, 0, 448, 449, 450, 451, 452, 453, - 454, 0, 455, 1078, 1079, 0, 0, 458, 459, 460, - 461, 462, 1080, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 1081, 0, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 0, 0, 0, 0, 523, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1086, - 0, 2719, 0, 0, 0, 0, 1088, 1089, 117, 118, - 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, - 0, 0, 0, 0, 0, 0, 1000, 0, 0, 129, - 130, 0, 131, 132, 133, 0, 135, 136, 137, 138, - 139, 0, 141, 142, 0, 143, 144, 145, 146, 147, - 148, 0, 0, 149, 150, 151, 152, 153, 154, 155, - 0, 156, 157, 158, 159, 160, 0, 0, 0, 162, - 163, 164, 165, 166, 167, 0, 169, 170, 171, 0, - 172, 173, 174, 175, 176, 177, 0, 0, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 0, 194, 0, 195, 196, 197, 198, - 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, - 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, - 213, 214, 215, -524, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 0, 227, -524, 228, 229, - 230, 231, -524, 232, 0, 233, 0, 0, 0, 236, - 237, 524, 0, 240, 0, 241, 0, 242, 243, 244, - 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, - 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, - 263, 264, 0, 265, 0, 267, 268, 269, 270, 271, - 272, 273, 274, -524, 275, 0, 276, 0, 0, 279, - 0, 281, 282, 283, 284, 285, 286, 0, 0, 287, - 0, 289, 0, -524, 291, 292, 293, 294, 295, 296, - 297, 298, 525, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 0, 322, 323, 324, 325, 326, - 0, 327, 328, 0, 330, 0, 331, 332, 333, 334, - 335, 336, -524, 337, 338, 0, 0, 339, 340, 341, - 0, -524, 342, 343, 344, 0, 346, 0, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 0, 0, 0, 0, 360, 361, 362, 0, 364, 365, - 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, - 375, 0, 376, 377, 378, 379, 380, 381, 382, 383, - 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 0, 397, 398, 0, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, - 429, 430, 0, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 526, 444, 445, 0, 0, - 446, 447, 0, 448, 0, 450, 451, 452, 453, 454, - 0, 455, 456, 457, 0, 0, 458, 459, 460, 461, - 462, 0, 463, 464, 465, 466, 467, 468, 469, 470, - -524, 0, 471, 472, 473, 0, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 0, 485, - 0, 487, 488, 489, 490, 491, 492, 493, 0, 0, - 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 514, 515, 523, 0, 549, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1157, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, - 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, - 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, - 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, - 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, - 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, - 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, - 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, - 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, - 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, - 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, - 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, - 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, - 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, - 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, - 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, - 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, - 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, - 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, - 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, - 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, - 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, - 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, - 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, - 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, - 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, - 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, - 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, - 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 964, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2429, 3212, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, - 3, 4, 0, 560, 0, 0, 0, 0, 565, 129, - 130, 0, 131, 132, 133, 567, 135, 136, 137, 568, - 569, 570, 571, 572, 0, 143, 144, 145, 146, 147, - 148, 0, 0, 149, 150, 151, 152, 576, 577, 155, - 0, 156, 157, 158, 159, 579, 0, 581, 0, 583, - 163, 164, 165, 166, 167, 584, 169, 170, 171, 0, - 172, 173, 174, 175, 176, 177, 0, 587, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 589, 190, - 191, 590, 193, 0, 194, 0, 195, 196, 197, 198, - 199, 200, 14, 15, 201, 202, 203, 204, 0, 0, - 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, - 213, 214, 215, 0, 216, 217, 218, 219, 600, 221, - 222, 223, 224, 225, 601, 0, 227, 0, 228, 229, - 604, 231, 0, 232, 0, 233, 607, 23, 609, 236, - 237, 610, 611, 240, 0, 241, 0, 614, 615, 244, - 245, 0, 246, 247, 248, 249, 250, 251, 252, 617, - 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, - 263, 264, 0, 265, 620, 621, 268, 269, 270, 271, - 272, 622, 623, 0, 625, 0, 276, 627, 628, 279, - 629, 281, 282, 283, 284, 285, 286, 0, 0, 287, - 632, 289, 633, 0, 291, 292, 293, 294, 295, 296, - 297, 298, 635, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 636, 637, 638, 323, 324, 325, 639, - 0, 327, 328, 641, 330, 0, 643, 332, 644, 334, - 335, 336, 0, 337, 338, 0, 0, 339, 340, 341, - 0, 0, 342, 343, 650, 651, 346, 652, 653, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 27, 28, 29, 0, 360, 361, 658, 659, 364, 365, - 660, 367, 368, 369, 0, 370, 371, 372, 373, 374, - 375, 0, 376, 377, 378, 663, 380, 381, 382, 383, - 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 0, 397, 398, 666, 400, 401, - 402, 667, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 34, 669, 417, 418, 419, - 420, 421, 422, 670, 424, 425, 36, 672, 427, 428, - 673, 430, 0, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 675, 444, 676, 38, 0, - 446, 447, 39, 448, 680, 450, 451, 452, 453, 454, - 0, 455, 682, 683, 0, 0, 458, 459, 686, 461, - 687, 0, 463, 464, 689, 466, 467, 468, 469, 470, - 0, 0, 471, 472, 473, 41, 474, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 965, 695, 0, 485, - 697, 487, 488, 489, 490, 491, 492, 493, 0, 0, - 494, 0, 45, 495, 496, 497, 498, 499, 500, 702, - 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, - 512, 513, 514, 515, 0, 116, 46, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 129, 130, 0, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 785, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 786, 0, 787, 0, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 14, 15, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 788, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 234, 23, 235, 236, 237, 238, 239, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 789, 0, 287, 288, 289, 290, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 330, 0, 790, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 791, 339, 340, 341, 0, 0, 342, 343, - 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 27, 28, 29, 0, - 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 399, 400, 401, 402, 403, 794, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 34, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 36, 426, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 795, 38, 0, 446, 447, 39, 448, - 449, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 796, 461, 797, 0, 463, 464, - 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 41, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 799, 484, 0, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 45, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 0, 116, 46, 549, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, - 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 0, 143, 144, 145, - 146, 147, 148, 0, 785, 149, 150, 151, 152, 153, - 154, 155, 0, 156, 157, 158, 159, 786, 0, 787, - 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, - 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, - 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, - 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 788, 0, 227, 0, - 228, 229, 230, 231, 0, 232, 0, 233, 234, 0, - 235, 236, 237, 238, 239, 240, 0, 241, 0, 242, - 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, - 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 0, 275, 0, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 789, - 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 330, 0, 790, 332, - 333, 334, 335, 336, 0, 337, 338, 0, 791, 339, - 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, - 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 0, 0, 0, 0, 360, 361, 793, 363, - 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, - 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, - 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, - 400, 401, 402, 403, 794, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, - 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, - 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, - 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, - 796, 461, 797, 0, 463, 464, 798, 466, 467, 468, - 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 799, 484, - 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 800, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 129, 130, 0, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 0, 143, 144, 145, 146, 147, 148, 0, 785, - 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, - 158, 159, 786, 0, 787, 0, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, - 175, 176, 177, 0, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, - 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, - 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, - 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 788, 0, 227, 0, 228, 229, 230, 231, 0, - 232, 0, 233, 234, 0, 235, 236, 237, 238, 239, - 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 0, 275, 0, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 287, 288, 289, 290, - 0, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 0, 327, 328, - 329, 330, 0, 790, 332, 333, 334, 335, 336, 0, - 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, - 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, - 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, - 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, - 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 0, 397, 398, 399, 400, 401, 402, 403, 794, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 426, 427, 428, 429, 430, 0, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, - 448, 449, 450, 451, 452, 453, 454, 0, 455, 456, - 457, 0, 0, 458, 459, 796, 461, 797, 0, 463, - 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, - 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 483, 484, 0, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, - 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 0, 143, 144, 145, - 146, 147, 148, 0, 785, 149, 150, 151, 152, 153, - 154, 155, 0, 156, 157, 158, 159, 786, 0, 787, - 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, - 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, - 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, - 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 788, 0, 227, 0, - 228, 229, 230, 231, 0, 232, 0, 233, 234, 0, - 235, 236, 237, 238, 239, 240, 0, 241, 0, 242, - 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, - 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 0, 275, 0, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 0, 327, 328, 329, 330, 0, 790, 332, - 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, - 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, - 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 0, 0, 0, 0, 360, 361, 793, 363, - 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, - 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, - 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, - 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, - 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, - 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, - 796, 461, 797, 0, 463, 464, 798, 466, 467, 468, - 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3300, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, - 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, - 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, - 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, - 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, - 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, - 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 0, 194, 0, 195, 196, 197, 198, 199, 200, 14, - 15, 201, 202, 203, 204, 0, 0, 205, 206, 207, - 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, - 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, - 232, 0, 233, 0, 23, 0, 236, 237, 524, 0, - 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, - 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, - 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, - 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, - 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, - 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, - 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, - 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 27, 28, 29, - 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, - 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, - 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 34, 0, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 36, 0, 427, 428, 429, 430, 0, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 526, 444, 445, 38, 0, 446, 447, 39, - 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, - 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, - 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, - 472, 473, 41, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 799, 484, 0, 485, 0, 487, 488, - 489, 490, 491, 492, 493, 0, 0, 494, 0, 45, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 523, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 886, 125, - 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, - 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, - 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, - 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, - 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, - 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, - 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, - 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, - 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, - 228, 229, 230, 231, 0, 232, 0, 233, 0, 23, - 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, - 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, - 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, - 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, - 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, - 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, - 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, - 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, - 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, - 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, - 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 27, 28, 29, 0, 360, 361, 362, 0, - 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, - 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, - 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 34, 0, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, - 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, - 0, 0, 446, 447, 39, 448, 0, 450, 451, 452, - 453, 454, 0, 455, 887, 457, 0, 0, 888, 459, - 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, - 469, 470, 0, 0, 471, 472, 473, 41, 474, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 799, 484, - 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, - 0, 0, 494, 0, 45, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 514, 515, 523, 0, 46, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, - 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, - 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, - 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, - 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, - 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, - 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, - 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, - 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, - 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, - 232, 0, 233, 0, 23, 0, 236, 237, 524, 0, - 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, - 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, - 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, - 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, - 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, - 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, - 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, - 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, - 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, - 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 27, 28, 29, - 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, - 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, - 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 34, 0, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 526, 444, 445, 0, 0, 446, 447, 39, - 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, - 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, - 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, - 472, 473, 41, 474, 475, 476, 477, 0, 478, 479, - 480, 481, 482, 799, 484, 0, 485, 0, 487, 488, - 489, 490, 491, 492, 493, 0, 0, 494, 0, 45, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 0, 523, 46, 549, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 523, 0, 549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 985, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 132, 133, 0, 135, 136, 137, 138, 139, 0, - 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 153, 154, 155, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 0, 227, 0, 228, 229, 230, 231, - 0, 232, 0, 233, 0, 0, 0, 236, 237, 524, - 0, 240, 0, 241, 0, 242, 243, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 0, 275, 0, 276, 0, 0, 279, 0, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 0, 289, - 0, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 525, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 0, 330, 0, 331, 332, 333, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 0, 346, 0, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 362, 0, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 0, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 0, 427, 428, 429, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 526, 444, 445, 0, 0, 446, 447, - 0, 448, 0, 450, 451, 452, 453, 454, 0, 455, - 456, 457, 0, 0, 458, 459, 460, 461, 462, 0, - 463, 464, 465, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 0, 485, 0, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 523, 0, 549, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1460, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 523, 0, 549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2195, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 132, 133, 0, 135, 136, 137, 138, 139, 0, - 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 153, 154, 155, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 0, 227, 0, 228, 229, 230, 231, - 0, 232, 0, 233, 0, 0, 0, 236, 237, 524, - 0, 240, 0, 241, 0, 242, 243, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 0, 275, 0, 276, 0, 0, 279, 0, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 0, 289, - 0, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 525, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 0, 330, 0, 331, 332, 333, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 0, 346, 0, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 362, 0, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 0, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 0, 427, 428, 429, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 526, 444, 445, 0, 0, 446, 447, - 0, 448, 0, 450, 451, 452, 453, 454, 0, 455, - 456, 457, 0, 0, 458, 459, 460, 461, 462, 0, - 463, 464, 465, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 0, 485, 0, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 523, 0, 549, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2429, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 523, 0, 549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2560, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 132, 133, 0, 135, 136, 137, 138, 139, 0, - 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 153, 154, 155, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 0, 227, 0, 228, 229, 230, 231, - 0, 232, 0, 233, 0, 0, 0, 236, 237, 524, - 0, 240, 0, 241, 0, 242, 243, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 0, 275, 0, 276, 0, 0, 279, 0, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 0, 289, - 0, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 525, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 0, 330, 0, 331, 332, 333, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 0, 346, 0, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 362, 0, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 0, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 0, 427, 428, 429, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 526, 444, 445, 0, 0, 446, 447, - 0, 448, 0, 450, 451, 452, 453, 454, 0, 455, - 456, 457, 0, 0, 458, 459, 460, 461, 462, 0, - 463, 464, 465, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 0, 485, 0, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 523, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3206, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 523, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2052, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 132, 133, 0, 135, 136, 137, 138, 139, 0, - 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 153, 154, 155, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 0, 227, 0, 228, 229, 230, 231, - 0, 232, 0, 233, 0, 0, 0, 236, 237, 524, - 0, 240, 0, 241, 0, 242, 243, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 0, 275, 0, 276, 0, 0, 279, 0, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 0, 289, - 0, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 525, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 0, 330, 0, 331, 332, 333, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 0, 346, 0, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 362, 0, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 0, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 0, 427, 428, 429, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 526, 444, 445, 0, 0, 446, 447, - 0, 448, 0, 450, 451, 452, 453, 454, 0, 455, - 456, 457, 0, 0, 458, 459, 460, 461, 462, 0, - 463, 464, 465, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 0, 485, 0, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 523, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2155, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 0, 2885, 1339, - 815, 0, 0, 2028, 1046, 0, 0, 0, 0, 0, - 2029, 2030, 0, 3067, 2031, 2032, 2033, 117, 118, 119, - 120, 121, 122, 123, 124, 556, 125, 126, 127, 557, - 558, 559, 2886, 561, 562, 563, 564, 2887, 129, 130, - 566, 131, 132, 133, 2888, 135, 136, 137, 0, 1476, - 2889, 1478, 1479, 573, 143, 144, 145, 146, 147, 148, - 574, 575, 149, 150, 151, 152, 1480, 1481, 155, 578, - 156, 157, 158, 159, 0, 580, 2890, 582, 2891, 163, - 164, 165, 166, 167, 2892, 169, 170, 171, 585, 172, - 173, 174, 175, 176, 177, 586, 2893, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 1486, 190, 191, - 1487, 193, 591, 194, 592, 195, 196, 197, 198, 199, - 200, 593, 594, 201, 202, 203, 204, 595, 596, 205, - 206, 1059, 208, 209, 597, 210, 211, 212, 598, 213, - 214, 215, 599, 216, 217, 218, 219, 0, 221, 222, - 223, 224, 225, 0, 602, 227, 603, 228, 229, 1488, - 231, 605, 232, 606, 233, 2894, 608, 2895, 236, 237, - 2896, 2897, 240, 612, 241, 613, 0, 0, 244, 245, - 616, 246, 247, 248, 249, 250, 251, 252, 2898, 254, - 255, 256, 257, 618, 258, 259, 260, 261, 262, 263, - 264, 619, 265, 2899, 0, 268, 269, 270, 271, 272, - 1494, 1495, 624, 1496, 626, 276, 2900, 2901, 279, 2902, - 281, 282, 283, 284, 285, 286, 630, 631, 287, 2903, - 289, 2904, 634, 291, 292, 293, 294, 295, 296, 297, - 298, 2905, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 1503, 2906, 1505, 323, 324, 325, 2907, 640, - 327, 328, 2908, 330, 642, 0, 332, 1507, 334, 335, - 336, 645, 337, 338, 646, 647, 2909, 340, 341, 648, - 649, 342, 343, 0, 2910, 346, 2911, 0, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 654, - 655, 656, 657, 360, 361, 0, 2912, 364, 365, 0, - 367, 368, 369, 661, 370, 371, 372, 373, 374, 375, - 662, 376, 377, 378, 1511, 380, 381, 382, 383, 664, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 665, 397, 398, 2913, 400, 401, 402, - 1513, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 668, 2914, 417, 418, 419, 420, - 421, 422, 2915, 424, 425, 671, 2916, 427, 428, 1517, - 430, 674, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 2917, 444, 0, 677, 678, 446, - 447, 679, 448, 2918, 450, 451, 452, 453, 454, 681, - 455, 1520, 1521, 684, 685, 458, 459, 0, 461, 0, - 688, 463, 464, 2919, 466, 467, 468, 469, 470, 2920, - 691, 471, 472, 473, 692, 474, 475, 476, 477, 693, - 478, 479, 480, 481, 482, 0, 1524, 696, 485, 2921, - 487, 488, 489, 490, 491, 492, 493, 698, 699, 494, - 700, 701, 495, 496, 497, 498, 499, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 513, 514, 515, 0, 523, 0, 2034, 2035, 2036, 2028, - 2922, 2923, 2039, 2040, 2041, 2042, 2029, 2030, 0, 0, - 2031, 2032, 2033, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, - 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, - 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, - 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, - 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, - 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, - 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, - 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, - 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, - 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, - 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, - 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, - 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, - 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, - 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, - 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, - 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, - 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, - 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, - 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, - 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, - 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, - 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, - 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, - 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, - 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, - 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, - 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, - 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, - 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, - 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, - 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 514, 515, 0, - 0, 0, 2034, 2035, 2036, 0, 2037, 2038, 2039, 2040, - 2041, 2042, 1607, 0, 0, 1608, 0, 0, 0, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1616, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1618, 1607, 0, 0, 1608, 0, 0, 1619, 1609, 1610, - 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1616, - 0, 0, 0, 0, 1620, 0, 0, 0, 0, 1618, - 1607, 0, 0, 1608, 0, 0, 1619, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1616, 0, - 0, 0, 0, 1620, 0, 0, 0, 0, 1618, 0, - 0, 0, 0, 0, 0, 1619, 0, 1607, 0, 0, - 1608, 0, 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, - 1615, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1620, 0, 0, 1616, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1618, 1607, 0, 0, 1608, - 1621, 0, 1619, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 0, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 0, 0, 1623, 0, 1616, 0, 0, 0, 0, 1620, - 0, 0, 0, 0, 1618, 0, 0, 0, 0, 1621, - 0, 1619, 0, 0, 0, 1624, 1625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1622, 0, 0, 0, - 1626, 1623, 0, 0, 0, 0, 0, 0, 1620, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, - 0, 0, 0, 0, 1624, 1625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1622, 0, 0, 1627, 1626, - 1623, 1628, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1629, 0, 0, 1630, 0, - 0, 0, 0, 1624, 1625, 1621, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1627, 1626, 0, - 1628, 0, 1622, 0, 0, 0, 0, 1623, 0, 0, - 0, 0, 0, 0, 1629, 0, 0, 1630, 0, 0, - 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, - 1624, 1625, 0, 0, 0, 0, 1627, 0, 0, 1628, - 0, 1622, 0, 0, 0, 1626, 1623, 0, 0, 0, - 0, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, - 1625, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 0, 0, 1627, 1626, 0, 1628, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1629, 0, 0, 1630, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1631, 0, 0, 0, 0, 0, - 0, 0, 1627, 0, 0, 1628, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, - 0, 0, 1630, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1631, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 0, 0, 0, 0, 2692, - 1631, 0, 0, 0, 0, 0, 1607, 0, 0, 1608, - 0, 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, - 1638, 1639, 1640, 1641, 1616, 0, 0, 0, 2764, 1631, - 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, - 0, 1619, 0, 0, 0, 0, 0, 0, 0, 0, - 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 0, 0, 0, 0, 2831, 1620, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1607, 0, 0, 1608, 0, 0, 0, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 1632, 0, 0, - 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, - 1616, 0, 0, 0, 3059, 0, 0, 0, 0, 0, - 1618, 1607, 0, 0, 1608, 0, 0, 1619, 1609, 1610, - 1611, 1612, 1613, 1614, 1615, 0, 1632, 0, 0, 1633, - 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 1616, - 0, 0, 0, 3066, 1620, 0, 0, 0, 0, 1618, - 1607, 0, 0, 1608, 1621, 0, 1619, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, 0, - 0, 1622, 0, 0, 0, 0, 1623, 0, 1616, 0, - 0, 0, 0, 1620, 0, 0, 0, 0, 1618, 0, - 0, 0, 0, 0, 0, 1619, 0, 0, 0, 1624, - 1625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, - 0, 0, 1620, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1607, 0, 0, 1608, - 1621, 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 0, 0, 1627, 0, 0, 1628, 0, 1622, 0, 0, - 0, 0, 1623, 0, 1616, 0, 0, 0, 0, 1629, - 0, 0, 1630, 0, 1618, 0, 0, 0, 0, 1621, - 0, 1619, 0, 0, 0, 1624, 1625, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1622, 0, 0, 0, - 1626, 1623, 0, 0, 0, 0, 0, 0, 1620, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, - 0, 0, 0, 0, 1624, 1625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1622, 0, 0, 1627, 1626, - 1623, 1628, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1629, 0, 0, 1630, 0, - 0, 0, 0, 1624, 1625, 0, 0, 0, 0, 1631, - 0, 0, 0, 0, 0, 0, 0, 1627, 1626, 0, - 1628, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1629, 0, 0, 1630, 0, 0, - 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1627, 0, 0, 1628, - 0, 1622, 0, 0, 0, 0, 1623, 0, 0, 0, - 0, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1624, - 1625, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, - 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, - 0, 0, 0, 3227, 1631, 0, 0, 0, 0, 0, - 0, 0, 1627, 0, 1607, 1628, 0, 1608, 0, 0, - 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 1629, - 0, 0, 1630, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1616, 1631, 0, 0, 0, 0, 0, 0, - 0, 0, 1618, 0, 0, 0, 0, 0, 0, 1619, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 0, 1620, 0, 0, 3249, - 0, 0, 0, 0, 0, 0, 1607, 0, 0, 1608, - 0, 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, - 1638, 1639, 1640, 1641, 1616, 0, 0, 0, 3351, 1631, - 0, 0, 0, 0, 1618, 1607, 0, 0, 1608, 0, - 0, 1619, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, - 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 1616, 0, 0, 0, 3409, 1620, 0, - 0, 0, 0, 1618, 0, 0, 0, 0, 0, 0, - 1619, 0, 1621, 0, 0, 1607, 0, 0, 1608, 0, - 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1622, - 0, 0, 0, 0, 1623, 0, 0, 1620, 0, 0, - 0, 0, 0, 1616, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1618, 0, 0, 0, 1624, 1625, 0, - 1619, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, - 1634, 1635, 1626, 1636, 1637, 1638, 1639, 1640, 1641, 0, - 0, 0, 0, 3431, 0, 0, 0, 1620, 0, 0, - 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1627, 1622, 0, 1628, 0, 0, 1623, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, - 1630, 0, 0, 1621, 0, 0, 0, 0, 0, 1624, - 1625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1622, 0, 0, 0, 1626, 1623, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1624, 1625, - 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, - 0, 0, 1627, 1626, 0, 1628, 0, 0, 0, 0, - 1622, 0, 0, 0, 0, 1623, 0, 0, 0, 1629, - 0, 0, 1630, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1631, 1624, 1625, - 0, 1627, 0, 0, 1628, 0, 0, 0, 0, 0, - 0, 0, 0, 1626, 0, 0, 0, 0, 1629, 0, - 0, 1630, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1627, 0, 0, 1628, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, - 0, 1630, 0, 0, 0, 0, 0, 0, 0, 1631, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1632, 0, 0, 1633, 1634, 1635, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 1631, 1792, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1631, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, - 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, - 0, 2785, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1632, 0, 0, 1633, 1634, - 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, - 3217, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 555, 0, 0, 1632, 0, 0, 1633, 1634, - 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, - 3393, 117, 118, 119, 120, 121, 122, 123, 124, 556, - 125, 126, 127, 557, 558, 559, 560, 561, 562, 563, - 564, 565, 129, 130, 566, 131, 132, 133, 567, 135, - 136, 137, 568, 569, 570, 571, 572, 573, 143, 144, - 145, 146, 147, 148, 574, 575, 149, 150, 151, 152, - 576, 577, 155, 578, 156, 157, 158, 159, 579, 580, - 581, 582, 583, 163, 164, 165, 166, 167, 584, 169, - 170, 171, 585, 172, 173, 174, 175, 176, 177, 586, - 587, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 589, 190, 191, 590, 193, 591, 194, 592, 195, - 196, 197, 198, 199, 200, 593, 594, 201, 202, 203, - 204, 595, 596, 205, 206, 207, 208, 209, 597, 210, - 211, 212, 598, 213, 214, 215, 599, 216, 217, 218, - 219, 600, 221, 222, 223, 224, 225, 601, 602, 227, - 603, 228, 229, 604, 231, 605, 232, 606, 233, 607, - 608, 609, 236, 237, 610, 611, 240, 612, 241, 613, - 614, 615, 244, 245, 616, 246, 247, 248, 249, 250, - 251, 252, 617, 254, 255, 256, 257, 618, 258, 259, - 260, 261, 262, 263, 264, 619, 265, 620, 621, 268, - 269, 270, 271, 272, 622, 623, 624, 625, 626, 276, - 627, 628, 279, 629, 281, 282, 283, 284, 285, 286, - 630, 631, 287, 632, 289, 633, 634, 291, 292, 293, - 294, 295, 296, 297, 298, 635, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 636, 637, 638, 323, - 324, 325, 639, 640, 327, 328, 641, 330, 642, 643, - 332, 644, 334, 335, 336, 645, 337, 338, 646, 647, - 339, 340, 341, 648, 649, 342, 343, 650, 651, 346, - 652, 653, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 654, 655, 656, 657, 360, 361, 658, - 659, 364, 365, 660, 367, 368, 369, 661, 370, 371, - 372, 373, 374, 375, 662, 376, 377, 378, 663, 380, - 381, 382, 383, 664, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 665, 397, 398, - 666, 400, 401, 402, 667, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 668, 669, - 417, 418, 419, 420, 421, 422, 670, 424, 425, 671, - 672, 427, 428, 673, 430, 674, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 675, 444, - 676, 677, 678, 446, 447, 679, 448, 680, 450, 451, - 452, 453, 454, 681, 455, 682, 683, 684, 685, 458, - 459, 686, 461, 687, 688, 463, 464, 689, 466, 467, - 468, 469, 470, 690, 691, 471, 472, 473, 692, 474, - 475, 476, 477, 693, 478, 479, 480, 481, 482, 694, - 695, 696, 485, 697, 487, 488, 489, 490, 491, 492, - 493, 698, 699, 494, 700, 701, 495, 496, 497, 498, - 499, 500, 702, 703, 704, 705, 706, 707, 708, 709, - 710, 711, 712, 512, 513, 514, 515, 523, 0, 0, - 0, 0, 0, 0, 0, 0, 2063, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, - 131, 132, 133, 0, 135, 136, 137, 138, 139, 0, - 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 153, 154, 155, 0, 156, - 157, 158, 159, 160, 0, 0, 0, 162, 163, 164, - 165, 166, 167, 0, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 0, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 0, 227, 0, 228, 229, 230, 231, - 0, 232, 0, 233, 0, 0, 0, 236, 237, 524, - 0, 240, 0, 241, 0, 242, 243, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 0, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 0, 267, 268, 269, 270, 271, 272, 273, - 274, 0, 275, 0, 276, 0, 0, 279, 0, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 0, 289, - 0, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 525, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 0, 322, 323, 324, 325, 326, 0, 327, - 328, 0, 330, 0, 331, 332, 333, 334, 335, 336, - 0, 337, 338, 0, 0, 339, 340, 341, 0, 0, - 342, 343, 344, 0, 346, 0, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 362, 0, 364, 365, 366, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 0, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 0, 0, 427, 428, 429, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 526, 444, 445, 0, 0, 446, 447, - 0, 448, 0, 450, 451, 452, 453, 454, 0, 455, - 456, 457, 0, 0, 458, 459, 460, 461, 462, 0, - 463, 464, 465, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 0, 485, 0, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 514, 515, 523, 0, 0, 0, 0, 0, 0, 0, - 0, 2685, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 130, 0, 131, 132, 133, 0, 135, - 136, 137, 138, 139, 0, 141, 142, 0, 143, 144, - 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, - 153, 154, 155, 0, 156, 157, 158, 159, 160, 0, - 0, 0, 162, 163, 164, 165, 166, 167, 0, 169, - 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, - 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 0, 194, 0, 195, - 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, - 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, - 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 0, 227, - 0, 228, 229, 230, 231, 0, 232, 0, 233, 0, - 0, 0, 236, 237, 524, 0, 240, 0, 241, 0, - 242, 243, 244, 245, 0, 246, 247, 248, 249, 250, - 251, 252, 0, 254, 255, 256, 257, 0, 258, 259, - 260, 261, 262, 263, 264, 0, 265, 0, 267, 268, - 269, 270, 271, 272, 273, 274, 0, 275, 0, 276, - 0, 0, 279, 0, 281, 282, 283, 284, 285, 286, - 0, 0, 287, 0, 289, 0, 0, 291, 292, 293, - 294, 295, 296, 297, 298, 525, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 0, 322, 323, - 324, 325, 326, 0, 327, 328, 0, 330, 0, 331, - 332, 333, 334, 335, 336, 0, 337, 338, 0, 0, - 339, 340, 341, 0, 0, 342, 343, 344, 0, 346, - 0, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 0, 0, 0, 0, 360, 361, 362, - 0, 364, 365, 366, 367, 368, 369, 0, 370, 371, - 372, 373, 374, 375, 0, 376, 377, 378, 379, 380, - 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, - 0, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, - 0, 427, 428, 429, 430, 0, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 526, 444, - 445, 0, 0, 446, 447, 0, 448, 0, 450, 451, - 452, 453, 454, 0, 455, 456, 457, 0, 0, 458, - 459, 460, 461, 462, 0, 463, 464, 465, 466, 467, - 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, - 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, - 484, 0, 485, 0, 487, 488, 489, 490, 491, 492, - 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 964, 1339, 815, - 0, 0, 0, 1046, 0, 0, 2688, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, - 0, 560, 0, 0, 0, 0, 565, 129, 130, 0, - 131, 132, 133, 567, 135, 136, 137, 568, 569, 570, - 571, 572, 0, 143, 144, 145, 146, 147, 148, 0, - 0, 149, 150, 151, 152, 576, 577, 155, 0, 156, - 157, 158, 159, 579, 0, 581, 0, 583, 163, 164, - 165, 166, 167, 584, 169, 170, 171, 0, 172, 173, - 174, 175, 176, 177, 0, 587, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 589, 190, 191, 590, - 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, - 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, - 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, - 215, 0, 216, 217, 218, 219, 600, 221, 222, 223, - 224, 225, 601, 1340, 227, 0, 228, 229, 604, 231, - 0, 232, 0, 233, 607, 0, 609, 236, 237, 610, - 611, 240, 0, 241, 0, 614, 615, 244, 245, 0, - 246, 247, 248, 249, 250, 251, 252, 617, 254, 255, - 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, - 0, 265, 620, 621, 268, 269, 270, 271, 272, 622, - 623, 0, 625, 0, 276, 627, 628, 279, 629, 281, - 282, 283, 284, 285, 286, 0, 0, 287, 632, 289, - 633, 0, 291, 292, 293, 294, 295, 296, 297, 298, - 635, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 636, 637, 638, 323, 324, 325, 639, 0, 327, - 328, 641, 330, 0, 643, 332, 644, 334, 335, 336, - 0, 337, 338, 1341, 0, 339, 340, 341, 0, 0, - 342, 343, 650, 651, 346, 652, 653, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, - 0, 0, 360, 361, 658, 659, 364, 365, 660, 367, - 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, - 376, 377, 378, 663, 380, 381, 382, 383, 0, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 0, 397, 398, 666, 400, 401, 402, 667, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 0, 669, 417, 418, 419, 420, 421, - 422, 670, 424, 425, 0, 672, 427, 428, 673, 430, - 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 675, 444, 676, 0, 0, 446, 447, - 0, 448, 680, 450, 451, 452, 453, 454, 0, 455, - 682, 683, 0, 0, 458, 459, 686, 461, 687, 1342, - 463, 464, 689, 466, 467, 468, 469, 470, 0, 0, - 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 694, 695, 0, 485, 697, 487, - 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, - 0, 495, 496, 497, 498, 499, 500, 702, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 712, 512, 513, - 514, 515, 0, 0, 1607, 0, 0, 1608, 0, 1343, - 1344, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1616, 0, 0, 0, 0, 2161, 0, 0, - 0, 0, 1618, 1607, 0, 0, 1608, 0, 0, 1619, - 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1616, 0, 0, 0, 0, 1620, 0, 0, 0, - 0, 1618, 1607, 0, 0, 1608, 0, 0, 1619, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1616, 0, 0, 0, 0, 1620, 0, 0, 0, 0, - 1618, 0, 2162, 0, 0, 0, 0, 1619, 0, 0, - 1607, 0, 0, 1608, 0, 0, 0, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1620, 0, 0, 0, 1616, 0, - 0, 0, 1886, 0, 0, 0, 0, 0, 1618, 0, - 1607, 0, 1621, 1608, 0, 1619, 0, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, 1622, - 0, 0, 0, 0, 1623, 0, 0, 0, 1616, 0, - 0, 1922, 1620, 0, 0, 0, 1923, 0, 1618, 0, - 0, 1621, 0, 0, 0, 1619, 0, 1624, 1625, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1622, 0, - 0, 0, 1626, 1623, 0, 0, 0, 0, 0, 3500, - 0, 0, 1620, 0, 0, 0, 0, 0, 0, 0, - 1621, 0, 0, 0, 0, 0, 1624, 1625, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 1627, 1626, 1623, 1628, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, - 1630, 0, 0, 0, 0, 1624, 1625, 0, 1621, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1627, - 1626, 0, 1628, 0, 0, 1622, 0, 0, 0, 0, - 1623, 0, 0, 0, 0, 0, 1629, 0, 0, 1630, - 0, 0, 0, 0, 0, 0, 0, 0, 1621, 0, - 0, 0, 0, 1624, 1625, 0, 0, 0, 1627, 0, - 0, 1628, 0, 0, 0, 1622, 0, 0, 1626, 0, - 1623, 0, 0, 0, 0, 1629, 0, 0, 1630, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1624, 1625, 0, 0, 1631, 0, 0, - 0, 0, 0, 0, 0, 0, 1627, 3501, 1626, 1628, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1631, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1627, 0, 0, 1628, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2165, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1893, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1632, 0, 0, 1633, 1634, 1635, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 0, - 0, 0, 0, 1631, 0, 0, 0, 0, 1607, 0, - 0, 1608, 0, 0, 0, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 0, 1632, 0, 0, 1633, 1634, 1635, 0, - 1636, 1637, 1638, 1639, 1640, 1641, 1616, 0, 0, 0, - 1928, 0, 0, 1631, 0, 0, 1618, 0, 0, 0, - 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, - 0, 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 0, 0, 0, 0, 0, - 1620, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1607, 0, 0, 1608, 0, - 0, 0, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, - 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 1616, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1618, 0, 0, 0, 0, 0, 0, - 1619, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, - 1639, 1640, 1641, 0, 0, 0, 0, 1620, 0, 0, - 0, 0, 1607, 0, 0, 1608, 1621, 0, 0, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, - 0, 0, 0, 1622, 0, 0, 0, 0, 1623, 0, - 1616, 0, 0, 0, 1935, 0, 0, 0, 0, 0, - 1618, 0, 0, 0, 0, 0, 0, 1619, 0, 0, - 0, 1624, 1625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1626, 0, 0, 0, - 0, 0, 0, 0, 1620, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1933, 1607, - 0, 0, 1608, 1621, 0, 0, 1609, 1610, 1611, 1612, - 1613, 1614, 1615, 0, 1627, 0, 0, 1628, 0, 0, - 1622, 0, 0, 0, 0, 1623, 0, 1616, 0, 0, - 0, 1629, 0, 0, 1630, 0, 0, 1618, 0, 0, - 0, 0, 0, 0, 1619, 0, 0, 0, 1624, 1625, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1626, 0, 0, 0, 0, 0, 0, - 0, 1620, 0, 0, 0, 0, 0, 0, 0, 0, - 1621, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 0, 1627, 1623, 0, 1628, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1629, 0, - 0, 1630, 0, 0, 0, 1624, 1625, 0, 0, 0, - 0, 1631, 0, 0, 1607, 0, 0, 1608, 0, 0, - 1626, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2056, 0, 0, - 0, 0, 1616, 0, 0, 0, 0, 1621, 0, 0, - 0, 0, 1618, 0, 0, 0, 0, 0, 1627, 1619, - 0, 1628, 0, 0, 1622, 0, 0, 0, 0, 1623, - 0, 0, 0, 0, 0, 1629, 0, 0, 1630, 0, - 0, 0, 0, 0, 0, 0, 1620, 0, 0, 0, - 0, 0, 1624, 1625, 0, 0, 0, 0, 1631, 0, - 0, 0, 0, 0, 0, 0, 0, 1626, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1632, 0, - 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, - 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1627, 0, 0, 1628, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1629, 0, 0, 1630, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 0, 1621, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1622, - 0, 0, 0, 0, 1623, 1632, 0, 0, 1633, 1634, - 1635, 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1624, 1625, 0, - 0, 0, 0, 0, 0, 0, 1607, 0, 0, 1608, - 0, 0, 1626, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1631, 0, 1616, 0, 0, 0, 2762, 0, - 0, 0, 0, 0, 1618, 0, 0, 0, 0, 0, - 1627, 1619, 1632, 1628, 0, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 1640, 1641, 0, 0, 1629, 0, 0, - 1630, 0, 0, 0, 0, 0, 0, 0, 1620, 0, - 1607, 0, 0, 1608, 0, 0, 0, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1616, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1618, 0, - 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, - 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, - 1640, 1641, 1620, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1631, 0, 1607, - 0, 0, 1608, 0, 1621, 0, 1609, 1610, 1611, 1612, - 1613, 1614, 1615, 0, 0, 0, 0, 0, 0, 0, - 0, 1622, 0, 0, 0, 0, 1623, 1616, 0, 0, - 2749, 0, 0, 0, 0, 0, 0, 1618, 0, 0, - 0, 0, 0, 0, 1619, 0, 0, 0, 0, 1624, - 1625, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, - 0, 1620, 0, 0, 0, 0, 0, 0, 1621, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1622, 0, 0, 0, 0, - 1623, 0, 1627, 0, 1632, 1628, 0, 1633, 1634, 1635, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 1629, - 0, 0, 1630, 1624, 1625, 0, 0, 0, 0, 0, - 0, 0, 1607, 0, 0, 1608, 0, 0, 1626, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1616, 0, 0, 0, 0, 0, 0, 1621, 0, 0, - 1618, 0, 0, 0, 0, 0, 1627, 1619, 0, 1628, - 0, 0, 0, 0, 1622, 0, 0, 0, 0, 1623, - 0, 0, 0, 1629, 0, 0, 1630, 0, 0, 0, - 0, 0, 0, 0, 1620, 0, 0, 0, 0, 0, - 0, 0, 1802, 1625, 0, 0, 0, 0, 0, 1631, - 0, 0, 0, 0, 0, 0, 0, 1626, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1607, 0, - 0, 1608, 0, 0, 0, 1609, 1610, 0, 0, 1613, - 1614, 1615, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1627, 1616, 0, 1628, 0, - 0, 0, 0, 0, 0, 0, 1618, 0, 0, 0, - 0, 0, 1629, 1619, 0, 1630, 0, 0, 0, 0, - 0, 0, 0, 1631, 1607, 0, 0, 1608, 0, 0, - 1621, 1609, 1610, 0, 0, -2041, -2041, -2041, 0, 0, - 1620, 0, 0, 0, 0, 0, 0, 1622, 0, 0, - 0, 0, 1623, 0, 0, 0, 1632, 0, 0, 1633, - 1634, 1635, 1618, 1636, 1637, 1638, 1639, 1640, 1641, 1619, - 0, 1607, 0, 0, 1608, 1624, 1625, 0, 1609, 1610, - 0, 0, 1613, 1614, 1615, 0, 0, 0, 0, 0, - 1626, 0, 0, 0, 0, 0, 1620, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618, - 0, 1607, 1631, 0, 1608, 0, 1619, 0, 1609, 1610, - 0, 0, 1613, 1614, 1615, 0, 0, 0, 1627, 0, - 1632, 1628, 0, 1633, 1634, 1635, 1621, 1636, 1637, 1638, - 1639, 1640, 1641, 1620, 0, 1629, 0, 0, 1630, 1618, - 0, 0, 0, 1622, 0, 0, 1619, 0, 1623, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1624, 1625, 1620, 0, 0, 0, 0, 0, 0, - 0, 0, 1621, 0, 0, 0, 1626, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1622, - 0, 0, 0, 0, 1623, 0, 0, 0, 0, 1632, - 0, 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, - 1640, 1641, 0, 0, 1627, 0, 0, 1628, 0, 1621, - 0, 0, 0, 0, 0, 1631, 0, 0, 0, 0, - 0, 1629, 1626, 0, 1630, 0, 1622, 0, 0, 0, - 0, 1623, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1621, - 0, 0, 0, 0, 1624, 1625, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1622, 0, 0, 1626, - 0, 1623, 0, 0, 0, 0, 0, 1629, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -2041, -2041, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1627, 0, 1626, - 1628, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1631, 1632, 0, 1629, 1633, 1634, 1635, 0, 1636, - 1637, 1638, 1639, 2182, 1641, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -2041, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1629, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1631, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1631, 0, 0, 0, 1632, 0, - 0, 1633, 1634, 1635, 0, 1636, 1637, 1638, 1639, 1640, - 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1631, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1632, 0, 0, -2041, -2041, -2041, - 0, 1636, 1637, 1638, 1639, 1640, 1641, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, - 1638, 1639, 1640, 1641, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 555, 0, 2079, 0, 0, - 0, 1632, 0, 0, 1633, 1634, 1635, 0, 1636, 1637, - 1638, 1639, 1640, 1641, 117, 118, 119, 120, 121, 122, - 123, 124, 556, 125, 126, 127, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 129, 130, 566, 131, 132, - 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, - 573, 143, 144, 145, 146, 147, 148, 574, 575, 149, - 150, 151, 152, 576, 577, 155, 578, 156, 157, 158, - 159, 579, 580, 581, 582, 583, 163, 164, 165, 166, - 167, 584, 169, 170, 171, 585, 172, 173, 174, 175, - 176, 177, 586, 587, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 589, 190, 191, 590, 193, 591, - 194, 592, 195, 196, 197, 198, 199, 200, 593, 594, - 201, 202, 203, 204, 595, 596, 205, 206, 207, 208, - 209, 597, 210, 211, 212, 598, 213, 214, 215, 599, - 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, - 601, 602, 227, 603, 228, 229, 604, 231, 605, 232, - 606, 233, 607, 608, 609, 236, 237, 610, 611, 240, - 612, 241, 613, 614, 615, 244, 245, 616, 246, 247, - 248, 249, 250, 251, 252, 617, 254, 255, 256, 257, - 618, 258, 259, 260, 261, 262, 263, 264, 619, 265, - 620, 621, 268, 269, 270, 271, 272, 622, 623, 624, - 625, 626, 276, 627, 628, 279, 629, 281, 282, 283, - 284, 285, 286, 630, 631, 287, 632, 289, 633, 634, - 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, - 637, 638, 323, 324, 325, 639, 640, 327, 328, 641, - 330, 642, 643, 332, 644, 334, 335, 336, 645, 337, - 338, 646, 647, 339, 340, 341, 648, 649, 342, 343, - 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 654, 655, 656, 657, - 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, - 661, 370, 371, 372, 373, 374, 375, 662, 376, 377, - 378, 663, 380, 381, 382, 383, 664, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 665, 397, 398, 666, 400, 401, 402, 667, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 668, 669, 417, 418, 419, 420, 421, 422, 670, - 424, 425, 671, 672, 427, 428, 673, 430, 674, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 675, 444, 676, 677, 678, 446, 447, 679, 448, - 680, 450, 451, 452, 453, 454, 681, 455, 682, 683, - 684, 685, 458, 459, 686, 461, 687, 688, 463, 464, - 689, 466, 467, 468, 469, 470, 690, 691, 471, 472, - 473, 692, 474, 475, 476, 477, 693, 478, 479, 480, - 481, 482, 694, 695, 696, 485, 697, 487, 488, 489, - 490, 491, 492, 493, 698, 699, 494, 700, 701, 495, - 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, - 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 556, 125, 126, - 127, 557, 558, 559, 560, 561, 562, 563, 564, 565, - 129, 130, 566, 131, 132, 133, 567, 135, 136, 137, - 568, 569, 570, 571, 572, 573, 143, 144, 145, 146, - 147, 148, 574, 575, 149, 150, 151, 152, 576, 577, - 155, 578, 156, 157, 158, 159, 579, 580, 581, 582, - 583, 163, 164, 165, 166, 167, 584, 169, 170, 171, - 585, 172, 173, 174, 175, 176, 177, 586, 587, 179, - 180, 181, 182, 183, 184, 588, 186, 187, 188, 589, - 190, 191, 590, 193, 591, 194, 592, 195, 196, 197, - 198, 199, 200, 593, 594, 201, 202, 203, 204, 595, - 596, 205, 206, 207, 208, 209, 597, 210, 211, 212, - 598, 213, 214, 215, 599, 216, 217, 218, 219, 600, - 221, 222, 223, 224, 225, 601, 602, 227, 603, 228, - 229, 604, 231, 605, 232, 606, 233, 607, 608, 609, - 236, 237, 610, 611, 240, 612, 241, 613, 614, 615, - 244, 245, 616, 246, 247, 248, 249, 250, 251, 252, - 617, 254, 255, 256, 257, 618, 258, 259, 260, 261, - 262, 263, 264, 619, 265, 620, 621, 268, 269, 270, - 271, 272, 622, 623, 624, 625, 626, 276, 627, 628, - 279, 629, 281, 282, 283, 284, 285, 286, 630, 631, - 287, 632, 289, 633, 634, 291, 292, 293, 294, 295, - 296, 297, 298, 635, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 636, 637, 638, 323, 324, 325, - 639, 640, 327, 328, 641, 330, 642, 643, 332, 644, - 334, 335, 336, 645, 337, 338, 646, 647, 339, 340, - 341, 648, 649, 342, 343, 650, 651, 346, 652, 653, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 654, 655, 656, 657, 360, 361, 658, 659, 364, - 365, 660, 367, 368, 369, 661, 370, 371, 372, 373, - 374, 375, 662, 376, 377, 378, 663, 380, 381, 382, - 383, 664, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 665, 397, 398, 666, 400, - 401, 402, 667, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 668, 669, 417, 418, - 419, 420, 421, 422, 670, 424, 425, 671, 672, 427, - 428, 673, 430, 674, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 675, 444, 676, 677, - 678, 446, 447, 679, 448, 680, 450, 451, 452, 453, - 454, 681, 455, 682, 683, 684, 685, 458, 459, 686, - 461, 687, 688, 463, 464, 689, 466, 467, 468, 469, - 470, 690, 691, 471, 472, 473, 692, 474, 475, 476, - 477, 693, 478, 479, 480, 481, 482, 694, 695, 696, - 485, 697, 487, 488, 489, 490, 491, 492, 493, 698, - 699, 494, 700, 701, 495, 496, 497, 498, 499, 500, - 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 512, 513, 514, 515, 555, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 556, 125, 126, 127, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 129, 130, 566, 131, 132, - 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, - 573, 143, 144, 145, 146, 147, 148, 574, 575, 149, - 150, 151, 152, 576, 577, 155, 578, 156, 157, 158, - 159, 579, 580, 581, 582, 583, 163, 164, 165, 166, - 167, 584, 169, 170, 171, 585, 172, 173, 174, 175, - 176, 177, 586, 587, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 589, 190, 191, 590, 193, 591, - 194, 592, 195, 196, 197, 198, 199, 200, 593, 594, - 201, 202, 203, 204, 595, 596, 205, 206, 207, 208, - 209, 597, 210, 211, 212, 598, 213, 214, 215, 599, - 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, - 601, 602, 227, 603, 228, 229, 604, 231, 605, 232, - 606, 233, 607, 608, 609, 236, 237, 610, 611, 240, - 612, 241, 613, 614, 615, 244, 245, 616, 246, 247, - 248, 249, 250, 940, 252, 617, 254, 255, 256, 257, - 618, 258, 259, 260, 261, 262, 263, 264, 619, 265, - 620, 621, 268, 269, 270, 271, 272, 622, 623, 624, - 625, 626, 276, 627, 628, 279, 629, 281, 282, 283, - 284, 285, 286, 630, 631, 287, 632, 289, 633, 634, - 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, - 637, 638, 323, 324, 325, 639, 640, 327, 328, 641, - 330, 642, 643, 332, 644, 334, 335, 336, 645, 337, - 338, 646, 647, 339, 340, 341, 648, 649, 342, 343, - 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 654, 655, 656, 657, - 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, - 661, 370, 371, 372, 373, 374, 375, 662, 376, 377, - 378, 663, 380, 381, 382, 383, 664, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 665, 397, 398, 666, 400, 401, 402, 667, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 668, 669, 417, 418, 419, 420, 421, 422, 670, - 424, 425, 671, 672, 427, 428, 673, 430, 674, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 675, 444, 676, 677, 678, 446, 447, 679, 448, - 680, 450, 451, 452, 453, 454, 681, 455, 682, 683, - 684, 685, 458, 459, 686, 461, 687, 688, 463, 464, - 689, 466, 467, 468, 469, 470, 690, 691, 471, 472, - 473, 692, 474, 475, 476, 477, 693, 478, 479, 480, - 481, 482, 694, 695, 696, 485, 697, 487, 488, 489, - 490, 491, 492, 493, 698, 699, 494, 700, 701, 495, - 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, - 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 556, 125, 126, - 127, 557, 558, 559, 560, 561, 562, 563, 564, 565, - 129, 130, 566, 131, 132, 133, 567, 135, 136, 137, - 568, 569, 570, 571, 572, 573, 143, 144, 145, 146, - 147, 148, 574, 575, 149, 150, 151, 152, 576, 577, - 155, 578, 156, 157, 158, 159, 579, 580, 581, 582, - 583, 163, 164, 165, 166, 167, 584, 169, 170, 171, - 585, 172, 173, 174, 175, 176, 177, 586, 587, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 589, - 190, 191, 590, 193, 591, 194, 592, 195, 196, 197, - 198, 199, 200, 593, 594, 201, 202, 203, 204, 595, - 596, 205, 206, 207, 208, 209, 597, 210, 211, 212, - 598, 213, 214, 215, 599, 216, 217, 218, 219, 600, - 221, 222, 223, 224, 225, 601, 602, 227, 603, 228, - 229, 604, 231, 605, 232, 606, 233, 607, 608, 609, - 236, 237, 610, 611, 240, 612, 241, 613, 614, 615, - 244, 245, 616, 246, 247, 248, 249, 250, 251, 252, - 617, 254, 255, 256, 257, 618, 258, 259, 260, 261, - 262, 263, 264, 619, 265, 620, 621, 268, 269, 270, - 271, 272, 622, 623, 624, 625, 626, 276, 627, 628, - 279, 629, 281, 282, 283, 284, 285, 286, 630, 631, - 287, 632, 289, 633, 634, 291, 292, 293, 294, 295, - 296, 297, 298, 635, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 636, 637, 638, 323, 324, 325, - 639, 640, 327, 328, 641, 330, 642, 643, 332, 644, - 334, 335, 336, 645, 337, 338, 646, 647, 339, 340, - 341, 648, 649, 342, 343, 650, 651, 346, 652, 653, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 654, 655, 656, 657, 360, 361, 658, 659, 364, - 365, 660, 367, 368, 369, 661, 370, 371, 372, 373, - 374, 375, 662, 376, 377, 378, 663, 380, 381, 382, - 383, 664, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 665, 397, 398, 666, 400, - 401, 402, 667, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 668, 669, 417, 418, - 419, 420, 421, 422, 670, 424, 425, 671, 672, 427, - 428, 673, 430, 674, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 675, 444, 676, 677, - 678, 446, 447, 679, 448, 680, 450, 451, 452, 453, - 454, 681, 455, 682, 683, 684, 685, 458, 459, 686, - 461, 687, 688, 463, 464, 689, 466, 467, 468, 469, - 470, 690, 691, 471, 472, 473, 692, 474, 475, 476, - 477, 693, 478, 479, 480, 481, 482, 694, 695, 696, - 485, 697, 487, 488, 489, 490, 491, 492, 493, 698, - 699, 494, 700, 701, 495, 496, 497, 498, 499, 500, - 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 512, 513, 514, 515, 555, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 2227, 122, - 123, 124, 556, 125, 126, 127, 557, 558, 559, 560, - 561, 562, 563, 564, 565, 129, 130, 566, 131, 132, - 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, - 573, 143, 144, 145, 146, 147, 148, 574, 575, 149, - 150, 151, 152, 576, 577, 155, 578, 156, 157, 158, - 159, 579, 580, 581, 582, 583, 163, 164, 165, 166, - 167, 584, 169, 170, 171, 585, 172, 173, 174, 175, - 176, 177, 586, 587, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 589, 190, 191, 590, 193, 591, - 194, 592, 195, 196, 197, 198, 199, 200, 593, 594, - 201, 202, 203, 204, 595, 596, 205, 206, 207, 2228, - 209, 597, 210, 211, 212, 598, 213, 214, 215, 599, - 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, - 601, 602, 227, 603, 228, 229, 604, 231, 605, 232, - 606, 233, 607, 608, 609, 236, 237, 610, 611, 240, - 612, 241, 613, 614, 615, 244, 245, 616, 246, 247, - 248, 249, 250, 251, 252, 617, 254, 255, 256, 257, - 618, 258, 259, 260, 261, 262, 263, 264, 619, 265, - 620, 621, 268, 269, 270, 271, 272, 622, 623, 624, - 625, 626, 276, 627, 628, 279, 629, 281, 282, 283, - 284, 285, 286, 630, 631, 287, 632, 289, 633, 634, - 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, - 637, 638, 323, 324, 325, 639, 640, 327, 328, 641, - 330, 642, 643, 332, 644, 334, 335, 336, 645, 337, - 338, 646, 647, 339, 340, 341, 648, 649, 342, 343, - 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 654, 655, 656, 657, - 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, - 661, 370, 371, 372, 373, 374, 375, 662, 376, 377, - 378, 663, 380, 381, 382, 383, 664, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 665, 397, 398, 666, 400, 401, 402, 667, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 668, 669, 417, 418, 419, 420, 421, 2229, 670, - 424, 425, 671, 672, 427, 428, 673, 430, 674, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 675, 444, 676, 677, 678, 446, 447, 679, 448, - 680, 450, 451, 452, 453, 454, 681, 455, 682, 683, - 684, 685, 458, 459, 686, 461, 687, 688, 463, 464, - 689, 466, 467, 468, 469, 470, 690, 691, 471, 472, - 473, 692, 474, 475, 476, 477, 693, 478, 479, 480, - 481, 482, 694, 695, 696, 485, 697, 487, 488, 489, - 490, 491, 492, 493, 698, 699, 494, 700, 701, 495, - 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, - 964, 0, 815, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 560, 0, 0, 0, 0, 565, - 129, 130, 0, 131, 132, 133, 567, 135, 136, 137, - 568, 569, 570, 571, 572, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 576, 577, - 155, 0, 156, 157, 158, 159, 579, 0, 581, 0, - 583, 163, 164, 165, 166, 167, 584, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 587, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 589, - 190, 191, 590, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 600, - 221, 222, 223, 224, 225, 601, 1340, 227, 0, 228, - 229, 604, 231, 0, 232, 0, 233, 607, 0, 609, - 236, 237, 610, 611, 240, 0, 241, 0, 614, 615, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 617, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 620, 621, 268, 269, 270, - 271, 272, 622, 623, 0, 625, 0, 276, 627, 628, - 279, 629, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 632, 289, 633, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 635, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 636, 637, 638, 323, 324, 325, - 639, 0, 327, 328, 641, 330, 0, 643, 332, 644, - 334, 335, 336, 0, 337, 338, 1341, 0, 339, 340, - 341, 0, 0, 342, 343, 650, 651, 346, 652, 653, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 658, 659, 364, - 365, 660, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 663, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 666, 400, - 401, 402, 667, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 669, 417, 418, - 419, 420, 421, 422, 670, 424, 425, 0, 672, 427, - 428, 673, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 675, 444, 676, 0, - 0, 446, 447, 0, 448, 680, 450, 451, 452, 453, - 454, 0, 455, 682, 683, 0, 0, 458, 459, 686, - 461, 687, 1342, 463, 464, 689, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 694, 695, 0, - 485, 697, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 512, 513, 514, 515, 964, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 3, 4, 0, 560, - 0, 0, 0, 0, 565, 129, 130, 0, 131, 132, - 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 576, 577, 155, 0, 156, 157, 158, - 159, 579, 0, 581, 0, 583, 163, 164, 165, 166, - 167, 584, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 587, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 589, 190, 191, 590, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, - 601, 0, 227, 0, 228, 229, 604, 231, 0, 232, - 0, 233, 607, 0, 609, 236, 237, 610, 611, 240, - 0, 241, 0, 614, 615, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 617, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 620, 621, 268, 269, 270, 271, 272, 622, 623, 0, - 625, 0, 276, 627, 628, 279, 629, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 632, 289, 633, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, - 637, 638, 323, 324, 325, 639, 0, 327, 328, 641, - 330, 0, 643, 332, 644, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 663, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 666, 400, 401, 402, 667, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 669, 417, 418, 419, 420, 421, 422, 670, - 424, 425, 0, 672, 427, 428, 673, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 675, 444, 676, 0, 0, 446, 447, 0, 448, - 680, 450, 451, 452, 453, 454, 0, 455, 682, 683, - 0, 0, 458, 459, 686, 461, 687, 0, 463, 464, - 689, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 694, 695, 0, 485, 697, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 128, - 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 785, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 786, 0, 787, 0, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 788, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 234, 0, 235, - 236, 237, 238, 239, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 0, 327, 328, 329, 330, 0, 790, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 345, 346, 347, 792, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 793, 363, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 426, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 795, 0, - 0, 446, 447, 0, 448, 449, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 796, - 461, 797, 0, 463, 464, 798, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 128, 129, 130, 0, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 161, 0, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 288, 289, 290, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 0, 327, 328, 329, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 426, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 0, 0, 446, 447, 0, 448, - 449, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 1735, 156, 157, 158, 159, 160, 0, 0, 1736, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 1737, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 1738, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 1739, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 1740, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 1741, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 1735, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 1737, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 1738, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 2309, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 1740, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 1741, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 3, 4, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 550, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 551, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 791, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 896, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 791, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 938, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 1939, 0, 0, 0, - 0, 1940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 1947, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 1948, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 1949, 448, 0, 450, 1950, 452, 1951, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 1952, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 815, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 822, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 823, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 824, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 825, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 826, 457, - 0, 0, 827, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 859, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 891, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 894, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 898, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 926, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 954, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 957, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 1000, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 1023, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 822, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 826, 457, - 0, 0, 827, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 1298, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 1300, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 1303, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 1305, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 549, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 2223, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 1472, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 1473, - 0, 0, -785, 0, 1474, 129, 130, 0, 131, 132, - 133, 1475, 135, 136, 137, 0, 1476, 1477, 1478, 1479, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 1480, 1481, 155, 0, 156, 157, 158, - 159, 0, 0, 1482, 0, 1483, 163, 164, 165, 166, - 167, 1484, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 1485, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 1486, 190, 191, 1487, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 0, 221, 222, 223, 224, 225, - 0, 0, 227, 0, 228, 229, 1488, 231, 0, 232, - 0, 233, 1489, 0, 1490, 236, 237, -785, 1491, 240, - 0, 241, 0, 0, 0, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 1492, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 1493, 0, 268, 269, 270, 271, 272, 1494, 1495, 0, - 1496, 0, 276, 1497, 1498, 279, 1499, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 1500, 289, 1501, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 1502, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 1503, - 1504, 1505, 323, 324, 325, 0, 0, 327, 328, 1506, - 330, 0, 0, 332, 1507, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 0, 1508, 346, 1509, 0, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 0, 1510, 364, 365, 0, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 1511, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 1512, 400, 401, 402, 1513, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 1514, 417, 418, 419, 420, 421, 422, 1515, - 424, 425, 0, 1516, 427, 428, 1517, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 1518, 444, 0, 0, 0, 446, 447, 0, 448, - 1519, 450, 451, 452, 453, 454, 0, 455, 1520, 1521, - 0, 0, 458, 459, 0, 461, 0, 0, 463, 464, - 1522, 466, 467, 468, 469, 470, 1523, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 0, 1524, 0, 485, 1525, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 523, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 2964, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 837, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 838, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 839, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 840, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 841, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 950, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 839, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 841, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 1307, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 1318, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 1667, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 0, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 1843, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 244, 245, 0, 246, 247, 248, 249, 250, 2210, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, - 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, - 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, - 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, - 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, - 248, 249, 250, 2225, 252, 0, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, - 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, - 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, - 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, - 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, - 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, - 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 1472, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 1473, 0, 0, 0, 0, 1474, - 129, 130, 0, 131, 132, 133, 1475, 135, 136, 137, - 0, 1476, 1477, 1478, 1479, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 1480, 1481, - 155, 0, 156, 157, 158, 159, 0, 0, 1482, 0, - 1483, 163, 164, 165, 166, 167, 1484, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 1485, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 1486, - 190, 191, 1487, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 0, - 221, 222, 223, 224, 225, 0, 0, 227, 0, 228, - 229, 1488, 231, 0, 232, 0, 233, 1489, 0, 1490, - 236, 237, 0, 1491, 240, 0, 241, 0, 0, 0, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 1492, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 1493, 0, 268, 269, 270, - 271, 272, 1494, 1495, 0, 1496, 0, 276, 1497, 1498, - 279, 1499, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 1500, 289, 1501, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 1502, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 1503, 1504, 1505, 323, 324, 325, - 0, 0, 327, 328, 1506, 330, 0, 0, 332, 1507, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 0, 1508, 346, 1509, 0, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 0, 1510, 364, - 365, 0, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 1511, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 1512, 400, - 401, 402, 1513, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 1514, 417, 418, - 419, 420, 421, 422, 1515, 424, 425, 0, 1516, 427, - 428, 1517, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 1518, 444, 0, 0, - 0, 446, 447, 0, 448, 1519, 450, 451, 452, 453, - 454, 0, 455, 1520, 1521, 0, 0, 458, 459, 0, - 461, 0, 0, 463, 464, 1522, 466, 467, 468, 469, - 470, 1523, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 0, 1524, 0, - 485, 1525, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 1472, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 1473, 0, 0, 0, 0, 1474, - 129, 130, 0, 131, 132, 133, 1475, 135, 136, 137, - 0, 1476, 1477, 1478, 1479, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 1480, 1481, - 155, 0, 156, 157, 158, 159, 0, 0, 1482, 0, - 1483, 163, 164, 165, 166, 167, 1484, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 1485, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 1486, - 190, 191, 1487, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, - 0, 1825, 214, 215, 0, 216, 217, 218, 219, 0, - 221, 222, 223, 224, 225, 0, 0, 227, 0, 228, - 229, 1488, 231, 0, 232, 0, 233, 1489, 0, 1490, - 236, 237, 0, 1491, 240, 0, 241, 0, 0, 0, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 1492, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 1493, 0, 268, 269, 270, - 271, 272, 1494, 1495, 0, 1496, 0, 276, 1497, 1498, - 279, 1499, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 1500, 289, 1501, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 1502, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 1503, 1504, 1505, 323, 324, 325, - 0, 0, 327, 328, 1506, 330, 0, 0, 332, 1507, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 0, 1508, 346, 1509, 0, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 0, 1510, 364, - 365, 0, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 1511, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 1512, 400, - 401, 402, 1513, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 1514, 417, 418, - 419, 420, 421, 422, 1515, 424, 425, 0, 1516, 427, - 428, 1517, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 1518, 444, 0, 0, - 0, 446, 447, 0, 448, 1519, 450, 451, 452, 453, - 454, 0, 455, 1520, 1521, 0, 0, 458, 459, 0, - 461, 0, 0, 463, 464, 1522, 466, 467, 468, 469, - 470, 1523, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 0, 1524, 0, - 485, 1525, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 3135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 2886, 0, 0, 0, 0, 2887, - 129, 130, 0, 131, 132, 133, 2888, 135, 136, 137, - 0, 1476, 2889, 1478, 1479, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 1480, 1481, - 155, 0, 156, 157, 158, 159, 0, 0, 2890, 0, - 2891, 163, 164, 165, 166, 167, 2892, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 2893, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 1486, - 190, 191, 1487, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 0, - 221, 222, 223, 224, 225, 0, 0, 227, 0, 228, - 229, 1488, 231, 0, 232, 0, 233, 2894, 0, 2895, - 236, 237, 2896, 2897, 240, 0, 241, 0, 0, 0, - 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 2898, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 2899, 0, 268, 269, 270, - 271, 272, 1494, 1495, 0, 1496, 0, 276, 2900, 2901, - 279, 2902, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 2903, 289, 2904, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 3136, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 1503, 2906, 1505, 323, 324, 325, - 0, 0, 327, 328, 2908, 330, 0, 0, 332, 1507, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 0, 2910, 346, 2911, 0, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 0, 2912, 364, - 365, 0, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 377, 378, 1511, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 2913, 400, - 401, 402, 0, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 2914, 417, 418, - 419, 420, 421, 422, 0, 424, 425, 0, 2916, 427, - 428, 1517, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3137, 444, 0, 0, - 0, 446, 447, 0, 448, 2918, 450, 451, 452, 453, - 454, 0, 455, 1520, 1521, 0, 0, 458, 459, 0, - 461, 0, 0, 463, 464, 2919, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 0, 1524, 0, - 485, 2921, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, - 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, - 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, - 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, - 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, - 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, - 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, - 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, - 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, - 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, - 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, - 0, 245, 0, 246, 247, 248, 249, 250, 251, 252, - 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, - 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, - 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, - 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, - 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, - 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, - 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, - 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, - 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, - 349, 350, 351, 352, 353, 354, 0, 356, 357, 358, - 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, - 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, - 374, 375, 0, 376, 0, 378, 379, 380, 381, 382, - 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, - 401, 402, 403, 0, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, - 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, - 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, - 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, - 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, - 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, - 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, - 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, - 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 514, 515, 1762, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 0, 125, 126, 127, 0, 0, 0, 1473, - 0, 0, 0, 0, 1474, 129, 130, 0, 131, 132, - 133, 1475, 135, 136, 137, 0, 1476, 1477, 1478, 1479, - 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, - 150, 151, 152, 1480, 1481, 155, 0, 156, 157, 158, - 159, 0, 0, 1482, 0, 1483, 163, 164, 165, 166, - 167, 1484, 169, 170, 171, 0, 172, 173, 174, 175, - 176, 177, 0, 1485, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 1486, 190, 191, 1487, 193, 0, - 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, - 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, - 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, - 216, 217, 218, 219, 0, 221, 222, 223, 224, 225, - 0, 0, 227, 0, 228, 229, 1488, 231, 0, 232, - 0, 233, 1489, 0, 1490, 236, 237, 0, 1491, 240, - 0, 241, 0, 0, 0, 244, 245, 0, 246, 247, - 248, 249, 250, 251, 252, 1492, 254, 255, 256, 257, - 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, - 1493, 0, 268, 269, 270, 271, 272, 1494, 1495, 0, - 1496, 0, 276, 1497, 1498, 279, 1499, 281, 282, 283, - 284, 285, 286, 0, 0, 287, 1500, 289, 1501, 0, - 291, 292, 293, 294, 295, 296, 297, 298, 0, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 1503, - 1504, 1505, 323, 324, 325, 0, 0, 327, 328, 1506, - 330, 0, 0, 332, 1507, 334, 335, 336, 0, 337, - 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, - 0, 1508, 346, 1509, 0, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, - 360, 361, 0, 1510, 364, 365, 0, 367, 368, 369, - 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, - 378, 1511, 380, 381, 382, 383, 0, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 0, 397, 398, 1512, 400, 401, 402, 0, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 0, 1514, 417, 418, 419, 420, 421, 422, 0, - 424, 425, 0, 1516, 427, 428, 1517, 430, 0, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 0, 444, 0, 0, 0, 446, 447, 0, 448, - 1519, 450, 451, 452, 453, 454, 0, 455, 1520, 1521, - 0, 0, 458, 459, 0, 461, 0, 0, 463, 464, - 1522, 466, 467, 468, 469, 470, 0, 0, 471, 472, - 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 0, 1524, 0, 485, 1525, 487, 488, 489, - 490, 491, 492, 493, 0, 1, 494, 0, 0, 495, - 496, 497, 498, 499, 500, 2, 0, 3, 4, 0, - 0, 0, 0, 1, 0, 0, 512, 513, 514, 515, - 0, 0, 0, 2, 0, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 8, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, - 0, 11, 0, 746, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 11, - 0, 746, 0, 0, 0, 0, 0, 0, 0, 14, - 15, 0, 13, 0, 0, 0, 0, 0, 0, 0, - 747, 0, 0, 0, 0, 0, 18, 14, 15, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 747, 0, - 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, - 22, 0, 19, 0, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, - 0, 0, 0, 0, 0, 30, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 27, 28, 29, 0, 0, - 0, 0, 0, 30, 0, 0, 31, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 0, 0, 34, 0, 33, 0, 0, 0, 0, 35, - 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, - 34, 0, 0, 37, 0, 0, 0, 35, 0, 0, - 0, 36, 0, 0, 0, 38, 0, 0, 0, 39, - 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 38, 0, 0, 0, 39, 0, 40, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 40, 43, 0, - 0, 0, 0, 44, 0, 0, 0, 748, 0, 0, - 41, 0, 0, 0, 0, 0, 43, 0, 0, 45, - 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, - 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 749, 0, 0, - 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47 -}; - -static const yytype_int16 yycheck[] = -{ - 7, 0, 0, 516, 7, 89, 90, 895, 0, 16, - 87, 0, 835, 741, 920, 883, 23, 0, 858, 809, - 23, 990, 0, 0, 1221, 1570, 904, 981, 47, 1416, - 23, 1220, 7, 0, 16, 1689, 0, 1195, 0, 0, - 1234, 1032, 20, 20, 925, 972, 749, 1208, 23, 1155, - 981, 2156, 981, 955, 1651, 91, 981, 1462, 17, 91, - 23, 1197, 20, 959, 1079, 2269, 2270, 2271, 1981, 39, - 1321, 1200, 2221, 1296, 38, 1161, 0, 972, 2166, 1604, - 1605, 2640, 89, 90, 35, 1793, 89, 90, 2155, 1225, - 2135, 0, 2137, 1274, 0, 0, 89, 90, 2331, 46, - 0, 895, 0, 897, 26, 899, 1982, 2602, 0, 2638, - 0, 972, 1122, 2602, 89, 90, 2661, 1127, 1087, 2101, - 0, 999, 748, 0, 2217, 0, 89, 90, 2654, 0, - 0, 2476, 0, 0, 749, 2288, 0, 0, 102, 979, - 110, 0, 805, 0, 0, 1817, 1655, 810, 2558, 742, - 5, 0, 2562, 0, 0, 5, 9, 11, 13, 14, - 1707, 15, 16, 80, 1814, 2973, 11, 1709, 5, 5, - 767, 16, 5, 3, 1924, 5, 13, 14, 5, 5, - 5, 1053, 1054, 5, 9, 63, 13, 14, 5, 55, - 5, 5, 982, 5, 9, 5, 1811, 5, 1070, 2299, - 5, 13, 14, 13, 14, 5, 1133, 45, 2295, 5, - 2959, 5, 172, 2306, 107, 5, 5, 5, 5, 5, - 2300, 13, 14, 119, 139, 45, 2428, 2976, 63, 147, - 74, 13, 14, 122, 37, 4, 3, 4, 5, 42, - 9, 82, 9, 161, 171, 1106, 1086, 9, 166, 3140, - 1241, 100, 93, 5, 100, 878, 190, 11, 2814, 1250, - 1138, 15, 16, 4, 2357, 2358, 82, 2360, 9, 972, - 177, 122, 1133, 11, 878, 147, 180, 93, 16, 11, - 290, 1033, 1209, 15, 16, 1212, 1213, 295, 53, 802, - 1957, 63, 46, 124, 177, 873, 244, 3, 101, 217, - 104, 244, 63, 1970, 289, 171, 11, 287, 46, 295, - 15, 16, 2795, 192, 2797, 2932, 90, 2521, 275, 237, - 983, 119, 379, 212, 168, 1431, 80, 107, 34, 35, - 3304, 171, 995, 240, 117, 13, 14, 850, 132, 312, - 13, 46, 80, 312, 107, 217, 19, 973, 1209, 1189, - 117, 1212, 1213, 106, 1515, 129, 1462, 240, 31, 1950, - 1951, 1952, 1185, 1186, 132, 159, 2411, 2860, 286, 172, - 183, 342, 45, 46, 30, 80, 180, 295, 120, 64, - 1057, 1133, 38, 30, 30, 1608, 108, 165, 2572, 74, - 40, 38, 38, 366, 454, 172, 1073, 406, 1304, 122, - 365, 192, 161, 11, 388, 208, 313, 163, 41, 2968, - 381, 176, 1280, 1894, 137, 3337, 2124, 120, 3167, 3472, - 2979, 224, 2571, 295, 33, 476, 2915, 370, 193, 4, - 75, 234, 108, 198, 9, 108, 2520, 272, 2522, 1548, - 289, 2970, 249, 289, 1925, 416, 509, 148, 1557, 500, - 59, 218, 194, 516, 514, 1336, 1208, 3431, 2546, 468, - 3513, 518, 3270, 370, 170, 268, 172, 274, 272, 191, - 377, 236, 80, 240, 230, 2568, 355, 2570, 237, 357, - 274, 279, 1343, 1344, 328, 279, 2468, 370, 166, 2673, - 284, 194, 272, 126, 451, 466, 279, 250, 199, 40, - 448, 428, 163, 278, 514, 448, 1521, 260, 3430, 358, - 518, 314, 358, 420, 3405, 422, 284, 3000, 321, 1742, - 2722, 3138, 357, 416, 337, 175, 444, 279, 3084, 514, - 514, 308, 518, 307, 514, 8, 509, 420, 11, 422, - 509, 448, 15, 16, 1296, 323, 19, 20, 21, 514, - 454, 386, 1149, 366, 514, 240, 2101, 472, 361, 3367, - 456, 352, 451, 2650, 1187, 448, 514, 2667, 213, 1974, - 534, 514, 444, 403, 404, 413, 503, 380, 1736, 1092, - 514, 588, 1422, 1187, 1162, 357, 2499, 428, 428, 516, - 2683, 2671, 1320, 413, 512, 512, 357, 1325, 516, 516, - 451, 445, 1853, 1331, 327, 3098, 588, 370, 1480, 1481, - 271, 514, 428, 1436, 2139, 392, 1797, 2367, 393, 3368, - 2165, 425, 2706, 454, 3117, 2172, 391, 476, 3154, 1452, - 476, 2173, 1829, 1505, 175, 1338, 265, 463, 503, 149, - 518, 435, 476, 132, 478, 3140, 449, 421, 514, 514, - 2159, 3140, 446, 507, 508, 509, 510, 2329, 2308, 514, - 513, 478, 1653, 1886, 514, 510, 515, 522, 517, 515, - 517, 517, 522, 478, 1868, 1898, 512, 514, 514, 3089, - 516, 514, 2831, 500, 3094, 2838, 2301, 514, 514, 514, - 200, 320, 514, 1565, 1566, 500, 117, 514, 3043, 514, - 514, 1562, 514, 289, 514, 1928, 514, 1547, 1548, 514, - 3269, 1337, 1935, 1574, 514, 1576, 800, 1557, 514, 1597, - 1598, 1599, 514, 1338, 514, 514, 514, 514, 514, 2962, - 749, 1571, 514, 3278, 1327, 476, 505, 506, 505, 506, - 396, 1602, 749, 505, 506, 2812, 518, 2951, 1971, 396, - 396, 3277, 1975, 507, 508, 509, 510, 2424, 464, 500, - 1600, 30, 108, 1515, 505, 506, 1429, 3381, 161, 190, - 748, 748, 510, 505, 506, 507, 508, 509, 510, 30, - 2003, 800, 789, 161, 2697, 274, 789, 356, 166, 161, - 3070, 749, 3072, 800, 166, 284, 415, 800, 1979, 430, - 505, 506, 507, 508, 509, 510, 883, 800, 71, 72, - 1487, 454, 848, 244, 789, 244, 848, 386, 291, 503, - 3379, 2412, 2413, 2414, 2415, 800, 789, 82, 835, 836, - 1507, 1937, 516, 416, 453, 3364, 2818, 800, 93, 1766, - 258, 259, 0, 26, 237, 1706, 1707, 1838, 479, 1776, - 478, 858, 1779, 274, 3468, 2731, 1608, 517, 2734, 237, - 2736, 2774, 784, 132, 2957, 237, 1543, 2865, 1974, 868, - 868, 514, 500, 1761, 2125, 2873, 868, 464, 551, 868, - 177, 132, 3230, 853, 3232, 868, 837, 838, 244, 840, - 868, 868, 1620, 286, 3423, 902, 903, 1410, 856, 906, - 907, 868, 518, 873, 868, 1766, 868, 868, 286, 2617, - 3405, 2619, 859, 3193, 286, 1776, 3405, 37, 1779, 82, - 3271, 513, 1006, 2468, 13, 14, 1794, 1795, 1796, 1013, - 93, 26, 524, 3492, 244, 1945, 226, 32, 1819, 370, - 1734, 370, 1869, 240, 868, 274, 2052, 3180, 244, 1851, - 59, 3100, 959, 1855, 137, 5, 1858, 375, 376, 868, - 3308, 2486, 868, 868, 1860, 972, 925, 1761, 868, 119, - 868, 978, 979, 108, 1869, 3080, 868, 984, 868, 173, - 987, 988, 272, 990, 991, 992, 993, 1781, 868, 4, - 1742, 868, 1786, 868, 9, 973, 973, 868, 868, 1006, - 868, 868, 2389, 1006, 868, 868, 1013, 226, 1869, 868, - 1013, 868, 868, 1006, 370, 3366, 513, 448, 3369, 448, - 1013, 365, 366, 202, 1031, 1032, 1033, 524, 501, 502, - 503, 1006, 505, 506, 507, 508, 509, 510, 1013, 509, - 173, 352, 137, 1006, 1772, 1052, 516, 2244, 338, 1777, - 1013, 245, 172, 272, 274, 2141, 206, 2602, 2144, 279, - 370, 26, 171, 514, 1071, 1876, 4, 32, 1087, 1880, - 743, 9, 1883, 377, 370, 1082, 1083, 1084, 2786, 1086, - 1087, 2994, 1089, 514, 11, 514, 202, 2310, 208, 2195, - 4, 2272, 448, 1933, 147, 9, 3245, 377, 512, 389, - 514, 30, 516, 26, 224, 251, 342, 1089, 161, 32, - 293, 1118, 245, 166, 234, 3466, 336, 2253, 3322, 46, - 26, 478, 272, 420, 274, 422, 32, 1988, 1135, 1136, - 13, 14, 1168, 1169, 1886, 1171, 1168, 1169, 448, 1171, - 3330, 3331, 416, 500, 515, 381, 1898, 518, 342, 1009, - 512, 448, 448, 80, 516, 1015, 85, 514, 514, 478, - 433, 451, 2131, 1170, 217, 94, 1869, 1174, 1175, 374, - 389, 354, 137, 356, 2014, 377, 1928, 1184, 1185, 1186, - 416, 500, 1189, 1935, 237, 466, 859, 381, 2317, 118, - 132, 370, 1162, 3383, 2323, 514, 514, 132, 293, 25, - 26, 1208, 381, 386, 514, 314, 315, 316, 8, 342, - 1421, 11, 1423, 1424, 137, 15, 16, 159, 514, 1971, - 2443, 512, 416, 1975, 159, 516, 823, 824, 825, 1981, - 466, 137, 451, 286, 1241, 6, 512, 416, 166, 10, - 516, 361, 295, 1250, 13, 14, 46, 18, 381, 2089, - 420, 2003, 422, 53, 1224, 350, 420, 1004, 422, 354, - 380, 190, 33, 13, 14, 1014, 37, 1274, 2136, 1018, - 379, 514, 466, 2818, 203, 1022, 420, 2138, 422, 1026, - 80, 837, 838, 416, 840, 13, 14, 466, 114, 1296, - 514, 386, 26, 26, 507, 2700, 1295, 1295, 32, 32, - 514, 188, 189, 1295, 514, 1312, 1295, 416, 514, 74, - 2171, 2172, 515, 988, 1321, 518, 515, 13, 14, 518, - 2426, 26, 2224, 2429, 2226, 171, 515, 32, 293, 518, - 1312, 1338, 274, 466, 512, 3484, 514, 279, 515, 514, - 449, 518, 284, 515, 279, 145, 518, 515, 1355, 284, - 518, 460, 117, 515, 1361, 420, 518, 422, 1442, 1337, - 1337, 1445, 457, 2227, 515, 2229, 1450, 518, 500, 1453, - 293, 258, 259, 1355, 1458, 515, 176, 2200, 518, 2602, - 1338, 3469, 2568, 3471, 2570, 350, 514, 293, 2585, 354, - 3435, 444, 2298, 193, 515, 2584, 515, 518, 198, 518, - 514, 1408, 1409, 137, 137, 514, 3451, 1414, 875, 1416, - 877, 2569, 514, 1416, 1421, 1422, 1423, 1424, 13, 14, - 514, 386, 2616, 515, 3512, 515, 518, 350, 518, 1436, - 1437, 354, 137, 171, 515, 1442, 236, 518, 1445, 1442, - 514, 1416, 1445, 1450, 2633, 1452, 1453, 1450, 354, 1442, - 1453, 1458, 1445, 1416, 2583, 1458, 2585, 1450, 2473, 2474, - 1453, 3506, 497, 386, 223, 1458, 3511, 1442, 515, 515, - 1445, 518, 518, 402, 516, 1450, 405, 82, 1453, 1442, - 386, 1154, 1445, 1458, 13, 14, 289, 1450, 375, 376, - 1453, 291, 457, 435, 497, 1458, 516, 2451, 2452, 2453, - 435, 13, 14, 108, 446, 42, 170, 2476, 1515, 274, - 515, 446, 518, 518, 279, 3223, 37, 3225, 13, 14, - 2451, 2452, 2451, 515, 515, 2450, 518, 518, 515, 515, - 515, 518, 518, 518, 457, 8, 515, 177, 11, 518, - 1547, 1548, 15, 16, 13, 14, 19, 20, 21, 1556, - 1557, 457, 515, 13, 14, 518, 5, 1564, 2310, 293, - 293, 1544, 202, 328, 1571, 514, 1544, 1544, 173, 515, - 107, 515, 109, 294, 111, 515, 515, 1544, 518, 344, - 1544, 515, 1544, 1544, 518, 171, 2447, 2448, 293, 1596, - 514, 391, 59, 1600, 497, 3140, 1603, 202, 13, 14, - 240, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, - 1617, 2339, 13, 14, 1621, 1622, 350, 350, 417, 1626, - 354, 354, 515, 1630, 152, 518, 1633, 1634, 1635, 1636, - 1637, 1638, 1639, 1640, 1641, 1617, 3233, 1644, 515, 223, - 245, 518, 2345, 350, 1651, 350, 1653, 13, 14, 354, - 147, 172, 386, 386, 294, 1328, 1692, 1330, 2881, 2537, - 1692, 13, 14, 515, 161, 1672, 518, 515, 177, 166, - 518, 152, 515, 515, 2832, 518, 518, 126, 127, 40, - 445, 386, 2879, 515, 13, 14, 518, 208, 1695, 454, - 152, 2443, 515, 202, 515, 518, 152, 518, 498, 1706, - 1707, 13, 14, 224, 152, 505, 506, 507, 508, 509, - 510, 515, 1670, 234, 13, 14, 13, 14, 13, 14, - 217, 416, 171, 457, 457, 198, 13, 14, 13, 14, - 370, 240, 171, 1408, 1409, 1742, 514, 2560, 274, 1414, - 237, 2602, 13, 14, 1751, 89, 1753, 2499, 221, 13, - 14, 40, 457, 466, 2915, 2623, 365, 366, 2664, 365, - 366, 2955, 152, 2644, 480, 370, 365, 366, 152, 1751, - 516, 1753, 262, 263, 2676, 152, 381, 375, 376, 3433, - 420, 152, 422, 3437, 289, 294, 1793, 459, 460, 286, - 1797, 3446, 3447, 1800, 1801, 352, 2787, 3184, 295, 439, - 3478, 3479, 1135, 1136, 428, 445, 514, 171, 448, 515, - 514, 416, 514, 514, 418, 3038, 219, 224, 291, 299, - 514, 514, 224, 40, 224, 296, 235, 514, 5, 5, - 514, 1838, 324, 514, 439, 514, 514, 5, 5, 3493, - 361, 514, 5, 514, 5, 148, 1853, 9, 514, 514, - 2602, 477, 104, 1860, 1861, 301, 518, 518, 515, 380, - 3405, 466, 1869, 219, 386, 314, 315, 316, 40, 286, - 1834, 2732, 166, 166, 1958, 314, 315, 316, 284, 1886, - 1964, 59, 235, 1890, 1891, 514, 1893, 428, 93, 514, - 518, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 428, 59, - 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, - 59, 420, 428, 422, 265, 1922, 1923, 3140, 428, 1926, - 108, 1928, 524, 221, 428, 428, 1933, 476, 1935, 152, - 379, 100, 377, 37, 274, 274, 445, 514, 42, 448, - 379, 390, 40, 2870, 274, 2697, 274, 444, 1955, 514, - 3337, 1958, 274, 1960, 198, 1958, 782, 1964, 784, 152, - 171, 1964, 3151, 412, 1971, 1958, 516, 416, 1975, 13, - 1977, 1964, 1979, 515, 1981, 515, 171, 416, 224, 518, - 2882, 2883, 515, 1958, 515, 473, 224, 514, 814, 1964, - 515, 515, 515, 3380, 514, 1958, 2003, 101, 535, 2727, - 449, 1964, 281, 540, 281, 518, 543, 2014, 2015, 2870, - 449, 460, 514, 839, 2875, 512, 516, 516, 515, 516, - 463, 460, 2774, 514, 39, 514, 9, 476, 501, 502, - 503, 514, 505, 506, 507, 508, 509, 510, 3029, 514, - 3009, 472, 514, 3430, 514, 426, 426, 2054, 11, 513, - 352, 500, 2059, 2060, 426, 518, 524, 518, 523, 514, - 279, 2922, 2923, 171, 1737, 514, 428, 514, 172, 180, - 2089, 162, 171, 3267, 1747, 514, 1749, 2084, 2085, 1752, - 518, 8, 2089, 515, 454, 1758, 217, 1760, 15, 16, - 518, 117, 19, 20, 21, 265, 2103, 389, 226, 2106, - 1773, 2108, 3208, 290, 208, 1778, 312, 518, 312, 1782, - 1783, 1784, 1785, 518, 1787, 1788, 180, 2124, 2125, 219, - 224, 126, 127, 2851, 2131, 226, 515, 2134, 514, 2881, - 234, 2134, 274, 226, 333, 287, 295, 40, 514, 466, - 514, 2134, 152, 152, 2151, 171, 972, 3, 2151, 152, - 476, 152, 152, 274, 514, 981, 289, 2164, 2151, 2134, - 3, 40, 289, 2915, 268, 59, 171, 171, 40, 11, - 166, 2134, 515, 515, 2181, 2182, 2151, 515, 515, 514, - 514, 180, 3405, 514, 166, 289, 3, 39, 2151, 3, - 515, 2198, 512, 2200, 512, 303, 428, 428, 428, 428, - 513, 515, 2209, 518, 1030, 515, 314, 315, 316, 516, - 314, 3408, 3118, 497, 523, 515, 497, 321, 171, 515, - 2227, 2228, 2229, 497, 1899, 1900, 1901, 1902, 1903, 1904, - 428, 514, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, - 1915, 1916, 2994, 515, 514, 2227, 2228, 2229, 515, 515, - 515, 514, 514, 155, 791, 249, 514, 361, 473, 2266, - 40, 59, 518, 503, 499, 2272, 1033, 3128, 3129, 290, - 1096, 379, 290, 518, 243, 59, 380, 303, 451, 3140, - 1106, 59, 428, 274, 265, 2304, 3038, 2990, 314, 315, - 316, 152, 514, 202, 2293, 2293, 428, 152, 1124, 152, - 514, 2293, 428, 2310, 2293, 428, 428, 1133, 416, 314, - 315, 316, 515, 281, 281, 40, 352, 514, 518, 515, - 476, 2328, 287, 289, 2331, 40, 177, 152, 279, 515, - 171, 514, 514, 870, 515, 515, 515, 59, 2345, 185, - 166, 449, 3210, 80, 2351, 449, 512, 143, 198, 2331, - 454, 202, 460, 379, 3194, 171, 3196, 3235, 515, 8, - 515, 515, 11, 514, 291, 515, 15, 16, 476, 2351, - 19, 20, 21, 514, 379, 515, 524, 171, 300, 518, - 917, 515, 2389, 3206, 358, 390, 2389, 36, 3140, 240, - 416, 290, 500, 180, 514, 932, 933, 934, 935, 515, - 152, 518, 515, 175, 514, 439, 514, 412, 515, 2084, - 2085, 416, 515, 515, 2389, 40, 40, 514, 86, 3209, - 516, 2428, 3212, 449, 514, 2428, 2389, 3396, 515, 518, - 514, 454, 518, 3339, 460, 171, 2443, 2514, 514, 198, - 515, 1208, 475, 294, 449, 515, 515, 513, 985, 460, - 476, 513, 2459, 518, 515, 460, 515, 2476, 2465, 2466, - 3348, 3329, 313, 515, 515, 289, 503, 59, 515, 2476, - 515, 476, 515, 2146, 500, 515, 204, 117, 476, 40, - 2487, 226, 514, 2490, 88, 2492, 191, 279, 514, 279, - 2509, 40, 2499, 2500, 516, 500, 2503, 2504, 40, 516, - 3323, 2508, 2509, 516, 516, 513, 503, 428, 2515, 514, - 516, 60, 274, 107, 516, 476, 40, 9, 428, 370, - 314, 315, 316, 2530, 7, 8, 377, 516, 1354, 1296, - 13, 516, 1358, 2540, 289, 515, 19, 516, 516, 516, - 23, 2560, 25, 26, 3405, 2528, 516, 30, 31, 32, - 2528, 2528, 35, 2560, 516, 38, 39, 106, 516, 42, - 516, 2528, 45, 46, 2528, 515, 2528, 2528, 516, 420, - 2534, 422, 221, 516, 501, 502, 503, 516, 505, 506, - 507, 508, 509, 510, 516, 379, 516, 516, 439, 513, - 516, 351, 2599, 516, 445, 2602, 2603, 448, 2605, 516, - 516, 516, 516, 516, 516, 516, 89, 90, 516, 515, - 2617, 518, 2619, 514, 514, 335, 514, 2599, 514, 102, - 515, 2603, 416, 2605, 107, 108, 109, 110, 111, 514, - 518, 59, 515, 198, 191, 513, 518, 459, 91, 515, - 344, 514, 291, 40, 2643, 2643, 152, 2320, 516, 3377, - 515, 2643, 201, 3405, 2643, 449, 40, 1194, 124, 152, - 40, 515, 40, 366, 366, 26, 460, 515, 40, 514, - 1207, 32, 454, 309, 514, 2639, 60, 514, 514, 40, - 518, 279, 476, 190, 248, 454, 439, 2694, 74, 292, - 2697, 1228, 74, 514, 9, 80, 515, 515, 368, 60, - 2719, 250, 2666, 514, 513, 2669, 500, 2714, 2715, 515, - 2794, 260, 2719, 513, 59, 2722, 93, 133, 503, 2722, - 514, 272, 106, 272, 40, 439, 289, 515, 514, 459, - 292, 514, 8, 292, 515, 11, 515, 204, 515, 15, - 16, 289, 2749, 289, 515, 106, 122, 386, 1515, 40, - 451, 365, 148, 25, 1291, 304, 2763, 36, 365, 297, - 1297, 2768, 2769, 868, 2875, 2586, 2773, 2774, 2222, 60, - 46, 2778, 1033, 0, 2781, 2782, 137, 53, 1759, 2786, - 2787, 2599, 1671, 2790, 2265, 1803, 2292, 2794, 3301, 2808, - 1232, 2794, 2351, 20, 2801, 783, 23, 2990, 3354, 3461, - 3111, 2794, 3409, 2635, 80, 3418, 3454, 356, 1195, 3169, - 2215, 38, 2228, 2655, 2578, 106, 26, 201, 3407, 2794, - 47, 3416, 32, 2212, 2605, 3404, 1292, 2539, 2503, 2504, - 40, 2794, 381, 1320, 2334, 1661, 1860, 1338, 2845, 3299, - 201, 1608, 3237, 2538, 3380, 3333, 2853, 3483, 2528, 2198, - 60, 400, 501, 502, 503, 2164, 505, 506, 507, 508, - 509, 510, 89, 90, 91, 2872, 250, 1005, 1154, 145, - 1005, 1731, 1358, 1178, 2881, 102, 260, 2410, 3389, 2181, - 1695, 3310, 3198, 1730, 175, 23, 1177, 2151, 272, 250, - 2563, 2564, 1180, 2722, 1969, 3033, 106, 789, 983, 260, - 176, 2389, 1439, 800, 2388, 2435, 3132, 1984, 2915, 981, - 201, 272, 1869, 981, 981, 3314, 3313, 193, 2591, 2061, - 304, 981, 198, 981, 981, 981, 981, 137, 2466, 2016, - 2165, 2107, 293, 2606, 2607, 2608, 2609, 2610, 2611, 2612, - 2613, 2614, 2615, 304, 2104, 2063, 2483, 1208, 1670, 2801, - 1977, 102, 1437, -1, 2961, 2962, -1, -1, -1, 250, - 236, -1, -1, 1789, -1, -1, 515, -1, -1, 260, - -1, -1, 356, -1, -1, 1742, 1802, 1803, -1, -1, - 2962, 272, -1, 2990, -1, -1, 2993, 2994, -1, 350, - 3009, 201, -1, 354, -1, 356, -1, 381, -1, -1, - -1, -1, 3009, 40, -1, -1, -1, 2971, -1, -1, - -1, -1, -1, 304, -1, 291, 400, -1, -1, 2694, - 381, -1, 3029, 60, -1, 386, -1, -1, -1, -1, - -1, 3038, -1, -1, -1, 1296, 3043, -1, -1, 400, - 250, -1, -1, 1869, -1, -1, -1, 3054, 3055, 1875, - 260, 3058, 535, 3060, -1, -1, -1, 540, -1, -1, - 543, -1, 272, -1, -1, 356, -1, -1, 551, 106, - 107, -1, -1, -1, -1, -1, -1, -1, 3085, -1, - 117, -1, -1, 293, -1, -1, -1, -1, -1, -1, - 381, -1, -1, -1, 304, -1, 457, 8, -1, -1, - 11, -1, 3109, -1, 15, 16, -1, -1, 1033, 400, - -1, -1, -1, -1, -1, 391, -1, -1, -1, 1886, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1898, 1669, 3140, 1671, 46, -1, -1, 175, -1, - 350, -1, 53, -1, 354, 1682, 356, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 1033, -1, - -1, 1928, -1, -1, 201, -1, -1, -1, 1935, 80, - -1, 381, 3179, 3180, 1033, -1, 386, 3184, 2853, 2852, - -1, 3184, -1, 1720, -1, -1, -1, 3194, -1, 3196, - 400, 3198, 3156, 3157, -1, 3202, -1, 3204, 3180, 3206, - -1, -1, -1, -1, 1971, -1, -1, -1, 1975, 3184, - 37, 3218, -1, 250, 1981, 42, 3223, -1, 3225, -1, - -1, 3184, 498, 260, -1, -1, 3233, -1, -1, 505, - 506, 507, 508, 509, 510, 272, 2003, 274, -1, 3246, - -1, -1, -1, -1, 3251, -1, -1, 457, -1, -1, - -1, -1, -1, -1, 1515, -1, -1, -1, 741, 742, - 743, -1, -1, -1, 3246, 176, -1, 304, -1, -1, - 3234, -1, 3236, -1, 101, -1, 1813, 1814, 1815, 1816, - -1, 1818, 193, 1208, -1, -1, -1, 198, -1, -1, - -1, -1, -1, 3300, -1, -1, -1, -1, -1, 782, - 783, 784, -1, 3310, -1, -1, 789, 534, 791, 1033, - -1, -1, 3276, -1, -1, -1, 3323, 800, 2993, 356, - -1, 804, 805, -1, -1, 236, 809, 810, 3292, -1, - 3337, -1, 3296, 1208, 3337, -1, -1, -1, -1, -1, - 823, 824, 825, -1, 381, 172, -1, 1608, 3355, 1208, - -1, -1, -1, 180, 837, 838, -1, 840, -1, -1, - -1, -1, 3337, 400, 3, 402, 5, -1, 405, -1, - 853, 1296, -1, 3380, 3337, -1, 859, 3380, -1, -1, - 291, 208, -1, -1, -1, -1, -1, 870, -1, 3396, - 873, -1, -1, -1, -1, 0, -1, 224, 3405, -1, - 3407, -1, -1, -1, -1, 3380, -1, 234, 2234, -1, - -1, -1, 1949, -1, -1, -1, -1, 3380, -1, -1, - -1, 1296, -1, 3430, -1, 3407, -1, 3430, -1, 68, - 69, -1, -1, -1, 917, 918, -1, 1296, 3445, 3446, - 3447, 268, -1, -1, -1, -1, -1, 3120, -1, 932, - 933, 934, 935, 936, -1, 3430, -1, -1, 3422, -1, - 2286, -1, 289, -1, -1, 3472, 949, 3430, 3141, 3142, - 109, 110, -1, -1, 113, 114, -1, 514, 2304, -1, - 391, 1742, -1, -1, 1208, 3449, -1, 314, -1, -1, - -1, 37, -1, 3166, 321, 100, 42, -1, -1, 982, - 983, -1, 985, -1, -1, 988, 3513, -1, -1, -1, - -1, 994, 995, -1, -1, -1, -1, 1000, -1, 2345, - -1, 748, 749, 1006, -1, -1, -1, 2353, -1, 2355, - 1013, -1, -1, 2359, 361, 2361, -1, -1, -1, -1, - 1023, -1, 147, 2310, -1, -1, -1, 1030, -1, 188, - 189, -1, 13, 380, -1, 101, 161, 1040, 19, -1, - -1, 166, 789, -1, -1, -1, 171, -1, -1, -1, - 31, -1, 1296, 800, -1, 180, -1, -1, -1, -1, - 185, -1, -1, -1, 45, 46, -1, 498, -1, -1, - 1515, -1, -1, -1, 505, 506, 507, 508, 509, 510, - -1, -1, -1, -1, -1, -1, -1, -1, 1091, -1, - -1, -1, 217, 252, 253, 254, 255, 256, 257, 258, - 259, 848, 449, 262, 263, 1886, 172, 454, -1, 151, - -1, -1, 237, -1, -1, -1, -1, 1898, -1, -1, - 1515, 868, -1, -1, -1, -1, -1, 108, -1, 171, - -1, -1, 8, -1, 1137, 11, 1515, 1140, -1, 15, - 16, -1, 208, 19, 20, 21, -1, 1928, -1, -1, - -1, 1154, 1155, -1, 1935, -1, 2443, -1, 224, 1162, - 36, 286, -1, 1608, 289, -1, -1, -1, 234, -1, - 295, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1184, -1, -1, -1, -1, -1, -1, -1, -1, - 1971, 1194, 1195, -1, 1975, 55, -1, -1, -1, -1, - 1981, -1, 268, -1, 1207, -1, -1, -1, 3401, -1, - 335, -1, 2499, 1608, -1, -1, 375, 376, -1, -1, - -1, 1224, 2003, 289, -1, 1228, 973, -1, -1, 1608, - 1233, -1, -1, 358, -1, 74, -1, 2294, -1, -1, - -1, 80, 102, -1, -1, -1, -1, -1, 314, -1, - 2307, 2308, 2309, -1, 93, 321, 2602, -1, -1, 1006, - -1, -1, -1, 123, -1, 2322, 1013, -1, 2325, -1, - -1, 1515, 314, 315, 316, -1, 2333, -1, 117, -1, - 119, 141, -1, -1, -1, 145, 1289, -1, 1291, 2635, - -1, 416, -1, -1, 1297, 361, -1, 1742, -1, -1, - -1, 1048, -1, -1, -1, -1, -1, 167, 1311, -1, - 170, 470, 471, 1060, 380, 2602, -1, 1320, -1, 444, - -1, -1, 1325, -1, 1327, 1328, 186, 1330, 1331, 454, - -1, -1, -1, -1, -1, 494, 495, 379, -1, -1, - 1087, -1, -1, -1, -1, 221, -1, 1742, 473, -1, - 475, 476, -1, -1, -1, 1358, -1, -1, -1, -1, - 2417, 2418, 2419, 1742, 1608, -1, -1, 206, -1, -1, - -1, -1, -1, -1, 416, -1, -1, -1, 2724, -1, - -1, -1, -1, 449, -1, -1, 8, 512, -1, 11, - 515, 516, 517, 15, 16, -1, -1, 19, 20, 21, - -1, -1, -1, -1, -1, 1408, 1409, 449, -1, -1, - 2697, 1414, -1, 1416, 36, 291, -1, -1, 460, 279, - -1, 1168, 1169, -1, 1171, -1, 1429, 287, 1431, 1432, - -1, -1, -1, -1, 476, 274, 1439, -1, -1, 1442, - 279, 1886, 1445, -1, -1, -1, -1, 1450, -1, 309, - 1453, -1, 2798, 1898, -1, 1458, -1, 1460, 500, 1462, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 514, -1, 151, -1, 336, -1, -1, -1, - -1, -1, -1, 1928, -1, -1, -1, 2774, -1, 328, - 1935, 1886, -1, -1, 171, -1, -1, 2554, 1742, -1, - -1, -1, -1, 1898, -1, 344, -1, 1886, -1, 8, - -1, -1, 11, -1, -1, -1, 15, 16, -1, 1898, - 19, 20, 21, -1, -1, -1, 1971, -1, -1, 2310, - 1975, -1, -1, 1928, -1, -1, 1981, -1, -1, -1, - 1935, -1, -1, -1, -1, -1, -1, -1, -1, 1928, - -1, -1, -1, -1, -1, -1, 1935, -1, 2003, -1, - -1, -1, -1, -1, -1, -1, -1, 1570, -1, -1, - 551, -1, -1, -1, -1, -1, 1971, -1, 1581, -1, - 1975, -1, -1, -1, -1, -1, 1981, -1, 2645, -1, - 1337, -1, 1971, -1, 2881, -1, 1975, -1, -1, 221, - -1, -1, 1981, -1, -1, -1, 445, -1, 2003, -1, - -1, -1, -1, -1, -1, 454, -1, 1620, -1, -1, - -1, 2967, -1, -1, 2003, 501, 502, 503, 2915, 505, - 506, 507, 508, 509, 510, -1, -1, 314, 315, 316, - 8, -1, 1886, 11, 2990, -1, -1, 15, 16, -1, - 2707, 2708, 2709, 2710, 1898, -1, -1, -1, -1, -1, - -1, -1, 2443, -1, 1667, -1, 1669, -1, 1671, 291, - -1, -1, -1, -1, -1, -1, -1, -1, 46, 1682, - 1683, -1, -1, -1, 1928, 53, -1, -1, -1, -1, - -1, 1935, 1695, -1, -1, 1442, -1, -1, 1445, 198, - -1, -1, 379, 1450, -1, -1, 1453, 2994, -1, -1, - -1, 1458, 80, -1, -1, -1, -1, 1720, 2499, 1722, - -1, -1, 221, -1, -1, 3071, -1, 1971, -1, -1, - -1, 1975, -1, 1736, 1737, -1, -1, 1981, -1, 416, - -1, -1, -1, -1, 1747, 1748, 1749, 1750, -1, 1752, - -1, 3038, -1, -1, -1, 1758, -1, 1760, -1, 2003, - -1, 742, 743, -1, -1, -1, -1, -1, -1, 1772, - 1773, -1, 449, -1, 1777, 1778, -1, 145, -1, 1782, - 1783, 1784, 1785, 460, 1787, 1788, -1, -1, -1, -1, - -1, -1, 291, -1, 3140, -1, -1, 1544, -1, 476, - -1, 1804, 2859, -1, -1, -1, -1, -1, 176, -1, - 1813, 1814, 1815, 1816, 1817, 1818, -1, -1, -1, -1, - -1, 2602, -1, 500, -1, 193, -1, -1, -1, 1832, - 198, -1, -1, -1, -1, -1, -1, 514, -1, -1, - -1, -1, -1, -1, -1, 1848, -1, -1, -1, -1, - -1, -1, -1, 3140, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2310, -1, -1, 236, -1, - -1, -1, -1, -1, -1, -1, 1623, -1, 859, 501, - 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, - -1, -1, -1, -1, -1, -1, 1899, 1900, 1901, 1902, - 1903, 1904, -1, -1, 1907, 1908, 1909, 1910, 1911, 1912, - 1913, 1914, 1915, 1916, -1, 2310, 2697, -1, -1, -1, - -1, -1, 3268, 291, -1, -1, -1, -1, -1, -1, - -1, 2310, -1, -1, 1937, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1692, 1949, -1, -1, -1, - -1, -1, -1, -1, -1, 1958, -1, -1, -1, -1, - -1, 1964, 8, -1, -1, 11, 1969, -1, -1, 15, - 16, 1974, -1, 19, 20, 21, -1, -1, -1, -1, - 1983, 1984, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, 2774, -1, -1, -1, -1, 2443, -1, - -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, - 509, 510, -1, -1, -1, -1, -1, -1, -1, 1000, - -1, -1, -1, 391, -1, 8, -1, -1, 11, -1, - -1, -1, 15, 16, -1, -1, -1, -1, -1, -1, - -1, -1, 1023, -1, -1, -1, -1, -1, 2443, 2052, - -1, -1, -1, 2056, 2499, -1, -1, -1, 2061, 3405, - -1, -1, -1, 46, 2443, -1, 2310, -1, -1, -1, - 53, -1, -1, -1, -1, -1, -1, -1, 1825, -1, - -1, 2084, 2085, -1, -1, -1, -1, 1834, -1, -1, - -1, -1, -1, -1, -1, -1, 3442, 80, 2101, -1, - 2881, -1, -1, 3160, 2499, -1, -1, -1, -1, -1, - 1091, -1, -1, -1, -1, -1, -1, -1, 3405, -1, - 2499, -1, -1, -1, 3181, -1, -1, -1, -1, -1, - 498, 2134, -1, -1, 2915, -1, -1, 505, 506, 507, - 508, 509, 510, 2146, -1, -1, -1, -1, 2151, -1, - -1, -1, 2155, -1, -1, -1, -1, 2602, -1, -1, - -1, -1, 145, 8, -1, -1, 11, -1, -1, -1, - 15, 16, -1, 1154, 1155, 221, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3244, -1, -1, - -1, -1, 2195, 176, -1, 2198, -1, -1, 2201, 2443, - -1, 46, -1, -1, -1, -1, -1, 2602, 53, -1, - 193, 1958, -1, 2994, 2217, 198, -1, 1964, 3275, -1, - -1, -1, -1, 2602, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 291, -1, -1, -1, -1, - -1, -1, 2697, 236, -1, 2499, -1, 3038, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2288, -1, -1, -1, -1, - -1, 2294, -1, -1, -1, -1, -1, -1, -1, -1, - 145, -1, 2697, 2306, 2307, 2308, 2309, -1, 291, -1, - -1, -1, -1, -1, -1, -1, -1, 2320, 2697, 2322, - -1, -1, 2325, -1, -1, -1, 2329, -1, -1, 2774, - 2333, 176, -1, -1, -1, -1, 2339, -1, -1, -1, - -1, -1, 2089, -1, -1, -1, 1327, 1328, 193, 1330, - -1, -1, -1, 198, 2357, 2358, -1, 2360, 2602, 3140, - 2107, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2123, -1, -1, 2774, - -1, -1, -1, -1, -1, 8, 2389, 2134, 11, -1, - -1, 236, 15, 16, -1, 2774, 19, 20, 21, -1, - -1, -1, -1, -1, 2151, -1, 2409, -1, 391, -1, - -1, -1, -1, -1, 2417, 2418, 2419, -1, -1, -1, - -1, -1, -1, 2426, -1, 2428, 2429, -1, -1, -1, - -1, -1, 2435, -1, -1, -1, 2881, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 291, -1, -1, -1, - 1431, -1, -1, 2697, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, 2468, -1, -1, -1, -1, - 2915, -1, -1, -1, -1, -1, -1, -1, -1, 1460, - -1, 1462, -1, -1, -1, -1, 2881, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2503, 2504, 2881, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 498, -1, -1, -1, -1, - 2915, -1, 505, 506, 507, 508, 509, 510, -1, 2532, - 2774, -1, -1, -1, -1, 2538, 2915, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 391, -1, -1, 2994, - -1, 2554, -1, -1, -1, 2558, -1, 2304, -1, 2562, - 2563, 2564, -1, -1, -1, 2568, 2569, 2570, -1, 2572, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - 988, -1, -1, -1, -1, -1, -1, -1, 2591, -1, - 2593, -1, -1, 3038, -1, -1, -1, -1, 221, 2994, - -1, -1, -1, 2606, 2607, 2608, 2609, 2610, 2611, 2612, - 2613, 2614, 2615, -1, -1, 2994, -1, -1, -1, -1, - -1, -1, -1, -1, 3405, -1, -1, -1, -1, -1, - -1, -1, -1, 8, -1, 2638, 11, 2881, -1, -1, - 15, 16, 2645, 3038, 19, 20, 21, -1, -1, -1, - -1, -1, 2655, 498, -1, -1, -1, -1, -1, 3038, - 505, 506, 507, 508, 509, 510, -1, -1, 291, -1, - 2673, 2915, -1, 100, 988, -1, -1, -1, -1, -1, - 2683, 98, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2694, -1, -1, -1, 3140, -1, 2700, -1, -1, - -1, -1, -1, -1, 2707, 2708, 2709, 2710, -1, 126, - 127, -1, -1, -1, -1, -1, 2719, -1, -1, 2722, - 147, -1, -1, 2726, 2727, -1, -1, -1, -1, 2476, - -1, -1, 2735, -1, 161, -1, -1, -1, -1, 166, - -1, 1722, -1, -1, 171, 3140, -1, -1, -1, -1, - 2994, -1, -1, 180, 171, -1, 1737, -1, 185, 2762, - -1, 3140, 2509, -1, -1, -1, 1747, 1175, 1749, -1, - -1, 1752, -1, -1, -1, -1, 1184, 1758, -1, 1760, - -1, 2528, -1, -1, -1, -1, -1, 2534, -1, 2792, - 217, 2794, 1773, -1, 3038, -1, -1, 1778, -1, -1, - -1, 1782, 1783, 1784, 1785, 2808, 1787, 1788, -1, 2812, - 237, -1, -1, 2560, -1, 2818, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 2832, - -1, -1, -1, -1, -1, 2838, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 221, -1, 2851, 2852, - 2853, -1, -1, -1, -1, -1, 2859, -1, -1, 286, - -1, -1, 289, -1, -1, -1, -1, -1, 295, -1, - 1184, -1, -1, 2876, -1, -1, -1, -1, 501, 502, - 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, - -1, -1, 2639, -1, -1, -1, 3140, 314, 315, 316, - -1, -1, -1, -1, -1, -1, -1, -1, 335, -1, - -1, -1, -1, -1, -1, -1, 291, -1, -1, 2666, - -1, -1, 2669, -1, -1, -1, -1, -1, -1, -1, - -1, 358, -1, -1, -1, -1, -1, -1, -1, 8, - -1, -1, 11, -1, -1, -1, 15, 16, -1, -1, - -1, 2954, -1, -1, 2957, -1, 1937, -1, -1, -1, - 3405, -1, 379, -1, -1, -1, -1, 2970, -1, -1, - -1, -1, 2719, 390, -1, -1, -1, 46, -1, -1, - -1, -1, -1, 2986, 53, -1, -1, -1, 1969, 416, - 2993, -1, -1, 1974, -1, 412, -1, -1, -1, 416, - 1408, 1409, -1, -1, -1, -1, 1414, -1, -1, 0, - 3405, 80, -1, -1, -1, -1, 3019, 444, -1, 436, - -1, -1, 3025, -1, -1, -1, 3405, 454, -1, -1, - 3033, -1, 449, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 460, -1, -1, 473, 2794, 475, 476, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 476, - -1, 2808, -1, -1, 3067, -1, -1, -1, -1, -1, - -1, 2052, -1, -1, -1, -1, 145, -1, -1, -1, - 2061, -1, -1, 500, -1, 512, 3089, -1, 515, 516, - 517, 3094, -1, -1, 1408, 1409, -1, 514, -1, -1, - 1414, -1, -1, -1, -1, -1, -1, 176, -1, 100, - -1, -1, -1, -1, -1, -1, -1, 3120, -1, -1, - -1, 835, 836, -1, 193, -1, 501, 502, 503, 198, - 505, 506, 507, 508, 509, 510, -1, -1, 3141, 3142, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 147, 3160, -1, 3162, - -1, 3405, -1, 3166, -1, 2146, -1, 236, -1, -1, - 161, -1, -1, -1, -1, 166, -1, -1, 3181, -1, - 171, 3184, -1, -1, -1, -1, -1, -1, 902, 180, - -1, -1, 906, 907, 185, -1, -1, -1, -1, -1, - -1, 3204, -1, -1, -1, 3208, 3209, -1, -1, 3212, - -1, -1, -1, -1, 2195, -1, -1, -1, -1, -1, - 2201, -1, 291, -1, 2971, -1, 217, -1, -1, -1, - -1, -1, -1, -1, 3237, -1, -1, -1, -1, -1, - -1, 3244, -1, -1, -1, 959, 237, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3009, -1, 978, -1, -1, -1, -1, -1, - 984, -1, 3275, 987, -1, -1, 990, 991, 992, 993, - -1, -1, -1, -1, -1, -1, -1, 1695, -1, -1, - -1, -1, -1, -1, -1, 286, -1, -1, 289, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, -1, - -1, 3314, -1, -1, -1, -1, -1, 1031, 1032, -1, - -1, -1, 391, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 3337, 1649, -1, -1, 1052, 2320, - -1, -1, -1, -1, 335, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1071, -1, -1, - -1, 3364, -1, -1, -1, -1, -1, 358, 1082, 1083, - 1084, -1, 1086, 1087, 3377, 3378, -1, 3380, 3381, -1, - -1, 1695, -1, -1, -1, -1, 3389, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3401, -1, - -1, -1, -1, -1, 1118, -1, -1, -1, -1, 3156, - 3157, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3423, 1135, 1136, -1, -1, 416, -1, 3430, -1, 498, - -1, -1, -1, -1, -1, -1, 505, 506, 507, 508, - 509, 510, -1, -1, -1, 2426, -1, -1, 2429, -1, - -1, -1, -1, 444, 2435, -1, 1170, -1, -1, -1, - 1174, 1175, -1, 454, -1, 3468, -1, -1, -1, -1, - -1, 1185, 1186, -1, -1, -1, -1, -1, -1, -1, - 3483, -1, 473, -1, 475, 476, -1, 3234, -1, 3236, - -1, 1899, 1900, 1901, 1902, 1903, 1904, -1, -1, 1907, - 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 512, -1, -1, 515, 516, 517, 1241, -1, 3276, - -1, -1, -1, -1, -1, -1, 1250, -1, -1, -1, - -1, -1, -1, -1, -1, 3292, -1, -1, -1, 3296, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 1274, -1, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2558, -1, -1, - -1, 2562, 2563, 2564, -1, 1899, 1900, 1901, 1902, 1903, - 1904, -1, -1, 1907, 1908, 1909, 1910, 1911, 1912, 1913, - 1914, 1915, 1916, 109, 110, -1, -1, 113, 114, -1, - 2591, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2606, 2607, 2608, 2609, 2610, - 2611, 2612, 2613, 2614, 2615, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1361, -1, -1, - -1, -1, -1, -1, -1, -1, 24, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3422, 2084, 2085, -1, -1, - -1, -1, 188, 189, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3449, -1, -1, -1, -1, 1421, -1, 1423, - 1424, -1, -1, 81, -1, -1, -1, -1, -1, 2700, - -1, -1, 1436, 1437, -1, -1, -1, -1, -1, 97, - -1, -1, -1, -1, -1, -1, -1, -1, 1452, -1, - -1, -1, -1, -1, -1, 2726, 252, 253, 254, 255, - 256, 257, 258, 259, -1, -1, 262, 263, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2084, 2085, -1, -1, -1, -1, -1, -1, 146, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 156, -1, - 2198, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 168, -1, -1, -1, -1, 173, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 202, -1, -1, -1, -1, -1, - -1, -1, 1556, -1, -1, -1, -1, -1, -1, -1, - 1564, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 375, - 376, 2852, -1, -1, -1, -1, -1, 245, -1, -1, - -1, 249, -1, -1, 2198, -1, -1, -1, -1, 1603, - -1, -1, -1, -1, -1, 1609, 1610, 1611, 1612, 1613, - 1614, 1615, 1616, -1, -1, -1, -1, 1621, 1622, -1, - -1, -1, 1626, -1, -1, -1, 1630, -1, -1, 1633, - 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, -1, -1, - 1644, -1, -1, -1, -1, 8, -1, 1651, 11, 1653, - -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, - -1, 319, -1, -1, -1, -1, -1, -1, 1672, -1, - -1, -1, -1, 36, 470, 471, 334, -1, -1, -1, - -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, - 53, -1, -1, -1, -1, -1, -1, -1, 494, 495, - -1, -1, 1706, 1707, -1, -1, -1, -1, -1, 367, - -1, -1, 370, -1, -1, -1, -1, 80, 514, -1, - -1, -1, 8, 381, -1, 11, 384, -1, -1, 15, - 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, - -1, -1, -1, -1, 402, -1, -1, -1, -1, -1, - 36, -1, -1, -1, 3025, -1, -1, -1, 416, -1, - 46, -1, 3033, 988, -1, 423, -1, 53, -1, -1, - -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, - -1, 439, -1, -1, -1, -1, -1, -1, -1, 1793, - -1, -1, -1, 1797, 80, -1, 1800, 1801, -1, -1, - -1, -1, -1, -1, -1, 2503, 2504, -1, 466, -1, - -1, -1, -1, 176, -1, -1, -1, -1, 3089, -1, - -1, -1, -1, 3094, -1, -1, -1, -1, -1, -1, - 193, -1, -1, -1, 1838, 198, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 3120, - -1, -1, -1, -1, -1, -1, 1860, 1861, 221, 222, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3141, 3142, -1, 236, -1, -1, -1, -1, -1, -1, - -1, -1, 1107, -1, -1, -1, 1890, 1891, -1, 1893, - 176, -1, -1, -1, -1, 3166, -1, -1, -1, 2503, - 2504, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, 274, 198, -1, 277, -1, -1, -1, 1922, 1923, - 0, -1, 1926, -1, -1, 1150, -1, -1, 291, -1, - -1, 294, -1, -1, -1, 221, 222, 3208, -1, -1, - -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, - 236, 1955, 32, -1, 34, 35, 1960, -1, -1, 1184, - -1, -1, -1, -1, -1, -1, -1, 47, -1, -1, - -1, -1, 52, 1977, -1, 1979, -1, -1, -1, -1, - -1, 61, -1, -1, -1, -1, -1, -1, 274, -1, - -1, 277, -1, -1, -1, 75, 2694, -1, -1, -1, - -1, -1, -1, -1, 84, 291, 86, -1, 294, -1, - 1235, 2015, -1, -1, -1, -1, -1, -1, 98, -1, - 100, 2719, -1, -1, -1, -1, -1, -1, 391, -1, - -1, 111, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 126, 127, 128, -1, - 2054, -1, -1, -1, 1279, 2059, 2060, 137, -1, 1284, - -1, -1, -1, 143, -1, 2763, -1, -1, -1, -1, - -1, 151, -1, 153, 154, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 167, -1, -1, - 2694, 171, -1, -1, -1, -1, -1, -1, -1, 2103, - -1, -1, 2106, -1, 2108, 391, -1, -1, -1, 1334, - -1, -1, -1, -1, -1, 2719, -1, 197, -1, -1, - 2124, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3401, -1, -1, 213, 1359, 498, -1, -1, 501, 502, - 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, - -1, -1, -1, -1, -1, 2853, -1, -1, -1, 239, - 2164, 524, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2181, 2182, 1404, - -1, 1406, -1, 1408, 1409, -1, 1411, -1, -1, 1414, - -1, -1, 1417, -1, -1, 1420, 2200, -1, -1, -1, - 1425, -1, -1, 1428, -1, 2209, -1, -1, -1, -1, - -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, - -1, -1, 518, -1, 314, 315, 316, -1, -1, -1, - -1, -1, 322, 1468, -1, 325, -1, -1, -1, 2853, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2266, -1, -1, -1, -1, -1, 2272, -1, - -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, - -1, -1, -1, 363, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2993, -1, -1, -1, 379, - -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, - 390, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 400, -1, -1, -1, 2328, -1, -1, 1552, -1, -1, - -1, -1, 412, -1, -1, -1, 416, -1, -1, -1, - -1, -1, -1, 1568, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1578, 1579, 1580, 436, -1, -1, 1584, - -1, -1, -1, 1588, -1, -1, -1, -1, -1, 449, - -1, -1, 452, -1, -1, 455, -1, -1, -1, -1, - 460, -1, -1, -1, -1, -1, -1, -1, -1, 2993, - -1, -1, -1, -1, -1, -1, 476, -1, -1, 68, - 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 500, -1, -1, -1, -1, 1650, -1, -1, -1, -1, - -1, -1, -1, -1, 514, -1, -1, 517, -1, -1, - 109, 110, -1, -1, 113, 114, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2459, -1, -1, -1, -1, - -1, 2465, 2466, -1, 1689, -1, -1, -1, -1, -1, - -1, -1, 2476, -1, -1, -1, -1, -1, -1, -1, - 1705, -1, -1, 2487, -1, 1710, 2490, -1, 2492, -1, - -1, -1, -1, -1, -1, -1, 2500, -1, -1, -1, - -1, -1, 1727, -1, 2508, 2509, 3204, -1, -1, -1, - -1, 2515, -1, -1, -1, -1, -1, -1, -1, 188, - 189, -1, -1, -1, -1, -1, 2530, -1, -1, 3, - -1, -1, -1, -1, 8, -1, 2540, 11, -1, -1, - -1, 15, 16, 17, 18, 19, 20, 21, -1, -1, - -1, -1, -1, -1, -1, -1, 2560, -1, -1, -1, - -1, -1, 36, -1, -1, -1, 40, -1, -1, -1, - -1, -1, 46, -1, -1, -1, -1, -1, -1, 53, - -1, -1, -1, 252, 253, 254, 255, 256, 257, 258, - 259, -1, -1, 262, 263, -1, -1, -1, -1, -1, - 3204, -1, -1, -1, -1, -1, 80, -1, -1, -1, - -1, -1, -1, 2617, -1, 2619, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 1888, -1, -1, -1, -1, -1, -1, - -1, 1896, 1897, -1, 1899, 1900, 1901, 1902, 1903, 1904, - -1, -1, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, - 1915, 1916, 1917, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 176, -1, -1, -1, 375, 376, -1, -1, - 2714, 2715, -1, -1, -1, -1, -1, -1, -1, 193, - -1, -1, -1, -1, 198, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2749, -1, 221, 222, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 2763, - -1, -1, 236, -1, 2768, 2769, -1, -1, -1, 2773, - -1, -1, -1, -1, 2778, -1, -1, 2781, 2782, -1, - -1, -1, 2786, 2787, -1, -1, 2790, -1, -1, -1, - -1, -1, -1, 2018, -1, -1, 2021, 2801, -1, -1, - 274, 470, 471, 277, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, - 294, -1, -1, -1, -1, 494, 495, 8, -1, -1, - 11, -1, -1, -1, 15, 16, -1, -1, 19, 20, - 21, 2845, 2067, -1, -1, -1, 2071, 2072, 2073, 2074, - 2075, 2076, 2077, 2078, -1, 36, -1, -1, -1, 2084, - 2085, -1, 2087, 2088, -1, 46, -1, -1, 2872, -1, - -1, -1, 53, -1, 2099, -1, -1, 2102, -1, -1, - -1, -1, -1, -1, -1, 2110, 2111, 2112, 2113, 2114, - 2115, 2116, 2117, 2118, 2119, -1, -1, -1, -1, 80, - 8, -1, -1, 11, -1, -1, -1, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, 391, -1, -1, - 2145, -1, -1, -1, -1, -1, -1, -1, 36, -1, - -1, -1, 40, -1, -1, -1, -1, -1, 46, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 2961, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 80, 2198, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 176, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3009, -1, -1, -1, -1, - -1, -1, 193, -1, -1, -1, -1, 198, -1, -1, - -1, -1, -1, -1, 498, 3029, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, -1, 3043, - 221, 222, 2267, -1, -1, -1, -1, -1, -1, -1, - 3054, 3055, 2277, 2278, 3058, 236, 3060, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3085, -1, -1, -1, 193, -1, -1, -1, -1, - 198, -1, -1, 274, -1, -1, 277, -1, -1, -1, - -1, -1, -1, -1, -1, 3109, -1, -1, -1, -1, - 291, -1, -1, 221, 222, -1, -1, 2342, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 236, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 2364, - 2365, 2366, -1, -1, 2369, 2370, 2371, 2372, 2373, 2374, - -1, -1, -1, 2378, 2379, 2380, 2381, 2382, 2383, 2384, - 2385, 2386, 2387, -1, -1, -1, 274, 2392, 2393, 277, - -1, -1, -1, -1, -1, 3179, -1, -1, -1, -1, - -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, 3198, 2420, 8, -1, 3202, 11, - 2425, -1, 3206, 15, 16, 17, 18, 19, 20, 21, - 391, -1, -1, -1, 3218, -1, -1, -1, -1, 3223, - -1, 3225, -1, -1, 36, -1, -1, -1, 24, 3233, - -1, -1, -1, 2458, 46, -1, -1, -1, -1, -1, - -1, 53, -1, -1, -1, -1, -1, 3251, -1, -1, - -1, -1, 2477, -1, -1, 2480, 2481, -1, -1, -1, - -1, -1, -1, 2488, 2489, -1, -1, -1, 80, -1, - -1, -1, -1, -1, -1, -1, -1, 2502, 2503, 2504, - 2505, -1, 2507, 391, -1, 81, 2511, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 3300, -1, -1, -1, - -1, 97, -1, -1, -1, -1, 3310, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 498, -1, 3323, - 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 2565, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 146, 3355, -1, -1, -1, -1, -1, -1, -1, -1, - 156, -1, -1, -1, 176, -1, -1, -1, -1, -1, - -1, -1, 168, -1, -1, -1, -1, 173, -1, -1, - -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, - 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, - 508, 509, 510, -1, -1, -1, 202, 515, -1, 221, - 222, -1, -1, -1, -1, -1, -1, -1, 8, -1, - -1, 11, -1, -1, 236, 15, 16, 17, 18, 19, - 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3445, 3446, 3447, -1, 2670, 36, -1, -1, 245, - -1, -1, -1, 249, -1, -1, 46, -1, -1, -1, - -1, -1, 274, 53, -1, 277, -1, -1, 3472, 2694, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 291, - -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, - 80, -1, 8, -1, -1, 11, -1, -1, -1, 15, - 16, 17, 18, 19, 20, 21, -1, -1, -1, 3513, - -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, - 36, -1, -1, 319, -1, 2750, -1, 2752, -1, -1, - 46, -1, -1, 2758, -1, -1, -1, 53, 334, -1, - -1, -1, 2767, -1, -1, 2770, -1, 2772, -1, -1, - -1, 2776, -1, -1, 2779, 2780, -1, -1, 2783, 2784, - -1, -1, -1, -1, 80, -1, 2791, -1, -1, -1, - -1, 367, -1, -1, 370, 2800, -1, -1, -1, 391, - -1, -1, -1, -1, 8, 381, 176, 11, 384, -1, - 2815, 15, 16, 17, 18, 19, 20, 21, -1, -1, - -1, -1, -1, 193, -1, -1, 402, -1, 198, -1, - -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, - 416, -1, 46, -1, -1, -1, 422, 423, 2853, 53, - -1, 221, 222, -1, -1, -1, -1, 433, -1, -1, - -1, -1, -1, 439, -1, -1, 236, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, - 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 466, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, -1, 198, -1, 274, -1, 498, 277, -1, 501, - 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, - -1, 291, -1, 515, 294, 221, 222, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 236, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 176, -1, -1, -1, -1, -1, 274, -1, - -1, 277, -1, -1, -1, -1, -1, 2992, 2993, 193, - -1, -1, -1, -1, 198, 291, -1, -1, 294, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3017, 3018, -1, -1, -1, 221, 222, -1, - -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 236, -1, -1, -1, -1, 3042, -1, -1, - -1, 3046, -1, 3048, 3049, 3050, -1, -1, 3053, -1, - -1, 3056, 3057, -1, -1, -1, -1, -1, -1, -1, - 3065, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 274, -1, -1, 277, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, - 294, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, 3106, -1, -1, -1, -1, -1, 3112, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 3125, -1, -1, -1, -1, -1, -1, -1, 498, -1, - -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, - 510, -1, -1, -1, -1, 515, -1, -1, -1, -1, - -1, -1, -1, 3158, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3186, -1, -1, -1, -1, -1, 391, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, 3220, 3221, 3222, -1, 515, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3240, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 3252, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3297, -1, 498, -1, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, -1, -1, - 3315, 515, -1, -1, -1, -1, -1, -1, -1, -1, - 3325, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3350, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 3376, -1, 3, 4, 5, 6, 7, 8, 9, - 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, - -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, - -1, -1, 42, 43, 44, 3420, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, - -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, - 3475, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, - 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, - 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, - 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, - 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, - -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, - 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, - -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, - 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, - 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, - -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, - -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, - 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, - 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, - 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, - 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, - 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, - -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, - -1, -1, 512, -1, 514, -1, -1, -1, -1, 519, - 520, 521, 522, -1, 524, 3, 4, 5, 6, 7, - 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, - -1, -1, -1, -1, 512, -1, 514, -1, -1, -1, - -1, 519, 520, 521, 522, -1, 524, 3, 4, 5, - 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, 449, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, 500, -1, -1, -1, -1, 505, - 506, 507, -1, -1, -1, -1, 512, -1, 514, 515, - -1, -1, -1, 519, 520, 521, 522, 3, 4, 5, - 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, 449, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, 500, -1, -1, -1, -1, 505, - 506, 507, -1, -1, -1, -1, 512, -1, 514, -1, - -1, -1, -1, 519, 520, 521, 522, 3, 4, 5, - 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, 449, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, 500, -1, -1, -1, -1, 505, - 506, 507, -1, -1, -1, -1, 512, -1, 514, -1, - -1, -1, -1, 519, 520, 521, 522, 3, 4, 5, - 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, -1, -1, - -1, 37, -1, 39, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, 132, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, -1, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, - 506, 507, -1, -1, -1, -1, 512, -1, 514, 515, - -1, -1, -1, 519, 520, 521, 522, 3, 4, 5, - 6, 7, -1, 9, 10, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, 171, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, 449, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, -1, -1, 500, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 512, -1, 514, -1, - -1, -1, -1, 519, 520, 521, 522, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, 171, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, 232, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, 37, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, 37, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - 515, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, 38, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, 37, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - 515, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, 37, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, 171, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - 515, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, 473, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 6, 4, 6, + 4, 6, 4, 6, 1, 2, 3, 2, 1, 3, + 2, 3, 1, 3, 2, 5, 3, 6, 4, 6, + 6, 6, 5, 5, 6, 9, 4, 5, 7, 6, + 4, 8, 4, 2, 4, 3, 6, 4, 2, 2, + 2, 2, 1, 2, 0, 1, 2, 2, 2, 1, + 3, 4, 2, 1, 0, 2, 3, 2, 3, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 1, 1, 1, 1, 1, 6, 6, 8, 6, 8, + 6, 8, 6, 8, 8, 10, 8, 10, 1, 0, + 9, 1, 4, 4, 7, 2, 1, 3, 2, 2, + 0, 4, 3, 0, 1, 0, 2, 3, 5, 2, + 2, 0, 8, 5, 0, 5, 5, 7, 2, 0, + 1, 1, 1, 3, 2, 0, 1, 0, 1, 3, + 1, 3, 1, 2, 1, 3, 2, 6, 8, 5, + 1, 0, 1, 3, 2, 4, 5, 5, 8, 7, + 1, 0, 8, 11, 10, 0, 1, 0, 1, 1, + 0, 2, 3, 9, 12, 1, 3, 1, 3, 3, + 0, 4, 6, 1, 2, 1, 1, 0, 1, 2, + 2, 1, 2, 2, 1, 2, 3, 2, 2, 2, + 2, 3, 3, 3, 1, 3, 1, 0, 1, 2, + 2, 5, 7, 0, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 0, 2, 9, 12, 11, 0, 2, + 1, 1, 1, 1, 1, 1, 3, 0, 1, 2, + 1, 1, 2, 2, 3, 1, 1, 2, 2, 1, + 2, 3, 5, 3, 2, 5, 1, 1, 1, 0, + 5, 7, 5, 2, 3, 1, 1, 2, 2, 0, + 3, 4, 4, 0, 3, 2, 0, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, + 1, 2, 2, 2, 2, 2, 2, 0, 3, 3, + 3, 0, 1, 2, 1, 2, 2, 2, 2, 3, + 4, 1, 3, 1, 1, 1, 1, 3, 1, 2, + 0, 1, 2, 0, 1, 3, 0, 2, 0, 3, + 3, 1, 5, 3, 1, 3, 1, 2, 1, 4, + 5, 5, 6, 3, 7, 4, 11, 1, 3, 2, + 2, 2, 0, 3, 1, 1, 2, 2, 2, 2, + 1, 0, 1, 2, 6, 4, 6, 4, 6, 8, + 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, + 1, 1, 1, 3, 3, 3, 3, 1, 2, 2, + 1, 3, 1, 1, 1, 3, 1, 1, 0, 1, + 1, 1, 8, 11, 10, 7, 10, 9, 1, 1, + 2, 3, 8, 11, 9, 7, 0, 3, 3, 1, + 1, 3, 0, 1, 3, 1, 0, 1, 0, 1, + 0, 1, 3, 1, 1, 1, 3, 1, 0, 2, + 2, 0, 2, 0, 1, 0, 1, 1, 1, 3, + 3, 1, 1, 3, 3, 3, 3, 3, 3, 4, + 3, 2, 1, 1, 1, 1, 3, 1, 1, 3, + 1, 1, 3, 3, 3, 1, 2, 4, 4, 2, + 3, 5, 5, 1, 1, 3, 0, 11, 11, 10, + 12, 1, 2, 5, 4, 4, 4, 4, 7, 5, + 4, 7, 6, 9, 9, 4, 1, 1, 1, 1, + 1, 1, 1, 5, 1, 1, 3, 1, 2, 2, + 2, 3, 1, 3, 7, 1, 2, 0, 2, 0, + 3, 3, 4, 4, 4, 4, 3, 2, 1, 1, + 0, 1, 1, 0, 2, 1, 5, 1, 0, 2, + 2, 0, 1, 0, 3, 5, 1, 3, 4, 3, + 1, 1, 0, 2, 2, 0, 2, 2, 1, 1, + 1, 0, 2, 4, 5, 4, 2, 3, 2, 2, + 2, 2, 1, 2, 3, 0, 1, 0, 5, 1, + 4, 6, 2, 1, 0, 4, 0, 1, 1, 2, + 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, + 1, 1, 3, 3, 0, 1, 3, 1, 2, 1, + 1, 1, 1, 1, 2, 4, 4, 5, 1, 1, + 2, 0, 2, 0, 1, 3, 1, 0, 1, 2, + 3, 2, 4, 2, 3, 2, 0, 1, 2, 0, + 4, 5, 1, 2, 2, 0, 1, 3, 1, 2, + 3, 3, 3, 3, 3, 3, 1, 4, 9, 9, + 3, 0, 2, 2, 0, 5, 3, 0, 1, 1, + 3, 5, 3, 1, 2, 1, 3, 5, 1, 2, + 3, 4, 5, 4, 5, 4, 6, 5, 4, 5, + 5, 5, 2, 4, 1, 1, 0, 1, 4, 5, + 4, 0, 2, 2, 2, 1, 1, 1, 1, 0, + 4, 2, 1, 2, 2, 4, 2, 6, 2, 1, + 3, 4, 0, 2, 0, 2, 0, 1, 3, 3, + 2, 0, 2, 4, 1, 1, 1, 0, 2, 3, + 5, 6, 2, 3, 1, 5, 5, 5, 3, 3, + 3, 4, 0, 1, 1, 1, 1, 1, 2, 4, + 1, 1, 1, 1, 2, 3, 0, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 1, 3, 0, + 1, 1, 1, 1, 5, 2, 1, 1, 1, 1, + 4, 1, 2, 2, 1, 3, 3, 2, 1, 0, + 5, 2, 5, 2, 1, 3, 3, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 0, 1, 3, 3, 5, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, + 3, 5, 4, 6, 3, 5, 4, 6, 4, 6, + 5, 7, 3, 2, 4, 3, 2, 3, 3, 3, + 3, 4, 3, 4, 3, 4, 5, 6, 6, 7, + 6, 7, 6, 7, 3, 4, 4, 6, 1, 4, + 3, 5, 1, 3, 2, 2, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 2, 2, 5, 6, 6, 7, 1, 2, 1, + 1, 1, 2, 2, 4, 3, 1, 1, 1, 1, + 1, 4, 1, 1, 3, 1, 2, 4, 2, 2, + 3, 3, 6, 7, 9, 7, 7, 5, 1, 1, + 1, 5, 6, 6, 4, 4, 4, 4, 6, 5, + 5, 5, 4, 6, 4, 7, 9, 5, 0, 5, + 4, 0, 1, 0, 2, 0, 1, 3, 3, 2, + 2, 0, 6, 1, 0, 3, 0, 3, 3, 3, + 0, 1, 4, 2, 2, 2, 2, 2, 3, 2, + 2, 3, 0, 4, 3, 1, 5, 3, 1, 3, + 1, 2, 3, 1, 3, 1, 2, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, + 1, 3, 1, 3, 1, 2, 1, 3, 1, 2, + 1, 0, 1, 3, 1, 3, 3, 1, 3, 3, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 3, 2, 3, 0, + 3, 3, 2, 2, 1, 0, 2, 2, 3, 2, + 1, 1, 3, 5, 1, 2, 4, 2, 0, 1, + 0, 1, 2, 3, 5, 7, 7, 1, 0, 0, + 2, 0, 2, 3, 3, 3, 5, 7, 7, 0, + 2, 1, 0, 1, 0, 1, 3, 1, 2, 3, + 2, 1, 4, 2, 1, 0, 3, 1, 3, 1, + 2, 4, 2, 0, 1, 3, 1, 3, 1, 2, + 1, 3, 1, 1, 2, 1, 1, 2, 1, 1, + 2, 7, 2, 5, 3, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 3, 3, 0, 1, 1, 1, 5, 3, + 0, 1, 1, 1, 1, 1, 1, 4, 7, 6, + 2, 0, 1, 1, 1, 1, 13, 16, 1, 2, + 0, 1, 0, 1, 0, 2, 0, 1, 0, 6, + 8, 6, 8, 6, 8, 3, 2, 1, 0, 6, + 6, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 4, 6, 3, 2, 4, 3, 5, + 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 2, 3, 3, 3, 1, 3, 3, 2, 3, + 3, 1, 1, 1, 3, 5, 1, 1, 1, 1, + 3, 2, 2, 3, 4, 5, 1, 1, 1, 1, + 4, 6, 5, 4, 6, 1, 1, 1, 1, 1, + 1, 0, 1, 3, 1, 0, 7, 3, 1, 2, + 3, 2, 0, 2, 0, 2, 4, 5, 8, 2, + 3, 5, 1, 0, 2, 0, 2, 3, 3, 3, + 1, 1, 1, 2, 3, 2, 2, 2, 2, 3, + 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, + 3, 1, 3, 2, 9, 12, 11, 12, 14, 3, + 4, 4, 0, 7, 10, 9, 2, 3, 0, 4, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint16 yydefact[] = +{ + 155, 263, 0, 1383, 1382, 1453, 263, 0, 1318, 0, + 263, 485, 401, 0, 1474, 1473, 0, 207, 263, 0, + 155, 0, 0, 0, 0, 0, 0, 548, 551, 549, + 0, 0, 0, 263, 588, 0, 1475, 263, 0, 0, + 580, 550, 0, 1431, 0, 0, 0, 0, 0, 2, + 4, 7, 21, 35, 31, 0, 20, 33, 18, 17, + 26, 6, 24, 37, 39, 19, 25, 15, 38, 13, + 36, 524, 510, 593, 523, 0, 0, 154, 692, 531, + 34, 16, 30, 5, 11, 12, 28, 29, 27, 1341, + 42, 32, 40, 22, 8, 9, 23, 41, 43, 1476, + 1472, 10, 44, 14, 262, 261, 255, 0, 0, 0, + 0, 0, 1452, 0, 0, 256, 111, 1500, 1501, 1502, + 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1874, 1511, + 1512, 1513, 1514, 1515, 1875, 1516, 1517, 1518, 1820, 1821, + 1876, 1822, 1823, 1519, 1520, 1521, 1522, 1523, 1524, 1525, + 1526, 1527, 1528, 1824, 1825, 1529, 1530, 1531, 1532, 1533, + 1826, 1877, 1827, 1534, 1535, 1536, 1537, 1538, 1878, 1539, + 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1879, 1548, + 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1828, + 1558, 1559, 1829, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, + 1830, 1587, 1588, 1589, 1590, 1591, 1831, 1592, 1593, 1594, + 1832, 1595, 1596, 1597, 1880, 1881, 1598, 1599, 1833, 1883, + 1600, 1601, 1834, 1835, 1602, 1603, 1604, 1605, 1606, 1607, + 1608, 1609, 1610, 1884, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1619, 1620, 1621, 1622, 1885, 1836, 1623, 1624, + 1625, 1626, 1627, 1837, 1838, 1839, 1628, 1886, 1887, 1629, + 1888, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1889, 1637, + 1890, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1840, + 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, + 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, + 1841, 1892, 1842, 1666, 1667, 1668, 1843, 1669, 1670, 1893, + 1671, 1844, 1672, 1845, 1673, 1674, 1675, 1676, 1677, 1678, + 1679, 1680, 1681, 1682, 1846, 1894, 1683, 1895, 1847, 1684, + 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, + 1695, 1696, 1848, 1896, 1697, 1698, 1849, 1699, 1700, 1701, + 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1850, + 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, + 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1897, + 1730, 1731, 1732, 1851, 1733, 1734, 1735, 1736, 1737, 1738, + 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, + 1749, 1750, 1751, 1852, 1752, 1753, 1898, 1754, 1755, 1853, + 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, + 1766, 1767, 1768, 1854, 1769, 1855, 1770, 1771, 1772, 1900, + 1773, 1774, 1775, 1776, 1777, 1778, 1856, 1857, 1779, 1780, + 1858, 1781, 1859, 1782, 1783, 1860, 1784, 1785, 1786, 1787, + 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, + 1798, 1799, 1800, 1861, 1862, 1801, 1901, 1802, 1803, 1804, + 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, + 1815, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, + 1872, 1873, 1816, 1817, 1818, 1819, 0, 1483, 0, 1243, + 112, 113, 1265, 111, 1833, 1840, 1854, 1317, 1316, 112, + 0, 258, 484, 0, 0, 0, 0, 0, 0, 209, + 0, 395, 394, 0, 1307, 400, 0, 0, 0, 115, + 107, 1699, 114, 1242, 105, 121, 2044, 2045, 2046, 2047, + 1931, 2048, 2049, 2050, 2051, 1932, 2052, 1933, 1934, 1935, + 1936, 1937, 1938, 2053, 2054, 2055, 1940, 1939, 2056, 1941, + 2057, 1942, 2058, 1943, 1944, 2059, 2060, 1945, 1554, 1946, + 1947, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 1948, 1949, 2070, 2071, 1950, 2072, 2073, 1951, 2074, 1952, + 1953, 1954, 2075, 2076, 1955, 1956, 2077, 1957, 2078, 2079, + 1958, 1959, 1962, 1960, 2080, 1961, 2081, 1963, 1964, 1965, + 2082, 2083, 1966, 1967, 2084, 1968, 1969, 1970, 1971, 1972, + 2085, 1973, 2086, 1974, 1975, 2087, 2088, 2089, 2090, 2091, + 1977, 1976, 1978, 1979, 2092, 2093, 2094, 2095, 1980, 1981, + 1982, 2096, 2097, 1983, 2098, 2099, 1984, 1985, 2100, 1986, + 1987, 2101, 1988, 1989, 2102, 1990, 1991, 2103, 2104, 2105, + 1992, 2106, 1993, 1994, 2107, 2108, 1995, 1996, 2109, 1997, + 2110, 2111, 2112, 2113, 1998, 1999, 2114, 2000, 2115, 2116, + 2117, 2118, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009, 2010, 2011, 1449, 123, 122, 124, 0, 419, 420, + 0, 430, 0, 412, 417, 413, 0, 439, 432, 440, + 421, 411, 433, 422, 410, 208, 0, 441, 427, 415, + 0, 0, 0, 0, 259, 220, 401, 0, 155, 0, + 1347, 1357, 1366, 1362, 1356, 1364, 1354, 1360, 1346, 1368, + 1355, 1359, 1352, 1369, 1350, 1367, 1365, 1353, 1361, 1345, + 1349, 1336, 1341, 1372, 1363, 1370, 1358, 1371, 1373, 1348, + 1374, 1351, 0, 1318, 0, 0, 1826, 1877, 1831, 0, + 1844, 0, 1847, 1848, 1733, 1855, 1858, 1859, 1860, 1861, + 0, 762, 114, 109, 746, 0, 526, 696, 706, 746, + 751, 1029, 774, 1030, 0, 116, 1417, 1416, 1412, 1411, + 194, 1280, 1461, 1600, 1640, 1750, 1856, 1779, 1479, 1462, + 1456, 1460, 260, 587, 585, 0, 1214, 1600, 1640, 1737, + 1750, 1856, 1391, 1395, 0, 257, 1481, 1466, 0, 1467, + 114, 532, 579, 0, 264, 1430, 0, 1435, 0, 1713, + 559, 562, 1274, 560, 524, 0, 0, 1, 155, 0, + 161, 0, 583, 583, 0, 583, 0, 516, 0, 0, + 524, 519, 523, 693, 1340, 1445, 1478, 1856, 1779, 1465, + 1468, 1609, 0, 0, 1609, 0, 1609, 0, 1609, 0, + 0, 1455, 1198, 0, 1244, 117, 0, 0, 1329, 1325, + 1330, 1326, 1331, 1324, 1323, 1332, 1328, 0, 0, 0, + 366, 399, 398, 397, 396, 401, 1609, 1291, 0, 205, + 448, 449, 0, 0, 0, 0, 0, 1302, 108, 106, + 1609, 1450, 428, 429, 0, 418, 414, 416, 0, 0, + 1609, 1269, 438, 434, 1609, 438, 1236, 1609, 0, 0, + 212, 0, 394, 1338, 1375, 1998, 1389, 0, 1390, 1380, + 1344, 1376, 1377, 155, 0, 483, 1315, 1413, 0, 0, + 0, 1150, 746, 751, 0, 0, 764, 0, 1169, 0, + 1175, 0, 0, 0, 746, 531, 0, 706, 763, 110, + 0, 744, 745, 634, 634, 588, 0, 569, 756, 0, + 0, 759, 757, 0, 759, 0, 0, 0, 759, 755, + 714, 0, 634, 0, 744, 747, 634, 0, 766, 1335, + 0, 0, 0, 0, 0, 1459, 1457, 1458, 1463, 0, + 0, 0, 1246, 1248, 1249, 1118, 1259, 1009, 0, 1821, + 1822, 1823, 1190, 1824, 1825, 1827, 1828, 1829, 968, 1574, + 1830, 1257, 1832, 1834, 1835, 1837, 1838, 1839, 1840, 1841, + 1842, 0, 1258, 1845, 1678, 1850, 1851, 1853, 1856, 1857, + 1256, 1862, 0, 0, 0, 1225, 1141, 0, 1008, 0, + 0, 0, 1191, 1199, 1001, 0, 0, 810, 811, 832, + 833, 812, 838, 839, 841, 813, 0, 1221, 902, 997, + 1209, 1006, 1010, 1048, 1012, 1028, 1015, 1085, 1007, 0, + 1013, 999, 1217, 569, 1215, 0, 1000, 1245, 569, 1213, + 1394, 1392, 1398, 1393, 0, 0, 0, 0, 0, 110, + 1438, 1437, 1429, 1427, 1428, 1426, 1425, 1432, 0, 1434, + 1341, 1136, 1138, 0, 561, 0, 0, 0, 513, 512, + 514, 3, 0, 0, 0, 0, 581, 582, 0, 0, + 0, 0, 0, 0, 0, 0, 677, 608, 609, 611, + 674, 678, 686, 0, 0, 0, 0, 0, 520, 0, + 1274, 1477, 1471, 1469, 0, 0, 0, 139, 139, 0, + 0, 0, 0, 0, 99, 48, 92, 0, 0, 0, + 0, 234, 247, 0, 0, 0, 0, 0, 244, 0, + 0, 227, 50, 221, 223, 0, 139, 0, 46, 0, + 0, 0, 52, 1453, 0, 483, 1197, 0, 119, 120, + 118, 111, 0, 2012, 1874, 1875, 1876, 1877, 1827, 1878, + 1879, 0, 1880, 1881, 1833, 1883, 1884, 1885, 1886, 1887, + 1888, 1889, 1890, 1840, 1892, 1893, 1894, 1895, 1896, 1897, + 2038, 1898, 1854, 1900, 1860, 0, 1901, 1021, 1144, 593, + 1142, 1275, 0, 112, 1262, 0, 1327, 0, 0, 0, + 0, 481, 0, 0, 0, 0, 1287, 0, 1609, 206, + 210, 0, 1609, 201, 1609, 366, 0, 1609, 366, 1609, + 0, 1301, 1304, 0, 431, 426, 424, 423, 425, 1609, + 253, 0, 0, 1270, 436, 437, 0, 405, 0, 0, + 407, 0, 0, 217, 0, 215, 0, 401, 155, 0, + 228, 1385, 1386, 1384, 0, 0, 1379, 1343, 231, 248, + 1388, 1378, 1387, 1342, 1337, 0, 0, 1333, 471, 0, + 0, 0, 0, 1151, 879, 878, 862, 863, 876, 877, + 864, 865, 872, 873, 881, 880, 870, 871, 866, 867, + 860, 861, 868, 869, 874, 875, 858, 859, 1164, 1152, + 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, + 1163, 0, 0, 705, 703, 0, 0, 0, 0, 0, + 0, 1191, 0, 972, 1007, 0, 0, 0, 1136, 1174, + 0, 0, 0, 0, 0, 0, 1136, 1180, 0, 0, + 730, 742, 0, 627, 633, 704, 702, 0, 1214, 697, + 0, 776, 0, 756, 0, 755, 0, 0, 758, 752, + 0, 753, 0, 0, 0, 0, 754, 0, 0, 0, + 0, 0, 700, 0, 742, 0, 701, 773, 1419, 1418, + 1414, 1401, 1409, 195, 0, 1266, 1902, 1903, 1904, 820, + 1905, 849, 827, 849, 849, 1906, 1907, 1908, 1909, 816, + 816, 829, 1910, 1911, 1912, 1913, 1914, 817, 818, 854, + 1915, 1916, 1917, 1918, 1919, 0, 0, 1920, 849, 1921, + 816, 1922, 1923, 1924, 821, 1925, 784, 1926, 0, 1927, + 819, 785, 1928, 857, 857, 1929, 0, 844, 1930, 0, + 1147, 794, 802, 803, 804, 805, 830, 831, 806, 836, + 837, 807, 901, 0, 816, 1267, 1268, 155, 1464, 1480, + 0, 1141, 1016, 848, 835, 1189, 0, 843, 842, 0, + 1141, 825, 824, 823, 1003, 0, 822, 1098, 849, 849, + 847, 927, 826, 0, 0, 0, 0, 0, 853, 0, + 851, 928, 906, 907, 0, 1224, 1233, 1136, 1140, 0, + 1001, 1136, 0, 0, 1088, 1090, 0, 1018, 1019, 0, + 1192, 1247, 1002, 0, 1252, 0, 0, 901, 901, 1220, + 1118, 0, 1108, 1111, 0, 0, 1115, 1116, 1117, 0, + 0, 0, 1212, 0, 1126, 1128, 0, 0, 943, 1124, + 0, 946, 0, 0, 0, 0, 1112, 1113, 1114, 1104, + 1105, 1106, 1107, 1109, 1110, 1122, 1103, 924, 0, 998, + 0, 1051, 0, 923, 1218, 695, 0, 1250, 695, 1403, + 1407, 1408, 1402, 1406, 0, 1397, 1396, 1399, 1400, 1482, + 0, 1439, 1423, 0, 1420, 1139, 690, 563, 1238, 0, + 567, 1444, 160, 159, 0, 0, 536, 535, 602, 594, + 596, 602, 0, 534, 0, 650, 651, 0, 0, 0, + 0, 683, 681, 1246, 1259, 638, 612, 637, 0, 0, + 616, 0, 642, 902, 676, 518, 606, 607, 610, 517, + 0, 679, 0, 689, 0, 555, 557, 540, 554, 552, + 537, 545, 677, 611, 0, 1446, 1470, 0, 0, 0, + 0, 0, 1609, 0, 0, 787, 83, 64, 318, 138, + 0, 0, 0, 0, 0, 0, 0, 91, 88, 89, + 90, 0, 0, 0, 0, 1266, 232, 233, 246, 0, + 237, 238, 235, 239, 240, 0, 0, 225, 226, 0, + 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1454, 1447, 1193, 1198, 593, 593, 593, + 0, 591, 592, 0, 0, 0, 0, 0, 470, 364, + 374, 0, 0, 0, 1291, 205, 0, 0, 0, 0, + 0, 0, 401, 1294, 1292, 1290, 1293, 1295, 1580, 189, + 0, 0, 0, 0, 0, 197, 200, 0, 363, 337, + 0, 0, 1306, 0, 0, 0, 1609, 353, 1303, 0, + 1451, 0, 0, 251, 438, 1271, 0, 435, 438, 1237, + 0, 438, 219, 0, 0, 1339, 1381, 229, 249, 230, + 250, 483, 478, 508, 0, 486, 491, 468, 0, 468, + 0, 488, 492, 468, 487, 0, 468, 482, 1415, 0, + 1044, 0, 1034, 0, 0, 765, 0, 0, 1035, 974, + 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 992, + 991, 1036, 769, 0, 772, 0, 0, 1172, 1173, 0, + 1037, 0, 0, 1179, 0, 0, 0, 1042, 0, 707, + 0, 0, 0, 622, 626, 629, 0, 632, 569, 525, + 1600, 1640, 0, 580, 580, 580, 578, 568, 0, 654, + 0, 0, 0, 731, 0, 0, 733, 735, 0, 0, + 738, 0, 713, 712, 0, 0, 0, 0, 777, 0, + 1242, 0, 0, 196, 0, 0, 0, 802, 0, 0, + 0, 792, 788, 0, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 808, 1279, 0, 814, + 1282, 1283, 1284, 1281, 1278, 1285, 1286, 0, 0, 0, + 0, 1188, 1184, 0, 0, 0, 0, 1093, 1095, 1097, + 0, 846, 845, 1102, 1108, 1111, 1115, 1116, 1117, 1112, + 1113, 1114, 1104, 1105, 1106, 1107, 1109, 1110, 0, 1130, + 0, 1084, 0, 0, 0, 0, 0, 0, 1223, 0, + 970, 0, 1014, 1005, 0, 0, 1091, 1020, 1225, 1200, + 0, 0, 0, 1255, 1254, 903, 912, 915, 947, 948, + 919, 920, 921, 925, 1277, 1276, 1219, 0, 1211, 0, + 0, 904, 929, 934, 0, 1181, 964, 0, 952, 0, + 942, 0, 950, 954, 930, 945, 0, 926, 0, 1212, + 1127, 1129, 0, 1125, 0, 916, 917, 918, 908, 909, + 910, 911, 913, 914, 922, 1101, 1099, 1100, 0, 1198, + 0, 1210, 0, 0, 1053, 0, 0, 949, 1216, 0, + 776, 593, 776, 0, 901, 1440, 1274, 1433, 1274, 1422, + 1137, 1239, 1273, 565, 0, 0, 0, 1442, 146, 150, + 0, 1199, 180, 182, 695, 0, 600, 601, 605, 0, + 0, 605, 584, 533, 1851, 1733, 0, 0, 0, 0, + 643, 684, 0, 675, 640, 641, 0, 639, 1246, 644, + 1245, 645, 648, 649, 617, 1234, 685, 687, 0, 680, + 0, 1240, 539, 558, 0, 0, 0, 0, 0, 522, + 521, 691, 0, 49, 0, 1609, 66, 0, 0, 0, + 0, 0, 0, 268, 0, 368, 268, 104, 1609, 438, + 1609, 438, 1504, 1575, 1751, 0, 62, 342, 95, 0, + 132, 371, 0, 327, 85, 100, 125, 0, 0, 51, + 222, 236, 241, 128, 245, 242, 1311, 243, 139, 0, + 47, 0, 126, 0, 1309, 0, 0, 53, 130, 1313, + 1455, 0, 1197, 0, 591, 591, 591, 0, 1143, 0, + 0, 0, 1145, 1146, 942, 1321, 1320, 1322, 1319, 456, + 469, 0, 365, 0, 480, 459, 460, 470, 1289, 210, + 0, 201, 366, 0, 366, 0, 1291, 0, 0, 191, + 187, 205, 211, 0, 0, 0, 0, 0, 364, 356, + 354, 387, 0, 361, 355, 0, 0, 313, 0, 1498, + 0, 0, 0, 0, 450, 0, 0, 0, 0, 253, + 254, 404, 1272, 406, 0, 408, 218, 216, 1334, 475, + 0, 474, 479, 477, 473, 472, 0, 467, 0, 501, + 0, 0, 0, 0, 0, 0, 0, 0, 1031, 1149, + 0, 1167, 1166, 973, 980, 983, 987, 988, 989, 1168, + 0, 0, 0, 984, 985, 986, 976, 977, 978, 979, + 981, 982, 990, 774, 0, 0, 768, 1177, 1176, 1170, + 1171, 0, 1039, 1040, 1041, 1178, 0, 0, 743, 620, + 618, 621, 623, 619, 0, 0, 776, 580, 580, 580, + 580, 577, 0, 0, 0, 775, 0, 671, 739, 737, + 0, 761, 0, 734, 717, 740, 0, 725, 0, 732, + 781, 748, 0, 0, 750, 1410, 798, 0, 793, 789, + 0, 0, 0, 799, 0, 0, 0, 0, 0, 0, + 0, 1148, 586, 1017, 0, 0, 0, 1185, 0, 969, + 815, 828, 0, 1096, 1011, 0, 1119, 1083, 856, 855, + 857, 857, 0, 0, 0, 1232, 0, 1137, 1087, 1089, + 1233, 1004, 840, 901, 0, 0, 0, 0, 0, 0, + 0, 953, 944, 0, 951, 955, 0, 0, 0, 938, + 0, 0, 936, 965, 932, 0, 0, 966, 1197, 0, + 1201, 0, 0, 1052, 1061, 698, 694, 654, 591, 654, + 0, 1404, 1424, 1421, 566, 155, 1443, 0, 169, 0, + 0, 0, 0, 172, 186, 183, 1442, 0, 0, 595, + 597, 0, 1120, 605, 599, 647, 646, 0, 615, 682, + 613, 0, 688, 0, 556, 0, 542, 0, 716, 0, + 0, 0, 0, 0, 317, 0, 0, 0, 268, 0, + 376, 0, 383, 0, 0, 368, 349, 84, 0, 0, + 0, 58, 103, 76, 68, 54, 82, 0, 0, 87, + 0, 80, 97, 98, 96, 101, 0, 278, 303, 0, + 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 483, 1198, 1194, 1198, 0, 0, 0, + 593, 589, 590, 1022, 0, 455, 507, 504, 505, 503, + 227, 375, 0, 0, 0, 199, 363, 0, 1306, 0, + 1288, 401, 0, 192, 0, 190, 210, 0, 0, 201, + 366, 0, 341, 337, 362, 335, 334, 336, 0, 1499, + 220, 0, 1493, 366, 1305, 0, 0, 451, 0, 445, + 0, 1300, 252, 438, 0, 463, 502, 509, 489, 494, + 0, 500, 496, 495, 490, 498, 497, 493, 1032, 1043, + 1165, 0, 0, 0, 0, 767, 770, 0, 1038, 1033, + 741, 0, 0, 654, 0, 0, 0, 0, 571, 570, + 576, 0, 0, 1055, 736, 0, 0, 0, 723, 711, + 718, 719, 0, 0, 0, 779, 778, 749, 802, 0, + 782, 802, 0, 802, 0, 800, 0, 809, 894, 895, + 896, 897, 898, 899, 900, 834, 0, 1187, 1183, 1092, + 1094, 1131, 852, 850, 1222, 1136, 1227, 1229, 0, 0, + 0, 1086, 971, 1253, 905, 0, 0, 935, 1182, 956, + 0, 0, 0, 931, 1119, 0, 0, 0, 0, 0, + 940, 0, 1205, 1198, 0, 1204, 0, 0, 0, 0, + 1027, 699, 671, 0, 671, 0, 0, 1441, 0, 1436, + 147, 148, 149, 0, 0, 0, 164, 141, 0, 0, + 181, 169, 157, 603, 604, 0, 598, 614, 1235, 1241, + 541, 0, 1001, 0, 0, 538, 0, 133, 268, 0, + 0, 65, 0, 385, 329, 377, 360, 344, 0, 0, + 0, 269, 0, 402, 0, 0, 350, 0, 0, 0, + 0, 330, 0, 0, 289, 0, 0, 360, 0, 367, + 285, 286, 0, 57, 77, 0, 73, 0, 102, 0, + 0, 0, 0, 0, 60, 72, 0, 55, 0, 438, + 438, 63, 1266, 1902, 1903, 1904, 1905, 1906, 1907, 1908, + 1909, 1910, 1911, 2022, 1912, 1913, 1914, 1915, 1916, 1917, + 1918, 1919, 2031, 1920, 275, 1921, 1678, 1922, 1923, 1924, + 1925, 1926, 0, 1927, 785, 1928, 1929, 2110, 1930, 1104, + 1105, 274, 273, 370, 270, 378, 272, 0, 1267, 271, + 373, 328, 129, 1312, 0, 127, 0, 1310, 136, 134, + 131, 1314, 1448, 0, 0, 1025, 1026, 1023, 591, 0, + 0, 0, 483, 462, 0, 0, 0, 1498, 0, 0, + 0, 1609, 0, 188, 0, 0, 202, 1306, 198, 363, + 0, 393, 313, 388, 0, 1498, 1496, 0, 1306, 1492, + 0, 442, 0, 0, 0, 409, 476, 0, 499, 993, + 0, 0, 0, 0, 630, 0, 636, 671, 575, 574, + 573, 572, 653, 1549, 1834, 1732, 0, 657, 652, 655, + 660, 662, 661, 663, 659, 670, 0, 673, 760, 1132, + 1134, 0, 0, 0, 0, 724, 726, 0, 728, 0, + 780, 796, 0, 797, 0, 795, 790, 801, 1186, 1230, + 1231, 1226, 0, 902, 962, 960, 957, 0, 958, 939, + 0, 0, 937, 933, 0, 967, 0, 0, 1202, 0, + 1047, 0, 1050, 1064, 1060, 1059, 1055, 1022, 1055, 1405, + 564, 168, 145, 171, 170, 0, 1199, 178, 0, 0, + 169, 0, 173, 452, 0, 0, 553, 715, 546, 547, + 0, 381, 67, 0, 360, 0, 268, 346, 345, 348, + 343, 347, 0, 403, 0, 0, 287, 0, 294, 332, + 333, 331, 288, 360, 366, 290, 0, 0, 0, 69, + 59, 56, 61, 70, 0, 0, 71, 74, 781, 86, + 79, 1266, 2031, 2040, 0, 0, 0, 0, 0, 1196, + 1195, 0, 458, 457, 506, 454, 465, 227, 0, 0, + 0, 337, 1495, 0, 0, 447, 0, 0, 363, 193, + 0, 0, 0, 0, 1498, 0, 0, 265, 0, 310, + 0, 213, 1497, 0, 0, 1484, 0, 0, 1298, 1299, + 0, 464, 994, 0, 995, 771, 0, 0, 628, 1055, + 0, 0, 0, 664, 658, 0, 1054, 1056, 0, 625, + 1135, 720, 0, 722, 0, 746, 0, 746, 729, 791, + 783, 1228, 1045, 0, 959, 963, 961, 941, 1198, 1206, + 1198, 1203, 1049, 1063, 1066, 673, 1251, 673, 0, 0, + 156, 0, 0, 153, 140, 158, 1121, 543, 544, 0, + 268, 0, 359, 382, 299, 277, 0, 0, 0, 284, + 291, 392, 293, 0, 78, 94, 0, 0, 372, 137, + 135, 1024, 483, 0, 204, 1306, 313, 1492, 444, 0, + 0, 0, 0, 337, 220, 1494, 326, 319, 320, 321, + 322, 323, 324, 325, 340, 339, 311, 312, 0, 0, + 0, 0, 0, 446, 1300, 0, 175, 184, 0, 175, + 996, 631, 0, 673, 0, 0, 0, 656, 0, 0, + 672, 0, 529, 1133, 0, 710, 708, 0, 709, 0, + 0, 0, 0, 593, 625, 625, 142, 0, 143, 179, + 0, 0, 0, 366, 384, 358, 0, 351, 297, 296, + 298, 302, 0, 300, 0, 316, 0, 309, 277, 0, + 81, 0, 379, 453, 461, 0, 267, 1486, 363, 0, + 203, 1492, 313, 1498, 1492, 0, 1489, 0, 443, 0, + 0, 0, 177, 1306, 0, 177, 0, 625, 666, 0, + 665, 1058, 1057, 627, 721, 0, 1046, 1208, 1207, 0, + 1070, 528, 527, 0, 0, 0, 0, 392, 0, 338, + 0, 0, 299, 0, 292, 389, 390, 391, 0, 305, + 295, 306, 75, 93, 380, 0, 363, 1487, 266, 214, + 1485, 1490, 1491, 0, 175, 174, 602, 176, 776, 185, + 602, 635, 530, 667, 624, 727, 1065, 0, 0, 0, + 0, 0, 152, 776, 163, 0, 309, 357, 352, 276, + 301, 315, 0, 0, 0, 307, 0, 308, 1492, 0, + 177, 605, 1296, 605, 1820, 1550, 1786, 0, 1082, 1071, + 1082, 1082, 1062, 144, 151, 0, 268, 281, 0, 280, + 0, 369, 304, 1488, 1306, 602, 165, 166, 0, 1075, + 1074, 1073, 1077, 1076, 0, 1069, 1067, 1068, 776, 386, + 279, 283, 282, 776, 605, 0, 0, 1079, 0, 1080, + 162, 1297, 167, 1072, 1078, 1081 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = +{ + -1, 48, 49, 50, 750, 2593, 2594, 2595, 2235, 1204, + 3360, 2236, 1205, 1206, 2597, 751, 801, 1092, 803, 1093, + 1602, 905, 1238, 1239, 752, 1751, 753, 2816, 2159, 2541, + 3342, 55, 3087, 2162, 1164, 3090, 3307, 2809, 3085, 2542, + 3382, 3436, 3088, 2163, 2164, 3308, 2165, 754, 2654, 2655, + 755, 756, 1835, 59, 1300, 546, 1832, 757, 1333, 1334, + 960, 758, 1836, 1779, 2932, 1224, 1769, 1348, 62, 1853, + 759, 106, 64, 760, 2582, 2933, 3353, 2608, 3491, 2869, + 2870, 3350, 3351, 2585, 2238, 3419, 3420, 2669, 1760, 3414, + 2319, 3294, 2242, 2223, 2871, 2327, 3252, 2981, 2239, 2851, + 2320, 3346, 1848, 2321, 3347, 3106, 2322, 1810, 1839, 2586, + 3421, 2243, 1811, 2581, 2934, 1748, 2323, 3357, 2324, 547, + 2855, 761, 741, 742, 952, 1327, 743, 762, 936, 1845, + 763, 764, 2635, 2297, 3157, 2684, 3158, 2358, 2291, 1357, + 2352, 1873, 1813, 1358, 535, 1887, 2685, 2640, 1874, 765, + 1094, 72, 73, 1007, 74, 3100, 75, 76, 1725, 1726, + 1727, 848, 860, 861, 2155, 1441, 1957, 853, 1168, 1694, + 835, 836, 2281, 876, 1802, 1689, 1690, 2168, 2549, 1718, + 1719, 1177, 1178, 1945, 3322, 1946, 1947, 1434, 1435, 3198, + 1706, 1710, 1711, 2189, 2179, 1697, 2427, 3017, 3018, 3019, + 3020, 3021, 3022, 3023, 1095, 2723, 3209, 1714, 1715, 1180, + 1181, 1182, 1723, 2199, 78, 79, 2140, 2525, 2526, 807, + 3034, 1460, 1728, 2727, 2728, 2729, 3037, 3038, 3039, 808, + 1002, 1003, 1026, 1021, 1449, 1966, 809, 810, 1922, 1923, + 2396, 1028, 1959, 1977, 1978, 2735, 2451, 1529, 2224, 1530, + 1531, 1992, 1532, 1096, 1533, 1561, 1097, 1566, 1535, 1098, + 1099, 1100, 1538, 1101, 1102, 1103, 1104, 1554, 1105, 1106, + 1578, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 1151, 1729, 1108, 1109, 1110, 1111, + 1112, 1113, 1114, 812, 1115, 1116, 1651, 2134, 2524, 3027, + 3206, 3207, 2800, 3075, 3234, 3333, 3450, 3478, 3479, 3505, + 1117, 1118, 1594, 1595, 1596, 2027, 2028, 2029, 2030, 2128, + 1645, 1646, 1119, 2936, 1648, 2050, 3030, 3031, 1152, 1427, + 1589, 1279, 1280, 1543, 1401, 1402, 1408, 1897, 1416, 1420, + 1927, 1928, 1428, 2096, 1120, 2021, 2022, 2468, 1556, 1121, + 1237, 1601, 2795, 2131, 1649, 2090, 1128, 1122, 1129, 1124, + 1585, 1586, 2485, 2767, 2768, 2060, 2196, 1678, 2201, 2202, + 956, 1125, 1126, 1127, 1281, 519, 1544, 3437, 1323, 1157, + 1282, 2086, 766, 1034, 2014, 767, 1296, 1825, 768, 3189, + 2994, 1312, 1849, 2332, 548, 769, 770, 528, 85, 2286, + 917, 86, 87, 88, 885, 1350, 771, 1351, 1352, 967, + 89, 2686, 969, 970, 773, 842, 843, 1472, 1665, 1473, + 774, 818, 1470, 775, 1147, 857, 1148, 1150, 776, 1141, + 2538, 2157, 94, 95, 96, 114, 1235, 777, 829, 830, + 866, 99, 100, 1192, 831, 849, 779, 780, 3185, 781, + 2672, 1306, 529, 521, 522, 1546, 715, 1284, 716 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -2987 +static const int yypact[] = +{ + 6315, -13, 722, -2987, -2987, 285, -13, 49878, 64713, 72, + -13, 172, 4065, 51858, -2987, -2987, 46413, 41312, -13, 54828, + 72049, 349, 300, 31840, 382, 55323, 55323, -2987, -2987, -2987, + 64713, 54828, 55818, -13, 340, 65208, -2987, -13, 34315, 52353, + -27, -2987, 54828, 34, 16, 56313, 54828, 2732, 576, 224, + -2987, -2987, -2987, -2987, -2987, 126, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, 144, -2987, 116, 147, 31840, 31840, 1267, 318, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 311, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + 33820, -2987, -2987, -2987, -2987, -2987, -2987, 56808, 54828, 57303, + 52848, 57798, -2987, 613, 819, -2987, 160, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 181, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 396, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, 188, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, 381, -2987, 402, -2987, + 189, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + 1569, -2987, -2987, 818, 2426, 54828, 20, 695, 580, -2987, + 58293, -2987, 591, 54828, -2987, -2987, 638, 856, 855, -2987, + -2987, 53343, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 46908, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, 815, -2987, -2987, + 594, -2987, 154, -2987, -2987, 605, 625, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, 820, -2987, -2987, -2987, + 835, 65703, 58788, 59283, -2987, 704, 3136, 7105, 72067, 30848, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, 311, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, 55323, 64713, 55323, 717, 729, 1083, 739, 32335, + 756, 34811, 772, 781, 1128, 795, 800, 824, 830, 16, + 31344, 822, 381, -2987, 59778, 59778, -10, 1763, -2987, 59778, + 60273, -2987, 852, -2987, 819, -2987, -2987, -2987, 1185, -2987, + 419, 853, -2987, 60768, 60768, 60768, 877, 1157, -2987, -2987, + -2987, 875, -2987, -2987, 1116, 20517, 20517, 66198, 66198, 819, + 66198, 925, -2987, -2987, 37, -2987, -2987, -2987, 1267, 911, + 381, -2987, -2987, 52353, -2987, -2987, 225, 1287, 20517, 54828, + 943, -2987, 957, 943, 967, 969, 978, -2987, 6315, 1298, + 1209, 52353, 343, 343, 1463, 343, 1056, 1084, 6398, 6686, + -2987, 1859, -2987, 1019, -2987, 54828, 1124, 1049, 1325, -2987, + 911, 1409, 185, 1213, 1419, 4415, 1428, 559, 1443, 985, + 1450, 1576, 20517, 47403, 381, -2987, 11660, 20517, -2987, -2987, + -2987, 1207, -2987, -2987, -2987, -2987, -2987, 54828, 64713, 1112, + 1125, -2987, -2987, -2987, -2987, 1358, 1367, -2987, 1603, 66693, + -2987, -2987, 1179, 61263, 61758, 62253, 62748, 1561, -2987, -2987, + 1504, -2987, -2987, -2987, 1186, -2987, -2987, -2987, 332, 67188, + 1518, 1164, 175, -2987, 1530, 212, -2987, 1533, 1407, 15307, + -2987, 1346, -2987, -2987, -2987, 16, -2987, 284, -2987, -2987, + 43357, -2987, -2987, 72067, 1272, 1195, -2987, 1558, 20517, 20517, + 1223, 7242, 59778, 60273, 20517, 54828, -2987, 20517, 25206, 1227, + 20517, 20517, 12702, 20517, 29858, 59778, 1763, 1231, -2987, 588, + 54828, 1242, -2987, 1334, 1334, 340, 31840, 1540, -2987, 219, + 1568, 1467, -2987, 31840, 1467, 916, 1280, 1580, 1467, -2987, + 598, 1583, 1334, 35306, 1301, -2987, 1334, 1505, -2987, -2987, + 55323, 20517, 15307, 69663, 1779, -2987, -2987, -2987, -2987, 1596, + 64713, 1308, -2987, -2987, -2987, -2987, -2987, -2987, 669, 1827, + 141, 1830, 20517, 141, 141, 1329, 190, 190, -2987, 1524, + 1336, -2987, 195, 1337, 1338, 1849, 1850, 167, 163, 353, + 141, 20517, -2987, 190, 1345, 1855, 1347, 1857, 156, 187, + -2987, 199, 20517, 20517, 20517, 1715, 20517, 10618, -2987, 54828, + 1858, 47403, 692, -2987, 381, 1352, 819, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, 1354, -2987, 180, 6820, -2987, -2987, + -2987, -2987, -2987, 1392, -2987, -2987, -2987, -2987, 1572, 20517, + -2987, -2987, 1356, 1540, -2987, 204, -2987, -2987, 1540, -2987, + -2987, -2987, -2987, -2987, 220, 1766, 20517, 20517, 64713, 381, + 67683, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 441, -2987, + 311, 45045, 1357, 1361, 943, 54828, 54828, 1837, -2987, -2987, + -2987, -2987, 52353, 142, 1660, 1492, -2987, -2987, 1267, 1267, + 15828, 737, 487, 1054, 16349, 21038, 1714, 1597, 227, 218, + 1719, -2987, 1600, 1829, 25206, 20517, 20517, 1056, 1084, 20517, + 957, -2987, -2987, -2987, 1655, 54828, 50373, 937, 941, 1377, + 1464, 1379, 81, 1808, -2987, 1384, -2987, 1485, 54828, 71598, + 192, -2987, 1856, 192, 192, 251, 1864, 1488, 272, 1652, + 362, 257, 1384, 202, -2987, 52353, 197, 761, 1384, 54828, + 1498, 788, 1384, 1820, 64713, 1195, 40944, 1406, -2987, -2987, + -2987, 164, 15307, -2987, 1156, 1311, 1320, 391, 153, 1373, + 1420, 15307, 1478, 1542, 168, 1577, 1587, 1601, 1659, 1665, + 1674, 1679, 1691, 149, 1710, 1712, 1718, 1720, 1726, 1730, + -2987, 1741, 170, 1760, 206, 15307, 1773, -2987, 45045, -1, + -2987, -2987, 1777, 174, -2987, 45134, -2987, 1713, 1508, 1509, + 64713, 1465, 54828, 1570, 865, 1793, 1846, 70143, 1675, -2987, + 1750, 54828, 1678, 202, 1680, 1439, 1916, 1684, 1125, 1685, + 1448, -2987, 68178, 47403, -2987, -2987, -2987, -2987, -2987, 1811, + 1794, 64713, 47403, 1452, -2987, -2987, 64713, -2987, 54828, 54828, + -2987, 54828, 64713, -2987, 526, 45045, 1957, 617, 72067, 48888, + -2987, -2987, -2987, -2987, 1143, 1201, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, 819, 47403, -2987, 3327, 55323, + 43975, 1459, 20517, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, 1461, 1807, -2987, -2987, 6597, 1466, 44015, 1468, 25206, + 25206, 381, 4715, -2987, -2987, 25206, 1469, 49383, 43888, 1462, + 1471, 44363, 16870, 20517, 16870, 16870, 44450, -2987, 1473, 44527, + 59778, 1475, 54828, 53838, -2987, -2987, -2987, 20517, 20517, 1763, + 54333, 1520, 31840, -2987, 31840, -2987, 1758, 31840, -2987, -2987, + 3920, -2987, 31840, 1770, 20517, 31840, -2987, 31840, 1717, 1721, + 1481, 31840, -2987, 54828, 1493, 54828, -2987, -2987, -2987, -2987, + -2987, 45045, -2987, 1491, 633, 1499, -2987, -2987, -2987, -2987, + -2987, 1551, -2987, 1551, 1551, -2987, -2987, -2987, -2987, 1502, + 1502, 1507, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, 1513, 353, -2987, 1551, -2987, + 1502, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 71598, -2987, + -2987, -2987, -2987, 621, 645, -2987, 1514, -2987, -2987, 1515, + -2987, 1503, 1979, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, 8492, 742, 1502, -2987, -2987, 4693, -2987, -2987, + 20517, 20517, -2987, -2987, 1516, 45045, 1550, -2987, -2987, 20517, + 20517, -2987, -2987, -2987, -2987, 2024, -2987, 20517, 1551, 1551, + -2987, 5276, -2987, 39763, 17391, 1610, 1611, 2024, -2987, 2024, + -2987, 5276, 2033, 2033, 37781, -2987, 1695, 44614, -2987, 1536, + 1877, 7400, 1538, 1527, -2987, 1544, 1543, -2987, -2987, 41872, + 137, 381, 381, 20517, -2987, 2024, 20517, 8530, 8530, -2987, + 294, 69663, 20517, 20517, 20517, 20517, 20517, 20517, 20517, 20517, + 45918, 1628, 171, 64713, 20517, 20517, 1549, 881, -2987, 20517, + 1786, -2987, 1553, 20517, 1641, 896, 20517, 20517, 20517, 20517, + 20517, 20517, 20517, 20517, 20517, -2987, -2987, 28853, 347, 740, + 1890, 1909, -26, 1212, 20517, 1901, 11660, -2987, 1901, -2987, + -2987, -2987, -2987, -2987, 205, -2987, -2987, 1491, 1491, -2987, + 64713, -2987, 54828, 225, 51363, 20517, -2987, -2987, 1562, 1563, + 546, 1619, -2987, -2987, 54828, 38276, 1862, -2987, 357, 1567, + -2987, 43849, 1816, 1862, 1267, -2987, -2987, 26248, 1697, 1863, + 1800, -2987, -2987, 1781, 1785, -2987, 1573, 45267, 21559, 21559, + -2987, 1411, 45045, 1433, -2987, -2987, -2987, -2987, -2987, -2987, + 547, -2987, 54828, 78, 35801, -2987, 1581, 102, -2987, 5415, + 1920, 1883, 1714, 218, 1590, -2987, -2987, 996, 1593, 68673, + 54828, 1882, 1835, 1884, -45, 69663, -2987, -2987, -2987, -2987, + 54828, 64713, 63243, 69168, 47898, 54828, 47403, -2987, -2987, -2987, + -2987, 54828, 1102, 54828, 6396, -2987, -2987, -2987, -2987, 192, + -2987, -2987, -2987, -2987, -2987, 64713, 54828, -2987, -2987, 192, + 64713, 54828, 192, -2987, 1082, 54828, 54828, 54828, 54828, 1208, + 54828, 54828, 819, -2987, -2987, -2987, 22080, 8, 8, 1817, + 13223, 131, -2987, 20517, 20517, 901, 273, 64713, 1778, -2987, + -2987, 770, 1826, 200, -2987, 64713, 1649, 54828, 54828, 54828, + 54828, 54828, 1363, -2987, -2987, -2987, -2987, -2987, 1604, -2987, + 1965, 2116, 1606, 1614, 1978, -2987, 202, 1983, 50868, 159, + 2595, 1986, 1663, 1989, 13744, 2091, 1868, -2987, -2987, 1866, + -2987, 64713, 2141, -2987, 175, -2987, 47403, -2987, 212, -2987, + 1869, 241, -2987, 15307, 20517, -2987, -2987, -2987, -2987, -2987, + -2987, 1195, 29359, -2987, 776, -2987, -2987, 2108, 819, 2108, + 672, -2987, -2987, 2108, -2987, 2094, 2108, -2987, -2987, 69663, + -2987, 7699, -2987, 20517, 20517, -2987, 20517, 1994, -2987, 2146, + 2146, 69663, 25206, 25206, 25206, 25206, 25206, 25206, 213, 1345, + 25206, 25206, 25206, 25206, 25206, 25206, 25206, 25206, 25206, 26769, + 230, -2987, -2987, 786, 2119, 20517, 20517, 2001, 1994, 20517, + -2987, 69663, 1645, -2987, 1653, 1654, 20517, -2987, 69663, -2987, + 54828, 1656, -2, 561, -2987, 1664, 1669, -2987, 1540, -2987, + 810, 847, 54828, 2652, 3454, 3760, -2987, -2987, 20517, 1990, + 3920, 3920, 31840, -2987, 20517, 1670, -2987, -2987, 31840, 2007, + -2987, 3920, -2987, -2987, 36296, 3920, 69663, 825, -2987, 54828, + 69663, 833, 20517, -2987, 15307, 2171, 69663, 2138, 64713, 64713, + 2182, 1677, 1681, 2024, 1764, -2987, 1767, 1769, 1772, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 69663, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, 1673, 1688, 20517, + 20517, 138, -2987, 7786, 1690, 1693, 5578, -2987, 1696, -2987, + 1682, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 1702, -2987, + 1694, -2987, 1698, 1709, 1722, 1706, 1707, 54828, -2987, 22601, + -2987, 64713, -2987, -2987, 20517, 20517, 54828, -2987, 1715, -2987, + 1708, 1716, 8076, -2987, -2987, -2987, 239, 769, 8382, 1212, + 2227, 2227, 2227, 5276, -2987, -2987, -2987, 1731, -2987, 25206, + 25206, -2987, 2509, 256, 10618, -2987, -2987, 2058, -2987, 954, + -2987, 1727, -2987, -2987, 1988, -2987, 39763, 45338, 20517, 173, + -2987, 20517, 1549, 20517, 1802, 2227, 2227, 2227, 282, 282, + 239, 239, 239, 769, 1212, -2987, -2987, -2987, 1735, 20517, + 47403, -2987, 1739, 1752, 2077, 1347, 20517, -2987, -2987, 31840, + 1520, -1, 1520, 2024, 8530, -2987, 957, -2987, 957, -2987, + 45045, 54828, -2987, -2987, 1985, 1757, 31840, 1771, 2196, 2181, + 64713, -2987, -2987, 1745, 1901, 1742, -2987, -2987, 1776, 20517, + 1749, 1776, -2987, 1862, 5, 1982, 1202, 1202, 1411, 1987, + -2987, -2987, 1831, -2987, -2987, -2987, 20517, 14265, 1444, -2987, + 1447, -2987, -2987, -2987, -2987, -2987, 1765, -2987, 2035, -2987, + 54828, -2987, -2987, 25206, 2217, 20517, 36791, 2222, 2019, -2987, + -2987, -2987, 1860, 1384, 20517, 2011, -2987, 240, 1775, 2135, + 293, 2089, 64713, -2987, 281, 334, -2987, 755, 2142, 241, + 2144, 241, 47403, 47403, 47403, 843, -2987, -2987, -2987, 819, + -2987, 331, 854, -2987, -2987, -2987, -2987, 1865, 806, 1384, + 202, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 198, 814, + 1384, 1870, -2987, 1872, -2987, 1874, 823, 1384, -2987, -2987, + 1576, 9053, 45045, 522, 131, 131, 131, 15307, -2987, 2016, + 2023, 1795, 45045, 45045, 135, -2987, -2987, -2987, -2987, 1801, + -2987, 210, -2987, 64713, -2987, -2987, -2987, 1778, 1846, 1750, + 54828, 202, 1803, 2268, 1125, 1448, -2987, 1962, 1043, 1676, + -2987, 64713, -2987, 47403, 64713, 54828, 54828, 54828, 63738, -2987, + -2987, -2987, 1804, 1805, -2987, 9, 2031, 2036, 54828, 1844, + 54828, 1379, 2282, 54828, -2987, 858, 17912, 2172, 54828, 1794, + -2987, -2987, -2987, -2987, 64713, -2987, -2987, 45045, -2987, -2987, + 48393, -2987, -2987, -2987, -2987, -2987, 47403, -2987, 819, -2987, + 819, 2057, 64713, 42367, 819, 42862, 819, 1822, -2987, 45045, + 8224, 45045, 2001, -2987, 148, 2146, 1825, 1825, 1825, 4327, + 2167, 215, 1828, 1825, 1825, 1825, 296, 296, 148, 148, + 148, 2146, 230, 852, 49383, 1832, -2987, 45045, 45045, -2987, + -2987, 1824, -2987, -2987, -2987, -2987, 1833, 1836, -2987, -2987, + -2987, -2987, -2987, -2987, 64713, 1238, 1520, -27, -27, -27, + -27, -2987, 54828, 54828, 54828, 45045, 2281, 2159, -2987, -2987, + 3920, 45045, 54828, -2987, 27811, -2987, 54828, -2987, 2179, -2987, + 2267, -2987, 54828, 863, -2987, -2987, -2987, 926, 1838, 1681, + 69663, 931, 955, -2987, 2024, 194, 1843, 1555, 1278, 492, + 1445, -2987, -2987, -2987, 1845, 44749, 20517, -2987, 2209, -2987, + -2987, -2987, 20517, 20517, -2987, 39763, -2987, -2987, -2987, -2987, + -50, -50, 1848, 10618, 44971, -2987, 2155, 8299, 45045, -2987, + 1695, -2987, -2987, 8530, 20517, 1205, 3014, 20517, 1851, 20517, + 2188, -2987, -2987, 1854, -2987, -2987, 69663, 20517, 1861, 2787, + 25206, 25206, 3657, -2987, 6043, 20517, 10618, -2987, 41030, 1840, + 1871, 1817, 18433, -2987, 2061, 1852, -2987, 1990, 131, 1990, + 1867, -2987, -2987, -2987, -2987, 4693, -2987, 20517, 2004, 64713, + 379, 2098, 961, -2987, 381, 38276, 1771, 20517, 247, -2987, + -2987, 1880, -2987, 1776, -2987, -2987, -2987, 2075, -2987, -2987, + -2987, 54828, -2987, 1873, -2987, 35801, 2189, 11139, -2987, 35801, + 54828, 54828, 40266, 2220, -2987, 64713, 64713, 64713, -2987, 64713, + 1878, 1876, 899, 1881, 752, -2987, 1847, 899, 2199, 651, + 1379, 272, 2556, 423, -2987, -2987, -2987, 1938, 54828, -2987, + 64713, -2987, -2987, -2987, -2987, -2987, 47898, -2987, -2987, 39267, + 47403, -2987, 47403, 54828, 54828, 54828, 54828, 54828, 54828, 54828, + 54828, 54828, 54828, 1195, 20517, -2987, 20517, 1887, 1891, 1892, + 1817, -2987, -2987, -2987, 223, -2987, 1889, -2987, -2987, -2987, + 257, -2987, 210, 1885, 1894, -2987, 50868, 2426, 1663, 2338, + 1846, 767, 64218, -2987, 1895, 1879, 1750, 963, 965, 202, + 1897, 2340, -2987, 159, 50868, -2987, -2987, -2987, 2297, -2987, + 704, 209, -2987, 1125, -2987, 2426, 1448, -2987, 2426, 45045, + 64713, 1932, -2987, 241, 971, -2987, -2987, -2987, -2987, -2987, + 64713, 1899, -2987, 1899, -2987, -2987, 1899, -2987, -2987, -2987, + -2987, 25206, 2238, 1905, 69663, -2987, -2987, 54828, -2987, -2987, + -2987, 1000, 1900, 1990, 54828, 54828, 54828, 54828, -2987, -2987, + -2987, 18954, 20517, 1946, -2987, 1907, 12181, 2225, -2987, 27290, + -2987, -2987, 1913, 36296, 64713, -2987, -2987, -2987, -2987, 2024, + -2987, -2987, 64713, -2987, 1922, -2987, 1923, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, 20517, 45045, -2987, 45045, + -2987, -2987, -2987, -2987, -2987, 7353, -2987, 1919, 1925, 64713, + 20517, -2987, -2987, -2987, 773, 20517, 20517, 2509, -2987, 45429, + 20517, 69663, 1002, 2509, 348, 20517, 5175, 5705, 20517, 20517, + 6302, 40305, -2987, 23122, 14786, -2987, 1926, 20517, 40344, 38771, + -2987, 31840, 2159, 1927, 2159, 819, 1931, 45045, 20517, -2987, + -2987, -2987, -2987, 1991, 67, 33325, 2149, -2987, 1944, 64713, + -2987, 2004, 45045, -2987, -2987, 39763, -2987, -2987, -2987, -2987, + -2987, 2389, 2000, 1935, 1937, -2987, 1365, -2987, -2987, 64713, + 1939, -2987, 1940, 899, -2987, 64713, 1980, -2987, 309, 2253, + 95, -2987, 20517, -2987, 2343, 2421, 1847, 1950, 64713, 54828, + 25206, -2987, 414, 246, -2987, 2241, 54828, 1980, 2380, -2987, + -2987, -2987, 752, -2987, 2279, 2194, -2987, 192, -2987, 20517, + 752, 2195, 222, 64713, -2987, -2987, 3395, -2987, 69663, 241, + 241, -2987, 1499, 1963, 1964, 1966, 1967, 1968, 1969, 1972, + 1973, 1975, 1997, -2987, 2003, 2005, 2006, 2010, 2012, 2013, + 2015, 2017, 1513, 2018, -2987, 2020, 1880, 2022, 2025, 2028, + 2030, 2032, 70623, 2034, 2045, 2047, 2048, 1514, 2050, 1143, + 1201, -2987, -2987, -2987, -2987, -2987, -2987, 1164, 2051, -2987, + 1998, -2987, -2987, -2987, 2053, -2987, 2074, -2987, -2987, -2987, + -2987, -2987, -2987, 1993, 2014, -2987, -2987, -2987, 131, 1992, + 1995, 64713, 1195, 113, 47403, 64713, 2055, 1844, 2438, 19475, + 1048, 2258, 2021, -2987, 819, 2037, -2987, 1663, -2987, 50868, + 2948, 245, 2036, -2987, 304, 1844, -2987, 2442, 1663, 2092, + 2533, -2987, 2286, 64713, 2065, -2987, -2987, 48393, 1899, 5624, + 25206, 69663, 1027, 1032, -2987, 2573, 2232, 2159, -2987, -2987, + -2987, -2987, -2987, 2072, -29, 2073, 10097, 2076, -2987, -2987, + -2987, -2987, -2987, -2987, 45045, 45045, 64713, 2255, -2987, -2987, + 2082, 2078, 37286, 2536, 2086, -2987, -2987, 2408, -2987, 30353, + -2987, 1681, 2095, 1681, 69663, 1681, -2987, -2987, 45045, 20517, + -2987, -2987, 41298, 2416, 2509, 2509, 45429, 1057, -2987, 2509, + 20517, 20517, 2509, 2509, 20517, -2987, 9575, 550, -2987, 1059, + -2987, 40391, -2987, 71103, -2987, -2987, 1946, 819, 1946, -2987, + -2987, 2093, -2987, -2987, -2987, 2150, -2987, -2987, 1061, 2519, + 2004, 20517, -2987, -2987, 2099, 35801, -2987, -2987, -2987, -2987, + 35801, 899, -2987, 2269, 1980, 2106, -2987, -2987, -2987, -2987, + -2987, -2987, 40430, -2987, 83, 20517, -2987, 184, 4327, -2987, + -2987, -2987, -2987, 1980, 1125, -2987, 54828, 2583, 2472, -2987, + -2987, 45045, -2987, -2987, 2024, 2024, -2987, -2987, 2267, -2987, + -2987, 2110, -2987, -2987, 1164, 375, 39267, 54828, 54828, -2987, + -2987, 2112, -2987, -2987, -2987, -2987, -2987, 257, 2504, 1069, + 1070, 159, -2987, 2426, 2426, 45045, 54828, 2478, 50868, -2987, + 47403, 2591, 2117, 54828, 1844, 437, 437, -2987, 2271, -2987, + 2273, -2987, -2987, 2593, 356, -2987, 19996, 54828, -2987, -2987, + 32830, -2987, 5624, 1071, -2987, -2987, 2120, 2127, -2987, 1946, + 20517, 2128, 20517, -2987, 23643, 2603, 2126, -2987, 20517, 2191, + 28332, -2987, 20517, -2987, 54828, 59778, 2133, 59778, -2987, -2987, + -2987, -2987, -2987, 20517, -2987, 2509, 2509, 2509, 20517, -2987, + 20517, -2987, -2987, -2987, 2339, 2255, -2987, 2255, 20517, 2426, + 381, 2758, 64713, 0, -2987, 45045, -2987, -2987, -2987, 54828, + -2987, 47403, -2987, 899, 12, 2136, 20517, 40780, 2379, -2987, + -2987, 2411, -2987, 2470, -2987, 2212, 640, 2228, -2987, -2987, + -2987, -2987, 1195, 819, -2987, 1663, 2036, 2092, -2987, 2154, + 54828, 1106, 2426, 159, 704, -2987, -2987, -2987, -2987, -2987, + -2987, -2987, -2987, -2987, -2987, -2987, -2987, -2987, 2426, 2596, + 2377, 2597, 2426, 45045, 1932, 20517, 91, -2987, 1110, 2592, + -2987, -2987, 2665, 2255, 2161, 23643, 2163, -2987, 2169, 64713, + 45045, 2313, -2987, -2987, 2173, -2987, -2987, 20517, -2987, 41380, + 2174, 2176, 2625, 1817, 2191, 2191, -2987, 67, -2987, -2987, + 2598, 32830, 2553, 1125, 899, 2187, 1137, -2987, -2987, -2987, + -2987, -2987, 202, -2987, 40866, 2420, 208, 2404, 2136, 20517, + -2987, 2256, -2987, -2987, -2987, 2656, -2987, -2987, 50868, 2184, + -2987, 2092, 2036, 1844, 2092, 2407, -2987, 2409, -2987, 2186, + 40905, 64713, 64713, 1663, 32830, 64713, 2190, 2191, -2987, 2197, + -2987, -2987, -2987, 53838, -2987, 2198, -2987, -2987, -2987, 20517, + 152, -2987, -2987, 2244, 54828, 1145, 40, 2411, 39267, -2987, + 47403, 1058, 12, 2500, -2987, -2987, -2987, -2987, 127, 2417, + -2987, 2422, -2987, 45045, -2987, 2426, 50868, -2987, -2987, -2987, + -2987, -2987, -2987, 32830, 2592, -2987, 357, -2987, 1520, -2987, + 357, -2987, -2987, -2987, -2987, -2987, 1462, 24164, 24164, 24164, + 2201, 2426, -2987, 1520, -2987, 2323, 2404, -2987, -2987, -2987, + -2987, -2987, 176, 176, 2588, -2987, 2266, -2987, 2092, 1146, + 64713, 1776, -2987, 1776, 25727, 2355, 177, 43927, 2575, -2987, + 2575, 2575, -2987, -2987, -2987, 38276, -2987, -2987, 2696, -2987, + 231, -2987, -2987, -2987, 1663, 357, -2987, -2987, 2688, -2987, + -2987, -2987, -2987, -2987, 196, -2987, -2987, -2987, 1520, 899, + -2987, -2987, -2987, 1520, 1776, 24685, 2361, -2987, 2430, -2987, + -2987, -2987, -2987, -2987, -2987, -2987 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -2987, -2987, -2987, 1875, 79, -2987, -2987, 146, -2987, 982, + -2987, 145, -814, 520, -2987, 86, 3842, 2546, 3549, 66, + -510, -886, -1210, 28, 87, -1138, 4, -2987, -2987, -2987, + -2987, -2987, -494, 211, -2987, -2987, -634, -2547, -583, -2987, + -2913, -2986, -2987, -2987, -727, -2954, -2059, 89, -2987, -2987, + 93, 1, -2096, -2987, -1645, 42, -2092, 94, 892, -2987, + -2555, 98, -883, -1185, -944, -1191, -2987, -123, -2987, 421, + 105, 1560, -2987, 11, -2163, -2858, -597, -2987, -701, -2987, + -353, -2987, -647, -2987, -929, -654, -686, -2783, -1130, -2987, + 1579, -400, -2987, 557, -2987, -2560, -2987, -2987, 551, -2987, + -1165, -2987, -2207, 115, -630, -2562, -2509, -2166, -885, 203, + -636, 179, -2079, -1212, -2987, 568, -2987, -615, -2987, -891, + -2026, 108, -2987, -2987, 1472, -947, -2987, 110, 1510, -2103, + 7, 10, -2987, -2987, -2987, -2987, -2987, -687, 500, -1211, + -2987, 451, -2987, -2987, -2987, -2987, -189, 169, -2252, 2, + 306, -44, -32, -2987, -25, -2987, -2987, -2987, 606, -2987, + -2987, 21, 29, 1657, -2987, -1033, -2987, -1587, 590, -2987, + 1809, 1810, -2136, -858, -68, -2987, 641, -1661, -2094, -643, + 1086, 1639, 1643, 406, -2325, -2987, -569, -2987, -62, -2987, + -2987, 639, 1129, -1560, -1556, -2987, -2175, -2987, -488, -375, + -2987, -2987, -2987, -2987, -2987, -2453, -2798, -642, 1099, -2987, + 1658, -2987, -2987, -2987, -2987, 43, -1510, 2811, 679, -48, + -2987, -2987, -2987, -2987, 107, -2987, 869, -200, -2987, 2046, + -696, -784, 1893, -153, 143, -1739, 41, 2059, 455, -2987, + -2987, 457, -2085, -1407, 409, -284, 866, -2987, -2987, -1221, + -2987, -1880, -1160, -2987, -2987, -673, 1107, -2987, -2987, -2987, + 1933, 2214, -2987, -2987, 2951, 3055, -2987, -896, 3102, 993, + -1029, 1896, -934, 1898, -930, -928, -933, 1902, 1903, 1904, + 1906, 1910, 1911, -1511, 4396, 2674, 2508, -2183, -2987, -2180, + 989, 55, -2987, -1374, 242, -2987, -2987, -2987, -2987, -2662, + -2987, -462, -2987, -456, -2987, -2987, -2987, -1622, -2703, -1652, + -2987, 2157, 797, -2987, -2987, 392, -2987, -2987, -2987, -2987, + -1527, -2987, 5650, 694, -2987, -2024, -2987, -2987, -970, -829, + -733, -999, -1208, -1916, -2987, -2987, -2987, -2987, -2987, -2987, + -1114, -1767, -161, 754, -2987, -2987, 849, -2987, -2987, -2987, + -1722, -2097, -2987, -2987, -2987, 759, 1436, 82, -822, -1600, + -2987, 812, -2357, -2987, -2987, 403, -2987, -620, -1119, -2424, + 2029, 77, -2987, -779, -2510, -2987, -2987, -702, -2617, -1134, + -894, -2987, 111, -2987, 360, 120, -1658, -2987, 14, -2987, + -408, -2987, -2987, -2575, -2987, 123, 124, 2114, -2987, 1092, + -2987, -2987, -2987, -2987, -575, -2987, -632, -628, -2987, -2987, + 18, -898, 1565, -2987, 125, 436, -2987, 917, -2987, 702, + 128, 80, 1546, 129, 1228, -2987, -2987, -2987, 17, -603, + 361, -2987, 1232, -2987, -2987, 1683, 643, 133, -2987, 302, + 22, -2987, -2987, -2987, 97, 2808, 134, 15, -2927, 136, + -2755, -1592, -7, -2987, -2987, -2987, -730, -2987, -2505 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -2044 +static const yytype_int16 yytable[] = +{ + 520, 58, 70, 865, 54, 877, 904, 68, 1330, 714, + 69, 65, 1223, 1123, 82, 102, 520, 93, 1240, 972, + 1419, 77, 98, 1187, 1794, 1022, 1347, 878, 879, 1153, + 2171, 1747, 1783, 1474, 1294, 1291, 1782, 1679, 772, 953, + 847, 77, 778, 1924, 713, 881, 2049, 1390, 1394, 1766, + 1580, 1392, 882, 1393, 2138, 2527, 1735, 2529, 1981, 740, + 1753, 2657, 517, 2587, 2544, 1336, 805, 1799, 520, 520, + 2447, 1757, 1353, 2968, 2273, 863, 1829, 2554, 811, 51, + 851, 1222, 2508, 1228, 518, 1232, 52, 53, 1787, 56, + 1655, 817, 817, 57, 60, 1658, 2073, 2074, 61, 2937, + 518, 2543, 889, 2982, 2939, 63, 819, 2449, 66, 1004, + 67, 80, 1855, 1240, 1025, 2985, 963, 1592, 805, 805, + 81, 966, 955, 83, 84, 90, 2766, 2641, 91, 92, + 811, 811, 844, 97, 101, -1322, 103, 2966, 2627, 2628, + 2629, 2830, -1244, 2580, -511, 2835, -849, -515, 2142, 2191, + 1361, 897, 518, 518, -1891, 2194, 2298, 1557, 1558, 1901, + 2399, -857, -2031, -2031, 1903, -1263, -2017, -2017, -1891, -1263, + 2299, 3381, -854, -1882, 1570, -1899, -854, -1260, -1260, -1264, + 901, -2022, -2022, -2040, -2040, 815, -1882, -1261, -1261, 1046, + 1663, 1349, -857, -1899, -1264, -816, 1340, 973, 1403, 3177, + -829, 1046, 2649, 1046, -844, 2645, 855, 2643, 1135, 815, + 815, 1196, 3162, 2636, 3110, 815, 2088, 1197, 2088, -2042, + -2042, 2428, 2429, 1659, 1340, 815, 2303, 532, 1142, 1046, + 3181, 1046, 2435, 1176, 1179, 2658, 2439, -466, 1324, 3487, + 972, 1901, 1209, 1797, -511, 1902, 1903, -515, 869, 3462, + 1611, 2730, 1798, 1240, 2731, 1613, 1443, 1588, 2857, 3, + 4, 944, 1210, 872, 1610, 813, 1767, 1611, 1165, 1770, + 1771, 1612, 1613, 3255, 3093, 1324, -227, 2466, 815, 1749, + 1749, -227, 2204, 2691, 2693, 1621, 2696, 1025, 3268, 3340, + 1785, 2615, 999, 1611, 874, -648, 2665, 1612, 1613, 1004, + 3516, 2860, 1621, 874, 1324, 3125, 71, 1901, 1211, -2044, + 2409, 1902, 1903, 1941, 1738, 3454, 2986, 813, 813, 1623, + 3145, 2583, 1198, 2279, -1102, 1758, 71, 1608, 1621, 804, + 2959, 2713, -1102, 873, 1682, 3447, 1623, 1660, 870, 2135, + 1139, 1354, 3500, 533, 71, 2380, 1941, 2702, 3511, 3076, + 3367, 3078, 2802, 864, 2804, 1349, 2197, 1772, 1987, 3201, + 1734, 530, 1623, 1730, 1731, 3121, 2422, 2423, 2424, 1005, + 833, 2295, 2844, 1166, -786, 783, 3517, 2125, -1123, 1172, + 3415, 804, 804, 880, 1562, 2126, -1123, 3405, 1172, 852, + 2075, 1011, 2803, 112, 3175, 1143, 3385, 1144, 2166, 3440, + 1572, 2497, 3171, 1212, -2016, -2016, 71, 2519, 1741, 2221, + 2823, 874, 3144, 3183, 3235, 2843, 3237, 104, 3348, 3285, + 3299, 1801, 1315, 1842, 1568, 1569, 3178, 1012, 1575, 3107, + 3300, 1349, -2044, -511, 1349, 1349, -515, 3334, 1499, 3335, + 921, 3179, 922, 1444, 3427, 3176, 1294, 3430, 3488, -2044, + 1576, 2761, 1213, 1014, -2044, 1174, 2584, 782, 3258, 2826, + 1661, 1316, 1214, 2864, 1174, 1136, 105, 3286, 3518, 2222, + 3172, 2198, 834, 2992, 1215, 1167, 113, 2824, 1199, 3469, + 3349, 2987, 3083, 2167, 3495, -668, 2280, 2381, 2136, 3448, + 814, 3455, -2044, 3366, 1683, 1580, 2580, 2382, 2580, 2703, + 3501, 1773, -511, 3108, 1175, -515, 1216, 2410, 1006, -786, + 3512, 1774, 2865, 784, 3341, 3387, 3416, 1800, 3449, 1574, + 3084, 3470, 3287, 1756, 2225, 3122, 1984, 3266, 2866, 1759, + 858, 3288, 1325, 3489, 3119, 1200, 919, 3313, 3007, 1201, + 1137, 3493, 3250, 3244, 1732, 1733, 2730, 1632, 856, 2731, + 3457, 3111, 2287, 1040, 3199, 3289, 2205, 980, 1218, 1681, + 875, 3260, 3490, 2978, 2975, 1868, 1870, 3156, 1743, 1325, + 945, 1202, 2443, 2990, 2216, 1674, 867, 871, 3463, 2049, + 1018, 714, 1600, 1219, 2089, 1196, 2510, 1557, 1558, 3428, + 2782, 1197, 2278, 2960, 1933, 1756, 3301, 3256, 1325, 1445, + 3417, 3276, 1221, 902, 1553, 2700, 1758, 903, 3120, 972, + 2020, 2998, 1570, 2637, 2638, 1948, 941, 2191, 3429, 953, + -511, 3519, 2557, -515, 1857, 1786, 2616, 3290, 2296, 2867, + 1861, 3180, 1969, 2531, 1575, 2325, 2937, 2326, 2868, 1317, + 3291, 2939, 1203, 2552, 2811, 1783, 2342, -2044, 2650, 902, + 1695, -1244, -1322, 903, 2546, -849, 1576, 2141, 1918, -511, + 2348, -511, -515, -1891, -515, 1575, 2656, 1559, 2367, 1567, + 1577, 3247, 2031, 2032, -1263, 3101, 3248, -1891, -1263, 2641, + 2373, -854, -1882, 1567, -1899, 1744, 534, 1576, -1264, 1145, + -1102, 2724, 3221, 1326, 1606, -1882, 1198, 1344, 1345, 2812, + 3365, 1579, -1899, -1264, 1560, 865, 1865, 2745, 1858, 1565, + 2401, 966, 3159, -844, 1240, 2069, 1240, 2406, 1656, 2143, + 993, 2017, 1588, 3372, 2661, 1344, 1345, 3134, 3135, 3373, + 1329, 1588, 1781, 1777, 1939, 1913, 1914, 1915, 1916, 1917, + 1918, 868, 971, 2127, -1123, 2052, 1458, 2221, 1777, 1644, + 1378, 1379, 996, 1318, -2044, 2440, 865, 1778, 1696, 2440, + 3092, 1639, 1640, 1641, 1642, 1643, 1644, 968, 2873, 77, + 778, 3498, 1778, 1698, 2070, 884, 2278, -227, -227, 2591, + 1611, 2588, 520, 2372, 1611, 2853, 2025, 2461, 3002, 1641, + 1642, 1643, 1644, 520, 536, 2153, 1692, 1459, 2055, 1338, + 2056, 3094, 1339, 1915, 1916, 1917, 1918, 2577, 3438, 2886, + 1759, 2854, 3523, 1188, 2400, 1621, 881, 1562, 2018, 1699, + 2154, 2407, 3151, 882, 815, 2251, 2071, 2024, 520, 520, + 2714, 2715, 2716, 2717, 2609, 2254, 883, 1572, 2257, 3292, + 71, 2874, 3293, 995, 811, 2335, 3127, 2610, 975, 1623, + 817, 520, 1199, 1623, 3132, 811, 1446, 537, 3041, 2966, + 2407, 3043, 1453, 3045, 977, 3057, 518, 1382, 1383, 58, + 70, 2009, 54, 2411, 1146, 68, 1756, 518, 69, 65, + 1029, 2250, 82, 102, 3267, 93, 3160, 900, 1154, 77, + 98, 1856, 2589, 902, 1140, 520, 714, 903, 2937, 1283, + 520, 1600, 2953, 2939, 2954, 1132, 815, 2341, 23, 1226, + -1891, 2343, 1140, 1201, 2345, 2416, 906, 3172, 3281, 3513, + 2520, 2091, 1031, 2213, 107, 2875, 918, 2412, 2351, 2190, + 2190, 2308, 925, 1032, 844, 844, 1701, 844, 2482, 2274, + 2275, 2276, 1436, 3253, 536, 1227, 2361, 51, 2049, 2109, + 2249, 2362, 1283, 1443, 52, 53, 1672, 56, 1439, 1673, + 1462, 57, 60, 971, 1466, 1450, 61, 1293, -208, 1336, + 2260, 520, 520, 63, 2354, 2267, 66, 520, 67, 80, + 520, 520, 2773, 520, 520, 520, 520, 1292, 81, 3240, + 1349, 83, 84, 90, 77, 778, 91, 92, 1702, 520, + 1349, 97, 101, 1349, 103, 1758, 520, 537, 2363, 3401, + 3402, 1196, 2532, 2097, 2533, 929, 1203, 1197, 2847, 1749, + 1924, 946, 1196, 1749, 520, 1283, 1545, 943, 1197, 930, + 1750, 813, 1758, 2097, 1752, 2625, 1346, 541, 930, 962, + 2098, 1862, 813, 865, 1863, 520, 2626, 1388, 1199, 805, + 1758, 27, 28, 29, 71, 864, 805, 937, 1758, 1783, + 2098, 811, 3442, 3229, 520, 545, 942, 1758, 811, 2630, + 2413, 3067, 2110, 2252, 3230, 520, 520, 520, 2255, 520, + 520, 2563, 2552, 518, 714, 3193, 2500, 3344, 1011, 2111, + 518, 947, 108, 1349, 2112, 982, 1469, 2225, 1209, 1575, + 902, 931, -1244, 109, 903, 2848, 994, 2405, 1196, 2590, + 931, 2591, 520, 2501, 1197, 923, 34, 924, 1210, 1598, + 2617, 1576, 1198, 1575, 1012, 1035, 1036, 1037, 1196, 520, + 520, 1788, 2113, 1198, 1197, 1577, 1686, 1687, 110, 1693, + 1452, 2592, 972, 882, 882, 1576, 882, 1867, 1983, 3361, + 1014, 1984, 1046, 39, 880, 2099, 1856, 1451, 1791, 1579, + 2100, 1456, 1604, 520, 1211, 2101, 1592, 520, 520, -2013, + -2013, 2849, 1607, 2850, 71, 2099, 2614, 520, 520, 520, + 2284, 1551, 520, 47, 2618, 2101, 41, 541, 111, 962, + 2464, 1657, 2360, 2622, 948, 2666, 2364, 44, 932, 2366, + 1662, 2674, 1545, 1140, 902, 1869, 2555, 1816, 1599, 1759, + 1046, 1046, 949, 1045, 2456, 545, 1901, 1172, 959, 1198, + 1902, 1903, 1173, 1611, 1904, 1905, 1906, 1612, 1613, 2740, + 2417, 978, 2418, 2502, 1196, 1283, 1759, 933, 2503, 1198, + 1197, 2775, 1942, 979, 1283, -592, 1817, 1943, 813, 980, + -592, 47, 2129, 981, 1759, 813, 2130, 2007, 1621, 1212, + 2008, 1932, 1759, 1934, 1935, 2498, 1784, 2419, 1283, 2420, + 984, 1759, 934, 1130, 1131, 1756, 1133, 1018, 1199, 71, + 1698, 1818, 2599, 2528, 2601, 2292, 987, 2114, 2293, 1199, + 1545, 2355, 1623, 1174, 2356, 988, 1445, 1823, 2049, 989, + 3003, 2393, 1756, 2602, 2394, 2604, 714, 1824, 1213, 990, + 1826, 1827, 804, 2725, 991, 714, 2102, 2732, 1214, 804, + 1756, -592, 935, 3509, -2014, -2014, 1699, 2103, 1756, 998, + 1215, 1819, 971, -2015, -2015, 1230, 2102, 1756, 992, 1201, + 2441, 1850, 1175, 2442, 993, 1198, 2212, 2103, 2444, 714, + 1201, 2442, 1027, 3472, 1552, 520, 1030, 968, 2605, 77, + 778, 2606, 1216, 2840, 2530, 2842, 1564, 1033, 3484, 2611, + -592, 1231, 2612, 2677, 1038, 1199, 1984, 3496, 2737, 3497, + 1039, 2442, 1202, 2566, 1872, 932, -2018, -2018, 2935, 2504, + 1816, 1040, 1700, 1590, 1960, 1199, 1961, 2556, 2556, 1963, + 2505, 2884, 520, 520, 1967, 1041, 2877, 1970, 520, 1971, + 520, 2841, 2952, 1975, 1218, 520, 520, 520, 520, 2648, + 3522, 1871, 1134, 3520, 933, 1469, 1908, 1138, 3521, 1817, + 520, 520, 2258, -2019, -2019, 520, 1201, 520, 23, 1219, + 520, 2738, 1203, 1701, 2008, 520, 2741, 520, 520, 2742, + 520, 2762, 2763, 1203, 520, 2962, 1201, 1149, 1221, 2652, + 2876, 1155, 2885, 1169, 3166, 1171, 1370, 1371, 2259, 1162, + 2743, 1156, 811, 2742, 880, 880, 2818, 880, 2976, 2819, + 2977, 2356, 1158, 2293, 1159, 805, 2996, 805, 1202, 2997, + 805, -2020, -2020, 1160, 518, 805, 1909, 811, 805, 811, + 805, 1199, 811, 1163, 805, 1702, 3330, 811, 3331, 935, + 811, 1545, 811, 1592, 1819, 3004, 811, 3058, 3005, 518, + 2008, 518, 1170, 2748, 518, 2751, 2753, 2754, 2749, 518, + 2750, 2752, 518, 1189, 518, 536, 1378, 1379, 518, 1203, + 536, 1191, 3194, 520, 520, 2008, 1193, 3195, 1194, 2013, + 2442, 2010, 520, 520, 2011, -2021, -2021, 2012, 2265, 1203, + 520, 1195, 1201, 1207, 2015, -1308, 115, 520, 77, 2016, + 531, 1208, 3224, 3459, 3231, 2008, 3241, 1984, 744, 3242, + 1225, 27, 28, 29, 3274, 3275, 3310, 2356, 2293, 2008, + -2023, -2023, 714, 832, 2266, 1229, 520, 845, 537, 520, + -2024, -2024, 1233, 537, 1545, 520, 520, 520, 520, 520, + 520, 520, 520, 714, -2025, -2025, 1234, 520, 520, 2552, + 972, 3370, 520, 1286, 2356, 3383, 520, 1289, 3384, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 2138, 1290, + 520, 1295, 2683, 1297, 71, 1301, 34, 520, 2085, 1283, + 1311, 907, 3409, 1382, 1383, 3410, 1313, 2307, 2069, 813, + 3453, 3494, 2173, 3384, 3384, 1203, 1314, 3138, 520, 882, + 1321, 539, -2026, -2026, 3102, 2744, 2746, 908, -2027, -2027, + 1322, 815, 1328, 39, 813, 1331, 813, -2028, -2028, 813, + 520, 1146, -2029, -2029, 813, 2884, 1332, 813, 1337, 813, + 1355, 520, 520, 813, -2030, -2030, 1910, 1911, 1912, 1356, + 1913, 1914, 1915, 1916, 1917, 1918, 41, 1639, 1640, 1641, + 1642, 1643, 1644, -2032, -2032, -2033, -2033, 44, 1292, 1359, + 2144, -2034, -2034, -2035, -2035, -207, 2995, 1362, 1545, -2036, + -2036, 1417, 909, -2037, -2037, 2834, 1430, 714, 804, 714, + 804, 3155, 1433, 804, -2039, -2039, 1432, 2033, 804, 1440, + 2970, 804, 1987, 804, 2034, 2035, 1448, 804, 2036, 2037, + 2038, 910, 2958, -2041, -2041, 3471, 2192, 2193, 541, 3473, + 542, 47, 2237, 541, 2241, 962, -2043, -2043, 2988, 520, + 1803, 1804, 1447, 1283, 1454, 3069, 520, 520, -643, -643, + 1008, 1467, 14, 15, 1455, 1009, 545, 1461, 544, -647, + -647, 545, -646, -646, 911, 1465, 3309, 1380, 1381, 1547, + 1382, 1383, 1550, 3220, 3098, 3099, 3480, 3481, 3506, 3507, + 1349, 1548, -820, 1045, 3514, -827, 1901, 1283, 1667, 1668, + 1902, 1903, 2329, 1559, -2044, -2044, -2044, 23, 1563, 714, + 47, -668, -669, 71, -817, -818, 1283, 520, 2270, 1573, + -821, 1574, -819, 1584, 1010, 971, 1603, 1597, 1605, 1650, + 1666, 2285, 2285, 1652, 1654, 1675, 1676, 1680, 1685, 1684, + 1173, 2552, 1545, 1175, 1722, 1720, 520, 520, 1724, 520, + 1736, 1754, 1755, 1756, 1545, 520, 520, 520, 520, 520, + 520, 1761, 1762, 520, 520, 520, 520, 520, 520, 520, + 520, 520, 520, 1763, 2430, 1768, 1776, 1780, 520, 520, + 2433, 2857, 520, 1775, 1545, 2935, 1790, 2858, 112, 520, + 1796, 1545, 2095, 3130, 1806, 1011, 1807, 1808, 1346, 912, + 2859, 1812, 3139, 3140, 2359, 1821, 1822, 1815, 1831, 1830, + 913, 520, 1834, 1838, 1837, 520, 1840, 520, 1841, 1843, + 3042, 520, 1844, 1851, 2860, 1852, 2861, 3309, 1856, 1545, + 1864, 1012, 3272, 1545, 1890, 520, 1892, 1283, 1893, 1545, + 1929, 1895, 1962, 1898, 1921, 914, 1930, 1013, 1937, 1940, + 27, 28, 29, 1958, 1968, 1974, 1610, 1014, 1972, 1611, + 880, 1545, 1973, 1612, 1613, 805, 872, 1979, 915, 1982, + 3309, 805, 520, 520, 1553, 1985, 1560, 811, 1991, 1990, + -593, 1565, 2020, 811, -524, -593, 1542, 1986, 1988, 1989, + 2019, 1015, 3040, 1046, 1621, 916, 2053, 2054, -524, 518, + 2551, -2044, 554, -524, 1611, 518, 1592, 2059, 745, 2062, + 865, 2065, 520, 2862, 2087, 34, 2064, 520, 520, 3309, + 821, 3363, 2066, 2094, 2067, 2105, 36, 2106, 1623, 2108, + 2132, 2133, 2139, 2156, 862, 862, 873, 1016, 2152, 873, + 2151, 2172, 520, 520, 1017, 2169, 2181, 520, 38, 2182, + 2183, 2186, 39, 2184, -524, 3325, -593, 2185, 1349, 2203, + 2207, 520, 2208, 1349, 520, 2211, 520, 2214, 2218, 2219, + 2220, 2290, 874, 2294, -524, 2300, 1909, 2311, 2309, 2312, + 2313, 2863, 520, 714, 1018, 41, 2864, 1664, 2314, 520, + 2315, 2336, 520, 2507, 2310, 2316, 44, 893, 2330, 2331, + 1534, 2333, 2337, 1019, 2340, -593, 71, -524, 2357, 520, + 1868, 1870, 45, 2365, 874, 2338, 3116, 1901, 2344, 2395, + 2402, -524, 520, -524, -2044, 1926, -524, 1925, 2403, 2404, + 2426, 2408, -524, 2434, 2446, 2865, 46, 2448, 2414, 520, + 520, -2044, 805, 2415, 2432, 2453, -2044, 2935, 2462, 2454, + 47, 2866, 2457, 2455, 811, 2458, 520, 2459, 520, 805, + 2460, 2463, 1542, 2474, 813, 2470, 2478, 520, 2471, 2476, + 813, 811, 1020, 2477, 2473, 2813, 518, -524, 2475, 2479, + 1783, 2480, 2481, 2491, -2044, 714, 714, 714, 2494, 2499, + 2515, 2492, 2523, 518, 2534, 1610, 2539, -524, 1611, 3261, + 2540, 2506, 1612, 1613, 2537, 2547, -2044, -2044, -2044, 2516, + 2039, 2040, 2041, 2521, 2042, 2043, 2044, 2045, 2046, 2047, + 2237, 2237, 2237, 2545, 520, 865, 2522, 972, 804, 23, + 1283, 2535, -649, 1621, 804, 2548, 2565, 2558, 2562, 1632, + 1622, 2569, 2559, 2561, 2570, 2573, -524, 2576, 2571, 2575, + 1542, 2579, 2867, 2613, 2598, -524, 2600, 2631, 2619, 1823, + 2620, 2868, 2621, 875, 2632, 2607, 714, 1623, 2647, 1824, + 2633, 1545, 1826, 1827, 2651, 2634, 1534, 2646, 2667, 2663, + 2671, -524, 2675, 2664, 2680, 2668, -2044, -2044, -2044, 520, + 1913, 1914, 1915, 1916, 1917, 1918, 2690, 2698, 2701, 2708, + 2721, 1872, 2704, 971, 2722, 2733, 2707, 2734, 2709, 714, + 2739, 2710, 2758, 2770, 2069, 1868, 1870, 2639, 2747, 2780, + 2755, 2799, 2808, 2764, 2793, 2827, 2778, 1349, 2781, 2831, + 2801, 3314, 2839, 3316, 2872, 2653, 2784, 2888, 2969, -2044, + 2980, 813, 2805, 2984, 1872, 2794, 2993, 520, 2829, 902, + 3324, 2846, 1158, 903, 2825, 2852, 2845, 2974, 813, 2964, + 1590, 2814, 2955, 1624, 1534, 2961, 2956, 2957, 2965, 3000, + 2973, 2979, 27, 28, 29, 3006, 1346, 2293, 2095, 3001, + 1625, 3026, 3028, 3032, 2688, 1626, 2689, 520, 3036, 3446, + 2694, 3326, 2697, 3328, 2517, 3046, 3047, 3049, 3089, 865, + 3050, 3070, 3077, 1545, -524, 804, 3080, 3091, 3095, 811, + 3096, 3082, 3097, 2796, 3103, 3104, 3105, 3109, 3407, 520, + 3113, 3114, 804, 1629, 3115, 520, 520, 3123, 3126, 3411, + 3128, 518, 865, 3129, 3133, 3400, 520, 34, 3163, -2012, + -2013, 3147, -2014, -2015, -2016, -2017, -2044, 520, -2018, -2019, + 520, -2020, 520, 1639, 1640, 1641, 1642, 1643, 1644, 1545, + 520, 3146, 3148, 520, 520, 3395, 3149, 3152, 520, 520, + 3153, 1542, 902, -2021, 39, 520, 903, 1610, 1632, -2023, + 1611, -2024, -2025, 2833, 1612, 1613, -2026, 3150, -2027, -2028, + 520, -2029, 3167, -2030, -2032, 3168, -2033, 2013, -2034, 2010, + 520, -2035, 2011, 2817, -2036, 2012, -2037, 41, -2038, 3182, + -2039, 3170, 2015, 516, 527, 1621, 77, 2016, 44, 552, + 520, -2040, -2044, -2041, -2042, 552, -2043, -1261, 3184, 802, + 3161, 816, 816, 3186, 45, 3187, 820, 552, 828, 3190, + 939, 828, 3196, 3197, 846, 850, 3200, 3202, 850, 1623, + 3208, 552, 552, 3211, 3204, 3214, 1209, 23, 46, 714, + 3210, 3215, 2938, 714, 1542, 714, 3216, 3223, 3219, 3239, + 3243, 3238, 2815, 3249, 3246, 864, 1210, 520, 1634, 520, + 3251, 802, 802, 3263, 3264, 1534, -1260, 3271, 3273, 1349, + 3280, 3282, 3283, 3298, 2237, 3311, 813, 3296, 2940, 3297, + 2241, 3312, 3315, 3318, 3319, 3321, 846, 3327, 3332, 2967, + 3352, 1823, -1774, 850, 552, 850, 850, 850, 3122, 3356, + 3358, 1824, 1211, 2878, 1826, 1827, 3359, 3362, 3368, 3376, + 3375, 3377, 3381, 2879, 3386, 2931, 3388, 2989, 3390, 3435, + 2991, 3393, 865, 3073, 3399, -2044, 3406, 3397, 3394, 3398, + 3408, 3404, 3413, 3418, 520, 3424, 3425, 1545, 3426, 3431, + 3433, 3432, -2044, 3451, 3461, 3441, 3464, -2044, 2639, 3485, + 3462, 3466, 3443, 3445, 520, 520, 3482, 3463, 1534, 520, + 3499, 3510, 520, 3504, 3515, 1635, 3524, 3525, -2044, -2044, + -2044, 2880, 1639, 1640, 1641, 1642, 1643, 1644, 1542, 2887, + 27, 28, 29, 1161, 2245, -2044, 2328, 2596, 3339, 520, + 3439, 2891, -1774, 1439, 3403, 2346, 2820, 1212, 3508, 3136, + 2682, 3422, 3492, 520, 3259, 3460, 23, 3467, 520, 520, + 3486, 865, 958, 520, 1545, 1746, 3295, 2578, 520, 2983, + 3458, 520, 520, 3465, 2603, 2574, 520, 1283, 2856, 1590, + 520, 2941, 3456, 1854, 520, 1610, 904, 2642, 1611, -1774, + 1632, 520, 1612, 1613, 1820, 34, 1213, 2687, 3191, 2564, + 2550, 2963, 1677, -1774, 1437, 1438, 1214, 1717, -1774, 2210, + 1716, 2712, 1590, -1774, 3444, 2560, 2178, 3389, 1215, 3317, + 2881, 2209, -1774, 1621, 806, 2536, 3035, -1774, 1721, 3218, + -2044, 71, 39, 2438, 805, 520, 997, 71, 983, 2706, + 2705, 2736, 1534, 520, 3265, 2452, 811, 3392, 14, 15, + 1216, 2353, 3391, 2489, 2553, 2760, 2513, 1623, 2511, -1774, + 2467, 3079, 520, 2832, 1949, 41, 1404, 1389, 518, 1391, + 2490, 1545, 1542, 1395, 1396, 1397, 44, 1398, 862, -1774, + 3081, 1399, 1400, 2772, 1542, 2806, 3379, 976, 2288, 2445, + -2044, 2147, 45, 23, 1866, 1888, 2149, 2821, 890, 27, + 28, 29, 1218, 2623, 0, 2938, 1792, 0, 0, 0, + 0, 0, 0, 0, 1542, 0, 46, 0, 0, 23, + 0, 1542, 2785, 0, 0, 0, 0, 1219, -1774, 0, + 47, -1774, 0, 0, 0, 0, 0, -1774, 0, 0, + 0, 0, 0, 71, 0, 0, 1221, 714, 2882, 0, + 0, 2883, 520, -2044, 0, 0, 1536, 0, 0, 1542, + 0, 0, 865, 1542, 34, 0, 0, 0, 0, 1542, + -2044, 71, 3174, 0, 71, -2044, 0, -1774, 0, 0, + 971, 0, 1872, 520, 1545, 0, 1534, 0, 0, 0, + 0, 1542, 0, 0, 0, 0, 0, -2044, 1534, 520, + -1774, 39, 0, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 0, 0, 1045, -2044, 0, 1901, 0, 0, 0, 1902, + 1903, 0, 1590, 1904, 1905, 1906, 0, 1545, 1534, 0, + 3169, 0, 520, 813, 41, 1534, 27, 28, 29, 0, + 2776, 0, 0, 520, 520, 44, 0, 520, 0, 520, + 0, 3337, 0, 1346, 0, 0, 0, 0, 852, 0, + 1756, 45, 27, 28, 29, 0, 0, 0, 1632, 0, + 0, 850, 0, 1534, 520, 0, 850, 1534, 0, 850, + 0, 0, 0, 1534, 0, 46, -1774, 552, 0, 3173, + 0, 0, 0, 0, 0, 0, -1774, 804, 520, 47, + 0, 34, 0, 0, 0, 1534, 0, 0, 0, 23, + 0, 864, 36, 0, 0, -1774, 0, -1774, -1774, 0, + 0, 0, 0, 0, 0, 0, 0, 34, 0, 2938, + 0, 0, 1536, 3236, 38, 1414, 0, 0, 39, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 714, -1774, 3277, 3278, -1774, -1774, -1774, + 0, 0, 0, 0, 39, 0, 0, 0, -2044, 520, + 0, 41, 0, 520, 862, 0, 0, 0, 0, 0, + 0, 0, 44, 520, 0, 520, 0, 520, 1872, 0, + 0, 520, 0, 520, 0, 520, 0, 41, 45, 0, + 0, 0, 2931, 0, 0, 0, 520, 0, 44, 0, + 0, 520, 0, 520, 0, 0, 0, 0, 0, 0, + 1536, 520, 46, 0, 45, 1908, 0, 0, 0, 0, + 0, 3336, 0, 3338, 714, 811, 47, 1537, 0, 520, + 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, + 0, 0, 27, 28, 29, 0, 0, 518, 0, 0, + 0, 0, 47, 0, 0, 0, 0, 0, 0, 3345, + 0, 0, 0, 0, 3371, -2044, 71, 951, 552, 552, + 0, 0, 1639, 1640, 1641, 1642, 1643, 1644, 520, 0, + 3374, 0, 0, 0, 3378, 1909, 0, 0, 520, 0, + 0, 1542, 0, 536, 0, 0, 0, 0, 0, 0, + 520, 0, 1590, 0, 0, 0, 0, 34, 974, 527, + 816, 0, 0, 0, 520, 516, 0, 850, -1308, 3364, + 0, 1414, 0, 0, 0, 0, 802, 0, 0, 0, + 1001, 1001, 520, 0, 0, 1001, 1024, 0, 1859, 0, + 1860, 0, 0, 0, 39, 0, 0, 0, 0, 828, + 828, 828, 0, 0, 0, 0, 537, 520, 0, 0, + 0, 0, 1875, 828, 828, 0, 828, 0, 0, 0, + 0, 0, 520, 0, 0, 0, 811, 41, 0, 850, + 0, 2938, 0, 714, 0, 552, 0, 0, 44, 0, + 0, 0, 0, 0, 0, 0, 0, 850, 518, 0, + 0, 0, 0, 1537, 45, 1534, 520, 3468, 0, 1876, + 961, 850, 813, 0, 0, 1209, 0, 0, 3345, 811, + 520, 520, 520, 1542, 0, 0, 0, 0, 46, 0, + 1877, 1536, 0, 3483, -1776, 1210, 0, 0, 0, 0, + 0, 518, 47, 850, 1288, 0, 0, 520, 1878, 71, + 71, 0, 1879, 0, 2931, 1299, 0, 0, 0, 850, + 850, 850, 850, 0, 0, 0, 0, 0, 811, 0, + 0, 0, 0, 0, 1880, 1320, 1413, 1881, 0, 1542, + 0, 1211, 0, 0, 0, 0, 540, 0, 520, 0, + 518, 1537, 0, 1882, 0, 1910, 1911, 1912, 0, 1913, + 1914, 1915, 1916, 1917, 1918, 0, 0, 0, 1001, 1024, + 0, 850, 0, 0, 1411, 0, 0, 0, 0, 0, + 1001, 1001, 0, 0, 1536, 71, 552, 71, 0, 0, + 0, 0, 802, 0, -1776, 0, 541, 1534, 962, 802, + 0, 0, 553, 0, 0, 0, 1414, 1414, 553, 552, + 2880, 0, 1414, 0, 0, 543, 1468, 0, 0, 0, + 553, 544, 0, 813, 545, 0, 1549, 0, 71, 0, + 0, 0, 0, 0, 553, 553, 1212, 0, 0, 0, + 0, -1776, 1542, 0, 71, 0, 1883, 0, 71, 0, + 0, 0, 0, 1534, 1884, -1776, 0, 0, 0, 0, + -1776, 0, 0, 0, 0, -1776, 813, 0, 0, 0, + 0, 0, 0, 0, -1776, 552, 1885, 0, 0, -1776, + 0, 0, 0, 0, 0, 1213, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1214, 0, 553, 0, 0, + 0, 0, 1412, 1886, 0, 1610, 0, 1215, 1611, 0, + 0, -1776, 1612, 1613, 0, 813, 0, 0, 1536, 0, + 0, 0, 0, 1713, 1669, 0, 1671, 0, 0, 0, + 0, -1776, 1413, 0, 0, 0, 0, 1542, 0, 1216, + 0, 552, 552, 1621, 0, 0, 0, 0, 850, 0, + -2044, 0, 0, 0, 0, 0, 1534, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1411, 71, 1537, 0, 0, 0, 0, 1623, 0, 0, + -1776, 850, 1745, -1776, 0, 0, 0, 0, 0, -1776, + 0, 1218, 0, 0, 850, 0, 0, 71, 0, 0, + -1791, 0, 0, 0, 0, 0, 0, 0, 0, 2217, + 0, 850, 0, 0, 1542, 850, 1219, 0, 0, 2226, + 1793, 2229, 0, 0, 2240, 0, 0, 0, 0, -1776, + 2244, 0, 2246, 0, 0, 1221, 0, 0, 0, 0, + 0, 0, 2788, 0, 0, 2253, 0, 0, 0, 2137, + 2256, 1534, -1776, 0, 2261, 2262, 2263, 2264, 0, 2268, + 2269, 0, 1536, 0, 0, 1537, 0, 0, 0, 0, + 0, 0, 0, -2044, 1536, 0, 1809, 0, 850, 0, + 0, 0, 0, 0, 0, 0, 0, 850, 0, 0, + -2044, 0, 0, 0, 1414, -2044, 0, 0, 1847, 0, + -1791, 0, 0, 0, 1536, 0, 0, 951, 0, 0, + 852, 1536, 951, 0, 552, 552, 0, 552, 951, 0, + 0, 1542, 0, 0, 854, 0, 0, 0, 1534, 0, + 0, 0, 0, -2044, 0, 0, 0, 0, -1776, 0, + 0, 0, 0, 0, 0, 1468, 0, -1791, -1776, 1536, + 0, 0, 0, 1536, 0, 1542, 0, 1413, 1413, 1536, + 0, -1791, 0, 1413, 0, 0, -1791, -1776, 0, -1776, + -1776, -1791, 0, 0, 0, 0, 0, 0, 0, 0, + -1791, 1536, 0, 0, 0, -1791, 0, 0, 1632, 892, + 0, 895, 0, 899, 0, 1411, 1411, 1008, 0, 1537, + 0, 1411, 1009, 516, 0, 0, -1776, 0, 0, -1776, + -1776, -1776, 0, 0, 0, 0, 1001, -1791, 552, 1944, + 0, 0, 0, 0, 1539, 0, 850, 0, 802, 0, + 802, 0, 0, 802, 1542, 1534, 0, -1791, 802, 0, + 0, 802, 0, 802, 0, 0, 0, 802, 0, 552, + 0, 552, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1010, 0, 0, 0, 0, 0, 0, 0, 1534, + 0, 0, 0, 0, 0, 0, 0, 1542, 0, 0, + 0, 0, 0, 0, 0, 0, -1791, 0, -2044, -1791, + 0, 0, 0, 0, 0, -1791, 0, 0, 0, 1414, + 1414, 1414, 1414, 1414, 1414, 0, 0, 1414, 1414, 1414, + 1414, 1414, 1414, 1414, 1414, 1414, 1414, 0, 0, 0, + 0, 0, 0, 1899, 1900, 0, 0, 0, 1540, 1920, + 0, 0, 1011, 0, 0, -1791, 0, 0, 0, 0, + 553, 0, 0, 1537, 0, 0, 0, 0, 1534, 0, + 0, 0, 0, 0, 0, 1537, 0, 0, -1791, 2048, + 0, 0, 0, 0, 0, 0, 0, 0, 1012, 0, + 2058, 0, 0, 0, 0, 1541, 0, 0, 0, 1542, + 0, 0, 0, 0, 1013, 1537, 0, 0, 0, 0, + 0, 1534, 1537, 0, 1014, -2044, 0, 0, 0, 0, + 1539, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 951, + 0, 0, 0, 0, 0, 0, 852, 0, 0, 0, + 1859, 0, 0, 0, 0, 0, 0, 0, 1015, 0, + 1537, 0, 0, 0, 1537, 0, 0, 0, 0, 0, + 1537, 0, 0, 0, -1791, 2180, 0, 0, 0, 1964, + 0, 0, 0, 0, -1791, 0, 2145, 0, 850, 0, + 850, 0, 1537, 0, 0, 0, 0, 0, 0, 0, + 850, 2161, 0, -1791, 1016, -1791, -1791, 0, 0, 0, + 0, 1017, 536, 1411, 0, 0, 1414, 1414, 1539, 0, + 0, 1536, 0, 1534, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1540, 0, 0, -1308, 850, 0, + 552, 0, -1791, 0, 0, -1791, -1791, -1791, 0, 0, + 0, 1018, 0, 0, 0, 1745, 552, 0, 0, 0, + 0, 553, 553, 0, 0, 0, 552, 2227, 552, 2231, + 1019, 552, 0, 0, 0, 537, 0, 552, 0, 552, + 0, 1541, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 951, 552, 0, 0, 0, 951, 552, 0, 0, + 0, 552, 552, 552, 552, 1045, 552, 552, 1901, 0, + 0, 0, 1902, 1903, 0, 0, 1904, 1905, 1906, 0, + 0, 0, 1540, 2289, 0, 0, 0, 2670, 0, 538, + 1414, 1299, 0, 850, 850, 850, 850, 850, 0, 1020, + 0, 0, 0, 0, 1965, 0, 0, 920, 539, 0, + 0, 0, 927, 1536, 2318, 928, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2339, 0, 1541, + 0, 1542, 0, 0, 0, 0, 0, 0, 553, 0, + 1413, 1413, 1413, 1413, 1413, 1413, 0, 0, 1413, 1413, + 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 0, 0, + 0, 0, 0, 0, 0, 540, 0, 0, 0, 1536, + 0, 1196, -207, 0, 0, 0, 0, 1197, 1411, 1411, + 1411, 1411, 1411, 1411, 0, 1209, 1411, 1411, 1411, 1411, + 1411, 1411, 1411, 1411, 1411, 1411, 0, 0, 0, 1539, + 0, 0, 0, 0, 0, 1210, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 541, 552, 542, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, + 0, 0, 0, 0, 543, 0, 0, 0, 802, 0, + 544, 0, 0, 545, 802, 1534, 0, 0, 0, 0, + 552, 1211, 0, 0, 0, 552, 0, 0, 0, 0, + 0, 0, 1537, 0, 2450, 2450, 0, 0, 0, 0, + 0, 0, 1536, 0, 0, 0, 0, 0, 1908, 1431, + 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1539, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1464, 1540, 0, 0, 2374, 2375, 2376, 2377, + 2378, 2379, 0, 0, 2383, 2384, 2385, 2386, 2387, 2388, + 2389, 2390, 2391, 2392, 0, 0, 0, 1413, 1413, 2836, + 2837, 0, 0, 552, 0, 0, 0, 2486, 0, 0, + 0, 0, 552, 0, 0, 0, 1212, 0, 1909, 0, + 1541, 0, 0, 0, 0, 0, 0, 2889, 0, 0, + 0, 0, 0, 986, 0, 1411, 1411, 1536, 1593, 0, + 0, 0, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, + 2950, 2951, 2048, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1537, 1213, 1540, 1414, 1414, 0, + 0, 0, 0, 0, 0, 1214, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 802, 0, 1215, 0, 0, + 0, 0, 0, 0, 0, 0, 1539, 552, 0, 0, + 0, 0, 802, 0, 553, 553, 2161, 0, 1199, 0, + 0, 1413, 0, 1541, 1536, 0, 0, 0, 0, 1216, + 1537, 0, 0, 1045, 0, 0, 1901, 1190, 0, 0, + 1902, 1903, 0, 0, 1904, 1905, 1906, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 552, 0, 0, 1411, + 0, 0, 552, 0, 0, 0, 0, 0, 0, 1287, + 0, 0, 0, 2495, 2496, 1217, 0, 0, 1809, 1201, + 0, 1218, 0, 0, 0, 1303, 1305, 1308, 1310, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 11, 0, 0, 0, 0, 1219, 0, 0, 0, + 1540, 1220, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1221, 0, 0, 0, 14, + 15, 1536, 0, 1537, 0, 0, 0, 1406, 1910, 1911, + 1912, 0, 1913, 1914, 1915, 1916, 1917, 1918, 0, 1809, + 1539, 0, 0, 0, 0, 0, 850, 1541, 0, 0, + 0, 0, 1539, 0, 0, 1536, 0, 1299, 1414, 0, + 1809, 850, 850, 850, 23, 0, 0, 0, 0, 0, + 0, 0, 1203, 0, 552, 0, 850, 553, 553, 850, + 553, 0, 1539, 1414, 850, 0, 0, 0, 3117, 1539, + 951, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1809, 1809, + 0, 1809, 0, 1907, 0, 0, 0, 0, 1537, 0, + 0, 0, 0, 0, 0, 0, 0, 1539, 0, 0, + 0, 1539, 0, 0, 1536, 0, 1908, 1539, 0, 0, + 516, 0, 0, 0, 1540, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1540, 0, 0, 1539, + 2711, 0, 0, 0, 0, 0, 0, 0, 850, 850, + 850, 0, 0, 0, 0, 0, 0, 1536, 552, 0, + 1411, 553, 552, 0, 0, 0, 1540, 0, 552, 0, + 0, 1541, 0, 1540, 0, 1537, 0, 0, 0, 0, + 0, 0, 0, 1541, 0, 0, 1909, 27, 28, 29, + 0, 0, 1976, 0, 1980, 0, 0, 1414, 1413, 1413, + 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1540, 0, 1541, 0, 1540, 0, 1737, 0, 0, + 1541, 1540, 0, 0, 0, 0, 0, 0, 0, 0, + 1764, 0, 0, 0, 0, 0, 1411, 1411, 0, 0, + 0, 0, 0, 1540, 0, 0, 0, 0, 0, 0, + 0, 1789, 34, 0, 0, 0, 0, 0, 1541, 1536, + 0, 0, 1541, 36, 0, 2810, 0, 0, 1541, 0, + 0, 2161, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1537, 0, 0, 38, 0, 850, 0, 39, + 1541, 552, 0, 0, 0, 552, 552, 552, 0, 0, + 0, 1809, 1745, 1809, 0, 1847, 0, 0, 0, 40, + 0, 0, 0, 0, 1814, 0, 1537, 0, 0, 0, + 0, 0, 41, 1833, 552, 0, 2890, 0, 0, 0, + 0, 0, 0, 44, 0, 3262, 0, 1414, 0, 552, + 552, 552, 552, 552, 552, 552, 552, 552, 552, 45, + 0, 0, 0, 0, 0, 0, 3269, 3270, 0, 0, + 0, 0, 0, 1045, 2786, 2787, 1901, 0, 0, 0, + 1902, 1903, 2318, 46, 1904, 1905, 1906, 0, 850, 0, + 0, 0, 3284, 0, 0, 0, 0, 47, 0, 1413, + 1745, 3060, 0, 0, 0, 1537, 1910, 1911, 1912, 0, + 1913, 1914, 1915, 1916, 1917, 1918, 1847, 0, 0, 0, + 0, 1107, 1107, 0, 3029, 0, 1809, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1411, 0, 0, + 0, 0, 0, 552, 0, 0, 0, 0, 1537, 0, + 850, 850, 850, 850, 0, 0, 0, 0, 0, 1539, + 0, 0, 1411, 553, 0, 1411, 0, 0, 3053, 552, + 951, 0, 1956, 0, 1610, 0, 0, 1611, 3044, 553, + 0, 1612, 1613, 0, 0, 1616, 1617, 1618, 1236, 553, + 0, 553, 1278, 1285, 553, 0, 0, 0, 0, 0, + 553, 0, 553, 0, 0, 3051, 0, 0, 0, 0, + 0, 0, 1621, 0, 0, 553, 0, 0, 0, 1622, + 553, 0, 0, 0, 553, 553, 553, 553, 0, 553, + 553, 1536, 0, 0, 0, 3074, 0, 802, 0, 0, + 0, 0, 0, 0, 0, 1335, 1623, 0, 0, 0, + 1537, 3086, 0, 0, 0, 2161, 0, 1414, 1413, 0, + 0, 2048, 0, 1540, 1360, 2999, 0, 0, 0, 0, + 1405, 0, 0, 1407, 0, 1745, 1418, 1421, 1426, 1429, + 0, 1809, 0, 0, 0, 0, 1908, 0, 0, 0, + 0, 1539, 0, 0, 951, 552, 1411, 0, 0, 0, + 0, 0, 850, 0, 0, 0, 0, 0, 0, 0, + 1541, 0, 0, 1045, 0, 0, 1901, 1471, 1278, 3137, + 1902, 1903, 0, 3452, 1904, 1905, 1906, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1555, 0, + 0, 0, 1624, 0, 0, 0, 0, 1539, 0, 0, + 0, 0, 0, 0, 0, 0, 1909, 1571, 0, 1625, + 0, 0, 0, 0, 1626, 0, 0, 0, 1581, 1582, + 1583, 0, 1587, 1591, 0, 0, 0, 0, 0, 553, + 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, + 0, 0, 0, 0, 0, 1540, 0, 3154, 1413, 0, + 0, 1809, 1629, 0, 2146, 1653, 2148, 0, 0, 0, + 0, 0, 0, 2437, 0, 2318, 2158, 0, 1980, 0, + 0, 0, 1471, 1471, 3118, 0, 0, 0, 0, 3188, + 0, 0, 0, 0, 0, 0, 1411, 0, 0, 0, + 1630, 0, 1541, 1631, 0, 0, 0, 0, 0, 0, + 1539, 1540, 0, 0, 2195, 0, 1691, 1632, 0, 0, + 1707, 1712, 3205, 0, 0, 0, 0, 0, 552, 0, + 0, 1107, 1107, 0, 0, 552, 1610, 0, 0, 1611, + 0, 0, 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 0, 0, 0, 0, 0, 0, 553, 0, 1541, 0, + 0, 0, 0, 2206, 1619, 1593, 0, 0, 0, 3233, + 0, 0, 1537, 0, 1621, 0, 0, 0, 0, 0, + 0, 1622, 1045, 0, 0, 1901, 1908, 0, 1278, 1902, + 1903, 552, 0, 1904, 1905, 1906, 552, 1278, 0, 0, + 0, 0, 0, 0, 0, 1539, 0, 0, 1623, 2301, + 2302, 2304, 2305, 2306, 1540, 0, 0, 1634, 0, 0, + 0, 1278, 552, 0, 3192, 0, 1910, 1911, 1912, 0, + 1913, 1914, 1915, 1916, 1917, 1918, 0, 0, 0, 0, + 0, 0, 0, 552, 552, 0, 0, 0, 0, 0, + 553, 0, 0, 0, 0, 0, 1909, 0, 0, 0, + 0, 1541, 850, 1045, 1745, 0, 1901, 0, 3323, 552, + 1902, 1903, 0, 0, 1904, 1905, 1906, 0, 0, 0, + 0, 0, 1539, 850, 0, 0, 3306, 0, 0, 0, + 0, 3061, 0, 0, 0, 0, 0, 0, 0, 553, + 0, 0, 0, 0, 1624, 2568, 1411, 0, 1891, 1540, + 552, 1001, 0, 1001, 0, 0, 0, 0, 0, 0, + 0, 1625, 0, 0, 1635, 0, 1626, 1636, 1637, 1638, + 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 3086, 0, + 0, 0, 0, 0, 2421, 850, 0, 0, 0, 1627, + 1628, 0, 0, 0, 0, 0, 1541, 0, 0, 0, + 0, 0, 0, 0, 1629, 0, 0, 0, 1426, 0, + 1426, 1426, 0, 0, 0, 0, 850, 0, 0, 0, + 0, 0, 0, 1107, 1107, 0, 1540, 0, 0, 1539, + 0, 0, 0, 0, 0, -2044, 0, 0, 0, 0, + 1107, 0, 1630, 0, 0, 1631, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3205, 0, 0, 0, 1632, + 0, 0, 1633, 1539, 0, 0, 0, 553, 0, 0, + 0, 0, 0, 1541, 0, 0, 0, 3306, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1745, 1909, 1910, 1911, 1912, 0, + 1913, 1914, 1915, 1916, 1917, 1918, 1908, 951, 951, 0, + 3306, 951, 0, 0, 0, 0, 0, 0, 0, 1944, + 0, 0, 0, 1540, 0, 0, 0, 0, 0, 0, + 552, 0, 1539, 0, 0, 2023, 0, 0, 0, 0, + 0, 0, 0, 2026, 0, 0, 0, 0, 0, 1634, + 0, 0, 1745, 0, 0, 0, 0, 1540, 0, 3306, + 0, 553, 0, 0, 0, 553, 0, 0, 0, 0, + 1541, 1976, 0, 0, 0, 1539, 1909, 0, 0, 0, + 0, 0, 2072, 0, 0, 0, 0, 0, 2076, 2077, + 2078, 2079, 2080, 2081, 2082, 2083, 951, 0, 0, 0, + 2092, 2093, 0, 0, 1541, 2104, 0, 0, 0, 2107, + 0, 2161, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, + 2123, 0, 0, 2124, 0, 0, 0, 0, 0, 0, + 1107, 1610, 1278, 0, 1611, 0, 1540, 0, 1612, 1613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2150, 0, 0, 0, 0, 1635, 0, 0, 1636, + 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 1621, + 0, 0, 0, 0, 0, 0, -2044, 1539, 0, 1540, + 0, 0, 2472, 1541, 1582, 1583, 0, 0, 0, 0, + 0, 0, 0, 0, 553, 0, 0, 0, 553, 553, + 553, 0, 0, 1623, 0, 1910, 1911, 1912, 0, 1913, + 1914, 1915, 1916, 1917, 1918, 0, 0, 0, 0, 0, + 0, 0, 2644, 0, 0, 0, 1541, 553, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2659, 2660, 2662, + 0, 0, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 2673, 0, 0, 2676, 0, 0, 0, 0, + 2681, 0, 0, 0, 0, 0, 0, 0, 2789, 0, + 0, 0, 2272, 0, 0, 0, 1278, 0, 0, 2282, + 2283, 1540, 0, 0, 0, 0, 1910, 1911, 1912, 0, + 1913, 1914, 1915, 1916, 1917, 1918, 0, 0, 0, -2044, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -2044, 0, 0, 0, + 1278, -2044, 0, 0, 0, 0, 0, 0, 1541, 0, + 0, 0, 0, 0, 0, 0, 1976, 0, 0, 1335, + 2347, 0, 0, 0, 2718, 2719, 2720, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -2044, + 0, 0, 2437, 0, 0, 0, 0, 0, 0, 2369, + 2370, 0, 2371, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1610, 0, 0, 1611, 0, -45, 0, 1612, 1613, 0, + 0, 2397, 2398, 0, 0, 2150, 0, 0, 0, 0, + 0, 0, 0, 0, 1632, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 1621, 3, + 4, 0, 0, 0, 2425, -2044, 0, 0, 0, 1539, + 2431, 0, 5, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 1471, 0, + 1278, 0, 1623, 0, 0, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 10, 0, 2828, 0, 0, 0, 0, 553, 0, + 0, 0, 0, 11, 0, 12, 2465, 0, 0, 0, + 0, 0, 1196, 0, 0, 0, 13, 0, 1197, 0, + 0, 0, 0, 0, -2044, 1008, 1209, 0, 0, 0, + 1009, 14, 15, 16, 0, 0, 0, 3064, 0, 0, + 0, 0, 17, 0, 0, 2484, 1210, 0, 18, 0, + 2487, 2488, 0, 1540, 0, 0, 19, 0, 20, 21, + 0, 0, 0, 0, 0, 0, 0, 0, -2044, 0, + 0, 0, 22, 0, 0, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 2972, -2044, 0, 0, 0, 1010, + -2044, 0, 1211, 0, 2509, 0, 0, 2512, 0, 2514, + 1541, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2518, 0, 0, 25, 0, + 0, 0, 0, 1198, 0, 0, 0, 0, -2044, 0, + 0, -2044, 0, 0, 0, 0, 0, 0, 1639, 1640, + 1641, 1642, 1643, 1644, 26, 0, 3008, 3009, 3010, 3011, + 0, 0, 0, 0, 0, 1691, 0, 0, 0, 0, + 1011, 0, 0, 0, 0, 0, 0, 0, 1183, 0, + 0, 3213, 1712, 2122, 0, 0, 0, 0, 2437, 0, + 0, 0, 0, 1632, 0, 0, 0, 1212, 0, 0, + 0, 1107, 0, 0, 0, 1610, 1012, 0, 1611, 0, + 2572, 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, + 0, 0, 1013, 0, 0, 0, 0, 0, 0, 27, + 28, 29, 1014, 1619, 0, 0, 0, 30, 1415, 0, + 31, 0, 0, 1621, 553, 0, 1213, 0, 0, 553, + 1622, 0, 0, 0, 0, 0, 1214, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1015, 1583, 1215, 32, + 0, 0, 0, 1278, 0, 553, 0, 1623, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 1184, 0, 1199, + 0, 0, 0, -2044, 34, 0, 553, 553, 0, 0, + 1216, 35, 0, 0, 0, 36, 0, 0, 3124, 0, + 0, 0, 1016, 0, 0, 37, 0, 0, 0, 1017, + 0, 0, 553, 1008, 0, 0, 0, 38, 1009, 0, + 0, 39, 2679, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2247, 0, 0, 0, + 1201, 40, 1218, 0, 0, 0, 0, 1647, 0, 1018, + 0, 0, 0, 553, 41, 0, 0, 42, 0, 0, + 43, 0, 0, 1624, 0, 44, 0, 1219, 1019, 0, + 0, 0, 2248, 0, 0, 0, 0, 1010, 0, 0, + 1625, 45, 0, 0, 0, 1626, 1221, 0, 0, 0, + -2044, 1647, 0, 0, 0, 0, 0, 1639, 1640, 1641, + 1642, 1643, 1644, 0, 0, 46, 0, 0, 1627, 1628, + 0, 0, 0, 1609, 0, 0, 0, 0, 1610, 47, + 0, 1611, -45, 1629, 1415, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 0, 0, 0, 0, 1020, 0, 0, + 0, 0, 1185, 1203, 0, 0, 1619, 0, 1011, 0, + 1620, 0, 2757, 0, 0, 0, 1621, 0, 2759, 2026, + 0, 1630, 0, 1622, 1631, 0, 0, 0, 0, 2765, + 0, 0, 0, 0, 0, 0, 1647, 0, 1632, 0, + 2774, 1633, 0, 2777, 1012, 2779, 0, 0, 0, 0, + 1623, 0, 0, 2783, 0, 0, 0, 0, 0, 0, + 1013, 2790, 2791, 0, 0, 0, 0, 0, 2798, 0, + 1014, 0, 0, 0, 0, 0, 0, 0, 1647, 0, + 0, 0, 0, 2807, 0, 1647, 0, 0, 0, 0, + 0, 0, 0, 2822, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 553, 1015, 0, 0, 0, 0, 0, + 0, 0, 0, 1107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1186, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1647, 0, 0, 1634, 0, + 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, + 1016, 0, 0, 0, 0, 0, 0, 1017, 3279, 0, + 1647, 0, 0, 1625, 0, 0, 0, 0, 1626, 0, + 2272, 0, 2272, 0, 0, 0, 0, 0, 0, 3304, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 1018, 0, 0, + 0, 0, 0, 0, 0, 1647, 1629, 1647, 0, 1415, + 1415, 0, 1919, 0, 0, 1415, 1019, 0, 1647, 0, + 0, 1647, 0, 0, 0, 0, 1647, 0, 0, 1647, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3343, 0, 0, 1630, 1635, 0, 1631, 1636, 1637, + 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, + 0, 1632, 0, 0, 1633, 1894, 0, 3024, 3025, 0, + 0, 1647, 3369, 0, 0, 0, 0, 0, 0, 717, + 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3048, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3052, 0, 0, 0, + 0, 3054, 3055, 0, 0, 0, 3056, 0, 0, 0, + 0, 3059, 0, 0, 3062, 3063, 718, 0, 0, 2272, + 1278, 0, 0, 3071, 0, 0, 0, 0, 0, 0, + 0, 0, 719, 0, 1107, 1647, 0, 0, 0, 0, + 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1647, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1647, 1647, 1647, 0, 0, 0, 1647, 0, 0, + 0, 1647, 0, 0, 0, 1363, 0, 815, 3112, 0, + 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 721, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 722, 0, 3131, 0, 0, 723, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1647, 0, 0, 0, 724, 0, 0, + 1364, 1365, 0, 0, 0, 0, 0, 0, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1647, 0, 0, 0, 0, 0, 0, 0, 0, + 725, 1366, 1367, 0, 726, 1368, 1369, 1647, 0, 0, + 0, 1610, 1647, 0, 1611, 3165, 0, 0, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 0, 0, 0, 0, 1919, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1619, + 0, 0, 0, 2769, 0, 0, 0, 0, 0, 1621, + 0, 0, 0, 0, 0, 0, 1622, 0, 1610, 0, + 0, 1611, 1591, 0, 0, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 0, 727, 0, 0, 0, 0, 0, + 1370, 1371, 0, 1623, 0, 0, 1619, 0, 0, 728, + 0, 0, 0, 0, 0, 2484, 1621, 0, 0, 0, + 0, 0, 0, 1622, 0, 0, 3225, 3226, 0, 0, + 3227, 0, 1583, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 729, 0, 0, 730, 0, 0, 0, 0, + 1623, 0, 0, 0, 0, 0, 731, 3245, 0, 732, + 0, 0, 0, 0, 1372, 1373, 1374, 1375, 1376, 1377, + 1378, 1379, 0, 0, 1380, 1381, 0, 733, 0, 0, + 0, 3257, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 734, 0, 0, 0, 0, 0, 0, 736, 1624, + 0, 0, 0, 0, 0, 0, 0, 0, 737, 0, + 0, 1647, 0, 0, 738, 0, 1625, 0, 0, 1919, + 1919, 1626, 1415, 1415, 1415, 1415, 1415, 1415, 0, 0, + 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, + 1919, 739, 0, 0, 1627, 1628, 1624, 0, 0, 0, + 0, 0, 3303, 0, 0, 0, 0, 0, 0, 1629, + 0, 0, 0, 1625, 0, 0, 0, 0, 1626, 0, + 3024, 0, 0, 0, 3320, 0, 0, 0, 1107, 0, + 0, 0, 0, 0, 0, 0, 0, 1382, 1383, 3329, + 0, 1627, 1628, 0, 2272, 0, 2272, 1630, 0, 0, + 1631, 0, 0, 0, 1107, 0, 1629, 0, 0, 0, + 0, 0, 0, 0, 1632, 0, 0, 1633, 0, 0, + 0, 0, 3354, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1647, 1630, 0, 1647, 1631, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1632, 0, 0, 1633, 0, 0, 0, 0, 0, + 0, 3380, 0, 0, 0, 0, 0, 1610, 0, 0, + 1611, 3024, 1384, 1385, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 0, 1647, 1107, 0, 0, 1647, 1647, 1647, 1647, + 1647, 1647, 1647, 1647, 0, 1619, 1386, 1387, 0, 1415, + 1415, 0, 1647, 1647, 1634, 1621, 0, 0, 0, 0, + 0, 0, 1622, 0, 1647, 3423, 0, 1647, 0, 0, + 0, 0, 0, 0, 0, 1647, 1647, 1647, 1647, 1647, + 1647, 1647, 1647, 1647, 1647, 0, 0, 0, 0, 1623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1634, 0, 0, 1610, 0, 0, 1611, 0, 0, + 1647, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1621, 0, 0, 0, 0, 0, 0, 1622, + 0, 0, 0, 3477, 3477, 3477, 0, 0, 0, 0, + 0, 1635, 0, 1415, 1636, 1637, 1638, 0, 1639, 1640, + 1641, 1642, 1643, 1644, 0, 0, 1623, 0, 2063, 0, + 3477, 0, 0, 0, 0, 1624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1625, 0, 0, 0, 0, 1626, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 3477, 0, 0, 0, 2063, 0, 0, 0, 0, + 1627, 1628, 1647, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1647, 1647, 0, 1629, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1630, 0, 0, 1631, 0, 0, 1625, + 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, + 1632, 0, 0, 1633, 0, 0, 0, 1647, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1627, 1628, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1647, + 1647, 1647, 1629, 0, 1919, 1919, 1919, 1919, 1919, 1919, + 0, 0, 0, 1919, 1919, 1919, 1919, 1919, 1919, 1919, + 1919, 1919, 1919, 0, 0, 0, 0, 1647, 1647, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1630, 0, 0, 1631, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1647, 0, 1632, 0, 0, + 1633, 1647, 0, 0, 1610, 0, 0, 1611, 0, 0, + 1634, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1619, 0, 0, 1647, 0, 0, 0, 0, + 0, 0, 1621, 0, 0, 0, 0, 0, 0, 1622, + 0, 0, 0, 0, 1647, 0, 0, 1647, 1647, 0, + 0, 0, 0, 0, 0, 1919, 1919, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1623, 0, 0, 1647, + 1415, 1415, 1647, 0, 1647, 0, 0, 0, 1647, 0, + 0, 0, 0, 0, 0, 0, 0, 1634, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, + 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 0, 0, 0, 0, 2368, 0, 0, 0, 0, 0, + 0, 0, 1647, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1610, 0, 0, 1611, 0, 0, 0, 1612, + 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, 0, + 0, 0, 1624, 0, 0, 0, 0, 0, 0, 0, + 1619, 0, 0, 0, 0, 0, 0, 0, 0, 1625, + 1621, 0, 0, 0, 1626, 0, 0, 1622, 0, 0, + 0, 0, 0, 0, 1635, 0, 0, 1636, 1637, 1638, + 0, 1639, 1640, 1641, 1642, 1643, 1644, 1627, 1628, 0, + 0, 2469, 0, 0, 1623, 0, 0, 1610, 0, 0, + 1611, 0, 1629, 0, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 0, 0, 0, 0, 0, 0, 0, 0, 1647, + 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1621, 0, 0, 0, 0, + 1630, 1415, 1622, 1631, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, + 1633, 0, 0, 0, 0, 0, 0, 0, 0, 1623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1610, 0, 0, 1611, 0, 0, 0, 1612, 1613, 0, + 1624, 1616, 1617, 1618, 0, 0, 0, 1647, 0, 1647, + 0, 0, 0, 0, 0, 1647, 0, 1625, 1619, 0, + 0, 0, 1626, 0, 1647, 0, 0, 1647, 1621, 1647, + 0, 0, 0, 1647, 0, 1622, 1919, 1919, 0, 0, + 1647, 1647, 0, 0, 0, 1627, 1628, 0, 1647, 0, + 0, 0, 0, 0, 0, 0, 0, 1647, 0, 0, + 1629, 0, 1623, 0, 0, 0, 0, 1634, 0, 0, + 0, 0, 1647, 0, 0, 1624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1625, 0, 0, 0, 0, 1626, 1630, 0, + 0, 1631, 0, 0, 0, 0, 0, 0, 0, 0, + 1415, 0, 0, 0, 0, 1632, 0, 0, 1633, 0, + 1627, 1628, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1624, 0, + 1364, 1365, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1630, 1635, 1625, 1631, 1636, 1637, 1638, + 1626, 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, 0, + 1632, 2493, 0, 1633, 0, 0, 0, 0, 1364, 1365, + 0, 1366, 1367, 1627, 1628, 1368, 1369, 0, 0, 0, + 0, 0, 0, 0, 0, 1634, 0, 0, 1629, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1366, + 1367, 0, 0, 1368, 1369, 0, 0, 0, 0, 1919, + 1415, 0, 0, 0, 0, 0, 1630, 0, 0, 1631, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1632, 1647, 1647, 1633, 0, 0, 0, + 1370, 1371, 0, 0, 0, 0, 0, 0, 0, 0, + 1634, 0, 0, 0, 0, 0, 0, 0, 1647, 0, + 0, 0, 1647, 0, 1647, 1647, 1647, 0, 0, 1647, + 0, 0, 1647, 1647, 0, 0, 0, 0, 1370, 1371, + 0, 1647, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, + 1640, 1641, 1642, 1643, 1644, 0, 0, 0, 0, 2699, + 0, 0, 0, 0, 1372, 1373, 1374, 1375, 1376, 1377, + 1378, 1379, 0, 0, 1380, 1381, 0, 0, 0, 0, + 0, 0, 1647, 0, 0, 0, 0, 0, 1919, 0, + 0, 0, 0, 1634, 0, 0, 0, 0, 0, 0, + 0, 1647, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, + 0, 0, 1380, 1381, 0, 0, 0, 1635, 0, 0, + 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 0, 0, 0, 0, 2771, 1647, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1919, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1382, 1383, 0, + 0, 0, 0, 0, 0, 1647, 1647, 1647, 0, 0, + 1635, 0, 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, + 1642, 1643, 1644, 0, 0, 1647, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1382, 1383, 1647, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1647, 0, 0, 0, 0, 0, 0, + 0, 0, 1384, 1385, 0, 0, 0, 0, 0, 0, + 1647, 0, 0, 0, 0, 0, 0, 0, 0, 1647, + 0, 0, 0, 0, 0, 0, 1386, 1387, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1384, 1385, 0, 0, 1647, 0, 1993, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1386, 1387, 0, 0, 0, 0, + 1647, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 116, 1042, 815, 1043, + 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1647, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 1048, 0, 0, 128, 129, 130, 0, 131, + 132, 133, 134, 135, 136, 137, 138, 1049, 140, 1050, + 1051, 0, 143, 144, 145, 146, 147, 148, 1052, 785, + 149, 150, 151, 152, 1053, 1054, 155, 1647, 156, 157, + 158, 159, 786, 0, 787, 0, 1055, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1056, 190, 191, 1057, 193, + 1058, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 1060, 221, 222, 223, 224, + 225, 788, 1061, 227, 0, 228, 229, 1062, 231, 0, + 232, 0, 233, 234, 0, 235, 236, 237, 238, 239, + 240, 0, 241, 0, 1063, 1064, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 266, 267, 268, 269, 270, 271, 272, 1065, 1066, + 0, 1067, 0, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1068, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, 328, + 329, 330, 1072, 790, 332, 1073, 334, 335, 336, 0, + 337, 338, 0, 0, 1074, 340, 341, 0, 0, 342, + 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1075, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 399, 400, 401, 402, 1076, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 426, 427, 428, 1077, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, + 448, 449, 450, 451, 452, 453, 454, 0, 455, 1078, + 1079, 0, 0, 458, 459, 796, 461, 797, 1080, 463, + 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 1081, 0, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, + 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, 0, + 0, 0, 1088, 1089, 0, 1090, 1091, 2624, 116, 1042, + 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, + 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, + 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, + 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, + 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, + 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, + 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, + 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, + 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, + 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, + 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, + 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, + 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, + 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, + 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, + 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, + 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, + 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, + 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, + 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, 3228, + 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 0, 0, 1048, 0, 0, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, + 147, 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, + 155, 0, 156, 157, 158, 159, 786, 0, 787, 0, + 1055, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 1056, + 190, 191, 1057, 193, 1058, 194, 0, 195, 196, 197, + 198, 199, 200, 14, 15, 201, 202, 203, 204, 0, + 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 1060, + 221, 222, 223, 224, 225, 788, 1061, 227, 0, 228, + 229, 1062, 231, 0, 232, 0, 233, 234, 23, 235, + 236, 237, 238, 239, 240, 0, 241, 0, 1063, 1064, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, + 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 1068, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 1069, 321, 1070, 323, 324, 325, + 326, 1071, 327, 328, 329, 330, 1072, 790, 332, 1073, + 334, 335, 336, 0, 337, 338, 0, 0, 1074, 340, + 341, 0, 0, 342, 343, 344, 345, 346, 347, 792, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 27, 28, 29, 0, 360, 361, 793, 363, 364, + 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 1075, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 399, 400, + 401, 402, 1076, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 34, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 36, 426, 427, + 428, 1077, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 795, 38, + 0, 446, 447, 39, 448, 449, 450, 451, 452, 453, + 454, 0, 455, 1078, 1079, 0, 0, 458, 459, 796, + 461, 797, 1080, 463, 464, 798, 466, 467, 468, 469, + 470, 0, 0, 471, 472, 473, 41, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 799, 1081, 0, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 45, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 1082, 0, 46, 0, 0, + 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, + 0, 1087, 3203, 0, 0, 0, 1088, 1089, 0, 1090, + 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 1048, 0, 0, + 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, + 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, + 146, 147, 148, 1052, 785, 149, 150, 151, 152, 1053, + 1054, 155, 0, 156, 157, 158, 159, 786, 0, 787, + 0, 1055, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, 196, + 197, 198, 199, 200, 14, 15, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 1060, 221, 222, 223, 224, 225, 788, 1061, 227, 0, + 228, 229, 1062, 231, 0, 232, 0, 233, 234, 23, + 235, 236, 237, 238, 239, 240, 0, 241, 0, 1063, + 1064, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, + 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 1068, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1069, 321, 1070, 323, 324, + 325, 326, 1071, 327, 328, 329, 330, 1072, 790, 332, + 1073, 334, 335, 336, 0, 337, 338, 0, 0, 1074, + 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, + 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 27, 28, 29, 0, 360, 361, 793, 363, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1075, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, + 400, 401, 402, 1076, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 34, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 36, 426, + 427, 428, 1077, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, + 38, 0, 446, 447, 39, 448, 449, 450, 451, 452, + 453, 454, 0, 455, 1078, 1079, 0, 0, 458, 459, + 796, 461, 797, 1080, 463, 464, 798, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 41, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 799, 1081, + 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 45, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 1082, 0, 46, 0, + 0, 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, + 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, + 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, + 125, 126, 127, 0, 0, 0, 0, 0, 1048, 0, + 0, 128, 129, 130, 0, 131, 132, 133, 134, 135, + 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, + 145, 146, 147, 148, 1052, 785, 149, 150, 151, 152, + 1053, 1054, 155, 0, 156, 157, 158, 159, 786, 0, + 787, 0, 1055, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, + 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, + 204, 0, 0, 205, 206, 1059, 208, 209, 0, 210, + 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, + 219, 1060, 221, 222, 223, 224, 225, 788, 1061, 227, + 0, 228, 229, 1062, 231, 0, 232, 0, 233, 234, + 23, 235, 236, 237, 238, 239, 240, 0, 241, 0, + 1063, 1064, 244, 245, 0, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 0, 258, 259, + 260, 261, 262, 263, 264, 0, 265, 266, 267, 268, + 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 0, 0, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 297, 298, 1068, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 1069, 321, 1070, 323, + 324, 325, 326, 1071, 327, 328, 329, 330, 1072, 790, + 332, 1073, 334, 335, 336, 0, 337, 338, 0, 0, + 1074, 340, 341, 0, 0, 342, 343, 344, 345, 346, + 347, 792, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 27, 28, 29, 0, 360, 361, 793, + 363, 364, 365, 366, 367, 368, 369, 0, 370, 371, + 372, 373, 374, 375, 0, 376, 377, 378, 1075, 380, + 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, + 399, 400, 401, 402, 1076, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 34, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 426, 427, 428, 1077, 430, 0, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 795, 0, 0, 446, 447, 39, 448, 449, 450, 451, + 452, 453, 454, 0, 455, 1078, 1079, 0, 0, 458, + 459, 796, 461, 797, 1080, 463, 464, 798, 466, 467, + 468, 469, 470, 0, 0, 471, 472, 473, 41, 474, + 475, 476, 477, 0, 478, 479, 480, 481, 482, 799, + 1081, 0, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 0, 0, 494, 0, 45, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 1082, 0, 46, + 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, 0, + 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, + 0, 1090, 1091, 1241, 1042, 815, 1043, 1044, 1045, 1046, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 1242, 125, 126, 127, 0, 0, 0, 1243, 0, 1048, + 0, 0, 1244, 129, 130, 0, 131, 132, 133, 1245, + 135, 136, 137, 138, 1049, 1246, 1050, 1051, 0, 143, + 144, 145, 146, 147, 148, 1052, 785, 149, 150, 151, + 152, 1053, 1054, 155, 0, 156, 157, 158, 159, 786, + 0, 1247, 0, 1248, 163, 164, 165, 166, 167, 1249, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 1250, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 1251, 0, 205, 206, 1059, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 1060, 221, 222, 223, 224, 225, 788, 1061, + 227, 0, 228, 229, 1062, 231, 0, 232, 0, 233, + 1252, 0, 1253, 236, 237, 1254, 1255, 240, 0, 241, + 0, 1063, 1064, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 1256, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 1257, 267, + 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, + 276, 1258, 1259, 279, 1260, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 1261, 289, 1262, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 1263, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 1069, 1264, 1070, + 323, 324, 325, 326, 1071, 327, 328, 1265, 330, 1072, + 790, 332, 1073, 334, 335, 336, 0, 337, 338, 0, + 0, 1074, 340, 341, 0, 0, 342, 343, 344, 1266, + 346, 1267, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 1268, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 1075, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 1269, 400, 401, 402, 1076, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 1270, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 1271, 427, 428, 1077, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 1272, + 444, 795, 0, 0, 446, 447, 0, 448, 1273, 450, + 451, 452, 453, 454, 0, 455, 1078, 1079, 0, 0, + 458, 459, 796, 461, 797, 1080, 463, 464, 1274, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 1081, 1275, 485, 1276, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 1082, 0, + 0, 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, + 0, 0, 1086, 0, 1087, 1277, 0, 0, 0, 1088, + 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 0, + 1046, 1047, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 1048, 0, 0, 128, 129, 130, 0, 131, 132, 133, + 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, + 143, 144, 145, 146, 147, 148, 1052, 785, 149, 150, + 151, 152, 1053, 1054, 155, 0, 156, 157, 158, 159, + 786, 0, 787, 0, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 1056, 190, 191, 1057, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 14, 15, 201, + 202, 203, 204, 0, 0, 205, 206, 1059, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 1060, 221, 222, 223, 224, 225, 788, + 1061, 227, 0, 228, 229, 1062, 231, 0, 232, 0, + 233, 234, 23, 235, 236, 237, 238, 239, 240, 0, + 241, 0, 1063, 1064, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 266, + 267, 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, + 0, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 1068, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 1069, 321, + 1070, 323, 324, 325, 326, 0, 327, 328, 329, 330, + 1072, 790, 332, 1073, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 345, 346, 347, 792, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 27, 28, 29, 0, 360, + 361, 793, 363, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 1075, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 399, 400, 401, 402, 1076, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 34, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 36, 426, 427, 428, 1077, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 795, 38, 0, 446, 447, 39, 448, 449, + 450, 451, 452, 453, 454, 0, 455, 1078, 1079, 0, + 0, 458, 459, 796, 461, 797, 1080, 463, 464, 798, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 41, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 799, 1081, 0, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 45, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1086, 0, 1087, 0, 0, 0, 0, + 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, + 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, + 0, 1048, 0, 0, 128, 129, 130, 0, 131, 132, + 133, 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, + 1422, 143, 144, 145, 146, 147, 148, 1052, 785, 149, + 150, 151, 152, 1053, 1054, 155, 0, 156, 157, 158, + 159, 786, 0, 787, 0, 1055, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, + 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, + 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, + 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, + 216, 217, 218, 219, 1060, 221, 222, 223, 224, 225, + 788, 1061, 227, 0, 228, 229, 1062, 231, 0, 232, + 0, 233, 234, 1423, 235, 236, 237, 238, 239, 240, + 0, 241, 0, 1063, 1064, 244, 245, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, + 266, 267, 268, 269, 270, 271, 272, 1065, 1066, 0, + 1067, 0, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 0, 1424, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 1068, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 1069, + 321, 1070, 323, 324, 325, 326, 1071, 327, 328, 329, + 330, 1072, 790, 332, 1073, 334, 335, 336, 0, 337, + 338, 0, 0, 1074, 340, 341, 0, 0, 342, 343, + 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, + 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, + 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, + 378, 1075, 380, 381, 382, 383, 0, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 397, 398, 399, 400, 401, 402, 1076, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 0, 426, 427, 428, 1077, 430, 0, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 795, 0, 0, 446, 447, 0, 448, + 449, 450, 451, 452, 453, 454, 0, 455, 1078, 1079, + 0, 1425, 458, 459, 796, 461, 797, 1080, 463, 464, + 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, + 481, 482, 483, 1081, 0, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, 1085, + 0, 0, 0, 0, 1086, 0, 1087, 0, 0, 0, + 0, 1088, 1089, 0, 1090, 1091, 1241, 1042, 815, 1043, + 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 1243, 0, 1048, 0, 0, 1244, 129, 130, 0, 131, + 132, 133, 1245, 135, 136, 137, 138, 1049, 1246, 1050, + 1051, 0, 143, 144, 145, 146, 147, 148, 1052, 785, + 149, 150, 151, 152, 1053, 1054, 155, 0, 156, 157, + 158, 159, 786, 0, 1247, 0, 1248, 163, 164, 165, + 166, 167, 1249, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 1250, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1056, 190, 191, 1057, 193, + 1058, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 1060, 221, 222, 223, 224, + 225, 788, 1061, 227, 0, 228, 229, 1062, 231, 0, + 232, 0, 233, 1252, 0, 1253, 236, 237, 1254, 1255, + 240, 0, 241, 0, 1063, 1064, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 1256, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 1257, 267, 268, 269, 270, 271, 272, 1065, 1066, + 0, 1067, 0, 276, 1258, 1259, 279, 1260, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 1261, 289, 1262, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1263, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1069, 1264, 1070, 323, 324, 325, 326, 1071, 327, 328, + 1265, 330, 1072, 790, 332, 1073, 334, 335, 336, 0, + 337, 338, 0, 0, 1074, 340, 341, 0, 0, 342, + 343, 344, 1266, 346, 1267, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 1268, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1075, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 1269, 400, 401, 402, 1076, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 1270, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 1271, 427, 428, 1077, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 1272, 444, 795, 0, 0, 446, 447, 0, + 448, 1273, 450, 451, 452, 453, 454, 0, 455, 1078, + 1079, 0, 0, 458, 459, 796, 461, 797, 1080, 463, + 464, 1274, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 1081, 2277, 485, 1276, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, + 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, 0, + 0, 0, 1088, 1089, 0, 1090, 1091, 1241, 1042, 815, + 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, + 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, + 0, 1243, 0, 1048, 0, 0, 1244, 129, 130, 0, + 131, 132, 133, 1245, 135, 136, 137, 138, 1049, 1246, + 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, + 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, + 157, 158, 159, 786, 0, 1247, 0, 1248, 163, 164, + 165, 166, 167, 1249, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 0, 1250, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, + 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, + 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, + 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, + 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, + 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, + 0, 232, 0, 233, 1252, 0, 1253, 236, 237, 1254, + 1255, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, + 246, 247, 248, 249, 250, 251, 252, 1256, 254, 255, + 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, + 0, 265, 1257, 267, 268, 269, 270, 271, 272, 1065, + 1066, 0, 1067, 0, 276, 1258, 1259, 279, 1260, 281, + 282, 283, 284, 285, 286, 0, 0, 287, 1261, 289, + 1262, 0, 291, 292, 293, 294, 295, 296, 297, 298, + 1263, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 1069, 1264, 1070, 323, 324, 325, 326, 1071, 327, + 328, 1265, 330, 1072, 790, 332, 1073, 334, 335, 336, + 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, + 342, 343, 344, 1266, 346, 1267, 792, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, + 0, 0, 360, 361, 793, 1268, 364, 365, 366, 367, + 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, + 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 397, 398, 1269, 400, 401, 402, 1076, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 0, 1270, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 0, 1271, 427, 428, 1077, 430, + 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 1272, 444, 795, 0, 0, 446, 447, + 0, 448, 1273, 450, 451, 452, 453, 454, 0, 455, + 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, + 463, 464, 1274, 466, 467, 468, 469, 470, 0, 0, + 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, + 479, 480, 481, 482, 483, 1081, 0, 485, 1276, 487, + 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, + 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 1082, 0, 0, 0, 0, 0, 0, 1083, + 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 2334, + 0, 0, 0, 1088, 1089, 0, 1090, 1091, 116, 1042, + 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, -1109, 125, 126, 127, 0, + 0, 0, 0, -1109, 1048, 0, 0, 128, 129, 130, + 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, + 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, + 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, + 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, + 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, + 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, + 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, + 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, + 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, + 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, + 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, + 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, + 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, + 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, + 430, -1109, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, + 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, + 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, + 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, + 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, + 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, 1241, + 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 1243, 0, 1048, 0, 0, 1244, 129, + 130, 0, 131, 132, 133, 1245, 135, 136, 137, 138, + 1049, 1246, 1050, 1051, 0, 143, 144, 145, 146, 147, + 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, + 0, 156, 157, 158, 159, 786, 0, 1247, 0, 1248, + 163, 164, 165, 166, 167, 1249, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 1250, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 1056, 190, + 191, 1057, 193, 1058, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 1059, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 1060, 221, + 222, 223, 224, 225, 788, 1061, 227, 0, 228, 229, + 1062, 231, 0, 232, 0, 233, 1252, 0, 1253, 236, + 237, 1254, 1255, 240, 0, 241, 0, 1063, 1064, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 1256, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 1257, 267, 268, 269, 270, 271, + 272, 1065, 1066, 0, 1067, 0, 276, 1258, 1259, 279, + 1260, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 1261, 289, 1262, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 1263, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 1069, 1264, 1070, 323, 324, 325, 326, + 1071, 327, 328, 1265, 330, 1072, 790, 332, 1073, 334, + 335, 336, 0, 337, 338, 0, 0, 1074, 340, 341, + 0, 0, 342, 343, 344, 1266, 346, 1267, 792, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 793, 1268, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 1075, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 1269, 400, 401, + 402, 1076, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 1270, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 1271, 427, 428, + 1077, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 1272, 444, 795, 0, 0, + 446, 447, 0, 448, 1273, 450, 451, 452, 453, 454, + 0, 455, 1078, 1079, 0, 0, 458, 459, 796, 461, + 797, 1080, 463, 464, 1274, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 1081, 0, 485, + 1276, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 1082, 0, 0, 0, 0, 0, + 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, + 1087, 3068, 0, 0, 0, 1088, 1089, 0, 1090, 1091, + 1241, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 1243, 0, 1048, 0, 0, 1244, + 129, 130, 0, 131, 132, 133, 1245, 135, 136, 137, + 138, 1049, 1246, 1050, 1051, 0, 143, 144, 145, 146, + 147, 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, + 155, 0, 156, 157, 158, 159, 786, 0, 1247, 0, + 1248, 163, 164, 165, 166, 167, 1249, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 1250, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 1056, + 190, 191, 1057, 193, 1058, 194, 0, 195, 196, 197, + 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, + 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 1060, + 221, 222, 223, 224, 225, 788, 1061, 227, 0, 228, + 229, 1062, 231, 0, 232, 0, 233, 1252, 0, 1253, + 236, 237, 1254, 1255, 240, 0, 241, 0, 1063, 1064, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + 1256, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 1257, 267, 268, 269, 270, + 271, 272, 1065, 1066, 0, 1067, 0, 276, 1258, 1259, + 279, 1260, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 1261, 289, 1262, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 1263, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 1069, 1264, 1070, 323, 324, 325, + 326, 1071, 327, 328, 1265, 330, 1072, 790, 332, 1073, + 334, 335, 336, 0, 337, 338, 0, 0, 1074, 340, + 341, 0, 0, 342, 343, 344, 1266, 346, 1267, 792, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 0, 0, 0, 0, 360, 361, 793, 1268, 364, + 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 1075, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 1269, 400, + 401, 402, 1076, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 0, 1270, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 0, 1271, 427, + 428, 1077, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 1272, 444, 795, 0, + 0, 446, 447, 0, 448, 1273, 450, 451, 452, 453, + 454, 0, 455, 1078, 1079, 0, 0, 458, 459, 796, + 461, 797, 1080, 463, 464, 1274, 466, 467, 468, 469, + 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 483, 1081, 0, + 485, 1276, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 1082, 0, 0, 0, 0, + 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, + 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, 1090, + 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 1688, 125, + 126, 127, 0, 0, 0, 0, 0, 1048, 0, 0, + 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, + 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, + 146, 147, 148, 1052, 785, 149, 150, 151, 152, 1053, + 1054, 155, 0, 156, 157, 158, 159, 786, 0, 787, + 0, 1055, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 1060, 221, 222, 223, 224, 225, 788, 1061, 227, 0, + 228, 229, 1062, 231, 0, 232, 0, 233, 234, 0, + 235, 236, 237, 238, 239, 240, 0, 241, 0, 1063, + 1064, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, + 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 1068, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1069, 321, 1070, 323, 324, + 325, 326, 1071, 327, 328, 329, 330, 1072, 790, 332, + 1073, 334, 335, 336, 0, 337, 338, 0, 0, 1074, + 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, + 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 793, 363, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1075, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, + 400, 401, 402, 1076, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, + 427, 428, 1077, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, + 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, + 453, 454, 0, 455, 1078, 1079, 0, 0, 458, 459, + 796, 461, 797, 1080, 463, 464, 798, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 1081, + 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 1082, 0, 0, 0, + 0, 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, + 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, + 1090, 1091, 116, 1703, 815, 1043, 1044, 1045, 1704, 1047, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 1705, + 125, 126, 127, 0, 0, 0, 0, 0, 1048, 0, + 0, 128, 129, 130, 0, 131, 132, 133, 134, 135, + 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, + 145, 146, 147, 148, 1052, 785, 149, 150, 151, 152, + 1053, 1054, 155, 0, 156, 157, 158, 159, 786, 0, + 787, 0, 1055, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, + 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, + 204, 0, 0, 205, 206, 1059, 208, 209, 0, 210, + 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, + 219, 1060, 221, 222, 223, 224, 225, 788, 1061, 227, + 0, 228, 229, 1062, 231, 0, 232, 0, 233, 234, + 0, 235, 236, 237, 238, 239, 240, 0, 241, 0, + 1063, 1064, 244, 245, 0, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 0, 258, 259, + 260, 261, 262, 263, 264, 0, 265, 266, 267, 268, + 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 0, 0, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 297, 298, 1068, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 1069, 321, 1070, 323, + 324, 325, 326, 1071, 327, 328, 329, 330, 1072, 790, + 332, 1073, 334, 335, 336, 0, 337, 338, 0, 0, + 1074, 340, 341, 0, 0, 342, 343, 344, 345, 346, + 347, 792, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 0, 0, 0, 0, 360, 361, 793, + 363, 364, 365, 366, 367, 368, 369, 0, 370, 371, + 372, 373, 374, 375, 0, 376, 377, 378, 1075, 380, + 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, + 399, 400, 401, 402, 1076, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 426, 427, 428, 1077, 430, 0, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 795, 0, 0, 446, 447, 0, 448, 449, 450, 451, + 452, 453, 454, 0, 455, 1078, 1079, 0, 0, 458, + 459, 796, 461, 797, 1080, 463, 464, 798, 466, 467, + 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, + 1081, 0, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 1082, 0, 0, + 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, 0, + 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, + 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 125, 126, 127, 0, 0, 0, 0, 0, 1048, + 0, 0, 128, 129, 130, 0, 131, 132, 133, 134, + 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, + 144, 145, 146, 147, 148, 1052, 785, 149, 150, 151, + 152, 1053, 1054, 155, 0, 156, 157, 158, 159, 786, + 0, 787, 0, 1055, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 1059, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 1060, 221, 222, 223, 224, 225, 788, 1061, + 227, 0, 228, 229, 1062, 231, 0, 232, 0, 233, + 234, 1423, 235, 236, 237, 238, 239, 240, 0, 241, + 0, 1063, 1064, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, + 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 1068, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 1069, 321, 1070, + 323, 324, 325, 326, 1071, 327, 328, 329, 330, 1072, + 790, 332, 1073, 334, 335, 336, 0, 337, 338, 0, + 0, 1074, 340, 341, 0, 0, 342, 343, 344, 345, + 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 1075, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 399, 400, 401, 402, 1076, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 426, 427, 428, 1077, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, + 451, 452, 453, 454, 0, 455, 1078, 1079, 0, 0, + 458, 459, 796, 461, 797, 1080, 463, 464, 798, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 1081, 0, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 1082, 0, + 0, 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, + 0, 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, + 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, + 1046, 1047, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 1048, 0, 0, 128, 129, 130, 0, 131, 132, 133, + 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, + 143, 144, 145, 146, 147, 148, 1052, 785, 149, 150, + 151, 152, 1053, 1054, 155, 0, 156, 157, 158, 159, + 786, 0, 787, 0, 1055, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 1059, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 1060, 221, 222, 223, 224, 225, 788, + 1061, 227, 0, 228, 229, 1062, 231, 0, 232, 0, + 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, + 241, 0, 1063, 1064, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 266, + 267, 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, + 0, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 1068, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 1069, 321, + 1070, 323, 324, 325, 326, 1071, 327, 328, 329, 330, + 1072, 790, 332, 1073, 334, 335, 336, 0, 337, 338, + 0, 0, 1074, 340, 341, 0, 0, 342, 343, 344, + 345, 346, 347, 792, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 793, 363, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 1075, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 399, 400, 401, 402, 1076, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 426, 427, 428, 1077, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 795, 0, 0, 446, 447, 0, 448, 449, + 450, 451, 452, 453, 454, 0, 455, 1078, 1079, 0, + 0, 458, 459, 796, 461, 797, 1080, 463, 464, 798, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 1081, 0, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 1082, + 0, 0, 0, 0, 0, 0, 1083, 1084, 1085, 0, + 0, 0, 0, 1086, 0, 1087, 2051, 0, 0, 0, + 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, + 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, + 0, 1048, 0, 0, 128, 129, 130, 0, 131, 132, + 133, 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, + 0, 143, 144, 145, 146, 147, 148, 1052, 785, 149, + 150, 151, 152, 1053, 1054, 155, 0, 156, 157, 158, + 159, 786, 0, 787, 0, 1055, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, + 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, + 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, + 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, + 216, 217, 218, 219, 1060, 221, 222, 223, 224, 225, + 788, 1061, 227, 0, 228, 229, 1062, 231, 0, 232, + 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, + 0, 241, 0, 1063, 1064, 244, 245, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, + 266, 267, 268, 269, 270, 271, 272, 1065, 1066, 0, + 1067, 0, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 0, 0, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 1068, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 1069, + 321, 1070, 323, 324, 325, 326, 1071, 327, 328, 329, + 330, 1072, 790, 332, 1073, 334, 335, 336, 0, 337, + 338, 0, 0, 1074, 340, 341, 0, 0, 342, 343, + 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, + 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, + 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, + 378, 1075, 380, 381, 382, 383, 0, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 397, 398, 399, 400, 401, 402, 1076, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 0, 426, 427, 428, 1077, 430, 0, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 795, 0, 0, 446, 447, 2678, 448, + 449, 450, 451, 452, 453, 454, 0, 455, 1078, 1079, + 0, 0, 458, 459, 796, 461, 797, 1080, 463, 464, + 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, + 481, 482, 483, 1081, 0, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, 1085, + 0, 0, 0, 0, 1086, 0, 1087, 0, 0, 0, + 0, 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, + 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 1048, 0, 0, 128, 129, 130, 0, 131, + 132, 133, 134, 135, 136, 137, 138, 1049, 140, 1050, + 1051, 0, 143, 144, 145, 146, 147, 148, 1052, 785, + 149, 150, 151, 152, 1053, 1054, 155, 0, 156, 157, + 158, 159, 786, 0, 787, 0, 1055, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1056, 190, 191, 1057, 193, + 1058, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 1060, 221, 222, 223, 224, + 225, 788, 1061, 227, 0, 228, 229, 1062, 231, 0, + 232, 0, 233, 234, 0, 235, 236, 237, 238, 239, + 240, 0, 241, 0, 1063, 1064, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 266, 267, 268, 269, 270, 271, 272, 1065, 1066, + 0, 1067, 0, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1068, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, 328, + 329, 330, 1072, 790, 332, 1073, 334, 335, 336, 0, + 337, 338, 0, 0, 1074, 340, 341, 0, 0, 342, + 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1075, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 399, 400, 401, 402, 1076, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 426, 427, 428, 1077, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, + 448, 449, 450, 451, 452, 453, 454, 0, 455, 1078, + 1079, 0, 0, 458, 459, 796, 461, 797, 1080, 463, + 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 1081, 0, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 0, 2797, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, + 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, 0, + 0, 0, 1088, 1089, 0, 1090, 1091, 116, 1042, 815, + 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, + 121, 122, 123, 124, 3012, 125, 126, 127, 0, 0, + 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, + 131, 132, 133, 134, 135, 136, 137, 138, 1049, 140, + 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, + 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, + 157, 158, 159, 786, 0, 787, 0, 1055, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 0, 178, 179, 3013, 181, 182, + 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, + 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, + 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, + 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, + 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, + 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, + 0, 232, 0, 233, 234, 0, 235, 236, 237, 238, + 239, 240, 0, 241, 0, 3014, 1064, 244, 245, 0, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, + 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, + 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, + 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, + 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, + 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, + 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, + 0, 0, 360, 361, 793, 363, 364, 365, 366, 367, + 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, + 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 397, 398, 399, 400, 401, 3015, 1076, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 0, 426, 427, 428, 1077, 430, + 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 795, 0, 0, 446, 447, + 0, 448, 449, 450, 451, 452, 453, 454, 0, 455, + 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, + 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, + 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, + 479, 480, 481, 482, 483, 1081, 0, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, + 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 1082, 0, 0, 0, 0, 0, 0, 1083, + 1084, 1085, 0, 0, 0, 0, 1086, 0, 3016, 0, + 0, 0, 0, 1088, 1089, 0, 1090, 1091, 116, 1042, + 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, + 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, + 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, + 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, + 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, + 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, + 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, + 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, + 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, + 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, + 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, + 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, + 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, + 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, + 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, + 447, 3164, 448, 449, 450, 451, 452, 453, 454, 0, + 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, + 1080, 463, 464, 798, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, + 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, + 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, 116, + 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 1048, 0, 0, 128, 129, + 130, 0, 131, 132, 133, 134, 135, 136, 137, 138, + 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, 147, + 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, + 0, 156, 157, 158, 159, 786, 0, 787, 0, 1055, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 1056, 190, + 191, 1057, 193, 1058, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 1059, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 1060, 221, + 222, 223, 224, 225, 788, 1061, 227, 0, 228, 229, + 1062, 231, 0, 232, 0, 233, 234, 0, 235, 236, + 237, 238, 239, 240, 0, 241, 0, 1063, 1064, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 266, 267, 268, 269, 270, 271, + 272, 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 1068, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 1069, 321, 1070, 323, 324, 325, 326, + 1071, 327, 328, 329, 330, 1072, 790, 332, 1073, 334, + 335, 336, 0, 337, 338, 0, 0, 1074, 340, 341, + 0, 0, 342, 343, 344, 345, 346, 347, 792, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 793, 363, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 1075, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 399, 400, 401, + 402, 1076, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 426, 427, 428, + 1077, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 795, 0, 0, + 446, 447, 3302, 448, 449, 450, 451, 452, 453, 454, + 0, 455, 1078, 1079, 0, 0, 458, 459, 796, 461, + 797, 1080, 463, 464, 798, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 1081, 0, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 1082, 0, 0, 0, 0, 0, + 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, + 1087, 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, + 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 0, 0, 1048, 0, 0, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, + 147, 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, + 155, 0, 156, 157, 158, 159, 786, 0, 787, 0, + 1055, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 1056, + 190, 191, 1057, 193, 1058, 194, 0, 195, 196, 197, + 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, + 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 1060, + 221, 222, 223, 224, 225, 788, 1061, 227, 0, 228, + 229, 1062, 231, 0, 232, 0, 233, 234, 0, 235, + 236, 237, 238, 239, 240, 0, 241, 0, 1063, 1064, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, + 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 288, 289, 290, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 1068, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 1069, 321, 1070, 323, 324, 325, + 326, 1071, 327, 328, 329, 330, 1072, 790, 332, 1073, + 334, 335, 336, 0, 337, 338, 0, 0, 1074, 340, + 341, 0, 0, 342, 343, 344, 345, 346, 347, 792, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 0, 0, 0, 0, 360, 361, 793, 363, 364, + 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 1075, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 399, 400, + 401, 402, 1076, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 0, 426, 427, + 428, 1077, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 795, 0, + 0, 446, 447, 0, 448, 449, 450, 451, 452, 453, + 454, 0, 455, 1078, 1079, 0, 0, 458, 459, 796, + 461, 797, 1080, 463, 464, 798, 466, 467, 468, 469, + 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 483, 1081, 0, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 1082, 0, 0, 0, 0, + 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, + 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, 1090, + 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 1048, 0, 0, + 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, + 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, + 146, 147, 148, 1052, 785, 149, 150, 151, 152, 1053, + 1054, 155, 0, 156, 157, 158, 159, 786, 0, 787, + 0, 1055, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 1060, 221, 222, 223, 224, 225, 788, 1061, 227, 0, + 228, 229, 1062, 231, 0, 232, 0, 233, 234, 0, + 235, 236, 237, 238, 239, 240, 0, 241, 0, 1063, + 1064, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, + 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 1068, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1069, 321, 1070, 323, 324, + 325, 326, 1071, 327, 328, 329, 330, 1072, 790, 332, + 1073, 334, 335, 336, 0, 337, 338, 0, 0, 1074, + 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, + 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 793, 363, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1075, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, + 400, 401, 402, 1076, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, + 427, 428, 1077, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, + 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, + 453, 454, 0, 455, 1078, 1079, 0, 0, 458, 459, + 796, 461, 797, 1080, 463, 464, 798, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 1081, + 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 1082, 0, 0, 0, + 0, 0, 0, 1708, 1709, 1085, 0, 0, 0, 0, + 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, + 1090, 1091, 116, 2188, 815, 1043, 1044, 1045, 1046, 1047, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, + 125, 126, 127, 0, 0, 0, 0, 0, 1048, 0, + 0, 128, 129, 130, 0, 131, 132, 133, 134, 135, + 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, + 145, 146, 147, 148, 1052, 785, 149, 150, 151, 152, + 1053, 1054, 155, 0, 156, 157, 158, 159, 786, 0, + 787, 0, 1055, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, 195, + 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, + 204, 0, 0, 205, 206, 1059, 208, 209, 0, 210, + 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, + 219, 1060, 221, 222, 223, 224, 225, 788, 1061, 227, + 0, 228, 229, 1062, 231, 0, 232, 0, 233, 234, + 0, 235, 236, 237, 238, 239, 240, 0, 241, 0, + 1063, 1064, 244, 245, 0, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 0, 258, 259, + 260, 261, 262, 263, 264, 0, 265, 266, 267, 268, + 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 0, 0, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 297, 298, 1068, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 1069, 321, 1070, 323, + 324, 325, 326, 1071, 327, 328, 329, 330, 1072, 790, + 332, 1073, 334, 335, 336, 0, 337, 338, 0, 0, + 1074, 340, 341, 0, 0, 342, 343, 344, 345, 346, + 347, 792, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 0, 0, 0, 0, 360, 361, 793, + 363, 364, 365, 366, 367, 368, 369, 0, 370, 371, + 372, 373, 374, 375, 0, 376, 377, 378, 1075, 380, + 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, + 399, 400, 401, 402, 1076, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 426, 427, 428, 1077, 430, 0, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 795, 0, 0, 446, 447, 0, 448, 449, 450, 451, + 452, 453, 454, 0, 455, 1078, 1079, 0, 0, 458, + 459, 796, 461, 797, 1080, 463, 464, 798, 466, 467, + 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, + 1081, 0, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 1082, 0, 0, + 0, 0, 0, 0, 1083, 1084, 1085, 0, 0, 0, + 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, + 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 125, 126, 127, 0, 0, 0, 0, 0, 1048, + 0, 0, 128, 129, 130, 0, 131, 132, 133, 134, + 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, + 144, 145, 146, 147, 148, 1052, 785, 149, 150, 151, + 152, 1053, 1054, 155, 0, 156, 157, 158, 159, 786, + 0, 787, 0, 1055, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 1059, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 1060, 221, 222, 223, 224, 225, 788, 1061, + 227, 0, 228, 229, 1062, 231, 0, 232, 0, 233, + 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, + 0, 1063, 1064, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, + 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 1068, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 1069, 321, 1070, + 323, 324, 325, 326, 1071, 327, 328, 329, 330, 1072, + 790, 332, 1073, 334, 335, 336, 0, 337, 338, 0, + 0, 1074, 340, 341, 0, 0, 342, 343, 344, 345, + 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 1075, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 399, 400, 401, 402, 1076, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 426, 427, 428, 1077, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, + 451, 452, 453, 454, 0, 455, 1078, 1079, 0, 0, + 458, 459, 796, 461, 797, 1080, 463, 464, 798, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 1081, 0, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 1082, 0, + 0, 0, 0, 0, 0, 1083, 2271, 1085, 0, 0, + 0, 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, + 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, + 1046, 1047, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 1048, 0, 0, 128, 129, 130, 0, 131, 132, 133, + 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, + 143, 144, 145, 146, 147, 148, 1052, 785, 149, 150, + 151, 152, 1053, 1054, 155, 0, 156, 157, 158, 159, + 786, 0, 787, 0, 1055, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 1059, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 1060, 221, 222, 223, 224, 225, 788, + 1061, 227, 0, 228, 229, 1062, 231, 0, 232, 0, + 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, + 241, 0, 1063, 1064, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 266, + 267, 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, + 0, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 1068, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 1069, 321, + 1070, 323, 324, 325, 326, 1071, 327, 328, 329, 330, + 1072, 790, 332, 1073, 334, 335, 336, 0, 337, 338, + 0, 0, 1074, 340, 341, 0, 0, 342, 343, 344, + 345, 346, 347, 792, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 793, 363, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 1075, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 399, 400, 401, 402, 1076, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 426, 427, 428, 1077, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 795, 0, 0, 446, 447, 0, 448, 449, + 450, 451, 452, 453, 454, 0, 455, 1078, 1079, 0, + 0, 458, 459, 796, 461, 797, 1080, 463, 464, 798, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 1081, 0, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 1082, + 0, 0, 0, 0, 0, 0, 1083, 1084, 1085, 0, + 0, 0, 0, 1086, 0, 2483, 0, 0, 0, 0, + 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, + 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, + 0, 1048, 0, 0, 128, 129, 130, 0, 131, 132, + 133, 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, + 0, 143, 144, 145, 146, 147, 148, 1052, 785, 149, + 150, 151, 152, 1053, 1054, 155, 0, 156, 157, 158, + 159, 786, 0, 787, 0, 1055, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 1056, 190, 191, 1057, 193, 1058, + 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, + 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, + 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, + 216, 217, 218, 219, 1060, 221, 222, 223, 224, 225, + 788, 1061, 227, 0, 228, 229, 1062, 231, 0, 232, + 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, + 0, 241, 0, 1063, 1064, 244, 245, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, + 266, 267, 268, 269, 270, 271, 272, 1065, 1066, 0, + 1067, 0, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 0, 0, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 1068, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 1069, + 321, 1070, 323, 324, 325, 326, 1071, 327, 328, 329, + 330, 1072, 790, 332, 1073, 334, 335, 336, 0, 337, + 338, 0, 0, 1074, 340, 341, 0, 0, 342, 343, + 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, + 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, + 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, + 378, 1075, 380, 381, 382, 383, 0, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 397, 398, 399, 400, 401, 402, 1076, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 0, 426, 427, 428, 1077, 430, 0, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 795, 0, 0, 446, 447, 0, 448, + 449, 450, 451, 452, 453, 454, 0, 455, 1078, 1079, + 0, 0, 458, 459, 796, 461, 797, 1080, 463, 464, + 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, + 481, 482, 483, 1081, 0, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 1082, 0, 0, 0, 0, 0, 0, 1083, 3066, 1085, + 0, 0, 0, 0, 1086, 0, 1087, 0, 0, 0, + 0, 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, + 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 1048, 0, 0, 128, 129, 130, 0, 131, + 132, 133, 134, 135, 136, 137, 138, 1049, 140, 1050, + 1051, 0, 143, 144, 145, 146, 147, 148, 1052, 785, + 149, 150, 151, 152, 1053, 1054, 155, 0, 156, 157, + 158, 159, 786, 0, 787, 0, 1055, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 178, 179, 3013, 181, 182, 183, + 184, 185, 186, 187, 188, 1056, 190, 191, 1057, 193, + 1058, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 1060, 221, 222, 223, 224, + 225, 788, 1061, 227, 0, 228, 229, 1062, 231, 0, + 232, 0, 233, 234, 0, 235, 236, 237, 238, 239, + 240, 0, 241, 0, 3014, 1064, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 266, 267, 268, 269, 270, 271, 272, 1065, 1066, + 0, 1067, 0, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1068, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, 328, + 329, 330, 1072, 790, 332, 1073, 334, 335, 336, 0, + 337, 338, 0, 0, 1074, 340, 341, 0, 0, 342, + 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1075, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 399, 400, 401, 3015, 1076, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 426, 427, 428, 1077, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, + 448, 449, 450, 451, 452, 453, 454, 0, 455, 1078, + 1079, 0, 0, 458, 459, 796, 461, 797, 1080, 463, + 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 1081, 0, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1082, 0, 0, 0, 0, 0, 0, 1083, 1084, + 1085, 0, 0, 0, 0, 1086, 0, 3016, 0, 0, + 0, 0, 1088, 1089, 0, 1090, 1091, 116, 1042, 815, + 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, + 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, + 0, 0, 0, 1048, 0, 0, 128, 129, 130, 0, + 131, 132, 133, 134, 135, 136, 137, 3474, 1049, 140, + 1050, 1051, 0, 143, 144, 145, 146, 147, 148, 1052, + 785, 149, 150, 151, 152, 1053, 1054, 155, 0, 156, + 157, 158, 159, 786, 0, 787, 0, 1055, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 0, 178, 179, 180, 3475, 182, + 183, 184, 185, 186, 187, 188, 1056, 190, 191, 1057, + 193, 1058, 194, 0, 195, 196, 197, 198, 199, 200, + 0, 0, 201, 202, 203, 204, 0, 0, 205, 206, + 1059, 208, 209, 0, 210, 211, 212, 0, 213, 214, + 215, 0, 216, 217, 218, 219, 1060, 221, 222, 223, + 224, 225, 788, 1061, 227, 0, 228, 229, 1062, 231, + 0, 232, 0, 233, 234, 0, 235, 236, 237, 238, + 239, 240, 0, 241, 0, 1063, 1064, 244, 245, 0, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, + 0, 265, 266, 267, 268, 269, 270, 271, 272, 1065, + 1066, 0, 1067, 0, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 0, 0, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, + 1068, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, 327, + 328, 329, 330, 1072, 790, 332, 1073, 334, 335, 336, + 0, 337, 338, 0, 0, 1074, 340, 341, 0, 0, + 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 0, 0, + 0, 0, 360, 361, 793, 363, 364, 365, 366, 367, + 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, + 376, 377, 378, 1075, 380, 381, 382, 383, 0, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 397, 398, 399, 400, 401, 402, 1076, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 0, 0, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 0, 426, 427, 428, 1077, 430, + 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 795, 0, 0, 446, 447, + 0, 448, 449, 450, 451, 452, 453, 454, 0, 455, + 1078, 1079, 0, 0, 458, 459, 796, 461, 797, 1080, + 463, 464, 798, 466, 467, 3476, 469, 470, 0, 0, + 471, 472, 473, 0, 474, 475, 476, 477, 0, 478, + 479, 480, 481, 482, 483, 1081, 0, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, + 0, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 1082, 0, 0, 0, 0, 0, 0, 1083, + 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, 0, + 0, 0, 0, 1088, 1089, 0, 1090, 1091, 116, 1042, + 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 1048, 0, 0, 128, 129, 130, + 0, 131, 132, 133, 134, 135, 136, 137, 138, 1049, + 140, 1050, 1051, 0, 143, 144, 145, 146, 147, 148, + 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, 0, + 156, 157, 158, 159, 786, 0, 787, 0, 1055, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 178, 179, 180, 3475, + 182, 183, 184, 185, 186, 187, 188, 1056, 190, 191, + 1057, 193, 1058, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 1059, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 1060, 221, 222, + 223, 224, 225, 788, 1061, 227, 0, 228, 229, 1062, + 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, + 238, 239, 240, 0, 241, 0, 1063, 1064, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, + 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 1068, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 1069, 321, 1070, 323, 324, 325, 326, 1071, + 327, 328, 329, 330, 1072, 790, 332, 1073, 334, 335, + 336, 0, 337, 338, 0, 0, 1074, 340, 341, 0, + 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, + 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 1075, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, + 1076, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 426, 427, 428, 1077, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, + 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, + 455, 1078, 1079, 0, 0, 458, 459, 796, 461, 797, + 1080, 463, 464, 798, 466, 467, 3476, 469, 470, 0, + 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 483, 1081, 0, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 1082, 0, 0, 0, 0, 0, 0, + 1083, 1084, 1085, 0, 0, 0, 0, 1086, 0, 1087, + 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, 116, + 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 1048, 0, 0, 128, 129, + 130, 0, 131, 132, 133, 134, 135, 136, 137, 138, + 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, 147, + 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, 155, + 0, 156, 157, 158, 159, 786, 0, 787, 0, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 1056, 190, + 191, 1057, 193, 0, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 1059, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 1060, 221, + 222, 223, 224, 225, 788, 1061, 227, 0, 228, 229, + 1062, 231, 0, 232, 0, 233, 234, 0, 235, 236, + 237, 238, 239, 240, 0, 241, 0, 1063, 1064, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 266, 267, 268, 269, 270, 271, + 272, 1065, 1066, 0, 1067, 0, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 288, 289, 290, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 1068, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 1069, 321, 1070, 323, 324, 325, 326, + 0, 327, 328, 329, 330, 1072, 790, 332, 1073, 334, + 335, 336, 0, 337, 338, 0, 0, 1074, 340, 341, + 0, 0, 342, 343, 344, 345, 346, 347, 792, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 793, 363, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 1075, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 399, 400, 401, + 402, 1076, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 426, 427, 428, + 1077, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 795, 0, 0, + 446, 447, 0, 448, 449, 450, 451, 452, 453, 454, + 0, 455, 1078, 1079, 0, 0, 458, 459, 796, 461, + 797, 1080, 463, 464, 798, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 1081, 0, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 0, 0, 0, 0, 0, 0, + 0, 1409, 1410, 0, 0, 0, 0, 0, 1086, 0, + 1087, 0, 0, 0, 0, 1088, 1089, 0, 1090, 1091, + 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 0, 0, 1048, 0, 0, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + -2044, 1049, 140, 1050, 1051, 0, 143, 144, 145, 146, + 147, 148, 1052, 785, 149, 150, 151, 152, 1053, 1054, + 155, 0, 156, 157, 158, 159, 786, 0, 787, 0, + 1055, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 178, 179, + 180, 3475, 182, 183, 184, 185, 186, 187, 188, 1056, + 190, 191, 1057, 193, 1058, 194, 0, 195, 196, 197, + 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, + 0, 205, 206, 1059, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 1060, + 221, 222, 223, 224, 225, 788, 1061, 227, 0, 228, + 229, 1062, 231, 0, 232, 0, 233, 234, 0, 235, + 236, 237, 238, -2044, 240, 0, 241, 0, 1063, 1064, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + -2044, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, + 271, 272, 1065, 1066, 0, 1067, 0, 276, 0, 0, + 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 288, 289, -2044, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 1068, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 1069, 321, 1070, 323, 324, 325, + 326, 0, 327, 328, 0, 330, 1072, 790, 332, 1073, + 334, 335, 336, 0, 337, 338, 0, 0, 1074, 340, + 341, 0, 0, 342, 343, 344, 345, 346, 347, 792, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 0, 0, 0, 0, 360, 361, 793, 363, 364, + 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 1075, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 399, 400, + 401, 402, 1076, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 0, -2044, 427, + 428, 1077, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 795, 0, + 0, 446, 447, 0, 448, 449, 450, 451, 452, 453, + 454, 0, 455, 1078, 1079, 0, 0, 458, 459, 796, + 461, 797, 1080, 463, 464, 798, 466, 467, 3476, 469, + 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 483, 1081, 0, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, -2044, 0, 0, 0, 0, + 0, 0, 1083, 1084, 1085, 0, 0, 0, 0, 1086, + 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, 1090, + 1091, 116, 1042, 815, 1043, 1044, 0, 1046, 1047, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 1048, 0, 0, + 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, + 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, 145, + 146, 147, 148, 1052, 785, 149, 150, 151, 152, 1053, + 1054, 155, 0, 156, 157, 158, 159, 786, 0, 787, + 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1056, 190, 191, 1057, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 1060, 221, 222, 223, 224, 225, 788, 1061, 227, 0, + 228, 229, 1062, 231, 0, 232, 0, 233, 234, 0, + 235, 236, 237, 238, 239, 240, 0, 241, 0, 1063, + 1064, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, + 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 1068, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1069, 321, 1070, 323, 324, + 325, 326, 0, 327, 328, 329, 330, 1072, 790, 332, + 1073, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, + 792, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 793, 363, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1075, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, + 400, 401, 402, 2174, 2175, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, + 427, 428, 1077, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 795, + 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, + 453, 454, 0, 455, 1078, 1079, 0, 0, 458, 459, + 796, 461, 797, 1080, 463, 464, 798, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 1081, + 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 0, 0, 0, 0, + 0, 0, 0, 2176, 2177, 0, 0, 0, 0, 0, + 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, 0, + 1090, 1091, 116, 1042, 815, 1043, 1044, 1045, 1046, 1047, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, + 125, 126, 127, 0, 0, 0, 0, 0, 1048, 0, + 0, 128, 129, 130, 0, 131, 132, 133, 134, 135, + 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, 144, + 145, 146, 147, 148, 1052, 785, 149, 150, 151, 152, + 1053, 1054, 155, 0, 156, 157, 158, 159, 786, 0, + 787, 0, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 1056, 190, 191, 1057, 193, 0, 194, 0, 195, + 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, + 204, 0, 0, 205, 206, 1059, 208, 209, 0, 210, + 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, + 219, 1060, 221, 222, 223, 224, 225, 788, 1061, 227, + 0, 228, 229, 1062, 231, 0, 232, 0, 233, 234, + 0, 235, 236, 237, 238, 239, 240, 0, 241, 0, + 1063, 1064, 244, 245, 0, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 0, 258, 259, + 260, 261, 262, 263, 264, 0, 265, 266, 267, 268, + 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, 276, + 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 0, 0, 287, 288, 289, 290, 0, 291, 292, 293, + 294, 295, 296, 297, 298, 1068, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 1069, 321, 1070, 323, + 324, 325, 326, 0, 327, 328, 329, 330, 1072, 790, + 332, 1073, 334, 335, 336, 0, 337, 338, 0, 0, + 1074, 340, 341, 0, 0, 342, 343, 344, 345, 346, + 347, 792, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 0, 0, 0, 0, 360, 361, 793, + 363, 364, 365, 366, 367, 368, 369, 0, 370, 371, + 372, 373, 374, 375, 0, 376, 377, 378, 1075, 380, + 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, + 399, 400, 401, 402, 1076, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 0, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 0, + 426, 427, 428, 1077, 430, 0, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 795, 0, 0, 446, 447, 0, 448, 449, 450, 451, + 452, 453, 454, 0, 455, 1078, 1079, 0, 0, 458, + 459, 796, 461, 797, 1080, 463, 464, 798, 466, 467, + 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 0, 478, 479, 480, 481, 482, 483, + 1081, 0, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 0, 0, 0, + 0, 0, 0, 0, 1409, 1410, 0, 0, 0, 0, + 0, 1086, 0, 1087, 0, 0, 0, 0, 1088, 1089, + 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 0, 1046, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 125, 126, 127, 0, 0, 0, 0, 0, 1048, + 0, 0, 128, 129, 130, 0, 131, 132, 133, 134, + 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, 143, + 144, 145, 146, 147, 148, 1052, 785, 149, 150, 151, + 152, 1053, 1054, 155, 0, 156, 157, 158, 159, 786, + 0, 787, 0, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 1056, 190, 191, 1057, 193, 0, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 1059, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 1060, 221, 222, 223, 224, 225, 788, 1061, + 227, 0, 228, 229, 1062, 231, 0, 232, 0, 233, + 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, + 3033, 1063, 1064, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, -717, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, + 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, 0, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 1068, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 1069, 321, 1070, + 323, 324, 325, 326, 0, 327, 328, 329, 330, 1072, + 790, 332, 1073, 334, 335, 336, 0, 337, 338, 0, + 0, 339, 340, 341, 0, 0, 342, 343, 344, 345, + 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 1075, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 426, 427, 428, 1077, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, + 451, 452, 453, 454, 0, 455, 1078, 1079, 0, 0, + 458, 459, 796, 461, 797, 1080, 463, 464, 798, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 1081, 0, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1086, 0, 2726, 0, 0, 0, 0, 1088, + 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, 0, + 1046, 1047, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 1048, 0, 0, 128, 129, 130, 0, 131, 132, 133, + 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, 0, + 143, 144, 145, 146, 147, 148, 1052, 785, 149, 150, + 151, 152, 1053, 1054, 155, 0, 156, 157, 158, 159, + 786, 0, 787, 0, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 1056, 190, 191, 1057, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 1059, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 1060, 221, 222, 223, 224, 225, 788, + 1061, 227, 0, 228, 229, 1062, 231, 0, 232, 0, + 233, 234, 0, 235, 236, 237, 238, 239, 240, 0, + 241, 0, 1063, 1064, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 266, + 267, 268, 269, 270, 271, 272, 1065, 1066, 0, 1067, + 0, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 288, 289, 290, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 1068, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 1069, 321, + 1070, 323, 324, 325, 326, 0, 327, 328, 329, 330, + 1072, 790, 332, 1073, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 345, 346, 347, 792, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 793, 363, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 1075, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 426, 427, 428, 1077, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 795, 0, 0, 446, 447, 0, 448, 449, + 450, 451, 452, 453, 454, 0, 455, 1078, 1079, 0, + 0, 458, 459, 796, 461, 797, 1080, 463, 464, 798, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 1081, 0, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1086, 0, 2726, 0, 0, 0, 0, + 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, 1044, + 0, 1046, 1047, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, + 0, 1048, 0, 0, 128, 129, 130, 0, 131, 132, + 133, 134, 135, 136, 137, 138, 1049, 140, 1050, 1051, + 0, 143, 144, 145, 146, 147, 148, 1052, 785, 149, + 150, 151, 152, 1053, 1054, 155, 0, 156, 157, 158, + 159, 786, 0, 787, 0, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 0, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 1056, 190, 191, 1057, 193, 0, + 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, + 201, 202, 203, 204, 0, 0, 205, 206, 1059, 208, + 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, + 216, 217, 218, 219, 1060, 221, 222, 223, 224, 225, + 788, 1061, 227, 0, 228, 229, 1062, 231, 0, 232, + 0, 233, 234, 0, 235, 236, 237, 238, 239, 240, + 0, 241, 0, 1063, 1064, 244, 245, 0, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, + 266, 267, 268, 269, 270, 271, 272, 1065, 1066, 0, + 1067, 0, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 0, 0, 287, 288, 289, 290, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 1068, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 1069, + 321, 1070, 323, 324, 325, 326, 0, 327, 328, 329, + 330, 1072, 790, 332, 1073, 334, 335, 336, 0, 337, + 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, + 344, 345, 346, 347, 792, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, + 360, 361, 793, 363, 364, 365, 366, 367, 368, 369, + 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, + 378, 1075, 380, 381, 382, 383, 0, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 397, 398, 399, 400, 401, 402, 1076, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 0, 426, 427, 428, 1077, 430, 0, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 795, 0, 0, 446, 447, 0, 448, + 449, 450, 451, 452, 453, 454, 0, 455, 1078, 1079, + 0, 0, 458, 459, 796, 461, 797, 1080, 463, 464, + 798, 466, 467, 468, 469, 470, 0, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, + 481, 482, 483, 1081, 0, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1086, 0, 1087, 0, 0, 0, + 0, 1088, 1089, 0, 1090, 1091, 116, 1042, 815, 1043, + 1044, 1045, 1046, 1047, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 1048, 0, 0, 128, 129, 130, 0, 131, + 132, 133, 134, 135, 136, 137, 0, 1049, 140, 1050, + 1051, 0, 143, 144, 145, 146, 147, 148, 1052, 785, + 149, 150, 151, 152, 1053, 1054, 155, 0, 156, 157, + 158, 159, 786, 0, 787, 0, 1055, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1056, 190, 191, 1057, 193, + 1058, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 0, 215, + 0, 216, 217, 218, 219, 1060, 221, 222, 223, 224, + 225, 788, 1061, 227, 0, 228, 229, 1062, 231, 0, + 232, 0, 233, 234, 0, 235, 236, 237, 238, 0, + 240, 0, 241, 0, 1063, 1064, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 266, 267, 268, 269, 270, 271, 272, 1065, 1066, + 0, 1067, 0, 276, 0, 0, 279, 280, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 288, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1068, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1069, 321, 1070, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 1072, 790, 332, 1073, 334, 335, 336, 0, + 337, 338, 0, 0, 1074, 340, 341, 0, 0, 342, + 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1075, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 399, 400, 401, 402, 1076, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 1077, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, + 448, 449, 450, 451, 452, 453, 454, 0, 455, 1078, + 1079, 0, 0, 458, 459, 796, 461, 797, 1080, 463, + 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 1081, 0, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 0, 0, 0, 0, 0, 0, 0, 1083, 1084, + 1085, 0, 964, 1340, 815, 1086, 0, 1087, 1046, 0, + 0, 0, 1088, 1089, 0, 1090, 1091, 0, 0, 0, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, + 125, 126, 127, 0, 0, 0, 560, 0, 0, 0, + 0, 565, 129, 130, 0, 131, 132, 133, 567, 135, + 136, 137, 568, 569, 570, 571, 572, 0, 143, 144, + 145, 146, 147, 148, 0, 0, 149, 150, 151, 152, + 576, 577, 155, 0, 156, 157, 158, 159, 579, 0, + 581, 0, 583, 163, 164, 165, 166, 167, 584, 169, + 170, 171, 0, 172, 173, 174, 175, 176, 177, 0, + 587, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 589, 190, 191, 590, 193, 0, 194, 0, 195, + 196, 197, 198, 199, 200, 0, 0, 201, 202, 203, + 204, 0, 0, 205, 206, 207, 208, 209, 0, 210, + 211, 212, 0, 213, 214, 215, 0, 216, 217, 218, + 219, 600, 221, 222, 223, 224, 225, 601, 1341, 227, + 0, 228, 229, 604, 231, 0, 232, 0, 233, 607, + 0, 609, 236, 237, 610, 611, 240, 0, 241, 0, + 614, 615, 244, 245, 0, 246, 247, 248, 249, 250, + 251, 252, 617, 254, 255, 256, 257, 0, 258, 259, + 260, 261, 262, 263, 264, 0, 265, 620, 621, 268, + 269, 270, 271, 272, 622, 623, 0, 625, 0, 276, + 627, 628, 279, 629, 281, 282, 283, 284, 285, 286, + 0, 0, 287, 632, 289, 633, 0, 291, 292, 293, + 294, 295, 296, 297, 298, 635, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 636, 637, 638, 323, + 324, 325, 639, 0, 327, 328, 641, 330, 0, 643, + 332, 644, 334, 335, 336, 0, 337, 338, 1342, 0, + 339, 340, 341, 0, 0, 342, 343, 650, 651, 346, + 652, 653, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 0, 0, 0, 0, 360, 361, 658, + 659, 364, 365, 660, 367, 368, 369, 0, 370, 371, + 372, 373, 374, 375, 0, 376, 377, 378, 663, 380, + 381, 382, 383, 0, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 0, 397, 398, + 666, 400, 401, 402, 667, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 0, 669, + 417, 418, 419, 420, 421, 422, 670, 424, 425, 0, + 672, 427, 428, 673, 430, 0, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 675, 444, + 676, 0, 0, 446, 447, 0, 448, 680, 450, 451, + 452, 453, 454, 0, 455, 682, 683, 0, 0, 458, + 459, 686, 461, 687, 1343, 463, 464, 689, 466, 467, + 468, 469, 470, 0, 0, 471, 472, 473, 0, 474, + 475, 476, 477, 0, 478, 479, 480, 481, 482, 694, + 695, 0, 485, 697, 487, 488, 489, 490, 491, 492, + 493, 0, 0, 494, 0, 0, 495, 496, 497, 498, + 499, 500, 702, 703, 704, 705, 706, 707, 708, 709, + 710, 711, 712, 512, 513, 514, 515, 0, 0, 0, + 0, 523, 0, 0, 1344, 1345, 2349, 0, 0, 0, + 0, 0, 0, 2350, 0, 0, 0, 0, 0, 1089, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 1000, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, -524, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, -524, + 228, 229, 230, 231, -524, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, -524, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, -524, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, -524, 337, 338, 0, 0, 339, + 340, 341, 0, -524, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, -524, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1158, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 964, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2436, 3217, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 3, 4, 0, 560, 0, 0, 0, 0, + 565, 129, 130, 0, 131, 132, 133, 567, 135, 136, + 137, 568, 569, 570, 571, 572, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 576, + 577, 155, 0, 156, 157, 158, 159, 579, 0, 581, + 0, 583, 163, 164, 165, 166, 167, 584, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 587, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 589, 190, 191, 590, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 14, 15, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 600, 221, 222, 223, 224, 225, 601, 0, 227, 0, + 228, 229, 604, 231, 0, 232, 0, 233, 607, 23, + 609, 236, 237, 610, 611, 240, 0, 241, 0, 614, + 615, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 617, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 620, 621, 268, 269, + 270, 271, 272, 622, 623, 0, 625, 0, 276, 627, + 628, 279, 629, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 632, 289, 633, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 635, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 636, 637, 638, 323, 324, + 325, 639, 0, 327, 328, 641, 330, 0, 643, 332, + 644, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 650, 651, 346, 652, + 653, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 27, 28, 29, 0, 360, 361, 658, 659, + 364, 365, 660, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 663, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 666, + 400, 401, 402, 667, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 34, 669, 417, + 418, 419, 420, 421, 422, 670, 424, 425, 36, 672, + 427, 428, 673, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 675, 444, 676, + 38, 0, 446, 447, 39, 448, 680, 450, 451, 452, + 453, 454, 0, 455, 682, 683, 0, 0, 458, 459, + 686, 461, 687, 0, 463, 464, 689, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 41, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 965, 695, + 0, 485, 697, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 45, 495, 496, 497, 498, 499, + 500, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 512, 513, 514, 515, 0, 116, 46, 549, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 47, 0, 0, 0, 117, 118, 119, 120, + 121, 122, 123, 124, 0, 125, 126, 127, 0, 0, + 0, 0, 0, 0, 0, 0, 128, 129, 130, 0, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 0, 143, 144, 145, 146, 147, 148, 0, + 785, 149, 150, 151, 152, 153, 154, 155, 0, 156, + 157, 158, 159, 786, 0, 787, 0, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 0, 172, 173, + 174, 175, 176, 177, 0, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 0, 194, 0, 195, 196, 197, 198, 199, 200, + 14, 15, 201, 202, 203, 204, 0, 0, 205, 206, + 207, 208, 209, 0, 210, 211, 212, 0, 213, 214, + 215, 0, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 788, 0, 227, 0, 228, 229, 230, 231, + 0, 232, 0, 233, 234, 23, 235, 236, 237, 238, + 239, 240, 0, 241, 0, 242, 243, 244, 245, 0, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 0, 258, 259, 260, 261, 262, 263, 264, + 0, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 0, 275, 0, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 789, 0, 287, 288, 289, + 290, 0, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 0, 327, + 328, 329, 330, 0, 790, 332, 333, 334, 335, 336, + 0, 337, 338, 0, 791, 339, 340, 341, 0, 0, + 342, 343, 344, 345, 346, 347, 792, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 27, 28, + 29, 0, 360, 361, 793, 363, 364, 365, 366, 367, + 368, 369, 0, 370, 371, 372, 373, 374, 375, 0, + 376, 377, 378, 379, 380, 381, 382, 383, 0, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 0, 397, 398, 399, 400, 401, 402, 403, + 794, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 34, 0, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 36, 426, 427, 428, 429, 430, + 0, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 795, 38, 0, 446, 447, + 39, 448, 449, 450, 451, 452, 453, 454, 0, 455, + 456, 457, 0, 0, 458, 459, 796, 461, 797, 0, + 463, 464, 798, 466, 467, 468, 469, 470, 0, 0, + 471, 472, 473, 41, 474, 475, 476, 477, 0, 478, + 479, 480, 481, 482, 799, 484, 0, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 0, 0, 494, 0, + 45, 495, 496, 497, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 514, 515, 0, 116, 46, 549, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 125, 126, 127, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 129, 130, 0, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 0, 143, + 144, 145, 146, 147, 148, 0, 785, 149, 150, 151, + 152, 153, 154, 155, 0, 156, 157, 158, 159, 786, + 0, 787, 0, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 0, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 207, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 788, 0, + 227, 0, 228, 229, 230, 231, 0, 232, 0, 233, + 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, + 0, 242, 243, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 0, 275, 0, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 789, 0, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 0, 327, 328, 329, 330, 0, + 790, 332, 333, 334, 335, 336, 0, 337, 338, 0, + 791, 339, 340, 341, 0, 0, 342, 343, 344, 345, + 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 379, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 399, 400, 401, 402, 403, 794, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 426, 427, 428, 429, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, + 451, 452, 453, 454, 0, 455, 456, 457, 0, 0, + 458, 459, 796, 461, 797, 0, 463, 464, 798, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 799, 484, 0, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 800, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 0, 0, 0, 128, 129, 130, + 0, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 0, 143, 144, 145, 146, 147, 148, + 0, 785, 149, 150, 151, 152, 153, 154, 155, 0, + 156, 157, 158, 159, 786, 0, 787, 0, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 0, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 207, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 788, 0, 227, 0, 228, 229, 230, + 231, 0, 232, 0, 233, 234, 0, 235, 236, 237, + 238, 239, 240, 0, 241, 0, 242, 243, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 0, 275, 0, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 288, + 289, 290, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 0, + 327, 328, 329, 330, 0, 790, 332, 333, 334, 335, + 336, 0, 337, 338, 0, 0, 339, 340, 341, 0, + 0, 342, 343, 344, 345, 346, 347, 792, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, + 0, 0, 0, 360, 361, 793, 363, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 379, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 399, 400, 401, 402, + 403, 794, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 0, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 426, 427, 428, 429, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 795, 0, 0, 446, + 447, 0, 448, 449, 450, 451, 452, 453, 454, 0, + 455, 456, 457, 0, 0, 458, 459, 796, 461, 797, + 0, 463, 464, 798, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 0, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 483, 484, 0, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 0, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 0, 125, 126, 127, 0, 0, 0, 0, 0, 0, + 0, 0, 128, 129, 130, 0, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 0, 143, + 144, 145, 146, 147, 148, 0, 785, 149, 150, 151, + 152, 153, 154, 155, 0, 156, 157, 158, 159, 786, + 0, 787, 0, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 0, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 207, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 788, 0, + 227, 0, 228, 229, 230, 231, 0, 232, 0, 233, + 234, 0, 235, 236, 237, 238, 239, 240, 0, 241, + 0, 242, 243, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 0, 275, 0, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 288, 289, 290, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 0, 327, 328, 329, 330, 0, + 790, 332, 333, 334, 335, 336, 0, 337, 338, 0, + 0, 339, 340, 341, 0, 0, 342, 343, 344, 345, + 346, 347, 792, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 0, 0, 0, 0, 360, 361, + 793, 363, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 379, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 0, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 426, 427, 428, 429, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 795, 0, 0, 446, 447, 0, 448, 449, 450, + 451, 452, 453, 454, 0, 455, 456, 457, 0, 0, + 458, 459, 796, 461, 797, 0, 463, 464, 798, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 0, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 484, 0, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 0, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 523, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3305, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, + 0, 131, 132, 133, 0, 135, 136, 137, 138, 139, + 0, 141, 142, 0, 143, 144, 145, 146, 147, 148, + 0, 0, 149, 150, 151, 152, 153, 154, 155, 0, + 156, 157, 158, 159, 160, 0, 0, 0, 162, 163, + 164, 165, 166, 167, 0, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 0, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 0, 194, 0, 195, 196, 197, 198, 199, + 200, 14, 15, 201, 202, 203, 204, 0, 0, 205, + 206, 207, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 0, 227, 0, 228, 229, 230, + 231, 0, 232, 0, 233, 0, 23, 0, 236, 237, + 524, 0, 240, 0, 241, 0, 242, 243, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 0, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 0, 267, 268, 269, 270, 271, 272, + 273, 274, 0, 275, 0, 276, 0, 0, 279, 0, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 0, + 289, 0, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 525, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 0, 322, 323, 324, 325, 326, 0, + 327, 328, 0, 330, 0, 331, 332, 333, 334, 335, + 336, 0, 337, 338, 0, 0, 339, 340, 341, 0, + 0, 342, 343, 344, 0, 346, 0, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 27, + 28, 29, 0, 360, 361, 362, 0, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 379, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 0, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 34, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 36, 0, 427, 428, 429, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 526, 444, 445, 38, 0, 446, + 447, 39, 448, 0, 450, 451, 452, 453, 454, 0, + 455, 456, 457, 0, 0, 458, 459, 460, 461, 462, + 0, 463, 464, 465, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 41, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 799, 484, 0, 485, 0, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 45, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 523, 0, 46, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 886, 125, 126, 127, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 129, 130, 0, 131, 132, 133, 0, + 135, 136, 137, 138, 139, 0, 141, 142, 0, 143, + 144, 145, 146, 147, 148, 0, 0, 149, 150, 151, + 152, 153, 154, 155, 0, 156, 157, 158, 159, 160, + 0, 0, 0, 162, 163, 164, 165, 166, 167, 0, + 169, 170, 171, 0, 172, 173, 174, 175, 176, 177, + 0, 0, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 0, 194, 0, + 195, 196, 197, 198, 199, 200, 0, 0, 201, 202, + 203, 204, 0, 0, 205, 206, 207, 208, 209, 0, + 210, 211, 212, 0, 213, 214, 215, 0, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 0, + 227, 0, 228, 229, 230, 231, 0, 232, 0, 233, + 0, 23, 0, 236, 237, 524, 0, 240, 0, 241, + 0, 242, 243, 244, 245, 0, 246, 247, 248, 249, + 250, 251, 252, 0, 254, 255, 256, 257, 0, 258, + 259, 260, 261, 262, 263, 264, 0, 265, 0, 267, + 268, 269, 270, 271, 272, 273, 274, 0, 275, 0, + 276, 0, 0, 279, 0, 281, 282, 283, 284, 285, + 286, 0, 0, 287, 0, 289, 0, 0, 291, 292, + 293, 294, 295, 296, 297, 298, 525, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 0, 322, + 323, 324, 325, 326, 0, 327, 328, 0, 330, 0, + 331, 332, 333, 334, 335, 336, 0, 337, 338, 0, + 0, 339, 340, 341, 0, 0, 342, 343, 344, 0, + 346, 0, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 27, 28, 29, 0, 360, 361, + 362, 0, 364, 365, 366, 367, 368, 369, 0, 370, + 371, 372, 373, 374, 375, 0, 376, 377, 378, 379, + 380, 381, 382, 383, 0, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 0, 397, + 398, 0, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 34, + 0, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 0, 0, 427, 428, 429, 430, 0, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 526, + 444, 445, 0, 0, 446, 447, 39, 448, 0, 450, + 451, 452, 453, 454, 0, 455, 887, 457, 0, 0, + 888, 459, 460, 461, 462, 0, 463, 464, 465, 466, + 467, 468, 469, 470, 0, 0, 471, 472, 473, 41, + 474, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 799, 484, 0, 485, 0, 487, 488, 489, 490, 491, + 492, 493, 0, 0, 494, 0, 45, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 523, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 0, 125, 126, 127, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, + 0, 131, 132, 133, 0, 135, 136, 137, 138, 139, + 0, 141, 142, 0, 143, 144, 145, 146, 147, 148, + 0, 0, 149, 150, 151, 152, 153, 154, 155, 0, + 156, 157, 158, 159, 160, 0, 0, 0, 162, 163, + 164, 165, 166, 167, 0, 169, 170, 171, 0, 172, + 173, 174, 175, 176, 177, 0, 0, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 0, 194, 0, 195, 196, 197, 198, 199, + 200, 0, 0, 201, 202, 203, 204, 0, 0, 205, + 206, 207, 208, 209, 0, 210, 211, 212, 0, 213, + 214, 215, 0, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 0, 227, 0, 228, 229, 230, + 231, 0, 232, 0, 233, 0, 23, 0, 236, 237, + 524, 0, 240, 0, 241, 0, 242, 243, 244, 245, + 0, 246, 247, 248, 249, 250, 251, 252, 0, 254, + 255, 256, 257, 0, 258, 259, 260, 261, 262, 263, + 264, 0, 265, 0, 267, 268, 269, 270, 271, 272, + 273, 274, 0, 275, 0, 276, 0, 0, 279, 0, + 281, 282, 283, 284, 285, 286, 0, 0, 287, 0, + 289, 0, 0, 291, 292, 293, 294, 295, 296, 297, + 298, 525, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 0, 322, 323, 324, 325, 326, 0, + 327, 328, 0, 330, 0, 331, 332, 333, 334, 335, + 336, 0, 337, 338, 0, 0, 339, 340, 341, 0, + 0, 342, 343, 344, 0, 346, 0, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 27, + 28, 29, 0, 360, 361, 362, 0, 364, 365, 366, + 367, 368, 369, 0, 370, 371, 372, 373, 374, 375, + 0, 376, 377, 378, 379, 380, 381, 382, 383, 0, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 0, 397, 398, 0, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 34, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 0, 0, 427, 428, 429, + 430, 0, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 526, 444, 445, 0, 0, 446, + 447, 39, 448, 0, 450, 451, 452, 453, 454, 0, + 455, 456, 457, 0, 0, 458, 459, 460, 461, 462, + 0, 463, 464, 465, 466, 467, 468, 469, 470, 0, + 0, 471, 472, 473, 41, 474, 475, 476, 477, 0, + 478, 479, 480, 481, 482, 799, 484, 0, 485, 0, + 487, 488, 489, 490, 491, 492, 493, 0, 0, 494, + 0, 45, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 0, 523, 46, 549, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, + 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, + 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, + 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, + 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, + 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, + 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, + 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, + 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, + 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, + 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, + 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 523, + 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 985, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, + 130, 0, 131, 132, 133, 0, 135, 136, 137, 138, + 139, 0, 141, 142, 0, 143, 144, 145, 146, 147, + 148, 0, 0, 149, 150, 151, 152, 153, 154, 155, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 162, + 163, 164, 165, 166, 167, 0, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 0, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 0, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 0, 227, 0, 228, 229, + 230, 231, 0, 232, 0, 233, 0, 0, 0, 236, + 237, 524, 0, 240, 0, 241, 0, 242, 243, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 0, 267, 268, 269, 270, 271, + 272, 273, 274, 0, 275, 0, 276, 0, 0, 279, + 0, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 0, 289, 0, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 525, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 0, 322, 323, 324, 325, 326, + 0, 327, 328, 0, 330, 0, 331, 332, 333, 334, + 335, 336, 0, 337, 338, 0, 0, 339, 340, 341, + 0, 0, 342, 343, 344, 0, 346, 0, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 362, 0, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 379, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 0, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, + 429, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 526, 444, 445, 0, 0, + 446, 447, 0, 448, 0, 450, 451, 452, 453, 454, + 0, 455, 456, 457, 0, 0, 458, 459, 460, 461, + 462, 0, 463, 464, 465, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 484, 0, 485, + 0, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 523, 0, 549, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1463, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, + 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, + 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, + 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, + 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, + 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, + 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, + 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, + 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, + 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, + 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, + 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 523, + 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2200, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, + 130, 0, 131, 132, 133, 0, 135, 136, 137, 138, + 139, 0, 141, 142, 0, 143, 144, 145, 146, 147, + 148, 0, 0, 149, 150, 151, 152, 153, 154, 155, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 162, + 163, 164, 165, 166, 167, 0, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 0, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 0, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 0, 227, 0, 228, 229, + 230, 231, 0, 232, 0, 233, 0, 0, 0, 236, + 237, 524, 0, 240, 0, 241, 0, 242, 243, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 0, 267, 268, 269, 270, 271, + 272, 273, 274, 0, 275, 0, 276, 0, 0, 279, + 0, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 0, 289, 0, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 525, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 0, 322, 323, 324, 325, 326, + 0, 327, 328, 0, 330, 0, 331, 332, 333, 334, + 335, 336, 0, 337, 338, 0, 0, 339, 340, 341, + 0, 0, 342, 343, 344, 0, 346, 0, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 362, 0, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 379, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 0, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, + 429, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 526, 444, 445, 0, 0, + 446, 447, 0, 448, 0, 450, 451, 452, 453, 454, + 0, 455, 456, 457, 0, 0, 458, 459, 460, 461, + 462, 0, 463, 464, 465, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 484, 0, 485, + 0, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 523, 0, 549, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2436, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, + 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, + 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, + 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, + 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, + 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, + 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, + 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, + 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, + 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, + 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, + 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 523, + 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2567, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, + 130, 0, 131, 132, 133, 0, 135, 136, 137, 138, + 139, 0, 141, 142, 0, 143, 144, 145, 146, 147, + 148, 0, 0, 149, 150, 151, 152, 153, 154, 155, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 162, + 163, 164, 165, 166, 167, 0, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 0, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 0, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 0, 227, 0, 228, 229, + 230, 231, 0, 232, 0, 233, 0, 0, 0, 236, + 237, 524, 0, 240, 0, 241, 0, 242, 243, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 0, 267, 268, 269, 270, 271, + 272, 273, 274, 0, 275, 0, 276, 0, 0, 279, + 0, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 0, 289, 0, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 525, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 0, 322, 323, 324, 325, 326, + 0, 327, 328, 0, 330, 0, 331, 332, 333, 334, + 335, 336, 0, 337, 338, 0, 0, 339, 340, 341, + 0, 0, 342, 343, 344, 0, 346, 0, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 362, 0, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 379, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 0, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, + 429, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 526, 444, 445, 0, 0, + 446, 447, 0, 448, 0, 450, 451, 452, 453, 454, + 0, 455, 456, 457, 0, 0, 458, 459, 460, 461, + 462, 0, 463, 464, 465, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 484, 0, 485, + 0, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3212, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, + 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, + 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, + 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, + 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, + 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, + 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, + 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, + 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, + 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, + 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, + 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 523, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2057, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 0, 125, 126, 127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, + 130, 0, 131, 132, 133, 0, 135, 136, 137, 138, + 139, 0, 141, 142, 0, 143, 144, 145, 146, 147, + 148, 0, 0, 149, 150, 151, 152, 153, 154, 155, + 0, 156, 157, 158, 159, 160, 0, 0, 0, 162, + 163, 164, 165, 166, 167, 0, 169, 170, 171, 0, + 172, 173, 174, 175, 176, 177, 0, 0, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 0, 194, 0, 195, 196, 197, 198, + 199, 200, 0, 0, 201, 202, 203, 204, 0, 0, + 205, 206, 207, 208, 209, 0, 210, 211, 212, 0, + 213, 214, 215, 0, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 0, 227, 0, 228, 229, + 230, 231, 0, 232, 0, 233, 0, 0, 0, 236, + 237, 524, 0, 240, 0, 241, 0, 242, 243, 244, + 245, 0, 246, 247, 248, 249, 250, 251, 252, 0, + 254, 255, 256, 257, 0, 258, 259, 260, 261, 262, + 263, 264, 0, 265, 0, 267, 268, 269, 270, 271, + 272, 273, 274, 0, 275, 0, 276, 0, 0, 279, + 0, 281, 282, 283, 284, 285, 286, 0, 0, 287, + 0, 289, 0, 0, 291, 292, 293, 294, 295, 296, + 297, 298, 525, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 0, 322, 323, 324, 325, 326, + 0, 327, 328, 0, 330, 0, 331, 332, 333, 334, + 335, 336, 0, 337, 338, 0, 0, 339, 340, 341, + 0, 0, 342, 343, 344, 0, 346, 0, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 0, 0, 0, 0, 360, 361, 362, 0, 364, 365, + 366, 367, 368, 369, 0, 370, 371, 372, 373, 374, + 375, 0, 376, 377, 378, 379, 380, 381, 382, 383, + 0, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 0, 397, 398, 0, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 0, 0, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 0, 0, 427, 428, + 429, 430, 0, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 526, 444, 445, 0, 0, + 446, 447, 0, 448, 0, 450, 451, 452, 453, 454, + 0, 455, 456, 457, 0, 0, 458, 459, 460, 461, + 462, 0, 463, 464, 465, 466, 467, 468, 469, 470, + 0, 0, 471, 472, 473, 0, 474, 475, 476, 477, + 0, 478, 479, 480, 481, 482, 483, 484, 0, 485, + 0, 487, 488, 489, 490, 491, 492, 493, 0, 0, + 494, 0, 0, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2160, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 125, 126, 127, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 129, 130, 0, 131, 132, 133, + 0, 135, 136, 137, 138, 139, 0, 141, 142, 0, + 143, 144, 145, 146, 147, 148, 0, 0, 149, 150, + 151, 152, 153, 154, 155, 0, 156, 157, 158, 159, + 160, 0, 0, 0, 162, 163, 164, 165, 166, 167, + 0, 169, 170, 171, 0, 172, 173, 174, 175, 176, + 177, 0, 0, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 0, 194, + 0, 195, 196, 197, 198, 199, 200, 0, 0, 201, + 202, 203, 204, 0, 0, 205, 206, 207, 208, 209, + 0, 210, 211, 212, 0, 213, 214, 215, 0, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 0, 227, 0, 228, 229, 230, 231, 0, 232, 0, + 233, 0, 0, 0, 236, 237, 524, 0, 240, 0, + 241, 0, 242, 243, 244, 245, 0, 246, 247, 248, + 249, 250, 251, 252, 0, 254, 255, 256, 257, 0, + 258, 259, 260, 261, 262, 263, 264, 0, 265, 0, + 267, 268, 269, 270, 271, 272, 273, 274, 0, 275, + 0, 276, 0, 0, 279, 0, 281, 282, 283, 284, + 285, 286, 0, 0, 287, 0, 289, 0, 0, 291, + 292, 293, 294, 295, 296, 297, 298, 525, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, + 322, 323, 324, 325, 326, 0, 327, 328, 0, 330, + 0, 331, 332, 333, 334, 335, 336, 0, 337, 338, + 0, 0, 339, 340, 341, 0, 0, 342, 343, 344, + 0, 346, 0, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 0, 0, 0, 0, 360, + 361, 362, 0, 364, 365, 366, 367, 368, 369, 0, + 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, + 379, 380, 381, 382, 383, 0, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 0, + 397, 398, 0, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 0, 0, 427, 428, 429, 430, 0, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 526, 444, 445, 0, 0, 446, 447, 0, 448, 0, + 450, 451, 452, 453, 454, 0, 455, 456, 457, 0, + 0, 458, 459, 460, 461, 462, 0, 463, 464, 465, + 466, 467, 468, 469, 470, 0, 0, 471, 472, 473, + 0, 474, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 0, 485, 0, 487, 488, 489, 490, + 491, 492, 493, 0, 0, 494, 0, 0, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 0, + 2892, 1340, 815, 0, 0, 2033, 1046, 0, 0, 0, + 0, 0, 2034, 2035, 0, 3073, 2036, 2037, 2038, 117, + 118, 119, 120, 121, 122, 123, 124, 556, 125, 126, + 127, 557, 558, 559, 2893, 561, 562, 563, 564, 2894, + 129, 130, 566, 131, 132, 133, 2895, 135, 136, 137, + 0, 1479, 2896, 1481, 1482, 573, 143, 144, 145, 146, + 147, 148, 574, 575, 149, 150, 151, 152, 1483, 1484, + 155, 578, 156, 157, 158, 159, 0, 580, 2897, 582, + 2898, 163, 164, 165, 166, 167, 2899, 169, 170, 171, + 585, 172, 173, 174, 175, 176, 177, 586, 2900, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 1489, + 190, 191, 1490, 193, 591, 194, 592, 195, 196, 197, + 198, 199, 200, 593, 594, 201, 202, 203, 204, 595, + 596, 205, 206, 1059, 208, 209, 597, 210, 211, 212, + 598, 213, 214, 215, 599, 216, 217, 218, 219, 0, + 221, 222, 223, 224, 225, 0, 602, 227, 603, 228, + 229, 1491, 231, 605, 232, 606, 233, 2901, 608, 2902, + 236, 237, 2903, 2904, 240, 612, 241, 613, 0, 0, + 244, 245, 616, 246, 247, 248, 249, 250, 251, 252, + 2905, 254, 255, 256, 257, 618, 258, 259, 260, 261, + 262, 263, 264, 619, 265, 2906, 0, 268, 269, 270, + 271, 272, 1497, 1498, 624, 1499, 626, 276, 2907, 2908, + 279, 2909, 281, 282, 283, 284, 285, 286, 630, 631, + 287, 2910, 289, 2911, 634, 291, 292, 293, 294, 295, + 296, 297, 298, 2912, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 1506, 2913, 1508, 323, 324, 325, + 2914, 640, 327, 328, 2915, 330, 642, 0, 332, 1510, + 334, 335, 336, 645, 337, 338, 646, 647, 2916, 340, + 341, 648, 649, 342, 343, 0, 2917, 346, 2918, 0, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 654, 655, 656, 657, 360, 361, 0, 2919, 364, + 365, 0, 367, 368, 369, 661, 370, 371, 372, 373, + 374, 375, 662, 376, 377, 378, 1514, 380, 381, 382, + 383, 664, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 665, 397, 398, 2920, 400, + 401, 402, 1516, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 668, 2921, 417, 418, + 419, 420, 421, 422, 2922, 424, 425, 671, 2923, 427, + 428, 1520, 430, 674, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 2924, 444, 0, 677, + 678, 446, 447, 679, 448, 2925, 450, 451, 452, 453, + 454, 681, 455, 1523, 1524, 684, 685, 458, 459, 0, + 461, 0, 688, 463, 464, 2926, 466, 467, 468, 469, + 470, 2927, 691, 471, 472, 473, 692, 474, 475, 476, + 477, 693, 478, 479, 480, 481, 482, 0, 1527, 696, + 485, 2928, 487, 488, 489, 490, 491, 492, 493, 698, + 699, 494, 700, 701, 495, 496, 497, 498, 499, 500, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 512, 513, 514, 515, 0, 523, 0, 2039, 2040, + 2041, 2033, 2929, 2930, 2044, 2045, 2046, 2047, 2034, 2035, + 0, 0, 2036, 2037, 2038, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 0, 0, 0, 2039, 2040, 2041, 0, 2042, 2043, + 2044, 2045, 2046, 2047, 1610, 0, 0, 1611, 0, 0, + 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1619, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1621, 1610, 0, 0, 1611, 0, 0, 1622, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1619, 0, 0, 0, 0, 1623, 0, 0, 0, + 0, 1621, 1610, 0, 0, 1611, 0, 0, 1622, 1612, + 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1619, 0, 0, 0, 0, 1623, 0, 0, 0, 0, + 1621, 0, 0, 0, 0, 0, 0, 1622, 0, 1610, + 0, 0, 1611, 0, 0, 0, 1612, 1613, 1614, 1615, + 1616, 1617, 1618, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1623, 0, 0, 1619, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1621, 1610, 0, + 0, 1611, 1624, 0, 1622, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 0, 0, 0, 0, 0, 0, 1625, + 0, 0, 0, 0, 1626, 0, 1619, 0, 0, 0, + 0, 1623, 0, 0, 0, 0, 1621, 0, 0, 0, + 0, 1624, 0, 1622, 0, 0, 0, 1627, 1628, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1625, 0, + 0, 0, 1629, 1626, 0, 0, 0, 0, 0, 0, + 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1624, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1625, 0, 0, + 1630, 1629, 1626, 1631, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, + 1633, 0, 0, 0, 0, 1627, 1628, 1624, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1630, + 1629, 0, 1631, 0, 1625, 0, 0, 0, 0, 1626, + 0, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, + 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, + 0, 0, 1627, 1628, 0, 0, 0, 0, 1630, 0, + 0, 1631, 0, 1625, 0, 0, 0, 1629, 1626, 0, + 0, 0, 0, 0, 0, 1632, 0, 0, 1633, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 1634, 0, 0, + 0, 0, 0, 0, 0, 1630, 1629, 0, 1631, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1632, 0, 0, 1633, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1634, 0, 0, 0, + 0, 0, 0, 0, 1630, 0, 0, 1631, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1632, 0, 0, 1633, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1634, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1635, 0, 0, 1636, 1637, 1638, + 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, 0, + 0, 2838, 1634, 0, 0, 0, 0, 0, 1610, 0, + 0, 1611, 0, 0, 0, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 1635, 0, 0, 1636, 1637, 1638, 0, + 1639, 1640, 1641, 1642, 1643, 1644, 1619, 0, 0, 0, + 3065, 1634, 0, 0, 0, 0, 1621, 0, 0, 0, + 0, 0, 0, 1622, 0, 0, 0, 0, 0, 0, + 0, 0, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, + 1640, 1641, 1642, 1643, 1644, 0, 0, 0, 0, 3072, + 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1610, 0, 0, 1611, 0, 0, + 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 1635, + 0, 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, + 1643, 1644, 1619, 0, 0, 0, 3232, 0, 0, 0, + 0, 0, 1621, 1610, 0, 0, 1611, 0, 0, 1622, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 1619, 0, 0, 0, 3254, 1623, 0, 0, 0, + 0, 1621, 1610, 0, 0, 1611, 1624, 0, 1622, 1612, + 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, 0, + 0, 0, 0, 1625, 0, 0, 0, 0, 1626, 0, + 1619, 0, 0, 0, 0, 1623, 0, 0, 0, 0, + 1621, 0, 0, 0, 0, 0, 0, 1622, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, + 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1610, 0, + 0, 1611, 1624, 0, 0, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 0, 1630, 0, 0, 1631, 0, 1625, + 0, 0, 0, 0, 1626, 0, 1619, 0, 0, 0, + 0, 1632, 0, 0, 1633, 0, 1621, 0, 0, 0, + 0, 1624, 0, 1622, 0, 0, 0, 1627, 1628, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1625, 0, + 0, 0, 1629, 1626, 0, 0, 0, 0, 0, 0, + 1623, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1624, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1625, 0, 0, + 1630, 1629, 1626, 1631, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1632, 0, 0, + 1633, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, + 0, 1634, 0, 0, 0, 0, 0, 0, 0, 1630, + 1629, 0, 1631, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, + 0, 0, 0, 0, 0, 0, 1624, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1630, 0, + 0, 1631, 0, 1625, 0, 0, 0, 0, 1626, 0, + 0, 0, 0, 0, 0, 1632, 0, 0, 1633, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 1634, 0, 0, + 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 0, 0, 0, 0, 3355, 1634, 0, 0, 0, + 0, 0, 0, 0, 1630, 0, 1610, 1631, 0, 1611, + 0, 0, 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 0, 1632, 0, 0, 1633, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1619, 1634, 717, 0, 0, 0, + 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, + 0, 1622, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1635, 0, 0, 1636, 1637, 1638, + 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 1623, 0, + 0, 3412, 0, 0, 0, 0, 0, 0, 1610, 0, + 0, 1611, 0, 718, 0, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 1635, 0, 0, 1636, 1637, 1638, 719, + 1639, 1640, 1641, 1642, 1643, 1644, 1619, 0, 0, 0, + 3434, 1634, 0, 0, 0, 0, 1621, 0, 0, 0, + 0, 0, 0, 1622, 0, 0, 0, 0, 0, 0, + 0, 0, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, + 1640, 1641, 1642, 1643, 1644, 0, 0, 1795, 720, 0, + 1623, 0, 0, 0, 0, 0, 0, 0, 721, 0, + 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, + 722, 0, 0, 0, 0, 723, 0, 0, 0, 0, + 0, 1625, 0, 0, 0, 0, 1626, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 724, 0, 0, 0, 0, 1627, + 1628, 0, 0, 0, 0, 0, 0, 0, 1635, 0, + 0, 1636, 1637, 1638, 1629, 1639, 1640, 1641, 1642, 1643, + 1644, 0, 0, 2792, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1624, 725, 0, 0, + 0, 726, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1630, 1625, 0, 1631, 0, 0, 1626, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, + 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, + 0, 0, 0, 0, 0, 539, 0, 0, 0, 0, + 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 728, 0, 0, 0, + 0, 0, 0, 0, 1630, 0, 0, 1631, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1632, 0, 0, 1633, 0, 0, 0, 0, 729, + 0, 0, 730, 0, 0, 0, 0, 0, 0, 1634, + 0, 0, 0, 731, 0, 0, 732, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 733, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 734, 0, + 0, 0, 0, 0, 735, 736, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 737, 0, 0, 0, 0, + 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1634, 0, 0, 0, 0, 0, 0, 739, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1635, 0, 0, 1636, + 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, + 0, 3222, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 555, 0, 0, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 0, 0, 3396, 117, 118, 119, 120, 121, 122, + 123, 124, 556, 125, 126, 127, 557, 558, 559, 560, + 561, 562, 563, 564, 565, 129, 130, 566, 131, 132, + 133, 567, 135, 136, 137, 568, 569, 570, 571, 572, + 573, 143, 144, 145, 146, 147, 148, 574, 575, 149, + 150, 151, 152, 576, 577, 155, 578, 156, 157, 158, + 159, 579, 580, 581, 582, 583, 163, 164, 165, 166, + 167, 584, 169, 170, 171, 585, 172, 173, 174, 175, + 176, 177, 586, 587, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 589, 190, 191, 590, 193, 591, + 194, 592, 195, 196, 197, 198, 199, 200, 593, 594, + 201, 202, 203, 204, 595, 596, 205, 206, 207, 208, + 209, 597, 210, 211, 212, 598, 213, 214, 215, 599, + 216, 217, 218, 219, 600, 221, 222, 223, 224, 225, + 601, 602, 227, 603, 228, 229, 604, 231, 605, 232, + 606, 233, 607, 608, 609, 236, 237, 610, 611, 240, + 612, 241, 613, 614, 615, 244, 245, 616, 246, 247, + 248, 249, 250, 251, 252, 617, 254, 255, 256, 257, + 618, 258, 259, 260, 261, 262, 263, 264, 619, 265, + 620, 621, 268, 269, 270, 271, 272, 622, 623, 624, + 625, 626, 276, 627, 628, 279, 629, 281, 282, 283, + 284, 285, 286, 630, 631, 287, 632, 289, 633, 634, + 291, 292, 293, 294, 295, 296, 297, 298, 635, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 636, + 637, 638, 323, 324, 325, 639, 640, 327, 328, 641, + 330, 642, 643, 332, 644, 334, 335, 336, 645, 337, + 338, 646, 647, 339, 340, 341, 648, 649, 342, 343, + 650, 651, 346, 652, 653, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 654, 655, 656, 657, + 360, 361, 658, 659, 364, 365, 660, 367, 368, 369, + 661, 370, 371, 372, 373, 374, 375, 662, 376, 377, + 378, 663, 380, 381, 382, 383, 664, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 665, 397, 398, 666, 400, 401, 402, 667, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 668, 669, 417, 418, 419, 420, 421, 422, 670, + 424, 425, 671, 672, 427, 428, 673, 430, 674, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 675, 444, 676, 677, 678, 446, 447, 679, 448, + 680, 450, 451, 452, 453, 454, 681, 455, 682, 683, + 684, 685, 458, 459, 686, 461, 687, 688, 463, 464, + 689, 466, 467, 468, 469, 470, 690, 691, 471, 472, + 473, 692, 474, 475, 476, 477, 693, 478, 479, 480, + 481, 482, 694, 695, 696, 485, 697, 487, 488, 489, + 490, 491, 492, 493, 698, 699, 494, 700, 701, 495, + 496, 497, 498, 499, 500, 702, 703, 704, 705, 706, + 707, 708, 709, 710, 711, 712, 512, 513, 514, 515, + 523, 0, 0, 0, 0, 0, 0, 0, 0, 2068, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 129, 130, 0, 131, 132, 133, 0, 135, 136, 137, + 138, 139, 0, 141, 142, 0, 143, 144, 145, 146, + 147, 148, 0, 0, 149, 150, 151, 152, 153, 154, + 155, 0, 156, 157, 158, 159, 160, 0, 0, 0, + 162, 163, 164, 165, 166, 167, 0, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 0, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 0, 194, 0, 195, 196, 197, + 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, + 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 0, 227, 0, 228, + 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, + 236, 237, 524, 0, 240, 0, 241, 0, 242, 243, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + 0, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 0, 267, 268, 269, 270, + 271, 272, 273, 274, 0, 275, 0, 276, 0, 0, + 279, 0, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 0, 289, 0, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 525, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 0, 322, 323, 324, 325, + 326, 0, 327, 328, 0, 330, 0, 331, 332, 333, + 334, 335, 336, 0, 337, 338, 0, 0, 339, 340, + 341, 0, 0, 342, 343, 344, 0, 346, 0, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 0, 0, 0, 0, 360, 361, 362, 0, 364, + 365, 366, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 379, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 0, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 0, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 0, 0, 427, + 428, 429, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 526, 444, 445, 0, + 0, 446, 447, 0, 448, 0, 450, 451, 452, 453, + 454, 0, 455, 456, 457, 0, 0, 458, 459, 460, + 461, 462, 0, 463, 464, 465, 466, 467, 468, 469, + 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 483, 484, 0, + 485, 0, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 515, 523, 0, 0, 0, 0, + 0, 0, 0, 0, 2692, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 0, 125, 126, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 129, 130, 0, 131, 132, + 133, 0, 135, 136, 137, 138, 139, 0, 141, 142, + 0, 143, 144, 145, 146, 147, 148, 0, 0, 149, + 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, + 159, 160, 0, 0, 0, 162, 163, 164, 165, 166, + 167, 0, 169, 170, 171, 0, 172, 173, 174, 175, + 176, 177, 0, 0, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 0, + 194, 0, 195, 196, 197, 198, 199, 200, 0, 0, + 201, 202, 203, 204, 0, 0, 205, 206, 207, 208, + 209, 0, 210, 211, 212, 0, 213, 214, 215, 0, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 0, 227, 0, 228, 229, 230, 231, 0, 232, + 0, 233, 0, 0, 0, 236, 237, 524, 0, 240, + 0, 241, 0, 242, 243, 244, 245, 0, 246, 247, + 248, 249, 250, 251, 252, 0, 254, 255, 256, 257, + 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, + 0, 267, 268, 269, 270, 271, 272, 273, 274, 0, + 275, 0, 276, 0, 0, 279, 0, 281, 282, 283, + 284, 285, 286, 0, 0, 287, 0, 289, 0, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 525, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 0, 322, 323, 324, 325, 326, 0, 327, 328, 0, + 330, 0, 331, 332, 333, 334, 335, 336, 0, 337, + 338, 0, 0, 339, 340, 341, 0, 0, 342, 343, + 344, 0, 346, 0, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 0, 0, 0, 0, + 360, 361, 362, 0, 364, 365, 366, 367, 368, 369, + 0, 370, 371, 372, 373, 374, 375, 0, 376, 377, + 378, 379, 380, 381, 382, 383, 0, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 0, 397, 398, 0, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 0, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 0, 0, 427, 428, 429, 430, 0, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 526, 444, 445, 0, 0, 446, 447, 0, 448, + 0, 450, 451, 452, 453, 454, 0, 455, 456, 457, + 0, 0, 458, 459, 460, 461, 462, 0, 463, 464, + 465, 466, 467, 468, 469, 470, 0, 0, 471, 472, + 473, 0, 474, 475, 476, 477, 0, 478, 479, 480, + 481, 482, 483, 484, 0, 485, 0, 487, 488, 489, + 490, 491, 492, 493, 0, 0, 494, 0, 0, 495, + 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, + 964, 1340, 815, 0, 0, 0, 1046, 0, 0, 2695, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 0, 125, 126, + 127, 0, 0, 0, 560, 0, 0, 0, 0, 565, + 129, 130, 0, 131, 132, 133, 567, 135, 136, 137, + 568, 569, 570, 571, 572, 0, 143, 144, 145, 146, + 147, 148, 0, 0, 149, 150, 151, 152, 576, 577, + 155, 0, 156, 157, 158, 159, 579, 0, 581, 0, + 583, 163, 164, 165, 166, 167, 584, 169, 170, 171, + 0, 172, 173, 174, 175, 176, 177, 0, 587, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 589, + 190, 191, 590, 193, 0, 194, 0, 195, 196, 197, + 198, 199, 200, 0, 0, 201, 202, 203, 204, 0, + 0, 205, 206, 207, 208, 209, 0, 210, 211, 212, + 0, 213, 214, 215, 0, 216, 217, 218, 219, 600, + 221, 222, 223, 224, 225, 601, 1341, 227, 0, 228, + 229, 604, 231, 0, 232, 0, 233, 607, 0, 609, + 236, 237, 610, 611, 240, 0, 241, 0, 614, 615, + 244, 245, 0, 246, 247, 248, 249, 250, 251, 252, + 617, 254, 255, 256, 257, 0, 258, 259, 260, 261, + 262, 263, 264, 0, 265, 620, 621, 268, 269, 270, + 271, 272, 622, 623, 0, 625, 0, 276, 627, 628, + 279, 629, 281, 282, 283, 284, 285, 286, 0, 0, + 287, 632, 289, 633, 0, 291, 292, 293, 294, 295, + 296, 297, 298, 635, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 636, 637, 638, 323, 324, 325, + 639, 0, 327, 328, 641, 330, 0, 643, 332, 644, + 334, 335, 336, 0, 337, 338, 1342, 0, 339, 340, + 341, 0, 0, 342, 343, 650, 651, 346, 652, 653, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 0, 0, 0, 0, 360, 361, 658, 659, 364, + 365, 660, 367, 368, 369, 0, 370, 371, 372, 373, + 374, 375, 0, 376, 377, 378, 663, 380, 381, 382, + 383, 0, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 0, 397, 398, 666, 400, + 401, 402, 667, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 0, 669, 417, 418, + 419, 420, 421, 422, 670, 424, 425, 0, 672, 427, + 428, 673, 430, 0, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 675, 444, 676, 0, + 0, 446, 447, 0, 448, 680, 450, 451, 452, 453, + 454, 0, 455, 682, 683, 0, 0, 458, 459, 686, + 461, 687, 1343, 463, 464, 689, 466, 467, 468, 469, + 470, 0, 0, 471, 472, 473, 0, 474, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 694, 695, 0, + 485, 697, 487, 488, 489, 490, 491, 492, 493, 0, + 0, 494, 0, 0, 495, 496, 497, 498, 499, 500, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 512, 513, 514, 515, 0, 0, 1610, 0, 0, + 1611, 0, 1344, 1345, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1619, 0, 0, 0, 0, + 2166, 0, 0, 0, 0, 1621, 1610, 0, 0, 1611, + 0, 0, 1622, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1619, 0, 0, 0, 0, 1623, + 0, 0, 0, 0, 1621, 1610, 0, 0, 1611, 0, + 0, 1622, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1619, 0, 0, 0, 0, 1623, 0, + 0, 0, 0, 1621, 0, 2167, 0, 0, 0, 0, + 1622, 0, 0, 1610, 0, 0, 1611, 0, 0, 0, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1623, 0, 0, + 0, 1619, 0, 0, 0, 1889, 0, 0, 0, 0, + 0, 1621, 0, 1610, 0, 1624, 1611, 0, 1622, 0, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, + 0, 0, 1625, 0, 0, 0, 0, 1626, 0, 0, + 0, 1619, 0, 0, 1925, 1623, 0, 0, 0, 1926, + 0, 1621, 0, 0, 1624, 0, 0, 0, 1622, 0, + 1627, 1628, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1625, 0, 0, 0, 1629, 1626, 0, 0, 0, + 0, 0, 3502, 0, 0, 1623, 0, 0, 0, 0, + 0, 0, 0, 1624, 0, 0, 0, 0, 0, 1627, + 1628, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1625, 0, 0, 1630, 1629, 1626, 1631, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1632, 0, 0, 1633, 0, 0, 0, 0, 1627, 1628, + 0, 1624, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1630, 1629, 0, 1631, 0, 0, 1625, 0, + 0, 0, 0, 1626, 0, 0, 0, 0, 0, 1632, + 0, 0, 1633, 0, 0, 0, 0, 0, 0, 0, + 0, 1624, 0, 0, 0, 0, 1627, 1628, 0, 0, + 0, 1630, 0, 0, 1631, 0, 0, 0, 1625, 0, + 0, 1629, 0, 1626, 0, 0, 0, 0, 1632, 0, + 0, 1633, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1627, 1628, 0, 0, + 1634, 0, 0, 0, 0, 0, 0, 0, 0, 1630, + 3503, 1629, 1631, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1632, 0, 0, 1633, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1634, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1630, + 0, 0, 1631, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2170, 0, 0, 1632, 0, 0, 1633, + 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1896, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1635, 0, 0, + 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 0, 0, 0, 0, 0, 0, 1634, 0, 0, 0, + 0, 1610, 0, 0, 1611, 0, 0, 0, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 0, 1635, 0, 0, 1636, + 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 1619, + 0, 0, 0, 1931, 0, 0, 1634, 0, 0, 1621, + 0, 0, 0, 0, 0, 0, 1622, 0, 0, 0, + 0, 0, 0, 0, 0, 1635, 0, 0, 1636, 1637, + 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, + 0, 0, 0, 1623, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1610, 0, + 0, 1611, 0, 0, 0, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 0, 1635, 0, 0, 1636, 1637, 1638, 0, + 1639, 1640, 1641, 1642, 1643, 1644, 1619, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1621, 0, 0, 0, + 0, 0, 0, 1622, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1635, 0, 0, 1636, 1637, 1638, 0, + 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, 0, 0, + 1623, 0, 0, 0, 0, 1610, 0, 0, 1611, 1624, + 0, 0, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, + 0, 0, 0, 0, 0, 0, 1625, 0, 0, 0, + 0, 1626, 0, 1619, 0, 0, 0, 1938, 0, 0, + 0, 0, 0, 1621, 0, 0, 0, 0, 0, 0, + 1622, 0, 0, 0, 1627, 1628, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1629, + 0, 0, 0, 0, 0, 0, 0, 1623, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1936, 1610, 0, 0, 1611, 1624, 0, 0, 1612, + 1613, 1614, 1615, 1616, 1617, 1618, 0, 1630, 0, 0, + 1631, 0, 0, 1625, 0, 0, 0, 0, 1626, 0, + 1619, 0, 0, 0, 1632, 0, 0, 1633, 0, 0, + 1621, 0, 0, 0, 0, 0, 0, 1622, 0, 0, + 0, 1627, 1628, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1629, 0, 0, 0, + 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, + 0, 0, 0, 1624, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1625, 0, 0, 0, 1630, 1626, 0, 1631, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1632, 0, 0, 1633, 0, 0, 0, 1627, 1628, + 0, 0, 0, 0, 1634, 0, 0, 1610, 0, 0, + 1611, 0, 0, 1629, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2061, 0, 0, 0, 0, 1619, 0, 0, 0, 0, + 1624, 0, 0, 0, 0, 1621, 0, 0, 0, 0, + 0, 1630, 1622, 0, 1631, 0, 0, 1625, 0, 0, + 0, 0, 1626, 0, 0, 0, 0, 0, 1632, 0, + 0, 1633, 0, 0, 0, 0, 0, 0, 0, 1623, + 0, 0, 0, 0, 0, 1627, 1628, 0, 0, 0, + 0, 1634, 0, 0, 0, 0, 0, 0, 0, 0, + 1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, 1640, + 1641, 1642, 1643, 1644, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1630, 0, + 0, 1631, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1632, 0, 0, 1633, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1634, 0, + 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1625, 0, 0, 0, 0, 1626, 1635, 0, + 0, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, + 1644, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1627, 1628, 0, 0, 0, 0, 0, 0, 0, 1610, + 0, 0, 1611, 0, 0, 1629, 1612, 1613, 1614, 1615, + 1616, 1617, 1618, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1634, 0, 1619, 0, 0, + 0, 2769, 0, 0, 0, 0, 0, 1621, 0, 0, + 0, 0, 0, 1630, 1622, 1635, 1631, 0, 1636, 1637, + 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, + 1632, 0, 0, 1633, 0, 0, 0, 0, 0, 0, + 0, 1623, 0, 1610, 0, 0, 1611, 0, 0, 0, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1619, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1621, 0, 0, 0, 0, 0, 0, 1622, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, + 1640, 1641, 1642, 1643, 1644, 1623, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1634, 0, 1610, 0, 0, 1611, 0, 1624, 0, 1612, + 1613, 1614, 1615, 1616, 1617, 1618, 0, 0, 0, 0, + 0, 0, 0, 0, 1625, 0, 0, 0, 0, 1626, + 1619, 0, 0, 2756, 0, 0, 0, 0, 0, 0, + 1621, 0, 0, 0, 0, 0, 0, 1622, 0, 0, + 0, 0, 1627, 1628, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1629, 0, 0, + 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, + 0, 1624, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1625, 0, + 0, 0, 0, 1626, 0, 1630, 0, 1635, 1631, 0, + 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 0, 0, 1632, 0, 0, 1633, 1627, 1628, 0, 0, + 0, 0, 0, 0, 0, 1610, 0, 0, 1611, 0, + 0, 1629, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1619, 0, 0, 0, 0, 0, 0, + 1624, 0, 0, 1621, 0, 0, 0, 0, 0, 1630, + 1622, 0, 1631, 0, 0, 0, 0, 1625, 0, 0, + 0, 0, 1626, 0, 0, 0, 1632, 0, 0, 1633, + 0, 0, 0, 0, 0, 0, 1610, 1623, 0, 1611, + 0, 0, 0, 1612, 1613, 1805, 1628, 1616, 1617, 1618, + 0, 0, 1634, 0, 0, 0, 0, 0, 0, 0, + 1629, 0, 0, 0, 1619, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1621, 0, 0, 0, 0, 0, + 0, 1622, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1630, 0, + 0, 1631, 0, 0, 0, 0, 0, 0, 1623, 0, + 0, 0, 0, 0, 0, 1632, 0, 0, 1633, 0, + 0, 0, 0, 0, 0, 0, 1634, 1610, 0, 0, + 1611, 0, 0, 1624, 1612, 1613, 0, 0, 1616, 1617, + 1618, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1625, 0, 0, 0, 0, 1626, 0, 0, 0, 1635, + 0, 0, 1636, 1637, 1638, 1621, 1639, 1640, 1641, 1642, + 1643, 1644, 1622, 0, 0, 0, 0, 0, 1627, 1628, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1629, 0, 0, 0, 0, 0, 1623, + 0, 0, 0, 0, 1624, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1634, 0, 0, 0, 0, + 0, 1625, 0, 0, 0, 0, 1626, 0, 0, 0, + 0, 1630, 0, 1635, 1631, 0, 1636, 1637, 1638, 0, + 1639, 1640, 1641, 1642, 1643, 1644, 0, 0, 1632, 1627, + 1628, 1633, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1629, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1624, 0, 0, 0, 0, + 0, 0, 1630, 0, 0, 1631, 0, 0, 0, 0, + 0, 0, 1625, 0, 0, 0, 0, 1626, 0, 1632, + 0, 0, 1635, 0, 0, 1636, 1637, 1638, 0, 1639, + 1640, 1641, 1642, 1643, 1644, 0, 0, 0, 0, 0, + -2044, -2044, 0, 0, 0, 0, 0, 0, 1634, 0, + 0, 0, 0, 0, 0, 1629, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -2044, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1634, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1635, 0, 0, 1636, 1637, + 1638, 0, 1639, 1640, 1641, 1642, 2187, 1644, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1634, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1635, 0, 0, 1636, + 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 555, 0, 2084, 0, 0, 0, 1635, 0, 0, + 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, 1643, 1644, + 117, 118, 119, 120, 121, 122, 123, 124, 556, 125, + 126, 127, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 129, 130, 566, 131, 132, 133, 567, 135, 136, + 137, 568, 569, 570, 571, 572, 573, 143, 144, 145, + 146, 147, 148, 574, 575, 149, 150, 151, 152, 576, + 577, 155, 578, 156, 157, 158, 159, 579, 580, 581, + 582, 583, 163, 164, 165, 166, 167, 584, 169, 170, + 171, 585, 172, 173, 174, 175, 176, 177, 586, 587, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 589, 190, 191, 590, 193, 591, 194, 592, 195, 196, + 197, 198, 199, 200, 593, 594, 201, 202, 203, 204, + 595, 596, 205, 206, 207, 208, 209, 597, 210, 211, + 212, 598, 213, 214, 215, 599, 216, 217, 218, 219, + 600, 221, 222, 223, 224, 225, 601, 602, 227, 603, + 228, 229, 604, 231, 605, 232, 606, 233, 607, 608, + 609, 236, 237, 610, 611, 240, 612, 241, 613, 614, + 615, 244, 245, 616, 246, 247, 248, 249, 250, 251, + 252, 617, 254, 255, 256, 257, 618, 258, 259, 260, + 261, 262, 263, 264, 619, 265, 620, 621, 268, 269, + 270, 271, 272, 622, 623, 624, 625, 626, 276, 627, + 628, 279, 629, 281, 282, 283, 284, 285, 286, 630, + 631, 287, 632, 289, 633, 634, 291, 292, 293, 294, + 295, 296, 297, 298, 635, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 636, 637, 638, 323, 324, + 325, 639, 640, 327, 328, 641, 330, 642, 643, 332, + 644, 334, 335, 336, 645, 337, 338, 646, 647, 339, + 340, 341, 648, 649, 342, 343, 650, 651, 346, 652, + 653, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 654, 655, 656, 657, 360, 361, 658, 659, + 364, 365, 660, 367, 368, 369, 661, 370, 371, 372, + 373, 374, 375, 662, 376, 377, 378, 663, 380, 381, + 382, 383, 664, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 665, 397, 398, 666, + 400, 401, 402, 667, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 668, 669, 417, + 418, 419, 420, 421, 422, 670, 424, 425, 671, 672, + 427, 428, 673, 430, 674, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 675, 444, 676, + 677, 678, 446, 447, 679, 448, 680, 450, 451, 452, + 453, 454, 681, 455, 682, 683, 684, 685, 458, 459, + 686, 461, 687, 688, 463, 464, 689, 466, 467, 468, + 469, 470, 690, 691, 471, 472, 473, 692, 474, 475, + 476, 477, 693, 478, 479, 480, 481, 482, 694, 695, + 696, 485, 697, 487, 488, 489, 490, 491, 492, 493, + 698, 699, 494, 700, 701, 495, 496, 497, 498, 499, + 500, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 512, 513, 514, 515, 555, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 556, 125, 126, 127, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 129, 130, 566, 131, + 132, 133, 567, 135, 136, 137, 568, 569, 570, 571, + 572, 573, 143, 144, 145, 146, 147, 148, 574, 575, + 149, 150, 151, 152, 576, 577, 155, 578, 156, 157, + 158, 159, 579, 580, 581, 582, 583, 163, 164, 165, + 166, 167, 584, 169, 170, 171, 585, 172, 173, 174, + 175, 176, 177, 586, 587, 179, 180, 181, 182, 183, + 184, 588, 186, 187, 188, 589, 190, 191, 590, 193, + 591, 194, 592, 195, 196, 197, 198, 199, 200, 593, + 594, 201, 202, 203, 204, 595, 596, 205, 206, 207, + 208, 209, 597, 210, 211, 212, 598, 213, 214, 215, + 599, 216, 217, 218, 219, 600, 221, 222, 223, 224, + 225, 601, 602, 227, 603, 228, 229, 604, 231, 605, + 232, 606, 233, 607, 608, 609, 236, 237, 610, 611, + 240, 612, 241, 613, 614, 615, 244, 245, 616, 246, + 247, 248, 249, 250, 251, 252, 617, 254, 255, 256, + 257, 618, 258, 259, 260, 261, 262, 263, 264, 619, + 265, 620, 621, 268, 269, 270, 271, 272, 622, 623, + 624, 625, 626, 276, 627, 628, 279, 629, 281, 282, + 283, 284, 285, 286, 630, 631, 287, 632, 289, 633, + 634, 291, 292, 293, 294, 295, 296, 297, 298, 635, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 636, 637, 638, 323, 324, 325, 639, 640, 327, 328, + 641, 330, 642, 643, 332, 644, 334, 335, 336, 645, + 337, 338, 646, 647, 339, 340, 341, 648, 649, 342, + 343, 650, 651, 346, 652, 653, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 654, 655, 656, + 657, 360, 361, 658, 659, 364, 365, 660, 367, 368, + 369, 661, 370, 371, 372, 373, 374, 375, 662, 376, + 377, 378, 663, 380, 381, 382, 383, 664, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 665, 397, 398, 666, 400, 401, 402, 667, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 668, 669, 417, 418, 419, 420, 421, 422, + 670, 424, 425, 671, 672, 427, 428, 673, 430, 674, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 675, 444, 676, 677, 678, 446, 447, 679, + 448, 680, 450, 451, 452, 453, 454, 681, 455, 682, + 683, 684, 685, 458, 459, 686, 461, 687, 688, 463, + 464, 689, 466, 467, 468, 469, 470, 690, 691, 471, + 472, 473, 692, 474, 475, 476, 477, 693, 478, 479, + 480, 481, 482, 694, 695, 696, 485, 697, 487, 488, + 489, 490, 491, 492, 493, 698, 699, 494, 700, 701, + 495, 496, 497, 498, 499, 500, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 512, 513, 514, + 515, 555, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 556, 125, + 126, 127, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 129, 130, 566, 131, 132, 133, 567, 135, 136, + 137, 568, 569, 570, 571, 572, 573, 143, 144, 145, + 146, 147, 148, 574, 575, 149, 150, 151, 152, 576, + 577, 155, 578, 156, 157, 158, 159, 579, 580, 581, + 582, 583, 163, 164, 165, 166, 167, 584, 169, 170, + 171, 585, 172, 173, 174, 175, 176, 177, 586, 587, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 589, 190, 191, 590, 193, 591, 194, 592, 195, 196, + 197, 198, 199, 200, 593, 594, 201, 202, 203, 204, + 595, 596, 205, 206, 207, 208, 209, 597, 210, 211, + 212, 598, 213, 214, 215, 599, 216, 217, 218, 219, + 600, 221, 222, 223, 224, 225, 601, 602, 227, 603, + 228, 229, 604, 231, 605, 232, 606, 233, 607, 608, + 609, 236, 237, 610, 611, 240, 612, 241, 613, 614, + 615, 244, 245, 616, 246, 247, 248, 249, 250, 940, + 252, 617, 254, 255, 256, 257, 618, 258, 259, 260, + 261, 262, 263, 264, 619, 265, 620, 621, 268, 269, + 270, 271, 272, 622, 623, 624, 625, 626, 276, 627, + 628, 279, 629, 281, 282, 283, 284, 285, 286, 630, + 631, 287, 632, 289, 633, 634, 291, 292, 293, 294, + 295, 296, 297, 298, 635, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 636, 637, 638, 323, 324, + 325, 639, 640, 327, 328, 641, 330, 642, 643, 332, + 644, 334, 335, 336, 645, 337, 338, 646, 647, 339, + 340, 341, 648, 649, 342, 343, 650, 651, 346, 652, + 653, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 654, 655, 656, 657, 360, 361, 658, 659, + 364, 365, 660, 367, 368, 369, 661, 370, 371, 372, + 373, 374, 375, 662, 376, 377, 378, 663, 380, 381, + 382, 383, 664, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 665, 397, 398, 666, + 400, 401, 402, 667, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 668, 669, 417, + 418, 419, 420, 421, 422, 670, 424, 425, 671, 672, + 427, 428, 673, 430, 674, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 675, 444, 676, + 677, 678, 446, 447, 679, 448, 680, 450, 451, 452, + 453, 454, 681, 455, 682, 683, 684, 685, 458, 459, + 686, 461, 687, 688, 463, 464, 689, 466, 467, 468, + 469, 470, 690, 691, 471, 472, 473, 692, 474, 475, + 476, 477, 693, 478, 479, 480, 481, 482, 694, 695, + 696, 485, 697, 487, 488, 489, 490, 491, 492, 493, + 698, 699, 494, 700, 701, 495, 496, 497, 498, 499, + 500, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 512, 513, 514, 515, 555, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 556, 125, 126, 127, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 129, 130, 566, 131, + 132, 133, 567, 135, 136, 137, 568, 569, 570, 571, + 572, 573, 143, 144, 145, 146, 147, 148, 574, 575, + 149, 150, 151, 152, 576, 577, 155, 578, 156, 157, + 158, 159, 579, 580, 581, 582, 583, 163, 164, 165, + 166, 167, 584, 169, 170, 171, 585, 172, 173, 174, + 175, 176, 177, 586, 587, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 589, 190, 191, 590, 193, + 591, 194, 592, 195, 196, 197, 198, 199, 200, 593, + 594, 201, 202, 203, 204, 595, 596, 205, 206, 207, + 208, 209, 597, 210, 211, 212, 598, 213, 214, 215, + 599, 216, 217, 218, 219, 600, 221, 222, 223, 224, + 225, 601, 602, 227, 603, 228, 229, 604, 231, 605, + 232, 606, 233, 607, 608, 609, 236, 237, 610, 611, + 240, 612, 241, 613, 614, 615, 244, 245, 616, 246, + 247, 248, 249, 250, 251, 252, 617, 254, 255, 256, + 257, 618, 258, 259, 260, 261, 262, 263, 264, 619, + 265, 620, 621, 268, 269, 270, 271, 272, 622, 623, + 624, 625, 626, 276, 627, 628, 279, 629, 281, 282, + 283, 284, 285, 286, 630, 631, 287, 632, 289, 633, + 634, 291, 292, 293, 294, 295, 296, 297, 298, 635, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 636, 637, 638, 323, 324, 325, 639, 640, 327, 328, + 641, 330, 642, 643, 332, 644, 334, 335, 336, 645, + 337, 338, 646, 647, 339, 340, 341, 648, 649, 342, + 343, 650, 651, 346, 652, 653, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 654, 655, 656, + 657, 360, 361, 658, 659, 364, 365, 660, 367, 368, + 369, 661, 370, 371, 372, 373, 374, 375, 662, 376, + 377, 378, 663, 380, 381, 382, 383, 664, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 665, 397, 398, 666, 400, 401, 402, 667, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 668, 669, 417, 418, 419, 420, 421, 422, + 670, 424, 425, 671, 672, 427, 428, 673, 430, 674, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 675, 444, 676, 677, 678, 446, 447, 679, + 448, 680, 450, 451, 452, 453, 454, 681, 455, 682, + 683, 684, 685, 458, 459, 686, 461, 687, 688, 463, + 464, 689, 466, 467, 468, 469, 470, 690, 691, 471, + 472, 473, 692, 474, 475, 476, 477, 693, 478, 479, + 480, 481, 482, 694, 695, 696, 485, 697, 487, 488, + 489, 490, 491, 492, 493, 698, 699, 494, 700, 701, + 495, 496, 497, 498, 499, 500, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 512, 513, 514, + 515, 555, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 2232, 122, 123, 124, 556, 125, + 126, 127, 557, 558, 559, 560, 561, 562, 563, 564, + 565, 129, 130, 566, 131, 132, 133, 567, 135, 136, + 137, 568, 569, 570, 571, 572, 573, 143, 144, 145, + 146, 147, 148, 574, 575, 149, 150, 151, 152, 576, + 577, 155, 578, 156, 157, 158, 159, 579, 580, 581, + 582, 583, 163, 164, 165, 166, 167, 584, 169, 170, + 171, 585, 172, 173, 174, 175, 176, 177, 586, 587, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 589, 190, 191, 590, 193, 591, 194, 592, 195, 196, + 197, 198, 199, 200, 593, 594, 201, 202, 203, 204, + 595, 596, 205, 206, 207, 2233, 209, 597, 210, 211, + 212, 598, 213, 214, 215, 599, 216, 217, 218, 219, + 600, 221, 222, 223, 224, 225, 601, 602, 227, 603, + 228, 229, 604, 231, 605, 232, 606, 233, 607, 608, + 609, 236, 237, 610, 611, 240, 612, 241, 613, 614, + 615, 244, 245, 616, 246, 247, 248, 249, 250, 251, + 252, 617, 254, 255, 256, 257, 618, 258, 259, 260, + 261, 262, 263, 264, 619, 265, 620, 621, 268, 269, + 270, 271, 272, 622, 623, 624, 625, 626, 276, 627, + 628, 279, 629, 281, 282, 283, 284, 285, 286, 630, + 631, 287, 632, 289, 633, 634, 291, 292, 293, 294, + 295, 296, 297, 298, 635, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 636, 637, 638, 323, 324, + 325, 639, 640, 327, 328, 641, 330, 642, 643, 332, + 644, 334, 335, 336, 645, 337, 338, 646, 647, 339, + 340, 341, 648, 649, 342, 343, 650, 651, 346, 652, + 653, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 654, 655, 656, 657, 360, 361, 658, 659, + 364, 365, 660, 367, 368, 369, 661, 370, 371, 372, + 373, 374, 375, 662, 376, 377, 378, 663, 380, 381, + 382, 383, 664, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 665, 397, 398, 666, + 400, 401, 402, 667, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 668, 669, 417, + 418, 419, 420, 421, 2234, 670, 424, 425, 671, 672, + 427, 428, 673, 430, 674, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 675, 444, 676, + 677, 678, 446, 447, 679, 448, 680, 450, 451, 452, + 453, 454, 681, 455, 682, 683, 684, 685, 458, 459, + 686, 461, 687, 688, 463, 464, 689, 466, 467, 468, + 469, 470, 690, 691, 471, 472, 473, 692, 474, 475, + 476, 477, 693, 478, 479, 480, 481, 482, 694, 695, + 696, 485, 697, 487, 488, 489, 490, 491, 492, 493, + 698, 699, 494, 700, 701, 495, 496, 497, 498, 499, + 500, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 512, 513, 514, 515, 964, 0, 815, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 560, 0, 0, 0, 0, 565, 129, 130, 0, 131, + 132, 133, 567, 135, 136, 137, 568, 569, 570, 571, + 572, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 576, 577, 155, 0, 156, 157, + 158, 159, 579, 0, 581, 0, 583, 163, 164, 165, + 166, 167, 584, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 587, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 589, 190, 191, 590, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 600, 221, 222, 223, 224, + 225, 601, 1341, 227, 0, 228, 229, 604, 231, 0, + 232, 0, 233, 607, 0, 609, 236, 237, 610, 611, + 240, 0, 241, 0, 614, 615, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 617, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 620, 621, 268, 269, 270, 271, 272, 622, 623, + 0, 625, 0, 276, 627, 628, 279, 629, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 632, 289, 633, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 635, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 636, 637, 638, 323, 324, 325, 639, 0, 327, 328, + 641, 330, 0, 643, 332, 644, 334, 335, 336, 0, + 337, 338, 1342, 0, 339, 340, 341, 0, 0, 342, + 343, 650, 651, 346, 652, 653, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 658, 659, 364, 365, 660, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 663, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 666, 400, 401, 402, 667, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 669, 417, 418, 419, 420, 421, 422, + 670, 424, 425, 0, 672, 427, 428, 673, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 675, 444, 676, 0, 0, 446, 447, 0, + 448, 680, 450, 451, 452, 453, 454, 0, 455, 682, + 683, 0, 0, 458, 459, 686, 461, 687, 1343, 463, + 464, 689, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 694, 695, 0, 485, 697, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 512, 513, 514, + 515, 964, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 3, 4, 0, 560, 0, 0, 0, 0, + 565, 129, 130, 0, 131, 132, 133, 567, 135, 136, + 137, 568, 569, 570, 571, 572, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 576, + 577, 155, 0, 156, 157, 158, 159, 579, 0, 581, + 0, 583, 163, 164, 165, 166, 167, 584, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 587, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 589, 190, 191, 590, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 600, 221, 222, 223, 224, 225, 601, 0, 227, 0, + 228, 229, 604, 231, 0, 232, 0, 233, 607, 0, + 609, 236, 237, 610, 611, 240, 0, 241, 0, 614, + 615, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 617, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 620, 621, 268, 269, + 270, 271, 272, 622, 623, 0, 625, 0, 276, 627, + 628, 279, 629, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 632, 289, 633, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 635, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 636, 637, 638, 323, 324, + 325, 639, 0, 327, 328, 641, 330, 0, 643, 332, + 644, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 650, 651, 346, 652, + 653, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 658, 659, + 364, 365, 660, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 663, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 666, + 400, 401, 402, 667, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 669, 417, + 418, 419, 420, 421, 422, 670, 424, 425, 0, 672, + 427, 428, 673, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 675, 444, 676, + 0, 0, 446, 447, 0, 448, 680, 450, 451, 452, + 453, 454, 0, 455, 682, 683, 0, 0, 458, 459, + 686, 461, 687, 0, 463, 464, 689, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 694, 695, + 0, 485, 697, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 702, 703, 704, 705, 706, 707, 708, 709, 710, + 711, 712, 512, 513, 514, 515, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 128, 129, 130, 0, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 785, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 786, 0, 787, 0, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 788, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 234, 0, 235, 236, 237, 238, 239, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, + 0, 275, 0, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 288, 289, 290, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 0, 327, 328, + 329, 330, 0, 790, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 345, 346, 347, 792, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 793, 363, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 426, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 795, 0, 0, 446, 447, 0, + 448, 449, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 796, 461, 797, 0, 463, + 464, 798, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 129, 130, 0, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 161, + 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 234, 0, + 235, 236, 237, 238, 239, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 288, 289, 290, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 0, 327, 328, 329, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 426, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 0, 0, 446, 447, 0, 448, 449, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 1738, 156, 157, + 158, 159, 160, 0, 0, 1739, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 1740, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 1741, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 1742, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 1743, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 1744, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 1738, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 1740, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 1741, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 2317, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 1743, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 1744, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 3, 4, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 550, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 551, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 791, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 896, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 791, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 938, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 1942, 0, 0, 0, 0, 1943, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 1950, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 1951, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 1952, + 448, 0, 450, 1953, 452, 1954, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 1955, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 815, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 822, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 823, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 824, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 825, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 826, 457, 0, 0, 827, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 859, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 891, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 894, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 898, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 926, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 954, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 957, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 1000, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 1023, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 822, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 826, 457, 0, 0, 827, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 1302, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 1304, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 1307, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 1309, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 2228, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1475, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 1476, 0, 0, -787, 0, + 1477, 129, 130, 0, 131, 132, 133, 1478, 135, 136, + 137, 0, 1479, 1480, 1481, 1482, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 1483, + 1484, 155, 0, 156, 157, 158, 159, 0, 0, 1485, + 0, 1486, 163, 164, 165, 166, 167, 1487, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 1488, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1489, 190, 191, 1490, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 0, 221, 222, 223, 224, 225, 0, 0, 227, 0, + 228, 229, 1491, 231, 0, 232, 0, 233, 1492, 0, + 1493, 236, 237, -787, 1494, 240, 0, 241, 0, 0, + 0, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 1495, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 1496, 0, 268, 269, + 270, 271, 272, 1497, 1498, 0, 1499, 0, 276, 1500, + 1501, 279, 1502, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 1503, 289, 1504, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 1505, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1506, 1507, 1508, 323, 324, + 325, 0, 0, 327, 328, 1509, 330, 0, 0, 332, + 1510, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 0, 1511, 346, 1512, + 0, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 0, 1513, + 364, 365, 0, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1514, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 1515, + 400, 401, 402, 1516, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 1517, 417, + 418, 419, 420, 421, 422, 1518, 424, 425, 0, 1519, + 427, 428, 1520, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 1521, 444, 0, + 0, 0, 446, 447, 0, 448, 1522, 450, 451, 452, + 453, 454, 0, 455, 1523, 1524, 0, 0, 458, 459, + 0, 461, 0, 0, 463, 464, 1525, 466, 467, 468, + 469, 470, 1526, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 0, 1527, + 0, 485, 1528, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 523, 0, 549, 0, 0, 0, 0, 0, 0, + 0, 0, 512, 513, 514, 515, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 2971, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 837, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 838, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 839, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 840, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 841, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 950, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 839, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 841, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 1298, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 1319, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 1670, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 0, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 1846, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 244, 245, 0, 246, + 247, 248, 249, 250, 2215, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 131, 132, 133, 0, 135, 136, + 137, 138, 139, 0, 141, 142, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 153, + 154, 155, 0, 156, 157, 158, 159, 160, 0, 0, + 0, 162, 163, 164, 165, 166, 167, 0, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 0, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 207, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 227, 0, + 228, 229, 230, 231, 0, 232, 0, 233, 0, 0, + 0, 236, 237, 524, 0, 240, 0, 241, 0, 242, + 243, 244, 245, 0, 246, 247, 248, 249, 250, 2230, + 252, 0, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 0, 267, 268, 269, + 270, 271, 272, 273, 274, 0, 275, 0, 276, 0, + 0, 279, 0, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 0, 289, 0, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 525, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 0, 322, 323, 324, + 325, 326, 0, 327, 328, 0, 330, 0, 331, 332, + 333, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 344, 0, 346, 0, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 362, 0, + 364, 365, 366, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 379, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 0, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 0, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 0, 0, + 427, 428, 429, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 526, 444, 445, + 0, 0, 446, 447, 0, 448, 0, 450, 451, 452, + 453, 454, 0, 455, 456, 457, 0, 0, 458, 459, + 460, 461, 462, 0, 463, 464, 465, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 0, 485, 0, 487, 488, 489, 490, 491, 492, 493, + 0, 0, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 515, 1475, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 1476, 0, 0, 0, 0, 1477, 129, 130, 0, 131, + 132, 133, 1478, 135, 136, 137, 0, 1479, 1480, 1481, + 1482, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 1483, 1484, 155, 0, 156, 157, + 158, 159, 0, 0, 1485, 0, 1486, 163, 164, 165, + 166, 167, 1487, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 1488, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1489, 190, 191, 1490, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 0, 221, 222, 223, 224, + 225, 0, 0, 227, 0, 228, 229, 1491, 231, 0, + 232, 0, 233, 1492, 0, 1493, 236, 237, 0, 1494, + 240, 0, 241, 0, 0, 0, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 1495, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 1496, 0, 268, 269, 270, 271, 272, 1497, 1498, + 0, 1499, 0, 276, 1500, 1501, 279, 1502, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 1503, 289, 1504, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1505, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1506, 1507, 1508, 323, 324, 325, 0, 0, 327, 328, + 1509, 330, 0, 0, 332, 1510, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 0, 1511, 346, 1512, 0, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 0, 1513, 364, 365, 0, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1514, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 1515, 400, 401, 402, 1516, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 1517, 417, 418, 419, 420, 421, 422, + 1518, 424, 425, 0, 1519, 427, 428, 1520, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 1521, 444, 0, 0, 0, 446, 447, 0, + 448, 1522, 450, 451, 452, 453, 454, 0, 455, 1523, + 1524, 0, 0, 458, 459, 0, 461, 0, 0, 463, + 464, 1525, 466, 467, 468, 469, 470, 1526, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 0, 1527, 0, 485, 1528, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 1475, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, + 515, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 1476, 0, 0, 0, 0, 1477, 129, 130, 0, 131, + 132, 133, 1478, 135, 136, 137, 0, 1479, 1480, 1481, + 1482, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 1483, 1484, 155, 0, 156, 157, + 158, 159, 0, 0, 1485, 0, 1486, 163, 164, 165, + 166, 167, 1487, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 1488, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1489, 190, 191, 1490, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 1828, 214, 215, + 0, 216, 217, 218, 219, 0, 221, 222, 223, 224, + 225, 0, 0, 227, 0, 228, 229, 1491, 231, 0, + 232, 0, 233, 1492, 0, 1493, 236, 237, 0, 1494, + 240, 0, 241, 0, 0, 0, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 1495, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 1496, 0, 268, 269, 270, 271, 272, 1497, 1498, + 0, 1499, 0, 276, 1500, 1501, 279, 1502, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 1503, 289, 1504, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 1505, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1506, 1507, 1508, 323, 324, 325, 0, 0, 327, 328, + 1509, 330, 0, 0, 332, 1510, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 0, 1511, 346, 1512, 0, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 0, 1513, 364, 365, 0, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1514, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 1515, 400, 401, 402, 1516, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 1517, 417, 418, 419, 420, 421, 422, + 1518, 424, 425, 0, 1519, 427, 428, 1520, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 1521, 444, 0, 0, 0, 446, 447, 0, + 448, 1522, 450, 451, 452, 453, 454, 0, 455, 1523, + 1524, 0, 0, 458, 459, 0, 461, 0, 0, 463, + 464, 1525, 466, 467, 468, 469, 470, 1526, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 0, 1527, 0, 485, 1528, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 3141, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, + 515, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 2893, 0, 0, 0, 0, 2894, 129, 130, 0, 131, + 132, 133, 2895, 135, 136, 137, 0, 1479, 2896, 1481, + 1482, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 1483, 1484, 155, 0, 156, 157, + 158, 159, 0, 0, 2897, 0, 2898, 163, 164, 165, + 166, 167, 2899, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 2900, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 1489, 190, 191, 1490, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 1059, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 0, 221, 222, 223, 224, + 225, 0, 0, 227, 0, 228, 229, 1491, 231, 0, + 232, 0, 233, 2901, 0, 2902, 236, 237, 2903, 2904, + 240, 0, 241, 0, 0, 0, 244, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 2905, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 2906, 0, 268, 269, 270, 271, 272, 1497, 1498, + 0, 1499, 0, 276, 2907, 2908, 279, 2909, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 2910, 289, 2911, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 3142, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 1506, 2913, 1508, 323, 324, 325, 0, 0, 327, 328, + 2915, 330, 0, 0, 332, 1510, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 0, 2917, 346, 2918, 0, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 0, 2919, 364, 365, 0, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 377, 378, 1514, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 2920, 400, 401, 402, 0, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 2921, 417, 418, 419, 420, 421, 422, + 0, 424, 425, 0, 2923, 427, 428, 1520, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 3143, 444, 0, 0, 0, 446, 447, 0, + 448, 2925, 450, 451, 452, 453, 454, 0, 455, 1523, + 1524, 0, 0, 458, 459, 0, 461, 0, 0, 463, + 464, 2926, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 0, 1527, 0, 485, 2928, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 523, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, + 515, 0, 0, 0, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 0, 125, 126, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 129, 130, 0, 131, + 132, 133, 0, 135, 136, 137, 138, 139, 0, 141, + 142, 0, 143, 144, 145, 146, 147, 148, 0, 0, + 149, 150, 151, 152, 153, 154, 155, 0, 156, 157, + 158, 159, 160, 0, 0, 0, 162, 163, 164, 165, + 166, 167, 0, 169, 170, 171, 0, 172, 173, 174, + 175, 176, 177, 0, 0, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 0, 194, 0, 195, 196, 197, 198, 199, 200, 0, + 0, 201, 202, 203, 204, 0, 0, 205, 206, 207, + 208, 209, 0, 210, 211, 212, 0, 213, 214, 215, + 0, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 0, 227, 0, 228, 229, 230, 231, 0, + 232, 0, 233, 0, 0, 0, 236, 237, 524, 0, + 240, 0, 241, 0, 242, 243, 0, 245, 0, 246, + 247, 248, 249, 250, 251, 252, 0, 254, 255, 256, + 257, 0, 258, 259, 260, 261, 262, 263, 264, 0, + 265, 0, 267, 268, 269, 270, 271, 272, 273, 274, + 0, 275, 0, 276, 0, 0, 279, 0, 281, 282, + 283, 284, 285, 286, 0, 0, 287, 0, 289, 0, + 0, 291, 292, 293, 294, 295, 296, 297, 298, 525, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 0, 322, 323, 324, 325, 326, 0, 327, 328, + 0, 330, 0, 331, 332, 333, 334, 335, 336, 0, + 337, 338, 0, 0, 339, 340, 341, 0, 0, 342, + 343, 344, 0, 346, 0, 348, 349, 350, 351, 352, + 353, 354, 0, 356, 357, 358, 359, 0, 0, 0, + 0, 360, 361, 362, 0, 364, 365, 366, 367, 368, + 369, 0, 370, 371, 372, 373, 374, 375, 0, 376, + 0, 378, 379, 380, 381, 382, 383, 0, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 0, 397, 398, 0, 400, 401, 402, 403, 0, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 0, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 0, 0, 427, 428, 429, 430, 0, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 526, 444, 445, 0, 0, 446, 447, 0, + 448, 0, 450, 451, 452, 453, 454, 0, 455, 456, + 457, 0, 0, 458, 459, 460, 461, 462, 0, 463, + 464, 465, 466, 467, 468, 469, 470, 0, 0, 471, + 472, 473, 0, 474, 475, 476, 477, 0, 478, 479, + 480, 481, 482, 483, 484, 0, 485, 0, 487, 488, + 489, 490, 491, 492, 493, 0, 0, 494, 0, 0, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 515, 1765, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 117, 118, 119, 120, 121, 122, 123, 124, 0, 125, + 126, 127, 0, 0, 0, 1476, 0, 0, 0, 0, + 1477, 129, 130, 0, 131, 132, 133, 1478, 135, 136, + 137, 0, 1479, 1480, 1481, 1482, 0, 143, 144, 145, + 146, 147, 148, 0, 0, 149, 150, 151, 152, 1483, + 1484, 155, 0, 156, 157, 158, 159, 0, 0, 1485, + 0, 1486, 163, 164, 165, 166, 167, 1487, 169, 170, + 171, 0, 172, 173, 174, 175, 176, 177, 0, 1488, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 1489, 190, 191, 1490, 193, 0, 194, 0, 195, 196, + 197, 198, 199, 200, 0, 0, 201, 202, 203, 204, + 0, 0, 205, 206, 1059, 208, 209, 0, 210, 211, + 212, 0, 213, 214, 215, 0, 216, 217, 218, 219, + 0, 221, 222, 223, 224, 225, 0, 0, 227, 0, + 228, 229, 1491, 231, 0, 232, 0, 233, 1492, 0, + 1493, 236, 237, 0, 1494, 240, 0, 241, 0, 0, + 0, 244, 245, 0, 246, 247, 248, 249, 250, 251, + 252, 1495, 254, 255, 256, 257, 0, 258, 259, 260, + 261, 262, 263, 264, 0, 265, 1496, 0, 268, 269, + 270, 271, 272, 1497, 1498, 0, 1499, 0, 276, 1500, + 1501, 279, 1502, 281, 282, 283, 284, 285, 286, 0, + 0, 287, 1503, 289, 1504, 0, 291, 292, 293, 294, + 295, 296, 297, 298, 0, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 1506, 1507, 1508, 323, 324, + 325, 0, 0, 327, 328, 1509, 330, 0, 0, 332, + 1510, 334, 335, 336, 0, 337, 338, 0, 0, 339, + 340, 341, 0, 0, 342, 343, 0, 1511, 346, 1512, + 0, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 0, 0, 0, 0, 360, 361, 0, 1513, + 364, 365, 0, 367, 368, 369, 0, 370, 371, 372, + 373, 374, 375, 0, 376, 377, 378, 1514, 380, 381, + 382, 383, 0, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 0, 397, 398, 1515, + 400, 401, 402, 0, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 0, 1517, 417, + 418, 419, 420, 421, 422, 0, 424, 425, 0, 1519, + 427, 428, 1520, 430, 0, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 0, 444, 0, + 0, 0, 446, 447, 0, 448, 1522, 450, 451, 452, + 453, 454, 0, 455, 1523, 1524, 0, 0, 458, 459, + 0, 461, 0, 0, 463, 464, 1525, 466, 467, 468, + 469, 470, 0, 0, 471, 472, 473, 0, 474, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 0, 1527, + 0, 485, 1528, 487, 488, 489, 490, 491, 492, 493, + 0, 1, 494, 0, 0, 495, 496, 497, 498, 499, + 500, 2, 0, 3, 4, 0, 0, 0, 0, 1, + 0, 0, 512, 513, 514, 515, 0, 0, 0, 2, + 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 0, 0, 0, 0, 8, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 11, 0, 746, + 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, + 13, 0, 0, 0, 0, 11, 0, 746, 0, 0, + 0, 0, 0, 0, 0, 14, 15, 0, 13, 0, + 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, + 0, 0, 18, 14, 15, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 747, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 22, 0, 19, 0, + 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 22, 0, 0, 0, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 28, 29, 0, 0, 0, 0, + 0, 30, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 27, 28, 29, 0, 0, 0, 0, 0, 30, + 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 0, 0, 34, 0, + 33, 0, 0, 0, 0, 35, 0, 0, 0, 36, + 0, 0, 0, 0, 0, 0, 34, 0, 0, 37, + 0, 0, 0, 35, 0, 0, 0, 36, 0, 0, + 0, 38, 0, 0, 0, 39, 0, 37, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, + 0, 0, 0, 39, 0, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, + 0, 0, 0, 40, 43, 0, 0, 0, 0, 44, + 0, 0, 0, 748, 0, 0, 41, 0, 0, 0, + 0, 0, 43, 0, 0, 45, 0, 44, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 45, 0, 0, 0, 0, 0, 46, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 749, 0, 0, 0, 46, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 47 +}; + +static const yytype_int16 yycheck[] = +{ + 7, 0, 0, 47, 0, 73, 516, 0, 955, 16, + 0, 0, 895, 835, 0, 0, 23, 0, 904, 749, + 990, 0, 0, 881, 1235, 809, 970, 75, 76, 858, + 1691, 1196, 1223, 1032, 925, 920, 1221, 1156, 20, 741, + 38, 20, 20, 1417, 16, 77, 1573, 981, 981, 1209, + 1079, 981, 77, 981, 1654, 2140, 1190, 2142, 1465, 17, + 1198, 2313, 7, 2226, 2161, 959, 23, 1275, 75, 76, + 1986, 1201, 970, 2648, 1796, 46, 1297, 2171, 23, 0, + 39, 895, 2106, 897, 7, 899, 0, 0, 1226, 0, + 1123, 25, 26, 0, 0, 1128, 1607, 1608, 0, 2609, + 23, 2160, 100, 2663, 2609, 0, 26, 1987, 0, 805, + 0, 0, 1322, 999, 810, 2670, 748, 1087, 75, 76, + 0, 749, 742, 0, 0, 0, 2483, 2293, 0, 0, + 75, 76, 35, 0, 0, 0, 0, 2646, 2274, 2275, + 2276, 2565, 5, 2222, 0, 2569, 5, 0, 1658, 1709, + 979, 110, 75, 76, 5, 1711, 1814, 1053, 1054, 11, + 1927, 5, 13, 14, 16, 5, 13, 14, 5, 5, + 1815, 80, 5, 5, 1070, 5, 9, 13, 14, 5, + 114, 13, 14, 13, 14, 5, 5, 13, 14, 9, + 1134, 970, 5, 5, 5, 5, 4, 772, 982, 2982, + 5, 9, 2305, 9, 5, 2301, 172, 2299, 171, 5, + 5, 26, 2967, 3, 119, 5, 45, 32, 45, 13, + 14, 1960, 1961, 3, 4, 5, 1818, 55, 3, 9, + 2985, 9, 1971, 876, 876, 2314, 1975, 124, 63, 63, + 970, 11, 40, 1242, 100, 15, 16, 100, 122, 122, + 11, 2434, 1251, 1139, 2434, 16, 37, 1086, 74, 34, + 35, 107, 60, 147, 8, 23, 1210, 11, 871, 1213, + 1214, 15, 16, 190, 2821, 63, 4, 139, 5, 82, + 82, 9, 180, 2362, 2363, 46, 2365, 983, 3146, 289, + 93, 93, 802, 11, 295, 290, 287, 15, 16, 995, + 104, 117, 46, 295, 63, 2867, 0, 11, 106, 53, + 312, 15, 16, 1432, 74, 275, 107, 75, 76, 80, + 2937, 40, 137, 192, 30, 244, 20, 1106, 46, 23, + 107, 2416, 38, 217, 192, 183, 80, 117, 212, 365, + 850, 973, 165, 171, 38, 132, 1465, 132, 117, 2802, + 3277, 2804, 2527, 47, 2529, 1134, 278, 106, 1518, 388, + 1189, 289, 80, 1185, 1186, 119, 1953, 1954, 1955, 379, + 30, 171, 2579, 30, 40, 75, 180, 30, 30, 161, + 172, 75, 76, 77, 1057, 38, 38, 3341, 161, 416, + 1611, 172, 2528, 108, 149, 170, 3309, 172, 41, 3385, + 1073, 145, 2977, 201, 13, 14, 100, 2129, 168, 454, + 163, 295, 2922, 2988, 3076, 2578, 3078, 430, 406, 3174, + 64, 1279, 90, 1308, 71, 72, 122, 208, 478, 120, + 74, 1210, 176, 289, 1213, 1214, 289, 3235, 218, 3237, + 420, 137, 422, 224, 3371, 200, 1337, 3374, 272, 193, + 500, 2475, 250, 234, 198, 237, 175, 108, 274, 2553, + 240, 129, 260, 279, 237, 428, 479, 30, 272, 514, + 2979, 393, 132, 2680, 272, 132, 191, 230, 293, 3433, + 468, 272, 415, 126, 3470, 514, 355, 274, 514, 337, + 108, 451, 236, 3276, 352, 1524, 2575, 284, 2577, 284, + 323, 250, 358, 194, 286, 358, 304, 509, 518, 175, + 279, 260, 328, 213, 514, 3313, 308, 518, 366, 514, + 453, 3434, 85, 514, 1745, 279, 518, 3144, 344, 448, + 514, 94, 357, 357, 120, 350, 534, 3199, 2713, 354, + 503, 3468, 3104, 3090, 1187, 1187, 2729, 291, 514, 2729, + 3408, 456, 279, 516, 3007, 118, 454, 166, 356, 1162, + 444, 3123, 386, 2659, 2656, 1344, 1345, 454, 328, 357, + 416, 386, 1979, 2676, 1739, 1150, 0, 451, 451, 2106, + 361, 588, 1092, 381, 413, 26, 413, 1483, 1484, 3372, + 2506, 32, 1800, 370, 1423, 514, 240, 514, 357, 380, + 392, 3161, 400, 512, 463, 2372, 244, 516, 194, 1339, + 472, 2690, 1508, 403, 404, 1437, 588, 2177, 3373, 1321, + 476, 425, 2178, 476, 1326, 428, 428, 190, 428, 445, + 1332, 327, 1454, 2144, 478, 476, 3146, 478, 454, 307, + 203, 3146, 457, 2170, 265, 1836, 1856, 391, 2306, 512, + 163, 514, 517, 516, 2164, 514, 500, 1656, 510, 515, + 1871, 517, 515, 514, 517, 478, 2311, 514, 1889, 520, + 514, 3095, 1568, 1569, 514, 2838, 3100, 514, 514, 2845, + 1901, 514, 514, 520, 514, 445, 514, 500, 514, 464, + 396, 2430, 3049, 518, 514, 514, 137, 505, 506, 320, + 3275, 514, 514, 514, 514, 749, 1338, 513, 1328, 514, + 1931, 1339, 2964, 514, 1600, 1601, 1602, 1938, 514, 514, + 514, 1550, 1551, 3283, 2316, 505, 506, 505, 506, 3284, + 518, 1560, 370, 476, 1430, 505, 506, 507, 508, 509, + 510, 517, 749, 396, 396, 1574, 148, 454, 476, 510, + 258, 259, 800, 421, 498, 1976, 800, 500, 271, 1980, + 2819, 505, 506, 507, 508, 509, 510, 749, 117, 748, + 748, 3474, 500, 226, 1603, 464, 1984, 505, 506, 356, + 11, 26, 789, 1897, 11, 33, 1565, 2008, 2704, 507, + 508, 509, 510, 800, 177, 249, 59, 199, 1577, 515, + 1579, 2825, 518, 507, 508, 509, 510, 514, 3383, 386, + 448, 59, 3515, 881, 1928, 46, 848, 1490, 1551, 272, + 274, 1940, 2958, 848, 5, 1769, 1605, 1560, 835, 836, + 2417, 2418, 2419, 2420, 503, 1779, 518, 1510, 1782, 402, + 534, 190, 405, 800, 789, 1844, 2872, 516, 782, 80, + 784, 858, 293, 80, 2880, 800, 1009, 240, 2738, 3368, + 1979, 2741, 1015, 2743, 784, 2781, 789, 375, 376, 868, + 868, 1544, 868, 312, 856, 868, 514, 800, 868, 868, + 814, 1764, 868, 868, 509, 868, 2965, 274, 859, 868, + 868, 516, 137, 512, 853, 902, 903, 516, 3408, 906, + 907, 1411, 2624, 3408, 2626, 839, 5, 1854, 171, 350, + 514, 1858, 871, 354, 1861, 1948, 514, 3426, 3170, 3494, + 2130, 1623, 503, 1737, 202, 274, 108, 366, 1872, 1708, + 1709, 1822, 352, 514, 837, 838, 389, 840, 2057, 1797, + 1798, 1799, 1004, 3106, 177, 386, 274, 868, 2475, 53, + 1764, 279, 959, 37, 868, 868, 515, 868, 1006, 518, + 1022, 868, 868, 970, 1026, 1013, 868, 925, 377, 1863, + 1784, 978, 979, 868, 1872, 1789, 868, 984, 868, 868, + 987, 988, 2493, 990, 991, 992, 993, 370, 868, 3086, + 1769, 868, 868, 868, 973, 973, 868, 868, 451, 1006, + 1779, 868, 868, 1782, 868, 244, 1013, 240, 336, 3334, + 3335, 26, 2146, 132, 2148, 377, 457, 32, 119, 82, + 2394, 416, 26, 82, 1031, 1032, 1033, 433, 32, 173, + 93, 789, 244, 132, 93, 513, 970, 420, 173, 422, + 159, 515, 800, 1087, 518, 1052, 524, 981, 293, 1006, + 244, 314, 315, 316, 748, 749, 1013, 202, 244, 2250, + 159, 1006, 3387, 513, 1071, 448, 251, 244, 1013, 2277, + 509, 2793, 176, 1775, 524, 1082, 1083, 1084, 1780, 1086, + 1087, 2200, 2609, 1006, 1091, 3001, 132, 3250, 172, 193, + 1013, 466, 370, 1872, 198, 789, 1030, 2318, 40, 478, + 512, 245, 514, 381, 516, 206, 800, 1936, 26, 354, + 245, 356, 1119, 159, 32, 420, 379, 422, 60, 1091, + 2258, 500, 137, 478, 208, 823, 824, 825, 26, 1136, + 1137, 370, 236, 137, 32, 514, 1168, 1169, 416, 1171, + 224, 386, 1872, 1168, 1169, 500, 1171, 4, 515, 509, + 234, 518, 9, 416, 848, 274, 516, 1014, 370, 514, + 279, 1018, 1096, 1170, 106, 284, 2136, 1174, 1175, 13, + 14, 272, 1106, 274, 868, 274, 370, 1184, 1185, 1186, + 279, 512, 1189, 514, 370, 284, 449, 420, 466, 422, + 2019, 1125, 1879, 370, 374, 2325, 1883, 460, 342, 1886, + 1134, 2331, 1209, 1162, 512, 4, 4, 342, 516, 448, + 9, 9, 377, 8, 1993, 448, 11, 161, 514, 137, + 15, 16, 166, 11, 19, 20, 21, 15, 16, 2450, + 420, 514, 422, 279, 26, 1242, 448, 381, 284, 137, + 32, 36, 4, 514, 1251, 161, 381, 9, 1006, 166, + 166, 514, 512, 514, 448, 1013, 516, 515, 46, 201, + 518, 1422, 448, 1424, 1425, 2094, 1225, 420, 1275, 422, + 514, 448, 416, 837, 838, 514, 840, 361, 293, 973, + 226, 416, 2229, 2141, 2231, 515, 514, 391, 518, 293, + 1297, 515, 80, 237, 518, 514, 380, 1296, 2825, 171, + 2707, 515, 514, 2232, 518, 2234, 1313, 1296, 250, 514, + 1296, 1296, 1006, 2432, 514, 1322, 435, 2436, 260, 1013, + 514, 237, 466, 3486, 13, 14, 272, 446, 514, 507, + 272, 466, 1339, 13, 14, 350, 435, 514, 514, 354, + 515, 1313, 286, 518, 514, 137, 350, 446, 515, 1356, + 354, 518, 500, 3438, 1048, 1362, 171, 1339, 515, 1338, + 1338, 518, 304, 2575, 2143, 2577, 1060, 514, 3453, 515, + 286, 386, 518, 515, 497, 293, 518, 3471, 515, 3473, + 223, 518, 386, 2205, 1356, 342, 13, 14, 2609, 435, + 342, 516, 338, 1087, 1442, 293, 1444, 2176, 2177, 1447, + 446, 2592, 1409, 1410, 1452, 289, 2591, 1455, 1415, 1457, + 1417, 2576, 2623, 1461, 356, 1422, 1423, 1424, 1425, 2304, + 3514, 1355, 497, 3508, 381, 1359, 221, 516, 3513, 381, + 1437, 1438, 350, 13, 14, 1442, 354, 1444, 171, 381, + 1447, 515, 457, 389, 518, 1452, 515, 1454, 1455, 518, + 1457, 2480, 2481, 457, 1461, 2640, 354, 170, 400, 416, + 2590, 518, 2592, 873, 416, 875, 188, 189, 386, 171, + 515, 514, 1417, 518, 1168, 1169, 515, 1171, 515, 518, + 515, 518, 515, 518, 515, 1442, 515, 1444, 386, 518, + 1447, 13, 14, 515, 1417, 1452, 291, 1442, 1455, 1444, + 1457, 293, 1447, 294, 1461, 451, 3228, 1452, 3230, 466, + 1455, 1518, 1457, 2483, 466, 515, 1461, 515, 518, 1442, + 518, 1444, 59, 2457, 1447, 2458, 2459, 2460, 2458, 1452, + 2458, 2459, 1455, 514, 1457, 177, 258, 259, 1461, 457, + 177, 417, 515, 1550, 1551, 518, 497, 515, 223, 1547, + 518, 1547, 1559, 1560, 1547, 13, 14, 1547, 350, 457, + 1567, 152, 354, 350, 1547, 202, 6, 1574, 1547, 1547, + 10, 152, 515, 515, 515, 518, 515, 518, 18, 518, + 152, 314, 315, 316, 515, 515, 515, 518, 518, 518, + 13, 14, 1599, 33, 386, 152, 1603, 37, 240, 1606, + 13, 14, 152, 240, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1619, 1620, 13, 14, 40, 1624, 1625, 3146, + 2350, 515, 1629, 416, 518, 515, 1633, 515, 518, 1636, + 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 3238, 514, + 1647, 274, 2344, 40, 1338, 466, 379, 1654, 1620, 1656, + 89, 82, 515, 375, 376, 518, 152, 294, 2544, 1417, + 515, 515, 1694, 518, 518, 457, 480, 2888, 1675, 1694, + 152, 313, 13, 14, 2839, 2454, 2455, 108, 13, 14, + 516, 5, 152, 416, 1442, 152, 1444, 13, 14, 1447, + 1697, 1673, 13, 14, 1452, 2886, 289, 1455, 352, 1457, + 428, 1708, 1709, 1461, 13, 14, 501, 502, 503, 514, + 505, 506, 507, 508, 509, 510, 449, 505, 506, 507, + 508, 509, 510, 13, 14, 13, 14, 460, 370, 171, + 1664, 13, 14, 13, 14, 377, 2683, 514, 1745, 13, + 14, 514, 173, 13, 14, 2567, 515, 1754, 1442, 1756, + 1444, 2962, 418, 1447, 13, 14, 514, 8, 1452, 219, + 2651, 1455, 2922, 1457, 15, 16, 299, 1461, 19, 20, + 21, 202, 2630, 13, 14, 3436, 365, 366, 420, 3440, + 422, 514, 1754, 420, 1756, 422, 13, 14, 2673, 1796, + 13, 14, 224, 1800, 514, 2794, 1803, 1804, 365, 366, + 37, 296, 126, 127, 224, 42, 448, 224, 445, 365, + 366, 448, 365, 366, 245, 514, 3190, 262, 263, 40, + 375, 376, 514, 3044, 459, 460, 3448, 3449, 3480, 3481, + 2609, 235, 5, 8, 3495, 5, 11, 1844, 1136, 1137, + 15, 16, 1840, 514, 19, 20, 21, 171, 324, 1856, + 514, 514, 514, 1547, 5, 5, 1863, 1864, 1792, 514, + 5, 514, 5, 148, 101, 1872, 514, 9, 514, 477, + 104, 1805, 1806, 301, 518, 518, 515, 40, 386, 219, + 166, 3408, 1889, 286, 284, 166, 1893, 1894, 59, 1896, + 235, 514, 428, 514, 1901, 1902, 1903, 1904, 1905, 1906, + 1907, 93, 518, 1910, 1911, 1912, 1913, 1914, 1915, 1916, + 1917, 1918, 1919, 428, 1962, 59, 428, 265, 1925, 1926, + 1968, 74, 1929, 59, 1931, 3146, 428, 80, 108, 1936, + 524, 1938, 1626, 2877, 221, 172, 428, 428, 1872, 370, + 93, 476, 2889, 2890, 1878, 152, 100, 377, 198, 274, + 381, 1958, 274, 514, 274, 1962, 40, 1964, 274, 274, + 2739, 1968, 514, 152, 117, 171, 119, 3341, 516, 1976, + 13, 208, 3157, 1980, 515, 1982, 515, 1984, 171, 1986, + 518, 515, 224, 515, 515, 416, 515, 224, 515, 514, + 314, 315, 316, 473, 224, 514, 8, 234, 281, 11, + 1694, 2008, 281, 15, 16, 1962, 147, 514, 439, 518, + 3384, 1968, 2019, 2020, 463, 516, 514, 1962, 39, 516, + 161, 514, 472, 1968, 147, 166, 1033, 514, 514, 514, + 514, 268, 2734, 9, 46, 466, 426, 426, 161, 1962, + 291, 53, 13, 166, 11, 1968, 3016, 352, 19, 513, + 2094, 524, 2059, 206, 426, 379, 518, 2064, 2065, 3433, + 31, 3272, 518, 514, 521, 279, 390, 514, 80, 428, + 180, 162, 171, 454, 45, 46, 217, 314, 515, 217, + 518, 265, 2089, 2090, 321, 518, 389, 2094, 412, 226, + 290, 518, 416, 312, 217, 3214, 237, 312, 2877, 518, + 180, 2108, 219, 2882, 2111, 515, 2113, 514, 226, 274, + 226, 333, 295, 287, 237, 466, 291, 152, 514, 3, + 514, 274, 2129, 2130, 361, 449, 279, 1134, 514, 2136, + 152, 40, 2139, 145, 1828, 152, 460, 108, 152, 476, + 1033, 152, 274, 380, 3, 286, 1840, 147, 40, 2156, + 2929, 2930, 476, 59, 295, 289, 2858, 11, 289, 40, + 515, 161, 2169, 286, 176, 171, 166, 166, 515, 515, + 180, 515, 295, 166, 3, 328, 500, 39, 514, 2186, + 2187, 193, 2139, 514, 514, 3, 198, 3408, 515, 512, + 514, 344, 428, 512, 2139, 428, 2203, 428, 2205, 2156, + 428, 513, 1209, 521, 1962, 515, 497, 2214, 515, 515, + 1968, 2156, 449, 515, 518, 117, 2139, 217, 516, 497, + 3411, 515, 515, 515, 236, 2232, 2233, 2234, 497, 171, + 428, 515, 155, 2156, 249, 8, 40, 237, 11, 3124, + 59, 514, 15, 16, 473, 503, 19, 20, 21, 514, + 501, 502, 503, 514, 505, 506, 507, 508, 509, 510, + 2232, 2233, 2234, 518, 2271, 2309, 514, 2997, 1962, 171, + 2277, 514, 290, 46, 1968, 499, 59, 290, 243, 291, + 53, 59, 451, 518, 265, 274, 286, 152, 428, 514, + 1297, 202, 445, 428, 152, 295, 152, 281, 428, 2298, + 428, 454, 428, 444, 281, 2239, 2313, 80, 40, 2298, + 515, 2318, 2298, 2298, 352, 514, 1209, 514, 287, 515, + 476, 444, 40, 518, 152, 289, 501, 502, 503, 2336, + 505, 506, 507, 508, 509, 510, 279, 515, 171, 515, + 59, 2313, 514, 2350, 185, 166, 514, 80, 515, 2356, + 512, 515, 143, 198, 3240, 3134, 3135, 2291, 515, 171, + 515, 300, 358, 515, 524, 290, 515, 3146, 514, 180, + 518, 3200, 152, 3202, 175, 2309, 515, 439, 40, 391, + 40, 2139, 515, 86, 2356, 514, 454, 2394, 515, 512, + 3212, 515, 515, 516, 514, 514, 518, 518, 2156, 514, + 2094, 303, 515, 176, 1297, 516, 515, 515, 514, 171, + 515, 514, 314, 315, 316, 515, 2350, 518, 2112, 514, + 193, 475, 515, 198, 2358, 198, 2360, 2434, 515, 3399, + 2364, 3215, 2366, 3217, 2128, 513, 513, 518, 289, 2483, + 515, 515, 515, 2450, 444, 2139, 515, 503, 59, 2394, + 515, 460, 515, 2521, 515, 515, 476, 204, 3343, 2466, + 117, 40, 2156, 236, 514, 2472, 2473, 226, 88, 3352, + 191, 2394, 2516, 279, 279, 3333, 2483, 379, 40, 516, + 516, 428, 516, 516, 516, 516, 498, 2494, 516, 516, + 2497, 516, 2499, 505, 506, 507, 508, 509, 510, 2506, + 2507, 503, 428, 2510, 2511, 3327, 513, 515, 2515, 2516, + 515, 1518, 512, 516, 416, 2522, 516, 8, 291, 516, + 11, 516, 516, 2567, 15, 16, 516, 513, 516, 516, + 2537, 516, 274, 516, 516, 514, 516, 2535, 516, 2535, + 2547, 516, 2535, 2541, 516, 2535, 516, 449, 516, 107, + 516, 514, 2535, 7, 8, 46, 2535, 2535, 460, 13, + 2567, 516, 53, 516, 516, 19, 516, 516, 476, 23, + 515, 25, 26, 40, 476, 289, 30, 31, 32, 514, + 551, 35, 9, 351, 38, 39, 514, 514, 42, 80, + 335, 45, 46, 515, 518, 59, 40, 171, 500, 2606, + 518, 515, 2609, 2610, 1611, 2612, 198, 191, 513, 459, + 91, 518, 514, 344, 515, 2309, 60, 2624, 391, 2626, + 514, 75, 76, 40, 152, 1518, 516, 515, 124, 3408, + 152, 40, 515, 40, 2606, 515, 2394, 366, 2610, 366, + 2612, 514, 514, 40, 518, 454, 100, 514, 309, 2647, + 514, 2650, 0, 107, 108, 109, 110, 111, 279, 248, + 190, 2650, 106, 107, 2650, 2650, 454, 439, 514, 292, + 74, 74, 80, 117, 9, 2609, 515, 2675, 515, 3381, + 2678, 368, 2726, 514, 59, 176, 133, 513, 515, 513, + 503, 93, 272, 289, 2701, 439, 40, 2704, 514, 292, + 514, 292, 193, 459, 204, 515, 289, 198, 2642, 386, + 122, 289, 515, 515, 2721, 2722, 515, 451, 1611, 2726, + 365, 25, 2729, 148, 36, 498, 365, 297, 501, 502, + 503, 175, 505, 506, 507, 508, 509, 510, 1745, 2593, + 314, 315, 316, 868, 1762, 236, 151, 2227, 3242, 2756, + 3384, 2606, 100, 2801, 3337, 1863, 2545, 201, 3485, 2882, + 2339, 3358, 3463, 2770, 3117, 3412, 171, 3421, 2775, 2776, + 3456, 2815, 743, 2780, 2781, 1196, 3176, 2220, 2785, 2664, + 3410, 2788, 2789, 3419, 2233, 2217, 2793, 2794, 2585, 2483, + 2797, 2612, 3407, 1321, 2801, 8, 3306, 2297, 11, 147, + 291, 2808, 15, 16, 1294, 379, 250, 2356, 2997, 2203, + 2169, 2642, 1155, 161, 1005, 1005, 260, 1178, 166, 1733, + 1177, 2415, 2516, 171, 3393, 2186, 1697, 3315, 272, 3204, + 274, 1732, 180, 46, 23, 2156, 2729, 185, 1180, 3039, + 53, 2535, 416, 1974, 2801, 2852, 800, 2541, 789, 2394, + 2393, 2442, 1745, 2860, 3138, 1989, 2801, 3319, 126, 127, + 304, 1872, 3318, 2066, 2170, 2473, 2112, 80, 2109, 217, + 2021, 2805, 2879, 2567, 1438, 449, 983, 981, 2801, 981, + 2068, 2888, 1889, 981, 981, 981, 460, 981, 859, 237, + 2808, 981, 981, 2490, 1901, 2535, 3304, 783, 1806, 1982, + 391, 1673, 476, 171, 1339, 1359, 1674, 2546, 100, 314, + 315, 316, 356, 2270, -1, 2922, 1233, -1, -1, -1, + -1, -1, -1, -1, 1931, -1, 500, -1, -1, 171, + -1, 1938, 145, -1, -1, -1, -1, 381, 286, -1, + 514, 289, -1, -1, -1, -1, -1, 295, -1, -1, + -1, -1, -1, 2647, -1, -1, 400, 2964, 402, -1, + -1, 405, 2969, 176, -1, -1, 1033, -1, -1, 1976, + -1, -1, 3016, 1980, 379, -1, -1, -1, -1, 1986, + 193, 2675, 2980, -1, 2678, 198, -1, 335, -1, -1, + 2997, -1, 2964, 3000, 3001, -1, 1889, -1, -1, -1, + -1, 2008, -1, -1, -1, -1, -1, 498, 1901, 3016, + 358, 416, -1, -1, 505, 506, 507, 508, 509, 510, + -1, -1, 8, 236, -1, 11, -1, -1, -1, 15, + 16, -1, 2726, 19, 20, 21, -1, 3044, 1931, -1, + 2974, -1, 3049, 2801, 449, 1938, 314, 315, 316, -1, + 36, -1, -1, 3060, 3061, 460, -1, 3064, -1, 3066, + -1, 303, -1, 2997, -1, -1, -1, -1, 416, -1, + 514, 476, 314, 315, 316, -1, -1, -1, 291, -1, + -1, 535, -1, 1976, 3091, -1, 540, 1980, -1, 543, + -1, -1, -1, 1986, -1, 500, 444, 551, -1, 151, + -1, -1, -1, -1, -1, -1, 454, 2801, 3115, 514, + -1, 379, -1, -1, -1, 2008, -1, -1, -1, 171, + -1, 2815, 390, -1, -1, 473, -1, 475, 476, -1, + -1, -1, -1, -1, -1, -1, -1, 379, -1, 3146, + -1, -1, 1209, 3077, 412, 988, -1, -1, 416, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3170, 512, 3163, 3164, 515, 516, 517, + -1, -1, -1, -1, 416, -1, -1, -1, 391, 3186, + -1, 449, -1, 3190, 1155, -1, -1, -1, -1, -1, + -1, -1, 460, 3200, -1, 3202, -1, 3204, 3170, -1, + -1, 3208, -1, 3210, -1, 3212, -1, 449, 476, -1, + -1, -1, 3146, -1, -1, -1, 3223, -1, 460, -1, + -1, 3228, -1, 3230, -1, -1, -1, -1, -1, -1, + 1297, 3238, 500, -1, 476, 221, -1, -1, -1, -1, + -1, 3239, -1, 3241, 3251, 3190, 514, 1033, -1, 3256, + -1, -1, -1, -1, -1, -1, -1, -1, 500, -1, + -1, -1, 314, 315, 316, -1, -1, 3190, -1, -1, + -1, -1, 514, -1, -1, -1, -1, -1, -1, 3251, + -1, -1, -1, -1, 3282, 498, 2980, 741, 742, 743, + -1, -1, 505, 506, 507, 508, 509, 510, 3305, -1, + 3298, -1, -1, -1, 3302, 291, -1, -1, 3315, -1, + -1, 2318, -1, 177, -1, -1, -1, -1, -1, -1, + 3327, -1, 3016, -1, -1, -1, -1, 379, 782, 783, + 784, -1, -1, -1, 3341, 789, -1, 791, 202, 3273, + -1, 1184, -1, -1, -1, -1, 800, -1, -1, -1, + 804, 805, 3359, -1, -1, 809, 810, -1, 1329, -1, + 1331, -1, -1, -1, 416, -1, -1, -1, -1, 823, + 824, 825, -1, -1, -1, -1, 240, 3384, -1, -1, + -1, -1, 55, 837, 838, -1, 840, -1, -1, -1, + -1, -1, 3399, -1, -1, -1, 3341, 449, -1, 853, + -1, 3408, -1, 3410, -1, 859, -1, -1, 460, -1, + -1, -1, -1, -1, -1, -1, -1, 871, 3341, -1, + -1, -1, -1, 1209, 476, 2318, 3433, 3425, -1, 102, + 294, 885, 3190, -1, -1, 40, -1, -1, 3410, 3384, + 3447, 3448, 3449, 2450, -1, -1, -1, -1, 500, -1, + 123, 1518, -1, 3451, 0, 60, -1, -1, -1, -1, + -1, 3384, 514, 917, 918, -1, -1, 3474, 141, 3163, + 3164, -1, 145, -1, 3408, 929, -1, -1, -1, 933, + 934, 935, 936, -1, -1, -1, -1, -1, 3433, -1, + -1, -1, -1, -1, 167, 949, 988, 170, -1, 2506, + -1, 106, -1, -1, -1, -1, 370, -1, 3515, -1, + 3433, 1297, -1, 186, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, -1, 982, 983, + -1, 985, -1, -1, 988, -1, -1, -1, -1, -1, + 994, 995, -1, -1, 1611, 3239, 1000, 3241, -1, -1, + -1, -1, 1006, -1, 100, -1, 420, 2450, 422, 1013, + -1, -1, 13, -1, -1, -1, 1409, 1410, 19, 1023, + 175, -1, 1415, -1, -1, 439, 1030, -1, -1, -1, + 31, 445, -1, 3341, 448, -1, 1040, -1, 3282, -1, + -1, -1, -1, -1, 45, 46, 201, -1, -1, -1, + -1, 147, 2609, -1, 3298, -1, 279, -1, 3302, -1, + -1, -1, -1, 2506, 287, 161, -1, -1, -1, -1, + 166, -1, -1, -1, -1, 171, 3384, -1, -1, -1, + -1, -1, -1, -1, 180, 1089, 309, -1, -1, 185, + -1, -1, -1, -1, -1, 250, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, 108, -1, -1, + -1, -1, 988, 336, -1, 8, -1, 272, 11, -1, + -1, 217, 15, 16, -1, 3433, -1, -1, 1745, -1, + -1, -1, -1, 1175, 1138, -1, 1140, -1, -1, -1, + -1, 237, 1184, -1, -1, -1, -1, 2704, -1, 304, + -1, 1155, 1156, 46, -1, -1, -1, -1, 1162, -1, + 53, -1, -1, -1, -1, -1, 2609, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1184, 3425, 1518, -1, -1, -1, -1, 80, -1, -1, + 286, 1195, 1196, 289, -1, -1, -1, -1, -1, 295, + -1, 356, -1, -1, 1208, -1, -1, 3451, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, 1740, + -1, 1225, -1, -1, 2781, 1229, 381, -1, -1, 1750, + 1234, 1752, -1, -1, 1755, -1, -1, -1, -1, 335, + 1761, -1, 1763, -1, -1, 400, -1, -1, -1, -1, + -1, -1, 145, -1, -1, 1776, -1, -1, -1, 1652, + 1781, 2704, 358, -1, 1785, 1786, 1787, 1788, -1, 1790, + 1791, -1, 1889, -1, -1, 1611, -1, -1, -1, -1, + -1, -1, -1, 176, 1901, -1, 1290, -1, 1292, -1, + -1, -1, -1, -1, -1, -1, -1, 1301, -1, -1, + 193, -1, -1, -1, 1697, 198, -1, -1, 1312, -1, + 100, -1, -1, -1, 1931, -1, -1, 1321, -1, -1, + 416, 1938, 1326, -1, 1328, 1329, -1, 1331, 1332, -1, + -1, 2888, -1, -1, 42, -1, -1, -1, 2781, -1, + -1, -1, -1, 236, -1, -1, -1, -1, 444, -1, + -1, -1, -1, -1, -1, 1359, -1, 147, 454, 1976, + -1, -1, -1, 1980, -1, 2922, -1, 1409, 1410, 1986, + -1, 161, -1, 1415, -1, -1, 166, 473, -1, 475, + 476, 171, -1, -1, -1, -1, -1, -1, -1, -1, + 180, 2008, -1, -1, -1, 185, -1, -1, 291, 107, + -1, 109, -1, 111, -1, 1409, 1410, 37, -1, 1745, + -1, 1415, 42, 1417, -1, -1, 512, -1, -1, 515, + 516, 517, -1, -1, -1, -1, 1430, 217, 1432, 1433, + -1, -1, -1, -1, 1033, -1, 1440, -1, 1442, -1, + 1444, -1, -1, 1447, 3001, 2888, -1, 237, 1452, -1, + -1, 1455, -1, 1457, -1, -1, -1, 1461, -1, 1463, + -1, 1465, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, -1, -1, -1, -1, 2922, + -1, -1, -1, -1, -1, -1, -1, 3044, -1, -1, + -1, -1, -1, -1, -1, -1, 286, -1, 391, 289, + -1, -1, -1, -1, -1, 295, -1, -1, -1, 1902, + 1903, 1904, 1905, 1906, 1907, -1, -1, 1910, 1911, 1912, + 1913, 1914, 1915, 1916, 1917, 1918, 1919, -1, -1, -1, + -1, -1, -1, 1409, 1410, -1, -1, -1, 1033, 1415, + -1, -1, 172, -1, -1, 335, -1, -1, -1, -1, + 551, -1, -1, 1889, -1, -1, -1, -1, 3001, -1, + -1, -1, -1, -1, -1, 1901, -1, -1, 358, 1573, + -1, -1, -1, -1, -1, -1, -1, -1, 208, -1, + 1584, -1, -1, -1, -1, 1033, -1, -1, -1, 3146, + -1, -1, -1, -1, 224, 1931, -1, -1, -1, -1, + -1, 3044, 1938, -1, 234, 498, -1, -1, -1, -1, + 1209, -1, 505, 506, 507, 508, 509, 510, -1, 1623, + -1, -1, -1, -1, -1, -1, 416, -1, -1, -1, + 2151, -1, -1, -1, -1, -1, -1, -1, 268, -1, + 1976, -1, -1, -1, 1980, -1, -1, -1, -1, -1, + 1986, -1, -1, -1, 444, 1697, -1, -1, -1, 289, + -1, -1, -1, -1, 454, -1, 1670, -1, 1672, -1, + 1674, -1, 2008, -1, -1, -1, -1, -1, -1, -1, + 1684, 1685, -1, 473, 314, 475, 476, -1, -1, -1, + -1, 321, 177, 1697, -1, -1, 2089, 2090, 1297, -1, + -1, 2318, -1, 3146, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1209, -1, -1, 202, 1722, -1, + 1724, -1, 512, -1, -1, 515, 516, 517, -1, -1, + -1, 361, -1, -1, -1, 1739, 1740, -1, -1, -1, + -1, 742, 743, -1, -1, -1, 1750, 1751, 1752, 1753, + 380, 1755, -1, -1, -1, 240, -1, 1761, -1, 1763, + -1, 1209, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1775, 1776, -1, -1, -1, 1780, 1781, -1, -1, + -1, 1785, 1786, 1787, 1788, 8, 1790, 1791, 11, -1, + -1, -1, 15, 16, -1, -1, 19, 20, 21, -1, + -1, -1, 1297, 1807, -1, -1, -1, 2328, -1, 294, + 2203, 1815, -1, 1817, 1818, 1819, 1820, 1821, -1, 449, + -1, -1, -1, -1, 454, -1, -1, 535, 313, -1, + -1, -1, 540, 2450, 1838, 543, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1851, -1, 1297, + -1, 3408, -1, -1, -1, -1, -1, -1, 859, -1, + 1902, 1903, 1904, 1905, 1906, 1907, -1, -1, 1910, 1911, + 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, -1, -1, + -1, -1, -1, -1, -1, 370, -1, -1, -1, 2506, + -1, 26, 377, -1, -1, -1, -1, 32, 1902, 1903, + 1904, 1905, 1906, 1907, -1, 40, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1917, 1918, 1919, -1, -1, -1, 1518, + -1, -1, -1, -1, -1, 60, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 420, 1940, 422, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1952, -1, + -1, -1, -1, -1, 439, -1, -1, -1, 1962, -1, + 445, -1, -1, 448, 1968, 3408, -1, -1, -1, -1, + 1974, 106, -1, -1, -1, 1979, -1, -1, -1, -1, + -1, -1, 2318, -1, 1988, 1989, -1, -1, -1, -1, + -1, -1, 2609, -1, -1, -1, -1, -1, 221, 1000, + -1, -1, 137, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1611, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1023, 1518, -1, -1, 1902, 1903, 1904, 1905, + 1906, 1907, -1, -1, 1910, 1911, 1912, 1913, 1914, 1915, + 1916, 1917, 1918, 1919, -1, -1, -1, 2089, 2090, 2570, + 2571, -1, -1, 2057, -1, -1, -1, 2061, -1, -1, + -1, -1, 2066, -1, -1, -1, 201, -1, 291, -1, + 1518, -1, -1, -1, -1, -1, -1, 2598, -1, -1, + -1, -1, -1, 791, -1, 2089, 2090, 2704, 1089, -1, + -1, -1, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, + 2621, 2622, 2106, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2450, 250, 1611, 2510, 2511, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2139, -1, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 1745, 2151, -1, -1, + -1, -1, 2156, -1, 1155, 1156, 2160, -1, 293, -1, + -1, 2203, -1, 1611, 2781, -1, -1, -1, -1, 304, + 2506, -1, -1, 8, -1, -1, 11, 885, -1, -1, + 15, 16, -1, -1, 19, 20, 21, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2200, -1, -1, 2203, + -1, -1, 2206, -1, -1, -1, -1, -1, -1, 917, + -1, -1, -1, 2089, 2090, 350, -1, -1, 2222, 354, + -1, 356, -1, -1, -1, 933, 934, 935, 936, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 98, -1, -1, -1, -1, 381, -1, -1, -1, + 1745, 386, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 400, -1, -1, -1, 126, + 127, 2888, -1, 2609, -1, -1, -1, 985, 501, 502, + 503, -1, 505, 506, 507, 508, 509, 510, -1, 2293, + 1889, -1, -1, -1, -1, -1, 2300, 1745, -1, -1, + -1, -1, 1901, -1, -1, 2922, -1, 2311, 2701, -1, + 2314, 2315, 2316, 2317, 171, -1, -1, -1, -1, -1, + -1, -1, 457, -1, 2328, -1, 2330, 1328, 1329, 2333, + 1331, -1, 1931, 2726, 2338, -1, -1, -1, 2859, 1938, + 2344, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 2362, 2363, + -1, 2365, -1, 198, -1, -1, -1, -1, 2704, -1, + -1, -1, -1, -1, -1, -1, -1, 1976, -1, -1, + -1, 1980, -1, -1, 3001, -1, 221, 1986, -1, -1, + 2394, -1, -1, -1, 1889, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1901, -1, -1, 2008, + 2414, -1, -1, -1, -1, -1, -1, -1, 2422, 2423, + 2424, -1, -1, -1, -1, -1, -1, 3044, 2432, -1, + 2434, 1432, 2436, -1, -1, -1, 1931, -1, 2442, -1, + -1, 1889, -1, 1938, -1, 2781, -1, -1, -1, -1, + -1, -1, -1, 1901, -1, -1, 291, 314, 315, 316, + -1, -1, 1463, -1, 1465, -1, -1, 2860, 2510, 2511, + -1, 2475, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1976, -1, 1931, -1, 1980, -1, 1195, -1, -1, + 1938, 1986, -1, -1, -1, -1, -1, -1, -1, -1, + 1208, -1, -1, -1, -1, -1, 2510, 2511, -1, -1, + -1, -1, -1, 2008, -1, -1, -1, -1, -1, -1, + -1, 1229, 379, -1, -1, -1, -1, -1, 1976, 3146, + -1, -1, 1980, 390, -1, 2539, -1, -1, 1986, -1, + -1, 2545, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2888, -1, -1, 412, -1, 2561, -1, 416, + 2008, 2565, -1, -1, -1, 2569, 2570, 2571, -1, -1, + -1, 2575, 2576, 2577, -1, 2579, -1, -1, -1, 436, + -1, -1, -1, -1, 1292, -1, 2922, -1, -1, -1, + -1, -1, 449, 1301, 2598, -1, 2600, -1, -1, -1, + -1, -1, -1, 460, -1, 3126, -1, 3000, -1, 2613, + 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 476, + -1, -1, -1, -1, -1, -1, 3147, 3148, -1, -1, + -1, -1, -1, 8, 2510, 2511, 11, -1, -1, -1, + 15, 16, 2646, 500, 19, 20, 21, -1, 2652, -1, + -1, -1, 3173, -1, -1, -1, -1, 514, -1, 2701, + 2664, 36, -1, -1, -1, 3001, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, 2680, -1, -1, -1, + -1, 835, 836, -1, 2726, -1, 2690, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2701, -1, -1, + -1, -1, -1, 2707, -1, -1, -1, -1, 3044, -1, + 2714, 2715, 2716, 2717, -1, -1, -1, -1, -1, 2318, + -1, -1, 2726, 1724, -1, 2729, -1, -1, 2770, 2733, + 2734, -1, 1440, -1, 8, -1, -1, 11, 2742, 1740, + -1, 15, 16, -1, -1, 19, 20, 21, 902, 1750, + -1, 1752, 906, 907, 1755, -1, -1, -1, -1, -1, + 1761, -1, 1763, -1, -1, 2769, -1, -1, -1, -1, + -1, -1, 46, -1, -1, 1776, -1, -1, -1, 53, + 1781, -1, -1, -1, 1785, 1786, 1787, 1788, -1, 1790, + 1791, 3408, -1, -1, -1, 2799, -1, 2801, -1, -1, + -1, -1, -1, -1, -1, 959, 80, -1, -1, -1, + 3146, 2815, -1, -1, -1, 2819, -1, 3210, 2860, -1, + -1, 2825, -1, 2318, 978, 2701, -1, -1, -1, -1, + 984, -1, -1, 987, -1, 2839, 990, 991, 992, 993, + -1, 2845, -1, -1, -1, -1, 221, -1, -1, -1, + -1, 2450, -1, -1, 2858, 2859, 2860, -1, -1, -1, + -1, -1, 2866, -1, -1, -1, -1, -1, -1, -1, + 2318, -1, -1, 8, -1, -1, 11, 1031, 1032, 2883, + 15, 16, -1, 3404, 19, 20, 21, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 1052, -1, + -1, -1, 176, -1, -1, -1, -1, 2506, -1, -1, + -1, -1, -1, -1, -1, -1, 291, 1071, -1, 193, + -1, -1, -1, -1, 198, -1, -1, -1, 1082, 1083, + 1084, -1, 1086, 1087, -1, -1, -1, -1, -1, 1940, + -1, -1, -1, -1, -1, -1, -1, 221, 222, -1, + -1, -1, -1, -1, -1, 2450, -1, 2961, 3000, -1, + -1, 2965, 236, -1, 1672, 1119, 1674, -1, -1, -1, + -1, -1, -1, 1974, -1, 2979, 1684, -1, 1979, -1, + -1, -1, 1136, 1137, 2860, -1, -1, -1, -1, 2993, + -1, -1, -1, -1, -1, -1, 3000, -1, -1, -1, + 274, -1, 2450, 277, -1, -1, -1, -1, -1, -1, + 2609, 2506, -1, -1, 1722, -1, 1170, 291, -1, -1, + 1174, 1175, 3026, -1, -1, -1, -1, -1, 3032, -1, + -1, 1185, 1186, -1, -1, 3039, 8, -1, -1, 11, + -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, 2057, -1, 2506, -1, + -1, -1, -1, 198, 36, 2066, -1, -1, -1, 3073, + -1, -1, 3408, -1, 46, -1, -1, -1, -1, -1, + -1, 53, 8, -1, -1, 11, 221, -1, 1242, 15, + 16, 3095, -1, 19, 20, 21, 3100, 1251, -1, -1, + -1, -1, -1, -1, -1, 2704, -1, -1, 80, 1817, + 1818, 1819, 1820, 1821, 2609, -1, -1, 391, -1, -1, + -1, 1275, 3126, -1, 3000, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, -1, -1, -1, -1, + -1, -1, -1, 3147, 3148, -1, -1, -1, -1, -1, + 2151, -1, -1, -1, -1, -1, 291, -1, -1, -1, + -1, 2609, 3166, 8, 3168, -1, 11, -1, 3210, 3173, + 15, 16, -1, -1, 19, 20, 21, -1, -1, -1, + -1, -1, 2781, 3187, -1, -1, 3190, -1, -1, -1, + -1, 36, -1, -1, -1, -1, -1, -1, -1, 2200, + -1, -1, -1, -1, 176, 2206, 3210, -1, 1362, 2704, + 3214, 3215, -1, 3217, -1, -1, -1, -1, -1, -1, + -1, 193, -1, -1, 498, -1, 198, 501, 502, 503, + -1, 505, 506, 507, 508, 509, 510, -1, 3242, -1, + -1, -1, -1, -1, 1952, 3249, -1, -1, -1, 221, + 222, -1, -1, -1, -1, -1, 2704, -1, -1, -1, + -1, -1, -1, -1, 236, -1, -1, -1, 1422, -1, + 1424, 1425, -1, -1, -1, -1, 3280, -1, -1, -1, + -1, -1, -1, 1437, 1438, -1, 2781, -1, -1, 2888, + -1, -1, -1, -1, -1, 221, -1, -1, -1, -1, + 1454, -1, 274, -1, -1, 277, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3319, -1, -1, -1, 291, + -1, -1, 294, 2922, -1, -1, -1, 2328, -1, -1, + -1, -1, -1, 2781, -1, -1, -1, 3341, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3368, 291, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, 221, 3381, 3382, -1, + 3384, 3385, -1, -1, -1, -1, -1, -1, -1, 3393, + -1, -1, -1, 2888, -1, -1, -1, -1, -1, -1, + 3404, -1, 3001, -1, -1, 1559, -1, -1, -1, -1, + -1, -1, -1, 1567, -1, -1, -1, -1, -1, 391, + -1, -1, 3426, -1, -1, -1, -1, 2922, -1, 3433, + -1, 2432, -1, -1, -1, 2436, -1, -1, -1, -1, + 2888, 2442, -1, -1, -1, 3044, 291, -1, -1, -1, + -1, -1, 1606, -1, -1, -1, -1, -1, 1612, 1613, + 1614, 1615, 1616, 1617, 1618, 1619, 3470, -1, -1, -1, + 1624, 1625, -1, -1, 2922, 1629, -1, -1, -1, 1633, + -1, 3485, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, + 1644, -1, -1, 1647, -1, -1, -1, -1, -1, -1, + 1654, 8, 1656, -1, 11, -1, 3001, -1, 15, 16, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1675, -1, -1, -1, -1, 498, -1, -1, 501, + 502, 503, -1, 505, 506, 507, 508, 509, 510, 46, + -1, -1, -1, -1, -1, -1, 53, 3146, -1, 3044, + -1, -1, 524, 3001, 1708, 1709, -1, -1, -1, -1, + -1, -1, -1, -1, 2565, -1, -1, -1, 2569, 2570, + 2571, -1, -1, 80, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, + -1, -1, 2300, -1, -1, -1, 3044, 2598, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2315, 2316, 2317, + -1, -1, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, + 2621, 2622, 2330, -1, -1, 2333, -1, -1, -1, -1, + 2338, -1, -1, -1, -1, -1, -1, -1, 145, -1, + -1, -1, 1796, -1, -1, -1, 1800, -1, -1, 1803, + 1804, 3146, -1, -1, -1, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, -1, -1, -1, 176, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 193, -1, -1, -1, + 1844, 198, -1, -1, -1, -1, -1, -1, 3146, -1, + -1, -1, -1, -1, -1, -1, 2707, -1, -1, 1863, + 1864, -1, -1, -1, 2422, 2423, 2424, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 236, + -1, -1, 2733, -1, -1, -1, -1, -1, -1, 1893, + 1894, -1, 1896, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 8, -1, -1, 11, -1, 0, -1, 15, 16, -1, + -1, 1925, 1926, -1, -1, 1929, -1, -1, -1, -1, + -1, -1, -1, -1, 291, -1, -1, 22, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 32, 46, 34, + 35, -1, -1, -1, 1958, 53, -1, -1, -1, 3408, + 1964, -1, 47, -1, -1, -1, -1, 52, -1, -1, + -1, -1, -1, -1, -1, -1, 61, -1, 1982, -1, + 1984, -1, 80, -1, -1, -1, -1, -1, -1, -1, + 75, -1, -1, -1, -1, -1, -1, -1, -1, 84, + -1, 86, -1, 2561, -1, -1, -1, -1, 2859, -1, + -1, -1, -1, 98, -1, 100, 2020, -1, -1, -1, + -1, -1, 26, -1, -1, -1, 111, -1, 32, -1, + -1, -1, -1, -1, 391, 37, 40, -1, -1, -1, + 42, 126, 127, 128, -1, -1, -1, 145, -1, -1, + -1, -1, 137, -1, -1, 2059, 60, -1, 143, -1, + 2064, 2065, -1, 3408, -1, -1, 151, -1, 153, 154, + -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, + -1, -1, 167, -1, -1, -1, 171, -1, -1, -1, + -1, -1, -1, -1, 2652, 193, -1, -1, -1, 101, + 198, -1, 106, -1, 2108, -1, -1, 2111, -1, 2113, + 3408, -1, 197, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2129, -1, -1, 213, -1, + -1, -1, -1, 137, -1, -1, -1, -1, 236, -1, + -1, 498, -1, -1, -1, -1, -1, -1, 505, 506, + 507, 508, 509, 510, 239, -1, 2714, 2715, 2716, 2717, + -1, -1, -1, -1, -1, 2169, -1, -1, -1, -1, + 172, -1, -1, -1, -1, -1, -1, -1, 180, -1, + -1, 3032, 2186, 2187, -1, -1, -1, -1, 3039, -1, + -1, -1, -1, 291, -1, -1, -1, 201, -1, -1, + -1, 2205, -1, -1, -1, 8, 208, -1, 11, -1, + 2214, -1, 15, 16, 17, 18, 19, 20, 21, -1, + -1, -1, 224, -1, -1, -1, -1, -1, -1, 314, + 315, 316, 234, 36, -1, -1, -1, 322, 988, -1, + 325, -1, -1, 46, 3095, -1, 250, -1, -1, 3100, + 53, -1, -1, -1, -1, -1, 260, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 268, 2271, 272, 354, + -1, -1, -1, 2277, -1, 3126, -1, 80, 363, -1, + -1, -1, -1, -1, -1, -1, -1, 289, -1, 293, + -1, -1, -1, 391, 379, -1, 3147, 3148, -1, -1, + 304, 386, -1, -1, -1, 390, -1, -1, 2866, -1, + -1, -1, 314, -1, -1, 400, -1, -1, -1, 321, + -1, -1, 3173, 37, -1, -1, -1, 412, 42, -1, + -1, 416, 2336, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 350, -1, -1, -1, + 354, 436, 356, -1, -1, -1, -1, 1107, -1, 361, + -1, -1, -1, 3214, 449, -1, -1, 452, -1, -1, + 455, -1, -1, 176, -1, 460, -1, 381, 380, -1, + -1, -1, 386, -1, -1, -1, -1, 101, -1, -1, + 193, 476, -1, -1, -1, 198, 400, -1, -1, -1, + 498, 1151, -1, -1, -1, -1, -1, 505, 506, 507, + 508, 509, 510, -1, -1, 500, -1, -1, 221, 222, + -1, -1, -1, 3, -1, -1, -1, -1, 8, 514, + -1, 11, 517, 236, 1184, 15, 16, 17, 18, 19, + 20, 21, -1, -1, -1, -1, -1, 449, -1, -1, + -1, -1, 454, 457, -1, -1, 36, -1, 172, -1, + 40, -1, 2466, -1, -1, -1, 46, -1, 2472, 2473, + -1, 274, -1, 53, 277, -1, -1, -1, -1, 2483, + -1, -1, -1, -1, -1, -1, 1236, -1, 291, -1, + 2494, 294, -1, 2497, 208, 2499, -1, -1, -1, -1, + 80, -1, -1, 2507, -1, -1, -1, -1, -1, -1, + 224, 2515, 2516, -1, -1, -1, -1, -1, 2522, -1, + 234, -1, -1, -1, -1, -1, -1, -1, 1278, -1, + -1, -1, -1, 2537, -1, 1285, -1, -1, -1, -1, + -1, -1, -1, 2547, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3404, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 2567, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 289, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1335, -1, -1, 391, -1, + -1, -1, -1, -1, -1, -1, 176, -1, -1, -1, + 314, -1, -1, -1, -1, -1, -1, 321, 3166, -1, + 1360, -1, -1, 193, -1, -1, -1, -1, 198, -1, + 2624, -1, 2626, -1, -1, -1, -1, -1, -1, 3187, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 221, 222, -1, -1, -1, -1, 361, -1, -1, + -1, -1, -1, -1, -1, 1405, 236, 1407, -1, 1409, + 1410, -1, 1412, -1, -1, 1415, 380, -1, 1418, -1, + -1, 1421, -1, -1, -1, -1, 1426, -1, -1, 1429, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3249, -1, -1, 274, 498, -1, 277, 501, 502, + 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, + -1, 291, -1, -1, 294, 518, -1, 2721, 2722, -1, + -1, 1471, 3280, -1, -1, -1, -1, -1, -1, 24, + -1, -1, -1, -1, -1, 449, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2756, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2770, -1, -1, -1, + -1, 2775, 2776, -1, -1, -1, 2780, -1, -1, -1, + -1, 2785, -1, -1, 2788, 2789, 81, -1, -1, 2793, + 2794, -1, -1, 2797, -1, -1, -1, -1, -1, -1, + -1, -1, 97, -1, 2808, 1555, -1, -1, -1, -1, + -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1571, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1581, 1582, 1583, -1, -1, -1, 1587, -1, -1, + -1, 1591, -1, -1, -1, 3, -1, 5, 2852, -1, + -1, 146, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 156, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 168, -1, 2879, -1, -1, 173, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1653, -1, -1, -1, 202, -1, -1, + 68, 69, -1, -1, -1, -1, -1, -1, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1691, -1, -1, -1, -1, -1, -1, -1, -1, + 245, 109, 110, -1, 249, 113, 114, 1707, -1, -1, + -1, 8, 1712, -1, 11, 2969, -1, -1, 15, 16, + 17, 18, 19, 20, 21, -1, -1, -1, -1, 1729, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, + -1, -1, -1, 40, -1, -1, -1, -1, -1, 46, + -1, -1, -1, -1, -1, -1, 53, -1, 8, -1, + -1, 11, 3016, -1, -1, 15, 16, 17, 18, 19, + 20, 21, -1, -1, 319, -1, -1, -1, -1, -1, + 188, 189, -1, 80, -1, -1, 36, -1, -1, 334, + -1, -1, -1, -1, -1, 3049, 46, -1, -1, -1, + -1, -1, -1, 53, -1, -1, 3060, 3061, -1, -1, + 3064, -1, 3066, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, -1, -1, 370, -1, -1, -1, -1, + 80, -1, -1, -1, -1, -1, 381, 3091, -1, 384, + -1, -1, -1, -1, 252, 253, 254, 255, 256, 257, + 258, 259, -1, -1, 262, 263, -1, 402, -1, -1, + -1, 3115, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 416, -1, -1, -1, -1, -1, -1, 423, 176, + -1, -1, -1, -1, -1, -1, -1, -1, 433, -1, + -1, 1891, -1, -1, 439, -1, 193, -1, -1, 1899, + 1900, 198, 1902, 1903, 1904, 1905, 1906, 1907, -1, -1, + 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, + 1920, 466, -1, -1, 221, 222, 176, -1, -1, -1, + -1, -1, 3186, -1, -1, -1, -1, -1, -1, 236, + -1, -1, -1, 193, -1, -1, -1, -1, 198, -1, + 3204, -1, -1, -1, 3208, -1, -1, -1, 3212, -1, + -1, -1, -1, -1, -1, -1, -1, 375, 376, 3223, + -1, 221, 222, -1, 3228, -1, 3230, 274, -1, -1, + 277, -1, -1, -1, 3238, -1, 236, -1, -1, -1, + -1, -1, -1, -1, 291, -1, -1, 294, -1, -1, + -1, -1, 3256, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2023, 274, -1, 2026, 277, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 291, -1, -1, 294, -1, -1, -1, -1, -1, + -1, 3305, -1, -1, -1, -1, -1, 8, -1, -1, + 11, 3315, 470, 471, 15, 16, 17, 18, 19, 20, + 21, -1, 2072, 3327, -1, -1, 2076, 2077, 2078, 2079, + 2080, 2081, 2082, 2083, -1, 36, 494, 495, -1, 2089, + 2090, -1, 2092, 2093, 391, 46, -1, -1, -1, -1, + -1, -1, 53, -1, 2104, 3359, -1, 2107, -1, -1, + -1, -1, -1, -1, -1, 2115, 2116, 2117, 2118, 2119, + 2120, 2121, 2122, 2123, 2124, -1, -1, -1, -1, 80, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 391, -1, -1, 8, -1, -1, 11, -1, -1, + 2150, 15, 16, 17, 18, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 46, -1, -1, -1, -1, -1, -1, 53, + -1, -1, -1, 3447, 3448, 3449, -1, -1, -1, -1, + -1, 498, -1, 2203, 501, 502, 503, -1, 505, 506, + 507, 508, 509, 510, -1, -1, 80, -1, 515, -1, + 3474, -1, -1, -1, -1, 176, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 193, -1, -1, -1, -1, 198, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, 3515, -1, -1, -1, 515, -1, -1, -1, -1, + 221, 222, 2272, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2282, 2283, -1, 236, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 274, -1, -1, 277, -1, -1, 193, + -1, -1, -1, -1, 198, -1, -1, -1, -1, -1, + 291, -1, -1, 294, -1, -1, -1, 2347, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 221, 222, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 2369, + 2370, 2371, 236, -1, 2374, 2375, 2376, 2377, 2378, 2379, + -1, -1, -1, 2383, 2384, 2385, 2386, 2387, 2388, 2389, + 2390, 2391, 2392, -1, -1, -1, -1, 2397, 2398, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 274, -1, -1, 277, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2425, -1, 291, -1, -1, + 294, 2431, -1, -1, 8, -1, -1, 11, -1, -1, + 391, 15, 16, 17, 18, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 36, -1, -1, 2465, -1, -1, -1, -1, + -1, -1, 46, -1, -1, -1, -1, -1, -1, 53, + -1, -1, -1, -1, 2484, -1, -1, 2487, 2488, -1, + -1, -1, -1, -1, -1, 2495, 2496, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 80, -1, -1, 2509, + 2510, 2511, 2512, -1, 2514, -1, -1, -1, 2518, -1, + -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, + 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, + -1, -1, -1, -1, 515, -1, -1, -1, -1, -1, + -1, -1, 2572, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 8, -1, -1, 11, -1, -1, -1, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, -1, -1, -1, -1, -1, 193, + 46, -1, -1, -1, 198, -1, -1, 53, -1, -1, + -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, + -1, 505, 506, 507, 508, 509, 510, 221, 222, -1, + -1, 515, -1, -1, 80, -1, -1, 8, -1, -1, + 11, -1, 236, -1, 15, 16, 17, 18, 19, 20, + 21, -1, -1, -1, -1, -1, -1, -1, -1, 2679, + -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 46, -1, -1, -1, -1, + 274, 2701, 53, 277, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, + 294, -1, -1, -1, -1, -1, -1, -1, -1, 80, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 8, -1, -1, 11, -1, -1, -1, 15, 16, -1, + 176, 19, 20, 21, -1, -1, -1, 2757, -1, 2759, + -1, -1, -1, -1, -1, 2765, -1, 193, 36, -1, + -1, -1, 198, -1, 2774, -1, -1, 2777, 46, 2779, + -1, -1, -1, 2783, -1, 53, 2786, 2787, -1, -1, + 2790, 2791, -1, -1, -1, 221, 222, -1, 2798, -1, + -1, -1, -1, -1, -1, -1, -1, 2807, -1, -1, + 236, -1, 80, -1, -1, -1, -1, 391, -1, -1, + -1, -1, 2822, -1, -1, 176, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 193, -1, -1, -1, -1, 198, 274, -1, + -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, + 2860, -1, -1, -1, -1, 291, -1, -1, 294, -1, + 221, 222, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 236, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, + 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 274, 498, 193, 277, 501, 502, 503, + 198, 505, 506, 507, 508, 509, 510, -1, -1, -1, + 291, 515, -1, 294, -1, -1, -1, -1, 68, 69, + -1, 109, 110, 221, 222, 113, 114, -1, -1, -1, + -1, -1, -1, -1, -1, 391, -1, -1, 236, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 109, + 110, -1, -1, 113, 114, -1, -1, -1, -1, 2999, + 3000, -1, -1, -1, -1, -1, 274, -1, -1, 277, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 291, 3024, 3025, 294, -1, -1, -1, + 188, 189, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, -1, -1, -1, -1, 3048, -1, + -1, -1, 3052, -1, 3054, 3055, 3056, -1, -1, 3059, + -1, -1, 3062, 3063, -1, -1, -1, -1, 188, 189, + -1, 3071, 498, -1, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, -1, -1, 515, + -1, -1, -1, -1, 252, 253, 254, 255, 256, 257, + 258, 259, -1, -1, 262, 263, -1, -1, -1, -1, + -1, -1, 3112, -1, -1, -1, -1, -1, 3118, -1, + -1, -1, -1, 391, -1, -1, -1, -1, -1, -1, + -1, 3131, 252, 253, 254, 255, 256, 257, 258, 259, + -1, -1, 262, 263, -1, -1, -1, 498, -1, -1, + 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, + -1, -1, -1, -1, 515, 3165, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 3192, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 375, 376, -1, + -1, -1, -1, -1, -1, 3225, 3226, 3227, -1, -1, + 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, + 508, 509, 510, -1, -1, 3245, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 375, 376, 3257, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3303, -1, -1, -1, -1, -1, -1, + -1, -1, 470, 471, -1, -1, -1, -1, -1, -1, + 3320, -1, -1, -1, -1, -1, -1, -1, -1, 3329, + -1, -1, -1, -1, -1, -1, 494, 495, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 470, 471, -1, -1, 3354, -1, 514, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 494, 495, -1, -1, -1, -1, + 3380, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3423, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 3477, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, + 507, -1, -1, -1, -1, 512, -1, 514, -1, -1, + -1, -1, 519, 520, -1, 522, 523, 524, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, @@ -12578,11 +12553,428 @@ static const yytype_int16 yycheck[] = 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, + -1, -1, -1, -1, 519, 520, -1, 522, 523, 524, + 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, 170, 171, 172, + 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, + 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, 449, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, 500, -1, -1, + -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, + -1, 514, 515, -1, -1, -1, 519, 520, -1, 522, + 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, 171, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, 449, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, 500, -1, + -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, + 512, -1, 514, -1, -1, -1, -1, 519, 520, -1, + 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, + 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, + 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, + 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, + 171, 172, 173, 174, 175, 176, 177, -1, 179, -1, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, + 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, + 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, -1, -1, 446, 447, 448, 449, 450, + 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, + 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, + 471, -1, -1, 474, -1, 476, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, 500, + -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, + -1, 512, -1, 514, -1, -1, -1, -1, 519, 520, + -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, + 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, -1, -1, 37, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, 132, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, + -1, -1, 512, -1, 514, 515, -1, -1, -1, 519, + 520, -1, 522, 523, 3, 4, 5, 6, 7, -1, + 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, + -1, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, 170, 171, 172, 173, 174, 175, 176, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, -1, 233, 234, 235, 236, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + 449, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, 464, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, -1, + -1, 500, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 512, -1, 514, -1, -1, -1, -1, + 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, + 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, + 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, + 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, + -1, 169, 170, 171, 172, 173, 174, 175, 176, 177, + -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, + 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, 232, 233, 234, 235, 236, -1, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, + 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, + -1, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, + 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, + 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, + 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, + -1, -1, -1, -1, 512, -1, 514, -1, -1, -1, + -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, + 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + 37, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, + 507, -1, -1, -1, -1, 512, -1, 514, -1, -1, + -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, + 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, + -1, 37, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, + -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, + 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, + -1, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, + -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, + 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, + -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, + 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, -1, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, + -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, + 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, + 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, + 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, + 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, + -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, + 506, 507, -1, -1, -1, -1, 512, -1, 514, 515, + -1, -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + -1, -1, -1, 38, 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, @@ -12618,7 +13010,7 @@ static const yytype_int16 yycheck[] = 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, @@ -12630,7 +13022,476 @@ static const yytype_int16 yycheck[] = 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, + -1, -1, -1, -1, 519, 520, -1, 522, 523, 3, + 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, 37, -1, 39, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, -1, -1, 233, + 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, 391, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + 464, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, + -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, + 514, 515, -1, -1, -1, 519, 520, -1, 522, 523, + 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, 37, -1, 39, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, + 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, + -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, + -1, 514, -1, -1, -1, -1, 519, 520, -1, 522, + 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, -1, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, + -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, + 512, -1, 514, -1, -1, -1, -1, 519, 520, -1, + 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, + 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, + 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, + 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, + 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, + 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, + 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, + 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, + -1, 512, -1, 514, -1, -1, -1, -1, 519, 520, + -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, + 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, 171, 172, 173, 174, 175, 176, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, + -1, -1, 512, -1, 514, -1, -1, -1, -1, 519, + 520, -1, 522, 523, 3, 4, 5, 6, 7, 8, + 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, -1, 233, 234, 235, 236, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, 464, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, + -1, -1, -1, 512, -1, 514, 515, -1, -1, -1, + 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, + 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, + 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, + 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, + 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, + 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, + -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, + 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, + 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, + 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, + -1, -1, -1, -1, 512, -1, 514, -1, -1, -1, + -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, + 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, 473, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, + 507, -1, -1, -1, -1, 512, -1, 514, -1, -1, + -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, + 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, -1, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, + -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, + 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, + -1, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, + -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, + 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, + -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, + 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, + -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, + 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, + 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, + 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, + 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, + -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, + 506, 507, -1, -1, -1, -1, 512, -1, 514, -1, + -1, -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, @@ -12672,7 +13533,7 @@ static const yytype_int16 yycheck[] = 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, + 415, 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, @@ -12682,7 +13543,476 @@ static const yytype_int16 yycheck[] = 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, + -1, -1, -1, -1, 519, 520, -1, 522, 523, 3, + 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, -1, -1, 39, -1, -1, 42, 43, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, 170, -1, 172, 173, + 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, -1, -1, 233, + 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, 391, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + 464, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, + -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, + 514, -1, -1, -1, -1, 519, 520, -1, 522, 523, + 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, + 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, + -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, + -1, 514, -1, -1, -1, -1, 519, 520, -1, 522, + 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, 39, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, + -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, + 512, -1, 514, -1, -1, -1, -1, 519, 520, -1, + 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, + 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, -1, 120, + 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, + 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, + 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, + 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, + 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, + 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, + 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, + -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, + -1, 512, -1, 514, -1, -1, -1, -1, 519, 520, + -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, + 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, + -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, + -1, -1, 512, -1, 514, -1, -1, -1, -1, 519, + 520, -1, 522, 523, 3, 4, 5, 6, 7, 8, + 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, -1, 233, 234, 235, 236, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, 321, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, 464, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, + -1, -1, -1, 512, -1, 514, -1, -1, -1, -1, + 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, + 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, + 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, + 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, + -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, + 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, + 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, + 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, + -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, + 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, + 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, + 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, + -1, -1, -1, -1, 512, -1, 514, -1, -1, -1, + -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, + 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, + 507, -1, -1, -1, -1, 512, -1, 514, -1, -1, + -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, + 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, + -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, -1, 120, 121, 122, 123, 124, 125, + -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, + 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, + -1, 167, -1, 169, 170, -1, 172, 173, 174, 175, + 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, + -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, + 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, + -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, + 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, + -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, + -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, + 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, + 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, + 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, + 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, + -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, + 506, 507, -1, -1, -1, -1, 512, -1, 514, -1, + -1, -1, -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, @@ -12734,293 +14064,35 @@ static const yytype_int16 yycheck[] = 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, -1, -1, -1, -1, -1, -1, -1, - 505, 506, -1, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, -1, -1, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, -1, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, 498, -1, -1, -1, -1, -1, -1, - 505, 506, 507, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, -1, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, -1, -1, -1, -1, -1, -1, -1, - 505, 506, -1, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, -1, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, -1, -1, -1, -1, -1, -1, -1, - 505, 506, -1, -1, -1, -1, -1, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 3, 4, - 5, 6, 7, -1, 9, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, - 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, - -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, - -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, - 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, - 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, - 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, - 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, - 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, - 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, - 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, - -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, - 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, - 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, - -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, - -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, - -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, - 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, - 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, - 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, - -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, - 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, - 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, - -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, - 495, 496, 497, -1, -1, -1, -1, -1, -1, 3, - 4, 5, 6, 7, 8, 9, 10, 512, -1, 514, - -1, -1, -1, -1, 519, 520, 521, 522, 22, 23, + -1, -1, -1, -1, 519, 520, -1, 522, 523, 3, + 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, 43, - 44, -1, 46, 47, 48, 49, 50, 51, 52, -1, + 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, -1, 120, 121, 122, 123, + 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, - 144, -1, 146, -1, 148, 149, 150, 151, 152, 153, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, 173, - 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, - 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, + 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, -1, 218, -1, 220, -1, -1, 223, + 214, 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, 233, - 234, 235, -1, -1, 238, 239, 240, 241, 242, 243, + 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - -1, 275, 276, -1, 278, 279, 280, 281, 282, 283, + -1, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, @@ -13031,7 +14103,7 @@ static const yytype_int16 yycheck[] = 354, 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 384, 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, @@ -13043,64 +14115,67 @@ static const yytype_int16 yycheck[] = 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, -1, -1, -1, -1, -1, -1, - -1, 505, 506, 507, -1, 3, 4, 5, 512, -1, - 514, 9, -1, -1, -1, 519, 520, 521, 522, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, 37, - -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, 289, -1, 291, 292, 293, -1, -1, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - -1, -1, -1, -1, -1, -1, -1, 505, 506, 507, - -1, 3, 4, 5, 6, 7, 514, 9, -1, -1, - -1, -1, -1, -1, 522, -1, -1, -1, -1, -1, + -1, 505, 506, -1, -1, -1, -1, -1, 512, -1, + 514, -1, -1, -1, -1, 519, 520, -1, 522, 523, + 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, -1, 120, 121, 122, + 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, -1, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, + 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, -1, -1, -1, -1, + -1, -1, 505, 506, 507, -1, -1, -1, -1, 512, + -1, 514, -1, -1, -1, -1, 519, 520, -1, 522, + 523, 3, 4, 5, 6, 7, -1, 9, 10, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, 65, -1, 67, 68, 69, 70, 71, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, @@ -13111,7 +14186,7 @@ static const yytype_int16 yycheck[] = 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, - 172, 173, 174, 175, 176, 177, -1, 179, 180, 181, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, @@ -13144,332 +14219,245 @@ static const yytype_int16 yycheck[] = -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, -1, -1, -1, -1, - 3, 4, 5, 6, 7, -1, 9, -1, -1, -1, - 512, -1, 514, -1, -1, -1, -1, 519, 520, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, 39, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, 65, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, -1, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, -1, -1, -1, -1, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, - -1, 514, -1, -1, -1, -1, 519, 520, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, - 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, - 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, - -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, - 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, - 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, - 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, - 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, -1, 160, 161, 162, 163, - 164, 165, 166, 167, -1, 169, -1, -1, -1, 173, - 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, - 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, -1, 220, -1, -1, 223, - -1, 225, 226, 227, 228, 229, 230, -1, -1, 233, - -1, 235, -1, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, - -1, 275, 276, -1, 278, -1, 280, 281, 282, 283, - 284, 285, 286, 287, 288, -1, -1, 291, 292, 293, - -1, 295, 296, 297, 298, -1, 300, -1, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, - 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, - 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, - -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, - 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, - 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, - 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, - 444, -1, 446, 447, 448, -1, 450, 451, 452, 453, - -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, - -1, 465, 466, 467, 468, 469, 470, 471, -1, -1, - 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, + -1, -1, -1, 505, 506, -1, -1, -1, -1, -1, + 512, -1, 514, -1, -1, -1, -1, 519, 520, -1, + 522, 523, 3, 4, 5, 6, 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 515, -1, 22, 23, 24, 25, 26, 27, 28, - 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, - -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, - 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, + -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, + 31, 32, 33, -1, -1, -1, -1, -1, 39, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, + 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, + 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, + -1, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, + 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, + 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, + 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, + 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, + 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, -1, -1, -1, + -1, -1, -1, -1, 505, 506, -1, -1, -1, -1, + -1, 512, -1, 514, -1, -1, -1, -1, 519, 520, + -1, 522, 523, 3, 4, 5, 6, 7, -1, 9, + 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + -1, 31, 32, 33, -1, -1, -1, -1, -1, 39, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, -1, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, + 180, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 512, -1, 514, -1, -1, -1, -1, 519, + 520, -1, 522, 523, 3, 4, 5, 6, 7, -1, + 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, - 79, -1, -1, -1, 83, 84, 85, 86, 87, 88, - -1, 90, 91, 92, -1, 94, 95, 96, 97, 98, - 99, -1, -1, 102, 103, 104, 105, 106, 107, 108, + 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - -1, 160, -1, 162, 163, 164, 165, -1, 167, -1, - 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, + 159, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, - 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, - 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, + 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, - -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, - 229, 230, -1, -1, 233, -1, 235, -1, -1, 238, + -1, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, - 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, - -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, -1, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, - -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, - 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, + 319, 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, - 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, - 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, + 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, + 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, - -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, + -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, - 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, + 459, 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, 490, 491, 492, 493, 494, 495, 496, 497, 3, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 514, 515, -1, 22, 23, - 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, - 34, 35, -1, 37, -1, -1, -1, -1, 42, 43, - 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, -1, 59, 60, 61, 62, 63, - 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, - -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, - 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, - 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, - 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, - 164, 165, -1, 167, -1, 169, 170, 171, 172, 173, - 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, - 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, - 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, -1, 218, -1, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, -1, -1, 233, - 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - -1, 275, 276, 277, 278, -1, 280, 281, 282, 283, - 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, - -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, -1, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, - 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, - -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, -1, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, -1, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, - 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, - -1, -1, 446, 447, 448, 449, 450, 451, 452, 453, - -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, - 464, 465, 466, 467, 468, 469, 470, 471, -1, -1, - 474, -1, 476, 477, 478, 479, 480, 481, 482, 483, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 494, 495, 496, 497, -1, 3, 500, 5, -1, -1, + 489, 490, 491, 492, 493, 494, 495, 496, 497, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 514, -1, -1, -1, 22, 23, 24, 25, 26, 27, + -1, -1, -1, 512, -1, 514, -1, -1, -1, -1, + 519, 520, -1, 522, 523, 3, 4, 5, 6, 7, + -1, 9, 10, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, + -1, 39, -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, 66, 67, + -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, 126, 127, + 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 158, 159, 160, -1, 162, 163, 164, 165, -1, 167, + -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, -1, 233, 234, 235, 236, -1, + 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, 290, 291, 292, 293, -1, -1, 296, 297, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, -1, 397, + 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, -1, 414, 415, 416, 417, + 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, + -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, 449, 450, 451, 452, 453, -1, 455, 456, 457, + 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, 476, 477, + 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - -1, 3, 500, 5, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 514, -1, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, - 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, -1, 66, 67, 68, 69, 70, 71, - 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, - 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, - -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, - 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, - 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, - 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, - 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, -1, 275, 276, 277, 278, -1, 280, 281, - 282, 283, 284, 285, -1, 287, 288, -1, 290, 291, - 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, - 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, - 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, - 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, - 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, - 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, - 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, - 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, - 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, - -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, - -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 514, -1, -1, 22, 23, 24, 25, 26, + -1, -1, -1, -1, 512, -1, 514, -1, -1, -1, + -1, 519, 520, -1, 522, 523, 3, 4, 5, 6, + 7, 8, 9, 10, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, -1, 59, 60, 61, 62, 63, 64, -1, 66, + -1, -1, 39, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, -1, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + 117, 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, - 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + 137, 138, -1, 140, 141, 142, -1, 144, -1, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, - 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 218, -1, 220, -1, -1, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, - 277, 278, -1, 280, 281, 282, 283, 284, 285, -1, + -1, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, @@ -13480,120 +14468,72 @@ static const yytype_int16 yycheck[] = 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, - 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, - 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, - 62, 63, 64, -1, 66, 67, 68, 69, 70, 71, - 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, - 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, - -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, - 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, - 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, - 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, - 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, - 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, - -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, -1, 275, 276, 277, 278, -1, 280, 281, - 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, - 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, - 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, - 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, - 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, - 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, - 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, - 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, - 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, - 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, - -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, - -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 514, -1, -1, 22, 23, 24, 25, 26, - 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, - 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, - 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, - 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, - 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, - 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, - 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - -1, 118, -1, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, -1, -1, 134, 135, 136, - 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, - -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, - 167, -1, 169, -1, 171, -1, 173, 174, 175, -1, - 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, - 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, - 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, - 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, - -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, - 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, - -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, - -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, - 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, - 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, - 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, - 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, -1, 392, 393, 394, 395, -1, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, -1, 414, 415, 416, - 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, - 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, - 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, - 447, 448, 449, 450, 451, 452, 453, -1, 455, 456, - 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, - 467, 468, 469, 470, 471, -1, -1, 474, -1, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 3, -1, 500, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + 497, -1, -1, -1, -1, -1, -1, -1, 505, 506, + 507, -1, 3, 4, 5, 512, -1, 514, 9, -1, + -1, -1, 519, 520, -1, 522, 523, -1, -1, -1, + -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, + 31, 32, 33, -1, -1, -1, 37, -1, -1, -1, + -1, 42, 43, 44, -1, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, + 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, + 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, + 81, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, + 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, + 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, + 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + -1, 162, 163, 164, 165, -1, 167, -1, 169, 170, + -1, 172, 173, 174, 175, 176, 177, -1, 179, -1, + 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, -1, 199, 200, + 201, 202, 203, 204, 205, -1, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -1, -1, 233, 234, 235, 236, -1, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, 278, -1, 280, + 281, 282, 283, 284, 285, -1, 287, 288, 289, -1, + 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, -1, 329, 330, + 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, + 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, -1, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, + 391, 392, 393, 394, 395, -1, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, 414, 415, -1, 417, 418, 419, 420, + 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, + 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, + 461, -1, 463, 464, 465, 466, 467, 468, 469, 470, + 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, -1, -1, -1, + -1, 3, -1, -1, 505, 506, 507, -1, -1, -1, + -1, -1, -1, 514, -1, -1, -1, -1, -1, 520, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, @@ -13604,44 +14544,44 @@ static const yytype_int16 yycheck[] = 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, - 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, - 162, 163, 164, 165, -1, 167, -1, 169, -1, 171, + 142, -1, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, 161, + 162, 163, 164, 165, 166, 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, - 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + 212, 213, 214, 215, 216, 217, 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, - -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + -1, 233, -1, 235, -1, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, - 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, - 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 282, 283, 284, 285, 286, 287, 288, -1, -1, 291, + 292, 293, -1, 295, 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, -1, 318, 319, 320, -1, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, -1, 381, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - -1, -1, 414, 415, 416, 417, -1, 419, 420, 421, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, - 442, 443, -1, -1, 446, 447, 448, 449, 450, 451, + 442, 443, 444, -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, - -1, -1, 474, -1, 476, 477, 478, 479, 480, 481, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 3, -1, 500, -1, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 514, -1, -1, 22, 23, 24, 25, 26, + -1, -1, -1, 515, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, @@ -13656,7 +14596,7 @@ static const yytype_int16 yycheck[] = 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, - 167, -1, 169, -1, 171, -1, 173, 174, 175, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, @@ -13670,523 +14610,820 @@ static const yytype_int16 yycheck[] = -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, -1, 381, 382, 383, 384, 385, 386, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, -1, -1, 414, 415, 416, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, - 447, 448, 449, 450, 451, 452, 453, -1, 455, 456, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, - 467, 468, 469, 470, 471, -1, -1, 474, -1, 476, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, -1, 3, 500, 5, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, -1, 5, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 514, 515, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, 34, 35, -1, 37, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, 171, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, 449, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, -1, 3, 500, 5, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 514, -1, -1, -1, 22, 23, 24, 25, + 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, + -1, -1, -1, -1, -1, -1, 42, 43, 44, -1, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, + 66, 67, 68, 69, 70, 71, 72, 73, -1, 75, + 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, + 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, -1, -1, 134, 135, + 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, + 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, + -1, 167, -1, 169, 170, 171, 172, 173, 174, 175, + 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, + -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, -1, 233, 234, 235, + 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, 278, -1, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, 290, 291, 292, 293, -1, -1, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, + 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, -1, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, -1, 425, + 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, + 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, + 446, 447, 448, 449, 450, 451, 452, 453, -1, 455, + 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, + 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, + 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, + 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, + 496, 497, -1, 3, 500, 5, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, -1, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, -1, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, 278, -1, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + 290, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 3, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 514, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, + -1, -1, -1, -1, -1, -1, -1, 42, 43, 44, + -1, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, -1, 59, 60, 61, 62, 63, 64, + -1, 66, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, 81, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, + 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, + 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, -1, 167, -1, 169, 170, -1, 172, 173, 174, + 175, 176, 177, -1, 179, -1, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, + 205, -1, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, -1, 218, -1, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, -1, -1, 233, 234, + 235, 236, -1, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, 278, -1, 280, 281, 282, 283, 284, + 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, + -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, -1, + -1, -1, -1, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, + -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, -1, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, -1, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, -1, 391, 392, 393, 394, + 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, + 415, -1, 417, 418, 419, 420, 421, 422, 423, -1, + 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, -1, + -1, 446, 447, 448, -1, 450, 451, 452, 453, -1, + 455, 456, 457, 458, 459, 460, 461, -1, 463, 464, + 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, + -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, + -1, -1, 42, 43, 44, -1, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, + 60, 61, 62, 63, 64, -1, 66, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, 81, -1, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, -1, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + 170, -1, 172, 173, 174, 175, 176, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, -1, -1, 233, 234, 235, 236, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, -1, 275, 276, 277, 278, -1, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, -1, -1, -1, -1, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, 391, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, -1, 417, 418, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, -1, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, 464, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 514, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, -1, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, -1, -1, -1, 173, 174, 175, - -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, -1, -1, 223, -1, 225, - 226, 227, 228, 229, 230, -1, -1, 233, -1, 235, - -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, - 276, -1, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, -1, 5, + -1, -1, -1, -1, 514, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, + -1, 46, 47, 48, -1, 50, 51, 52, 53, 54, + -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, + -1, -1, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, + 85, 86, 87, 88, -1, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, -1, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, + 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, -1, 167, -1, 169, -1, 171, -1, 173, 174, + 175, -1, 177, -1, 179, -1, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, -1, 194, + 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, + 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, + 215, 216, -1, 218, -1, 220, -1, -1, 223, -1, + 225, 226, 227, 228, 229, 230, -1, -1, 233, -1, + 235, -1, -1, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, -1, 269, 270, 271, 272, 273, -1, + 275, 276, -1, 278, -1, 280, 281, 282, 283, 284, + 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, + -1, 296, 297, 298, -1, 300, -1, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, 318, 319, 320, -1, 322, 323, 324, + 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, + -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, -1, 359, 360, -1, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, + 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, -1, 414, + 415, 416, 417, -1, 419, 420, 421, 422, 423, -1, + 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, -1, + -1, 446, 447, 448, 449, 450, 451, 452, 453, -1, + 455, 456, 457, 458, 459, 460, 461, -1, 463, -1, + 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, + -1, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 3, -1, 500, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, + -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 43, 44, -1, 46, 47, 48, -1, + 50, 51, 52, 53, 54, -1, 56, 57, -1, 59, + 60, 61, 62, 63, 64, -1, -1, 67, 68, 69, + 70, 71, 72, 73, -1, 75, 76, 77, 78, 79, + -1, -1, -1, 83, 84, 85, 86, 87, 88, -1, + 90, 91, 92, -1, 94, 95, 96, 97, 98, 99, + -1, -1, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, -1, 118, -1, + 120, 121, 122, 123, 124, 125, -1, -1, 128, 129, + 130, 131, -1, -1, 134, 135, 136, 137, 138, -1, + 140, 141, 142, -1, 144, 145, 146, -1, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, -1, + 160, -1, 162, 163, 164, 165, -1, 167, -1, 169, + -1, 171, -1, 173, 174, 175, -1, 177, -1, 179, + -1, 181, 182, 183, 184, -1, 186, 187, 188, 189, + 190, 191, 192, -1, 194, 195, 196, 197, -1, 199, + 200, 201, 202, 203, 204, 205, -1, 207, -1, 209, + 210, 211, 212, 213, 214, 215, 216, -1, 218, -1, + 220, -1, -1, 223, -1, 225, 226, 227, 228, 229, + 230, -1, -1, 233, -1, 235, -1, -1, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, -1, 269, + 270, 271, 272, 273, -1, 275, 276, -1, 278, -1, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, 291, 292, 293, -1, -1, 296, 297, 298, -1, + 300, -1, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, 318, 319, + 320, -1, 322, 323, 324, 325, 326, 327, -1, 329, + 330, 331, 332, 333, 334, -1, 336, 337, 338, 339, + 340, 341, 342, 343, -1, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, -1, 359, + 360, -1, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + -1, -1, 392, 393, 394, 395, -1, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, 414, 415, 416, 417, -1, 419, + 420, 421, 422, 423, -1, 425, 426, 427, -1, -1, + 430, 431, 432, 433, 434, -1, 436, 437, 438, 439, + 440, 441, 442, 443, -1, -1, 446, 447, 448, 449, + 450, 451, 452, 453, -1, 455, 456, 457, 458, 459, + 460, 461, -1, 463, -1, 465, 466, 467, 468, 469, + 470, 471, -1, -1, 474, -1, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 3, -1, + 500, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 514, -1, -1, 22, 23, 24, + 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, + -1, 46, 47, 48, -1, 50, 51, 52, 53, 54, + -1, 56, 57, -1, 59, 60, 61, 62, 63, 64, + -1, -1, 67, 68, 69, 70, 71, 72, 73, -1, + 75, 76, 77, 78, 79, -1, -1, -1, 83, 84, + 85, 86, 87, 88, -1, 90, 91, 92, -1, 94, + 95, 96, 97, 98, 99, -1, -1, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, -1, 118, -1, 120, 121, 122, 123, 124, + 125, -1, -1, 128, 129, 130, 131, -1, -1, 134, + 135, 136, 137, 138, -1, 140, 141, 142, -1, 144, + 145, 146, -1, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, -1, 160, -1, 162, 163, 164, + 165, -1, 167, -1, 169, -1, 171, -1, 173, 174, + 175, -1, 177, -1, 179, -1, 181, 182, 183, 184, + -1, 186, 187, 188, 189, 190, 191, 192, -1, 194, + 195, 196, 197, -1, 199, 200, 201, 202, 203, 204, + 205, -1, 207, -1, 209, 210, 211, 212, 213, 214, + 215, 216, -1, 218, -1, 220, -1, -1, 223, -1, + 225, 226, 227, 228, 229, 230, -1, -1, 233, -1, + 235, -1, -1, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, -1, 269, 270, 271, 272, 273, -1, + 275, 276, -1, 278, -1, 280, 281, 282, 283, 284, + 285, -1, 287, 288, -1, -1, 291, 292, 293, -1, + -1, 296, 297, 298, -1, 300, -1, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, 318, 319, 320, -1, 322, 323, 324, + 325, 326, 327, -1, 329, 330, 331, 332, 333, 334, + -1, 336, 337, 338, 339, 340, 341, 342, 343, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, -1, 359, 360, -1, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, -1, -1, 392, 393, 394, + 395, -1, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, 414, + 415, 416, 417, -1, 419, 420, 421, 422, 423, -1, + 425, 426, 427, -1, -1, 430, 431, 432, 433, 434, + -1, 436, 437, 438, 439, 440, 441, 442, 443, -1, + -1, 446, 447, 448, 449, 450, 451, 452, 453, -1, + 455, 456, 457, 458, 459, 460, 461, -1, 463, -1, + 465, 466, 467, 468, 469, 470, 471, -1, -1, 474, + -1, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, -1, 3, 500, 5, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, + -1, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, + -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, + 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, 86, 87, 88, + -1, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, -1, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, + 229, 230, -1, -1, 233, -1, 235, -1, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, + 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, + -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 3, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 514, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, + 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, + 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, + 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, -1, -1, -1, 173, + 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, -1, -1, 223, + -1, 225, 226, 227, 228, 229, 230, -1, -1, 233, + -1, 235, -1, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, + -1, 275, 276, -1, 278, -1, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, -1, 300, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + -1, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 514, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, + -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, + 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, 86, 87, 88, + -1, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, -1, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, + 229, 230, -1, -1, 233, -1, 235, -1, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, + 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, + -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 3, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 514, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, + 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, + 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, + 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, -1, -1, -1, 173, + 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, -1, -1, 223, + -1, 225, 226, 227, 228, 229, 230, -1, -1, 233, + -1, 235, -1, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, + -1, 275, 276, -1, 278, -1, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, -1, 300, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + -1, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 514, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, -1, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, -1, -1, -1, 173, 174, 175, - -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, -1, -1, 223, -1, 225, - 226, 227, 228, 229, 230, -1, -1, 233, -1, 235, - -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, - 276, -1, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, -1, 5, + 514, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, + -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, + 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, 86, 87, 88, + -1, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, -1, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, + 229, 230, -1, -1, 233, -1, 235, -1, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, + 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, + -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 3, + -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 514, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, + 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, + 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, + 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, -1, -1, -1, 173, + 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, -1, -1, 223, + -1, 225, 226, 227, 228, 229, 230, -1, -1, 233, + -1, 235, -1, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, + -1, 275, 276, -1, 278, -1, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, -1, 300, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + -1, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 514, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, -1, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, -1, -1, -1, 173, 174, 175, - -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, -1, -1, 223, -1, 225, - 226, 227, 228, 229, 230, -1, -1, 233, -1, 235, - -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, - 276, -1, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, -1, -1, + 514, -1, -1, 22, 23, 24, 25, 26, 27, 28, + 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, + -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, + 59, 60, 61, 62, 63, 64, -1, -1, 67, 68, + 69, 70, 71, 72, 73, -1, 75, 76, 77, 78, + 79, -1, -1, -1, 83, 84, 85, 86, 87, 88, + -1, 90, 91, 92, -1, 94, 95, 96, 97, 98, + 99, -1, -1, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, -1, 118, + -1, 120, 121, 122, 123, 124, 125, -1, -1, 128, + 129, 130, 131, -1, -1, 134, 135, 136, 137, 138, + -1, 140, 141, 142, -1, 144, 145, 146, -1, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + -1, 160, -1, 162, 163, 164, 165, -1, 167, -1, + 169, -1, -1, -1, 173, 174, 175, -1, 177, -1, + 179, -1, 181, 182, 183, 184, -1, 186, 187, 188, + 189, 190, 191, 192, -1, 194, 195, 196, 197, -1, + 199, 200, 201, 202, 203, 204, 205, -1, 207, -1, + 209, 210, 211, 212, 213, 214, 215, 216, -1, 218, + -1, 220, -1, -1, 223, -1, 225, 226, 227, 228, + 229, 230, -1, -1, 233, -1, 235, -1, -1, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, -1, + 269, 270, 271, 272, 273, -1, 275, 276, -1, 278, + -1, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, 291, 292, 293, -1, -1, 296, 297, 298, + -1, 300, -1, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, -1, -1, -1, -1, 318, + 319, 320, -1, 322, 323, 324, 325, 326, 327, -1, + 329, 330, 331, 332, 333, 334, -1, 336, 337, 338, + 339, 340, 341, 342, 343, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + 359, 360, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, -1, -1, 392, 393, 394, 395, -1, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, 414, 415, -1, 417, -1, + 419, 420, 421, 422, 423, -1, 425, 426, 427, -1, + -1, 430, 431, 432, 433, 434, -1, 436, 437, 438, + 439, 440, 441, 442, 443, -1, -1, 446, 447, 448, + -1, 450, 451, 452, 453, -1, 455, 456, 457, 458, + 459, 460, 461, -1, 463, -1, 465, 466, 467, 468, + 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 514, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, -1, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, -1, -1, -1, 173, 174, 175, - -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, -1, -1, 223, -1, 225, - 226, 227, 228, 229, 230, -1, -1, 233, -1, 235, - -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, - 276, -1, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 514, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, -1, 3, 4, - 5, -1, -1, 8, 9, -1, -1, -1, -1, -1, - 15, 16, -1, 514, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, -1, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, -1, 153, 154, - 155, 156, 157, -1, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, -1, -1, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, -1, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, -1, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, -1, 299, 300, 301, -1, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, -1, 321, 322, 323, -1, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, -1, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, -1, 433, -1, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, -1, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, 476, 477, 478, 479, 480, 481, 482, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 494, - 495, 496, 497, -1, 3, -1, 501, 502, 503, 8, - 505, 506, 507, 508, 509, 510, 15, 16, -1, -1, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + -1, -1, -1, -1, -1, 514, -1, -1, 22, 23, + 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, + 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, + 54, -1, 56, 57, -1, 59, 60, 61, 62, 63, + 64, -1, -1, 67, 68, 69, 70, 71, 72, 73, + -1, 75, 76, 77, 78, 79, -1, -1, -1, 83, + 84, 85, 86, 87, 88, -1, 90, 91, 92, -1, + 94, 95, 96, 97, 98, 99, -1, -1, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, -1, 118, -1, 120, 121, 122, 123, + 124, 125, -1, -1, 128, 129, 130, 131, -1, -1, + 134, 135, 136, 137, 138, -1, 140, 141, 142, -1, + 144, 145, 146, -1, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, -1, 160, -1, 162, 163, + 164, 165, -1, 167, -1, 169, -1, -1, -1, 173, + 174, 175, -1, 177, -1, 179, -1, 181, 182, 183, + 184, -1, 186, 187, 188, 189, 190, 191, 192, -1, + 194, 195, 196, 197, -1, 199, 200, 201, 202, 203, + 204, 205, -1, 207, -1, 209, 210, 211, 212, 213, + 214, 215, 216, -1, 218, -1, 220, -1, -1, 223, + -1, 225, 226, 227, 228, 229, 230, -1, -1, 233, + -1, 235, -1, -1, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, -1, 269, 270, 271, 272, 273, + -1, 275, 276, -1, 278, -1, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, 291, 292, 293, + -1, -1, 296, 297, 298, -1, 300, -1, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + -1, -1, -1, -1, 318, 319, 320, -1, 322, 323, + 324, 325, 326, 327, -1, 329, 330, 331, 332, 333, + 334, -1, 336, 337, 338, 339, 340, 341, 342, 343, + -1, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, 359, 360, -1, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 394, 395, -1, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, -1, 417, -1, 419, 420, 421, 422, 423, + -1, 425, 426, 427, -1, -1, 430, 431, 432, 433, + 434, -1, 436, 437, 438, 439, 440, 441, 442, 443, + -1, -1, 446, 447, 448, -1, 450, 451, 452, 453, + -1, 455, 456, 457, 458, 459, 460, 461, -1, 463, + -1, 465, 466, 467, 468, 469, 470, 471, -1, -1, + 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, + 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, + 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 514, -1, -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, -1, @@ -14234,4234 +15471,3879 @@ static const yytype_int16 yycheck[] = 469, 470, 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, -1, + 3, 4, 5, -1, -1, 8, 9, -1, -1, -1, + -1, -1, 15, 16, -1, 514, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, -1, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, -1, + 153, 154, 155, 156, 157, -1, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, -1, -1, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, -1, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, -1, 299, 300, 301, -1, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, -1, 321, 322, + 323, -1, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, -1, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, -1, + 433, -1, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, -1, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 494, 495, 496, 497, -1, 3, -1, 501, 502, + 503, 8, 505, 506, 507, 508, 509, 510, 15, 16, + -1, -1, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, -1, -1, -1, 501, 502, 503, -1, 505, 506, + 507, 508, 509, 510, 8, -1, -1, 11, -1, -1, + -1, 15, 16, 17, 18, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 36, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 46, 8, -1, -1, 11, -1, -1, 53, + 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 36, -1, -1, -1, -1, 80, -1, -1, -1, + -1, 46, 8, -1, -1, 11, -1, -1, 53, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, -1, 80, -1, -1, -1, -1, + 46, -1, -1, -1, -1, -1, -1, 53, -1, 8, + -1, -1, 11, -1, -1, -1, 15, 16, 17, 18, + 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, 36, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 46, 8, -1, + -1, 11, 176, -1, 53, 15, 16, 17, 18, 19, + 20, 21, -1, -1, -1, -1, -1, -1, -1, 193, + -1, -1, -1, -1, 198, -1, 36, -1, -1, -1, + -1, 80, -1, -1, -1, -1, 46, -1, -1, -1, + -1, 176, -1, 53, -1, -1, -1, 221, 222, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 193, -1, + -1, -1, 236, 198, -1, -1, -1, -1, -1, -1, + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 176, -1, -1, -1, -1, -1, 221, 222, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, + 274, 236, 198, 277, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, + 294, -1, -1, -1, -1, 221, 222, 176, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, + 236, -1, 277, -1, 193, -1, -1, -1, -1, 198, + -1, -1, -1, -1, -1, -1, 291, -1, -1, 294, + -1, -1, -1, -1, -1, -1, 176, -1, -1, -1, + -1, -1, 221, 222, -1, -1, -1, -1, 274, -1, + -1, 277, -1, 193, -1, -1, -1, 236, 198, -1, + -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 221, 222, -1, -1, -1, -1, 391, -1, -1, + -1, -1, -1, -1, -1, 274, 236, -1, 277, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 291, -1, -1, 294, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + -1, -1, -1, -1, 274, -1, -1, 277, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 291, -1, -1, 294, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, + -1, 505, 506, 507, 508, 509, 510, -1, -1, -1, + -1, 515, 391, -1, -1, -1, -1, -1, 8, -1, + -1, 11, -1, -1, -1, 15, 16, 17, 18, 19, + 20, 21, -1, 498, -1, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, 36, -1, -1, -1, + 515, 391, -1, -1, -1, -1, 46, -1, -1, -1, + -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, + -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, -1, -1, 515, + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 8, -1, -1, 11, -1, -1, + -1, 15, 16, 17, 18, 19, 20, 21, -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, - 509, 510, 8, -1, -1, 11, -1, -1, -1, 15, + 509, 510, 36, -1, -1, -1, 515, -1, -1, -1, + -1, -1, 46, 8, -1, -1, 11, -1, -1, 53, + 15, 16, 17, 18, 19, 20, 21, -1, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, 36, -1, -1, -1, 515, 80, -1, -1, -1, + -1, 46, 8, -1, -1, 11, 176, -1, 53, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, 193, -1, -1, -1, -1, 198, -1, + 36, -1, -1, -1, -1, 80, -1, -1, -1, -1, + 46, -1, -1, -1, -1, -1, -1, 53, -1, -1, + -1, 221, 222, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, + -1, 11, 176, -1, -1, 15, 16, 17, 18, 19, + 20, 21, -1, -1, 274, -1, -1, 277, -1, 193, + -1, -1, -1, -1, 198, -1, 36, -1, -1, -1, + -1, 291, -1, -1, 294, -1, 46, -1, -1, -1, + -1, 176, -1, 53, -1, -1, -1, 221, 222, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 193, -1, + -1, -1, 236, 198, -1, -1, -1, -1, -1, -1, + 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 176, -1, -1, -1, -1, -1, 221, 222, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, + 274, 236, 198, 277, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, + 294, -1, -1, -1, -1, 221, 222, -1, -1, -1, + -1, 391, -1, -1, -1, -1, -1, -1, -1, 274, + 236, -1, 277, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 291, -1, -1, 294, + -1, -1, -1, -1, -1, -1, 176, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, + -1, 277, -1, 193, -1, -1, -1, -1, 198, -1, + -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 46, 8, -1, -1, 11, -1, -1, 53, 15, 16, - 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, - -1, -1, -1, -1, 80, -1, -1, -1, -1, 46, - 8, -1, -1, 11, -1, -1, 53, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, - -1, -1, -1, 80, -1, -1, -1, -1, 46, -1, - -1, -1, -1, -1, -1, 53, -1, 8, -1, -1, - 11, -1, -1, -1, 15, 16, 17, 18, 19, 20, + -1, 221, 222, -1, -1, -1, -1, 391, -1, -1, + -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, -1, -1, -1, -1, 515, 391, -1, -1, -1, + -1, -1, -1, -1, 274, -1, 8, 277, -1, 11, + -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, + -1, 291, -1, -1, 294, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 36, 391, 24, -1, -1, -1, + -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, + -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, + -1, 505, 506, 507, 508, 509, 510, -1, 80, -1, + -1, 515, -1, -1, -1, -1, -1, -1, 8, -1, + -1, 11, -1, 81, -1, 15, 16, 17, 18, 19, + 20, 21, -1, 498, -1, -1, 501, 502, 503, 97, + 505, 506, 507, 508, 509, 510, 36, -1, -1, -1, + 515, 391, -1, -1, -1, -1, 46, -1, -1, -1, + -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, + -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, 513, 146, -1, + 80, -1, -1, -1, -1, -1, -1, -1, 156, -1, + -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, + 168, -1, -1, -1, -1, 173, -1, -1, -1, -1, + -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 202, -1, -1, -1, -1, 221, + 222, -1, -1, -1, -1, -1, -1, -1, 498, -1, + -1, 501, 502, 503, 236, 505, 506, 507, 508, 509, + 510, -1, -1, 513, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 176, 245, -1, -1, + -1, 249, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 274, 193, -1, 277, -1, -1, 198, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 291, + -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, + -1, 221, 222, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, + -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, + -1, 319, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 334, -1, -1, -1, + -1, -1, -1, -1, 274, -1, -1, 277, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 291, -1, -1, 294, -1, -1, -1, -1, 367, + -1, -1, 370, -1, -1, -1, -1, -1, -1, 391, + -1, -1, -1, 381, -1, -1, 384, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 402, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 416, -1, + -1, -1, -1, -1, 422, 423, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, + -1, 439, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 391, -1, -1, -1, -1, -1, -1, 466, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, + 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, + -1, 513, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 3, -1, -1, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, -1, -1, 513, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 3, -1, -1, -1, -1, -1, -1, -1, -1, 507, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, + 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, + 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, + 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, + 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, + 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, + 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, + 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, + 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, + 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, 507, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, + 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, + 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, + -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, + 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, + 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, + 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, + 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, + 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, + 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, + 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, + -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, + -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, + 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, + -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, + -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, + 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, + 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, + 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, + 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, + 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, + -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, + 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, + -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, + -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, + 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, + 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, + 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, + 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, + 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, + 3, 4, 5, -1, -1, -1, 9, -1, -1, 507, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, + 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, + 33, -1, -1, -1, 37, -1, -1, -1, -1, 42, + 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, + 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, + 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, + 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, + -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, + -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, + 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, + 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, + 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, + 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, + 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, 278, -1, 280, 281, 282, + 283, 284, 285, -1, 287, 288, 289, -1, 291, 292, + 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, + 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, + 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, + 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, + 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, + 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, + 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, + -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, -1, -1, 8, -1, -1, + 11, -1, 505, 506, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 80, -1, -1, 36, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 46, 8, -1, -1, 11, - 176, -1, 53, 15, 16, 17, 18, 19, 20, 21, - -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, -1, 198, -1, 36, -1, -1, -1, -1, 80, - -1, -1, -1, -1, 46, -1, -1, -1, -1, 176, - -1, 53, -1, -1, -1, 221, 222, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 193, -1, -1, -1, - 236, 198, -1, -1, -1, -1, -1, -1, 80, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, - -1, -1, -1, -1, 221, 222, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 193, -1, -1, 274, 236, - 198, 277, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, - -1, -1, -1, 221, 222, 176, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 274, 236, -1, - 277, -1, 193, -1, -1, -1, -1, 198, -1, -1, - -1, -1, -1, -1, 291, -1, -1, 294, -1, -1, - -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, - 221, 222, -1, -1, -1, -1, 274, -1, -1, 277, - -1, 193, -1, -1, -1, 236, 198, -1, -1, -1, - -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 221, - 222, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, -1, -1, 274, 236, -1, 277, -1, -1, -1, + -1, -1, -1, -1, -1, 36, -1, -1, -1, -1, + 41, -1, -1, -1, -1, 46, 8, -1, -1, 11, + -1, -1, 53, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 291, -1, -1, 294, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 391, -1, -1, -1, -1, -1, - -1, -1, 274, -1, -1, 277, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 291, - -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 391, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 36, -1, -1, -1, -1, 80, + -1, -1, -1, -1, 46, 8, -1, -1, 11, -1, + -1, 53, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 36, -1, -1, -1, -1, 80, -1, + -1, -1, -1, 46, -1, 126, -1, -1, -1, -1, + 53, -1, -1, 8, -1, -1, 11, -1, -1, -1, + 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 80, -1, -1, + -1, 36, -1, -1, -1, 40, -1, -1, -1, -1, + -1, 46, -1, 8, -1, 176, 11, -1, 53, -1, + 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, + -1, -1, 193, -1, -1, -1, -1, 198, -1, -1, + -1, 36, -1, -1, 166, 80, -1, -1, -1, 171, + -1, 46, -1, -1, 176, -1, -1, -1, 53, -1, + 221, 222, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 193, -1, -1, -1, 236, 198, -1, -1, -1, + -1, -1, 165, -1, -1, 80, -1, -1, -1, -1, + -1, -1, -1, 176, -1, -1, -1, -1, -1, 221, + 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 193, -1, -1, 274, 236, 198, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, -1, -1, -1, 515, - 391, -1, -1, -1, -1, -1, 8, -1, -1, 11, - -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, - -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, - 507, 508, 509, 510, 36, -1, -1, -1, 515, 391, - -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, - -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, - 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, - 508, 509, 510, -1, -1, -1, -1, 515, 80, -1, + 291, -1, -1, 294, -1, -1, -1, -1, 221, 222, + -1, 176, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 274, 236, -1, 277, -1, -1, 193, -1, + -1, -1, -1, 198, -1, -1, -1, -1, -1, 291, + -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, + -1, 176, -1, -1, -1, -1, 221, 222, -1, -1, + -1, 274, -1, -1, 277, -1, -1, -1, 193, -1, + -1, 236, -1, 198, -1, -1, -1, -1, 291, -1, + -1, 294, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 221, 222, -1, -1, + 391, -1, -1, -1, -1, -1, -1, -1, -1, 274, + 323, 236, 277, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 291, -1, -1, 294, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, + -1, -1, 277, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 454, -1, -1, 291, -1, -1, 294, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 8, -1, -1, 11, -1, -1, -1, 15, - 16, 17, 18, 19, 20, 21, -1, 498, -1, -1, + -1, -1, 317, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, - 36, -1, -1, -1, 515, -1, -1, -1, -1, -1, - 46, 8, -1, -1, 11, -1, -1, 53, 15, 16, + -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, + -1, 8, -1, -1, 11, -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, 36, - -1, -1, -1, 515, 80, -1, -1, -1, -1, 46, - 8, -1, -1, 11, 176, -1, 53, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, 193, -1, -1, -1, -1, 198, -1, 36, -1, - -1, -1, -1, 80, -1, -1, -1, -1, 46, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, 221, - 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, - -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 8, -1, -1, 11, - 176, -1, -1, 15, 16, 17, 18, 19, 20, 21, - -1, -1, 274, -1, -1, 277, -1, 193, -1, -1, - -1, -1, 198, -1, 36, -1, -1, -1, -1, 291, - -1, -1, 294, -1, 46, -1, -1, -1, -1, 176, - -1, 53, -1, -1, -1, 221, 222, -1, -1, -1, + -1, -1, -1, 40, -1, -1, 391, -1, -1, 46, + -1, -1, -1, -1, -1, -1, 53, -1, -1, -1, + -1, -1, -1, -1, -1, 498, -1, -1, 501, 502, + 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, + -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, + -1, 11, -1, -1, -1, 15, 16, 17, 18, 19, + 20, 21, -1, 498, -1, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, 36, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, + -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 498, -1, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, -1, -1, -1, -1, + 80, -1, -1, -1, -1, 8, -1, -1, 11, 176, + -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, -1, - 236, 198, -1, -1, -1, -1, -1, -1, 80, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, - -1, -1, -1, -1, 221, 222, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 193, -1, -1, 274, 236, - 198, 277, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, - -1, -1, -1, 221, 222, -1, -1, -1, -1, 391, - -1, -1, -1, -1, -1, -1, -1, 274, 236, -1, - 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 291, -1, -1, 294, -1, -1, - -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 274, -1, -1, 277, - -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, - -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 221, - 222, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, - 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, - -1, -1, -1, 515, 391, -1, -1, -1, -1, -1, - -1, -1, 274, -1, 8, 277, -1, 11, -1, -1, - -1, 15, 16, 17, 18, 19, 20, 21, -1, 291, - -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 36, 391, -1, -1, -1, -1, -1, -1, - -1, -1, 46, -1, -1, -1, -1, -1, -1, 53, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, 80, -1, -1, 515, - -1, -1, -1, -1, -1, -1, 8, -1, -1, 11, - -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, - -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, - 507, 508, 509, 510, 36, -1, -1, -1, 515, 391, - -1, -1, -1, -1, 46, 8, -1, -1, 11, -1, - -1, 53, 15, 16, 17, 18, 19, 20, 21, -1, - 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, - 508, 509, 510, 36, -1, -1, -1, 515, 80, -1, + -1, 198, -1, 36, -1, -1, -1, 40, -1, -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, - 53, -1, 176, -1, -1, 8, -1, -1, 11, -1, - -1, -1, 15, 16, 17, 18, 19, 20, 21, 193, - -1, -1, -1, -1, 198, -1, -1, 80, -1, -1, - -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 46, -1, -1, -1, 221, 222, -1, - 53, -1, -1, -1, -1, -1, 498, -1, -1, 501, - 502, 503, 236, 505, 506, 507, 508, 509, 510, -1, - -1, -1, -1, 515, -1, -1, -1, 80, -1, -1, - -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 274, 193, -1, 277, -1, -1, 198, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, - 294, -1, -1, 176, -1, -1, -1, -1, -1, 221, - 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 193, -1, -1, -1, 236, 198, -1, -1, -1, -1, + 53, -1, -1, -1, 221, 222, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 236, + -1, -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 221, 222, + -1, 171, 8, -1, -1, 11, 176, -1, -1, 15, + 16, 17, 18, 19, 20, 21, -1, 274, -1, -1, + 277, -1, -1, 193, -1, -1, -1, -1, 198, -1, + 36, -1, -1, -1, 291, -1, -1, 294, -1, -1, + 46, -1, -1, -1, -1, -1, -1, 53, -1, -1, + -1, 221, 222, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, + -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, -1, - -1, -1, 274, 236, -1, 277, -1, -1, -1, -1, - 193, -1, -1, -1, -1, 198, -1, -1, -1, 291, - -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 391, 221, 222, - -1, 274, -1, -1, 277, -1, -1, -1, -1, -1, - -1, -1, -1, 236, -1, -1, -1, -1, 291, -1, - -1, 294, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 274, -1, -1, 277, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 291, -1, - -1, 294, -1, -1, -1, -1, -1, -1, -1, 391, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, 391, 513, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 193, -1, -1, -1, 274, 198, -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 291, -1, -1, 294, -1, -1, -1, 221, 222, + -1, -1, -1, -1, 391, -1, -1, 8, -1, -1, + 11, -1, -1, 236, 15, 16, 17, 18, 19, 20, + 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 166, -1, -1, -1, -1, 36, -1, -1, -1, -1, + 176, -1, -1, -1, -1, 46, -1, -1, -1, -1, + -1, 274, 53, -1, 277, -1, -1, 193, -1, -1, + -1, -1, 198, -1, -1, -1, -1, -1, 291, -1, + -1, 294, -1, -1, -1, -1, -1, -1, -1, 80, + -1, -1, -1, -1, -1, 221, 222, -1, -1, -1, + -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, + 236, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, + 507, 508, 509, 510, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, + -1, 277, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, - 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, - -1, 513, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 498, -1, -1, 501, 502, - 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, - 513, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 3, -1, -1, 498, -1, -1, 501, 502, + -1, -1, 193, -1, -1, -1, -1, 198, 498, -1, + -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, + 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 221, 222, -1, -1, -1, -1, -1, -1, -1, 8, + -1, -1, 11, -1, -1, 236, 15, 16, 17, 18, + 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 391, -1, 36, -1, -1, + -1, 40, -1, -1, -1, -1, -1, 46, -1, -1, + -1, -1, -1, 274, 53, 498, 277, -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, - 513, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, -1, -1, - -1, -1, -1, -1, -1, -1, 507, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, 44, -1, - 46, 47, 48, -1, 50, 51, 52, 53, 54, -1, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, -1, -1, 83, 84, 85, - 86, 87, 88, -1, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, -1, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, -1, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, -1, -1, -1, 173, 174, 175, - -1, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, -1, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, -1, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, -1, -1, 223, -1, 225, - 226, 227, 228, 229, 230, -1, -1, 233, -1, 235, - -1, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, -1, 269, 270, 271, 272, 273, -1, 275, - 276, -1, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, -1, -1, 291, 292, 293, -1, -1, - 296, 297, 298, -1, 300, -1, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, -1, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, -1, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, -1, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, -1, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, -1, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, -1, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, - -1, 507, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 22, 23, 24, 25, 26, 27, 28, 29, -1, - 31, 32, 33, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 43, 44, -1, 46, 47, 48, -1, 50, - 51, 52, 53, 54, -1, 56, 57, -1, 59, 60, - 61, 62, 63, 64, -1, -1, 67, 68, 69, 70, - 71, 72, 73, -1, 75, 76, 77, 78, 79, -1, - -1, -1, 83, 84, 85, 86, 87, 88, -1, 90, - 91, 92, -1, 94, 95, 96, 97, 98, 99, -1, - -1, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, -1, 118, -1, 120, - 121, 122, 123, 124, 125, -1, -1, 128, 129, 130, - 131, -1, -1, 134, 135, 136, 137, 138, -1, 140, - 141, 142, -1, 144, 145, 146, -1, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, -1, 160, - -1, 162, 163, 164, 165, -1, 167, -1, 169, -1, - -1, -1, 173, 174, 175, -1, 177, -1, 179, -1, - 181, 182, 183, 184, -1, 186, 187, 188, 189, 190, - 191, 192, -1, 194, 195, 196, 197, -1, 199, 200, - 201, 202, 203, 204, 205, -1, 207, -1, 209, 210, - 211, 212, 213, 214, 215, 216, -1, 218, -1, 220, - -1, -1, 223, -1, 225, 226, 227, 228, 229, 230, - -1, -1, 233, -1, 235, -1, -1, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, -1, 269, 270, - 271, 272, 273, -1, 275, 276, -1, 278, -1, 280, - 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, - 291, 292, 293, -1, -1, 296, 297, 298, -1, 300, - -1, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, -1, -1, -1, -1, 318, 319, 320, - -1, 322, 323, 324, 325, 326, 327, -1, 329, 330, - 331, 332, 333, 334, -1, 336, 337, 338, 339, 340, - 341, 342, 343, -1, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, 359, 360, - -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, -1, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, 414, 415, -1, 417, -1, 419, 420, - 421, 422, 423, -1, 425, 426, 427, -1, -1, 430, - 431, 432, 433, 434, -1, 436, 437, 438, 439, 440, - 441, 442, 443, -1, -1, 446, 447, 448, -1, 450, - 451, 452, 453, -1, 455, 456, 457, 458, 459, 460, - 461, -1, 463, -1, 465, 466, 467, 468, 469, 470, - 471, -1, -1, 474, -1, -1, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 494, 495, 496, 497, 3, 4, 5, - -1, -1, -1, 9, -1, -1, 507, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 22, 23, 24, 25, - 26, 27, 28, 29, -1, 31, 32, 33, -1, -1, - -1, 37, -1, -1, -1, -1, 42, 43, 44, -1, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, -1, 59, 60, 61, 62, 63, 64, -1, - -1, 67, 68, 69, 70, 71, 72, 73, -1, 75, - 76, 77, 78, 79, -1, 81, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, -1, 94, 95, - 96, 97, 98, 99, -1, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, -1, 118, -1, 120, 121, 122, 123, 124, 125, - -1, -1, 128, 129, 130, 131, -1, -1, 134, 135, - 136, 137, 138, -1, 140, 141, 142, -1, 144, 145, - 146, -1, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, -1, 162, 163, 164, 165, - -1, 167, -1, 169, 170, -1, 172, 173, 174, 175, - 176, 177, -1, 179, -1, 181, 182, 183, 184, -1, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, -1, 199, 200, 201, 202, 203, 204, 205, - -1, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, -1, 218, -1, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, -1, -1, 233, 234, 235, - 236, -1, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, - 276, 277, 278, -1, 280, 281, 282, 283, 284, 285, - -1, 287, 288, 289, -1, 291, 292, 293, -1, -1, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, -1, -1, - -1, -1, 318, 319, 320, 321, 322, 323, 324, 325, - 326, 327, -1, 329, 330, 331, 332, 333, 334, -1, - 336, 337, 338, 339, 340, 341, 342, 343, -1, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, -1, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, -1, 391, 392, 393, 394, 395, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, 414, 415, - -1, 417, 418, 419, 420, 421, 422, 423, -1, 425, - 426, 427, -1, -1, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, -1, -1, - 446, 447, 448, -1, 450, 451, 452, 453, -1, 455, - 456, 457, 458, 459, 460, 461, -1, 463, 464, 465, - 466, 467, 468, 469, 470, 471, -1, -1, 474, -1, - -1, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, - 496, 497, -1, -1, 8, -1, -1, 11, -1, 505, - 506, 15, 16, 17, 18, 19, 20, 21, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 36, -1, -1, -1, -1, 41, -1, -1, - -1, -1, 46, 8, -1, -1, 11, -1, -1, 53, + 291, -1, -1, 294, -1, -1, -1, -1, -1, -1, + -1, 80, -1, 8, -1, -1, 11, -1, -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 36, -1, -1, -1, -1, 80, -1, -1, -1, - -1, 46, 8, -1, -1, 11, -1, -1, 53, 15, - 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, -1, 80, -1, -1, -1, -1, - 46, -1, 126, -1, -1, -1, -1, 53, -1, -1, - 8, -1, -1, 11, -1, -1, -1, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, -1, 36, -1, - -1, -1, 40, -1, -1, -1, -1, -1, 46, -1, - 8, -1, 176, 11, -1, 53, -1, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, 193, - -1, -1, -1, -1, 198, -1, -1, -1, 36, -1, - -1, 166, 80, -1, -1, -1, 171, -1, 46, -1, - -1, 176, -1, -1, -1, 53, -1, 221, 222, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 193, -1, - -1, -1, 236, 198, -1, -1, -1, -1, -1, 165, - -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, - 176, -1, -1, -1, -1, -1, 221, 222, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, - 274, 236, 198, 277, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, - 294, -1, -1, -1, -1, 221, 222, -1, 176, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 274, - 236, -1, 277, -1, -1, 193, -1, -1, -1, -1, - 198, -1, -1, -1, -1, -1, 291, -1, -1, 294, - -1, -1, -1, -1, -1, -1, -1, -1, 176, -1, - -1, -1, -1, 221, 222, -1, -1, -1, 274, -1, - -1, 277, -1, -1, -1, 193, -1, -1, 236, -1, - 198, -1, -1, -1, -1, 291, -1, -1, 294, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 221, 222, -1, -1, 391, -1, -1, - -1, -1, -1, -1, -1, -1, 274, 323, 236, 277, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 274, -1, -1, 277, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 454, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 317, + -1, 36, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 46, -1, -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, -1, -1, - -1, -1, -1, 391, -1, -1, -1, -1, 8, -1, - -1, 11, -1, -1, -1, 15, 16, 17, 18, 19, - 20, 21, -1, 498, -1, -1, 501, 502, 503, -1, - 505, 506, 507, 508, 509, 510, 36, -1, -1, -1, - 40, -1, -1, 391, -1, -1, 46, -1, -1, -1, - -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, - 80, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 8, -1, -1, 11, -1, - -1, -1, 15, 16, 17, 18, 19, 20, 21, -1, - 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, - 508, 509, 510, 36, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, - 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, - 508, 509, 510, -1, -1, -1, -1, 80, -1, -1, - -1, -1, 8, -1, -1, 11, 176, -1, -1, 15, + 506, 507, 508, 509, 510, 80, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, 8, -1, -1, 11, -1, 176, -1, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, - -1, -1, -1, 193, -1, -1, -1, -1, 198, -1, - 36, -1, -1, -1, 40, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 193, -1, -1, -1, -1, 198, + 36, -1, -1, 424, -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, 53, -1, -1, - -1, 221, 222, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, + -1, -1, 221, 222, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 171, 8, - -1, -1, 11, 176, -1, -1, 15, 16, 17, 18, - 19, 20, 21, -1, 274, -1, -1, 277, -1, -1, - 193, -1, -1, -1, -1, 198, -1, 36, -1, -1, - -1, 291, -1, -1, 294, -1, -1, 46, -1, -1, - -1, -1, -1, -1, 53, -1, -1, -1, 221, 222, + -1, 176, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 193, -1, + -1, -1, -1, 198, -1, 274, -1, 498, 277, -1, + 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, + -1, -1, 291, -1, -1, 294, 221, 222, -1, -1, + -1, -1, -1, -1, -1, 8, -1, -1, 11, -1, + -1, 236, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 236, -1, -1, -1, -1, -1, -1, - -1, 80, -1, -1, -1, -1, -1, -1, -1, -1, - 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, 274, 198, -1, 277, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 291, -1, - -1, 294, -1, -1, -1, 221, 222, -1, -1, -1, - -1, 391, -1, -1, 8, -1, -1, 11, -1, -1, - 236, 15, 16, 17, 18, 19, 20, 21, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 166, -1, -1, - -1, -1, 36, -1, -1, -1, -1, 176, -1, -1, - -1, -1, 46, -1, -1, -1, -1, -1, 274, 53, - -1, 277, -1, -1, 193, -1, -1, -1, -1, 198, + -1, -1, -1, 36, -1, -1, -1, -1, -1, -1, + 176, -1, -1, 46, -1, -1, -1, -1, -1, 274, + 53, -1, 277, -1, -1, -1, -1, 193, -1, -1, + -1, -1, 198, -1, -1, -1, 291, -1, -1, 294, + -1, -1, -1, -1, -1, -1, 8, 80, -1, 11, + -1, -1, -1, 15, 16, 221, 222, 19, 20, 21, + -1, -1, 391, -1, -1, -1, -1, -1, -1, -1, + 236, -1, -1, -1, 36, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, + -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, + -1, 277, -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, -1, 291, -1, -1, 294, -1, - -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, - -1, -1, 221, 222, -1, -1, -1, -1, 391, -1, - -1, -1, -1, -1, -1, -1, -1, 236, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, - -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, - 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 274, -1, -1, 277, -1, + -1, -1, -1, -1, -1, -1, 391, 8, -1, -1, + 11, -1, -1, 176, 15, 16, -1, -1, 19, 20, + 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 193, -1, -1, -1, -1, 198, -1, -1, -1, 498, + -1, -1, 501, 502, 503, 46, 505, 506, 507, 508, + 509, 510, 53, -1, -1, -1, -1, -1, 221, 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 291, -1, -1, 294, -1, -1, -1, -1, + -1, -1, -1, 236, -1, -1, -1, -1, -1, 80, + -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, - -1, -1, -1, -1, 198, 498, -1, -1, 501, 502, + -1, 193, -1, -1, -1, -1, 198, -1, -1, -1, + -1, 274, -1, 498, 277, -1, 501, 502, 503, -1, + 505, 506, 507, 508, 509, 510, -1, -1, 291, 221, + 222, 294, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 176, -1, -1, -1, -1, + -1, -1, 274, -1, -1, 277, -1, -1, -1, -1, + -1, -1, 193, -1, -1, -1, -1, 198, -1, 291, + -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, + 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, + 221, 222, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, -1, -1, -1, 236, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 277, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 291, -1, -1, -1, -1, -1, -1, -1, -1, 391, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 221, 222, -1, - -1, -1, -1, -1, -1, -1, 8, -1, -1, 11, - -1, -1, 236, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 391, -1, 36, -1, -1, -1, 40, -1, - -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, - 274, 53, 498, 277, -1, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, -1, 291, -1, -1, - 294, -1, -1, -1, -1, -1, -1, -1, 80, -1, - 8, -1, -1, 11, -1, -1, -1, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 46, -1, - -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 498, - -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, - 509, 510, 80, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 391, -1, 8, - -1, -1, 11, -1, 176, -1, 15, 16, 17, 18, - 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, - -1, 193, -1, -1, -1, -1, 198, 36, -1, -1, - 424, -1, -1, -1, -1, -1, -1, 46, -1, -1, - -1, -1, -1, -1, 53, -1, -1, -1, -1, 221, - 222, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, - -1, 80, -1, -1, -1, -1, -1, -1, 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 193, -1, -1, -1, -1, - 198, -1, 274, -1, 498, 277, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, -1, 291, - -1, -1, 294, 221, 222, -1, -1, -1, -1, -1, - -1, -1, 8, -1, -1, 11, -1, -1, 236, 15, - 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 36, -1, -1, -1, -1, -1, -1, 176, -1, -1, - 46, -1, -1, -1, -1, -1, 274, 53, -1, 277, - -1, -1, -1, -1, 193, -1, -1, -1, -1, 198, - -1, -1, -1, 291, -1, -1, 294, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, -1, -1, -1, - -1, -1, 221, 222, -1, -1, -1, -1, -1, 391, - -1, -1, -1, -1, -1, -1, -1, 236, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 8, -1, - -1, 11, -1, -1, -1, 15, 16, -1, -1, 19, - 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 274, 36, -1, 277, -1, - -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, - -1, -1, 291, 53, -1, 294, -1, -1, -1, -1, - -1, -1, -1, 391, 8, -1, -1, 11, -1, -1, - 176, 15, 16, -1, -1, 19, 20, 21, -1, -1, - 80, -1, -1, -1, -1, -1, -1, 193, -1, -1, - -1, -1, 198, -1, -1, -1, 498, -1, -1, 501, - 502, 503, 46, 505, 506, 507, 508, 509, 510, 53, - -1, 8, -1, -1, 11, 221, 222, -1, 15, 16, - -1, -1, 19, 20, 21, -1, -1, -1, -1, -1, - 236, -1, -1, -1, -1, -1, 80, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 46, - -1, 8, 391, -1, 11, -1, 53, -1, 15, 16, - -1, -1, 19, 20, 21, -1, -1, -1, 274, -1, - 498, 277, -1, 501, 502, 503, 176, 505, 506, 507, - 508, 509, 510, 80, -1, 291, -1, -1, 294, 46, - -1, -1, -1, 193, -1, -1, 53, -1, 198, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 498, -1, -1, 501, + 502, 503, -1, 505, 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 221, 222, 80, -1, -1, -1, -1, -1, -1, - -1, -1, 176, -1, -1, -1, 236, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 193, - -1, -1, -1, -1, 198, -1, -1, -1, -1, 498, - -1, -1, 501, 502, 503, -1, 505, 506, 507, 508, - 509, 510, -1, -1, 274, -1, -1, 277, -1, 176, - -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, - -1, 291, 236, -1, 294, -1, 193, -1, -1, -1, - -1, 198, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 176, - -1, -1, -1, -1, 221, 222, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 193, -1, -1, 236, - -1, 198, -1, -1, -1, -1, -1, 291, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 221, 222, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 274, -1, 236, - 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 391, 498, -1, 291, 501, 502, 503, -1, 505, - 506, 507, 508, 509, 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 277, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 291, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 391, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 391, -1, -1, -1, 498, -1, - -1, 501, 502, 503, -1, 505, 506, 507, 508, 509, - 510, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3, -1, 5, -1, -1, -1, 498, -1, -1, + 501, 502, 503, -1, 505, 506, 507, 508, 509, 510, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 391, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 498, -1, -1, 501, 502, 503, - -1, 505, 506, 507, 508, 509, 510, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, - 507, 508, 509, 510, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + 37, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, + 277, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, 289, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, 34, 35, -1, 37, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, 66, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, -1, 275, 276, + 277, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 3, -1, 5, -1, -1, - -1, 498, -1, -1, 501, 502, 503, -1, 505, 506, - 507, 508, 509, 510, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, -1, 275, 276, 277, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, - 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, -1, -1, 82, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, 168, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, 445, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, 37, -1, -1, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, -1, 275, 276, 277, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, 289, -1, 291, 292, - 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, 168, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, 445, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, 34, 35, -1, 37, - -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, 66, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, 175, 176, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, -1, 275, 276, 277, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, 34, 35, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, -1, 275, 276, 277, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, -1, -1, 82, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, 168, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, 445, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, 290, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, 290, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - 168, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, 445, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, 34, 35, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, 4, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, 290, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, 290, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, 4, -1, -1, -1, - -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, 416, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, 416, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, 40, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, 40, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, 5, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, 37, -1, -1, 40, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, -1, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, -1, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + -1, 153, 154, 155, 156, 157, -1, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, 175, 176, 177, -1, 179, -1, -1, + -1, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, 275, 276, 277, 278, -1, -1, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, -1, 321, + 322, 323, -1, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, -1, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + -1, 433, -1, -1, 436, 437, 438, 439, 440, 441, + 442, 443, 444, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, -1, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 3, -1, 5, -1, -1, -1, -1, -1, -1, + -1, -1, 494, 495, 496, 497, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, 37, - -1, -1, 40, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, -1, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, -1, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, -1, 153, 154, 155, 156, 157, - -1, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, 175, 176, 177, - -1, 179, -1, -1, -1, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, -1, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, 275, 276, 277, - 278, -1, -1, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - -1, 299, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, -1, 321, 322, 323, -1, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, -1, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, -1, 433, -1, -1, 436, 437, - 438, 439, 440, 441, 442, 443, 444, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, -1, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 3, -1, 5, -1, -1, - -1, -1, -1, -1, -1, -1, 494, 495, 496, 497, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, 40, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, -1, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, -1, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 43, 44, -1, 46, 47, 48, -1, 50, 51, + 52, 53, 54, -1, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, 79, -1, -1, + -1, 83, 84, 85, 86, 87, 88, -1, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, -1, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, -1, -1, + -1, 173, 174, 175, -1, 177, -1, 179, -1, 181, + 182, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, -1, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, -1, 209, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, -1, + -1, 223, -1, 225, 226, 227, 228, 229, 230, -1, + -1, 233, -1, 235, -1, -1, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, -1, 269, 270, 271, + 272, 273, -1, 275, 276, -1, 278, -1, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, 298, -1, 300, -1, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, 320, -1, + 322, 323, 324, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, -1, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, -1, -1, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, 414, 415, -1, 417, -1, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + 432, 433, 434, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, 460, 461, + -1, 463, -1, 465, 466, 467, 468, 469, 470, 471, + -1, -1, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + 37, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, -1, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, -1, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, -1, 153, 154, 155, 156, + 157, -1, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, -1, 176, + 177, -1, 179, -1, -1, -1, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, 275, 276, + 277, 278, -1, -1, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, -1, 321, 322, 323, -1, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, -1, 433, -1, -1, 436, + 437, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, -1, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 494, 495, 496, + 497, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + 37, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, -1, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, -1, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, -1, 153, 154, 155, 156, + 157, -1, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, -1, 176, + 177, -1, 179, -1, -1, -1, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, 275, 276, + 277, 278, -1, -1, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, -1, 321, 322, 323, -1, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, -1, 433, -1, -1, 436, + 437, 438, 439, 440, 441, 442, 443, 444, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, -1, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 494, 495, 496, + 497, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + 37, -1, -1, -1, -1, 42, 43, 44, -1, 46, + 47, 48, 49, 50, 51, 52, -1, 54, 55, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, -1, -1, 81, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, -1, 153, 154, 155, 156, + 157, -1, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, 170, -1, 172, 173, 174, 175, 176, + 177, -1, 179, -1, -1, -1, 183, 184, -1, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, 208, -1, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, -1, -1, 233, 234, 235, 236, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, 275, 276, + 277, 278, -1, -1, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, -1, 321, 322, 323, -1, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + 337, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, 361, 362, 363, 364, -1, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, -1, 391, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, -1, -1, 414, 415, -1, + 417, 418, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, -1, 433, -1, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, -1, 461, -1, 463, 464, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 3, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 494, 495, 496, + 497, -1, -1, -1, -1, 22, 23, 24, 25, 26, + 27, 28, 29, -1, 31, 32, 33, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, 44, -1, 46, + 47, 48, -1, 50, 51, 52, 53, 54, -1, 56, + 57, -1, 59, 60, 61, 62, 63, 64, -1, -1, + 67, 68, 69, 70, 71, 72, 73, -1, 75, 76, + 77, 78, 79, -1, -1, -1, 83, 84, 85, 86, + 87, 88, -1, 90, 91, 92, -1, 94, 95, 96, + 97, 98, 99, -1, -1, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + -1, 118, -1, 120, 121, 122, 123, 124, 125, -1, + -1, 128, 129, 130, 131, -1, -1, 134, 135, 136, + 137, 138, -1, 140, 141, 142, -1, 144, 145, 146, + -1, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, -1, 160, -1, 162, 163, 164, 165, -1, + 167, -1, 169, -1, -1, -1, 173, 174, 175, -1, + 177, -1, 179, -1, 181, 182, -1, 184, -1, 186, + 187, 188, 189, 190, 191, 192, -1, 194, 195, 196, + 197, -1, 199, 200, 201, 202, 203, 204, 205, -1, + 207, -1, 209, 210, 211, 212, 213, 214, 215, 216, + -1, 218, -1, 220, -1, -1, 223, -1, 225, 226, + 227, 228, 229, 230, -1, -1, 233, -1, 235, -1, + -1, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, -1, 269, 270, 271, 272, 273, -1, 275, 276, + -1, 278, -1, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, 291, 292, 293, -1, -1, 296, + 297, 298, -1, 300, -1, 302, 303, 304, 305, 306, + 307, 308, -1, 310, 311, 312, 313, -1, -1, -1, + -1, 318, 319, 320, -1, 322, 323, 324, 325, 326, + 327, -1, 329, 330, 331, 332, 333, 334, -1, 336, + -1, 338, 339, 340, 341, 342, 343, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 359, 360, -1, 362, 363, 364, 365, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, -1, -1, 392, 393, 394, 395, -1, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, 414, 415, -1, + 417, -1, 419, 420, 421, 422, 423, -1, 425, 426, + 427, -1, -1, 430, 431, 432, 433, 434, -1, 436, + 437, 438, 439, 440, 441, 442, 443, -1, -1, 446, + 447, 448, -1, 450, 451, 452, 453, -1, 455, 456, + 457, 458, 459, 460, 461, -1, 463, -1, 465, 466, + 467, 468, 469, 470, 471, -1, -1, 474, -1, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 43, 44, -1, 46, 47, - 48, -1, 50, 51, 52, 53, 54, -1, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, 79, -1, -1, -1, 83, 84, 85, 86, 87, - 88, -1, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, -1, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, -1, -1, -1, 173, 174, 175, -1, 177, - -1, 179, -1, 181, 182, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, -1, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - -1, 209, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, -1, -1, 223, -1, 225, 226, 227, - 228, 229, 230, -1, -1, 233, -1, 235, -1, -1, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - -1, 269, 270, 271, 272, 273, -1, 275, 276, -1, - 278, -1, 280, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - 298, -1, 300, -1, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, 320, -1, 322, 323, 324, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, -1, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, -1, 381, 382, 383, 384, 385, 386, 387, - 388, 389, -1, -1, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, 414, 415, -1, 417, - -1, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, 432, 433, 434, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, 460, 461, -1, 463, -1, 465, 466, 467, - 468, 469, 470, 471, -1, -1, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, 37, -1, -1, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - -1, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, -1, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, -1, - 153, 154, 155, 156, 157, -1, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, 177, -1, 179, -1, -1, -1, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, -1, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, 275, 276, 277, 278, -1, -1, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, -1, 299, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, -1, 321, 322, - 323, -1, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, -1, - 433, -1, -1, 436, 437, 438, 439, 440, 441, 442, - 443, 444, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, -1, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 494, 495, 496, 497, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, 37, -1, -1, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - -1, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, -1, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, -1, - 153, 154, 155, 156, 157, -1, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, -1, 176, 177, -1, 179, -1, -1, -1, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, -1, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, 275, 276, 277, 278, -1, -1, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, -1, 299, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, -1, 321, 322, - 323, -1, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, -1, - 433, -1, -1, 436, 437, 438, 439, 440, 441, 442, - 443, 444, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, -1, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 494, 495, 496, 497, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, 37, -1, -1, -1, -1, 42, - 43, 44, -1, 46, 47, 48, 49, 50, 51, 52, - -1, 54, 55, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, -1, -1, 81, -1, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, -1, - 153, 154, 155, 156, 157, -1, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, 170, -1, 172, - 173, 174, 175, 176, 177, -1, 179, -1, -1, -1, - 183, 184, -1, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, 208, -1, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, -1, -1, - 233, 234, 235, 236, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, 275, 276, 277, 278, -1, -1, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, -1, 299, 300, 301, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, -1, 321, 322, - 323, -1, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, 337, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, 361, 362, - 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, -1, 391, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, -1, -1, - -1, 414, 415, -1, 417, 418, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, -1, - 433, -1, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, -1, 461, -1, - 463, 464, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 494, 495, 496, 497, -1, -1, -1, -1, 22, - 23, 24, 25, 26, 27, 28, 29, -1, 31, 32, - 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, 44, -1, 46, 47, 48, -1, 50, 51, 52, - 53, 54, -1, 56, 57, -1, 59, 60, 61, 62, - 63, 64, -1, -1, 67, 68, 69, 70, 71, 72, - 73, -1, 75, 76, 77, 78, 79, -1, -1, -1, - 83, 84, 85, 86, 87, 88, -1, 90, 91, 92, - -1, 94, 95, 96, 97, 98, 99, -1, -1, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, -1, 118, -1, 120, 121, 122, - 123, 124, 125, -1, -1, 128, 129, 130, 131, -1, - -1, 134, 135, 136, 137, 138, -1, 140, 141, 142, - -1, 144, 145, 146, -1, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, -1, 160, -1, 162, - 163, 164, 165, -1, 167, -1, 169, -1, -1, -1, - 173, 174, 175, -1, 177, -1, 179, -1, 181, 182, - -1, 184, -1, 186, 187, 188, 189, 190, 191, 192, - -1, 194, 195, 196, 197, -1, 199, 200, 201, 202, - 203, 204, 205, -1, 207, -1, 209, 210, 211, 212, - 213, 214, 215, 216, -1, 218, -1, 220, -1, -1, - 223, -1, 225, 226, 227, 228, 229, 230, -1, -1, - 233, -1, 235, -1, -1, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, -1, 269, 270, 271, 272, - 273, -1, 275, 276, -1, 278, -1, 280, 281, 282, - 283, 284, 285, -1, 287, 288, -1, -1, 291, 292, - 293, -1, -1, 296, 297, 298, -1, 300, -1, 302, - 303, 304, 305, 306, 307, 308, -1, 310, 311, 312, - 313, -1, -1, -1, -1, 318, 319, 320, -1, 322, - 323, 324, 325, 326, 327, -1, 329, 330, 331, 332, - 333, 334, -1, 336, -1, 338, 339, 340, 341, 342, - 343, -1, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, 359, 360, -1, 362, - 363, 364, 365, -1, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, -1, -1, 392, - 393, 394, 395, -1, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, - -1, 414, 415, -1, 417, -1, 419, 420, 421, 422, - 423, -1, 425, 426, 427, -1, -1, 430, 431, 432, - 433, 434, -1, 436, 437, 438, 439, 440, 441, 442, - 443, -1, -1, 446, 447, 448, -1, 450, 451, 452, - 453, -1, 455, 456, 457, 458, 459, 460, 461, -1, - 463, -1, 465, 466, 467, 468, 469, 470, 471, -1, - -1, 474, -1, -1, 477, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 3, -1, -1, -1, -1, + 22, 23, 24, 25, 26, 27, 28, 29, -1, 31, + 32, 33, -1, -1, -1, 37, -1, -1, -1, -1, + 42, 43, 44, -1, 46, 47, 48, 49, 50, 51, + 52, -1, 54, 55, 56, 57, -1, 59, 60, 61, + 62, 63, 64, -1, -1, 67, 68, 69, 70, 71, + 72, 73, -1, 75, 76, 77, 78, -1, -1, 81, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, -1, 94, 95, 96, 97, 98, 99, -1, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, -1, 118, -1, 120, 121, + 122, 123, 124, 125, -1, -1, 128, 129, 130, 131, + -1, -1, 134, 135, 136, 137, 138, -1, 140, 141, + 142, -1, 144, 145, 146, -1, 148, 149, 150, 151, + -1, 153, 154, 155, 156, 157, -1, -1, 160, -1, + 162, 163, 164, 165, -1, 167, -1, 169, 170, -1, + 172, 173, 174, -1, 176, 177, -1, 179, -1, -1, + -1, 183, 184, -1, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, -1, 199, 200, 201, + 202, 203, 204, 205, -1, 207, 208, -1, 210, 211, + 212, 213, 214, 215, 216, -1, 218, -1, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, -1, + -1, 233, 234, 235, 236, -1, 238, 239, 240, 241, + 242, 243, 244, 245, -1, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, 275, 276, 277, 278, -1, -1, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, 291, + 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, -1, -1, -1, -1, 318, 319, -1, 321, + 322, 323, -1, 325, 326, 327, -1, 329, 330, 331, + 332, 333, 334, -1, 336, 337, 338, 339, 340, 341, + 342, 343, -1, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 359, 360, 361, + 362, 363, 364, -1, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, -1, 380, 381, + 382, 383, 384, 385, 386, -1, 388, 389, -1, 391, + 392, 393, 394, 395, -1, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, -1, 410, -1, + -1, -1, 414, 415, -1, 417, 418, 419, 420, 421, + 422, 423, -1, 425, 426, 427, -1, -1, 430, 431, + -1, 433, -1, -1, 436, 437, 438, 439, 440, 441, + 442, 443, -1, -1, 446, 447, 448, -1, 450, 451, + 452, 453, -1, 455, 456, 457, 458, 459, -1, 461, + -1, 463, 464, 465, 466, 467, 468, 469, 470, 471, + -1, 22, 474, -1, -1, 477, 478, 479, 480, 481, + 482, 32, -1, 34, 35, -1, -1, -1, -1, 22, + -1, -1, 494, 495, 496, 497, -1, -1, -1, 32, + -1, 52, -1, -1, -1, -1, -1, -1, -1, -1, + 61, -1, -1, -1, -1, -1, -1, -1, -1, 52, + -1, -1, -1, -1, 75, -1, -1, -1, 61, -1, + -1, -1, -1, -1, -1, 86, -1, -1, -1, -1, + -1, -1, 75, -1, -1, -1, -1, 98, -1, 100, + -1, -1, -1, 86, -1, -1, -1, -1, -1, -1, + 111, -1, -1, -1, -1, 98, -1, 100, -1, -1, + -1, -1, -1, -1, -1, 126, 127, -1, 111, -1, + -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, + -1, -1, 143, 126, 127, -1, -1, -1, -1, -1, + 151, -1, -1, -1, 137, -1, -1, -1, -1, -1, + 143, -1, -1, -1, -1, -1, 167, -1, 151, -1, + 171, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 167, -1, -1, -1, 171, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 22, 23, 24, 25, 26, 27, - 28, 29, -1, 31, 32, 33, -1, -1, -1, 37, - -1, -1, -1, -1, 42, 43, 44, -1, 46, 47, - 48, 49, 50, 51, 52, -1, 54, 55, 56, 57, - -1, 59, 60, 61, 62, 63, 64, -1, -1, 67, - 68, 69, 70, 71, 72, 73, -1, 75, 76, 77, - 78, -1, -1, 81, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, -1, 94, 95, 96, 97, - 98, 99, -1, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, -1, - 118, -1, 120, 121, 122, 123, 124, 125, -1, -1, - 128, 129, 130, 131, -1, -1, 134, 135, 136, 137, - 138, -1, 140, 141, 142, -1, 144, 145, 146, -1, - 148, 149, 150, 151, -1, 153, 154, 155, 156, 157, - -1, -1, 160, -1, 162, 163, 164, 165, -1, 167, - -1, 169, 170, -1, 172, 173, 174, -1, 176, 177, - -1, 179, -1, -1, -1, 183, 184, -1, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - -1, 199, 200, 201, 202, 203, 204, 205, -1, 207, - 208, -1, 210, 211, 212, 213, 214, 215, 216, -1, - 218, -1, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, -1, -1, 233, 234, 235, 236, -1, - 238, 239, 240, 241, 242, 243, 244, 245, -1, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, 275, 276, 277, - 278, -1, -1, 281, 282, 283, 284, 285, -1, 287, - 288, -1, -1, 291, 292, 293, -1, -1, 296, 297, - -1, 299, 300, 301, -1, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, -1, -1, -1, -1, - 318, 319, -1, 321, 322, 323, -1, 325, 326, 327, - -1, 329, 330, 331, 332, 333, 334, -1, 336, 337, - 338, 339, 340, 341, 342, 343, -1, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - -1, 359, 360, 361, 362, 363, 364, -1, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, -1, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, -1, 391, 392, 393, 394, 395, -1, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, -1, 410, -1, -1, -1, 414, 415, -1, 417, - 418, 419, 420, 421, 422, 423, -1, 425, 426, 427, - -1, -1, 430, 431, -1, 433, -1, -1, 436, 437, - 438, 439, 440, 441, 442, 443, -1, -1, 446, 447, - 448, -1, 450, 451, 452, 453, -1, 455, 456, 457, - 458, 459, -1, 461, -1, 463, 464, 465, 466, 467, - 468, 469, 470, 471, -1, 22, 474, -1, -1, 477, - 478, 479, 480, 481, 482, 32, -1, 34, 35, -1, - -1, -1, -1, 22, -1, -1, 494, 495, 496, 497, - -1, -1, -1, 32, -1, 52, -1, -1, -1, -1, - -1, -1, -1, -1, 61, -1, -1, -1, -1, -1, - -1, -1, -1, 52, -1, -1, -1, -1, 75, -1, - -1, -1, 61, -1, -1, -1, -1, -1, -1, 86, - -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, - -1, 98, -1, 100, -1, -1, -1, 86, -1, -1, - -1, -1, -1, -1, 111, -1, -1, -1, -1, 98, - -1, 100, -1, -1, -1, -1, -1, -1, -1, 126, - 127, -1, 111, -1, -1, -1, -1, -1, -1, -1, - 137, -1, -1, -1, -1, -1, 143, 126, 127, -1, - -1, -1, -1, -1, 151, -1, -1, -1, 137, -1, - -1, -1, -1, -1, 143, -1, -1, -1, -1, -1, - 167, -1, 151, -1, 171, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 167, -1, - -1, -1, 171, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 213, -1, -1, -1, + -1, -1, 213, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 213, -1, -1, -1, -1, -1, - -1, -1, 239, -1, -1, -1, -1, -1, -1, -1, + 213, -1, -1, -1, -1, -1, -1, -1, 239, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 239, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 239, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 314, 315, 316, - -1, -1, -1, -1, -1, 322, -1, -1, 325, -1, - -1, -1, -1, -1, -1, 314, 315, 316, -1, -1, - -1, -1, -1, 322, -1, -1, 325, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 354, -1, -1, - -1, -1, -1, -1, -1, -1, 363, -1, -1, -1, - -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, - -1, -1, 379, -1, 363, -1, -1, -1, -1, 386, - -1, -1, -1, 390, -1, -1, -1, -1, -1, -1, - 379, -1, -1, 400, -1, -1, -1, 386, -1, -1, - -1, 390, -1, -1, -1, 412, -1, -1, -1, 416, - -1, 400, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 412, -1, -1, -1, 416, -1, 436, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 449, -1, -1, -1, -1, 436, 455, -1, - -1, -1, -1, 460, -1, -1, -1, 464, -1, -1, - 449, -1, -1, -1, -1, -1, 455, -1, -1, 476, - -1, 460, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 476, -1, -1, - -1, -1, -1, 500, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 514, -1, -1, - -1, 500, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 514 -}; - -/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of - state STATE-NUM. */ -static const yytype_int16 yystos[] = -{ - 0, 22, 32, 34, 35, 47, 52, 61, 75, 84, - 86, 98, 100, 111, 126, 127, 128, 137, 143, 151, - 153, 154, 167, 171, 197, 213, 239, 314, 315, 316, - 322, 325, 354, 363, 379, 386, 390, 400, 412, 416, - 436, 449, 452, 455, 460, 476, 500, 514, 526, 527, - 528, 529, 530, 537, 548, 549, 550, 553, 554, 556, - 567, 585, 633, 643, 646, 649, 653, 655, 658, 659, - 663, 669, 671, 675, 682, 686, 687, 688, 695, 700, - 716, 719, 720, 723, 725, 726, 727, 728, 730, 732, - 733, 737, 790, 791, 957, 959, 960, 961, 966, 969, - 975, 976, 977, 981, 430, 479, 958, 202, 370, 381, - 416, 466, 108, 191, 551, 958, 3, 22, 23, 24, - 25, 26, 27, 28, 29, 31, 32, 33, 42, 43, - 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 59, 60, 61, 62, 63, 64, 67, - 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, - 79, 81, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 118, 120, 121, 122, 123, 124, - 125, 128, 129, 130, 131, 134, 135, 136, 137, 138, - 140, 141, 142, 144, 145, 146, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 160, 162, 163, - 164, 165, 167, 169, 170, 172, 173, 174, 175, 176, - 177, 179, 181, 182, 183, 184, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, - 201, 202, 203, 204, 205, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 218, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 233, 234, 235, - 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 275, 276, 277, - 278, 280, 281, 282, 283, 284, 285, 287, 288, 291, - 292, 293, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 329, 330, 331, 332, 333, 334, 336, 337, 338, 339, - 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 391, 392, 393, 394, - 395, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 414, 415, 417, 418, - 419, 420, 421, 422, 423, 425, 426, 427, 430, 431, - 432, 433, 434, 436, 437, 438, 439, 440, 441, 442, - 443, 446, 447, 448, 450, 451, 452, 453, 455, 456, - 457, 458, 459, 460, 461, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 474, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 560, 636, 637, 638, - 866, 946, 950, 3, 175, 246, 409, 555, 560, 636, - 289, 958, 55, 171, 514, 580, 177, 240, 294, 313, - 370, 420, 422, 439, 445, 448, 631, 651, 694, 5, - 30, 325, 560, 561, 945, 3, 30, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 45, 49, 53, 54, - 55, 56, 57, 58, 65, 66, 71, 72, 74, 79, - 80, 81, 82, 83, 89, 93, 100, 101, 108, 112, - 115, 117, 119, 126, 127, 132, 133, 139, 143, 147, - 152, 158, 159, 161, 164, 166, 168, 170, 171, 172, - 175, 176, 178, 180, 181, 182, 185, 193, 198, 206, - 208, 209, 215, 216, 217, 218, 219, 221, 222, 224, - 231, 232, 234, 236, 237, 246, 267, 268, 269, 273, - 274, 277, 279, 280, 282, 286, 289, 290, 294, 295, - 298, 299, 301, 302, 314, 315, 316, 317, 320, 321, - 324, 328, 335, 339, 344, 358, 361, 365, 379, 380, - 387, 390, 391, 394, 396, 409, 411, 412, 413, 416, - 418, 424, 426, 427, 428, 429, 432, 434, 435, 438, - 444, 445, 449, 454, 460, 461, 462, 464, 472, 473, - 475, 476, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 492, 493, 566, 636, 640, 642, 24, 81, 97, - 146, 156, 168, 173, 202, 245, 249, 319, 334, 367, - 370, 381, 384, 402, 416, 422, 423, 433, 439, 466, - 651, 664, 665, 668, 958, 945, 100, 137, 464, 514, - 529, 530, 537, 553, 554, 567, 585, 633, 643, 646, - 653, 655, 658, 659, 663, 671, 678, 682, 688, 695, - 716, 719, 720, 723, 725, 957, 959, 961, 966, 969, - 975, 981, 108, 75, 213, 66, 79, 81, 158, 231, - 280, 290, 302, 320, 366, 411, 432, 434, 438, 460, - 514, 559, 560, 561, 726, 791, 793, 795, 805, 812, - 813, 866, 868, 869, 108, 5, 560, 562, 717, 717, - 560, 945, 30, 177, 240, 385, 426, 430, 560, 967, - 968, 979, 958, 30, 132, 746, 747, 177, 240, 370, - 385, 426, 970, 971, 979, 958, 560, 725, 737, 980, - 560, 812, 416, 743, 559, 172, 514, 963, 514, 342, - 738, 739, 945, 738, 726, 727, 975, 0, 517, 464, - 676, 122, 212, 451, 147, 217, 295, 444, 749, 750, - 795, 795, 726, 728, 730, 518, 30, 426, 430, 725, - 980, 191, 559, 945, 191, 559, 191, 812, 191, 559, - 274, 562, 512, 516, 563, 564, 514, 82, 108, 173, - 202, 245, 370, 381, 416, 439, 466, 558, 108, 725, - 559, 420, 422, 420, 422, 352, 191, 559, 559, 173, - 245, 342, 381, 416, 466, 644, 377, 202, 30, 945, - 191, 566, 251, 433, 107, 416, 416, 466, 374, 377, - 191, 560, 666, 952, 191, 942, 945, 191, 945, 514, - 674, 294, 422, 678, 3, 460, 636, 640, 679, 681, - 682, 684, 685, 676, 560, 562, 555, 717, 514, 514, - 166, 514, 726, 813, 514, 514, 559, 514, 514, 171, - 514, 514, 514, 514, 726, 791, 795, 805, 507, 563, - 40, 560, 806, 807, 806, 379, 518, 729, 37, 42, - 101, 172, 208, 224, 234, 268, 314, 321, 361, 380, - 449, 809, 807, 40, 560, 806, 808, 500, 817, 562, - 171, 503, 514, 514, 721, 968, 968, 968, 497, 223, - 516, 289, 4, 6, 7, 8, 9, 10, 39, 54, - 56, 57, 65, 71, 72, 83, 112, 115, 117, 136, - 152, 159, 164, 181, 182, 215, 216, 218, 246, 267, - 269, 274, 279, 282, 291, 339, 365, 394, 426, 427, - 435, 461, 498, 505, 506, 507, 512, 514, 519, 520, - 521, 522, 560, 562, 726, 780, 829, 832, 835, 836, - 837, 839, 840, 841, 842, 844, 845, 860, 862, 863, - 864, 865, 866, 867, 869, 870, 885, 886, 897, 919, - 924, 932, 933, 934, 946, 947, 948, 931, 933, 970, - 970, 562, 970, 497, 171, 428, 503, 516, 563, 660, - 812, 3, 170, 172, 464, 682, 962, 964, 170, 965, - 860, 903, 904, 738, 518, 514, 954, 515, 515, 515, - 528, 559, 171, 294, 703, 660, 30, 132, 744, 744, - 59, 744, 161, 166, 237, 286, 755, 757, 758, 783, - 785, 786, 787, 180, 289, 454, 289, 749, 750, 514, - 417, 978, 497, 223, 152, 26, 32, 137, 293, 350, - 354, 386, 457, 542, 545, 546, 350, 152, 40, 60, - 106, 201, 250, 260, 272, 304, 350, 356, 381, 386, - 400, 531, 534, 545, 152, 350, 386, 545, 152, 350, - 386, 545, 152, 40, 552, 860, 925, 565, 566, 564, - 3, 30, 37, 42, 49, 55, 81, 83, 89, 101, - 132, 170, 172, 175, 176, 193, 208, 221, 222, 224, - 234, 236, 246, 268, 277, 299, 301, 321, 361, 380, - 391, 409, 418, 438, 462, 464, 515, 636, 641, 860, - 906, 907, 949, 955, 860, 416, 559, 560, 515, 514, - 620, 370, 631, 651, 274, 647, 40, 466, 191, 559, - 191, 559, 635, 191, 559, 191, 559, 191, 560, 650, - 89, 691, 152, 480, 90, 129, 307, 421, 191, 560, - 152, 516, 953, 63, 357, 518, 667, 152, 518, 667, - 152, 289, 672, 673, 860, 955, 352, 515, 518, 4, - 159, 289, 435, 505, 506, 533, 536, 562, 677, 679, - 680, 683, 948, 678, 428, 514, 575, 579, 171, 860, - 904, 514, 3, 68, 69, 109, 110, 113, 114, 188, - 189, 252, 253, 254, 255, 256, 257, 258, 259, 262, - 263, 375, 376, 470, 471, 494, 495, 562, 847, 848, - 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, - 909, 910, 807, 808, 860, 559, 860, 911, 505, 506, - 560, 861, 862, 886, 897, 913, 514, 860, 903, 914, - 860, 58, 171, 232, 429, 860, 904, 917, 860, 515, - 561, 514, 418, 763, 764, 764, 746, 747, 795, 219, - 741, 37, 224, 380, 809, 224, 299, 810, 795, 810, - 224, 809, 514, 224, 810, 148, 199, 797, 224, 764, - 514, 561, 514, 764, 296, 560, 562, 718, 860, 972, - 974, 906, 3, 37, 42, 49, 54, 55, 56, 57, - 71, 72, 81, 83, 89, 101, 112, 115, 164, 170, - 172, 176, 193, 208, 215, 216, 218, 221, 222, 224, - 234, 236, 246, 267, 268, 269, 277, 282, 299, 301, - 321, 339, 361, 365, 380, 387, 391, 394, 409, 418, - 426, 427, 438, 444, 461, 464, 636, 639, 823, 825, - 826, 828, 830, 832, 834, 836, 837, 838, 840, 841, - 844, 845, 908, 951, 40, 235, 560, 514, 512, 726, - 463, 843, 860, 923, 843, 843, 514, 514, 831, 831, - 324, 726, 514, 833, 522, 71, 72, 843, 860, 831, - 514, 514, 478, 500, 514, 846, 514, 846, 860, 860, - 860, 148, 935, 936, 860, 904, 905, 726, 860, 903, - 9, 566, 561, 887, 888, 889, 516, 563, 926, 563, - 514, 562, 514, 514, 562, 948, 3, 8, 11, 15, - 16, 17, 18, 19, 20, 21, 36, 40, 46, 53, - 80, 176, 193, 198, 221, 222, 236, 274, 277, 291, - 294, 391, 498, 501, 502, 503, 505, 506, 507, 508, - 509, 510, 895, 896, 897, 899, 929, 477, 871, 301, - 860, 518, 741, 514, 562, 741, 3, 117, 240, 533, - 562, 845, 973, 104, 974, 974, 560, 40, 560, 515, - 518, 676, 518, 515, 739, 942, 943, 40, 954, 660, - 192, 352, 219, 386, 728, 728, 30, 751, 752, 860, - 59, 728, 745, 163, 271, 771, 226, 272, 338, 389, - 451, 4, 9, 30, 766, 860, 505, 506, 767, 768, - 860, 862, 783, 784, 758, 757, 755, 756, 166, 786, - 284, 788, 59, 734, 735, 736, 798, 861, 933, 933, - 755, 783, 904, 235, 559, 74, 82, 93, 168, 191, - 328, 445, 560, 602, 612, 627, 82, 93, 724, 93, - 724, 514, 428, 514, 600, 244, 448, 600, 93, 518, - 428, 559, 3, 828, 533, 59, 535, 533, 533, 106, - 250, 260, 59, 428, 476, 500, 532, 265, 370, 532, - 534, 812, 93, 428, 724, 370, 559, 428, 370, 551, - 560, 575, 513, 524, 906, 906, 907, 518, 749, 750, - 13, 14, 221, 221, 428, 428, 560, 619, 624, 476, - 578, 559, 342, 381, 416, 466, 644, 377, 152, 100, - 585, 648, 653, 688, 981, 144, 825, 559, 274, 531, - 654, 274, 514, 620, 40, 274, 620, 274, 514, 645, - 274, 198, 652, 191, 560, 614, 692, 566, 152, 171, - 670, 666, 565, 516, 952, 942, 945, 945, 952, 515, - 518, 13, 678, 684, 4, 948, 4, 948, 562, 566, - 577, 584, 55, 102, 123, 141, 145, 167, 170, 186, - 279, 287, 309, 336, 581, 718, 40, 515, 860, 515, - 171, 518, 515, 317, 912, 515, 861, 861, 11, 15, - 16, 19, 20, 21, 198, 221, 291, 501, 502, 503, - 505, 506, 507, 508, 509, 510, 897, 861, 515, 814, - 815, 868, 166, 171, 915, 916, 518, 515, 40, 917, - 904, 917, 917, 171, 515, 40, 806, 514, 943, 4, - 9, 560, 759, 761, 762, 933, 931, 177, 240, 416, - 420, 422, 448, 559, 742, 473, 818, 795, 224, 795, - 289, 454, 811, 795, 224, 933, 795, 281, 281, 514, - 795, 561, 819, 820, 514, 561, 819, 518, 515, 518, - 516, 514, 828, 514, 514, 516, 39, 827, 514, 847, - 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, - 858, 859, 515, 518, 831, 567, 659, 695, 722, 725, - 959, 975, 904, 905, 514, 472, 920, 921, 860, 905, - 948, 860, 890, 891, 892, 893, 843, 843, 8, 15, - 16, 19, 20, 21, 501, 502, 503, 505, 506, 507, - 508, 509, 510, 560, 895, 900, 515, 904, 426, 426, - 948, 948, 514, 560, 352, 940, 166, 513, 515, 518, - 524, 518, 523, 507, 564, 904, 948, 860, 859, 859, - 825, 860, 860, 860, 860, 860, 860, 860, 860, 5, - 566, 956, 426, 45, 413, 930, 952, 860, 860, 514, - 726, 918, 132, 159, 274, 279, 284, 435, 446, 860, - 279, 514, 860, 428, 53, 176, 193, 198, 236, 391, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 30, 38, 396, 894, 512, 516, 928, 180, 162, 872, - 365, 514, 886, 934, 171, 792, 906, 792, 514, 562, - 560, 559, 962, 548, 559, 860, 518, 515, 249, 274, - 740, 454, 662, 559, 697, 514, 560, 702, 712, 713, - 715, 41, 126, 753, 518, 454, 753, 265, 728, 365, - 366, 505, 506, 768, 770, 862, 389, 226, 290, 312, - 312, 518, 509, 4, 769, 948, 769, 365, 366, 770, - 559, 941, 278, 393, 789, 514, 943, 944, 518, 180, - 454, 198, 180, 219, 784, 756, 515, 350, 545, 514, - 191, 612, 945, 226, 274, 226, 454, 514, 605, 824, - 825, 945, 560, 191, 945, 191, 560, 26, 137, 386, - 541, 544, 566, 596, 610, 945, 566, 604, 623, 945, - 542, 945, 350, 386, 531, 545, 533, 952, 945, 533, - 952, 945, 533, 350, 386, 545, 945, 945, 945, 945, - 350, 386, 545, 945, 945, 562, 506, 860, 925, 749, - 749, 749, 462, 907, 192, 355, 748, 860, 860, 279, - 557, 562, 279, 557, 560, 333, 574, 515, 518, 287, - 171, 428, 569, 647, 466, 559, 559, 635, 559, 559, - 650, 559, 294, 631, 514, 726, 514, 152, 152, 236, - 560, 602, 612, 615, 618, 628, 630, 476, 478, 607, - 151, 725, 152, 476, 693, 152, 515, 906, 40, 152, - 3, 514, 274, 289, 560, 3, 667, 565, 667, 289, - 667, 672, 860, 575, 507, 514, 533, 576, 683, 865, - 515, 518, 40, 573, 562, 573, 274, 279, 336, 573, - 59, 573, 825, 515, 860, 860, 860, 915, 825, 861, - 861, 861, 861, 861, 861, 132, 274, 284, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 515, 518, - 40, 816, 860, 860, 916, 915, 825, 515, 515, 515, - 904, 825, 943, 515, 312, 509, 312, 366, 509, 514, - 514, 741, 420, 422, 420, 422, 559, 743, 743, 743, - 860, 180, 772, 811, 795, 860, 514, 795, 166, 514, - 561, 802, 811, 825, 515, 518, 819, 515, 972, 3, - 908, 39, 827, 560, 822, 822, 3, 512, 512, 948, - 428, 428, 428, 428, 825, 515, 513, 904, 860, 139, - 921, 922, 515, 515, 515, 524, 518, 523, 516, 515, - 515, 497, 497, 515, 515, 943, 514, 860, 937, 560, - 860, 860, 887, 936, 515, 515, 515, 497, 861, 861, - 145, 904, 171, 132, 159, 279, 284, 435, 446, 514, - 145, 900, 860, 413, 930, 860, 918, 860, 428, 514, - 726, 860, 925, 565, 514, 514, 155, 873, 793, 794, - 818, 749, 818, 948, 859, 954, 954, 249, 514, 794, - 473, 661, 40, 59, 698, 708, 715, 926, 518, 792, - 503, 499, 754, 752, 291, 895, 898, 754, 4, 948, - 770, 290, 451, 767, 518, 243, 943, 734, 59, 933, - 514, 561, 59, 265, 428, 860, 274, 627, 514, 152, - 514, 605, 202, 624, 625, 586, 40, 175, 595, 621, - 586, 26, 137, 354, 356, 386, 538, 539, 540, 546, - 547, 152, 667, 152, 667, 596, 610, 596, 515, 518, - 562, 589, 503, 516, 515, 518, 428, 370, 93, 428, - 724, 370, 428, 428, 428, 370, 552, 524, 513, 524, - 748, 748, 748, 907, 281, 281, 515, 514, 568, 3, - 403, 404, 562, 583, 619, 574, 559, 654, 514, 40, - 620, 645, 652, 647, 352, 416, 562, 656, 657, 624, - 559, 559, 635, 559, 515, 518, 287, 600, 287, 289, - 599, 945, 476, 634, 559, 600, 40, 559, 515, 416, - 860, 650, 584, 152, 559, 670, 952, 571, 582, 683, - 577, 562, 562, 279, 624, 507, 624, 562, 507, 624, - 562, 515, 515, 916, 171, 132, 284, 514, 817, 814, - 514, 515, 515, 515, 560, 759, 818, 743, 743, 743, - 743, 559, 559, 559, 59, 185, 781, 811, 943, 514, - 799, 800, 801, 863, 946, 943, 166, 80, 821, 820, - 515, 515, 512, 825, 515, 518, 515, 948, 513, 948, - 515, 848, 850, 851, 852, 851, 852, 852, 515, 424, - 860, 143, 860, 890, 900, 846, 846, 515, 860, 937, - 938, 939, 40, 198, 515, 940, 859, 860, 36, 36, - 860, 515, 860, 171, 514, 908, 860, 515, 145, 861, - 861, 145, 145, 860, 860, 513, 524, 514, 927, 750, - 473, 860, 300, 877, 518, 772, 748, 772, 515, 722, - 860, 358, 706, 560, 265, 320, 117, 303, 514, 696, - 725, 515, 518, 702, 661, 860, 163, 230, 514, 754, - 290, 559, 515, 944, 180, 726, 727, 933, 944, 945, - 945, 515, 152, 625, 612, 625, 586, 614, 518, 515, - 119, 206, 272, 274, 611, 514, 33, 59, 632, 621, - 74, 80, 93, 117, 119, 206, 274, 279, 328, 344, - 445, 454, 591, 592, 606, 175, 117, 190, 274, 600, - 532, 107, 117, 175, 274, 402, 405, 534, 600, 386, - 540, 439, 945, 560, 544, 3, 37, 42, 49, 55, - 81, 83, 89, 101, 170, 172, 175, 176, 193, 208, - 221, 222, 224, 234, 236, 246, 268, 273, 277, 291, - 299, 301, 321, 361, 380, 387, 391, 409, 418, 438, - 444, 464, 505, 506, 533, 562, 587, 626, 636, 642, - 825, 898, 949, 566, 623, 945, 945, 945, 945, 945, - 945, 945, 945, 945, 945, 575, 925, 925, 515, 515, - 515, 749, 107, 370, 516, 532, 583, 514, 618, 725, - 693, 40, 514, 631, 191, 559, 515, 518, 515, 654, - 514, 40, 609, 607, 615, 86, 674, 107, 272, 620, - 725, 645, 725, 652, 515, 614, 454, 690, 667, 515, - 518, 624, 861, 171, 514, 908, 819, 515, 518, 515, - 772, 559, 559, 559, 559, 30, 103, 181, 364, 514, - 773, 774, 775, 776, 777, 778, 779, 860, 860, 475, - 874, 515, 862, 901, 902, 198, 180, 796, 800, 514, - 515, 802, 803, 804, 952, 827, 948, 827, 560, 827, - 513, 513, 860, 518, 515, 560, 860, 862, 860, 860, - 860, 908, 515, 860, 36, 36, 860, 860, 145, 515, - 506, 925, 515, 906, 515, 860, 515, 514, 560, 878, - 781, 515, 781, 562, 515, 932, 460, 415, 453, 707, - 560, 701, 711, 289, 704, 503, 715, 706, 900, 59, - 515, 515, 459, 460, 731, 586, 612, 515, 515, 476, - 617, 120, 194, 204, 119, 456, 860, 117, 40, 514, - 952, 945, 861, 120, 194, 119, 279, 226, 559, 617, - 88, 632, 191, 279, 533, 860, 632, 279, 505, 506, - 536, 560, 825, 667, 667, 3, 246, 409, 949, 953, - 503, 428, 428, 513, 513, 748, 515, 515, 560, 575, - 454, 570, 572, 624, 515, 634, 40, 416, 860, 584, - 416, 274, 514, 562, 693, 618, 151, 725, 149, 200, - 599, 122, 137, 327, 634, 107, 693, 476, 982, 40, - 514, 289, 560, 689, 514, 582, 861, 908, 515, 515, - 9, 351, 765, 781, 514, 388, 514, 515, 518, 560, - 875, 876, 335, 782, 518, 515, 514, 561, 59, 515, - 906, 198, 515, 803, 513, 825, 937, 513, 191, 515, - 860, 860, 860, 524, 513, 524, 515, 515, 560, 879, - 874, 562, 874, 518, 459, 926, 515, 518, 91, 706, - 860, 515, 944, 944, 344, 617, 514, 608, 586, 515, - 190, 514, 860, 274, 592, 617, 620, 945, 40, 152, - 821, 953, 509, 587, 945, 945, 515, 532, 124, 515, - 607, 725, 725, 515, 559, 152, 40, 515, 945, 634, - 30, 85, 94, 118, 190, 203, 402, 405, 603, 603, - 366, 366, 40, 64, 74, 240, 416, 860, 584, 559, - 514, 560, 705, 714, 868, 515, 515, 514, 874, 904, - 514, 904, 775, 40, 518, 860, 454, 760, 862, 933, - 943, 807, 749, 514, 807, 860, 925, 925, 309, 880, - 782, 782, 725, 303, 725, 701, 289, 514, 699, 559, - 586, 566, 613, 616, 406, 468, 593, 594, 514, 588, - 860, 515, 248, 629, 190, 454, 543, 509, 439, 575, - 562, 693, 599, 982, 514, 559, 725, 607, 674, 725, - 74, 292, 74, 725, 515, 690, 860, 80, 709, 515, - 518, 709, 9, 782, 515, 774, 515, 878, 876, 368, - 515, 748, 933, 513, 513, 513, 59, 749, 760, 760, - 707, 93, 714, 133, 620, 503, 515, 518, 531, 515, - 272, 601, 172, 308, 392, 289, 597, 598, 622, 588, - 860, 439, 40, 514, 982, 599, 634, 982, 292, 292, - 514, 515, 952, 710, 952, 693, 705, 710, 515, 760, - 515, 762, 515, 515, 903, 183, 337, 366, 881, 459, - 945, 515, 275, 451, 629, 587, 616, 515, 594, 204, - 122, 451, 289, 622, 289, 597, 725, 714, 709, 753, - 818, 753, 53, 104, 441, 860, 882, 883, 882, 882, - 515, 725, 818, 386, 598, 63, 272, 357, 386, 590, - 590, 982, 515, 710, 754, 754, 883, 365, 165, 323, - 165, 323, 148, 884, 884, 884, 713, 586, 25, 117, - 279, 693, 753, 36, 104, 180, 272, 425, 818, 818, - 754, 883, 365, 297 -}; - -/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ -static const yytype_int16 yyr1[] = -{ - 0, 525, 526, 527, 527, 528, 528, 528, 528, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 528, 528, 528, 528, 528, 528, 537, 537, 537, 537, - 537, 537, 537, 537, 538, 538, 539, 539, 540, 540, - 540, 540, 541, 541, 542, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, 542, 542, 543, 543, 544, 544, 544, 544, 545, - 545, 546, 547, 547, 547, 658, 658, 658, 658, 559, - 559, 560, 560, 560, 561, 561, 562, 563, 563, 564, - 565, 566, 566, 566, 566, 723, 723, 723, 723, 723, - 723, 723, 723, 723, 723, 723, 723, 723, 724, 724, - 695, 696, 696, 696, 696, 696, 697, 697, 698, 698, - 698, 699, 699, 699, 700, 700, 701, 702, 702, 703, - 703, 703, 704, 704, 704, 705, 705, 705, 706, 706, - 707, 707, 708, 708, 709, 709, 710, 710, 711, 711, - 712, 712, 713, 713, 714, 714, 715, 655, 655, 655, - 656, 656, 657, 657, 719, 719, 719, 653, 653, 653, - 654, 654, 649, 649, 649, 650, 650, 651, 651, 651, - 652, 652, 671, 671, 671, 672, 672, 673, 673, 674, - 674, 530, 530, 531, 531, 532, 532, 532, 533, 533, - 533, 533, 534, 534, 534, 534, 534, 534, 534, 534, - 534, 534, 534, 534, 534, 534, 535, 535, 536, 536, - 536, 669, 669, 670, 670, 957, 957, 957, 957, 957, - 957, 958, 958, 958, 960, 585, 585, 585, 586, 586, - 587, 587, 587, 587, 587, 587, 588, 588, 589, 590, - 590, 590, 590, 590, 591, 591, 591, 591, 592, 592, - 592, 592, 592, 592, 592, 592, 593, 593, 594, 594, - 595, 595, 595, 596, 597, 598, 598, 598, 598, 598, - 599, 599, 599, 599, 600, 601, 601, 602, 602, 603, - 603, 603, 603, 603, 603, 603, 603, 604, 604, 605, - 606, 606, 606, 606, 607, 607, 607, 607, 608, 609, - 609, 609, 610, 611, 611, 611, 611, 611, 611, 612, - 612, 613, 613, 614, 615, 615, 615, 616, 616, 617, - 617, 618, 618, 618, 619, 620, 620, 621, 621, 622, - 623, 623, 623, 623, 624, 624, 625, 625, 626, 626, - 626, 627, 627, 627, 627, 627, 627, 628, 628, 629, - 629, 629, 629, 630, 631, 631, 631, 631, 631, 631, - 631, 631, 632, 632, 663, 663, 663, 663, 663, 663, - 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 664, 664, 664, 664, 664, 664, 664, 665, 665, - 665, 665, 665, 665, 666, 666, 667, 667, 667, 668, - 668, 668, 643, 643, 643, 643, 643, 643, 644, 644, - 645, 645, 959, 567, 567, 567, 568, 568, 568, 569, - 569, 570, 570, 571, 571, 572, 572, 573, 573, 574, - 574, 575, 575, 576, 576, 576, 576, 576, 576, 577, - 578, 578, 579, 579, 580, 580, 581, 581, 581, 581, - 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 582, 583, 583, 583, 583, 583, 584, 584, - 725, 725, 726, 726, 726, 727, 727, 727, 727, 727, - 727, 727, 727, 728, 728, 729, 729, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 731, 731, 732, 732, - 733, 733, 734, 734, 734, 735, 735, 736, 736, 737, - 737, 737, 738, 738, 739, 740, 740, 740, 741, 741, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 743, - 743, 744, 744, 744, 745, 746, 746, 747, 747, 748, - 748, 748, 749, 749, 750, 750, 751, 751, 752, 752, - 753, 753, 753, 754, 754, 754, 755, 755, 755, 755, - 756, 756, 757, 757, 757, 757, 758, 758, 759, 759, - 759, 759, 759, 759, 760, 760, 761, 761, 762, 762, - 762, 762, 763, 764, 764, 765, 765, 766, 766, 766, - 766, 766, 767, 768, 768, 768, 769, 769, 770, 770, - 771, 771, 772, 772, 772, 773, 773, 774, 774, 775, - 775, 775, 775, 775, 776, 777, 778, 779, 780, 780, - 781, 781, 782, 782, 783, 783, 784, 784, 785, 785, - 786, 787, 787, 787, 787, 788, 788, 789, 789, 789, - 790, 790, 791, 791, 792, 792, 793, 793, 794, 794, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 796, 796, 797, 797, 797, 798, 798, 799, 799, 800, - 800, 801, 801, 802, 802, 803, 804, 804, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, 805, 806, - 806, 806, 806, 807, 807, 808, 808, 808, 808, 808, - 809, 809, 809, 809, 809, 809, 810, 810, 811, 811, - 812, 812, 812, 812, 813, 813, 814, 815, 815, 816, - 816, 817, 817, 818, 818, 819, 819, 820, 821, 821, - 822, 822, 823, 823, 824, 824, 825, 825, 825, 825, - 825, 825, 825, 825, 825, 825, 826, 826, 827, 827, - 827, 828, 828, 828, 828, 828, 828, 828, 829, 829, - 829, 829, 830, 831, 831, 832, 832, 832, 832, 832, - 832, 832, 832, 832, 832, 832, 833, 833, 834, 834, - 835, 835, 836, 837, 838, 838, 839, 839, 840, 841, - 842, 842, 842, 842, 842, 842, 843, 843, 844, 844, - 844, 844, 845, 846, 846, 846, 847, 847, 848, 848, - 849, 849, 850, 850, 851, 851, 852, 852, 853, 853, - 854, 854, 855, 855, 856, 856, 857, 857, 858, 858, - 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, - 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, - 861, 861, 861, 861, 861, 862, 862, 862, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, - 863, 864, 864, 864, 864, 864, 864, 865, 866, 866, - 866, 866, 866, 866, 867, 867, 868, 868, 869, 869, - 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, - 869, 869, 870, 870, 871, 871, 872, 872, 872, 873, - 873, 874, 874, 875, 875, 876, 877, 877, 877, 878, - 879, 879, 880, 880, 881, 881, 881, 881, 882, 882, - 883, 883, 883, 883, 883, 884, 884, 884, 884, 884, - 885, 885, 886, 886, 887, 888, 888, 889, 889, 890, - 891, 891, 892, 892, 893, 893, 894, 894, 894, 895, - 895, 896, 896, 896, 896, 896, 896, 896, 896, 896, - 896, 896, 896, 896, 896, 897, 897, 898, 898, 899, - 899, 899, 899, 899, 899, 899, 899, 900, 900, 901, - 901, 902, 902, 903, 903, 904, 904, 905, 905, 906, - 906, 907, 907, 907, 908, 908, 909, 909, 910, 910, - 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, - 910, 910, 911, 911, 912, 913, 913, 914, 914, 914, - 914, 914, 914, 915, 916, 917, 917, 917, 918, 918, - 919, 920, 920, 921, 922, 922, 923, 923, 924, 924, - 564, 564, 564, 564, 925, 925, 926, 926, 927, 927, - 927, 928, 928, 928, 928, 928, 929, 929, 930, 930, - 931, 931, 932, 932, 933, 933, 934, 934, 934, 935, - 935, 936, 936, 937, 938, 938, 939, 939, 940, 940, - 940, 941, 941, 942, 942, 943, 943, 944, 944, 945, - 946, 946, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, 947, 947, 947, 947, 948, 949, 949, 949, - 950, 950, 950, 951, 951, 951, 952, 952, 953, 953, - 954, 954, 955, 956, 956, 720, 721, 721, 722, 722, - 722, 722, 722, 722, 646, 646, 646, 647, 647, 648, - 648, 648, 648, 688, 688, 689, 690, 690, 691, 691, - 692, 692, 693, 693, 694, 694, 529, 529, 529, 529, - 529, 529, 554, 554, 555, 555, 556, 556, 557, 557, - 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, - 686, 686, 687, 675, 675, 675, 675, 676, 676, 677, - 677, 677, 678, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 679, 679, 679, 680, 680, 681, 681, 682, - 682, 683, 683, 683, 683, 684, 685, 685, 969, 969, - 969, 969, 970, 970, 970, 970, 971, 971, 972, 973, - 973, 973, 973, 973, 973, 973, 974, 974, 716, 716, - 716, 716, 716, 717, 717, 718, 718, 961, 961, 961, - 961, 961, 962, 962, 962, 962, 962, 963, 963, 964, - 964, 965, 965, 659, 659, 660, 660, 660, 661, 661, - 662, 662, 548, 548, 549, 549, 550, 550, 550, 551, - 551, 552, 552, 966, 966, 966, 966, 967, 967, 968, - 968, 968, 975, 975, 975, 975, 975, 975, 975, 975, - 976, 976, 977, 977, 978, 978, 979, 979, 980, 980, - 553, 981, 981, 981, 981, 981, 982, 982, 982, 982, - 633, 633, 633, 634, 634, 634, 635, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 636, 636, 636, 636, 636, 637, 637, 637, - 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 638, 638, 638, 638, 638, 638, 638, 638, 638, - 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, - 638, 638, 638, 638, 638, 638, 638, 638, 638, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, 640, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642 -}; - -/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ -static const yytype_int8 yyr2[] = -{ - 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 6, 4, 6, - 4, 6, 4, 6, 1, 2, 3, 2, 1, 3, - 2, 3, 1, 3, 2, 5, 3, 6, 4, 6, - 6, 6, 5, 5, 6, 9, 4, 5, 7, 6, - 4, 8, 4, 2, 4, 3, 6, 4, 2, 2, - 2, 2, 1, 2, 0, 1, 2, 2, 2, 1, - 3, 4, 2, 1, 0, 2, 3, 2, 3, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 6, 6, 8, 6, 8, - 6, 8, 6, 8, 8, 10, 8, 10, 1, 0, - 9, 1, 4, 4, 7, 2, 1, 3, 2, 2, - 0, 4, 3, 0, 1, 0, 2, 3, 5, 2, - 2, 0, 8, 5, 0, 5, 5, 7, 2, 0, - 1, 1, 1, 3, 2, 0, 1, 0, 1, 3, - 1, 3, 1, 2, 1, 3, 2, 6, 8, 5, - 1, 0, 1, 3, 2, 4, 5, 5, 8, 7, - 1, 0, 8, 11, 10, 0, 1, 0, 1, 1, - 0, 2, 3, 9, 12, 1, 3, 1, 3, 3, - 0, 4, 6, 1, 2, 1, 1, 0, 1, 2, - 2, 1, 2, 2, 1, 2, 3, 2, 2, 2, - 2, 3, 3, 3, 1, 3, 1, 0, 1, 2, - 2, 5, 7, 0, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 0, 2, 9, 12, 11, 0, 2, - 1, 1, 1, 1, 1, 1, 3, 0, 1, 2, - 1, 1, 2, 2, 3, 1, 1, 2, 2, 1, - 2, 3, 5, 3, 2, 5, 1, 1, 1, 0, - 5, 7, 5, 2, 3, 1, 1, 2, 2, 0, - 3, 4, 4, 0, 3, 2, 0, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, - 1, 2, 2, 2, 2, 2, 2, 0, 3, 3, - 3, 0, 1, 2, 1, 2, 2, 2, 2, 3, - 4, 1, 3, 1, 1, 1, 1, 3, 1, 2, - 0, 1, 2, 0, 1, 3, 0, 2, 0, 3, - 3, 1, 5, 3, 1, 3, 1, 2, 1, 4, - 5, 5, 6, 3, 7, 4, 11, 1, 3, 2, - 2, 2, 0, 3, 1, 1, 2, 2, 2, 2, - 1, 0, 1, 2, 6, 4, 6, 4, 6, 8, - 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, - 1, 1, 1, 3, 3, 3, 3, 1, 2, 2, - 1, 3, 1, 1, 1, 3, 1, 1, 0, 1, - 1, 1, 8, 11, 10, 7, 10, 9, 1, 1, - 2, 3, 8, 11, 9, 7, 0, 3, 3, 1, - 1, 3, 0, 1, 3, 1, 0, 1, 0, 1, - 0, 1, 3, 1, 1, 1, 3, 1, 0, 2, - 2, 0, 2, 0, 1, 0, 1, 1, 1, 3, - 3, 1, 1, 3, 3, 3, 3, 3, 3, 4, - 3, 2, 1, 1, 1, 1, 3, 1, 1, 3, - 1, 1, 3, 3, 3, 1, 2, 4, 4, 2, - 3, 5, 5, 1, 1, 3, 0, 11, 11, 10, - 12, 1, 2, 5, 4, 4, 4, 4, 7, 5, - 4, 7, 6, 9, 9, 4, 1, 1, 1, 1, - 1, 1, 1, 5, 1, 1, 3, 1, 2, 2, - 2, 3, 1, 3, 7, 1, 2, 0, 2, 0, - 3, 3, 4, 4, 4, 4, 3, 2, 1, 1, - 0, 1, 1, 0, 2, 1, 5, 1, 0, 2, - 2, 0, 1, 0, 3, 5, 1, 3, 4, 3, - 1, 1, 0, 2, 2, 0, 2, 2, 1, 1, - 1, 0, 2, 4, 5, 4, 2, 3, 2, 2, - 2, 2, 1, 2, 3, 0, 1, 0, 5, 1, - 4, 6, 2, 1, 0, 4, 0, 1, 1, 2, - 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, - 1, 1, 3, 3, 0, 1, 3, 1, 2, 1, - 1, 1, 1, 1, 2, 4, 4, 5, 1, 1, - 2, 0, 2, 0, 1, 3, 1, 0, 1, 2, - 3, 2, 4, 2, 3, 2, 0, 1, 2, 0, - 4, 5, 1, 2, 2, 0, 1, 3, 1, 2, - 3, 3, 3, 3, 3, 3, 1, 4, 9, 9, - 3, 0, 2, 2, 0, 5, 3, 1, 3, 5, - 3, 1, 2, 1, 3, 5, 1, 2, 3, 4, - 5, 4, 5, 4, 6, 5, 4, 5, 5, 5, - 2, 4, 1, 1, 0, 1, 4, 5, 4, 0, - 2, 2, 2, 1, 1, 1, 1, 0, 4, 2, - 1, 2, 2, 4, 2, 6, 2, 1, 3, 4, - 0, 2, 0, 2, 0, 1, 3, 3, 2, 0, - 2, 4, 1, 1, 1, 0, 2, 3, 5, 6, - 2, 3, 1, 5, 5, 5, 3, 3, 3, 4, - 0, 1, 1, 1, 1, 1, 2, 4, 1, 1, - 1, 1, 2, 3, 0, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 1, 3, 0, 1, 1, - 1, 1, 5, 2, 1, 1, 1, 1, 4, 1, - 2, 2, 1, 3, 3, 2, 1, 0, 5, 2, - 5, 2, 1, 3, 3, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 3, 0, - 1, 3, 3, 5, 2, 2, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 2, 2, 3, 3, 2, 2, 3, 3, 5, - 4, 6, 3, 5, 4, 6, 4, 6, 5, 7, - 3, 2, 4, 3, 2, 3, 3, 3, 3, 4, - 3, 4, 3, 4, 5, 6, 6, 7, 6, 7, - 6, 7, 3, 4, 4, 6, 1, 4, 3, 5, - 1, 3, 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 5, 6, 6, 7, 1, 1, 2, 1, 1, - 2, 2, 3, 1, 2, 4, 1, 1, 2, 2, - 4, 1, 1, 3, 1, 4, 1, 3, 3, 6, - 7, 9, 7, 7, 5, 1, 1, 1, 5, 6, - 6, 4, 4, 4, 4, 6, 5, 5, 5, 4, - 6, 4, 7, 9, 5, 0, 5, 4, 0, 1, - 0, 2, 0, 1, 3, 3, 2, 2, 0, 6, - 1, 0, 3, 0, 3, 3, 3, 0, 1, 4, - 2, 2, 2, 2, 2, 3, 2, 2, 3, 0, - 4, 3, 1, 5, 3, 1, 3, 1, 2, 3, - 1, 3, 1, 2, 1, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 1, 4, 1, - 4, 1, 2, 1, 2, 1, 2, 1, 3, 1, - 3, 1, 2, 1, 3, 1, 2, 1, 0, 1, - 3, 1, 3, 3, 1, 3, 3, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 3, 2, 3, 0, 3, 3, 2, - 2, 1, 0, 2, 2, 3, 2, 1, 1, 3, - 5, 1, 2, 4, 2, 0, 1, 0, 1, 2, - 3, 5, 7, 7, 1, 0, 0, 2, 0, 2, - 3, 3, 3, 5, 7, 7, 0, 2, 1, 0, - 1, 0, 1, 3, 1, 2, 3, 2, 1, 4, - 2, 1, 0, 3, 1, 3, 1, 2, 4, 2, - 0, 1, 3, 1, 3, 1, 2, 1, 3, 1, - 1, 2, 1, 1, 2, 1, 1, 2, 7, 2, - 5, 3, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, - 3, 0, 1, 1, 1, 5, 3, 0, 1, 1, - 1, 1, 1, 1, 4, 7, 6, 2, 0, 1, - 1, 1, 1, 13, 16, 1, 2, 0, 1, 0, - 1, 0, 2, 0, 1, 0, 6, 8, 6, 8, - 6, 8, 3, 2, 1, 0, 6, 6, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 4, 6, 3, 2, 4, 3, 5, 1, 0, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, - 3, 3, 1, 3, 3, 2, 3, 3, 1, 1, - 1, 3, 5, 1, 1, 1, 1, 3, 2, 2, - 3, 4, 5, 1, 1, 1, 1, 4, 6, 5, - 4, 6, 1, 1, 1, 1, 1, 1, 0, 1, - 3, 1, 0, 7, 3, 1, 2, 3, 2, 0, - 2, 0, 2, 4, 5, 8, 2, 3, 5, 1, - 0, 2, 0, 2, 3, 3, 3, 1, 1, 1, - 2, 3, 2, 2, 2, 2, 3, 4, 3, 1, - 1, 1, 1, 1, 1, 0, 1, 3, 1, 3, - 2, 9, 12, 11, 12, 14, 3, 4, 4, 0, - 7, 10, 9, 2, 3, 0, 4, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1 + -1, -1, -1, 314, 315, 316, -1, -1, -1, -1, + -1, 322, -1, -1, 325, -1, -1, -1, -1, -1, + -1, 314, 315, 316, -1, -1, -1, -1, -1, 322, + -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 354, -1, -1, -1, -1, -1, -1, 379, -1, + 363, -1, -1, -1, -1, 386, -1, -1, -1, 390, + -1, -1, -1, -1, -1, -1, 379, -1, -1, 400, + -1, -1, -1, 386, -1, -1, -1, 390, -1, -1, + -1, 412, -1, -1, -1, 416, -1, 400, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 412, + -1, -1, -1, 416, -1, 436, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 449, -1, + -1, -1, -1, 436, 455, -1, -1, -1, -1, 460, + -1, -1, -1, 464, -1, -1, 449, -1, -1, -1, + -1, -1, 455, -1, -1, 476, -1, 460, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 476, -1, -1, -1, -1, -1, 500, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 514, -1, -1, -1, 500, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 514 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 22, 32, 34, 35, 47, 52, 61, 75, 84, + 86, 98, 100, 111, 126, 127, 128, 137, 143, 151, + 153, 154, 167, 171, 197, 213, 239, 314, 315, 316, + 322, 325, 354, 363, 379, 386, 390, 400, 412, 416, + 436, 449, 452, 455, 460, 476, 500, 514, 526, 527, + 528, 529, 540, 549, 551, 556, 572, 575, 576, 578, + 582, 586, 593, 595, 597, 598, 646, 652, 655, 656, + 674, 675, 676, 677, 679, 681, 682, 686, 739, 740, + 907, 910, 913, 920, 921, 923, 926, 927, 928, 935, + 939, 945, 948, 953, 957, 958, 959, 962, 965, 966, + 967, 971, 972, 974, 430, 479, 596, 202, 370, 381, + 416, 466, 108, 191, 960, 596, 3, 22, 23, 24, + 25, 26, 27, 28, 29, 31, 32, 33, 42, 43, + 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 59, 60, 61, 62, 63, 64, 67, + 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, + 79, 81, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 118, 120, 121, 122, 123, 124, + 125, 128, 129, 130, 131, 134, 135, 136, 137, 138, + 140, 141, 142, 144, 145, 146, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 160, 162, 163, + 164, 165, 167, 169, 170, 172, 173, 174, 175, 176, + 177, 179, 181, 182, 183, 184, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 199, 200, + 201, 202, 203, 204, 205, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 218, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 233, 234, 235, + 236, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 275, 276, 277, + 278, 280, 281, 282, 283, 284, 285, 287, 288, 291, + 292, 293, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 329, 330, 331, 332, 333, 334, 336, 337, 338, 339, + 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 391, 392, 393, 394, + 395, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 414, 415, 417, 418, + 419, 420, 421, 422, 423, 425, 426, 427, 430, 431, + 432, 433, 434, 436, 437, 438, 439, 440, 441, 442, + 443, 446, 447, 448, 450, 451, 452, 453, 455, 456, + 457, 458, 459, 460, 461, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 474, 477, 478, 479, 480, 481, + 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 542, 816, 896, 900, + 977, 978, 979, 3, 175, 246, 409, 542, 922, 977, + 289, 596, 55, 171, 514, 669, 177, 240, 294, 313, + 370, 420, 422, 439, 445, 448, 580, 644, 919, 5, + 30, 325, 542, 543, 895, 3, 30, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 45, 49, 53, 54, + 55, 56, 57, 58, 65, 66, 71, 72, 74, 79, + 80, 81, 82, 83, 89, 93, 100, 101, 108, 112, + 115, 117, 119, 126, 127, 132, 133, 139, 143, 147, + 152, 158, 159, 161, 164, 166, 168, 170, 171, 172, + 175, 176, 178, 180, 181, 182, 185, 193, 198, 206, + 208, 209, 215, 216, 217, 218, 219, 221, 222, 224, + 231, 232, 234, 236, 237, 246, 267, 268, 269, 273, + 274, 277, 279, 280, 282, 286, 289, 290, 294, 295, + 298, 299, 301, 302, 314, 315, 316, 317, 320, 321, + 324, 328, 335, 339, 344, 358, 361, 365, 379, 380, + 387, 390, 391, 394, 396, 409, 411, 412, 413, 416, + 418, 424, 426, 427, 428, 429, 432, 434, 435, 438, + 444, 445, 449, 454, 460, 461, 462, 464, 472, 473, + 475, 476, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 548, 977, 981, 983, 24, 81, 97, + 146, 156, 168, 173, 202, 245, 249, 319, 334, 367, + 370, 381, 384, 402, 416, 422, 423, 433, 439, 466, + 580, 647, 648, 651, 596, 895, 100, 137, 464, 514, + 529, 540, 549, 551, 572, 575, 576, 582, 586, 595, + 598, 646, 652, 655, 656, 674, 907, 910, 913, 920, + 921, 931, 935, 939, 945, 948, 953, 962, 965, 971, + 972, 974, 108, 75, 213, 66, 79, 81, 158, 231, + 280, 290, 302, 320, 366, 411, 432, 434, 438, 460, + 514, 541, 542, 543, 675, 740, 742, 744, 754, 761, + 762, 816, 818, 819, 108, 5, 542, 544, 946, 946, + 542, 895, 30, 177, 240, 385, 426, 430, 542, 963, + 964, 969, 596, 30, 132, 695, 696, 177, 240, 370, + 385, 426, 940, 941, 969, 596, 542, 674, 686, 970, + 542, 761, 416, 692, 541, 172, 514, 950, 514, 342, + 687, 688, 895, 687, 675, 676, 965, 0, 517, 122, + 212, 451, 147, 217, 295, 444, 698, 699, 744, 744, + 675, 677, 679, 518, 464, 929, 30, 426, 430, 674, + 970, 191, 541, 895, 191, 541, 191, 761, 191, 541, + 274, 544, 512, 516, 545, 546, 514, 82, 108, 173, + 202, 245, 370, 381, 416, 439, 466, 925, 108, 674, + 541, 420, 422, 420, 422, 352, 191, 541, 541, 377, + 173, 245, 342, 381, 416, 466, 653, 202, 30, 895, + 191, 548, 251, 433, 107, 416, 416, 466, 374, 377, + 191, 542, 649, 902, 191, 892, 895, 191, 895, 514, + 585, 294, 422, 931, 3, 460, 932, 934, 935, 937, + 938, 977, 981, 929, 542, 544, 922, 946, 514, 514, + 166, 514, 675, 762, 514, 514, 541, 514, 514, 171, + 514, 514, 514, 514, 675, 740, 744, 754, 507, 545, + 40, 542, 755, 756, 755, 379, 518, 678, 37, 42, + 101, 172, 208, 224, 234, 268, 314, 321, 361, 380, + 449, 758, 756, 40, 542, 755, 757, 500, 766, 544, + 171, 503, 514, 514, 908, 964, 964, 964, 497, 223, + 516, 289, 4, 6, 7, 8, 9, 10, 39, 54, + 56, 57, 65, 71, 72, 83, 112, 115, 117, 136, + 152, 159, 164, 181, 182, 215, 216, 218, 246, 267, + 269, 274, 279, 282, 291, 339, 365, 394, 426, 427, + 435, 461, 498, 505, 506, 507, 512, 514, 519, 520, + 522, 523, 542, 544, 675, 729, 778, 781, 784, 785, + 786, 788, 789, 790, 791, 793, 794, 809, 811, 812, + 813, 814, 815, 816, 817, 819, 820, 835, 836, 847, + 869, 874, 882, 883, 884, 896, 897, 898, 881, 883, + 940, 940, 544, 940, 497, 171, 428, 503, 516, 545, + 761, 954, 3, 170, 172, 464, 935, 949, 951, 170, + 952, 809, 853, 854, 687, 518, 514, 904, 515, 515, + 515, 528, 171, 294, 559, 954, 30, 132, 693, 693, + 59, 693, 161, 166, 237, 286, 704, 706, 707, 732, + 734, 735, 736, 180, 289, 454, 289, 698, 699, 514, + 541, 417, 968, 497, 223, 152, 26, 32, 137, 293, + 350, 354, 386, 457, 534, 537, 538, 350, 152, 40, + 60, 106, 201, 250, 260, 272, 304, 350, 356, 381, + 386, 400, 537, 587, 590, 152, 350, 386, 537, 152, + 350, 386, 537, 152, 40, 961, 809, 875, 547, 548, + 546, 3, 30, 37, 42, 49, 55, 81, 83, 89, + 101, 132, 170, 172, 175, 176, 193, 208, 221, 222, + 224, 234, 236, 246, 268, 277, 299, 301, 321, 361, + 380, 391, 409, 418, 438, 462, 464, 515, 809, 856, + 857, 899, 905, 977, 982, 809, 416, 541, 542, 515, + 514, 633, 370, 580, 644, 274, 911, 40, 191, 542, + 579, 466, 191, 541, 191, 541, 976, 191, 541, 191, + 541, 89, 916, 152, 480, 90, 129, 307, 421, 191, + 542, 152, 516, 903, 63, 357, 518, 650, 152, 518, + 650, 152, 289, 583, 584, 809, 905, 352, 515, 518, + 4, 159, 289, 435, 505, 506, 544, 589, 592, 898, + 930, 932, 933, 936, 931, 428, 514, 664, 668, 171, + 809, 854, 514, 3, 68, 69, 109, 110, 113, 114, + 188, 189, 252, 253, 254, 255, 256, 257, 258, 259, + 262, 263, 375, 376, 470, 471, 494, 495, 544, 796, + 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, + 807, 859, 860, 756, 757, 809, 541, 809, 861, 505, + 506, 542, 810, 811, 836, 847, 863, 514, 809, 853, + 864, 809, 58, 171, 232, 429, 809, 854, 867, 809, + 515, 543, 514, 418, 712, 713, 713, 695, 696, 744, + 219, 690, 224, 37, 224, 380, 758, 224, 299, 759, + 744, 759, 224, 758, 514, 224, 759, 224, 148, 199, + 746, 224, 713, 514, 543, 514, 713, 296, 542, 544, + 947, 809, 942, 944, 856, 3, 37, 42, 49, 54, + 55, 56, 57, 71, 72, 81, 83, 89, 101, 112, + 115, 164, 170, 172, 176, 193, 208, 215, 216, 218, + 221, 222, 224, 234, 236, 246, 267, 268, 269, 277, + 282, 299, 301, 321, 339, 361, 365, 380, 387, 391, + 394, 409, 418, 426, 427, 438, 444, 461, 464, 772, + 774, 775, 777, 779, 781, 783, 785, 786, 787, 789, + 790, 793, 794, 858, 901, 977, 980, 40, 235, 542, + 514, 512, 675, 463, 792, 809, 873, 792, 792, 514, + 514, 780, 780, 324, 675, 514, 782, 520, 71, 72, + 792, 809, 780, 514, 514, 478, 500, 514, 795, 514, + 795, 809, 809, 809, 148, 885, 886, 809, 854, 855, + 675, 809, 853, 543, 837, 838, 839, 9, 548, 516, + 545, 876, 545, 514, 544, 514, 514, 544, 898, 3, + 8, 11, 15, 16, 17, 18, 19, 20, 21, 36, + 40, 46, 53, 80, 176, 193, 198, 221, 222, 236, + 274, 277, 291, 294, 391, 498, 501, 502, 503, 505, + 506, 507, 508, 509, 510, 845, 846, 847, 849, 879, + 477, 821, 301, 809, 518, 690, 514, 544, 690, 3, + 117, 240, 544, 589, 794, 943, 104, 944, 944, 542, + 40, 542, 515, 518, 929, 518, 515, 688, 892, 893, + 40, 954, 192, 352, 219, 386, 677, 677, 30, 700, + 701, 809, 59, 677, 694, 163, 271, 720, 226, 272, + 338, 389, 451, 4, 9, 30, 715, 809, 505, 506, + 716, 717, 809, 811, 732, 733, 707, 706, 704, 705, + 166, 735, 284, 737, 59, 683, 684, 685, 747, 810, + 883, 883, 704, 732, 854, 904, 235, 541, 74, 82, + 93, 168, 191, 328, 445, 542, 615, 625, 640, 82, + 93, 550, 93, 550, 514, 428, 514, 613, 244, 448, + 613, 93, 518, 428, 541, 3, 777, 589, 59, 591, + 589, 589, 106, 250, 260, 59, 428, 476, 500, 588, + 265, 370, 588, 590, 761, 93, 428, 550, 370, 541, + 428, 370, 960, 542, 664, 513, 524, 856, 856, 857, + 518, 698, 699, 13, 14, 221, 221, 428, 428, 542, + 632, 637, 476, 667, 541, 377, 342, 381, 416, 466, + 653, 152, 100, 576, 598, 912, 913, 972, 144, 774, + 274, 198, 581, 541, 274, 577, 587, 274, 514, 633, + 40, 274, 633, 274, 514, 654, 191, 542, 627, 917, + 548, 152, 171, 594, 649, 547, 516, 902, 892, 895, + 895, 902, 515, 518, 13, 931, 937, 4, 898, 4, + 898, 544, 548, 666, 673, 55, 102, 123, 141, 145, + 167, 170, 186, 279, 287, 309, 336, 670, 947, 40, + 515, 809, 515, 171, 518, 515, 317, 862, 515, 810, + 810, 11, 15, 16, 19, 20, 21, 198, 221, 291, + 501, 502, 503, 505, 506, 507, 508, 509, 510, 847, + 810, 515, 763, 764, 818, 166, 171, 865, 866, 518, + 515, 40, 867, 854, 867, 867, 171, 515, 40, 755, + 514, 893, 4, 9, 542, 708, 710, 711, 883, 881, + 177, 240, 416, 420, 422, 448, 541, 691, 473, 767, + 744, 744, 224, 744, 289, 454, 760, 744, 224, 883, + 744, 744, 281, 281, 514, 744, 543, 768, 769, 514, + 543, 768, 518, 515, 518, 516, 514, 777, 514, 514, + 516, 39, 776, 514, 796, 797, 798, 799, 800, 801, + 802, 803, 804, 805, 806, 807, 808, 515, 518, 780, + 551, 655, 656, 674, 909, 953, 965, 854, 855, 514, + 472, 870, 871, 809, 855, 898, 809, 840, 841, 842, + 843, 792, 792, 8, 15, 16, 19, 20, 21, 501, + 502, 503, 505, 506, 507, 508, 509, 510, 542, 845, + 850, 515, 854, 426, 426, 898, 898, 514, 542, 352, + 890, 166, 513, 515, 518, 524, 518, 521, 507, 546, + 854, 898, 809, 808, 808, 774, 809, 809, 809, 809, + 809, 809, 809, 809, 5, 548, 906, 426, 45, 413, + 880, 902, 809, 809, 514, 675, 868, 132, 159, 274, + 279, 284, 435, 446, 809, 279, 514, 809, 428, 53, + 176, 193, 198, 236, 391, 809, 809, 809, 809, 809, + 809, 809, 809, 809, 809, 30, 38, 396, 844, 512, + 516, 878, 180, 162, 822, 365, 514, 836, 884, 171, + 741, 856, 741, 514, 544, 542, 541, 949, 541, 957, + 809, 518, 515, 249, 274, 689, 454, 956, 541, 553, + 514, 542, 558, 568, 569, 571, 41, 126, 702, 518, + 454, 702, 265, 677, 365, 366, 505, 506, 717, 719, + 811, 389, 226, 290, 312, 312, 518, 509, 4, 718, + 898, 718, 365, 366, 719, 541, 891, 278, 393, 738, + 514, 893, 894, 518, 180, 454, 198, 180, 219, 733, + 705, 515, 350, 537, 514, 191, 625, 895, 226, 274, + 226, 454, 514, 618, 773, 774, 895, 542, 191, 895, + 191, 542, 26, 137, 386, 533, 536, 548, 609, 623, + 895, 548, 617, 636, 895, 534, 895, 350, 386, 537, + 587, 589, 902, 895, 589, 902, 895, 589, 350, 386, + 537, 895, 895, 895, 895, 350, 386, 537, 895, 895, + 544, 506, 809, 875, 698, 698, 698, 462, 857, 192, + 355, 697, 809, 809, 279, 544, 924, 279, 924, 542, + 333, 663, 515, 518, 287, 171, 428, 658, 911, 579, + 466, 541, 541, 976, 541, 541, 541, 294, 644, 514, + 675, 152, 3, 514, 514, 152, 152, 236, 542, 615, + 625, 628, 631, 641, 643, 476, 478, 620, 151, 674, + 152, 476, 918, 152, 515, 856, 40, 274, 289, 542, + 3, 650, 547, 650, 289, 650, 583, 809, 664, 507, + 514, 589, 665, 815, 936, 515, 518, 40, 662, 544, + 662, 274, 279, 336, 662, 59, 662, 774, 515, 809, + 809, 809, 865, 774, 810, 810, 810, 810, 810, 810, + 132, 274, 284, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 515, 518, 40, 765, 809, 809, 866, + 865, 774, 515, 515, 515, 854, 774, 893, 515, 312, + 509, 312, 366, 509, 514, 514, 690, 420, 422, 420, + 422, 541, 692, 692, 692, 809, 180, 721, 760, 760, + 744, 809, 514, 744, 166, 760, 514, 543, 751, 760, + 774, 515, 518, 768, 515, 942, 3, 858, 39, 776, + 542, 771, 771, 3, 512, 512, 898, 428, 428, 428, + 428, 774, 515, 513, 854, 809, 139, 871, 872, 515, + 515, 515, 524, 518, 521, 516, 515, 515, 497, 497, + 515, 515, 893, 514, 809, 887, 542, 809, 809, 837, + 886, 515, 515, 515, 497, 810, 810, 145, 854, 171, + 132, 159, 279, 284, 435, 446, 514, 145, 850, 809, + 413, 880, 809, 868, 809, 428, 514, 675, 809, 875, + 547, 514, 514, 155, 823, 742, 743, 767, 698, 767, + 898, 808, 904, 904, 249, 514, 743, 473, 955, 40, + 59, 554, 564, 571, 876, 518, 741, 503, 499, 703, + 701, 291, 845, 848, 703, 4, 898, 719, 290, 451, + 716, 518, 243, 893, 683, 59, 883, 514, 543, 59, + 265, 428, 809, 274, 640, 514, 152, 514, 618, 202, + 637, 638, 599, 40, 175, 608, 634, 599, 26, 137, + 354, 356, 386, 530, 531, 532, 538, 539, 152, 650, + 152, 650, 609, 623, 609, 515, 518, 544, 602, 503, + 516, 515, 518, 428, 370, 93, 428, 550, 370, 428, + 428, 428, 370, 961, 524, 513, 524, 697, 697, 697, + 857, 281, 281, 515, 514, 657, 3, 403, 404, 544, + 672, 632, 663, 581, 541, 577, 514, 40, 633, 654, + 911, 352, 416, 544, 573, 574, 579, 673, 637, 541, + 541, 976, 541, 515, 518, 287, 613, 287, 289, 612, + 895, 476, 975, 541, 613, 40, 541, 515, 416, 809, + 152, 541, 594, 902, 660, 671, 936, 666, 544, 544, + 279, 637, 507, 637, 544, 507, 637, 544, 515, 515, + 866, 171, 132, 284, 514, 766, 763, 514, 515, 515, + 515, 542, 708, 767, 692, 692, 692, 692, 541, 541, + 541, 59, 185, 730, 760, 893, 514, 748, 749, 750, + 812, 814, 893, 166, 80, 770, 769, 515, 515, 512, + 774, 515, 518, 515, 898, 513, 898, 515, 797, 799, + 800, 801, 800, 801, 801, 515, 424, 809, 143, 809, + 840, 850, 795, 795, 515, 809, 887, 888, 889, 40, + 198, 515, 890, 808, 809, 36, 36, 809, 515, 809, + 171, 514, 858, 809, 515, 145, 810, 810, 145, 145, + 809, 809, 513, 524, 514, 877, 699, 473, 809, 300, + 827, 518, 721, 697, 721, 515, 909, 809, 358, 562, + 542, 265, 320, 117, 303, 514, 552, 674, 515, 518, + 558, 955, 809, 163, 230, 514, 703, 290, 541, 515, + 894, 180, 675, 676, 883, 894, 895, 895, 515, 152, + 638, 625, 638, 599, 627, 518, 515, 119, 206, 272, + 274, 624, 514, 33, 59, 645, 634, 74, 80, 93, + 117, 119, 206, 274, 279, 328, 344, 445, 454, 604, + 605, 619, 175, 117, 190, 274, 613, 588, 107, 117, + 175, 274, 402, 405, 590, 613, 386, 532, 439, 895, + 542, 536, 3, 37, 42, 49, 55, 81, 83, 89, + 101, 170, 172, 175, 176, 193, 208, 221, 222, 224, + 234, 236, 246, 268, 273, 277, 291, 299, 301, 321, + 361, 380, 387, 391, 409, 418, 438, 444, 464, 505, + 506, 544, 589, 600, 639, 774, 848, 899, 977, 983, + 548, 636, 895, 895, 895, 895, 895, 895, 895, 895, + 895, 895, 664, 875, 875, 515, 515, 515, 698, 107, + 370, 516, 588, 672, 514, 514, 631, 674, 918, 40, + 644, 191, 541, 515, 518, 581, 515, 515, 577, 514, + 40, 622, 620, 628, 86, 585, 107, 272, 633, 674, + 654, 674, 627, 454, 915, 650, 515, 518, 637, 810, + 171, 514, 858, 768, 515, 518, 515, 721, 541, 541, + 541, 541, 30, 103, 181, 364, 514, 722, 723, 724, + 725, 726, 727, 728, 809, 809, 475, 824, 515, 811, + 851, 852, 198, 180, 745, 749, 515, 751, 752, 753, + 902, 776, 898, 776, 542, 776, 513, 513, 809, 518, + 515, 542, 809, 811, 809, 809, 809, 858, 515, 809, + 36, 36, 809, 809, 145, 515, 506, 875, 515, 856, + 515, 809, 515, 514, 542, 828, 730, 515, 730, 544, + 515, 882, 460, 415, 453, 563, 542, 557, 567, 289, + 560, 503, 571, 562, 850, 59, 515, 515, 459, 460, + 680, 599, 625, 515, 515, 476, 630, 120, 194, 204, + 119, 456, 809, 117, 40, 514, 902, 895, 810, 120, + 194, 119, 279, 226, 541, 630, 88, 645, 191, 279, + 589, 809, 645, 279, 505, 506, 592, 542, 774, 650, + 650, 3, 246, 409, 899, 903, 503, 428, 428, 513, + 513, 697, 515, 515, 542, 664, 454, 659, 661, 673, + 637, 515, 975, 40, 416, 809, 416, 274, 514, 544, + 514, 918, 631, 151, 674, 149, 200, 612, 122, 137, + 327, 975, 107, 918, 476, 973, 40, 289, 542, 914, + 514, 671, 810, 858, 515, 515, 9, 351, 714, 730, + 514, 388, 514, 515, 518, 542, 825, 826, 335, 731, + 518, 515, 514, 543, 59, 515, 198, 515, 752, 513, + 774, 887, 513, 191, 515, 809, 809, 809, 524, 513, + 524, 515, 515, 542, 829, 824, 544, 824, 518, 459, + 876, 515, 518, 91, 562, 809, 515, 894, 894, 344, + 630, 514, 621, 599, 515, 190, 514, 809, 274, 605, + 630, 633, 895, 40, 152, 770, 903, 509, 600, 895, + 895, 515, 588, 124, 515, 515, 620, 674, 674, 541, + 152, 673, 40, 515, 895, 975, 30, 85, 94, 118, + 190, 203, 402, 405, 616, 616, 366, 366, 40, 64, + 74, 240, 416, 809, 541, 514, 542, 561, 570, 818, + 515, 515, 514, 824, 854, 514, 854, 724, 40, 518, + 809, 454, 709, 811, 883, 893, 756, 514, 756, 809, + 875, 875, 309, 830, 731, 731, 674, 303, 674, 557, + 289, 514, 555, 541, 599, 548, 626, 629, 406, 468, + 606, 607, 514, 601, 809, 515, 248, 642, 190, 454, + 535, 509, 439, 664, 544, 918, 612, 973, 514, 541, + 515, 674, 620, 585, 674, 74, 292, 74, 674, 915, + 809, 80, 565, 515, 518, 565, 9, 731, 515, 723, + 515, 828, 826, 368, 515, 883, 513, 513, 513, 59, + 698, 709, 709, 563, 93, 570, 133, 633, 503, 515, + 518, 587, 515, 272, 614, 172, 308, 392, 289, 610, + 611, 635, 601, 809, 439, 40, 514, 973, 612, 975, + 973, 292, 292, 514, 515, 902, 566, 902, 918, 561, + 566, 515, 709, 515, 711, 515, 853, 183, 337, 366, + 831, 459, 895, 515, 275, 451, 642, 600, 629, 515, + 607, 204, 122, 451, 289, 635, 289, 610, 674, 570, + 565, 702, 767, 702, 53, 104, 441, 809, 832, 833, + 832, 832, 515, 674, 767, 386, 611, 63, 272, 357, + 386, 603, 603, 973, 515, 566, 703, 703, 833, 365, + 165, 323, 165, 323, 148, 834, 834, 834, 569, 599, + 25, 117, 279, 918, 702, 36, 104, 180, 272, 425, + 767, 767, 703, 833, 365, 297 }; +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 -enum { YYENOMEM = -2 }; +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab -#define YYNOMEM goto yyexhaustedlab +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ - do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (&yylloc, yyscanner, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ - while (0) - -/* Backward compatibility with an undocumented macro. - Use YYerror or YYUNDEF. */ -#define YYERRCODE YYUNDEF +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (&yylloc, yyscanner, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) #endif -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -/* YYLOCATION_PRINT -- Print the location on the stream. +/* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ -# ifndef YYLOCATION_PRINT - -# if defined YY_LOCATION_PRINT - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) - -# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - -/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ - -YY_ATTRIBUTE_UNUSED -static int -yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) -{ - int res = 0; - int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; - if (0 <= yylocp->first_line) - { - res += YYFPRINTF (yyo, "%d", yylocp->first_line); - if (0 <= yylocp->first_column) - res += YYFPRINTF (yyo, ".%d", yylocp->first_column); - } - if (0 <= yylocp->last_line) - { - if (yylocp->first_line < yylocp->last_line) - { - res += YYFPRINTF (yyo, "-%d", yylocp->last_line); - if (0 <= end_col) - res += YYFPRINTF (yyo, ".%d", end_col); - } - else if (0 <= end_col && yylocp->first_column < end_col) - res += YYFPRINTF (yyo, "-%d", end_col); - } - return res; -} - -# define YYLOCATION_PRINT yy_location_print_ - - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) - -# else - -# define YYLOCATION_PRINT(File, Loc) ((void) 0) - /* Temporary convenience wrapper in case some people defined the - undocumented and private YY_LOCATION_PRINT macros. */ -# define YY_LOCATION_PRINT YYLOCATION_PRINT +#ifndef YY_LOCATION_PRINT +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif -# endif -# endif /* !defined YYLOCATION_PRINT */ +/* YYLEX -- calling `yylex' with the right arguments. */ -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Kind, Value, Location, yyscanner); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, &yylloc, yyscanner) +#endif +/* Enable debugging if requested. */ +#if YYDEBUG -/*-----------------------------------. -| Print this symbol's value on YYO. | -`-----------------------------------*/ +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, Location, yyscanner); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, yyscanner) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + YYLTYPE const * const yylocationp; + core_yyscan_t yyscanner; +#endif { - FILE *yyoutput = yyo; - YY_USE (yyoutput); - YY_USE (yylocationp); - YY_USE (yyscanner); if (!yyvaluep) return; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END + YYUSE (yylocationp); + YYUSE (yyscanner); +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } } -/*---------------------------. -| Print this symbol on YYO. | -`---------------------------*/ +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +#else static void -yy_symbol_print (FILE *yyo, - yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, core_yyscan_t yyscanner) +yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, yyscanner) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + YYLTYPE const * const yylocationp; + core_yyscan_t yyscanner; +#endif { - YYFPRINTF (yyo, "%s %s (", - yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - YYLOCATION_PRINT (yyo, yylocationp); - YYFPRINTF (yyo, ": "); - yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, yyscanner); - YYFPRINTF (yyo, ")"); + YY_LOCATION_PRINT (yyoutput, *yylocationp); + YYFPRINTF (yyoutput, ": "); + yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, yyscanner); + YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. @@ -18469,69 +19351,82 @@ yy_symbol_print (FILE *yyo, | TOP (included). | `------------------------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +#else static void -yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; +#endif { YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, - int yyrule, core_yyscan_t yyscanner) +yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, core_yyscan_t yyscanner) +#else +static void +yy_reduce_print (yyvsp, yylsp, yyrule, yyscanner) + YYSTYPE *yyvsp; + YYLTYPE *yylsp; + int yyrule; + core_yyscan_t yyscanner; +#endif { - int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", - yyrule - 1, yylno); + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), - &yyvsp[(yyi + 1) - (yynrhs)], - &(yylsp[(yyi + 1) - (yynrhs)]), yyscanner); - YYFPRINTF (stderr, "\n"); + fprintf (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , &(yylsp[(yyi + 1) - (yynrhs)]) , yyscanner); + fprintf (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, yylsp, Rule, yyscanner); \ -} while (0) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, yylsp, Rule, yyscanner); \ +} while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ -# define YYDPRINTF(Args) ((void) 0) -# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -18546,30 +19441,270 @@ int yydebug; # define YYMAXDEPTH 10000 #endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + if (! yyres) + return yystrlen (yystr); + return yystpcpy (yyres, yystr) - yyres; +} +# endif +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void -yydestruct (const char *yymsg, - yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, core_yyscan_t yyscanner) +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, core_yyscan_t yyscanner) +#else +static void +yydestruct (yymsg, yytype, yyvaluep, yylocationp, yyscanner) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; + YYLTYPE *yylocationp; + core_yyscan_t yyscanner; +#endif { - YY_USE (yyvaluep); - YY_USE (yylocationp); - YY_USE (yyscanner); + YYUSE (yyvaluep); + YYUSE (yylocationp); + YYUSE (yyscanner); + if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); - YY_IGNORE_MAYBE_UNINITIALIZED_END + switch (yytype) + { + + default: + break; + } } + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (core_yyscan_t yyscanner); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ @@ -18580,217 +19715,221 @@ yydestruct (const char *yymsg, | yyparse. | `----------*/ +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) int yyparse (core_yyscan_t yyscanner) +#else +int +yyparse (yyscanner) + core_yyscan_t yyscanner; +#endif +#endif { -/* Lookahead token kind. */ + /* The look-ahead symbol. */ int yychar; +/* The semantic value of the look-ahead symbol. */ +YYSTYPE yylval; -/* The semantic value of the lookahead symbol. */ -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); +/* Number of syntax errors so far. */ +int yynerrs; +/* Location data for the look-ahead symbol. */ +YYLTYPE yylloc; -/* Location data for the lookahead symbol. */ -static YYLTYPE yyloc_default -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - = { 1, 1, 1, 1 } -# endif -; -YYLTYPE yylloc = yyloc_default; + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif - /* Number of syntax errors so far. */ - int yynerrs = 0; (void)yynerrs; + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. - yy_state_fast_t yystate = 0; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus = 0; + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ - /* Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; - /* Their size. */ - YYPTRDIFF_T yystacksize = YYINITDEPTH; + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; - /* The state stack: array, bottom, top. */ - yy_state_t yyssa[YYINITDEPTH]; - yy_state_t *yyss = yyssa; - yy_state_t *yyssp = yyss; + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[2]; - /* The semantic value stack: array, bottom, top. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp = yyvs; +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - /* The location stack: array, bottom, top. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp = yyls; + YYSIZE_T yystacksize = YYINITDEPTH; - int yyn; - /* The return value of yyparse. */ - int yyresult; - /* Lookahead symbol kind. */ - yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[3]; - - - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); - yychar = YYEMPTY; /* Cause a token to be read. */ + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; (void)yynerrs; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + yylsp = yyls; +#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL + /* Initialize the default location before parsing starts. */ + yylloc.first_line = yylloc.last_line = 1; + yylloc.first_column = yylloc.last_column = 0; +#endif - yylsp[0] = yylloc; goto yysetstate; - /*------------------------------------------------------------. -| yynewstate -- push a new state, which is found in yystate. | +| yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ -yynewstate: + yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - -/*--------------------------------------------------------------------. -| yysetstate -- set current state (the top of the stack) to yystate. | -`--------------------------------------------------------------------*/ -yysetstate: - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - YY_ASSERT (0 <= yystate && yystate < YYNSTATES); - YY_IGNORE_USELESS_CAST_BEGIN - *yyssp = YY_CAST (yy_state_t, yystate); - YY_IGNORE_USELESS_CAST_END - YY_STACK_PRINT (yyss, yyssp); + yysetstate: + *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) -#if !defined yyoverflow && !defined YYSTACK_RELOCATE - YYNOMEM; -#else { /* Get the current used size of the three stacks, in elements. */ - YYPTRDIFF_T yysize = yyssp - yyss + 1; + YYSIZE_T yysize = yyssp - yyss + 1; -# if defined yyoverflow +#ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - yy_state_t *yyss1 = yyss; - YYSTYPE *yyvs1 = yyvs; - YYLTYPE *yyls1 = yyls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * YYSIZEOF (*yyssp), - &yyvs1, yysize * YYSIZEOF (*yyvsp), - &yyls1, yysize * YYSIZEOF (*yylsp), - &yystacksize); - yyss = yyss1; - yyvs = yyvs1; - yyls = yyls1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + YYLTYPE *yyls1 = yyls; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yyls1, yysize * sizeof (*yylsp), + &yystacksize); + yyls = yyls1; + yyss = yyss1; + yyvs = yyvs1; } -# else /* defined YYSTACK_RELOCATE */ +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - YYNOMEM; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yy_state_t *yyss1 = yyss; - union yyalloc *yyptr = - YY_CAST (union yyalloc *, - YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); - if (! yyptr) - YYNOMEM; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + YYSTACK_RELOCATE (yyls); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif +#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; yylsp = yyls + yysize - 1; - YY_IGNORE_USELESS_CAST_BEGIN - YYDPRINTF ((stderr, "Stack size increased to %ld\n", - YY_CAST (long, yystacksize))); - YY_IGNORE_USELESS_CAST_END + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } -#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - - if (yystate == YYFINAL) - YYACCEPT; + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; - /*-----------. | yybackup. | `-----------*/ yybackup: + /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ + look-ahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to lookahead token. */ + /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) + if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a lookahead token if don't already have one. */ + /* Not known => get a look-ahead token if don't already have one. */ - /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token\n")); - yychar = yylex (&yylval, &yylloc, yyscanner); + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; } if (yychar <= YYEOF) { - yychar = YYEOF; - yytoken = YYSYMBOL_YYEOF; + yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } - else if (yychar == YYerror) - { - /* The scanner already issued an error message, process directly - to error recovery. But do not keep the error token as - lookahead, it is too special and may lead us to an endless - loop in error recovery. */ - yychar = YYUNDEF; - yytoken = YYSYMBOL_YYerror; - yyerror_range[1] = yylloc; - goto yyerrlab1; - } else { yytoken = YYTRANSLATE (yychar); @@ -18805,27 +19944,30 @@ YYLTYPE yylloc = yyloc_default; yyn = yytable[yyn]; if (yyn <= 0) { - if (yytable_value_is_error (yyn)) - goto yyerrlab; + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; yyn = -yyn; goto yyreduce; } + if (yyn == YYFINAL) + YYACCEPT; + /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the lookahead token. */ + /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END *++yylsp = yylloc; - - /* Discard the shifted token. */ - yychar = YYEMPTY; goto yynewstate; @@ -18840,14 +19982,14 @@ YYLTYPE yylloc = yyloc_default; /*-----------------------------. -| yyreduce -- do a reduction. | +| yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. + `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -18856,2347 +19998,2101 @@ YYLTYPE yylloc = yyloc_default; GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; - /* Default location. */ + /* Default location. */ YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); - yyerror_range[1] = yyloc; YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: /* stmtblock: stmtmulti */ + case 2: #line 501 "third_party/libpg_query/grammar/grammar.y" - { - pg_yyget_extra(yyscanner)->parsetree = (yyvsp[0].list); - } -#line 18871 "third_party/libpg_query/grammar/grammar_out.cpp" + { + pg_yyget_extra(yyscanner)->parsetree = (yyvsp[(1) - (1)].list); + ;} break; - case 3: /* stmtmulti: stmtmulti ';' stmt */ + case 3: #line 517 "third_party/libpg_query/grammar/grammar.y" - { - if ((yyvsp[-2].list) != NIL) + { + if ((yyvsp[(1) - (3)].list) != NIL) { /* update length of previous stmt */ - updateRawStmtEnd(llast_node(PGRawStmt, (yyvsp[-2].list)), (yylsp[-1])); + updateRawStmtEnd(llast_node(PGRawStmt, (yyvsp[(1) - (3)].list)), (yylsp[(2) - (3)])); } - if ((yyvsp[0].node) != NULL) - (yyval.list) = lappend((yyvsp[-2].list), makeRawStmt((yyvsp[0].node), (yylsp[-1]) + 1)); + if ((yyvsp[(3) - (3)].node) != NULL) + (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeRawStmt((yyvsp[(3) - (3)].node), (yylsp[(2) - (3)]) + 1)); else - (yyval.list) = (yyvsp[-2].list); - } -#line 18887 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.list) = (yyvsp[(1) - (3)].list); + ;} break; - case 4: /* stmtmulti: stmt */ + case 4: #line 529 "third_party/libpg_query/grammar/grammar.y" - { - if ((yyvsp[0].node) != NULL) - (yyval.list) = list_make1(makeRawStmt((yyvsp[0].node), 0)); + { + if ((yyvsp[(1) - (1)].node) != NULL) + (yyval.list) = list_make1(makeRawStmt((yyvsp[(1) - (1)].node), 0)); else (yyval.list) = NIL; - } -#line 18898 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 45: /* stmt: %empty */ + case 45: #line 578 "third_party/libpg_query/grammar/grammar.y" - { (yyval.node) = NULL; } -#line 18904 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 46: /* AlterTableStmt: ALTER TABLE relation_expr alter_table_cmds */ + case 46: #line 10 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(3) - (4)].range); + n->cmds = (yyvsp[(4) - (4)].list); n->relkind = PG_OBJECT_TABLE; n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 18917 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 47: /* AlterTableStmt: ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds */ + case 47: #line 19 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(5) - (6)].range); + n->cmds = (yyvsp[(6) - (6)].list); n->relkind = PG_OBJECT_TABLE; n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 18930 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 48: /* AlterTableStmt: ALTER INDEX qualified_name alter_table_cmds */ + case 48: #line 28 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(3) - (4)].range); + n->cmds = (yyvsp[(4) - (4)].list); n->relkind = PG_OBJECT_INDEX; n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 18943 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 49: /* AlterTableStmt: ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds */ + case 49: #line 37 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(5) - (6)].range); + n->cmds = (yyvsp[(6) - (6)].list); n->relkind = PG_OBJECT_INDEX; n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 18956 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 50: /* AlterTableStmt: ALTER SEQUENCE qualified_name alter_table_cmds */ + case 50: #line 46 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(3) - (4)].range); + n->cmds = (yyvsp[(4) - (4)].list); n->relkind = PG_OBJECT_SEQUENCE; n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 18969 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 51: /* AlterTableStmt: ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds */ + case 51: #line 55 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(5) - (6)].range); + n->cmds = (yyvsp[(6) - (6)].list); n->relkind = PG_OBJECT_SEQUENCE; n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 18982 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 52: /* AlterTableStmt: ALTER VIEW qualified_name alter_table_cmds */ + case 52: #line 64 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(3) - (4)].range); + n->cmds = (yyvsp[(4) - (4)].list); n->relkind = PG_OBJECT_VIEW; n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 18995 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 53: /* AlterTableStmt: ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds */ + case 53: #line 73 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableStmt *n = makeNode(PGAlterTableStmt); - n->relation = (yyvsp[-1].range); - n->cmds = (yyvsp[0].list); + n->relation = (yyvsp[(5) - (6)].range); + n->cmds = (yyvsp[(6) - (6)].list); n->relkind = PG_OBJECT_VIEW; n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19008 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 54: /* alter_identity_column_option_list: alter_identity_column_option */ + case 54: #line 86 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.list) = list_make1((yyvsp[0].defelt)); } -#line 19014 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 55: /* alter_identity_column_option_list: alter_identity_column_option_list alter_identity_column_option */ + case 55: #line 88 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } -#line 19020 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 56: /* alter_column_default: SET DEFAULT a_expr */ + case 56: #line 93 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.node) = (yyvsp[0].node); } -#line 19026 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(3) - (3)].node); ;} break; - case 57: /* alter_column_default: DROP DEFAULT */ + case 57: #line 94 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.node) = NULL; } -#line 19032 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 58: /* alter_identity_column_option: RESTART */ + case 58: #line 100 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[0])); - } -#line 19040 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[(1) - (1)])); + ;} break; - case 59: /* alter_identity_column_option: RESTART opt_with NumericOnly */ + case 59: #line 104 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = makeDefElem("restart", (PGNode *)(yyvsp[0].value), (yylsp[-2])); - } -#line 19048 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("restart", (PGNode *)(yyvsp[(3) - (3)].value), (yylsp[(1) - (3)])); + ;} break; - case 60: /* alter_identity_column_option: SET SeqOptElem */ + case 60: #line 108 "third_party/libpg_query/grammar/statements/alter_table.y" - { - if (strcmp((yyvsp[0].defelt)->defname, "as") == 0 || - strcmp((yyvsp[0].defelt)->defname, "restart") == 0 || - strcmp((yyvsp[0].defelt)->defname, "owned_by") == 0) + { + if (strcmp((yyvsp[(2) - (2)].defelt)->defname, "as") == 0 || + strcmp((yyvsp[(2) - (2)].defelt)->defname, "restart") == 0 || + strcmp((yyvsp[(2) - (2)].defelt)->defname, "owned_by") == 0) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), - errmsg("sequence option \"%s\" not supported here", (yyvsp[0].defelt)->defname), - parser_errposition((yylsp[0])))); - (yyval.defelt) = (yyvsp[0].defelt); - } -#line 19063 "third_party/libpg_query/grammar/grammar_out.cpp" + errmsg("sequence option \"%s\" not supported here", (yyvsp[(2) - (2)].defelt)->defname), + parser_errposition((yylsp[(2) - (2)])))); + (yyval.defelt) = (yyvsp[(2) - (2)].defelt); + ;} break; - case 61: /* alter_identity_column_option: SET GENERATED generated_when */ + case 61: #line 119 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = makeDefElem("generated", (PGNode *) makeInteger((yyvsp[0].ival)), (yylsp[-2])); - } -#line 19071 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("generated", (PGNode *) makeInteger((yyvsp[(3) - (3)].ival)), (yylsp[(1) - (3)])); + ;} break; - case 62: /* alter_generic_option_list: alter_generic_option_elem */ + case 62: #line 127 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.list) = list_make1((yyvsp[0].defelt)); - } -#line 19079 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); + ;} break; - case 63: /* alter_generic_option_list: alter_generic_option_list ',' alter_generic_option_elem */ + case 63: #line 131 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); - } -#line 19087 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); + ;} break; - case 64: /* alter_table_cmd: ADD_P columnDef */ + case 64: #line 140 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AddColumn; - n->def = (yyvsp[0].node); + n->def = (yyvsp[(2) - (2)].node); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19099 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 65: /* alter_table_cmd: ADD_P IF_P NOT EXISTS columnDef */ + case 65: #line 149 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AddColumn; - n->def = (yyvsp[0].node); + n->def = (yyvsp[(5) - (5)].node); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19111 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 66: /* alter_table_cmd: ADD_P COLUMN columnDef */ + case 66: #line 158 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AddColumn; - n->def = (yyvsp[0].node); + n->def = (yyvsp[(3) - (3)].node); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19123 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 67: /* alter_table_cmd: ADD_P COLUMN IF_P NOT EXISTS columnDef */ + case 67: #line 167 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AddColumn; - n->def = (yyvsp[0].node); + n->def = (yyvsp[(6) - (6)].node); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19135 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 68: /* alter_table_cmd: ALTER opt_column ColId alter_column_default */ + case 68: #line 176 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_ColumnDefault; - n->name = (yyvsp[-1].str); - n->def = (yyvsp[0].node); + n->name = (yyvsp[(3) - (4)].str); + n->def = (yyvsp[(4) - (4)].node); (yyval.node) = (PGNode *)n; - } -#line 19147 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 69: /* alter_table_cmd: ALTER opt_column ColId DROP NOT NULL_P */ + case 69: #line 185 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_DropNotNull; - n->name = (yyvsp[-3].str); + n->name = (yyvsp[(3) - (6)].str); (yyval.node) = (PGNode *)n; - } -#line 19158 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 70: /* alter_table_cmd: ALTER opt_column ColId SET NOT NULL_P */ + case 70: #line 193 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetNotNull; - n->name = (yyvsp[-3].str); + n->name = (yyvsp[(3) - (6)].str); (yyval.node) = (PGNode *)n; - } -#line 19169 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 71: /* alter_table_cmd: ALTER opt_column ColId SET STATISTICS SignedIconst */ + case 71: #line 201 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetStatistics; - n->name = (yyvsp[-3].str); - n->def = (PGNode *) makeInteger((yyvsp[0].ival)); + n->name = (yyvsp[(3) - (6)].str); + n->def = (PGNode *) makeInteger((yyvsp[(6) - (6)].ival)); (yyval.node) = (PGNode *)n; - } -#line 19181 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 72: /* alter_table_cmd: ALTER opt_column ColId SET reloptions */ + case 72: #line 210 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetOptions; - n->name = (yyvsp[-2].str); - n->def = (PGNode *) (yyvsp[0].list); + n->name = (yyvsp[(3) - (5)].str); + n->def = (PGNode *) (yyvsp[(5) - (5)].list); (yyval.node) = (PGNode *)n; - } -#line 19193 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 73: /* alter_table_cmd: ALTER opt_column ColId RESET reloptions */ + case 73: #line 219 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_ResetOptions; - n->name = (yyvsp[-2].str); - n->def = (PGNode *) (yyvsp[0].list); + n->name = (yyvsp[(3) - (5)].str); + n->def = (PGNode *) (yyvsp[(5) - (5)].list); (yyval.node) = (PGNode *)n; - } -#line 19205 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 74: /* alter_table_cmd: ALTER opt_column ColId SET STORAGE ColId */ + case 74: #line 228 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetStorage; - n->name = (yyvsp[-3].str); - n->def = (PGNode *) makeString((yyvsp[0].str)); + n->name = (yyvsp[(3) - (6)].str); + n->def = (PGNode *) makeString((yyvsp[(6) - (6)].str)); (yyval.node) = (PGNode *)n; - } -#line 19217 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 75: /* alter_table_cmd: ALTER opt_column ColId ADD_P GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ + case 75: #line 237 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); PGConstraint *c = makeNode(PGConstraint); c->contype = PG_CONSTR_IDENTITY; - c->generated_when = (yyvsp[-3].ival); - c->options = (yyvsp[0].list); - c->location = (yylsp[-4]); + c->generated_when = (yyvsp[(6) - (9)].ival); + c->options = (yyvsp[(9) - (9)].list); + c->location = (yylsp[(5) - (9)]); n->subtype = PG_AT_AddIdentity; - n->name = (yyvsp[-6].str); + n->name = (yyvsp[(3) - (9)].str); n->def = (PGNode *) c; (yyval.node) = (PGNode *)n; - } -#line 19237 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 76: /* alter_table_cmd: ALTER opt_column ColId alter_identity_column_option_list */ + case 76: #line 254 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetIdentity; - n->name = (yyvsp[-1].str); - n->def = (PGNode *) (yyvsp[0].list); + n->name = (yyvsp[(3) - (4)].str); + n->def = (PGNode *) (yyvsp[(4) - (4)].list); (yyval.node) = (PGNode *)n; - } -#line 19249 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 77: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P */ + case 77: #line 263 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = AT_DropIdentity; - n->name = (yyvsp[-2].str); + n->name = (yyvsp[(3) - (5)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19261 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 78: /* alter_table_cmd: ALTER opt_column ColId DROP IDENTITY_P IF_P EXISTS */ + case 78: #line 272 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = AT_DropIdentity; - n->name = (yyvsp[-4].str); + n->name = (yyvsp[(3) - (7)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19273 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 79: /* alter_table_cmd: DROP opt_column IF_P EXISTS ColId opt_drop_behavior */ + case 79: #line 281 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_DropColumn; - n->name = (yyvsp[-1].str); - n->behavior = (yyvsp[0].dbehavior); + n->name = (yyvsp[(5) - (6)].str); + n->behavior = (yyvsp[(6) - (6)].dbehavior); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19286 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 80: /* alter_table_cmd: DROP opt_column ColId opt_drop_behavior */ + case 80: #line 291 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_DropColumn; - n->name = (yyvsp[-1].str); - n->behavior = (yyvsp[0].dbehavior); + n->name = (yyvsp[(3) - (4)].str); + n->behavior = (yyvsp[(4) - (4)].dbehavior); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19299 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 81: /* alter_table_cmd: ALTER opt_column ColId opt_set_data TYPE_P Typename opt_collate_clause alter_using */ + case 81: #line 304 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); PGColumnDef *def = makeNode(PGColumnDef); n->subtype = PG_AT_AlterColumnType; - n->name = (yyvsp[-5].str); + n->name = (yyvsp[(3) - (8)].str); n->def = (PGNode *) def; /* We only use these fields of the PGColumnDef node */ - def->typeName = (yyvsp[-2].typnam); - def->collClause = (PGCollateClause *) (yyvsp[-1].node); - def->raw_default = (yyvsp[0].node); - def->location = (yylsp[-5]); + def->typeName = (yyvsp[(6) - (8)].typnam); + def->collClause = (PGCollateClause *) (yyvsp[(7) - (8)].node); + def->raw_default = (yyvsp[(8) - (8)].node); + def->location = (yylsp[(3) - (8)]); (yyval.node) = (PGNode *)n; - } -#line 19317 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 82: /* alter_table_cmd: ALTER opt_column ColId alter_generic_options */ + case 82: #line 319 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AlterColumnGenericOptions; - n->name = (yyvsp[-1].str); - n->def = (PGNode *) (yyvsp[0].list); + n->name = (yyvsp[(3) - (4)].str); + n->def = (PGNode *) (yyvsp[(4) - (4)].list); (yyval.node) = (PGNode *)n; - } -#line 19329 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 83: /* alter_table_cmd: ADD_P TableConstraint */ + case 83: #line 328 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_AddConstraint; - n->def = (yyvsp[0].node); + n->def = (yyvsp[(2) - (2)].node); (yyval.node) = (PGNode *)n; - } -#line 19340 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 84: /* alter_table_cmd: ALTER CONSTRAINT name ConstraintAttributeSpec */ + case 84: #line 336 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); PGConstraint *c = makeNode(PGConstraint); n->subtype = PG_AT_AlterConstraint; n->def = (PGNode *) c; c->contype = PG_CONSTR_FOREIGN; /* others not supported, yet */ - c->conname = (yyvsp[-1].str); - processCASbits((yyvsp[0].ival), (yylsp[0]), "ALTER CONSTRAINT statement", + c->conname = (yyvsp[(3) - (4)].str); + processCASbits((yyvsp[(4) - (4)].ival), (yylsp[(4) - (4)]), "ALTER CONSTRAINT statement", &c->deferrable, &c->initdeferred, NULL, NULL, yyscanner); (yyval.node) = (PGNode *)n; - } -#line 19358 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 85: /* alter_table_cmd: VALIDATE CONSTRAINT name */ + case 85: #line 351 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_ValidateConstraint; - n->name = (yyvsp[0].str); + n->name = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *)n; - } -#line 19369 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 86: /* alter_table_cmd: DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior */ + case 86: #line 359 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_DropConstraint; - n->name = (yyvsp[-1].str); - n->behavior = (yyvsp[0].dbehavior); + n->name = (yyvsp[(5) - (6)].str); + n->behavior = (yyvsp[(6) - (6)].dbehavior); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19382 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 87: /* alter_table_cmd: DROP CONSTRAINT name opt_drop_behavior */ + case 87: #line 369 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_DropConstraint; - n->name = (yyvsp[-1].str); - n->behavior = (yyvsp[0].dbehavior); + n->name = (yyvsp[(3) - (4)].str); + n->behavior = (yyvsp[(4) - (4)].dbehavior); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19395 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 88: /* alter_table_cmd: SET LOGGED */ + case 88: #line 379 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetLogged; (yyval.node) = (PGNode *)n; - } -#line 19405 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 89: /* alter_table_cmd: SET UNLOGGED */ + case 89: #line 386 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetUnLogged; (yyval.node) = (PGNode *)n; - } -#line 19415 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 90: /* alter_table_cmd: SET reloptions */ + case 90: #line 393 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_SetRelOptions; - n->def = (PGNode *)(yyvsp[0].list); + n->def = (PGNode *)(yyvsp[(2) - (2)].list); (yyval.node) = (PGNode *)n; - } -#line 19426 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 91: /* alter_table_cmd: RESET reloptions */ + case 91: #line 401 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_ResetRelOptions; - n->def = (PGNode *)(yyvsp[0].list); + n->def = (PGNode *)(yyvsp[(2) - (2)].list); (yyval.node) = (PGNode *)n; - } -#line 19437 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 92: /* alter_table_cmd: alter_generic_options */ + case 92: #line 408 "third_party/libpg_query/grammar/statements/alter_table.y" - { + { PGAlterTableCmd *n = makeNode(PGAlterTableCmd); n->subtype = PG_AT_GenericOptions; - n->def = (PGNode *)(yyvsp[0].list); + n->def = (PGNode *)(yyvsp[(1) - (1)].list); (yyval.node) = (PGNode *) n; - } -#line 19448 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 93: /* alter_using: USING a_expr */ + case 93: #line 418 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.node) = (yyvsp[0].node); } -#line 19454 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 94: /* alter_using: %empty */ + case 94: #line 419 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.node) = NULL; } -#line 19460 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 95: /* alter_generic_option_elem: generic_option_elem */ + case 95: #line 425 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = (yyvsp[0].defelt); - } -#line 19468 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = (yyvsp[(1) - (1)].defelt); + ;} break; - case 96: /* alter_generic_option_elem: SET generic_option_elem */ + case 96: #line 429 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = (yyvsp[0].defelt); + { + (yyval.defelt) = (yyvsp[(2) - (2)].defelt); (yyval.defelt)->defaction = PG_DEFELEM_SET; - } -#line 19477 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 97: /* alter_generic_option_elem: ADD_P generic_option_elem */ + case 97: #line 434 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = (yyvsp[0].defelt); + { + (yyval.defelt) = (yyvsp[(2) - (2)].defelt); (yyval.defelt)->defaction = PG_DEFELEM_ADD; - } -#line 19486 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 98: /* alter_generic_option_elem: DROP generic_option_name */ + case 98: #line 439 "third_party/libpg_query/grammar/statements/alter_table.y" - { - (yyval.defelt) = makeDefElemExtended(NULL, (yyvsp[0].str), NULL, DEFELEM_DROP, (yylsp[0])); - } -#line 19494 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElemExtended(NULL, (yyvsp[(2) - (2)].str), NULL, DEFELEM_DROP, (yylsp[(2) - (2)])); + ;} break; - case 99: /* alter_table_cmds: alter_table_cmd */ + case 99: #line 446 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 19500 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 100: /* alter_table_cmds: alter_table_cmds ',' alter_table_cmd */ + case 100: #line 447 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 19506 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 101: /* alter_generic_options: OPTIONS '(' alter_generic_option_list ')' */ + case 101: #line 452 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 19512 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 102: /* opt_set_data: SET DATA_P */ + case 102: #line 456 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.ival) = 1; } -#line 19518 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 1; ;} break; - case 103: /* opt_set_data: SET */ + case 103: #line 457 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.ival) = 0; } -#line 19524 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 0; ;} break; - case 104: /* opt_set_data: %empty */ + case 104: #line 458 "third_party/libpg_query/grammar/statements/alter_table.y" - { (yyval.ival) = 0; } -#line 19530 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 0; ;} break; - case 105: /* DeallocateStmt: DEALLOCATE name */ + case 105: #line 8 "third_party/libpg_query/grammar/statements/deallocate.y" - { + { PGDeallocateStmt *n = makeNode(PGDeallocateStmt); - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); (yyval.node) = (PGNode *) n; - } -#line 19540 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 106: /* DeallocateStmt: DEALLOCATE PREPARE name */ + case 106: #line 14 "third_party/libpg_query/grammar/statements/deallocate.y" - { + { PGDeallocateStmt *n = makeNode(PGDeallocateStmt); - n->name = (yyvsp[0].str); + n->name = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *) n; - } -#line 19550 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 107: /* DeallocateStmt: DEALLOCATE ALL */ + case 107: #line 20 "third_party/libpg_query/grammar/statements/deallocate.y" - { + { PGDeallocateStmt *n = makeNode(PGDeallocateStmt); n->name = NULL; (yyval.node) = (PGNode *) n; - } -#line 19560 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 108: /* DeallocateStmt: DEALLOCATE PREPARE ALL */ + case 108: #line 26 "third_party/libpg_query/grammar/statements/deallocate.y" - { + { PGDeallocateStmt *n = makeNode(PGDeallocateStmt); n->name = NULL; (yyval.node) = (PGNode *) n; - } -#line 19570 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 109: /* qualified_name: ColIdOrString */ + case 109: #line 10 "third_party/libpg_query/grammar/statements/common.y" - { - (yyval.range) = makeRangeVar(NULL, (yyvsp[0].str), (yylsp[0])); - } -#line 19578 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.range) = makeRangeVar(NULL, (yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 110: /* qualified_name: ColId indirection */ + case 110: #line 14 "third_party/libpg_query/grammar/statements/common.y" - { - check_qualified_name((yyvsp[0].list), yyscanner); - (yyval.range) = makeRangeVar(NULL, NULL, (yylsp[-1])); - switch (list_length((yyvsp[0].list))) + { + check_qualified_name((yyvsp[(2) - (2)].list), yyscanner); + (yyval.range) = makeRangeVar(NULL, NULL, (yylsp[(1) - (2)])); + switch (list_length((yyvsp[(2) - (2)].list))) { case 1: (yyval.range)->catalogname = NULL; - (yyval.range)->schemaname = (yyvsp[-1].str); - (yyval.range)->relname = strVal(linitial((yyvsp[0].list))); + (yyval.range)->schemaname = (yyvsp[(1) - (2)].str); + (yyval.range)->relname = strVal(linitial((yyvsp[(2) - (2)].list))); break; case 2: - (yyval.range)->catalogname = (yyvsp[-1].str); - (yyval.range)->schemaname = strVal(linitial((yyvsp[0].list))); - (yyval.range)->relname = strVal(lsecond((yyvsp[0].list))); + (yyval.range)->catalogname = (yyvsp[(1) - (2)].str); + (yyval.range)->schemaname = strVal(linitial((yyvsp[(2) - (2)].list))); + (yyval.range)->relname = strVal(lsecond((yyvsp[(2) - (2)].list))); break; case 3: default: ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("improper qualified name (too many dotted names): %s", - NameListToString(lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)))), - parser_errposition((yylsp[-1])))); + NameListToString(lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)))), + parser_errposition((yylsp[(1) - (2)])))); break; } - } -#line 19608 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 111: /* ColId: IDENT */ + case 111: #line 44 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19614 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 112: /* ColId: unreserved_keyword */ + case 112: #line 45 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 19620 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 113: /* ColId: col_name_keyword */ + case 113: #line 46 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 19626 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 114: /* ColIdOrString: ColId */ + case 114: #line 50 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19632 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 115: /* ColIdOrString: SCONST */ + case 115: #line 51 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19638 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 116: /* Sconst: SCONST */ + case 116: #line 55 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19644 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 117: /* indirection: indirection_el */ + case 117: #line 59 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 19650 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 118: /* indirection: indirection indirection_el */ + case 118: #line 60 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 19656 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 119: /* indirection_el: '.' attr_name */ + case 119: #line 65 "third_party/libpg_query/grammar/statements/common.y" - { - (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); - } -#line 19664 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = (PGNode *) makeString((yyvsp[(2) - (2)].str)); + ;} break; - case 120: /* attr_name: ColLabel */ + case 120: #line 70 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19670 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 121: /* ColLabel: IDENT */ + case 121: #line 75 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = (yyvsp[0].str); } -#line 19676 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 122: /* ColLabel: other_keyword */ + case 122: #line 76 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 19682 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 123: /* ColLabel: unreserved_keyword */ + case 123: #line 77 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 19688 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 124: /* ColLabel: reserved_keyword */ + case 124: #line 78 "third_party/libpg_query/grammar/statements/common.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 19694 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 125: /* RenameStmt: ALTER SCHEMA name RENAME TO name */ + case 125: #line 7 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_SCHEMA; - n->subname = (yyvsp[-3].str); - n->newname = (yyvsp[0].str); + n->subname = (yyvsp[(3) - (6)].str); + n->newname = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19707 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 126: /* RenameStmt: ALTER TABLE relation_expr RENAME TO name */ + case 126: #line 16 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(3) - (6)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19721 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 127: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME TO name */ + case 127: #line 26 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(5) - (8)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19735 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 128: /* RenameStmt: ALTER SEQUENCE qualified_name RENAME TO name */ + case 128: #line 36 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_SEQUENCE; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(3) - (6)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19749 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 129: /* RenameStmt: ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name */ + case 129: #line 46 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_SEQUENCE; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(5) - (8)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19763 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 130: /* RenameStmt: ALTER VIEW qualified_name RENAME TO name */ + case 130: #line 56 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_VIEW; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(3) - (6)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19777 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 131: /* RenameStmt: ALTER VIEW IF_P EXISTS qualified_name RENAME TO name */ + case 131: #line 66 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_VIEW; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(5) - (8)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19791 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 132: /* RenameStmt: ALTER INDEX qualified_name RENAME TO name */ + case 132: #line 76 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_INDEX; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(3) - (6)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19805 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 133: /* RenameStmt: ALTER INDEX IF_P EXISTS qualified_name RENAME TO name */ + case 133: #line 86 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_INDEX; - n->relation = (yyvsp[-3].range); + n->relation = (yyvsp[(5) - (8)].range); n->subname = NULL; - n->newname = (yyvsp[0].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19819 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 134: /* RenameStmt: ALTER TABLE relation_expr RENAME opt_column name TO name */ + case 134: #line 96 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_COLUMN; n->relationType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-5].range); - n->subname = (yyvsp[-2].str); - n->newname = (yyvsp[0].str); + n->relation = (yyvsp[(3) - (8)].range); + n->subname = (yyvsp[(6) - (8)].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19834 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 135: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name */ + case 135: #line 107 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_COLUMN; n->relationType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-5].range); - n->subname = (yyvsp[-2].str); - n->newname = (yyvsp[0].str); + n->relation = (yyvsp[(5) - (10)].range); + n->subname = (yyvsp[(8) - (10)].str); + n->newname = (yyvsp[(10) - (10)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19849 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 136: /* RenameStmt: ALTER TABLE relation_expr RENAME CONSTRAINT name TO name */ + case 136: #line 118 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_TABCONSTRAINT; - n->relation = (yyvsp[-5].range); - n->subname = (yyvsp[-2].str); - n->newname = (yyvsp[0].str); + n->relation = (yyvsp[(3) - (8)].range); + n->subname = (yyvsp[(6) - (8)].str); + n->newname = (yyvsp[(8) - (8)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 19863 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 137: /* RenameStmt: ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name */ + case 137: #line 128 "third_party/libpg_query/grammar/statements/rename.y" - { + { PGRenameStmt *n = makeNode(PGRenameStmt); n->renameType = PG_OBJECT_TABCONSTRAINT; - n->relation = (yyvsp[-5].range); - n->subname = (yyvsp[-2].str); - n->newname = (yyvsp[0].str); + n->relation = (yyvsp[(5) - (10)].range); + n->subname = (yyvsp[(8) - (10)].str); + n->newname = (yyvsp[(10) - (10)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 19877 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 138: /* opt_column: COLUMN */ + case 138: #line 140 "third_party/libpg_query/grammar/statements/rename.y" - { (yyval.ival) = COLUMN; } -#line 19883 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = COLUMN; ;} break; - case 139: /* opt_column: %empty */ + case 139: #line 141 "third_party/libpg_query/grammar/statements/rename.y" - { (yyval.ival) = 0; } -#line 19889 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 0; ;} break; - case 140: /* InsertStmt: opt_with_clause INSERT opt_or_action INTO insert_target opt_by_name_or_position insert_rest opt_on_conflict returning_clause */ + case 140: #line 11 "third_party/libpg_query/grammar/statements/insert.y" - { - (yyvsp[-2].istmt)->relation = (yyvsp[-4].range); - (yyvsp[-2].istmt)->onConflictAlias = (yyvsp[-6].onconflictshorthand); - (yyvsp[-2].istmt)->onConflictClause = (yyvsp[-1].onconflict); - (yyvsp[-2].istmt)->returningList = (yyvsp[0].list); - (yyvsp[-2].istmt)->withClause = (yyvsp[-8].with); - (yyvsp[-2].istmt)->insert_column_order = (yyvsp[-3].bynameorposition); - (yyval.node) = (PGNode *) (yyvsp[-2].istmt); - } -#line 19903 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 141: /* insert_rest: SelectStmt */ + { + (yyvsp[(7) - (9)].istmt)->relation = (yyvsp[(5) - (9)].range); + (yyvsp[(7) - (9)].istmt)->onConflictAlias = (yyvsp[(3) - (9)].onconflictshorthand); + (yyvsp[(7) - (9)].istmt)->onConflictClause = (yyvsp[(8) - (9)].onconflict); + (yyvsp[(7) - (9)].istmt)->returningList = (yyvsp[(9) - (9)].list); + (yyvsp[(7) - (9)].istmt)->withClause = (yyvsp[(1) - (9)].with); + (yyvsp[(7) - (9)].istmt)->insert_column_order = (yyvsp[(6) - (9)].bynameorposition); + (yyval.node) = (PGNode *) (yyvsp[(7) - (9)].istmt); + ;} + break; + + case 141: #line 24 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.istmt) = makeNode(PGInsertStmt); (yyval.istmt)->cols = NIL; - (yyval.istmt)->selectStmt = (yyvsp[0].node); - } -#line 19913 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.istmt)->selectStmt = (yyvsp[(1) - (1)].node); + ;} break; - case 142: /* insert_rest: OVERRIDING override_kind VALUE_P SelectStmt */ + case 142: #line 30 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.istmt) = makeNode(PGInsertStmt); (yyval.istmt)->cols = NIL; - (yyval.istmt)->override = (yyvsp[-2].override); - (yyval.istmt)->selectStmt = (yyvsp[0].node); - } -#line 19924 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.istmt)->override = (yyvsp[(2) - (4)].override); + (yyval.istmt)->selectStmt = (yyvsp[(4) - (4)].node); + ;} break; - case 143: /* insert_rest: '(' insert_column_list ')' SelectStmt */ + case 143: #line 37 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.istmt) = makeNode(PGInsertStmt); - (yyval.istmt)->cols = (yyvsp[-2].list); - (yyval.istmt)->selectStmt = (yyvsp[0].node); - } -#line 19934 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.istmt)->cols = (yyvsp[(2) - (4)].list); + (yyval.istmt)->selectStmt = (yyvsp[(4) - (4)].node); + ;} break; - case 144: /* insert_rest: '(' insert_column_list ')' OVERRIDING override_kind VALUE_P SelectStmt */ + case 144: #line 43 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.istmt) = makeNode(PGInsertStmt); - (yyval.istmt)->cols = (yyvsp[-5].list); - (yyval.istmt)->override = (yyvsp[-2].override); - (yyval.istmt)->selectStmt = (yyvsp[0].node); - } -#line 19945 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.istmt)->cols = (yyvsp[(2) - (7)].list); + (yyval.istmt)->override = (yyvsp[(5) - (7)].override); + (yyval.istmt)->selectStmt = (yyvsp[(7) - (7)].node); + ;} break; - case 145: /* insert_rest: DEFAULT VALUES */ + case 145: #line 50 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.istmt) = makeNode(PGInsertStmt); (yyval.istmt)->cols = NIL; (yyval.istmt)->selectStmt = NULL; - } -#line 19955 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 146: /* insert_target: qualified_name */ + case 146: #line 60 "third_party/libpg_query/grammar/statements/insert.y" - { - (yyval.range) = (yyvsp[0].range); - } -#line 19963 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.range) = (yyvsp[(1) - (1)].range); + ;} break; - case 147: /* insert_target: qualified_name AS ColId */ + case 147: #line 64 "third_party/libpg_query/grammar/statements/insert.y" - { - (yyvsp[-2].range)->alias = makeAlias((yyvsp[0].str), NIL); - (yyval.range) = (yyvsp[-2].range); - } -#line 19972 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(1) - (3)].range)->alias = makeAlias((yyvsp[(3) - (3)].str), NIL); + (yyval.range) = (yyvsp[(1) - (3)].range); + ;} break; - case 148: /* opt_by_name_or_position: BY NAME_P */ + case 148: #line 71 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.bynameorposition) = PG_INSERT_BY_NAME; } -#line 19978 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.bynameorposition) = PG_INSERT_BY_NAME; ;} break; - case 149: /* opt_by_name_or_position: BY POSITION */ + case 149: #line 72 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.bynameorposition) = PG_INSERT_BY_POSITION; } -#line 19984 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.bynameorposition) = PG_INSERT_BY_POSITION; ;} break; - case 150: /* opt_by_name_or_position: %empty */ + case 150: #line 73 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.bynameorposition) = PG_INSERT_BY_POSITION; } -#line 19990 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.bynameorposition) = PG_INSERT_BY_POSITION; ;} break; - case 151: /* opt_conf_expr: '(' index_params ')' where_clause */ + case 151: #line 78 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.infer) = makeNode(PGInferClause); - (yyval.infer)->indexElems = (yyvsp[-2].list); - (yyval.infer)->whereClause = (yyvsp[0].node); + (yyval.infer)->indexElems = (yyvsp[(2) - (4)].list); + (yyval.infer)->whereClause = (yyvsp[(4) - (4)].node); (yyval.infer)->conname = NULL; - (yyval.infer)->location = (yylsp[-3]); - } -#line 20002 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.infer)->location = (yylsp[(1) - (4)]); + ;} break; - case 152: /* opt_conf_expr: ON CONSTRAINT name */ + case 152: #line 87 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.infer) = makeNode(PGInferClause); (yyval.infer)->indexElems = NIL; (yyval.infer)->whereClause = NULL; - (yyval.infer)->conname = (yyvsp[0].str); - (yyval.infer)->location = (yylsp[-2]); - } -#line 20014 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.infer)->conname = (yyvsp[(3) - (3)].str); + (yyval.infer)->location = (yylsp[(1) - (3)]); + ;} break; - case 153: /* opt_conf_expr: %empty */ + case 153: #line 95 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.infer) = NULL; - } -#line 20022 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 154: /* opt_with_clause: with_clause */ + case 154: #line 102 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.with) = (yyvsp[0].with); } -#line 20028 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.with) = (yyvsp[(1) - (1)].with); ;} break; - case 155: /* opt_with_clause: %empty */ + case 155: #line 103 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.with) = NULL; } -#line 20034 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.with) = NULL; ;} break; - case 156: /* insert_column_item: ColId opt_indirection */ + case 156: #line 109 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.target) = makeNode(PGResTarget); - (yyval.target)->name = (yyvsp[-1].str); - (yyval.target)->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.target)->name = (yyvsp[(1) - (2)].str); + (yyval.target)->indirection = check_indirection((yyvsp[(2) - (2)].list), yyscanner); (yyval.target)->val = NULL; - (yyval.target)->location = (yylsp[-1]); - } -#line 20046 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.target)->location = (yylsp[(1) - (2)]); + ;} break; - case 157: /* set_clause: set_target '=' a_expr */ + case 157: #line 121 "third_party/libpg_query/grammar/statements/insert.y" - { - (yyvsp[-2].target)->val = (PGNode *) (yyvsp[0].node); - (yyval.list) = list_make1((yyvsp[-2].target)); - } -#line 20055 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(1) - (3)].target)->val = (PGNode *) (yyvsp[(3) - (3)].node); + (yyval.list) = list_make1((yyvsp[(1) - (3)].target)); + ;} break; - case 158: /* set_clause: '(' set_target_list ')' '=' a_expr */ + case 158: #line 126 "third_party/libpg_query/grammar/statements/insert.y" - { - int ncolumns = list_length((yyvsp[-3].list)); + { + int ncolumns = list_length((yyvsp[(2) - (5)].list)); int i = 1; PGListCell *col_cell; /* Create a PGMultiAssignRef source for each target */ - foreach(col_cell, (yyvsp[-3].list)) + foreach(col_cell, (yyvsp[(2) - (5)].list)) { PGResTarget *res_col = (PGResTarget *) lfirst(col_cell); PGMultiAssignRef *r = makeNode(PGMultiAssignRef); - r->source = (PGNode *) (yyvsp[0].node); + r->source = (PGNode *) (yyvsp[(5) - (5)].node); r->colno = i; r->ncolumns = ncolumns; res_col->val = (PGNode *) r; i++; } - (yyval.list) = (yyvsp[-3].list); - } -#line 20080 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.list) = (yyvsp[(2) - (5)].list); + ;} break; - case 159: /* opt_or_action: OR REPLACE */ + case 159: #line 151 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflictshorthand) = PG_ONCONFLICT_ALIAS_REPLACE; - } -#line 20088 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 160: /* opt_or_action: OR IGNORE_P */ + case 160: #line 156 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflictshorthand) = PG_ONCONFLICT_ALIAS_IGNORE; - } -#line 20096 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 161: /* opt_or_action: %empty */ + case 161: #line 160 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflictshorthand) = PG_ONCONFLICT_ALIAS_NONE; - } -#line 20104 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 162: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list_opt_comma where_clause */ + case 162: #line 167 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflict) = makeNode(PGOnConflictClause); (yyval.onconflict)->action = PG_ONCONFLICT_UPDATE; - (yyval.onconflict)->infer = (yyvsp[-5].infer); - (yyval.onconflict)->targetList = (yyvsp[-1].list); - (yyval.onconflict)->whereClause = (yyvsp[0].node); - (yyval.onconflict)->location = (yylsp[-7]); - } -#line 20117 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.onconflict)->infer = (yyvsp[(3) - (8)].infer); + (yyval.onconflict)->targetList = (yyvsp[(7) - (8)].list); + (yyval.onconflict)->whereClause = (yyvsp[(8) - (8)].node); + (yyval.onconflict)->location = (yylsp[(1) - (8)]); + ;} break; - case 163: /* opt_on_conflict: ON CONFLICT opt_conf_expr DO NOTHING */ + case 163: #line 177 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflict) = makeNode(PGOnConflictClause); (yyval.onconflict)->action = PG_ONCONFLICT_NOTHING; - (yyval.onconflict)->infer = (yyvsp[-2].infer); + (yyval.onconflict)->infer = (yyvsp[(3) - (5)].infer); (yyval.onconflict)->targetList = NIL; (yyval.onconflict)->whereClause = NULL; - (yyval.onconflict)->location = (yylsp[-4]); - } -#line 20130 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.onconflict)->location = (yylsp[(1) - (5)]); + ;} break; - case 164: /* opt_on_conflict: %empty */ + case 164: #line 186 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.onconflict) = NULL; - } -#line 20138 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 165: /* index_elem: ColId opt_collate opt_class opt_asc_desc opt_nulls_order */ + case 165: #line 193 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.ielem) = makeNode(PGIndexElem); - (yyval.ielem)->name = (yyvsp[-4].str); + (yyval.ielem)->name = (yyvsp[(1) - (5)].str); (yyval.ielem)->expr = NULL; (yyval.ielem)->indexcolname = NULL; - (yyval.ielem)->collation = (yyvsp[-3].list); - (yyval.ielem)->opclass = (yyvsp[-2].list); - (yyval.ielem)->ordering = (yyvsp[-1].sortorder); - (yyval.ielem)->nulls_ordering = (yyvsp[0].nullorder); - } -#line 20153 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.ielem)->collation = (yyvsp[(2) - (5)].list); + (yyval.ielem)->opclass = (yyvsp[(3) - (5)].list); + (yyval.ielem)->ordering = (yyvsp[(4) - (5)].sortorder); + (yyval.ielem)->nulls_ordering = (yyvsp[(5) - (5)].nullorder); + ;} break; - case 166: /* index_elem: func_expr_windowless opt_collate opt_class opt_asc_desc opt_nulls_order */ + case 166: #line 204 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.ielem) = makeNode(PGIndexElem); (yyval.ielem)->name = NULL; - (yyval.ielem)->expr = (yyvsp[-4].node); + (yyval.ielem)->expr = (yyvsp[(1) - (5)].node); (yyval.ielem)->indexcolname = NULL; - (yyval.ielem)->collation = (yyvsp[-3].list); - (yyval.ielem)->opclass = (yyvsp[-2].list); - (yyval.ielem)->ordering = (yyvsp[-1].sortorder); - (yyval.ielem)->nulls_ordering = (yyvsp[0].nullorder); - } -#line 20168 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.ielem)->collation = (yyvsp[(2) - (5)].list); + (yyval.ielem)->opclass = (yyvsp[(3) - (5)].list); + (yyval.ielem)->ordering = (yyvsp[(4) - (5)].sortorder); + (yyval.ielem)->nulls_ordering = (yyvsp[(5) - (5)].nullorder); + ;} break; - case 167: /* index_elem: '(' a_expr ')' opt_collate opt_class opt_asc_desc opt_nulls_order */ + case 167: #line 215 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.ielem) = makeNode(PGIndexElem); (yyval.ielem)->name = NULL; - (yyval.ielem)->expr = (yyvsp[-5].node); + (yyval.ielem)->expr = (yyvsp[(2) - (7)].node); (yyval.ielem)->indexcolname = NULL; - (yyval.ielem)->collation = (yyvsp[-3].list); - (yyval.ielem)->opclass = (yyvsp[-2].list); - (yyval.ielem)->ordering = (yyvsp[-1].sortorder); - (yyval.ielem)->nulls_ordering = (yyvsp[0].nullorder); - } -#line 20183 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.ielem)->collation = (yyvsp[(4) - (7)].list); + (yyval.ielem)->opclass = (yyvsp[(5) - (7)].list); + (yyval.ielem)->ordering = (yyvsp[(6) - (7)].sortorder); + (yyval.ielem)->nulls_ordering = (yyvsp[(7) - (7)].nullorder); + ;} break; - case 168: /* returning_clause: RETURNING target_list */ + case 168: #line 229 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20189 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 169: /* returning_clause: %empty */ + case 169: #line 230 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = NIL; } -#line 20195 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 170: /* override_kind: USER */ + case 170: #line 236 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.override) = PG_OVERRIDING_USER_VALUE; } -#line 20201 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.override) = PG_OVERRIDING_USER_VALUE; ;} break; - case 171: /* override_kind: SYSTEM_P */ + case 171: #line 237 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.override) = OVERRIDING_SYSTEM_VALUE; } -#line 20207 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.override) = OVERRIDING_SYSTEM_VALUE; ;} break; - case 172: /* set_target_list: set_target */ + case 172: #line 242 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = list_make1((yyvsp[0].target)); } -#line 20213 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 173: /* set_target_list: set_target_list ',' set_target */ + case 173: #line 243 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = lappend((yyvsp[-2].list),(yyvsp[0].target)); } -#line 20219 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].target)); ;} break; - case 174: /* opt_collate: COLLATE any_name */ + case 174: #line 249 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20225 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 175: /* opt_collate: %empty */ + case 175: #line 250 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = NIL; } -#line 20231 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 176: /* opt_class: any_name */ + case 176: #line 254 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20237 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 177: /* opt_class: %empty */ + case 177: #line 255 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = NIL; } -#line 20243 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 178: /* insert_column_list: insert_column_item */ + case 178: #line 261 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = list_make1((yyvsp[0].target)); } -#line 20249 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 179: /* insert_column_list: insert_column_list ',' insert_column_item */ + case 179: #line 263 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } -#line 20255 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 180: /* set_clause_list: set_clause */ + case 180: #line 268 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20261 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 181: /* set_clause_list: set_clause_list ',' set_clause */ + case 181: #line 269 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = list_concat((yyvsp[-2].list),(yyvsp[0].list)); } -#line 20267 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_concat((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].list)); ;} break; - case 182: /* set_clause_list_opt_comma: set_clause_list */ + case 182: #line 273 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20273 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 183: /* set_clause_list_opt_comma: set_clause_list ',' */ + case 183: #line 274 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 20279 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 184: /* index_params: index_elem */ + case 184: #line 277 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = list_make1((yyvsp[0].ielem)); } -#line 20285 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].ielem)); ;} break; - case 185: /* index_params: index_params ',' index_elem */ + case 185: #line 278 "third_party/libpg_query/grammar/statements/insert.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].ielem)); } -#line 20291 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].ielem)); ;} break; - case 186: /* set_target: ColId opt_indirection */ + case 186: #line 284 "third_party/libpg_query/grammar/statements/insert.y" - { + { (yyval.target) = makeNode(PGResTarget); - (yyval.target)->name = (yyvsp[-1].str); - (yyval.target)->indirection = check_indirection((yyvsp[0].list), yyscanner); + (yyval.target)->name = (yyvsp[(1) - (2)].str); + (yyval.target)->indirection = check_indirection((yyvsp[(2) - (2)].list), yyscanner); (yyval.target)->val = NULL; /* upper production sets this */ - (yyval.target)->location = (yylsp[-1]); - } -#line 20303 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.target)->location = (yylsp[(1) - (2)]); + ;} break; - case 187: /* CreateTypeStmt: CREATE_P TYPE_P qualified_name AS ENUM_P select_with_parens */ + case 187: #line 8 "third_party/libpg_query/grammar/statements/create_type.y" - { + { PGCreateTypeStmt *n = makeNode(PGCreateTypeStmt); - n->typeName = (yyvsp[-3].range); + n->typeName = (yyvsp[(3) - (6)].range); n->kind = PG_NEWTYPE_ENUM; - n->query = (yyvsp[0].node); + n->query = (yyvsp[(6) - (6)].node); n->vals = NULL; (yyval.node) = (PGNode *)n; - } -#line 20316 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 188: /* CreateTypeStmt: CREATE_P TYPE_P qualified_name AS ENUM_P '(' opt_enum_val_list ')' */ + case 188: #line 17 "third_party/libpg_query/grammar/statements/create_type.y" - { + { PGCreateTypeStmt *n = makeNode(PGCreateTypeStmt); - n->typeName = (yyvsp[-5].range); + n->typeName = (yyvsp[(3) - (8)].range); n->kind = PG_NEWTYPE_ENUM; - n->vals = (yyvsp[-1].list); + n->vals = (yyvsp[(7) - (8)].list); n->query = NULL; (yyval.node) = (PGNode *)n; - } -#line 20329 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 189: /* CreateTypeStmt: CREATE_P TYPE_P qualified_name AS Typename */ + case 189: #line 26 "third_party/libpg_query/grammar/statements/create_type.y" - { + { PGCreateTypeStmt *n = makeNode(PGCreateTypeStmt); - n->typeName = (yyvsp[-2].range); + n->typeName = (yyvsp[(3) - (5)].range); n->query = NULL; - auto name = std::string(reinterpret_cast((yyvsp[0].typnam)->names->tail->data.ptr_value)->val.str); + auto name = std::string(reinterpret_cast((yyvsp[(5) - (5)].typnam)->names->tail->data.ptr_value)->val.str); if (name == "enum") { n->kind = PG_NEWTYPE_ENUM; - n->vals = (yyvsp[0].typnam)->typmods; + n->vals = (yyvsp[(5) - (5)].typnam)->typmods; } else { n->kind = PG_NEWTYPE_ALIAS; - n->ofType = (yyvsp[0].typnam); + n->ofType = (yyvsp[(5) - (5)].typnam); } (yyval.node) = (PGNode *)n; - } -#line 20348 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 190: /* opt_enum_val_list: enum_val_list */ + case 190: #line 46 "third_party/libpg_query/grammar/statements/create_type.y" - { (yyval.list) = (yyvsp[0].list);} -#line 20354 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list);;} break; - case 191: /* opt_enum_val_list: %empty */ + case 191: #line 47 "third_party/libpg_query/grammar/statements/create_type.y" - {(yyval.list) = NIL;} -#line 20360 "third_party/libpg_query/grammar/grammar_out.cpp" + {(yyval.list) = NIL;;} break; - case 192: /* enum_val_list: Sconst */ + case 192: #line 51 "third_party/libpg_query/grammar/statements/create_type.y" - { - (yyval.list) = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); - } -#line 20368 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1(makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)]))); + ;} break; - case 193: /* enum_val_list: enum_val_list ',' Sconst */ + case 193: #line 55 "third_party/libpg_query/grammar/statements/create_type.y" - { - (yyval.list) = lappend((yyvsp[-2].list), makeStringConst((yyvsp[0].str), (yylsp[0]))); - } -#line 20376 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeStringConst((yyvsp[(3) - (3)].str), (yylsp[(3) - (3)]))); + ;} break; - case 194: /* PragmaStmt: PRAGMA_P ColId */ + case 194: #line 8 "third_party/libpg_query/grammar/statements/pragma.y" - { + { PGPragmaStmt *n = makeNode(PGPragmaStmt); n->kind = PG_PRAGMA_TYPE_NOTHING; - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); (yyval.node) = (PGNode *)n; - } -#line 20387 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 195: /* PragmaStmt: PRAGMA_P ColId '=' var_list */ + case 195: #line 15 "third_party/libpg_query/grammar/statements/pragma.y" - { + { PGPragmaStmt *n = makeNode(PGPragmaStmt); n->kind = PG_PRAGMA_TYPE_ASSIGNMENT; - n->name = (yyvsp[-2].str); - n->args = (yyvsp[0].list); + n->name = (yyvsp[(2) - (4)].str); + n->args = (yyvsp[(4) - (4)].list); (yyval.node) = (PGNode *)n; - } -#line 20399 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 196: /* PragmaStmt: PRAGMA_P ColId '(' func_arg_list ')' */ + case 196: #line 23 "third_party/libpg_query/grammar/statements/pragma.y" - { + { PGPragmaStmt *n = makeNode(PGPragmaStmt); n->kind = PG_PRAGMA_TYPE_CALL; - n->name = (yyvsp[-3].str); - n->args = (yyvsp[-1].list); + n->name = (yyvsp[(2) - (5)].str); + n->args = (yyvsp[(4) - (5)].list); (yyval.node) = (PGNode *)n; - } -#line 20411 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 197: /* CreateSeqStmt: CREATE_P OptTemp SEQUENCE qualified_name OptSeqOptList */ + case 197: #line 10 "third_party/libpg_query/grammar/statements/create_sequence.y" - { + { PGCreateSeqStmt *n = makeNode(PGCreateSeqStmt); - (yyvsp[-1].range)->relpersistence = (yyvsp[-3].ival); - n->sequence = (yyvsp[-1].range); - n->options = (yyvsp[0].list); + (yyvsp[(4) - (5)].range)->relpersistence = (yyvsp[(2) - (5)].ival); + n->sequence = (yyvsp[(4) - (5)].range); + n->options = (yyvsp[(5) - (5)].list); n->ownerId = InvalidOid; n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20425 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 198: /* CreateSeqStmt: CREATE_P OptTemp SEQUENCE IF_P NOT EXISTS qualified_name OptSeqOptList */ + case 198: #line 20 "third_party/libpg_query/grammar/statements/create_sequence.y" - { + { PGCreateSeqStmt *n = makeNode(PGCreateSeqStmt); - (yyvsp[-1].range)->relpersistence = (yyvsp[-6].ival); - n->sequence = (yyvsp[-1].range); - n->options = (yyvsp[0].list); + (yyvsp[(7) - (8)].range)->relpersistence = (yyvsp[(2) - (8)].ival); + n->sequence = (yyvsp[(7) - (8)].range); + n->options = (yyvsp[(8) - (8)].list); n->ownerId = InvalidOid; n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20439 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 199: /* CreateSeqStmt: CREATE_P OR REPLACE OptTemp SEQUENCE qualified_name OptSeqOptList */ + case 199: #line 30 "third_party/libpg_query/grammar/statements/create_sequence.y" - { + { PGCreateSeqStmt *n = makeNode(PGCreateSeqStmt); - (yyvsp[-1].range)->relpersistence = (yyvsp[-3].ival); - n->sequence = (yyvsp[-1].range); - n->options = (yyvsp[0].list); + (yyvsp[(6) - (7)].range)->relpersistence = (yyvsp[(4) - (7)].ival); + n->sequence = (yyvsp[(6) - (7)].range); + n->options = (yyvsp[(7) - (7)].list); n->ownerId = InvalidOid; n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20453 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 200: /* OptSeqOptList: SeqOptList */ + case 200: #line 42 "third_party/libpg_query/grammar/statements/create_sequence.y" - { (yyval.list) = (yyvsp[0].list); } -#line 20459 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 201: /* OptSeqOptList: %empty */ + case 201: #line 43 "third_party/libpg_query/grammar/statements/create_sequence.y" - { (yyval.list) = NIL; } -#line 20465 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 202: /* CreateSecretStmt: CREATE_P opt_persist SECRET opt_secret_name opt_storage_specifier '(' copy_generic_opt_list ')' */ + case 202: #line 8 "third_party/libpg_query/grammar/statements/create_secret.y" - { + { PGCreateSecretStmt *n = makeNode(PGCreateSecretStmt); - n->persist_type = (yyvsp[-6].str); - n->secret_name = (yyvsp[-4].str); - n->secret_storage = (yyvsp[-3].str); - n->options = (yyvsp[-1].list); + n->persist_type = (yyvsp[(2) - (8)].str); + n->secret_name = (yyvsp[(4) - (8)].str); + n->secret_storage = (yyvsp[(5) - (8)].str); + n->options = (yyvsp[(7) - (8)].list); n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20479 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 203: /* CreateSecretStmt: CREATE_P opt_persist SECRET IF_P NOT EXISTS opt_secret_name opt_storage_specifier '(' copy_generic_opt_list ')' */ + case 203: #line 18 "third_party/libpg_query/grammar/statements/create_secret.y" - { + { PGCreateSecretStmt *n = makeNode(PGCreateSecretStmt); - n->persist_type = (yyvsp[-9].str); - n->secret_name = (yyvsp[-4].str); - n->secret_storage = (yyvsp[-3].str); - n->options = (yyvsp[-1].list); + n->persist_type = (yyvsp[(2) - (11)].str); + n->secret_name = (yyvsp[(7) - (11)].str); + n->secret_storage = (yyvsp[(8) - (11)].str); + n->options = (yyvsp[(10) - (11)].list); n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20493 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 204: /* CreateSecretStmt: CREATE_P OR REPLACE opt_persist SECRET opt_secret_name opt_storage_specifier '(' copy_generic_opt_list ')' */ + case 204: #line 28 "third_party/libpg_query/grammar/statements/create_secret.y" - { + { PGCreateSecretStmt *n = makeNode(PGCreateSecretStmt); - n->persist_type = (yyvsp[-6].str); - n->secret_name = (yyvsp[-4].str); - n->secret_storage = (yyvsp[-3].str); - n->options = (yyvsp[-1].list); + n->persist_type = (yyvsp[(4) - (10)].str); + n->secret_name = (yyvsp[(6) - (10)].str); + n->secret_storage = (yyvsp[(7) - (10)].str); + n->options = (yyvsp[(9) - (10)].list); n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 20507 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 205: /* opt_secret_name: %empty */ + case 205: #line 40 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = NULL; } -#line 20513 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 206: /* opt_secret_name: ColId */ + case 206: #line 41 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = (yyvsp[0].str); } -#line 20519 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 207: /* opt_persist: %empty */ + case 207: #line 45 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = pstrdup("default"); } -#line 20525 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup("default"); ;} break; - case 208: /* opt_persist: TEMPORARY */ + case 208: #line 46 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = pstrdup("temporary"); } -#line 20531 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup("temporary"); ;} break; - case 209: /* opt_persist: PERSISTENT */ + case 209: #line 47 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = pstrdup("persistent"); } -#line 20537 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup("persistent"); ;} break; - case 210: /* opt_storage_specifier: %empty */ + case 210: #line 51 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = pstrdup(""); } -#line 20543 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup(""); ;} break; - case 211: /* opt_storage_specifier: IN_P IDENT */ + case 211: #line 52 "third_party/libpg_query/grammar/statements/create_secret.y" - { (yyval.str) = (yyvsp[0].str); } -#line 20549 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 212: /* ExecuteStmt: EXECUTE name execute_param_clause */ + case 212: #line 8 "third_party/libpg_query/grammar/statements/execute.y" - { + { PGExecuteStmt *n = makeNode(PGExecuteStmt); - n->name = (yyvsp[-1].str); - n->params = (yyvsp[0].list); + n->name = (yyvsp[(2) - (3)].str); + n->params = (yyvsp[(3) - (3)].list); (yyval.node) = (PGNode *) n; - } -#line 20560 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 213: /* ExecuteStmt: CREATE_P OptTemp TABLE create_as_target AS EXECUTE name execute_param_clause opt_with_data */ + case 213: #line 16 "third_party/libpg_query/grammar/statements/execute.y" - { + { PGCreateTableAsStmt *ctas = makeNode(PGCreateTableAsStmt); PGExecuteStmt *n = makeNode(PGExecuteStmt); - n->name = (yyvsp[-2].str); - n->params = (yyvsp[-1].list); + n->name = (yyvsp[(7) - (9)].str); + n->params = (yyvsp[(8) - (9)].list); ctas->query = (PGNode *) n; - ctas->into = (yyvsp[-5].into); + ctas->into = (yyvsp[(4) - (9)].into); ctas->relkind = PG_OBJECT_TABLE; ctas->is_select_into = false; ctas->onconflict = PG_ERROR_ON_CONFLICT; /* cram additional flags into the PGIntoClause */ - (yyvsp[-5].into)->rel->relpersistence = (yyvsp[-7].ival); - (yyvsp[-5].into)->skipData = !((yyvsp[0].boolean)); + (yyvsp[(4) - (9)].into)->rel->relpersistence = (yyvsp[(2) - (9)].ival); + (yyvsp[(4) - (9)].into)->skipData = !((yyvsp[(9) - (9)].boolean)); (yyval.node) = (PGNode *) ctas; - } -#line 20580 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 214: /* ExecuteStmt: CREATE_P OptTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE name execute_param_clause opt_with_data */ + case 214: #line 33 "third_party/libpg_query/grammar/statements/execute.y" - { + { PGCreateTableAsStmt *ctas = makeNode(PGCreateTableAsStmt); PGExecuteStmt *n = makeNode(PGExecuteStmt); - n->name = (yyvsp[-2].str); - n->params = (yyvsp[-1].list); + n->name = (yyvsp[(10) - (12)].str); + n->params = (yyvsp[(11) - (12)].list); ctas->query = (PGNode *) n; - ctas->into = (yyvsp[-5].into); + ctas->into = (yyvsp[(7) - (12)].into); ctas->relkind = PG_OBJECT_TABLE; ctas->is_select_into = false; ctas->onconflict = PG_IGNORE_ON_CONFLICT; /* cram additional flags into the PGIntoClause */ - (yyvsp[-5].into)->rel->relpersistence = (yyvsp[-10].ival); - (yyvsp[-5].into)->skipData = !((yyvsp[0].boolean)); + (yyvsp[(7) - (12)].into)->rel->relpersistence = (yyvsp[(2) - (12)].ival); + (yyvsp[(7) - (12)].into)->skipData = !((yyvsp[(12) - (12)].boolean)); (yyval.node) = (PGNode *) ctas; - } -#line 20600 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 215: /* execute_param_expr: a_expr */ + case 215: #line 52 "third_party/libpg_query/grammar/statements/execute.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 20608 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} break; - case 216: /* execute_param_expr: param_name COLON_EQUALS a_expr */ + case 216: #line 56 "third_party/libpg_query/grammar/statements/execute.y" - { + { PGNamedArgExpr *na = makeNode(PGNamedArgExpr); - na->name = (yyvsp[-2].str); - na->arg = (PGExpr *) (yyvsp[0].node); + na->name = (yyvsp[(1) - (3)].str); + na->arg = (PGExpr *) (yyvsp[(3) - (3)].node); na->argnumber = -1; /* until determined */ - na->location = (yylsp[-2]); + na->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) na; - } -#line 20621 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 217: /* execute_param_list: execute_param_expr */ + case 217: #line 66 "third_party/libpg_query/grammar/statements/execute.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 20629 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 218: /* execute_param_list: execute_param_list ',' execute_param_expr */ + case 218: #line 70 "third_party/libpg_query/grammar/statements/execute.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 20637 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 219: /* execute_param_clause: '(' execute_param_list ')' */ + case 219: #line 75 "third_party/libpg_query/grammar/statements/execute.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 20643 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 220: /* execute_param_clause: %empty */ + case 220: #line 76 "third_party/libpg_query/grammar/statements/execute.y" - { (yyval.list) = NIL; } -#line 20649 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 221: /* AlterSeqStmt: ALTER SEQUENCE qualified_name SeqOptList */ + case 221: #line 10 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { + { PGAlterSeqStmt *n = makeNode(PGAlterSeqStmt); - n->sequence = (yyvsp[-1].range); - n->options = (yyvsp[0].list); + n->sequence = (yyvsp[(3) - (4)].range); + n->options = (yyvsp[(4) - (4)].list); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 20661 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 222: /* AlterSeqStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList */ + case 222: #line 18 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { + { PGAlterSeqStmt *n = makeNode(PGAlterSeqStmt); - n->sequence = (yyvsp[-1].range); - n->options = (yyvsp[0].list); + n->sequence = (yyvsp[(5) - (6)].range); + n->options = (yyvsp[(6) - (6)].list); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 20673 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 223: /* SeqOptList: SeqOptElem */ + case 223: #line 29 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.list) = list_make1((yyvsp[0].defelt)); } -#line 20679 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 224: /* SeqOptList: SeqOptList SeqOptElem */ + case 224: #line 30 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } -#line 20685 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 225: /* opt_with: WITH */ + case 225: #line 34 "third_party/libpg_query/grammar/statements/alter_sequence.y" - {} -#line 20691 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 226: /* opt_with: WITH_LA */ + case 226: #line 35 "third_party/libpg_query/grammar/statements/alter_sequence.y" - {} -#line 20697 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 227: /* opt_with: %empty */ + case 227: #line 36 "third_party/libpg_query/grammar/statements/alter_sequence.y" - {} -#line 20703 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 228: /* NumericOnly: FCONST */ + case 228: #line 41 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.value) = makeFloat((yyvsp[0].str)); } -#line 20709 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.value) = makeFloat((yyvsp[(1) - (1)].str)); ;} break; - case 229: /* NumericOnly: '+' FCONST */ + case 229: #line 42 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.value) = makeFloat((yyvsp[0].str)); } -#line 20715 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.value) = makeFloat((yyvsp[(2) - (2)].str)); ;} break; - case 230: /* NumericOnly: '-' FCONST */ + case 230: #line 44 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.value) = makeFloat((yyvsp[0].str)); + { + (yyval.value) = makeFloat((yyvsp[(2) - (2)].str)); doNegateFloat((yyval.value)); - } -#line 20724 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 231: /* NumericOnly: SignedIconst */ + case 231: #line 48 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.value) = makeInteger((yyvsp[0].ival)); } -#line 20730 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.value) = makeInteger((yyvsp[(1) - (1)].ival)); ;} break; - case 232: /* SeqOptElem: AS SimpleTypename */ + case 232: #line 53 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("as", (PGNode *)(yyvsp[0].typnam), (yylsp[-1])); - } -#line 20738 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("as", (PGNode *)(yyvsp[(2) - (2)].typnam), (yylsp[(1) - (2)])); + ;} break; - case 233: /* SeqOptElem: CACHE NumericOnly */ + case 233: #line 57 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("cache", (PGNode *)(yyvsp[0].value), (yylsp[-1])); - } -#line 20746 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("cache", (PGNode *)(yyvsp[(2) - (2)].value), (yylsp[(1) - (2)])); + ;} break; - case 234: /* SeqOptElem: CYCLE */ + case 234: #line 61 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("cycle", (PGNode *)makeInteger(true), (yylsp[0])); - } -#line 20754 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("cycle", (PGNode *)makeInteger(true), (yylsp[(1) - (1)])); + ;} break; - case 235: /* SeqOptElem: NO CYCLE */ + case 235: #line 65 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("cycle", (PGNode *)makeInteger(false), (yylsp[-1])); - } -#line 20762 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("cycle", (PGNode *)makeInteger(false), (yylsp[(1) - (2)])); + ;} break; - case 236: /* SeqOptElem: INCREMENT opt_by NumericOnly */ + case 236: #line 69 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("increment", (PGNode *)(yyvsp[0].value), (yylsp[-2])); - } -#line 20770 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("increment", (PGNode *)(yyvsp[(3) - (3)].value), (yylsp[(1) - (3)])); + ;} break; - case 237: /* SeqOptElem: MAXVALUE NumericOnly */ + case 237: #line 73 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("maxvalue", (PGNode *)(yyvsp[0].value), (yylsp[-1])); - } -#line 20778 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("maxvalue", (PGNode *)(yyvsp[(2) - (2)].value), (yylsp[(1) - (2)])); + ;} break; - case 238: /* SeqOptElem: MINVALUE NumericOnly */ + case 238: #line 77 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("minvalue", (PGNode *)(yyvsp[0].value), (yylsp[-1])); - } -#line 20786 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("minvalue", (PGNode *)(yyvsp[(2) - (2)].value), (yylsp[(1) - (2)])); + ;} break; - case 239: /* SeqOptElem: NO MAXVALUE */ + case 239: #line 81 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("maxvalue", NULL, (yylsp[-1])); - } -#line 20794 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("maxvalue", NULL, (yylsp[(1) - (2)])); + ;} break; - case 240: /* SeqOptElem: NO MINVALUE */ + case 240: #line 85 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("minvalue", NULL, (yylsp[-1])); - } -#line 20802 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("minvalue", NULL, (yylsp[(1) - (2)])); + ;} break; - case 241: /* SeqOptElem: OWNED BY any_name */ + case 241: #line 89 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("owned_by", (PGNode *)(yyvsp[0].list), (yylsp[-2])); - } -#line 20810 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("owned_by", (PGNode *)(yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); + ;} break; - case 242: /* SeqOptElem: SEQUENCE NAME_P any_name */ + case 242: #line 93 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { + { /* not documented, only used by pg_dump */ - (yyval.defelt) = makeDefElem("sequence_name", (PGNode *)(yyvsp[0].list), (yylsp[-2])); - } -#line 20819 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.defelt) = makeDefElem("sequence_name", (PGNode *)(yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); + ;} break; - case 243: /* SeqOptElem: START opt_with NumericOnly */ + case 243: #line 98 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("start", (PGNode *)(yyvsp[0].value), (yylsp[-2])); - } -#line 20827 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("start", (PGNode *)(yyvsp[(3) - (3)].value), (yylsp[(1) - (3)])); + ;} break; - case 244: /* SeqOptElem: RESTART */ + case 244: #line 102 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[0])); - } -#line 20835 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("restart", NULL, (yylsp[(1) - (1)])); + ;} break; - case 245: /* SeqOptElem: RESTART opt_with NumericOnly */ + case 245: #line 106 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { - (yyval.defelt) = makeDefElem("restart", (PGNode *)(yyvsp[0].value), (yylsp[-2])); - } -#line 20843 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("restart", (PGNode *)(yyvsp[(3) - (3)].value), (yylsp[(1) - (3)])); + ;} break; - case 246: /* opt_by: BY */ + case 246: #line 112 "third_party/libpg_query/grammar/statements/alter_sequence.y" - {} -#line 20849 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 247: /* opt_by: %empty */ + case 247: #line 113 "third_party/libpg_query/grammar/statements/alter_sequence.y" - {} -#line 20855 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 248: /* SignedIconst: Iconst */ + case 248: #line 117 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.ival) = (yyvsp[0].ival); } -#line 20861 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 249: /* SignedIconst: '+' Iconst */ + case 249: #line 118 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.ival) = + (yyvsp[0].ival); } -#line 20867 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = + (yyvsp[(2) - (2)].ival); ;} break; - case 250: /* SignedIconst: '-' Iconst */ + case 250: #line 119 "third_party/libpg_query/grammar/statements/alter_sequence.y" - { (yyval.ival) = - (yyvsp[0].ival); } -#line 20873 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = - (yyvsp[(2) - (2)].ival); ;} break; - case 251: /* DropSecretStmt: DROP opt_persist SECRET ColId opt_storage_drop_specifier */ + case 251: #line 8 "third_party/libpg_query/grammar/statements/drop_secret.y" - { + { PGDropSecretStmt *n = makeNode(PGDropSecretStmt); - n->persist_type = (yyvsp[-3].str); - n->secret_name = (yyvsp[-1].str); - n->secret_storage = (yyvsp[0].str); + n->persist_type = (yyvsp[(2) - (5)].str); + n->secret_name = (yyvsp[(4) - (5)].str); + n->secret_storage = (yyvsp[(5) - (5)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 20886 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 252: /* DropSecretStmt: DROP opt_persist SECRET IF_P EXISTS ColId opt_storage_drop_specifier */ + case 252: #line 17 "third_party/libpg_query/grammar/statements/drop_secret.y" - { + { PGDropSecretStmt *n = makeNode(PGDropSecretStmt); - n->persist_type = (yyvsp[-5].str); - n->secret_name = (yyvsp[-1].str); - n->secret_storage = (yyvsp[0].str); + n->persist_type = (yyvsp[(2) - (7)].str); + n->secret_name = (yyvsp[(6) - (7)].str); + n->secret_storage = (yyvsp[(7) - (7)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 20899 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 253: /* opt_storage_drop_specifier: %empty */ + case 253: #line 28 "third_party/libpg_query/grammar/statements/drop_secret.y" - { (yyval.str) = pstrdup(""); } -#line 20905 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup(""); ;} break; - case 254: /* opt_storage_drop_specifier: FROM IDENT */ + case 254: #line 29 "third_party/libpg_query/grammar/statements/drop_secret.y" - { (yyval.str) = (yyvsp[0].str); } -#line 20911 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 255: /* TransactionStmt: ABORT_P opt_transaction */ + case 255: #line 3 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_ROLLBACK; n->options = NIL; (yyval.node) = (PGNode *)n; - } -#line 20922 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 256: /* TransactionStmt: BEGIN_P opt_transaction */ + case 256: #line 10 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_BEGIN; (yyval.node) = (PGNode *)n; - } -#line 20932 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 257: /* TransactionStmt: START opt_transaction */ + case 257: #line 16 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_START; (yyval.node) = (PGNode *)n; - } -#line 20942 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 258: /* TransactionStmt: COMMIT opt_transaction */ + case 258: #line 22 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_COMMIT; n->options = NIL; (yyval.node) = (PGNode *)n; - } -#line 20953 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 259: /* TransactionStmt: END_P opt_transaction */ + case 259: #line 29 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_COMMIT; n->options = NIL; (yyval.node) = (PGNode *)n; - } -#line 20964 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 260: /* TransactionStmt: ROLLBACK opt_transaction */ + case 260: #line 36 "third_party/libpg_query/grammar/statements/transaction.y" - { + { PGTransactionStmt *n = makeNode(PGTransactionStmt); n->kind = PG_TRANS_STMT_ROLLBACK; n->options = NIL; (yyval.node) = (PGNode *)n; - } -#line 20975 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 261: /* opt_transaction: WORK */ + case 261: #line 45 "third_party/libpg_query/grammar/statements/transaction.y" - {} -#line 20981 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 262: /* opt_transaction: TRANSACTION */ + case 262: #line 46 "third_party/libpg_query/grammar/statements/transaction.y" - {} -#line 20987 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 263: /* opt_transaction: %empty */ + case 263: #line 47 "third_party/libpg_query/grammar/statements/transaction.y" - {} -#line 20993 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 264: /* UseStmt: USE_P qualified_name */ + case 264: #line 3 "third_party/libpg_query/grammar/statements/use.y" - { + { PGUseStmt *n = makeNode(PGUseStmt); - n->name = (yyvsp[0].range); + n->name = (yyvsp[(2) - (2)].range); (yyval.node) = (PGNode *) n; - } -#line 21003 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 265: /* CreateStmt: CREATE_P OptTemp TABLE qualified_name '(' OptTableElementList ')' OptWith OnCommitOption */ + case 265: #line 9 "third_party/libpg_query/grammar/statements/create.y" - { + { PGCreateStmt *n = makeNode(PGCreateStmt); - (yyvsp[-5].range)->relpersistence = (yyvsp[-7].ival); - n->relation = (yyvsp[-5].range); - n->tableElts = (yyvsp[-3].list); + (yyvsp[(4) - (9)].range)->relpersistence = (yyvsp[(2) - (9)].ival); + n->relation = (yyvsp[(4) - (9)].range); + n->tableElts = (yyvsp[(6) - (9)].list); n->ofTypename = NULL; n->constraints = NIL; - n->options = (yyvsp[-1].list); - n->oncommit = (yyvsp[0].oncommit); + n->options = (yyvsp[(8) - (9)].list); + n->oncommit = (yyvsp[(9) - (9)].oncommit); n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 21020 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 266: /* CreateStmt: CREATE_P OptTemp TABLE IF_P NOT EXISTS qualified_name '(' OptTableElementList ')' OptWith OnCommitOption */ + case 266: #line 24 "third_party/libpg_query/grammar/statements/create.y" - { + { PGCreateStmt *n = makeNode(PGCreateStmt); - (yyvsp[-5].range)->relpersistence = (yyvsp[-10].ival); - n->relation = (yyvsp[-5].range); - n->tableElts = (yyvsp[-3].list); + (yyvsp[(7) - (12)].range)->relpersistence = (yyvsp[(2) - (12)].ival); + n->relation = (yyvsp[(7) - (12)].range); + n->tableElts = (yyvsp[(9) - (12)].list); n->ofTypename = NULL; n->constraints = NIL; - n->options = (yyvsp[-1].list); - n->oncommit = (yyvsp[0].oncommit); + n->options = (yyvsp[(11) - (12)].list); + n->oncommit = (yyvsp[(12) - (12)].oncommit); n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 21037 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 267: /* CreateStmt: CREATE_P OR REPLACE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptWith OnCommitOption */ + case 267: #line 39 "third_party/libpg_query/grammar/statements/create.y" - { + { PGCreateStmt *n = makeNode(PGCreateStmt); - (yyvsp[-5].range)->relpersistence = (yyvsp[-7].ival); - n->relation = (yyvsp[-5].range); - n->tableElts = (yyvsp[-3].list); + (yyvsp[(6) - (11)].range)->relpersistence = (yyvsp[(4) - (11)].ival); + n->relation = (yyvsp[(6) - (11)].range); + n->tableElts = (yyvsp[(8) - (11)].list); n->ofTypename = NULL; n->constraints = NIL; - n->options = (yyvsp[-1].list); - n->oncommit = (yyvsp[0].oncommit); + n->options = (yyvsp[(10) - (11)].list); + n->oncommit = (yyvsp[(11) - (11)].oncommit); n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 21054 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 268: /* ConstraintAttributeSpec: %empty */ + case 268: #line 56 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = 0; } -#line 21060 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 0; ;} break; - case 269: /* ConstraintAttributeSpec: ConstraintAttributeSpec ConstraintAttributeElem */ + case 269: #line 58 "third_party/libpg_query/grammar/statements/create.y" - { + { /* * We must complain about conflicting options. * We could, but choose not to, complain about redundant * options (ie, where $2's bit is already set in $1). */ - int newspec = (yyvsp[-1].ival) | (yyvsp[0].ival); + int newspec = (yyvsp[(1) - (2)].ival) | (yyvsp[(2) - (2)].ival); /* special message for this case */ if ((newspec & (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) == (CAS_NOT_DEFERRABLE | CAS_INITIALLY_DEFERRED)) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("constraint declared INITIALLY DEFERRED must be DEFERRABLE"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(2) - (2)])))); /* generic message for other conflicts */ if ((newspec & (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE)) == (CAS_NOT_DEFERRABLE | CAS_DEFERRABLE) || (newspec & (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) == (CAS_INITIALLY_IMMEDIATE | CAS_INITIALLY_DEFERRED)) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("conflicting constraint properties"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(2) - (2)])))); (yyval.ival) = newspec; - } -#line 21088 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 270: /* def_arg: func_type */ + case 270: #line 84 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)(yyvsp[0].typnam); } -#line 21094 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)(yyvsp[(1) - (1)].typnam); ;} break; - case 271: /* def_arg: reserved_keyword */ + case 271: #line 85 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)makeString(pstrdup((yyvsp[0].keyword))); } -#line 21100 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)makeString(pstrdup((yyvsp[(1) - (1)].keyword))); ;} break; - case 272: /* def_arg: qual_all_Op */ + case 272: #line 86 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)(yyvsp[0].list); } -#line 21106 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)(yyvsp[(1) - (1)].list); ;} break; - case 273: /* def_arg: NumericOnly */ + case 273: #line 87 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)(yyvsp[0].value); } -#line 21112 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)(yyvsp[(1) - (1)].value); ;} break; - case 274: /* def_arg: Sconst */ + case 274: #line 88 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)makeString((yyvsp[0].str)); } -#line 21118 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)makeString((yyvsp[(1) - (1)].str)); ;} break; - case 275: /* def_arg: NONE */ + case 275: #line 89 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *)makeString(pstrdup((yyvsp[0].keyword))); } -#line 21124 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *)makeString(pstrdup((yyvsp[(1) - (1)].keyword))); ;} break; - case 276: /* OptParenthesizedSeqOptList: '(' SeqOptList ')' */ + case 276: #line 93 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21130 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 277: /* OptParenthesizedSeqOptList: %empty */ + case 277: #line 94 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21136 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 278: /* generic_option_arg: Sconst */ + case 278: #line 99 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); } -#line 21142 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 279: /* key_action: NO ACTION */ + case 279: #line 104 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_FKCONSTR_ACTION_NOACTION; } -#line 21148 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_FKCONSTR_ACTION_NOACTION; ;} break; - case 280: /* key_action: RESTRICT */ + case 280: #line 105 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_FKCONSTR_ACTION_RESTRICT; } -#line 21154 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_FKCONSTR_ACTION_RESTRICT; ;} break; - case 281: /* key_action: CASCADE */ + case 281: #line 106 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_FKCONSTR_ACTION_CASCADE; } -#line 21160 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_FKCONSTR_ACTION_CASCADE; ;} break; - case 282: /* key_action: SET NULL_P */ + case 282: #line 107 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_FKCONSTR_ACTION_SETNULL; } -#line 21166 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_FKCONSTR_ACTION_SETNULL; ;} break; - case 283: /* key_action: SET DEFAULT */ + case 283: #line 108 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_FKCONSTR_ACTION_SETDEFAULT; } -#line 21172 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_FKCONSTR_ACTION_SETDEFAULT; ;} break; - case 284: /* ColConstraint: CONSTRAINT name ColConstraintElem */ + case 284: #line 114 "third_party/libpg_query/grammar/statements/create.y" - { - PGConstraint *n = castNode(PGConstraint, (yyvsp[0].node)); - n->conname = (yyvsp[-1].str); - n->location = (yylsp[-2]); + { + PGConstraint *n = castNode(PGConstraint, (yyvsp[(3) - (3)].node)); + n->conname = (yyvsp[(2) - (3)].str); + n->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) n; - } -#line 21183 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 285: /* ColConstraint: ColConstraintElem */ + case 285: #line 120 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21189 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 286: /* ColConstraint: ConstraintAttr */ + case 286: #line 121 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21195 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 287: /* ColConstraint: COLLATE any_name */ + case 287: #line 123 "third_party/libpg_query/grammar/statements/create.y" - { + { /* * Note: the PGCollateClause is momentarily included in * the list built by ColQualList, but we split it out @@ -21204,169 +22100,155 @@ YYLTYPE yylloc = yyloc_default; */ PGCollateClause *n = makeNode(PGCollateClause); n->arg = NULL; - n->collname = (yyvsp[0].list); - n->location = (yylsp[-1]); + n->collname = (yyvsp[(2) - (2)].list); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *) n; - } -#line 21212 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 288: /* ColConstraintElem: NOT NULL_P */ + case 288: #line 140 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_NOTNULL; - n->location = (yylsp[-1]); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 21223 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 289: /* ColConstraintElem: NULL_P */ + case 289: #line 147 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_NULL; - n->location = (yylsp[0]); + n->location = (yylsp[(1) - (1)]); (yyval.node) = (PGNode *)n; - } -#line 21234 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 290: /* ColConstraintElem: UNIQUE opt_definition */ + case 290: #line 154 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_UNIQUE; - n->location = (yylsp[-1]); + n->location = (yylsp[(1) - (2)]); n->keys = NULL; - n->options = (yyvsp[0].list); + n->options = (yyvsp[(2) - (2)].list); n->indexname = NULL; (yyval.node) = (PGNode *)n; - } -#line 21248 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 291: /* ColConstraintElem: PRIMARY KEY opt_definition */ + case 291: #line 164 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_PRIMARY; - n->location = (yylsp[-2]); + n->location = (yylsp[(1) - (3)]); n->keys = NULL; - n->options = (yyvsp[0].list); + n->options = (yyvsp[(3) - (3)].list); n->indexname = NULL; (yyval.node) = (PGNode *)n; - } -#line 21262 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 292: /* ColConstraintElem: CHECK_P '(' a_expr ')' opt_no_inherit */ + case 292: #line 174 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_CHECK; - n->location = (yylsp[-4]); - n->is_no_inherit = (yyvsp[0].boolean); - n->raw_expr = (yyvsp[-2].node); + n->location = (yylsp[(1) - (5)]); + n->is_no_inherit = (yyvsp[(5) - (5)].boolean); + n->raw_expr = (yyvsp[(3) - (5)].node); n->cooked_expr = NULL; n->skip_validation = false; n->initially_valid = true; (yyval.node) = (PGNode *)n; - } -#line 21278 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 293: /* ColConstraintElem: USING COMPRESSION name */ + case 293: #line 186 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_COMPRESSION; - n->location = (yylsp[-2]); - n->compression_name = (yyvsp[0].str); + n->location = (yylsp[(1) - (3)]); + n->compression_name = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *)n; - } -#line 21290 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 294: /* ColConstraintElem: DEFAULT b_expr */ + case 294: #line 194 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_DEFAULT; - n->location = (yylsp[-1]); - n->raw_expr = (yyvsp[0].node); + n->location = (yylsp[(1) - (2)]); + n->raw_expr = (yyvsp[(2) - (2)].node); n->cooked_expr = NULL; (yyval.node) = (PGNode *)n; - } -#line 21303 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 295: /* ColConstraintElem: REFERENCES qualified_name opt_column_list key_match key_actions */ + case 295: #line 203 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_FOREIGN; - n->location = (yylsp[-4]); - n->pktable = (yyvsp[-3].range); + n->location = (yylsp[(1) - (5)]); + n->pktable = (yyvsp[(2) - (5)].range); n->fk_attrs = NIL; - n->pk_attrs = (yyvsp[-2].list); - n->fk_matchtype = (yyvsp[-1].ival); - n->fk_upd_action = (char) ((yyvsp[0].ival) >> 8); - n->fk_del_action = (char) ((yyvsp[0].ival) & 0xFF); + n->pk_attrs = (yyvsp[(3) - (5)].list); + n->fk_matchtype = (yyvsp[(4) - (5)].ival); + n->fk_upd_action = (char) ((yyvsp[(5) - (5)].ival) >> 8); + n->fk_del_action = (char) ((yyvsp[(5) - (5)].ival) & 0xFF); n->skip_validation = false; n->initially_valid = true; (yyval.node) = (PGNode *)n; - } -#line 21322 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 296: /* GeneratedColumnType: VIRTUAL */ + case 296: #line 220 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.constr) = PG_CONSTR_GENERATED_VIRTUAL; } -#line 21328 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.constr) = PG_CONSTR_GENERATED_VIRTUAL; ;} break; - case 297: /* GeneratedColumnType: STORED */ + case 297: #line 221 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.constr) = PG_CONSTR_GENERATED_STORED; } -#line 21334 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.constr) = PG_CONSTR_GENERATED_STORED; ;} break; - case 298: /* opt_GeneratedColumnType: GeneratedColumnType */ + case 298: #line 225 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.constr) = (yyvsp[0].constr); } -#line 21340 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.constr) = (yyvsp[(1) - (1)].constr); ;} break; - case 299: /* opt_GeneratedColumnType: %empty */ + case 299: #line 226 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.constr) = PG_CONSTR_GENERATED_VIRTUAL; } -#line 21346 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.constr) = PG_CONSTR_GENERATED_VIRTUAL; ;} break; - case 300: /* GeneratedConstraintElem: GENERATED generated_when AS IDENTITY_P OptParenthesizedSeqOptList */ + case 300: #line 231 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_IDENTITY; - n->generated_when = (yyvsp[-3].ival); - n->options = (yyvsp[0].list); - n->location = (yylsp[-4]); + n->generated_when = (yyvsp[(2) - (5)].ival); + n->options = (yyvsp[(5) - (5)].list); + n->location = (yylsp[(1) - (5)]); (yyval.node) = (PGNode *)n; - } -#line 21359 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 301: /* GeneratedConstraintElem: GENERATED generated_when AS '(' a_expr ')' opt_GeneratedColumnType */ + case 301: #line 240 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); - n->contype = (yyvsp[0].constr); - n->generated_when = (yyvsp[-5].ival); - n->raw_expr = (yyvsp[-2].node); + n->contype = (yyvsp[(7) - (7)].constr); + n->generated_when = (yyvsp[(2) - (7)].ival); + n->raw_expr = (yyvsp[(5) - (7)].node); n->cooked_expr = NULL; - n->location = (yylsp[-6]); + n->location = (yylsp[(1) - (7)]); /* * Can't do this in the grammar because of shift/reduce @@ -21374,341 +22256,293 @@ YYLTYPE yylloc = yyloc_default; * DEFAULT, but generated columns only allow ALWAYS.) We * can also give a more useful error message and location. */ - if ((yyvsp[-5].ival) != PG_ATTRIBUTE_IDENTITY_ALWAYS) + if ((yyvsp[(2) - (7)].ival) != PG_ATTRIBUTE_IDENTITY_ALWAYS) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("for a generated column, GENERATED ALWAYS must be specified"), - parser_errposition((yylsp[-5])))); + parser_errposition((yylsp[(2) - (7)])))); (yyval.node) = (PGNode *)n; - } -#line 21386 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 302: /* GeneratedConstraintElem: AS '(' a_expr ')' opt_GeneratedColumnType */ + case 302: #line 263 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); - n->contype = (yyvsp[0].constr); + n->contype = (yyvsp[(5) - (5)].constr); n->generated_when = PG_ATTRIBUTE_IDENTITY_ALWAYS; - n->raw_expr = (yyvsp[-2].node); + n->raw_expr = (yyvsp[(3) - (5)].node); n->cooked_expr = NULL; - n->location = (yylsp[-4]); + n->location = (yylsp[(1) - (5)]); (yyval.node) = (PGNode *)n; - } -#line 21400 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 303: /* generic_option_elem: generic_option_name generic_option_arg */ + case 303: #line 277 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); - } -#line 21408 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); + ;} break; - case 304: /* key_update: ON UPDATE key_action */ + case 304: #line 283 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (yyvsp[0].ival); } -#line 21414 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(3) - (3)].ival); ;} break; - case 305: /* key_actions: key_update */ + case 305: #line 289 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = ((yyvsp[0].ival) << 8) | (PG_FKCONSTR_ACTION_NOACTION & 0xFF); } -#line 21420 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = ((yyvsp[(1) - (1)].ival) << 8) | (PG_FKCONSTR_ACTION_NOACTION & 0xFF); ;} break; - case 306: /* key_actions: key_delete */ + case 306: #line 291 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (PG_FKCONSTR_ACTION_NOACTION << 8) | ((yyvsp[0].ival) & 0xFF); } -#line 21426 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (PG_FKCONSTR_ACTION_NOACTION << 8) | ((yyvsp[(1) - (1)].ival) & 0xFF); ;} break; - case 307: /* key_actions: key_update key_delete */ + case 307: #line 293 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = ((yyvsp[-1].ival) << 8) | ((yyvsp[0].ival) & 0xFF); } -#line 21432 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = ((yyvsp[(1) - (2)].ival) << 8) | ((yyvsp[(2) - (2)].ival) & 0xFF); ;} break; - case 308: /* key_actions: key_delete key_update */ + case 308: #line 295 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = ((yyvsp[0].ival) << 8) | ((yyvsp[-1].ival) & 0xFF); } -#line 21438 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = ((yyvsp[(2) - (2)].ival) << 8) | ((yyvsp[(1) - (2)].ival) & 0xFF); ;} break; - case 309: /* key_actions: %empty */ + case 309: #line 297 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (PG_FKCONSTR_ACTION_NOACTION << 8) | (PG_FKCONSTR_ACTION_NOACTION & 0xFF); } -#line 21444 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (PG_FKCONSTR_ACTION_NOACTION << 8) | (PG_FKCONSTR_ACTION_NOACTION & 0xFF); ;} break; - case 310: /* OnCommitOption: ON COMMIT DROP */ + case 310: #line 300 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.oncommit) = ONCOMMIT_DROP; } -#line 21450 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.oncommit) = ONCOMMIT_DROP; ;} break; - case 311: /* OnCommitOption: ON COMMIT DELETE_P ROWS */ + case 311: #line 301 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.oncommit) = PG_ONCOMMIT_DELETE_ROWS; } -#line 21456 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.oncommit) = PG_ONCOMMIT_DELETE_ROWS; ;} break; - case 312: /* OnCommitOption: ON COMMIT PRESERVE ROWS */ + case 312: #line 302 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.oncommit) = PG_ONCOMMIT_PRESERVE_ROWS; } -#line 21462 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.oncommit) = PG_ONCOMMIT_PRESERVE_ROWS; ;} break; - case 313: /* OnCommitOption: %empty */ + case 313: #line 303 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.oncommit) = PG_ONCOMMIT_NOOP; } -#line 21468 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.oncommit) = PG_ONCOMMIT_NOOP; ;} break; - case 314: /* reloptions: '(' reloption_list ')' */ + case 314: #line 308 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21474 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 315: /* opt_no_inherit: NO INHERIT */ + case 315: #line 312 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.boolean) = true; } -#line 21480 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 316: /* opt_no_inherit: %empty */ + case 316: #line 313 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.boolean) = false; } -#line 21486 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 317: /* TableConstraint: CONSTRAINT name ConstraintElem */ + case 317: #line 319 "third_party/libpg_query/grammar/statements/create.y" - { - PGConstraint *n = castNode(PGConstraint, (yyvsp[0].node)); - n->conname = (yyvsp[-1].str); - n->location = (yylsp[-2]); + { + PGConstraint *n = castNode(PGConstraint, (yyvsp[(3) - (3)].node)); + n->conname = (yyvsp[(2) - (3)].str); + n->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) n; - } -#line 21497 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 318: /* TableConstraint: ConstraintElem */ + case 318: #line 325 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21503 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 319: /* TableLikeOption: COMMENTS */ + case 319: #line 330 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_COMMENTS; } -#line 21509 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_COMMENTS; ;} break; - case 320: /* TableLikeOption: CONSTRAINTS */ + case 320: #line 331 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_CONSTRAINTS; } -#line 21515 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_CONSTRAINTS; ;} break; - case 321: /* TableLikeOption: DEFAULTS */ + case 321: #line 332 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_DEFAULTS; } -#line 21521 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_DEFAULTS; ;} break; - case 322: /* TableLikeOption: IDENTITY_P */ + case 322: #line 333 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_IDENTITY; } -#line 21527 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_IDENTITY; ;} break; - case 323: /* TableLikeOption: INDEXES */ + case 323: #line 334 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_INDEXES; } -#line 21533 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_INDEXES; ;} break; - case 324: /* TableLikeOption: STATISTICS */ + case 324: #line 335 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_STATISTICS; } -#line 21539 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_STATISTICS; ;} break; - case 325: /* TableLikeOption: STORAGE */ + case 325: #line 336 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_STORAGE; } -#line 21545 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_STORAGE; ;} break; - case 326: /* TableLikeOption: ALL */ + case 326: #line 337 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_CREATE_TABLE_LIKE_ALL; } -#line 21551 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_CREATE_TABLE_LIKE_ALL; ;} break; - case 327: /* reloption_list: reloption_elem */ + case 327: #line 343 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = list_make1((yyvsp[0].defelt)); } -#line 21557 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 328: /* reloption_list: reloption_list ',' reloption_elem */ + case 328: #line 344 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } -#line 21563 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 329: /* ExistingIndex: USING INDEX index_name */ + case 329: #line 348 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.str) = (yyvsp[0].str); } -#line 21569 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(3) - (3)].str); ;} break; - case 330: /* ConstraintAttr: DEFERRABLE */ + case 330: #line 354 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_ATTR_DEFERRABLE; - n->location = (yylsp[0]); + n->location = (yylsp[(1) - (1)]); (yyval.node) = (PGNode *)n; - } -#line 21580 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 331: /* ConstraintAttr: NOT DEFERRABLE */ + case 331: #line 361 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_ATTR_NOT_DEFERRABLE; - n->location = (yylsp[-1]); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 21591 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 332: /* ConstraintAttr: INITIALLY DEFERRED */ + case 332: #line 368 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_ATTR_DEFERRED; - n->location = (yylsp[-1]); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 21602 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 333: /* ConstraintAttr: INITIALLY IMMEDIATE */ + case 333: #line 375 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_ATTR_IMMEDIATE; - n->location = (yylsp[-1]); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 21613 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 334: /* OptWith: WITH reloptions */ + case 334: #line 386 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[0].list); } -#line 21619 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 335: /* OptWith: WITH OIDS */ + case 335: #line 387 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = list_make1(makeDefElem("oids", (PGNode *) makeInteger(true), (yylsp[-1]))); } -#line 21625 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1(makeDefElem("oids", (PGNode *) makeInteger(true), (yylsp[(1) - (2)]))); ;} break; - case 336: /* OptWith: WITHOUT OIDS */ + case 336: #line 388 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = list_make1(makeDefElem("oids", (PGNode *) makeInteger(false), (yylsp[-1]))); } -#line 21631 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1(makeDefElem("oids", (PGNode *) makeInteger(false), (yylsp[(1) - (2)]))); ;} break; - case 337: /* OptWith: %empty */ + case 337: #line 389 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21637 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 338: /* definition: '(' def_list ')' */ + case 338: #line 393 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21643 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 339: /* TableLikeOptionList: TableLikeOptionList INCLUDING TableLikeOption */ + case 339: #line 398 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (yyvsp[-2].ival) | (yyvsp[0].ival); } -#line 21649 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival); ;} break; - case 340: /* TableLikeOptionList: TableLikeOptionList EXCLUDING TableLikeOption */ + case 340: #line 399 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (yyvsp[-2].ival) & ~(yyvsp[0].ival); } -#line 21655 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(1) - (3)].ival) & ~(yyvsp[(3) - (3)].ival); ;} break; - case 341: /* TableLikeOptionList: %empty */ + case 341: #line 400 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = 0; } -#line 21661 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = 0; ;} break; - case 342: /* generic_option_name: ColLabel */ + case 342: #line 405 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.str) = (yyvsp[0].str); } -#line 21667 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 343: /* ConstraintAttributeElem: NOT DEFERRABLE */ + case 343: #line 410 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_NOT_DEFERRABLE; } -#line 21673 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_NOT_DEFERRABLE; ;} break; - case 344: /* ConstraintAttributeElem: DEFERRABLE */ + case 344: #line 411 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_DEFERRABLE; } -#line 21679 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_DEFERRABLE; ;} break; - case 345: /* ConstraintAttributeElem: INITIALLY IMMEDIATE */ + case 345: #line 412 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_INITIALLY_IMMEDIATE; } -#line 21685 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_INITIALLY_IMMEDIATE; ;} break; - case 346: /* ConstraintAttributeElem: INITIALLY DEFERRED */ + case 346: #line 413 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_INITIALLY_DEFERRED; } -#line 21691 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_INITIALLY_DEFERRED; ;} break; - case 347: /* ConstraintAttributeElem: NOT VALID */ + case 347: #line 414 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_NOT_VALID; } -#line 21697 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_NOT_VALID; ;} break; - case 348: /* ConstraintAttributeElem: NO INHERIT */ + case 348: #line 415 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = CAS_NO_INHERIT; } -#line 21703 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = CAS_NO_INHERIT; ;} break; - case 349: /* columnDef: ColId Typename ColQualList */ + case 349: #line 421 "third_party/libpg_query/grammar/statements/create.y" - { + { PGColumnDef *n = makeNode(PGColumnDef); n->category = COL_STANDARD; - n->colname = (yyvsp[-2].str); - n->typeName = (yyvsp[-1].typnam); + n->colname = (yyvsp[(1) - (3)].str); + n->typeName = (yyvsp[(2) - (3)].typnam); n->inhcount = 0; n->is_local = true; n->is_not_null = false; @@ -21717,21 +22551,20 @@ YYLTYPE yylloc = yyloc_default; n->raw_default = NULL; n->cooked_default = NULL; n->collOid = InvalidOid; - SplitColQualList((yyvsp[0].list), &n->constraints, &n->collClause, + SplitColQualList((yyvsp[(3) - (3)].list), &n->constraints, &n->collClause, yyscanner); - n->location = (yylsp[-2]); + n->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *)n; - } -#line 21726 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 350: /* columnDef: ColId opt_Typename GeneratedConstraintElem ColQualList */ + case 350: #line 441 "third_party/libpg_query/grammar/statements/create.y" - { + { PGColumnDef *n = makeNode(PGColumnDef); n->category = COL_GENERATED; - n->colname = (yyvsp[-3].str); - n->typeName = (yyvsp[-2].typnam); + n->colname = (yyvsp[(1) - (4)].str); + n->typeName = (yyvsp[(2) - (4)].typnam); n->inhcount = 0; n->is_local = true; n->is_not_null = false; @@ -21741,1525 +22574,1347 @@ YYLTYPE yylloc = yyloc_default; n->cooked_default = NULL; n->collOid = InvalidOid; // merge the constraints with the generated column constraint - auto constraints = (yyvsp[0].list); + auto constraints = (yyvsp[(4) - (4)].list); if (constraints) { - constraints = lappend(constraints, (yyvsp[-1].node)); + constraints = lappend(constraints, (yyvsp[(3) - (4)].node)); } else { - constraints = list_make1((yyvsp[-1].node)); + constraints = list_make1((yyvsp[(3) - (4)].node)); } SplitColQualList(constraints, &n->constraints, &n->collClause, yyscanner); - n->location = (yylsp[-3]); + n->location = (yylsp[(1) - (4)]); (yyval.node) = (PGNode *)n; - } -#line 21756 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 351: /* def_list: def_elem */ + case 351: #line 469 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = list_make1((yyvsp[0].defelt)); } -#line 21762 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); ;} break; - case 352: /* def_list: def_list ',' def_elem */ + case 352: #line 470 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); } -#line 21768 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); ;} break; - case 353: /* index_name: ColId */ + case 353: #line 474 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.str) = (yyvsp[0].str); } -#line 21774 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 354: /* TableElement: columnDef */ + case 354: #line 478 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21780 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 355: /* TableElement: TableLikeClause */ + case 355: #line 479 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21786 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 356: /* TableElement: TableConstraint */ + case 356: #line 480 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.node) = (yyvsp[0].node); } -#line 21792 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 357: /* def_elem: ColLabel '=' def_arg */ + case 357: #line 485 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElem((yyvsp[-2].str), (PGNode *) (yyvsp[0].node), (yylsp[-2])); - } -#line 21800 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (PGNode *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); + ;} break; - case 358: /* def_elem: ColLabel */ + case 358: #line 489 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElem((yyvsp[0].str), NULL, (yylsp[0])); - } -#line 21808 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (1)].str), NULL, (yylsp[(1) - (1)])); + ;} break; - case 359: /* opt_definition: WITH definition */ + case 359: #line 496 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[0].list); } -#line 21814 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 360: /* opt_definition: %empty */ + case 360: #line 497 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21820 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 361: /* OptTableElementList: TableElementList */ + case 361: #line 502 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[0].list); } -#line 21826 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 362: /* OptTableElementList: TableElementList ',' */ + case 362: #line 503 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21832 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 363: /* OptTableElementList: %empty */ + case 363: #line 504 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21838 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 364: /* columnElem: ColId */ + case 364: #line 509 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); - } -#line 21846 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = (PGNode *) makeString((yyvsp[(1) - (1)].str)); + ;} break; - case 365: /* opt_column_list: '(' columnList ')' */ + case 365: #line 516 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21852 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 366: /* opt_column_list: %empty */ + case 366: #line 517 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21858 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 367: /* ColQualList: ColQualList ColConstraint */ + case 367: #line 522 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 21864 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 368: /* ColQualList: %empty */ + case 368: #line 523 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = NIL; } -#line 21870 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 369: /* key_delete: ON DELETE_P key_action */ + case 369: #line 527 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = (yyvsp[0].ival); } -#line 21876 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(3) - (3)].ival); ;} break; - case 370: /* reloption_elem: ColLabel '=' def_arg */ + case 370: #line 533 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElem((yyvsp[-2].str), (PGNode *) (yyvsp[0].node), (yylsp[-2])); - } -#line 21884 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (3)].str), (PGNode *) (yyvsp[(3) - (3)].node), (yylsp[(1) - (3)])); + ;} break; - case 371: /* reloption_elem: ColLabel */ + case 371: #line 537 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElem((yyvsp[0].str), NULL, (yylsp[0])); - } -#line 21892 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (1)].str), NULL, (yylsp[(1) - (1)])); + ;} break; - case 372: /* reloption_elem: ColLabel '.' ColLabel '=' def_arg */ + case 372: #line 541 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElemExtended((yyvsp[-4].str), (yyvsp[-2].str), (PGNode *) (yyvsp[0].node), - PG_DEFELEM_UNSPEC, (yylsp[-4])); - } -#line 21901 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElemExtended((yyvsp[(1) - (5)].str), (yyvsp[(3) - (5)].str), (PGNode *) (yyvsp[(5) - (5)].node), + PG_DEFELEM_UNSPEC, (yylsp[(1) - (5)])); + ;} break; - case 373: /* reloption_elem: ColLabel '.' ColLabel */ + case 373: #line 546 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.defelt) = makeDefElemExtended((yyvsp[-2].str), (yyvsp[0].str), NULL, PG_DEFELEM_UNSPEC, (yylsp[-2])); - } -#line 21909 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElemExtended((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str), NULL, PG_DEFELEM_UNSPEC, (yylsp[(1) - (3)])); + ;} break; - case 374: /* columnList: columnElem */ + case 374: #line 553 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 21915 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 375: /* columnList: columnList ',' columnElem */ + case 375: #line 554 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 21921 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 376: /* columnList_opt_comma: columnList */ + case 376: #line 558 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[0].list); } -#line 21927 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 377: /* columnList_opt_comma: columnList ',' */ + case 377: #line 559 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 21933 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 378: /* func_type: Typename */ + case 378: #line 563 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 21939 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 379: /* func_type: type_function_name attrs '%' TYPE_P */ + case 379: #line 565 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[-3].str)), (yyvsp[-2].list))); + { + (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[(1) - (4)].str)), (yyvsp[(2) - (4)].list))); (yyval.typnam)->pct_type = true; - (yyval.typnam)->location = (yylsp[-3]); - } -#line 21949 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (4)]); + ;} break; - case 380: /* func_type: SETOF type_function_name attrs '%' TYPE_P */ + case 380: #line 571 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[-3].str)), (yyvsp[-2].list))); + { + (yyval.typnam) = makeTypeNameFromNameList(lcons(makeString((yyvsp[(2) - (5)].str)), (yyvsp[(3) - (5)].list))); (yyval.typnam)->pct_type = true; (yyval.typnam)->setof = true; - (yyval.typnam)->location = (yylsp[-3]); - } -#line 21960 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(2) - (5)]); + ;} break; - case 381: /* ConstraintElem: CHECK_P '(' a_expr ')' ConstraintAttributeSpec */ + case 381: #line 582 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_CHECK; - n->location = (yylsp[-4]); - n->raw_expr = (yyvsp[-2].node); + n->location = (yylsp[(1) - (5)]); + n->raw_expr = (yyvsp[(3) - (5)].node); n->cooked_expr = NULL; - processCASbits((yyvsp[0].ival), (yylsp[0]), "CHECK", + processCASbits((yyvsp[(5) - (5)].ival), (yylsp[(5) - (5)]), "CHECK", NULL, NULL, &n->skip_validation, &n->is_no_inherit, yyscanner); n->initially_valid = !n->skip_validation; (yyval.node) = (PGNode *)n; - } -#line 21977 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 382: /* ConstraintElem: UNIQUE '(' columnList_opt_comma ')' opt_definition ConstraintAttributeSpec */ + case 382: #line 596 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_UNIQUE; - n->location = (yylsp[-5]); - n->keys = (yyvsp[-3].list); - n->options = (yyvsp[-1].list); + n->location = (yylsp[(1) - (6)]); + n->keys = (yyvsp[(3) - (6)].list); + n->options = (yyvsp[(5) - (6)].list); n->indexname = NULL; - processCASbits((yyvsp[0].ival), (yylsp[0]), "UNIQUE", + processCASbits((yyvsp[(6) - (6)].ival), (yylsp[(6) - (6)]), "UNIQUE", &n->deferrable, &n->initdeferred, NULL, NULL, yyscanner); (yyval.node) = (PGNode *)n; - } -#line 21994 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 383: /* ConstraintElem: UNIQUE ExistingIndex ConstraintAttributeSpec */ + case 383: #line 609 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_UNIQUE; - n->location = (yylsp[-2]); + n->location = (yylsp[(1) - (3)]); n->keys = NIL; n->options = NIL; - n->indexname = (yyvsp[-1].str); + n->indexname = (yyvsp[(2) - (3)].str); n->indexspace = NULL; - processCASbits((yyvsp[0].ival), (yylsp[0]), "UNIQUE", + processCASbits((yyvsp[(3) - (3)].ival), (yylsp[(3) - (3)]), "UNIQUE", &n->deferrable, &n->initdeferred, NULL, NULL, yyscanner); (yyval.node) = (PGNode *)n; - } -#line 22012 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 384: /* ConstraintElem: PRIMARY KEY '(' columnList_opt_comma ')' opt_definition ConstraintAttributeSpec */ + case 384: #line 624 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_PRIMARY; - n->location = (yylsp[-6]); - n->keys = (yyvsp[-3].list); - n->options = (yyvsp[-1].list); + n->location = (yylsp[(1) - (7)]); + n->keys = (yyvsp[(4) - (7)].list); + n->options = (yyvsp[(6) - (7)].list); n->indexname = NULL; - processCASbits((yyvsp[0].ival), (yylsp[0]), "PRIMARY KEY", + processCASbits((yyvsp[(7) - (7)].ival), (yylsp[(7) - (7)]), "PRIMARY KEY", &n->deferrable, &n->initdeferred, NULL, NULL, yyscanner); (yyval.node) = (PGNode *)n; - } -#line 22029 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 385: /* ConstraintElem: PRIMARY KEY ExistingIndex ConstraintAttributeSpec */ + case 385: #line 637 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_PRIMARY; - n->location = (yylsp[-3]); + n->location = (yylsp[(1) - (4)]); n->keys = NIL; n->options = NIL; - n->indexname = (yyvsp[-1].str); + n->indexname = (yyvsp[(3) - (4)].str); n->indexspace = NULL; - processCASbits((yyvsp[0].ival), (yylsp[0]), "PRIMARY KEY", + processCASbits((yyvsp[(4) - (4)].ival), (yylsp[(4) - (4)]), "PRIMARY KEY", &n->deferrable, &n->initdeferred, NULL, NULL, yyscanner); (yyval.node) = (PGNode *)n; - } -#line 22047 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 386: /* ConstraintElem: FOREIGN KEY '(' columnList_opt_comma ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec */ + case 386: #line 652 "third_party/libpg_query/grammar/statements/create.y" - { + { PGConstraint *n = makeNode(PGConstraint); n->contype = PG_CONSTR_FOREIGN; - n->location = (yylsp[-10]); - n->pktable = (yyvsp[-4].range); - n->fk_attrs = (yyvsp[-7].list); - n->pk_attrs = (yyvsp[-3].list); - n->fk_matchtype = (yyvsp[-2].ival); - n->fk_upd_action = (char) ((yyvsp[-1].ival) >> 8); - n->fk_del_action = (char) ((yyvsp[-1].ival) & 0xFF); - processCASbits((yyvsp[0].ival), (yylsp[0]), "FOREIGN KEY", + n->location = (yylsp[(1) - (11)]); + n->pktable = (yyvsp[(7) - (11)].range); + n->fk_attrs = (yyvsp[(4) - (11)].list); + n->pk_attrs = (yyvsp[(8) - (11)].list); + n->fk_matchtype = (yyvsp[(9) - (11)].ival); + n->fk_upd_action = (char) ((yyvsp[(10) - (11)].ival) >> 8); + n->fk_del_action = (char) ((yyvsp[(10) - (11)].ival) & 0xFF); + processCASbits((yyvsp[(11) - (11)].ival), (yylsp[(11) - (11)]), "FOREIGN KEY", &n->deferrable, &n->initdeferred, &n->skip_validation, NULL, yyscanner); n->initially_valid = !n->skip_validation; (yyval.node) = (PGNode *)n; - } -#line 22069 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 387: /* TableElementList: TableElement */ + case 387: #line 674 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 22077 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 388: /* TableElementList: TableElementList ',' TableElement */ + case 388: #line 678 "third_party/libpg_query/grammar/statements/create.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 22085 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 389: /* key_match: MATCH FULL */ + case 389: #line 685 "third_party/libpg_query/grammar/statements/create.y" - { + { (yyval.ival) = PG_FKCONSTR_MATCH_FULL; - } -#line 22093 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 390: /* key_match: MATCH PARTIAL */ + case 390: #line 689 "third_party/libpg_query/grammar/statements/create.y" - { + { ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("MATCH PARTIAL not yet implemented"), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(1) - (2)])))); (yyval.ival) = PG_FKCONSTR_MATCH_PARTIAL; - } -#line 22105 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 391: /* key_match: MATCH SIMPLE */ + case 391: #line 697 "third_party/libpg_query/grammar/statements/create.y" - { + { (yyval.ival) = PG_FKCONSTR_MATCH_SIMPLE; - } -#line 22113 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 392: /* key_match: %empty */ + case 392: #line 701 "third_party/libpg_query/grammar/statements/create.y" - { + { (yyval.ival) = PG_FKCONSTR_MATCH_SIMPLE; - } -#line 22121 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 393: /* TableLikeClause: LIKE qualified_name TableLikeOptionList */ + case 393: #line 709 "third_party/libpg_query/grammar/statements/create.y" - { + { PGTableLikeClause *n = makeNode(PGTableLikeClause); - n->relation = (yyvsp[-1].range); - n->options = (yyvsp[0].ival); + n->relation = (yyvsp[(2) - (3)].range); + n->options = (yyvsp[(3) - (3)].ival); (yyval.node) = (PGNode *)n; - } -#line 22132 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 394: /* OptTemp: TEMPORARY */ + case 394: #line 718 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_RELPERSISTENCE_TEMP; } -#line 22138 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_RELPERSISTENCE_TEMP; ;} break; - case 395: /* OptTemp: TEMP */ + case 395: #line 719 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_RELPERSISTENCE_TEMP; } -#line 22144 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_RELPERSISTENCE_TEMP; ;} break; - case 396: /* OptTemp: LOCAL TEMPORARY */ + case 396: #line 720 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_RELPERSISTENCE_TEMP; } -#line 22150 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_RELPERSISTENCE_TEMP; ;} break; - case 397: /* OptTemp: LOCAL TEMP */ + case 397: #line 721 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_RELPERSISTENCE_TEMP; } -#line 22156 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_RELPERSISTENCE_TEMP; ;} break; - case 398: /* OptTemp: GLOBAL TEMPORARY */ + case 398: #line 723 "third_party/libpg_query/grammar/statements/create.y" - { + { ereport(PGWARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(1) - (2)])))); (yyval.ival) = PG_RELPERSISTENCE_TEMP; - } -#line 22167 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 399: /* OptTemp: GLOBAL TEMP */ + case 399: #line 730 "third_party/libpg_query/grammar/statements/create.y" - { + { ereport(PGWARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(1) - (2)])))); (yyval.ival) = PG_RELPERSISTENCE_TEMP; - } -#line 22178 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 400: /* OptTemp: UNLOGGED */ + case 400: #line 736 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_RELPERSISTENCE_UNLOGGED; } -#line 22184 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_RELPERSISTENCE_UNLOGGED; ;} break; - case 401: /* OptTemp: %empty */ + case 401: #line 737 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = RELPERSISTENCE_PERMANENT; } -#line 22190 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = RELPERSISTENCE_PERMANENT; ;} break; - case 402: /* generated_when: ALWAYS */ + case 402: #line 742 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = PG_ATTRIBUTE_IDENTITY_ALWAYS; } -#line 22196 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_ATTRIBUTE_IDENTITY_ALWAYS; ;} break; - case 403: /* generated_when: BY DEFAULT */ + case 403: #line 743 "third_party/libpg_query/grammar/statements/create.y" - { (yyval.ival) = ATTRIBUTE_IDENTITY_BY_DEFAULT; } -#line 22202 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = ATTRIBUTE_IDENTITY_BY_DEFAULT; ;} break; - case 404: /* DropStmt: DROP drop_type_any_name IF_P EXISTS any_name_list opt_drop_behavior */ + case 404: #line 10 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-4].objtype); + n->removeType = (yyvsp[(2) - (6)].objtype); n->missing_ok = true; - n->objects = (yyvsp[-1].list); - n->behavior = (yyvsp[0].dbehavior); + n->objects = (yyvsp[(5) - (6)].list); + n->behavior = (yyvsp[(6) - (6)].dbehavior); n->concurrent = false; (yyval.node) = (PGNode *)n; - } -#line 22216 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 405: /* DropStmt: DROP drop_type_any_name any_name_list opt_drop_behavior */ + case 405: #line 20 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-2].objtype); + n->removeType = (yyvsp[(2) - (4)].objtype); n->missing_ok = false; - n->objects = (yyvsp[-1].list); - n->behavior = (yyvsp[0].dbehavior); + n->objects = (yyvsp[(3) - (4)].list); + n->behavior = (yyvsp[(4) - (4)].dbehavior); n->concurrent = false; (yyval.node) = (PGNode *)n; - } -#line 22230 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 406: /* DropStmt: DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior */ + case 406: #line 30 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-4].objtype); + n->removeType = (yyvsp[(2) - (6)].objtype); n->missing_ok = true; - n->objects = (yyvsp[-1].list); - n->behavior = (yyvsp[0].dbehavior); + n->objects = (yyvsp[(5) - (6)].list); + n->behavior = (yyvsp[(6) - (6)].dbehavior); n->concurrent = false; (yyval.node) = (PGNode *)n; - } -#line 22244 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 407: /* DropStmt: DROP drop_type_name name_list opt_drop_behavior */ + case 407: #line 40 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-2].objtype); + n->removeType = (yyvsp[(2) - (4)].objtype); n->missing_ok = false; - n->objects = (yyvsp[-1].list); - n->behavior = (yyvsp[0].dbehavior); + n->objects = (yyvsp[(3) - (4)].list); + n->behavior = (yyvsp[(4) - (4)].dbehavior); n->concurrent = false; (yyval.node) = (PGNode *)n; - } -#line 22258 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 408: /* DropStmt: DROP drop_type_name_on_any_name name ON any_name opt_drop_behavior */ + case 408: #line 50 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-4].objtype); - n->objects = list_make1(lappend((yyvsp[-1].list), makeString((yyvsp[-3].str)))); - n->behavior = (yyvsp[0].dbehavior); + n->removeType = (yyvsp[(2) - (6)].objtype); + n->objects = list_make1(lappend((yyvsp[(5) - (6)].list), makeString((yyvsp[(3) - (6)].str)))); + n->behavior = (yyvsp[(6) - (6)].dbehavior); n->missing_ok = false; n->concurrent = false; (yyval.node) = (PGNode *) n; - } -#line 22272 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 409: /* DropStmt: DROP drop_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior */ + case 409: #line 60 "third_party/libpg_query/grammar/statements/drop.y" - { + { PGDropStmt *n = makeNode(PGDropStmt); - n->removeType = (yyvsp[-6].objtype); - n->objects = list_make1(lappend((yyvsp[-1].list), makeString((yyvsp[-3].str)))); - n->behavior = (yyvsp[0].dbehavior); + n->removeType = (yyvsp[(2) - (8)].objtype); + n->objects = list_make1(lappend((yyvsp[(7) - (8)].list), makeString((yyvsp[(5) - (8)].str)))); + n->behavior = (yyvsp[(8) - (8)].dbehavior); n->missing_ok = true; n->concurrent = false; (yyval.node) = (PGNode *) n; - } -#line 22286 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 410: /* drop_type_any_name: TABLE */ + case 410: #line 73 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TABLE; } -#line 22292 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TABLE; ;} break; - case 411: /* drop_type_any_name: SEQUENCE */ + case 411: #line 74 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_SEQUENCE; } -#line 22298 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_SEQUENCE; ;} break; - case 412: /* drop_type_any_name: FUNCTION */ + case 412: #line 75 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_FUNCTION; } -#line 22304 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FUNCTION; ;} break; - case 413: /* drop_type_any_name: MACRO */ + case 413: #line 76 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_FUNCTION; } -#line 22310 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FUNCTION; ;} break; - case 414: /* drop_type_any_name: MACRO TABLE */ + case 414: #line 77 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TABLE_MACRO; } -#line 22316 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TABLE_MACRO; ;} break; - case 415: /* drop_type_any_name: VIEW */ + case 415: #line 78 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_VIEW; } -#line 22322 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_VIEW; ;} break; - case 416: /* drop_type_any_name: MATERIALIZED VIEW */ + case 416: #line 79 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_MATVIEW; } -#line 22328 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_MATVIEW; ;} break; - case 417: /* drop_type_any_name: INDEX */ + case 417: #line 80 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_INDEX; } -#line 22334 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_INDEX; ;} break; - case 418: /* drop_type_any_name: FOREIGN TABLE */ + case 418: #line 81 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_FOREIGN_TABLE; } -#line 22340 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FOREIGN_TABLE; ;} break; - case 419: /* drop_type_any_name: COLLATION */ + case 419: #line 82 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_COLLATION; } -#line 22346 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_COLLATION; ;} break; - case 420: /* drop_type_any_name: CONVERSION_P */ + case 420: #line 83 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_CONVERSION; } -#line 22352 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_CONVERSION; ;} break; - case 421: /* drop_type_any_name: SCHEMA */ + case 421: #line 84 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_SCHEMA; } -#line 22358 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_SCHEMA; ;} break; - case 422: /* drop_type_any_name: STATISTICS */ + case 422: #line 85 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_STATISTIC_EXT; } -#line 22364 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_STATISTIC_EXT; ;} break; - case 423: /* drop_type_any_name: TEXT_P SEARCH PARSER */ + case 423: #line 86 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TSPARSER; } -#line 22370 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TSPARSER; ;} break; - case 424: /* drop_type_any_name: TEXT_P SEARCH DICTIONARY */ + case 424: #line 87 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TSDICTIONARY; } -#line 22376 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TSDICTIONARY; ;} break; - case 425: /* drop_type_any_name: TEXT_P SEARCH TEMPLATE */ + case 425: #line 88 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TSTEMPLATE; } -#line 22382 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TSTEMPLATE; ;} break; - case 426: /* drop_type_any_name: TEXT_P SEARCH CONFIGURATION */ + case 426: #line 89 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TSCONFIGURATION; } -#line 22388 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TSCONFIGURATION; ;} break; - case 427: /* drop_type_any_name: TYPE_P */ + case 427: #line 90 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TYPE; } -#line 22394 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TYPE; ;} break; - case 428: /* drop_type_name: ACCESS METHOD */ + case 428: #line 95 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_ACCESS_METHOD; } -#line 22400 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_ACCESS_METHOD; ;} break; - case 429: /* drop_type_name: EVENT TRIGGER */ + case 429: #line 96 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_EVENT_TRIGGER; } -#line 22406 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_EVENT_TRIGGER; ;} break; - case 430: /* drop_type_name: EXTENSION */ + case 430: #line 97 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_EXTENSION; } -#line 22412 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_EXTENSION; ;} break; - case 431: /* drop_type_name: FOREIGN DATA_P WRAPPER */ + case 431: #line 98 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_FDW; } -#line 22418 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FDW; ;} break; - case 432: /* drop_type_name: PUBLICATION */ + case 432: #line 99 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_PUBLICATION; } -#line 22424 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_PUBLICATION; ;} break; - case 433: /* drop_type_name: SERVER */ + case 433: #line 100 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_FOREIGN_SERVER; } -#line 22430 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FOREIGN_SERVER; ;} break; - case 434: /* any_name_list: any_name */ + case 434: #line 105 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.list) = list_make1((yyvsp[0].list)); } -#line 22436 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 435: /* any_name_list: any_name_list ',' any_name */ + case 435: #line 106 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } -#line 22442 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 436: /* opt_drop_behavior: CASCADE */ + case 436: #line 111 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.dbehavior) = PG_DROP_CASCADE; } -#line 22448 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.dbehavior) = PG_DROP_CASCADE; ;} break; - case 437: /* opt_drop_behavior: RESTRICT */ + case 437: #line 112 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.dbehavior) = PG_DROP_RESTRICT; } -#line 22454 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.dbehavior) = PG_DROP_RESTRICT; ;} break; - case 438: /* opt_drop_behavior: %empty */ + case 438: #line 113 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.dbehavior) = PG_DROP_RESTRICT; /* default */ } -#line 22460 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.dbehavior) = PG_DROP_RESTRICT; /* default */ ;} break; - case 439: /* drop_type_name_on_any_name: POLICY */ + case 439: #line 118 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_POLICY; } -#line 22466 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_POLICY; ;} break; - case 440: /* drop_type_name_on_any_name: RULE */ + case 440: #line 119 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_RULE; } -#line 22472 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_RULE; ;} break; - case 441: /* drop_type_name_on_any_name: TRIGGER */ + case 441: #line 120 "third_party/libpg_query/grammar/statements/drop.y" - { (yyval.objtype) = PG_OBJECT_TRIGGER; } -#line 22478 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TRIGGER; ;} break; - case 442: /* CreateFunctionStmt: CREATE_P OptTemp macro_alias qualified_name param_list AS TABLE SelectStmt */ + case 442: #line 9 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-4].range)->relpersistence = (yyvsp[-6].ival); - n->name = (yyvsp[-4].range); - n->params = (yyvsp[-3].list); + (yyvsp[(4) - (8)].range)->relpersistence = (yyvsp[(2) - (8)].ival); + n->name = (yyvsp[(4) - (8)].range); + n->params = (yyvsp[(5) - (8)].list); n->function = NULL; - n->query = (yyvsp[0].node); + n->query = (yyvsp[(8) - (8)].node); n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22493 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 443: /* CreateFunctionStmt: CREATE_P OptTemp macro_alias IF_P NOT EXISTS qualified_name param_list AS TABLE SelectStmt */ + case 443: #line 21 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-4].range)->relpersistence = (yyvsp[-9].ival); - n->name = (yyvsp[-4].range); - n->params = (yyvsp[-3].list); + (yyvsp[(7) - (11)].range)->relpersistence = (yyvsp[(2) - (11)].ival); + n->name = (yyvsp[(7) - (11)].range); + n->params = (yyvsp[(8) - (11)].list); n->function = NULL; - n->query = (yyvsp[0].node); + n->query = (yyvsp[(11) - (11)].node); n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22509 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 444: /* CreateFunctionStmt: CREATE_P OR REPLACE OptTemp macro_alias qualified_name param_list AS TABLE SelectStmt */ + case 444: #line 34 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-4].range)->relpersistence = (yyvsp[-6].ival); - n->name = (yyvsp[-4].range); - n->params = (yyvsp[-3].list); + (yyvsp[(6) - (10)].range)->relpersistence = (yyvsp[(4) - (10)].ival); + n->name = (yyvsp[(6) - (10)].range); + n->params = (yyvsp[(7) - (10)].list); n->function = NULL; - n->query = (yyvsp[0].node); + n->query = (yyvsp[(10) - (10)].node); n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22525 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 445: /* CreateFunctionStmt: CREATE_P OptTemp macro_alias qualified_name param_list AS a_expr */ + case 445: #line 47 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-3].range)->relpersistence = (yyvsp[-5].ival); - n->name = (yyvsp[-3].range); - n->params = (yyvsp[-2].list); - n->function = (yyvsp[0].node); + (yyvsp[(4) - (7)].range)->relpersistence = (yyvsp[(2) - (7)].ival); + n->name = (yyvsp[(4) - (7)].range); + n->params = (yyvsp[(5) - (7)].list); + n->function = (yyvsp[(7) - (7)].node); n->query = NULL; n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22540 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 446: /* CreateFunctionStmt: CREATE_P OptTemp macro_alias IF_P NOT EXISTS qualified_name param_list AS a_expr */ + case 446: #line 59 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-3].range)->relpersistence = (yyvsp[-8].ival); - n->name = (yyvsp[-3].range); - n->params = (yyvsp[-2].list); - n->function = (yyvsp[0].node); + (yyvsp[(7) - (10)].range)->relpersistence = (yyvsp[(2) - (10)].ival); + n->name = (yyvsp[(7) - (10)].range); + n->params = (yyvsp[(8) - (10)].list); + n->function = (yyvsp[(10) - (10)].node); n->query = NULL; n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22555 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 447: /* CreateFunctionStmt: CREATE_P OR REPLACE OptTemp macro_alias qualified_name param_list AS a_expr */ + case 447: #line 71 "third_party/libpg_query/grammar/statements/create_function.y" - { + { PGCreateFunctionStmt *n = makeNode(PGCreateFunctionStmt); - (yyvsp[-3].range)->relpersistence = (yyvsp[-5].ival); - n->name = (yyvsp[-3].range); - n->params = (yyvsp[-2].list); - n->function = (yyvsp[0].node); + (yyvsp[(6) - (9)].range)->relpersistence = (yyvsp[(4) - (9)].ival); + n->name = (yyvsp[(6) - (9)].range); + n->params = (yyvsp[(7) - (9)].list); + n->function = (yyvsp[(9) - (9)].node); n->query = NULL; n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 22570 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 450: /* param_list: '(' ')' */ + case 450: #line 92 "third_party/libpg_query/grammar/statements/create_function.y" - { + { (yyval.list) = NIL; - } -#line 22578 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 451: /* param_list: '(' func_arg_list ')' */ + case 451: #line 96 "third_party/libpg_query/grammar/statements/create_function.y" - { - (yyval.list) = (yyvsp[-1].list); - } -#line 22586 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = (yyvsp[(2) - (3)].list); + ;} break; - case 452: /* UpdateStmt: opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list_opt_comma from_clause where_or_current_clause returning_clause */ + case 452: #line 12 "third_party/libpg_query/grammar/statements/update.y" - { + { PGUpdateStmt *n = makeNode(PGUpdateStmt); - n->relation = (yyvsp[-5].range); - n->targetList = (yyvsp[-3].list); - n->fromClause = (yyvsp[-2].list); - n->whereClause = (yyvsp[-1].node); - n->returningList = (yyvsp[0].list); - n->withClause = (yyvsp[-7].with); + n->relation = (yyvsp[(3) - (8)].range); + n->targetList = (yyvsp[(5) - (8)].list); + n->fromClause = (yyvsp[(6) - (8)].list); + n->whereClause = (yyvsp[(7) - (8)].node); + n->returningList = (yyvsp[(8) - (8)].list); + n->withClause = (yyvsp[(1) - (8)].with); (yyval.node) = (PGNode *)n; - } -#line 22601 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 453: /* CopyStmt: COPY opt_binary qualified_name opt_column_list opt_oids copy_from opt_program copy_file_name copy_delimiter opt_with copy_options */ + case 453: #line 3 "third_party/libpg_query/grammar/statements/copy.y" - { + { PGCopyStmt *n = makeNode(PGCopyStmt); - n->relation = (yyvsp[-8].range); + n->relation = (yyvsp[(3) - (11)].range); n->query = NULL; - n->attlist = (yyvsp[-7].list); - n->is_from = (yyvsp[-5].boolean); - n->is_program = (yyvsp[-4].boolean); - n->filename = (yyvsp[-3].str); + n->attlist = (yyvsp[(4) - (11)].list); + n->is_from = (yyvsp[(6) - (11)].boolean); + n->is_program = (yyvsp[(7) - (11)].boolean); + n->filename = (yyvsp[(8) - (11)].str); if (n->is_program && n->filename == NULL) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("STDIN/STDOUT not allowed with PROGRAM"), - parser_errposition((yylsp[-3])))); + parser_errposition((yylsp[(8) - (11)])))); n->options = NIL; /* Concatenate user-supplied flags */ - if ((yyvsp[-9].defelt)) - n->options = lappend(n->options, (yyvsp[-9].defelt)); - if ((yyvsp[-6].defelt)) - n->options = lappend(n->options, (yyvsp[-6].defelt)); - if ((yyvsp[-2].defelt)) - n->options = lappend(n->options, (yyvsp[-2].defelt)); - if ((yyvsp[0].list)) - n->options = list_concat(n->options, (yyvsp[0].list)); + if ((yyvsp[(2) - (11)].defelt)) + n->options = lappend(n->options, (yyvsp[(2) - (11)].defelt)); + if ((yyvsp[(5) - (11)].defelt)) + n->options = lappend(n->options, (yyvsp[(5) - (11)].defelt)); + if ((yyvsp[(9) - (11)].defelt)) + n->options = lappend(n->options, (yyvsp[(9) - (11)].defelt)); + if ((yyvsp[(11) - (11)].list)) + n->options = list_concat(n->options, (yyvsp[(11) - (11)].list)); (yyval.node) = (PGNode *)n; - } -#line 22633 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 454: /* CopyStmt: COPY '(' SelectStmt ')' TO opt_program copy_file_name opt_with copy_options */ + case 454: #line 31 "third_party/libpg_query/grammar/statements/copy.y" - { + { PGCopyStmt *n = makeNode(PGCopyStmt); n->relation = NULL; - n->query = (yyvsp[-6].node); + n->query = (yyvsp[(3) - (9)].node); n->attlist = NIL; n->is_from = false; - n->is_program = (yyvsp[-3].boolean); - n->filename = (yyvsp[-2].str); - n->options = (yyvsp[0].list); + n->is_program = (yyvsp[(6) - (9)].boolean); + n->filename = (yyvsp[(7) - (9)].str); + n->options = (yyvsp[(9) - (9)].list); if (n->is_program && n->filename == NULL) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("STDIN/STDOUT not allowed with PROGRAM"), - parser_errposition((yylsp[-4])))); + parser_errposition((yylsp[(5) - (9)])))); (yyval.node) = (PGNode *)n; - } -#line 22656 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 455: /* CopyStmt: COPY FROM DATABASE ColId TO ColId copy_database_flag */ + case 455: #line 50 "third_party/libpg_query/grammar/statements/copy.y" - { + { PGCopyDatabaseStmt *n = makeNode(PGCopyDatabaseStmt); - n->from_database = (yyvsp[-3].str); - n->to_database = (yyvsp[-1].str); - n->copy_database_flag = (yyvsp[0].conststr); + n->from_database = (yyvsp[(4) - (7)].str); + n->to_database = (yyvsp[(6) - (7)].str); + n->copy_database_flag = (yyvsp[(7) - (7)].conststr); (yyval.node) = (PGNode *)n; - } -#line 22668 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 456: /* copy_database_flag: %empty */ + case 456: #line 61 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.conststr) = NULL; } -#line 22674 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.conststr) = NULL; ;} break; - case 457: /* copy_database_flag: '(' SCHEMA ')' */ + case 457: #line 62 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.conststr) = "schema"; } -#line 22680 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.conststr) = "schema"; ;} break; - case 458: /* copy_database_flag: '(' DATA_P ')' */ + case 458: #line 63 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.conststr) = "data"; } -#line 22686 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.conststr) = "data"; ;} break; - case 459: /* copy_from: FROM */ + case 459: #line 67 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.boolean) = true; } -#line 22692 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 460: /* copy_from: TO */ + case 460: #line 68 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.boolean) = false; } -#line 22698 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 461: /* copy_delimiter: opt_using DELIMITERS Sconst */ + case 461: #line 74 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("delimiter", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-1])); - } -#line 22706 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("delimiter", (PGNode *)makeString((yyvsp[(3) - (3)].str)), (yylsp[(2) - (3)])); + ;} break; - case 462: /* copy_delimiter: %empty */ + case 462: #line 77 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.defelt) = NULL; } -#line 22712 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.defelt) = NULL; ;} break; - case 463: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list_item */ + case 463: #line 83 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 22720 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 464: /* copy_generic_opt_arg_list: copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item */ + case 464: #line 87 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 22728 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 465: /* opt_using: USING */ + case 465: #line 94 "third_party/libpg_query/grammar/statements/copy.y" - {} -#line 22734 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 466: /* opt_using: %empty */ + case 466: #line 95 "third_party/libpg_query/grammar/statements/copy.y" - {} -#line 22740 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 467: /* opt_as: AS */ + case 467: #line 99 "third_party/libpg_query/grammar/statements/copy.y" - {} -#line 22746 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 468: /* opt_as: %empty */ + case 468: #line 100 "third_party/libpg_query/grammar/statements/copy.y" - {} -#line 22752 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 469: /* opt_program: PROGRAM */ + case 469: #line 105 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.boolean) = true; } -#line 22758 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 470: /* opt_program: %empty */ + case 470: #line 106 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.boolean) = false; } -#line 22764 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 471: /* copy_options: copy_opt_list */ + case 471: #line 110 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.list) = (yyvsp[0].list); } -#line 22770 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 472: /* copy_options: '(' copy_generic_opt_list ')' */ + case 472: #line 111 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 22776 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 473: /* copy_generic_opt_arg: opt_boolean_or_string */ + case 473: #line 116 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); } -#line 22782 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 474: /* copy_generic_opt_arg: NumericOnly */ + case 474: #line 117 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) (yyvsp[0].value); } -#line 22788 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) (yyvsp[(1) - (1)].value); ;} break; - case 475: /* copy_generic_opt_arg: '*' */ + case 475: #line 118 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) makeNode(PGAStar); } -#line 22794 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) makeNode(PGAStar); ;} break; - case 476: /* copy_generic_opt_arg: '(' copy_generic_opt_arg_list ')' */ + case 476: #line 119 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) (yyvsp[-1].list); } -#line 22800 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) (yyvsp[(2) - (3)].list); ;} break; - case 477: /* copy_generic_opt_arg: struct_expr */ + case 477: #line 120 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) (yyvsp[0].node); } -#line 22806 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) (yyvsp[(1) - (1)].node); ;} break; - case 478: /* copy_generic_opt_arg: %empty */ + case 478: #line 121 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = NULL; } -#line 22812 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 479: /* copy_generic_opt_elem: ColLabel copy_generic_opt_arg */ + case 479: #line 127 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); - } -#line 22820 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); + ;} break; - case 480: /* opt_oids: WITH OIDS */ + case 480: #line 135 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("oids", (PGNode *)makeInteger(true), (yylsp[-1])); - } -#line 22828 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("oids", (PGNode *)makeInteger(true), (yylsp[(1) - (2)])); + ;} break; - case 481: /* opt_oids: %empty */ + case 481: #line 138 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.defelt) = NULL; } -#line 22834 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.defelt) = NULL; ;} break; - case 482: /* copy_opt_list: copy_opt_list copy_opt_item */ + case 482: #line 143 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].defelt)); } -#line 22840 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].defelt)); ;} break; - case 483: /* copy_opt_list: %empty */ + case 483: #line 144 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.list) = NIL; } -#line 22846 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 484: /* opt_binary: BINARY */ + case 484: #line 150 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("binary"), (yylsp[0])); - } -#line 22854 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("binary"), (yylsp[(1) - (1)])); + ;} break; - case 485: /* opt_binary: %empty */ + case 485: #line 153 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.defelt) = NULL; } -#line 22860 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.defelt) = NULL; ;} break; - case 486: /* copy_opt_item: BINARY */ + case 486: #line 159 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("binary"), (yylsp[0])); - } -#line 22868 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("binary"), (yylsp[(1) - (1)])); + ;} break; - case 487: /* copy_opt_item: OIDS */ + case 487: #line 163 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("oids", (PGNode *)makeInteger(true), (yylsp[0])); - } -#line 22876 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("oids", (PGNode *)makeInteger(true), (yylsp[(1) - (1)])); + ;} break; - case 488: /* copy_opt_item: FREEZE */ + case 488: #line 167 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("freeze", (PGNode *)makeInteger(true), (yylsp[0])); - } -#line 22884 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("freeze", (PGNode *)makeInteger(true), (yylsp[(1) - (1)])); + ;} break; - case 489: /* copy_opt_item: DELIMITER opt_as Sconst */ + case 489: #line 171 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("delimiter", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-2])); - } -#line 22892 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("delimiter", (PGNode *)makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); + ;} break; - case 490: /* copy_opt_item: NULL_P opt_as Sconst */ + case 490: #line 175 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("null", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-2])); - } -#line 22900 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("null", (PGNode *)makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); + ;} break; - case 491: /* copy_opt_item: CSV */ + case 491: #line 179 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("csv"), (yylsp[0])); - } -#line 22908 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("format", (PGNode *)makeString("csv"), (yylsp[(1) - (1)])); + ;} break; - case 492: /* copy_opt_item: HEADER_P */ + case 492: #line 183 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("header", (PGNode *)makeInteger(true), (yylsp[0])); - } -#line 22916 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("header", (PGNode *)makeInteger(true), (yylsp[(1) - (1)])); + ;} break; - case 493: /* copy_opt_item: QUOTE opt_as Sconst */ + case 493: #line 187 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("quote", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-2])); - } -#line 22924 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("quote", (PGNode *)makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); + ;} break; - case 494: /* copy_opt_item: ESCAPE opt_as Sconst */ + case 494: #line 191 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("escape", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-2])); - } -#line 22932 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("escape", (PGNode *)makeString((yyvsp[(3) - (3)].str)), (yylsp[(1) - (3)])); + ;} break; - case 495: /* copy_opt_item: FORCE QUOTE columnList */ + case 495: #line 195 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("force_quote", (PGNode *)(yyvsp[0].list), (yylsp[-2])); - } -#line 22940 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("force_quote", (PGNode *)(yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); + ;} break; - case 496: /* copy_opt_item: FORCE QUOTE '*' */ + case 496: #line 199 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("force_quote", (PGNode *)makeNode(PGAStar), (yylsp[-2])); - } -#line 22948 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("force_quote", (PGNode *)makeNode(PGAStar), (yylsp[(1) - (3)])); + ;} break; - case 497: /* copy_opt_item: PARTITION BY columnList */ + case 497: #line 203 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("partition_by", (PGNode *)(yyvsp[0].list), (yylsp[-2])); - } -#line 22956 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("partition_by", (PGNode *)(yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); + ;} break; - case 498: /* copy_opt_item: PARTITION BY '*' */ + case 498: #line 207 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("partition_by", (PGNode *)makeNode(PGAStar), (yylsp[-2])); - } -#line 22964 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("partition_by", (PGNode *)makeNode(PGAStar), (yylsp[(1) - (3)])); + ;} break; - case 499: /* copy_opt_item: FORCE NOT NULL_P columnList */ + case 499: #line 211 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("force_not_null", (PGNode *)(yyvsp[0].list), (yylsp[-3])); - } -#line 22972 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("force_not_null", (PGNode *)(yyvsp[(4) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 500: /* copy_opt_item: FORCE NULL_P columnList */ + case 500: #line 215 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("force_null", (PGNode *)(yyvsp[0].list), (yylsp[-2])); - } -#line 22980 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("force_null", (PGNode *)(yyvsp[(3) - (3)].list), (yylsp[(1) - (3)])); + ;} break; - case 501: /* copy_opt_item: ENCODING Sconst */ + case 501: #line 219 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.defelt) = makeDefElem("encoding", (PGNode *)makeString((yyvsp[0].str)), (yylsp[-1])); - } -#line 22988 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem("encoding", (PGNode *)makeString((yyvsp[(2) - (2)].str)), (yylsp[(1) - (2)])); + ;} break; - case 502: /* copy_generic_opt_arg_list_item: opt_boolean_or_string */ + case 502: #line 226 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); } -#line 22994 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 503: /* copy_file_name: Sconst */ + case 503: #line 231 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.str) = (yyvsp[0].str); } -#line 23000 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 504: /* copy_file_name: STDIN */ + case 504: #line 232 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.str) = NULL; } -#line 23006 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 505: /* copy_file_name: STDOUT */ + case 505: #line 233 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.str) = NULL; } -#line 23012 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 506: /* copy_file_name: IDENT '.' ColId */ + case 506: #line 234 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.str) = psprintf("%s.%s", (yyvsp[-2].str), (yyvsp[0].str)); } -#line 23018 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = psprintf("%s.%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)); ;} break; - case 507: /* copy_file_name: IDENT */ + case 507: #line 235 "third_party/libpg_query/grammar/statements/copy.y" - { (yyval.str) = (yyvsp[0].str); } -#line 23024 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 508: /* copy_generic_opt_list: copy_generic_opt_elem */ + case 508: #line 242 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.list) = list_make1((yyvsp[0].defelt)); - } -#line 23032 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); + ;} break; - case 509: /* copy_generic_opt_list: copy_generic_opt_list ',' copy_generic_opt_elem */ + case 509: #line 246 "third_party/libpg_query/grammar/statements/copy.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); - } -#line 23040 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); + ;} break; - case 512: /* select_with_parens: '(' select_no_parens ')' */ + case 512: #line 52 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 23046 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 513: /* select_with_parens: '(' select_with_parens ')' */ + case 513: #line 53 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 23052 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 514: /* select_with_parens: '(' VariableShowStmt ')' */ + case 514: #line 55 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[-1].node); - } -#line 23060 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = (yyvsp[(2) - (3)].node); + ;} break; - case 515: /* select_no_parens: simple_select */ + case 515: #line 72 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23066 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 516: /* select_no_parens: select_clause sort_clause */ + case 516: #line 74 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-1].node), (yyvsp[0].list), NIL, + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].list), NIL, NULL, NULL, NULL, yyscanner); - (yyval.node) = (yyvsp[-1].node); - } -#line 23077 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(1) - (2)].node); + ;} break; - case 517: /* select_no_parens: select_clause opt_sort_clause for_locking_clause opt_select_limit */ + case 517: #line 81 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[-1].list), - (PGNode*) list_nth((yyvsp[0].list), 0), (PGNode*) list_nth((yyvsp[0].list), 1), + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].list), (yyvsp[(3) - (4)].list), + (PGNode*) list_nth((yyvsp[(4) - (4)].list), 0), (PGNode*) list_nth((yyvsp[(4) - (4)].list), 1), NULL, yyscanner); - (yyval.node) = (yyvsp[-3].node); - } -#line 23089 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(1) - (4)].node); + ;} break; - case 518: /* select_no_parens: select_clause opt_sort_clause select_limit opt_for_locking_clause */ + case 518: #line 89 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[0].list), - (PGNode*) list_nth((yyvsp[-1].list), 0), (PGNode*) list_nth((yyvsp[-1].list), 1), + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].list), (yyvsp[(4) - (4)].list), + (PGNode*) list_nth((yyvsp[(3) - (4)].list), 0), (PGNode*) list_nth((yyvsp[(3) - (4)].list), 1), NULL, yyscanner); - (yyval.node) = (yyvsp[-3].node); - } -#line 23101 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(1) - (4)].node); + ;} break; - case 519: /* select_no_parens: with_clause select_clause */ + case 519: #line 97 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[0].node), NULL, NIL, + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(2) - (2)].node), NULL, NIL, NULL, NULL, - (yyvsp[-1].with), + (yyvsp[(1) - (2)].with), yyscanner); - (yyval.node) = (yyvsp[0].node); - } -#line 23113 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(2) - (2)].node); + ;} break; - case 520: /* select_no_parens: with_clause select_clause sort_clause */ + case 520: #line 105 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-1].node), (yyvsp[0].list), NIL, + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(2) - (3)].node), (yyvsp[(3) - (3)].list), NIL, NULL, NULL, - (yyvsp[-2].with), + (yyvsp[(1) - (3)].with), yyscanner); - (yyval.node) = (yyvsp[-1].node); - } -#line 23125 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(2) - (3)].node); + ;} break; - case 521: /* select_no_parens: with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit */ + case 521: #line 113 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[-1].list), - (PGNode*) list_nth((yyvsp[0].list), 0), (PGNode*) list_nth((yyvsp[0].list), 1), - (yyvsp[-4].with), + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(2) - (5)].node), (yyvsp[(3) - (5)].list), (yyvsp[(4) - (5)].list), + (PGNode*) list_nth((yyvsp[(5) - (5)].list), 0), (PGNode*) list_nth((yyvsp[(5) - (5)].list), 1), + (yyvsp[(1) - (5)].with), yyscanner); - (yyval.node) = (yyvsp[-3].node); - } -#line 23137 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(2) - (5)].node); + ;} break; - case 522: /* select_no_parens: with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause */ + case 522: #line 121 "third_party/libpg_query/grammar/statements/select.y" - { - insertSelectOptions((PGSelectStmt *) (yyvsp[-3].node), (yyvsp[-2].list), (yyvsp[0].list), - (PGNode*) list_nth((yyvsp[-1].list), 0), (PGNode*) list_nth((yyvsp[-1].list), 1), - (yyvsp[-4].with), + { + insertSelectOptions((PGSelectStmt *) (yyvsp[(2) - (5)].node), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list), + (PGNode*) list_nth((yyvsp[(4) - (5)].list), 0), (PGNode*) list_nth((yyvsp[(4) - (5)].list), 1), + (yyvsp[(1) - (5)].with), yyscanner); - (yyval.node) = (yyvsp[-3].node); - } -#line 23149 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (yyvsp[(2) - (5)].node); + ;} break; - case 523: /* select_clause: simple_select */ + case 523: #line 131 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23155 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 524: /* select_clause: select_with_parens */ + case 524: #line 132 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23161 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 525: /* opt_select: SELECT opt_all_clause opt_target_list_opt_comma */ + case 525: #line 160 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[0].list); - } -#line 23169 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = (yyvsp[(3) - (3)].list); + ;} break; - case 526: /* opt_select: %empty */ + case 526: #line 164 "third_party/libpg_query/grammar/statements/select.y" - { + { PGAStar *star = makeNode(PGAStar); (yyval.list) = list_make1(star); - } -#line 23178 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 527: /* simple_select: SELECT opt_all_clause opt_target_list_opt_comma into_clause from_clause where_clause group_clause having_clause window_clause qualify_clause sample_clause */ + case 527: #line 175 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSelectStmt *n = makeNode(PGSelectStmt); - n->targetList = (yyvsp[-8].list); - n->intoClause = (yyvsp[-7].into); - n->fromClause = (yyvsp[-6].list); - n->whereClause = (yyvsp[-5].node); - n->groupClause = (yyvsp[-4].list); - n->havingClause = (yyvsp[-3].node); - n->windowClause = (yyvsp[-2].list); - n->qualifyClause = (yyvsp[-1].node); - n->sampleOptions = (yyvsp[0].node); + n->targetList = (yyvsp[(3) - (11)].list); + n->intoClause = (yyvsp[(4) - (11)].into); + n->fromClause = (yyvsp[(5) - (11)].list); + n->whereClause = (yyvsp[(6) - (11)].node); + n->groupClause = (yyvsp[(7) - (11)].list); + n->havingClause = (yyvsp[(8) - (11)].node); + n->windowClause = (yyvsp[(9) - (11)].list); + n->qualifyClause = (yyvsp[(10) - (11)].node); + n->sampleOptions = (yyvsp[(11) - (11)].node); (yyval.node) = (PGNode *)n; - } -#line 23196 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 528: /* simple_select: SELECT distinct_clause target_list_opt_comma into_clause from_clause where_clause group_clause having_clause window_clause qualify_clause sample_clause */ + case 528: #line 191 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSelectStmt *n = makeNode(PGSelectStmt); - n->distinctClause = (yyvsp[-9].list); - n->targetList = (yyvsp[-8].list); - n->intoClause = (yyvsp[-7].into); - n->fromClause = (yyvsp[-6].list); - n->whereClause = (yyvsp[-5].node); - n->groupClause = (yyvsp[-4].list); - n->havingClause = (yyvsp[-3].node); - n->windowClause = (yyvsp[-2].list); - n->qualifyClause = (yyvsp[-1].node); - n->sampleOptions = (yyvsp[0].node); + n->distinctClause = (yyvsp[(2) - (11)].list); + n->targetList = (yyvsp[(3) - (11)].list); + n->intoClause = (yyvsp[(4) - (11)].into); + n->fromClause = (yyvsp[(5) - (11)].list); + n->whereClause = (yyvsp[(6) - (11)].node); + n->groupClause = (yyvsp[(7) - (11)].list); + n->havingClause = (yyvsp[(8) - (11)].node); + n->windowClause = (yyvsp[(9) - (11)].list); + n->qualifyClause = (yyvsp[(10) - (11)].node); + n->sampleOptions = (yyvsp[(11) - (11)].node); (yyval.node) = (PGNode *)n; - } -#line 23215 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 529: /* simple_select: FROM from_list opt_select into_clause where_clause group_clause having_clause window_clause qualify_clause sample_clause */ + case 529: #line 208 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSelectStmt *n = makeNode(PGSelectStmt); - n->targetList = (yyvsp[-7].list); - n->fromClause = (yyvsp[-8].list); - n->intoClause = (yyvsp[-6].into); - n->whereClause = (yyvsp[-5].node); - n->groupClause = (yyvsp[-4].list); - n->havingClause = (yyvsp[-3].node); - n->windowClause = (yyvsp[-2].list); - n->qualifyClause = (yyvsp[-1].node); - n->sampleOptions = (yyvsp[0].node); + n->targetList = (yyvsp[(3) - (10)].list); + n->fromClause = (yyvsp[(2) - (10)].list); + n->intoClause = (yyvsp[(4) - (10)].into); + n->whereClause = (yyvsp[(5) - (10)].node); + n->groupClause = (yyvsp[(6) - (10)].list); + n->havingClause = (yyvsp[(7) - (10)].node); + n->windowClause = (yyvsp[(8) - (10)].list); + n->qualifyClause = (yyvsp[(9) - (10)].node); + n->sampleOptions = (yyvsp[(10) - (10)].node); (yyval.node) = (PGNode *)n; - } -#line 23233 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 530: /* simple_select: FROM from_list SELECT distinct_clause target_list_opt_comma into_clause where_clause group_clause having_clause window_clause qualify_clause sample_clause */ + case 530: #line 225 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSelectStmt *n = makeNode(PGSelectStmt); - n->targetList = (yyvsp[-7].list); - n->distinctClause = (yyvsp[-8].list); - n->fromClause = (yyvsp[-10].list); - n->intoClause = (yyvsp[-6].into); - n->whereClause = (yyvsp[-5].node); - n->groupClause = (yyvsp[-4].list); - n->havingClause = (yyvsp[-3].node); - n->windowClause = (yyvsp[-2].list); - n->qualifyClause = (yyvsp[-1].node); - n->sampleOptions = (yyvsp[0].node); + n->targetList = (yyvsp[(5) - (12)].list); + n->distinctClause = (yyvsp[(4) - (12)].list); + n->fromClause = (yyvsp[(2) - (12)].list); + n->intoClause = (yyvsp[(6) - (12)].into); + n->whereClause = (yyvsp[(7) - (12)].node); + n->groupClause = (yyvsp[(8) - (12)].list); + n->havingClause = (yyvsp[(9) - (12)].node); + n->windowClause = (yyvsp[(10) - (12)].list); + n->qualifyClause = (yyvsp[(11) - (12)].node); + n->sampleOptions = (yyvsp[(12) - (12)].node); (yyval.node) = (PGNode *)n; - } -#line 23252 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 531: /* simple_select: values_clause_opt_comma */ + case 531: #line 239 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23258 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 532: /* simple_select: TABLE relation_expr */ + case 532: #line 241 "third_party/libpg_query/grammar/statements/select.y" - { + { /* same as SELECT * FROM relation_expr */ PGColumnRef *cr = makeNode(PGColumnRef); PGResTarget *rt = makeNode(PGResTarget); @@ -23274,1973 +23929,1749 @@ YYLTYPE yylloc = yyloc_default; rt->location = -1; n->targetList = list_make1(rt); - n->fromClause = list_make1((yyvsp[0].range)); + n->fromClause = list_make1((yyvsp[(2) - (2)].range)); (yyval.node) = (PGNode *)n; - } -#line 23281 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 533: /* simple_select: select_clause UNION all_or_distinct by_name select_clause */ + case 533: #line 260 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSetOp(PG_SETOP_UNION_BY_NAME, (yyvsp[-2].boolean), (yyvsp[-4].node), (yyvsp[0].node)); - } -#line 23289 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSetOp(PG_SETOP_UNION_BY_NAME, (yyvsp[(3) - (5)].boolean), (yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node)); + ;} break; - case 534: /* simple_select: select_clause UNION all_or_distinct select_clause */ + case 534: #line 264 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSetOp(PG_SETOP_UNION, (yyvsp[-1].boolean), (yyvsp[-3].node), (yyvsp[0].node)); - } -#line 23297 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSetOp(PG_SETOP_UNION, (yyvsp[(3) - (4)].boolean), (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); + ;} break; - case 535: /* simple_select: select_clause INTERSECT all_or_distinct select_clause */ + case 535: #line 268 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSetOp(PG_SETOP_INTERSECT, (yyvsp[-1].boolean), (yyvsp[-3].node), (yyvsp[0].node)); - } -#line 23305 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSetOp(PG_SETOP_INTERSECT, (yyvsp[(3) - (4)].boolean), (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); + ;} break; - case 536: /* simple_select: select_clause EXCEPT all_or_distinct select_clause */ + case 536: #line 272 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSetOp(PG_SETOP_EXCEPT, (yyvsp[-1].boolean), (yyvsp[-3].node), (yyvsp[0].node)); - } -#line 23313 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSetOp(PG_SETOP_EXCEPT, (yyvsp[(3) - (4)].boolean), (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); + ;} break; - case 537: /* simple_select: pivot_keyword table_ref USING target_list_opt_comma */ + case 537: #line 276 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-2].node); - n->aggrs = (yyvsp[0].list); + n->source = (yyvsp[(2) - (4)].node); + n->aggrs = (yyvsp[(4) - (4)].list); + n->location = (yylsp[(1) - (4)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23326 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 538: /* simple_select: pivot_keyword table_ref USING target_list_opt_comma GROUP_P BY name_list_opt_comma_opt_bracket */ -#line 285 "third_party/libpg_query/grammar/statements/select.y" - { + case 538: +#line 286 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-5].node); - n->aggrs = (yyvsp[-3].list); - n->groups = (yyvsp[0].list); + n->source = (yyvsp[(2) - (7)].node); + n->aggrs = (yyvsp[(4) - (7)].list); + n->groups = (yyvsp[(7) - (7)].list); + n->location = (yylsp[(1) - (7)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23340 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 539: /* simple_select: pivot_keyword table_ref GROUP_P BY name_list_opt_comma_opt_bracket */ -#line 295 "third_party/libpg_query/grammar/statements/select.y" - { + case 539: +#line 297 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-3].node); - n->groups = (yyvsp[0].list); + n->source = (yyvsp[(2) - (5)].node); + n->groups = (yyvsp[(5) - (5)].list); + n->location = (yylsp[(1) - (5)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23353 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 540: /* simple_select: pivot_keyword table_ref ON pivot_column_list */ -#line 304 "third_party/libpg_query/grammar/statements/select.y" - { + case 540: +#line 307 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-2].node); - n->columns = (yyvsp[0].list); + n->source = (yyvsp[(2) - (4)].node); + n->columns = (yyvsp[(4) - (4)].list); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23366 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 541: /* simple_select: pivot_keyword table_ref ON pivot_column_list GROUP_P BY name_list_opt_comma_opt_bracket */ -#line 313 "third_party/libpg_query/grammar/statements/select.y" - { + case 541: +#line 316 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-5].node); - n->columns = (yyvsp[-3].list); - n->groups = (yyvsp[0].list); + n->source = (yyvsp[(2) - (7)].node); + n->columns = (yyvsp[(4) - (7)].list); + n->groups = (yyvsp[(7) - (7)].list); + n->location = (yylsp[(1) - (7)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23380 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 542: /* simple_select: pivot_keyword table_ref ON pivot_column_list USING target_list_opt_comma */ -#line 323 "third_party/libpg_query/grammar/statements/select.y" - { + case 542: +#line 327 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-4].node); - n->columns = (yyvsp[-2].list); - n->aggrs = (yyvsp[0].list); + n->source = (yyvsp[(2) - (6)].node); + n->columns = (yyvsp[(4) - (6)].list); + n->aggrs = (yyvsp[(6) - (6)].list); + n->location = (yylsp[(1) - (6)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23394 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 543: /* simple_select: pivot_keyword table_ref ON pivot_column_list USING target_list_opt_comma GROUP_P BY name_list_opt_comma_opt_bracket */ -#line 333 "third_party/libpg_query/grammar/statements/select.y" - { + case 543: +#line 338 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-7].node); - n->columns = (yyvsp[-5].list); - n->aggrs = (yyvsp[-3].list); - n->groups = (yyvsp[0].list); + n->source = (yyvsp[(2) - (9)].node); + n->columns = (yyvsp[(4) - (9)].list); + n->aggrs = (yyvsp[(6) - (9)].list); + n->groups = (yyvsp[(9) - (9)].list); + n->location = (yylsp[(1) - (9)]); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23409 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 544: /* simple_select: unpivot_keyword table_ref ON target_list_opt_comma INTO NAME_P name value_or_values name_list_opt_comma_opt_bracket */ -#line 344 "third_party/libpg_query/grammar/statements/select.y" - { + case 544: +#line 350 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-7].node); - n->unpivots = (yyvsp[0].list); + n->source = (yyvsp[(2) - (9)].node); + n->unpivots = (yyvsp[(9) - (9)].list); + n->location = (yylsp[(1) - (9)]); PGPivot *piv = makeNode(PGPivot); - piv->unpivot_columns = list_make1(makeString((yyvsp[-2].str))); - piv->pivot_value = (yyvsp[-5].list); + piv->unpivot_columns = list_make1(makeString((yyvsp[(7) - (9)].str))); + piv->pivot_value = (yyvsp[(4) - (9)].list); n->columns = list_make1(piv); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23427 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 545: /* simple_select: unpivot_keyword table_ref ON target_list_opt_comma */ -#line 358 "third_party/libpg_query/grammar/statements/select.y" - { + case 545: +#line 365 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *res = makeNode(PGSelectStmt); PGPivotStmt *n = makeNode(PGPivotStmt); - n->source = (yyvsp[-2].node); + n->source = (yyvsp[(2) - (4)].node); n->unpivots = list_make1(makeString("value")); + n->location = (yylsp[(1) - (4)]); PGPivot *piv = makeNode(PGPivot); piv->unpivot_columns = list_make1(makeString("name")); - piv->pivot_value = (yyvsp[0].list); + piv->pivot_value = (yyvsp[(4) - (4)].list); n->columns = list_make1(piv); res->pivot = n; (yyval.node) = (PGNode *)res; - } -#line 23445 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 552: /* pivot_column_entry: b_expr */ -#line 387 "third_party/libpg_query/grammar/statements/select.y" - { + case 552: +#line 395 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = list_make1((yyvsp[0].node)); + n->pivot_columns = list_make1((yyvsp[(1) - (1)].node)); (yyval.node) = (PGNode *) n; - } -#line 23455 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 553: /* pivot_column_entry: b_expr IN_P '(' select_no_parens ')' */ -#line 393 "third_party/libpg_query/grammar/statements/select.y" - { + case 553: +#line 401 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = list_make1((yyvsp[-4].node)); - n->subquery = (yyvsp[-1].node); + n->pivot_columns = list_make1((yyvsp[(1) - (5)].node)); + n->subquery = (yyvsp[(4) - (5)].node); (yyval.node) = (PGNode *) n; - } -#line 23466 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 554: /* pivot_column_entry: single_pivot_value */ -#line 399 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23472 "third_party/libpg_query/grammar/grammar_out.cpp" + case 554: +#line 407 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 555: /* pivot_column_list_internal: pivot_column_entry */ -#line 403 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 23478 "third_party/libpg_query/grammar/grammar_out.cpp" + case 555: +#line 411 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 556: /* pivot_column_list_internal: pivot_column_list_internal ',' pivot_column_entry */ -#line 404 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 23484 "third_party/libpg_query/grammar/grammar_out.cpp" + case 556: +#line 412 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 557: /* pivot_column_list: pivot_column_list_internal */ -#line 408 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 23490 "third_party/libpg_query/grammar/grammar_out.cpp" + case 557: +#line 416 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 558: /* pivot_column_list: pivot_column_list_internal ',' */ -#line 409 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 23496 "third_party/libpg_query/grammar/grammar_out.cpp" + case 558: +#line 417 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 559: /* with_clause: WITH cte_list */ -#line 424 "third_party/libpg_query/grammar/statements/select.y" - { + case 559: +#line 432 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.with) = makeNode(PGWithClause); - (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->ctes = (yyvsp[(2) - (2)].list); (yyval.with)->recursive = false; - (yyval.with)->location = (yylsp[-1]); - } -#line 23507 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.with)->location = (yylsp[(1) - (2)]); + ;} break; - case 560: /* with_clause: WITH_LA cte_list */ -#line 431 "third_party/libpg_query/grammar/statements/select.y" - { + case 560: +#line 439 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.with) = makeNode(PGWithClause); - (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->ctes = (yyvsp[(2) - (2)].list); (yyval.with)->recursive = false; - (yyval.with)->location = (yylsp[-1]); - } -#line 23518 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.with)->location = (yylsp[(1) - (2)]); + ;} break; - case 561: /* with_clause: WITH RECURSIVE cte_list */ -#line 438 "third_party/libpg_query/grammar/statements/select.y" - { + case 561: +#line 446 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.with) = makeNode(PGWithClause); - (yyval.with)->ctes = (yyvsp[0].list); + (yyval.with)->ctes = (yyvsp[(3) - (3)].list); (yyval.with)->recursive = true; - (yyval.with)->location = (yylsp[-2]); - } -#line 23529 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.with)->location = (yylsp[(1) - (3)]); + ;} break; - case 562: /* cte_list: common_table_expr */ -#line 447 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 23535 "third_party/libpg_query/grammar/grammar_out.cpp" + case 562: +#line 455 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 563: /* cte_list: cte_list ',' common_table_expr */ -#line 448 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 23541 "third_party/libpg_query/grammar/grammar_out.cpp" + case 563: +#line 456 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 564: /* common_table_expr: name opt_name_list AS opt_materialized '(' PreparableStmt ')' */ -#line 452 "third_party/libpg_query/grammar/statements/select.y" - { + case 564: +#line 460 "third_party/libpg_query/grammar/statements/select.y" + { PGCommonTableExpr *n = makeNode(PGCommonTableExpr); - n->ctename = (yyvsp[-6].str); - n->aliascolnames = (yyvsp[-5].list); - n->ctematerialized = (yyvsp[-3].ctematerialize); - n->ctequery = (yyvsp[-1].node); - n->location = (yylsp[-6]); + n->ctename = (yyvsp[(1) - (7)].str); + n->aliascolnames = (yyvsp[(2) - (7)].list); + n->ctematerialized = (yyvsp[(4) - (7)].ctematerialize); + n->ctequery = (yyvsp[(6) - (7)].node); + n->location = (yylsp[(1) - (7)]); (yyval.node) = (PGNode *) n; - } -#line 23555 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 565: /* opt_materialized: MATERIALIZED */ -#line 464 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ctematerialize) = PGCTEMaterializeAlways; } -#line 23561 "third_party/libpg_query/grammar/grammar_out.cpp" + case 565: +#line 472 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ctematerialize) = PGCTEMaterializeAlways; ;} break; - case 566: /* opt_materialized: NOT MATERIALIZED */ -#line 465 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ctematerialize) = PGCTEMaterializeNever; } -#line 23567 "third_party/libpg_query/grammar/grammar_out.cpp" + case 566: +#line 473 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ctematerialize) = PGCTEMaterializeNever; ;} break; - case 567: /* opt_materialized: %empty */ -#line 466 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ctematerialize) = PGCTEMaterializeDefault; } -#line 23573 "third_party/libpg_query/grammar/grammar_out.cpp" + case 567: +#line 474 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ctematerialize) = PGCTEMaterializeDefault; ;} break; - case 568: /* into_clause: INTO OptTempTableName */ -#line 471 "third_party/libpg_query/grammar/statements/select.y" - { + case 568: +#line 479 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.into) = makeNode(PGIntoClause); - (yyval.into)->rel = (yyvsp[0].range); + (yyval.into)->rel = (yyvsp[(2) - (2)].range); (yyval.into)->colNames = NIL; (yyval.into)->options = NIL; (yyval.into)->onCommit = PG_ONCOMMIT_NOOP; (yyval.into)->viewQuery = NULL; (yyval.into)->skipData = false; - } -#line 23587 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 569: /* into_clause: %empty */ -#line 481 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.into) = NULL; } -#line 23593 "third_party/libpg_query/grammar/grammar_out.cpp" + case 569: +#line 489 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.into) = NULL; ;} break; - case 570: /* OptTempTableName: TEMPORARY opt_table qualified_name */ -#line 490 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 570: +#line 498 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23602 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 571: /* OptTempTableName: TEMP opt_table qualified_name */ -#line 495 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 571: +#line 503 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23611 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 572: /* OptTempTableName: LOCAL TEMPORARY opt_table qualified_name */ -#line 500 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 572: +#line 508 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23620 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 573: /* OptTempTableName: LOCAL TEMP opt_table qualified_name */ -#line 505 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 573: +#line 513 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23629 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 574: /* OptTempTableName: GLOBAL TEMPORARY opt_table qualified_name */ -#line 510 "third_party/libpg_query/grammar/statements/select.y" - { + case 574: +#line 518 "third_party/libpg_query/grammar/statements/select.y" + { ereport(PGWARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), - parser_errposition((yylsp[-3])))); - (yyval.range) = (yyvsp[0].range); + parser_errposition((yylsp[(1) - (4)])))); + (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23641 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 575: /* OptTempTableName: GLOBAL TEMP opt_table qualified_name */ -#line 518 "third_party/libpg_query/grammar/statements/select.y" - { + case 575: +#line 526 "third_party/libpg_query/grammar/statements/select.y" + { ereport(PGWARNING, (errmsg("GLOBAL is deprecated in temporary table creation"), - parser_errposition((yylsp[-3])))); - (yyval.range) = (yyvsp[0].range); + parser_errposition((yylsp[(1) - (4)])))); + (yyval.range) = (yyvsp[(4) - (4)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_TEMP; - } -#line 23653 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 576: /* OptTempTableName: UNLOGGED opt_table qualified_name */ -#line 526 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 576: +#line 534 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(3) - (3)].range); (yyval.range)->relpersistence = PG_RELPERSISTENCE_UNLOGGED; - } -#line 23662 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 577: /* OptTempTableName: TABLE qualified_name */ -#line 531 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 577: +#line 539 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(2) - (2)].range); (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; - } -#line 23671 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 578: /* OptTempTableName: qualified_name */ -#line 536 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.range) = (yyvsp[0].range); + case 578: +#line 544 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.range) = (yyvsp[(1) - (1)].range); (yyval.range)->relpersistence = RELPERSISTENCE_PERMANENT; - } -#line 23680 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 579: /* opt_table: TABLE */ -#line 542 "third_party/libpg_query/grammar/statements/select.y" - {} -#line 23686 "third_party/libpg_query/grammar/grammar_out.cpp" + case 579: +#line 550 "third_party/libpg_query/grammar/statements/select.y" + {;} break; - case 580: /* opt_table: %empty */ -#line 543 "third_party/libpg_query/grammar/statements/select.y" - {} -#line 23692 "third_party/libpg_query/grammar/grammar_out.cpp" + case 580: +#line 551 "third_party/libpg_query/grammar/statements/select.y" + {;} break; - case 581: /* all_or_distinct: ALL */ -#line 547 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 23698 "third_party/libpg_query/grammar/grammar_out.cpp" + case 581: +#line 555 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 582: /* all_or_distinct: DISTINCT */ -#line 548 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 23704 "third_party/libpg_query/grammar/grammar_out.cpp" + case 582: +#line 556 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 583: /* all_or_distinct: %empty */ -#line 549 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 23710 "third_party/libpg_query/grammar/grammar_out.cpp" + case 583: +#line 557 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 584: /* by_name: BY NAME_P */ -#line 553 "third_party/libpg_query/grammar/statements/select.y" - { } -#line 23716 "third_party/libpg_query/grammar/grammar_out.cpp" + case 584: +#line 561 "third_party/libpg_query/grammar/statements/select.y" + { ;} break; - case 585: /* distinct_clause: DISTINCT */ -#line 560 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(NIL); } -#line 23722 "third_party/libpg_query/grammar/grammar_out.cpp" + case 585: +#line 568 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(NIL); ;} break; - case 586: /* distinct_clause: DISTINCT ON '(' expr_list_opt_comma ')' */ -#line 561 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 23728 "third_party/libpg_query/grammar/grammar_out.cpp" + case 586: +#line 569 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(4) - (5)].list); ;} break; - case 587: /* opt_all_clause: ALL */ -#line 565 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL;} -#line 23734 "third_party/libpg_query/grammar/grammar_out.cpp" + case 587: +#line 573 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL;;} break; - case 588: /* opt_all_clause: %empty */ -#line 566 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 23740 "third_party/libpg_query/grammar/grammar_out.cpp" + case 588: +#line 574 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 589: /* opt_ignore_nulls: IGNORE_P NULLS_P */ -#line 570 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true;} -#line 23746 "third_party/libpg_query/grammar/grammar_out.cpp" + case 589: +#line 578 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true;;} break; - case 590: /* opt_ignore_nulls: RESPECT_P NULLS_P */ -#line 571 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false;} -#line 23752 "third_party/libpg_query/grammar/grammar_out.cpp" + case 590: +#line 579 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false;;} break; - case 591: /* opt_ignore_nulls: %empty */ -#line 572 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 23758 "third_party/libpg_query/grammar/grammar_out.cpp" + case 591: +#line 580 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 592: /* opt_sort_clause: sort_clause */ -#line 576 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list);} -#line 23764 "third_party/libpg_query/grammar/grammar_out.cpp" + case 592: +#line 584 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list);;} break; - case 593: /* opt_sort_clause: %empty */ -#line 577 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 23770 "third_party/libpg_query/grammar/grammar_out.cpp" + case 593: +#line 585 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 594: /* sort_clause: ORDER BY sortby_list */ -#line 581 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 23776 "third_party/libpg_query/grammar/grammar_out.cpp" + case 594: +#line 589 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 595: /* sort_clause: ORDER BY ALL opt_asc_desc opt_nulls_order */ -#line 583 "third_party/libpg_query/grammar/statements/select.y" - { + case 595: +#line 591 "third_party/libpg_query/grammar/statements/select.y" + { PGSortBy *sort = makeNode(PGSortBy); PGAStar *star = makeNode(PGAStar); star->columns = true; - star->location = (yylsp[-2]); + star->location = (yylsp[(3) - (5)]); sort->node = (PGNode *) star; - sort->sortby_dir = (yyvsp[-1].sortorder); - sort->sortby_nulls = (yyvsp[0].nullorder); + sort->sortby_dir = (yyvsp[(4) - (5)].sortorder); + sort->sortby_nulls = (yyvsp[(5) - (5)].nullorder); sort->useOp = NIL; sort->location = -1; /* no operator */ (yyval.list) = list_make1(sort); - } -#line 23793 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 596: /* sortby_list: sortby */ -#line 598 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].sortby)); } -#line 23799 "third_party/libpg_query/grammar/grammar_out.cpp" + case 596: +#line 606 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].sortby)); ;} break; - case 597: /* sortby_list: sortby_list ',' sortby */ -#line 599 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].sortby)); } -#line 23805 "third_party/libpg_query/grammar/grammar_out.cpp" + case 597: +#line 607 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].sortby)); ;} break; - case 598: /* sortby: a_expr USING qual_all_Op opt_nulls_order */ -#line 603 "third_party/libpg_query/grammar/statements/select.y" - { + case 598: +#line 611 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.sortby) = makeNode(PGSortBy); - (yyval.sortby)->node = (yyvsp[-3].node); + (yyval.sortby)->node = (yyvsp[(1) - (4)].node); (yyval.sortby)->sortby_dir = SORTBY_USING; - (yyval.sortby)->sortby_nulls = (yyvsp[0].nullorder); - (yyval.sortby)->useOp = (yyvsp[-1].list); - (yyval.sortby)->location = (yylsp[-1]); - } -#line 23818 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.sortby)->sortby_nulls = (yyvsp[(4) - (4)].nullorder); + (yyval.sortby)->useOp = (yyvsp[(3) - (4)].list); + (yyval.sortby)->location = (yylsp[(3) - (4)]); + ;} break; - case 599: /* sortby: a_expr opt_asc_desc opt_nulls_order */ -#line 612 "third_party/libpg_query/grammar/statements/select.y" - { + case 599: +#line 620 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.sortby) = makeNode(PGSortBy); - (yyval.sortby)->node = (yyvsp[-2].node); - (yyval.sortby)->sortby_dir = (yyvsp[-1].sortorder); - (yyval.sortby)->sortby_nulls = (yyvsp[0].nullorder); + (yyval.sortby)->node = (yyvsp[(1) - (3)].node); + (yyval.sortby)->sortby_dir = (yyvsp[(2) - (3)].sortorder); + (yyval.sortby)->sortby_nulls = (yyvsp[(3) - (3)].nullorder); (yyval.sortby)->useOp = NIL; (yyval.sortby)->location = -1; /* no operator */ - } -#line 23831 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 600: /* opt_asc_desc: ASC_P */ -#line 622 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.sortorder) = PG_SORTBY_ASC; } -#line 23837 "third_party/libpg_query/grammar/grammar_out.cpp" + case 600: +#line 630 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.sortorder) = PG_SORTBY_ASC; ;} break; - case 601: /* opt_asc_desc: DESC_P */ -#line 623 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.sortorder) = PG_SORTBY_DESC; } -#line 23843 "third_party/libpg_query/grammar/grammar_out.cpp" + case 601: +#line 631 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.sortorder) = PG_SORTBY_DESC; ;} break; - case 602: /* opt_asc_desc: %empty */ -#line 624 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.sortorder) = PG_SORTBY_DEFAULT; } -#line 23849 "third_party/libpg_query/grammar/grammar_out.cpp" + case 602: +#line 632 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.sortorder) = PG_SORTBY_DEFAULT; ;} break; - case 603: /* opt_nulls_order: NULLS_LA FIRST_P */ -#line 627 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.nullorder) = PG_SORTBY_NULLS_FIRST; } -#line 23855 "third_party/libpg_query/grammar/grammar_out.cpp" + case 603: +#line 635 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.nullorder) = PG_SORTBY_NULLS_FIRST; ;} break; - case 604: /* opt_nulls_order: NULLS_LA LAST_P */ -#line 628 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.nullorder) = PG_SORTBY_NULLS_LAST; } -#line 23861 "third_party/libpg_query/grammar/grammar_out.cpp" + case 604: +#line 636 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.nullorder) = PG_SORTBY_NULLS_LAST; ;} break; - case 605: /* opt_nulls_order: %empty */ -#line 629 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.nullorder) = PG_SORTBY_NULLS_DEFAULT; } -#line 23867 "third_party/libpg_query/grammar/grammar_out.cpp" + case 605: +#line 637 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.nullorder) = PG_SORTBY_NULLS_DEFAULT; ;} break; - case 606: /* select_limit: limit_clause offset_clause */ -#line 633 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[0].node), (yyvsp[-1].node)); } -#line 23873 "third_party/libpg_query/grammar/grammar_out.cpp" + case 606: +#line 641 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(2) - (2)].node), (yyvsp[(1) - (2)].node)); ;} break; - case 607: /* select_limit: offset_clause limit_clause */ -#line 634 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[-1].node), (yyvsp[0].node)); } -#line 23879 "third_party/libpg_query/grammar/grammar_out.cpp" + case 607: +#line 642 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); ;} break; - case 608: /* select_limit: limit_clause */ -#line 635 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2(NULL, (yyvsp[0].node)); } -#line 23885 "third_party/libpg_query/grammar/grammar_out.cpp" + case 608: +#line 643 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2(NULL, (yyvsp[(1) - (1)].node)); ;} break; - case 609: /* select_limit: offset_clause */ -#line 636 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[0].node), NULL); } -#line 23891 "third_party/libpg_query/grammar/grammar_out.cpp" + case 609: +#line 644 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(1) - (1)].node), NULL); ;} break; - case 610: /* opt_select_limit: select_limit */ -#line 640 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 23897 "third_party/libpg_query/grammar/grammar_out.cpp" + case 610: +#line 648 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 611: /* opt_select_limit: %empty */ -#line 641 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2(NULL,NULL); } -#line 23903 "third_party/libpg_query/grammar/grammar_out.cpp" + case 611: +#line 649 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2(NULL,NULL); ;} break; - case 612: /* limit_clause: LIMIT select_limit_value */ -#line 646 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23909 "third_party/libpg_query/grammar/grammar_out.cpp" + case 612: +#line 654 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 613: /* limit_clause: LIMIT select_limit_value ',' select_offset_value */ -#line 648 "third_party/libpg_query/grammar/statements/select.y" - { + case 613: +#line 656 "third_party/libpg_query/grammar/statements/select.y" + { /* Disabled because it was too confusing, bjm 2002-02-18 */ ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("LIMIT #,# syntax is not supported"), errhint("Use separate LIMIT and OFFSET clauses."), - parser_errposition((yylsp[-3])))); - } -#line 23922 "third_party/libpg_query/grammar/grammar_out.cpp" + parser_errposition((yylsp[(1) - (4)])))); + ;} break; - case 614: /* limit_clause: FETCH first_or_next select_fetch_first_value row_or_rows ONLY */ -#line 664 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-2].node); } -#line 23928 "third_party/libpg_query/grammar/grammar_out.cpp" + case 614: +#line 672 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(3) - (5)].node); ;} break; - case 615: /* limit_clause: FETCH first_or_next row_or_rows ONLY */ -#line 666 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeIntConst(1, -1); } -#line 23934 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 616: /* offset_clause: OFFSET select_offset_value */ -#line 671 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 23940 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 617: /* offset_clause: OFFSET select_fetch_first_value row_or_rows */ + case 615: #line 674 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 23946 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = makeIntConst(1, -1); ;} break; - case 618: /* sample_count: FCONST '%' */ -#line 682 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeFloat((yyvsp[-1].str)), true); - } -#line 23954 "third_party/libpg_query/grammar/grammar_out.cpp" + case 616: +#line 679 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 619: /* sample_count: ICONST '%' */ -#line 686 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeInteger((yyvsp[-1].ival)), true); - } -#line 23962 "third_party/libpg_query/grammar/grammar_out.cpp" + case 617: +#line 682 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (3)].node); ;} break; - case 620: /* sample_count: FCONST PERCENT */ + case 618: #line 690 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeFloat((yyvsp[-1].str)), true); - } -#line 23970 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSampleSize(makeFloat((yyvsp[(1) - (2)].str)), true); + ;} break; - case 621: /* sample_count: ICONST PERCENT */ + case 619: #line 694 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeInteger((yyvsp[-1].ival)), true); - } -#line 23978 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSampleSize(makeInteger((yyvsp[(1) - (2)].ival)), true); + ;} break; - case 622: /* sample_count: ICONST */ + case 620: #line 698 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeInteger((yyvsp[0].ival)), false); - } -#line 23986 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSampleSize(makeFloat((yyvsp[(1) - (2)].str)), true); + ;} break; - case 623: /* sample_count: ICONST ROWS */ + case 621: #line 702 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleSize(makeInteger((yyvsp[-1].ival)), false); - } -#line 23994 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSampleSize(makeInteger((yyvsp[(1) - (2)].ival)), true); + ;} break; - case 624: /* sample_clause: USING SAMPLE tablesample_entry */ -#line 709 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 24002 "third_party/libpg_query/grammar/grammar_out.cpp" + case 622: +#line 706 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeSampleSize(makeInteger((yyvsp[(1) - (1)].ival)), false); + ;} break; - case 625: /* sample_clause: %empty */ -#line 713 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24008 "third_party/libpg_query/grammar/grammar_out.cpp" + case 623: +#line 710 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeSampleSize(makeInteger((yyvsp[(1) - (2)].ival)), false); + ;} break; - case 626: /* opt_sample_func: ColId */ -#line 720 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 24014 "third_party/libpg_query/grammar/grammar_out.cpp" + case 624: +#line 717 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(3) - (3)].node); + ;} break; - case 627: /* opt_sample_func: %empty */ + case 625: #line 721 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = NULL; } -#line 24020 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 628: /* tablesample_entry: opt_sample_func '(' sample_count ')' opt_repeatable_clause */ -#line 726 "third_party/libpg_query/grammar/statements/select.y" - { - int seed = (yyvsp[0].ival); - (yyval.node) = makeSampleOptions((yyvsp[-2].node), (yyvsp[-4].str), &seed, (yylsp[-4])); - } -#line 24029 "third_party/libpg_query/grammar/grammar_out.cpp" + case 626: +#line 728 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 629: /* tablesample_entry: sample_count */ -#line 731 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleOptions((yyvsp[0].node), NULL, NULL, (yylsp[0])); - } -#line 24037 "third_party/libpg_query/grammar/grammar_out.cpp" + case 627: +#line 729 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = NULL; ;} break; - case 630: /* tablesample_entry: sample_count '(' ColId ')' */ -#line 735 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeSampleOptions((yyvsp[-3].node), (yyvsp[-1].str), NULL, (yylsp[-3])); - } -#line 24045 "third_party/libpg_query/grammar/grammar_out.cpp" + case 628: +#line 734 "third_party/libpg_query/grammar/statements/select.y" + { + int seed = (yyvsp[(5) - (5)].ival); + (yyval.node) = makeSampleOptions((yyvsp[(3) - (5)].node), (yyvsp[(1) - (5)].str), &seed, (yylsp[(1) - (5)])); + ;} break; - case 631: /* tablesample_entry: sample_count '(' ColId ',' ICONST ')' */ + case 629: #line 739 "third_party/libpg_query/grammar/statements/select.y" - { - int seed = (yyvsp[-1].ival); - (yyval.node) = makeSampleOptions((yyvsp[-5].node), (yyvsp[-3].str), &seed, (yylsp[-5])); - } -#line 24054 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeSampleOptions((yyvsp[(1) - (1)].node), NULL, NULL, (yylsp[(1) - (1)])); + ;} break; - case 632: /* tablesample_clause: TABLESAMPLE tablesample_entry */ + case 630: +#line 743 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeSampleOptions((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].str), NULL, (yylsp[(1) - (4)])); + ;} + break; + + case 631: #line 747 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 24062 "third_party/libpg_query/grammar/grammar_out.cpp" + { + int seed = (yyvsp[(5) - (6)].ival); + (yyval.node) = makeSampleOptions((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].str), &seed, (yylsp[(1) - (6)])); + ;} break; - case 633: /* opt_tablesample_clause: tablesample_clause */ -#line 753 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24068 "third_party/libpg_query/grammar/grammar_out.cpp" + case 632: +#line 755 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(2) - (2)].node); + ;} + break; + + case 633: +#line 761 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 634: /* opt_tablesample_clause: %empty */ -#line 754 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24074 "third_party/libpg_query/grammar/grammar_out.cpp" + case 634: +#line 762 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 635: /* opt_repeatable_clause: REPEATABLE '(' ICONST ')' */ -#line 759 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = (yyvsp[-1].ival); } -#line 24080 "third_party/libpg_query/grammar/grammar_out.cpp" + case 635: +#line 767 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = (yyvsp[(3) - (4)].ival); ;} break; - case 636: /* opt_repeatable_clause: %empty */ -#line 760 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = -1; } -#line 24086 "third_party/libpg_query/grammar/grammar_out.cpp" + case 636: +#line 768 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = -1; ;} break; - case 637: /* select_limit_value: a_expr */ -#line 764 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24092 "third_party/libpg_query/grammar/grammar_out.cpp" + case 637: +#line 772 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 638: /* select_limit_value: ALL */ -#line 766 "third_party/libpg_query/grammar/statements/select.y" - { + case 638: +#line 774 "third_party/libpg_query/grammar/statements/select.y" + { /* LIMIT ALL is represented as a NULL constant */ - (yyval.node) = makeNullAConst((yylsp[0])); - } -#line 24101 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = makeNullAConst((yylsp[(1) - (1)])); + ;} break; - case 639: /* select_limit_value: a_expr '%' */ -#line 771 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeLimitPercent((yyvsp[-1].node)); } -#line 24107 "third_party/libpg_query/grammar/grammar_out.cpp" + case 639: +#line 779 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeLimitPercent((yyvsp[(1) - (2)].node)); ;} break; - case 640: /* select_limit_value: FCONST PERCENT */ -#line 773 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeLimitPercent(makeFloatConst((yyvsp[-1].str),(yylsp[-1]))); } -#line 24113 "third_party/libpg_query/grammar/grammar_out.cpp" + case 640: +#line 781 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeLimitPercent(makeFloatConst((yyvsp[(1) - (2)].str),(yylsp[(1) - (2)]))); ;} break; - case 641: /* select_limit_value: ICONST PERCENT */ -#line 775 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeLimitPercent(makeIntConst((yyvsp[-1].ival),(yylsp[-1]))); } -#line 24119 "third_party/libpg_query/grammar/grammar_out.cpp" + case 641: +#line 783 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeLimitPercent(makeIntConst((yyvsp[(1) - (2)].ival),(yylsp[(1) - (2)]))); ;} break; - case 642: /* select_offset_value: a_expr */ -#line 779 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24125 "third_party/libpg_query/grammar/grammar_out.cpp" + case 642: +#line 787 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 643: /* select_fetch_first_value: c_expr */ -#line 799 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24131 "third_party/libpg_query/grammar/grammar_out.cpp" + case 643: +#line 807 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 644: /* select_fetch_first_value: '+' I_or_F_const */ -#line 801 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } -#line 24137 "third_party/libpg_query/grammar/grammar_out.cpp" + case 644: +#line 809 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 645: /* select_fetch_first_value: '-' I_or_F_const */ -#line 803 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } -#line 24143 "third_party/libpg_query/grammar/grammar_out.cpp" + case 645: +#line 811 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 646: /* I_or_F_const: Iconst */ -#line 807 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeIntConst((yyvsp[0].ival),(yylsp[0])); } -#line 24149 "third_party/libpg_query/grammar/grammar_out.cpp" + case 646: +#line 815 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeIntConst((yyvsp[(1) - (1)].ival),(yylsp[(1) - (1)])); ;} break; - case 647: /* I_or_F_const: FCONST */ -#line 808 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeFloatConst((yyvsp[0].str),(yylsp[0])); } -#line 24155 "third_party/libpg_query/grammar/grammar_out.cpp" + case 647: +#line 816 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeFloatConst((yyvsp[(1) - (1)].str),(yylsp[(1) - (1)])); ;} break; - case 648: /* row_or_rows: ROW */ -#line 812 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 24161 "third_party/libpg_query/grammar/grammar_out.cpp" + case 648: +#line 820 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 649: /* row_or_rows: ROWS */ -#line 813 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 24167 "third_party/libpg_query/grammar/grammar_out.cpp" + case 649: +#line 821 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 650: /* first_or_next: FIRST_P */ -#line 816 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 24173 "third_party/libpg_query/grammar/grammar_out.cpp" + case 650: +#line 824 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 651: /* first_or_next: NEXT */ -#line 817 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 24179 "third_party/libpg_query/grammar/grammar_out.cpp" + case 651: +#line 825 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 652: /* group_clause: GROUP_P BY group_by_list_opt_comma */ -#line 842 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24185 "third_party/libpg_query/grammar/grammar_out.cpp" + case 652: +#line 850 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 653: /* group_clause: GROUP_P BY ALL */ -#line 844 "third_party/libpg_query/grammar/statements/select.y" - { - PGNode *node = (PGNode *) makeGroupingSet(GROUPING_SET_ALL, NIL, (yylsp[0])); + case 653: +#line 852 "third_party/libpg_query/grammar/statements/select.y" + { + PGNode *node = (PGNode *) makeGroupingSet(GROUPING_SET_ALL, NIL, (yylsp[(3) - (3)])); (yyval.list) = list_make1(node); - } -#line 24194 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 654: /* group_clause: %empty */ -#line 848 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 24200 "third_party/libpg_query/grammar/grammar_out.cpp" + case 654: +#line 856 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 655: /* group_by_list: group_by_item */ -#line 852 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 24206 "third_party/libpg_query/grammar/grammar_out.cpp" + case 655: +#line 860 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 656: /* group_by_list: group_by_list ',' group_by_item */ -#line 853 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list),(yyvsp[0].node)); } -#line 24212 "third_party/libpg_query/grammar/grammar_out.cpp" + case 656: +#line 861 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list),(yyvsp[(3) - (3)].node)); ;} break; - case 657: /* group_by_list_opt_comma: group_by_list */ -#line 857 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24218 "third_party/libpg_query/grammar/grammar_out.cpp" + case 657: +#line 865 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 658: /* group_by_list_opt_comma: group_by_list ',' */ -#line 858 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 24224 "third_party/libpg_query/grammar/grammar_out.cpp" + case 658: +#line 866 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 659: /* group_by_item: a_expr */ -#line 862 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24230 "third_party/libpg_query/grammar/grammar_out.cpp" + case 659: +#line 870 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 660: /* group_by_item: empty_grouping_set */ -#line 863 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24236 "third_party/libpg_query/grammar/grammar_out.cpp" + case 660: +#line 871 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 661: /* group_by_item: cube_clause */ -#line 864 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24242 "third_party/libpg_query/grammar/grammar_out.cpp" + case 661: +#line 872 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 662: /* group_by_item: rollup_clause */ -#line 865 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24248 "third_party/libpg_query/grammar/grammar_out.cpp" + case 662: +#line 873 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 663: /* group_by_item: grouping_sets_clause */ -#line 866 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24254 "third_party/libpg_query/grammar/grammar_out.cpp" + case 663: +#line 874 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 664: /* empty_grouping_set: '(' ')' */ -#line 871 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_EMPTY, NIL, (yylsp[-1])); - } -#line 24262 "third_party/libpg_query/grammar/grammar_out.cpp" + case 664: +#line 879 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_EMPTY, NIL, (yylsp[(1) - (2)])); + ;} break; - case 665: /* rollup_clause: ROLLUP '(' expr_list_opt_comma ')' */ -#line 884 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_ROLLUP, (yyvsp[-1].list), (yylsp[-3])); - } -#line 24270 "third_party/libpg_query/grammar/grammar_out.cpp" + case 665: +#line 892 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_ROLLUP, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 666: /* cube_clause: CUBE '(' expr_list_opt_comma ')' */ -#line 891 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_CUBE, (yyvsp[-1].list), (yylsp[-3])); - } -#line 24278 "third_party/libpg_query/grammar/grammar_out.cpp" + case 666: +#line 899 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_CUBE, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 667: /* grouping_sets_clause: GROUPING SETS '(' group_by_list_opt_comma ')' */ -#line 898 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_SETS, (yyvsp[-1].list), (yylsp[-4])); - } -#line 24286 "third_party/libpg_query/grammar/grammar_out.cpp" + case 667: +#line 906 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeGroupingSet(GROUPING_SET_SETS, (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); + ;} break; - case 668: /* grouping_or_grouping_id: GROUPING */ -#line 904 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24292 "third_party/libpg_query/grammar/grammar_out.cpp" + case 668: +#line 912 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 669: /* grouping_or_grouping_id: GROUPING_ID */ -#line 905 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24298 "third_party/libpg_query/grammar/grammar_out.cpp" + case 669: +#line 913 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 670: /* having_clause: HAVING a_expr */ -#line 909 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24304 "third_party/libpg_query/grammar/grammar_out.cpp" + case 670: +#line 917 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 671: /* having_clause: %empty */ -#line 910 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24310 "third_party/libpg_query/grammar/grammar_out.cpp" + case 671: +#line 918 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 672: /* qualify_clause: QUALIFY a_expr */ -#line 914 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24316 "third_party/libpg_query/grammar/grammar_out.cpp" + case 672: +#line 922 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 673: /* qualify_clause: %empty */ -#line 915 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 24322 "third_party/libpg_query/grammar/grammar_out.cpp" + case 673: +#line 923 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 674: /* for_locking_clause: for_locking_items */ -#line 919 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24328 "third_party/libpg_query/grammar/grammar_out.cpp" + case 674: +#line 927 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 675: /* for_locking_clause: FOR READ_P ONLY */ -#line 920 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 24334 "third_party/libpg_query/grammar/grammar_out.cpp" + case 675: +#line 928 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 676: /* opt_for_locking_clause: for_locking_clause */ -#line 924 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24340 "third_party/libpg_query/grammar/grammar_out.cpp" + case 676: +#line 932 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 677: /* opt_for_locking_clause: %empty */ -#line 925 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 24346 "third_party/libpg_query/grammar/grammar_out.cpp" + case 677: +#line 933 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 678: /* for_locking_items: for_locking_item */ -#line 929 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 24352 "third_party/libpg_query/grammar/grammar_out.cpp" + case 678: +#line 937 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 679: /* for_locking_items: for_locking_items for_locking_item */ -#line 930 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 24358 "third_party/libpg_query/grammar/grammar_out.cpp" + case 679: +#line 938 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 680: /* for_locking_item: for_locking_strength locked_rels_list opt_nowait_or_skip */ -#line 935 "third_party/libpg_query/grammar/statements/select.y" - { + case 680: +#line 943 "third_party/libpg_query/grammar/statements/select.y" + { PGLockingClause *n = makeNode(PGLockingClause); - n->lockedRels = (yyvsp[-1].list); - n->strength = (yyvsp[-2].lockstrength); - n->waitPolicy = (yyvsp[0].lockwaitpolicy); + n->lockedRels = (yyvsp[(2) - (3)].list); + n->strength = (yyvsp[(1) - (3)].lockstrength); + n->waitPolicy = (yyvsp[(3) - (3)].lockwaitpolicy); (yyval.node) = (PGNode *) n; - } -#line 24370 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 681: /* for_locking_strength: FOR UPDATE */ -#line 945 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockstrength) = LCS_FORUPDATE; } -#line 24376 "third_party/libpg_query/grammar/grammar_out.cpp" + case 681: +#line 953 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockstrength) = LCS_FORUPDATE; ;} break; - case 682: /* for_locking_strength: FOR NO KEY UPDATE */ -#line 946 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockstrength) = PG_LCS_FORNOKEYUPDATE; } -#line 24382 "third_party/libpg_query/grammar/grammar_out.cpp" + case 682: +#line 954 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockstrength) = PG_LCS_FORNOKEYUPDATE; ;} break; - case 683: /* for_locking_strength: FOR SHARE */ -#line 947 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockstrength) = PG_LCS_FORSHARE; } -#line 24388 "third_party/libpg_query/grammar/grammar_out.cpp" + case 683: +#line 955 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockstrength) = PG_LCS_FORSHARE; ;} break; - case 684: /* for_locking_strength: FOR KEY SHARE */ -#line 948 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockstrength) = PG_LCS_FORKEYSHARE; } -#line 24394 "third_party/libpg_query/grammar/grammar_out.cpp" + case 684: +#line 956 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockstrength) = PG_LCS_FORKEYSHARE; ;} break; - case 685: /* locked_rels_list: OF qualified_name_list */ -#line 952 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24400 "third_party/libpg_query/grammar/grammar_out.cpp" + case 685: +#line 960 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 686: /* locked_rels_list: %empty */ -#line 953 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 24406 "third_party/libpg_query/grammar/grammar_out.cpp" + case 686: +#line 961 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 687: /* opt_nowait_or_skip: NOWAIT */ -#line 958 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockwaitpolicy) = LockWaitError; } -#line 24412 "third_party/libpg_query/grammar/grammar_out.cpp" + case 687: +#line 966 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockwaitpolicy) = LockWaitError; ;} break; - case 688: /* opt_nowait_or_skip: SKIP LOCKED */ -#line 959 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockwaitpolicy) = PGLockWaitSkip; } -#line 24418 "third_party/libpg_query/grammar/grammar_out.cpp" + case 688: +#line 967 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockwaitpolicy) = PGLockWaitSkip; ;} break; - case 689: /* opt_nowait_or_skip: %empty */ -#line 960 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.lockwaitpolicy) = PGLockWaitBlock; } -#line 24424 "third_party/libpg_query/grammar/grammar_out.cpp" + case 689: +#line 968 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.lockwaitpolicy) = PGLockWaitBlock; ;} break; - case 690: /* values_clause: VALUES '(' expr_list_opt_comma ')' */ -#line 970 "third_party/libpg_query/grammar/statements/select.y" - { + case 690: +#line 978 "third_party/libpg_query/grammar/statements/select.y" + { PGSelectStmt *n = makeNode(PGSelectStmt); - n->valuesLists = list_make1((yyvsp[-1].list)); + n->valuesLists = list_make1((yyvsp[(3) - (4)].list)); (yyval.node) = (PGNode *) n; - } -#line 24434 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 691: /* values_clause: values_clause ',' '(' expr_list_opt_comma ')' */ -#line 976 "third_party/libpg_query/grammar/statements/select.y" - { - PGSelectStmt *n = (PGSelectStmt *) (yyvsp[-4].node); - n->valuesLists = lappend(n->valuesLists, (yyvsp[-1].list)); + case 691: +#line 984 "third_party/libpg_query/grammar/statements/select.y" + { + PGSelectStmt *n = (PGSelectStmt *) (yyvsp[(1) - (5)].node); + n->valuesLists = lappend(n->valuesLists, (yyvsp[(4) - (5)].list)); (yyval.node) = (PGNode *) n; - } -#line 24444 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 692: /* values_clause_opt_comma: values_clause */ -#line 984 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 24450 "third_party/libpg_query/grammar/grammar_out.cpp" + case 692: +#line 992 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 693: /* values_clause_opt_comma: values_clause ',' */ -#line 985 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 24456 "third_party/libpg_query/grammar/grammar_out.cpp" + case 693: +#line 993 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (2)].node); ;} break; - case 694: /* from_clause: FROM from_list_opt_comma */ -#line 998 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24462 "third_party/libpg_query/grammar/grammar_out.cpp" + case 694: +#line 1006 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 695: /* from_clause: %empty */ -#line 999 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 24468 "third_party/libpg_query/grammar/grammar_out.cpp" + case 695: +#line 1007 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 696: /* from_list: table_ref */ -#line 1003 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 24474 "third_party/libpg_query/grammar/grammar_out.cpp" + case 696: +#line 1011 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 697: /* from_list: from_list ',' table_ref */ -#line 1004 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 24480 "third_party/libpg_query/grammar/grammar_out.cpp" + case 697: +#line 1012 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 698: /* from_list_opt_comma: from_list */ -#line 1008 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24486 "third_party/libpg_query/grammar/grammar_out.cpp" + case 698: +#line 1016 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 699: /* from_list_opt_comma: from_list ',' */ -#line 1009 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 24492 "third_party/libpg_query/grammar/grammar_out.cpp" + case 699: +#line 1017 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 700: /* table_ref: relation_expr opt_alias_clause opt_tablesample_clause */ -#line 1016 "third_party/libpg_query/grammar/statements/select.y" - { - (yyvsp[-2].range)->alias = (yyvsp[-1].alias); - (yyvsp[-2].range)->sample = (yyvsp[0].node); - (yyval.node) = (PGNode *) (yyvsp[-2].range); - } -#line 24502 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 701: /* table_ref: func_table func_alias_clause opt_tablesample_clause */ -#line 1022 "third_party/libpg_query/grammar/statements/select.y" - { - PGRangeFunction *n = (PGRangeFunction *) (yyvsp[-2].node); - n->alias = (PGAlias*) linitial((yyvsp[-1].list)); - n->coldeflist = (PGList*) lsecond((yyvsp[-1].list)); - n->sample = (yyvsp[0].node); - (yyval.node) = (PGNode *) n; - } -#line 24514 "third_party/libpg_query/grammar/grammar_out.cpp" + case 700: +#line 1024 "third_party/libpg_query/grammar/statements/select.y" + { + (yyvsp[(1) - (3)].range)->alias = (yyvsp[(2) - (3)].alias); + (yyvsp[(1) - (3)].range)->sample = (yyvsp[(3) - (3)].node); + (yyval.node) = (PGNode *) (yyvsp[(1) - (3)].range); + ;} break; - case 702: /* table_ref: values_clause_opt_comma alias_clause opt_tablesample_clause */ + case 701: #line 1030 "third_party/libpg_query/grammar/statements/select.y" - { + { + PGRangeFunction *n = (PGRangeFunction *) (yyvsp[(1) - (3)].node); + n->alias = (PGAlias*) linitial((yyvsp[(2) - (3)].list)); + n->coldeflist = (PGList*) lsecond((yyvsp[(2) - (3)].list)); + n->sample = (yyvsp[(3) - (3)].node); + (yyval.node) = (PGNode *) n; + ;} + break; + + case 702: +#line 1038 "third_party/libpg_query/grammar/statements/select.y" + { PGRangeSubselect *n = makeNode(PGRangeSubselect); n->lateral = false; - n->subquery = (yyvsp[-2].node); - n->alias = (yyvsp[-1].alias); - n->sample = (yyvsp[0].node); + n->subquery = (yyvsp[(1) - (3)].node); + n->alias = (yyvsp[(2) - (3)].alias); + n->sample = (yyvsp[(3) - (3)].node); (yyval.node) = (PGNode *) n; - } -#line 24527 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 703: /* table_ref: LATERAL_P func_table func_alias_clause */ -#line 1039 "third_party/libpg_query/grammar/statements/select.y" - { - PGRangeFunction *n = (PGRangeFunction *) (yyvsp[-1].node); + case 703: +#line 1047 "third_party/libpg_query/grammar/statements/select.y" + { + PGRangeFunction *n = (PGRangeFunction *) (yyvsp[(2) - (3)].node); n->lateral = true; - n->alias = (PGAlias*) linitial((yyvsp[0].list)); - n->coldeflist = (PGList*) lsecond((yyvsp[0].list)); + n->alias = (PGAlias*) linitial((yyvsp[(3) - (3)].list)); + n->coldeflist = (PGList*) lsecond((yyvsp[(3) - (3)].list)); (yyval.node) = (PGNode *) n; - } -#line 24539 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 704: /* table_ref: select_with_parens opt_alias_clause opt_tablesample_clause */ -#line 1047 "third_party/libpg_query/grammar/statements/select.y" - { + case 704: +#line 1055 "third_party/libpg_query/grammar/statements/select.y" + { PGRangeSubselect *n = makeNode(PGRangeSubselect); n->lateral = false; - n->subquery = (yyvsp[-2].node); - n->alias = (yyvsp[-1].alias); - n->sample = (yyvsp[0].node); + n->subquery = (yyvsp[(1) - (3)].node); + n->alias = (yyvsp[(2) - (3)].alias); + n->sample = (yyvsp[(3) - (3)].node); (yyval.node) = (PGNode *) n; - } -#line 24552 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 705: /* table_ref: LATERAL_P select_with_parens opt_alias_clause */ -#line 1056 "third_party/libpg_query/grammar/statements/select.y" - { + case 705: +#line 1064 "third_party/libpg_query/grammar/statements/select.y" + { PGRangeSubselect *n = makeNode(PGRangeSubselect); n->lateral = true; - n->subquery = (yyvsp[-1].node); - n->alias = (yyvsp[0].alias); + n->subquery = (yyvsp[(2) - (3)].node); + n->alias = (yyvsp[(3) - (3)].alias); n->sample = NULL; (yyval.node) = (PGNode *) n; - } -#line 24565 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 706: /* table_ref: joined_table */ -#line 1065 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) (yyvsp[0].jexpr); - } -#line 24573 "third_party/libpg_query/grammar/grammar_out.cpp" + case 706: +#line 1073 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) (yyvsp[(1) - (1)].jexpr); + ;} break; - case 707: /* table_ref: '(' joined_table ')' alias_clause */ -#line 1069 "third_party/libpg_query/grammar/statements/select.y" - { - (yyvsp[-2].jexpr)->alias = (yyvsp[0].alias); - (yyval.node) = (PGNode *) (yyvsp[-2].jexpr); - } -#line 24582 "third_party/libpg_query/grammar/grammar_out.cpp" + case 707: +#line 1077 "third_party/libpg_query/grammar/statements/select.y" + { + (yyvsp[(2) - (4)].jexpr)->alias = (yyvsp[(4) - (4)].alias); + (yyval.node) = (PGNode *) (yyvsp[(2) - (4)].jexpr); + ;} break; - case 708: /* table_ref: table_ref PIVOT '(' target_list_opt_comma FOR pivot_value_list opt_pivot_group_by ')' opt_alias_clause */ -#line 1074 "third_party/libpg_query/grammar/statements/select.y" - { + case 708: +#line 1082 "third_party/libpg_query/grammar/statements/select.y" + { PGPivotExpr *n = makeNode(PGPivotExpr); - n->source = (yyvsp[-8].node); - n->aggrs = (yyvsp[-5].list); - n->pivots = (yyvsp[-3].list); - n->groups = (yyvsp[-2].list); - n->alias = (yyvsp[0].alias); + n->source = (yyvsp[(1) - (9)].node); + n->aggrs = (yyvsp[(4) - (9)].list); + n->pivots = (yyvsp[(6) - (9)].list); + n->groups = (yyvsp[(7) - (9)].list); + n->alias = (yyvsp[(9) - (9)].alias); + n->location = (yylsp[(2) - (9)]); (yyval.node) = (PGNode *) n; - } -#line 24596 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 709: /* table_ref: table_ref UNPIVOT opt_include_nulls '(' unpivot_header FOR unpivot_value_list ')' opt_alias_clause */ -#line 1084 "third_party/libpg_query/grammar/statements/select.y" - { + case 709: +#line 1093 "third_party/libpg_query/grammar/statements/select.y" + { PGPivotExpr *n = makeNode(PGPivotExpr); - n->source = (yyvsp[-8].node); - n->include_nulls = (yyvsp[-6].boolean); - n->unpivots = (yyvsp[-4].list); - n->pivots = (yyvsp[-2].list); - n->alias = (yyvsp[0].alias); + n->source = (yyvsp[(1) - (9)].node); + n->include_nulls = (yyvsp[(3) - (9)].boolean); + n->unpivots = (yyvsp[(5) - (9)].list); + n->pivots = (yyvsp[(7) - (9)].list); + n->alias = (yyvsp[(9) - (9)].alias); + n->location = (yylsp[(2) - (9)]); (yyval.node) = (PGNode *) n; - } -#line 24610 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 710: /* opt_pivot_group_by: GROUP_P BY name_list_opt_comma */ -#line 1096 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 24616 "third_party/libpg_query/grammar/grammar_out.cpp" + case 710: +#line 1106 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 711: /* opt_pivot_group_by: %empty */ -#line 1097 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NULL; } -#line 24622 "third_party/libpg_query/grammar/grammar_out.cpp" + case 711: +#line 1107 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; ;} break; - case 712: /* opt_include_nulls: INCLUDE_P NULLS_P */ -#line 1100 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 24628 "third_party/libpg_query/grammar/grammar_out.cpp" + case 712: +#line 1110 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 713: /* opt_include_nulls: EXCLUDE NULLS_P */ -#line 1101 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 24634 "third_party/libpg_query/grammar/grammar_out.cpp" + case 713: +#line 1111 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 714: /* opt_include_nulls: %empty */ -#line 1102 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 24640 "third_party/libpg_query/grammar/grammar_out.cpp" + case 714: +#line 1112 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 715: /* single_pivot_value: b_expr IN_P '(' target_list_opt_comma ')' */ -#line 1106 "third_party/libpg_query/grammar/statements/select.y" - { + case 715: +#line 1116 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = list_make1((yyvsp[-4].node)); - n->pivot_value = (yyvsp[-1].list); + n->pivot_columns = list_make1((yyvsp[(1) - (5)].node)); + n->pivot_value = (yyvsp[(4) - (5)].list); (yyval.node) = (PGNode *) n; - } -#line 24651 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 716: /* single_pivot_value: b_expr IN_P ColIdOrString */ -#line 1114 "third_party/libpg_query/grammar/statements/select.y" - { + case 716: +#line 1124 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = list_make1((yyvsp[-2].node)); - n->pivot_enum = (yyvsp[0].str); + n->pivot_columns = list_make1((yyvsp[(1) - (3)].node)); + n->pivot_enum = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *) n; - } -#line 24662 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 717: /* pivot_header: d_expr */ -#line 1123 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 24668 "third_party/libpg_query/grammar/grammar_out.cpp" + case 718: +#line 1133 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 718: /* pivot_header: '(' c_expr_list_opt_comma ')' */ -#line 1124 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 24674 "third_party/libpg_query/grammar/grammar_out.cpp" + case 719: +#line 1134 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} + break; + + case 720: +#line 1135 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 719: /* pivot_value: pivot_header IN_P '(' target_list_opt_comma ')' */ -#line 1128 "third_party/libpg_query/grammar/statements/select.y" - { + case 721: +#line 1139 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = (yyvsp[-4].list); - n->pivot_value = (yyvsp[-1].list); + n->pivot_columns = (yyvsp[(1) - (5)].list); + n->pivot_value = (yyvsp[(4) - (5)].list); (yyval.node) = (PGNode *) n; - } -#line 24685 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 720: /* pivot_value: pivot_header IN_P ColIdOrString */ -#line 1136 "third_party/libpg_query/grammar/statements/select.y" - { + case 722: +#line 1147 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->pivot_columns = (yyvsp[-2].list); - n->pivot_enum = (yyvsp[0].str); + n->pivot_columns = (yyvsp[(1) - (3)].list); + n->pivot_enum = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *) n; - } -#line 24696 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 721: /* pivot_value_list: pivot_value */ -#line 1145 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 24704 "third_party/libpg_query/grammar/grammar_out.cpp" + case 723: +#line 1156 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 722: /* pivot_value_list: pivot_value_list pivot_value */ -#line 1149 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); - } -#line 24712 "third_party/libpg_query/grammar/grammar_out.cpp" + case 724: +#line 1160 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); + ;} break; - case 723: /* unpivot_header: ColIdOrString */ -#line 1155 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 24718 "third_party/libpg_query/grammar/grammar_out.cpp" + case 725: +#line 1166 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 724: /* unpivot_header: '(' name_list_opt_comma ')' */ -#line 1156 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 24724 "third_party/libpg_query/grammar/grammar_out.cpp" + case 726: +#line 1167 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 725: /* unpivot_value: unpivot_header IN_P '(' target_list_opt_comma ')' */ -#line 1161 "third_party/libpg_query/grammar/statements/select.y" - { + case 727: +#line 1172 "third_party/libpg_query/grammar/statements/select.y" + { PGPivot *n = makeNode(PGPivot); - n->unpivot_columns = (yyvsp[-4].list); - n->pivot_value = (yyvsp[-1].list); + n->unpivot_columns = (yyvsp[(1) - (5)].list); + n->pivot_value = (yyvsp[(4) - (5)].list); (yyval.node) = (PGNode *) n; - } -#line 24735 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 726: /* unpivot_value_list: unpivot_value */ -#line 1170 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 24743 "third_party/libpg_query/grammar/grammar_out.cpp" + case 728: +#line 1181 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 727: /* unpivot_value_list: unpivot_value_list unpivot_value */ -#line 1174 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); - } -#line 24751 "third_party/libpg_query/grammar/grammar_out.cpp" + case 729: +#line 1185 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); + ;} break; - case 728: /* joined_table: '(' joined_table ')' */ -#line 1199 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.jexpr) = (yyvsp[-1].jexpr); - } -#line 24759 "third_party/libpg_query/grammar/grammar_out.cpp" + case 730: +#line 1210 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.jexpr) = (yyvsp[(2) - (3)].jexpr); + ;} break; - case 729: /* joined_table: table_ref CROSS JOIN table_ref */ -#line 1203 "third_party/libpg_query/grammar/statements/select.y" - { + case 731: +#line 1214 "third_party/libpg_query/grammar/statements/select.y" + { /* CROSS JOIN is same as unqualified inner join */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_INNER; n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-3].node); - n->rarg = (yyvsp[0].node); + n->larg = (yyvsp[(1) - (4)].node); + n->rarg = (yyvsp[(4) - (4)].node); n->usingClause = NIL; n->quals = NULL; - n->location = (yylsp[-2]); + n->location = (yylsp[(2) - (4)]); (yyval.jexpr) = n; - } -#line 24776 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 730: /* joined_table: table_ref join_type JOIN table_ref join_qual */ -#line 1216 "third_party/libpg_query/grammar/statements/select.y" - { + case 732: +#line 1227 "third_party/libpg_query/grammar/statements/select.y" + { PGJoinExpr *n = makeNode(PGJoinExpr); - n->jointype = (yyvsp[-3].jtype); + n->jointype = (yyvsp[(2) - (5)].jtype); n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-4].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (5)].node); + n->rarg = (yyvsp[(4) - (5)].node); + if ((yyvsp[(5) - (5)].node) != NULL && IsA((yyvsp[(5) - (5)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(5) - (5)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-3]); + n->quals = (yyvsp[(5) - (5)].node); /* ON clause */ + n->location = (yylsp[(2) - (5)]); (yyval.jexpr) = n; - } -#line 24794 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 731: /* joined_table: table_ref JOIN table_ref join_qual */ -#line 1230 "third_party/libpg_query/grammar/statements/select.y" - { + case 733: +#line 1241 "third_party/libpg_query/grammar/statements/select.y" + { /* letting join_type reduce to empty doesn't work */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_INNER; n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-3].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (4)].node); + n->rarg = (yyvsp[(3) - (4)].node); + if ((yyvsp[(4) - (4)].node) != NULL && IsA((yyvsp[(4) - (4)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(4) - (4)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-2]); + n->quals = (yyvsp[(4) - (4)].node); /* ON clause */ + n->location = (yylsp[(2) - (4)]); (yyval.jexpr) = n; - } -#line 24813 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 732: /* joined_table: table_ref NATURAL join_type JOIN table_ref */ -#line 1245 "third_party/libpg_query/grammar/statements/select.y" - { + case 734: +#line 1256 "third_party/libpg_query/grammar/statements/select.y" + { PGJoinExpr *n = makeNode(PGJoinExpr); - n->jointype = (yyvsp[-2].jtype); + n->jointype = (yyvsp[(3) - (5)].jtype); n->joinreftype = PG_JOIN_NATURAL; - n->larg = (yyvsp[-4].node); - n->rarg = (yyvsp[0].node); + n->larg = (yyvsp[(1) - (5)].node); + n->rarg = (yyvsp[(5) - (5)].node); n->usingClause = NIL; /* figure out which columns later... */ n->quals = NULL; /* fill later */ - n->location = (yylsp[-3]); + n->location = (yylsp[(2) - (5)]); (yyval.jexpr) = n; - } -#line 24829 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 733: /* joined_table: table_ref NATURAL JOIN table_ref */ -#line 1257 "third_party/libpg_query/grammar/statements/select.y" - { + case 735: +#line 1268 "third_party/libpg_query/grammar/statements/select.y" + { /* letting join_type reduce to empty doesn't work */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_INNER; n->joinreftype = PG_JOIN_NATURAL; - n->larg = (yyvsp[-3].node); - n->rarg = (yyvsp[0].node); + n->larg = (yyvsp[(1) - (4)].node); + n->rarg = (yyvsp[(4) - (4)].node); n->usingClause = NIL; /* figure out which columns later... */ n->quals = NULL; /* fill later */ - n->location = (yylsp[-2]); + n->location = (yylsp[(2) - (4)]); (yyval.jexpr) = n; - } -#line 24846 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 734: /* joined_table: table_ref ASOF join_type JOIN table_ref join_qual */ -#line 1270 "third_party/libpg_query/grammar/statements/select.y" - { + case 736: +#line 1281 "third_party/libpg_query/grammar/statements/select.y" + { PGJoinExpr *n = makeNode(PGJoinExpr); - n->jointype = (yyvsp[-3].jtype); + n->jointype = (yyvsp[(3) - (6)].jtype); n->joinreftype = PG_JOIN_ASOF; - n->larg = (yyvsp[-5].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (6)].node); + n->rarg = (yyvsp[(5) - (6)].node); + if ((yyvsp[(6) - (6)].node) != NULL && IsA((yyvsp[(6) - (6)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(6) - (6)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-4]); + n->quals = (yyvsp[(6) - (6)].node); /* ON clause */ + n->location = (yylsp[(2) - (6)]); (yyval.jexpr) = n; - } -#line 24864 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 735: /* joined_table: table_ref ASOF JOIN table_ref join_qual */ -#line 1284 "third_party/libpg_query/grammar/statements/select.y" - { + case 737: +#line 1295 "third_party/libpg_query/grammar/statements/select.y" + { PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_INNER; n->joinreftype = PG_JOIN_ASOF; - n->larg = (yyvsp[-4].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (5)].node); + n->rarg = (yyvsp[(4) - (5)].node); + if ((yyvsp[(5) - (5)].node) != NULL && IsA((yyvsp[(5) - (5)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(5) - (5)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-3]); + n->quals = (yyvsp[(5) - (5)].node); /* ON clause */ + n->location = (yylsp[(2) - (5)]); (yyval.jexpr) = n; - } -#line 24882 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 736: /* joined_table: table_ref POSITIONAL JOIN table_ref */ -#line 1298 "third_party/libpg_query/grammar/statements/select.y" - { + case 738: +#line 1309 "third_party/libpg_query/grammar/statements/select.y" + { /* POSITIONAL JOIN is a coordinated scan */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_POSITION; n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-3].node); - n->rarg = (yyvsp[0].node); + n->larg = (yyvsp[(1) - (4)].node); + n->rarg = (yyvsp[(4) - (4)].node); n->usingClause = NIL; n->quals = NULL; - n->location = (yylsp[-2]); + n->location = (yylsp[(2) - (4)]); (yyval.jexpr) = n; - } -#line 24899 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 737: /* joined_table: table_ref ANTI JOIN table_ref join_qual */ -#line 1311 "third_party/libpg_query/grammar/statements/select.y" - { + case 739: +#line 1322 "third_party/libpg_query/grammar/statements/select.y" + { /* ANTI JOIN is a filter */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_ANTI; n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-4].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (5)].node); + n->rarg = (yyvsp[(4) - (5)].node); + if ((yyvsp[(5) - (5)].node) != NULL && IsA((yyvsp[(5) - (5)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(5) - (5)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-3]); + n->quals = (yyvsp[(5) - (5)].node); /* ON clause */ + n->location = (yylsp[(2) - (5)]); (yyval.jexpr) = n; - } -#line 24918 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 738: /* joined_table: table_ref SEMI JOIN table_ref join_qual */ -#line 1326 "third_party/libpg_query/grammar/statements/select.y" - { + case 740: +#line 1337 "third_party/libpg_query/grammar/statements/select.y" + { /* SEMI JOIN is also a filter */ PGJoinExpr *n = makeNode(PGJoinExpr); n->jointype = PG_JOIN_SEMI; n->joinreftype = PG_JOIN_REGULAR; - n->larg = (yyvsp[-4].node); - n->rarg = (yyvsp[-1].node); - if ((yyvsp[0].node) != NULL && IsA((yyvsp[0].node), PGList)) - n->usingClause = (PGList *) (yyvsp[0].node); /* USING clause */ + n->larg = (yyvsp[(1) - (5)].node); + n->rarg = (yyvsp[(4) - (5)].node); + if ((yyvsp[(5) - (5)].node) != NULL && IsA((yyvsp[(5) - (5)].node), PGList)) + n->usingClause = (PGList *) (yyvsp[(5) - (5)].node); /* USING clause */ else - n->quals = (yyvsp[0].node); /* ON clause */ - n->location = (yylsp[-3]); - n->location = (yylsp[-3]); + n->quals = (yyvsp[(5) - (5)].node); /* ON clause */ + n->location = (yylsp[(2) - (5)]); + n->location = (yylsp[(2) - (5)]); (yyval.jexpr) = n; - } -#line 24938 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 739: /* alias_clause: AS ColIdOrString '(' name_list_opt_comma ')' */ -#line 1345 "third_party/libpg_query/grammar/statements/select.y" - { + case 741: +#line 1356 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = makeNode(PGAlias); - (yyval.alias)->aliasname = (yyvsp[-3].str); - (yyval.alias)->colnames = (yyvsp[-1].list); - } -#line 24948 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.alias)->aliasname = (yyvsp[(2) - (5)].str); + (yyval.alias)->colnames = (yyvsp[(4) - (5)].list); + ;} break; - case 740: /* alias_clause: AS ColIdOrString */ -#line 1351 "third_party/libpg_query/grammar/statements/select.y" - { + case 742: +#line 1362 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = makeNode(PGAlias); - (yyval.alias)->aliasname = (yyvsp[0].str); - } -#line 24957 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.alias)->aliasname = (yyvsp[(2) - (2)].str); + ;} break; - case 741: /* alias_clause: ColId '(' name_list_opt_comma ')' */ -#line 1356 "third_party/libpg_query/grammar/statements/select.y" - { + case 743: +#line 1367 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = makeNode(PGAlias); - (yyval.alias)->aliasname = (yyvsp[-3].str); - (yyval.alias)->colnames = (yyvsp[-1].list); - } -#line 24967 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.alias)->aliasname = (yyvsp[(1) - (4)].str); + (yyval.alias)->colnames = (yyvsp[(3) - (4)].list); + ;} break; - case 742: /* alias_clause: ColId */ -#line 1362 "third_party/libpg_query/grammar/statements/select.y" - { + case 744: +#line 1373 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = makeNode(PGAlias); - (yyval.alias)->aliasname = (yyvsp[0].str); - } -#line 24976 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.alias)->aliasname = (yyvsp[(1) - (1)].str); + ;} break; - case 743: /* opt_alias_clause: alias_clause */ -#line 1368 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.alias) = (yyvsp[0].alias); } -#line 24982 "third_party/libpg_query/grammar/grammar_out.cpp" + case 745: +#line 1379 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = (yyvsp[(1) - (1)].alias); ;} break; - case 744: /* opt_alias_clause: %empty */ -#line 1369 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.alias) = NULL; } -#line 24988 "third_party/libpg_query/grammar/grammar_out.cpp" + case 746: +#line 1380 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.alias) = NULL; ;} break; - case 745: /* func_alias_clause: alias_clause */ -#line 1378 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make2((yyvsp[0].alias), NIL); - } -#line 24996 "third_party/libpg_query/grammar/grammar_out.cpp" + case 747: +#line 1389 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make2((yyvsp[(1) - (1)].alias), NIL); + ;} break; - case 746: /* func_alias_clause: AS '(' TableFuncElementList ')' */ -#line 1382 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make2(NULL, (yyvsp[-1].list)); - } -#line 25004 "third_party/libpg_query/grammar/grammar_out.cpp" + case 748: +#line 1393 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make2(NULL, (yyvsp[(3) - (4)].list)); + ;} break; - case 747: /* func_alias_clause: AS ColIdOrString '(' TableFuncElementList ')' */ -#line 1386 "third_party/libpg_query/grammar/statements/select.y" - { + case 749: +#line 1397 "third_party/libpg_query/grammar/statements/select.y" + { PGAlias *a = makeNode(PGAlias); - a->aliasname = (yyvsp[-3].str); - (yyval.list) = list_make2(a, (yyvsp[-1].list)); - } -#line 25014 "third_party/libpg_query/grammar/grammar_out.cpp" + a->aliasname = (yyvsp[(2) - (5)].str); + (yyval.list) = list_make2(a, (yyvsp[(4) - (5)].list)); + ;} break; - case 748: /* func_alias_clause: ColId '(' TableFuncElementList ')' */ -#line 1392 "third_party/libpg_query/grammar/statements/select.y" - { + case 750: +#line 1403 "third_party/libpg_query/grammar/statements/select.y" + { PGAlias *a = makeNode(PGAlias); - a->aliasname = (yyvsp[-3].str); - (yyval.list) = list_make2(a, (yyvsp[-1].list)); - } -#line 25024 "third_party/libpg_query/grammar/grammar_out.cpp" + a->aliasname = (yyvsp[(1) - (4)].str); + (yyval.list) = list_make2(a, (yyvsp[(3) - (4)].list)); + ;} break; - case 749: /* func_alias_clause: %empty */ -#line 1398 "third_party/libpg_query/grammar/statements/select.y" - { + case 751: +#line 1409 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2(NULL, NIL); - } -#line 25032 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 750: /* join_type: FULL join_outer */ -#line 1403 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_FULL; } -#line 25038 "third_party/libpg_query/grammar/grammar_out.cpp" + case 752: +#line 1414 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_FULL; ;} break; - case 751: /* join_type: LEFT join_outer */ -#line 1404 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_LEFT; } -#line 25044 "third_party/libpg_query/grammar/grammar_out.cpp" + case 753: +#line 1415 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_LEFT; ;} break; - case 752: /* join_type: RIGHT join_outer */ -#line 1405 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_RIGHT; } -#line 25050 "third_party/libpg_query/grammar/grammar_out.cpp" + case 754: +#line 1416 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_RIGHT; ;} break; - case 753: /* join_type: SEMI */ -#line 1406 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_SEMI; } -#line 25056 "third_party/libpg_query/grammar/grammar_out.cpp" + case 755: +#line 1417 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_SEMI; ;} break; - case 754: /* join_type: ANTI */ -#line 1407 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_ANTI; } -#line 25062 "third_party/libpg_query/grammar/grammar_out.cpp" + case 756: +#line 1418 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_ANTI; ;} break; - case 755: /* join_type: INNER_P */ -#line 1408 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.jtype) = PG_JOIN_INNER; } -#line 25068 "third_party/libpg_query/grammar/grammar_out.cpp" + case 757: +#line 1419 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.jtype) = PG_JOIN_INNER; ;} break; - case 756: /* join_outer: OUTER_P */ -#line 1412 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 25074 "third_party/libpg_query/grammar/grammar_out.cpp" + case 758: +#line 1423 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 757: /* join_outer: %empty */ -#line 1413 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 25080 "third_party/libpg_query/grammar/grammar_out.cpp" + case 759: +#line 1424 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 758: /* join_qual: USING '(' name_list_opt_comma ')' */ -#line 1425 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) (yyvsp[-1].list); } -#line 25086 "third_party/libpg_query/grammar/grammar_out.cpp" + case 760: +#line 1436 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) (yyvsp[(3) - (4)].list); ;} break; - case 759: /* join_qual: ON a_expr */ -#line 1426 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 25092 "third_party/libpg_query/grammar/grammar_out.cpp" + case 761: +#line 1437 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 760: /* relation_expr: qualified_name */ -#line 1432 "third_party/libpg_query/grammar/statements/select.y" - { + case 762: +#line 1443 "third_party/libpg_query/grammar/statements/select.y" + { /* inheritance query, implicitly */ - (yyval.range) = (yyvsp[0].range); + (yyval.range) = (yyvsp[(1) - (1)].range); (yyval.range)->inh = true; (yyval.range)->alias = NULL; - } -#line 25103 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 761: /* relation_expr: qualified_name '*' */ -#line 1439 "third_party/libpg_query/grammar/statements/select.y" - { + case 763: +#line 1450 "third_party/libpg_query/grammar/statements/select.y" + { /* inheritance query, explicitly */ - (yyval.range) = (yyvsp[-1].range); + (yyval.range) = (yyvsp[(1) - (2)].range); (yyval.range)->inh = true; (yyval.range)->alias = NULL; - } -#line 25114 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 762: /* relation_expr: ONLY qualified_name */ -#line 1446 "third_party/libpg_query/grammar/statements/select.y" - { + case 764: +#line 1457 "third_party/libpg_query/grammar/statements/select.y" + { /* no inheritance */ - (yyval.range) = (yyvsp[0].range); + (yyval.range) = (yyvsp[(2) - (2)].range); (yyval.range)->inh = false; (yyval.range)->alias = NULL; - } -#line 25125 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 763: /* relation_expr: ONLY '(' qualified_name ')' */ -#line 1453 "third_party/libpg_query/grammar/statements/select.y" - { + case 765: +#line 1464 "third_party/libpg_query/grammar/statements/select.y" + { /* no inheritance, SQL99-style syntax */ - (yyval.range) = (yyvsp[-1].range); + (yyval.range) = (yyvsp[(3) - (4)].range); (yyval.range)->inh = false; (yyval.range)->alias = NULL; - } -#line 25136 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 764: /* func_table: func_expr_windowless opt_ordinality */ -#line 1485 "third_party/libpg_query/grammar/statements/select.y" - { + case 766: +#line 1496 "third_party/libpg_query/grammar/statements/select.y" + { PGRangeFunction *n = makeNode(PGRangeFunction); n->lateral = false; - n->ordinality = (yyvsp[0].boolean); + n->ordinality = (yyvsp[(2) - (2)].boolean); n->is_rowsfrom = false; - n->functions = list_make1(list_make2((yyvsp[-1].node), NIL)); + n->functions = list_make1(list_make2((yyvsp[(1) - (2)].node), NIL)); n->sample = NULL; /* alias and coldeflist are set by table_ref production */ (yyval.node) = (PGNode *) n; - } -#line 25151 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 765: /* func_table: ROWS FROM '(' rowsfrom_list ')' opt_ordinality */ -#line 1496 "third_party/libpg_query/grammar/statements/select.y" - { + case 767: +#line 1507 "third_party/libpg_query/grammar/statements/select.y" + { PGRangeFunction *n = makeNode(PGRangeFunction); n->lateral = false; - n->ordinality = (yyvsp[0].boolean); + n->ordinality = (yyvsp[(6) - (6)].boolean); n->is_rowsfrom = true; - n->functions = (yyvsp[-2].list); + n->functions = (yyvsp[(4) - (6)].list); n->sample = NULL; /* alias and coldeflist are set by table_ref production */ (yyval.node) = (PGNode *) n; - } -#line 25166 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 766: /* rowsfrom_item: func_expr_windowless opt_col_def_list */ -#line 1509 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[-1].node), (yyvsp[0].list)); } -#line 25172 "third_party/libpg_query/grammar/grammar_out.cpp" + case 768: +#line 1520 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].list)); ;} break; - case 767: /* rowsfrom_list: rowsfrom_item */ -#line 1513 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].list)); } -#line 25178 "third_party/libpg_query/grammar/grammar_out.cpp" + case 769: +#line 1524 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 768: /* rowsfrom_list: rowsfrom_list ',' rowsfrom_item */ -#line 1514 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } -#line 25184 "third_party/libpg_query/grammar/grammar_out.cpp" + case 770: +#line 1525 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 769: /* opt_col_def_list: AS '(' TableFuncElementList ')' */ -#line 1517 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 25190 "third_party/libpg_query/grammar/grammar_out.cpp" + case 771: +#line 1528 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 770: /* opt_col_def_list: %empty */ -#line 1518 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 25196 "third_party/libpg_query/grammar/grammar_out.cpp" + case 772: +#line 1529 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 771: /* opt_ordinality: WITH_LA ORDINALITY */ -#line 1521 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 25202 "third_party/libpg_query/grammar/grammar_out.cpp" + case 773: +#line 1532 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 772: /* opt_ordinality: %empty */ -#line 1522 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 25208 "third_party/libpg_query/grammar/grammar_out.cpp" + case 774: +#line 1533 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 773: /* where_clause: WHERE a_expr */ -#line 1527 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 25214 "third_party/libpg_query/grammar/grammar_out.cpp" + case 775: +#line 1538 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 774: /* where_clause: %empty */ -#line 1528 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 25220 "third_party/libpg_query/grammar/grammar_out.cpp" + case 776: +#line 1539 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 775: /* TableFuncElementList: TableFuncElement */ -#line 1534 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 25228 "third_party/libpg_query/grammar/grammar_out.cpp" + case 777: +#line 1545 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 776: /* TableFuncElementList: TableFuncElementList ',' TableFuncElement */ -#line 1538 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 25236 "third_party/libpg_query/grammar/grammar_out.cpp" + case 778: +#line 1549 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 777: /* TableFuncElement: ColIdOrString Typename opt_collate_clause */ -#line 1544 "third_party/libpg_query/grammar/statements/select.y" - { + case 779: +#line 1555 "third_party/libpg_query/grammar/statements/select.y" + { PGColumnDef *n = makeNode(PGColumnDef); - n->colname = (yyvsp[-2].str); - n->typeName = (yyvsp[-1].typnam); + n->colname = (yyvsp[(1) - (3)].str); + n->typeName = (yyvsp[(2) - (3)].typnam); n->inhcount = 0; n->is_local = true; n->is_not_null = false; @@ -25248,470 +25679,416 @@ YYLTYPE yylloc = yyloc_default; n->storage = 0; n->raw_default = NULL; n->cooked_default = NULL; - n->collClause = (PGCollateClause *) (yyvsp[0].node); + n->collClause = (PGCollateClause *) (yyvsp[(3) - (3)].node); n->collOid = InvalidOid; n->constraints = NIL; - n->location = (yylsp[-2]); + n->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *)n; - } -#line 25258 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 778: /* opt_collate_clause: COLLATE any_name */ -#line 1565 "third_party/libpg_query/grammar/statements/select.y" - { + case 780: +#line 1576 "third_party/libpg_query/grammar/statements/select.y" + { PGCollateClause *n = makeNode(PGCollateClause); n->arg = NULL; - n->collname = (yyvsp[0].list); - n->location = (yylsp[-1]); + n->collname = (yyvsp[(2) - (2)].list); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *) n; - } -#line 25270 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} + break; + + case 781: +#line 1583 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 779: /* opt_collate_clause: %empty */ -#line 1572 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 25276 "third_party/libpg_query/grammar/grammar_out.cpp" + case 782: +#line 1596 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1(list_make2(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].typnam))); + ;} break; - case 780: /* colid_type_list: ColId Typename */ -#line 1585 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1(list_make2(makeString((yyvsp[-1].str)), (yyvsp[0].typnam))); - } -#line 25284 "third_party/libpg_query/grammar/grammar_out.cpp" + case 783: +#line 1599 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (4)].list), list_make2(makeString((yyvsp[(3) - (4)].str)), (yyvsp[(4) - (4)].typnam))); + ;} break; - case 781: /* colid_type_list: colid_type_list ',' ColId Typename */ -#line 1588 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-3].list), list_make2(makeString((yyvsp[-1].str)), (yyvsp[0].typnam))); - } -#line 25292 "third_party/libpg_query/grammar/grammar_out.cpp" + case 786: +#line 1606 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 784: /* opt_Typename: Typename */ -#line 1595 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25298 "third_party/libpg_query/grammar/grammar_out.cpp" + case 787: +#line 1607 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = NULL; ;} break; - case 785: /* opt_Typename: %empty */ -#line 1596 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = NULL; } -#line 25304 "third_party/libpg_query/grammar/grammar_out.cpp" + case 788: +#line 1610 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (2)].typnam); + (yyval.typnam)->arrayBounds = (yyvsp[(2) - (2)].list); + ;} break; - case 786: /* Typename: SimpleTypename opt_array_bounds */ -#line 1599 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-1].typnam); - (yyval.typnam)->arrayBounds = (yyvsp[0].list); - } -#line 25313 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 787: /* Typename: SETOF SimpleTypename opt_array_bounds */ -#line 1604 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-1].typnam); - (yyval.typnam)->arrayBounds = (yyvsp[0].list); + case 789: +#line 1615 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(2) - (3)].typnam); + (yyval.typnam)->arrayBounds = (yyvsp[(3) - (3)].list); (yyval.typnam)->setof = true; - } -#line 25323 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 788: /* Typename: SimpleTypename ARRAY '[' Iconst ']' */ -#line 1611 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-4].typnam); - (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[-1].ival))); - } -#line 25332 "third_party/libpg_query/grammar/grammar_out.cpp" + case 790: +#line 1622 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (5)].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[(4) - (5)].ival))); + ;} break; - case 789: /* Typename: SETOF SimpleTypename ARRAY '[' Iconst ']' */ -#line 1616 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-4].typnam); - (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[-1].ival))); + case 791: +#line 1627 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(2) - (6)].typnam); + (yyval.typnam)->arrayBounds = list_make1(makeInteger((yyvsp[(5) - (6)].ival))); (yyval.typnam)->setof = true; - } -#line 25342 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 790: /* Typename: SimpleTypename ARRAY */ -#line 1622 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-1].typnam); + case 792: +#line 1633 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (2)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); - } -#line 25351 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 791: /* Typename: SETOF SimpleTypename ARRAY */ -#line 1627 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-1].typnam); + case 793: +#line 1638 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(2) - (3)].typnam); (yyval.typnam)->arrayBounds = list_make1(makeInteger(-1)); (yyval.typnam)->setof = true; - } -#line 25361 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 792: /* Typename: qualified_typename */ -#line 1633 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = makeTypeNameFromNameList((yyvsp[0].list)); - } -#line 25369 "third_party/libpg_query/grammar/grammar_out.cpp" + case 794: +#line 1644 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = makeTypeNameFromNameList((yyvsp[(1) - (1)].list)); + ;} break; - case 793: /* Typename: RowOrStruct '(' colid_type_list ')' opt_array_bounds */ -#line 1637 "third_party/libpg_query/grammar/statements/select.y" - { + case 795: +#line 1648 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("struct"); - (yyval.typnam)->arrayBounds = (yyvsp[0].list); - (yyval.typnam)->typmods = (yyvsp[-2].list); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25380 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->arrayBounds = (yyvsp[(5) - (5)].list); + (yyval.typnam)->typmods = (yyvsp[(3) - (5)].list); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 794: /* Typename: MAP '(' type_list ')' opt_array_bounds */ -#line 1644 "third_party/libpg_query/grammar/statements/select.y" - { + case 796: +#line 1655 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("map"); - (yyval.typnam)->arrayBounds = (yyvsp[0].list); - (yyval.typnam)->typmods = (yyvsp[-2].list); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25391 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->arrayBounds = (yyvsp[(5) - (5)].list); + (yyval.typnam)->typmods = (yyvsp[(3) - (5)].list); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 795: /* Typename: UNION '(' colid_type_list ')' opt_array_bounds */ -#line 1651 "third_party/libpg_query/grammar/statements/select.y" - { + case 797: +#line 1662 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("union"); - (yyval.typnam)->arrayBounds = (yyvsp[0].list); - (yyval.typnam)->typmods = (yyvsp[-2].list); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25402 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->arrayBounds = (yyvsp[(5) - (5)].list); + (yyval.typnam)->typmods = (yyvsp[(3) - (5)].list); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 796: /* qualified_typename: IDENT '.' IDENT */ -#line 1660 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2(makeString((yyvsp[-2].str)), makeString((yyvsp[0].str))); } -#line 25408 "third_party/libpg_query/grammar/grammar_out.cpp" + case 798: +#line 1671 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2(makeString((yyvsp[(1) - (3)].str)), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 797: /* qualified_typename: qualified_typename '.' IDENT */ -#line 1661 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } -#line 25414 "third_party/libpg_query/grammar/grammar_out.cpp" + case 799: +#line 1672 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 798: /* opt_array_bounds: opt_array_bounds '[' ']' */ -#line 1666 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), makeInteger(-1)); } -#line 25420 "third_party/libpg_query/grammar/grammar_out.cpp" + case 800: +#line 1677 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeInteger(-1)); ;} break; - case 799: /* opt_array_bounds: opt_array_bounds '[' Iconst ']' */ -#line 1668 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-3].list), makeInteger((yyvsp[-1].ival))); } -#line 25426 "third_party/libpg_query/grammar/grammar_out.cpp" + case 801: +#line 1679 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (4)].list), makeInteger((yyvsp[(3) - (4)].ival))); ;} break; - case 800: /* opt_array_bounds: %empty */ -#line 1670 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 25432 "third_party/libpg_query/grammar/grammar_out.cpp" + case 802: +#line 1681 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 801: /* SimpleTypename: GenericType */ -#line 1674 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25438 "third_party/libpg_query/grammar/grammar_out.cpp" + case 803: +#line 1685 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 802: /* SimpleTypename: Numeric */ -#line 1675 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25444 "third_party/libpg_query/grammar/grammar_out.cpp" + case 804: +#line 1686 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 803: /* SimpleTypename: Bit */ -#line 1676 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25450 "third_party/libpg_query/grammar/grammar_out.cpp" + case 805: +#line 1687 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 804: /* SimpleTypename: Character */ -#line 1677 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25456 "third_party/libpg_query/grammar/grammar_out.cpp" + case 806: +#line 1688 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 805: /* SimpleTypename: ConstDatetime */ -#line 1678 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25462 "third_party/libpg_query/grammar/grammar_out.cpp" + case 807: +#line 1689 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 806: /* SimpleTypename: ConstInterval opt_interval */ -#line 1680 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-1].typnam); - (yyval.typnam)->typmods = (yyvsp[0].list); - } -#line 25471 "third_party/libpg_query/grammar/grammar_out.cpp" + case 808: +#line 1691 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (2)].typnam); + (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); + ;} break; - case 807: /* SimpleTypename: ConstInterval '(' Iconst ')' */ -#line 1685 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[-3].typnam); + case 809: +#line 1696 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (4)].typnam); (yyval.typnam)->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), - makeIntConst((yyvsp[-1].ival), (yylsp[-1]))); - } -#line 25481 "third_party/libpg_query/grammar/grammar_out.cpp" + makeIntConst((yyvsp[(3) - (4)].ival), (yylsp[(3) - (4)]))); + ;} break; - case 808: /* ConstTypename: Numeric */ -#line 1704 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25487 "third_party/libpg_query/grammar/grammar_out.cpp" + case 810: +#line 1715 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 809: /* ConstTypename: ConstBit */ -#line 1705 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25493 "third_party/libpg_query/grammar/grammar_out.cpp" + case 811: +#line 1716 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 810: /* ConstTypename: ConstCharacter */ -#line 1706 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25499 "third_party/libpg_query/grammar/grammar_out.cpp" + case 812: +#line 1717 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 811: /* ConstTypename: ConstDatetime */ -#line 1707 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.typnam) = (yyvsp[0].typnam); } -#line 25505 "third_party/libpg_query/grammar/grammar_out.cpp" + case 813: +#line 1718 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = (yyvsp[(1) - (1)].typnam); ;} break; - case 812: /* GenericType: type_name_token opt_type_modifiers */ -#line 1719 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = makeTypeName((yyvsp[-1].str)); - (yyval.typnam)->typmods = (yyvsp[0].list); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25515 "third_party/libpg_query/grammar/grammar_out.cpp" + case 814: +#line 1730 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = makeTypeName((yyvsp[(1) - (2)].str)); + (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 813: /* opt_type_modifiers: '(' opt_expr_list_opt_comma ')' */ -#line 1732 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 25521 "third_party/libpg_query/grammar/grammar_out.cpp" + case 815: +#line 1743 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 814: /* opt_type_modifiers: %empty */ -#line 1733 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 25527 "third_party/libpg_query/grammar/grammar_out.cpp" + case 816: +#line 1744 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 815: /* Numeric: INT_P */ -#line 1740 "third_party/libpg_query/grammar/statements/select.y" - { + case 817: +#line 1751 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("int4"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25536 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 816: /* Numeric: INTEGER */ -#line 1745 "third_party/libpg_query/grammar/statements/select.y" - { + case 818: +#line 1756 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("int4"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25545 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 817: /* Numeric: SMALLINT */ -#line 1750 "third_party/libpg_query/grammar/statements/select.y" - { + case 819: +#line 1761 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("int2"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25554 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 818: /* Numeric: BIGINT */ -#line 1755 "third_party/libpg_query/grammar/statements/select.y" - { + case 820: +#line 1766 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("int8"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25563 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 819: /* Numeric: REAL */ -#line 1760 "third_party/libpg_query/grammar/statements/select.y" - { + case 821: +#line 1771 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("float4"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25572 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 820: /* Numeric: FLOAT_P opt_float */ -#line 1765 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25581 "third_party/libpg_query/grammar/grammar_out.cpp" + case 822: +#line 1776 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(2) - (2)].typnam); + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 821: /* Numeric: DOUBLE_P PRECISION */ -#line 1770 "third_party/libpg_query/grammar/statements/select.y" - { + case 823: +#line 1781 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("float8"); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25590 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 822: /* Numeric: DECIMAL_P opt_type_modifiers */ -#line 1775 "third_party/libpg_query/grammar/statements/select.y" - { + case 824: +#line 1786 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("numeric"); - (yyval.typnam)->typmods = (yyvsp[0].list); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25600 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 823: /* Numeric: DEC opt_type_modifiers */ -#line 1781 "third_party/libpg_query/grammar/statements/select.y" - { + case 825: +#line 1792 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("numeric"); - (yyval.typnam)->typmods = (yyvsp[0].list); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25610 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 824: /* Numeric: NUMERIC opt_type_modifiers */ -#line 1787 "third_party/libpg_query/grammar/statements/select.y" - { + case 826: +#line 1798 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("numeric"); - (yyval.typnam)->typmods = (yyvsp[0].list); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25620 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = (yyvsp[(2) - (2)].list); + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 825: /* Numeric: BOOLEAN_P */ -#line 1793 "third_party/libpg_query/grammar/statements/select.y" - { + case 827: +#line 1804 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("bool"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25629 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 826: /* opt_float: '(' Iconst ')' */ -#line 1800 "third_party/libpg_query/grammar/statements/select.y" - { + case 828: +#line 1811 "third_party/libpg_query/grammar/statements/select.y" + { /* * Check FLOAT() precision limits assuming IEEE floating * types - thomas 1997-09-18 */ - if ((yyvsp[-1].ival) < 1) + if ((yyvsp[(2) - (3)].ival) < 1) ereport(ERROR, (errcode(PG_ERRCODE_INVALID_PARAMETER_VALUE), errmsg("precision for type float must be at least 1 bit"), - parser_errposition((yylsp[-1])))); - else if ((yyvsp[-1].ival) <= 24) + parser_errposition((yylsp[(2) - (3)])))); + else if ((yyvsp[(2) - (3)].ival) <= 24) (yyval.typnam) = SystemTypeName("float4"); - else if ((yyvsp[-1].ival) <= 53) + else if ((yyvsp[(2) - (3)].ival) <= 53) (yyval.typnam) = SystemTypeName("float8"); else ereport(ERROR, (errcode(PG_ERRCODE_INVALID_PARAMETER_VALUE), errmsg("precision for type float must be less than 54 bits"), - parser_errposition((yylsp[-1])))); - } -#line 25654 "third_party/libpg_query/grammar/grammar_out.cpp" + parser_errposition((yylsp[(2) - (3)])))); + ;} break; - case 827: /* opt_float: %empty */ -#line 1821 "third_party/libpg_query/grammar/statements/select.y" - { + case 829: +#line 1832 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("float4"); - } -#line 25662 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 828: /* Bit: BitWithLength */ -#line 1831 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25670 "third_party/libpg_query/grammar/grammar_out.cpp" + case 830: +#line 1842 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 829: /* Bit: BitWithoutLength */ -#line 1835 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25678 "third_party/libpg_query/grammar/grammar_out.cpp" + case 831: +#line 1846 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 830: /* ConstBit: BitWithLength */ -#line 1843 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25686 "third_party/libpg_query/grammar/grammar_out.cpp" + case 832: +#line 1854 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 831: /* ConstBit: BitWithoutLength */ -#line 1847 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); + case 833: +#line 1858 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); (yyval.typnam)->typmods = NIL; - } -#line 25695 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 832: /* BitWithLength: BIT opt_varying '(' expr_list_opt_comma ')' */ -#line 1855 "third_party/libpg_query/grammar/statements/select.y" - { + case 834: +#line 1866 "third_party/libpg_query/grammar/statements/select.y" + { const char *typname; - typname = (yyvsp[-3].boolean) ? "varbit" : "bit"; + typname = (yyvsp[(2) - (5)].boolean) ? "varbit" : "bit"; (yyval.typnam) = SystemTypeName(typname); - (yyval.typnam)->typmods = (yyvsp[-1].list); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25708 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = (yyvsp[(4) - (5)].list); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 833: /* BitWithoutLength: BIT opt_varying */ -#line 1867 "third_party/libpg_query/grammar/statements/select.y" - { + case 835: +#line 1878 "third_party/libpg_query/grammar/statements/select.y" + { /* bit defaults to bit(1), varbit to no limit */ - if ((yyvsp[0].boolean)) + if ((yyvsp[(2) - (2)].boolean)) { (yyval.typnam) = SystemTypeName("varbit"); } @@ -25720,982 +26097,873 @@ YYLTYPE yylloc = yyloc_default; (yyval.typnam) = SystemTypeName("bit"); (yyval.typnam)->typmods = list_make1(makeIntConst(1, -1)); } - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25726 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 834: /* Character: CharacterWithLength */ -#line 1888 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25734 "third_party/libpg_query/grammar/grammar_out.cpp" + case 836: +#line 1899 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 835: /* Character: CharacterWithoutLength */ -#line 1892 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25742 "third_party/libpg_query/grammar/grammar_out.cpp" + case 837: +#line 1903 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 836: /* ConstCharacter: CharacterWithLength */ -#line 1898 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = (yyvsp[0].typnam); - } -#line 25750 "third_party/libpg_query/grammar/grammar_out.cpp" + case 838: +#line 1909 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); + ;} break; - case 837: /* ConstCharacter: CharacterWithoutLength */ -#line 1902 "third_party/libpg_query/grammar/statements/select.y" - { + case 839: +#line 1913 "third_party/libpg_query/grammar/statements/select.y" + { /* Length was not specified so allow to be unrestricted. * This handles problems with fixed-length (bpchar) strings * which in column definitions must default to a length * of one, but should not be constrained if the length * was not specified. */ - (yyval.typnam) = (yyvsp[0].typnam); + (yyval.typnam) = (yyvsp[(1) - (1)].typnam); (yyval.typnam)->typmods = NIL; - } -#line 25765 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 838: /* CharacterWithLength: character '(' Iconst ')' */ -#line 1915 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = SystemTypeName((yyvsp[-3].conststr)); - (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-1].ival), (yylsp[-1]))); - (yyval.typnam)->location = (yylsp[-3]); - } -#line 25775 "third_party/libpg_query/grammar/grammar_out.cpp" + case 840: +#line 1926 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = SystemTypeName((yyvsp[(1) - (4)].conststr)); + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[(3) - (4)].ival), (yylsp[(3) - (4)]))); + (yyval.typnam)->location = (yylsp[(1) - (4)]); + ;} break; - case 839: /* CharacterWithoutLength: character */ -#line 1923 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.typnam) = SystemTypeName((yyvsp[0].conststr)); + case 841: +#line 1934 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.typnam) = SystemTypeName((yyvsp[(1) - (1)].conststr)); /* char defaults to char(1), varchar to no limit */ - if (strcmp((yyvsp[0].conststr), "bpchar") == 0) + if (strcmp((yyvsp[(1) - (1)].conststr), "bpchar") == 0) (yyval.typnam)->typmods = list_make1(makeIntConst(1, -1)); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25787 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 840: /* character: CHARACTER opt_varying */ -#line 1933 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } -#line 25793 "third_party/libpg_query/grammar/grammar_out.cpp" + case 842: +#line 1944 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 841: /* character: CHAR_P opt_varying */ -#line 1935 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } -#line 25799 "third_party/libpg_query/grammar/grammar_out.cpp" + case 843: +#line 1946 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 842: /* character: VARCHAR */ -#line 1937 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "varchar"; } -#line 25805 "third_party/libpg_query/grammar/grammar_out.cpp" + case 844: +#line 1948 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "varchar"; ;} break; - case 843: /* character: NATIONAL CHARACTER opt_varying */ -#line 1939 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } -#line 25811 "third_party/libpg_query/grammar/grammar_out.cpp" + case 845: +#line 1950 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = (yyvsp[(3) - (3)].boolean) ? "varchar": "bpchar"; ;} break; - case 844: /* character: NATIONAL CHAR_P opt_varying */ -#line 1941 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } -#line 25817 "third_party/libpg_query/grammar/grammar_out.cpp" + case 846: +#line 1952 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = (yyvsp[(3) - (3)].boolean) ? "varchar": "bpchar"; ;} break; - case 845: /* character: NCHAR opt_varying */ -#line 1943 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = (yyvsp[0].boolean) ? "varchar": "bpchar"; } -#line 25823 "third_party/libpg_query/grammar/grammar_out.cpp" + case 847: +#line 1954 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = (yyvsp[(2) - (2)].boolean) ? "varchar": "bpchar"; ;} break; - case 846: /* opt_varying: VARYING */ -#line 1947 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 25829 "third_party/libpg_query/grammar/grammar_out.cpp" + case 848: +#line 1958 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 847: /* opt_varying: %empty */ -#line 1948 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 25835 "third_party/libpg_query/grammar/grammar_out.cpp" + case 849: +#line 1959 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 848: /* ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone */ -#line 1956 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].boolean)) + case 850: +#line 1967 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(5) - (5)].boolean)) (yyval.typnam) = SystemTypeName("timestamptz"); else (yyval.typnam) = SystemTypeName("timestamp"); - (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25848 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[(3) - (5)].ival), (yylsp[(3) - (5)]))); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 849: /* ConstDatetime: TIMESTAMP opt_timezone */ -#line 1965 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].boolean)) + case 851: +#line 1976 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(2) - (2)].boolean)) (yyval.typnam) = SystemTypeName("timestamptz"); else (yyval.typnam) = SystemTypeName("timestamp"); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25860 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 850: /* ConstDatetime: TIME '(' Iconst ')' opt_timezone */ -#line 1973 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].boolean)) + case 852: +#line 1984 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(5) - (5)].boolean)) (yyval.typnam) = SystemTypeName("timetz"); else (yyval.typnam) = SystemTypeName("time"); - (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); - (yyval.typnam)->location = (yylsp[-4]); - } -#line 25873 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->typmods = list_make1(makeIntConst((yyvsp[(3) - (5)].ival), (yylsp[(3) - (5)]))); + (yyval.typnam)->location = (yylsp[(1) - (5)]); + ;} break; - case 851: /* ConstDatetime: TIME opt_timezone */ -#line 1982 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].boolean)) + case 853: +#line 1993 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(2) - (2)].boolean)) (yyval.typnam) = SystemTypeName("timetz"); else (yyval.typnam) = SystemTypeName("time"); - (yyval.typnam)->location = (yylsp[-1]); - } -#line 25885 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (2)]); + ;} break; - case 852: /* ConstInterval: INTERVAL */ -#line 1993 "third_party/libpg_query/grammar/statements/select.y" - { + case 854: +#line 2004 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.typnam) = SystemTypeName("interval"); - (yyval.typnam)->location = (yylsp[0]); - } -#line 25894 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.typnam)->location = (yylsp[(1) - (1)]); + ;} break; - case 853: /* opt_timezone: WITH_LA TIME ZONE */ -#line 2000 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 25900 "third_party/libpg_query/grammar/grammar_out.cpp" + case 855: +#line 2011 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 854: /* opt_timezone: WITHOUT TIME ZONE */ -#line 2001 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 25906 "third_party/libpg_query/grammar/grammar_out.cpp" + case 856: +#line 2012 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 855: /* opt_timezone: %empty */ -#line 2002 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 25912 "third_party/libpg_query/grammar/grammar_out.cpp" + case 857: +#line 2013 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 880: /* opt_interval: year_keyword */ -#line 2043 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR), (yylsp[0]))); } -#line 25918 "third_party/libpg_query/grammar/grammar_out.cpp" + case 882: +#line 2054 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR), (yylsp[(1) - (1)]))); ;} break; - case 881: /* opt_interval: month_keyword */ -#line 2045 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MONTH), (yylsp[0]))); } -#line 25924 "third_party/libpg_query/grammar/grammar_out.cpp" + case 883: +#line 2056 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MONTH), (yylsp[(1) - (1)]))); ;} break; - case 882: /* opt_interval: day_keyword */ -#line 2047 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY), (yylsp[0]))); } -#line 25930 "third_party/libpg_query/grammar/grammar_out.cpp" + case 884: +#line 2058 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY), (yylsp[(1) - (1)]))); ;} break; - case 883: /* opt_interval: hour_keyword */ -#line 2049 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR), (yylsp[0]))); } -#line 25936 "third_party/libpg_query/grammar/grammar_out.cpp" + case 885: +#line 2060 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR), (yylsp[(1) - (1)]))); ;} break; - case 884: /* opt_interval: minute_keyword */ -#line 2051 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MINUTE), (yylsp[0]))); } -#line 25942 "third_party/libpg_query/grammar/grammar_out.cpp" + case 886: +#line 2062 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MINUTE), (yylsp[(1) - (1)]))); ;} break; - case 885: /* opt_interval: second_keyword */ -#line 2053 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[0]))); } -#line 25948 "third_party/libpg_query/grammar/grammar_out.cpp" + case 887: +#line 2064 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(SECOND), (yylsp[(1) - (1)]))); ;} break; - case 886: /* opt_interval: millisecond_keyword */ -#line 2055 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MILLISECOND), (yylsp[0]))); } -#line 25954 "third_party/libpg_query/grammar/grammar_out.cpp" + case 888: +#line 2066 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MILLISECOND), (yylsp[(1) - (1)]))); ;} break; - case 887: /* opt_interval: microsecond_keyword */ -#line 2057 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MICROSECOND), (yylsp[0]))); } -#line 25960 "third_party/libpg_query/grammar/grammar_out.cpp" + case 889: +#line 2068 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MICROSECOND), (yylsp[(1) - (1)]))); ;} break; - case 888: /* opt_interval: week_keyword */ -#line 2059 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(WEEK), (yylsp[0]))); } -#line 25966 "third_party/libpg_query/grammar/grammar_out.cpp" + case 890: +#line 2070 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(WEEK), (yylsp[(1) - (1)]))); ;} break; - case 889: /* opt_interval: decade_keyword */ -#line 2061 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DECADE), (yylsp[0]))); } -#line 25972 "third_party/libpg_query/grammar/grammar_out.cpp" + case 891: +#line 2072 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DECADE), (yylsp[(1) - (1)]))); ;} break; - case 890: /* opt_interval: century_keyword */ -#line 2063 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(CENTURY), (yylsp[0]))); } -#line 25978 "third_party/libpg_query/grammar/grammar_out.cpp" + case 892: +#line 2074 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(CENTURY), (yylsp[(1) - (1)]))); ;} break; - case 891: /* opt_interval: millennium_keyword */ -#line 2065 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MILLENNIUM), (yylsp[0]))); } -#line 25984 "third_party/libpg_query/grammar/grammar_out.cpp" + case 893: +#line 2076 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MILLENNIUM), (yylsp[(1) - (1)]))); ;} break; - case 892: /* opt_interval: year_keyword TO month_keyword */ -#line 2067 "third_party/libpg_query/grammar/statements/select.y" - { + case 894: +#line 2078 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(YEAR) | - INTERVAL_MASK(MONTH), (yylsp[-2]))); - } -#line 25993 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(MONTH), (yylsp[(1) - (3)]))); + ;} break; - case 893: /* opt_interval: day_keyword TO hour_keyword */ -#line 2072 "third_party/libpg_query/grammar/statements/select.y" - { + case 895: +#line 2083 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | - INTERVAL_MASK(HOUR), (yylsp[-2]))); - } -#line 26002 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(HOUR), (yylsp[(1) - (3)]))); + ;} break; - case 894: /* opt_interval: day_keyword TO minute_keyword */ -#line 2077 "third_party/libpg_query/grammar/statements/select.y" - { + case 896: +#line 2088 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | - INTERVAL_MASK(MINUTE), (yylsp[-2]))); - } -#line 26012 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(MINUTE), (yylsp[(1) - (3)]))); + ;} break; - case 895: /* opt_interval: day_keyword TO second_keyword */ -#line 2083 "third_party/libpg_query/grammar/statements/select.y" - { + case 897: +#line 2094 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | - INTERVAL_MASK(SECOND), (yylsp[-2]))); - } -#line 26023 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(SECOND), (yylsp[(1) - (3)]))); + ;} break; - case 896: /* opt_interval: hour_keyword TO minute_keyword */ -#line 2090 "third_party/libpg_query/grammar/statements/select.y" - { + case 898: +#line 2101 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR) | - INTERVAL_MASK(MINUTE), (yylsp[-2]))); - } -#line 26032 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(MINUTE), (yylsp[(1) - (3)]))); + ;} break; - case 897: /* opt_interval: hour_keyword TO second_keyword */ -#line 2095 "third_party/libpg_query/grammar/statements/select.y" - { + case 899: +#line 2106 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | - INTERVAL_MASK(SECOND), (yylsp[-2]))); - } -#line 26042 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(SECOND), (yylsp[(1) - (3)]))); + ;} break; - case 898: /* opt_interval: minute_keyword TO second_keyword */ -#line 2101 "third_party/libpg_query/grammar/statements/select.y" - { + case 900: +#line 2112 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeIntConst(INTERVAL_MASK(MINUTE) | - INTERVAL_MASK(SECOND), (yylsp[-2]))); - } -#line 26051 "third_party/libpg_query/grammar/grammar_out.cpp" + INTERVAL_MASK(SECOND), (yylsp[(1) - (3)]))); + ;} break; - case 899: /* opt_interval: %empty */ -#line 2106 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 26057 "third_party/libpg_query/grammar/grammar_out.cpp" + case 901: +#line 2117 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 900: /* a_expr: c_expr */ -#line 2137 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 26063 "third_party/libpg_query/grammar/grammar_out.cpp" + case 902: +#line 2148 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 901: /* a_expr: a_expr TYPECAST Typename */ -#line 2140 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeTypeCast((yyvsp[-2].node), (yyvsp[0].typnam), 0, (yylsp[-1])); } -#line 26069 "third_party/libpg_query/grammar/grammar_out.cpp" + case 903: +#line 2151 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeTypeCast((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].typnam), 0, (yylsp[(2) - (3)])); ;} break; - case 902: /* a_expr: a_expr COLLATE any_name */ -#line 2142 "third_party/libpg_query/grammar/statements/select.y" - { + case 904: +#line 2153 "third_party/libpg_query/grammar/statements/select.y" + { PGCollateClause *n = makeNode(PGCollateClause); - n->arg = (yyvsp[-2].node); - n->collname = (yyvsp[0].list); - n->location = (yylsp[-1]); + n->arg = (yyvsp[(1) - (3)].node); + n->collname = (yyvsp[(3) - (3)].list); + n->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *) n; - } -#line 26081 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 903: /* a_expr: a_expr AT TIME ZONE a_expr */ -#line 2150 "third_party/libpg_query/grammar/statements/select.y" - { + case 905: +#line 2161 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("timezone"), - list_make2((yyvsp[0].node), (yyvsp[-4].node)), - (yylsp[-3])); - } -#line 26091 "third_party/libpg_query/grammar/grammar_out.cpp" + list_make2((yyvsp[(5) - (5)].node), (yyvsp[(1) - (5)].node)), + (yylsp[(2) - (5)])); + ;} break; - case 904: /* a_expr: '+' a_expr */ -#line 2165 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } -#line 26097 "third_party/libpg_query/grammar/grammar_out.cpp" + case 906: +#line 2176 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 905: /* a_expr: '-' a_expr */ -#line 2167 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } -#line 26103 "third_party/libpg_query/grammar/grammar_out.cpp" + case 907: +#line 2178 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 906: /* a_expr: a_expr '+' a_expr */ -#line 2169 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26109 "third_party/libpg_query/grammar/grammar_out.cpp" + case 908: +#line 2180 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 907: /* a_expr: a_expr '-' a_expr */ -#line 2171 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "-", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26115 "third_party/libpg_query/grammar/grammar_out.cpp" + case 909: +#line 2182 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "-", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 908: /* a_expr: a_expr '*' a_expr */ -#line 2173 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "*", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26121 "third_party/libpg_query/grammar/grammar_out.cpp" + case 910: +#line 2184 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "*", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 909: /* a_expr: a_expr '/' a_expr */ -#line 2175 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "/", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26127 "third_party/libpg_query/grammar/grammar_out.cpp" + case 911: +#line 2186 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "/", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 910: /* a_expr: a_expr INTEGER_DIVISION a_expr */ -#line 2177 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "//", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26133 "third_party/libpg_query/grammar/grammar_out.cpp" + case 912: +#line 2188 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "//", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 911: /* a_expr: a_expr '%' a_expr */ -#line 2179 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "%", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26139 "third_party/libpg_query/grammar/grammar_out.cpp" + case 913: +#line 2190 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "%", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 912: /* a_expr: a_expr '^' a_expr */ -#line 2181 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "^", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26145 "third_party/libpg_query/grammar/grammar_out.cpp" + case 914: +#line 2192 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "^", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 913: /* a_expr: a_expr POWER_OF a_expr */ -#line 2183 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "**", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26151 "third_party/libpg_query/grammar/grammar_out.cpp" + case 915: +#line 2194 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "**", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 914: /* a_expr: a_expr '<' a_expr */ -#line 2185 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26157 "third_party/libpg_query/grammar/grammar_out.cpp" + case 916: +#line 2196 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 915: /* a_expr: a_expr '>' a_expr */ -#line 2187 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26163 "third_party/libpg_query/grammar/grammar_out.cpp" + case 917: +#line 2198 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 916: /* a_expr: a_expr '=' a_expr */ -#line 2189 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26169 "third_party/libpg_query/grammar/grammar_out.cpp" + case 918: +#line 2200 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 917: /* a_expr: a_expr LESS_EQUALS a_expr */ -#line 2191 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26175 "third_party/libpg_query/grammar/grammar_out.cpp" + case 919: +#line 2202 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 918: /* a_expr: a_expr GREATER_EQUALS a_expr */ -#line 2193 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26181 "third_party/libpg_query/grammar/grammar_out.cpp" + case 920: +#line 2204 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 919: /* a_expr: a_expr NOT_EQUALS a_expr */ -#line 2195 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<>", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26187 "third_party/libpg_query/grammar/grammar_out.cpp" + case 921: +#line 2206 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<>", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 920: /* a_expr: a_expr qual_Op a_expr */ -#line 2198 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[-1].list), (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26193 "third_party/libpg_query/grammar/grammar_out.cpp" + case 922: +#line 2209 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(2) - (3)].list), (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 921: /* a_expr: qual_Op a_expr */ -#line 2200 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[-1].list), NULL, (yyvsp[0].node), (yylsp[-1])); } -#line 26199 "third_party/libpg_query/grammar/grammar_out.cpp" + case 923: +#line 2211 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(1) - (2)].list), NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 922: /* a_expr: a_expr qual_Op */ -#line 2202 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[0].list), (yyvsp[-1].node), NULL, (yylsp[0])); } -#line 26205 "third_party/libpg_query/grammar/grammar_out.cpp" + case 924: +#line 2213 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(2) - (2)].list), (yyvsp[(1) - (2)].node), NULL, (yylsp[(2) - (2)])); ;} break; - case 923: /* a_expr: a_expr AND a_expr */ -#line 2205 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeAndExpr((yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26211 "third_party/libpg_query/grammar/grammar_out.cpp" + case 925: +#line 2216 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeAndExpr((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 924: /* a_expr: a_expr OR a_expr */ -#line 2207 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeOrExpr((yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26217 "third_party/libpg_query/grammar/grammar_out.cpp" + case 926: +#line 2218 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeOrExpr((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 925: /* a_expr: NOT a_expr */ -#line 2209 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeNotExpr((yyvsp[0].node), (yylsp[-1])); } -#line 26223 "third_party/libpg_query/grammar/grammar_out.cpp" + case 927: +#line 2220 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeNotExpr((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 926: /* a_expr: NOT_LA a_expr */ -#line 2211 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeNotExpr((yyvsp[0].node), (yylsp[-1])); } -#line 26229 "third_party/libpg_query/grammar/grammar_out.cpp" + case 928: +#line 2222 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeNotExpr((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 927: /* a_expr: a_expr GLOB a_expr */ -#line 2213 "third_party/libpg_query/grammar/statements/select.y" - { + case 929: +#line 2224 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_GLOB, "~~~", - (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); - } -#line 26238 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); + ;} break; - case 928: /* a_expr: a_expr LIKE a_expr */ -#line 2218 "third_party/libpg_query/grammar/statements/select.y" - { + case 930: +#line 2229 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_LIKE, "~~", - (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); - } -#line 26247 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); + ;} break; - case 929: /* a_expr: a_expr LIKE a_expr ESCAPE a_expr */ -#line 2223 "third_party/libpg_query/grammar/statements/select.y" - { + case 931: +#line 2234 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("like_escape"), - list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-3])); + list_make3((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)), + (yylsp[(2) - (5)])); (yyval.node) = (PGNode *) n; - } -#line 26258 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 930: /* a_expr: a_expr NOT_LA LIKE a_expr */ -#line 2230 "third_party/libpg_query/grammar/statements/select.y" - { + case 932: +#line 2241 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_LIKE, "!~~", - (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); - } -#line 26267 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node), (yylsp[(2) - (4)])); + ;} break; - case 931: /* a_expr: a_expr NOT_LA LIKE a_expr ESCAPE a_expr */ -#line 2235 "third_party/libpg_query/grammar/statements/select.y" - { + case 933: +#line 2246 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("not_like_escape"), - list_make3((yyvsp[-5].node), (yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-4])); + list_make3((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), + (yylsp[(2) - (6)])); (yyval.node) = (PGNode *) n; - } -#line 26278 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 932: /* a_expr: a_expr ILIKE a_expr */ -#line 2242 "third_party/libpg_query/grammar/statements/select.y" - { + case 934: +#line 2253 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_ILIKE, "~~*", - (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); - } -#line 26287 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); + ;} break; - case 933: /* a_expr: a_expr ILIKE a_expr ESCAPE a_expr */ -#line 2247 "third_party/libpg_query/grammar/statements/select.y" - { + case 935: +#line 2258 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("ilike_escape"), - list_make3((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-3])); + list_make3((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)), + (yylsp[(2) - (5)])); (yyval.node) = (PGNode *) n; - } -#line 26298 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 934: /* a_expr: a_expr NOT_LA ILIKE a_expr */ -#line 2254 "third_party/libpg_query/grammar/statements/select.y" - { + case 936: +#line 2265 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_ILIKE, "!~~*", - (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); - } -#line 26307 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node), (yylsp[(2) - (4)])); + ;} break; - case 935: /* a_expr: a_expr NOT_LA ILIKE a_expr ESCAPE a_expr */ -#line 2259 "third_party/libpg_query/grammar/statements/select.y" - { + case 937: +#line 2270 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("not_ilike_escape"), - list_make3((yyvsp[-5].node), (yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-4])); + list_make3((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), + (yylsp[(2) - (6)])); (yyval.node) = (PGNode *) n; - } -#line 26318 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 936: /* a_expr: a_expr SIMILAR TO a_expr */ -#line 2267 "third_party/libpg_query/grammar/statements/select.y" - { + case 938: +#line 2278 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("similar_escape"), - list_make2((yyvsp[0].node), makeNullAConst(-1)), - (yylsp[-2])); + list_make2((yyvsp[(4) - (4)].node), makeNullAConst(-1)), + (yylsp[(2) - (4)])); (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_SIMILAR, "~", - (yyvsp[-3].node), (PGNode *) n, (yylsp[-2])); - } -#line 26330 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (4)].node), (PGNode *) n, (yylsp[(2) - (4)])); + ;} break; - case 937: /* a_expr: a_expr SIMILAR TO a_expr ESCAPE a_expr */ -#line 2275 "third_party/libpg_query/grammar/statements/select.y" - { + case 939: +#line 2286 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("similar_escape"), - list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-4])); + list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), + (yylsp[(2) - (6)])); (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_SIMILAR, "~", - (yyvsp[-5].node), (PGNode *) n, (yylsp[-4])); - } -#line 26342 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (6)].node), (PGNode *) n, (yylsp[(2) - (6)])); + ;} break; - case 938: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr */ -#line 2283 "third_party/libpg_query/grammar/statements/select.y" - { + case 940: +#line 2294 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("similar_escape"), - list_make2((yyvsp[0].node), makeNullAConst(-1)), - (yylsp[-3])); + list_make2((yyvsp[(5) - (5)].node), makeNullAConst(-1)), + (yylsp[(2) - (5)])); (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_SIMILAR, "!~", - (yyvsp[-4].node), (PGNode *) n, (yylsp[-3])); - } -#line 26354 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (5)].node), (PGNode *) n, (yylsp[(2) - (5)])); + ;} break; - case 939: /* a_expr: a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr */ -#line 2291 "third_party/libpg_query/grammar/statements/select.y" - { + case 941: +#line 2302 "third_party/libpg_query/grammar/statements/select.y" + { PGFuncCall *n = makeFuncCall(SystemFuncName("similar_escape"), - list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-5])); + list_make2((yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)), + (yylsp[(2) - (7)])); (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_SIMILAR, "!~", - (yyvsp[-6].node), (PGNode *) n, (yylsp[-5])); - } -#line 26366 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (7)].node), (PGNode *) n, (yylsp[(2) - (7)])); + ;} break; - case 940: /* a_expr: a_expr IS NULL_P */ -#line 2309 "third_party/libpg_query/grammar/statements/select.y" - { + case 942: +#line 2320 "third_party/libpg_query/grammar/statements/select.y" + { PGNullTest *n = makeNode(PGNullTest); - n->arg = (PGExpr *) (yyvsp[-2].node); + n->arg = (PGExpr *) (yyvsp[(1) - (3)].node); n->nulltesttype = PG_IS_NULL; - n->location = (yylsp[-1]); + n->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)n; - } -#line 26378 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 941: /* a_expr: a_expr ISNULL */ -#line 2317 "third_party/libpg_query/grammar/statements/select.y" - { + case 943: +#line 2328 "third_party/libpg_query/grammar/statements/select.y" + { PGNullTest *n = makeNode(PGNullTest); - n->arg = (PGExpr *) (yyvsp[-1].node); + n->arg = (PGExpr *) (yyvsp[(1) - (2)].node); n->nulltesttype = PG_IS_NULL; - n->location = (yylsp[0]); + n->location = (yylsp[(2) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 26390 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 942: /* a_expr: a_expr IS NOT NULL_P */ -#line 2325 "third_party/libpg_query/grammar/statements/select.y" - { + case 944: +#line 2336 "third_party/libpg_query/grammar/statements/select.y" + { PGNullTest *n = makeNode(PGNullTest); - n->arg = (PGExpr *) (yyvsp[-3].node); + n->arg = (PGExpr *) (yyvsp[(1) - (4)].node); n->nulltesttype = IS_NOT_NULL; - n->location = (yylsp[-2]); + n->location = (yylsp[(2) - (4)]); (yyval.node) = (PGNode *)n; - } -#line 26402 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 943: /* a_expr: a_expr NOT NULL_P */ -#line 2333 "third_party/libpg_query/grammar/statements/select.y" - { + case 945: +#line 2344 "third_party/libpg_query/grammar/statements/select.y" + { PGNullTest *n = makeNode(PGNullTest); - n->arg = (PGExpr *) (yyvsp[-2].node); + n->arg = (PGExpr *) (yyvsp[(1) - (3)].node); n->nulltesttype = IS_NOT_NULL; - n->location = (yylsp[-1]); + n->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)n; - } -#line 26414 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 944: /* a_expr: a_expr NOTNULL */ -#line 2341 "third_party/libpg_query/grammar/statements/select.y" - { + case 946: +#line 2352 "third_party/libpg_query/grammar/statements/select.y" + { PGNullTest *n = makeNode(PGNullTest); - n->arg = (PGExpr *) (yyvsp[-1].node); + n->arg = (PGExpr *) (yyvsp[(1) - (2)].node); n->nulltesttype = IS_NOT_NULL; - n->location = (yylsp[0]); + n->location = (yylsp[(2) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 26426 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 945: /* a_expr: a_expr LAMBDA_ARROW a_expr */ -#line 2349 "third_party/libpg_query/grammar/statements/select.y" - { + case 947: +#line 2360 "third_party/libpg_query/grammar/statements/select.y" + { PGLambdaFunction *n = makeNode(PGLambdaFunction); - n->lhs = (yyvsp[-2].node); - n->rhs = (yyvsp[0].node); - n->location = (yylsp[-1]); + n->lhs = (yyvsp[(1) - (3)].node); + n->rhs = (yyvsp[(3) - (3)].node); + n->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *) n; - } -#line 26438 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 946: /* a_expr: a_expr DOUBLE_ARROW a_expr */ -#line 2357 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "->>", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); - } -#line 26446 "third_party/libpg_query/grammar/grammar_out.cpp" + case 948: +#line 2368 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "->>", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); + ;} break; - case 947: /* a_expr: row OVERLAPS row */ -#line 2361 "third_party/libpg_query/grammar/statements/select.y" - { - if (list_length((yyvsp[-2].list)) != 2) + case 949: +#line 2372 "third_party/libpg_query/grammar/statements/select.y" + { + if (list_length((yyvsp[(1) - (3)].list)) != 2) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("wrong number of parameters on left side of OVERLAPS expression"), - parser_errposition((yylsp[-2])))); - if (list_length((yyvsp[0].list)) != 2) + parser_errposition((yylsp[(1) - (3)])))); + if (list_length((yyvsp[(3) - (3)].list)) != 2) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("wrong number of parameters on right side of OVERLAPS expression"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(3) - (3)])))); (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("overlaps"), - list_concat((yyvsp[-2].list), (yyvsp[0].list)), - (yylsp[-1])); - } -#line 26466 "third_party/libpg_query/grammar/grammar_out.cpp" + list_concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)), + (yylsp[(2) - (3)])); + ;} break; - case 948: /* a_expr: a_expr IS TRUE_P */ -#line 2377 "third_party/libpg_query/grammar/statements/select.y" - { + case 950: +#line 2388 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-2].node); + b->arg = (PGExpr *) (yyvsp[(1) - (3)].node); b->booltesttype = PG_IS_TRUE; - b->location = (yylsp[-1]); + b->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)b; - } -#line 26478 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 949: /* a_expr: a_expr IS NOT TRUE_P */ -#line 2385 "third_party/libpg_query/grammar/statements/select.y" - { + case 951: +#line 2396 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-3].node); + b->arg = (PGExpr *) (yyvsp[(1) - (4)].node); b->booltesttype = IS_NOT_TRUE; - b->location = (yylsp[-2]); + b->location = (yylsp[(2) - (4)]); (yyval.node) = (PGNode *)b; - } -#line 26490 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 950: /* a_expr: a_expr IS FALSE_P */ -#line 2393 "third_party/libpg_query/grammar/statements/select.y" - { + case 952: +#line 2404 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-2].node); + b->arg = (PGExpr *) (yyvsp[(1) - (3)].node); b->booltesttype = IS_FALSE; - b->location = (yylsp[-1]); + b->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)b; - } -#line 26502 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 951: /* a_expr: a_expr IS NOT FALSE_P */ -#line 2401 "third_party/libpg_query/grammar/statements/select.y" - { + case 953: +#line 2412 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-3].node); + b->arg = (PGExpr *) (yyvsp[(1) - (4)].node); b->booltesttype = IS_NOT_FALSE; - b->location = (yylsp[-2]); + b->location = (yylsp[(2) - (4)]); (yyval.node) = (PGNode *)b; - } -#line 26514 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 952: /* a_expr: a_expr IS UNKNOWN */ -#line 2409 "third_party/libpg_query/grammar/statements/select.y" - { + case 954: +#line 2420 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-2].node); + b->arg = (PGExpr *) (yyvsp[(1) - (3)].node); b->booltesttype = IS_UNKNOWN; - b->location = (yylsp[-1]); + b->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)b; - } -#line 26526 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 953: /* a_expr: a_expr IS NOT UNKNOWN */ -#line 2417 "third_party/libpg_query/grammar/statements/select.y" - { + case 955: +#line 2428 "third_party/libpg_query/grammar/statements/select.y" + { PGBooleanTest *b = makeNode(PGBooleanTest); - b->arg = (PGExpr *) (yyvsp[-3].node); + b->arg = (PGExpr *) (yyvsp[(1) - (4)].node); b->booltesttype = IS_NOT_UNKNOWN; - b->location = (yylsp[-2]); + b->location = (yylsp[(2) - (4)]); (yyval.node) = (PGNode *)b; - } -#line 26538 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 954: /* a_expr: a_expr IS DISTINCT FROM a_expr */ -#line 2425 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_DISTINCT, "=", (yyvsp[-4].node), (yyvsp[0].node), (yylsp[-3])); - } -#line 26546 "third_party/libpg_query/grammar/grammar_out.cpp" + case 956: +#line 2436 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_DISTINCT, "=", (yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node), (yylsp[(2) - (5)])); + ;} break; - case 955: /* a_expr: a_expr IS NOT DISTINCT FROM a_expr */ -#line 2429 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_DISTINCT, "=", (yyvsp[-5].node), (yyvsp[0].node), (yylsp[-4])); - } -#line 26554 "third_party/libpg_query/grammar/grammar_out.cpp" + case 957: +#line 2440 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_DISTINCT, "=", (yyvsp[(1) - (6)].node), (yyvsp[(6) - (6)].node), (yylsp[(2) - (6)])); + ;} break; - case 956: /* a_expr: a_expr IS OF '(' type_list ')' */ -#line 2433 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "=", (yyvsp[-5].node), (PGNode *) (yyvsp[-1].list), (yylsp[-4])); - } -#line 26562 "third_party/libpg_query/grammar/grammar_out.cpp" + case 958: +#line 2444 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "=", (yyvsp[(1) - (6)].node), (PGNode *) (yyvsp[(5) - (6)].list), (yylsp[(2) - (6)])); + ;} break; - case 957: /* a_expr: a_expr IS NOT OF '(' type_list ')' */ -#line 2437 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "<>", (yyvsp[-6].node), (PGNode *) (yyvsp[-1].list), (yylsp[-5])); - } -#line 26570 "third_party/libpg_query/grammar/grammar_out.cpp" + case 959: +#line 2448 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "<>", (yyvsp[(1) - (7)].node), (PGNode *) (yyvsp[(6) - (7)].list), (yylsp[(2) - (7)])); + ;} break; - case 958: /* a_expr: a_expr BETWEEN opt_asymmetric b_expr AND a_expr */ -#line 2441 "third_party/libpg_query/grammar/statements/select.y" - { + case 960: +#line 2452 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_BETWEEN, "BETWEEN", - (yyvsp[-5].node), - (PGNode *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-4])); - } -#line 26582 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (6)].node), + (PGNode *) list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), + (yylsp[(2) - (6)])); + ;} break; - case 959: /* a_expr: a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr */ -#line 2449 "third_party/libpg_query/grammar/statements/select.y" - { + case 961: +#line 2460 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_BETWEEN, "NOT BETWEEN", - (yyvsp[-6].node), - (PGNode *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-5])); - } -#line 26594 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (7)].node), + (PGNode *) list_make2((yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)), + (yylsp[(2) - (7)])); + ;} break; - case 960: /* a_expr: a_expr BETWEEN SYMMETRIC b_expr AND a_expr */ -#line 2457 "third_party/libpg_query/grammar/statements/select.y" - { + case 962: +#line 2468 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_BETWEEN_SYM, "BETWEEN SYMMETRIC", - (yyvsp[-5].node), - (PGNode *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-4])); - } -#line 26606 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (6)].node), + (PGNode *) list_make2((yyvsp[(4) - (6)].node), (yyvsp[(6) - (6)].node)), + (yylsp[(2) - (6)])); + ;} break; - case 961: /* a_expr: a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr */ -#line 2465 "third_party/libpg_query/grammar/statements/select.y" - { + case 963: +#line 2476 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_BETWEEN_SYM, "NOT BETWEEN SYMMETRIC", - (yyvsp[-6].node), - (PGNode *) list_make2((yyvsp[-2].node), (yyvsp[0].node)), - (yylsp[-5])); - } -#line 26618 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyvsp[(1) - (7)].node), + (PGNode *) list_make2((yyvsp[(5) - (7)].node), (yyvsp[(7) - (7)].node)), + (yylsp[(2) - (7)])); + ;} break; - case 962: /* a_expr: a_expr IN_P in_expr */ -#line 2473 "third_party/libpg_query/grammar/statements/select.y" - { + case 964: +#line 2484 "third_party/libpg_query/grammar/statements/select.y" + { /* in_expr returns a PGSubLink or a list of a_exprs */ - if (IsA((yyvsp[0].node), PGSubLink)) + if (IsA((yyvsp[(3) - (3)].node), PGSubLink)) { /* generate foo = ANY (subquery) */ - PGSubLink *n = (PGSubLink *) (yyvsp[0].node); + PGSubLink *n = (PGSubLink *) (yyvsp[(3) - (3)].node); n->subLinkType = PG_ANY_SUBLINK; n->subLinkId = 0; - n->testexpr = (yyvsp[-2].node); + n->testexpr = (yyvsp[(1) - (3)].node); n->operName = NIL; /* show it's IN not = ANY */ - n->location = (yylsp[-1]); + n->location = (yylsp[(2) - (3)]); (yyval.node) = (PGNode *)n; } else { /* generate scalar IN expression */ - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_IN, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_IN, "=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); } - } -#line 26642 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 963: /* a_expr: a_expr NOT_LA IN_P in_expr */ -#line 2493 "third_party/libpg_query/grammar/statements/select.y" - { + case 965: +#line 2504 "third_party/libpg_query/grammar/statements/select.y" + { /* in_expr returns a PGSubLink or a list of a_exprs */ - if (IsA((yyvsp[0].node), PGSubLink)) + if (IsA((yyvsp[(4) - (4)].node), PGSubLink)) { /* generate NOT (foo = ANY (subquery)) */ /* Make an = ANY node */ - PGSubLink *n = (PGSubLink *) (yyvsp[0].node); + PGSubLink *n = (PGSubLink *) (yyvsp[(4) - (4)].node); n->subLinkType = PG_ANY_SUBLINK; n->subLinkId = 0; - n->testexpr = (yyvsp[-3].node); + n->testexpr = (yyvsp[(1) - (4)].node); n->operName = NIL; /* show it's IN not = ANY */ - n->location = (yylsp[-2]); + n->location = (yylsp[(2) - (4)]); /* Stick a NOT on top; must have same parse location */ - (yyval.node) = makeNotExpr((PGNode *) n, (yylsp[-2])); + (yyval.node) = makeNotExpr((PGNode *) n, (yylsp[(2) - (4)])); } else { /* generate scalar NOT IN expression */ - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_IN, "<>", (yyvsp[-3].node), (yyvsp[0].node), (yylsp[-2])); + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_IN, "<>", (yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node), (yylsp[(2) - (4)])); } - } -#line 26668 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 964: /* a_expr: a_expr subquery_Op sub_type select_with_parens */ -#line 2515 "third_party/libpg_query/grammar/statements/select.y" - { + case 966: +#line 2526 "third_party/libpg_query/grammar/statements/select.y" + { PGSubLink *n = makeNode(PGSubLink); - n->subLinkType = (yyvsp[-1].subquerytype); + n->subLinkType = (yyvsp[(3) - (4)].subquerytype); n->subLinkId = 0; - n->testexpr = (yyvsp[-3].node); - n->operName = (yyvsp[-2].list); - n->subselect = (yyvsp[0].node); - n->location = (yylsp[-2]); + n->testexpr = (yyvsp[(1) - (4)].node); + n->operName = (yyvsp[(2) - (4)].list); + n->subselect = (yyvsp[(4) - (4)].node); + n->location = (yylsp[(2) - (4)]); (yyval.node) = (PGNode *)n; - } -#line 26683 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 965: /* a_expr: a_expr subquery_Op sub_type '(' a_expr ')' */ -#line 2526 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[-3].subquerytype) == PG_ANY_SUBLINK) - (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP_ANY, (yyvsp[-4].list), (yyvsp[-5].node), (yyvsp[-1].node), (yylsp[-4])); + case 967: +#line 2537 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(3) - (6)].subquerytype) == PG_ANY_SUBLINK) + (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP_ANY, (yyvsp[(2) - (6)].list), (yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].node), (yylsp[(2) - (6)])); else - (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP_ALL, (yyvsp[-4].list), (yyvsp[-5].node), (yyvsp[-1].node), (yylsp[-4])); - } -#line 26694 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP_ALL, (yyvsp[(2) - (6)].list), (yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].node), (yylsp[(2) - (6)])); + ;} break; - case 966: /* a_expr: DEFAULT */ -#line 2533 "third_party/libpg_query/grammar/statements/select.y" - { + case 968: +#line 2544 "third_party/libpg_query/grammar/statements/select.y" + { /* * The SQL spec only allows DEFAULT in "contextually typed * expressions", but for us, it's easier to allow it in @@ -26705,329 +26973,220 @@ YYLTYPE yylloc = yyloc_default; */ PGSetToDefault *n = makeNode(PGSetToDefault); /* parse analysis will fill in the rest */ - n->location = (yylsp[0]); + n->location = (yylsp[(1) - (1)]); (yyval.node) = (PGNode *)n; - } -#line 26712 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 967: /* a_expr: COLUMNS '(' a_expr ')' */ -#line 2547 "third_party/libpg_query/grammar/statements/select.y" - { + case 969: +#line 2558 "third_party/libpg_query/grammar/statements/select.y" + { PGAStar *star = makeNode(PGAStar); - star->expr = (yyvsp[-1].node); + star->expr = (yyvsp[(3) - (4)].node); star->columns = true; - star->location = (yylsp[-3]); + star->location = (yylsp[(1) - (4)]); (yyval.node) = (PGNode *) star; - } -#line 26724 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 968: /* a_expr: '*' opt_except_list opt_replace_list */ -#line 2555 "third_party/libpg_query/grammar/statements/select.y" - { + case 970: +#line 2566 "third_party/libpg_query/grammar/statements/select.y" + { PGAStar *star = makeNode(PGAStar); - star->except_list = (yyvsp[-1].list); - star->replace_list = (yyvsp[0].list); - star->location = (yylsp[-2]); + star->except_list = (yyvsp[(2) - (3)].list); + star->replace_list = (yyvsp[(3) - (3)].list); + star->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) star; - } -#line 26736 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 969: /* a_expr: ColId '.' '*' opt_except_list opt_replace_list */ -#line 2563 "third_party/libpg_query/grammar/statements/select.y" - { + case 971: +#line 2574 "third_party/libpg_query/grammar/statements/select.y" + { PGAStar *star = makeNode(PGAStar); - star->relation = (yyvsp[-4].str); - star->except_list = (yyvsp[-1].list); - star->replace_list = (yyvsp[0].list); - star->location = (yylsp[-4]); + star->relation = (yyvsp[(1) - (5)].str); + star->except_list = (yyvsp[(4) - (5)].list); + star->replace_list = (yyvsp[(5) - (5)].list); + star->location = (yylsp[(1) - (5)]); (yyval.node) = (PGNode *) star; - } -#line 26749 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 970: /* b_expr: c_expr */ -#line 2583 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 26755 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 971: /* b_expr: b_expr TYPECAST Typename */ -#line 2585 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeTypeCast((yyvsp[-2].node), (yyvsp[0].typnam), 0, (yylsp[-1])); } -#line 26761 "third_party/libpg_query/grammar/grammar_out.cpp" + case 972: +#line 2594 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 972: /* b_expr: '+' b_expr */ -#line 2587 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[0].node), (yylsp[-1])); } -#line 26767 "third_party/libpg_query/grammar/grammar_out.cpp" + case 973: +#line 2596 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeTypeCast((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].typnam), 0, (yylsp[(2) - (3)])); ;} break; - case 973: /* b_expr: '-' b_expr */ -#line 2589 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = doNegate((yyvsp[0].node), (yylsp[-1])); } -#line 26773 "third_party/libpg_query/grammar/grammar_out.cpp" + case 974: +#line 2598 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 974: /* b_expr: b_expr '+' b_expr */ -#line 2591 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26779 "third_party/libpg_query/grammar/grammar_out.cpp" + case 975: +#line 2600 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = doNegate((yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 975: /* b_expr: b_expr '-' b_expr */ -#line 2593 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "-", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26785 "third_party/libpg_query/grammar/grammar_out.cpp" + case 976: +#line 2602 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "+", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 976: /* b_expr: b_expr '*' b_expr */ -#line 2595 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "*", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26791 "third_party/libpg_query/grammar/grammar_out.cpp" + case 977: +#line 2604 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "-", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 977: /* b_expr: b_expr '/' b_expr */ -#line 2597 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "/", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26797 "third_party/libpg_query/grammar/grammar_out.cpp" + case 978: +#line 2606 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "*", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 978: /* b_expr: b_expr INTEGER_DIVISION b_expr */ -#line 2599 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "//", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26803 "third_party/libpg_query/grammar/grammar_out.cpp" + case 979: +#line 2608 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "/", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 979: /* b_expr: b_expr '%' b_expr */ -#line 2601 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "%", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26809 "third_party/libpg_query/grammar/grammar_out.cpp" + case 980: +#line 2610 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "//", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 980: /* b_expr: b_expr '^' b_expr */ -#line 2603 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "^", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26815 "third_party/libpg_query/grammar/grammar_out.cpp" + case 981: +#line 2612 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "%", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 981: /* b_expr: b_expr POWER_OF b_expr */ -#line 2605 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "**", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26821 "third_party/libpg_query/grammar/grammar_out.cpp" + case 982: +#line 2614 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "^", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 982: /* b_expr: b_expr '<' b_expr */ -#line 2607 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26827 "third_party/libpg_query/grammar/grammar_out.cpp" + case 983: +#line 2616 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "**", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 983: /* b_expr: b_expr '>' b_expr */ -#line 2609 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26833 "third_party/libpg_query/grammar/grammar_out.cpp" + case 984: +#line 2618 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 984: /* b_expr: b_expr '=' b_expr */ -#line 2611 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26839 "third_party/libpg_query/grammar/grammar_out.cpp" + case 985: +#line 2620 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 985: /* b_expr: b_expr LESS_EQUALS b_expr */ -#line 2613 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26845 "third_party/libpg_query/grammar/grammar_out.cpp" + case 986: +#line 2622 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 986: /* b_expr: b_expr GREATER_EQUALS b_expr */ -#line 2615 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">=", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26851 "third_party/libpg_query/grammar/grammar_out.cpp" + case 987: +#line 2624 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 987: /* b_expr: b_expr NOT_EQUALS b_expr */ -#line 2617 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<>", (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26857 "third_party/libpg_query/grammar/grammar_out.cpp" + case 988: +#line 2626 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, ">=", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 988: /* b_expr: b_expr qual_Op b_expr */ -#line 2619 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[-1].list), (yyvsp[-2].node), (yyvsp[0].node), (yylsp[-1])); } -#line 26863 "third_party/libpg_query/grammar/grammar_out.cpp" + case 989: +#line 2628 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OP, "<>", (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 989: /* b_expr: qual_Op b_expr */ -#line 2621 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[-1].list), NULL, (yyvsp[0].node), (yylsp[-1])); } -#line 26869 "third_party/libpg_query/grammar/grammar_out.cpp" + case 990: +#line 2630 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(2) - (3)].list), (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yylsp[(2) - (3)])); ;} break; - case 990: /* b_expr: b_expr qual_Op */ -#line 2623 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[0].list), (yyvsp[-1].node), NULL, (yylsp[0])); } -#line 26875 "third_party/libpg_query/grammar/grammar_out.cpp" + case 991: +#line 2632 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(1) - (2)].list), NULL, (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); ;} break; - case 991: /* b_expr: b_expr IS DISTINCT FROM b_expr */ -#line 2625 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_DISTINCT, "=", (yyvsp[-4].node), (yyvsp[0].node), (yylsp[-3])); - } -#line 26883 "third_party/libpg_query/grammar/grammar_out.cpp" + case 992: +#line 2634 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeAExpr(PG_AEXPR_OP, (yyvsp[(2) - (2)].list), (yyvsp[(1) - (2)].node), NULL, (yylsp[(2) - (2)])); ;} break; - case 992: /* b_expr: b_expr IS NOT DISTINCT FROM b_expr */ -#line 2629 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_DISTINCT, "=", (yyvsp[-5].node), (yyvsp[0].node), (yylsp[-4])); - } -#line 26891 "third_party/libpg_query/grammar/grammar_out.cpp" + case 993: +#line 2636 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_DISTINCT, "=", (yyvsp[(1) - (5)].node), (yyvsp[(5) - (5)].node), (yylsp[(2) - (5)])); + ;} break; - case 993: /* b_expr: b_expr IS OF '(' type_list ')' */ -#line 2633 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "=", (yyvsp[-5].node), (PGNode *) (yyvsp[-1].list), (yylsp[-4])); - } -#line 26899 "third_party/libpg_query/grammar/grammar_out.cpp" + case 994: +#line 2640 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NOT_DISTINCT, "=", (yyvsp[(1) - (6)].node), (yyvsp[(6) - (6)].node), (yylsp[(2) - (6)])); + ;} break; - case 994: /* b_expr: b_expr IS NOT OF '(' type_list ')' */ -#line 2637 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "<>", (yyvsp[-6].node), (PGNode *) (yyvsp[-1].list), (yylsp[-5])); - } -#line 26907 "third_party/libpg_query/grammar/grammar_out.cpp" + case 995: +#line 2644 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "=", (yyvsp[(1) - (6)].node), (PGNode *) (yyvsp[(5) - (6)].list), (yylsp[(2) - (6)])); + ;} break; - case 996: /* c_expr: row */ -#line 2651 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall(SystemFuncName("row"), (yyvsp[0].list), (yylsp[0])); - (yyval.node) = (PGNode *) n; - } -#line 26916 "third_party/libpg_query/grammar/grammar_out.cpp" + case 996: +#line 2648 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_OF, "<>", (yyvsp[(1) - (7)].node), (PGNode *) (yyvsp[(6) - (7)].list), (yylsp[(2) - (7)])); + ;} break; - case 997: /* c_expr: indirection_expr opt_extended_indirection */ -#line 2656 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].list)) + case 998: +#line 2663 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(2) - (2)].list)) { PGAIndirection *n = makeNode(PGAIndirection); - n->arg = (PGNode *) (yyvsp[-1].node); - n->indirection = check_indirection((yyvsp[0].list), yyscanner); + n->arg = (PGNode *) (yyvsp[(1) - (2)].node); + n->indirection = check_indirection((yyvsp[(2) - (2)].list), yyscanner); (yyval.node) = (PGNode *) n; } else - (yyval.node) = (PGNode *) (yyvsp[-1].node); - } -#line 26932 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 998: /* d_expr: columnref */ -#line 2669 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 26938 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) (yyvsp[(1) - (2)].node); + ;} break; - case 999: /* d_expr: AexprConst */ -#line 2670 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 26944 "third_party/libpg_query/grammar/grammar_out.cpp" + case 999: +#line 2676 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1000: /* d_expr: '#' ICONST */ -#line 2672 "third_party/libpg_query/grammar/statements/select.y" - { - PGPositionalReference *n = makeNode(PGPositionalReference); - n->position = (yyvsp[0].ival); - n->location = (yylsp[-1]); - (yyval.node) = (PGNode *) n; - } -#line 26955 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1000: +#line 2677 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1001: /* d_expr: '$' ColLabel */ + case 1001: #line 2679 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeNamedParamRef((yyvsp[0].str), (yylsp[-1])); - } -#line 26963 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1002: /* d_expr: '[' opt_expr_list_opt_comma ']' */ -#line 2682 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall(SystemFuncName("list_value"), (yyvsp[-1].list), (yylsp[-1])); - (yyval.node) = (PGNode *) n; - } -#line 26972 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1003: /* d_expr: list_comprehension */ -#line 2686 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 26980 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1004: /* d_expr: ARRAY select_with_parens */ -#line 2690 "third_party/libpg_query/grammar/statements/select.y" - { - PGSubLink *n = makeNode(PGSubLink); - n->subLinkType = PG_ARRAY_SUBLINK; - n->subLinkId = 0; - n->testexpr = NULL; - n->operName = NULL; - n->subselect = (yyvsp[0].node); - n->location = (yylsp[0]); - (yyval.node) = (PGNode *)n; - } -#line 26995 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1005: /* d_expr: ARRAY '[' opt_expr_list_opt_comma ']' */ -#line 2700 "third_party/libpg_query/grammar/statements/select.y" - { - PGList *func_name = list_make1(makeString("construct_array")); - PGFuncCall *n = makeFuncCall(func_name, (yyvsp[-1].list), (yylsp[-3])); - (yyval.node) = (PGNode *) n; - } -#line 27005 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1006: /* d_expr: case_expr */ -#line 2706 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 27011 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1007: /* d_expr: select_with_parens */ -#line 2708 "third_party/libpg_query/grammar/statements/select.y" - { + { PGSubLink *n = makeNode(PGSubLink); n->subLinkType = PG_EXPR_SUBLINK; n->subLinkId = 0; n->testexpr = NULL; n->operName = NIL; - n->subselect = (yyvsp[0].node); - n->location = (yylsp[0]); + n->subselect = (yyvsp[(1) - (1)].node); + n->location = (yylsp[(1) - (1)]); (yyval.node) = (PGNode *)n; - } -#line 27026 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1008: /* d_expr: select_with_parens indirection */ -#line 2719 "third_party/libpg_query/grammar/statements/select.y" - { + case 1002: +#line 2690 "third_party/libpg_query/grammar/statements/select.y" + { /* * Because the select_with_parens nonterminal is designed * to "eat" as many levels of parens as possible, the @@ -27044,188 +27203,247 @@ YYLTYPE yylloc = yyloc_default; n->subLinkId = 0; n->testexpr = NULL; n->operName = NIL; - n->subselect = (yyvsp[-1].node); - n->location = (yylsp[-1]); + n->subselect = (yyvsp[(1) - (2)].node); + n->location = (yylsp[(1) - (2)]); a->arg = (PGNode *)n; - a->indirection = check_indirection((yyvsp[0].list), yyscanner); + a->indirection = check_indirection((yyvsp[(2) - (2)].list), yyscanner); (yyval.node) = (PGNode *)a; - } -#line 27054 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1009: /* d_expr: EXISTS select_with_parens */ -#line 2743 "third_party/libpg_query/grammar/statements/select.y" - { + case 1003: +#line 2714 "third_party/libpg_query/grammar/statements/select.y" + { PGSubLink *n = makeNode(PGSubLink); n->subLinkType = PG_EXISTS_SUBLINK; n->subLinkId = 0; n->testexpr = NULL; n->operName = NIL; - n->subselect = (yyvsp[0].node); - n->location = (yylsp[-1]); + n->subselect = (yyvsp[(2) - (2)].node); + n->location = (yylsp[(1) - (2)]); (yyval.node) = (PGNode *)n; - } -#line 27069 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1010: /* d_expr: grouping_or_grouping_id '(' expr_list_opt_comma ')' */ -#line 2754 "third_party/libpg_query/grammar/statements/select.y" - { + case 1004: +#line 2725 "third_party/libpg_query/grammar/statements/select.y" + { PGGroupingFunc *g = makeNode(PGGroupingFunc); - g->args = (yyvsp[-1].list); - g->location = (yylsp[-3]); + g->args = (yyvsp[(3) - (4)].list); + g->location = (yylsp[(1) - (4)]); (yyval.node) = (PGNode *)g; - } -#line 27080 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1011: /* indirection_expr: '?' */ -#line 2765 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeParamRef(0, (yylsp[0])); - } -#line 27088 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1005: +#line 2735 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(2) - (3)].node); + ;} break; - case 1012: /* indirection_expr: PARAM */ -#line 2769 "third_party/libpg_query/grammar/statements/select.y" - { - PGParamRef *p = makeNode(PGParamRef); - p->number = (yyvsp[0].ival); - p->location = (yylsp[0]); - (yyval.node) = (PGNode *) p; - } -#line 27099 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1006: +#line 2739 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} + break; + + case 1007: +#line 2742 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall(SystemFuncName("row"), (yyvsp[(1) - (1)].list), (yylsp[(1) - (1)])); + (yyval.node) = (PGNode *) n; + ;} + break; + + case 1008: +#line 2750 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeParamRef(0, (yylsp[(1) - (1)])); + ;} break; - case 1013: /* indirection_expr: '(' a_expr ')' */ -#line 2776 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[-1].node); - } -#line 27107 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1009: +#line 2754 "third_party/libpg_query/grammar/statements/select.y" + { + PGParamRef *p = makeNode(PGParamRef); + p->number = (yyvsp[(1) - (1)].ival); + p->location = (yylsp[(1) - (1)]); + (yyval.node) = (PGNode *) p; + ;} break; - case 1014: /* indirection_expr: struct_expr */ -#line 2780 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 27115 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1010: +#line 2761 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} break; - case 1015: /* indirection_expr: MAP '{' opt_map_arguments_opt_comma '}' */ -#line 2784 "third_party/libpg_query/grammar/statements/select.y" - { + case 1011: +#line 2765 "third_party/libpg_query/grammar/statements/select.y" + { PGList *key_list = NULL; PGList *value_list = NULL; PGListCell *lc; - PGList *entry_list = (yyvsp[-1].list); + PGList *entry_list = (yyvsp[(3) - (4)].list); foreach(lc, entry_list) { PGList *l = (PGList *) lc->data.ptr_value; key_list = lappend(key_list, (PGNode *) l->head->data.ptr_value); value_list = lappend(value_list, (PGNode *) l->tail->data.ptr_value); } - PGNode *keys = (PGNode *) makeFuncCall(SystemFuncName("list_value"), key_list, (yylsp[-1])); - PGNode *values = (PGNode *) makeFuncCall(SystemFuncName("list_value"), value_list, (yylsp[-1])); - PGFuncCall *f = makeFuncCall(SystemFuncName("map"), list_make2(keys, values), (yylsp[-1])); + PGNode *keys = (PGNode *) makeFuncCall(SystemFuncName("list_value"), key_list, (yylsp[(3) - (4)])); + PGNode *values = (PGNode *) makeFuncCall(SystemFuncName("list_value"), value_list, (yylsp[(3) - (4)])); + PGFuncCall *f = makeFuncCall(SystemFuncName("map"), list_make2(keys, values), (yylsp[(3) - (4)])); (yyval.node) = (PGNode *) f; - } -#line 27136 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1016: /* indirection_expr: func_expr */ -#line 2801 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 27144 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1012: +#line 2782 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} break; - case 1017: /* struct_expr: '{' dict_arguments_opt_comma '}' */ -#line 2809 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *f = makeFuncCall(SystemFuncName("struct_pack"), (yyvsp[-1].list), (yylsp[-1])); - (yyval.node) = (PGNode *) f; - } -#line 27153 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1013: +#line 2786 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} + break; + + case 1014: +#line 2787 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall(SystemFuncName("list_value"), (yyvsp[(2) - (3)].list), (yylsp[(2) - (3)])); + (yyval.node) = (PGNode *) n; + ;} + break; + + case 1015: +#line 2791 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} + break; + + case 1016: +#line 2795 "third_party/libpg_query/grammar/statements/select.y" + { + PGSubLink *n = makeNode(PGSubLink); + n->subLinkType = PG_ARRAY_SUBLINK; + n->subLinkId = 0; + n->testexpr = NULL; + n->operName = NULL; + n->subselect = (yyvsp[(2) - (2)].node); + n->location = (yylsp[(2) - (2)]); + (yyval.node) = (PGNode *)n; + ;} + break; + + case 1017: +#line 2805 "third_party/libpg_query/grammar/statements/select.y" + { + PGList *func_name = list_make1(makeString("construct_array")); + PGFuncCall *n = makeFuncCall(func_name, (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + (yyval.node) = (PGNode *) n; + ;} break; - case 1018: /* func_application: func_name '(' ')' */ + case 1018: +#line 2811 "third_party/libpg_query/grammar/statements/select.y" + { + PGPositionalReference *n = makeNode(PGPositionalReference); + n->position = (yyvsp[(2) - (2)].ival); + n->location = (yylsp[(1) - (2)]); + (yyval.node) = (PGNode *) n; + ;} + break; + + case 1019: #line 2818 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeFuncCall((yyvsp[-2].list), NIL, (yylsp[-2])); - } -#line 27161 "third_party/libpg_query/grammar/grammar_out.cpp" - break; - - case 1019: /* func_application: func_name '(' func_arg_list opt_sort_clause opt_ignore_nulls ')' */ -#line 2822 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall((yyvsp[-5].list), (yyvsp[-3].list), (yylsp[-5])); - n->agg_order = (yyvsp[-2].list); - n->agg_ignore_nulls = (yyvsp[-1].boolean); + { + (yyval.node) = makeNamedParamRef((yyvsp[(2) - (2)].str), (yylsp[(1) - (2)])); + ;} + break; + + case 1020: +#line 2826 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *f = makeFuncCall(SystemFuncName("struct_pack"), (yyvsp[(2) - (3)].list), (yylsp[(2) - (3)])); + (yyval.node) = (PGNode *) f; + ;} + break; + + case 1021: +#line 2835 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeFuncCall((yyvsp[(1) - (3)].list), NIL, (yylsp[(1) - (3)])); + ;} + break; + + case 1022: +#line 2839 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall((yyvsp[(1) - (6)].list), (yyvsp[(3) - (6)].list), (yylsp[(1) - (6)])); + n->agg_order = (yyvsp[(4) - (6)].list); + n->agg_ignore_nulls = (yyvsp[(5) - (6)].boolean); (yyval.node) = (PGNode *)n; - } -#line 27172 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1020: /* func_application: func_name '(' VARIADIC func_arg_expr opt_sort_clause opt_ignore_nulls ')' */ -#line 2829 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall((yyvsp[-6].list), list_make1((yyvsp[-3].node)), (yylsp[-6])); + case 1023: +#line 2846 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall((yyvsp[(1) - (7)].list), list_make1((yyvsp[(4) - (7)].node)), (yylsp[(1) - (7)])); n->func_variadic = true; - n->agg_order = (yyvsp[-2].list); - n->agg_ignore_nulls = (yyvsp[-1].boolean); + n->agg_order = (yyvsp[(5) - (7)].list); + n->agg_ignore_nulls = (yyvsp[(6) - (7)].boolean); (yyval.node) = (PGNode *)n; - } -#line 27184 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1021: /* func_application: func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause opt_ignore_nulls ')' */ -#line 2837 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall((yyvsp[-8].list), lappend((yyvsp[-6].list), (yyvsp[-3].node)), (yylsp[-8])); + case 1024: +#line 2854 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall((yyvsp[(1) - (9)].list), lappend((yyvsp[(3) - (9)].list), (yyvsp[(6) - (9)].node)), (yylsp[(1) - (9)])); n->func_variadic = true; - n->agg_order = (yyvsp[-2].list); - n->agg_ignore_nulls = (yyvsp[-1].boolean); + n->agg_order = (yyvsp[(7) - (9)].list); + n->agg_ignore_nulls = (yyvsp[(8) - (9)].boolean); (yyval.node) = (PGNode *)n; - } -#line 27196 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1022: /* func_application: func_name '(' ALL func_arg_list opt_sort_clause opt_ignore_nulls ')' */ -#line 2845 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall((yyvsp[-6].list), (yyvsp[-3].list), (yylsp[-6])); - n->agg_order = (yyvsp[-2].list); - n->agg_ignore_nulls = (yyvsp[-1].boolean); + case 1025: +#line 2862 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall((yyvsp[(1) - (7)].list), (yyvsp[(4) - (7)].list), (yylsp[(1) - (7)])); + n->agg_order = (yyvsp[(5) - (7)].list); + n->agg_ignore_nulls = (yyvsp[(6) - (7)].boolean); /* Ideally we'd mark the PGFuncCall node to indicate * "must be an aggregate", but there's no provision * for that in PGFuncCall at the moment. */ (yyval.node) = (PGNode *)n; - } -#line 27211 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1023: /* func_application: func_name '(' DISTINCT func_arg_list opt_sort_clause opt_ignore_nulls ')' */ -#line 2856 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = makeFuncCall((yyvsp[-6].list), (yyvsp[-3].list), (yylsp[-6])); - n->agg_order = (yyvsp[-2].list); - n->agg_ignore_nulls = (yyvsp[-1].boolean); + case 1026: +#line 2873 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = makeFuncCall((yyvsp[(1) - (7)].list), (yyvsp[(4) - (7)].list), (yylsp[(1) - (7)])); + n->agg_order = (yyvsp[(5) - (7)].list); + n->agg_ignore_nulls = (yyvsp[(6) - (7)].boolean); n->agg_distinct = true; (yyval.node) = (PGNode *)n; - } -#line 27223 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1024: /* func_expr: func_application within_group_clause filter_clause export_clause over_clause */ -#line 2876 "third_party/libpg_query/grammar/statements/select.y" - { - PGFuncCall *n = (PGFuncCall *) (yyvsp[-4].node); + case 1027: +#line 2893 "third_party/libpg_query/grammar/statements/select.y" + { + PGFuncCall *n = (PGFuncCall *) (yyvsp[(1) - (5)].node); /* * The order clause for WITHIN GROUP and the one for * plain-aggregate ORDER BY share a field, so we have to @@ -27234,118 +27452,107 @@ YYLTYPE yylloc = yyloc_default; * location. Other consistency checks are deferred to * parse analysis. */ - if ((yyvsp[-3].list) != NIL) + if ((yyvsp[(2) - (5)].list) != NIL) { if (n->agg_order != NIL) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("cannot use multiple ORDER BY clauses with WITHIN GROUP"), - parser_errposition((yylsp[-3])))); + parser_errposition((yylsp[(2) - (5)])))); if (n->agg_distinct) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("cannot use DISTINCT with WITHIN GROUP"), - parser_errposition((yylsp[-3])))); + parser_errposition((yylsp[(2) - (5)])))); if (n->func_variadic) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("cannot use VARIADIC with WITHIN GROUP"), - parser_errposition((yylsp[-3])))); - n->agg_order = (yyvsp[-3].list); + parser_errposition((yylsp[(2) - (5)])))); + n->agg_order = (yyvsp[(2) - (5)].list); n->agg_within_group = true; } - n->agg_filter = (yyvsp[-2].node); - n->export_state = (yyvsp[-1].boolean); - n->over = (yyvsp[0].windef); + n->agg_filter = (yyvsp[(3) - (5)].node); + n->export_state = (yyvsp[(4) - (5)].boolean); + n->over = (yyvsp[(5) - (5)].windef); (yyval.node) = (PGNode *) n; - } -#line 27263 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1025: /* func_expr: func_expr_common_subexpr */ -#line 2912 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 27269 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1028: +#line 2929 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1026: /* func_expr_windowless: func_application */ -#line 2922 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 27275 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1029: +#line 2939 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1027: /* func_expr_windowless: func_expr_common_subexpr */ -#line 2923 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 27281 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1030: +#line 2940 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1028: /* func_expr_common_subexpr: COLLATION FOR '(' a_expr ')' */ -#line 2931 "third_party/libpg_query/grammar/statements/select.y" - { + case 1031: +#line 2948 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("pg_collation_for"), - list_make1((yyvsp[-1].node)), - (yylsp[-4])); - } -#line 27291 "third_party/libpg_query/grammar/grammar_out.cpp" + list_make1((yyvsp[(4) - (5)].node)), + (yylsp[(1) - (5)])); + ;} break; - case 1029: /* func_expr_common_subexpr: CAST '(' a_expr AS Typename ')' */ -#line 2937 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeTypeCast((yyvsp[-3].node), (yyvsp[-1].typnam), 0, (yylsp[-5])); } -#line 27297 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1032: +#line 2954 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeTypeCast((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].typnam), 0, (yylsp[(1) - (6)])); ;} break; - case 1030: /* func_expr_common_subexpr: TRY_CAST '(' a_expr AS Typename ')' */ -#line 2939 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = makeTypeCast((yyvsp[-3].node), (yyvsp[-1].typnam), 1, (yylsp[-5])); } -#line 27303 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1033: +#line 2956 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = makeTypeCast((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].typnam), 1, (yylsp[(1) - (6)])); ;} break; - case 1031: /* func_expr_common_subexpr: EXTRACT '(' extract_list ')' */ -#line 2941 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("date_part"), (yyvsp[-1].list), (yylsp[-3])); - } -#line 27311 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1034: +#line 2958 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("date_part"), (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 1032: /* func_expr_common_subexpr: OVERLAY '(' overlay_list ')' */ -#line 2945 "third_party/libpg_query/grammar/statements/select.y" - { + case 1035: +#line 2962 "third_party/libpg_query/grammar/statements/select.y" + { /* overlay(A PLACING B FROM C FOR D) is converted to * overlay(A, B, C, D) * overlay(A PLACING B FROM C) is converted to * overlay(A, B, C) */ - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("overlay"), (yyvsp[-1].list), (yylsp[-3])); - } -#line 27324 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("overlay"), (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 1033: /* func_expr_common_subexpr: POSITION '(' position_list ')' */ -#line 2954 "third_party/libpg_query/grammar/statements/select.y" - { + case 1036: +#line 2971 "third_party/libpg_query/grammar/statements/select.y" + { /* position(A in B) is converted to position(B, A) */ - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("position"), (yyvsp[-1].list), (yylsp[-3])); - } -#line 27333 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("position"), (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 1034: /* func_expr_common_subexpr: SUBSTRING '(' substr_list ')' */ -#line 2959 "third_party/libpg_query/grammar/statements/select.y" - { + case 1037: +#line 2976 "third_party/libpg_query/grammar/statements/select.y" + { /* substring(A from B for C) is converted to * substring(A, B, C) - thomas 2000-11-28 */ - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("substring"), (yyvsp[-1].list), (yylsp[-3])); - } -#line 27344 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("substring"), (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 1035: /* func_expr_common_subexpr: TREAT '(' a_expr AS Typename ')' */ -#line 2966 "third_party/libpg_query/grammar/statements/select.y" - { + case 1038: +#line 2983 "third_party/libpg_query/grammar/statements/select.y" + { /* TREAT(expr AS target) converts expr of a particular type to target, * which is defined to be a subtype of the original expression. * In SQL99, this is intended for use with structured UDTs, @@ -27355,322 +27562,288 @@ YYLTYPE yylloc = yyloc_default; * Convert SystemTypeName() to SystemFuncName() even though * at the moment they result in the same thing. */ - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName(((PGValue *)llast((yyvsp[-1].typnam)->names))->val.str), - list_make1((yyvsp[-3].node)), - (yylsp[-5])); - } -#line 27363 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName(((PGValue *)llast((yyvsp[(5) - (6)].typnam)->names))->val.str), + list_make1((yyvsp[(3) - (6)].node)), + (yylsp[(1) - (6)])); + ;} break; - case 1036: /* func_expr_common_subexpr: TRIM '(' BOTH trim_list ')' */ -#line 2981 "third_party/libpg_query/grammar/statements/select.y" - { + case 1039: +#line 2998 "third_party/libpg_query/grammar/statements/select.y" + { /* various trim expressions are defined in SQL * - thomas 1997-07-19 */ - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("trim"), (yyvsp[-1].list), (yylsp[-4])); - } -#line 27374 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("trim"), (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); + ;} break; - case 1037: /* func_expr_common_subexpr: TRIM '(' LEADING trim_list ')' */ -#line 2988 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("ltrim"), (yyvsp[-1].list), (yylsp[-4])); - } -#line 27382 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1040: +#line 3005 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("ltrim"), (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); + ;} break; - case 1038: /* func_expr_common_subexpr: TRIM '(' TRAILING trim_list ')' */ -#line 2992 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("rtrim"), (yyvsp[-1].list), (yylsp[-4])); - } -#line 27390 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1041: +#line 3009 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("rtrim"), (yyvsp[(4) - (5)].list), (yylsp[(1) - (5)])); + ;} break; - case 1039: /* func_expr_common_subexpr: TRIM '(' trim_list ')' */ -#line 2996 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("trim"), (yyvsp[-1].list), (yylsp[-3])); - } -#line 27398 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1042: +#line 3013 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeFuncCall(SystemFuncName("trim"), (yyvsp[(3) - (4)].list), (yylsp[(1) - (4)])); + ;} break; - case 1040: /* func_expr_common_subexpr: NULLIF '(' a_expr ',' a_expr ')' */ -#line 3000 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NULLIF, "=", (yyvsp[-3].node), (yyvsp[-1].node), (yylsp[-5])); - } -#line 27406 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1043: +#line 3017 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (PGNode *) makeSimpleAExpr(PG_AEXPR_NULLIF, "=", (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node), (yylsp[(1) - (6)])); + ;} break; - case 1041: /* func_expr_common_subexpr: COALESCE '(' expr_list_opt_comma ')' */ -#line 3004 "third_party/libpg_query/grammar/statements/select.y" - { + case 1044: +#line 3021 "third_party/libpg_query/grammar/statements/select.y" + { PGCoalesceExpr *c = makeNode(PGCoalesceExpr); - c->args = (yyvsp[-1].list); - c->location = (yylsp[-3]); + c->args = (yyvsp[(3) - (4)].list); + c->location = (yylsp[(1) - (4)]); (yyval.node) = (PGNode *)c; - } -#line 27417 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1042: /* list_comprehension: '[' a_expr FOR ColId IN_P a_expr ']' */ -#line 3014 "third_party/libpg_query/grammar/statements/select.y" - { + case 1045: +#line 3031 "third_party/libpg_query/grammar/statements/select.y" + { PGLambdaFunction *lambda = makeNode(PGLambdaFunction); - lambda->lhs = makeColumnRef((yyvsp[-3].str), NIL, (yylsp[-3]), yyscanner); - lambda->rhs = (yyvsp[-5].node); - lambda->location = (yylsp[-6]); - PGFuncCall *n = makeFuncCall(SystemFuncName("list_apply"), list_make2((yyvsp[-1].node), lambda), (yylsp[-6])); + lambda->lhs = makeColumnRef((yyvsp[(4) - (7)].str), NIL, (yylsp[(4) - (7)]), yyscanner); + lambda->rhs = (yyvsp[(2) - (7)].node); + lambda->location = (yylsp[(1) - (7)]); + PGFuncCall *n = makeFuncCall(SystemFuncName("list_apply"), list_make2((yyvsp[(6) - (7)].node), lambda), (yylsp[(1) - (7)])); (yyval.node) = (PGNode *) n; - } -#line 27430 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1043: /* list_comprehension: '[' a_expr FOR ColId IN_P c_expr IF_P a_expr ']' */ -#line 3023 "third_party/libpg_query/grammar/statements/select.y" - { + case 1046: +#line 3040 "third_party/libpg_query/grammar/statements/select.y" + { PGLambdaFunction *lambda = makeNode(PGLambdaFunction); - lambda->lhs = makeColumnRef((yyvsp[-5].str), NIL, (yylsp[-5]), yyscanner); - lambda->rhs = (yyvsp[-7].node); - lambda->location = (yylsp[-8]); + lambda->lhs = makeColumnRef((yyvsp[(4) - (9)].str), NIL, (yylsp[(4) - (9)]), yyscanner); + lambda->rhs = (yyvsp[(2) - (9)].node); + lambda->location = (yylsp[(1) - (9)]); PGLambdaFunction *lambda_filter = makeNode(PGLambdaFunction); - lambda_filter->lhs = makeColumnRef((yyvsp[-5].str), NIL, (yylsp[-5]), yyscanner); - lambda_filter->rhs = (yyvsp[-1].node); - lambda_filter->location = (yylsp[-1]); - PGFuncCall *filter = makeFuncCall(SystemFuncName("list_filter"), list_make2((yyvsp[-3].node), lambda_filter), (yylsp[-8])); - PGFuncCall *n = makeFuncCall(SystemFuncName("list_apply"), list_make2(filter, lambda), (yylsp[-8])); + lambda_filter->lhs = makeColumnRef((yyvsp[(4) - (9)].str), NIL, (yylsp[(4) - (9)]), yyscanner); + lambda_filter->rhs = (yyvsp[(8) - (9)].node); + lambda_filter->location = (yylsp[(8) - (9)]); + PGFuncCall *filter = makeFuncCall(SystemFuncName("list_filter"), list_make2((yyvsp[(6) - (9)].node), lambda_filter), (yylsp[(1) - (9)])); + PGFuncCall *n = makeFuncCall(SystemFuncName("list_apply"), list_make2(filter, lambda), (yylsp[(1) - (9)])); (yyval.node) = (PGNode *) n; - } -#line 27449 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1044: /* within_group_clause: WITHIN GROUP_P '(' sort_clause ')' */ -#line 3044 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 27455 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1047: +#line 3061 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(4) - (5)].list); ;} break; - case 1045: /* within_group_clause: %empty */ -#line 3045 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 27461 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1048: +#line 3062 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1046: /* filter_clause: FILTER '(' WHERE a_expr ')' */ -#line 3049 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 27467 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1049: +#line 3066 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(4) - (5)].node); ;} break; - case 1047: /* filter_clause: FILTER '(' a_expr ')' */ -#line 3050 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[-1].node); } -#line 27473 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1050: +#line 3067 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(3) - (4)].node); ;} break; - case 1048: /* filter_clause: %empty */ -#line 3051 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 27479 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1051: +#line 3068 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 1049: /* export_clause: EXPORT_STATE */ -#line 3055 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = true; } -#line 27485 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1052: +#line 3072 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = true; ;} break; - case 1050: /* export_clause: %empty */ -#line 3056 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.boolean) = false; } -#line 27491 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1053: +#line 3073 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.boolean) = false; ;} break; - case 1051: /* window_clause: WINDOW window_definition_list */ -#line 3063 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 27497 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1054: +#line 3080 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1052: /* window_clause: %empty */ -#line 3064 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 27503 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1055: +#line 3081 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1053: /* window_definition_list: window_definition */ -#line 3068 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].windef)); } -#line 27509 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1056: +#line 3085 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].windef)); ;} break; - case 1054: /* window_definition_list: window_definition_list ',' window_definition */ -#line 3070 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].windef)); } -#line 27515 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1057: +#line 3087 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].windef)); ;} break; - case 1055: /* window_definition: ColId AS window_specification */ -#line 3075 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n = (yyvsp[0].windef); - n->name = (yyvsp[-2].str); + case 1058: +#line 3092 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n = (yyvsp[(3) - (3)].windef); + n->name = (yyvsp[(1) - (3)].str); (yyval.windef) = n; - } -#line 27525 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1056: /* over_clause: OVER window_specification */ -#line 3083 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.windef) = (yyvsp[0].windef); } -#line 27531 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1059: +#line 3100 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.windef) = (yyvsp[(2) - (2)].windef); ;} break; - case 1057: /* over_clause: OVER ColId */ -#line 3085 "third_party/libpg_query/grammar/statements/select.y" - { + case 1060: +#line 3102 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); n->refname = NULL; n->partitionClause = NIL; n->orderClause = NIL; n->frameOptions = FRAMEOPTION_DEFAULTS; n->startOffset = NULL; n->endOffset = NULL; - n->location = (yylsp[0]); + n->location = (yylsp[(2) - (2)]); (yyval.windef) = n; - } -#line 27548 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1058: /* over_clause: %empty */ -#line 3098 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.windef) = NULL; } -#line 27554 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1061: +#line 3115 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.windef) = NULL; ;} break; - case 1059: /* window_specification: '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')' */ -#line 3103 "third_party/libpg_query/grammar/statements/select.y" - { + case 1062: +#line 3120 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->name = NULL; - n->refname = (yyvsp[-4].str); - n->partitionClause = (yyvsp[-3].list); - n->orderClause = (yyvsp[-2].list); + n->refname = (yyvsp[(2) - (6)].str); + n->partitionClause = (yyvsp[(3) - (6)].list); + n->orderClause = (yyvsp[(4) - (6)].list); /* copy relevant fields of opt_frame_clause */ - n->frameOptions = (yyvsp[-1].windef)->frameOptions; - n->startOffset = (yyvsp[-1].windef)->startOffset; - n->endOffset = (yyvsp[-1].windef)->endOffset; - n->location = (yylsp[-5]); + n->frameOptions = (yyvsp[(5) - (6)].windef)->frameOptions; + n->startOffset = (yyvsp[(5) - (6)].windef)->startOffset; + n->endOffset = (yyvsp[(5) - (6)].windef)->endOffset; + n->location = (yylsp[(1) - (6)]); (yyval.windef) = n; - } -#line 27572 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1060: /* opt_existing_window_name: ColId */ -#line 3128 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 27578 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1063: +#line 3145 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1061: /* opt_existing_window_name: %empty */ -#line 3129 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = NULL; } -#line 27584 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1064: +#line 3146 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = NULL; ;} break; - case 1062: /* opt_partition_clause: PARTITION BY expr_list */ -#line 3132 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 27590 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1065: +#line 3149 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (3)].list); ;} break; - case 1063: /* opt_partition_clause: %empty */ -#line 3133 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 27596 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1066: +#line 3150 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1064: /* opt_frame_clause: RANGE frame_extent opt_window_exclusion_clause */ -#line 3142 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n = (yyvsp[-1].windef); + case 1067: +#line 3159 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n = (yyvsp[(2) - (3)].windef); n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_RANGE; - n->frameOptions |= (yyvsp[0].ival); + n->frameOptions |= (yyvsp[(3) - (3)].ival); (yyval.windef) = n; - } -#line 27608 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1065: /* opt_frame_clause: ROWS frame_extent opt_window_exclusion_clause */ -#line 3150 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n = (yyvsp[-1].windef); + case 1068: +#line 3167 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n = (yyvsp[(2) - (3)].windef); n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_ROWS; - n->frameOptions |= (yyvsp[0].ival); + n->frameOptions |= (yyvsp[(3) - (3)].ival); (yyval.windef) = n; - } -#line 27620 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1066: /* opt_frame_clause: GROUPS frame_extent opt_window_exclusion_clause */ -#line 3158 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n = (yyvsp[-1].windef); + case 1069: +#line 3175 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n = (yyvsp[(2) - (3)].windef); n->frameOptions |= FRAMEOPTION_NONDEFAULT | FRAMEOPTION_GROUPS; - n->frameOptions |= (yyvsp[0].ival); + n->frameOptions |= (yyvsp[(3) - (3)].ival); (yyval.windef) = n; - } -#line 27632 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1067: /* opt_frame_clause: %empty */ -#line 3166 "third_party/libpg_query/grammar/statements/select.y" - { + case 1070: +#line 3183 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_DEFAULTS; n->startOffset = NULL; n->endOffset = NULL; (yyval.windef) = n; - } -#line 27645 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1068: /* frame_extent: frame_bound */ -#line 3177 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n = (yyvsp[0].windef); + case 1071: +#line 3194 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n = (yyvsp[(1) - (1)].windef); /* reject invalid cases */ if (n->frameOptions & FRAMEOPTION_START_UNBOUNDED_FOLLOWING) ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame start cannot be UNBOUNDED FOLLOWING"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(1) - (1)])))); if (n->frameOptions & FRAMEOPTION_START_OFFSET_FOLLOWING) ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame starting from following row cannot end with current row"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(1) - (1)])))); n->frameOptions |= FRAMEOPTION_END_CURRENT_ROW; (yyval.windef) = n; - } -#line 27667 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1069: /* frame_extent: BETWEEN frame_bound AND frame_bound */ -#line 3195 "third_party/libpg_query/grammar/statements/select.y" - { - PGWindowDef *n1 = (yyvsp[-2].windef); - PGWindowDef *n2 = (yyvsp[0].windef); + case 1072: +#line 3212 "third_party/libpg_query/grammar/statements/select.y" + { + PGWindowDef *n1 = (yyvsp[(2) - (4)].windef); + PGWindowDef *n2 = (yyvsp[(4) - (4)].windef); /* form merged options */ int frameOptions = n1->frameOptions; @@ -27682,732 +27855,631 @@ YYLTYPE yylloc = yyloc_default; ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame start cannot be UNBOUNDED FOLLOWING"), - parser_errposition((yylsp[-2])))); + parser_errposition((yylsp[(2) - (4)])))); if (frameOptions & FRAMEOPTION_END_UNBOUNDED_PRECEDING) ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame end cannot be UNBOUNDED PRECEDING"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(4) - (4)])))); if ((frameOptions & FRAMEOPTION_START_CURRENT_ROW) && (frameOptions & FRAMEOPTION_END_OFFSET_PRECEDING)) ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame starting from current row cannot have preceding rows"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(4) - (4)])))); if ((frameOptions & FRAMEOPTION_START_OFFSET_FOLLOWING) && (frameOptions & (FRAMEOPTION_END_OFFSET_PRECEDING | FRAMEOPTION_END_CURRENT_ROW))) ereport(ERROR, (errcode(PG_ERRCODE_WINDOWING_ERROR), errmsg("frame starting from following row cannot have preceding rows"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(4) - (4)])))); n1->frameOptions = frameOptions; n1->endOffset = n2->startOffset; (yyval.windef) = n1; - } -#line 27709 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1070: /* frame_bound: UNBOUNDED PRECEDING */ -#line 3241 "third_party/libpg_query/grammar/statements/select.y" - { + case 1073: +#line 3258 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_START_UNBOUNDED_PRECEDING; n->startOffset = NULL; n->endOffset = NULL; (yyval.windef) = n; - } -#line 27722 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1071: /* frame_bound: UNBOUNDED FOLLOWING */ -#line 3250 "third_party/libpg_query/grammar/statements/select.y" - { + case 1074: +#line 3267 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_START_UNBOUNDED_FOLLOWING; n->startOffset = NULL; n->endOffset = NULL; (yyval.windef) = n; - } -#line 27735 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1072: /* frame_bound: CURRENT_P ROW */ -#line 3259 "third_party/libpg_query/grammar/statements/select.y" - { + case 1075: +#line 3276 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_START_CURRENT_ROW; n->startOffset = NULL; n->endOffset = NULL; (yyval.windef) = n; - } -#line 27748 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1073: /* frame_bound: a_expr PRECEDING */ -#line 3268 "third_party/libpg_query/grammar/statements/select.y" - { + case 1076: +#line 3285 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_START_OFFSET_PRECEDING; - n->startOffset = (yyvsp[-1].node); + n->startOffset = (yyvsp[(1) - (2)].node); n->endOffset = NULL; (yyval.windef) = n; - } -#line 27761 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1074: /* frame_bound: a_expr FOLLOWING */ -#line 3277 "third_party/libpg_query/grammar/statements/select.y" - { + case 1077: +#line 3294 "third_party/libpg_query/grammar/statements/select.y" + { PGWindowDef *n = makeNode(PGWindowDef); n->frameOptions = FRAMEOPTION_START_OFFSET_FOLLOWING; - n->startOffset = (yyvsp[-1].node); + n->startOffset = (yyvsp[(1) - (2)].node); n->endOffset = NULL; (yyval.windef) = n; - } -#line 27774 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1075: /* opt_window_exclusion_clause: EXCLUDE CURRENT_P ROW */ -#line 3288 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = FRAMEOPTION_EXCLUDE_CURRENT_ROW; } -#line 27780 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1078: +#line 3305 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_CURRENT_ROW; ;} break; - case 1076: /* opt_window_exclusion_clause: EXCLUDE GROUP_P */ -#line 3289 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = FRAMEOPTION_EXCLUDE_GROUP; } -#line 27786 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1079: +#line 3306 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_GROUP; ;} break; - case 1077: /* opt_window_exclusion_clause: EXCLUDE TIES */ -#line 3290 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = FRAMEOPTION_EXCLUDE_TIES; } -#line 27792 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1080: +#line 3307 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = FRAMEOPTION_EXCLUDE_TIES; ;} break; - case 1078: /* opt_window_exclusion_clause: EXCLUDE NO OTHERS */ -#line 3291 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 27798 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1081: +#line 3308 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 1079: /* opt_window_exclusion_clause: %empty */ -#line 3292 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = 0; } -#line 27804 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1082: +#line 3309 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = 0; ;} break; - case 1080: /* qualified_row: ROW '(' expr_list_opt_comma ')' */ -#line 3306 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 27810 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1083: +#line 3323 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1081: /* qualified_row: ROW '(' ')' */ -#line 3307 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 27816 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1084: +#line 3324 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1082: /* row: qualified_row */ -#line 3310 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list);} -#line 27822 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1085: +#line 3327 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list);;} break; - case 1083: /* row: '(' expr_list ',' a_expr ')' */ -#line 3311 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-3].list), (yyvsp[-1].node)); } -#line 27828 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1086: +#line 3328 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(2) - (5)].list), (yyvsp[(4) - (5)].node)); ;} break; - case 1084: /* dict_arg: ColIdOrString ':' a_expr */ -#line 3315 "third_party/libpg_query/grammar/statements/select.y" - { + case 1087: +#line 3332 "third_party/libpg_query/grammar/statements/select.y" + { PGNamedArgExpr *na = makeNode(PGNamedArgExpr); - na->name = (yyvsp[-2].str); - na->arg = (PGExpr *) (yyvsp[0].node); + na->name = (yyvsp[(1) - (3)].str); + na->arg = (PGExpr *) (yyvsp[(3) - (3)].node); na->argnumber = -1; - na->location = (yylsp[-2]); + na->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) na; - } -#line 27841 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1085: /* dict_arguments: dict_arg */ -#line 3325 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 27847 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1088: +#line 3342 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1086: /* dict_arguments: dict_arguments ',' dict_arg */ -#line 3326 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 27853 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1089: +#line 3343 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1087: /* dict_arguments_opt_comma: dict_arguments */ -#line 3330 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 27859 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1090: +#line 3347 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1088: /* dict_arguments_opt_comma: dict_arguments ',' */ -#line 3331 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 27865 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1091: +#line 3348 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 1089: /* map_arg: a_expr ':' a_expr */ -#line 3336 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make2((yyvsp[-2].node), (yyvsp[0].node)); - } -#line 27873 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1092: +#line 3353 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); + ;} break; - case 1090: /* map_arguments: map_arg */ -#line 3342 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].list)); } -#line 27879 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1093: +#line 3359 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 1091: /* map_arguments: map_arguments ',' map_arg */ -#line 3343 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } -#line 27885 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1094: +#line 3360 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 1092: /* map_arguments_opt_comma: map_arguments */ -#line 3348 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 27891 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1095: +#line 3365 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1093: /* map_arguments_opt_comma: map_arguments ',' */ -#line 3349 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 27897 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1096: +#line 3366 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 1094: /* opt_map_arguments_opt_comma: map_arguments_opt_comma */ -#line 3354 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 27903 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1097: +#line 3371 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1095: /* opt_map_arguments_opt_comma: %empty */ -#line 3355 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NULL; } -#line 27909 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1098: +#line 3372 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; ;} break; - case 1096: /* sub_type: ANY */ -#line 3358 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.subquerytype) = PG_ANY_SUBLINK; } -#line 27915 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1099: +#line 3375 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.subquerytype) = PG_ANY_SUBLINK; ;} break; - case 1097: /* sub_type: SOME */ -#line 3359 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.subquerytype) = PG_ANY_SUBLINK; } -#line 27921 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1100: +#line 3376 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.subquerytype) = PG_ANY_SUBLINK; ;} break; - case 1098: /* sub_type: ALL */ -#line 3360 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.subquerytype) = PG_ALL_SUBLINK; } -#line 27927 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1101: +#line 3377 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.subquerytype) = PG_ALL_SUBLINK; ;} break; - case 1099: /* all_Op: Op */ -#line 3363 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 27933 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1102: +#line 3380 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1100: /* all_Op: MathOp */ -#line 3364 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) (yyvsp[0].conststr); } -#line 27939 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1103: +#line 3381 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) (yyvsp[(1) - (1)].conststr); ;} break; - case 1101: /* MathOp: '+' */ -#line 3367 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "+"; } -#line 27945 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1104: +#line 3384 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "+"; ;} break; - case 1102: /* MathOp: '-' */ -#line 3368 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "-"; } -#line 27951 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1105: +#line 3385 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "-"; ;} break; - case 1103: /* MathOp: '*' */ -#line 3369 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "*"; } -#line 27957 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1106: +#line 3386 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "*"; ;} break; - case 1104: /* MathOp: '/' */ -#line 3370 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "/"; } -#line 27963 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1107: +#line 3387 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "/"; ;} break; - case 1105: /* MathOp: INTEGER_DIVISION */ -#line 3371 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "//"; } -#line 27969 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1108: +#line 3388 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "//"; ;} break; - case 1106: /* MathOp: '%' */ -#line 3372 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "%"; } -#line 27975 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1109: +#line 3389 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "%"; ;} break; - case 1107: /* MathOp: '^' */ -#line 3373 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "^"; } -#line 27981 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1110: +#line 3390 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "^"; ;} break; - case 1108: /* MathOp: POWER_OF */ -#line 3374 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "**"; } -#line 27987 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1111: +#line 3391 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "**"; ;} break; - case 1109: /* MathOp: '<' */ -#line 3375 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "<"; } -#line 27993 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1112: +#line 3392 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "<"; ;} break; - case 1110: /* MathOp: '>' */ -#line 3376 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = ">"; } -#line 27999 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1113: +#line 3393 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = ">"; ;} break; - case 1111: /* MathOp: '=' */ -#line 3377 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "="; } -#line 28005 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1114: +#line 3394 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "="; ;} break; - case 1112: /* MathOp: LESS_EQUALS */ -#line 3378 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "<="; } -#line 28011 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1115: +#line 3395 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "<="; ;} break; - case 1113: /* MathOp: GREATER_EQUALS */ -#line 3379 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = ">="; } -#line 28017 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1116: +#line 3396 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = ">="; ;} break; - case 1114: /* MathOp: NOT_EQUALS */ -#line 3380 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.conststr) = "<>"; } -#line 28023 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1117: +#line 3397 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.conststr) = "<>"; ;} break; - case 1115: /* qual_Op: Op */ -#line 3384 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28029 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1118: +#line 3401 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1116: /* qual_Op: OPERATOR '(' any_operator ')' */ -#line 3386 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28035 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1119: +#line 3403 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1117: /* qual_all_Op: all_Op */ -#line 3391 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28041 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1120: +#line 3408 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1118: /* qual_all_Op: OPERATOR '(' any_operator ')' */ -#line 3393 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28047 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1121: +#line 3410 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1119: /* subquery_Op: all_Op */ -#line 3398 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28053 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1122: +#line 3415 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1120: /* subquery_Op: OPERATOR '(' any_operator ')' */ -#line 3400 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28059 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1123: +#line 3417 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1121: /* subquery_Op: LIKE */ -#line 3402 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("~~")); } -#line 28065 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1124: +#line 3419 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("~~")); ;} break; - case 1122: /* subquery_Op: NOT_LA LIKE */ -#line 3404 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("!~~")); } -#line 28071 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1125: +#line 3421 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("!~~")); ;} break; - case 1123: /* subquery_Op: GLOB */ -#line 3406 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("~~~")); } -#line 28077 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1126: +#line 3423 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("~~~")); ;} break; - case 1124: /* subquery_Op: NOT_LA GLOB */ -#line 3408 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("!~~~")); } -#line 28083 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1127: +#line 3425 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("!~~~")); ;} break; - case 1125: /* subquery_Op: ILIKE */ -#line 3410 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("~~*")); } -#line 28089 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1128: +#line 3427 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("~~*")); ;} break; - case 1126: /* subquery_Op: NOT_LA ILIKE */ -#line 3412 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString("!~~*")); } -#line 28095 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1129: +#line 3429 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString("!~~*")); ;} break; - case 1127: /* any_operator: all_Op */ -#line 3426 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28101 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1130: +#line 3443 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1128: /* any_operator: ColId '.' any_operator */ -#line 3428 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lcons(makeString((yyvsp[-2].str)), (yyvsp[0].list)); } -#line 28107 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1131: +#line 3445 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lcons(makeString((yyvsp[(1) - (3)].str)), (yyvsp[(3) - (3)].list)); ;} break; - case 1129: /* c_expr_list: c_expr */ -#line 3433 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 28115 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1132: +#line 3450 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 1130: /* c_expr_list: c_expr_list ',' c_expr */ -#line 3437 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 28123 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1133: +#line 3454 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 1131: /* c_expr_list_opt_comma: c_expr_list */ -#line 3444 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[0].list); - } -#line 28131 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1134: +#line 3461 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (1)].list); + ;} break; - case 1132: /* c_expr_list_opt_comma: c_expr_list ',' */ -#line 3449 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[-1].list); - } -#line 28139 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1135: +#line 3466 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (2)].list); + ;} break; - case 1133: /* expr_list: a_expr */ -#line 3455 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 28147 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1136: +#line 3472 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 1134: /* expr_list: expr_list ',' a_expr */ -#line 3459 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 28155 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1137: +#line 3476 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 1135: /* expr_list_opt_comma: expr_list */ -#line 3466 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[0].list); - } -#line 28163 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1138: +#line 3483 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (1)].list); + ;} break; - case 1136: /* expr_list_opt_comma: expr_list ',' */ -#line 3471 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[-1].list); - } -#line 28171 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1139: +#line 3488 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (2)].list); + ;} break; - case 1137: /* opt_expr_list_opt_comma: expr_list_opt_comma */ -#line 3478 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[0].list); - } -#line 28179 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1140: +#line 3495 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (1)].list); + ;} break; - case 1138: /* opt_expr_list_opt_comma: %empty */ -#line 3482 "third_party/libpg_query/grammar/statements/select.y" - { + case 1141: +#line 3499 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; - } -#line 28187 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1139: /* func_arg_list: func_arg_expr */ -#line 3491 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make1((yyvsp[0].node)); - } -#line 28195 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1142: +#line 3508 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); + ;} break; - case 1140: /* func_arg_list: func_arg_list ',' func_arg_expr */ -#line 3495 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); - } -#line 28203 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1143: +#line 3512 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); + ;} break; - case 1141: /* func_arg_expr: a_expr */ -#line 3501 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = (yyvsp[0].node); - } -#line 28211 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1144: +#line 3518 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = (yyvsp[(1) - (1)].node); + ;} break; - case 1142: /* func_arg_expr: param_name COLON_EQUALS a_expr */ -#line 3505 "third_party/libpg_query/grammar/statements/select.y" - { + case 1145: +#line 3522 "third_party/libpg_query/grammar/statements/select.y" + { PGNamedArgExpr *na = makeNode(PGNamedArgExpr); - na->name = (yyvsp[-2].str); - na->arg = (PGExpr *) (yyvsp[0].node); + na->name = (yyvsp[(1) - (3)].str); + na->arg = (PGExpr *) (yyvsp[(3) - (3)].node); na->argnumber = -1; /* until determined */ - na->location = (yylsp[-2]); + na->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) na; - } -#line 28224 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1143: /* func_arg_expr: param_name EQUALS_GREATER a_expr */ -#line 3514 "third_party/libpg_query/grammar/statements/select.y" - { + case 1146: +#line 3531 "third_party/libpg_query/grammar/statements/select.y" + { PGNamedArgExpr *na = makeNode(PGNamedArgExpr); - na->name = (yyvsp[-2].str); - na->arg = (PGExpr *) (yyvsp[0].node); + na->name = (yyvsp[(1) - (3)].str); + na->arg = (PGExpr *) (yyvsp[(3) - (3)].node); na->argnumber = -1; /* until determined */ - na->location = (yylsp[-2]); + na->location = (yylsp[(1) - (3)]); (yyval.node) = (PGNode *) na; - } -#line 28237 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1144: /* type_list: Typename */ -#line 3524 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].typnam)); } -#line 28243 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1147: +#line 3541 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].typnam)); ;} break; - case 1145: /* type_list: type_list ',' Typename */ -#line 3525 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].typnam)); } -#line 28249 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1148: +#line 3542 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].typnam)); ;} break; - case 1146: /* extract_list: extract_arg FROM a_expr */ -#line 3530 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make2(makeStringConst((yyvsp[-2].str), (yylsp[-2])), (yyvsp[0].node)); - } -#line 28257 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1149: +#line 3547 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make2(makeStringConst((yyvsp[(1) - (3)].str), (yylsp[(1) - (3)])), (yyvsp[(3) - (3)].node)); + ;} break; - case 1147: /* extract_list: %empty */ -#line 3533 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28263 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1150: +#line 3550 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1148: /* extract_arg: IDENT */ -#line 3540 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 28269 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1151: +#line 3557 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1149: /* extract_arg: year_keyword */ -#line 3541 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "year"; } -#line 28275 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1152: +#line 3558 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "year"; ;} break; - case 1150: /* extract_arg: month_keyword */ -#line 3542 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "month"; } -#line 28281 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1153: +#line 3559 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "month"; ;} break; - case 1151: /* extract_arg: day_keyword */ -#line 3543 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "day"; } -#line 28287 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1154: +#line 3560 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "day"; ;} break; - case 1152: /* extract_arg: hour_keyword */ -#line 3544 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "hour"; } -#line 28293 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1155: +#line 3561 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "hour"; ;} break; - case 1153: /* extract_arg: minute_keyword */ -#line 3545 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "minute"; } -#line 28299 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1156: +#line 3562 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "minute"; ;} break; - case 1154: /* extract_arg: second_keyword */ -#line 3546 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "second"; } -#line 28305 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1157: +#line 3563 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "second"; ;} break; - case 1155: /* extract_arg: millisecond_keyword */ -#line 3547 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "millisecond"; } -#line 28311 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1158: +#line 3564 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "millisecond"; ;} break; - case 1156: /* extract_arg: microsecond_keyword */ -#line 3548 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "microsecond"; } -#line 28317 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1159: +#line 3565 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "microsecond"; ;} break; - case 1157: /* extract_arg: week_keyword */ -#line 3549 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "week"; } -#line 28323 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1160: +#line 3566 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "week"; ;} break; - case 1158: /* extract_arg: decade_keyword */ -#line 3550 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "decade"; } -#line 28329 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1161: +#line 3567 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "decade"; ;} break; - case 1159: /* extract_arg: century_keyword */ -#line 3551 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "century"; } -#line 28335 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1162: +#line 3568 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "century"; ;} break; - case 1160: /* extract_arg: millennium_keyword */ -#line 3552 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (char*) "millennium"; } -#line 28341 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1163: +#line 3569 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (char*) "millennium"; ;} break; - case 1161: /* extract_arg: Sconst */ -#line 3553 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 28347 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1164: +#line 3570 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1162: /* overlay_list: a_expr overlay_placing substr_from substr_for */ -#line 3564 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make4((yyvsp[-3].node), (yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); - } -#line 28355 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1165: +#line 3581 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make4((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node)); + ;} break; - case 1163: /* overlay_list: a_expr overlay_placing substr_from */ -#line 3568 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make3((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); - } -#line 28363 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1166: +#line 3585 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make3((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node), (yyvsp[(3) - (3)].node)); + ;} break; - case 1164: /* overlay_placing: PLACING a_expr */ -#line 3575 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28369 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1167: +#line 3592 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1165: /* position_list: b_expr IN_P b_expr */ -#line 3581 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[0].node), (yyvsp[-2].node)); } -#line 28375 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1168: +#line 3598 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(3) - (3)].node), (yyvsp[(1) - (3)].node)); ;} break; - case 1166: /* position_list: %empty */ -#line 3582 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28381 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1169: +#line 3599 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1167: /* substr_list: a_expr substr_from substr_for */ -#line 3599 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make3((yyvsp[-2].node), (yyvsp[-1].node), (yyvsp[0].node)); - } -#line 28389 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1170: +#line 3616 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make3((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node), (yyvsp[(3) - (3)].node)); + ;} break; - case 1168: /* substr_list: a_expr substr_for substr_from */ -#line 3603 "third_party/libpg_query/grammar/statements/select.y" - { + case 1171: +#line 3620 "third_party/libpg_query/grammar/statements/select.y" + { /* not legal per SQL99, but might as well allow it */ - (yyval.list) = list_make3((yyvsp[-2].node), (yyvsp[0].node), (yyvsp[-1].node)); - } -#line 28398 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.list) = list_make3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node), (yyvsp[(2) - (3)].node)); + ;} break; - case 1169: /* substr_list: a_expr substr_from */ -#line 3608 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = list_make2((yyvsp[-1].node), (yyvsp[0].node)); - } -#line 28406 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1172: +#line 3625 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = list_make2((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); + ;} break; - case 1170: /* substr_list: a_expr substr_for */ -#line 3612 "third_party/libpg_query/grammar/statements/select.y" - { + case 1173: +#line 3629 "third_party/libpg_query/grammar/statements/select.y" + { /* * Since there are no cases where this syntax allows * a textual FOR value, we forcibly cast the argument @@ -28417,599 +28489,523 @@ YYLTYPE yylloc = yyloc_default; * which it is likely to do if the second argument * is unknown or doesn't have an implicit cast to int4. */ - (yyval.list) = list_make3((yyvsp[-1].node), makeIntConst(1, -1), - makeTypeCast((yyvsp[0].node), + (yyval.list) = list_make3((yyvsp[(1) - (2)].node), makeIntConst(1, -1), + makeTypeCast((yyvsp[(2) - (2)].node), SystemTypeName("int4"), 0, -1)); - } -#line 28425 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1171: /* substr_list: expr_list */ -#line 3627 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = (yyvsp[0].list); - } -#line 28433 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1174: +#line 3644 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = (yyvsp[(1) - (1)].list); + ;} break; - case 1172: /* substr_list: %empty */ -#line 3631 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28439 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1175: +#line 3648 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1173: /* substr_from: FROM a_expr */ -#line 3635 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28445 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1176: +#line 3652 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1174: /* substr_for: FOR a_expr */ -#line 3638 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28451 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1177: +#line 3655 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1175: /* trim_list: a_expr FROM expr_list_opt_comma */ -#line 3641 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[0].list), (yyvsp[-2].node)); } -#line 28457 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1178: +#line 3658 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(3) - (3)].list), (yyvsp[(1) - (3)].node)); ;} break; - case 1176: /* trim_list: FROM expr_list_opt_comma */ -#line 3642 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28463 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1179: +#line 3659 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1177: /* trim_list: expr_list_opt_comma */ -#line 3643 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28469 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1180: +#line 3660 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1178: /* in_expr: select_with_parens */ -#line 3647 "third_party/libpg_query/grammar/statements/select.y" - { + case 1181: +#line 3664 "third_party/libpg_query/grammar/statements/select.y" + { PGSubLink *n = makeNode(PGSubLink); - n->subselect = (yyvsp[0].node); + n->subselect = (yyvsp[(1) - (1)].node); /* other fields will be filled later */ (yyval.node) = (PGNode *)n; - } -#line 28480 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1179: /* in_expr: '(' expr_list_opt_comma ')' */ -#line 3653 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (PGNode *)(yyvsp[-1].list); } -#line 28486 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1182: +#line 3670 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (PGNode *)(yyvsp[(2) - (3)].list); ;} break; - case 1180: /* case_expr: CASE case_arg when_clause_list case_default END_P */ -#line 3664 "third_party/libpg_query/grammar/statements/select.y" - { + case 1183: +#line 3681 "third_party/libpg_query/grammar/statements/select.y" + { PGCaseExpr *c = makeNode(PGCaseExpr); c->casetype = InvalidOid; /* not analyzed yet */ - c->arg = (PGExpr *) (yyvsp[-3].node); - c->args = (yyvsp[-2].list); - c->defresult = (PGExpr *) (yyvsp[-1].node); - c->location = (yylsp[-4]); + c->arg = (PGExpr *) (yyvsp[(2) - (5)].node); + c->args = (yyvsp[(3) - (5)].list); + c->defresult = (PGExpr *) (yyvsp[(4) - (5)].node); + c->location = (yylsp[(1) - (5)]); (yyval.node) = (PGNode *)c; - } -#line 28500 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1181: /* when_clause_list: when_clause */ -#line 3677 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 28506 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1184: +#line 3694 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1182: /* when_clause_list: when_clause_list when_clause */ -#line 3678 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 28512 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1185: +#line 3695 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 1183: /* when_clause: WHEN a_expr THEN a_expr */ -#line 3683 "third_party/libpg_query/grammar/statements/select.y" - { + case 1186: +#line 3700 "third_party/libpg_query/grammar/statements/select.y" + { PGCaseWhen *w = makeNode(PGCaseWhen); - w->expr = (PGExpr *) (yyvsp[-2].node); - w->result = (PGExpr *) (yyvsp[0].node); - w->location = (yylsp[-3]); + w->expr = (PGExpr *) (yyvsp[(2) - (4)].node); + w->result = (PGExpr *) (yyvsp[(4) - (4)].node); + w->location = (yylsp[(1) - (4)]); (yyval.node) = (PGNode *)w; - } -#line 28524 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1184: /* case_default: ELSE a_expr */ -#line 3693 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28530 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1187: +#line 3710 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1185: /* case_default: %empty */ -#line 3694 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 28536 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1188: +#line 3711 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 1186: /* case_arg: a_expr */ -#line 3697 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28542 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1189: +#line 3714 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1187: /* case_arg: %empty */ -#line 3698 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 28548 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1190: +#line 3715 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 1188: /* columnref: ColId */ -#line 3702 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeColumnRef((yyvsp[0].str), NIL, (yylsp[0]), yyscanner); - } -#line 28556 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1191: +#line 3719 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeColumnRef((yyvsp[(1) - (1)].str), NIL, (yylsp[(1) - (1)]), yyscanner); + ;} break; - case 1189: /* columnref: ColId indirection */ -#line 3706 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeColumnRef((yyvsp[-1].str), (yyvsp[0].list), (yylsp[-1]), yyscanner); - } -#line 28564 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1192: +#line 3723 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeColumnRef((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].list), (yylsp[(1) - (2)]), yyscanner); + ;} break; - case 1190: /* indirection_el: '[' a_expr ']' */ -#line 3713 "third_party/libpg_query/grammar/statements/select.y" - { + case 1193: +#line 3730 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = false; ai->lidx = NULL; - ai->uidx = (yyvsp[-1].node); + ai->uidx = (yyvsp[(2) - (3)].node); (yyval.node) = (PGNode *) ai; - } -#line 28576 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1191: /* indirection_el: '[' opt_slice_bound ':' opt_slice_bound ']' */ -#line 3721 "third_party/libpg_query/grammar/statements/select.y" - { + case 1194: +#line 3738 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-3].node); - ai->uidx = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (5)].node); + ai->uidx = (yyvsp[(4) - (5)].node); (yyval.node) = (PGNode *) ai; - } -#line 28588 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1192: /* indirection_el: '[' opt_slice_bound ':' opt_slice_bound ':' opt_slice_bound ']' */ -#line 3728 "third_party/libpg_query/grammar/statements/select.y" - { + case 1195: +#line 3745 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-5].node); - ai->uidx = (yyvsp[-3].node); - ai->step = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (7)].node); + ai->uidx = (yyvsp[(4) - (7)].node); + ai->step = (yyvsp[(6) - (7)].node); (yyval.node) = (PGNode *) ai; - } -#line 28601 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1193: /* indirection_el: '[' opt_slice_bound ':' '-' ':' opt_slice_bound ']' */ -#line 3736 "third_party/libpg_query/grammar/statements/select.y" - { + case 1196: +#line 3753 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-5].node); - ai->step = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (7)].node); + ai->step = (yyvsp[(6) - (7)].node); (yyval.node) = (PGNode *) ai; - } -#line 28613 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1194: /* opt_slice_bound: a_expr */ -#line 3746 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = (yyvsp[0].node); } -#line 28619 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1197: +#line 3763 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1195: /* opt_slice_bound: %empty */ -#line 3747 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.node) = NULL; } -#line 28625 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1198: +#line 3764 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.node) = NULL; ;} break; - case 1196: /* opt_indirection: %empty */ -#line 3752 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28631 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1199: +#line 3769 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1197: /* opt_indirection: opt_indirection indirection_el */ -#line 3753 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 28637 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1200: +#line 3770 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 1198: /* opt_func_arguments: %empty */ -#line 3757 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NULL; } -#line 28643 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1201: +#line 3774 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; ;} break; - case 1199: /* opt_func_arguments: '(' ')' */ -#line 3758 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(NULL); } -#line 28649 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1202: +#line 3775 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(NULL); ;} break; - case 1200: /* opt_func_arguments: '(' func_arg_list ')' */ -#line 3759 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28655 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1203: +#line 3776 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1201: /* extended_indirection_el: '.' attr_name opt_func_arguments */ -#line 3764 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].list)) { - PGFuncCall *n = makeFuncCall(list_make1(makeString((yyvsp[-1].str))), (yyvsp[0].list)->head->data.ptr_value ? (yyvsp[0].list) : NULL, (yylsp[-1])); + case 1204: +#line 3781 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(3) - (3)].list)) { + PGFuncCall *n = makeFuncCall(list_make1(makeString((yyvsp[(2) - (3)].str))), (yyvsp[(3) - (3)].list)->head->data.ptr_value ? (yyvsp[(3) - (3)].list) : NULL, (yylsp[(2) - (3)])); (yyval.node) = (PGNode *) n; } else { - (yyval.node) = (PGNode *) makeString((yyvsp[-1].str)); + (yyval.node) = (PGNode *) makeString((yyvsp[(2) - (3)].str)); } - } -#line 28668 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1202: /* extended_indirection_el: '[' a_expr ']' */ -#line 3773 "third_party/libpg_query/grammar/statements/select.y" - { + case 1205: +#line 3790 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = false; ai->lidx = NULL; - ai->uidx = (yyvsp[-1].node); + ai->uidx = (yyvsp[(2) - (3)].node); (yyval.node) = (PGNode *) ai; - } -#line 28680 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1203: /* extended_indirection_el: '[' opt_slice_bound ':' opt_slice_bound ']' */ -#line 3781 "third_party/libpg_query/grammar/statements/select.y" - { + case 1206: +#line 3798 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-3].node); - ai->uidx = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (5)].node); + ai->uidx = (yyvsp[(4) - (5)].node); (yyval.node) = (PGNode *) ai; - } -#line 28692 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1204: /* extended_indirection_el: '[' opt_slice_bound ':' opt_slice_bound ':' opt_slice_bound ']' */ -#line 3788 "third_party/libpg_query/grammar/statements/select.y" - { + case 1207: +#line 3805 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-5].node); - ai->uidx = (yyvsp[-3].node); - ai->step = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (7)].node); + ai->uidx = (yyvsp[(4) - (7)].node); + ai->step = (yyvsp[(6) - (7)].node); (yyval.node) = (PGNode *) ai; - } -#line 28705 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1205: /* extended_indirection_el: '[' opt_slice_bound ':' '-' ':' opt_slice_bound ']' */ -#line 3797 "third_party/libpg_query/grammar/statements/select.y" - { + case 1208: +#line 3814 "third_party/libpg_query/grammar/statements/select.y" + { PGAIndices *ai = makeNode(PGAIndices); ai->is_slice = true; - ai->lidx = (yyvsp[-5].node); - ai->step = (yyvsp[-1].node); + ai->lidx = (yyvsp[(2) - (7)].node); + ai->step = (yyvsp[(6) - (7)].node); (yyval.node) = (PGNode *) ai; - } -#line 28717 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1206: /* opt_extended_indirection: %empty */ -#line 3812 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28723 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1209: +#line 3829 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1207: /* opt_extended_indirection: opt_extended_indirection extended_indirection_el */ -#line 3813 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); } -#line 28729 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1210: +#line 3830 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); ;} break; - case 1210: /* opt_target_list_opt_comma: target_list_opt_comma */ -#line 3829 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28735 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1213: +#line 3846 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1211: /* opt_target_list_opt_comma: %empty */ -#line 3830 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 28741 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1214: +#line 3847 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1212: /* target_list: target_el */ -#line 3834 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].target)); } -#line 28747 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1215: +#line 3851 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].target)); ;} break; - case 1213: /* target_list: target_list ',' target_el */ -#line 3835 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].target)); } -#line 28753 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1216: +#line 3852 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].target)); ;} break; - case 1214: /* target_list_opt_comma: target_list */ -#line 3839 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28759 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1217: +#line 3856 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1215: /* target_list_opt_comma: target_list ',' */ -#line 3840 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28765 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1218: +#line 3857 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 1216: /* target_el: a_expr AS ColLabelOrString */ -#line 3844 "third_party/libpg_query/grammar/statements/select.y" - { + case 1219: +#line 3861 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.target) = makeNode(PGResTarget); - (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->name = (yyvsp[(3) - (3)].str); (yyval.target)->indirection = NIL; - (yyval.target)->val = (PGNode *)(yyvsp[-2].node); - (yyval.target)->location = (yylsp[-2]); - } -#line 28777 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.target)->val = (PGNode *)(yyvsp[(1) - (3)].node); + (yyval.target)->location = (yylsp[(1) - (3)]); + ;} break; - case 1217: /* target_el: a_expr IDENT */ -#line 3860 "third_party/libpg_query/grammar/statements/select.y" - { + case 1220: +#line 3877 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.target) = makeNode(PGResTarget); - (yyval.target)->name = (yyvsp[0].str); + (yyval.target)->name = (yyvsp[(2) - (2)].str); (yyval.target)->indirection = NIL; - (yyval.target)->val = (PGNode *)(yyvsp[-1].node); - (yyval.target)->location = (yylsp[-1]); - } -#line 28789 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.target)->val = (PGNode *)(yyvsp[(1) - (2)].node); + (yyval.target)->location = (yylsp[(1) - (2)]); + ;} break; - case 1218: /* target_el: a_expr */ -#line 3868 "third_party/libpg_query/grammar/statements/select.y" - { + case 1221: +#line 3885 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.target) = makeNode(PGResTarget); (yyval.target)->name = NULL; (yyval.target)->indirection = NIL; - (yyval.target)->val = (PGNode *)(yyvsp[0].node); - (yyval.target)->location = (yylsp[0]); - } -#line 28801 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.target)->val = (PGNode *)(yyvsp[(1) - (1)].node); + (yyval.target)->location = (yylsp[(1) - (1)]); + ;} break; - case 1219: /* except_list: EXCLUDE '(' name_list_opt_comma ')' */ -#line 3877 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28807 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1222: +#line 3894 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1220: /* except_list: EXCLUDE ColId */ -#line 3878 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28813 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1223: +#line 3895 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(2) - (2)].str))); ;} break; - case 1221: /* opt_except_list: except_list */ -#line 3881 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28819 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1224: +#line 3898 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1222: /* opt_except_list: %empty */ -#line 3882 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NULL; } -#line 28825 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1225: +#line 3899 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; ;} break; - case 1223: /* replace_list_el: a_expr AS ColId */ -#line 3885 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make2((yyvsp[-2].node), makeString((yyvsp[0].str))); } -#line 28831 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1226: +#line 3902 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make2((yyvsp[(1) - (3)].node), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 1224: /* replace_list: replace_list_el */ -#line 3889 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].list)); } -#line 28837 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1227: +#line 3906 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].list)); ;} break; - case 1225: /* replace_list: replace_list ',' replace_list_el */ -#line 3890 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].list)); } -#line 28843 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1228: +#line 3907 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); ;} break; - case 1226: /* replace_list_opt_comma: replace_list */ -#line 3894 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28849 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1229: +#line 3911 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1227: /* replace_list_opt_comma: replace_list ',' */ -#line 3895 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28855 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1230: +#line 3912 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 1228: /* opt_replace_list: REPLACE '(' replace_list_opt_comma ')' */ -#line 3898 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28861 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1231: +#line 3915 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(3) - (4)].list); ;} break; - case 1229: /* opt_replace_list: REPLACE replace_list_el */ -#line 3899 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].list)); } -#line 28867 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1232: +#line 3916 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(2) - (2)].list)); ;} break; - case 1230: /* opt_replace_list: %empty */ -#line 3900 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NULL; } -#line 28873 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1233: +#line 3917 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NULL; ;} break; - case 1231: /* qualified_name_list: qualified_name */ -#line 3910 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1((yyvsp[0].range)); } -#line 28879 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1234: +#line 3927 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].range)); ;} break; - case 1232: /* qualified_name_list: qualified_name_list ',' qualified_name */ -#line 3911 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].range)); } -#line 28885 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1235: +#line 3928 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].range)); ;} break; - case 1233: /* name_list: name */ -#line 3916 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28891 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1236: +#line 3933 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1234: /* name_list: name_list ',' name */ -#line 3918 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } -#line 28897 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1237: +#line 3935 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 1235: /* name_list_opt_comma: name_list */ -#line 3923 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28903 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1238: +#line 3940 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1236: /* name_list_opt_comma: name_list ',' */ -#line 3924 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28909 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1239: +#line 3941 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (2)].list); ;} break; - case 1237: /* name_list_opt_comma_opt_bracket: name_list_opt_comma */ -#line 3928 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[0].list); } -#line 28915 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1240: +#line 3945 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(1) - (1)].list); ;} break; - case 1238: /* name_list_opt_comma_opt_bracket: '(' name_list_opt_comma ')' */ -#line 3929 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 28921 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1241: +#line 3946 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1239: /* name: ColIdOrString */ -#line 3932 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 28927 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1242: +#line 3949 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1240: /* func_name: function_name_token */ -#line 3944 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 28933 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1243: +#line 3961 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1241: /* func_name: ColId indirection */ -#line 3947 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.list) = check_func_name(lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)), + case 1244: +#line 3964 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.list) = check_func_name(lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)), yyscanner); - } -#line 28942 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1242: /* AexprConst: Iconst */ -#line 3958 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeIntConst((yyvsp[0].ival), (yylsp[0])); - } -#line 28950 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1245: +#line 3975 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeIntConst((yyvsp[(1) - (1)].ival), (yylsp[(1) - (1)])); + ;} break; - case 1243: /* AexprConst: FCONST */ -#line 3962 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeFloatConst((yyvsp[0].str), (yylsp[0])); - } -#line 28958 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1246: +#line 3979 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeFloatConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 1244: /* AexprConst: Sconst opt_indirection */ -#line 3966 "third_party/libpg_query/grammar/statements/select.y" - { - if ((yyvsp[0].list)) + case 1247: +#line 3983 "third_party/libpg_query/grammar/statements/select.y" + { + if ((yyvsp[(2) - (2)].list)) { PGAIndirection *n = makeNode(PGAIndirection); - n->arg = makeStringConst((yyvsp[-1].str), (yylsp[-1])); - n->indirection = check_indirection((yyvsp[0].list), yyscanner); + n->arg = makeStringConst((yyvsp[(1) - (2)].str), (yylsp[(1) - (2)])); + n->indirection = check_indirection((yyvsp[(2) - (2)].list), yyscanner); (yyval.node) = (PGNode *) n; } else - (yyval.node) = makeStringConst((yyvsp[-1].str), (yylsp[-1])); - } -#line 28974 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = makeStringConst((yyvsp[(1) - (2)].str), (yylsp[(1) - (2)])); + ;} break; - case 1245: /* AexprConst: BCONST */ -#line 3978 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeBitStringConst((yyvsp[0].str), (yylsp[0])); - } -#line 28982 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1248: +#line 3995 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeBitStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 1246: /* AexprConst: XCONST */ -#line 3982 "third_party/libpg_query/grammar/statements/select.y" - { + case 1249: +#line 3999 "third_party/libpg_query/grammar/statements/select.y" + { /* This is a bit constant per SQL99: * Without Feature F511, "BIT data type", * a shall not be a * or a . */ - (yyval.node) = makeBitStringConst((yyvsp[0].str), (yylsp[0])); - } -#line 28995 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyval.node) = makeBitStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 1247: /* AexprConst: func_name Sconst */ -#line 3991 "third_party/libpg_query/grammar/statements/select.y" - { + case 1250: +#line 4008 "third_party/libpg_query/grammar/statements/select.y" + { /* generic type 'literal' syntax */ - PGTypeName *t = makeTypeNameFromNameList((yyvsp[-1].list)); - t->location = (yylsp[-1]); - (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); - } -#line 29006 "third_party/libpg_query/grammar/grammar_out.cpp" + PGTypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (2)].list)); + t->location = (yylsp[(1) - (2)]); + (yyval.node) = makeStringConstCast((yyvsp[(2) - (2)].str), (yylsp[(2) - (2)]), t); + ;} break; - case 1248: /* AexprConst: func_name '(' func_arg_list opt_sort_clause opt_ignore_nulls ')' Sconst */ -#line 3998 "third_party/libpg_query/grammar/statements/select.y" - { + case 1251: +#line 4015 "third_party/libpg_query/grammar/statements/select.y" + { /* generic syntax with a type modifier */ - PGTypeName *t = makeTypeNameFromNameList((yyvsp[-6].list)); + PGTypeName *t = makeTypeNameFromNameList((yyvsp[(1) - (7)].list)); PGListCell *lc; /* @@ -29018,7 +29014,7 @@ YYLTYPE yylloc = yyloc_default; * don't actually wish to allow PGNamedArgExpr in this * context, ORDER BY, nor IGNORE NULLS. */ - foreach(lc, (yyvsp[-4].list)) + foreach(lc, (yyvsp[(3) - (7)].list)) { PGNamedArgExpr *arg = (PGNamedArgExpr *) lfirst(lc); @@ -29028,315 +29024,281 @@ YYLTYPE yylloc = yyloc_default; errmsg("type modifier cannot have parameter name"), parser_errposition(arg->location))); } - if ((yyvsp[-3].list) != NIL) + if ((yyvsp[(4) - (7)].list) != NIL) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("type modifier cannot have ORDER BY"), - parser_errposition((yylsp[-3])))); - if ((yyvsp[-2].boolean) != false) + parser_errposition((yylsp[(4) - (7)])))); + if ((yyvsp[(5) - (7)].boolean) != false) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("type modifier cannot have IGNORE NULLS"), - parser_errposition((yylsp[-2])))); + parser_errposition((yylsp[(5) - (7)])))); - t->typmods = (yyvsp[-4].list); - t->location = (yylsp[-6]); - (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); - } -#line 29048 "third_party/libpg_query/grammar/grammar_out.cpp" + t->typmods = (yyvsp[(3) - (7)].list); + t->location = (yylsp[(1) - (7)]); + (yyval.node) = makeStringConstCast((yyvsp[(7) - (7)].str), (yylsp[(7) - (7)]), t); + ;} break; - case 1249: /* AexprConst: ConstTypename Sconst */ -#line 4036 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), (yyvsp[-1].typnam)); - } -#line 29056 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1252: +#line 4053 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeStringConstCast((yyvsp[(2) - (2)].str), (yylsp[(2) - (2)]), (yyvsp[(1) - (2)].typnam)); + ;} break; - case 1250: /* AexprConst: ConstInterval '(' a_expr ')' opt_interval */ -#line 4040 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeIntervalNode((yyvsp[-2].node), (yylsp[-2]), (yyvsp[0].list)); - } -#line 29064 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1253: +#line 4057 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeIntervalNode((yyvsp[(3) - (5)].node), (yylsp[(3) - (5)]), (yyvsp[(5) - (5)].list)); + ;} break; - case 1251: /* AexprConst: ConstInterval Iconst opt_interval */ -#line 4044 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeIntervalNode((yyvsp[-1].ival), (yylsp[-1]), (yyvsp[0].list)); - } -#line 29072 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1254: +#line 4061 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeIntervalNode((yyvsp[(2) - (3)].ival), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].list)); + ;} break; - case 1252: /* AexprConst: ConstInterval Sconst opt_interval */ -#line 4048 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeIntervalNode((yyvsp[-1].str), (yylsp[-1]), (yyvsp[0].list)); - } -#line 29080 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1255: +#line 4065 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeIntervalNode((yyvsp[(2) - (3)].str), (yylsp[(2) - (3)]), (yyvsp[(3) - (3)].list)); + ;} break; - case 1253: /* AexprConst: TRUE_P */ -#line 4052 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeBoolAConst(true, (yylsp[0])); - } -#line 29088 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1256: +#line 4069 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeBoolAConst(true, (yylsp[(1) - (1)])); + ;} break; - case 1254: /* AexprConst: FALSE_P */ -#line 4056 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeBoolAConst(false, (yylsp[0])); - } -#line 29096 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1257: +#line 4073 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeBoolAConst(false, (yylsp[(1) - (1)])); + ;} break; - case 1255: /* AexprConst: NULL_P */ -#line 4060 "third_party/libpg_query/grammar/statements/select.y" - { - (yyval.node) = makeNullAConst((yylsp[0])); - } -#line 29104 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1258: +#line 4077 "third_party/libpg_query/grammar/statements/select.y" + { + (yyval.node) = makeNullAConst((yylsp[(1) - (1)])); + ;} break; - case 1256: /* Iconst: ICONST */ -#line 4065 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.ival) = (yyvsp[0].ival); } -#line 29110 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1259: +#line 4082 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 1257: /* type_function_name: IDENT */ -#line 4082 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29116 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1260: +#line 4099 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1258: /* type_function_name: unreserved_keyword */ -#line 4083 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29122 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1261: +#line 4100 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1259: /* type_function_name: type_func_name_keyword */ -#line 4084 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29128 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1262: +#line 4101 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1260: /* function_name_token: IDENT */ -#line 4087 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29134 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1263: +#line 4104 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1261: /* function_name_token: unreserved_keyword */ -#line 4088 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29140 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1264: +#line 4105 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1262: /* function_name_token: func_name_keyword */ -#line 4089 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29146 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1265: +#line 4106 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1263: /* type_name_token: IDENT */ -#line 4092 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29152 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1266: +#line 4109 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1264: /* type_name_token: unreserved_keyword */ -#line 4093 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29158 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1267: +#line 4110 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1265: /* type_name_token: type_name_keyword */ -#line 4094 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29164 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1268: +#line 4111 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1266: /* any_name: ColId */ -#line 4097 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 29170 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1269: +#line 4114 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(1) - (1)].str))); ;} break; - case 1267: /* any_name: ColId attrs */ -#line 4098 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lcons(makeString((yyvsp[-1].str)), (yyvsp[0].list)); } -#line 29176 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1270: +#line 4115 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lcons(makeString((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].list)); ;} break; - case 1268: /* attrs: '.' attr_name */ -#line 4102 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = list_make1(makeString((yyvsp[0].str))); } -#line 29182 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1271: +#line 4119 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = list_make1(makeString((yyvsp[(2) - (2)].str))); ;} break; - case 1269: /* attrs: attrs '.' attr_name */ -#line 4104 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = lappend((yyvsp[-2].list), makeString((yyvsp[0].str))); } -#line 29188 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1272: +#line 4121 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), makeString((yyvsp[(3) - (3)].str))); ;} break; - case 1270: /* opt_name_list: '(' name_list_opt_comma ')' */ -#line 4108 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 29194 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1273: +#line 4125 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1271: /* opt_name_list: %empty */ -#line 4109 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.list) = NIL; } -#line 29200 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1274: +#line 4126 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.list) = NIL; ;} break; - case 1273: /* ColLabelOrString: ColLabel */ -#line 4116 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29206 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1276: +#line 4133 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1274: /* ColLabelOrString: SCONST */ -#line 4117 "third_party/libpg_query/grammar/statements/select.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29212 "third_party/libpg_query/grammar/grammar_out.cpp" + case 1277: +#line 4134 "third_party/libpg_query/grammar/statements/select.y" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1275: /* PrepareStmt: PREPARE name prep_type_clause AS PreparableStmt */ + case 1278: #line 8 "third_party/libpg_query/grammar/statements/prepare.y" - { + { PGPrepareStmt *n = makeNode(PGPrepareStmt); - n->name = (yyvsp[-3].str); - n->argtypes = (yyvsp[-2].list); - n->query = (yyvsp[0].node); + n->name = (yyvsp[(2) - (5)].str); + n->argtypes = (yyvsp[(3) - (5)].list); + n->query = (yyvsp[(5) - (5)].node); (yyval.node) = (PGNode *) n; - } -#line 29224 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1276: /* prep_type_clause: '(' type_list ')' */ + case 1279: #line 18 "third_party/libpg_query/grammar/statements/prepare.y" - { (yyval.list) = (yyvsp[-1].list); } -#line 29230 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (3)].list); ;} break; - case 1277: /* prep_type_clause: %empty */ + case 1280: #line 19 "third_party/libpg_query/grammar/statements/prepare.y" - { (yyval.list) = NIL; } -#line 29236 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 1284: /* CreateSchemaStmt: CREATE_P SCHEMA qualified_name OptSchemaEltList */ + case 1287: #line 8 "third_party/libpg_query/grammar/statements/create_schema.y" - { + { PGCreateSchemaStmt *n = makeNode(PGCreateSchemaStmt); - if ((yyvsp[-1].range)->catalogname) { + if ((yyvsp[(3) - (4)].range)->catalogname) { ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("CREATE SCHEMA too many dots: expected \"catalog.schema\" or \"schema\""), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(3) - (4)])))); } - if ((yyvsp[-1].range)->schemaname) { - n->catalogname = (yyvsp[-1].range)->schemaname; - n->schemaname = (yyvsp[-1].range)->relname; + if ((yyvsp[(3) - (4)].range)->schemaname) { + n->catalogname = (yyvsp[(3) - (4)].range)->schemaname; + n->schemaname = (yyvsp[(3) - (4)].range)->relname; } else { - n->schemaname = (yyvsp[-1].range)->relname; + n->schemaname = (yyvsp[(3) - (4)].range)->relname; } - n->schemaElts = (yyvsp[0].list); + n->schemaElts = (yyvsp[(4) - (4)].list); n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 29259 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1285: /* CreateSchemaStmt: CREATE_P SCHEMA IF_P NOT EXISTS qualified_name OptSchemaEltList */ + case 1288: #line 27 "third_party/libpg_query/grammar/statements/create_schema.y" - { + { PGCreateSchemaStmt *n = makeNode(PGCreateSchemaStmt); - if ((yyvsp[-1].range)->catalogname) { + if ((yyvsp[(6) - (7)].range)->catalogname) { ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("CREATE SCHEMA too many dots: expected \"catalog.schema\" or \"schema\""), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(6) - (7)])))); } - if ((yyvsp[-1].range)->schemaname) { - n->catalogname = (yyvsp[-1].range)->schemaname; - n->schemaname = (yyvsp[-1].range)->relname; + if ((yyvsp[(6) - (7)].range)->schemaname) { + n->catalogname = (yyvsp[(6) - (7)].range)->schemaname; + n->schemaname = (yyvsp[(6) - (7)].range)->relname; } else { - n->schemaname = (yyvsp[-1].range)->relname; + n->schemaname = (yyvsp[(6) - (7)].range)->relname; } - if ((yyvsp[0].list) != NIL) + if ((yyvsp[(7) - (7)].list) != NIL) ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("CREATE SCHEMA IF NOT EXISTS cannot include schema elements"), - parser_errposition((yylsp[0])))); - n->schemaElts = (yyvsp[0].list); + parser_errposition((yylsp[(7) - (7)])))); + n->schemaElts = (yyvsp[(7) - (7)].list); n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 29287 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1286: /* CreateSchemaStmt: CREATE_P OR REPLACE SCHEMA qualified_name OptSchemaEltList */ + case 1289: #line 51 "third_party/libpg_query/grammar/statements/create_schema.y" - { + { PGCreateSchemaStmt *n = makeNode(PGCreateSchemaStmt); - if ((yyvsp[-1].range)->catalogname) { + if ((yyvsp[(5) - (6)].range)->catalogname) { ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("CREATE SCHEMA too many dots: expected \"catalog.schema\" or \"schema\""), - parser_errposition((yylsp[-1])))); + parser_errposition((yylsp[(5) - (6)])))); } - if ((yyvsp[-1].range)->schemaname) { - n->catalogname = (yyvsp[-1].range)->schemaname; - n->schemaname = (yyvsp[-1].range)->relname; + if ((yyvsp[(5) - (6)].range)->schemaname) { + n->catalogname = (yyvsp[(5) - (6)].range)->schemaname; + n->schemaname = (yyvsp[(5) - (6)].range)->relname; } else { - n->schemaname = (yyvsp[-1].range)->relname; + n->schemaname = (yyvsp[(5) - (6)].range)->relname; } - n->schemaElts = (yyvsp[0].list); + n->schemaElts = (yyvsp[(6) - (6)].list); n->onconflict = PG_REPLACE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 29310 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1287: /* OptSchemaEltList: OptSchemaEltList schema_stmt */ + case 1290: #line 74 "third_party/libpg_query/grammar/statements/create_schema.y" - { + { if ((yyloc) < 0) /* see comments for YYLLOC_DEFAULT */ - (yyloc) = (yylsp[0]); - (yyval.list) = lappend((yyvsp[-1].list), (yyvsp[0].node)); - } -#line 29320 "third_party/libpg_query/grammar/grammar_out.cpp" + (yyloc) = (yylsp[(2) - (2)]); + (yyval.list) = lappend((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); + ;} break; - case 1288: /* OptSchemaEltList: %empty */ + case 1291: #line 80 "third_party/libpg_query/grammar/statements/create_schema.y" - { (yyval.list) = NIL; } -#line 29326 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 1293: /* IndexStmt: CREATE_P opt_unique INDEX opt_concurrently opt_index_name ON qualified_name access_method_clause '(' index_params ')' opt_reloptions where_clause */ + case 1296: #line 11 "third_party/libpg_query/grammar/statements/index.y" - { + { PGIndexStmt *n = makeNode(PGIndexStmt); - n->unique = (yyvsp[-11].boolean); - n->concurrent = (yyvsp[-9].boolean); - n->idxname = (yyvsp[-8].str); - n->relation = (yyvsp[-6].range); - n->accessMethod = (yyvsp[-5].str); - n->indexParams = (yyvsp[-3].list); - n->options = (yyvsp[-1].list); - n->whereClause = (yyvsp[0].node); + n->unique = (yyvsp[(2) - (13)].boolean); + n->concurrent = (yyvsp[(4) - (13)].boolean); + n->idxname = (yyvsp[(5) - (13)].str); + n->relation = (yyvsp[(7) - (13)].range); + n->accessMethod = (yyvsp[(8) - (13)].str); + n->indexParams = (yyvsp[(10) - (13)].list); + n->options = (yyvsp[(12) - (13)].list); + n->whereClause = (yyvsp[(13) - (13)].node); n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -29348,22 +29310,21 @@ YYLTYPE yylloc = yyloc_default; n->transformed = false; n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 29353 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1294: /* IndexStmt: CREATE_P opt_unique INDEX opt_concurrently IF_P NOT EXISTS index_name ON qualified_name access_method_clause '(' index_params ')' opt_reloptions where_clause */ + case 1297: #line 36 "third_party/libpg_query/grammar/statements/index.y" - { + { PGIndexStmt *n = makeNode(PGIndexStmt); - n->unique = (yyvsp[-14].boolean); - n->concurrent = (yyvsp[-12].boolean); - n->idxname = (yyvsp[-8].str); - n->relation = (yyvsp[-6].range); - n->accessMethod = (yyvsp[-5].str); - n->indexParams = (yyvsp[-3].list); - n->options = (yyvsp[-1].list); - n->whereClause = (yyvsp[0].node); + n->unique = (yyvsp[(2) - (16)].boolean); + n->concurrent = (yyvsp[(4) - (16)].boolean); + n->idxname = (yyvsp[(8) - (16)].str); + n->relation = (yyvsp[(10) - (16)].range); + n->accessMethod = (yyvsp[(11) - (16)].str); + n->indexParams = (yyvsp[(13) - (16)].list); + n->options = (yyvsp[(15) - (16)].list); + n->whereClause = (yyvsp[(16) - (16)].node); n->excludeOpNames = NIL; n->idxcomment = NULL; n->indexOid = InvalidOid; @@ -29375,1601 +29336,1457 @@ YYLTYPE yylloc = yyloc_default; n->transformed = false; n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 29380 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1295: /* access_method: ColId */ + case 1298: #line 62 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29386 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1296: /* access_method_clause: USING access_method */ + case 1299: #line 66 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29392 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 1297: /* access_method_clause: %empty */ + case 1300: #line 67 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.str) = (char*) DEFAULT_INDEX_TYPE; } -#line 29398 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (char*) DEFAULT_INDEX_TYPE; ;} break; - case 1298: /* opt_concurrently: CONCURRENTLY */ + case 1301: #line 72 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.boolean) = true; } -#line 29404 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1299: /* opt_concurrently: %empty */ + case 1302: #line 73 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.boolean) = false; } -#line 29410 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1300: /* opt_index_name: index_name */ + case 1303: #line 78 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29416 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1301: /* opt_index_name: %empty */ + case 1304: #line 79 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.str) = NULL; } -#line 29422 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 1302: /* opt_reloptions: WITH reloptions */ + case 1305: #line 83 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.list) = (yyvsp[0].list); } -#line 29428 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1303: /* opt_reloptions: %empty */ + case 1306: #line 84 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.list) = NIL; } -#line 29434 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 1304: /* opt_unique: UNIQUE */ + case 1307: #line 89 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.boolean) = true; } -#line 29440 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1305: /* opt_unique: %empty */ + case 1308: #line 90 "third_party/libpg_query/grammar/statements/index.y" - { (yyval.boolean) = false; } -#line 29446 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1306: /* AlterObjectSchemaStmt: ALTER TABLE relation_expr SET SCHEMA name */ + case 1309: #line 8 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(3) - (6)].range); + n->newschema = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 29459 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1307: /* AlterObjectSchemaStmt: ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name */ + case 1310: #line 17 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_TABLE; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(5) - (8)].range); + n->newschema = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 29472 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1308: /* AlterObjectSchemaStmt: ALTER SEQUENCE qualified_name SET SCHEMA name */ + case 1311: #line 26 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_SEQUENCE; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(3) - (6)].range); + n->newschema = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 29485 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1309: /* AlterObjectSchemaStmt: ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name */ + case 1312: #line 35 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_SEQUENCE; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(5) - (8)].range); + n->newschema = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 29498 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1310: /* AlterObjectSchemaStmt: ALTER VIEW qualified_name SET SCHEMA name */ + case 1313: #line 44 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_VIEW; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(3) - (6)].range); + n->newschema = (yyvsp[(6) - (6)].str); n->missing_ok = false; (yyval.node) = (PGNode *)n; - } -#line 29511 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1311: /* AlterObjectSchemaStmt: ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name */ + case 1314: #line 53 "third_party/libpg_query/grammar/statements/alter_schema.y" - { + { PGAlterObjectSchemaStmt *n = makeNode(PGAlterObjectSchemaStmt); n->objectType = PG_OBJECT_VIEW; - n->relation = (yyvsp[-3].range); - n->newschema = (yyvsp[0].str); + n->relation = (yyvsp[(5) - (8)].range); + n->newschema = (yyvsp[(8) - (8)].str); n->missing_ok = true; (yyval.node) = (PGNode *)n; - } -#line 29524 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1312: /* CheckPointStmt: FORCE CHECKPOINT opt_col_id */ + case 1315: #line 6 "third_party/libpg_query/grammar/statements/checkpoint.y" - { + { PGCheckPointStmt *n = makeNode(PGCheckPointStmt); n->force = true; - n->name = (yyvsp[0].str); + n->name = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *)n; - } -#line 29535 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1313: /* CheckPointStmt: CHECKPOINT opt_col_id */ + case 1316: #line 13 "third_party/libpg_query/grammar/statements/checkpoint.y" - { + { PGCheckPointStmt *n = makeNode(PGCheckPointStmt); n->force = false; - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); (yyval.node) = (PGNode *)n; - } -#line 29546 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1314: /* opt_col_id: ColId */ + case 1317: #line 22 "third_party/libpg_query/grammar/statements/checkpoint.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29552 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1315: /* opt_col_id: %empty */ + case 1318: #line 23 "third_party/libpg_query/grammar/statements/checkpoint.y" - { (yyval.str) = NULL; } -#line 29558 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 1316: /* CommentOnStmt: COMMENT ON comment_on_type_any_name qualified_name IS comment_value */ + case 1319: #line 8 "third_party/libpg_query/grammar/statements/comment_on.y" - { + { PGCommentOnStmt *n = makeNode(PGCommentOnStmt); - n->object_type = (yyvsp[-3].objtype); - n->name = (yyvsp[-2].range); - n->value = (yyvsp[0].node); + n->object_type = (yyvsp[(3) - (6)].objtype); + n->name = (yyvsp[(4) - (6)].range); + n->value = (yyvsp[(6) - (6)].node); (yyval.node) = (PGNode *)n; - } -#line 29570 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1317: /* CommentOnStmt: COMMENT ON COLUMN a_expr IS comment_value */ + case 1320: #line 16 "third_party/libpg_query/grammar/statements/comment_on.y" - { + { PGCommentOnStmt *n = makeNode(PGCommentOnStmt); n->object_type = PG_OBJECT_COLUMN; - n->column_expr = (yyvsp[-2].node); - n->value = (yyvsp[0].node); + n->column_expr = (yyvsp[(4) - (6)].node); + n->value = (yyvsp[(6) - (6)].node); (yyval.node) = (PGNode *)n; - } -#line 29582 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1318: /* comment_value: Sconst */ + case 1321: #line 26 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); } -#line 29588 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); ;} break; - case 1319: /* comment_value: NULL_P */ + case 1322: #line 27 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.node) = makeNullAConst((yylsp[0])); } -#line 29594 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = makeNullAConst((yylsp[(1) - (1)])); ;} break; - case 1320: /* comment_on_type_any_name: TABLE */ + case 1323: #line 30 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_TABLE; } -#line 29600 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TABLE; ;} break; - case 1321: /* comment_on_type_any_name: SEQUENCE */ + case 1324: #line 31 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_SEQUENCE; } -#line 29606 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_SEQUENCE; ;} break; - case 1322: /* comment_on_type_any_name: FUNCTION */ + case 1325: #line 32 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_FUNCTION; } -#line 29612 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FUNCTION; ;} break; - case 1323: /* comment_on_type_any_name: MACRO */ + case 1326: #line 33 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_FUNCTION; } -#line 29618 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_FUNCTION; ;} break; - case 1324: /* comment_on_type_any_name: MACRO TABLE */ + case 1327: #line 34 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_TABLE_MACRO; } -#line 29624 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TABLE_MACRO; ;} break; - case 1325: /* comment_on_type_any_name: VIEW */ + case 1328: #line 35 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_VIEW; } -#line 29630 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_VIEW; ;} break; - case 1326: /* comment_on_type_any_name: DATABASE */ + case 1329: #line 36 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_DATABASE; } -#line 29636 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_DATABASE; ;} break; - case 1327: /* comment_on_type_any_name: INDEX */ + case 1330: #line 37 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_INDEX; } -#line 29642 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_INDEX; ;} break; - case 1328: /* comment_on_type_any_name: SCHEMA */ + case 1331: #line 38 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_SCHEMA; } -#line 29648 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_SCHEMA; ;} break; - case 1329: /* comment_on_type_any_name: TYPE_P */ + case 1332: #line 39 "third_party/libpg_query/grammar/statements/comment_on.y" - { (yyval.objtype) = PG_OBJECT_TYPE; } -#line 29654 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.objtype) = PG_OBJECT_TYPE; ;} break; - case 1330: /* ExportStmt: EXPORT_P DATABASE Sconst copy_options */ + case 1333: #line 8 "third_party/libpg_query/grammar/statements/export.y" - { + { PGExportStmt *n = makeNode(PGExportStmt); n->database = NULL; - n->filename = (yyvsp[-1].str); + n->filename = (yyvsp[(3) - (4)].str); n->options = NIL; - if ((yyvsp[0].list)) { - n->options = list_concat(n->options, (yyvsp[0].list)); + if ((yyvsp[(4) - (4)].list)) { + n->options = list_concat(n->options, (yyvsp[(4) - (4)].list)); } (yyval.node) = (PGNode *)n; - } -#line 29669 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1331: /* ExportStmt: EXPORT_P DATABASE ColId TO Sconst copy_options */ + case 1334: #line 20 "third_party/libpg_query/grammar/statements/export.y" - { + { PGExportStmt *n = makeNode(PGExportStmt); - n->database = (yyvsp[-3].str); - n->filename = (yyvsp[-1].str); + n->database = (yyvsp[(3) - (6)].str); + n->filename = (yyvsp[(5) - (6)].str); n->options = NIL; - if ((yyvsp[0].list)) { - n->options = list_concat(n->options, (yyvsp[0].list)); + if ((yyvsp[(6) - (6)].list)) { + n->options = list_concat(n->options, (yyvsp[(6) - (6)].list)); } (yyval.node) = (PGNode *)n; - } -#line 29684 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1332: /* ImportStmt: IMPORT_P DATABASE Sconst */ + case 1335: #line 34 "third_party/libpg_query/grammar/statements/export.y" - { + { PGImportStmt *n = makeNode(PGImportStmt); - n->filename = (yyvsp[0].str); + n->filename = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *)n; - } -#line 29694 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1333: /* ExplainStmt: EXPLAIN ExplainableStmt */ + case 1336: #line 10 "third_party/libpg_query/grammar/statements/explain.y" - { + { PGExplainStmt *n = makeNode(PGExplainStmt); - n->query = (yyvsp[0].node); + n->query = (yyvsp[(2) - (2)].node); n->options = NIL; (yyval.node) = (PGNode *) n; - } -#line 29705 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1334: /* ExplainStmt: EXPLAIN analyze_keyword opt_verbose ExplainableStmt */ + case 1337: #line 17 "third_party/libpg_query/grammar/statements/explain.y" - { + { PGExplainStmt *n = makeNode(PGExplainStmt); - n->query = (yyvsp[0].node); - n->options = list_make1(makeDefElem("analyze", NULL, (yylsp[-2]))); - if ((yyvsp[-1].boolean)) + n->query = (yyvsp[(4) - (4)].node); + n->options = list_make1(makeDefElem("analyze", NULL, (yylsp[(2) - (4)]))); + if ((yyvsp[(3) - (4)].boolean)) n->options = lappend(n->options, - makeDefElem("verbose", NULL, (yylsp[-1]))); + makeDefElem("verbose", NULL, (yylsp[(3) - (4)]))); (yyval.node) = (PGNode *) n; - } -#line 29719 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1335: /* ExplainStmt: EXPLAIN VERBOSE ExplainableStmt */ + case 1338: #line 27 "third_party/libpg_query/grammar/statements/explain.y" - { + { PGExplainStmt *n = makeNode(PGExplainStmt); - n->query = (yyvsp[0].node); - n->options = list_make1(makeDefElem("verbose", NULL, (yylsp[-1]))); + n->query = (yyvsp[(3) - (3)].node); + n->options = list_make1(makeDefElem("verbose", NULL, (yylsp[(2) - (3)]))); (yyval.node) = (PGNode *) n; - } -#line 29730 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1336: /* ExplainStmt: EXPLAIN '(' explain_option_list ')' ExplainableStmt */ + case 1339: #line 34 "third_party/libpg_query/grammar/statements/explain.y" - { + { PGExplainStmt *n = makeNode(PGExplainStmt); - n->query = (yyvsp[0].node); - n->options = (yyvsp[-2].list); + n->query = (yyvsp[(5) - (5)].node); + n->options = (yyvsp[(3) - (5)].list); (yyval.node) = (PGNode *) n; - } -#line 29741 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1337: /* opt_verbose: VERBOSE */ + case 1340: #line 44 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.boolean) = true; } -#line 29747 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1338: /* opt_verbose: %empty */ + case 1341: #line 45 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.boolean) = false; } -#line 29753 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1339: /* explain_option_arg: opt_boolean_or_string */ + case 1342: #line 50 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.node) = (PGNode *) makeString((yyvsp[0].str)); } -#line 29759 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) makeString((yyvsp[(1) - (1)].str)); ;} break; - case 1340: /* explain_option_arg: NumericOnly */ + case 1343: #line 51 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.node) = (PGNode *) (yyvsp[0].value); } -#line 29765 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (PGNode *) (yyvsp[(1) - (1)].value); ;} break; - case 1341: /* explain_option_arg: %empty */ + case 1344: #line 52 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.node) = NULL; } -#line 29771 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 1372: /* NonReservedWord: IDENT */ + case 1375: #line 90 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29777 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1373: /* NonReservedWord: unreserved_keyword */ + case 1376: #line 91 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29783 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1374: /* NonReservedWord: other_keyword */ + case 1377: #line 92 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = pstrdup((yyvsp[0].keyword)); } -#line 29789 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = pstrdup((yyvsp[(1) - (1)].keyword)); ;} break; - case 1375: /* NonReservedWord_or_Sconst: NonReservedWord */ + case 1378: #line 97 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29795 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1376: /* NonReservedWord_or_Sconst: Sconst */ + case 1379: #line 98 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29801 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1377: /* explain_option_list: explain_option_elem */ + case 1380: #line 104 "third_party/libpg_query/grammar/statements/explain.y" - { - (yyval.list) = list_make1((yyvsp[0].defelt)); - } -#line 29809 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = list_make1((yyvsp[(1) - (1)].defelt)); + ;} break; - case 1378: /* explain_option_list: explain_option_list ',' explain_option_elem */ + case 1381: #line 108 "third_party/libpg_query/grammar/statements/explain.y" - { - (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].defelt)); - } -#line 29817 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].defelt)); + ;} break; - case 1379: /* analyze_keyword: ANALYZE */ + case 1382: #line 115 "third_party/libpg_query/grammar/statements/explain.y" - {} -#line 29823 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 1380: /* analyze_keyword: ANALYSE */ + case 1383: #line 116 "third_party/libpg_query/grammar/statements/explain.y" - {} -#line 29829 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 1381: /* opt_boolean_or_string: TRUE_P */ + case 1384: #line 121 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (char*) "true"; } -#line 29835 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (char*) "true"; ;} break; - case 1382: /* opt_boolean_or_string: FALSE_P */ + case 1385: #line 122 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (char*) "false"; } -#line 29841 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (char*) "false"; ;} break; - case 1383: /* opt_boolean_or_string: ON */ + case 1386: #line 123 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (char*) "on"; } -#line 29847 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (char*) "on"; ;} break; - case 1384: /* opt_boolean_or_string: NonReservedWord_or_Sconst */ + case 1387: #line 129 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29853 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1385: /* explain_option_elem: explain_option_name explain_option_arg */ + case 1388: #line 135 "third_party/libpg_query/grammar/statements/explain.y" - { - (yyval.defelt) = makeDefElem((yyvsp[-1].str), (yyvsp[0].node), (yylsp[-1])); - } -#line 29861 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.defelt) = makeDefElem((yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].node), (yylsp[(1) - (2)])); + ;} break; - case 1386: /* explain_option_name: NonReservedWord */ + case 1389: #line 142 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (yyvsp[0].str); } -#line 29867 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1387: /* explain_option_name: analyze_keyword */ + case 1390: #line 143 "third_party/libpg_query/grammar/statements/explain.y" - { (yyval.str) = (char*) "analyze"; } -#line 29873 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (char*) "analyze"; ;} break; - case 1388: /* VariableSetStmt: SET set_rest */ + case 1391: #line 11 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGVariableSetStmt *n = (yyvsp[0].vsetstmt); + { + PGVariableSetStmt *n = (yyvsp[(2) - (2)].vsetstmt); n->scope = VAR_SET_SCOPE_DEFAULT; (yyval.node) = (PGNode *) n; - } -#line 29883 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1389: /* VariableSetStmt: SET LOCAL set_rest */ + case 1392: #line 17 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGVariableSetStmt *n = (yyvsp[0].vsetstmt); + { + PGVariableSetStmt *n = (yyvsp[(3) - (3)].vsetstmt); n->scope = VAR_SET_SCOPE_LOCAL; (yyval.node) = (PGNode *) n; - } -#line 29893 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1390: /* VariableSetStmt: SET SESSION set_rest */ + case 1393: #line 23 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGVariableSetStmt *n = (yyvsp[0].vsetstmt); + { + PGVariableSetStmt *n = (yyvsp[(3) - (3)].vsetstmt); n->scope = VAR_SET_SCOPE_SESSION; (yyval.node) = (PGNode *) n; - } -#line 29903 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1391: /* VariableSetStmt: SET GLOBAL set_rest */ + case 1394: #line 29 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGVariableSetStmt *n = (yyvsp[0].vsetstmt); + { + PGVariableSetStmt *n = (yyvsp[(3) - (3)].vsetstmt); n->scope = VAR_SET_SCOPE_GLOBAL; (yyval.node) = (PGNode *) n; - } -#line 29913 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1392: /* set_rest: generic_set */ + case 1395: #line 38 "third_party/libpg_query/grammar/statements/variable_set.y" - {(yyval.vsetstmt) = (yyvsp[0].vsetstmt);} -#line 29919 "third_party/libpg_query/grammar/grammar_out.cpp" + {(yyval.vsetstmt) = (yyvsp[(1) - (1)].vsetstmt);;} break; - case 1393: /* set_rest: var_name FROM CURRENT_P */ + case 1396: #line 40 "third_party/libpg_query/grammar/statements/variable_set.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_SET_CURRENT; - n->name = (yyvsp[-2].str); + n->name = (yyvsp[(1) - (3)].str); (yyval.vsetstmt) = n; - } -#line 29930 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1394: /* set_rest: TIME ZONE zone_value */ + case 1397: #line 48 "third_party/libpg_query/grammar/statements/variable_set.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_SET_VALUE; n->name = (char*) "timezone"; - if ((yyvsp[0].node) != NULL) - n->args = list_make1((yyvsp[0].node)); + if ((yyvsp[(3) - (3)].node) != NULL) + n->args = list_make1((yyvsp[(3) - (3)].node)); else n->kind = VAR_SET_DEFAULT; (yyval.vsetstmt) = n; - } -#line 29945 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1395: /* set_rest: SCHEMA Sconst */ + case 1398: #line 59 "third_party/libpg_query/grammar/statements/variable_set.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_SET_VALUE; n->name = (char*) "search_path"; - n->args = list_make1(makeStringConst((yyvsp[0].str), (yylsp[0]))); + n->args = list_make1(makeStringConst((yyvsp[(2) - (2)].str), (yylsp[(2) - (2)]))); (yyval.vsetstmt) = n; - } -#line 29957 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1396: /* generic_set: var_name TO var_list */ + case 1399: #line 71 "third_party/libpg_query/grammar/statements/variable_set.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_SET_VALUE; - n->name = (yyvsp[-2].str); - n->args = (yyvsp[0].list); + n->name = (yyvsp[(1) - (3)].str); + n->args = (yyvsp[(3) - (3)].list); (yyval.vsetstmt) = n; - } -#line 29969 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1397: /* generic_set: var_name '=' var_list */ + case 1400: #line 79 "third_party/libpg_query/grammar/statements/variable_set.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_SET_VALUE; - n->name = (yyvsp[-2].str); - n->args = (yyvsp[0].list); + n->name = (yyvsp[(1) - (3)].str); + n->args = (yyvsp[(3) - (3)].list); (yyval.vsetstmt) = n; - } -#line 29981 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1398: /* var_value: a_expr */ + case 1401: #line 90 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.node) = (yyvsp[0].node); } -#line 29987 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(1) - (1)].node); ;} break; - case 1399: /* zone_value: Sconst */ + case 1402: #line 96 "third_party/libpg_query/grammar/statements/variable_set.y" - { - (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); - } -#line 29995 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 1400: /* zone_value: IDENT */ + case 1403: #line 100 "third_party/libpg_query/grammar/statements/variable_set.y" - { - (yyval.node) = makeStringConst((yyvsp[0].str), (yylsp[0])); - } -#line 30003 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.node) = makeStringConst((yyvsp[(1) - (1)].str), (yylsp[(1) - (1)])); + ;} break; - case 1401: /* zone_value: ConstInterval Sconst opt_interval */ + case 1404: #line 104 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGTypeName *t = (yyvsp[-2].typnam); - if ((yyvsp[0].list) != NIL) + { + PGTypeName *t = (yyvsp[(1) - (3)].typnam); + if ((yyvsp[(3) - (3)].list) != NIL) { - PGAConst *n = (PGAConst *) linitial((yyvsp[0].list)); + PGAConst *n = (PGAConst *) linitial((yyvsp[(3) - (3)].list)); if ((n->val.val.ival & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0) ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), errmsg("time zone interval must be HOUR or HOUR TO MINUTE"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(3) - (3)])))); } - t->typmods = (yyvsp[0].list); - (yyval.node) = makeStringConstCast((yyvsp[-1].str), (yylsp[-1]), t); - } -#line 30022 "third_party/libpg_query/grammar/grammar_out.cpp" + t->typmods = (yyvsp[(3) - (3)].list); + (yyval.node) = makeStringConstCast((yyvsp[(2) - (3)].str), (yylsp[(2) - (3)]), t); + ;} break; - case 1402: /* zone_value: ConstInterval '(' Iconst ')' Sconst */ + case 1405: #line 119 "third_party/libpg_query/grammar/statements/variable_set.y" - { - PGTypeName *t = (yyvsp[-4].typnam); + { + PGTypeName *t = (yyvsp[(1) - (5)].typnam); t->typmods = list_make2(makeIntConst(INTERVAL_FULL_RANGE, -1), - makeIntConst((yyvsp[-2].ival), (yylsp[-2]))); - (yyval.node) = makeStringConstCast((yyvsp[0].str), (yylsp[0]), t); - } -#line 30033 "third_party/libpg_query/grammar/grammar_out.cpp" + makeIntConst((yyvsp[(3) - (5)].ival), (yylsp[(3) - (5)]))); + (yyval.node) = makeStringConstCast((yyvsp[(5) - (5)].str), (yylsp[(5) - (5)]), t); + ;} break; - case 1403: /* zone_value: NumericOnly */ + case 1406: #line 125 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.node) = makeAConst((yyvsp[0].value), (yylsp[0])); } -#line 30039 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = makeAConst((yyvsp[(1) - (1)].value), (yylsp[(1) - (1)])); ;} break; - case 1404: /* zone_value: DEFAULT */ + case 1407: #line 126 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.node) = NULL; } -#line 30045 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 1405: /* zone_value: LOCAL */ + case 1408: #line 127 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.node) = NULL; } -#line 30051 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 1406: /* var_list: var_value */ + case 1409: #line 131 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.list) = list_make1((yyvsp[0].node)); } -#line 30057 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = list_make1((yyvsp[(1) - (1)].node)); ;} break; - case 1407: /* var_list: var_list ',' var_value */ + case 1410: #line 132 "third_party/libpg_query/grammar/statements/variable_set.y" - { (yyval.list) = lappend((yyvsp[-2].list), (yyvsp[0].node)); } -#line 30063 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = lappend((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); ;} break; - case 1408: /* LoadStmt: LOAD file_name */ + case 1411: #line 8 "third_party/libpg_query/grammar/statements/load.y" - { + { PGLoadStmt *n = makeNode(PGLoadStmt); - n->filename = (yyvsp[0].str); + n->filename = (yyvsp[(2) - (2)].str); n->repository = ""; n->load_type = PG_LOAD_TYPE_LOAD; (yyval.node) = (PGNode *)n; - } -#line 30075 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1409: /* LoadStmt: INSTALL file_name */ + case 1412: #line 15 "third_party/libpg_query/grammar/statements/load.y" - { + { PGLoadStmt *n = makeNode(PGLoadStmt); - n->filename = (yyvsp[0].str); + n->filename = (yyvsp[(2) - (2)].str); n->repository = ""; n->load_type = PG_LOAD_TYPE_INSTALL; (yyval.node) = (PGNode *)n; - } -#line 30087 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1410: /* LoadStmt: FORCE INSTALL file_name */ + case 1413: #line 22 "third_party/libpg_query/grammar/statements/load.y" - { + { PGLoadStmt *n = makeNode(PGLoadStmt); - n->filename = (yyvsp[0].str); + n->filename = (yyvsp[(3) - (3)].str); n->repository = ""; n->load_type = PG_LOAD_TYPE_FORCE_INSTALL; (yyval.node) = (PGNode *)n; - } -#line 30099 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1411: /* LoadStmt: INSTALL file_name FROM repo_path */ + case 1414: #line 29 "third_party/libpg_query/grammar/statements/load.y" - { + { PGLoadStmt *n = makeNode(PGLoadStmt); - n->filename = (yyvsp[-2].str); - n->repository = (yyvsp[0].str); + n->filename = (yyvsp[(2) - (4)].str); + n->repository = (yyvsp[(4) - (4)].str); n->load_type = PG_LOAD_TYPE_INSTALL; (yyval.node) = (PGNode *)n; - } -#line 30111 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1412: /* LoadStmt: FORCE INSTALL file_name FROM repo_path */ + case 1415: #line 36 "third_party/libpg_query/grammar/statements/load.y" - { + { PGLoadStmt *n = makeNode(PGLoadStmt); - n->filename = (yyvsp[-2].str); - n->repository = (yyvsp[0].str); + n->filename = (yyvsp[(3) - (5)].str); + n->repository = (yyvsp[(5) - (5)].str); n->load_type = PG_LOAD_TYPE_FORCE_INSTALL; (yyval.node) = (PGNode *)n; - } -#line 30123 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1413: /* file_name: Sconst */ + case 1416: #line 45 "third_party/libpg_query/grammar/statements/load.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30129 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1414: /* file_name: ColId */ + case 1417: #line 46 "third_party/libpg_query/grammar/statements/load.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30135 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1415: /* repo_path: Sconst */ + case 1418: #line 48 "third_party/libpg_query/grammar/statements/load.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30141 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1416: /* repo_path: ColId */ + case 1419: #line 49 "third_party/libpg_query/grammar/statements/load.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30147 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1417: /* VacuumStmt: VACUUM opt_full opt_freeze opt_verbose */ + case 1420: #line 9 "third_party/libpg_query/grammar/statements/vacuum.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); n->options = PG_VACOPT_VACUUM; - if ((yyvsp[-2].boolean)) + if ((yyvsp[(2) - (4)].boolean)) n->options |= PG_VACOPT_FULL; - if ((yyvsp[-1].boolean)) + if ((yyvsp[(3) - (4)].boolean)) n->options |= PG_VACOPT_FREEZE; - if ((yyvsp[0].boolean)) + if ((yyvsp[(4) - (4)].boolean)) n->options |= PG_VACOPT_VERBOSE; n->relation = NULL; n->va_cols = NIL; (yyval.node) = (PGNode *)n; - } -#line 30165 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1418: /* VacuumStmt: VACUUM opt_full opt_freeze opt_verbose qualified_name opt_name_list */ + case 1421: #line 23 "third_party/libpg_query/grammar/statements/vacuum.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); n->options = PG_VACOPT_VACUUM; - if ((yyvsp[-4].boolean)) + if ((yyvsp[(2) - (6)].boolean)) n->options |= PG_VACOPT_FULL; - if ((yyvsp[-3].boolean)) + if ((yyvsp[(3) - (6)].boolean)) n->options |= PG_VACOPT_FREEZE; - if ((yyvsp[-2].boolean)) + if ((yyvsp[(4) - (6)].boolean)) n->options |= PG_VACOPT_VERBOSE; - n->relation = (yyvsp[-1].range); - n->va_cols = (yyvsp[0].list); + n->relation = (yyvsp[(5) - (6)].range); + n->va_cols = (yyvsp[(6) - (6)].list); (yyval.node) = (PGNode *)n; - } -#line 30183 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1419: /* VacuumStmt: VACUUM opt_full opt_freeze opt_verbose AnalyzeStmt */ + case 1422: #line 37 "third_party/libpg_query/grammar/statements/vacuum.y" - { - PGVacuumStmt *n = (PGVacuumStmt *) (yyvsp[0].node); + { + PGVacuumStmt *n = (PGVacuumStmt *) (yyvsp[(5) - (5)].node); n->options |= PG_VACOPT_VACUUM; - if ((yyvsp[-3].boolean)) + if ((yyvsp[(2) - (5)].boolean)) n->options |= PG_VACOPT_FULL; - if ((yyvsp[-2].boolean)) + if ((yyvsp[(3) - (5)].boolean)) n->options |= PG_VACOPT_FREEZE; - if ((yyvsp[-1].boolean)) + if ((yyvsp[(4) - (5)].boolean)) n->options |= PG_VACOPT_VERBOSE; (yyval.node) = (PGNode *)n; - } -#line 30199 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1420: /* VacuumStmt: VACUUM '(' vacuum_option_list ')' */ + case 1423: #line 49 "third_party/libpg_query/grammar/statements/vacuum.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); - n->options = PG_VACOPT_VACUUM | (yyvsp[-1].ival); + n->options = PG_VACOPT_VACUUM | (yyvsp[(3) - (4)].ival); n->relation = NULL; n->va_cols = NIL; (yyval.node) = (PGNode *) n; - } -#line 30211 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1421: /* VacuumStmt: VACUUM '(' vacuum_option_list ')' qualified_name opt_name_list */ + case 1424: #line 57 "third_party/libpg_query/grammar/statements/vacuum.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); - n->options = PG_VACOPT_VACUUM | (yyvsp[-3].ival); - n->relation = (yyvsp[-1].range); - n->va_cols = (yyvsp[0].list); + n->options = PG_VACOPT_VACUUM | (yyvsp[(3) - (6)].ival); + n->relation = (yyvsp[(5) - (6)].range); + n->va_cols = (yyvsp[(6) - (6)].list); if (n->va_cols != NIL) /* implies analyze */ n->options |= PG_VACOPT_ANALYZE; (yyval.node) = (PGNode *) n; - } -#line 30225 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1422: /* vacuum_option_elem: analyze_keyword */ + case 1425: #line 70 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = PG_VACOPT_ANALYZE; } -#line 30231 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_VACOPT_ANALYZE; ;} break; - case 1423: /* vacuum_option_elem: VERBOSE */ + case 1426: #line 71 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = PG_VACOPT_VERBOSE; } -#line 30237 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_VACOPT_VERBOSE; ;} break; - case 1424: /* vacuum_option_elem: FREEZE */ + case 1427: #line 72 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = PG_VACOPT_FREEZE; } -#line 30243 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_VACOPT_FREEZE; ;} break; - case 1425: /* vacuum_option_elem: FULL */ + case 1428: #line 73 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = PG_VACOPT_FULL; } -#line 30249 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = PG_VACOPT_FULL; ;} break; - case 1426: /* vacuum_option_elem: IDENT */ + case 1429: #line 75 "third_party/libpg_query/grammar/statements/vacuum.y" - { - if (strcmp((yyvsp[0].str), "disable_page_skipping") == 0) + { + if (strcmp((yyvsp[(1) - (1)].str), "disable_page_skipping") == 0) (yyval.ival) = PG_VACOPT_DISABLE_PAGE_SKIPPING; else ereport(ERROR, (errcode(PG_ERRCODE_SYNTAX_ERROR), - errmsg("unrecognized VACUUM option \"%s\"", (yyvsp[0].str)), - parser_errposition((yylsp[0])))); - } -#line 30263 "third_party/libpg_query/grammar/grammar_out.cpp" + errmsg("unrecognized VACUUM option \"%s\"", (yyvsp[(1) - (1)].str)), + parser_errposition((yylsp[(1) - (1)])))); + ;} break; - case 1427: /* opt_full: FULL */ + case 1430: #line 87 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.boolean) = true; } -#line 30269 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1428: /* opt_full: %empty */ + case 1431: #line 88 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.boolean) = false; } -#line 30275 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1429: /* vacuum_option_list: vacuum_option_elem */ + case 1432: #line 93 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = (yyvsp[0].ival); } -#line 30281 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(1) - (1)].ival); ;} break; - case 1430: /* vacuum_option_list: vacuum_option_list ',' vacuum_option_elem */ + case 1433: #line 94 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.ival) = (yyvsp[-2].ival) | (yyvsp[0].ival); } -#line 30287 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival); ;} break; - case 1431: /* opt_freeze: FREEZE */ + case 1434: #line 98 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.boolean) = true; } -#line 30293 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1432: /* opt_freeze: %empty */ + case 1435: #line 99 "third_party/libpg_query/grammar/statements/vacuum.y" - { (yyval.boolean) = false; } -#line 30299 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1433: /* DeleteStmt: opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause */ + case 1436: #line 9 "third_party/libpg_query/grammar/statements/delete.y" - { + { PGDeleteStmt *n = makeNode(PGDeleteStmt); - n->relation = (yyvsp[-3].range); - n->usingClause = (yyvsp[-2].list); - n->whereClause = (yyvsp[-1].node); - n->returningList = (yyvsp[0].list); - n->withClause = (yyvsp[-6].with); + n->relation = (yyvsp[(4) - (7)].range); + n->usingClause = (yyvsp[(5) - (7)].list); + n->whereClause = (yyvsp[(6) - (7)].node); + n->returningList = (yyvsp[(7) - (7)].list); + n->withClause = (yyvsp[(1) - (7)].with); (yyval.node) = (PGNode *)n; - } -#line 30313 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1434: /* DeleteStmt: TRUNCATE opt_table relation_expr_opt_alias */ + case 1437: #line 19 "third_party/libpg_query/grammar/statements/delete.y" - { + { PGDeleteStmt *n = makeNode(PGDeleteStmt); - n->relation = (yyvsp[0].range); + n->relation = (yyvsp[(3) - (3)].range); n->usingClause = NULL; n->whereClause = NULL; n->returningList = NULL; n->withClause = NULL; (yyval.node) = (PGNode *)n; - } -#line 30327 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1435: /* relation_expr_opt_alias: relation_expr */ + case 1438: #line 32 "third_party/libpg_query/grammar/statements/delete.y" - { - (yyval.range) = (yyvsp[0].range); - } -#line 30335 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyval.range) = (yyvsp[(1) - (1)].range); + ;} break; - case 1436: /* relation_expr_opt_alias: relation_expr ColId */ + case 1439: #line 36 "third_party/libpg_query/grammar/statements/delete.y" - { + { PGAlias *alias = makeNode(PGAlias); - alias->aliasname = (yyvsp[0].str); - (yyvsp[-1].range)->alias = alias; - (yyval.range) = (yyvsp[-1].range); - } -#line 30346 "third_party/libpg_query/grammar/grammar_out.cpp" + alias->aliasname = (yyvsp[(2) - (2)].str); + (yyvsp[(1) - (2)].range)->alias = alias; + (yyval.range) = (yyvsp[(1) - (2)].range); + ;} break; - case 1437: /* relation_expr_opt_alias: relation_expr AS ColId */ + case 1440: #line 43 "third_party/libpg_query/grammar/statements/delete.y" - { + { PGAlias *alias = makeNode(PGAlias); - alias->aliasname = (yyvsp[0].str); - (yyvsp[-2].range)->alias = alias; - (yyval.range) = (yyvsp[-2].range); - } -#line 30357 "third_party/libpg_query/grammar/grammar_out.cpp" + alias->aliasname = (yyvsp[(3) - (3)].str); + (yyvsp[(1) - (3)].range)->alias = alias; + (yyval.range) = (yyvsp[(1) - (3)].range); + ;} break; - case 1438: /* where_or_current_clause: WHERE a_expr */ + case 1441: #line 53 "third_party/libpg_query/grammar/statements/delete.y" - { (yyval.node) = (yyvsp[0].node); } -#line 30363 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = (yyvsp[(2) - (2)].node); ;} break; - case 1439: /* where_or_current_clause: %empty */ + case 1442: #line 54 "third_party/libpg_query/grammar/statements/delete.y" - { (yyval.node) = NULL; } -#line 30369 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.node) = NULL; ;} break; - case 1440: /* using_clause: USING from_list_opt_comma */ + case 1443: #line 60 "third_party/libpg_query/grammar/statements/delete.y" - { (yyval.list) = (yyvsp[0].list); } -#line 30375 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = (yyvsp[(2) - (2)].list); ;} break; - case 1441: /* using_clause: %empty */ + case 1444: #line 61 "third_party/libpg_query/grammar/statements/delete.y" - { (yyval.list) = NIL; } -#line 30381 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.list) = NIL; ;} break; - case 1442: /* AnalyzeStmt: analyze_keyword opt_verbose */ + case 1445: #line 10 "third_party/libpg_query/grammar/statements/analyze.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); n->options = PG_VACOPT_ANALYZE; - if ((yyvsp[0].boolean)) + if ((yyvsp[(2) - (2)].boolean)) n->options |= PG_VACOPT_VERBOSE; n->relation = NULL; n->va_cols = NIL; (yyval.node) = (PGNode *)n; - } -#line 30395 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1443: /* AnalyzeStmt: analyze_keyword opt_verbose qualified_name opt_name_list */ + case 1446: #line 20 "third_party/libpg_query/grammar/statements/analyze.y" - { + { PGVacuumStmt *n = makeNode(PGVacuumStmt); n->options = PG_VACOPT_ANALYZE; - if ((yyvsp[-2].boolean)) + if ((yyvsp[(2) - (4)].boolean)) n->options |= PG_VACOPT_VERBOSE; - n->relation = (yyvsp[-1].range); - n->va_cols = (yyvsp[0].list); + n->relation = (yyvsp[(3) - (4)].range); + n->va_cols = (yyvsp[(4) - (4)].list); (yyval.node) = (PGNode *)n; - } -#line 30409 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1444: /* AttachStmt: ATTACH opt_database Sconst opt_database_alias copy_options */ + case 1447: #line 8 "third_party/libpg_query/grammar/statements/attach.y" - { + { PGAttachStmt *n = makeNode(PGAttachStmt); - n->path = (yyvsp[-2].str); - n->name = (yyvsp[-1].str); - n->options = (yyvsp[0].list); + n->path = (yyvsp[(3) - (5)].str); + n->name = (yyvsp[(4) - (5)].str); + n->options = (yyvsp[(5) - (5)].list); n->onconflict = PG_ERROR_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 30422 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1445: /* AttachStmt: ATTACH IF_P NOT EXISTS opt_database Sconst opt_database_alias copy_options */ + case 1448: #line 17 "third_party/libpg_query/grammar/statements/attach.y" - { + { PGAttachStmt *n = makeNode(PGAttachStmt); - n->path = (yyvsp[-2].str); - n->name = (yyvsp[-1].str); - n->options = (yyvsp[0].list); + n->path = (yyvsp[(6) - (8)].str); + n->name = (yyvsp[(7) - (8)].str); + n->options = (yyvsp[(8) - (8)].list); n->onconflict = PG_IGNORE_ON_CONFLICT; (yyval.node) = (PGNode *)n; - } -#line 30435 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1446: /* DetachStmt: DETACH ColLabel */ + case 1449: #line 29 "third_party/libpg_query/grammar/statements/attach.y" - { + { PGDetachStmt *n = makeNode(PGDetachStmt); n->missing_ok = false; - n->db_name = (yyvsp[0].str); + n->db_name = (yyvsp[(2) - (2)].str); (yyval.node) = (PGNode *)n; - } -#line 30446 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1447: /* DetachStmt: DETACH DATABASE ColLabel */ + case 1450: #line 36 "third_party/libpg_query/grammar/statements/attach.y" - { + { PGDetachStmt *n = makeNode(PGDetachStmt); n->missing_ok = false; - n->db_name = (yyvsp[0].str); + n->db_name = (yyvsp[(3) - (3)].str); (yyval.node) = (PGNode *)n; - } -#line 30457 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1448: /* DetachStmt: DETACH DATABASE IF_P EXISTS ColLabel */ + case 1451: #line 43 "third_party/libpg_query/grammar/statements/attach.y" - { + { PGDetachStmt *n = makeNode(PGDetachStmt); n->missing_ok = true; - n->db_name = (yyvsp[0].str); + n->db_name = (yyvsp[(5) - (5)].str); (yyval.node) = (PGNode *)n; - } -#line 30468 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1449: /* opt_database: DATABASE */ + case 1452: #line 51 "third_party/libpg_query/grammar/statements/attach.y" - {} -#line 30474 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 1450: /* opt_database: %empty */ + case 1453: #line 52 "third_party/libpg_query/grammar/statements/attach.y" - {} -#line 30480 "third_party/libpg_query/grammar/grammar_out.cpp" + {;} break; - case 1451: /* opt_database_alias: AS ColId */ + case 1454: #line 56 "third_party/libpg_query/grammar/statements/attach.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30486 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(2) - (2)].str); ;} break; - case 1452: /* opt_database_alias: %empty */ + case 1455: #line 57 "third_party/libpg_query/grammar/statements/attach.y" - { (yyval.str) = NULL; } -#line 30492 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = NULL; ;} break; - case 1453: /* VariableResetStmt: RESET reset_rest */ + case 1456: #line 3 "third_party/libpg_query/grammar/statements/variable_reset.y" - { - (yyvsp[0].vsetstmt)->scope = VAR_SET_SCOPE_DEFAULT; - (yyval.node) = (PGNode *) (yyvsp[0].vsetstmt); - } -#line 30501 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(2) - (2)].vsetstmt)->scope = VAR_SET_SCOPE_DEFAULT; + (yyval.node) = (PGNode *) (yyvsp[(2) - (2)].vsetstmt); + ;} break; - case 1454: /* VariableResetStmt: RESET LOCAL reset_rest */ + case 1457: #line 8 "third_party/libpg_query/grammar/statements/variable_reset.y" - { - (yyvsp[0].vsetstmt)->scope = VAR_SET_SCOPE_LOCAL; - (yyval.node) = (PGNode *) (yyvsp[0].vsetstmt); - } -#line 30510 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(3) - (3)].vsetstmt)->scope = VAR_SET_SCOPE_LOCAL; + (yyval.node) = (PGNode *) (yyvsp[(3) - (3)].vsetstmt); + ;} break; - case 1455: /* VariableResetStmt: RESET SESSION reset_rest */ + case 1458: #line 13 "third_party/libpg_query/grammar/statements/variable_reset.y" - { - (yyvsp[0].vsetstmt)->scope = VAR_SET_SCOPE_SESSION; - (yyval.node) = (PGNode *) (yyvsp[0].vsetstmt); - } -#line 30519 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(3) - (3)].vsetstmt)->scope = VAR_SET_SCOPE_SESSION; + (yyval.node) = (PGNode *) (yyvsp[(3) - (3)].vsetstmt); + ;} break; - case 1456: /* VariableResetStmt: RESET GLOBAL reset_rest */ + case 1459: #line 18 "third_party/libpg_query/grammar/statements/variable_reset.y" - { - (yyvsp[0].vsetstmt)->scope = VAR_SET_SCOPE_GLOBAL; - (yyval.node) = (PGNode *) (yyvsp[0].vsetstmt); - } -#line 30528 "third_party/libpg_query/grammar/grammar_out.cpp" + { + (yyvsp[(3) - (3)].vsetstmt)->scope = VAR_SET_SCOPE_GLOBAL; + (yyval.node) = (PGNode *) (yyvsp[(3) - (3)].vsetstmt); + ;} break; - case 1457: /* generic_reset: var_name */ + case 1460: #line 27 "third_party/libpg_query/grammar/statements/variable_reset.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_RESET; - n->name = (yyvsp[0].str); + n->name = (yyvsp[(1) - (1)].str); (yyval.vsetstmt) = n; - } -#line 30539 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1458: /* generic_reset: ALL */ + case 1461: #line 34 "third_party/libpg_query/grammar/statements/variable_reset.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_RESET_ALL; (yyval.vsetstmt) = n; - } -#line 30549 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1459: /* reset_rest: generic_reset */ + case 1462: #line 43 "third_party/libpg_query/grammar/statements/variable_reset.y" - { (yyval.vsetstmt) = (yyvsp[0].vsetstmt); } -#line 30555 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.vsetstmt) = (yyvsp[(1) - (1)].vsetstmt); ;} break; - case 1460: /* reset_rest: TIME ZONE */ + case 1463: #line 45 "third_party/libpg_query/grammar/statements/variable_reset.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_RESET; n->name = (char*) "timezone"; (yyval.vsetstmt) = n; - } -#line 30566 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1461: /* reset_rest: TRANSACTION ISOLATION LEVEL */ + case 1464: #line 52 "third_party/libpg_query/grammar/statements/variable_reset.y" - { + { PGVariableSetStmt *n = makeNode(PGVariableSetStmt); n->kind = VAR_RESET; n->name = (char*) "transaction_isolation"; (yyval.vsetstmt) = n; - } -#line 30577 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1462: /* VariableShowStmt: show_or_describe SelectStmt */ + case 1465: #line 3 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowSelectStmt *n = makeNode(PGVariableShowSelectStmt); - n->stmt = (yyvsp[0].node); + n->stmt = (yyvsp[(2) - (2)].node); n->name = (char*) "select"; n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30589 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1463: /* VariableShowStmt: SUMMARIZE SelectStmt */ + case 1466: #line 10 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowSelectStmt *n = makeNode(PGVariableShowSelectStmt); - n->stmt = (yyvsp[0].node); + n->stmt = (yyvsp[(2) - (2)].node); n->name = (char*) "select"; n->is_summary = 1; (yyval.node) = (PGNode *) n; - } -#line 30601 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1464: /* VariableShowStmt: SUMMARIZE table_id */ + case 1467: #line 18 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); n->is_summary = 1; (yyval.node) = (PGNode *) n; - } -#line 30612 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1465: /* VariableShowStmt: show_or_describe table_id */ + case 1468: #line 25 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); - n->name = (yyvsp[0].str); + n->name = (yyvsp[(2) - (2)].str); n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30623 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1466: /* VariableShowStmt: show_or_describe TIME ZONE */ + case 1469: #line 32 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); n->name = (char*) "timezone"; n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30634 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1467: /* VariableShowStmt: show_or_describe TRANSACTION ISOLATION LEVEL */ + case 1470: #line 39 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); n->name = (char*) "transaction_isolation"; n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30645 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1468: /* VariableShowStmt: show_or_describe ALL opt_tables */ + case 1471: #line 46 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); n->name = (char*) "__show_tables_expanded"; n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30656 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1469: /* VariableShowStmt: show_or_describe */ + case 1472: #line 53 "third_party/libpg_query/grammar/statements/variable_show.y" - { + { PGVariableShowStmt *n = makeNode(PGVariableShowStmt); n->name = (char*) "__show_tables_expanded"; n->is_summary = 0; (yyval.node) = (PGNode *) n; - } -#line 30667 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1476: /* var_name: ColId */ + case 1479: #line 67 "third_party/libpg_query/grammar/statements/variable_show.y" - { (yyval.str) = (yyvsp[0].str); } -#line 30673 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = (yyvsp[(1) - (1)].str); ;} break; - case 1477: /* var_name: var_name '.' ColId */ + case 1480: #line 69 "third_party/libpg_query/grammar/statements/variable_show.y" - { (yyval.str) = psprintf("%s.%s", (yyvsp[-2].str), (yyvsp[0].str)); } -#line 30679 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = psprintf("%s.%s", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)); ;} break; - case 1478: /* table_id: ColId */ + case 1481: #line 72 "third_party/libpg_query/grammar/statements/variable_show.y" - { (yyval.str) = psprintf("\"%s\"", (yyvsp[0].str)); } -#line 30685 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = psprintf("\"%s\"", (yyvsp[(1) - (1)].str)); ;} break; - case 1479: /* table_id: table_id '.' ColId */ + case 1482: #line 74 "third_party/libpg_query/grammar/statements/variable_show.y" - { (yyval.str) = psprintf("%s.\"%s\"", (yyvsp[-2].str), (yyvsp[0].str)); } -#line 30691 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.str) = psprintf("%s.\"%s\"", (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str)); ;} break; - case 1480: /* CallStmt: CALL_P func_application */ + case 1483: #line 7 "third_party/libpg_query/grammar/statements/call.y" - { + { PGCallStmt *n = makeNode(PGCallStmt); - n->func = (yyvsp[0].node); + n->func = (yyvsp[(2) - (2)].node); (yyval.node) = (PGNode *) n; - } -#line 30701 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1481: /* ViewStmt: CREATE_P OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ + case 1484: #line 10 "third_party/libpg_query/grammar/statements/view.y" - { + { PGViewStmt *n = makeNode(PGViewStmt); - n->view = (yyvsp[-5].range); - n->view->relpersistence = (yyvsp[-7].ival); - n->aliases = (yyvsp[-4].list); - n->query = (yyvsp[-1].node); + n->view = (yyvsp[(4) - (9)].range); + n->view->relpersistence = (yyvsp[(2) - (9)].ival); + n->aliases = (yyvsp[(5) - (9)].list); + n->query = (yyvsp[(8) - (9)].node); n->onconflict = PG_ERROR_ON_CONFLICT; - n->options = (yyvsp[-3].list); - n->withCheckOption = (yyvsp[0].viewcheckoption); + n->options = (yyvsp[(6) - (9)].list); + n->withCheckOption = (yyvsp[(9) - (9)].viewcheckoption); (yyval.node) = (PGNode *) n; - } -#line 30717 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1482: /* ViewStmt: CREATE_P OptTemp VIEW IF_P NOT EXISTS qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ + case 1485: #line 23 "third_party/libpg_query/grammar/statements/view.y" - { + { PGViewStmt *n = makeNode(PGViewStmt); - n->view = (yyvsp[-5].range); - n->view->relpersistence = (yyvsp[-10].ival); - n->aliases = (yyvsp[-4].list); - n->query = (yyvsp[-1].node); + n->view = (yyvsp[(7) - (12)].range); + n->view->relpersistence = (yyvsp[(2) - (12)].ival); + n->aliases = (yyvsp[(8) - (12)].list); + n->query = (yyvsp[(11) - (12)].node); n->onconflict = PG_IGNORE_ON_CONFLICT; - n->options = (yyvsp[-3].list); - n->withCheckOption = (yyvsp[0].viewcheckoption); + n->options = (yyvsp[(9) - (12)].list); + n->withCheckOption = (yyvsp[(12) - (12)].viewcheckoption); (yyval.node) = (PGNode *) n; - } -#line 30733 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1483: /* ViewStmt: CREATE_P OR REPLACE OptTemp VIEW qualified_name opt_column_list opt_reloptions AS SelectStmt opt_check_option */ + case 1486: #line 36 "third_party/libpg_query/grammar/statements/view.y" - { + { PGViewStmt *n = makeNode(PGViewStmt); - n->view = (yyvsp[-5].range); - n->view->relpersistence = (yyvsp[-7].ival); - n->aliases = (yyvsp[-4].list); - n->query = (yyvsp[-1].node); + n->view = (yyvsp[(6) - (11)].range); + n->view->relpersistence = (yyvsp[(4) - (11)].ival); + n->aliases = (yyvsp[(7) - (11)].list); + n->query = (yyvsp[(10) - (11)].node); n->onconflict = PG_REPLACE_ON_CONFLICT; - n->options = (yyvsp[-3].list); - n->withCheckOption = (yyvsp[0].viewcheckoption); + n->options = (yyvsp[(8) - (11)].list); + n->withCheckOption = (yyvsp[(11) - (11)].viewcheckoption); (yyval.node) = (PGNode *) n; - } -#line 30749 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1484: /* ViewStmt: CREATE_P OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ + case 1487: #line 49 "third_party/libpg_query/grammar/statements/view.y" - { + { PGViewStmt *n = makeNode(PGViewStmt); - n->view = (yyvsp[-7].range); - n->view->relpersistence = (yyvsp[-10].ival); - n->aliases = (yyvsp[-5].list); - n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[-1].node)); + n->view = (yyvsp[(5) - (12)].range); + n->view->relpersistence = (yyvsp[(2) - (12)].ival); + n->aliases = (yyvsp[(7) - (12)].list); + n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[(11) - (12)].node)); n->onconflict = PG_ERROR_ON_CONFLICT; - n->options = (yyvsp[-3].list); - n->withCheckOption = (yyvsp[0].viewcheckoption); + n->options = (yyvsp[(9) - (12)].list); + n->withCheckOption = (yyvsp[(12) - (12)].viewcheckoption); if (n->withCheckOption != PG_NO_CHECK_OPTION) ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("WITH CHECK OPTION not supported on recursive views"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(12) - (12)])))); (yyval.node) = (PGNode *) n; - } -#line 30770 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1485: /* ViewStmt: CREATE_P OR REPLACE OptTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS SelectStmt opt_check_option */ + case 1488: #line 67 "third_party/libpg_query/grammar/statements/view.y" - { + { PGViewStmt *n = makeNode(PGViewStmt); - n->view = (yyvsp[-7].range); - n->view->relpersistence = (yyvsp[-10].ival); - n->aliases = (yyvsp[-5].list); - n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[-1].node)); + n->view = (yyvsp[(7) - (14)].range); + n->view->relpersistence = (yyvsp[(4) - (14)].ival); + n->aliases = (yyvsp[(9) - (14)].list); + n->query = makeRecursiveViewSelect(n->view->relname, n->aliases, (yyvsp[(13) - (14)].node)); n->onconflict = PG_REPLACE_ON_CONFLICT; - n->options = (yyvsp[-3].list); - n->withCheckOption = (yyvsp[0].viewcheckoption); + n->options = (yyvsp[(11) - (14)].list); + n->withCheckOption = (yyvsp[(14) - (14)].viewcheckoption); if (n->withCheckOption != PG_NO_CHECK_OPTION) ereport(ERROR, (errcode(PG_ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("WITH CHECK OPTION not supported on recursive views"), - parser_errposition((yylsp[0])))); + parser_errposition((yylsp[(14) - (14)])))); (yyval.node) = (PGNode *) n; - } -#line 30791 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1486: /* opt_check_option: WITH CHECK_P OPTION */ + case 1489: #line 87 "third_party/libpg_query/grammar/statements/view.y" - { (yyval.viewcheckoption) = CASCADED_CHECK_OPTION; } -#line 30797 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.viewcheckoption) = CASCADED_CHECK_OPTION; ;} break; - case 1487: /* opt_check_option: WITH CASCADED CHECK_P OPTION */ + case 1490: #line 88 "third_party/libpg_query/grammar/statements/view.y" - { (yyval.viewcheckoption) = CASCADED_CHECK_OPTION; } -#line 30803 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.viewcheckoption) = CASCADED_CHECK_OPTION; ;} break; - case 1488: /* opt_check_option: WITH LOCAL CHECK_P OPTION */ + case 1491: #line 89 "third_party/libpg_query/grammar/statements/view.y" - { (yyval.viewcheckoption) = PG_LOCAL_CHECK_OPTION; } -#line 30809 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.viewcheckoption) = PG_LOCAL_CHECK_OPTION; ;} break; - case 1489: /* opt_check_option: %empty */ + case 1492: #line 90 "third_party/libpg_query/grammar/statements/view.y" - { (yyval.viewcheckoption) = PG_NO_CHECK_OPTION; } -#line 30815 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.viewcheckoption) = PG_NO_CHECK_OPTION; ;} break; - case 1490: /* CreateAsStmt: CREATE_P OptTemp TABLE create_as_target AS SelectStmt opt_with_data */ + case 1493: #line 12 "third_party/libpg_query/grammar/statements/create_as.y" - { + { PGCreateTableAsStmt *ctas = makeNode(PGCreateTableAsStmt); - ctas->query = (yyvsp[-1].node); - ctas->into = (yyvsp[-3].into); + ctas->query = (yyvsp[(6) - (7)].node); + ctas->into = (yyvsp[(4) - (7)].into); ctas->relkind = PG_OBJECT_TABLE; ctas->is_select_into = false; ctas->onconflict = PG_ERROR_ON_CONFLICT; /* cram additional flags into the PGIntoClause */ - (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-5].ival); - (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyvsp[(4) - (7)].into)->rel->relpersistence = (yyvsp[(2) - (7)].ival); + (yyvsp[(4) - (7)].into)->skipData = !((yyvsp[(7) - (7)].boolean)); (yyval.node) = (PGNode *) ctas; - } -#line 30832 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1491: /* CreateAsStmt: CREATE_P OptTemp TABLE IF_P NOT EXISTS create_as_target AS SelectStmt opt_with_data */ + case 1494: #line 25 "third_party/libpg_query/grammar/statements/create_as.y" - { + { PGCreateTableAsStmt *ctas = makeNode(PGCreateTableAsStmt); - ctas->query = (yyvsp[-1].node); - ctas->into = (yyvsp[-3].into); + ctas->query = (yyvsp[(9) - (10)].node); + ctas->into = (yyvsp[(7) - (10)].into); ctas->relkind = PG_OBJECT_TABLE; ctas->is_select_into = false; ctas->onconflict = PG_IGNORE_ON_CONFLICT; /* cram additional flags into the PGIntoClause */ - (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-8].ival); - (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyvsp[(7) - (10)].into)->rel->relpersistence = (yyvsp[(2) - (10)].ival); + (yyvsp[(7) - (10)].into)->skipData = !((yyvsp[(10) - (10)].boolean)); (yyval.node) = (PGNode *) ctas; - } -#line 30849 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1492: /* CreateAsStmt: CREATE_P OR REPLACE OptTemp TABLE create_as_target AS SelectStmt opt_with_data */ + case 1495: #line 38 "third_party/libpg_query/grammar/statements/create_as.y" - { + { PGCreateTableAsStmt *ctas = makeNode(PGCreateTableAsStmt); - ctas->query = (yyvsp[-1].node); - ctas->into = (yyvsp[-3].into); + ctas->query = (yyvsp[(8) - (9)].node); + ctas->into = (yyvsp[(6) - (9)].into); ctas->relkind = PG_OBJECT_TABLE; ctas->is_select_into = false; ctas->onconflict = PG_REPLACE_ON_CONFLICT; /* cram additional flags into the PGIntoClause */ - (yyvsp[-3].into)->rel->relpersistence = (yyvsp[-5].ival); - (yyvsp[-3].into)->skipData = !((yyvsp[0].boolean)); + (yyvsp[(6) - (9)].into)->rel->relpersistence = (yyvsp[(4) - (9)].ival); + (yyvsp[(6) - (9)].into)->skipData = !((yyvsp[(9) - (9)].boolean)); (yyval.node) = (PGNode *) ctas; - } -#line 30866 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; - case 1493: /* opt_with_data: WITH DATA_P */ + case 1496: #line 54 "third_party/libpg_query/grammar/statements/create_as.y" - { (yyval.boolean) = true; } -#line 30872 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1494: /* opt_with_data: WITH NO DATA_P */ + case 1497: #line 55 "third_party/libpg_query/grammar/statements/create_as.y" - { (yyval.boolean) = false; } -#line 30878 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = false; ;} break; - case 1495: /* opt_with_data: %empty */ + case 1498: #line 56 "third_party/libpg_query/grammar/statements/create_as.y" - { (yyval.boolean) = true; } -#line 30884 "third_party/libpg_query/grammar/grammar_out.cpp" + { (yyval.boolean) = true; ;} break; - case 1496: /* create_as_target: qualified_name opt_column_list OptWith OnCommitOption */ + case 1499: #line 62 "third_party/libpg_query/grammar/statements/create_as.y" - { + { (yyval.into) = makeNode(PGIntoClause); - (yyval.into)->rel = (yyvsp[-3].range); - (yyval.into)->colNames = (yyvsp[-2].list); - (yyval.into)->options = (yyvsp[-1].list); - (yyval.into)->onCommit = (yyvsp[0].oncommit); + (yyval.into)->rel = (yyvsp[(1) - (4)].range); + (yyval.into)->colNames = (yyvsp[(2) - (4)].list); + (yyval.into)->options = (yyvsp[(3) - (4)].list); + (yyval.into)->onCommit = (yyvsp[(4) - (4)].oncommit); (yyval.into)->viewQuery = NULL; (yyval.into)->skipData = false; /* might get changed later */ - } -#line 30898 "third_party/libpg_query/grammar/grammar_out.cpp" + ;} break; -#line 30902 "third_party/libpg_query/grammar/grammar_out.cpp" - +/* Line 1267 of yacc.c. */ +#line 30697 "third_party/libpg_query/grammar/grammar_out.cpp" default: break; } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; + YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; *++yylsp = yyloc; - /* Now 'shift' the result of the reduction. Determine what state + /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - { - const int yylhs = yyr1[yyn] - YYNTOKENS; - const int yyi = yypgoto[yylhs] + *yyssp; - yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp - ? yytable[yyi] - : yydefgoto[yylhs]); - } + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; +#if ! YYERROR_VERBOSE yyerror (&yylloc, yyscanner, YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (&yylloc, yyscanner, yymsg); + } + else + { + yyerror (&yylloc, yyscanner, YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif } - yyerror_range[1] = yylloc; + yyerror_range[0] = yylloc; + if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + /* If just tried and failed to reuse look-ahead token after an + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval, &yylloc, yyscanner); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval, &yylloc, yyscanner); + yychar = YYEMPTY; + } } - /* Else will try to reuse lookahead token after shifting the error + /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; @@ -30978,13 +30795,15 @@ YYLTYPE yylloc = yyloc_default; | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and the - label yyerrorlab therefore never appears in user code. */ - if (0) - YYERROR; - ++yynerrs; - /* Do not reclaim the symbols of the rule whose action triggered + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + yyerror_range[0] = yylsp[1-yylen]; + /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -30997,45 +30816,47 @@ YYLTYPE yylloc = yyloc_default; | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ - /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYSYMBOL_YYerror; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; - yyerror_range[1] = *yylsp; + yyerror_range[0] = *yylsp; yydestruct ("Error: popping", - YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, yyscanner); + yystos[yystate], yyvsp, yylsp, yyscanner); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + if (yyn == YYFINAL) + YYACCEPT; + *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - yyerror_range[2] = yylloc; - ++yylsp; - YYLLOC_DEFAULT (*yylsp, yyerror_range, 2); + yyerror_range[1] = yylloc; + /* Using YYLLOC is tempting, but would change the location of + the look-ahead. YYLOC is available though. */ + YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); + *++yylsp = yyloc; /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -31046,56 +30867,52 @@ YYLTYPE yylloc = yyloc_default; `-------------------------------------*/ yyacceptlab: yyresult = 0; - goto yyreturnlab; - + goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; - goto yyreturnlab; - + goto yyreturn; -/*-----------------------------------------------------------. -| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | -`-----------------------------------------------------------*/ +#ifndef yyoverflow +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ yyexhaustedlab: yyerror (&yylloc, yyscanner, YY_("memory exhausted")); yyresult = 2; - goto yyreturnlab; - + /* Fall through. */ +#endif -/*----------------------------------------------------------. -| yyreturnlab -- parsing is finished, clean up and return. | -`----------------------------------------------------------*/ -yyreturnlab: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, &yylloc, yyscanner); - } - /* Do not reclaim the symbols of the rule whose action triggered +yyreturn: + if (yychar != YYEOF && yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, &yylloc, yyscanner); + /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, yyscanner); + yystos[*yyssp], yyvsp, yylsp, yyscanner); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif - - return yyresult; +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); } + #line 83 "third_party/libpg_query/grammar/statements/create_as.y" @@ -31853,3 +31670,4 @@ parser_init(base_yy_extra_type *yyext) #undef yylloc } // namespace duckdb_libpgquery + diff --git a/third_party/mbedtls/include/mbedtls/mbedtls_config.h b/third_party/mbedtls/include/mbedtls/mbedtls_config.h index 25337be28999..fdd591f5b8d9 100644 --- a/third_party/mbedtls/include/mbedtls/mbedtls_config.h +++ b/third_party/mbedtls/include/mbedtls/mbedtls_config.h @@ -17,6 +17,3 @@ #define MBEDTLS_ARIA_C #define MBEDTLS_GCM_C #define MBEDTLS_ENTROPY_C -#if defined(_WIN32) -#define MBEDTLS_NO_PLATFORM_ENTROPY -#endif diff --git a/third_party/mbedtls/library/entropy_poll.cpp b/third_party/mbedtls/library/entropy_poll.cpp index c894fb6b3ed4..067ec2f3c6f3 100644 --- a/third_party/mbedtls/library/entropy_poll.cpp +++ b/third_party/mbedtls/library/entropy_poll.cpp @@ -49,12 +49,12 @@ #if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) -#if !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x0400 -#endif #include -#include +#include +#include +#if defined(__MINGW32__) +// MINGW int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len, size_t *olen ) { @@ -79,6 +79,34 @@ int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len return( 0 ); } +#else +int mbedtls_platform_entropy_poll(void *data, unsigned char *output, size_t len, + size_t *olen) +{ + ((void) data); + *olen = 0; + + /* + * BCryptGenRandom takes ULONG for size, which is smaller than size_t on + * 64-bit Windows platforms. Extract entropy in chunks of len (dependent + * on ULONG_MAX) size. + */ + while (len != 0) { + unsigned long ulong_bytes = + (len > ULONG_MAX) ? ULONG_MAX : (unsigned long) len; + + if (!BCRYPT_SUCCESS(BCryptGenRandom(NULL, output, ulong_bytes, + BCRYPT_USE_SYSTEM_PREFERRED_RNG))) { + return MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + + *olen += ulong_bytes; + len -= ulong_bytes; + } + + return 0; +} +#endif #else /* _WIN32 && !EFIX64 && !EFI32 */ /* diff --git a/third_party/miniz/miniz_wrapper.hpp b/third_party/miniz/miniz_wrapper.hpp index e351b6495fe0..9420c520141c 100644 --- a/third_party/miniz/miniz_wrapper.hpp +++ b/third_party/miniz/miniz_wrapper.hpp @@ -66,9 +66,9 @@ struct MiniZStream { } stream.next_in = (const unsigned char *)compressed_data + GZIP_HEADER_MINSIZE; - stream.avail_in = compressed_size - GZIP_HEADER_MINSIZE; + stream.avail_in = static_cast(compressed_size - GZIP_HEADER_MINSIZE); stream.next_out = (unsigned char *)out_data; - stream.avail_out = out_size; + stream.avail_out = static_cast(out_size); mz_ret = mz_inflate(&stream, duckdb_miniz::MZ_FINISH); if (mz_ret != duckdb_miniz::MZ_OK && mz_ret != duckdb_miniz::MZ_STREAM_END) { @@ -116,9 +116,9 @@ struct MiniZStream { auto gzip_body = gzip_header + GZIP_HEADER_MINSIZE; stream.next_in = (const unsigned char*) uncompressed_data; - stream.avail_in = uncompressed_size; + stream.avail_in = static_cast(uncompressed_size); stream.next_out = gzip_body; - stream.avail_out = *out_size - GZIP_HEADER_MINSIZE; + stream.avail_out = static_cast(*out_size - GZIP_HEADER_MINSIZE); mz_ret = mz_deflate(&stream, duckdb_miniz::MZ_FINISH); if (mz_ret != duckdb_miniz::MZ_OK && mz_ret != duckdb_miniz::MZ_STREAM_END) { diff --git a/third_party/tdigest/t_digest.hpp b/third_party/tdigest/t_digest.hpp index 56362103341d..5c78567d510e 100644 --- a/third_party/tdigest/t_digest.hpp +++ b/third_party/tdigest/t_digest.hpp @@ -440,12 +440,12 @@ class TDigest { std::vector cumulative_; // return mean of i-th centroid - inline Value mean(int i) const noexcept { + inline Value mean(size_t i) const noexcept { return processed_[i].mean(); } // return weight of i-th centroid - inline Weight weight(int i) const noexcept { + inline Weight weight(size_t i) const noexcept { return processed_[i].weight(); } @@ -568,7 +568,7 @@ class TDigest { updateCumulative(); } - inline int checkWeights() { + inline size_t checkWeights() { return checkWeights(processed_, processedWeight_); } diff --git a/tools/jdbc/src/jni/duckdb_java.cpp b/tools/jdbc/src/jni/duckdb_java.cpp index d94b4b30862f..e019526c65be 100644 --- a/tools/jdbc/src/jni/duckdb_java.cpp +++ b/tools/jdbc/src/jni/duckdb_java.cpp @@ -844,7 +844,15 @@ jobject ProcessVector(JNIEnv *env, Connection *conn_ref, Vector &vec, idx_t row_ case LogicalTypeId::DOUBLE: constlen_data = env->NewDirectByteBuffer(FlatVector::GetData(vec), row_count * sizeof(double)); break; + case LogicalTypeId::DATE: + constlen_data = env->NewDirectByteBuffer(FlatVector::GetData(vec), row_count * sizeof(date_t)); + break; + case LogicalTypeId::TIME: + constlen_data = env->NewDirectByteBuffer(FlatVector::GetData(vec), row_count * sizeof(dtime_t)); + break; case LogicalTypeId::TIME_TZ: + constlen_data = env->NewDirectByteBuffer(FlatVector::GetData(vec), row_count * sizeof(dtime_tz_t)); + break; case LogicalTypeId::TIMESTAMP_SEC: case LogicalTypeId::TIMESTAMP_MS: case LogicalTypeId::TIMESTAMP: @@ -900,6 +908,27 @@ jobject ProcessVector(JNIEnv *env, Connection *conn_ref, Vector &vec, idx_t row_ case LogicalTypeId::UUID: constlen_data = env->NewDirectByteBuffer(FlatVector::GetData(vec), row_count * sizeof(hugeint_t)); break; + case LogicalTypeId::ARRAY: { + varlen_data = env->NewObjectArray(row_count, J_DuckArray, nullptr); + auto &array_vector = ArrayVector::GetEntry(vec); + auto total_size = row_count * ArrayType::GetSize(vec.GetType()); + auto j_vec = ProcessVector(env, conn_ref, array_vector, total_size); + + auto limit = ArrayType::GetSize(vec.GetType()); + + for (idx_t row_idx = 0; row_idx < row_count; row_idx++) { + if (FlatVector::IsNull(vec, row_idx)) { + continue; + } + + auto offset = row_idx * limit; + + auto j_obj = env->NewObject(J_DuckArray, J_DuckArray_init, j_vec, offset, limit); + + env->SetObjectArrayElement(varlen_data, row_idx, j_obj); + } + break; + } case LogicalTypeId::MAP: case LogicalTypeId::LIST: { varlen_data = env->NewObjectArray(row_count, J_DuckArray, nullptr); diff --git a/tools/jdbc/src/main/java/org/duckdb/DuckDBColumnType.java b/tools/jdbc/src/main/java/org/duckdb/DuckDBColumnType.java index 34a9c9c62dc6..ada7c0d8f398 100644 --- a/tools/jdbc/src/main/java/org/duckdb/DuckDBColumnType.java +++ b/tools/jdbc/src/main/java/org/duckdb/DuckDBColumnType.java @@ -33,6 +33,7 @@ public enum DuckDBColumnType { UUID, JSON, MAP, + ARRAY, UNKNOWN, UNION; } diff --git a/tools/jdbc/src/main/java/org/duckdb/DuckDBDatabaseMetaData.java b/tools/jdbc/src/main/java/org/duckdb/DuckDBDatabaseMetaData.java index 55c0f054795e..89bff73425f5 100644 --- a/tools/jdbc/src/main/java/org/duckdb/DuckDBDatabaseMetaData.java +++ b/tools/jdbc/src/main/java/org/duckdb/DuckDBDatabaseMetaData.java @@ -11,6 +11,10 @@ import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.Statement; +import java.sql.Types; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; import static java.lang.System.lineSeparator; @@ -719,7 +723,7 @@ public ResultSet getTables(String catalog, String schemaPattern, String tableNam str.append(", table_schema AS 'TABLE_SCHEM'").append(lineSeparator()); str.append(", table_name AS 'TABLE_NAME'").append(lineSeparator()); str.append(", table_type AS 'TABLE_TYPE'").append(lineSeparator()); - str.append(", NULL::VARCHAR AS 'REMARKS'").append(lineSeparator()); + str.append(", TABLE_COMMENT AS 'REMARKS'").append(lineSeparator()); str.append(", NULL::VARCHAR AS 'TYPE_CAT'").append(lineSeparator()); str.append(", NULL::VARCHAR AS 'TYPE_SCHEM'").append(lineSeparator()); str.append(", NULL::VARCHAR AS 'TYPE_NAME'").append(lineSeparator()); @@ -816,28 +820,36 @@ public ResultSet getColumns(String catalogPattern, String schemaPattern, String columnNamePattern = "%"; } - // need to figure out the java types for the sql types :/ - StringBuilder values_str = new StringBuilder(256); - values_str.append("VALUES(NULL::STRING, NULL::INTEGER)"); - try (Statement gunky_statement = conn.createStatement(); - // TODO this could get slow with many many columns and we really only need the - // types :/ - ResultSet rs = gunky_statement.executeQuery( - "SELECT DISTINCT data_type FROM information_schema.columns ORDER BY data_type")) { - while (rs.next()) { - values_str.append(", ('") - .append(rs.getString(1)) - .append("', ") - .append( - DuckDBResultSetMetaData.type_to_int(DuckDBResultSetMetaData.TypeNameToType(rs.getString(1)))) - .append(")"); - } - } - - PreparedStatement ps = conn.prepareStatement( - "SELECT table_catalog AS 'TABLE_CAT', table_schema AS 'TABLE_SCHEM', table_name AS 'TABLE_NAME', column_name as 'COLUMN_NAME', type_id AS 'DATA_TYPE', c.data_type AS 'TYPE_NAME', NULL AS 'COLUMN_SIZE', NULL AS 'BUFFER_LENGTH', numeric_precision AS 'DECIMAL_DIGITS', 10 AS 'NUM_PREC_RADIX', CASE WHEN is_nullable = 'YES' THEN 1 else 0 END AS 'NULLABLE', NULL as 'REMARKS', column_default AS 'COLUMN_DEF', NULL AS 'SQL_DATA_TYPE', NULL AS 'SQL_DATETIME_SUB', character_octet_length AS 'CHAR_OCTET_LENGTH', ordinal_position AS 'ORDINAL_POSITION', is_nullable AS 'IS_NULLABLE', NULL AS 'SCOPE_CATALOG', NULL AS 'SCOPE_SCHEMA', NULL AS 'SCOPE_TABLE', NULL AS 'SOURCE_DATA_TYPE', '' AS 'IS_AUTOINCREMENT', '' AS 'IS_GENERATEDCOLUMN' FROM information_schema.columns c JOIN (" + - values_str + - ") t(type_name, type_id) ON c.data_type = t.type_name WHERE table_catalog LIKE ? AND table_schema LIKE ? AND table_name LIKE ? AND column_name LIKE ? ORDER BY \"TABLE_CAT\",\"TABLE_SCHEM\", \"TABLE_NAME\", \"ORDINAL_POSITION\""); + PreparedStatement ps = + conn.prepareStatement("SELECT " + + "table_catalog AS 'TABLE_CAT', " + + "table_schema AS 'TABLE_SCHEM', " + + "table_name AS 'TABLE_NAME', " + + "column_name as 'COLUMN_NAME', " + makeDataMap("c.data_type", "DATA_TYPE") + ", " + + "c.data_type AS 'TYPE_NAME', " + + "NULL AS 'COLUMN_SIZE', NULL AS 'BUFFER_LENGTH', " + + "numeric_precision AS 'DECIMAL_DIGITS', " + + "10 AS 'NUM_PREC_RADIX', " + + "CASE WHEN is_nullable = 'YES' THEN 1 else 0 END AS 'NULLABLE', " + + "COLUMN_COMMENT as 'REMARKS', " + + "column_default AS 'COLUMN_DEF', " + + "NULL AS 'SQL_DATA_TYPE', " + + "NULL AS 'SQL_DATETIME_SUB', " + + "NULL AS 'CHAR_OCTET_LENGTH', " + + "ordinal_position AS 'ORDINAL_POSITION', " + + "is_nullable AS 'IS_NULLABLE', " + + "NULL AS 'SCOPE_CATALOG', " + + "NULL AS 'SCOPE_SCHEMA', " + + "NULL AS 'SCOPE_TABLE', " + + "NULL AS 'SOURCE_DATA_TYPE', " + + "'' AS 'IS_AUTOINCREMENT', " + + "'' AS 'IS_GENERATEDCOLUMN' " + + "FROM information_schema.columns c " + + "WHERE table_catalog LIKE ? AND " + + "table_schema LIKE ? AND " + + "table_name LIKE ? AND " + + "column_name LIKE ? " + + "ORDER BY \"TABLE_CAT\",\"TABLE_SCHEM\", \"TABLE_NAME\", \"ORDINAL_POSITION\""); ps.setString(1, catalogPattern); ps.setString(2, schemaPattern); ps.setString(3, tableNamePattern); @@ -1210,4 +1222,32 @@ public ResultSet getPseudoColumns(String catalog, String schemaPattern, String t public boolean generatedKeyAlwaysReturned() throws SQLException { throw new SQLFeatureNotSupportedException("generatedKeyAlwaysReturned"); } + + static String dataMap; + static { + dataMap = makeCase( + Arrays.stream(DuckDBColumnType.values()) + .collect(Collectors.toMap(ty -> ty.name().replace("_", " "), DuckDBResultSetMetaData::type_to_int))); + } + + private static String makeCase(Map values) { + return values.entrySet() + .stream() + .map(ty -> { + T value = ty.getValue(); + return String.format("WHEN '%s' THEN %s ", ty.getKey(), + value instanceof String ? String.format("'%s'", value) : value); + }) + .collect(Collectors.joining()); + } + + /** + * @param srcColumnName + * @param destColumnName + * @return + * @see DuckDBResultSetMetaData#type_to_int(DuckDBColumnType) + */ + private static String makeDataMap(String srcColumnName, String destColumnName) { + return String.format("CASE %s %s ELSE %d END as %s", srcColumnName, dataMap, Types.JAVA_OBJECT, destColumnName); + } } diff --git a/tools/jdbc/src/main/java/org/duckdb/DuckDBResultSetMetaData.java b/tools/jdbc/src/main/java/org/duckdb/DuckDBResultSetMetaData.java index 6e5199bcbd8c..d9105ab323f7 100644 --- a/tools/jdbc/src/main/java/org/duckdb/DuckDBResultSetMetaData.java +++ b/tools/jdbc/src/main/java/org/duckdb/DuckDBResultSetMetaData.java @@ -44,8 +44,9 @@ public DuckDBResultSetMetaData(int param_count, int column_count, String[] colum } public static DuckDBColumnType TypeNameToType(String type_name) { - if (type_name.endsWith("[]")) { - return DuckDBColumnType.LIST; + if (type_name.endsWith("]")) { + // VARCHAR[] or VARCHAR[2] + return type_name.endsWith("[]") ? DuckDBColumnType.LIST : DuckDBColumnType.ARRAY; } else if (type_name.startsWith("DECIMAL")) { return DuckDBColumnType.DECIMAL; } else if (type_name.equals("TIME WITH TIME ZONE")) { @@ -94,7 +95,7 @@ public String getColumnName(int column) throws SQLException { return column_names[column - 1]; } - public static int type_to_int(DuckDBColumnType type) throws SQLException { + public static int type_to_int(DuckDBColumnType type) { switch (type) { case BOOLEAN: return Types.BOOLEAN; @@ -107,6 +108,7 @@ public static int type_to_int(DuckDBColumnType type) throws SQLException { case BIGINT: return Types.BIGINT; case LIST: + case ARRAY: return Types.ARRAY; case FLOAT: return Types.FLOAT; @@ -127,6 +129,12 @@ public static int type_to_int(DuckDBColumnType type) throws SQLException { return Types.TIMESTAMP; case TIMESTAMP_WITH_TIME_ZONE: return Types.TIMESTAMP_WITH_TIMEZONE; + case TIME_WITH_TIME_ZONE: + return Types.TIME_WITH_TIMEZONE; + case STRUCT: + return Types.STRUCT; + case BIT: + return Types.BIT; case BLOB: return Types.BLOB; default: @@ -186,6 +194,7 @@ public String getColumnClassName(int column) throws SQLException { case UUID: return UUID.class.getName(); case LIST: + case ARRAY: return DuckDBArray.class.getName(); case MAP: return HashMap.class.getName(); diff --git a/tools/jdbc/src/main/java/org/duckdb/DuckDBVector.java b/tools/jdbc/src/main/java/org/duckdb/DuckDBVector.java index 50f994f5348f..5657b3baa120 100644 --- a/tools/jdbc/src/main/java/org/duckdb/DuckDBVector.java +++ b/tools/jdbc/src/main/java/org/duckdb/DuckDBVector.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.Calendar; import java.util.UUID; +import java.util.concurrent.TimeUnit; class DuckDBVector { // Constant to construct BigDecimals from hugeint_t @@ -114,6 +115,7 @@ Object getObject(int idx) throws SQLException { case MAP: return getMap(idx); case LIST: + case ARRAY: return getArray(idx); case STRUCT: return getStruct(idx); @@ -124,13 +126,31 @@ Object getObject(int idx) throws SQLException { } } - LocalTime getLocalTime(int idx) throws SQLException { + LocalTime getLocalTime(int idx) { + if (check_and_null(idx)) { + return null; + } + + if (isType(DuckDBColumnType.TIME)) { + long microseconds = getbuf(idx, 8).getLong(); + long nanoseconds = TimeUnit.MICROSECONDS.toNanos(microseconds); + return LocalTime.ofNanoOfDay(nanoseconds); + } + String lazyString = getLazyString(idx); return lazyString == null ? null : LocalTime.parse(lazyString); } - LocalDate getLocalDate(int idx) throws SQLException { + LocalDate getLocalDate(int idx) { + if (check_and_null(idx)) { + return null; + } + + if (isType(DuckDBColumnType.DATE)) { + return LocalDate.ofEpochDay(getbuf(idx, 4).getInt()); + } + String lazyString = getLazyString(idx); if ("infinity".equals(lazyString)) @@ -228,7 +248,7 @@ Array getArray(int idx) throws SQLException { if (check_and_null(idx)) { return null; } - if (isType(DuckDBColumnType.LIST)) { + if (isType(DuckDBColumnType.LIST) || isType(DuckDBColumnType.ARRAY)) { return (Array) varlen_data[idx]; } throw new SQLFeatureNotSupportedException("getArray"); @@ -276,7 +296,11 @@ Date getDate(int idx) { if (check_and_null(idx)) { return null; } - // TODO: load from native format + + if (isType(DuckDBColumnType.DATE)) { + return Date.valueOf(this.getLocalDate(idx)); + } + String string_value = getLazyString(idx); if (string_value == null) { return null; @@ -296,11 +320,15 @@ OffsetTime getOffsetTime(int idx) { } Time getTime(int idx) { - // TODO: load from native format - String string_value = getLazyString(idx); - if (string_value == null) { + if (check_and_null(idx)) { return null; } + + if (isType(DuckDBColumnType.TIME)) { + return Time.valueOf(getLocalTime(idx)); + } + + String string_value = getLazyString(idx); try { return Time.valueOf(string_value); } catch (Exception e) { diff --git a/tools/jdbc/src/test/java/org/duckdb/TestDuckDBJDBC.java b/tools/jdbc/src/test/java/org/duckdb/TestDuckDBJDBC.java index 6bba6b174591..adf7ab5ba0eb 100644 --- a/tools/jdbc/src/test/java/org/duckdb/TestDuckDBJDBC.java +++ b/tools/jdbc/src/test/java/org/duckdb/TestDuckDBJDBC.java @@ -2,7 +2,6 @@ import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.RowSetProvider; -import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.ByteBuffer; @@ -136,23 +135,11 @@ public static void test_connection() throws Exception { assertEquals(res, 42); assertFalse(rs.wasNull()); - try { - res = rs.getInt(0); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> rs.getInt(0), SQLException.class); - try { - res = rs.getInt(2); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> rs.getInt(2), SQLException.class); - try { - res = rs.getInt("b"); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> rs.getInt("b"), SQLException.class); assertFalse(rs.next()); assertFalse(rs.next()); @@ -161,11 +148,7 @@ public static void test_connection() throws Exception { rs.close(); assertTrue(rs.isClosed()); - try { - res = rs.getInt(1); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> rs.getInt(1), SQLException.class); stmt.close(); stmt.close(); @@ -176,24 +159,14 @@ public static void test_connection() throws Exception { assertFalse(conn.isValid(0)); assertTrue(conn.isClosed()); - try { - stmt = conn.createStatement(); - fail(); - } catch (SQLException e) { - } + assertThrows(conn::createStatement, SQLException.class); } public static void test_prepare_exception() throws Exception { Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement(); - stmt = conn.createStatement(); - - try { - stmt.execute("this is no SQL;"); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> stmt.execute("this is no SQL;"), SQLException.class); } public static void test_execute_exception() throws Exception { @@ -247,11 +220,7 @@ public static void test_autocommit_off() throws Exception { assertEquals(rs.getInt(1), 5); // This means a rollback must not be possible now - try { - conn.rollback(); - fail(); - } catch (SQLException e) { - } + assertThrows(conn::rollback, SQLException.class); stmt.execute("INSERT INTO t (id) VALUES (8);"); rs = stmt.executeQuery("SELECT COUNT(*) FROM T"); @@ -563,11 +532,7 @@ public static void test_throw_wrong_datatype() throws Exception { rs = stmt.executeQuery("SELECT * FROM t"); rs.next(); - try { - rs.getShort(2); - fail(); - } catch (IllegalArgumentException e) { - } + assertThrows(() -> rs.getShort(2), IllegalArgumentException.class); rs.close(); stmt.close(); @@ -592,7 +557,7 @@ public static void test_struct_metadata() throws Exception { assertEquals(meta.getColumnCount(), 1); assertEquals(meta.getColumnName(1), "struct"); assertEquals(meta.getColumnTypeName(1), "STRUCT(i INTEGER, j VARCHAR)"); - assertEquals(meta.getColumnType(1), Types.JAVA_OBJECT); + assertEquals(meta.getColumnType(1), Types.STRUCT); } } @@ -618,6 +583,22 @@ public static void test_union_metadata() throws Exception { } } + public static void test_native_duckdb_array() throws Exception { + try (Connection conn = DriverManager.getConnection(JDBC_URL); + PreparedStatement stmt = conn.prepareStatement("SELECT generate_series(1)::BIGINT[2] as \"array\""); + ResultSet rs = stmt.executeQuery()) { + ResultSetMetaData meta = rs.getMetaData(); + assertEquals(meta.getColumnCount(), 1); + assertEquals(meta.getColumnName(1), "array"); + assertEquals(meta.getColumnTypeName(1), "BIGINT[2]"); + assertEquals(meta.getColumnType(1), Types.ARRAY); + assertEquals(meta.getColumnClassName(1), DuckDBArray.class.getName()); + + assertTrue(rs.next()); + assertListsEqual(toJavaObject(rs.getObject(1)), asList(0L, 1L)); + } + } + public static void test_result() throws Exception { Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement(); @@ -632,29 +613,13 @@ public static void test_result() throws Exception { assertEquals(meta.getColumnTypeName(1), "INTEGER"); assertEquals(meta.getColumnTypeName(2), "DOUBLE"); - try { - meta.getColumnName(0); - fail(); - } catch (ArrayIndexOutOfBoundsException e) { - } + assertThrows(() -> meta.getColumnName(0), ArrayIndexOutOfBoundsException.class); - try { - meta.getColumnTypeName(0); - fail(); - } catch (ArrayIndexOutOfBoundsException e) { - } + assertThrows(() -> meta.getColumnTypeName(0), ArrayIndexOutOfBoundsException.class); - try { - meta.getColumnName(3); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> meta.getColumnName(3), SQLException.class); - try { - meta.getColumnTypeName(3); - fail(); - } catch (SQLException e) { - } + assertThrows(() -> meta.getColumnTypeName(3), SQLException.class); assertTrue(rs.next()); assertEquals(rs.getInt(1), 42); @@ -1733,7 +1698,7 @@ public static void test_evil_date() throws Exception { ResultSet rs = stmt.executeQuery("SELECT '5131-08-05 (BC)'::date d"); assertTrue(rs.next()); - assertNull(rs.getDate("d")); + assertEquals(rs.getDate("d"), Date.valueOf(LocalDate.of(-5130, 8, 5))); assertFalse(rs.next()); rs.close(); @@ -1761,6 +1726,10 @@ public static void test_schema_reflection() throws Exception { Statement stmt = conn.createStatement(); stmt.execute("CREATE TABLE a (i INTEGER)"); stmt.execute("CREATE VIEW b AS SELECT i::STRING AS j FROM a"); + stmt.execute("COMMENT ON TABLE a IS 'a table'"); + stmt.execute("COMMENT ON COLUMN a.i IS 'a column'"); + stmt.execute("COMMENT ON VIEW b IS 'a view'"); + stmt.execute("COMMENT ON COLUMN b.j IS 'a column'"); DatabaseMetaData md = conn.getMetaData(); ResultSet rs; @@ -1791,8 +1760,8 @@ public static void test_schema_reflection() throws Exception { assertEquals(rs.getString(3), "a"); assertEquals(rs.getString("TABLE_TYPE"), "BASE TABLE"); assertEquals(rs.getString(4), "BASE TABLE"); - assertNull(rs.getObject("REMARKS")); - assertNull(rs.getObject(5)); + assertEquals(rs.getObject("REMARKS"), "a table"); + assertEquals(rs.getObject(5), "a table"); assertNull(rs.getObject("TYPE_CAT")); assertNull(rs.getObject(6)); assertNull(rs.getObject("TYPE_SCHEM")); @@ -1812,8 +1781,8 @@ public static void test_schema_reflection() throws Exception { assertEquals(rs.getString(3), "b"); assertEquals(rs.getString("TABLE_TYPE"), "VIEW"); assertEquals(rs.getString(4), "VIEW"); - assertNull(rs.getObject("REMARKS")); - assertNull(rs.getObject(5)); + assertEquals(rs.getObject("REMARKS"), "a view"); + assertEquals(rs.getObject(5), "a view"); assertNull(rs.getObject("TYPE_CAT")); assertNull(rs.getObject(6)); assertNull(rs.getObject("TYPE_SCHEM")); @@ -1838,8 +1807,8 @@ public static void test_schema_reflection() throws Exception { assertEquals(rs.getString(3), "a"); assertEquals(rs.getString("TABLE_TYPE"), "BASE TABLE"); assertEquals(rs.getString(4), "BASE TABLE"); - assertNull(rs.getObject("REMARKS")); - assertNull(rs.getObject(5)); + assertEquals(rs.getObject("REMARKS"), "a table"); + assertEquals(rs.getObject(5), "a table"); assertNull(rs.getObject("TYPE_CAT")); assertNull(rs.getObject(6)); assertNull(rs.getObject("TYPE_SCHEM")); @@ -1865,6 +1834,7 @@ public static void test_schema_reflection() throws Exception { assertEquals(rs.getString("TABLE_NAME"), "a"); assertEquals(rs.getString(3), "a"); assertEquals(rs.getString("COLUMN_NAME"), "i"); + assertEquals(rs.getString("REMARKS"), "a column"); assertEquals(rs.getString(4), "i"); assertEquals(rs.getInt("DATA_TYPE"), Types.INTEGER); assertEquals(rs.getInt(5), Types.INTEGER); @@ -1897,6 +1867,7 @@ public static void test_schema_reflection() throws Exception { assertNull(rs.getObject(7)); assertNull(rs.getObject("BUFFER_LENGTH")); assertNull(rs.getObject(8)); + assertEquals(rs.getString("REMARKS"), "a column"); rs.close(); @@ -1943,7 +1914,7 @@ public static void test_time_tz() throws Exception { rs.next(); assertEquals(rs.getString("TYPE_NAME"), "TIME WITH TIME ZONE"); - assertEquals(rs.getInt("DATA_TYPE"), Types.JAVA_OBJECT); + assertEquals(rs.getInt("DATA_TYPE"), Types.TIME_WITH_TIMEZONE); } s.execute( @@ -2530,12 +2501,10 @@ public static void test_appender_table_does_not_exist() throws Exception { DuckDBConnection conn = DriverManager.getConnection(JDBC_URL).unwrap(DuckDBConnection.class); Statement stmt = conn.createStatement(); - try { + assertThrows(() -> { @SuppressWarnings("unused") DuckDBAppender appender = conn.createAppender(DuckDBConnection.DEFAULT_SCHEMA, "data"); - fail(); - } catch (SQLException e) { - } + }, SQLException.class); stmt.close(); conn.close(); @@ -2558,11 +2527,7 @@ public static void test_appender_table_deleted() throws Exception { appender.append(2); appender.endRow(); - try { - appender.close(); - fail(); - } catch (SQLException e) { - } + assertThrows(appender::close, SQLException.class); stmt.close(); conn.close(); @@ -2576,13 +2541,11 @@ public static void test_appender_append_too_many_columns() throws Exception { stmt.close(); DuckDBAppender appender = conn.createAppender(DuckDBConnection.DEFAULT_SCHEMA, "data"); - try { + assertThrows(() -> { appender.beginRow(); appender.append(1); appender.append(2); - fail(); - } catch (SQLException e) { - } + }, SQLException.class); conn.close(); } @@ -2595,13 +2558,11 @@ public static void test_appender_append_too_few_columns() throws Exception { stmt.close(); DuckDBAppender appender = conn.createAppender(DuckDBConnection.DEFAULT_SCHEMA, "data"); - try { + assertThrows(() -> { appender.beginRow(); appender.append(1); appender.endRow(); - fail(); - } catch (SQLException e) { - } + }, SQLException.class); conn.close(); } @@ -2613,12 +2574,10 @@ public static void test_appender_type_mismatch() throws Exception { stmt.execute("CREATE TABLE data (a INTEGER)"); DuckDBAppender appender = conn.createAppender(DuckDBConnection.DEFAULT_SCHEMA, "data"); - try { + assertThrows(() -> { appender.beginRow(); appender.append("str"); - fail(); - } catch (SQLException e) { - } + }, SQLException.class); stmt.close(); conn.close(); @@ -3624,14 +3583,14 @@ private static List arrayToList(T[] array) throws SQLException { return out; } - private static Object toJavaObject(Object t) { + private static T toJavaObject(Object t) { try { if (t instanceof Array) { t = arrayToList((Array) t); } else if (t instanceof Struct) { t = structToMap((DuckDBStruct) t); } - return t; + return (T) t; } catch (SQLException e) { throw new RuntimeException(e); } @@ -3756,8 +3715,8 @@ static Map mapOf(Object... pairs) { correct_answer_map.put("double_array", trio(42.0, Double.NaN, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, null, -42.0)); correct_answer_map.put( - "date_array", trio(LocalDate.parse("1970-01-01"), LocalDate.parse("999999999-12-31", FORMAT_DATE), - LocalDate.parse("-999999999-01-01", FORMAT_DATE), null, LocalDate.parse("2022-05-12"))); + "date_array", trio(LocalDate.parse("1970-01-01"), LocalDate.parse("5881580-07-11", FORMAT_DATE), + LocalDate.parse("-5877641-06-24", FORMAT_DATE), null, LocalDate.parse("2022-05-12"))); correct_answer_map.put("timestamp_array", trio(Timestamp.valueOf("1970-01-01 00:00:00.0"), DuckDBTimestamp.toSqlTimestamp(9223372036854775807L), DuckDBTimestamp.toSqlTimestamp(-9223372036854775807L), null, @@ -3767,14 +3726,14 @@ static Map mapOf(Object... pairs) { OffsetDateTime.parse("-290308-12-21T19:59:05.224193Z"), null, OffsetDateTime.parse("2022-05-12T23:23:45Z"))); correct_answer_map.put("varchar_array", trio("🦆🦆🦆🦆🦆🦆", "goose", null, "")); - correct_answer_map.put("nested_int_array", trio(emptyList(), asList(42, 999, null, null, -42), null, - emptyList(), asList(42, 999, null, null, -42))); - correct_answer_map.put("struct_of_arrays", asList(mapOf("a", null, "b", null), - mapOf("a", asList(42, 999, null, null, -42), "b", - asList("🦆🦆🦆🦆🦆🦆", "goose", null, "")), - null)); - correct_answer_map.put("array_of_structs", trio(mapOf("a", null, "b", null), - mapOf("a", 42, "b", "🦆🦆🦆🦆🦆🦆"), null)); + List numbers = asList(42, 999, null, null, -42); + correct_answer_map.put("nested_int_array", trio(emptyList(), numbers, null, emptyList(), numbers)); + Map abnull = mapOf("a", null, "b", null); + correct_answer_map.put( + "struct_of_arrays", + asList(abnull, mapOf("a", numbers, "b", asList("🦆🦆🦆🦆🦆🦆", "goose", null, "")), null)); + Map ducks = mapOf("a", 42, "b", "🦆🦆🦆🦆🦆🦆"); + correct_answer_map.put("array_of_structs", trio(abnull, ducks, null)); correct_answer_map.put("bool", asList(false, true, null)); correct_answer_map.put("tinyint", asList((byte) -128, (byte) 127, null)); correct_answer_map.put("smallint", asList((short) -32768, (short) 32767, null)); @@ -3807,8 +3766,7 @@ static Map mapOf(Object... pairs) { correct_answer_map.put("small_enum", asList("DUCK_DUCK_ENUM", "GOOSE", null)); correct_answer_map.put("medium_enum", asList("enum_0", "enum_299", null)); correct_answer_map.put("large_enum", asList("enum_0", "enum_69999", null)); - correct_answer_map.put( - "struct", asList(mapOf("a", null, "b", null), mapOf("a", 42, "b", "🦆🦆🦆🦆🦆🦆"), null)); + correct_answer_map.put("struct", asList(abnull, ducks, null)); correct_answer_map.put("map", asList(mapOf(), mapOf("key1", "🦆🦆🦆🦆🦆🦆", "key2", "goose"), null)); correct_answer_map.put("union", asList("Frank", (short) 5, null)); @@ -3831,6 +3789,30 @@ static Map mapOf(Object... pairs) { "timestamp_tz", asList(OffsetDateTime.of(LocalDateTime.of(-290308, 12, 22, 0, 0, 0), ZoneOffset.UTC), OffsetDateTime.of(LocalDateTime.of(294247, 1, 10, 4, 0, 54, 775806000), ZoneOffset.UTC), null)); + + List int_array = asList(null, 2, 3); + List varchar_array = asList("a", null, "c"); + List int_list = asList(4, 5, 6); + List def = asList("d", "e", "f"); + + correct_answer_map.put("fixed_int_array", asList(int_array, int_list, null)); + correct_answer_map.put("fixed_varchar_array", asList(varchar_array, def, null)); + correct_answer_map.put("fixed_nested_int_array", + asList(asList(int_array, null, int_array), asList(int_list, int_array, int_list), null)); + correct_answer_map.put("fixed_nested_varchar_array", asList(asList(varchar_array, null, varchar_array), + asList(def, varchar_array, def), null)); + + correct_answer_map.put("fixed_struct_array", + asList(asList(abnull, ducks, abnull), asList(ducks, abnull, ducks), null)); + + correct_answer_map.put("struct_of_fixed_array", + asList(mapOf("a", int_array, "b", varchar_array), mapOf("a", int_list, "b", def), null)); + + correct_answer_map.put("fixed_array_of_int_list", asList(asList(emptyList(), numbers, emptyList()), + asList(numbers, emptyList(), numbers), null)); + + correct_answer_map.put("list_of_fixed_int_array", asList(asList(int_array, int_list, int_array), + asList(int_list, int_array, int_list), null)); } public static void test_all_types() throws Exception { @@ -4009,7 +3991,6 @@ public static void test_race() throws Exception { for (Future future : results) { future.get(); } - fail("Should have thrown an exception"); } catch (java.util.concurrent.ExecutionException ee) { assertEquals( ee.getCause().getCause().getMessage(), @@ -4245,6 +4226,15 @@ public static void test_get_binary_stream() throws Exception { } } + public static void test_fractional_time() throws Exception { + try (Connection conn = DriverManager.getConnection(JDBC_URL); + PreparedStatement stmt = conn.prepareStatement("SELECT '01:02:03.123'::TIME"); + ResultSet rs = stmt.executeQuery()) { + assertTrue(rs.next()); + assertEquals(rs.getTime(1), Time.valueOf(LocalTime.of(1, 2, 3, 123))); + } + } + public static void main(String[] args) throws Exception { System.exit(runTests(args, TestDuckDBJDBC.class, TestExtensionTypes.class)); } diff --git a/tools/jdbc/src/test/java/org/duckdb/test/Assertions.java b/tools/jdbc/src/test/java/org/duckdb/test/Assertions.java index af970d64d44d..f2d82e68b3a4 100644 --- a/tools/jdbc/src/test/java/org/duckdb/test/Assertions.java +++ b/tools/jdbc/src/test/java/org/duckdb/test/Assertions.java @@ -56,10 +56,13 @@ private static Throwable assertThrows(Class exception, try { thrower.run(); } catch (Throwable e) { - assertEquals(e.getClass(), exception); + if (!exception.isAssignableFrom(e.getClass())) { + throw new Exception("Expected to throw " + exception.getName() + ", but threw " + + e.getClass().getName()); + } return e; } - throw new Exception("Expected to throw " + exception.getName()); + throw new Exception("Expected to throw " + exception.getName() + ", but no exception thrown"); } // Asserts we are either throwing the correct exception, or not throwing at all diff --git a/tools/juliapkg/Project.toml b/tools/juliapkg/Project.toml index b08fbf60b2f4..84dfc8b63568 100644 --- a/tools/juliapkg/Project.toml +++ b/tools/juliapkg/Project.toml @@ -1,11 +1,10 @@ name = "DuckDB" uuid = "d2f5444f-75bc-4fdf-ac35-56f514c445e1" authors = ["Mark Raasveldt "] -version = "0.9.2" +version = "0.10.0" [deps] DBInterface = "a10d1c49-ce27-4219-8d33-6db1a4562965" -DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" DuckDB_jll = "2cbbab25-fc8b-58cf-88d4-687a02676033" FixedPointDecimals = "fb4d412d-6eee-574d-9565-ede6634db7b0" @@ -15,7 +14,7 @@ WeakRefStrings = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" [compat] DBInterface = "2.5" -DuckDB_jll = "0.9.2" +DuckDB_jll = "0.10.0" FixedPointDecimals = "0.4, 0.5" Tables = "1.7" WeakRefStrings = "1.4" diff --git a/tools/juliapkg/src/api.jl b/tools/juliapkg/src/api.jl index 74fcb321b531..38fed7ab6802 100644 --- a/tools/juliapkg/src/api.jl +++ b/tools/juliapkg/src/api.jl @@ -160,35 +160,35 @@ function duckdb_destroy_config(config) return ccall((:duckdb_destroy_config, libduckdb), Cvoid, (Ref{duckdb_config},), config) end -# #= -# //===--------------------------------------------------------------------===// -# // Query Execution -# //===--------------------------------------------------------------------===// -# =# -# -# """ -# duckdb_query(connection,query,out_result) -# Executes a SQL query within a connection and stores the full (materialized) result in the out_result pointer. -# If the query fails to execute, DuckDBError is returned and the error message can be retrieved by calling -# `duckdb_result_error`. -# Note that after running `duckdb_query`, `duckdb_destroy_result` must be called on the result object even if the -# query fails, otherwise the error stored within the result will not be freed correctly. -# * `connection`: The connection to perform the query in. -# * `query`: The SQL query to run. -# * `out_result`: The query result. -# * returns: `DuckDBSuccess` on success or `DuckDBError` on failure. -# """ -# function duckdb_query(connection, query, out_result) -# return ccall( -# (:duckdb_query, libduckdb), -# Int32, -# (Ptr{Cvoid}, Ptr{UInt8}, Ptr{Cvoid}), -# connection[], -# query, -# out_result, -# ) -# end -# +#= +//===--------------------------------------------------------------------===// +// Query Execution +//===--------------------------------------------------------------------===// +=# + +""" + duckdb_query(connection,query,out_result) +Executes a SQL query within a connection and stores the full (materialized) result in the out_result pointer. +If the query fails to execute, DuckDBError is returned and the error message can be retrieved by calling +`duckdb_result_error`. +Note that after running `duckdb_query`, `duckdb_destroy_result` must be called on the result object even if the +query fails, otherwise the error stored within the result will not be freed correctly. +* `connection`: The connection to perform the query in. +* `query`: The SQL query to run. +* `out_result`: The query result. +* returns: `DuckDBSuccess` on success or `DuckDBError` on failure. +""" +function duckdb_query(connection, query, out_result) + return ccall( + (:duckdb_query, libduckdb), + duckdb_state, + (duckdb_connection, Ptr{UInt8}, Ref{duckdb_result}), + connection, + query, + out_result + ) +end + """ duckdb_destroy_result(result) Closes the result and de-allocates all memory allocated for that connection. diff --git a/tools/juliapkg/src/ctypes.jl b/tools/juliapkg/src/ctypes.jl index cc4b7e4cd66c..587174acfd78 100644 --- a/tools/juliapkg/src/ctypes.jl +++ b/tools/juliapkg/src/ctypes.jl @@ -28,38 +28,38 @@ const DUCKDB_PENDING_NO_TASKS_AVAILABLE = 3; @enum DUCKDB_TYPE_::UInt32 begin DUCKDB_TYPE_INVALID = 0 - DUCKDB_TYPE_BOOLEAN - DUCKDB_TYPE_TINYINT - DUCKDB_TYPE_SMALLINT - DUCKDB_TYPE_INTEGER - DUCKDB_TYPE_BIGINT - DUCKDB_TYPE_UTINYINT - DUCKDB_TYPE_USMALLINT - DUCKDB_TYPE_UINTEGER - DUCKDB_TYPE_UBIGINT - DUCKDB_TYPE_FLOAT - DUCKDB_TYPE_DOUBLE - DUCKDB_TYPE_TIMESTAMP - DUCKDB_TYPE_DATE - DUCKDB_TYPE_TIME - DUCKDB_TYPE_INTERVAL - DUCKDB_TYPE_HUGEINT - DUCKDB_TYPE_UHUGEINT - DUCKDB_TYPE_VARCHAR - DUCKDB_TYPE_BLOB - DUCKDB_TYPE_DECIMAL - DUCKDB_TYPE_TIMESTAMP_S - DUCKDB_TYPE_TIMESTAMP_MS - DUCKDB_TYPE_TIMESTAMP_NS - DUCKDB_TYPE_ENUM - DUCKDB_TYPE_LIST - DUCKDB_TYPE_STRUCT - DUCKDB_TYPE_MAP - DUCKDB_TYPE_UUID - DUCKDB_TYPE_UNION - DUCKDB_TYPE_BIT - DUCKDB_TYPE_TIME_TZ - DUCKDB_TYPE_TIMESTAMP_TZ + DUCKDB_TYPE_BOOLEAN = 1 + DUCKDB_TYPE_TINYINT = 2 + DUCKDB_TYPE_SMALLINT = 3 + DUCKDB_TYPE_INTEGER = 4 + DUCKDB_TYPE_BIGINT = 5 + DUCKDB_TYPE_UTINYINT = 6 + DUCKDB_TYPE_USMALLINT = 7 + DUCKDB_TYPE_UINTEGER = 8 + DUCKDB_TYPE_UBIGINT = 9 + DUCKDB_TYPE_FLOAT = 10 + DUCKDB_TYPE_DOUBLE = 11 + DUCKDB_TYPE_TIMESTAMP = 12 + DUCKDB_TYPE_DATE = 13 + DUCKDB_TYPE_TIME = 14 + DUCKDB_TYPE_INTERVAL = 15 + DUCKDB_TYPE_HUGEINT = 16 + DUCKDB_TYPE_UHUGEINT = 32 + DUCKDB_TYPE_VARCHAR = 17 + DUCKDB_TYPE_BLOB = 18 + DUCKDB_TYPE_DECIMAL = 19 + DUCKDB_TYPE_TIMESTAMP_S = 20 + DUCKDB_TYPE_TIMESTAMP_MS = 21 + DUCKDB_TYPE_TIMESTAMP_NS = 22 + DUCKDB_TYPE_ENUM = 23 + DUCKDB_TYPE_LIST = 24 + DUCKDB_TYPE_STRUCT = 25 + DUCKDB_TYPE_MAP = 26 + DUCKDB_TYPE_UUID = 27 + DUCKDB_TYPE_UNION = 28 + DUCKDB_TYPE_BIT = 29 + DUCKDB_TYPE_TIME_TZ = 30 + DUCKDB_TYPE_TIMESTAMP_TZ = 31 end const DUCKDB_TYPE = DUCKDB_TYPE_ @@ -96,7 +96,7 @@ struct duckdb_time_struct end struct duckdb_time_tz - micros::Int64 + time::duckdb_time_struct offset::Int32 end diff --git a/tools/juliapkg/src/result.jl b/tools/juliapkg/src/result.jl index 0dc015cccb57..f7e0b622d886 100644 --- a/tools/juliapkg/src/result.jl +++ b/tools/juliapkg/src/result.jl @@ -92,7 +92,13 @@ end function convert_time_tz(column_data::ColumnConversionData, val::UInt64)::Time time_tz = duckdb_from_time_tz(val) # TODO: how to preserve the offset? - return Dates.Time(Dates.Nanosecond(time_tz.micros * 1000)) + return Dates.Time( + time_tz.time.hour, + time_tz.time.min, + time_tz.time.sec, + time_tz.time.micros ÷ 1000, + time_tz.time.micros % 1000 + ) end function convert_timestamp(column_data::ColumnConversionData, val::Int64)::DateTime @@ -634,17 +640,17 @@ function _close_pending_result(pending::PendingQueryResult) return end -function fetch_error(stmt::Stmt, error_ptr) +function fetch_error(sql::AbstractString, error_ptr) if error_ptr == C_NULL - return string("Execute of query \"", stmt.sql, "\" failed: unknown error") + return string("Execute of query \"", sql, "\" failed: unknown error") else - return string("Execute of query \"", stmt.sql, "\" failed: ", unsafe_string(error_ptr)) + return string("Execute of query \"", sql, "\" failed: ", unsafe_string(error_ptr)) end end function get_error(stmt::Stmt, pending::PendingQueryResult) error_ptr = duckdb_pending_error(pending.handle) - error_message = fetch_error(stmt, error_ptr) + error_message = fetch_error(stmt.sql, error_ptr) _close_pending_result(pending) return error_message end @@ -762,7 +768,7 @@ function execute(stmt::Stmt, params::DBInterface.StatementParams = ()) ret = duckdb_execute_pending(pending.handle, handle) if ret != DuckDBSuccess error_ptr = duckdb_result_error(handle) - error_message = fetch_error(stmt, error_ptr) + error_message = fetch_error(stmt.sql, error_ptr) duckdb_destroy_result(handle) throw(QueryException(error_message)) end @@ -857,3 +863,21 @@ DBInterface.execute(db::DB, sql::AbstractString, result_type::Type) = DBInterface.execute(db.main_connection, sql, result_type) Base.show(io::IO, result::DuckDB.QueryResult) = print(io, Tables.columntable(result)) + +""" +Executes a SQL query within a connection and returns the full (materialized) result. + +The query function is able to run queries with multiple statements, unlike `DBInterface.execute`(@ref) which is only able to prepare a single statement. +""" +function query(con::DuckDB.Connection, sql::AbstractString) + handle = Ref{duckdb_result}() + ret = duckdb_query(con.handle, sql, handle) + if ret != DuckDBSuccess + error_ptr = duckdb_result_error(handle) + error_message = fetch_error(sql, error_ptr) + duckdb_destroy_result(handle) + throw(QueryException(error_message)) + end + return QueryResult(handle) +end +query(db::DuckDB.DB, sql::AbstractString) = query(db.main_connection, sql) diff --git a/tools/juliapkg/test/test_all_types.jl b/tools/juliapkg/test/test_all_types.jl index ece579fd151b..c2e0614ff8e9 100644 --- a/tools/juliapkg/test/test_all_types.jl +++ b/tools/juliapkg/test/test_all_types.jl @@ -9,7 +9,9 @@ df = DataFrame( DBInterface.execute( con, - """SELECT * EXCLUDE(time, time_tz) + """SELECT * EXCLUDE(time, time_tz, fixed_int_array, fixed_varchar_array, fixed_nested_int_array, + fixed_nested_varchar_array, fixed_struct_array, struct_of_fixed_array, fixed_array_of_int_list, + list_of_fixed_int_array) , CASE WHEN time = '24:00:00'::TIME THEN '23:59:59.999999'::TIME ELSE time END AS time , CASE WHEN time_tz = '24:00:00-15:59:59'::TIMETZ THEN '23:59:59.999999-15:59:59'::TIMETZ ELSE time_tz END AS time_tz FROM test_all_types() diff --git a/tools/juliapkg/test/test_basic_queries.jl b/tools/juliapkg/test/test_basic_queries.jl index 75cba901d7b0..12cb68c1f574 100644 --- a/tools/juliapkg/test/test_basic_queries.jl +++ b/tools/juliapkg/test/test_basic_queries.jl @@ -105,3 +105,32 @@ end DBInterface.close!(con) end + +# test a PIVOT query that generates multiple prepared statements and will fail with execute +@testset "Test DBInterface.query" begin + db = DuckDB.DB() + con = DuckDB.connect(db) + DuckDB.execute(con, "CREATE TABLE Cities (Country VARCHAR, Name VARCHAR, Year INT, Population INT);") + DuckDB.execute(con, "INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2000, 1005)") + DuckDB.execute(con, "INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2010, 1065)") + results = DuckDB.query(con, "PIVOT Cities ON Year USING first(Population);") + + # iterator + for row in Tables.rows(results) + @test row[:Name] == "Amsterdam" + @test row[4] == 1065 + end + + # convert to DataFrame + df = DataFrame(results) + @test names(df) == ["Country", "Name", "2000", "2010"] + @test size(df, 1) == 1 + @test df[1, :Country] == "NL" + @test df[1, :Name] == "Amsterdam" + @test df[1, "2000"] == 1005 + @test df[1, 4] == 1065 + + @test DataFrame(DuckDB.query(db, "select 'a'; select 2;"))[1, 1] == "a" + + DBInterface.close!(con) +end diff --git a/tools/odbc/CMakeLists.txt b/tools/odbc/CMakeLists.txt index 4a8e7e12e187..baf7823427bd 100644 --- a/tools/odbc/CMakeLists.txt +++ b/tools/odbc/CMakeLists.txt @@ -26,30 +26,14 @@ if(ODBC_FOUND) endif() add_definitions(-DNO_FRAMEWORKS) + include_directories(${ODBC_INCLUDE_DIRS} include) -add_library( - duckdb_odbc SHARED - duckdb_odbc.cpp - driver.cpp - connection.cpp - statement.cpp - prepared.cpp - result.cpp - api_info.cpp - statement_functions.cpp - odbc_interval.cpp - odbc_fetch.cpp - odbc_utils.cpp - empty_stubs.cpp - descriptor.cpp - parameter_descriptor.cpp - row_descriptor.cpp - cursor.cpp - odbc_diagnostic.cpp - duckdb_odbc.def - handle_functions.cpp - include/handle_functions.hpp) +add_subdirectory(src) + +set(ALL_OBJECT_FILES ${ALL_OBJECT_FILES}) + +add_library(duckdb_odbc SHARED ${ALL_OBJECT_FILES} duckdb_odbc.def) set_target_properties(duckdb_odbc PROPERTIES DEFINE_SYMBOL "DUCKDB_ODBC_API") target_link_libraries(duckdb_odbc ${LINK_LIB_LIST} duckdb_static) diff --git a/tools/odbc/include/connect.hpp b/tools/odbc/include/connect.hpp new file mode 100644 index 000000000000..55b359f9763d --- /dev/null +++ b/tools/odbc/include/connect.hpp @@ -0,0 +1,49 @@ +#ifndef DUCKDB_CONNECT_H +#define DUCKDB_CONNECT_H + +#include "duckdb_odbc.hpp" +#include "handle_functions.hpp" + +#include +#include + +#define ROW_DEL ';' +#define KEY_VAL_DEL '=' + +namespace duckdb { + +class Connect { +public: + Connect(OdbcHandleDbc *dbc_p, std::string input_str_p); + ~Connect() = default; + + bool SetSuccessWithInfo(SQLRETURN ret); + SQLRETURN ParseInputStr(); + // Splits the row into a key and value, and using SetVal sets the variable for the key + SQLRETURN FindKeyValPair(const std::string &row); + // Find the key that matches the keyname + SQLRETURN FindMatchingKey(const std::string &input, string &key); + SQLRETURN ReadFromIniFile(); + // Executes the connection + SQLRETURN SetConnection(); + + // getters + std::string GetInputStr() { + return input_str; + } + bool GetSuccessWithInfo() const { + return success_with_info; + } + +private: + OdbcHandleDbc *dbc; + std::string input_str; + bool success_with_info = false; + + map seen_config_options; + case_insensitive_map_t config_map; + duckdb::DBConfig config; +}; + +} // namespace duckdb +#endif // DUCKDB_CONNECT_H diff --git a/tools/odbc/include/odbc_utils.hpp b/tools/odbc/include/odbc_utils.hpp index 0f824566f29a..3c382a088e04 100644 --- a/tools/odbc/include/odbc_utils.hpp +++ b/tools/odbc/include/odbc_utils.hpp @@ -59,10 +59,9 @@ struct OdbcUtils { static std::string GetQueryDuckdbColumns(const std::string &catalog_filter, const std::string &schema_filter, const std::string &table_filter, const std::string &column_filter); - static void SetValueFromConnStr(const string &conn_str, const char *key, string &value); - static void SetValueFromConnStr(SQLCHAR *conn_c_str, const char *key, string &value); - static SQLUINTEGER SQLPointerToSQLUInteger(SQLPOINTER value); + static std::string ConvertSQLCHARToString(SQLCHAR *str); + static LPCSTR ConvertStringToLPCSTR(const std::string &str); }; } // namespace duckdb #endif diff --git a/tools/odbc/include/statement_functions.hpp b/tools/odbc/include/statement_functions.hpp index a4b6ea1cb31d..3e9536bad4bc 100644 --- a/tools/odbc/include/statement_functions.hpp +++ b/tools/odbc/include/statement_functions.hpp @@ -7,9 +7,10 @@ namespace duckdb { -SQLRETURN PrepareStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text, SQLINTEGER text_length); +string GetQueryAsString(duckdb::OdbcHandleStmt *hstmt, SQLCHAR *statement_text, SQLINTEGER text_length); +SQLRETURN FinalizeStmt(duckdb::OdbcHandleStmt *hstmt); -SQLRETURN BatchExecuteStmt(SQLHSTMT statement_handle); +SQLRETURN BatchExecuteStmt(duckdb::OdbcHandleStmt *hstmt); SQLRETURN SingleExecuteStmt(OdbcHandleStmt *hstmt); SQLRETURN FetchStmtResult(duckdb::OdbcHandleStmt *hstmt, SQLSMALLINT fetch_orientation = SQL_FETCH_NEXT, @@ -20,8 +21,6 @@ SQLRETURN GetDataStmtResult(OdbcHandleStmt *hstmt, SQLUSMALLINT col_or_param_num SQLRETURN ExecDirectStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text, SQLINTEGER text_length); -SQLRETURN ExecuteStmt(SQLHSTMT statement_handle); - SQLRETURN BindParameterStmt(SQLHSTMT statement_handle, SQLUSMALLINT parameter_number, SQLSMALLINT input_output_type, SQLSMALLINT value_type, SQLSMALLINT parameter_type, SQLULEN column_size, SQLSMALLINT decimal_digits, SQLPOINTER parameter_value_ptr, SQLLEN buffer_length, diff --git a/tools/odbc/scripts/create_ini_file.sh b/tools/odbc/scripts/create_ini_file.sh new file mode 100755 index 000000000000..fb98c4dff6be --- /dev/null +++ b/tools/odbc/scripts/create_ini_file.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +echo "Creating odbc.ini in the home directory..." + +current_directory=$(pwd) +ini_file_path="$HOME/.odbc.ini" + +# Create a simple odbc.ini file with some content +echo "[DuckDB]" > "$ini_file_path" +echo "Driver = DuckDB Driver" >> "$ini_file_path" +echo "database = $current_directory/test/sql/storage_version/storage_version.db" >> "$ini_file_path" +echo "access_mode = read_only" >> "$ini_file_path" +echo "allow_unsigned_extensions = true" >> "$ini_file_path" + +if [ ! -f "$ini_file_path" ]; then + echo "Failed to create $ini_file_path" + exit 1 +fi + +cat "$ini_file_path" +echo "$ini_file_path created successfully!" diff --git a/tools/odbc/scripts/delete_ini_file.sh b/tools/odbc/scripts/delete_ini_file.sh new file mode 100755 index 000000000000..761ed5aa62b3 --- /dev/null +++ b/tools/odbc/scripts/delete_ini_file.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +echo "Checking if odbc.ini exists in the home directory..." + +current_directory=$(pwd) +ini_file_path="$HOME/.odbc.ini" + +if [ ! -f "$ini_file_path" ]; then + echo "$ini_file_path does not exist" + exit 1 +fi + +echo "Found $ini_file_path" +echo "Are you sure you want to delete it? (y/n)" + +read -r answer + +if [ "$answer" != "${answer#[Yy]}" ]; then + echo "Deleting $ini_file_path..." + rm "$ini_file_path" + echo "$ini_file_path deleted successfully!" + exit 0 +fi diff --git a/tools/odbc/src/CMakeLists.txt b/tools/odbc/src/CMakeLists.txt new file mode 100644 index 000000000000..b45aeb3ad84e --- /dev/null +++ b/tools/odbc/src/CMakeLists.txt @@ -0,0 +1,19 @@ +add_subdirectory(common) +add_subdirectory(connect) +add_subdirectory(statement) + +add_library( + odbc_src OBJECT + driver.cpp + prepared.cpp + result.cpp + api_info.cpp + empty_stubs.cpp + descriptor.cpp + parameter_descriptor.cpp + row_descriptor.cpp + cursor.cpp) + +set(ALL_OBJECT_FILES + ${ALL_OBJECT_FILES} $ + PARENT_SCOPE) diff --git a/tools/odbc/api_info.cpp b/tools/odbc/src/api_info.cpp similarity index 100% rename from tools/odbc/api_info.cpp rename to tools/odbc/src/api_info.cpp diff --git a/tools/odbc/src/common/CMakeLists.txt b/tools/odbc/src/common/CMakeLists.txt new file mode 100644 index 000000000000..b12892bbf1b0 --- /dev/null +++ b/tools/odbc/src/common/CMakeLists.txt @@ -0,0 +1,13 @@ +add_library_unity( + odbc_common + OBJECT + duckdb_odbc.cpp + handle_functions.cpp + odbc_diagnostic.cpp + odbc_fetch.cpp + odbc_interval.cpp + odbc_utils.cpp) + +set(ALL_OBJECT_FILES + ${ALL_OBJECT_FILES} $ + PARENT_SCOPE) diff --git a/tools/odbc/duckdb_odbc.cpp b/tools/odbc/src/common/duckdb_odbc.cpp similarity index 100% rename from tools/odbc/duckdb_odbc.cpp rename to tools/odbc/src/common/duckdb_odbc.cpp diff --git a/tools/odbc/handle_functions.cpp b/tools/odbc/src/common/handle_functions.cpp similarity index 100% rename from tools/odbc/handle_functions.cpp rename to tools/odbc/src/common/handle_functions.cpp diff --git a/tools/odbc/odbc_diagnostic.cpp b/tools/odbc/src/common/odbc_diagnostic.cpp similarity index 100% rename from tools/odbc/odbc_diagnostic.cpp rename to tools/odbc/src/common/odbc_diagnostic.cpp diff --git a/tools/odbc/odbc_fetch.cpp b/tools/odbc/src/common/odbc_fetch.cpp similarity index 100% rename from tools/odbc/odbc_fetch.cpp rename to tools/odbc/src/common/odbc_fetch.cpp diff --git a/tools/odbc/odbc_interval.cpp b/tools/odbc/src/common/odbc_interval.cpp similarity index 99% rename from tools/odbc/odbc_interval.cpp rename to tools/odbc/src/common/odbc_interval.cpp index 665ebc1fffa9..43d799329131 100644 --- a/tools/odbc/odbc_interval.cpp +++ b/tools/odbc/src/common/odbc_interval.cpp @@ -16,8 +16,9 @@ bool OdbcInterval::GetInterval(Value &value, interval_t &interval, duckdb::OdbcH return true; case LogicalTypeId::VARCHAR: { string error_message; + CastParameters parameters(false, &error_message); auto &val_str = StringValue::Get(value); - if (!TryCastErrorMessage::Operation(string_t(val_str), interval, &error_message)) { + if (!TryCastErrorMessage::Operation(string_t(val_str), interval, parameters)) { error_message = CastExceptionText(string_t(val_str)); auto data_source = hstmt->dbc->GetDataSourceName(); duckdb::DiagRecord diag_rec(error_message, SQLStateType::ST_22007, data_source); diff --git a/tools/odbc/odbc_utils.cpp b/tools/odbc/src/common/odbc_utils.cpp similarity index 84% rename from tools/odbc/odbc_utils.cpp rename to tools/odbc/src/common/odbc_utils.cpp index 67c7a85469dd..e8415a95b3fd 100644 --- a/tools/odbc/odbc_utils.cpp +++ b/tools/odbc/src/common/odbc_utils.cpp @@ -189,35 +189,14 @@ string OdbcUtils::GetQueryDuckdbTables(const string &schema_filter, const string return sql_duckdb_tables; } -void OdbcUtils::SetValueFromConnStr(const string &conn_str, const char *key, string &value) { - std::string pattern = std::string(key) + ".*"; - std::smatch match_str; - std::regex re(pattern, std::regex_constants::icase); - if (std::regex_search(conn_str, match_str, re)) { - std::string matched_str = match_str.str(); - auto pos_start_value = matched_str.find('='); - if (pos_start_value == string::npos) { - // an equal '=' char must be present (syntax error) - return; - } - ++pos_start_value; - auto pos_end_value = matched_str.find(';', pos_start_value); - if (pos_end_value == string::npos) { - // there is no ';', reached the end of the string - pos_end_value = matched_str.size(); - } - value = matched_str.substr(pos_start_value, pos_end_value - pos_start_value); - } +SQLUINTEGER OdbcUtils::SQLPointerToSQLUInteger(SQLPOINTER value) { + return static_cast(reinterpret_cast(value)); } -void OdbcUtils::SetValueFromConnStr(SQLCHAR *conn_c_str, const char *key, string &value) { - if (conn_c_str == nullptr || key == nullptr) { - return; - } - string conn_str((char *)conn_c_str); - SetValueFromConnStr(conn_str, key, value); +std::string OdbcUtils::ConvertSQLCHARToString(SQLCHAR *str) { + return std::string(reinterpret_cast(str)); } -SQLUINTEGER OdbcUtils::SQLPointerToSQLUInteger(SQLPOINTER value) { - return static_cast(reinterpret_cast(value)); +LPCSTR duckdb::OdbcUtils::ConvertStringToLPCSTR(const std::string &str) { + return reinterpret_cast(const_cast(str.c_str())); } diff --git a/tools/odbc/src/connect/CMakeLists.txt b/tools/odbc/src/connect/CMakeLists.txt new file mode 100644 index 000000000000..1c65163f5e5b --- /dev/null +++ b/tools/odbc/src/connect/CMakeLists.txt @@ -0,0 +1,6 @@ +add_library_unity(odbc_connect OBJECT connect.cpp connection.cpp + driver_connect.cpp) + +set(ALL_OBJECT_FILES + ${ALL_OBJECT_FILES} $ + PARENT_SCOPE) diff --git a/tools/odbc/src/connect/connect.cpp b/tools/odbc/src/connect/connect.cpp new file mode 100644 index 000000000000..07cad9a1a1f2 --- /dev/null +++ b/tools/odbc/src/connect/connect.cpp @@ -0,0 +1,153 @@ +#include "connect.hpp" +#include "duckdb/main/db_instance_cache.hpp" +#include +#include + +#if WIN32 +#include +#endif + +using namespace duckdb; + +//! The database instance cache, used so that multiple connections to the same file point to the same database object +DBInstanceCache instance_cache; + +bool Connect::SetSuccessWithInfo(SQLRETURN ret) { + if (!SQL_SUCCEEDED(ret)) { + return false; + } + if (ret == SQL_SUCCESS_WITH_INFO) { + success_with_info = true; + } + return true; +} + +SQLRETURN Connect::FindMatchingKey(const std::string &input, string &key) { + if (seen_config_options.find(input) != seen_config_options.end()) { + key = input; + return SQL_SUCCESS; + } + + auto config_names = DBConfig::GetOptionNames(); + + // If the input doesn't match a keyname, find a similar keyname + auto msg = StringUtil::CandidatesErrorMessage(config_names, input, "Did you mean: "); + return SetDiagnosticRecord(dbc, SQL_SUCCESS_WITH_INFO, "SQLDriverConnect", + "Invalid keyword: '" + input + "'. " + msg, SQLStateType::ST_01S09, ""); +} + +SQLRETURN Connect::FindKeyValPair(const std::string &row) { + string key; + + size_t val_pos = row.find(KEY_VAL_DEL); + if (val_pos == std::string::npos) { + // an equal '=' char must be present (syntax error) + return (SetDiagnosticRecord(dbc, SQL_ERROR, "SQLDriverConnect", "Invalid connection string", + SQLStateType::ST_HY000, "")); + } + + SQLRETURN ret = FindMatchingKey(StringUtil::Lower(row.substr(0, val_pos)), key); + if (ret != SQL_SUCCESS) { + return ret; + } + + config_map[key] = row.substr(val_pos + 1); + seen_config_options[key] = true; + return SQL_SUCCESS; +} + +SQLRETURN Connect::ParseInputStr() { + size_t row_pos; + std::string row; + + if (input_str.empty()) { + return SQL_SUCCESS; + } + + while ((row_pos = input_str.find(ROW_DEL)) != std::string::npos) { + row = input_str.substr(0, row_pos); + SQLRETURN ret = FindKeyValPair(row); + if (ret != SQL_SUCCESS) { + return ret; + } + input_str.erase(0, row_pos + 1); + } + + if (input_str.empty()) { + return SQL_SUCCESS; + } + + SQLRETURN ret = FindKeyValPair(input_str); + if (ret != SQL_SUCCESS) { + return ret; + } + + // Extract the DSN from the config map as it is needed to read from the .odbc.ini file + dbc->dsn = seen_config_options["dsn"] ? config_map["dsn"].ToString() : ""; + + return SQL_SUCCESS; +} + +SQLRETURN Connect::ReadFromIniFile() { +#if defined ODBC_LINK_ODBCINST || defined WIN32 + if (dbc->dsn.empty()) { + return SQL_SUCCESS; + } + + auto converted_dsn = OdbcUtils::ConvertStringToLPCSTR(dbc->dsn); + for (auto &key_pair : seen_config_options) { + // if the key has already been set, skip it + if (key_pair.second) { + continue; + } + const idx_t max_val_len = 256; + char char_val[max_val_len]; + auto converted_key = key_pair.first.c_str(); + int read_size = SQLGetPrivateProfileString(converted_dsn, converted_key, "", char_val, max_val_len, "odbc.ini"); + if (read_size == 0) { + continue; + } else if (read_size < 0) { + return SetDiagnosticRecord(dbc, SQL_ERROR, "SQLDriverConnect", "Error reading from .odbc.ini", + SQLStateType::ST_01S09, ""); + } + config_map[key_pair.first] = std::string(char_val); + seen_config_options[key_pair.first] = true; + } +#endif + return SQL_SUCCESS; +} + +SQLRETURN Connect::SetConnection() { +#if defined ODBC_LINK_ODBCINST || defined WIN32 + ReadFromIniFile(); +#endif + auto database = seen_config_options["database"] ? config_map["database"].ToString() : IN_MEMORY_PATH; + dbc->SetDatabaseName(database); + + // remove the database and dsn from the config map since they aren't config options + config_map.erase("database"); + config_map.erase("dsn"); + + config.SetOptionByName("duckdb_api", "odbc"); + config.SetOptionsByName(config_map); + + bool cache_instance = database != IN_MEMORY_PATH; + dbc->env->db = instance_cache.GetOrCreateInstance(database, config, cache_instance); + + if (!dbc->conn) { + dbc->conn = make_uniq(*dbc->env->db); + dbc->conn->SetAutoCommit(dbc->autocommit); + } + return SQL_SUCCESS; +} + +Connect::Connect(OdbcHandleDbc *dbc_p, string input_str_p) : dbc(dbc_p), input_str(std::move(input_str_p)) { + // Get all the config options + auto config_options = DBConfig::GetOptionNames(); + for (auto &option : config_options) { + // They are all set to false as they haven't been set yet + seen_config_options[option] = false; + } + seen_config_options["dsn"] = false; + seen_config_options["database"] = false; +} diff --git a/tools/odbc/connection.cpp b/tools/odbc/src/connect/connection.cpp similarity index 99% rename from tools/odbc/connection.cpp rename to tools/odbc/src/connect/connection.cpp index 7e169d895554..929b2e498c3c 100644 --- a/tools/odbc/connection.cpp +++ b/tools/odbc/src/connect/connection.cpp @@ -511,7 +511,7 @@ SQLRETURN SQL_API SQLGetInfo(SQLHDBC connection_handle, SQLUSMALLINT info_type, } std::string db_name = dbc->GetDatabaseName(); - if (db_name == ":memory:") { + if (db_name == IN_MEMORY_PATH) { db_name = ""; } duckdb::OdbcUtils::WriteString(db_name, (SQLCHAR *)info_value_ptr, buffer_length, string_length_ptr); @@ -1084,14 +1084,3 @@ SQLRETURN SQL_API SQLEndTran(SQLSMALLINT handle_type, SQLHANDLE handle, SQLSMALL SQLStateType::ST_HY012, dbc->GetDataSourceName()); } } - -SQLRETURN SQL_API SQLDisconnect(SQLHDBC connection_handle) { - duckdb::OdbcHandleDbc *dbc = nullptr; - SQLRETURN ret = ConvertConnection(connection_handle, dbc); - if (ret != SQL_SUCCESS) { - return ret; - } - - dbc->conn.reset(); - return SQL_SUCCESS; -} diff --git a/tools/odbc/src/connect/driver_connect.cpp b/tools/odbc/src/connect/driver_connect.cpp new file mode 100644 index 000000000000..dc3a264bd84d --- /dev/null +++ b/tools/odbc/src/connect/driver_connect.cpp @@ -0,0 +1,75 @@ +#include "connect.hpp" + +#include "duckdb_odbc.hpp" +#include "odbc_utils.hpp" + +using duckdb::OdbcUtils; + +static SQLRETURN ConvertDBCBeforeConnection(SQLHDBC connection_handle, duckdb::OdbcHandleDbc *&dbc) { + if (!connection_handle) { + return SQL_INVALID_HANDLE; + } + dbc = static_cast(connection_handle); + if (dbc->type != duckdb::OdbcHandleType::DBC) { + return SQL_INVALID_HANDLE; + } + return SQL_SUCCESS; +} + +SQLRETURN SQL_API SQLDriverConnect(SQLHDBC connection_handle, SQLHWND window_handle, SQLCHAR *in_connection_string, + SQLSMALLINT string_length1, SQLCHAR *out_connection_string, + SQLSMALLINT buffer_length, SQLSMALLINT *string_length2_ptr, + SQLUSMALLINT driver_completion) { + duckdb::OdbcHandleDbc *dbc = nullptr; + SQLRETURN ret = ConvertDBCBeforeConnection(connection_handle, dbc); + if (!SQL_SUCCEEDED(ret)) { + return ret; + } + + duckdb::Connect connect(dbc, OdbcUtils::ConvertSQLCHARToString(in_connection_string)); + + ret = connect.ParseInputStr(); + if (!connect.SetSuccessWithInfo(ret)) { + return ret; + } + + ret = connect.SetConnection(); + if (!connect.SetSuccessWithInfo(ret)) { + return ret; + } + + std::string connect_str = "DuckDB connection"; + if (string_length2_ptr) { + *string_length2_ptr = connect_str.size(); + } + if (out_connection_string) { + memcpy(out_connection_string, connect_str.c_str(), + duckdb::MinValue((SQLSMALLINT)connect_str.size(), buffer_length)); + } + return connect.GetSuccessWithInfo() ? SQL_SUCCESS_WITH_INFO : ret; +} + +SQLRETURN SQL_API SQLConnect(SQLHDBC connection_handle, SQLCHAR *server_name, SQLSMALLINT name_length1, + SQLCHAR *user_name, SQLSMALLINT name_length2, SQLCHAR *authentication, + SQLSMALLINT name_length3) { + duckdb::OdbcHandleDbc *dbc = nullptr; + SQLRETURN ret = ConvertDBCBeforeConnection(connection_handle, dbc); + if (!SQL_SUCCEEDED(ret)) { + return ret; + } + + duckdb::Connect connect(dbc, OdbcUtils::ConvertSQLCHARToString(server_name)); + + return connect.SetConnection(); +} + +SQLRETURN SQL_API SQLDisconnect(SQLHDBC connection_handle) { + duckdb::OdbcHandleDbc *dbc = nullptr; + SQLRETURN ret = ConvertConnection(connection_handle, dbc); + if (ret != SQL_SUCCESS) { + return ret; + } + + dbc->conn.reset(); + return SQL_SUCCESS; +} diff --git a/tools/odbc/cursor.cpp b/tools/odbc/src/cursor.cpp similarity index 100% rename from tools/odbc/cursor.cpp rename to tools/odbc/src/cursor.cpp diff --git a/tools/odbc/descriptor.cpp b/tools/odbc/src/descriptor.cpp similarity index 100% rename from tools/odbc/descriptor.cpp rename to tools/odbc/src/descriptor.cpp diff --git a/tools/odbc/driver.cpp b/tools/odbc/src/driver.cpp similarity index 81% rename from tools/odbc/driver.cpp rename to tools/odbc/src/driver.cpp index 82a46cf1ee59..ae50afd69034 100644 --- a/tools/odbc/driver.cpp +++ b/tools/odbc/src/driver.cpp @@ -1,16 +1,16 @@ -#include "duckdb_odbc.hpp" #include "driver.hpp" -#include "odbc_diagnostic.hpp" -#include "odbc_fetch.hpp" -#include "odbc_utils.hpp" -#include "handle_functions.hpp" #include "duckdb/main/config.hpp" #include "duckdb/main/db_instance_cache.hpp" +#include "duckdb_odbc.hpp" +#include "handle_functions.hpp" +#include "odbc_diagnostic.hpp" +#include "odbc_fetch.hpp" +#include "odbc_utils.hpp" -#include #include +using namespace duckdb; using duckdb::OdbcDiagnostic; using duckdb::OdbcUtils; using duckdb::SQLStateType; @@ -198,99 +198,6 @@ SQLRETURN SQL_API SQLGetEnvAttr(SQLHENV environment_handle, SQLINTEGER attribute return SQL_SUCCESS; } -/** - * Get the new database name from the DSN string. - * Otherwise, try to read the database name from odbc.ini - */ -static void GetDatabaseNameFromDSN(duckdb::OdbcHandleDbc *dbc, SQLCHAR *conn_str, string &new_db_name) { - OdbcUtils::SetValueFromConnStr(conn_str, "Database", new_db_name); - - // given preference for the connection attribute - if (!dbc->sql_attr_current_catalog.empty() && new_db_name.empty()) { - new_db_name = dbc->sql_attr_current_catalog; - return; - } -#if defined ODBC_LINK_ODBCINST || defined WIN32 - if (new_db_name.empty()) { - string dsn_name; - OdbcUtils::SetValueFromConnStr(conn_str, "DSN", dsn_name); - if (!dsn_name.empty()) { - const int MAX_DB_NAME = 256; - char db_name[MAX_DB_NAME]; - SQLGetPrivateProfileString(dsn_name.c_str(), "Database", "", db_name, MAX_DB_NAME, "odbc.ini"); - new_db_name = string(db_name); - } - } -#endif -} - -//! The database instance cache, used so that multiple connections to the same file point to the same database object -duckdb::DBInstanceCache instance_cache; - -static SQLRETURN SetConnection(SQLHDBC connection_handle, SQLCHAR *conn_str) { - // TODO actually interpret Database in in_connection_string - if (!connection_handle) { - return SQL_ERROR; - } - auto *dbc = (duckdb::OdbcHandleDbc *)connection_handle; - if (dbc->type != duckdb::OdbcHandleType::DBC) { - return SQL_ERROR; - } - - // set DSN - OdbcUtils::SetValueFromConnStr(conn_str, "DSN", dbc->dsn); - - string db_name; - GetDatabaseNameFromDSN(dbc, conn_str, db_name); - dbc->SetDatabaseName(db_name); - db_name = dbc->GetDatabaseName(); - - if (!db_name.empty()) { - duckdb::DBConfig config; - if (dbc->sql_attr_access_mode == SQL_MODE_READ_ONLY) { - config.options.access_mode = duckdb::AccessMode::READ_ONLY; - } - bool cache_instance = db_name != ":memory:" && !db_name.empty(); - - config.SetOptionByName("duckdb_api", "odbc"); - std::string custom_user_agent; - OdbcUtils::SetValueFromConnStr(conn_str, "custom_user_agent", custom_user_agent); - if (!custom_user_agent.empty()) { - config.SetOptionByName("custom_user_agent", custom_user_agent); - } - - dbc->env->db = instance_cache.GetOrCreateInstance(db_name, config, cache_instance); - } - - if (!dbc->conn) { - dbc->conn = duckdb::make_uniq(*dbc->env->db); - dbc->conn->SetAutoCommit(dbc->autocommit); - } - return SQL_SUCCESS; -} - -SQLRETURN SQL_API SQLDriverConnect(SQLHDBC connection_handle, SQLHWND window_handle, SQLCHAR *in_connection_string, - SQLSMALLINT string_length1, SQLCHAR *out_connection_string, - SQLSMALLINT buffer_length, SQLSMALLINT *string_length2_ptr, - SQLUSMALLINT driver_completion) { - auto ret = SetConnection(connection_handle, in_connection_string); - std::string connect_str = "DuckDB connection"; - if (string_length2_ptr) { - *string_length2_ptr = connect_str.size(); - } - if (ret == SQL_SUCCESS && out_connection_string) { - memcpy(out_connection_string, connect_str.c_str(), - duckdb::MinValue((SQLSMALLINT)connect_str.size(), buffer_length)); - } - return ret; -} - -SQLRETURN SQL_API SQLConnect(SQLHDBC connection_handle, SQLCHAR *server_name, SQLSMALLINT name_length1, - SQLCHAR *user_name, SQLSMALLINT name_length2, SQLCHAR *authentication, - SQLSMALLINT name_length3) { - return SetConnection(connection_handle, server_name); -} - SQLRETURN SQL_API SQLGetDiagRec(SQLSMALLINT handle_type, SQLHANDLE handle, SQLSMALLINT rec_number, SQLCHAR *sql_state, SQLINTEGER *native_error_ptr, SQLCHAR *message_text, SQLSMALLINT buffer_length, SQLSMALLINT *text_length_ptr) { diff --git a/tools/odbc/empty_stubs.cpp b/tools/odbc/src/empty_stubs.cpp similarity index 100% rename from tools/odbc/empty_stubs.cpp rename to tools/odbc/src/empty_stubs.cpp diff --git a/tools/odbc/parameter_descriptor.cpp b/tools/odbc/src/parameter_descriptor.cpp similarity index 99% rename from tools/odbc/parameter_descriptor.cpp rename to tools/odbc/src/parameter_descriptor.cpp index cc4485cb752d..fd0e52a7165b 100644 --- a/tools/odbc/parameter_descriptor.cpp +++ b/tools/odbc/src/parameter_descriptor.cpp @@ -1,7 +1,8 @@ -#include "include/parameter_descriptor.hpp" -#include "odbc_utils.hpp" +#include "parameter_descriptor.hpp" + #include "duckdb/common/types/decimal.hpp" #include "handle_functions.hpp" +#include "odbc_utils.hpp" using duckdb::Decimal; using duckdb::OdbcHandleDesc; diff --git a/tools/odbc/prepared.cpp b/tools/odbc/src/prepared.cpp similarity index 100% rename from tools/odbc/prepared.cpp rename to tools/odbc/src/prepared.cpp diff --git a/tools/odbc/result.cpp b/tools/odbc/src/result.cpp similarity index 100% rename from tools/odbc/result.cpp rename to tools/odbc/src/result.cpp diff --git a/tools/odbc/row_descriptor.cpp b/tools/odbc/src/row_descriptor.cpp similarity index 100% rename from tools/odbc/row_descriptor.cpp rename to tools/odbc/src/row_descriptor.cpp diff --git a/tools/odbc/src/statement/CMakeLists.txt b/tools/odbc/src/statement/CMakeLists.txt new file mode 100644 index 000000000000..2b666d6bbc7b --- /dev/null +++ b/tools/odbc/src/statement/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library_unity(odbc_statement OBJECT statement.cpp statement_functions.cpp) + +set(ALL_OBJECT_FILES + ${ALL_OBJECT_FILES} $ + PARENT_SCOPE) diff --git a/tools/odbc/statement.cpp b/tools/odbc/src/statement/statement.cpp similarity index 99% rename from tools/odbc/statement.cpp rename to tools/odbc/src/statement/statement.cpp index 61f9d4899b46..96945faccc79 100644 --- a/tools/odbc/statement.cpp +++ b/tools/odbc/src/statement/statement.cpp @@ -328,7 +328,16 @@ SQLRETURN SQL_API SQLGetStmtAttr(SQLHSTMT statement_handle, SQLINTEGER attribute * @return */ SQLRETURN SQL_API SQLPrepare(SQLHSTMT statement_handle, SQLCHAR *statement_text, SQLINTEGER text_length) { - return duckdb::PrepareStmt(statement_handle, statement_text, text_length); + duckdb::OdbcHandleStmt *hstmt = nullptr; + SQLRETURN ret = ConvertHSTMT(statement_handle, hstmt); + if (ret != SQL_SUCCESS) { + return ret; + } + + auto query = GetQueryAsString(hstmt, statement_text, text_length); + hstmt->stmt = hstmt->dbc->conn->Prepare(query); + + return FinalizeStmt(hstmt); } /** diff --git a/tools/odbc/statement_functions.cpp b/tools/odbc/src/statement/statement_functions.cpp similarity index 91% rename from tools/odbc/statement_functions.cpp rename to tools/odbc/src/statement/statement_functions.cpp index a9de5c66fdd5..71ef12866ef1 100644 --- a/tools/odbc/statement_functions.cpp +++ b/tools/odbc/src/statement/statement_functions.cpp @@ -6,6 +6,7 @@ #include "descriptor.hpp" #include "parameter_descriptor.hpp" +#include "duckdb/common/types/timestamp.hpp" #include "duckdb/common/types/decimal.hpp" #include "duckdb/common/types/string_type.hpp" #include "duckdb/common/operator/cast_operators.hpp" @@ -38,16 +39,11 @@ using duckdb::SQLStateType; using duckdb::Store; using duckdb::string; using duckdb::string_t; +using duckdb::Timestamp; using duckdb::timestamp_t; using duckdb::vector; -SQLRETURN duckdb::PrepareStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text, SQLINTEGER text_length) { - OdbcHandleStmt *hstmt = nullptr; - SQLRETURN ret = ConvertHSTMT(statement_handle, hstmt); - if (ret != SQL_SUCCESS) { - return ret; - } - +string duckdb::GetQueryAsString(duckdb::OdbcHandleStmt *hstmt, SQLCHAR *statement_text, SQLINTEGER text_length) { if (hstmt->stmt) { hstmt->stmt.reset(); } @@ -57,9 +53,10 @@ SQLRETURN duckdb::PrepareStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text } hstmt->odbc_fetcher->ClearChunks(); + return OdbcUtils::ReadString(statement_text, text_length); +} - auto query = OdbcUtils::ReadString(statement_text, text_length); - hstmt->stmt = hstmt->dbc->conn->Prepare(query); +SQLRETURN duckdb::FinalizeStmt(duckdb::OdbcHandleStmt *hstmt) { if (hstmt->stmt->data && !hstmt->stmt->GetStatementProperties().bound_all_parameters) { return (SetDiagnosticRecord(hstmt, SQL_ERROR, "PrepareStmt", "Not all parameters are bound", SQLStateType::ST_42000, hstmt->dbc->GetDataSourceName())); @@ -80,13 +77,8 @@ SQLRETURN duckdb::PrepareStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text //! Execute stmt in a batch manner while there is a parameter set to process, //! the stmt is executed multiple times when there is a bound array of parameters in INSERT and UPDATE statements -SQLRETURN duckdb::BatchExecuteStmt(SQLHSTMT statement_handle) { - duckdb::OdbcHandleStmt *hstmt = nullptr; - SQLRETURN ret = ConvertHSTMT(statement_handle, hstmt); - if (ret != SQL_SUCCESS) { - return ret; - } - +SQLRETURN duckdb::BatchExecuteStmt(duckdb::OdbcHandleStmt *hstmt) { + SQLRETURN ret = SQL_SUCCESS; do { ret = SingleExecuteStmt(hstmt); } while (ret == SQL_STILL_EXECUTING); @@ -190,7 +182,12 @@ template ()); + auto input = val.GetValue(); + auto timestamp = timestamp_t(input); + // FIXME: add test for casting infinity/-infinity timestamp values + if (Timestamp::IsFinite(timestamp)) { + timestamp = cast_timestamp_fun(input); + } target = CAST_OP::template Operation(timestamp); return true; } catch (std::exception &ex) { @@ -399,7 +396,8 @@ SQLRETURN duckdb::GetDataStmtResult(OdbcHandleStmt *hstmt, SQLUSMALLINT col_or_p } else { hugeint_t huge_int; string error_message; - if (!duckdb::TryCastToDecimal::Operation(str_t, huge_int, &error_message, + CastParameters parameters(false, &error_message); + if (!duckdb::TryCastToDecimal::Operation(str_t, huge_int, parameters, numeric->precision, numeric->scale)) { return SQL_ERROR; } @@ -527,18 +525,38 @@ SQLRETURN duckdb::GetDataStmtResult(OdbcHandleStmt *hstmt, SQLUSMALLINT col_or_p case SQL_C_TYPE_TIMESTAMP: { timestamp_t timestamp; switch (val.type().id()) { - case LogicalTypeId::TIMESTAMP_SEC: - timestamp = duckdb::Timestamp::FromEpochSeconds(val.GetValue()); + case LogicalTypeId::TIMESTAMP_SEC: { + timestamp = timestamp_t(val.GetValue()); + // FIXME: add test for casting infinity/-infinity timestamp values + if (!Timestamp::IsFinite(timestamp)) { + break; + } + timestamp = duckdb::Timestamp::FromEpochSeconds(timestamp.value); break; - case LogicalTypeId::TIMESTAMP_MS: - timestamp = duckdb::Timestamp::FromEpochMs(val.GetValue()); + } + case LogicalTypeId::TIMESTAMP_MS: { + timestamp = timestamp_t(val.GetValue()); + // FIXME: add test for casting infinity/-infinity timestamp values + if (!Timestamp::IsFinite(timestamp)) { + break; + } + timestamp = duckdb::Timestamp::FromEpochMs(timestamp.value); break; - case LogicalTypeId::TIMESTAMP: - timestamp = duckdb::Timestamp::FromEpochMicroSeconds(val.GetValue()); + } + case LogicalTypeId::TIMESTAMP: { + timestamp = timestamp_t(val.GetValue()); + timestamp = duckdb::Timestamp::FromEpochMicroSeconds(timestamp.value); break; - case LogicalTypeId::TIMESTAMP_NS: - timestamp = duckdb::Timestamp::FromEpochNanoSeconds(val.GetValue()); + } + case LogicalTypeId::TIMESTAMP_NS: { + timestamp = timestamp_t(val.GetValue()); + // FIXME: add test for casting infinity/-infinity timestamp values + if (!Timestamp::IsFinite(timestamp)) { + break; + } + timestamp = duckdb::Timestamp::FromEpochNanoSeconds(timestamp.value); break; + } case LogicalTypeId::DATE: { auto date_input = val.GetValue(); if (!TryCast::Operation(date_input, timestamp)) { @@ -803,21 +821,42 @@ SQLRETURN duckdb::GetDataStmtResult(OdbcHandleStmt *hstmt, SQLUSMALLINT col_or_p } SQLRETURN duckdb::ExecDirectStmt(SQLHSTMT statement_handle, SQLCHAR *statement_text, SQLINTEGER text_length) { - auto prepare_status = duckdb::PrepareStmt(statement_handle, statement_text, text_length); - if (prepare_status != SQL_SUCCESS) { - return SQL_ERROR; - } - - return duckdb::BatchExecuteStmt(statement_handle); -} - -SQLRETURN duckdb::ExecuteStmt(SQLHSTMT statement_handle) { duckdb::OdbcHandleStmt *hstmt = nullptr; SQLRETURN ret = ConvertHSTMT(statement_handle, hstmt); if (ret != SQL_SUCCESS) { return ret; } - return duckdb::BatchExecuteStmt(hstmt); + + bool success_with_info = false; + // Set up the statement and extract the query + auto query = GetQueryAsString(hstmt, statement_text, text_length); + + // Extract the statements from the query + vector> statements; + try { + statements = hstmt->dbc->conn->ExtractStatements(query); + } catch (std::exception &ex) { + return duckdb::SetDiagnosticRecord(hstmt, SQL_ERROR, "SQLExecDirect", ex.what(), SQLStateType::ST_42000, + hstmt->dbc->GetDataSourceName()); + } + + for (auto &statement : statements) { + hstmt->stmt = hstmt->dbc->conn->Prepare(std::move(statement)); + ret = FinalizeStmt(hstmt); + if (!hstmt->stmt->success || !SQL_SUCCEEDED(ret)) { + return ret; + } else if (ret == SQL_SUCCESS_WITH_INFO) { + success_with_info = true; + } + + ret = duckdb::BatchExecuteStmt(hstmt); + if (!SQL_SUCCEEDED(ret)) { + return ret; + } else if (ret == SQL_SUCCESS_WITH_INFO) { + success_with_info = true; + } + } + return success_with_info ? SQL_SUCCESS_WITH_INFO : ret; } SQLRETURN duckdb::BindParameterStmt(SQLHSTMT statement_handle, SQLUSMALLINT parameter_number, diff --git a/tools/odbc/test/CMakeLists.txt b/tools/odbc/test/CMakeLists.txt index 910e74c7b58f..951cbfee47b7 100644 --- a/tools/odbc/test/CMakeLists.txt +++ b/tools/odbc/test/CMakeLists.txt @@ -1,10 +1,12 @@ include_directories(../include) +include_directories(./include) include_directories(../../../third_party/catch/) include_directories(${ODBC_INCLUDE_DIRS}) add_executable( test_odbc common.cpp + connect_helpers.cpp tests/alter.cpp tests/basic_usage.cpp tests/bind_col.cpp @@ -28,6 +30,9 @@ add_executable( tests/col_attribute/int_query.cpp tests/col_attribute/utils.cpp) +add_executable(test_connection_odbc common.cpp tests/connect_with_ini.cpp + connect_helpers.cpp) + if(CMAKE_GENERATOR MATCHES "Visual Studio") # System.Data.ODBC tests Visual Studio Generator due to use of C++ CLI and # .NET. @@ -35,3 +40,4 @@ if(CMAKE_GENERATOR MATCHES "Visual Studio") endif() target_link_libraries(test_odbc duckdb_odbc ODBC::ODBC) +target_link_libraries(test_connection_odbc duckdb_odbc ODBC::ODBC) diff --git a/tools/odbc/test/common.cpp b/tools/odbc/test/common.cpp index c81b58aca9d7..20a3fe08b151 100644 --- a/tools/odbc/test/common.cpp +++ b/tools/odbc/test/common.cpp @@ -1,9 +1,9 @@ #define CATCH_CONFIG_MAIN -#include "common.h" +#include "include/common.h" namespace odbc_test { -void ODBC_CHECK(SQLRETURN ret, std::string msg) { +void ODBC_CHECK(SQLRETURN ret, const std::string &msg) { switch (ret) { case SQL_SUCCESS: REQUIRE(1); @@ -32,18 +32,18 @@ void ACCESS_DIAGNOSTIC(std::string &state, std::string &message, SQLHANDLE handl SQLINTEGER native_error; SQLCHAR message_text[256]; SQLSMALLINT text_length; - SQLSMALLINT recnum = 0; + SQLSMALLINT rec_num = 0; SQLRETURN ret = SQL_SUCCESS; while (SQL_SUCCEEDED(ret)) { - recnum++; - // SQLGetDiagRec returns the current values of multiple fields of a diagnostic record that contains error, + rec_num++; + // SQLGetDiagRec returns the current values of multiple fields in a diagnostic record that contains error, // warning, and status information. - ret = SQLGetDiagRec(handle_type, handle, recnum, sqlstate, &native_error, message_text, sizeof(message_text), + ret = SQLGetDiagRec(handle_type, handle, rec_num, sqlstate, &native_error, message_text, sizeof(message_text), &text_length); - // The function overwrites the previous contents of state and message so only the last diagnostic record is + // The function overwrites the previous contents of state and message, so only the last diagnostic record is // available. Because this function usually is called on one diagnostic record, or used to confirm that two - // calls to SQLGetDiagRec does not change the state of the statement, this is not a problem. + // calls to SQLGetDiagRec doesn't change the state of the statement, this is not a problem. if (SQL_SUCCEEDED(ret)) { state = ConvertToString(sqlstate); message = ConvertToString(message_text); @@ -55,7 +55,7 @@ void ACCESS_DIAGNOSTIC(std::string &state, std::string &message, SQLHANDLE handl } } -void DATA_CHECK(HSTMT &hstmt, SQLSMALLINT col_num, const std::string expected_content) { +void DATA_CHECK(HSTMT &hstmt, SQLSMALLINT col_num, const std::string &expected_content) { SQLCHAR content[256]; SQLLEN content_len; @@ -86,7 +86,7 @@ void METADATA_CHECK(HSTMT &hstmt, SQLUSMALLINT col_num, const std::string &expec ODBC_CHECK(ret, "SQLDescribeCol"); if (!expected_col_name.empty()) { - REQUIRE(expected_col_name.compare(ConvertToString(col_name)) == 0); + REQUIRE(expected_col_name == ConvertToString(col_name)); } if (expected_col_name_len) { REQUIRE(col_name_len == expected_col_name_len); @@ -111,17 +111,17 @@ void DRIVER_CONNECT_TO_DATABASE(SQLHANDLE &env, SQLHANDLE &dbc, const std::strin SQLCHAR str[1024]; SQLSMALLINT strl; auto tmp = getenv("COMMON_CONNECTION_STRING_FOR_REGRESSION_TEST"); - std::string envvar = tmp ? tmp : ""; + std::string env_var = tmp ? tmp : ""; - if (!envvar.empty()) { + if (!env_var.empty()) { if (!extra_params.empty()) { - dsn = "DSN=" + default_dsn + ";" + extra_params + ";" + envvar + ";" + extra_params; + dsn = extra_params + ";" + env_var + ";" + extra_params; } else { - dsn = "DSN=" + default_dsn + ";" + envvar; + dsn = "DSN=" + default_dsn + ";" + env_var; } } else { if (!extra_params.empty()) { - dsn = "DSN=" + default_dsn + ";" + extra_params; + dsn = extra_params; } else { dsn = "DSN=" + default_dsn; } @@ -185,7 +185,7 @@ void InitializeDatabase(HSTMT &hstmt) { EXEC_SQL(hstmt, "DROP TABLE IF EXISTS bytea_table;"); EXEC_SQL(hstmt, "CREATE TABLE bytea_table (id integer, t blob);"); - EXEC_SQL(hstmt, "INSERT INTO bytea_table VALUES (1, '\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x10'::blob);"); + EXEC_SQL(hstmt, R"(INSERT INTO bytea_table VALUES (1, '\x01\x02\x03\x04\x05\x06\x07\x10'::blob);)"); EXEC_SQL(hstmt, "INSERT INTO bytea_table VALUES (2, 'bar');"); EXEC_SQL(hstmt, "INSERT INTO bytea_table VALUES (3, 'foobar');"); EXEC_SQL(hstmt, "INSERT INTO bytea_table VALUES (4, 'foo');"); @@ -222,7 +222,7 @@ SQLCHAR *ConvertToSQLCHAR(const std::string &str) { } std::string ConvertToString(SQLCHAR *str) { - return std::string(reinterpret_cast(str)); + return {reinterpret_cast(str)}; } const char *ConvertToCString(SQLCHAR *str) { @@ -246,4 +246,17 @@ std::string ConvertHexToString(SQLCHAR val[16], int precision) { return ss.str().substr(0, precision); } +std::string GetTesterDirectory() { + duckdb::unique_ptr fs = duckdb::FileSystem::CreateLocal(); + std::string current_directory = fs->GetWorkingDirectory() + "/test/sql/storage_version/storage_version.db"; + if (!fs->FileExists(current_directory)) { + auto s = fs->GetWorkingDirectory() + "/../../../../test/sql/storage_version/storage_version.db"; + if (!fs->FileExists(s)) { + throw std::runtime_error("Could not find storage_version.db file."); + } + return s; + } + return current_directory; +} + } // namespace odbc_test diff --git a/tools/odbc/test/connect_helpers.cpp b/tools/odbc/test/connect_helpers.cpp new file mode 100644 index 000000000000..a323d7a82b9a --- /dev/null +++ b/tools/odbc/test/connect_helpers.cpp @@ -0,0 +1,37 @@ +#include "include/connect_helpers.h" + +#include +#include +using namespace odbc_test; + +void CheckConfig(SQLHANDLE &dbc, const std::string &setting, const std::string &expected_content) { + HSTMT hstmt = SQL_NULL_HSTMT; + EXECUTE_AND_CHECK("SQLAllocHandle (HSTMT)", SQLAllocHandle, SQL_HANDLE_STMT, dbc, &hstmt); + + // Check if the setting is successfully changed + EXECUTE_AND_CHECK("SQLExecDirect (select current_setting('" + setting + "'))", SQLExecDirect, hstmt, + ConvertToSQLCHAR("select current_setting('" + setting + "')"), SQL_NTS); + + // Fetch the first row + EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt); + DATA_CHECK(hstmt, 1, duckdb::StringUtil::Lower(expected_content)); + + // Free the statement handle + EXECUTE_AND_CHECK("SQLFreeStmt (SQL_CLOSE)", SQLFreeStmt, hstmt, SQL_CLOSE); +} + +void CheckDatabase(SQLHANDLE &dbc) { + HSTMT hstmt = SQL_NULL_HSTMT; + EXECUTE_AND_CHECK("SQLAllocHandle (HSTMT)", SQLAllocHandle, SQL_HANDLE_STMT, dbc, &hstmt); + + // Select * from customers + EXECUTE_AND_CHECK("SQLExecDirect (FROM string_values)", SQLExecDirect, hstmt, + ConvertToSQLCHAR("FROM string_values"), SQL_NTS); + + // Fetch the first row and check the data + EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt); + DATA_CHECK(hstmt, 1, "hello world"); + + // Free the statement handle + EXECUTE_AND_CHECK("SQLFreeStmt (SQL_CLOSE)", SQLFreeStmt, hstmt, SQL_CLOSE); +} diff --git a/tools/odbc/test/common.h b/tools/odbc/test/include/common.h similarity index 97% rename from tools/odbc/test/common.h rename to tools/odbc/test/include/common.h index ed67484b7525..0aa3a3e84753 100644 --- a/tools/odbc/test/common.h +++ b/tools/odbc/test/include/common.h @@ -19,7 +19,7 @@ struct MetadataData { SQLSMALLINT col_type; }; -void ODBC_CHECK(SQLRETURN ret, std::string func); +void ODBC_CHECK(SQLRETURN ret, const std::string &func); /** * @brief @@ -55,7 +55,7 @@ void ACCESS_DIAGNOSTIC(std::string &state, std::string &message, SQLHANDLE handl * @param col_num The number of the column in the result set * @param expected_content The expected content of the column */ -void DATA_CHECK(HSTMT &hstmt, SQLSMALLINT col_num, const std::string expected_content); +void DATA_CHECK(HSTMT &hstmt, SQLSMALLINT col_num, const std::string &expected_content); /** * @brief @@ -124,6 +124,8 @@ SQLPOINTER ConvertToSQLPOINTER(uint64_t ptr); SQLPOINTER ConvertToSQLPOINTER(const char *str); std::string ConvertHexToString(SQLCHAR val[16], int precision); +std::string GetTesterDirectory(); + } // namespace odbc_test #endif // ODBC_TEST_COMMON_H diff --git a/tools/odbc/test/include/connect_helpers.h b/tools/odbc/test/include/connect_helpers.h new file mode 100644 index 000000000000..e3d43bfaf8cd --- /dev/null +++ b/tools/odbc/test/include/connect_helpers.h @@ -0,0 +1,12 @@ +#ifndef DUCKDB_CONNECT_HELPERS_H +#define DUCKDB_CONNECT_HELPERS_H + +#include "common.h" + +// Checks if config is correctly set +void CheckConfig(SQLHANDLE &dbc, const std::string &setting, const std::string &expected_content); + +// Check if database is correctly set +void CheckDatabase(SQLHANDLE &dbc); + +#endif // DUCKDB_CONNECT_HELPERS_H diff --git a/tools/odbc/test/psql_supported_tests b/tools/odbc/test/psql_supported_tests deleted file mode 100644 index 2cff0ad34f0c..000000000000 --- a/tools/odbc/test/psql_supported_tests +++ /dev/null @@ -1,16 +0,0 @@ -alter-test -bindcol-test -boolsaschar-test -catalogfunctions-test -colattribute-test -connect-test -cte-test -cursor-commit-test -declare-fetch-block-test -dataatexecution-test -diagnostic-test -multicolumn-param-bind-test -numeric-test -quotes-test -result-conversions-test -select-test diff --git a/tools/odbc/test/run_psqlodbc_test.py b/tools/odbc/test/run_psqlodbc_test.py deleted file mode 100644 index 5c6f73444197..000000000000 --- a/tools/odbc/test/run_psqlodbc_test.py +++ /dev/null @@ -1,167 +0,0 @@ -import argparse -import os -import platform -import shutil -import sys - -so_suffix = '.dylib' if platform.system() == 'Darwin' else '.so' - -parser = argparse.ArgumentParser(description='Run the psqlodbc program.') -parser.add_argument( - '--build_psqlodbc', dest='build_psqlodbc', action='store_const', const=True, help='clone and build psqlodbc' -) -parser.add_argument( - '--psqlodbc', - dest='psqlodbcdir', - default=os.path.join(os.getcwd(), 'psqlodbc'), - help='path of the psqlodbc directory', -) -parser.add_argument('--odbc_lib', dest='odbclib', default=None, help='path of the odbc .so or .dylib file') -parser.add_argument( - '--release', - dest='release', - action='store_const', - const=True, - help='Specify to use release mode instead of debug mode', -) -parser.add_argument( - '--overwrite', - dest='overwrite', - action='store_const', - const=True, - help='Whether or not to overwrite the ~/.odbc.ini and ~/.odbcinst.ini files', -) -parser.add_argument( - '--fix', - dest='fix', - action='store_const', - const=True, - help='Whether or not to fix tests, or whether to just run them', -) -parser.add_argument('--test', dest='test', default=None, help='A specific test to run (if any)') -parser.add_argument('--trace_file', dest='tracefile', default='/tmp/odbctrace', help='Path to tracefile of ODBC script') -parser.add_argument('--duckdb_dir', dest='duckdbdir', default=os.getcwd(), help='Path to DuckDB directory') -parser.add_argument('--no-trace', dest='notrace', action='store_const', const=True, help='Do not print trace') -parser.add_argument('--no-exit', dest='noexit', action='store_const', const=True, help='Do not exit on test failure') -parser.add_argument( - '--debugger', - dest='debugger', - default=None, - choices=['lldb', 'gdb'], - help='Debugger to attach (if any). If set, will set up the environment and give you a command to run with the debugger.', -) - -args = parser.parse_args() - -build_config = 'debug' -if args.release is not None: - build_config = 'release' - -odbc_build_dir = os.path.join(args.psqlodbcdir, 'build', build_config) -odbc_reset = os.path.join(odbc_build_dir, 'reset-db') -odbc_test = os.path.join(odbc_build_dir, 'psql_odbc_test') - - -def reset_db(): - try_remove(args.tracefile) - try_remove(os.path.join(args.psqlodbcdir, 'contrib_regression')) - try_remove(os.path.join(args.psqlodbcdir, 'contrib_regression.wal')) - - command = odbc_reset + f' < {args.psqlodbcdir}/sampletables.sql' - syscall(command, 'Failed to reset db') - - -def print_trace_and_exit(): - if args.notrace is None: - with open(args.tracefile, 'rb') as f: - print(f.read().decode('utf8', 'ignore')) - if args.noexit is None: - exit(1) - - -def syscall(arg, error, print_trace=True): - ret = os.system(arg) - if ret != 0: - print(error) - if print_trace: - print_trace_and_exit() - exit(1) - - -if args.build_psqlodbc is not None: - if not os.path.isdir('psqlodbc'): - syscall('git clone git@github.com:Mytherin/psqlodbc.git', 'Failed to clone psqlodbc', False) - else: - syscall('(cd psqlodbc && git pull)', 'Failed to pull latest changes for psqlodbc') - syscall(f'(cd psqlodbc && make {build_config})', 'Failed to build psqlodbc', False) - -if not os.path.isdir(args.psqlodbcdir): - print(f'ERROR: Could not find path to psqlodbc {args.psqlodbcdir}, specify the --psqlodbc [dir] option') - exit(1) - -if args.overwrite: - odbc_lib = args.odbclib - if odbc_lib is None: - odbc_lib = os.path.join(os.getcwd(), 'build', build_config, 'tools', 'odbc', 'libduckdb_odbc' + so_suffix) - if not os.path.isfile(odbc_lib): - print(f'ERROR: Could not find the library file {odbc_lib}, specify the --odbc_lib [file] option') - exit(1) - - odbcinst_ini = f'''[ODBC] -Trace = yes -TraceFile = {args.tracefile} - -[DuckDB Driver] -Driver = {odbc_lib} -''' - - odbc_ini = f'''[DuckDB] -Driver = DuckDB Driver -Database=:memory: -''' - user_dir = os.path.expanduser('~') - with open(os.path.join(user_dir, '.odbcinst.ini'), 'w+') as f: - f.write(odbcinst_ini) - - with open(os.path.join(user_dir, '.odbc.ini'), 'w+') as f: - f.write(odbc_ini) - - -def try_remove(fpath): - try: - os.remove(fpath) - except: - pass - - -os.chdir(args.psqlodbcdir) - -os.environ['PSQLODBC_TEST_DSN'] = 'DuckDB' - -reset_db() - -test_list_file = os.path.join(args.duckdbdir, 'tools', 'odbc', 'test', 'psql_supported_tests') -test_list = [] -if args.test is None: - # all tests: read from list - with open(test_list_file, 'r') as f: - test_list = [x.strip() for x in f.readlines() if len(x.strip()) > 0] -else: - test_list = [args.test] - -odbc_test = os.path.join(odbc_build_dir, 'psql_odbc_test') - -if args.debugger is not None: - argstart = '--args' - if args.debugger == 'lldb': - argstart = '--' - print("=============================================") - print("Run the following command to start a debugger") - print("=============================================") - print(f"{args.debugger} {argstart} {odbc_test} {test_list[0]}") - exit(0) - -for test in test_list: - fix_suffix = ' --fix' if args.fix is not None else '' - print(f"Running test {test}") - syscall(odbc_test + ' ' + test + fix_suffix, f"Failed to run test {test}") diff --git a/tools/odbc/test/run_psqlodbc_tests.sh b/tools/odbc/test/run_psqlodbc_tests.sh deleted file mode 100755 index 00c0a9f2ff9d..000000000000 --- a/tools/odbc/test/run_psqlodbc_tests.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -set -e - -#echo -e "[ODBC]\nTrace = yes\nTraceFile = /tmp/odbctrace\n\n[DuckDB Driver]\nDriver = "$(pwd)"/build/debug/tools/odbc/libduckdb_odbc.so" > ~/.odbcinst.ini -#echo -e "[DuckDB]\nDriver = DuckDB Driver\nDatabase=:memory:\n" > ~/.odbc.ini - -BASE_DIR=$(dirname $0) - -#Configuring ODBC files -$BASE_DIR/../linux_setup/unixodbc_setup.sh -u -db :memory: -D $(pwd)/build/debug/tools/odbc/libduckdb_odbc.so - -export PSQLODBC_TEST_DSN="DuckDB" - -TRACE_FILE=/tmp/odbctrace -BASE_DUCKDB_DIR=$(pwd) -cd psqlodbc -export PSQLODBC_DIR=$(pwd) - -# creating contrib_regression database used by some tests -rm -f contrib_regression -rm -f contrib_regression.wal -./build/debug/reset-db < sampletables.sql -if [[ $? != 0 ]]; then - cat $TRACE_FILE - exit 1 -fi - -# running supported tests -while read test_file -do - ./build/debug/psql_odbc_test $test_file - if [[ $? != 0 ]]; then - cat $TRACE_FILE - exit 1 - fi - # clean odbc trace file - rm -f $TRACE_FILE -done < ${BASE_DUCKDB_DIR}/tools/odbc/test/psql_supported_tests - diff --git a/tools/odbc/test/test.csv b/tools/odbc/test/test.csv deleted file mode 100644 index bcd36ae82adb..000000000000 --- a/tools/odbc/test/test.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,11,0 -1.1,12,0 -1.2,13,1 diff --git a/tools/odbc/test/tests/alter.cpp b/tools/odbc/test/tests/alter.cpp index 1a4d10eb644b..8916c9f04bae 100644 --- a/tools/odbc/test/tests/alter.cpp +++ b/tools/odbc/test/tests/alter.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/basic_usage.cpp b/tools/odbc/test/tests/basic_usage.cpp index ace754d35acf..34b641c37bdc 100644 --- a/tools/odbc/test/tests/basic_usage.cpp +++ b/tools/odbc/test/tests/basic_usage.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/bind_col.cpp b/tools/odbc/test/tests/bind_col.cpp index 04a5588c55dc..aa3ed4c1e462 100644 --- a/tools/odbc/test/tests/bind_col.cpp +++ b/tools/odbc/test/tests/bind_col.cpp @@ -1,5 +1,6 @@ +#include "common.h" + #include -#include "../common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/bools_as_char.cpp b/tools/odbc/test/tests/bools_as_char.cpp index 873b281a5a27..b153479d2a16 100644 --- a/tools/odbc/test/tests/bools_as_char.cpp +++ b/tools/odbc/test/tests/bools_as_char.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/catalog_functions.cpp b/tools/odbc/test/tests/catalog_functions.cpp index edda35b21185..3439cd8cf76c 100644 --- a/tools/odbc/test/tests/catalog_functions.cpp +++ b/tools/odbc/test/tests/catalog_functions.cpp @@ -1,6 +1,7 @@ +#include "common.h" + #include #include -#include "../common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/col_attribute/utils.h b/tools/odbc/test/tests/col_attribute/utils.h index 74fb2db0a71f..0de7458a716d 100644 --- a/tools/odbc/test/tests/col_attribute/utils.h +++ b/tools/odbc/test/tests/col_attribute/utils.h @@ -1,7 +1,7 @@ #ifndef DUCKDB_UTILS_H #define DUCKDB_UTILS_H -#include "../../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/connect.cpp b/tools/odbc/test/tests/connect.cpp index fa2c9f752b17..5ff7f8d4141d 100644 --- a/tools/odbc/test/tests/connect.cpp +++ b/tools/odbc/test/tests/connect.cpp @@ -1,7 +1,115 @@ -#include "../common.h" +#include "connect_helpers.h" + +#include +#include using namespace odbc_test; +// Connect to database using SQLDriverConnect without a DSN +void ConnectWithoutDSN(SQLHANDLE &env, SQLHANDLE &dbc) { + std::string conn_str = ""; + SQLCHAR str[1024]; + SQLSMALLINT strl; + + SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, nullptr, &env); + REQUIRE(ret == SQL_SUCCESS); + + EXECUTE_AND_CHECK("SQLSetEnvAttr (SQL_ATTR_ODBC_VERSION ODBC3)", SQLSetEnvAttr, env, SQL_ATTR_ODBC_VERSION, + ConvertToSQLPOINTER(SQL_OV_ODBC3), 0); + + EXECUTE_AND_CHECK("SQLAllocHandle (DBC)", SQLAllocHandle, SQL_HANDLE_DBC, env, &dbc); + + EXECUTE_AND_CHECK("SQLDriverConnect", SQLDriverConnect, dbc, nullptr, ConvertToSQLCHAR(conn_str.c_str()), SQL_NTS, + str, sizeof(str), &strl, SQL_DRIVER_COMPLETE); +} + +// Connect with incorrect params +void ConnectWithIncorrectParam(std::string param) { + SQLHANDLE env; + SQLHANDLE dbc; + std::string dsn = "DSN=duckdbmemory;" + param; + SQLCHAR str[1024]; + SQLSMALLINT strl; + + SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, nullptr, &env); + REQUIRE(ret == SQL_SUCCESS); + + EXECUTE_AND_CHECK("SQLSetEnvAttr (SQL_ATTR_ODBC_VERSION ODBC3)", SQLSetEnvAttr, env, SQL_ATTR_ODBC_VERSION, + ConvertToSQLPOINTER(SQL_OV_ODBC3), 0); + + EXECUTE_AND_CHECK("SQLAllocHandle (DBC)", SQLAllocHandle, SQL_HANDLE_DBC, env, &dbc); + + ret = SQLDriverConnect(dbc, nullptr, ConvertToSQLCHAR(dsn.c_str()), SQL_NTS, str, sizeof(str), &strl, + SQL_DRIVER_COMPLETE); + REQUIRE(ret == SQL_SUCCESS_WITH_INFO); + + std::string state; + std::string message; + ACCESS_DIAGNOSTIC(state, message, dbc, SQL_HANDLE_DBC); + REQUIRE(duckdb::StringUtil::Contains(message, "Invalid keyword")); + REQUIRE(duckdb::StringUtil::Contains(message, "Did you mean: ")); + + DISCONNECT_FROM_DATABASE(env, dbc); +} + +// Test sending incorrect parameters to SQLDriverConnect +static void TestIncorrectParams() { + ConnectWithIncorrectParam("UnsignedAttribute=true"); + ConnectWithIncorrectParam("dtabase=test.duckdb"); + ConnectWithIncorrectParam("this_doesnt_exist=?"); +} + +// Test setting a database from the connection string +static void TestSettingDatabase() { + SQLHANDLE env; + SQLHANDLE dbc; + + auto db_path = "Database=" + GetTesterDirectory(); + + // Connect to database using a connection string with a database path + DRIVER_CONNECT_TO_DATABASE(env, dbc, db_path); + + // Check that the connection was successful + CheckDatabase(dbc); + + // Disconnect from the database + DISCONNECT_FROM_DATABASE(env, dbc); +} + +// Connect with connection string that sets a specific config then checks if correctly set +static void SetConfig(const std::string ¶m, const std::string &setting, const std::string &expected_content) { + SQLHANDLE env; + SQLHANDLE dbc; + + DRIVER_CONNECT_TO_DATABASE(env, dbc, param); + + CheckConfig(dbc, setting, expected_content); + + // Disconnect from the database + DISCONNECT_FROM_DATABASE(env, dbc); +} + +// Test setting different configs through the connection string +static void TestSettingConfigs() { + // Test setting allow_unsigned_extensions + SetConfig("Database=" + GetTesterDirectory() + "test.duckdb;" + "allow_unsigned_extensions=true", + "allow_unsigned_extensions", "true"); + + SetConfig("Database=" + GetTesterDirectory() + "test.duckdb;" + "allow_unsigned_extensions=false", + "allow_unsigned_extensions", "false"); + + SetConfig("allow_unsigned_extensions=true", "allow_unsigned_extensions", "true"); + + SetConfig("allow_unsigned_extensions=false", "allow_unsigned_extensions", "false"); + + // Test setting access_mode + SetConfig("Database=" + GetTesterDirectory() + "test.duckdb;" + "access_mode=READ_ONLY", "access_mode", + "READ_ONLY"); + + SetConfig("Database=" + GetTesterDirectory() + "test.duckdb;" + "access_mode=READ_WRITE", "access_mode", + "READ_WRITE"); +} + TEST_CASE("Test SQLConnect and SQLDriverConnect", "[odbc]") { SQLHANDLE env; SQLHANDLE dbc; @@ -13,6 +121,15 @@ TEST_CASE("Test SQLConnect and SQLDriverConnect", "[odbc]") { // Connect to the database using SQLDriverConnect DRIVER_CONNECT_TO_DATABASE(env, dbc, ""); DISCONNECT_FROM_DATABASE(env, dbc); + + TestIncorrectParams(); + + TestSettingDatabase(); + + TestSettingConfigs(); + + ConnectWithoutDSN(env, dbc); + DISCONNECT_FROM_DATABASE(env, dbc); } TEST_CASE("Test user_agent - in-memory database", "[odbc][useragent]") { diff --git a/tools/odbc/test/tests/connect_with_ini.cpp b/tools/odbc/test/tests/connect_with_ini.cpp new file mode 100644 index 000000000000..8cb4e8561016 --- /dev/null +++ b/tools/odbc/test/tests/connect_with_ini.cpp @@ -0,0 +1,28 @@ +#include "connect_helpers.h" + +using namespace odbc_test; + +// If running this test on macOS you need to run the following script before executing the test +// tools/odbc/scripts/create_ini_file.sh + +// Connect to the database using the ini file +TEST_CASE("Test SQLConnect with Ini File", "[odbc]") { +#if defined ODBC_LINK_ODBCINST || defined WIN32 + // Connect to the database using the ini file + SQLHANDLE env; + SQLHANDLE dbc; + DRIVER_CONNECT_TO_DATABASE(env, dbc, "DSN=DuckDB"); + + // Check that the database is set + CheckDatabase(dbc); + + // Check that database is read only + CheckConfig(dbc, "access_mode", "read_only"); + + // Check that allow_unsigned_extensions is set + CheckConfig(dbc, "allow_unsigned_extensions", "true"); + + // Disconnect from the database + DISCONNECT_FROM_DATABASE(env, dbc); +#endif +} diff --git a/tools/odbc/test/tests/cte.cpp b/tools/odbc/test/tests/cte.cpp index 1ac08723e55a..02b71e2261bc 100644 --- a/tools/odbc/test/tests/cte.cpp +++ b/tools/odbc/test/tests/cte.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; @@ -41,14 +41,17 @@ static void PreparedWithTest(HSTMT &hstmt) { EXECUTE_AND_CHECK("SQLFreeStmt(CLOSE)", SQLFreeStmt, hstmt, SQL_CLOSE); } -static void TestCTEandSetFetchEnv(const char *extra_params) { +/** + * Runs two WITH queries and checks the results + */ +TEST_CASE("Test CTE", "[odbc]") { SQLHANDLE env; SQLHANDLE dbc; HSTMT hstmt = SQL_NULL_HSTMT; // Connect to the database using SQLDriverConnect - DRIVER_CONNECT_TO_DATABASE(env, dbc, extra_params); + CONNECT_TO_DATABASE(env, dbc); // Allocate a statement handle EXECUTE_AND_CHECK("SQLAllocHandle (HSTMT)", SQLAllocHandle, SQL_HANDLE_STMT, dbc, &hstmt); @@ -62,15 +65,3 @@ static void TestCTEandSetFetchEnv(const char *extra_params) { DISCONNECT_FROM_DATABASE(env, dbc); } - -/** - * Runs two WITH queries both with declare fetch on and off, which should not affect the result - * because the queries are not using cursors. - */ -TEST_CASE("Test CTE", "[odbc]") { - // First test with UseDeclareFetch=0 - TestCTEandSetFetchEnv("UseDeclareFetch=0"); - - // Then test with UseDeclareFetch=1 - TestCTEandSetFetchEnv("UseDeclareFetch=1;Fetch=1"); -} diff --git a/tools/odbc/test/tests/cursor_commit.cpp b/tools/odbc/test/tests/cursor_commit.cpp index ea0c86b4818b..61de1d4469af 100644 --- a/tools/odbc/test/tests/cursor_commit.cpp +++ b/tools/odbc/test/tests/cursor_commit.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/data_execution.cpp b/tools/odbc/test/tests/data_execution.cpp index 1d24e3d95200..f5b91d398997 100644 --- a/tools/odbc/test/tests/data_execution.cpp +++ b/tools/odbc/test/tests/data_execution.cpp @@ -1,4 +1,5 @@ -#include "../common.h" +#include "common.h" +#include using namespace odbc_test; @@ -129,3 +130,64 @@ TEST_CASE("Test SQLBindParameter, SQLParamData, and SQLPutData", "[odbc]") { DISCONNECT_FROM_DATABASE(env, dbc); } + +// Execute a pivot statement +TEST_CASE("PIVOT statement", "[odbc]") { + SQLHANDLE env; + SQLHANDLE dbc; + + HSTMT hstmt = SQL_NULL_HSTMT; + + // Connect to the database using SQLConnect + CONNECT_TO_DATABASE(env, dbc); + + // Allocate a statement handle + EXECUTE_AND_CHECK("SQLAllocHandle (HSTMT)", SQLAllocHandle, SQL_HANDLE_STMT, dbc, &hstmt); + + EXEC_SQL(hstmt, "CREATE TABLE Cities (Country VARCHAR, Name VARCHAR, Year INT, Population INT);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2000, 1005);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2010, 1065);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('NL', 'Amsterdam', 2020, 1158);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'Seattle', 2000, 564);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'Seattle', 2010, 608);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'Seattle', 2020, 738);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'New York City', 2000, 8015);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'New York City', 2010, 8175);"); + EXEC_SQL(hstmt, "INSERT INTO Cities VALUES ('US', 'New York City', 2020, 8772);"); + + // Pivot the table + auto ret = SQLExecDirect( + hstmt, (SQLCHAR *)"SELECT * FROM (PIVOT Cities ON Year USING sum(Population) order by Country, Name);", + SQL_NTS); + if (ret != SQL_SUCCESS) { + std::string state; + std::string message; + ACCESS_DIAGNOSTIC(state, message, hstmt, SQL_HANDLE_STMT); + FAIL("SQLExecDirect failed with state: " + state + " and message: " + message); + } + + EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt); + DATA_CHECK(hstmt, 1, "NL"); + DATA_CHECK(hstmt, 2, "Amsterdam"); + DATA_CHECK(hstmt, 3, "1005"); + DATA_CHECK(hstmt, 4, "1065"); + DATA_CHECK(hstmt, 5, "1158"); + EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt); + DATA_CHECK(hstmt, 1, "US"); + DATA_CHECK(hstmt, 2, "New York City"); + DATA_CHECK(hstmt, 3, "8015"); + DATA_CHECK(hstmt, 4, "8175"); + DATA_CHECK(hstmt, 5, "8772"); + EXECUTE_AND_CHECK("SQLFetch", SQLFetch, hstmt); + DATA_CHECK(hstmt, 1, "US"); + DATA_CHECK(hstmt, 2, "Seattle"); + DATA_CHECK(hstmt, 3, "564"); + DATA_CHECK(hstmt, 4, "608"); + DATA_CHECK(hstmt, 5, "738"); + + // Free the statement handle + EXECUTE_AND_CHECK("SQLFreeStmt (HSTMT)", SQLFreeStmt, hstmt, SQL_CLOSE); + EXECUTE_AND_CHECK("SQLFreeHandle (HSTMT)", SQLFreeHandle, SQL_HANDLE_STMT, hstmt); + + DISCONNECT_FROM_DATABASE(env, dbc); +} diff --git a/tools/odbc/test/tests/declare_fetch_block.cpp b/tools/odbc/test/tests/declare_fetch_block.cpp index de777be899bf..41a4f4f60ed7 100644 --- a/tools/odbc/test/tests/declare_fetch_block.cpp +++ b/tools/odbc/test/tests/declare_fetch_block.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; @@ -134,33 +134,33 @@ static void FetchAbsolute(HSTMT &hstmt, ESize S) { EXECUTE_AND_CHECK("SQLFreeStmt(CLOSE)", SQLFreeStmt, hstmt, SQL_CLOSE); } -TEST_CASE("Test Using SQLFetchScroll with different orrientations", "[odbc]") { +TEST_CASE("Test Using SQLFetchScroll with different orientations", "[odbc]") { SQLHANDLE env; SQLHANDLE dbc; HSTMT hstmt = SQL_NULL_HSTMT; - // Perform the tests for both SMALL and LARGE tables and different fetch sizes + // Perform the tests for both SMALL and LARGE tables ESize size[] = {SMALL, LARGE}; - for (int i = 0; i < 2; i++) { - // Connect to the database using SQLDriverConnect with UseDeclareFetch=1 - DRIVER_CONNECT_TO_DATABASE(env, dbc, "UseDeclareFetch=1"); + for (auto &i : size) { + // Connect to the database using SQLConnect + CONNECT_TO_DATABASE(env, dbc); // Allocate a statement handle EXECUTE_AND_CHECK("SQLAllocHandle (HSTMT)", SQLAllocHandle, SQL_HANDLE_STMT, dbc, &hstmt); // Create a temporary table and insert size[i] rows - TemporaryTable(hstmt, size[i]); + TemporaryTable(hstmt, i); - SQLINTEGER *id = new SQLINTEGER[TABLE_SIZE[size[i]]]; - SQLLEN *id_ind = new SQLLEN[TABLE_SIZE[size[i]]]; + auto *id = new SQLINTEGER[TABLE_SIZE[i]]; + auto *id_ind = new SQLLEN[TABLE_SIZE[i]]; // Block cursor, fetch rows in blocks of size[i] - BlockCursor(hstmt, size[i], id, id_ind); + BlockCursor(hstmt, i, id, id_ind); // Scroll cursor, fetch rows one by one - ScrollNext(hstmt, size[i]); + ScrollNext(hstmt, i); // Fetch rows using SQL_FETCH_ABSOLUTE - FetchAbsolute(hstmt, size[i]); + FetchAbsolute(hstmt, i); delete[] id; delete[] id_ind; diff --git a/tools/odbc/test/tests/diagnostics.cpp b/tools/odbc/test/tests/diagnostics.cpp index adadc7876d39..690907762fb5 100644 --- a/tools/odbc/test/tests/diagnostics.cpp +++ b/tools/odbc/test/tests/diagnostics.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/multicolumn_param_bind.cpp b/tools/odbc/test/tests/multicolumn_param_bind.cpp index 8934dc5d723d..474a5d18c52d 100644 --- a/tools/odbc/test/tests/multicolumn_param_bind.cpp +++ b/tools/odbc/test/tests/multicolumn_param_bind.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/numeric.cpp b/tools/odbc/test/tests/numeric.cpp index 5e9884071e5b..88432343efde 100644 --- a/tools/odbc/test/tests/numeric.cpp +++ b/tools/odbc/test/tests/numeric.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/quotes.cpp b/tools/odbc/test/tests/quotes.cpp index 10a3402981dc..b99a9885f046 100644 --- a/tools/odbc/test/tests/quotes.cpp +++ b/tools/odbc/test/tests/quotes.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/result_conversion.cpp b/tools/odbc/test/tests/result_conversion.cpp index 0ab0bddc035c..ace672e6d0ad 100644 --- a/tools/odbc/test/tests/result_conversion.cpp +++ b/tools/odbc/test/tests/result_conversion.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/row_wise_fetching.cpp b/tools/odbc/test/tests/row_wise_fetching.cpp index 07d3838feeb1..e607394b5adb 100644 --- a/tools/odbc/test/tests/row_wise_fetching.cpp +++ b/tools/odbc/test/tests/row_wise_fetching.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/select.cpp b/tools/odbc/test/tests/select.cpp index bd3d8ab58ad5..6cafd4697338 100644 --- a/tools/odbc/test/tests/select.cpp +++ b/tools/odbc/test/tests/select.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/odbc/test/tests/set_attr.cpp b/tools/odbc/test/tests/set_attr.cpp index f706ca51860b..36b8154f2ead 100644 --- a/tools/odbc/test/tests/set_attr.cpp +++ b/tools/odbc/test/tests/set_attr.cpp @@ -1,4 +1,4 @@ -#include "../common.h" +#include "common.h" using namespace odbc_test; diff --git a/tools/pythonpkg/README.md b/tools/pythonpkg/README.md index f9a507ac2263..09f65bfeb9f6 100644 --- a/tools/pythonpkg/README.md +++ b/tools/pythonpkg/README.md @@ -107,6 +107,28 @@ pytest tests/stubs All the above should be done in a virtualenv. +## Frequently encountered issue with extensions: + +If you are faced with an error on `import duckdb`: +``` +Traceback (most recent call last): + File "", line 1, in + File "/usr/bin/python3/site-packages/duckdb/__init__.py", line 4, in + import duckdb.functional as functional + File "/usr/bin/python3/site-packages/duckdb/functional/__init__.py", line 1, in + from duckdb.duckdb.functional import ( +ImportError: dlopen(/usr/bin/python3/site-packages/duckdb/duckdb.cpython-311-darwin.so, 0x0002): symbol not found in flat namespace '_MD5_Final' +``` + +When building DuckDB it outputs which extensions are linked into DuckDB, the python package does not deal with linked in extensions very well. +The output looks something like this: +`-- Extensions linked into DuckDB: [json, fts, tpcds, tpch, parquet, icu, httpfs]` + +`httpfs` should not be in that list, among others. +Refer to `extension/extension_config_local.cmake` or the other `*.cmake` files and make sure you add DONT_LINK to the problematic extension. +`tools/pythonpkg/duckdb_extension_config.cmake` contains the default list of extensions built for the python package +Anything that is linked that is not listed there should be considered problematic. + ## Clang-tidy and CMakeLists The pythonpkg does not use the CMakeLists for compilation, for that it uses pip and `package_build.py` mostly. diff --git a/tools/pythonpkg/duckdb-stubs/__init__.pyi b/tools/pythonpkg/duckdb-stubs/__init__.pyi index 39c997782748..891a57717b08 100644 --- a/tools/pythonpkg/duckdb-stubs/__init__.pyi +++ b/tools/pythonpkg/duckdb-stubs/__init__.pyi @@ -319,8 +319,8 @@ class DuckDBPyConnection: def string_type(self, collation: str = "") -> DuckDBPyType: ... def enum_type(self, name: str, type: DuckDBPyType, values: List[Any]) -> DuckDBPyType: ... def decimal_type(self, width: int, scale: int) -> DuckDBPyType: ... - def array_type(self, type: DuckDBPyType) -> DuckDBPyType: ... def list_type(self, type: DuckDBPyType) -> DuckDBPyType: ... + def array_type(self, type: DuckDBPyType, size: int) -> DuckDBPyType: ... def map_type(self, key: DuckDBPyType, value: DuckDBPyType) -> DuckDBPyType: ... def __enter__(self) -> DuckDBPyConnection: ... def __exit__(self, exc_type: object, exc: object, traceback: object) -> None: ... @@ -712,6 +712,6 @@ def union_type(members: Union[Dict[str, DuckDBPyType], List[str]], connection: D def string_type(collation: str = "", connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... def enum_type(name: str, type: DuckDBPyType, values: List[Any], connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... def decimal_type(width: int, scale: int, connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... -def array_type(type: DuckDBPyType, connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... +def array_type(type: DuckDBPyType, size: int, connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... def list_type(type: DuckDBPyType, connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... def map_type(key: DuckDBPyType, value: DuckDBPyType, connection: DuckDBPyConnection = ...) -> DuckDBPyType: ... diff --git a/tools/pythonpkg/duckdb/experimental/spark/conf.py b/tools/pythonpkg/duckdb/experimental/spark/conf.py index 52669f3f5e53..11680a9a8ac6 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/conf.py +++ b/tools/pythonpkg/duckdb/experimental/spark/conf.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Optional, List, Tuple +from typing import Optional, List, Tuple from duckdb.experimental.spark.exception import ContributionsAcceptedError diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/dataframe.py b/tools/pythonpkg/duckdb/experimental/spark/sql/dataframe.py index 631b75c95003..bf3fe328359d 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/dataframe.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/dataframe.py @@ -3,10 +3,8 @@ TYPE_CHECKING, Any, Callable, - Dict, List, Optional, - Sequence, Tuple, Union, cast, @@ -16,6 +14,7 @@ import duckdb from duckdb import ColumnExpression, Expression, StarExpression +from ._typing import ColumnOrName from ..errors import PySparkTypeError from ..exception import ContributionsAcceptedError from .column import Column @@ -38,7 +37,7 @@ def __init__(self, relation: duckdb.DuckDBPyRelation, session: "SparkSession"): self.relation = relation self.session = session self._schema = None - if self.relation != None: + if self.relation is not None: self._schema = duckdb_to_spark_schema(self.relation.columns, self.relation.types) def show(self, **kwargs) -> None: diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/functions.py b/tools/pythonpkg/duckdb/experimental/spark/sql/functions.py index 2d54383528c3..a15d64b37085 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/functions.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/functions.py @@ -386,3 +386,464 @@ def transform( +--------------+ """ raise NotImplementedError + + +def concat_ws(sep: str, *cols: "ColumnOrName") -> "Column": + """ + Concatenates multiple input string columns together into a single string column, + using the given separator. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + sep : str + words separator. + cols : :class:`~pyspark.sql.Column` or str + list of columns to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + string of concatenated words. + + Examples + -------- + >>> df = spark.createDataFrame([('abcd','123')], ['s', 'd']) + >>> df.select(concat_ws('-', df.s, df.d).alias('s')).collect() + [Row(s='abcd-123')] + """ + cols = [_to_column(expr) for expr in cols] + return _invoke_function( + "concat_ws", ConstantExpression(sep), *cols + ) + + +def lower(col: "ColumnOrName") -> Column: + """ + Converts a string expression to lower case. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + lower case values. + + Examples + -------- + >>> df = spark.createDataFrame(["Spark", "PySpark", "Pandas API"], "STRING") + >>> df.select(lower("value")).show() + +------------+ + |lower(value)| + +------------+ + | spark| + | pyspark| + | pandas api| + +------------+ + """ + return _invoke_function_over_columns("lower", col) + + +def ceil(col: "ColumnOrName") -> Column: + """ + Computes the ceiling of the given value. + + .. versionadded:: 1.4.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to compute on. + + Returns + ------- + :class:`~pyspark.sql.Column` + the column for computed results. + + Examples + -------- + >>> df = spark.range(1) + >>> df.select(ceil(lit(-0.1))).show() + +----------+ + |CEIL(-0.1)| + +----------+ + | 0| + +----------+ + """ + return _invoke_function_over_columns("ceil", col) + + +def ceiling(col: "ColumnOrName") -> Column: + return ceil(col) + + +def floor(col: "ColumnOrName") -> Column: + """ + Computes the floor of the given value. + + .. versionadded:: 1.4.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + column to find floor for. + + Returns + ------- + :class:`~pyspark.sql.Column` + nearest integer that is less than or equal to given value. + + Examples + -------- + >>> df = spark.range(1) + >>> df.select(floor(lit(2.5))).show() + +----------+ + |FLOOR(2.5)| + +----------+ + | 2| + +----------+ + """ + return _invoke_function_over_columns("floor", col) + + +def abs(col: "ColumnOrName") -> Column: + """ + Computes the absolute value. + + .. versionadded:: 1.3.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to compute on. + + Returns + ------- + :class:`~pyspark.sql.Column` + column for computed results. + + Examples + -------- + >>> df = spark.range(1) + >>> df.select(abs(lit(-1))).show() + +-------+ + |abs(-1)| + +-------+ + | 1| + +-------+ + """ + return _invoke_function_over_columns("abs", col) + + +def isnan(col: "ColumnOrName") -> Column: + """An expression that returns true if the column is NaN. + + .. versionadded:: 1.6.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to compute on. + + Returns + ------- + :class:`~pyspark.sql.Column` + True if value is NaN and False otherwise. + + Examples + -------- + >>> df = spark.createDataFrame([(1.0, float('nan')), (float('nan'), 2.0)], ("a", "b")) + >>> df.select("a", "b", isnan("a").alias("r1"), isnan(df.b).alias("r2")).show() + +---+---+-----+-----+ + | a| b| r1| r2| + +---+---+-----+-----+ + |1.0|NaN|false| true| + |NaN|2.0| true|false| + +---+---+-----+-----+ + """ + return _invoke_function_over_columns("isnan", col) + + +def isnull(col: "ColumnOrName") -> Column: + """An expression that returns true if the column is null. + + .. versionadded:: 1.6.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to compute on. + + Returns + ------- + :class:`~pyspark.sql.Column` + True if value is null and False otherwise. + + Examples + -------- + >>> df = spark.createDataFrame([(1, None), (None, 2)], ("a", "b")) + >>> df.select("a", "b", isnull("a").alias("r1"), isnull(df.b).alias("r2")).show() + +----+----+-----+-----+ + | a| b| r1| r2| + +----+----+-----+-----+ + | 1|NULL|false| true| + |NULL| 2| true|false| + +----+----+-----+-----+ + """ + return _invoke_function_over_columns("isnull", col) + + +def sqrt(col: "ColumnOrName") -> Column: + """ + Computes the square root of the specified float value. + + .. versionadded:: 1.3.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to compute on. + + Returns + ------- + :class:`~pyspark.sql.Column` + column for computed results. + + Examples + -------- + >>> df = spark.range(1) + >>> df.select(sqrt(lit(4))).show() + +-------+ + |SQRT(4)| + +-------+ + | 2.0| + +-------+ + """ + return _invoke_function_over_columns("sqrt", col) + + +def greatest(*cols: "ColumnOrName") -> Column: + """ + Returns the greatest value of the list of column names, skipping null values. + This function takes at least 2 parameters. It will return null if all parameters are null. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + columns to check for gratest value. + + Returns + ------- + :class:`~pyspark.sql.Column` + gratest value. + + Examples + -------- + >>> df = spark.createDataFrame([(1, 4, 3)], ['a', 'b', 'c']) + >>> df.select(greatest(df.a, df.b, df.c).alias("greatest")).collect() + [Row(greatest=4)] + """ + + if len(cols) < 2: + raise ValueError("greatest should take at least 2 columns") + + cols = [_to_column(expr) for expr in cols] + return _invoke_function("greatest", *cols) + + +def least(*cols: "ColumnOrName") -> Column: + """ + Returns the least value of the list of column names, skipping null values. + This function takes at least 2 parameters. It will return null if all parameters are null. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + cols : :class:`~pyspark.sql.Column` or str + column names or columns to be compared + + Returns + ------- + :class:`~pyspark.sql.Column` + least value. + + Examples + -------- + >>> df = spark.createDataFrame([(1, 4, 3)], ['a', 'b', 'c']) + >>> df.select(least(df.a, df.b, df.c).alias("least")).collect() + [Row(least=1)] + """ + if len(cols) < 2: + raise ValueError("least should take at least 2 columns") + + cols = [_to_column(expr) for expr in cols] + return _invoke_function("least", *cols) + + +def trim(col: "ColumnOrName") -> Column: + """ + Trim the spaces from left end for the specified string value. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + left trimmed values. + + Examples + -------- + >>> df = spark.createDataFrame([" Spark", "Spark ", " Spark"], "STRING") + >>> df.select(ltrim("value").alias("r")).withColumn("length", length("r")).show() + +-------+------+ + | r|length| + +-------+------+ + | Spark| 5| + |Spark | 7| + | Spark| 5| + +-------+------+ + """ + return _invoke_function_over_columns("trim", col) + + +def rtrim(col: "ColumnOrName") -> Column: + """ + Trim the spaces from right end for the specified string value. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + right trimmed values. + + Examples + -------- + >>> df = spark.createDataFrame([" Spark", "Spark ", " Spark"], "STRING") + >>> df.select(rtrim("value").alias("r")).withColumn("length", length("r")).show() + +--------+------+ + | r|length| + +--------+------+ + | Spark| 8| + | Spark| 5| + | Spark| 6| + +--------+------+ + """ + return _invoke_function_over_columns("rtrim", col) + + +def ltrim(col: "ColumnOrName") -> Column: + """ + Trim the spaces from left end for the specified string value. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + left trimmed values. + + Examples + -------- + >>> df = spark.createDataFrame([" Spark", "Spark ", " Spark"], "STRING") + >>> df.select(ltrim("value").alias("r")).withColumn("length", length("r")).show() + +-------+------+ + | r|length| + +-------+------+ + | Spark| 5| + |Spark | 7| + | Spark| 5| + +-------+------+ + """ + return _invoke_function_over_columns("ltrim", col) + + +def length(col: "ColumnOrName") -> Column: + """Computes the character length of string data or number of bytes of binary data. + The length of character data includes the trailing spaces. The length of binary data + includes binary zeros. + + .. versionadded:: 1.5.0 + + .. versionchanged:: 3.4.0 + Supports Spark Connect. + + Parameters + ---------- + col : :class:`~pyspark.sql.Column` or str + target column to work on. + + Returns + ------- + :class:`~pyspark.sql.Column` + length of the value. + + Examples + -------- + >>> spark.createDataFrame([('ABC ',)], ['a']).select(length('a').alias('length')).collect() + [Row(length=4)] + """ + return _invoke_function_over_columns("length", col) diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/group.py b/tools/pythonpkg/duckdb/experimental/spark/sql/group.py index 3e03f40bbdc4..e6502a1a7527 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/group.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/group.py @@ -16,12 +16,13 @@ # from ..exception import ContributionsAcceptedError -from typing import Callable, List, Optional, TYPE_CHECKING, overload, Dict, Union, cast, Tuple +from typing import Callable, TYPE_CHECKING, overload, Dict, Union from .column import Column from .session import SparkSession from .dataframe import DataFrame from .functions import _to_column +from ._typing import ColumnOrName if TYPE_CHECKING: from ._typing import LiteralType diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/readwriter.py b/tools/pythonpkg/duckdb/experimental/spark/sql/readwriter.py index e2f6f2df719d..990201cfedc9 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/readwriter.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/readwriter.py @@ -1,13 +1,14 @@ -from typing import TYPE_CHECKING, Iterable, List, Optional, Union, cast +from typing import TYPE_CHECKING, List, Optional, Union, cast from ..exception import ContributionsAcceptedError from .types import StructType -PrimitiveType = Union[bool, float, int, str] -OptionalPrimitiveType = Optional[PrimitiveType] from ..errors import PySparkNotImplementedError, PySparkTypeError +PrimitiveType = Union[bool, float, int, str] +OptionalPrimitiveType = Optional[PrimitiveType] + if TYPE_CHECKING: from duckdb.experimental.spark.sql.dataframe import DataFrame from duckdb.experimental.spark.sql.session import SparkSession @@ -340,92 +341,92 @@ def json( +---+------------+ """ - if schema != None: + if schema is not None: raise ContributionsAcceptedError("The 'schema' option is not supported") - if primitivesAsString != None: + if primitivesAsString is not None: raise ContributionsAcceptedError( "The 'primitivesAsString' option is not supported" ) - if prefersDecimal != None: + if prefersDecimal is not None: raise ContributionsAcceptedError( "The 'prefersDecimal' option is not supported" ) - if allowComments != None: + if allowComments is not None: raise ContributionsAcceptedError( "The 'allowComments' option is not supported" ) - if allowUnquotedFieldNames != None: + if allowUnquotedFieldNames is not None: raise ContributionsAcceptedError( "The 'allowUnquotedFieldNames' option is not supported" ) - if allowSingleQuotes != None: + if allowSingleQuotes is not None: raise ContributionsAcceptedError( "The 'allowSingleQuotes' option is not supported" ) - if allowNumericLeadingZero != None: + if allowNumericLeadingZero is not None: raise ContributionsAcceptedError( "The 'allowNumericLeadingZero' option is not supported" ) - if allowBackslashEscapingAnyCharacter != None: + if allowBackslashEscapingAnyCharacter is not None: raise ContributionsAcceptedError( "The 'allowBackslashEscapingAnyCharacter' option is not supported" ) - if mode != None: + if mode is not None: raise ContributionsAcceptedError("The 'mode' option is not supported") - if columnNameOfCorruptRecord != None: + if columnNameOfCorruptRecord is not None: raise ContributionsAcceptedError( "The 'columnNameOfCorruptRecord' option is not supported" ) - if dateFormat != None: + if dateFormat is not None: raise ContributionsAcceptedError("The 'dateFormat' option is not supported") - if timestampFormat != None: + if timestampFormat is not None: raise ContributionsAcceptedError( "The 'timestampFormat' option is not supported" ) - if multiLine != None: + if multiLine is not None: raise ContributionsAcceptedError("The 'multiLine' option is not supported") - if allowUnquotedControlChars != None: + if allowUnquotedControlChars is not None: raise ContributionsAcceptedError( "The 'allowUnquotedControlChars' option is not supported" ) - if lineSep != None: + if lineSep is not None: raise ContributionsAcceptedError("The 'lineSep' option is not supported") - if samplingRatio != None: + if samplingRatio is not None: raise ContributionsAcceptedError( "The 'samplingRatio' option is not supported" ) - if dropFieldIfAllNull != None: + if dropFieldIfAllNull is not None: raise ContributionsAcceptedError( "The 'dropFieldIfAllNull' option is not supported" ) - if encoding != None: + if encoding is not None: raise ContributionsAcceptedError("The 'encoding' option is not supported") - if locale != None: + if locale is not None: raise ContributionsAcceptedError("The 'locale' option is not supported") - if pathGlobFilter != None: + if pathGlobFilter is not None: raise ContributionsAcceptedError( "The 'pathGlobFilter' option is not supported" ) - if recursiveFileLookup != None: + if recursiveFileLookup is not None: raise ContributionsAcceptedError( "The 'recursiveFileLookup' option is not supported" ) - if modifiedBefore != None: + if modifiedBefore is not None: raise ContributionsAcceptedError( "The 'modifiedBefore' option is not supported" ) - if modifiedAfter != None: + if modifiedAfter is not None: raise ContributionsAcceptedError( "The 'modifiedAfter' option is not supported" ) - if allowNonNumericNumbers != None: + if allowNonNumericNumbers is not None: raise ContributionsAcceptedError( "The 'allowNonNumericNumbers' option is not supported" ) if isinstance(path, str): path = [path] - if type(path) == list: + if isinstance(path, list): if len(path) == 1: rel = self.session.conn.read_json(path[0]) from .dataframe import DataFrame diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/session.py b/tools/pythonpkg/duckdb/experimental/spark/sql/session.py index 6673f8d65dd1..c1c8fc491d28 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/session.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/session.py @@ -1,4 +1,4 @@ -from typing import Optional, List, Tuple, Any, Union, Iterable, TYPE_CHECKING +from typing import Optional, List, Any, Union, Iterable, TYPE_CHECKING import uuid if TYPE_CHECKING: @@ -54,9 +54,8 @@ def __init__(self, context: SparkContext): def _create_dataframe(self, data: Union[Iterable[Any], "PandasDataFrame"]) -> DataFrame: try: import pandas - has_pandas = True - except: + except ImportError: has_pandas = False if has_pandas and isinstance(data, pandas.DataFrame): unique_name = f'pyspark_pandas_df_{uuid.uuid1()}' @@ -155,7 +154,7 @@ def createDataFrame( import pandas has_pandas = True - except: + except ImportError: has_pandas = False # Falsey check on pandas dataframe is not defined, so first check if it's not a pandas dataframe # Then check if 'data' is None or [] diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/type_utils.py b/tools/pythonpkg/duckdb/experimental/spark/sql/type_utils.py index 55f0963ccb2d..4fe4f8b88b19 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/type_utils.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/type_utils.py @@ -1,4 +1,3 @@ -import typing from duckdb.typing import DuckDBPyType from typing import List, Tuple, cast from .types import ( diff --git a/tools/pythonpkg/duckdb/experimental/spark/sql/types.py b/tools/pythonpkg/duckdb/experimental/spark/sql/types.py index 3620bd721576..13cd84801632 100644 --- a/tools/pythonpkg/duckdb/experimental/spark/sql/types.py +++ b/tools/pythonpkg/duckdb/experimental/spark/sql/types.py @@ -13,13 +13,13 @@ TypeVar, ClassVar, Iterator, - TYPE_CHECKING, ) from builtins import tuple import datetime import calendar import time import math +import re import duckdb from duckdb.typing import DuckDBPyType @@ -1079,7 +1079,6 @@ def __eq__(self, other: Any) -> bool: (v.typeName(), v) for v in _complex_types ) -import re _FIXED_DECIMAL = re.compile(r"decimal\(\s*(\d+)\s*,\s*(-?\d+)\s*\)") _INTERVAL_DAYTIME = re.compile(r"interval (day|hour|minute|second)( to (day|hour|minute|second))?") diff --git a/tools/pythonpkg/duckdb/filesystem.py b/tools/pythonpkg/duckdb/filesystem.py index a0c3d57f8121..a32a9e9e144d 100644 --- a/tools/pythonpkg/duckdb/filesystem.py +++ b/tools/pythonpkg/duckdb/filesystem.py @@ -1,6 +1,5 @@ from fsspec import filesystem, AbstractFileSystem from fsspec.implementations.memory import MemoryFileSystem -from shutil import copyfileobj from .bytes_io_wrapper import BytesIOWrapper from io import TextIOBase diff --git a/tools/pythonpkg/duckdb_python.cpp b/tools/pythonpkg/duckdb_python.cpp index c420274af31a..5ee2f7addb4d 100644 --- a/tools/pythonpkg/duckdb_python.cpp +++ b/tools/pythonpkg/duckdb_python.cpp @@ -96,9 +96,10 @@ static void InitializeConnectionMethods(py::module_ &m) { py::arg("type"), py::arg("values"), py::arg("connection") = py::none()) .def("decimal_type", &PyConnectionWrapper::DecimalType, "Create a decimal type with 'width' and 'scale'", py::arg("width"), py::arg("scale"), py::arg("connection") = py::none()); - DefineMethod({"array_type", "list_type"}, m, &PyConnectionWrapper::ArrayType, - "Create an array type object of 'type'", py::arg("type").none(false), - py::arg("connection") = py::none()); + m.def("array_type", &PyConnectionWrapper::ArrayType, "Create an array type object of 'type'", + py::arg("type").none(false), py::arg("size").none(false), py::arg("connection") = py::none()); + m.def("list_type", &PyConnectionWrapper::ListType, "Create a list type object of 'type'", + py::arg("type").none(false), py::arg("connection") = py::none()); m.def("map_type", &PyConnectionWrapper::MapType, "Create a map type object from 'key_type' and 'value_type'", py::arg("key").none(false), py::arg("value").none(false), py::arg("connection") = py::none()) .def("execute", &PyConnectionWrapper::Execute, diff --git a/tools/pythonpkg/scripts/generate_import_cache_cpp.py b/tools/pythonpkg/scripts/generate_import_cache_cpp.py index 0ece41f5a7fd..a6646823a455 100644 --- a/tools/pythonpkg/scripts/generate_import_cache_cpp.py +++ b/tools/pythonpkg/scripts/generate_import_cache_cpp.py @@ -1,7 +1,7 @@ import os script_dir = os.path.dirname(__file__) -from typing import List, Dict, Union +from typing import List, Dict import json # Load existing JSON data from a file if it exists @@ -12,7 +12,6 @@ json_data = json.load(file) except FileNotFoundError: print("Please first use 'generate_import_cache_json.py' first to generate json") - pass # deal with leaf nodes?? Those are just PythonImportCacheItem diff --git a/tools/pythonpkg/setup.py b/tools/pythonpkg/setup.py index 506b6f7c2404..701eb3047827 100644 --- a/tools/pythonpkg/setup.py +++ b/tools/pythonpkg/setup.py @@ -172,7 +172,6 @@ def open_utf8(fpath, flags): if 'DUCKDB_BINARY_DIR' in os.environ: existing_duckdb_dir = os.environ['DUCKDB_BINARY_DIR'] if 'DUCKDB_COMPILE_FLAGS' in os.environ: - # FIXME: this is overwriting the previously set toolchain_args ? toolchain_args = ['-std=c++11'] + os.environ['DUCKDB_COMPILE_FLAGS'].split() if 'DUCKDB_LIBS' in os.environ: libraries = os.environ['DUCKDB_LIBS'].split(' ') @@ -194,9 +193,13 @@ def open_utf8(fpath, flags): define_macros.extend([('DUCKDB_EXTENSION_AUTOLOAD_DEFAULT', '1'), ('DUCKDB_EXTENSION_AUTOINSTALL_DEFAULT', '1')]) -linker_args = toolchain_args +linker_args = toolchain_args[:] if platform.system() == 'Windows': - linker_args.extend(['rstrtmgr.lib']) + linker_args.extend(['rstrtmgr.lib', 'bcrypt.lib']) + +short_paths = False +if platform.system() == 'Windows': + short_paths = True extra_files = [] header_files = [] @@ -237,7 +240,7 @@ def exclude_extensions(f: TextIO): import package_build (source_list, include_list, original_sources) = package_build.build_package( - os.path.join(script_path, "duckdb_build"), extensions, False, unity_build, "duckdb_build" + os.path.join(script_path, "duckdb_build"), extensions, False, unity_build, "duckdb_build", short_paths ) duckdb_sources = [ diff --git a/tools/pythonpkg/src/arrow/arrow_array_stream.cpp b/tools/pythonpkg/src/arrow/arrow_array_stream.cpp index 8f8393b24984..a17e72c5c08c 100644 --- a/tools/pythonpkg/src/arrow/arrow_array_stream.cpp +++ b/tools/pythonpkg/src/arrow/arrow_array_stream.cpp @@ -180,15 +180,20 @@ string ConvertTimestampUnit(ArrowDateTimeType unit) { } int64_t ConvertTimestampTZValue(int64_t base_value, ArrowDateTimeType datetime_type) { + auto input = timestamp_t(base_value); + if (!Timestamp::IsFinite(input)) { + return base_value; + } + switch (datetime_type) { case ArrowDateTimeType::MICROSECONDS: - return Timestamp::GetEpochMicroSeconds(timestamp_t(base_value)); + return Timestamp::GetEpochMicroSeconds(input); case ArrowDateTimeType::MILLISECONDS: - return Timestamp::GetEpochMs(timestamp_t(base_value)); + return Timestamp::GetEpochMs(input); case ArrowDateTimeType::NANOSECONDS: - return Timestamp::GetEpochNanoSeconds(timestamp_t(base_value)); + return Timestamp::GetEpochNanoSeconds(input); case ArrowDateTimeType::SECONDS: - return Timestamp::GetEpochSeconds(timestamp_t(base_value)); + return Timestamp::GetEpochSeconds(input); default: throw NotImplementedException("DatetimeType not recognized in ConvertTimestampTZValue"); } diff --git a/tools/pythonpkg/src/include/duckdb_python/connection_wrapper.hpp b/tools/pythonpkg/src/include/duckdb_python/connection_wrapper.hpp index 34c6a93b2e2a..a6246f2f5f76 100644 --- a/tools/pythonpkg/src/include/duckdb_python/connection_wrapper.hpp +++ b/tools/pythonpkg/src/include/duckdb_python/connection_wrapper.hpp @@ -40,8 +40,10 @@ class PyConnectionWrapper { static shared_ptr UnregisterUDF(const string &name, shared_ptr conn = nullptr); - static shared_ptr ArrayType(const shared_ptr &type, + static shared_ptr ArrayType(const shared_ptr &type, idx_t size, shared_ptr conn = nullptr); + static shared_ptr ListType(const shared_ptr &type, + shared_ptr conn = nullptr); static shared_ptr MapType(const shared_ptr &key, const shared_ptr &value, shared_ptr conn = nullptr); static shared_ptr StructType(const py::object &fields, diff --git a/tools/pythonpkg/src/include/duckdb_python/pybind11/pybind_wrapper.hpp b/tools/pythonpkg/src/include/duckdb_python/pybind11/pybind_wrapper.hpp index dbc36fea5d31..5c3be44eb6eb 100644 --- a/tools/pythonpkg/src/include/duckdb_python/pybind11/pybind_wrapper.hpp +++ b/tools/pythonpkg/src/include/duckdb_python/pybind11/pybind_wrapper.hpp @@ -76,7 +76,7 @@ template bool try_cast(const handle &object, T &result) { try { result = cast(object); - } catch (cast_error &e) { + } catch (cast_error &) { return false; } return true; diff --git a/tools/pythonpkg/src/include/duckdb_python/pyconnection/pyconnection.hpp b/tools/pythonpkg/src/include/duckdb_python/pyconnection/pyconnection.hpp index 87ce51f0130c..23aabdd56bb6 100644 --- a/tools/pythonpkg/src/include/duckdb_python/pyconnection/pyconnection.hpp +++ b/tools/pythonpkg/src/include/duckdb_python/pyconnection/pyconnection.hpp @@ -16,7 +16,7 @@ #include "duckdb_python/pyrelation.hpp" #include "duckdb_python/pytype.hpp" #include "duckdb_python/path_like.hpp" -#include "duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp" +#include "duckdb/execution/operator/csv_scanner/csv_reader_options.hpp" #include "duckdb_python/pyfilesystem.hpp" #include "duckdb_python/pybind11/registered_py_object.hpp" #include "duckdb/function/scalar_function.hpp" @@ -52,6 +52,7 @@ struct DuckDBPyConnection : public std::enable_shared_from_this MapType(const shared_ptr &key_type, const shared_ptr &value_type); shared_ptr StructType(const py::object &fields); - shared_ptr ArrayType(const shared_ptr &type); + shared_ptr ListType(const shared_ptr &type); + shared_ptr ArrayType(const shared_ptr &type, idx_t size); shared_ptr UnionType(const py::object &members); shared_ptr EnumType(const string &name, const shared_ptr &type, const py::list &values_p); diff --git a/tools/pythonpkg/src/include/duckdb_python/pyrelation.hpp b/tools/pythonpkg/src/include/duckdb_python/pyrelation.hpp index 9f351f115c9b..178fec217f87 100644 --- a/tools/pythonpkg/src/include/duckdb_python/pyrelation.hpp +++ b/tools/pythonpkg/src/include/duckdb_python/pyrelation.hpp @@ -31,6 +31,11 @@ class PythonDependencies : public ExternalDependency { public: explicit PythonDependencies() : ExternalDependency(ExternalDependenciesType::PYTHON_DEPENDENCY) { } + ~PythonDependencies() override { + py::gil_scoped_acquire gil; + py_object_list.clear(); + } + explicit PythonDependencies(py::function map_function) : ExternalDependency(ExternalDependenciesType::PYTHON_DEPENDENCY), map_function(std::move(map_function)) {}; explicit PythonDependencies(unique_ptr py_object) @@ -51,6 +56,7 @@ struct DuckDBPyRelation { public: explicit DuckDBPyRelation(shared_ptr rel); explicit DuckDBPyRelation(unique_ptr result); + ~DuckDBPyRelation(); public: static void Initialize(py::handle &m); diff --git a/tools/pythonpkg/src/include/duckdb_python/pyresult.hpp b/tools/pythonpkg/src/include/duckdb_python/pyresult.hpp index e2f1e2886e11..79c578dba8f9 100644 --- a/tools/pythonpkg/src/include/duckdb_python/pyresult.hpp +++ b/tools/pythonpkg/src/include/duckdb_python/pyresult.hpp @@ -19,6 +19,7 @@ namespace duckdb { struct DuckDBPyResult { public: explicit DuckDBPyResult(unique_ptr result); + ~DuckDBPyResult(); public: Optional Fetchone(); diff --git a/tools/pythonpkg/src/native/python_conversion.cpp b/tools/pythonpkg/src/native/python_conversion.cpp index cfee943ab438..6ac7e2c73241 100644 --- a/tools/pythonpkg/src/native/python_conversion.cpp +++ b/tools/pythonpkg/src/native/python_conversion.cpp @@ -210,6 +210,29 @@ Value TransformListValue(py::handle ele, const LogicalType &target_type = Logica return Value::LIST(element_type, values); } +Value TransformArrayValue(py::handle ele, const LogicalType &target_type = LogicalType::UNKNOWN) { + auto size = py::len(ele); + + if (size == 0) { + return Value::EMPTYARRAY(LogicalType::SQLNULL, size); + } + + vector values; + values.reserve(size); + + bool array_target = target_type.id() == LogicalTypeId::ARRAY; + auto &child_type = array_target ? ArrayType::GetChildType(target_type) : LogicalType::UNKNOWN; + + LogicalType element_type = LogicalType::SQLNULL; + for (idx_t i = 0; i < size; i++) { + Value new_value = TransformPythonValue(ele.attr("__getitem__")(i), child_type); + element_type = LogicalType::ForceMaxLogicalType(element_type, new_value.type()); + values.push_back(std::move(new_value)); + } + + return Value::ARRAY(element_type, std::move(values)); +} + Value TransformDictionary(const PyDictionary &dict) { //! DICT -> MAP FORMAT // keys() = [key, value] @@ -518,7 +541,11 @@ Value TransformPythonValue(py::handle ele, const LogicalType &target_type, bool } } case PythonObjectType::List: - return TransformListValue(ele, target_type); + if (target_type.id() == LogicalTypeId::ARRAY) { + return TransformArrayValue(ele, target_type); + } else { + return TransformListValue(ele, target_type); + } case PythonObjectType::Dict: { PyDictionary dict = PyDictionary(py::reinterpret_borrow(ele)); switch (target_type.id()) { @@ -537,6 +564,8 @@ Value TransformPythonValue(py::handle ele, const LogicalType &target_type, bool case LogicalTypeId::UNKNOWN: case LogicalTypeId::LIST: return TransformListValue(ele, target_type); + case LogicalTypeId::ARRAY: + return TransformArrayValue(ele, target_type); default: throw InvalidInputException("Can't convert tuple to a Value of type %s", target_type.ToString()); } diff --git a/tools/pythonpkg/src/native/python_objects.cpp b/tools/pythonpkg/src/native/python_objects.cpp index 9dab0174448e..02f0d2378c3d 100644 --- a/tools/pythonpkg/src/native/python_objects.cpp +++ b/tools/pythonpkg/src/native/python_objects.cpp @@ -448,7 +448,14 @@ py::object PythonObject::FromValue(const Value &val, const LogicalType &type, D_ASSERT(type.InternalType() == PhysicalType::INT64); auto timestamp = val.GetValueUnsafe(); - InfinityType infinity = InfinityType::NONE; + InfinityType infinity = GetTimestampInfinityType(timestamp); + if (infinity == InfinityType::POSITIVE) { + return py::reinterpret_borrow(import_cache.datetime.datetime.max()); + } + if (infinity == InfinityType::NEGATIVE) { + return py::reinterpret_borrow(import_cache.datetime.datetime.min()); + } + if (type.id() == LogicalTypeId::TIMESTAMP_MS) { timestamp = Timestamp::FromEpochMs(timestamp.value); } else if (type.id() == LogicalTypeId::TIMESTAMP_NS) { @@ -456,19 +463,7 @@ py::object PythonObject::FromValue(const Value &val, const LogicalType &type, } else if (type.id() == LogicalTypeId::TIMESTAMP_SEC) { timestamp = Timestamp::FromEpochSeconds(timestamp.value); } - infinity = GetTimestampInfinityType(timestamp); - // Deal with infinity - switch (infinity) { - case InfinityType::POSITIVE: { - return py::reinterpret_borrow(import_cache.datetime.datetime.max()); - } - case InfinityType::NEGATIVE: { - return py::reinterpret_borrow(import_cache.datetime.datetime.min()); - } - case InfinityType::NONE: - break; - } int32_t year, month, day, hour, min, sec, micros; date_t date; dtime_t time; @@ -515,6 +510,16 @@ py::object PythonObject::FromValue(const Value &val, const LogicalType &type, } return std::move(list); } + case LogicalTypeId::ARRAY: { + auto &array_values = ArrayValue::GetChildren(val); + auto array_size = ArrayType::GetSize(type); + auto &child_type = ArrayType::GetChildType(type); + py::tuple arr(array_size); + for (idx_t elem_idx = 0; elem_idx < array_size; elem_idx++) { + arr[elem_idx] = FromValue(array_values[elem_idx], child_type, client_properties); + } + return std::move(arr); + } case LogicalTypeId::MAP: { auto &list_values = ListValue::GetChildren(val); diff --git a/tools/pythonpkg/src/numpy/array_wrapper.cpp b/tools/pythonpkg/src/numpy/array_wrapper.cpp index cd049a488e71..a731276c1148 100644 --- a/tools/pythonpkg/src/numpy/array_wrapper.cpp +++ b/tools/pythonpkg/src/numpy/array_wrapper.cpp @@ -31,6 +31,9 @@ struct RegularConvert { struct TimestampConvert { template static int64_t ConvertValue(timestamp_t val) { + if (!Timestamp::IsFinite(val)) { + return val.value; + } return Timestamp::GetEpochNanoSeconds(val); } @@ -44,6 +47,9 @@ struct TimestampConvert { struct TimestampConvertSec { template static int64_t ConvertValue(timestamp_t val) { + if (!Timestamp::IsFinite(val)) { + return val.value; + } return Timestamp::GetEpochNanoSeconds(Timestamp::FromEpochSeconds(val.value)); } @@ -57,6 +63,9 @@ struct TimestampConvertSec { struct TimestampConvertMilli { template static int64_t ConvertValue(timestamp_t val) { + if (!Timestamp::IsFinite(val)) { + return val.value; + } return Timestamp::GetEpochNanoSeconds(Timestamp::FromEpochMs(val.value)); } @@ -276,6 +285,22 @@ struct ListConvert { } }; +struct ArrayConvert { + static py::tuple ConvertValue(Vector &input, idx_t chunk_offset, const ClientProperties &client_properties) { + auto val = input.GetValue(chunk_offset); + auto &array_values = ArrayValue::GetChildren(val); + auto &array_type = input.GetType(); + auto array_size = ArrayType::GetSize(array_type); + auto &child_type = ArrayType::GetChildType(array_type); + + py::tuple arr(array_size); + for (idx_t elem_idx = 0; elem_idx < array_size; elem_idx++) { + arr[elem_idx] = PythonObject::FromValue(array_values[elem_idx], child_type, client_properties); + } + return arr; + } +}; + struct StructConvert { static py::dict ConvertValue(Vector &input, idx_t chunk_offset, const ClientProperties &client_properties) { py::dict py_struct; @@ -649,6 +674,9 @@ void ArrayWrapper::Append(idx_t current_offset, Vector &input, idx_t count) { case LogicalTypeId::LIST: may_have_null = ConvertNested(append_data); break; + case LogicalTypeId::ARRAY: + may_have_null = ConvertNested(append_data); + break; case LogicalTypeId::MAP: may_have_null = ConvertNested(append_data); break; diff --git a/tools/pythonpkg/src/numpy/numpy_scan.cpp b/tools/pythonpkg/src/numpy/numpy_scan.cpp index e74540318844..032d3b97f014 100644 --- a/tools/pythonpkg/src/numpy/numpy_scan.cpp +++ b/tools/pythonpkg/src/numpy/numpy_scan.cpp @@ -285,7 +285,12 @@ void NumpyScan::Scan(PandasColumnBindData &bind_data, idx_t count, idx_t offset, continue; } // Direct conversion, we've already matched the numpy type with the equivalent duckdb type - tgt_ptr[row] = convert_func(src_ptr[source_idx]); + auto input = timestamp_t(src_ptr[source_idx]); + if (Timestamp::IsFinite(input)) { + tgt_ptr[row] = convert_func(src_ptr[source_idx]); + } else { + tgt_ptr[row] = input; + } } break; } diff --git a/tools/pythonpkg/src/numpy/raw_array_wrapper.cpp b/tools/pythonpkg/src/numpy/raw_array_wrapper.cpp index 8838bd1c85af..5d73685b20e6 100644 --- a/tools/pythonpkg/src/numpy/raw_array_wrapper.cpp +++ b/tools/pythonpkg/src/numpy/raw_array_wrapper.cpp @@ -13,43 +13,32 @@ namespace duckdb { -RawArrayWrapper::RawArrayWrapper(const LogicalType &type) : data(nullptr), type(type), count(0) { +static idx_t GetNumpyTypeWidth(const LogicalType &type) { switch (type.id()) { case LogicalTypeId::BOOLEAN: - type_width = sizeof(bool); - break; + return sizeof(bool); case LogicalTypeId::UTINYINT: - type_width = sizeof(uint8_t); - break; + return sizeof(uint8_t); case LogicalTypeId::USMALLINT: - type_width = sizeof(uint16_t); - break; + return sizeof(uint16_t); case LogicalTypeId::UINTEGER: - type_width = sizeof(uint32_t); - break; + return sizeof(uint32_t); case LogicalTypeId::UBIGINT: - type_width = sizeof(uint64_t); - break; + return sizeof(uint64_t); case LogicalTypeId::TINYINT: - type_width = sizeof(int8_t); - break; + return sizeof(int8_t); case LogicalTypeId::SMALLINT: - type_width = sizeof(int16_t); - break; + return sizeof(int16_t); case LogicalTypeId::INTEGER: - type_width = sizeof(int32_t); - break; + return sizeof(int32_t); case LogicalTypeId::BIGINT: - type_width = sizeof(int64_t); - break; + return sizeof(int64_t); case LogicalTypeId::FLOAT: - type_width = sizeof(float); - break; + return sizeof(float); case LogicalTypeId::HUGEINT: case LogicalTypeId::DOUBLE: case LogicalTypeId::DECIMAL: - type_width = sizeof(double); - break; + return sizeof(double); case LogicalTypeId::TIMESTAMP: case LogicalTypeId::TIMESTAMP_SEC: case LogicalTypeId::TIMESTAMP_MS: @@ -57,8 +46,7 @@ RawArrayWrapper::RawArrayWrapper(const LogicalType &type) : data(nullptr), type( case LogicalTypeId::DATE: case LogicalTypeId::INTERVAL: case LogicalTypeId::TIMESTAMP_TZ: - type_width = sizeof(int64_t); - break; + return sizeof(int64_t); case LogicalTypeId::TIME: case LogicalTypeId::TIME_TZ: case LogicalTypeId::VARCHAR: @@ -70,13 +58,17 @@ RawArrayWrapper::RawArrayWrapper(const LogicalType &type) : data(nullptr), type( case LogicalTypeId::STRUCT: case LogicalTypeId::UNION: case LogicalTypeId::UUID: - type_width = sizeof(PyObject *); - break; + case LogicalTypeId::ARRAY: + return sizeof(PyObject *); default: throw NotImplementedException("Unsupported type \"%s\" for DuckDB -> NumPy conversion", type.ToString()); } } +RawArrayWrapper::RawArrayWrapper(const LogicalType &type) : data(nullptr), type(type), count(0) { + type_width = GetNumpyTypeWidth(type); +} + string RawArrayWrapper::DuckDBToNumpyDtype(const LogicalType &type) { switch (type.id()) { case LogicalTypeId::BOOLEAN: @@ -127,6 +119,7 @@ string RawArrayWrapper::DuckDBToNumpyDtype(const LogicalType &type) { case LogicalTypeId::STRUCT: case LogicalTypeId::UNION: case LogicalTypeId::UUID: + case LogicalTypeId::ARRAY: return "object"; case LogicalTypeId::ENUM: { auto size = EnumType::GetSize(type); diff --git a/tools/pythonpkg/src/pandas/analyzer.cpp b/tools/pythonpkg/src/pandas/analyzer.cpp index 6f5b4416cb18..df1ddb6be080 100644 --- a/tools/pythonpkg/src/pandas/analyzer.cpp +++ b/tools/pythonpkg/src/pandas/analyzer.cpp @@ -4,6 +4,7 @@ #include "duckdb_python/pandas/pandas_analyzer.hpp" #include "duckdb_python/python_conversion.hpp" #include "duckdb/common/types/decimal.hpp" +#include "duckdb/common/helper.hpp" namespace duckdb { @@ -396,7 +397,8 @@ LogicalType PandasAnalyzer::InnerAnalyze(py::object column, bool &can_convert, b LogicalType item_type = LogicalType::SQLNULL; vector types; for (idx_t i = 0; i < rows; i += increment) { - auto obj = FindFirstNonNull(row, i, increment); + auto range = MinValue(increment, rows - i); + auto obj = FindFirstNonNull(row, i, range); auto next_item_type = GetItemType(obj, can_convert); types.push_back(next_item_type); diff --git a/tools/pythonpkg/src/pyconnection.cpp b/tools/pythonpkg/src/pyconnection.cpp index 8731eb35d94d..d7b4292798c4 100644 --- a/tools/pythonpkg/src/pyconnection.cpp +++ b/tools/pythonpkg/src/pyconnection.cpp @@ -61,6 +61,14 @@ DBInstanceCache instance_cache; shared_ptr DuckDBPyConnection::import_cache = nullptr; PythonEnvironmentType DuckDBPyConnection::environment = PythonEnvironmentType::NORMAL; +DuckDBPyConnection::~DuckDBPyConnection() { + py::gil_scoped_release gil; + // Release any structures that do not need to hold the GIL here + database.reset(); + connection.reset(); + temporary_views.clear(); +} + void DuckDBPyConnection::DetectEnvironment() { // If __main__ does not have a __file__ attribute, we are in interactive mode auto main_module = py::module_::import("__main__"); @@ -102,7 +110,7 @@ bool DuckDBPyConnection::IsJupyter() { py::object ArrowTableFromDataframe(const py::object &df) { try { return py::module_::import("pyarrow").attr("lib").attr("Table").attr("from_pandas")(df); - } catch (py::error_already_set &e) { + } catch (py::error_already_set &) { // We don't fetch the original Python exception because it can cause a segfault // The cause of this is not known yet, for now we just side-step the issue. throw InvalidInputException( @@ -132,8 +140,11 @@ static void InitializeConnectionMethods(py::class_ DuckDBPyConnection::Table(const string &tname) { } try { return make_uniq(connection->Table(qualified_name.schema, qualified_name.name)); - } catch (const CatalogException &e) { + } catch (const CatalogException &) { // CatalogException will be of the type '... is not a table' // Not a table in the database, make a query relation that can perform replacement scans return RunQuery(StringUtil::Format("from %s", KeywordHelper::WriteOptionallyQuoted(tname)), tname); @@ -1563,7 +1574,11 @@ shared_ptr DuckDBPyConnection::Connect(const string &databas config.AddExtensionOption("pandas_analyze_sample", "The maximum number of rows to sample when analyzing a pandas object column.", LogicalType::UBIGINT, Value::UBIGINT(1000)); - config_dict["duckdb_api"] = Value("python"); + if (!DuckDBPyConnection::IsJupyter()) { + config_dict["duckdb_api"] = Value("python"); + } else { + config_dict["duckdb_api"] = Value("python jupyter"); + } config.SetOptionsByName(config_dict); auto res = FetchOrCreateInstance(database, config); diff --git a/tools/pythonpkg/src/pyconnection/type_creation.cpp b/tools/pythonpkg/src/pyconnection/type_creation.cpp index f1f95c8484d4..5888fd84bb24 100644 --- a/tools/pythonpkg/src/pyconnection/type_creation.cpp +++ b/tools/pythonpkg/src/pyconnection/type_creation.cpp @@ -8,11 +8,16 @@ shared_ptr DuckDBPyConnection::MapType(const shared_ptr(map_type); } -shared_ptr DuckDBPyConnection::ArrayType(const shared_ptr &type) { +shared_ptr DuckDBPyConnection::ListType(const shared_ptr &type) { auto array_type = LogicalType::LIST(type->Type()); return make_shared(array_type); } +shared_ptr DuckDBPyConnection::ArrayType(const shared_ptr &type, idx_t size) { + auto array_type = LogicalType::ARRAY(type->Type(), size); + return make_shared(array_type); +} + static child_list_t GetChildList(const py::object &container) { child_list_t types; if (py::isinstance(container)) { diff --git a/tools/pythonpkg/src/pyduckdb/connection_wrapper.cpp b/tools/pythonpkg/src/pyduckdb/connection_wrapper.cpp index 060cf9a8fd41..f150b4cc844f 100644 --- a/tools/pythonpkg/src/pyduckdb/connection_wrapper.cpp +++ b/tools/pythonpkg/src/pyduckdb/connection_wrapper.cpp @@ -33,12 +33,20 @@ shared_ptr PyConnectionWrapper::StringType(const string &collation return conn->StringType(collation); } -shared_ptr PyConnectionWrapper::ArrayType(const shared_ptr &type, +shared_ptr PyConnectionWrapper::ArrayType(const shared_ptr &type, idx_t size, shared_ptr conn) { if (!conn) { conn = DuckDBPyConnection::DefaultConnection(); } - return conn->ArrayType(type); + return conn->ArrayType(type, size); +} + +shared_ptr PyConnectionWrapper::ListType(const shared_ptr &type, + shared_ptr conn) { + if (!conn) { + conn = DuckDBPyConnection::DefaultConnection(); + } + return conn->ListType(type); } shared_ptr PyConnectionWrapper::MapType(const shared_ptr &key, diff --git a/tools/pythonpkg/src/pyrelation.cpp b/tools/pythonpkg/src/pyrelation.cpp index 2332c7b3c2f6..cf68f35079fd 100644 --- a/tools/pythonpkg/src/pyrelation.cpp +++ b/tools/pythonpkg/src/pyrelation.cpp @@ -43,6 +43,14 @@ bool DuckDBPyRelation::CanBeRegisteredBy(Connection &con) { return context == con.context; } +DuckDBPyRelation::~DuckDBPyRelation() { + // FIXME: It makes sense to release the GIL here, but it causes a crash + // because pybind11's gil_scoped_acquire and gil_scoped_release can not be nested + // The Relation will need to call the destructor of the ExternalDependency, which might need to hold the GIL + // py::gil_scoped_release gil; + rel.reset(); +} + DuckDBPyRelation::DuckDBPyRelation(unique_ptr result_p) : rel(nullptr), result(std::move(result_p)) { if (!result) { throw InternalException("DuckDBPyRelation created without a result"); diff --git a/tools/pythonpkg/src/pyresult.cpp b/tools/pythonpkg/src/pyresult.cpp index 2dfee670ec4d..baa9880aacdd 100644 --- a/tools/pythonpkg/src/pyresult.cpp +++ b/tools/pythonpkg/src/pyresult.cpp @@ -27,6 +27,12 @@ DuckDBPyResult::DuckDBPyResult(unique_ptr result_p) : result(std::m } } +DuckDBPyResult::~DuckDBPyResult() { + py::gil_scoped_release gil; + result.reset(); + current_chunk.reset(); +} + const vector &DuckDBPyResult::GetNames() { if (!result) { throw InternalException("Calling GetNames without a result object"); diff --git a/tools/pythonpkg/src/python_import_cache.cpp b/tools/pythonpkg/src/python_import_cache.cpp index 5ebb00594ad8..c96de5a0bc2b 100644 --- a/tools/pythonpkg/src/python_import_cache.cpp +++ b/tools/pythonpkg/src/python_import_cache.cpp @@ -10,6 +10,9 @@ namespace duckdb { //===--------------------------------------------------------------------===// py::handle PythonImportCacheItem::operator()(bool load) { + if (IsLoaded()) { + return object; + } stack> hierarchy; optional_ptr item = this; @@ -24,7 +27,7 @@ bool PythonImportCacheItem::LoadSucceeded() const { return load_succeeded; } -bool PythonImportCacheItem::IsLoaded() const { +inline bool PythonImportCacheItem::IsLoaded() const { return object.ptr() != nullptr; } diff --git a/tools/pythonpkg/src/python_udf.cpp b/tools/pythonpkg/src/python_udf.cpp index 26a2d5b90fc5..ef5be16ebb48 100644 --- a/tools/pythonpkg/src/python_udf.cpp +++ b/tools/pythonpkg/src/python_udf.cpp @@ -144,7 +144,7 @@ static scalar_function_t CreateVectorizedFunction(PyObject *function, PythonExce try { python_object = py::module_::import("pyarrow").attr("lib").attr("Table").attr("from_arrays")( single_array, py::arg("names") = single_name); - } catch (py::error_already_set &ex) { + } catch (py::error_already_set &) { throw InvalidInputException("Could not convert the result into an Arrow Table"); } } diff --git a/tools/pythonpkg/tests/conftest.py b/tools/pythonpkg/tests/conftest.py index fb73295ca250..5843c71092fa 100644 --- a/tools/pythonpkg/tests/conftest.py +++ b/tools/pythonpkg/tests/conftest.py @@ -56,7 +56,7 @@ def pytest_collection_modifyitems(config, items): if item.name in skipped_tests: # test is named specifically item.add_marker(skip_listed) - elif item.parent != None and item.parent.name in skipped_tests: + elif item.parent is not None and item.parent.name in skipped_tests: # the class is named specifically item.add_marker(skip_listed) @@ -142,7 +142,7 @@ def convert_arrow_to_numpy_backend(df): def convert_to_numpy(df): if ( pyarrow_dtypes_enabled - and pyarrow_dtype != None + and pyarrow_dtype is not None and any([True for x in df.dtypes if isinstance(x, pyarrow_dtype)]) ): return convert_arrow_to_numpy_backend(df) diff --git a/tools/pythonpkg/tests/extensions/test_extensions_loading.py b/tools/pythonpkg/tests/extensions/test_extensions_loading.py index a2f937d00430..a3ecfe3a4e65 100644 --- a/tools/pythonpkg/tests/extensions/test_extensions_loading.py +++ b/tools/pythonpkg/tests/extensions/test_extensions_loading.py @@ -8,7 +8,7 @@ def test_extension_loading(require): if not os.getenv('DUCKDB_PYTHON_TEST_EXTENSION_REQUIRED', False): return - extensions_list = ['json', 'excel', 'httpfs', 'tpch', 'tpcds', 'icu', 'visualizer', 'fts'] + extensions_list = ['json', 'excel', 'httpfs', 'tpch', 'tpcds', 'icu', 'fts'] for extension in extensions_list: connection = require(extension) assert connection is not None diff --git a/tools/pythonpkg/tests/extensions/test_httpfs.py b/tools/pythonpkg/tests/extensions/test_httpfs.py index 2ca4bb8847dd..a00d6b5a22dd 100644 --- a/tools/pythonpkg/tests/extensions/test_httpfs.py +++ b/tools/pythonpkg/tests/extensions/test_httpfs.py @@ -3,6 +3,7 @@ from pytest import raises, mark import pytest from conftest import NumpyPandas, ArrowPandas +import datetime # We only run this test if this env var is set pytestmark = mark.skipif( @@ -13,9 +14,21 @@ class TestHTTPFS(object): def test_read_json_httpfs(self, require): connection = require('httpfs') - # FIXME: add test back - # res = connection.read_json('https://jsonplaceholder.typicode.com/todos') - # assert len(res.types) == 4 + try: + res = connection.read_json('https://jsonplaceholder.typicode.com/todos') + assert len(res.types) == 4 + except duckdb.Error as e: + if '403' in e: + pytest.skip(reason="Test is flaky, sometimes returns 403") + else: + pytest.fail(str(e)) + + def test_s3fs(self, require): + connection = require('httpfs') + + rel = connection.read_csv(f"s3://duckdb-blobs/data/Star_Trek-Season_1.csv", header=True) + res = rel.fetchone() + assert res == (1, 0, datetime.date(1965, 2, 28), 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 6, 0, 0, 0, 0) @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) def test_httpfs(self, require, pandas): diff --git a/tools/pythonpkg/tests/fast/api/test_config.py b/tools/pythonpkg/tests/fast/api/test_config.py index 103b2af4ce61..ed0c9f549b7f 100644 --- a/tools/pythonpkg/tests/fast/api/test_config.py +++ b/tools/pythonpkg/tests/fast/api/test_config.py @@ -74,3 +74,8 @@ def test_user_agent_custom(self, duckdb_cursor): assert regex.match(con_regular.sql("PRAGMA user_agent").fetchone()[0]) is not None custom_user_agent = con_regular.sql("SELECT current_setting('custom_user_agent')").fetchone() assert custom_user_agent[0] == 'CUSTOM_STRING' + + def test_secret_manager_option(self, duckdb_cursor): + con = duckdb.connect(':memory:', config={'allow_persistent_secrets': False}) + result = con.execute('select count(*) from duckdb_secrets()').fetchall() + assert result == [(0,)] diff --git a/tools/pythonpkg/tests/fast/api/test_read_csv.py b/tools/pythonpkg/tests/fast/api/test_read_csv.py index 0b54b55f356f..29bc88c8df12 100644 --- a/tools/pythonpkg/tests/fast/api/test_read_csv.py +++ b/tools/pythonpkg/tests/fast/api/test_read_csv.py @@ -86,7 +86,7 @@ def test_delimiter_and_sep(self, duckdb_cursor): rel = duckdb_cursor.read_csv(TestFile('category.csv'), delimiter=" ", sep=" ") def test_header_true(self, duckdb_cursor): - rel = duckdb_cursor.read_csv(TestFile('category.csv'), header=True) + rel = duckdb_cursor.read_csv(TestFile('category.csv')) res = rel.fetchone() print(res) assert res == (1, 'Action', datetime.datetime(2006, 2, 15, 4, 46, 27)) @@ -113,13 +113,13 @@ def test_compression_wrong(self, duckdb_cursor): rel = duckdb_cursor.read_csv(TestFile('category.csv'), compression='gzip') def test_quotechar(self, duckdb_cursor): - rel = duckdb_cursor.read_csv(TestFile('unquote_without_delimiter.csv'), quotechar="") + rel = duckdb_cursor.read_csv(TestFile('unquote_without_delimiter.csv'), quotechar="", header=False) res = rel.fetchone() print(res) assert res == ('"AAA"BB',) def test_escapechar(self, duckdb_cursor): - rel = duckdb_cursor.read_csv(TestFile('quote_escape.csv'), escapechar=";") + rel = duckdb_cursor.read_csv(TestFile('quote_escape.csv'), escapechar=";", header=False) res = rel.limit(1, 1).fetchone() print(res) assert res == ('345', 'TEST6', '"text""2""text"') @@ -172,7 +172,7 @@ def test_timestamp_format(self, duckdb_cursor): ) def test_sample_size_correct(self, duckdb_cursor): - rel = duckdb_cursor.read_csv(TestFile('problematic.csv'), header=True, sample_size=-1) + rel = duckdb_cursor.read_csv(TestFile('problematic.csv'), sample_size=-1) res = rel.fetchone() print(res) assert res == ('1', '1', '1') @@ -184,7 +184,7 @@ def test_all_varchar(self, duckdb_cursor): assert res == ('1', 'Action', '2006-02-15 04:46:27') def test_null_padding(self, duckdb_cursor): - rel = duckdb_cursor.read_csv(TestFile('nullpadding.csv'), null_padding=False) + rel = duckdb_cursor.read_csv(TestFile('nullpadding.csv'), null_padding=False, header=False) res = rel.fetchall() assert res == [ ('# this file has a bunch of gunk at the top',), @@ -193,11 +193,11 @@ def test_null_padding(self, duckdb_cursor): ('2,b,bob',), ] - rel = duckdb_cursor.read_csv(TestFile('nullpadding.csv'), null_padding=True) + rel = duckdb_cursor.read_csv(TestFile('nullpadding.csv'), null_padding=True, header=False) res = rel.fetchall() assert res == [('one', 'two', 'three', 'four'), ('1', 'a', 'alice', None), ('2', 'b', 'bob', None)] - rel = duckdb.read_csv(TestFile('nullpadding.csv'), null_padding=False) + rel = duckdb.read_csv(TestFile('nullpadding.csv'), null_padding=False, header=False) res = rel.fetchall() assert res == [ ('# this file has a bunch of gunk at the top',), @@ -206,11 +206,11 @@ def test_null_padding(self, duckdb_cursor): ('2,b,bob',), ] - rel = duckdb.read_csv(TestFile('nullpadding.csv'), null_padding=True) + rel = duckdb.read_csv(TestFile('nullpadding.csv'), null_padding=True, header=False) res = rel.fetchall() assert res == [('one', 'two', 'three', 'four'), ('1', 'a', 'alice', None), ('2', 'b', 'bob', None)] - rel = duckdb_cursor.from_csv_auto(TestFile('nullpadding.csv'), null_padding=False) + rel = duckdb_cursor.from_csv_auto(TestFile('nullpadding.csv'), null_padding=False, header=False) res = rel.fetchall() assert res == [ ('# this file has a bunch of gunk at the top',), @@ -219,7 +219,7 @@ def test_null_padding(self, duckdb_cursor): ('2,b,bob',), ] - rel = duckdb_cursor.from_csv_auto(TestFile('nullpadding.csv'), null_padding=True) + rel = duckdb_cursor.from_csv_auto(TestFile('nullpadding.csv'), null_padding=True, header=False) res = rel.fetchall() assert res == [ ('one', 'two', 'three', 'four'), @@ -264,7 +264,7 @@ def test_read_pathlib_path(self, duckdb_cursor): def test_read_filelike(self, duckdb_cursor): _ = pytest.importorskip("fsspec") string = StringIO("c1,c2,c3\na,b,c") - res = duckdb_cursor.read_csv(string, header=True).fetchall() + res = duckdb_cursor.read_csv(string).fetchall() assert res == [('a', 'b', 'c')] def test_read_filelike_rel_out_of_scope(self, duckdb_cursor): @@ -274,7 +274,7 @@ def keep_in_scope(): string = StringIO("c1,c2,c3\na,b,c") # Create a ReadCSVRelation on a file-like object # this will add the object to our internal object filesystem - rel = duckdb_cursor.read_csv(string, header=True) + rel = duckdb_cursor.read_csv(string) # The file-like object will still exist, so we can execute this later return rel @@ -282,7 +282,7 @@ def close_scope(): string = StringIO("c1,c2,c3\na,b,c") # Create a ReadCSVRelation on a file-like object # this will add the object to our internal object filesystem - res = duckdb_cursor.read_csv(string, header=True).fetchall() + res = duckdb_cursor.read_csv(string).fetchall() # When the relation goes out of scope - we delete the file-like object from our filesystem return res @@ -295,7 +295,7 @@ def close_scope(): def test_filelike_bytesio(self, duckdb_cursor): _ = pytest.importorskip("fsspec") string = BytesIO(b"c1,c2,c3\na,b,c") - res = duckdb_cursor.read_csv(string, header=True).fetchall() + res = duckdb_cursor.read_csv(string).fetchall() assert res == [('a', 'b', 'c')] def test_filelike_exception(self, duckdb_cursor): @@ -323,11 +323,11 @@ def seek(self, loc): obj = ReadError() with pytest.raises(ValueError): - res = duckdb_cursor.read_csv(obj, header=True).fetchall() + res = duckdb_cursor.read_csv(obj).fetchall() obj = SeekError() with pytest.raises(ValueError): - res = duckdb_cursor.read_csv(obj, header=True).fetchall() + res = duckdb_cursor.read_csv(obj).fetchall() def test_filelike_custom(self, duckdb_cursor): _ = pytest.importorskip("fsspec") @@ -347,20 +347,20 @@ def read(self, amount): return out obj = CustomIO() - res = duckdb_cursor.read_csv(obj, header=True).fetchall() + res = duckdb_cursor.read_csv(obj).fetchall() assert res == [('a', 'b', 'c')] def test_filelike_non_readable(self, duckdb_cursor): _ = pytest.importorskip("fsspec") obj = 5 with pytest.raises(ValueError, match="Can not read from a non file-like object"): - res = duckdb_cursor.read_csv(obj, header=True).fetchall() + res = duckdb_cursor.read_csv(obj).fetchall() def test_filelike_none(self, duckdb_cursor): _ = pytest.importorskip("fsspec") obj = None with pytest.raises(ValueError, match="Can not read from a non file-like object"): - res = duckdb_cursor.read_csv(obj, header=True).fetchall() + res = duckdb_cursor.read_csv(obj).fetchall() @pytest.mark.skip(reason="depends on garbage collector behaviour, and sporadically breaks in CI") def test_internal_object_filesystem_cleanup(self, duckdb_cursor): @@ -438,9 +438,7 @@ def test_read_csv_combined(self, duckdb_cursor): 'message': 'VARCHAR', } - rel = duckdb.read_csv( - CSV_FILE, header=True, skiprows=1, delimiter=",", quotechar='"', escapechar="\\", dtype=COLUMNS - ) + rel = duckdb.read_csv(CSV_FILE, skiprows=1, delimiter=",", quotechar='"', escapechar="\\", dtype=COLUMNS) res = rel.fetchall() rel2 = duckdb_cursor.sql(rel.sql_query()) diff --git a/tools/pythonpkg/tests/fast/api/test_to_csv.py b/tools/pythonpkg/tests/fast/api/test_to_csv.py index 7a65c4c187b5..82547437249f 100644 --- a/tools/pythonpkg/tests/fast/api/test_to_csv.py +++ b/tools/pythonpkg/tests/fast/api/test_to_csv.py @@ -15,7 +15,7 @@ def test_basic_to_csv(self, pandas): df = pandas.DataFrame({'a': [5, 3, 23, 2], 'b': [45, 234, 234, 2]}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, header=False) + rel.to_csv(temp_file_name) csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -26,7 +26,7 @@ def test_to_csv_sep(self, pandas): df = pandas.DataFrame({'a': [5, 3, 23, 2], 'b': [45, 234, 234, 2]}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, sep=',', header=False) + rel.to_csv(temp_file_name, sep=',') csv_rel = duckdb.read_csv(temp_file_name, sep=',') assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -37,7 +37,7 @@ def test_to_csv_na_rep(self, pandas): df = pandas.DataFrame({'a': [5, None, 23, 2], 'b': [45, 234, 234, 2]}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, na_rep="test", header=False) + rel.to_csv(temp_file_name, na_rep="test") csv_rel = duckdb.read_csv(temp_file_name, na_values="test") assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -48,9 +48,9 @@ def test_to_csv_header(self, pandas): df = pandas.DataFrame({'a': [5, None, 23, 2], 'b': [45, 234, 234, 2]}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, header=True) + rel.to_csv(temp_file_name) - csv_rel = duckdb.read_csv(temp_file_name, header=True) + csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) @@ -59,7 +59,7 @@ def test_to_csv_quotechar(self, pandas): df = pandas.DataFrame({'a': ["\'a,b,c\'", None, "hello", "bye"], 'b': [45, 234, 234, 2]}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, quotechar='\'', sep=',', header=False) + rel.to_csv(temp_file_name, quotechar='\'', sep=',') csv_rel = duckdb.read_csv(temp_file_name, sep=',', quotechar='\'') assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -76,7 +76,7 @@ def test_to_csv_escapechar(self, pandas): } ) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, header=True, quotechar='"', escapechar='!') + rel.to_csv(temp_file_name, quotechar='"', escapechar='!') csv_rel = duckdb.read_csv(temp_file_name, quotechar='"', escapechar='!') assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -87,7 +87,7 @@ def test_to_csv_date_format(self, pandas): dt_index = df.index df = pandas.DataFrame({"A": dt_index, "B": dt_index.shift(1)}, index=dt_index) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, date_format="%Y%m%d", header=False) + rel.to_csv(temp_file_name, date_format="%Y%m%d") csv_rel = duckdb.read_csv(temp_file_name, date_format="%Y%m%d") @@ -99,7 +99,7 @@ def test_to_csv_timestamp_format(self, pandas): data = [datetime.time(hour=23, minute=1, second=34, microsecond=234345)] df = pandas.DataFrame({'0': pandas.Series(data=data, dtype='object')}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, timestamp_format='%m/%d/%Y', header=False) + rel.to_csv(temp_file_name, timestamp_format='%m/%d/%Y') csv_rel = duckdb.read_csv(temp_file_name, timestamp_format='%m/%d/%Y') @@ -110,7 +110,7 @@ def test_to_csv_quoting_off(self, pandas): temp_file_name = os.path.join(tempfile.mkdtemp(), next(tempfile._get_candidate_names())) df = pandas.DataFrame({'a': ['string1', 'string2', 'string3']}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, quoting=None, header=False) + rel.to_csv(temp_file_name, quoting=None) csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -120,7 +120,7 @@ def test_to_csv_quoting_on(self, pandas): temp_file_name = os.path.join(tempfile.mkdtemp(), next(tempfile._get_candidate_names())) df = pandas.DataFrame({'a': ['string1', 'string2', 'string3']}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, quoting="force", header=False) + rel.to_csv(temp_file_name, quoting="force") csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -130,7 +130,7 @@ def test_to_csv_quoting_quote_all(self, pandas): temp_file_name = os.path.join(tempfile.mkdtemp(), next(tempfile._get_candidate_names())) df = pandas.DataFrame({'a': ['string1', 'string2', 'string3']}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, quoting=csv.QUOTE_ALL, header=False) + rel.to_csv(temp_file_name, quoting=csv.QUOTE_ALL) csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -143,14 +143,14 @@ def test_to_csv_encoding_incorrect(self, pandas): with pytest.raises( duckdb.InvalidInputException, match="Invalid Input Error: The only supported encoding option is 'UTF8" ): - rel.to_csv(temp_file_name, encoding="nope", header=False) + rel.to_csv(temp_file_name, encoding="nope") @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) def test_to_csv_encoding_correct(self, pandas): temp_file_name = os.path.join(tempfile.mkdtemp(), next(tempfile._get_candidate_names())) df = pandas.DataFrame({'a': ['string1', 'string2', 'string3']}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, encoding="UTF-8", header=False) + rel.to_csv(temp_file_name, encoding="UTF-8") csv_rel = duckdb.read_csv(temp_file_name) assert rel.execute().fetchall() == csv_rel.execute().fetchall() @@ -159,6 +159,6 @@ def test_compression_gzip(self, pandas): temp_file_name = os.path.join(tempfile.mkdtemp(), next(tempfile._get_candidate_names())) df = pandas.DataFrame({'a': ['string1', 'string2', 'string3']}) rel = duckdb.from_df(df) - rel.to_csv(temp_file_name, compression="gzip", header=False) + rel.to_csv(temp_file_name, compression="gzip") csv_rel = duckdb.read_csv(temp_file_name, compression="gzip") assert rel.execute().fetchall() == csv_rel.execute().fetchall() diff --git a/tools/pythonpkg/tests/fast/arrow/test_10795.py b/tools/pythonpkg/tests/fast/arrow/test_10795.py new file mode 100644 index 000000000000..043bf4ff039d --- /dev/null +++ b/tools/pythonpkg/tests/fast/arrow/test_10795.py @@ -0,0 +1,12 @@ +import duckdb +import pytest + +pyarrow = pytest.importorskip('pyarrow') + + +@pytest.mark.parametrize('arrow_large_buffer_size', [True, False]) +def test_10795(arrow_large_buffer_size): + conn = duckdb.connect() + conn.sql(f"set arrow_large_buffer_size={arrow_large_buffer_size}") + arrow = conn.sql("select map(['non-inlined string', 'test', 'duckdb'], [42, 1337, 123]) as map").to_arrow_table() + assert arrow.to_pydict() == {'map': [[('non-inlined string', 42), ('test', 1337), ('duckdb', 123)]]} diff --git a/tools/pythonpkg/tests/fast/arrow/test_arrow_decimal256.py b/tools/pythonpkg/tests/fast/arrow/test_arrow_decimal256.py new file mode 100644 index 000000000000..50a2ada06d65 --- /dev/null +++ b/tools/pythonpkg/tests/fast/arrow/test_arrow_decimal256.py @@ -0,0 +1,18 @@ +import duckdb +import pytest +from decimal import Decimal + +pa = pytest.importorskip("pyarrow") + + +class TestArrowDecimal256(object): + def test_decimal_256_throws(self, duckdb_cursor): + with duckdb.connect() as conn: + pa_decimal256 = pa.Table.from_pylist( + [{"data": Decimal("100.00")} for _ in range(4)], + pa.schema([("data", pa.decimal256(12, 4))]), + ) + with pytest.raises( + duckdb.NotImplementedException, match="Unsupported Internal Arrow Type for Decimal d:12,4,256" + ): + conn.execute("select * from pa_decimal256;").arrow().to_pylist() diff --git a/tools/pythonpkg/tests/fast/arrow/test_arrow_list.py b/tools/pythonpkg/tests/fast/arrow/test_arrow_list.py index a4860a15c399..51e0e1eb1641 100644 --- a/tools/pythonpkg/tests/fast/arrow/test_arrow_list.py +++ b/tools/pythonpkg/tests/fast/arrow/test_arrow_list.py @@ -92,7 +92,7 @@ def test_fixedsize_list(self): ) create_and_register_comparison_result( [ - ('a', 'FLOAT[]', data), + ('a', f'FLOAT[{list_size}]', data), ], duckdb_conn, ) diff --git a/tools/pythonpkg/tests/fast/arrow/test_arrow_offsets.py b/tools/pythonpkg/tests/fast/arrow/test_arrow_offsets.py index e83c8c3794a1..fe34a7e1c06a 100644 --- a/tools/pythonpkg/tests/fast/arrow/test_arrow_offsets.py +++ b/tools/pythonpkg/tests/fast/arrow/test_arrow_offsets.py @@ -480,9 +480,9 @@ def test_struct_of_fixed_size_list(self, duckdb_cursor, col1_null, col2_null): if col2_null: res2 = None elif col1_null: - res2 = [None, None, None] + res2 = (None, None, None) else: - res2 = ['131072', '131072', '131072'] + res2 = ('131072', '131072', '131072') assert res == [(res1, res2)] @test_nulls() @@ -511,9 +511,9 @@ def test_struct_of_fixed_size_blob(self, duckdb_cursor, col1_null, col2_null): if col2_null: res2 = None elif col1_null: - res2 = [None, None, None] + res2 = (None, None, None) else: - res2 = [b'131072', b'131073', b'131074'] + res2 = (b'131072', b'131073', b'131074') assert res == [(res1, res2)] @test_nulls() diff --git a/tools/pythonpkg/tests/fast/arrow/test_dictionary_arrow.py b/tools/pythonpkg/tests/fast/arrow/test_dictionary_arrow.py index 8b51daca339b..0b10a9ba8af9 100644 --- a/tools/pythonpkg/tests/fast/arrow/test_dictionary_arrow.py +++ b/tools/pythonpkg/tests/fast/arrow/test_dictionary_arrow.py @@ -4,6 +4,7 @@ pa = pytest.importorskip("pyarrow") pq = pytest.importorskip("pyarrow.parquet") +ds = pytest.importorskip("pyarrow.dataset") np = pytest.importorskip("numpy") pd = pytest.importorskip("pandas") import datetime @@ -154,6 +155,29 @@ def test_dictionary_batches(self, duckdb_cursor): result = [(None, None), (100, 1), (None, None), (100, 1), (100, 2), (100, 1), (10, 0)] * 10000 assert rel.execute().fetchall() == result + def test_dictionary_lifetime(self, duckdb_cursor): + tables = [] + expected = '' + for i in range(100): + if i % 3 == 0: + input = 'ABCD' * 17000 + elif i % 3 == 1: + input = 'FOOO' * 17000 + else: + input = 'BARR' * 17000 + expected += input + array = pa.array( + input, + type=pa.dictionary(pa.int16(), pa.string()), + ) + tables.append(pa.table([array], names=["x"])) + # All of the tables with different dictionaries are getting merged into one dataset + # This is testing that our cache is being evicted correctly + x = ds.dataset(tables) + res = duckdb_cursor.sql("select * from x").fetchall() + expected = [(x,) for x in expected] + assert res == expected + def test_dictionary_batches_parallel(self, duckdb_cursor): duckdb_cursor.execute("PRAGMA threads=4") duckdb_cursor.execute("PRAGMA verify_parallelism") diff --git a/tools/pythonpkg/tests/fast/arrow/test_nested_arrow.py b/tools/pythonpkg/tests/fast/arrow/test_nested_arrow.py index 113e3cc32fc5..592778146835 100644 --- a/tools/pythonpkg/tests/fast/arrow/test_nested_arrow.py +++ b/tools/pythonpkg/tests/fast/arrow/test_nested_arrow.py @@ -58,7 +58,7 @@ def test_list_types(self, duckdb_cursor): arrow_table = pa.Table.from_arrays([data], ['a']) rel = duckdb.from_arrow(arrow_table) res = rel.execute().fetchall() - assert res == [([1],), (None,), ([2],)] + assert res == [((1,),), (None,), ((2,),)] # Complex nested structures with different list types data = [ @@ -69,7 +69,7 @@ def test_list_types(self, duckdb_cursor): arrow_table = pa.Table.from_arrays([data[0], data[1], data[2]], ['a', 'b', 'c']) rel = duckdb.from_arrow(arrow_table) res = rel.project('a').execute().fetchall() - assert res == [([1],), (None,), ([2],)] + assert res == [((1,),), (None,), ((2,),)] res = rel.project('b').execute().fetchall() assert res == [([1],), (None,), ([2],)] res = rel.project('c').execute().fetchall() @@ -81,9 +81,9 @@ def test_list_types(self, duckdb_cursor): rel = duckdb.from_arrow(arrow_table) res = rel.execute().fetchall() assert res == [ - ({'fixed': [1], 'large': [1], 'normal': [1, 2, 3]},), + ({'fixed': (1,), 'large': [1], 'normal': [1, 2, 3]},), ({'fixed': None, 'large': None, 'normal': None},), - ({'fixed': [2], 'large': [2], 'normal': [2, 1]},), + ({'fixed': (2,), 'large': [2], 'normal': [2, 1]},), ] def test_lists_roundtrip(self, duckdb_cursor): diff --git a/tools/pythonpkg/tests/fast/arrow/test_timestamps.py b/tools/pythonpkg/tests/fast/arrow/test_timestamps.py index 5d404112bdd8..f43ca9514ffd 100644 --- a/tools/pythonpkg/tests/fast/arrow/test_timestamps.py +++ b/tools/pythonpkg/tests/fast/arrow/test_timestamps.py @@ -59,17 +59,19 @@ def test_timestamp_overflow(self, duckdb_cursor): assert arrow_from_duck['b'] == arrow_table['b'] assert arrow_from_duck['c'] == arrow_table['c'] - with pytest.raises(duckdb.ConversionException, match='Could not convert'): - duck_rel = duckdb.from_arrow(arrow_table) - res = duck_rel.project('a::TIMESTAMP_US') - res.fetchone() + expected = (datetime.datetime(9999, 12, 31, 23, 59, 59, 999999),) - with pytest.raises(duckdb.ConversionException, match='Could not convert'): - duck_rel = duckdb.from_arrow(arrow_table) - res = duck_rel.project('b::TIMESTAMP_US') - res.fetchone() + duck_rel = duckdb.from_arrow(arrow_table) + res = duck_rel.project('a::TIMESTAMP_US') + result = res.fetchone() + assert result == expected - with pytest.raises(duckdb.ConversionException, match='Could not convert'): - duck_rel = duckdb.from_arrow(arrow_table) - res = duck_rel.project('c::TIMESTAMP_NS') - res.fetchone() + duck_rel = duckdb.from_arrow(arrow_table) + res = duck_rel.project('b::TIMESTAMP_US') + result = res.fetchone() + assert result == expected + + duck_rel = duckdb.from_arrow(arrow_table) + res = duck_rel.project('c::TIMESTAMP_NS') + result = res.fetchone() + assert result == expected diff --git a/tools/pythonpkg/tests/fast/pandas/test_datetime_timestamp.py b/tools/pythonpkg/tests/fast/pandas/test_datetime_timestamp.py index 523e0e9b0cc3..57ccf565f56c 100644 --- a/tools/pythonpkg/tests/fast/pandas/test_datetime_timestamp.py +++ b/tools/pythonpkg/tests/fast/pandas/test_datetime_timestamp.py @@ -122,3 +122,33 @@ def test_timestamp_timezone_positive_extreme(self, pandas, duckdb_cursor): ) df_out = duckdb_cursor.sql("""select * from df_in""").df() pandas.testing.assert_frame_equal(df_out, duckdb_time) + + @pytest.mark.skipif( + Version(pd.__version__) < Version('2.0.2'), reason="pandas < 2.0.2 does not properly convert timezones" + ) + @pytest.mark.parametrize('unit', ['ms', 'ns', 's']) + def test_timestamp_timezone_coverage(self, unit, duckdb_cursor): + pd = pytest.importorskip("pandas") + ts_df = pd.DataFrame( + {'ts': pd.Series(data=[pd.Timestamp(datetime.datetime(1990, 12, 21))], dtype=f'datetime64[{unit}]')} + ) + usecond_df = pd.DataFrame( + {'ts': pd.Series(data=[pd.Timestamp(datetime.datetime(1990, 12, 21))], dtype='datetime64[us]')} + ) + + query = """ + select + cast(ts as timestamptz) as tstz + from {} + """ + + duckdb_cursor.sql("set TimeZone = 'UTC'") + utc_usecond = duckdb_cursor.sql(query.format('usecond_df')).df() + utc_other = duckdb_cursor.sql(query.format('ts_df')).df() + + duckdb_cursor.sql("set TimeZone = 'America/Los_Angeles'") + us_usecond = duckdb_cursor.sql(query.format('usecond_df')).df() + us_other = duckdb_cursor.sql(query.format('ts_df')).df() + + pd.testing.assert_frame_equal(utc_usecond, utc_other) + pd.testing.assert_frame_equal(us_usecond, us_other) diff --git a/tools/pythonpkg/tests/fast/pandas/test_df_analyze.py b/tools/pythonpkg/tests/fast/pandas/test_df_analyze.py index 19fb6ec182e3..578cb2fee720 100644 --- a/tools/pythonpkg/tests/fast/pandas/test_df_analyze.py +++ b/tools/pythonpkg/tests/fast/pandas/test_df_analyze.py @@ -56,3 +56,14 @@ def test_sample_low_incorrect_undetected(self, duckdb_cursor, pandas): # Sample size is too low to detect the mismatch, exception is raised when trying to convert with pytest.raises(duckdb.InvalidInputException, match="Failed to cast value: Unimplemented type for cast"): roundtripped_df = duckdb.query_df(df, "x", "select * from x", connection=duckdb_conn).df() + + @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) + def test_10750(self, duckdb_cursor, pandas): + max_row_number = 2000 + data = {'id': [i for i in range(max_row_number + 1)], 'content': [None for _ in range(max_row_number + 1)]} + + pdf = pandas.DataFrame(data=data) + duckdb_cursor.register("content", pdf) + res = duckdb_cursor.query("select id from content").fetchall() + expected = [(i,) for i in range(2001)] + assert res == expected diff --git a/tools/pythonpkg/tests/fast/spark/test_spark_function_concat_ws.py b/tools/pythonpkg/tests/fast/spark/test_spark_function_concat_ws.py new file mode 100644 index 000000000000..83c92d209ffb --- /dev/null +++ b/tools/pythonpkg/tests/fast/spark/test_spark_function_concat_ws.py @@ -0,0 +1,20 @@ +import pytest + +_ = pytest.importorskip("duckdb.experimental.spark") +from duckdb.experimental.spark.sql.types import Row +from duckdb.experimental.spark.sql.functions import concat_ws, col + + +class TestReplaceEmpty(object): + def test_replace_empty(self, spark): + data = [ + ("firstRowFirstColumn", "firstRowSecondColumn"), + ("2ndRowFirstColumn", "2ndRowSecondColumn"), + ] + df = spark.createDataFrame(data, ["firstColumn", "secondColumn"]) + df = df.withColumn("concatted", concat_ws(" ", col("firstColumn"), col("secondColumn"))) + res = df.select("concatted").collect() + assert res == [ + Row(concatted="firstRowFirstColumn firstRowSecondColumn"), + Row(concatted="2ndRowFirstColumn 2ndRowSecondColumn"), + ] diff --git a/tools/pythonpkg/tests/fast/spark/test_spark_numeric_functions.py b/tools/pythonpkg/tests/fast/spark/test_spark_numeric_functions.py new file mode 100644 index 000000000000..5ca507df778a --- /dev/null +++ b/tools/pythonpkg/tests/fast/spark/test_spark_numeric_functions.py @@ -0,0 +1,85 @@ +import pytest + +_ = pytest.importorskip("duckdb.experimental.spark") +from duckdb.experimental.spark.sql.types import Row +from duckdb.experimental.spark.sql import functions as F + + +class TestNumericFunctions(object): + def test_greatest(self, spark): + data = [ + (1, 2), + (4, 3), + ] + df = spark.createDataFrame(data, ["firstColumn", "secondColumn"]) + df = df.withColumn("greatest_value", F.greatest(F.col("firstColumn"), F.col("secondColumn"))) + res = df.select("greatest_value").collect() + assert res == [ + Row(greatest_value=2), + Row(greatest_value=4), + ] + + def test_least(self, spark): + data = [ + (1, 2), + (4, 3), + ] + df = spark.createDataFrame(data, ["firstColumn", "secondColumn"]) + df = df.withColumn("least_value", F.least(F.col("firstColumn"), F.col("secondColumn"))) + res = df.select("least_value").collect() + assert res == [ + Row(least_value=1), + Row(least_value=3), + ] + + def test_ceil(self, spark): + data = [ + (1.1,), + (2.9,), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("ceil_value", F.ceil(F.col("firstColumn"))) + res = df.select("ceil_value").collect() + assert res == [ + Row(ceil_value=2), + Row(ceil_value=3), + ] + + def test_floor(self, spark): + data = [ + (1.1,), + (2.9,), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("floor_value", F.floor(F.col("firstColumn"))) + res = df.select("floor_value").collect() + assert res == [ + Row(floor_value=1), + Row(floor_value=2), + ] + + def test_abs(self, spark): + data = [ + (1.1,), + (-2.9,), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("abs_value", F.abs(F.col("firstColumn"))) + res = df.select("abs_value").collect() + assert res == [ + Row(abs_value=1.1), + Row(abs_value=2.9), + ] + + def test_sqrt(self, spark): + data = [ + (4,), + (9,), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("sqrt_value", F.sqrt(F.col("firstColumn"))) + res = df.select("sqrt_value").collect() + assert res == [ + Row(sqrt_value=2.0), + Row(sqrt_value=3.0), + ] diff --git a/tools/pythonpkg/tests/fast/spark/test_spark_string_functions.py b/tools/pythonpkg/tests/fast/spark/test_spark_string_functions.py new file mode 100644 index 000000000000..7e45b822bb8b --- /dev/null +++ b/tools/pythonpkg/tests/fast/spark/test_spark_string_functions.py @@ -0,0 +1,85 @@ +import pytest + +_ = pytest.importorskip("duckdb.experimental.spark") +from duckdb.experimental.spark.sql.types import Row +from duckdb.experimental.spark.sql import functions as F + + +class TestStringFunctions(object): + def test_length(self, spark): + data = [ + ("firstRowFirstColumn",), + ("2ndRowFirstColumn",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("length", F.length(F.col("firstColumn"))) + res = df.select("length").collect() + assert res == [ + Row(length=19), + Row(length=17), + ] + + def test_upper(self, spark): + data = [ + ("firstRowFirstColumn",), + ("2ndRowFirstColumn",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("upper", F.upper(F.col("firstColumn"))) + res = df.select("upper").collect() + assert res == [ + Row(upper="FIRSTROWFIRSTCOLUMN"), + Row(upper="2NDROWFIRSTCOLUMN"), + ] + + def test_lower(self, spark): + data = [ + ("firstRowFirstColumn",), + ("2ndRowFirstColumn",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("lower", F.lower(F.col("firstColumn"))) + res = df.select("lower").collect() + assert res == [ + Row(lower="firstrowfirstcolumn"), + Row(lower="2ndrowfirstcolumn"), + ] + + def test_trim(self, spark): + data = [ + (" firstRowFirstColumn ",), + (" 2ndRowFirstColumn ",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("trimmed", F.trim(F.col("firstColumn"))) + res = df.select("trimmed").collect() + assert res == [ + Row(trimmed="firstRowFirstColumn"), + Row(trimmed="2ndRowFirstColumn"), + ] + + def test_ltrim(self, spark): + data = [ + (" firstRowFirstColumn ",), + (" 2ndRowFirstColumn ",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("ltrimmed", F.ltrim(F.col("firstColumn"))) + res = df.select("ltrimmed").collect() + assert res == [ + Row(ltrimmed="firstRowFirstColumn "), + Row(ltrimmed="2ndRowFirstColumn "), + ] + + def test_rtrim(self, spark): + data = [ + (" firstRowFirstColumn ",), + (" 2ndRowFirstColumn ",), + ] + df = spark.createDataFrame(data, ["firstColumn"]) + df = df.withColumn("rtrimmed", F.rtrim(F.col("firstColumn"))) + res = df.select("rtrimmed").collect() + assert res == [ + Row(rtrimmed=" firstRowFirstColumn"), + Row(rtrimmed=" 2ndRowFirstColumn"), + ] diff --git a/tools/pythonpkg/tests/fast/spark/test_spark_to_csv.py b/tools/pythonpkg/tests/fast/spark/test_spark_to_csv.py index 12c7df5febe3..e51384e59081 100644 --- a/tools/pythonpkg/tests/fast/spark/test_spark_to_csv.py +++ b/tools/pythonpkg/tests/fast/spark/test_spark_to_csv.py @@ -47,9 +47,9 @@ def test_basic_to_csv(self, pandas_df_ints, spark, tmp_path): df = spark.createDataFrame(pandas_df_ints) - df.write.csv(temp_file_name, header=False) + df.write.csv(temp_file_name) - csv_rel = spark.read.csv(temp_file_name, header=False) + csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() @@ -58,9 +58,9 @@ def test_to_csv_sep(self, pandas_df_ints, spark, tmp_path): df = spark.createDataFrame(pandas_df_ints) - df.write.csv(temp_file_name, sep=',', header=False) + df.write.csv(temp_file_name, sep=',') - csv_rel = spark.read.csv(temp_file_name, header=False, sep=',') + csv_rel = spark.read.csv(temp_file_name, sep=',') assert df.collect() == csv_rel.collect() @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) @@ -70,7 +70,7 @@ def test_to_csv_na_rep(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, nullValue="test", header=False) + df.write.csv(temp_file_name, nullValue="test") csv_rel = spark.read.csv(temp_file_name, nullValue="test") assert df.collect() == csv_rel.collect() @@ -82,9 +82,9 @@ def test_to_csv_header(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, header=True) + df.write.csv(temp_file_name) - csv_rel = spark.read.csv(temp_file_name, header=True) + csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) @@ -95,7 +95,7 @@ def test_to_csv_quotechar(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, quote='\'', sep=',', header=False) + df.write.csv(temp_file_name, quote='\'', sep=',') csv_rel = spark.read.csv(temp_file_name, sep=',', quote='\'') assert df.collect() == csv_rel.collect() @@ -114,8 +114,8 @@ def test_to_csv_escapechar(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, header=True, quote='"', escape='!') - csv_rel = spark.read.csv(temp_file_name, quote='"', escape='!', header=True) + df.write.csv(temp_file_name, quote='"', escape='!') + csv_rel = spark.read.csv(temp_file_name, quote='"', escape='!') assert df.collect() == csv_rel.collect() @pytest.mark.parametrize('pandas', [NumpyPandas(), ArrowPandas()]) @@ -127,7 +127,7 @@ def test_to_csv_date_format(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, dateFormat="%Y%m%d", header=False) + df.write.csv(temp_file_name, dateFormat="%Y%m%d") csv_rel = spark.read.csv(temp_file_name, dateFormat="%Y%m%d") @@ -141,7 +141,7 @@ def test_to_csv_timestamp_format(self, pandas, spark, tmp_path): df = spark.createDataFrame(pandas_df) - df.write.csv(temp_file_name, timestampFormat='%m/%d/%Y', header=False) + df.write.csv(temp_file_name, timestampFormat='%m/%d/%Y') csv_rel = spark.read.csv(temp_file_name, timestampFormat='%m/%d/%Y') @@ -150,7 +150,7 @@ def test_to_csv_timestamp_format(self, pandas, spark, tmp_path): def test_to_csv_quoting_off(self, pandas_df_strings, spark, tmp_path): temp_file_name = os.path.join(tmp_path, "temp_file.csv") df = spark.createDataFrame(pandas_df_strings) - df.write.csv(temp_file_name, quoteAll=None, header=False) + df.write.csv(temp_file_name, quoteAll=None) csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() @@ -158,7 +158,7 @@ def test_to_csv_quoting_off(self, pandas_df_strings, spark, tmp_path): def test_to_csv_quoting_on(self, pandas_df_strings, spark, tmp_path): temp_file_name = os.path.join(tmp_path, "temp_file.csv") df = spark.createDataFrame(pandas_df_strings) - df.write.csv(temp_file_name, quoteAll="force", header=False) + df.write.csv(temp_file_name, quoteAll="force") csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() @@ -166,7 +166,7 @@ def test_to_csv_quoting_on(self, pandas_df_strings, spark, tmp_path): def test_to_csv_quoting_quote_all(self, pandas_df_strings, spark, tmp_path): temp_file_name = os.path.join(tmp_path, "temp_file.csv") df = spark.createDataFrame(pandas_df_strings) - df.write.csv(temp_file_name, quoteAll=csv.QUOTE_ALL, header=False) + df.write.csv(temp_file_name, quoteAll=csv.QUOTE_ALL) csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() @@ -177,20 +177,22 @@ def test_to_csv_encoding_incorrect(self, pandas_df_strings, spark, tmp_path): with pytest.raises( InvalidInputException, match="Invalid Input Error: The only supported encoding option is 'UTF8" ): - df.write.csv(temp_file_name, encoding="nope", header=False) + df.write.csv(temp_file_name, encoding="nope") def test_to_csv_encoding_correct(self, pandas_df_strings, spark, tmp_path): temp_file_name = os.path.join(tmp_path, "temp_file.csv") df = spark.createDataFrame(pandas_df_strings) - df.write.csv(temp_file_name, encoding="UTF-8", header=False) + df.write.csv(temp_file_name, encoding="UTF-8") csv_rel = spark.read.csv(temp_file_name) assert df.collect() == csv_rel.collect() def test_compression_gzip(self, pandas_df_strings, spark, tmp_path): temp_file_name = os.path.join(tmp_path, "temp_file.csv") df = spark.createDataFrame(pandas_df_strings) - df.write.csv(temp_file_name, compression="gzip", header=False) + df.write.csv(temp_file_name, compression="gzip") # slightly convoluted - pyspark .read.csv does not take a compression argument - csv_rel = spark.createDataFrame(read_csv(temp_file_name, compression="gzip").df()) + csv_rel = spark.createDataFrame(read_csv(temp_file_name, compression="gzip", header=False).df()) + print(df.collect()) + print(csv_rel.collect()) assert df.collect() == csv_rel.collect() diff --git a/tools/pythonpkg/tests/fast/spark/test_spark_types.py b/tools/pythonpkg/tests/fast/spark/test_spark_types.py index f900820d4905..5fac33b3120d 100644 --- a/tools/pythonpkg/tests/fast/spark/test_spark_types.py +++ b/tools/pythonpkg/tests/fast/spark/test_spark_types.py @@ -46,7 +46,15 @@ def test_all_types_schema(self, spark): small_enum, medium_enum, large_enum, - 'union' + 'union', + fixed_int_array, + fixed_varchar_array, + fixed_nested_int_array, + fixed_nested_varchar_array, + fixed_struct_array, + struct_of_fixed_array, + fixed_array_of_int_list, + list_of_fixed_int_array ) from test_all_types() """ ) diff --git a/tools/pythonpkg/tests/fast/test_all_types.py b/tools/pythonpkg/tests/fast/test_all_types.py index 5b904fdfab7e..89a0f67b1267 100644 --- a/tools/pythonpkg/tests/fast/test_all_types.py +++ b/tools/pythonpkg/tests/fast/test_all_types.py @@ -89,6 +89,14 @@ def recursive_equality(o1, o2): "array_of_structs", "map", "union", + "fixed_int_array", + "fixed_varchar_array", + "fixed_nested_int_array", + "fixed_nested_varchar_array", + "fixed_struct_array", + "struct_of_fixed_array", + "fixed_array_of_int_list", + "list_of_fixed_int_array", ] @@ -220,6 +228,38 @@ def test_fetchall(self, cur_type): 'timestamp_ms': [(datetime.datetime(1990, 1, 1, 0, 0),)], 'timestamp_tz': [(datetime.datetime(1990, 1, 1, 0, 0, tzinfo=pytz.UTC),)], 'union': [('Frank',), (5,), (None,)], + 'fixed_int_array': [((None, 2, 3),), ((4, 5, 6),), (None,)], + 'fixed_varchar_array': [(('a', None, 'c'),), (('d', 'e', 'f'),), (None,)], + 'fixed_nested_int_array': [ + (((None, 2, 3), None, (None, 2, 3)),), + (((4, 5, 6), (None, 2, 3), (4, 5, 6)),), + (None,), + ], + 'fixed_nested_varchar_array': [ + ((('a', None, 'c'), None, ('a', None, 'c')),), + ((('d', 'e', 'f'), ('a', None, 'c'), ('d', 'e', 'f')),), + (None,), + ], + 'fixed_struct_array': [ + (({'a': None, 'b': None}, {'a': 42, 'b': '🦆🦆🦆🦆🦆🦆'}, {'a': None, 'b': None}),), + (({'a': 42, 'b': '🦆🦆🦆🦆🦆🦆'}, {'a': None, 'b': None}, {'a': 42, 'b': '🦆🦆🦆🦆🦆🦆'}),), + (None,), + ], + 'struct_of_fixed_array': [ + ({'a': (None, 2, 3), 'b': ('a', None, 'c')},), + ({'a': (4, 5, 6), 'b': ('d', 'e', 'f')},), + (None,), + ], + 'fixed_array_of_int_list': [ + (([], [42, 999, None, None, -42], []),), + (([42, 999, None, None, -42], [], [42, 999, None, None, -42]),), + (None,), + ], + 'list_of_fixed_int_array': [ + ([(None, 2, 3), (4, 5, 6), (None, 2, 3)],), + ([(4, 5, 6), (None, 2, 3), (4, 5, 6)],), + (None,), + ], } if cur_type in replacement_values: result = conn.execute("select " + replacement_values[cur_type]).fetchall() diff --git a/tools/pythonpkg/tests/fast/test_filesystem.py b/tools/pythonpkg/tests/fast/test_filesystem.py index 84649f13820e..0486298bf720 100644 --- a/tools/pythonpkg/tests/fast/test_filesystem.py +++ b/tools/pythonpkg/tests/fast/test_filesystem.py @@ -111,7 +111,7 @@ def test_null_bytes(self, duckdb_cursor: DuckDBPyConnection, memory: AbstractFil fh.write(b'hello\n\0world\0') duckdb_cursor.register_filesystem(memory) - duckdb_cursor.execute('select * from "memory://test.csv"') + duckdb_cursor.execute('select * from read_csv("memory://test.csv", header = 0)') assert duckdb_cursor.fetchall() == [('hello',), ('\0world\0',)] diff --git a/tools/pythonpkg/tests/fast/test_map.py b/tools/pythonpkg/tests/fast/test_map.py index d63501032115..894f10500a40 100644 --- a/tools/pythonpkg/tests/fast/test_map.py +++ b/tools/pythonpkg/tests/fast/test_map.py @@ -6,11 +6,27 @@ from conftest import NumpyPandas, ArrowPandas +# column count differs from bind +def evil1(df): + if len(df) == 0: + return df['col0'].to_frame() + else: + return df + + class TestMap(object): + @pytest.mark.parametrize('pandas', [NumpyPandas()]) + def test_evil_map(self, duckdb_cursor, pandas): + testrel = duckdb.values([1, 2]) + with pytest.raises(duckdb.InvalidInputException, match='Expected 1 columns from UDF, got 2'): + rel = testrel.map(evil1, schema={'i': str}) + df = rel.df() + print(df) + @pytest.mark.parametrize('pandas', [NumpyPandas()]) def test_map(self, duckdb_cursor, pandas): testrel = duckdb.values([1, 2]) - conn = duckdb.connect() + conn = duckdb_cursor conn.execute('CREATE TABLE t (a integer)') empty_rel = conn.table('t') @@ -18,13 +34,6 @@ def test_map(self, duckdb_cursor, pandas): newdf2 = testrel.map(lambda df: df['col0'].astype('string').to_frame()) newdf3 = testrel.map(lambda df: df) - # column count differs from bind - def evil1(df): - if len(df) == 0: - return df['col0'].to_frame() - else: - return df - # column type differs from bind def evil2(df): result = df.copy(deep=True) diff --git a/tools/pythonpkg/tests/fast/test_metatransaction.py b/tools/pythonpkg/tests/fast/test_metatransaction.py new file mode 100644 index 000000000000..158bb6a963b6 --- /dev/null +++ b/tools/pythonpkg/tests/fast/test_metatransaction.py @@ -0,0 +1,33 @@ +import pytest + +pd = pytest.importorskip("pandas") +np = pytest.importorskip("numpy") + +NUMBER_OF_ROWS = 200000 +NUMBER_OF_COLUMNS = 1 + + +class TestMetaTransaction(object): + def test_fetchmany(self, duckdb_cursor): + duckdb_cursor.execute("CREATE SEQUENCE id_seq") + column_names = ',\n'.join([f'column_{i} FLOAT' for i in range(1, NUMBER_OF_COLUMNS + 1)]) + create_table_query = f""" + CREATE TABLE my_table ( + id INTEGER DEFAULT nextval('id_seq'), + {column_names} + ) + """ + # Create a table containing a sequence + duckdb_cursor.execute(create_table_query) + + for i in range(20): + # Then insert a large amount of tuples, triggering a parallel execution + data = np.random.rand(NUMBER_OF_ROWS, NUMBER_OF_COLUMNS) + columns = [f'Column_{i+1}' for i in range(NUMBER_OF_COLUMNS)] + df = pd.DataFrame(data, columns=columns) + df_columns = ", ".join(df.columns) + # This gets executed in parallel, causing NextValFunction to be called in parallel + # stressing the MetaTransaction::Get concurrency + duckdb_cursor.execute(f"INSERT INTO my_table ({df_columns}) SELECT * FROM df") + print(f"inserted {i}") + duckdb_cursor.commit() diff --git a/tools/pythonpkg/tests/fast/test_type.py b/tools/pythonpkg/tests/fast/test_type.py index 2655fabb0f71..9350a4088149 100644 --- a/tools/pythonpkg/tests/fast/test_type.py +++ b/tools/pythonpkg/tests/fast/test_type.py @@ -71,10 +71,14 @@ def test_primitive_types(self): assert str(BIT) == 'BIT' assert str(INTERVAL) == 'INTERVAL' - def test_array_type(self): - type = duckdb.array_type(BIGINT) + def test_list_type(self): + type = duckdb.list_type(BIGINT) assert str(type) == 'BIGINT[]' + def test_array_type(self): + type = duckdb.array_type(BIGINT, 3) + assert str(type) == 'BIGINT[3]' + def test_struct_type(self): type = duckdb.struct_type({'a': BIGINT, 'b': BOOLEAN}) assert str(type) == 'STRUCT(a BIGINT, b BOOLEAN)' diff --git a/tools/pythonpkg/tests/fast/test_type_explicit.py b/tools/pythonpkg/tests/fast/test_type_explicit.py new file mode 100644 index 000000000000..23dcddc31a5a --- /dev/null +++ b/tools/pythonpkg/tests/fast/test_type_explicit.py @@ -0,0 +1,20 @@ +import duckdb + + +class TestMap(object): + + def test_array_list_tuple_ambiguity(self): + con = duckdb.connect() + res = con.sql("SELECT $arg", params={'arg': (1, 2)}).fetchall()[0][0] + assert res == [1, 2] + + # By using an explicit duckdb.Value with an array type, we should convert the input as an array + # and get an array (tuple) back + typ = duckdb.array_type(duckdb.typing.BIGINT, 2) + val = duckdb.Value((1, 2), typ) + res = con.sql("SELECT $arg", params={'arg': val}).fetchall()[0][0] + assert res == (1, 2) + + val = duckdb.Value([3, 4], typ) + res = con.sql("SELECT $arg", params={'arg': val}).fetchall()[0][0] + assert res == (3, 4) diff --git a/tools/shell/linenoise/history.cpp b/tools/shell/linenoise/history.cpp index 25912b8b7bcd..95d2fe2532ae 100644 --- a/tools/shell/linenoise/history.cpp +++ b/tools/shell/linenoise/history.cpp @@ -73,17 +73,42 @@ int History::Add(const char *line) { /* Add an heap allocated copy of the line in the history. * If we reached the max length, remove the older line. */ - linecopy = strdup(line); - if (!linecopy) { - return 0; - } if (!Terminal::IsMultiline()) { // replace all newlines with spaces + linecopy = strdup(line); + if (!linecopy) { + return 0; + } for (auto ptr = linecopy; *ptr; ptr++) { if (*ptr == '\n' || *ptr == '\r') { *ptr = ' '; } } + } else { + // replace all '\n' with '\r\n' + idx_t replaced_newline_count = 0; + idx_t len; + for (len = 0; line[len]; len++) { + if (line[len] == '\r' && line[len + 1] == '\n') { + // \r\n - skip past the \n + len++; + } else if (line[len] == '\n') { + replaced_newline_count++; + } + } + linecopy = (char *)malloc((len + replaced_newline_count + 1) * sizeof(char)); + idx_t pos = 0; + for (len = 0; line[len]; len++) { + if (line[len] == '\r' && line[len + 1] == '\n') { + // \r\n - skip past the \n + linecopy[pos++] = '\r'; + len++; + } else if (line[len] == '\n') { + linecopy[pos++] = '\r'; + } + linecopy[pos++] = line[len]; + } + linecopy[pos] = '\0'; } if (history_len == history_max_len) { free(history[0]); diff --git a/tools/shell/linenoise/linenoise.cpp b/tools/shell/linenoise/linenoise.cpp index 1ea5384d9633..9571d3dcdacc 100644 --- a/tools/shell/linenoise/linenoise.cpp +++ b/tools/shell/linenoise/linenoise.cpp @@ -1116,6 +1116,10 @@ int Linenoise::Edit() { if (c == TAB && completionCallback != NULL) { if (has_more_data) { // if there is more data, this tab character was added as part of copy-pasting data + // instead insert some spaces + if (EditInsertMulti(" ")) { + return -1; + } continue; } c = CompleteLine(current_sequence); @@ -1132,7 +1136,7 @@ int Linenoise::Edit() { Linenoise::Log("%d\n", (int)c); switch (c) { case CTRL_J: - case ENTER: /* enter */ + case ENTER: { /* enter */ if (Terminal::IsMultiline() && len > 0) { // check if this forms a complete SQL statement or not buf[len] = '\0'; @@ -1165,7 +1169,17 @@ int Linenoise::Edit() { RefreshLine(); hintsCallback = hc; } - return (int)len; + // rewrite \r\n to \n + idx_t new_len = 0; + for (idx_t i = 0; i < len; i++) { + if (buf[i] == '\r' && buf[i + 1] == '\n') { + continue; + } + buf[new_len++] = buf[i]; + } + buf[new_len] = '\0'; + return (int)new_len; + } case CTRL_O: case CTRL_G: case CTRL_C: /* ctrl-c */ { diff --git a/tools/shell/linenoise/rendering.cpp b/tools/shell/linenoise/rendering.cpp index b33fd85ab125..23b9ade3bef9 100644 --- a/tools/shell/linenoise/rendering.cpp +++ b/tools/shell/linenoise/rendering.cpp @@ -391,7 +391,60 @@ void InsertToken(tokenType insert_type, idx_t insert_pos, vector tokens = std::move(new_tokens); } -enum class ScanState { STANDARD, IN_SINGLE_QUOTE, IN_DOUBLE_QUOTE, IN_COMMENT }; +enum class ScanState { STANDARD, IN_SINGLE_QUOTE, IN_DOUBLE_QUOTE, IN_COMMENT, DOLLAR_QUOTED_STRING }; + +static void OpenBracket(vector &brackets, vector &cursor_brackets, idx_t pos, idx_t i) { + // check if the cursor is at this position + if (pos == i) { + // cursor is exactly on this position - always highlight this bracket + if (!cursor_brackets.empty()) { + cursor_brackets.clear(); + } + cursor_brackets.push_back(i); + } + if (cursor_brackets.empty() && ((i + 1) == pos || (pos + 1) == i)) { + // cursor is either BEFORE or AFTER this bracket and we don't have any highlighted bracket yet + // highlight this bracket + cursor_brackets.push_back(i); + } + brackets.push_back(i); +} + +static void CloseBracket(vector &brackets, vector &cursor_brackets, idx_t pos, idx_t i, + vector &errors) { + if (pos == i) { + // cursor is on this closing bracket + // clear any selected brackets - we always select this one + cursor_brackets.clear(); + } + if (brackets.empty()) { + // closing bracket without matching opening bracket + errors.push_back(i); + } else { + if (cursor_brackets.size() == 1) { + if (cursor_brackets.back() == brackets.back()) { + // this closing bracket matches the highlighted opening cursor bracket - highlight both + cursor_brackets.push_back(i); + } + } else if (cursor_brackets.empty() && (pos == i || (i + 1) == pos || (pos + 1) == i)) { + // no cursor bracket selected yet and cursor is BEFORE or AFTER this bracket + // add this bracket + cursor_brackets.push_back(i); + cursor_brackets.push_back(brackets.back()); + } + brackets.pop_back(); + } +} + +static void HandleBracketErrors(const vector &brackets, vector &errors) { + if (brackets.empty()) { + return; + } + // if there are unclosed brackets remaining not all brackets were closed + for (auto &bracket : brackets) { + errors.push_back(bracket); + } +} void Linenoise::AddErrorHighlighting(idx_t render_start, idx_t render_end, vector &tokens) const { static constexpr const idx_t MAX_ERROR_LENGTH = 2000; @@ -406,11 +459,14 @@ void Linenoise::AddErrorHighlighting(idx_t render_start, idx_t render_end, vecto // * single quotes without matching closing single quote // * double quote without matching double quote ScanState state = ScanState::STANDARD; - vector brackets; + vector brackets; // () + vector square_brackets; // [] + vector curly_brackets; // {} vector errors; vector cursor_brackets; vector comment_start; vector comment_end; + string dollar_quote_marker; idx_t quote_pos = 0; for (idx_t i = 0; i < len; i++) { auto c = buf[i]; @@ -434,45 +490,46 @@ void Linenoise::AddErrorHighlighting(idx_t render_start, idx_t render_end, vecto state = ScanState::IN_DOUBLE_QUOTE; quote_pos = i; break; - case '(': { - // check if the cursor is at this position - if (pos == i) { - // cursor is exactly on this position - always highlight this bracket - if (!cursor_brackets.empty()) { - cursor_brackets.clear(); - } - cursor_brackets.push_back(i); - } - if (cursor_brackets.empty() && ((i + 1) == pos || (pos + 1) == i)) { - // cursor is either BEFORE or AFTER this bracket and we don't have any highlighted bracket yet - // highlight this bracket - cursor_brackets.push_back(i); - } - brackets.push_back(i); + case '(': + OpenBracket(brackets, cursor_brackets, pos, i); + break; + case '[': + OpenBracket(square_brackets, cursor_brackets, pos, i); + break; + case '{': + OpenBracket(curly_brackets, cursor_brackets, pos, i); break; - } case ')': - if (pos == i) { - // cursor is on this closing bracket - // clear any selected brackets - we always select this one - cursor_brackets.clear(); + CloseBracket(brackets, cursor_brackets, pos, i, errors); + break; + case ']': + CloseBracket(square_brackets, cursor_brackets, pos, i, errors); + break; + case '}': + CloseBracket(curly_brackets, cursor_brackets, pos, i, errors); + break; + case '$': // dollar symbol + if (i + 1 >= len) { + // we need more than just a dollar + break; } - if (brackets.empty()) { - // closing bracket without matching opening bracket - errors.push_back(i); - } else { - if (cursor_brackets.size() == 1) { - if (cursor_brackets.back() == brackets.back()) { - // this closing bracket matches the highlighted opening cursor bracket - highlight both - cursor_brackets.push_back(i); - } - } else if (cursor_brackets.empty() && (pos == i || (i + 1) == pos || (pos + 1) == i)) { - // no cursor bracket selected yet and cursor is BEFORE or AFTER this bracket - // add this bracket - cursor_brackets.push_back(i); - cursor_brackets.push_back(brackets.back()); + if (buf[i + 1] >= '0' && buf[i + 1] <= '9') { + // $[numeric] is a parameter, not a dollar quoted string + break; + } + // dollar quoted string + state = ScanState::DOLLAR_QUOTED_STRING; + quote_pos = i; + // scan until the next $ + for (i++; i < len; i++) { + if (buf[i] == '$') { + break; } - brackets.pop_back(); + } + if (i < len) { + // found a complete marker - store it + idx_t marker_start = quote_pos + 1; + dollar_quote_marker = string(buf + marker_start, i - marker_start); } break; default: @@ -520,20 +577,52 @@ void Linenoise::AddErrorHighlighting(idx_t render_start, idx_t render_end, vecto } } break; + case ScanState::DOLLAR_QUOTED_STRING: { + // dollar-quoted string - all that will get us out is a $[marker]$ + if (c != '$') { + break; + } + if (i + 1 >= len) { + // no room for the final dollar + break; + } + // skip to the next dollar symbol + idx_t start = i + 1; + idx_t end = start; + while (end < len && buf[end] != '$') { + end++; + } + if (end >= len) { + // no final dollar found - continue as normal + break; + } + if (end - start != dollar_quote_marker.size()) { + // length mismatch - cannot match + break; + } + if (memcmp(buf + start, dollar_quote_marker.c_str(), dollar_quote_marker.size()) != 0) { + // marker mismatch + break; + } + // marker found! revert to standard state + dollar_quote_marker = string(); + state = ScanState::STANDARD; + i = end; + break; + } default: break; } } - if (state == ScanState::IN_DOUBLE_QUOTE || state == ScanState::IN_SINGLE_QUOTE) { + if (state == ScanState::IN_DOUBLE_QUOTE || state == ScanState::IN_SINGLE_QUOTE || + state == ScanState::DOLLAR_QUOTED_STRING) { // quote is never closed errors.push_back(quote_pos); } - if (!brackets.empty()) { - // if there are unclosed brackets remaining not all brackets were closed - for (auto &bracket : brackets) { - errors.push_back(bracket); - } - } + HandleBracketErrors(brackets, errors); + HandleBracketErrors(square_brackets, errors); + HandleBracketErrors(curly_brackets, errors); + // insert all the errors for highlighting for (auto &error : errors) { Linenoise::Log("Error found at position %llu\n", error); diff --git a/tools/shell/shell.c b/tools/shell/shell.c index f0e6f387110c..69aa74eabe78 100644 --- a/tools/shell/shell.c +++ b/tools/shell/shell.c @@ -10718,6 +10718,7 @@ struct ShellState { char rowSeparator[20]; /* Row separator character for MODE_Ascii */ char colSepPrior[20]; /* Saved column separator */ char rowSepPrior[20]; /* Saved row separator */ + int *colTypes; /* Types of each column */ int *colWidth; /* Requested width of each column in columnar modes */ int *actualWidth; /* Actual width of each column */ int nWidth; /* Number of slots in colWidth[] and actualWidth[] */ @@ -11584,6 +11585,28 @@ static void print_row_separator( fputs("\n", p->out); } +static void print_markdown_separator( + ShellState *p, + int nArg, + const char *zSep +){ + int i; + if( nArg>0 ){ + for(i=0; iout); + if (p->colTypes && (p->colTypes[i] == SQLITE_INTEGER || p->colTypes[i] == SQLITE_FLOAT)) { + // right-align numerics in tables + print_dashes(p->out, p->actualWidth[i]+1); + fputs(":", p->out); + } else { + print_dashes(p->out, p->actualWidth[i]+2); + } + } + fputs(zSep, p->out); + } + fputs("\n", p->out); +} + /* ** This is the callback routine that the shell ** invokes for each row of a query result. @@ -12705,6 +12728,10 @@ static void exec_prepared_stmt_columnar( for(i=0; icolTypes = realloc(p->colTypes, nColumn * sizeof(int)); + for(i=0; icolTypes[i] = sqlite3_column_type(pStmt, i); + } do{ if( (nRow+2)*nColumn >= nAlloc ){ nAlloc *= 2; @@ -12781,7 +12808,7 @@ static void exec_prepared_stmt_columnar( utf8_printf(p->out, "%*s%s%*s", (w-n)/2, "", azData[i], (w-n+1)/2, ""); fputs(i==nColumn-1?" |\n":" | ", p->out); } - print_row_separator(p, nColumn, "|"); + print_markdown_separator(p, nColumn, "|"); break; } case MODE_Box: { @@ -14233,7 +14260,6 @@ static void open_db(ShellState *p, int openFlags){ sqlite3_completion_init(p->db, 0, 0); sqlite3_uint_init(p->db, 0, 0); sqlite3_decimal_init(p->db, 0, 0); - sqlite3_ieee_init(p->db, 0, 0); #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) sqlite3_dbdata_init(p->db, 0, 0); #endif @@ -14778,12 +14804,20 @@ static void output_reset(ShellState *p){ p->out = stdout; } +static void printDatabaseError(const char *zErr) { + if (strstr(zErr, "Error: ")) { + utf8_printf(stderr, "%s\n", zErr); + } else { + utf8_printf(stderr, "Error: %s\n", zErr); + } +} + /* ** Print the current sqlite3_errmsg() value to stderr and return 1. */ static int shellDatabaseError(sqlite3 *db){ const char *zErr = sqlite3_errmsg(db); - utf8_printf(stderr, "Error: %s\n", zErr); + printDatabaseError(zErr); return 1; } @@ -15342,7 +15376,7 @@ static int arErrorMsg(ArCommand *pAr, const char *zFmt, ...){ va_start(ap, zFmt); z = sqlite3_vmprintf(zFmt, ap); va_end(ap); - utf8_printf(stderr, "Error: %s\n", z); + printDatabaseError(z); if( pAr->fromCmdLine ){ utf8_printf(stderr, "Use \"-A\" for more help\n"); }else{ @@ -15752,7 +15786,7 @@ static int arExecSql(ArCommand *pAr, const char *zSql){ char *zErr = 0; rc = sqlite3_exec(pAr->db, zSql, 0, 0, &zErr); if( zErr ){ - utf8_printf(stdout, "ERROR: %s\n", zErr); + printDatabaseError(zErr); sqlite3_free(zErr); } } @@ -16797,7 +16831,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb); if( pBackup==0 ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); + shellDatabaseError(pDest); close_db(pDest); return 1; } @@ -16806,7 +16840,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( rc==SQLITE_DONE ){ rc = 0; }else{ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); + shellDatabaseError(pDest); rc = 1; } close_db(pDest); @@ -16906,7 +16940,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_exec(p->db, "SELECT name, file FROM pragma_database_list", callback, &data, &zErrMsg); if( zErrMsg ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); rc = 1; } @@ -17517,7 +17551,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_free(zSql); if( rc ){ if (pStmt) sqlite3_finalize(pStmt); - utf8_printf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); import_cleanup(&sCtx); rc = 1; goto meta_command_exit; @@ -17545,7 +17579,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); sqlite3_free(zSql); if( rc ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); if (pStmt) sqlite3_finalize(pStmt); import_cleanup(&sCtx); rc = 1; @@ -17811,7 +17845,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "Error: %s\n", zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); rc = 1; } @@ -18203,7 +18237,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rx = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); sqlite3_free(zSql); if( rx!=SQLITE_OK ){ - utf8_printf(p->out, "Error: %s\n", sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); sqlite3_finalize(pStmt); pStmt = 0; rc = 1; @@ -18348,7 +18382,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main"); if( pBackup==0 ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); close_db(pSrc); return 1; } @@ -18366,7 +18400,7 @@ static int do_meta_command(char *zLine, ShellState *p){ raw_printf(stderr, "Error: source database is busy\n"); rc = 1; }else{ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); rc = 1; } close_db(pSrc); @@ -18440,7 +18474,7 @@ static int do_meta_command(char *zLine, ShellState *p){ freeText(&sSelect); } if( zErrMsg ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); rc = 1; }else if( rc != SQLITE_OK ){ @@ -19517,7 +19551,7 @@ static int do_meta_command(char *zLine, ShellState *p){ const char *error = NULL; if (linenoiseParseOption((const char**) azArg, nArg, &error)) { if (error) { - utf8_printf(stderr, "Error: %s\n", error); + printDatabaseError(error); rc = 1; } } else { @@ -19630,19 +19664,12 @@ static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ rc = shell_exec(p, zSql, &zErrMsg); END_TIMER; if( rc || zErrMsg ){ - char zPrefix[100]; - if( in!=0 || !stdin_is_interactive ){ - sqlite3_snprintf(sizeof(zPrefix), zPrefix, - "Error: near line %d:", startline); - }else{ - sqlite3_snprintf(sizeof(zPrefix), zPrefix, "Error:"); - } if( zErrMsg!=0 ){ - utf8_printf(stderr, "%s %s\n", zPrefix, zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); zErrMsg = 0; }else{ - utf8_printf(stderr, "%s %s\n", zPrefix, sqlite3_errmsg(p->db)); + shellDatabaseError(p->db); } return 1; }else if( ShellHasFlag(p, SHFLG_CountChanges) ){ @@ -20464,7 +20491,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ open_db(&data, 0); rc = shell_exec(&data, z, &zErrMsg); if( zErrMsg!=0 ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); if( bail_on_error ){ free(azCmd); @@ -20521,7 +20548,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ open_db(&data, 0); rc = shell_exec(&data, azCmd[i], &zErrMsg); if( zErrMsg!=0 ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + printDatabaseError(zErrMsg); sqlite3_free(zErrMsg); free(azCmd); return rc!=0 ? rc : 1; @@ -20592,6 +20619,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ for(i=0; iprepared) { - pStmt->db->last_error = ErrorData("Attempting sqlite3_step() on a non-successfully prepared statement"); - return nullptr; - } - if (pStmt->result) { - pStmt->db->last_error = ErrorData("Statement has already been executed"); - return nullptr; - } - pStmt->result = pStmt->prepared->Execute(pStmt->bound_values, false); - if (pStmt->result->HasError()) { - // error in execute: clear prepared statement - pStmt->db->last_error = pStmt->result->GetErrorObject(); - pStmt->prepared = nullptr; - return nullptr; - } - auto &materialized = (MaterializedQueryResult &)*pStmt->result; - auto properties = pStmt->prepared->GetStatementProperties(); - if (properties.return_type == StatementReturnType::CHANGED_ROWS && materialized.RowCount() > 0) { - // update total changes - auto row_changes = materialized.Collection().GetRows().GetValue(0, 0); - if (!row_changes.IsNull() && row_changes.DefaultTryCastAs(LogicalType::BIGINT)) { - pStmt->db->last_changes = row_changes.GetValue(); - pStmt->db->total_changes += row_changes.GetValue(); + try { + if (!pStmt) { + return nullptr; } + if (!pStmt->prepared) { + pStmt->db->last_error = ErrorData("Attempting sqlite3_step() on a non-successfully prepared statement"); + return nullptr; + } + if (pStmt->result) { + pStmt->db->last_error = ErrorData("Statement has already been executed"); + return nullptr; + } + pStmt->result = pStmt->prepared->Execute(pStmt->bound_values, false); + if (pStmt->result->HasError()) { + // error in execute: clear prepared statement + pStmt->db->last_error = pStmt->result->GetErrorObject(); + pStmt->prepared = nullptr; + return nullptr; + } + auto &materialized = (MaterializedQueryResult &)*pStmt->result; + auto properties = pStmt->prepared->GetStatementProperties(); + if (properties.return_type == StatementReturnType::CHANGED_ROWS && materialized.RowCount() > 0) { + // update total changes + auto row_changes = materialized.Collection().GetRows().GetValue(0, 0); + if (!row_changes.IsNull() && row_changes.DefaultTryCastAs(LogicalType::BIGINT)) { + pStmt->db->last_changes = row_changes.GetValue(); + pStmt->db->total_changes += row_changes.GetValue(); + } + } + if (properties.return_type != StatementReturnType::QUERY_RESULT) { + // only SELECT statements return results + return nullptr; + } + BoxRendererConfig config; + if (max_rows != 0) { + config.max_rows = max_rows; + } + if (null_value) { + config.null_value = null_value; + } + if (columnar) { + config.render_mode = RenderMode::COLUMNS; + } + config.max_width = max_width; + BoxRenderer renderer(config); + auto result_rendering = + renderer.ToString(*pStmt->db->con->context, pStmt->result->names, materialized.Collection()); + return sqlite3_strdup(result_rendering.c_str()); + } catch (std::exception &ex) { + string error_str = ErrorData(ex).Message() + "\n"; + return sqlite3_strdup(error_str.c_str()); } - if (properties.return_type != StatementReturnType::QUERY_RESULT) { - // only SELECT statements return results - return nullptr; - } - BoxRendererConfig config; - if (max_rows != 0) { - config.max_rows = max_rows; - } - if (null_value) { - config.null_value = null_value; - } - if (columnar) { - config.render_mode = RenderMode::COLUMNS; - } - config.max_width = max_width; - BoxRenderer renderer(config); - auto result_rendering = - renderer.ToString(*pStmt->db->con->context, pStmt->result->names, materialized.Collection()); - return sqlite3_strdup(result_rendering.c_str()); } /* Prepare the next result to be retrieved */ @@ -898,132 +903,114 @@ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3 *db) { return SQLITE_ERROR; } -// some code borrowed from sqlite -// its probably best to match its behavior - -typedef uint8_t u8; - -/* -** Token types used by the sqlite3_complete() routine. See the header -** comments on that procedure for additional information. -*/ -#define tkSEMI 0 -#define tkWS 1 -#define tkOTHER 2 - -const unsigned char sqlite3CtypeMap[256] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00..07 ........ */ - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */ - 0x01, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x80, /* 20..27 !"#$%&' */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */ - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */ - 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */ - - 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */ - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */ - 0x02, 0x02, 0x02, 0x80, 0x00, 0x00, 0x00, 0x40, /* 58..5f XYZ[\]^_ */ - 0x80, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */ - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */ - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */ - 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */ - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 80..87 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 88..8f ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 90..97 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 98..9f ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a0..a7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a8..af ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b0..b7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b8..bf ........ */ - - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c0..c7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c8..cf ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d0..d7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d8..df ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e0..e7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e8..ef ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* f0..f7 ........ */ - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 /* f8..ff ........ */ -}; +enum class SQLParseState { SEMICOLON, WHITESPACE, NORMAL }; -// TODO this can probably be simplified -#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C] & 0x46) != 0) +const char *skipDollarQuotedString(const char *zSql, const char *delimiterStart, idx_t delimiterLength) { + for (; *zSql; zSql++) { + if (*zSql == '$') { + // found a dollar + // move forward and find the next dollar + zSql++; + auto start = zSql; + while (*zSql && *zSql != '$') { + zSql++; + } + if (!zSql[0]) { + // reached end of string while looking for the dollar + return nullptr; + } + // check if the dollar quoted string name matches + if (delimiterLength == idx_t(zSql - start)) { + if (memcmp(start, delimiterStart, delimiterLength) == 0) { + return zSql; + } + } + // dollar does not match - reset position to start and keep looking + zSql = start - 1; + } + } + // unterminated + return nullptr; +} int sqlite3_complete(const char *zSql) { - u8 state = 0; /* Current state, using numbers defined in header comment */ - u8 token; /* Value of the next token */ - - /* If triggers are not supported by this compile then the statement machine - ** used to detect the end of a statement is much simpler - */ - static const u8 trans[3][3] = { - /* Token: */ - /* State: ** SEMI WS OTHER */ - /* 0 INVALID: */ { - 1, - 0, - 2, - }, - /* 1 START: */ - { - 1, - 1, - 2, - }, - /* 2 NORMAL: */ - { - 1, - 2, - 2, - }, - }; - - while (*zSql) { + auto state = SQLParseState::NORMAL; + + for (; *zSql; zSql++) { + SQLParseState next_state; switch (*zSql) { - case ';': { /* A semicolon */ - token = tkSEMI; + case ';': + next_state = SQLParseState::SEMICOLON; break; - } case ' ': case '\r': case '\t': case '\n': case '\f': { /* White space is ignored */ - token = tkWS; + next_state = SQLParseState::WHITESPACE; break; } case '/': { /* C-style comments */ if (zSql[1] != '*') { - token = tkOTHER; + next_state = SQLParseState::NORMAL; break; } zSql += 2; while (zSql[0] && (zSql[0] != '*' || zSql[1] != '/')) { zSql++; } - if (zSql[0] == 0) + if (zSql[0] == 0) { + // unterminated c-style string return 0; + } zSql++; - token = tkWS; + next_state = SQLParseState::WHITESPACE; break; } case '-': { /* SQL-style comments from "--" to end of line */ if (zSql[1] != '-') { - token = tkOTHER; + next_state = SQLParseState::NORMAL; break; } while (*zSql && *zSql != '\n') { zSql++; } - if (*zSql == 0) - return state == 1; - token = tkWS; + if (*zSql == 0) { + // unterminated SQL-style comment - return whether or not we had a semicolon right before it + return state == SQLParseState::SEMICOLON ? 1 : 0; + } + next_state = SQLParseState::WHITESPACE; + break; + } + case '$': { /* Dollar-quoted strings */ + if (zSql[1] >= '0' && zSql[1] <= '9') { + // numeric prepared statement parameter + next_state = SQLParseState::NORMAL; + break; + } + zSql++; + auto start = zSql; + // look for the next $ symbol (which is the terminator + while (*zSql && *zSql != '$') { + zSql++; + } + if (zSql[0] == 0) { + // unterminated dollar string + return 0; + } + const char *delimiterStart = start; + idx_t delimiterLength = zSql - start; + zSql++; + // skip the dollar quoted string + zSql = skipDollarQuotedString(zSql, delimiterStart, delimiterLength); + if (!zSql) { + // unterminated dollar string + return 0; + } + next_state = SQLParseState::WHITESPACE; break; } - case '`': /* Grave-accent quoted symbols used by MySQL */ + // case '`': /* Grave-accent quoted symbols used by MySQL */ case '"': /* single- and double-quoted strings */ case '\'': { int c = *zSql; @@ -1031,32 +1018,22 @@ int sqlite3_complete(const char *zSql) { while (*zSql && *zSql != c) { zSql++; } - if (*zSql == 0) + if (*zSql == 0) { + // unterminated single or double quoted string return 0; - token = tkOTHER; - break; - } - default: { - - if (IdChar((u8)*zSql)) { - /* Keywords and unquoted identifiers */ - int nId; - for (nId = 1; IdChar(zSql[nId]); nId++) { - } - token = tkOTHER; - - zSql += nId - 1; - } else { - /* Operators and special symbols */ - token = tkOTHER; } + next_state = SQLParseState::WHITESPACE; break; } + default: + next_state = SQLParseState::NORMAL; + } + // white space is ignored (no change in state) + if (next_state != SQLParseState::WHITESPACE) { + state = next_state; } - state = trans[state][token]; - zSql++; } - return state == 1; + return state == SQLParseState::SEMICOLON ? 1 : 0; } // length of varchar or blob value diff --git a/tools/sqlite3_api_wrapper/test/test_sqlite3_api_wrapper.cpp b/tools/sqlite3_api_wrapper/test/test_sqlite3_api_wrapper.cpp index 653d962ee51f..c5f95c7ea74d 100644 --- a/tools/sqlite3_api_wrapper/test/test_sqlite3_api_wrapper.cpp +++ b/tools/sqlite3_api_wrapper/test/test_sqlite3_api_wrapper.cpp @@ -335,3 +335,33 @@ TEST_CASE("Test rollback of aborted transaction", "[sqlite3wrapper]") { // can start a transaction again after a rollback REQUIRE(db.Execute("START TRANSACTION")); } + +TEST_CASE("Test sqlite3_complete", "[sqlite3wrapper]") { + REQUIRE(sqlite3_complete("SELECT $$ this is a dollar quoted string without a marker $$;") == 1); + REQUIRE(sqlite3_complete("SELECT $this$is a dollar quoted string$this$;") == 1); + REQUIRE(sqlite3_complete("SELECT $this$this$;") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a non-terminated dollar quoted string;") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a non-terminated dollar quoted string;$") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a non-terminated dollar quoted string;$this") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a non-terminated dollar quoted string;$xxx$") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a terminated dollar quoted string;$xxx$$this$") == 0); + REQUIRE(sqlite3_complete("SELECT $this$is a terminated dollar quoted string;$xxx$$this$;") == 1); + REQUIRE(sqlite3_complete("SELECT $this$$$is a nested $x$ what what $x$ dollar quoted string;$$$this$;") == 1); + REQUIRE(sqlite3_complete("") == 0); + REQUIRE(sqlite3_complete("S") == 0); + REQUIRE(sqlite3_complete("SELECT 42") == 0); + REQUIRE(sqlite3_complete("SELECT 42;") == 1); + REQUIRE(sqlite3_complete("--comment on first line\nselect 42;") == 1); + REQUIRE(sqlite3_complete("SELECT 42; \n\n\t\t\n\f\t ") == 1); + REQUIRE(sqlite3_complete("SELECT 42;--this is a comment") == 1); + REQUIRE(sqlite3_complete("SELECT 42; --this is a comment") == 1); + REQUIRE(sqlite3_complete("SELECT 'quoted semicolon;") == 0); + REQUIRE(sqlite3_complete("SELECT 'quoted semicolon\nwith newline\n;") == 0); + REQUIRE(sqlite3_complete("SELECT 'quoted semicolon ;\nwith ;; newline\nnow terminated';") == 1); + REQUIRE(sqlite3_complete("SELECT \"double-quoted semicolon ;;") == 0); + REQUIRE(sqlite3_complete("SELECT 42;\n\t\n--this is a comment") == 1); + REQUIRE(sqlite3_complete("SELECT 42;\n\t\n--this is a comment\nS") == 0); + REQUIRE(sqlite3_complete("SELECT 42; /* c-style comment *//*followed by another one */ --and this one") == 1); + REQUIRE(sqlite3_complete("SELECT 'thisis a string with '';") == 0); + REQUIRE(sqlite3_complete("SELECT 'thisis a string with '';;'' escapes';") == 1); +} diff --git a/tools/swift/duckdb-swift/Sources/DuckDB/Column.swift b/tools/swift/duckdb-swift/Sources/DuckDB/Column.swift index ab537790eb87..2a4451a78fb6 100644 --- a/tools/swift/duckdb-swift/Sources/DuckDB/Column.swift +++ b/tools/swift/duckdb-swift/Sources/DuckDB/Column.swift @@ -61,17 +61,16 @@ public struct Column { private let result: ResultSet private let columnIndex: DBInt - private let itemAt: @Sendable (DBInt) -> DataType? + private let unwrap: @Sendable (Vector.Element) throws -> DataType? - init(result: ResultSet, columnIndex: DBInt) where DataType == Void { - let transformer = result.transformer(forColumn: columnIndex, to: Void.self) - self.init(result: result, columnIndex: columnIndex, itemAt: transformer) - } - - init(result: ResultSet, columnIndex: DBInt, itemAt: @escaping @Sendable (DBInt) -> DataType?) { + init( + result: ResultSet, + columnIndex: DBInt, + unwrap: @escaping @Sendable (Vector.Element) throws -> DataType? + ) { self.result = result self.columnIndex = columnIndex - self.itemAt = itemAt + self.unwrap = unwrap } /// The name of the table column @@ -108,7 +107,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Void.Type) -> Column { - .init(result: result, columnIndex: columnIndex) + .init(result: result, columnIndex: columnIndex) { $0.unwrapNull() ? nil : () } } /// Casts the column to the given type @@ -120,8 +119,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Bool.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Bool.self) } } /// Casts the column to the given type @@ -136,8 +134,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Int.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Int.self) } } /// Casts the column to the given type @@ -149,8 +146,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Int8.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Int8.self) } } /// Casts the column to the given type @@ -162,8 +158,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Int16.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Int16.self) } } /// Casts the column to the given type @@ -175,8 +170,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Int32.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Int32.self) } } /// Casts the column to the given type @@ -188,8 +182,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Int64.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Int64.self) } } /// Casts the column to the given type @@ -201,8 +194,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: IntHuge.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(IntHuge.self) } } /// Casts the column to the given type @@ -214,8 +206,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UIntHuge.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UIntHuge.self) } } /// Casts the column to the given type @@ -230,8 +221,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UInt.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UInt.self) } } /// Casts the column to the given type @@ -243,8 +233,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UInt8.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UInt8.self) } } /// Casts the column to the given type @@ -256,8 +245,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UInt16.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UInt16.self) } } /// Casts the column to the given type @@ -269,8 +257,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UInt32.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UInt32.self) } } /// Casts the column to the given type @@ -282,8 +269,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UInt64.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UInt64.self) } } /// Casts the column to the given type @@ -295,8 +281,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Float.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Float.self) } } /// Casts the column to the given type @@ -308,8 +293,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Double.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(Double.self) } } /// Casts the column to the given type @@ -321,8 +305,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: String.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(String.self) } } /// Casts the column to the given type @@ -334,8 +317,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: UUID.Type) -> Column { - let transformer = result.transformer(forColumn: columnIndex, to: type) - return .init(result: result, columnIndex: columnIndex, itemAt: transformer) + .init(result: result, columnIndex: columnIndex) { try $0.unwrap(UUID.self) } } /// Casts the column to the given type @@ -347,8 +329,7 @@ public extension Column { /// - Parameter type: the native Swift type to cast to /// - Returns: a typed DuckDB result set ``Column`` func cast(to type: Time.Type) -> Column